1c6dfea5b5
Dashboard → System Health is grouped into AgentHub, Machine and Agent
activity. The machine (GET /api/host, every signed-in user) is drawn by
components/health/HostHealth.tsx: host card beside the CPU/memory history,
then CPU (threads as compact cells + temperatures/GPUs), disks & network,
busiest processes, and per-user tiles. Concurrency bars each show their own
agent type on hover.
The Health Score (client/src/lib/healthScore.ts) is now 100 minus what each
check costs, between an amber and a red threshold: event-loop p99
(server/lib/loop-delay.js, shared with /api/metrics), Linux PSI pressure for
CPU, memory and disk I/O (/api/host `pressure`; load per core without PSI),
RAM, the database's disk, V8 heap, hooks silent while agents work, and agent
errors in the last 24 h. All-time success rate, API errors and the transcript
cache hit rate no longer count. /api/settings/info adds server.event_loop and
activity {last_event_at, working_agents, agents_24h}.
Administration: a user row opens its detail in place (GET
/api/users/:id/details — spend, account pool share, live panes, workspaces,
newest sessions); the server panel is gone, member tmux folded into the table;
the Sessions list shows each row's owner in server mode.
188 lines
8.0 KiB
JSON
188 lines
8.0 KiB
JSON
{
|
||
"title": "Dashboard",
|
||
"subtitle": "Real-time overview of Claude Code agent activity",
|
||
"totalSessions": "Total Sessions",
|
||
"activeAgents": "Active Agents",
|
||
"activeSubagents": "Active Subagents",
|
||
"eventsToday": "Events Today",
|
||
"totalEvents": "Total Events",
|
||
"totalCost": "Total Cost",
|
||
"viewAll": "View All",
|
||
"activeAgentsSection": "Active Agents",
|
||
"recentActivity": "Recent Activity",
|
||
"noAgents": "No active agents",
|
||
"noAgentsDesc": "Agents will appear here when a Claude Code session is running.",
|
||
"noActivity": "No activity yet",
|
||
"noActivityDesc": "Events from Claude Code sessions will stream here in real-time.",
|
||
"failedLoad": "Failed to load data",
|
||
"activeTrend": " active",
|
||
"totalTrend": " in active sessions",
|
||
"tabs": {
|
||
"label": "Dashboard views",
|
||
"analytics": "Analytics",
|
||
"monitor": "Monitor",
|
||
"health": "Health"
|
||
},
|
||
"collapseSubagents": "Collapse subagents",
|
||
"expandSubagents": "Expand subagents",
|
||
"needsYou": {
|
||
"title": "Needs you",
|
||
"since": "waiting {{ago}}"
|
||
},
|
||
"health": {
|
||
"heap": "V8 Heap",
|
||
"heapTip": "V8 Heap: {{pct}}% used\n{{used}} / {{limit}} limit\nAllocated: {{allocated}}\nExternal: {{external}}",
|
||
"storage": "Storage",
|
||
"writeVelocityTip": "Write velocity (events):\n5 min: {{m5}}\n15 min: {{m15}}\n1 hr: {{h1}}",
|
||
"database": "Database",
|
||
"recordsTip": "Record distribution\n\nSessions: {{sessions}} ({{sessPct}}%)\nAgents: {{agents}} ({{agentPct}}%)\nEvents: {{events}} ({{eventPct}}%)\n\nTotal: {{total}} records",
|
||
"total": "total",
|
||
"sessions": "Sessions",
|
||
"agents": "Agents",
|
||
"events": "Events",
|
||
"score": "Health Score",
|
||
"formula": "Formula",
|
||
"cacheTip": "Transcript cache hit rate: {{pct}}% (shown, not scored — it restarts empty with the server)",
|
||
"compact": "Compact",
|
||
"compactTip": "Transcript compactions: {{count}}\nReduces the context window by summarizing turns.",
|
||
"saved": "Saved",
|
||
"savedTip": "Tokens recovered: {{tokens}}\nFreed by compaction.",
|
||
"tokenUsage": "Token Usage",
|
||
"totalSuffix": "{{value}} total",
|
||
"modelTip": "{{model}}\nInput: {{input}}\nOutput: {{output}}\nCache read: {{cacheRead}}\nShare: {{pct}}%",
|
||
"noModelData": "No model data",
|
||
"concurrency": "Concurrency",
|
||
"intervals_one": "{{count}} agent type",
|
||
"intervals_other": "{{count}} agent types",
|
||
"concurrencyTip": "Peak: {{peak}} parallel sessions\nActive intervals: {{active}}\nAvg: {{avg}}",
|
||
"laneTip": "{{name}}\n{{count}} agents\nRuns {{start}}–{{end}}% of the session (avg)",
|
||
"noConcurrencyData": "No concurrency data",
|
||
"peak": "Peak",
|
||
"peakTip": "Peak: {{count}} sessions running simultaneously.",
|
||
"active": "Active",
|
||
"activeTip": "{{active}} of {{total}} intervals have active sessions.",
|
||
"avg": "Avg",
|
||
"avgTip": "Average concurrency across all intervals.",
|
||
"toolUsage": "Tool Usage",
|
||
"top": "top {{count}}",
|
||
"invocationsTip_one": "{{tool}}: {{formatted}} invocation",
|
||
"invocationsTip_other": "{{tool}}: {{formatted}} invocations",
|
||
"noToolData": "No tool data yet",
|
||
"subagentEffectiveness": "Subagent Effectiveness",
|
||
"defaultType": "default",
|
||
"effectivenessTip": "{{type}}\nSuccess: {{pct}}%\nTotal: {{total}} · OK: {{ok}} · Errors: {{errors}}",
|
||
"noSubagentData": "No subagent data yet",
|
||
"integration": "Integration",
|
||
"hooksActive": "Active",
|
||
"hookTip": "Path: {{path}}\nStatus: {{status}}",
|
||
"connected": "Connected",
|
||
"disconnected": "Disconnected",
|
||
"noHooks": "No project hooks registered",
|
||
"wsTip": "WebSocket connections: {{count}}\nProtocol: RFC 6455",
|
||
"wsActive": "WebSocket active",
|
||
"connections_one": "{{count}} connection",
|
||
"connections_other": "{{count}} connections",
|
||
"platform": "Platform",
|
||
"journalMode": "Journal mode",
|
||
"synchronous": "Synchronous",
|
||
"autoVacuum": "Auto-vacuum",
|
||
"foreignKeys": "Foreign keys",
|
||
"busyTimeout": "Busy timeout",
|
||
"groupApp": "AgentHub",
|
||
"groupAppHint": "How the dashboard itself is doing: score, database, sessions at once",
|
||
"groupMachine": "Machine",
|
||
"groupMachineHint": "The computer AgentHub runs on: CPU, memory, disks, processes",
|
||
"groupActivity": "Agent activity",
|
||
"groupActivityHint": "What the agents used: tokens by model, tools, subagents",
|
||
"scoreFormula": "100 minus what each check costs:",
|
||
"scoreResult": "= {{score}} / 100",
|
||
"check": {
|
||
"loop": "AgentHub response",
|
||
"cpu": "CPU wait",
|
||
"memory": "Memory wait",
|
||
"io": "Disk wait",
|
||
"ram": "RAM in use",
|
||
"disk": "Data disk",
|
||
"heap": "V8 heap",
|
||
"hooks": "Last hook",
|
||
"agents": "Agent errors 24h"
|
||
},
|
||
"checkTip": {
|
||
"loop": "How long AgentHub's event loop was held up (p99 over the last minute). Every page, hook and terminal keystroke waits this long.",
|
||
"cpu": "CPU pressure (Linux PSI, last 10 s): share of time tasks waited for a free CPU — the machine feels slow above a few %.",
|
||
"cpuLoad": "Load per core (1 min) — this machine has no PSI, so CPU wait is estimated from load.",
|
||
"memory": "Memory pressure (Linux PSI, last 10 s): share of time tasks stalled reclaiming or swapping memory.",
|
||
"io": "Disk I/O pressure (Linux PSI, last 10 s): share of time tasks waited on the disk — a slow or busy HDD shows here.",
|
||
"ram": "Memory in use (total minus available).",
|
||
"disk": "How full the disk holding AgentHub's database is ({{mount}}).",
|
||
"heap": "AgentHub's V8 heap against its limit.",
|
||
"hooks": "Minutes since the last hook event, counted only while an agent is working: silence then means the dashboard stopped seeing it.",
|
||
"agents": "Agents that ended in the last 24 h with an error (errors / finished; needs at least 5)."
|
||
},
|
||
"checkNa": "Not measured here — costs nothing.",
|
||
"checkThresholds": "Amber from {{warn}}{{unit}}, red from {{bad}}{{unit}}",
|
||
"checkPenalty": "Costs {{n}} of up to {{max}} points",
|
||
"hooksMissing": "not installed",
|
||
"hooksIdle": "idle",
|
||
"minutesAgo": "{{n}} min ago",
|
||
"verdict": {
|
||
"ok": "Healthy",
|
||
"warn": "Degraded",
|
||
"bad": "Unhealthy"
|
||
},
|
||
"allOk": "Every check is fine",
|
||
"badCount_one": "{{count}} red",
|
||
"badCount_other": "{{count}} red",
|
||
"warnCount_one": "{{count}} amber",
|
||
"warnCount_other": "{{count}} amber",
|
||
"lagGroup": "Lag",
|
||
"systemGroup": "Capacity & signals"
|
||
},
|
||
"errorBoundary": {
|
||
"title": "Something went wrong",
|
||
"body": "This page failed to load. Reloading usually fixes it — for example after the dashboard was updated.",
|
||
"reload": "Reload"
|
||
},
|
||
"host": {
|
||
"uptimeDays": "{{d}} d {{h}} h",
|
||
"uptimeHours": "{{h}} h {{m}} min",
|
||
"cpu": "CPU",
|
||
"cpuHelp": "Share of the whole machine: 100% means every core is busy.",
|
||
"memory": "Memory",
|
||
"swap": "Swap",
|
||
"free": "free",
|
||
"usageUnavailable": "Per-user usage is read from /proc and is only available on Linux.",
|
||
"hostGroup": "Host account (AgentHub and other host processes)",
|
||
"systemGroup": "System (root and other accounts)",
|
||
"homesBadge": "homes",
|
||
"historyTitle": "History",
|
||
"historyHelp": "Kept in memory, one point every {{s}} s, since the server started at {{at}}.",
|
||
"historyCpu": "CPU (% of the machine)",
|
||
"historyMemory": "Memory used (%)",
|
||
"range": "Range",
|
||
"range1h": "1 h",
|
||
"range6h": "6 h",
|
||
"range24h": "24 h",
|
||
"coreN": "CPU {{n}}",
|
||
"threads": "{{n}} threads",
|
||
"physical": "{{n}} cores",
|
||
"perSecond": "{{v}}/s",
|
||
"temperatures": "Temperatures",
|
||
"topProcesses": "Busiest processes",
|
||
"cpuModel": "CPU",
|
||
"storageNetwork": "Disks & network",
|
||
"processCount": "{{n}} processes",
|
||
"title": "Server",
|
||
"os": "System",
|
||
"uptime": "Uptime",
|
||
"load": "Load (1/5/15 min)",
|
||
"agenthubTip": "pid {{pid}} · Node {{node}}",
|
||
"sampling": "Sampling…",
|
||
"sampled": "{{s}} s sample",
|
||
"historyNone": "No history yet — the server keeps it in memory on Linux, from the moment it starts.",
|
||
"agenthub": "AgentHub",
|
||
"usersTitle": "Users · CPU / RAM now",
|
||
"usersCount": "{{n}} users"
|
||
}
|
||
}
|