@fractary/faber 2.5.3 → 2.5.4

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 (35) hide show
  1. package/dist/executors/cli-entry.js +1 -1
  2. package/dist/executors/cli-entry.js.map +1 -1
  3. package/dist/executors/index.d.ts +3 -2
  4. package/dist/executors/index.d.ts.map +1 -1
  5. package/dist/executors/index.js +3 -1
  6. package/dist/executors/index.js.map +1 -1
  7. package/dist/executors/providers/claude-agent.d.ts +46 -0
  8. package/dist/executors/providers/claude-agent.d.ts.map +1 -0
  9. package/dist/executors/providers/claude-agent.js +222 -0
  10. package/dist/executors/providers/claude-agent.js.map +1 -0
  11. package/dist/executors/providers/claude.d.ts.map +1 -1
  12. package/dist/executors/providers/claude.js +30 -1
  13. package/dist/executors/providers/claude.js.map +1 -1
  14. package/dist/executors/providers/index.d.ts +1 -0
  15. package/dist/executors/providers/index.d.ts.map +1 -1
  16. package/dist/executors/providers/index.js +1 -0
  17. package/dist/executors/providers/index.js.map +1 -1
  18. package/dist/executors/registry.d.ts.map +1 -1
  19. package/dist/executors/registry.js +2 -0
  20. package/dist/executors/registry.js.map +1 -1
  21. package/dist/executors/types.d.ts +136 -1
  22. package/dist/executors/types.d.ts.map +1 -1
  23. package/dist/executors/types.js +85 -2
  24. package/dist/executors/types.js.map +1 -1
  25. package/dist/executors/workflow-executor.d.ts +31 -4
  26. package/dist/executors/workflow-executor.d.ts.map +1 -1
  27. package/dist/executors/workflow-executor.js +89 -11
  28. package/dist/executors/workflow-executor.js.map +1 -1
  29. package/dist/workflow/__tests__/resolver.test.js +169 -0
  30. package/dist/workflow/__tests__/resolver.test.js.map +1 -1
  31. package/dist/workflow/resolver.d.ts +69 -4
  32. package/dist/workflow/resolver.d.ts.map +1 -1
  33. package/dist/workflow/resolver.js +30 -13
  34. package/dist/workflow/resolver.js.map +1 -1
  35. package/package.json +1 -1
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * Defines the abstraction layer between workflow steps and the models/services
5
5
  * that execute them. Enables multi-model workflows where individual steps can
6
- * be routed to different providers (Claude, OpenAI, self-hosted LLMs, HTTP APIs).
6
+ * be routed to different providers (Claude, OpenAI, self-hosted LLMs, HTTP APIs)
7
+ * or agentic harnesses (Claude Code, OpenCode, Codex).
7
8
  */
8
9
  /**
9
10
  * Executor configuration for a workflow step.
@@ -145,4 +146,138 @@ export interface Executor {
145
146
  * Used by the ExecutorRegistry for lazy instantiation.
146
147
  */
147
148
  export type ExecutorFactory = () => Executor;
149
+ /**
150
+ * Agentic harness identifiers for CLI-native workflow execution.
151
+ *
152
+ * Each harness represents a runtime environment that can execute workflow steps.
153
+ * Steps specify their harness to control how they're executed when running
154
+ * via `workflow-execute` (CLI-native mode).
155
+ *
156
+ * In LLM-based mode (workflow-run skill), these are ignored — the orchestrating
157
+ * LLM executes steps directly within its own session.
158
+ */
159
+ export type HarnessType = 'claude-code' | 'opencode' | 'codex' | 'api';
160
+ /**
161
+ * Runtime configuration for a workflow step in CLI-native execution mode.
162
+ *
163
+ * These attributes are resolved via a cascade:
164
+ * step-level > phase_defaults[phase] > workflow.defaults > CLI args > system defaults
165
+ *
166
+ * All fields are optional — unset fields inherit from the next level in the cascade.
167
+ */
168
+ export interface StepRuntimeConfig {
169
+ /** Model identifier (e.g., 'claude-sonnet-4-6-20250514', 'gpt-4o') */
170
+ model?: string;
171
+ /**
172
+ * Agentic harness to use for step execution.
173
+ * - 'claude-code': Claude Agent SDK — full tool use, file access, skills
174
+ * - 'opencode': OpenCode CLI/SDK (future)
175
+ * - 'codex': OpenAI Codex CLI (future)
176
+ * - 'api': Direct Messages API — text-in/text-out, no tool use
177
+ */
178
+ harness?: HarnessType;
179
+ /** Maximum agentic turns (tool-use round trips) */
180
+ maxTurns?: number;
181
+ /** Maximum budget in USD for this step */
182
+ maxBudgetUsd?: number;
183
+ /** Tools the agent is allowed to use (e.g., ['Read', 'Write', 'Edit', 'Bash']) */
184
+ allowedTools?: string[];
185
+ /** Skills to make available (e.g., ['fractary-repo', 'fractary-work']) */
186
+ skills?: string[];
187
+ /** MCP server configurations keyed by server name */
188
+ mcp?: Record<string, {
189
+ command: string;
190
+ args?: string[];
191
+ }>;
192
+ }
193
+ /**
194
+ * Structured metadata auto-injected into each step's system prompt.
195
+ *
196
+ * Provides self-service pointers so the step can pull additional context
197
+ * if needed, without paying the token cost of loading it all upfront.
198
+ * Steps are designed to be stateless by default — the metadata block
199
+ * is a safety net for self-service lookups, not a context dump.
200
+ */
201
+ export interface StepWorkflowMetadata {
202
+ work_id: string;
203
+ plan_id?: string;
204
+ run_id?: string;
205
+ state_path?: string;
206
+ plan_path?: string;
207
+ branch?: string;
208
+ phase: string;
209
+ step_id: string;
210
+ step_index: number;
211
+ steps_total: number;
212
+ project_root: string;
213
+ }
214
+ /**
215
+ * Context for building a step's hierarchical system prompt.
216
+ *
217
+ * System prompt composition order:
218
+ * 1. Workflow-level prompt (from workflow.prompt or defaults.prompt)
219
+ * 2. Phase-level prompt (from phase_defaults[phase].prompt)
220
+ * 3. Structured metadata (auto-injected)
221
+ */
222
+ export interface StepPromptContext {
223
+ /** Workflow-level prompt setting the overall mission */
224
+ workflowPrompt?: string;
225
+ /** Phase-level prompt adding phase-specific guidance */
226
+ phasePrompt?: string;
227
+ /** Structured metadata for self-service context lookups */
228
+ metadata: StepWorkflowMetadata;
229
+ }
230
+ /**
231
+ * Compose the hierarchical system prompt for a step.
232
+ *
233
+ * Concatenates workflow prompt, phase prompt, and structured metadata
234
+ * into a single string suitable for `systemPrompt.append` in the Agent SDK
235
+ * or the system prompt body in direct API mode.
236
+ */
237
+ export declare function buildSystemPrompt(promptContext: StepPromptContext): string;
238
+ /**
239
+ * Default runtime configuration for workflow steps.
240
+ *
241
+ * Workflow-level defaults that apply when no step, phase, or workflow
242
+ * override is specified. Used as the final fallback in the cascade.
243
+ */
244
+ export interface RuntimeDefaults {
245
+ /** Workflow-level system prompt (sets overall mission context) */
246
+ prompt?: string;
247
+ /** Default model for all steps */
248
+ model?: string;
249
+ /** Default harness for all steps */
250
+ harness?: string;
251
+ /** Default max agentic turns */
252
+ max_turns?: number;
253
+ /** Default max budget per step */
254
+ max_budget_usd?: number;
255
+ /** Default allowed tools */
256
+ allowed_tools?: string[];
257
+ /** Default skills */
258
+ skills?: string[];
259
+ /** Default MCP servers */
260
+ mcp?: Record<string, {
261
+ command: string;
262
+ args?: string[];
263
+ }>;
264
+ }
265
+ /**
266
+ * Per-phase runtime defaults (extends RuntimeDefaults with phase-specific prompt).
267
+ */
268
+ export interface PhaseRuntimeDefaults extends RuntimeDefaults {
269
+ /** Phase-level system prompt (adds phase-specific guidance) */
270
+ prompt?: string;
271
+ }
272
+ /**
273
+ * Resolve runtime configuration for a step using the cascade:
274
+ * step-level > phase_defaults[phase] > workflow.defaults > cliOverrides > system defaults
275
+ *
276
+ * @param step - Step-level runtime config (from workflow step definition)
277
+ * @param phaseDefaults - Phase-level defaults (from workflow.phase_defaults[phase])
278
+ * @param workflowDefaults - Workflow-level defaults (from workflow.defaults)
279
+ * @param cliOverrides - CLI-provided overrides (from --model, --harness flags)
280
+ * @returns Fully resolved runtime config
281
+ */
282
+ export declare function resolveRuntimeConfig(step: Partial<StepRuntimeConfig> | undefined, phaseDefaults: Partial<RuntimeDefaults> | undefined, workflowDefaults: Partial<RuntimeDefaults> | undefined, cliOverrides?: Partial<StepRuntimeConfig>): StepRuntimeConfig;
148
283
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;OASG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IAEf,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,gEAAgE;IAChE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzD,iCAAiC;IACjC,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAEF,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IAEf,yDAAyD;IACzD,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAE1C,mCAAmC;IACnC,QAAQ,EAAE;QACR,uCAAuC;QACvC,QAAQ,EAAE,MAAM,CAAC;QACjB,iCAAiC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,yCAAyC;QACzC,WAAW,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,WAAW,CAAC,EAAE;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IAEF,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;;;OAOG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,cAAc,CAAC,CAAC;IAE3B;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnF;AAMD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,90 @@
3
3
  *
4
4
  * Defines the abstraction layer between workflow steps and the models/services
5
5
  * that execute them. Enables multi-model workflows where individual steps can
6
- * be routed to different providers (Claude, OpenAI, self-hosted LLMs, HTTP APIs).
6
+ * be routed to different providers (Claude, OpenAI, self-hosted LLMs, HTTP APIs)
7
+ * or agentic harnesses (Claude Code, OpenCode, Codex).
7
8
  */
8
- export {};
9
+ /**
10
+ * Compose the hierarchical system prompt for a step.
11
+ *
12
+ * Concatenates workflow prompt, phase prompt, and structured metadata
13
+ * into a single string suitable for `systemPrompt.append` in the Agent SDK
14
+ * or the system prompt body in direct API mode.
15
+ */
16
+ export function buildSystemPrompt(promptContext) {
17
+ const parts = [];
18
+ if (promptContext.workflowPrompt) {
19
+ parts.push(promptContext.workflowPrompt);
20
+ }
21
+ if (promptContext.phasePrompt) {
22
+ parts.push(promptContext.phasePrompt);
23
+ }
24
+ // Structured metadata block
25
+ const meta = promptContext.metadata;
26
+ const metadataBlock = [
27
+ 'FABER_WORKFLOW_CONTEXT:',
28
+ ` work_id: "${meta.work_id}"`,
29
+ meta.plan_id ? ` plan_id: "${meta.plan_id}"` : null,
30
+ meta.run_id ? ` run_id: "${meta.run_id}"` : null,
31
+ meta.state_path ? ` state_path: "${meta.state_path}"` : null,
32
+ meta.plan_path ? ` plan_path: "${meta.plan_path}"` : null,
33
+ meta.branch ? ` branch: "${meta.branch}"` : null,
34
+ ` phase: "${meta.phase}"`,
35
+ ` step_id: "${meta.step_id}"`,
36
+ ` step_index: ${meta.step_index}`,
37
+ ` steps_total: ${meta.steps_total}`,
38
+ ` project_root: "${meta.project_root}"`,
39
+ ].filter(Boolean).join('\n');
40
+ parts.push(metadataBlock);
41
+ return parts.join('\n\n');
42
+ }
43
+ /**
44
+ * Resolve runtime configuration for a step using the cascade:
45
+ * step-level > phase_defaults[phase] > workflow.defaults > cliOverrides > system defaults
46
+ *
47
+ * @param step - Step-level runtime config (from workflow step definition)
48
+ * @param phaseDefaults - Phase-level defaults (from workflow.phase_defaults[phase])
49
+ * @param workflowDefaults - Workflow-level defaults (from workflow.defaults)
50
+ * @param cliOverrides - CLI-provided overrides (from --model, --harness flags)
51
+ * @returns Fully resolved runtime config
52
+ */
53
+ export function resolveRuntimeConfig(step, phaseDefaults, workflowDefaults, cliOverrides) {
54
+ return {
55
+ model: step?.model ??
56
+ phaseDefaults?.model ??
57
+ workflowDefaults?.model ??
58
+ cliOverrides?.model ??
59
+ undefined,
60
+ harness: (step?.harness ??
61
+ phaseDefaults?.harness ??
62
+ workflowDefaults?.harness ??
63
+ cliOverrides?.harness ??
64
+ 'claude-code'),
65
+ maxTurns: step?.maxTurns ??
66
+ phaseDefaults?.max_turns ??
67
+ workflowDefaults?.max_turns ??
68
+ cliOverrides?.maxTurns ??
69
+ undefined,
70
+ maxBudgetUsd: step?.maxBudgetUsd ??
71
+ phaseDefaults?.max_budget_usd ??
72
+ workflowDefaults?.max_budget_usd ??
73
+ cliOverrides?.maxBudgetUsd ??
74
+ undefined,
75
+ allowedTools: step?.allowedTools ??
76
+ phaseDefaults?.allowed_tools ??
77
+ workflowDefaults?.allowed_tools ??
78
+ cliOverrides?.allowedTools ??
79
+ undefined,
80
+ skills: step?.skills ??
81
+ phaseDefaults?.skills ??
82
+ workflowDefaults?.skills ??
83
+ cliOverrides?.skills ??
84
+ undefined,
85
+ mcp: step?.mcp ??
86
+ phaseDefaults?.mcp ??
87
+ workflowDefaults?.mcp ??
88
+ cliOverrides?.mcp ??
89
+ undefined,
90
+ };
91
+ }
9
92
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"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"}
@@ -15,9 +15,9 @@
15
15
  * const result = await executor.execute(plan, { workId: '123' });
16
16
  * ```
17
17
  */
18
- import type { ExecutorResult, StepExecutorConfig } from './types.js';
18
+ import type { ExecutorResult, StepExecutorConfig, HarnessType } from './types.js';
19
19
  import { ExecutorRegistry } from './registry.js';
20
- import type { ResolvedWorkflow, WorkflowStep, StepResultHandling } from '../workflow/resolver.js';
20
+ import type { ResolvedWorkflow, WorkflowStep, WorkflowFileConfig, StepResultHandling } from '../workflow/resolver.js';
21
21
  /** Options for workflow execution */
22
22
  export interface WorkflowExecuteOptions {
23
23
  /** Work item ID */
@@ -42,6 +42,20 @@ export interface WorkflowExecuteOptions {
42
42
  onPhaseStart?: (phase: string) => void;
43
43
  /** Callback for phase complete */
44
44
  onPhaseComplete?: (phase: string, status: 'completed' | 'failed' | 'skipped') => void;
45
+ /** Run ID for state tracking */
46
+ runId?: string;
47
+ /** Plan ID for metadata */
48
+ planId?: string;
49
+ /** Plan file path for metadata */
50
+ planPath?: string;
51
+ /** State file path for metadata */
52
+ statePath?: string;
53
+ /** Git branch name */
54
+ branch?: string;
55
+ /** CLI-level harness override (applies to all steps) */
56
+ cliHarness?: HarnessType;
57
+ /** CLI-level model override (applies to all steps) */
58
+ cliModel?: string;
45
59
  }
46
60
  /** Result from a complete workflow execution */
47
61
  export interface WorkflowExecuteResult {
@@ -74,15 +88,28 @@ export declare class WorkflowExecutor {
74
88
  * For each step, resolves the executor from the config cascade
75
89
  * and dispatches execution.
76
90
  *
77
- * Steps without an executor config use the Claude API executor
78
- * as the default (since we're in CLI mode, not Claude Code).
91
+ * Routing priority:
92
+ * 1. If step prompt starts with `!` direct shell command (via claude-agent executor)
93
+ * 2. If step has `harness` (directly or via cascade) → use harness-mapped executor
94
+ * 3. If step has legacy `executor` config → use ExecutorRegistry
95
+ * 4. Default → 'claude-agent' executor (Agent SDK)
79
96
  */
80
97
  execute(workflow: {
81
98
  phases: ResolvedWorkflow['phases'];
82
99
  executor?: StepExecutorConfig;
83
100
  phase_executors?: Partial<Record<string, StepExecutorConfig>>;
84
101
  result_handling?: StepResultHandling;
102
+ /** Workflow-level system prompt for CLI-native execution */
103
+ prompt?: string;
104
+ /** Default runtime configuration */
105
+ defaults?: WorkflowFileConfig['defaults'];
106
+ /** Per-phase runtime defaults */
107
+ phase_defaults?: WorkflowFileConfig['phase_defaults'];
85
108
  }, options: WorkflowExecuteOptions): Promise<WorkflowExecuteResult>;
109
+ /**
110
+ * Map a harness type to an executor provider name in the registry.
111
+ */
112
+ private harnessToExecutor;
86
113
  /**
87
114
  * Resolve result handling for a step using the cascade:
88
115
  * step > phase > workflow > defaults
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../src/executors/workflow-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAEV,cAAc,EACd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAEV,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAQjC,qCAAqC;AACrC,MAAM,WAAW,sBAAsB;IACrC,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,wBAAwB;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iCAAiC;IACjC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxF,mCAAmC;IACnC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACrF,+BAA+B;IAC/B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,kCAAkC;IAClC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC;CACvF;AAED,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;CACxB;AAMD,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,gBAAgB;IAE9C;;;;;;;;;OASG;IACG,OAAO,CACX,QAAQ,EAAE;QACR,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACnC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;QAC9B,eAAe,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAC9D,eAAe,CAAC,EAAE,kBAAkB,CAAC;KACtC,EACD,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC;IAoJjC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAuB9B"}
1
+ {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../src/executors/workflow-executor.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@
15
15
  * const result = await executor.execute(plan, { workId: '123' });
16
16
  * ```
17
17
  */
18
+ import { resolveRuntimeConfig } from './types.js';
18
19
  // ============================================================================
19
20
  // Types
20
21
  // ============================================================================
@@ -35,8 +36,11 @@ export class WorkflowExecutor {
35
36
  * For each step, resolves the executor from the config cascade
36
37
  * and dispatches execution.
37
38
  *
38
- * Steps without an executor config use the Claude API executor
39
- * as the default (since we're in CLI mode, not Claude Code).
39
+ * Routing priority:
40
+ * 1. If step prompt starts with `!` direct shell command (via claude-agent executor)
41
+ * 2. If step has `harness` (directly or via cascade) → use harness-mapped executor
42
+ * 3. If step has legacy `executor` config → use ExecutorRegistry
43
+ * 4. Default → 'claude-agent' executor (Agent SDK)
40
44
  */
41
45
  async execute(workflow, options) {
42
46
  const startTime = Date.now();
@@ -44,6 +48,7 @@ export class WorkflowExecutor {
44
48
  let totalStepsCompleted = 0;
45
49
  let totalSteps = 0;
46
50
  let workflowFailed = false;
51
+ let globalStepIndex = 0;
47
52
  // Count total steps
48
53
  for (const phaseName of PHASE_ORDER) {
49
54
  const phase = workflow.phases[phaseName];
@@ -53,6 +58,10 @@ export class WorkflowExecutor {
53
58
  }
54
59
  // Track outputs from previous steps for context
55
60
  const previousOutputs = {};
61
+ // Build CLI overrides for runtime config resolution
62
+ const cliOverrides = (options.cliHarness || options.cliModel)
63
+ ? { harness: options.cliHarness, model: options.cliModel }
64
+ : undefined;
56
65
  for (const phaseName of PHASE_ORDER) {
57
66
  const phase = workflow.phases[phaseName];
58
67
  // Skip disabled phases
@@ -80,14 +89,49 @@ export class WorkflowExecutor {
80
89
  const phaseStartTime = Date.now();
81
90
  const stepResults = [];
82
91
  let phaseFailed = false;
92
+ // Get phase-level defaults
93
+ const phaseDefaults = workflow.phase_defaults?.[phaseName];
83
94
  for (let i = 0; i < phase.steps.length; i++) {
84
95
  const step = phase.steps[i];
85
96
  // If stepToRun is specified, skip all other steps
86
97
  if (options.stepToRun && step.id !== options.stepToRun) {
98
+ globalStepIndex++;
87
99
  continue;
88
100
  }
89
101
  options.onStepStart?.(phaseName, step, i, phase.steps.length);
90
- // Build execution context
102
+ // Resolve runtime config via cascade:
103
+ // step > phase_defaults > workflow.defaults > CLI args > system defaults
104
+ const stepRuntimeAttrs = {
105
+ model: step.model,
106
+ harness: step.harness,
107
+ maxTurns: step.max_turns,
108
+ maxBudgetUsd: step.max_budget_usd,
109
+ allowedTools: step.allowed_tools,
110
+ skills: step.skills,
111
+ mcp: step.mcp,
112
+ };
113
+ const runtimeConfig = resolveRuntimeConfig(stepRuntimeAttrs, phaseDefaults, workflow.defaults, cliOverrides);
114
+ // Build workflow metadata for system prompt
115
+ const metadata = {
116
+ work_id: options.workId,
117
+ plan_id: options.planId,
118
+ run_id: options.runId,
119
+ state_path: options.statePath,
120
+ plan_path: options.planPath,
121
+ branch: options.branch,
122
+ phase: phaseName,
123
+ step_id: step.id,
124
+ step_index: globalStepIndex,
125
+ steps_total: totalSteps,
126
+ project_root: options.workingDirectory || process.cwd(),
127
+ };
128
+ // Build prompt context (workflow prompt + phase prompt + metadata)
129
+ const promptContext = {
130
+ workflowPrompt: workflow.prompt || workflow.defaults?.prompt,
131
+ phasePrompt: phaseDefaults?.prompt,
132
+ metadata,
133
+ };
134
+ // Build execution context (extended with runtime config and prompt context)
91
135
  const context = {
92
136
  workId: options.workId,
93
137
  phase: phaseName,
@@ -96,18 +140,39 @@ export class WorkflowExecutor {
96
140
  previousOutputs,
97
141
  issue: options.issue,
98
142
  workingDirectory: options.workingDirectory || process.cwd(),
143
+ runId: options.runId,
144
+ runtimeConfig,
145
+ promptContext,
99
146
  };
100
- // Resolve executor (cascade: step > phase > workflow > default 'claude')
101
- const resolved = this.registry.resolveForStep(step, phaseName, workflow.executor, workflow.phase_executors);
102
147
  let result;
103
- if (resolved) {
104
- // Execute with the resolved executor
105
- result = await resolved.executor.execute(step.prompt, context, resolved.config);
148
+ // Determine execution path
149
+ const isCommand = step.prompt.trim().startsWith('!');
150
+ const hasHarness = runtimeConfig.harness != null;
151
+ const hasLegacyExecutor = step.executor != null;
152
+ if (isCommand || hasHarness) {
153
+ // Harness-based routing (new path)
154
+ // Commands (! prefix) always go to claude-agent executor which handles them
155
+ // Other steps route based on harness type
156
+ const executorName = this.harnessToExecutor(runtimeConfig.harness || 'claude-code');
157
+ const executor = this.registry.get(executorName);
158
+ result = await executor.execute(step.prompt, context, { provider: executorName });
159
+ }
160
+ else if (hasLegacyExecutor) {
161
+ // Legacy executor-based routing
162
+ const resolved = this.registry.resolveForStep(step, phaseName, workflow.executor, workflow.phase_executors);
163
+ if (resolved) {
164
+ result = await resolved.executor.execute(step.prompt, context, resolved.config);
165
+ }
166
+ else {
167
+ const claudeAgent = this.registry.get('claude-agent');
168
+ result = await claudeAgent.execute(step.prompt, context, { provider: 'claude-agent' });
169
+ }
106
170
  }
107
171
  else {
108
- // No executor configured — use claude as default in CLI mode
109
- const claudeExecutor = this.registry.get('claude');
110
- result = await claudeExecutor.execute(step.prompt, context, { provider: 'claude' });
172
+ // No routing config — use default executor (claude-agent for full agentic)
173
+ const executorName = this.harnessToExecutor(runtimeConfig.harness || 'claude-code');
174
+ const executor = this.registry.get(executorName);
175
+ result = await executor.execute(step.prompt, context, { provider: executorName });
111
176
  }
112
177
  stepResults.push({
113
178
  stepId: step.id,
@@ -120,6 +185,7 @@ export class WorkflowExecutor {
120
185
  status: result.status,
121
186
  };
122
187
  totalStepsCompleted++;
188
+ globalStepIndex++;
123
189
  options.onStepComplete?.(phaseName, step, result);
124
190
  // Handle step result
125
191
  if (result.status === 'failure') {
@@ -152,6 +218,18 @@ export class WorkflowExecutor {
152
218
  steps_total: totalSteps,
153
219
  };
154
220
  }
221
+ /**
222
+ * Map a harness type to an executor provider name in the registry.
223
+ */
224
+ harnessToExecutor(harness) {
225
+ switch (harness) {
226
+ case 'claude-code': return 'claude-agent';
227
+ case 'api': return 'claude';
228
+ case 'opencode': return 'claude-agent'; // TODO: OpenCode executor
229
+ case 'codex': return 'claude-agent'; // TODO: Codex executor
230
+ default: return 'claude-agent';
231
+ }
232
+ }
155
233
  /**
156
234
  * Resolve result handling for a step using the cascade:
157
235
  * step > phase > workflow > defaults
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-executor.js","sourceRoot":"","sources":["../../src/executors/workflow-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-executor.js","sourceRoot":"","sources":["../../src/executors/workflow-executor.ts"],"names":[],"mappings":"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"}