@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.
- package/dist/executors/cli-entry.js +1 -1
- package/dist/executors/cli-entry.js.map +1 -1
- package/dist/executors/index.d.ts +3 -2
- package/dist/executors/index.d.ts.map +1 -1
- package/dist/executors/index.js +3 -1
- package/dist/executors/index.js.map +1 -1
- package/dist/executors/providers/claude-agent.d.ts +46 -0
- package/dist/executors/providers/claude-agent.d.ts.map +1 -0
- package/dist/executors/providers/claude-agent.js +222 -0
- package/dist/executors/providers/claude-agent.js.map +1 -0
- package/dist/executors/providers/claude.d.ts.map +1 -1
- package/dist/executors/providers/claude.js +30 -1
- package/dist/executors/providers/claude.js.map +1 -1
- package/dist/executors/providers/index.d.ts +1 -0
- package/dist/executors/providers/index.d.ts.map +1 -1
- package/dist/executors/providers/index.js +1 -0
- package/dist/executors/providers/index.js.map +1 -1
- package/dist/executors/registry.d.ts.map +1 -1
- package/dist/executors/registry.js +2 -0
- package/dist/executors/registry.js.map +1 -1
- package/dist/executors/types.d.ts +136 -1
- package/dist/executors/types.d.ts.map +1 -1
- package/dist/executors/types.js +85 -2
- package/dist/executors/types.js.map +1 -1
- package/dist/executors/workflow-executor.d.ts +31 -4
- package/dist/executors/workflow-executor.d.ts.map +1 -1
- package/dist/executors/workflow-executor.js +89 -11
- package/dist/executors/workflow-executor.js.map +1 -1
- package/dist/workflow/__tests__/resolver.test.js +169 -0
- package/dist/workflow/__tests__/resolver.test.js.map +1 -1
- package/dist/workflow/resolver.d.ts +69 -4
- package/dist/workflow/resolver.d.ts.map +1 -1
- package/dist/workflow/resolver.js +30 -13
- package/dist/workflow/resolver.js.map +1 -1
- 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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"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"}
|
package/dist/executors/types.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
*
|
|
78
|
-
*
|
|
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,
|
|
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
|
-
*
|
|
39
|
-
*
|
|
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
|
-
//
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
|
109
|
-
const
|
|
110
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"workflow-executor.js","sourceRoot":"","sources":["../../src/executors/workflow-executor.ts"],"names":[],"mappings":"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"}
|