feat(workflows): show lane pipelines, drop the deep analytics charts
The Workflows page rendered eleven charts of Claude Code harness internals (collaboration network, subagent effectiveness, patterns, model delegation, error propagation, concurrency, complexity, compaction). Too specialized to read and nothing to act on, so they are gone along with their i18n keys. What is left is what a reader can act on: headline stats, Workflow-tool runs, the spawning DAG, the tool flow and the per-session drill-in — plus a new first section for this dashboard's OWN pipelines. LanePipelinePanel renders a horizontally scrolling lane strip and the selected lane's PipelineMap, reusing the Workspace components so a stage looks identical on both pages. The panel is read-only: the console-never-writes-a-stage boundary applies here too, so every lane action stays on the Workspace page. The workflows API response shape is untouched. Closes #6
This commit is contained in:
@@ -63,50 +63,15 @@
|
||||
"howToRead": "Tools appear as colored bars on the left and right. Bands connect them: thickness = number of times the source ran immediately before the target. Hover a band for share-of-source and share-of-target percentages; hover a node for its total usage and share of all tool calls.",
|
||||
"why": "Surfaces habitual tool chains (e.g. Read → Edit → Bash). Useful for spotting loops, wasted hops, and missing tool variety in agent behavior."
|
||||
},
|
||||
"pipeline": {
|
||||
"what": "A directed graph of agent-type co-occurrence: which agent types tend to run sequentially after which, and how often.",
|
||||
"howToRead": "Circles are agent types; size encodes total spawns. Arrows go A → B when B was observed running shortly after A in the same session, with the label = count. Hover an arrow for share of source/target; hover a circle for spawns, sessions, and success rate. Drag nodes to rearrange.",
|
||||
"why": "Surfaces real delegation pipelines you may not have intentionally designed - e.g. a code-review agent that nearly always follows a build agent - so you can codify or simplify them."
|
||||
},
|
||||
"effectiveness": {
|
||||
"what": "One card per subagent type with a success-rate ring, total sessions, average duration, and a 7-day activity sparkline.",
|
||||
"howToRead": "Ring fill is success rate; the percentage in the center is the same. The two boxes give counts and average wall-clock duration. The sparkline is sessions per day for the last week - hover a bar for the daily count.",
|
||||
"why": "Quick health check per agent: which agents are reliable, which are slow, and which are trending up or down in usage."
|
||||
},
|
||||
"patterns": {
|
||||
"what": "A ranked list of recurring agent-orchestration sequences detected from session traces, plus a callout for solo sessions that ran without subagents.",
|
||||
"howToRead": "Each row is a step sequence (main → sub → sub …). The right side shows how many sessions matched it and what percentage of all sessions that represents. Click a pattern to highlight it.",
|
||||
"why": "Reveals the standard 'shapes' of work in your project. Frequent patterns are good candidates to formalize as named workflows or skills."
|
||||
},
|
||||
"modelDelegation": {
|
||||
"what": "A two-column flow showing which main models delegate to which subagent models, plus per-node agent counts and total tokens.",
|
||||
"howToRead": "Left column = main models for sessions; right column = models used inside subagents. Lines indicate observed main → subagent pairings. Hover a node for share-of-all-agents, sessions, total tokens, and a description of the model family (Opus / Sonnet / Haiku).",
|
||||
"why": "Helps you confirm cost/latency tiering - e.g. main on Sonnet, subagents on Haiku - and catch unintended escalations to Opus."
|
||||
},
|
||||
"errorPropagation": {
|
||||
"what": "Where errors cluster across the agent hierarchy: by depth (session/main vs direct subagent vs nested), by agent type, and by API/session-level error category.",
|
||||
"howToRead": "The top banner gives the session-level error rate. The depth bars show how many errors occurred at each nesting level. The error-prone types list ranks subagent types by error count. The bottom block surfaces API/session error summaries.",
|
||||
"why": "Pinpoints whether failures live in the orchestration spine (main agent), in specific subagents, or in deep nested chains - guiding where to invest in retries, validation, or rewrites."
|
||||
},
|
||||
"concurrency": {
|
||||
"what": "Aggregate timing of when each agent type is active relative to the session timeline, plus how many sessions feature it.",
|
||||
"howToRead": "Each row is one agent type. Bar length is proportional to session count. The right-hand percentages show the average start and end position within a session (0% = session start, 100% = session end). Hover for a description of the timing pattern (front-loaded, mid-session, back-loaded, etc.).",
|
||||
"why": "Reveals the rhythm of your sessions - e.g. linting up front, code-review near the end - and surfaces agents that monopolize the entire session."
|
||||
},
|
||||
"complexity": {
|
||||
"what": "A scatter plot of every session: x = wall-clock duration, y = total agents involved, bubble size = total tokens, color = final status.",
|
||||
"howToRead": "Top-right bubbles are long, agent-heavy sessions. Big bubbles burned the most tokens. Reds/yellows = error/abandoned outcomes. Hover any bubble for full session stats; click to drill into it below.",
|
||||
"why": "Gives a single view of the cost/complexity distribution. Outliers are the sessions worth investigating for runaway behavior or cost spikes."
|
||||
},
|
||||
"compaction": {
|
||||
"what": "How often Claude triggered context compaction across sessions: total events, tokens recovered, and a per-session distribution.",
|
||||
"howToRead": "The two stat boxes show total compaction events and the cumulative tokens reclaimed. The bar chart lists sessions with at least one compaction, sorted descending by count.",
|
||||
"why": "Compactions indicate context pressure. A long tail of high-compaction sessions usually means workflows that should be split, summarized, or migrated to a longer-context model."
|
||||
},
|
||||
"drillIn": {
|
||||
"what": "Per-session detail view: full agent tree, tool-call timeline, and raw event sequence for whichever session you select.",
|
||||
"howToRead": "Pick a session from the dropdown above or click a bubble in the scatter plot. The tabs let you switch between hierarchical (Agent Tree), temporal (Tool Timeline), and chronological (Event Sequence) views of the same session.",
|
||||
"why": "When an aggregate chart flags a suspicious session, this is where you go to read exactly what happened, in order."
|
||||
},
|
||||
"lanes": {
|
||||
"what": "The lanes this dashboard tracks — one durable unit of parallel agent work per working directory — and the pipeline stages each one has reached.",
|
||||
"howToRead": "Pick a lane tile to see its pipeline below. A node is green when it is done with evidence, solid blue for the current stage, amber when claimed without evidence, dashed amber when only detected from tool events, red when rejected.",
|
||||
"why": "This is your own delivery pipeline, not Claude Code internals: it answers where each parallel workstream stands right now. Lane actions live on the Workspace page."
|
||||
}
|
||||
},
|
||||
"stats": {
|
||||
@@ -244,201 +209,6 @@
|
||||
"linkDescFmt": "Across every session, this counts how often {{source}} ran immediately before {{target}}. Thicker bands = more common transitions; the percentages show how dominant this hop is among each tool's outgoing / incoming flow."
|
||||
}
|
||||
},
|
||||
"pipeline": {
|
||||
"title": "Agent Pipeline Graph",
|
||||
"subtitle": "Directed workflow - which agent types run after which, with frequency labels",
|
||||
"noData": "No pipeline data yet",
|
||||
"noDataDesc": "Directed workflow edges appear once agent types run sequentially across multiple sessions.",
|
||||
"legend": "Legend",
|
||||
"legendDesc": "A runs before B (labeled count)",
|
||||
"frequency": "Frequency",
|
||||
"meaning": "Meaning",
|
||||
"times": " times",
|
||||
"ranAfter": " ran after ",
|
||||
"spawns": " spawns",
|
||||
"spawned": "Spawned",
|
||||
"inSessions": "In sessions",
|
||||
"ariaLabel": "Agent pipeline graph",
|
||||
"tooltip": {
|
||||
"agentType": "Agent type",
|
||||
"edge": "Sequential edge",
|
||||
"shareOfAllSpawns": "Share of all spawns",
|
||||
"sequentialPairs": "Sequential pairs",
|
||||
"totalSpawnsFmt": "{{id}} total spawns",
|
||||
"shareOfSrcFmt": "Share of {{source}} → next",
|
||||
"shareOfTgtFmt": "Share of prev → {{target}}",
|
||||
"edgeDescFmt": "{{target}} ran immediately after {{source}} {{count}} time(s) across all sessions. The thicker the arrow, the more often this hand-off occurred. Use this to spot habitual delegation chains in your workflows.",
|
||||
"nodeDescFmt": "{{id}} ran {{total}} time(s) across {{sessions}} session(s); its success rate is {{rate}}% ({{health}}). Circle size encodes total spawns; arrows show which agent types tend to run before or after it.",
|
||||
"health": {
|
||||
"perfect": "near-perfect",
|
||||
"healthy": "healthy",
|
||||
"shaky": "shaky",
|
||||
"failing": "failing often"
|
||||
}
|
||||
}
|
||||
},
|
||||
"effectiveness": {
|
||||
"title": "Subagent Effectiveness",
|
||||
"subtitle": "Performance metrics per agent type",
|
||||
"success": "Success",
|
||||
"sessions": "Sessions",
|
||||
"avgDuration": "Avg Duration",
|
||||
"weeklyActivity": "Weekly activity",
|
||||
"noData": "No subagent data available",
|
||||
"successRateAria": "Success rate: {{rate}}%",
|
||||
"weeklyActivityAria": "Weekly activity sparkline",
|
||||
"sessionCount_one": "{{count}} session",
|
||||
"sessionCount_other": "{{count}} sessions"
|
||||
},
|
||||
"patterns": {
|
||||
"title": "Detected Workflow Patterns",
|
||||
"subtitle": "Common agent orchestration sequences",
|
||||
"noData": "No patterns detected yet",
|
||||
"noDataDesc": "Patterns appear once multiple sessions share the same agent sequence.",
|
||||
"solo": "solo (no subagents)",
|
||||
"label": "Workflow Patterns",
|
||||
"detail": {
|
||||
"clickHint": "Click for details",
|
||||
"stepsHeading": "Full step sequence",
|
||||
"statsHeading": "Stats",
|
||||
"stepsCount_one": "{{count}} step",
|
||||
"stepsCount_other": "{{count}} steps",
|
||||
"uniqueAgents": "Unique agent types",
|
||||
"occurrences": "Sessions matching this pattern",
|
||||
"shareOfSessions": "Share of all sessions",
|
||||
"narrativeHeading": "What this means",
|
||||
"suggestionHeading": "Suggestion",
|
||||
"narrative": {
|
||||
"soloFmt": "Sessions that ran with only {{first}} - no delegation to other agent types.",
|
||||
"twoStepFmt": "A two-step hand-off: {{first}} delegates straight to {{last}}, with no further branching.",
|
||||
"shortFmt": "A {{count}}-step chain that starts at {{first}} and ends at {{last}}.",
|
||||
"longFmt": "A long {{count}}-step chain - begins at {{first}}, threads through several agents, and lands at {{last}}.",
|
||||
"loopHintFmt": " {{agent}} appears more than once in this sequence - typical of a verification or revision loop.",
|
||||
"dominant": " This is the dominant workflow in your project - more than half of sessions follow it.",
|
||||
"common": " This is a common workflow, accounting for roughly a quarter of sessions.",
|
||||
"regular": " A recognised workflow, but not the majority pattern.",
|
||||
"niche": " A niche pattern that only surfaces occasionally."
|
||||
},
|
||||
"suggestion": {
|
||||
"solo": "Solo run - would a code-reviewer or test-runner subagent raise the quality of these sessions?",
|
||||
"shortChain": "Short chain. If it keeps recurring, name it as a slash command, skill, or named workflow so it's easy to reproduce.",
|
||||
"mediumChain": "Frequent enough to formalise. A named workflow or template would make this pattern reusable.",
|
||||
"longChain": "Long chain - review whether every hop is necessary, or whether some agents could be merged or skipped.",
|
||||
"loop": "Loop detected. Confirm the repeated step is intentional verification rather than a silent retry of a failing call."
|
||||
}
|
||||
}
|
||||
},
|
||||
"modelDelegation": {
|
||||
"title": "Model Delegation Flow",
|
||||
"subtitle": "How models route through agent hierarchies",
|
||||
"mainModels": "MAIN MODELS",
|
||||
"subagentModels": "SUBAGENT MODELS",
|
||||
"noData": "No model delegation data available",
|
||||
"agentsCount_one": "{{count}} agent",
|
||||
"agentsCount_other": "{{count}} agents",
|
||||
"tokensCount": "{{tokens}} tokens",
|
||||
"sessionsCount_one": "{{count}} session",
|
||||
"sessionsCount_other": "{{count}} sessions",
|
||||
"ariaLabel": "Model delegation flow diagram",
|
||||
"tooltip": {
|
||||
"mainModel": "Main model",
|
||||
"subagentModel": "Subagent model",
|
||||
"agentRuns": "Agent runs",
|
||||
"shareOfAll": "Share of all agents",
|
||||
"sessionsOnModel": "Sessions on this model",
|
||||
"totalTokens": "Total tokens",
|
||||
"family": {
|
||||
"opus": "Opus - highest-capability tier; best for complex reasoning, longest context, costliest per token.",
|
||||
"sonnet": "Sonnet - balanced tier; good default for most coding and tool-use workflows.",
|
||||
"haiku": "Haiku - fastest, cheapest tier; ideal for short, latency-sensitive subagents.",
|
||||
"other": "Non-Anthropic or unrecognized model - falls outside the standard Opus/Sonnet/Haiku families."
|
||||
},
|
||||
"lines": {
|
||||
"main": "Lines on the right show subagent models this main model delegated work to.",
|
||||
"sub": "Lines on the left show main models that delegated work to this subagent model."
|
||||
}
|
||||
}
|
||||
},
|
||||
"errorPropagation": {
|
||||
"title": "Error Propagation Map",
|
||||
"subtitle": "Where errors cluster in agent hierarchy depth",
|
||||
"noErrors": "No errors recorded",
|
||||
"allSuccess": "All sessions completed successfully",
|
||||
"sessionsHadErrors": " sessions had errors",
|
||||
"sessionsErrorSummary": "{{errorSessions}} of {{totalSessions}} sessions had errors",
|
||||
"agentErrors": " agent-level error(s) across hierarchy",
|
||||
"sessionErrorsOnly": "Session-level errors only",
|
||||
"errorsByDepth": "Errors by hierarchy depth",
|
||||
"errorProneTypes": "Error-prone agent types",
|
||||
"apiSessionErrors": "API & session errors",
|
||||
"depthLabels": {
|
||||
"sessionMain": "Session / Main",
|
||||
"directSubagent": "Direct Subagent",
|
||||
"nested": "Nested (depth 2)",
|
||||
"deep": "Deep (depth 3+)"
|
||||
}
|
||||
},
|
||||
"concurrency": {
|
||||
"title": "Agent Concurrency Timeline",
|
||||
"subtitle": "Parallel agent execution patterns - Shows how agents overlap in time",
|
||||
"noData": "No concurrency data",
|
||||
"noDataDesc": "Concurrency data appears once sessions with subagents have been recorded.",
|
||||
"sessions": "Sessions",
|
||||
"timing": "Timing",
|
||||
"max": " max",
|
||||
"sessionInfo_one": "{{count}} session - active {{from}}%-{{to}}% of session",
|
||||
"sessionInfo_other": "{{count}} sessions - active {{from}}%-{{to}}% of session",
|
||||
"tooltip": {
|
||||
"lane": "Concurrency lane",
|
||||
"sessionsWith": "Sessions with this agent",
|
||||
"avgStart": "Avg start in session",
|
||||
"avgEnd": "Avg end in session",
|
||||
"barHint": "Bar length is proportional to how many sessions feature this agent type. Timing percentages are averages across those sessions.",
|
||||
"timing": {
|
||||
"wholeSession": "Active across nearly the entire session - runs from the start through to the end.",
|
||||
"frontLoadedFmt": "Front-loaded: typically active from session start until ~{{end}}% of the way through.",
|
||||
"backLoadedFmt": "Back-loaded: typically kicks in around {{start}}% of the session and stays until the end.",
|
||||
"tightFmt": "Tightly scoped: runs in a narrow band between {{start}}% and {{end}}% of the session timeline.",
|
||||
"midSessionFmt": "Mid-session work: runs roughly from {{start}}% to {{end}}% of the session timeline."
|
||||
}
|
||||
}
|
||||
},
|
||||
"complexity": {
|
||||
"title": "Session Complexity Scatter",
|
||||
"subtitle": "Duration vs agent count vs tokens - Bubble size = token usage",
|
||||
"noData": "No session complexity data",
|
||||
"noDataDesc": "Sessions will appear here once they complete with agent activity.",
|
||||
"duration": "Duration",
|
||||
"agentCount": "Agent Count",
|
||||
"ariaLabel": "Session complexity scatter plot",
|
||||
"tooltip": {
|
||||
"duration": "Duration:",
|
||||
"agents": "Agents:",
|
||||
"subagents": "Subagents:",
|
||||
"tokens": "Tokens:",
|
||||
"model": "Model:"
|
||||
}
|
||||
},
|
||||
"compaction": {
|
||||
"title": "Compaction Impact Analysis",
|
||||
"subtitle": "How context compression is spread across your sessions",
|
||||
"help": "When a session's context window fills up, Claude Code compresses older history into a summary. Each compaction is one such event.",
|
||||
"noData": "No compactions recorded",
|
||||
"totalCompactions": "Total compactions",
|
||||
"sessionsAffected": "Sessions affected",
|
||||
"ofTotal": "of {{total}}",
|
||||
"avgPerSession": "Avg / affected session",
|
||||
"peakSession": "Most in one session",
|
||||
"tokensRecovered": "Tokens Recovered",
|
||||
"distribution": "Sessions by compaction count",
|
||||
"xAxis": "Compactions per session",
|
||||
"yAxis": "Sessions",
|
||||
"summary": "{{affected}} of {{total}} sessions ({{pct}}%) used context compaction.",
|
||||
"tokensFreed": "Compaction freed ~{{tokens}} tokens of context.",
|
||||
"ariaLabel": "Number of sessions by compaction count",
|
||||
"tipTitle": "Compacted {{count}}x",
|
||||
"tipDetail": "{{sessions}} sessions · {{pct}}% of affected"
|
||||
},
|
||||
"drillIn": {
|
||||
"title": "Session Drill-In",
|
||||
"subtitle": "Select a session from the scatter plot or use the dropdown to explore",
|
||||
@@ -464,5 +234,10 @@
|
||||
"showingOf": "Showing 100 of {{total}} events",
|
||||
"sessionInfo": " session(s) - active {{from}}%-{{to}}% of session",
|
||||
"sortedByCompaction": " session(s) (sorted by compaction count)"
|
||||
},
|
||||
"lanes": {
|
||||
"title": "Lane Pipelines",
|
||||
"subtitle": "Your own lanes and the stage each one has reached",
|
||||
"openWorkspace": "Open in Workspace"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user