diff --git a/CLAUDE.md b/CLAUDE.md index b6893070..88376870 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,7 +35,7 @@ When user says "COM": 1. Increment version in BOTH `package.json` AND `CLAUDE.md` (verify they match with `grep version package.json && grep Version CLAUDE.md`) 2. Run: `git add -A && git commit -m "chore: bump version to X.XXXX" && git push && npm run build && systemctl --user restart claudeman-web` -**Version**: 0.1613 (must match `package.json`) +**Version**: 0.1614 (must match `package.json`) ## Project Overview diff --git a/package.json b/package.json index fda20a58..dbe3a854 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claudeman", - "version": "0.1613", + "version": "0.1614", "description": "The missing control plane for Claude Code - run 20 autonomous agents with real-time monitoring and session persistence", "type": "module", "main": "dist/index.js", diff --git a/src/web/server.ts b/src/web/server.ts index c4c61533..8f6faf50 100644 --- a/src/web/server.ts +++ b/src/web/server.ts @@ -3948,10 +3948,25 @@ NOW: Generate the implementation plan for the task above. Think step by step.`; // Get system CPU and memory usage private getSystemStats(): { cpu: number; memory: { usedMB: number; totalMB: number; percent: number } } { try { - // Memory stats const totalMem = totalmem(); - const freeMem = freemem(); - const usedMem = totalMem - freeMem; + + // macOS: os.freemem() only returns truly free pages, not cached/purgeable memory. + // Use vm_stat to get accurate used memory (wired + active + compressed). + let usedMem: number; + if (process.platform === 'darwin') { + try { + const vmstat = execSync('vm_stat', { encoding: 'utf-8', timeout: 2000 }); + const pageSize = parseInt(vmstat.match(/page size of (\d+)/)?.[1] || '4096', 10); + const wired = parseInt(vmstat.match(/Pages wired down:\s+(\d+)/)?.[1] || '0', 10); + const active = parseInt(vmstat.match(/Pages active:\s+(\d+)/)?.[1] || '0', 10); + const compressed = parseInt(vmstat.match(/Pages occupied by compressor:\s+(\d+)/)?.[1] || '0', 10); + usedMem = (wired + active + compressed) * pageSize; + } catch { + usedMem = totalMem - freemem(); + } + } else { + usedMem = totalMem - freemem(); + } // CPU load average (1 min) as percentage (rough approximation) const load = loadavg()[0];