feat: Claude Code Monitor — lanes, pipelines and a merged workspace
Internal SmartGift build of a Claude Code monitoring dashboard. Lanes: a durable unit of parallel agent work, one per working directory, tracked across session restarts. Managed lanes are git worktrees the dashboard provisions and can reset or remove behind a three-check destroy guard and a counted preflight; adopted lanes are directories you already own and are never destroyable. Pipelines: a lane moves through pipeline stages. A stage the agent declares with evidence renders green; a stage inferred from the tool-event stream renders dashed amber and never counts as done. Detection is forward-only within a 30-minute window, and never writes the declared stage. Workspace: one page at /run with a lane grid, the selected lane's pipeline, and a full Claude console behind a disclosure.
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
{
|
||||
"refresh": "Refresh",
|
||||
"retry": "Retry",
|
||||
"cancel": "Cancel",
|
||||
"export": "Export",
|
||||
"loading": "Loading...",
|
||||
"noData": "No data",
|
||||
"total": "Total",
|
||||
"active": "active",
|
||||
"total_lower": "total",
|
||||
"subagent": "subagent",
|
||||
"subagents": "subagents",
|
||||
"subagent_label_one": "{{count}} subagent",
|
||||
"subagent_label_other": "{{count}} subagents",
|
||||
"events": "events",
|
||||
"event": "event",
|
||||
"sessions": "sessions",
|
||||
"session": "session",
|
||||
"agents": "agents",
|
||||
"agent": "agent",
|
||||
"live": "Live",
|
||||
"offline": "Offline",
|
||||
"running": "running",
|
||||
"dashboardRun": "Run",
|
||||
"days": "days",
|
||||
"hours": "hours",
|
||||
"updated": "Updated ",
|
||||
"lastUpdated": "Last updated: ",
|
||||
"showMore": "Show more ({{count}} remaining)",
|
||||
"plusMore": "+{{count}} more",
|
||||
"ofSessions": "% of sessions",
|
||||
"save": "Save",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"actions": "Actions",
|
||||
"close": "Close",
|
||||
"unexpectedError": "Unexpected error",
|
||||
"depth": "Depth",
|
||||
"type": "Type",
|
||||
"statusLabel": "Status",
|
||||
"status": {
|
||||
"working": "Working",
|
||||
"waiting": "Waiting",
|
||||
"completed": "Completed",
|
||||
"error": "Error",
|
||||
"active": "Active",
|
||||
"abandoned": "Abandoned"
|
||||
},
|
||||
"awaitingReason": {
|
||||
"notification": {
|
||||
"label": "Needs input",
|
||||
"desc": "Blocked on a permission prompt or an input request — Claude can't continue until you respond."
|
||||
},
|
||||
"stop": {
|
||||
"label": "Turn done",
|
||||
"desc": "Claude finished its reply; the session is idle until you send the next prompt."
|
||||
},
|
||||
"session_start": {
|
||||
"label": "At prompt",
|
||||
"desc": "The session just started or resumed and is sitting at an empty prompt — nothing has been asked yet."
|
||||
},
|
||||
"interrupted": {
|
||||
"label": "Interrupted",
|
||||
"desc": "The last turn was interrupted (Esc or a recovered hook) — Claude is waiting for direction."
|
||||
}
|
||||
},
|
||||
"time": {
|
||||
"justNow": "just now",
|
||||
"mAgo": "{{count}}m ago",
|
||||
"hAgo": "{{count}}h ago",
|
||||
"dAgo": "{{count}}d ago"
|
||||
},
|
||||
"pagination": {
|
||||
"previous": "Previous",
|
||||
"next": "Next",
|
||||
"showing": "Showing {{from}}-{{to}} of {{total}}"
|
||||
},
|
||||
"token": {
|
||||
"input": "Input",
|
||||
"output": "Output",
|
||||
"cacheRead": "Cache Read",
|
||||
"cacheWrite": "Cache Write",
|
||||
"totalTokens": "Total tokens"
|
||||
},
|
||||
"cost": {
|
||||
"model": "Model",
|
||||
"cost": "Cost",
|
||||
"totalCost": "Total Cost",
|
||||
"totalEstimatedCost": "Total Estimated Cost"
|
||||
},
|
||||
"duration": {
|
||||
"h_m": "{{h}}h {{m}}m",
|
||||
"m_s": "{{m}}m {{s}}s",
|
||||
"s": "{{s}}s"
|
||||
},
|
||||
"eventDetail": {
|
||||
"summary": "Summary",
|
||||
"seeDetailsBelow": "Check below for full details in {{fields}}",
|
||||
"eventId": "Event ID",
|
||||
"recordedAt": "Recorded at",
|
||||
"session": "Session",
|
||||
"sessionId": "Session ID",
|
||||
"agentId": "Agent ID",
|
||||
"agent": "Agent",
|
||||
"cwd": "Working directory",
|
||||
"permissionMode": "Permission mode",
|
||||
"toolUseId": "Tool Use ID",
|
||||
"toolName": "Tool",
|
||||
"toolInput": "Tool Input",
|
||||
"toolResponse": "Tool Response",
|
||||
"isError": "Error",
|
||||
"transcriptPath": "Transcript Path",
|
||||
"agentTranscriptPath": "Subagent Transcript Path",
|
||||
"hookEventName": "Hook Event Name",
|
||||
"stopReason": "Stop Reason",
|
||||
"stopHookActive": "Stop Hook Active",
|
||||
"subagentType": "Subagent Type",
|
||||
"agentType": "Agent Type",
|
||||
"notificationType": "Notification Type",
|
||||
"message": "Message",
|
||||
"prompt": "Prompt",
|
||||
"model": "Model",
|
||||
"reason": "Reason",
|
||||
"source": "Source",
|
||||
"imported": "Imported",
|
||||
"type": "Type",
|
||||
"timestamp": "Timestamp",
|
||||
"uuid": "UUID",
|
||||
"durationMs": "Duration (ms)",
|
||||
"compactionNumber": "Compaction Number",
|
||||
"totalCompactions": "Total Compactions",
|
||||
"lastAssistantMessage": "Last Assistant Message",
|
||||
"rawPayload": "Raw Payload",
|
||||
"copy": "Copy",
|
||||
"copied": "Copied",
|
||||
"noPayload": "No payload captured for this event.",
|
||||
"viewDetails": "View details",
|
||||
"expand": "Expand event",
|
||||
"collapse": "Collapse event"
|
||||
},
|
||||
"eventFilters": {
|
||||
"searchPlaceholder": "Search summary, tool, payload...",
|
||||
"status": "Status",
|
||||
"eventType": "Event type",
|
||||
"toolName": "Tool",
|
||||
"agentId": "Agent",
|
||||
"sessionId": "Session",
|
||||
"from": "From",
|
||||
"to": "To",
|
||||
"clearAll": "Clear filters",
|
||||
"noOptions": "No options",
|
||||
"showing": "Showing {{shown}} of {{total}}",
|
||||
"loadMore": "Load more",
|
||||
"loading": "Loading...",
|
||||
"noResults": "No events match the current filters",
|
||||
"grouped": "Group by tool call",
|
||||
"flat": "Flat list",
|
||||
"groupEventCount_one": "{{count}} event",
|
||||
"groupEventCount_other": "{{count}} events",
|
||||
"help": {
|
||||
"toggle": "Help",
|
||||
"title": "About events, filters, and grouping",
|
||||
"subtitle": "Unlock deeper insights: badges, lifecycles, and filter mechanics explained.",
|
||||
"valuesTitle": "What each filter accepts",
|
||||
"valueStatusDesc": "Preset shortcut that expands to event_type values (Working → PreToolUse, Completed → Stop/SubagentStop/Compaction, ...).",
|
||||
"valueEventTypeDesc": "Raw event_type strings from the DB. Pulled from /api/events/facets.",
|
||||
"valueToolNameDesc": "tool_name values currently in the DB (Bash, Edit, Read, Grep, mcp__... tools). Pulled from /api/events/facets.",
|
||||
"valueAgentIdDesc": "Full agent UUIDs (main + subagents). Select one or more to scope to specific agents.",
|
||||
"valueSessionIdDesc": "Session UUIDs. Typically you'd navigate to /sessions/:id instead, but this lets you intersect multiple sessions.",
|
||||
"valueSearchDesc": "Substring match on summary, tool_name, and the raw JSON payload. Debounced 300ms.",
|
||||
"valueDateRangeDesc": "ISO datetime lower/upper bounds on the event's created_at.",
|
||||
"statusesTitle": "Status badges",
|
||||
"statusesIntro": "Status is derived from event_type. It's what you see on each row.",
|
||||
"statusWorkingDesc": "Agent started a tool call (PreToolUse). The tool is about to run.",
|
||||
"statusConnectedDesc": "Tool call completed and returned a result (PostToolUse).",
|
||||
"statusCompletedDesc": "Turn or lifecycle boundary (Stop, SubagentStop, Compaction).",
|
||||
"statusErrorDesc": "An error was recorded (error, APIError).",
|
||||
"statusIdleDesc": "Lifecycle or metadata (Notification, TurnDuration, SessionStart, SessionEnd).",
|
||||
"lifecycleTitle": "Event lifecycle",
|
||||
"lifecycleDesc": "A typical tool call emits two events sharing the same tool_use_id:",
|
||||
"lifecycleFlow": "PreToolUse (Working) → PostToolUse (Connected) → ... → Stop (Completed)",
|
||||
"filtersTitle": "How filters work",
|
||||
"filterTip1": "Filters compose with AND across categories. Within one category, multi-select is OR.",
|
||||
"filterTip2": "Status is a shortcut that expands to event_type values (Working → PreToolUse, Completed → Stop/SubagentStop/Compaction, ...). Status + Event type compose as OR on event_type.",
|
||||
"filterTipGrouping": "Grouping tip: a grouped row needs both Pre and Post events. If you filter by Status, pick Working + Connected together to keep pairs intact - otherwise a group will only show half of the call.",
|
||||
"filterTip3": "Text search matches summary, tool_name, and the raw payload (data column).",
|
||||
"filterTip4": "Date range applies to each event's created_at."
|
||||
}
|
||||
},
|
||||
"examples": "Examples",
|
||||
"help": "Help"
|
||||
}
|
||||
Reference in New Issue
Block a user