@dv.nghiem/flowdeck 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +154 -3
  2. package/dist/agents/coder.d.ts +3 -1
  3. package/dist/agents/coder.d.ts.map +1 -1
  4. package/dist/agents/design.d.ts +3 -0
  5. package/dist/agents/design.d.ts.map +1 -0
  6. package/dist/agents/index.d.ts +4 -3
  7. package/dist/agents/index.d.ts.map +1 -1
  8. package/dist/agents/orchestrator.d.ts.map +1 -1
  9. package/dist/agents/reviewer.d.ts.map +1 -1
  10. package/dist/agents/specialist.d.ts +0 -1
  11. package/dist/agents/specialist.d.ts.map +1 -1
  12. package/dist/config/index.d.ts +1 -1
  13. package/dist/config/index.d.ts.map +1 -1
  14. package/dist/config/loader.d.ts +8 -0
  15. package/dist/config/loader.d.ts.map +1 -1
  16. package/dist/config/schema.d.ts +55 -2
  17. package/dist/config/schema.d.ts.map +1 -1
  18. package/dist/dashboard/server.mjs +24 -1
  19. package/dist/dashboard/types.d.ts +72 -0
  20. package/dist/dashboard/types.d.ts.map +1 -1
  21. package/dist/hooks/guard-rails.d.ts.map +1 -1
  22. package/dist/hooks/orchestrator-guard-hook.d.ts.map +1 -1
  23. package/dist/hooks/tool-guard.d.ts.map +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +490 -418
  26. package/dist/services/agent-contract-registry.d.ts +32 -0
  27. package/dist/services/agent-contract-registry.d.ts.map +1 -0
  28. package/dist/services/agent-performance.d.ts +1 -1
  29. package/dist/services/agent-performance.d.ts.map +1 -1
  30. package/dist/services/agent-trace-graph.d.ts +94 -0
  31. package/dist/services/agent-trace-graph.d.ts.map +1 -0
  32. package/dist/services/agent-validator.d.ts +56 -0
  33. package/dist/services/agent-validator.d.ts.map +1 -0
  34. package/dist/services/deadlock-detector.d.ts +34 -0
  35. package/dist/services/deadlock-detector.d.ts.map +1 -0
  36. package/dist/services/delegation-budget.d.ts +54 -0
  37. package/dist/services/delegation-budget.d.ts.map +1 -0
  38. package/dist/services/governance.test.d.ts +11 -0
  39. package/dist/services/governance.test.d.ts.map +1 -0
  40. package/dist/services/index.d.ts +6 -1
  41. package/dist/services/index.d.ts.map +1 -1
  42. package/dist/services/telemetry.d.ts +1 -1
  43. package/dist/services/telemetry.d.ts.map +1 -1
  44. package/dist/services/workflow-scorecard.d.ts +76 -0
  45. package/dist/services/workflow-scorecard.d.ts.map +1 -0
  46. package/dist/tools/delegate.d.ts.map +1 -1
  47. package/dist/tools/dispatch-routing.d.ts +4 -1
  48. package/dist/tools/dispatch-routing.d.ts.map +1 -1
  49. package/dist/tools/dispatch-routing.test.d.ts +2 -0
  50. package/dist/tools/dispatch-routing.test.d.ts.map +1 -0
  51. package/dist/tools/planning-state-lib.d.ts +8 -0
  52. package/dist/tools/planning-state-lib.d.ts.map +1 -1
  53. package/dist/tools/planning-state.d.ts.map +1 -1
  54. package/dist/tools/run-pipeline.d.ts.map +1 -1
  55. package/docs/agents.md +104 -74
  56. package/docs/best-practices.md +1 -1
  57. package/docs/commands/fd-ask.md +2 -2
  58. package/docs/commands/fd-fix-bug.md +2 -2
  59. package/docs/commands/fd-new-feature.md +2 -2
  60. package/docs/commands/fd-quick.md +3 -1
  61. package/docs/commands.md +37 -7
  62. package/docs/configuration.md +76 -46
  63. package/docs/design-first-workflow.md +94 -0
  64. package/docs/feature-integration-architecture.md +3 -31
  65. package/docs/index.md +5 -2
  66. package/docs/intelligence.md +92 -1
  67. package/docs/multi-repo.md +1 -1
  68. package/docs/rules.md +1 -1
  69. package/docs/skills.md +24 -15
  70. package/docs/workflows.md +11 -6
  71. package/package.json +1 -1
  72. package/src/commands/fd-ask.md +1 -0
  73. package/src/commands/fd-design.md +64 -0
  74. package/src/commands/fd-discuss.md +2 -0
  75. package/src/commands/fd-execute.md +7 -3
  76. package/src/commands/fd-fix-bug.md +2 -2
  77. package/src/commands/fd-multi-repo.md +3 -3
  78. package/src/commands/fd-plan.md +2 -0
  79. package/src/commands/fd-quick.md +4 -1
  80. package/src/commands/fd-verify.md +6 -0
  81. package/src/rules/common/agent-orchestration.md +6 -6
  82. package/src/skills/app-shell-design/SKILL.md +31 -0
  83. package/src/skills/dashboard-design/SKILL.md +32 -0
  84. package/src/skills/decision-trace/SKILL.md +1 -1
  85. package/src/skills/design-audit/SKILL.md +37 -0
  86. package/src/skills/design-system-definition/SKILL.md +33 -0
  87. package/src/skills/frontend-handoff/SKILL.md +31 -0
  88. package/src/skills/landing-page-design/SKILL.md +32 -0
  89. package/src/skills/multi-repo/SKILL.md +3 -3
  90. package/src/skills/plan-task/SKILL.md +2 -2
  91. package/src/skills/responsive-review/SKILL.md +31 -0
  92. package/src/skills/ui-ux-planning/SKILL.md +32 -0
  93. package/src/skills/wireframe-planning/SKILL.md +30 -0
  94. package/dist/services/model-router.d.ts +0 -35
  95. package/dist/services/model-router.d.ts.map +0 -1
package/README.md CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  > AI-powered multi-agent workflow orchestration with built-in safety intelligence for OpenCode
4
4
 
5
- FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coordinates 25 specialist agents through a four-phase cycle — discuss, plan, execute, review — with persistent state that survives session restarts, and a full AI safety layer that scores every change, predicts regressions, and enforces architectural constraints before anything is applied.
5
+ FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coordinates 25 specialist agents through a four-phase cycle — discuss, plan, execute, review — with persistent state that survives session restarts, a full AI safety layer that scores every change, predicts regressions, and enforces architectural constraints before anything is applied, and a governance layer that validates agent behaviour, traces execution, and measures workflow quality.
6
6
 
7
7
  ---
8
8
 
9
9
  ## Features
10
10
 
11
11
  - 🤖 **25 agents** — architect, planner, coder, reviewer, tester, debugger, risk-analyst, policy-enforcer, and more
12
- - 🛠️ **50 skills** — reusable workflow patterns (TDD, security scan, deploy check, code review, and more)
12
+ - 🛠️ **59 skills** — reusable workflow patterns (TDD, security scan, deploy check, code review, and more)
13
13
  - ⚡ **20 commands** — workflow commands for all project operations
14
14
  - 📋 **15 workflows** — pre-built orchestration flows including Spec-Driven Development (SDD)
15
15
  - 🔄 **Persistent state** — resume exactly where you left off across sessions via `.planning/STATE.md`
@@ -18,10 +18,12 @@ FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coo
18
18
  - 🗂️ **Multi-repo support** — coordinate changes across multiple repositories in one session
19
19
  - 🔔 **System notifications** — desktop alerts when long-running tasks complete
20
20
  - 🛡️ **AI Safety layer** — patch trust scoring, edit gates, phase gating, arch constraint enforcement, failure replay, and regression prediction built into every workflow
21
+ - 🔍 **Governance layer** — capability contracts, agent validator, inter-agent trace graph, delegation budget, deadlock/loop detector, and workflow scorecard
21
22
  - 🪝 **Deep System Hooks** — context window monitoring, session idle summaries, shell environment injection, and structured compaction to prevent context loss
22
23
  - 🌐 **Built-in MCPs** — Context7 (docs), Exa (web search), and Grep.app (code search) included and enabled by default
23
24
  - 💎 **Ensemble Reasoning** — `council` tool for synthesized consensus from multiple specialized agents
24
25
  - 🧠 **Persistent Memory** — SQLite-based memory stores tool executions, assistant messages, and session summaries. Agents can search past observations with `memory-search` tool.
26
+ - ⚙️ **Model-agnostic** — no model is hardcoded. Every agent uses your currently selected OpenCode model. Override per-agent in `flowdeck.json`.
25
27
 
26
28
  ---
27
29
 
@@ -57,7 +59,156 @@ FlowDeck structures every feature through a six-step cycle:
57
59
  | **Define Feature** | `/fd-new-feature "…"` | Initialize feature context, creates `FEATURE.md` in current phase |
58
60
  | **Discuss** | `/fd-discuss` | `@discusser` runs structured Q&A, saves decisions to `DISCUSS.md` |
59
61
  | **Plan** | `/fd-plan` | `@planner` builds a wave-structured `PLAN.md`; you type `CONFIRM` to proceed |
60
- | **Execute** | `/fd-execute` | `@orchestrator` delegates to `@architect`, `@coder`, `@tester`, `@reviewer` via TDD |
62
+ | **Execute** | `/fd-execute` | `@orchestrator` delegates to `@architect`, `@backend-coder`, `@tester`, `@reviewer` via TDD |
63
+ | **Verify** | `/fd-verify` | Full test suite, code review, security scan, and deploy check |
64
+
65
+ State is written to `.planning/STATE.md` after each phase. Use `/fd-checkpoint` to save mid-session and `/fd-resume` to reload context in a new session.
66
+
67
+ ---
68
+
69
+ ## Command Reference
70
+
71
+ ### Workflow commands
72
+
73
+ | Command | Purpose |
74
+ |---------|---------|
75
+ | `/fd-new-project` | Bootstrap a new project with PROJECT.md, ROADMAP.md, STATE.md |
76
+ | `/fd-map-codebase` | Analyse and index the codebase into structured `.codebase/` files |
77
+ | `/fd-new-feature` | Define a new feature and initialize feature context |
78
+ | `/fd-discuss` | Pre-planning structured Q&A to capture decisions |
79
+ | `/fd-plan` | Generate a wave-structured execution plan from decisions |
80
+ | `/fd-execute` | Implement feature with TDD discipline and parallel agents |
81
+ | `/fd-verify` | Full verification pipeline: tests, code review, security scan, deploy check |
82
+ | `/fd-fix-bug` | Diagnose, fix, and verify a bug with regression test |
83
+ | `/fd-write-docs` | Explore APIs and generate accurate documentation |
84
+ | `/fd-deploy-check` | Pre-deploy safety check with test, security, and build verification |
85
+ | `/fd-status` | View project progress, roadmap, and workspace overview |
86
+ | `/fd-checkpoint` | Save a session checkpoint to STATE.md |
87
+ | `/fd-resume` | Reload STATE.md and PLAN.md to continue interrupted session |
88
+ | `/fd-reflect` | Post-session reflection or capture patterns as reusable skills |
89
+ | `/fd-multi-repo` | Multi-repo orchestration — list, add, remove, or status |
90
+ | `/fd-translate-intent` | Convert vague requests into ranked implementation options |
91
+ | `/fd-suggest` | Analyze the codebase and suggest high-value feature opportunities |
92
+ | `/fd-ask` | Smart agent dispatch — routes to specialist by keyword |
93
+ | `/fd-quick` | Focused task with automatic agent selection |
94
+ | `/fd-doctor` | Check FlowDeck installation and environment health |
95
+
96
+ ### Analysis commands
97
+
98
+ These umbrella commands consolidate multiple analysis modules into focused entry points:
99
+
100
+ | Command | Purpose |
101
+ |---------|---------|
102
+ | `/fd-translate-intent` | Convert vague requests into ranked implementation options with tradeoffs |
103
+ | `/fd-suggest` | Combined opportunity and risk analysis (impact, volatility, failures, and skill gaps) |
104
+ | `/fd-deploy-check` | Pre-change release safety checks and review routing |
105
+ | `/fd-verify` | Standalone verification for tests, review, and security checks |
106
+
107
+ See [docs/workflows.md](docs/workflows.md) for details on how analysis commands work.
108
+
109
+ ---
110
+
111
+ ## Governance Layer
112
+
113
+ FlowDeck's governance layer makes multi-agent execution trustworthy and debuggable. It runs as internal runtime services — no extra commands needed.
114
+
115
+ | Service | What it does |
116
+ |---------|-------------|
117
+ | **Agent Contract Registry** | Defines allowed tools, forbidden actions, required inputs, and success criteria for every agent |
118
+ | **Agent Validator** | Checks each agent invocation against its contract before and after execution; mode: `off` / `advisory` / `strict` |
119
+ | **Inter-Agent Trace Graph** | Records every agent-to-agent delegation as a causal span graph; stored in `.codebase/AGENT_SPANS.jsonl` |
120
+ | **Delegation Budget** | Per-run limits on tool calls, sub-agent delegations, retries, and delegation depth; stored in `.codebase/BUDGETS.json` |
121
+ | **Deadlock / Loop Detector** | Detects agent bounce loops, circular delegation, step retry loops, and stage stalls; stored in `.codebase/DEADLOCK_SIGNALS.jsonl` |
122
+ | **Workflow Scorecard** | 10-dimension quality score for every run (TDD, design-first, approvals, budget efficiency, etc.); stored in `.codebase/SCORECARDS.jsonl` |
123
+
124
+ Configure in `flowdeck.json`:
125
+
126
+ ```json
127
+ {
128
+ "governance": {
129
+ "validator": { "mode": "advisory" },
130
+ "delegationBudget": { "maxToolCalls": 200, "maxDepth": 8, "maxSameStepRetries": 3 },
131
+ "deadlockDetection": { "enabled": true, "bounceThreshold": 3, "autoStop": false },
132
+ "scorecard": { "enabled": true }
133
+ }
134
+ }
135
+ ```
136
+
137
+ ---
138
+
139
+ ## Model Selection
140
+
141
+ **FlowDeck does not hardcode any model.** Every agent uses the model currently selected in OpenCode.
142
+
143
+ To assign a specific model to a specific agent, add it to `flowdeck.json`:
144
+
145
+ ```json
146
+ {
147
+ "agents": {
148
+ "planner": { "model": "anthropic/claude-opus-4" },
149
+ "tester": { "model": "openai/gpt-4o-mini" }
150
+ }
151
+ }
152
+ ```
153
+
154
+ Agents not listed in `agents` inherit the active OpenCode model. See [Configuration](docs/configuration.md) for the full schema.
155
+
156
+ ---
157
+
158
+ ## Documentation
159
+
160
+ | File | Description |
161
+ |------|-------------|
162
+ | [docs/index.md](docs/index.md) | Full documentation table of contents |
163
+ | [docs/installation.md](docs/installation.md) | Prerequisites, install methods, verification, and uninstall |
164
+ | [docs/quick-start.md](docs/quick-start.md) | First 15 minutes — step-by-step walkthrough |
165
+ | [docs/configuration.md](docs/configuration.md) | `opencode.json`, project config, environment variables, plugin tools |
166
+ | [docs/USER_GUIDE.md](docs/USER_GUIDE.md) | Full agent and skill usage reference with examples |
167
+ | [docs/workflows.md](docs/workflows.md) | Command architecture and workflow patterns |
168
+ | [docs/intelligence.md](docs/intelligence.md) | AI safety features: patch trust, volatility map, failure replay, regression prediction |
169
+
170
+ ---
171
+
172
+ ## License
173
+
174
+ MIT
175
+
176
+
177
+ ---
178
+
179
+ ## Quick Install
180
+
181
+ ### Method 1: curl (recommended)
182
+
183
+ ```bash
184
+ curl -fsSL https://raw.githubusercontent.com/DVNghiem/flowdeck/main/install.sh | bash
185
+ ```
186
+
187
+ ### Method 2: npx (no git required)
188
+
189
+ ```bash
190
+ npx @dv.nghiem/flowdeck install
191
+ ```
192
+
193
+ See [Installation](docs/installation.md) for prerequisites, verification steps, and environment variables.
194
+
195
+ ---
196
+
197
+ ## Core Workflow
198
+
199
+ FlowDeck structures every feature through a six-step cycle:
200
+
201
+ ```
202
+ /fd-new-project → /fd-new-feature → /fd-discuss → /fd-plan → /fd-execute → /fd-verify
203
+ ```
204
+
205
+ | Step | Command | What happens |
206
+ |------|---------|--------------|
207
+ | **Setup** | `/fd-new-project MyApp` | Creates `.planning/` directory with `PROJECT.md`, `STATE.md`, and `ROADMAP.md` |
208
+ | **Define Feature** | `/fd-new-feature "…"` | Initialize feature context, creates `FEATURE.md` in current phase |
209
+ | **Discuss** | `/fd-discuss` | `@discusser` runs structured Q&A, saves decisions to `DISCUSS.md` |
210
+ | **Plan** | `/fd-plan` | `@planner` builds a wave-structured `PLAN.md`; you type `CONFIRM` to proceed |
211
+ | **Execute** | `/fd-execute` | `@orchestrator` delegates to `@architect`, `@backend-coder`, `@tester`, `@reviewer` via TDD |
61
212
  | **Verify** | `/fd-verify` | Full test suite, code review, security scan, and deploy check |
62
213
 
63
214
  State is written to `.planning/STATE.md` after each phase. Use `/fd-checkpoint` to save mid-session and `/fd-resume` to reload context in a new session.
@@ -1,3 +1,5 @@
1
1
  import type { AgentFactory } from './types';
2
- export declare const createCoderAgent: AgentFactory;
2
+ export declare const createBackendCoderAgent: AgentFactory;
3
+ export declare const createFrontendCoderAgent: AgentFactory;
4
+ export declare const createDevopsAgent: AgentFactory;
3
5
  //# sourceMappingURL=coder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coder.d.ts","sourceRoot":"","sources":["../../src/agents/coder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AAkH7D,eAAO,MAAM,gBAAgB,EAAE,YAiB9B,CAAC"}
1
+ {"version":3,"file":"coder.d.ts","sourceRoot":"","sources":["../../src/agents/coder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AA+I7D,eAAO,MAAM,uBAAuB,EAAE,YAqBrC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,YAqBtC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,YAiB/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentFactory } from './types';
2
+ export declare const createDesignAgent: AgentFactory;
3
+ //# sourceMappingURL=design.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../src/agents/design.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AA0D7D,eAAO,MAAM,iBAAiB,EAAE,YAiB/B,CAAC"}
@@ -4,7 +4,7 @@ export { resolvePrompt } from './types';
4
4
  export type { AgentDefinition, AgentFactory } from './types';
5
5
  import { createOrchestratorAgent } from './orchestrator';
6
6
  import { createPlannerAgent, createPlanCheckerAgent } from './planner';
7
- import { createCoderAgent } from './coder';
7
+ import { createBackendCoderAgent, createFrontendCoderAgent, createDevopsAgent } from './coder';
8
8
  import { createTesterAgent } from './tester';
9
9
  import { createReviewerAgent } from './reviewer';
10
10
  import { createResearcherAgent } from './researcher';
@@ -14,11 +14,12 @@ import { createDocUpdaterAgent } from './doc-updater';
14
14
  import { createMapperAgent } from './mapper';
15
15
  import { createCodeExplorerAgent } from './code-explorer';
16
16
  import { createDebugSpecialistAgent, createBuildErrorResolverAgent } from './debug';
17
- import { createTaskSplitterAgent, createDiscusserAgent, createParallelCoordinatorAgent } from './specialist';
17
+ import { createTaskSplitterAgent, createDiscusserAgent } from './specialist';
18
18
  import { createArchitectAgent } from './architect';
19
19
  import { createRiskAnalystAgent } from './risk-analyst';
20
20
  import { createPolicyEnforcerAgent } from './policy-enforcer';
21
21
  import { createPerformanceOptimizerAgent, createRefactorGuideAgent } from './performance';
22
+ import { createDesignAgent } from './design';
22
23
  /** All agent names registered by FlowDeck. */
23
24
  export declare const AGENT_NAMES: readonly string[];
24
25
  export type AgentMode = 'primary' | 'subagent' | 'all';
@@ -37,5 +38,5 @@ export declare function createAgents(agentModels?: Record<string, string | undef
37
38
  * Pass agentModels to apply per-agent model overrides from flowdeck.json.
38
39
  */
39
40
  export declare function getAgentConfigs(agentModels?: Record<string, string | undefined>): Record<string, AgentConfig>;
40
- export { createOrchestratorAgent, createPlannerAgent, createCoderAgent, createPlanCheckerAgent, createTesterAgent, createReviewerAgent, createResearcherAgent, createWriterAgent, createSecurityAuditorAgent, createDocUpdaterAgent, createMapperAgent, createCodeExplorerAgent, createDebugSpecialistAgent, createBuildErrorResolverAgent, createTaskSplitterAgent, createDiscusserAgent, createParallelCoordinatorAgent, createArchitectAgent, createRiskAnalystAgent, createPolicyEnforcerAgent, createPerformanceOptimizerAgent, createRefactorGuideAgent, };
41
+ export { createOrchestratorAgent, createPlannerAgent, createBackendCoderAgent, createFrontendCoderAgent, createDevopsAgent, createPlanCheckerAgent, createTesterAgent, createReviewerAgent, createResearcherAgent, createWriterAgent, createSecurityAuditorAgent, createDocUpdaterAgent, createMapperAgent, createCodeExplorerAgent, createDebugSpecialistAgent, createBuildErrorResolverAgent, createTaskSplitterAgent, createDiscusserAgent, createArchitectAgent, createRiskAnalystAgent, createPolicyEnforcerAgent, createPerformanceOptimizerAgent, createRefactorGuideAgent, createDesignAgent, };
41
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC/B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACzB,MAAM,eAAe,CAAC;AAGvB,8CAA8C;AAC9C,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAwB/B,CAAC;AAGX,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;AAmBvD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,eAAe,GAAG,SAAS,CAgH7B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,eAAe,EAAE,CAYhG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAuB7G;AAGD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,GACzB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,8CAA8C;AAC9C,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EA0B/B,CAAC;AAGX,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;AAmBvD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,eAAe,GAAG,SAAS,CAgH7B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,eAAe,EAAE,CAYhG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAuB7G;AAGD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,EACxB,iBAAiB,GAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAmP/C;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAsB5E;AAED,wBAAgB,uBAAuB,CACrC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACjE,YAAY,CAAC,EAAE,MAAM,EACrB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,eAAe,CAuBjB"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA2Q/C;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAsB5E;AAED,wBAAgB,uBAAuB,CACrC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACjE,YAAY,CAAC,EAAE,MAAM,EACrB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,eAAe,CAuBjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AAyI7D,eAAO,MAAM,mBAAmB,EAAE,YAiBjC,CAAC"}
1
+ {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AAgJ7D,eAAO,MAAM,mBAAmB,EAAE,YAiBjC,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import type { AgentFactory } from './types';
2
2
  export declare const createTaskSplitterAgent: AgentFactory;
3
3
  export declare const createDiscusserAgent: AgentFactory;
4
- export declare const createParallelCoordinatorAgent: AgentFactory;
5
4
  //# sourceMappingURL=specialist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"specialist.d.ts","sourceRoot":"","sources":["../../src/agents/specialist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AAwZ7D,eAAO,MAAM,uBAAuB,EAAE,YAqBrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,YAiBlC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,YAqB5C,CAAC"}
1
+ {"version":3,"file":"specialist.d.ts","sourceRoot":"","sources":["../../src/agents/specialist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AAuN7D,eAAO,MAAM,uBAAuB,EAAE,YAqBrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,YAiBlC,CAAC"}
@@ -1,3 +1,3 @@
1
- export { loadFlowDeckConfig } from './loader';
1
+ export { loadFlowDeckConfig, resolveDesignFirstConfig } from './loader';
2
2
  export type { FlowDeckConfig, AgentModelConfig } from './schema';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
@@ -4,4 +4,12 @@ import type { FlowDeckConfig } from './schema';
4
4
  * Returns an empty config if no file is found.
5
5
  */
6
6
  export declare function loadFlowDeckConfig(directory?: string): FlowDeckConfig;
7
+ export interface ResolvedDesignFirstConfig {
8
+ enabled: boolean;
9
+ enforcement: "strict" | "advisory";
10
+ requireApprovalBeforeImplementation: boolean;
11
+ modelOverrides: Record<string, string>;
12
+ defaultSkillsByTaskType: Record<string, string[]>;
13
+ }
14
+ export declare function resolveDesignFirstConfig(config: FlowDeckConfig): ResolvedDesignFirstConfig;
7
15
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAa/C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAoBrE"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAa/C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAoBrE;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,QAAQ,GAAG,UAAU,CAAC;IACnC,mCAAmC,EAAE,OAAO,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnD;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,yBAAyB,CAc1F"}
@@ -8,14 +8,67 @@
8
8
  * Project config takes precedence over global config.
9
9
  */
10
10
  export interface AgentModelConfig {
11
- /** Model to use for this agent (e.g. "anthropic/claude-sonnet-4-5"). If not set, uses the currently selected model. */
11
+ /** Model to use for this agent (e.g. "github-copilot/sonnet-4.6"). If not set, uses the currently selected model. */
12
12
  model?: string;
13
13
  }
14
+ export interface GovernanceConfig {
15
+ validator?: {
16
+ /**
17
+ * off: no validation
18
+ * advisory: validate and warn but never block (default)
19
+ * strict: block on contract violations
20
+ */
21
+ mode?: "off" | "advisory" | "strict";
22
+ /** Whether to enforce contract tool allowlists. Default: true when mode != off */
23
+ contractEnforcement?: "off" | "warn" | "strict";
24
+ };
25
+ delegationBudget?: {
26
+ /** Max total tool calls before run is stopped. Default: 200 */
27
+ maxToolCalls?: number;
28
+ /** Max total delegated agents. Default: 30 */
29
+ maxDelegatedAgents?: number;
30
+ /** Max total retries across all steps. Default: 10 */
31
+ maxRetries?: number;
32
+ /** Max delegation depth. Default: 8 */
33
+ maxDepth?: number;
34
+ /** Max retries on the same step before escalating. Default: 3 */
35
+ maxSameStepRetries?: number;
36
+ /** What to do when budget is exhausted. Default: "escalate" */
37
+ onExhaustion?: "stop" | "warn" | "escalate";
38
+ };
39
+ deadlockDetection?: {
40
+ /** Whether deadlock detection is active. Default: true */
41
+ enabled?: boolean;
42
+ /** How many agent-pair transitions trigger an agent_bounce signal. Default: 3 */
43
+ bounceThreshold?: number;
44
+ /** How many same-stage retries trigger a step_retry_loop signal. Default: 3 */
45
+ retryLoopThreshold?: number;
46
+ /** Minutes a span can remain "running" before a stage_stall signal fires. Default: 30 */
47
+ stageStallMinutes?: number;
48
+ /** Automatically stop the run when a signal fires. Default: false */
49
+ autoStop?: boolean;
50
+ };
51
+ scorecard?: {
52
+ /** Whether to generate scorecards after each run. Default: true */
53
+ enabled?: boolean;
54
+ /** Storage mode. Default: "jsonl" */
55
+ storageMode?: "jsonl" | "none";
56
+ };
57
+ }
14
58
  export interface FlowDeckConfig {
15
59
  /**
16
- * Per-agent model overrides. Keys are agent names (e.g. "orchestrator", "coder", "planner").
60
+ * Per-agent model overrides. Keys are agent names (e.g. "orchestrator", "backend-coder", "frontend-coder", "devops", "planner").
17
61
  * If an agent is not listed, it uses the model the user currently has selected in OpenCode.
18
62
  */
19
63
  agents?: Record<string, AgentModelConfig>;
64
+ designFirst?: {
65
+ enabled?: boolean;
66
+ enforcement?: "strict" | "advisory";
67
+ requireApprovalBeforeImplementation?: boolean;
68
+ modelOverrides?: Record<string, string>;
69
+ defaultSkillsByTaskType?: Record<string, string[]>;
70
+ };
71
+ /** Reliability and governance layer: contracts, validation, tracing, budgets, loop detection, scoring */
72
+ governance?: GovernanceConfig;
20
73
  }
21
74
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,uHAAuH;IACvH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC3C"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,qHAAqH;IACrH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE;QACV;;;;WAIG;QACH,IAAI,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;QACrC,kFAAkF;QAClF,mBAAmB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;KACjD,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,+DAA+D;QAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,8CAA8C;QAC9C,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,sDAAsD;QACtD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,uCAAuC;QACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,iEAAiE;QACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,+DAA+D;QAC/D,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;KAC7C,CAAC;IACF,iBAAiB,CAAC,EAAE;QAClB,0DAA0D;QAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,iFAAiF;QACjF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,+EAA+E;QAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,yFAAyF;QACzF,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,qEAAqE;QACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,mEAAmE;QACnE,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,qCAAqC;QACrC,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KAChC,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;QACpC,mCAAmC,CAAC,EAAE,OAAO,CAAC;QAC9C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACpD,CAAC;IACF,yGAAyG;IACzG,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B"}
@@ -13243,6 +13243,8 @@ function parseState(content) {
13243
13243
  result[key] = value.replace(/[\[\]]/g, "").split(",").map((s) => s.trim()).filter(Boolean);
13244
13244
  } else if (key === "plan_confirmed") {
13245
13245
  result[key] = value === "true";
13246
+ } else if (key === "requires_design_first" || key === "design_approved" || key === "design_override") {
13247
+ result[key] = value === "true";
13246
13248
  } else if (value !== "" && !isNaN(Number(value)) && key !== "plan_file" && key !== "confirmed_at") {
13247
13249
  result[key] = Number(value);
13248
13250
  } else {
@@ -13256,7 +13258,21 @@ function parseState(content) {
13256
13258
  function readPlanningState(dir) {
13257
13259
  const sp = statePath(dir);
13258
13260
  if (!existsSync2(sp)) {
13259
- return { phase: 0, status: "", plan_confirmed: false, steps_complete: [], steps_pending: [], last_action: "", next_action: "", blockers: [], tdd: undefined };
13261
+ return {
13262
+ phase: 0,
13263
+ status: "",
13264
+ plan_confirmed: false,
13265
+ requires_design_first: false,
13266
+ design_stage: "pending",
13267
+ design_approved: false,
13268
+ design_override: false,
13269
+ steps_complete: [],
13270
+ steps_pending: [],
13271
+ last_action: "",
13272
+ next_action: "",
13273
+ blockers: [],
13274
+ tdd: undefined
13275
+ };
13260
13276
  }
13261
13277
  const content = readFileSync2(sp, "utf-8");
13262
13278
  const parsed = parseState(content);
@@ -13264,6 +13280,13 @@ function readPlanningState(dir) {
13264
13280
  phase: parsed.phase || 1,
13265
13281
  status: parsed.status || "",
13266
13282
  plan_confirmed: Boolean(parsed.plan_confirmed),
13283
+ task_type: parsed.task_type || undefined,
13284
+ requires_design_first: Boolean(parsed.requires_design_first),
13285
+ design_stage: parsed.design_stage || "pending",
13286
+ design_approved: Boolean(parsed.design_approved),
13287
+ design_override: Boolean(parsed.design_override),
13288
+ design_override_reason: parsed.design_override_reason || undefined,
13289
+ design_artifact: parsed.design_artifact || undefined,
13267
13290
  steps_complete: parsed.steps_complete || [],
13268
13291
  steps_pending: parsed.steps_pending || [],
13269
13292
  last_action: parsed.last_action || "",
@@ -50,6 +50,77 @@ export interface TDDDashboardState {
50
50
  bugs_missing_regression: number;
51
51
  overrides_used: number;
52
52
  }
53
+ export interface AgentSpanSummary {
54
+ span_id: string;
55
+ agent: string;
56
+ invoker: string;
57
+ stage: string;
58
+ status: string;
59
+ latency_ms?: number;
60
+ contract_violations: number;
61
+ tools_used: number;
62
+ depth: number;
63
+ }
64
+ export interface TraceGraphSummary {
65
+ trace_id: string;
66
+ root_agent: string;
67
+ started_at: string;
68
+ ended_at?: string;
69
+ total_agents: number;
70
+ max_depth: number;
71
+ failed_spans: number;
72
+ retry_total: number;
73
+ spans: AgentSpanSummary[];
74
+ }
75
+ export interface BudgetSummary {
76
+ run_id: string;
77
+ status: string;
78
+ tool_calls_used: number;
79
+ tool_calls_limit: number;
80
+ delegations_used: number;
81
+ delegations_limit: number;
82
+ retries_used: number;
83
+ retries_limit: number;
84
+ exhaustion_reason?: string;
85
+ }
86
+ export interface DeadlockSummary {
87
+ signal_id: string;
88
+ trace_id: string;
89
+ type: string;
90
+ detected_at: string;
91
+ agents_involved: string[];
92
+ recommended_action: string;
93
+ auto_stop: boolean;
94
+ }
95
+ export interface ScorecardSummary {
96
+ run_id: string;
97
+ command: string;
98
+ completion_status: string;
99
+ overall_score: number;
100
+ policy_violations: number;
101
+ deadlock_signals: number;
102
+ generated_at: string;
103
+ }
104
+ export interface GovernanceDashboardState {
105
+ /** Active or recent trace graphs */
106
+ activeTraces: TraceGraphSummary[];
107
+ /** Runs with stuck/deadlock signals */
108
+ stuckRuns: DeadlockSummary[];
109
+ /** Budget status for recent runs */
110
+ budgets: BudgetSummary[];
111
+ /** Recent validator violations */
112
+ validatorViolations: number;
113
+ /** Scorecards for recent runs */
114
+ scorecards: ScorecardSummary[];
115
+ /** Average score across all commands */
116
+ averageScore: number | null;
117
+ /** Most failure-prone commands (by scorecard) */
118
+ worstCommands: Array<{
119
+ command: string;
120
+ avg_score: number;
121
+ runs: number;
122
+ }>;
123
+ }
53
124
  export interface DashboardData {
54
125
  project: string;
55
126
  milestone: string;
@@ -68,5 +139,6 @@ export interface DashboardData {
68
139
  agentPerf: AgentPerfSummary[];
69
140
  toolFailureCount: number;
70
141
  tdd?: TDDDashboardState;
142
+ governance?: GovernanceDashboardState;
71
143
  }
72
144
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAAA;IAC9C,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,YAAY,EAAE,MAAM,CAAA;IAEpB,gBAAgB,EAAE,gBAAgB,EAAE,CAAA;IACpC,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,SAAS,EAAE,gBAAgB,EAAE,CAAA;IAC7B,gBAAgB,EAAE,MAAM,CAAA;IAExB,GAAG,CAAC,EAAE,iBAAiB,CAAA;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"guard-rails.d.ts","sourceRoot":"","sources":["../../src/hooks/guard-rails.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAA;AAE9D;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,EAAG,wBAAwB;AACpD,UAAU,CAAC,EAAE,MAAM,GAClB,aAAa,CAkBf;AAgBD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAa9C,wBAAsB,cAAc,CAClC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,IAAI,CAAC,CAgEf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAWjF;AAMD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAS3D"}
1
+ {"version":3,"file":"guard-rails.d.ts","sourceRoot":"","sources":["../../src/hooks/guard-rails.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAA;AAE9D;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,EAAG,wBAAwB;AACpD,UAAU,CAAC,EAAE,MAAM,GAClB,aAAa,CAkBf;AAgBD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAa9C,wBAAsB,cAAc,CAClC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,IAAI,CAAC,CAqEf;AA0BD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAWjF;AAMD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAS3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-guard-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/orchestrator-guard-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAsEH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAAsB;IAE9C;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkBtH;;;OAGG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CASjD"}
1
+ {"version":3,"file":"orchestrator-guard-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/orchestrator-guard-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAwEH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAAsB;IAE9C;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkBtH;;;OAGG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CASjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-guard.d.ts","sourceRoot":"","sources":["../../src/hooks/tool-guard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;AAEvC;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,WAAW,CAsC9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAepF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAYpE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
1
+ {"version":3,"file":"tool-guard.d.ts","sourceRoot":"","sources":["../../src/hooks/tool-guard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;AAEvC;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,WAAW,CAsC9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAepF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAmBpE;AAkBD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAkGjD,QAAA,MAAM,MAAM,EAAE,MAiPb,CAAA;AAED,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAkGjD,QAAA,MAAM,MAAM,EAAE,MAqPb,CAAA;AAED,eAAe,MAAM,CAAA"}