Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
1.3 kB · 39 lines
TypeScript
at main
12345678910111213141516171819202122232425262728293031323334353637383940import { useState } from 'react'import { useInterval } from 'usehooks-ts'
export type MemoryUsageStatus = 'normal' | 'high' | 'critical'
export type MemoryUsageInfo = { heapUsed: number status: MemoryUsageStatus}
const HIGH_MEMORY_THRESHOLD = 1.5 * 1024 * 1024 * 1024 // 1.5GB in bytesconst CRITICAL_MEMORY_THRESHOLD = 2.5 * 1024 * 1024 * 1024 // 2.5GB in bytes
/** * Hook to monitor Node.js process memory usage. * Polls every 10 seconds; returns null while status is 'normal'. */export function useMemoryUsage(): MemoryUsageInfo | null { const [memoryUsage, setMemoryUsage] = useState<MemoryUsageInfo | null>(null)
useInterval(() => { const heapUsed = process.memoryUsage().heapUsed const status: MemoryUsageStatus = heapUsed >= CRITICAL_MEMORY_THRESHOLD ? 'critical' : heapUsed >= HIGH_MEMORY_THRESHOLD ? 'high' : 'normal' setMemoryUsage(prev => { // Bail when status is 'normal' — nothing is shown, so heapUsed is // irrelevant and we avoid re-rendering the whole Notifications subtree // every 10 seconds for the 99%+ of users who never reach 1.5GB. if (status === 'normal') return prev === null ? prev : null return { heapUsed, status } }) }, 10_000)
return memoryUsage}