@dv.nghiem/flowdeck 0.4.7 β†’ 0.4.9

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 (54) hide show
  1. package/README.md +14 -1
  2. package/dist/agents/default-executor.d.ts +3 -0
  3. package/dist/agents/default-executor.d.ts.map +1 -0
  4. package/dist/agents/index.d.ts +2 -1
  5. package/dist/agents/index.d.ts.map +1 -1
  6. package/dist/agents/orchestrator.d.ts +2 -5
  7. package/dist/agents/orchestrator.d.ts.map +1 -1
  8. package/dist/config/schema.d.ts +1 -15
  9. package/dist/config/schema.d.ts.map +1 -1
  10. package/dist/dashboard/server.mjs +14 -1
  11. package/dist/hooks/orchestrator-guard-hook.d.ts +12 -16
  12. package/dist/hooks/orchestrator-guard-hook.d.ts.map +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +811 -2042
  15. package/dist/{tools/dispatch-routing.d.ts β†’ lib/task-routing.d.ts} +1 -3
  16. package/dist/lib/task-routing.d.ts.map +1 -0
  17. package/dist/services/agent-contract-registry.d.ts.map +1 -1
  18. package/dist/services/agent-performance.d.ts +1 -1
  19. package/dist/services/agent-performance.d.ts.map +1 -1
  20. package/dist/services/cost-estimator.d.ts +0 -88
  21. package/dist/services/cost-estimator.d.ts.map +1 -1
  22. package/dist/services/event-logger.d.ts +1 -1
  23. package/dist/services/event-logger.d.ts.map +1 -1
  24. package/dist/services/quick-router.d.ts +24 -0
  25. package/dist/services/quick-router.d.ts.map +1 -1
  26. package/dist/services/supervisor-binding.d.ts +6 -0
  27. package/dist/services/supervisor-binding.d.ts.map +1 -1
  28. package/dist/services/workflow-router.d.ts +57 -0
  29. package/dist/services/workflow-router.d.ts.map +1 -0
  30. package/dist/services/workflow-scorecard.d.ts.map +1 -1
  31. package/dist/tools/planning-state-lib.d.ts +23 -0
  32. package/dist/tools/planning-state-lib.d.ts.map +1 -1
  33. package/docs/concepts/workflows.md +48 -0
  34. package/docs/index.md +15 -2
  35. package/docs/reference/workflow-router.md +337 -0
  36. package/package.json +1 -1
  37. package/src/commands/fd-discuss.md +8 -1
  38. package/src/commands/fd-execute.md +25 -3
  39. package/src/commands/fd-new-feature.md +97 -4
  40. package/src/commands/fd-plan.md +14 -4
  41. package/src/commands/fd-quick.md +43 -16
  42. package/src/rules/common/agent-orchestration.md +116 -24
  43. package/src/skills/agent-harness-construction/SKILL.md +5 -5
  44. package/dist/services/delegation-budget.d.ts +0 -54
  45. package/dist/services/delegation-budget.d.ts.map +0 -1
  46. package/dist/services/prompt-cache.d.ts +0 -61
  47. package/dist/services/prompt-cache.d.ts.map +0 -1
  48. package/dist/services/token-metrics.d.ts +0 -97
  49. package/dist/services/token-metrics.d.ts.map +0 -1
  50. package/dist/tools/delegate.d.ts +0 -4
  51. package/dist/tools/delegate.d.ts.map +0 -1
  52. package/dist/tools/dispatch-routing.d.ts.map +0 -1
  53. package/dist/tools/run-pipeline.d.ts +0 -4
  54. package/dist/tools/run-pipeline.d.ts.map +0 -1
package/README.md CHANGED
@@ -23,6 +23,7 @@ FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coo
23
23
  - 🌐 **Built-in MCPs** β€” Context7 (docs), Exa (web search), and Grep.app (code search) included and enabled by default
24
24
  - πŸ’Ž **Ensemble Reasoning** β€” `council` tool for synthesized consensus from multiple specialized agents
25
25
  - πŸ—ΊοΈ **Codegraph Integration** β€” Codegraph-backed code understanding maps the codebase at indexing time and serves as the shared intelligence layer for all commands and agents.
26
+ - 🧭 **Adaptive Workflow Routing** β€” scores tasks across 5 dimensions (complexity, risk, confidence, blast radius, codebase freshness) and selects the minimal sufficient workflow class dynamically
26
27
  - βš™οΈ **Model-agnostic** β€” no model is hardcoded. Every agent uses your currently selected OpenCode model. Override per-agent in `flowdeck.json`.
27
28
  - πŸ’° **Cost Optimization** β€” USD cost estimation (40+ models), per-workflow budget enforcement, retry-cost tracking, and concurrency limits to control total production spend.
28
29
  - πŸ“¦ **rtk Integration** β€” optional [rtk](https://github.com/rtk-ai/rtk) output-compression layer compresses noisy CLI output (git, npm, test runners, linters) 60–90% before it reaches the model. Auto-detected, telemetry-disabled by default.
@@ -49,7 +50,19 @@ See [Installation](docs/installation.md) for prerequisites, verification steps,
49
50
 
50
51
  ## Core Workflow
51
52
 
52
- FlowDeck structures every feature through a six-step cycle:
53
+ FlowDeck structures every feature through an **adaptive workflow cycle**. The orchestrator scores each task across 5 dimensions (simplicity, confidence, risk, codebase familiarity, complexity) and selects the minimal sufficient workflow class:
54
+
55
+ | Workflow Class | Stages | When Used |
56
+ |----------------|--------|-----------|
57
+ | `quick` | execute β†’ verify | Simple tasks (< 5 files, low risk) |
58
+ | `standard` | plan β†’ execute β†’ verify | Normal implementations |
59
+ | `explore` | discuss β†’ plan β†’ execute β†’ verify | Ambiguous or unfamiliar tasks |
60
+ | `ui-heavy` | discuss β†’ design β†’ plan β†’ execute β†’ verify | UI/UX-heavy tasks |
61
+ | `bugfix` | discuss β†’ fix-bug β†’ verify | Bug fixes |
62
+ | `docs-only` | write-docs β†’ verify | Documentation changes |
63
+ | `verify-heavy` | plan β†’ execute β†’ verify | High blast radius or sensitive paths |
64
+
65
+ The default six-step cycle:
53
66
 
54
67
  ```
55
68
  /fd-map-codebase β†’ /fd-new-feature β†’ /fd-discuss β†’ /fd-design β†’ /fd-plan β†’ /fd-execute β†’ /fd-verify β†’ /fd-done
@@ -0,0 +1,3 @@
1
+ import type { AgentDefinition } from './types';
2
+ export declare function createDefaultExecutorAgent(model?: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
3
+ //# sourceMappingURL=default-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-executor.d.ts","sourceRoot":"","sources":["../../src/agents/default-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAgD/C,wBAAgB,0BAA0B,CACxC,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,eAAe,CAkBjB"}
@@ -21,6 +21,7 @@ import { createPolicyEnforcerAgent } from './policy-enforcer';
21
21
  import { createPerformanceOptimizerAgent, createRefactorGuideAgent } from './performance';
22
22
  import { createDesignAgent } from './design';
23
23
  import { createSupervisorAgent } from './supervisor';
24
+ import { createDefaultExecutorAgent } from './default-executor';
24
25
  /** All agent names registered by FlowDeck. */
25
26
  export declare const AGENT_NAMES: readonly string[];
26
27
  export type AgentMode = 'primary' | 'subagent' | 'all';
@@ -52,5 +53,5 @@ export declare function getAgentConfigs(agentModels?: Record<string, string | un
52
53
  * @param customAppendPrompt - optional prompt suffix
53
54
  */
54
55
  export declare function createOrchestratorAgentForStage(stage: string, model?: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
55
- 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, createSupervisorAgent, };
56
+ 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, createSupervisorAgent, createDefaultExecutorAgent, };
56
57
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,7 @@
1
1
  import type { AgentDefinition } from './types';
2
- /**
3
- * Build the orchestrator prompt with dynamic agent filtering.
4
- */
5
- export declare function buildOrchestratorPrompt(disabledAgents?: Set<string>): string;
2
+ export declare function buildOrchestratorPrompt(disabledAgents?: Set<string>, workflowClass?: string): string;
6
3
  export declare function createOrchestratorAgent(model?: string | Array<string | {
7
4
  id: string;
8
5
  variant?: string;
9
- }>, customPrompt?: string, customAppendPrompt?: string, disabledAgents?: Set<string>): AgentDefinition;
6
+ }>, customPrompt?: string, customAppendPrompt?: string, disabledAgents?: Set<string>, workflowClass?: string): AgentDefinition;
10
7
  //# sourceMappingURL=orchestrator.d.ts.map
@@ -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;AAmS/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;AAsV/C,wBAAgB,uBAAuB,CACrC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CA6BR;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,EAC5B,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,CAuBjB"}
@@ -22,20 +22,6 @@ export interface GovernanceConfig {
22
22
  /** Whether to enforce contract tool allowlists. Default: true when mode != off */
23
23
  contractEnforcement?: "off" | "warn" | "strict";
24
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
25
  deadlockDetection?: {
40
26
  /** Whether deadlock detection is active. Default: true */
41
27
  enabled?: boolean;
@@ -68,7 +54,7 @@ export interface GovernanceConfig {
68
54
  * What to do when the budget is exceeded.
69
55
  * - "warn": log a warning but continue
70
56
  * - "stop": abort the current tool call with an error message
71
- * - "escalate": surface an escalation signal (same as delegation-budget escalation)
57
+ * - "escalate": surface an escalation signal for the current run
72
58
  * Default: "warn"
73
59
  */
74
60
  onExhaustion?: "warn" | "stop" | "escalate";
@@ -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,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;IACF,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,iEAAiE;QACjE,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kEAAkE;QAClE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB;;;;;;WAMG;QACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;KAC7C,CAAC;IACF,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;WAIG;QACH,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;QAC7B;;;;WAIG;QACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B;;;;WAIG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB;;;;WAIG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B;;;WAGG;QACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,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"}
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,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;IACF,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,iEAAiE;QACjE,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kEAAkE;QAClE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB;;;;;;WAMG;QACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;KAC7C,CAAC;IACF,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;WAIG;QACH,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;QAC7B;;;;WAIG;QACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B;;;;WAIG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB;;;;WAIG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B;;;WAGG;QACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,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"}
@@ -12456,6 +12456,14 @@ function parseState(content) {
12456
12456
  result[key] = value === "true";
12457
12457
  } else if (key === "requires_design_first" || key === "design_approved" || key === "design_override") {
12458
12458
  result[key] = value === "true";
12459
+ } else if (key === "skippedStages") {
12460
+ result[key] = value.replace(/[\[\]]/g, "").split(",").map((s) => s.trim()).filter(Boolean);
12461
+ } else if (key === "escalationHistory" || key === "routingScores") {
12462
+ try {
12463
+ result[key] = JSON.parse(value);
12464
+ } catch {
12465
+ result[key] = undefined;
12466
+ }
12459
12467
  } else if (value !== "" && !isNaN(Number(value)) && key !== "plan_file" && key !== "confirmed_at") {
12460
12468
  result[key] = Number(value);
12461
12469
  } else {
@@ -12513,7 +12521,12 @@ function readPlanningState(dir) {
12513
12521
  lastUpdatedBy: parsed.lastUpdatedBy || "",
12514
12522
  lastUpdatedPhase: parsed.lastUpdatedPhase || 1,
12515
12523
  summaryVersion: parsed.summaryVersion || 0,
12516
- freshnessStatus: parsed.freshnessStatus || "unknown"
12524
+ freshnessStatus: parsed.freshnessStatus || "unknown",
12525
+ workflowClass: parsed.workflowClass || undefined,
12526
+ skippedStages: parsed.skippedStages || undefined,
12527
+ escalationHistory: parsed.escalationHistory || undefined,
12528
+ routingScores: parsed.routingScores || undefined,
12529
+ routingReason: parsed.routingReason || undefined
12517
12530
  };
12518
12531
  }
12519
12532
  function parseTDDState(parsed) {
@@ -1,22 +1,16 @@
1
1
  /**
2
2
  * Orchestrator Guard Hook
3
3
  *
4
- * Enforces the "orchestrator as coordinator only" rule:
5
- * the primary orchestrator session is not allowed to use file-writing or shell-execution
6
- * tools directly. It must delegate all such work via the `delegate` tool.
4
+ * Enforces the "orchestrator as coordinator, not executor" rule for the primary session.
5
+ * The orchestrator may inspect files and planning state directly, but it CANNOT
6
+ * use file-write, edit, or shell tools. Those MUST be routed to specialist agents
7
+ * or the default-executor.
7
8
  *
8
- * Detection: the FIRST session.created event is treated as the orchestrator's session.
9
- * Child sessions (created by `delegate`) always arrive after the primary one.
10
- *
11
- * To enable: set FLOWDECK_ORCHESTRATOR_GUARD=on in the environment.
12
- * Default is OFF (guard disabled unless explicitly enabled).
9
+ * To disable: set FLOWDECK_ORCHESTRATOR_GUARD=off in the environment.
10
+ * Default is ON.
13
11
  */
14
12
  export declare class OrchestratorGuard {
15
13
  private primarySessionId;
16
- /**
17
- * Call this from the plugin's event handler so the guard can capture the
18
- * primary session ID the first time a session is created.
19
- */
20
14
  onEvent(event: {
21
15
  type?: string;
22
16
  properties?: unknown;
@@ -24,10 +18,12 @@ export declare class OrchestratorGuard {
24
18
  sessionID?: string;
25
19
  sessionId?: string;
26
20
  }): void;
27
- /**
28
- * Call this from tool.execute.before.
29
- * Throws if the tool is blocked for the orchestrator session.
30
- */
31
21
  check(sessionId: string, toolName: string): void;
22
+ /** Exposed for testing. */
23
+ _isBlockedForTest(name: string): boolean;
24
+ /** Exposed for testing. */
25
+ _isAllowedForTest(name: string): boolean;
26
+ /** Exposed for testing. */
27
+ _setPrimarySessionIdForTest(id: string | null): void;
32
28
  }
33
29
  //# sourceMappingURL=orchestrator-guard-hook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-guard-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/orchestrator-guard-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAqEH,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;;;;;;;;;;GAUG;AAsHH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAAsB;IAE9C,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,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUhD,2BAA2B;IAC3B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,2BAA2B;IAC3B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,2BAA2B;IAC3B,2BAA2B,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAGrD"}
@@ -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;AA6GjD,QAAA,MAAM,MAAM,EAAE,MAsWb,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;AA0GjD,QAAA,MAAM,MAAM,EAAE,MA0Pb,CAAA;AAED,eAAe,MAAM,CAAA"}