@jterrats/open-orchestra 0.4.2-beta.2 → 0.5.0-beta.0

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 (148) hide show
  1. package/README.md +29 -5
  2. package/dist/advisory-artifacts.d.ts +6 -0
  3. package/dist/advisory-artifacts.js +37 -1
  4. package/dist/advisory-artifacts.js.map +1 -1
  5. package/dist/assets/web-console.js +297 -4
  6. package/dist/cli.js +13 -118
  7. package/dist/cli.js.map +1 -1
  8. package/dist/command-manifest.d.ts +3 -0
  9. package/dist/command-manifest.js +132 -42
  10. package/dist/command-manifest.js.map +1 -1
  11. package/dist/command-utils.d.ts +5 -0
  12. package/dist/command-utils.js +23 -0
  13. package/dist/command-utils.js.map +1 -1
  14. package/dist/commands.d.ts +6 -42
  15. package/dist/commands.js +204 -1372
  16. package/dist/commands.js.map +1 -1
  17. package/dist/constants.js +1 -0
  18. package/dist/constants.js.map +1 -1
  19. package/dist/delivery-commands.d.ts +10 -0
  20. package/dist/delivery-commands.js +152 -0
  21. package/dist/delivery-commands.js.map +1 -0
  22. package/dist/github.d.ts +50 -1
  23. package/dist/github.js +234 -0
  24. package/dist/github.js.map +1 -1
  25. package/dist/health-checks.d.ts +1 -0
  26. package/dist/health-checks.js +11 -1
  27. package/dist/health-checks.js.map +1 -1
  28. package/dist/health-commands.js +2 -0
  29. package/dist/health-commands.js.map +1 -1
  30. package/dist/memory.d.ts +2 -1
  31. package/dist/memory.js +71 -10
  32. package/dist/memory.js.map +1 -1
  33. package/dist/package-update-check.d.ts +5 -1
  34. package/dist/package-update-check.js +20 -8
  35. package/dist/package-update-check.js.map +1 -1
  36. package/dist/planning-commands.d.ts +14 -0
  37. package/dist/planning-commands.js +372 -0
  38. package/dist/planning-commands.js.map +1 -0
  39. package/dist/release-candidate.d.ts +2 -0
  40. package/dist/release-candidate.js +9 -14
  41. package/dist/release-candidate.js.map +1 -1
  42. package/dist/release-commands.d.ts +2 -0
  43. package/dist/release-commands.js +58 -6
  44. package/dist/release-commands.js.map +1 -1
  45. package/dist/release-readiness.d.ts +49 -0
  46. package/dist/release-readiness.js +172 -0
  47. package/dist/release-readiness.js.map +1 -0
  48. package/dist/runtime-commands.js +2 -5
  49. package/dist/runtime-commands.js.map +1 -1
  50. package/dist/setup-agents-import.js +1 -3
  51. package/dist/setup-agents-import.js.map +1 -1
  52. package/dist/skills-catalog-service.d.ts +2 -0
  53. package/dist/skills-catalog-service.js +8 -0
  54. package/dist/skills-catalog-service.js.map +1 -0
  55. package/dist/skills-catalog.d.ts +2 -0
  56. package/dist/skills-catalog.js +389 -0
  57. package/dist/skills-catalog.js.map +1 -0
  58. package/dist/skills-commands.js +1 -11
  59. package/dist/skills-commands.js.map +1 -1
  60. package/dist/skills-events.d.ts +9 -0
  61. package/dist/skills-events.js +50 -0
  62. package/dist/skills-events.js.map +1 -0
  63. package/dist/skills-memory.d.ts +18 -0
  64. package/dist/skills-memory.js +127 -0
  65. package/dist/skills-memory.js.map +1 -0
  66. package/dist/skills-planning.d.ts +2 -0
  67. package/dist/skills-planning.js +87 -0
  68. package/dist/skills-planning.js.map +1 -0
  69. package/dist/skills-render.d.ts +14 -0
  70. package/dist/skills-render.js +83 -0
  71. package/dist/skills-render.js.map +1 -0
  72. package/dist/skills-validation.d.ts +2 -0
  73. package/dist/skills-validation.js +49 -0
  74. package/dist/skills-validation.js.map +1 -0
  75. package/dist/skills.d.ts +6 -42
  76. package/dist/skills.js +6 -773
  77. package/dist/skills.js.map +1 -1
  78. package/dist/task-graph-commands.d.ts +14 -0
  79. package/dist/task-graph-commands.js +367 -0
  80. package/dist/task-graph-commands.js.map +1 -0
  81. package/dist/types/context.d.ts +12 -0
  82. package/dist/types/context.js +2 -0
  83. package/dist/types/context.js.map +1 -0
  84. package/dist/types/metrics.d.ts +114 -0
  85. package/dist/types/metrics.js +2 -0
  86. package/dist/types/metrics.js.map +1 -0
  87. package/dist/types/model-config.d.ts +212 -0
  88. package/dist/types/model-config.js +2 -0
  89. package/dist/types/model-config.js.map +1 -0
  90. package/dist/types/runtime.d.ts +93 -0
  91. package/dist/types/runtime.js +2 -0
  92. package/dist/types/runtime.js.map +1 -0
  93. package/dist/types/skills.d.ts +147 -0
  94. package/dist/types/skills.js +2 -0
  95. package/dist/types/skills.js.map +1 -0
  96. package/dist/types/tasks.d.ts +171 -0
  97. package/dist/types/tasks.js +2 -0
  98. package/dist/types/tasks.js.map +1 -0
  99. package/dist/types/workflow-run.d.ts +79 -0
  100. package/dist/types/workflow-run.js +2 -0
  101. package/dist/types/workflow-run.js.map +1 -0
  102. package/dist/types.d.ts +12 -833
  103. package/dist/types.js +1 -1
  104. package/dist/types.js.map +1 -1
  105. package/dist/upgrade-commands.d.ts +2 -0
  106. package/dist/upgrade-commands.js +65 -0
  107. package/dist/upgrade-commands.js.map +1 -0
  108. package/dist/web-api-read-routes.d.ts +5 -0
  109. package/dist/web-api-read-routes.js +37 -0
  110. package/dist/web-api-read-routes.js.map +1 -0
  111. package/dist/web-api.d.ts +1 -3
  112. package/dist/web-api.js +23 -45
  113. package/dist/web-api.js.map +1 -1
  114. package/dist/web-console-sections.d.ts +2 -0
  115. package/dist/web-console-sections.js +7 -0
  116. package/dist/web-console-sections.js.map +1 -0
  117. package/dist/web-console.js +23 -3
  118. package/dist/web-console.js.map +1 -1
  119. package/dist/workflow-approval-service.d.ts +9 -0
  120. package/dist/workflow-approval-service.js +126 -0
  121. package/dist/workflow-approval-service.js.map +1 -0
  122. package/dist/workflow-approval-utils.d.ts +10 -0
  123. package/dist/workflow-approval-utils.js +82 -0
  124. package/dist/workflow-approval-utils.js.map +1 -0
  125. package/dist/workflow-budget-utils.d.ts +7 -0
  126. package/dist/workflow-budget-utils.js +96 -0
  127. package/dist/workflow-budget-utils.js.map +1 -0
  128. package/dist/workflow-evidence-service.d.ts +7 -0
  129. package/dist/workflow-evidence-service.js +100 -0
  130. package/dist/workflow-evidence-service.js.map +1 -0
  131. package/dist/workflow-run-commands.d.ts +8 -0
  132. package/dist/workflow-run-commands.js +479 -0
  133. package/dist/workflow-run-commands.js.map +1 -0
  134. package/dist/workflow-services.d.ts +5 -17
  135. package/dist/workflow-services.js +26 -479
  136. package/dist/workflow-services.js.map +1 -1
  137. package/dist/workflow-summary-service.d.ts +4 -0
  138. package/dist/workflow-summary-service.js +82 -0
  139. package/dist/workflow-summary-service.js.map +1 -0
  140. package/dist/workspace.d.ts +18 -1
  141. package/dist/workspace.js +66 -4
  142. package/dist/workspace.js.map +1 -1
  143. package/docs/orchestra-mvp.md +158 -114
  144. package/docs/package-naming.md +20 -0
  145. package/docs/persona-workflows.md +209 -0
  146. package/docs/runtime-adapters.md +15 -14
  147. package/docs/runtime-llm-flow.md +29 -28
  148. package/package.json +3 -2
@@ -0,0 +1,479 @@
1
+ import { appendEvent } from "./workspace.js";
2
+ import { requireArg } from "./args.js";
3
+ import { numberOption, parseCsv, stringOption } from "./command-utils.js";
4
+ import { AUTONOMOUS_PHASE_SEQUENCE, autonomousRunsPath, cancelRun, checkArchitectSizing, closePhase, createAutonomousRun, initPhase, listActiveAutonomousRuns, listAutonomousRuns, markRunDone, markRunFailed, readAutonomousRun, resumePhaseFromClarification, resumePhaseIndex, suspendPhaseForClarification, } from "./autonomous-workflow.js";
5
+ import { answerClarification, listClarifications, listClarificationsByTask, openClarification, resolveClarificationRole, } from "./clarification.js";
6
+ import { executePhaseWithLlm } from "./phase-executor.js";
7
+ import { addEvidence, approveWorkflowGate, generatePullRequestSummary, getWorkflowConfig, } from "./workflow-services.js";
8
+ import { buildPrBody, createPullRequest } from "./github.js";
9
+ const GATE_MODES = ["none", "phase", "all"];
10
+ export async function workflowRunCommand(options, io) {
11
+ const cwd = process.cwd();
12
+ const taskId = requireArg(options, "task");
13
+ const gates = (stringOption(options.gates) ?? "phase");
14
+ const maxIterations = numberOption(options["max-iterations"], 5);
15
+ const timeoutMinutes = numberOption(options["timeout-minutes"], 0);
16
+ const file = autonomousRunsPath(cwd);
17
+ const phaseSelection = await resolveWorkflowPhaseSelection(cwd, options);
18
+ const config = await getWorkflowConfig(cwd);
19
+ const phaseTimeoutMinutes = config.workflow?.phaseTimeoutMinutes ?? 0;
20
+ if (!GATE_MODES.includes(gates)) {
21
+ throw new Error(`--gates must be one of: ${GATE_MODES.join(", ")}`);
22
+ }
23
+ if (timeoutMinutes < 0) {
24
+ throw new Error("--timeout-minutes must be 0 or greater");
25
+ }
26
+ if (phaseTimeoutMinutes < 0) {
27
+ throw new Error("workflow.phaseTimeoutMinutes must be 0 or greater");
28
+ }
29
+ if (options["dry-run"]) {
30
+ return workflowDryRun(options, io, taskId, gates, maxIterations, phaseSelection);
31
+ }
32
+ let run;
33
+ let startIndex;
34
+ if (options.resume) {
35
+ const existing = await readAutonomousRun(cwd, String(options.resume));
36
+ if (!existing) {
37
+ throw new Error(`workflow run not found: ${String(options.resume)}`);
38
+ }
39
+ run = existing;
40
+ if (run.status === "canceled" || run.status === "failed") {
41
+ throw new Error(`workflow run ${run.id} is ${run.status} and cannot be resumed`);
42
+ }
43
+ const resumeSequence = phaseSequenceForRun(run, phaseSelection.sequence);
44
+ startIndex = resumePhaseIndex(run, resumeSequence);
45
+ if (startIndex === -1) {
46
+ io.log(`Workflow ${run.id} is already complete`);
47
+ if (options.json)
48
+ io.log(JSON.stringify({ run, file, cwd }, null, 2));
49
+ return;
50
+ }
51
+ const pausedGate = run.phases.findLast((phase) => phase.status === "gate_paused");
52
+ if (pausedGate && !pausedGate.approvedBy) {
53
+ io.log(`WARN: gate ${pausedGate.gateId ?? gateIdForPausedPhase(pausedGate.phase, resumeSequence)} has no recorded approval; continuing for backward compatibility`);
54
+ }
55
+ io.log(`Resuming run ${run.id} from phase ${resumeSequence[startIndex]?.phase}`);
56
+ run = { ...run, phaseSequence: resumeSequence.map((phase) => phase.phase) };
57
+ }
58
+ else {
59
+ run = await createAutonomousRun(cwd, {
60
+ taskId,
61
+ gates,
62
+ maxIterations,
63
+ phaseSequence: phaseSelection.sequence.map((phase) => phase.phase),
64
+ skippedPhases: phaseSelection.skipped,
65
+ });
66
+ startIndex = 0;
67
+ io.log(`Started autonomous workflow ${run.id} for task ${taskId} [gates=${gates}]`);
68
+ }
69
+ run = await executePhases(cwd, run, startIndex, io, phaseSequenceForRun(run, phaseSelection.sequence), {
70
+ runTimeoutMinutes: timeoutMinutes,
71
+ phaseTimeoutMinutes,
72
+ });
73
+ const result = { run, file, cwd };
74
+ if (options.json) {
75
+ io.log(JSON.stringify(result, null, 2));
76
+ return;
77
+ }
78
+ if (run.status === "done") {
79
+ io.log(`Workflow complete [run=${run.id}]`);
80
+ }
81
+ else if (run.status === "paused") {
82
+ io.log(`Workflow paused — approve gate review then run: orchestra workflow run --task ${taskId} --resume ${run.id}`);
83
+ }
84
+ else {
85
+ io.log(`Workflow ${run.status} [run=${run.id}]`);
86
+ }
87
+ }
88
+ export async function workflowRunListCommand(options, io) {
89
+ const cwd = process.cwd();
90
+ const runs = options.active
91
+ ? await listActiveAutonomousRuns(cwd)
92
+ : await listAutonomousRuns(cwd);
93
+ if (options.json) {
94
+ io.log(JSON.stringify(runs, null, 2));
95
+ return;
96
+ }
97
+ if (runs.length === 0) {
98
+ io.log("No workflow runs");
99
+ return;
100
+ }
101
+ for (const run of runs) {
102
+ const phases = run.phases.map((p) => `${p.phase}:${p.status}`).join(" → ");
103
+ io.log(`${run.id} [${run.status}] task=${run.taskId} gates=${run.gates}`);
104
+ if (phases)
105
+ io.log(` ${phases}`);
106
+ }
107
+ }
108
+ export async function workflowCancelCommand(options, io) {
109
+ const run = await cancelRun(process.cwd(), requireArg(options, "run"), stringOption(options.reason) ?? "Workflow run canceled");
110
+ if (options.json) {
111
+ io.log(JSON.stringify(run, null, 2));
112
+ return;
113
+ }
114
+ io.log(`Workflow canceled [run=${run.id}]`);
115
+ }
116
+ export async function workflowGateApproveCommand(options, io) {
117
+ const approval = await approveWorkflowGate({
118
+ runId: requireArg(options, "run"),
119
+ gateId: requireArg(options, "gate"),
120
+ approver: requireArg(options, "approver"),
121
+ rationale: requireArg(options, "rationale"),
122
+ });
123
+ if (options.json) {
124
+ io.log(JSON.stringify(approval, null, 2));
125
+ return;
126
+ }
127
+ io.log(approval.alreadyApproved
128
+ ? `Gate ${approval.gateId} already approved by ${approval.approver}`
129
+ : `Approved gate ${approval.gateId} for run ${approval.run.id}`);
130
+ }
131
+ export async function workflowClarifyCommand(options, io) {
132
+ const cwd = process.cwd();
133
+ const runId = requireArg(options, "run");
134
+ const from = await resolveClarificationRole(cwd, requireArg(options, "from"));
135
+ const to = await resolveClarificationRole(cwd, requireArg(options, "to"));
136
+ const question = requireArg(options, "question");
137
+ const run = await readAutonomousRun(cwd, runId);
138
+ if (!run)
139
+ throw new Error(`workflow run not found: ${runId}`);
140
+ const activePhaseIdx = run.phases.findIndex((p) => p.role === from &&
141
+ (p.status === "running" || p.status === "awaiting_clarification"));
142
+ if (activePhaseIdx === -1) {
143
+ throw new Error(`no active phase found for role ${from} in run ${runId}`);
144
+ }
145
+ const activePhase = run.phases[activePhaseIdx];
146
+ const record = await openClarification(cwd, {
147
+ runId,
148
+ taskId: run.taskId,
149
+ fromRole: from,
150
+ to,
151
+ question,
152
+ });
153
+ if (activePhase.status === "running") {
154
+ const sequence = phaseSequenceForRun(run);
155
+ const phaseSeqIdx = sequence.findIndex((d) => d.phase === activePhase.phase);
156
+ await suspendPhaseForClarification(cwd, run, phaseSeqIdx, sequence);
157
+ }
158
+ if (options.json) {
159
+ io.log(JSON.stringify(record, null, 2));
160
+ return;
161
+ }
162
+ io.log(`Clarification ${record.id} opened — waiting for ${record.toRole}`);
163
+ io.log(` Question: ${record.question}`);
164
+ io.log(` Respond with:`);
165
+ io.log(` orchestra workflow clarify-respond --run ${runId} --clarification ${record.id} --answer "<text>"`);
166
+ }
167
+ export async function workflowClarifyRespondCommand(options, io) {
168
+ const cwd = process.cwd();
169
+ const runId = requireArg(options, "run");
170
+ const clarificationId = requireArg(options, "clarification");
171
+ const answer = requireArg(options, "answer");
172
+ const run = await readAutonomousRun(cwd, runId);
173
+ if (!run)
174
+ throw new Error(`workflow run not found: ${runId}`);
175
+ const record = await answerClarification(cwd, {
176
+ id: clarificationId,
177
+ answer,
178
+ });
179
+ const sequence = phaseSequenceForRun(run);
180
+ const phaseSeqIdx = sequence.findIndex((d) => d.role === record.fromRole);
181
+ if (phaseSeqIdx !== -1) {
182
+ const phase = run.phases.find((p) => p.role === record.fromRole);
183
+ if (phase?.status === "awaiting_clarification") {
184
+ await resumePhaseFromClarification(cwd, run, phaseSeqIdx, sequence);
185
+ }
186
+ }
187
+ if (options.json) {
188
+ io.log(JSON.stringify(record, null, 2));
189
+ return;
190
+ }
191
+ io.log(`Clarification ${record.id} answered`);
192
+ io.log(` Answer: ${record.answer}`);
193
+ io.log(` Resume with:`);
194
+ io.log(` orchestra workflow run --task ${run.taskId} --resume ${runId}`);
195
+ }
196
+ export async function workflowClarifyListCommand(options, io) {
197
+ const cwd = process.cwd();
198
+ const runId = stringOption(options.run);
199
+ const taskId = stringOption(options.task);
200
+ if (runId && taskId) {
201
+ throw new Error("workflow clarify-list accepts either --run or --task, not both");
202
+ }
203
+ if (!runId && !taskId) {
204
+ throw new Error("workflow clarify-list requires --run or --task");
205
+ }
206
+ const clarifications = runId
207
+ ? await listClarifications(cwd, runId)
208
+ : await listClarificationsByTask(cwd, taskId);
209
+ if (options.json) {
210
+ io.log(JSON.stringify(clarifications, null, 2));
211
+ return;
212
+ }
213
+ if (clarifications.length === 0) {
214
+ io.log(runId
215
+ ? `No clarifications for run ${runId}`
216
+ : `No clarifications for task ${taskId}`);
217
+ return;
218
+ }
219
+ for (const c of clarifications) {
220
+ const status = c.status === "answered" ? "✓" : "⏳";
221
+ io.log(`${status} [${c.id}] ${c.fromRole} → ${c.toRole}`);
222
+ io.log(` Q: ${c.question}`);
223
+ if (c.answer)
224
+ io.log(` A: ${c.answer}`);
225
+ }
226
+ }
227
+ async function resolveWorkflowPhaseSelection(root, options) {
228
+ const config = await getWorkflowConfig(root);
229
+ const configuredIds = config.workflow?.phaseSequence;
230
+ const baseSequence = configuredIds
231
+ ? phaseSequenceFromIds(configuredIds, "workflow.phaseSequence")
232
+ : AUTONOMOUS_PHASE_SEQUENCE;
233
+ const skipIds = parseCsv(options.skip);
234
+ validatePhaseIds(skipIds, "--skip");
235
+ const skipSet = new Set(skipIds);
236
+ const sequence = baseSequence.filter((phase) => !skipSet.has(phase.phase));
237
+ validateWorkflowPhaseSequence(sequence);
238
+ const sequenceIds = new Set(sequence.map((phase) => phase.phase));
239
+ const skipped = AUTONOMOUS_PHASE_SEQUENCE.filter((phase) => !sequenceIds.has(phase.phase));
240
+ return { sequence, skipped };
241
+ }
242
+ function phaseSequenceForRun(run, fallback = AUTONOMOUS_PHASE_SEQUENCE) {
243
+ return run.phaseSequence
244
+ ? phaseSequenceFromIds(run.phaseSequence, "run.phaseSequence")
245
+ : fallback;
246
+ }
247
+ function phaseSequenceFromIds(ids, source) {
248
+ validatePhaseIds(ids, source);
249
+ const byId = new Map(AUTONOMOUS_PHASE_SEQUENCE.map((phase) => [phase.phase, phase]));
250
+ return ids.map((id) => byId.get(id));
251
+ }
252
+ function validatePhaseIds(ids, source) {
253
+ const valid = new Set(AUTONOMOUS_PHASE_SEQUENCE.map((phase) => phase.phase));
254
+ const unknown = ids.filter((id) => !valid.has(id));
255
+ if (unknown.length > 0) {
256
+ throw new Error(`${source} contains invalid phase(s): ${unknown.join(", ")}. Valid phases: ${[...valid].join(", ")}`);
257
+ }
258
+ }
259
+ function validateWorkflowPhaseSequence(sequence) {
260
+ if (sequence.length === 0) {
261
+ throw new Error("workflow phase sequence cannot be empty");
262
+ }
263
+ const ids = sequence.map((phase) => phase.phase);
264
+ const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index);
265
+ if (duplicates.length > 0) {
266
+ throw new Error(`workflow phase sequence contains duplicate phase(s): ${[...new Set(duplicates)].join(", ")}`);
267
+ }
268
+ const qaIndex = ids.indexOf("qa");
269
+ const developerIndex = ids.indexOf("developer");
270
+ if (qaIndex !== -1 && developerIndex === -1) {
271
+ throw new Error("workflow phase sequence with qa must include developer");
272
+ }
273
+ if (qaIndex !== -1 && developerIndex > qaIndex) {
274
+ throw new Error("workflow phase sequence must place developer before qa");
275
+ }
276
+ }
277
+ function phaseExceededTimeout(run, phaseId, timeoutMs) {
278
+ const phase = run.phases.find((candidate) => candidate.phase === phaseId &&
279
+ (candidate.status === "running" ||
280
+ candidate.status === "awaiting_clarification"));
281
+ if (!phase) {
282
+ return false;
283
+ }
284
+ return Date.now() - new Date(phase.startedAt).getTime() > timeoutMs;
285
+ }
286
+ async function recordWorkflowTimeout(root, run, input) {
287
+ await appendEvent(root, {
288
+ type: "WORKFLOW_TIMEOUT",
289
+ taskId: run.taskId,
290
+ actor: "parent",
291
+ summary: input.reason,
292
+ metadata: {
293
+ runId: run.id,
294
+ phase: input.phase,
295
+ timeoutMinutes: input.timeoutMinutes,
296
+ },
297
+ });
298
+ }
299
+ function gateIdForPausedPhase(phase, sequence = AUTONOMOUS_PHASE_SEQUENCE) {
300
+ const sequenceIndex = sequence.findIndex((candidate) => candidate.phase === phase);
301
+ const next = sequence[sequenceIndex + 1]?.phase ?? "end";
302
+ return `${phase}->${next}`;
303
+ }
304
+ async function executePhases(cwd, run, startIndex, io, sequence, timeoutOptions) {
305
+ let current = run;
306
+ let qaFailNotes;
307
+ const devPhaseIndex = sequence.findIndex((d) => d.phase === "developer");
308
+ const runDeadlineMs = timeoutOptions.runTimeoutMinutes > 0
309
+ ? new Date(run.createdAt).getTime() +
310
+ timeoutOptions.runTimeoutMinutes * 60 * 1000
311
+ : undefined;
312
+ const phaseTimeoutMs = timeoutOptions.phaseTimeoutMinutes > 0
313
+ ? timeoutOptions.phaseTimeoutMinutes * 60 * 1000
314
+ : undefined;
315
+ for (let i = startIndex; i < sequence.length; i++) {
316
+ const def = sequence[i];
317
+ const existing = current.phases.find((p) => p.phase === def.phase && p.status !== "qa_failed");
318
+ if (!existing || existing.status === "pending") {
319
+ const retryContext = def.phase === "developer" && qaFailNotes ? qaFailNotes : undefined;
320
+ const phaseRecord = await initPhase(cwd, current, i, retryContext, sequence);
321
+ current = { ...current, phases: [...current.phases, phaseRecord] };
322
+ if (retryContext) {
323
+ io.log(`↺ ${def.phase} (${def.role}) retry — QA findings: ${retryContext.slice(0, 80)}`);
324
+ }
325
+ else {
326
+ io.log(`→ ${def.phase} (${def.role}) task=${phaseRecord.taskId}`);
327
+ }
328
+ }
329
+ else if (existing.status === "awaiting_clarification") {
330
+ io.log(`↺ ${def.phase} (${def.role}) resuming after clarification`);
331
+ }
332
+ if (def.phase === "qa" && current.qaIterations >= current.maxIterations) {
333
+ io.log(`✗ QA failed after ${current.maxIterations} iterations — workflow blocked`);
334
+ current = await markRunFailed(cwd, current, `Max QA iterations (${current.maxIterations}) reached`);
335
+ return current;
336
+ }
337
+ const llmResult = await executePhaseWithLlm({
338
+ root: cwd,
339
+ run: current,
340
+ phase: def,
341
+ phaseIndex: i,
342
+ }).catch(async (error) => {
343
+ const message = error instanceof Error ? error.message : String(error);
344
+ io.log(`✗ ${def.phase} provider execution failed: ${message}`);
345
+ current = await markRunFailed(cwd, current, message, def.phase);
346
+ return null;
347
+ });
348
+ if (!llmResult)
349
+ return current;
350
+ if (llmResult.mode === "llm") {
351
+ io.log(` ✓ llm artifact (${llmResult.artifact})`);
352
+ }
353
+ if (phaseTimeoutMs !== undefined &&
354
+ phaseExceededTimeout(current, def.phase, phaseTimeoutMs)) {
355
+ io.log(`✗ ${def.phase} phase timeout`);
356
+ await recordWorkflowTimeout(cwd, current, {
357
+ phase: def.phase,
358
+ reason: "phase timeout",
359
+ timeoutMinutes: timeoutOptions.phaseTimeoutMinutes,
360
+ });
361
+ current = await markRunFailed(cwd, current, "phase timeout", def.phase);
362
+ return current;
363
+ }
364
+ if (def.phase === "architect") {
365
+ const sizing = await checkArchitectSizing(cwd, current.taskId);
366
+ if (!sizing.found) {
367
+ io.log(`⚠ Architect phase requires a sizing decision before handoff to developer.`);
368
+ io.log(` Record one with:`);
369
+ io.log(` orchestra decision add --task ${current.taskId} --owner architect --title "Story sizing" --decision "<xs|s|m|l|xl> [N points]" --context "..." --consequences "..." --status accepted`);
370
+ io.log(` Then resume: orchestra workflow run --task ${current.taskId} --resume ${current.id}`);
371
+ current = await markRunFailed(cwd, current, "Architect sizing decision required before developer handoff");
372
+ return current;
373
+ }
374
+ io.log(` ✓ sizing=${sizing.sizing}${sizing.points !== undefined ? ` (${sizing.points} pts)` : ""}`);
375
+ }
376
+ const outcome = llmResult.outcome;
377
+ const result = await closePhase(cwd, current, i, outcome, sequence);
378
+ current = result.run;
379
+ if (result.handoffArtifact) {
380
+ io.log(` ✓ handoff → ${sequence[i + 1]?.role ?? "end"} (${result.handoffArtifact})`);
381
+ }
382
+ if (result.reviewArtifact) {
383
+ const nextPhase = sequence[i + 1]?.phase;
384
+ io.log(` ⏸ gate ${def.phase}→${nextPhase} — review: ${result.reviewArtifact}`);
385
+ io.log(` Approve: orchestra workflow gate-approve --run ${current.id} --gate ${def.phase}->${nextPhase} --approver <name> --rationale "<text>"`);
386
+ io.log(``);
387
+ io.log(`╔══ GATE PAUSE: ${def.phase.toUpperCase()} → ${nextPhase?.toUpperCase()} ══════════════════════`);
388
+ io.log(`║ Run: ${current.id}`);
389
+ io.log(`║ Task: ${current.taskId}`);
390
+ io.log(`║ Review: ${result.reviewArtifact}`);
391
+ io.log(`║`);
392
+ io.log(`║ To approve, run:`);
393
+ io.log(`║ orchestra workflow gate-approve --run ${current.id} --gate ${def.phase}->${nextPhase} --approver <name> --rationale "<text>"`);
394
+ io.log(`║ Then resume:`);
395
+ io.log(`║ orchestra workflow run --task ${current.taskId} --resume ${current.id}`);
396
+ io.log(`╚══════════════════════════════════════════════════════════════`);
397
+ return current;
398
+ }
399
+ const closedPhase = current.phases.find((p) => p.phase === def.phase && p.status === "qa_failed");
400
+ if (closedPhase) {
401
+ qaFailNotes = closedPhase.notes ?? "QA findings — see QA phase artifact";
402
+ io.log(` ✗ qa failed (iteration ${current.qaIterations}/${current.maxIterations}) — routing back to developer`);
403
+ i = devPhaseIndex - 1;
404
+ continue;
405
+ }
406
+ if (def.phase === "release") {
407
+ const config = await getWorkflowConfig(cwd);
408
+ if (config.github?.autoCreatePr) {
409
+ try {
410
+ const prSummary = await generatePullRequestSummary(current.taskId, cwd);
411
+ const prBody = buildPrBody(prSummary, current.qaIterations);
412
+ const prTitle = `${current.taskId}: ${prSummary.task.title}`;
413
+ const prResult = await createPullRequest({
414
+ title: prTitle,
415
+ body: prBody,
416
+ ...(config.github.baseBranch
417
+ ? { baseBranch: config.github.baseBranch }
418
+ : {}),
419
+ });
420
+ await addEvidence({
421
+ task: current.taskId,
422
+ role: "release_manager",
423
+ type: "report",
424
+ summary: `PR created: ${prResult.url}`,
425
+ }, cwd);
426
+ io.log(` ✓ PR created: ${prResult.url}`);
427
+ }
428
+ catch (err) {
429
+ io.log(` ⚠ PR creation failed: ${err instanceof Error ? err.message : String(err)}`);
430
+ }
431
+ }
432
+ }
433
+ if (runDeadlineMs !== undefined && Date.now() > runDeadlineMs) {
434
+ const reason = `wall-clock timeout after ${timeoutOptions.runTimeoutMinutes} minutes`;
435
+ io.log(`✗ ${reason}`);
436
+ await recordWorkflowTimeout(cwd, current, {
437
+ phase: def.phase,
438
+ reason,
439
+ timeoutMinutes: timeoutOptions.runTimeoutMinutes,
440
+ });
441
+ current = await markRunFailed(cwd, current, reason);
442
+ return current;
443
+ }
444
+ }
445
+ current = await markRunDone(cwd, current);
446
+ return current;
447
+ }
448
+ async function workflowDryRun(options, io, taskId, gates, maxIterations, phaseSelection) {
449
+ const gateTransitions = new Set(["po→architect", "qa→release"]);
450
+ io.log(`Dry run — no records will be created`);
451
+ io.log(`Task: ${taskId} gates: ${gates} max-iterations: ${maxIterations}`);
452
+ io.log(``);
453
+ for (let i = 0; i < phaseSelection.sequence.length; i++) {
454
+ const def = phaseSelection.sequence[i];
455
+ const next = phaseSelection.sequence[i + 1];
456
+ const transitionKey = next ? `${def.phase}→${next.phase}` : "";
457
+ const gateLabel = gates === "all"
458
+ ? "gate=yes"
459
+ : gates === "phase" && gateTransitions.has(transitionKey)
460
+ ? "gate=yes"
461
+ : "gate=no";
462
+ io.log(` ${def.phase} (${def.role}) ${gateLabel}`);
463
+ }
464
+ if (phaseSelection.skipped.length > 0) {
465
+ io.log(``);
466
+ io.log(`Skipped: ${phaseSelection.skipped.map((phase) => phase.phase).join(", ")}`);
467
+ }
468
+ if (options.json) {
469
+ io.log(JSON.stringify({
470
+ dryRun: true,
471
+ taskId,
472
+ gates,
473
+ maxIterations,
474
+ phases: phaseSelection.sequence,
475
+ skipped: phaseSelection.skipped,
476
+ }, null, 2));
477
+ }
478
+ }
479
+ //# sourceMappingURL=workflow-run-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-run-commands.js","sourceRoot":"","sources":["../src/workflow-run-commands.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import { type NotificationTransports } from "./notifications.js";
2
- import type { AddTaskInput, ApprovalDecisionInput, ApprovalRecord, ArtifactResult, BudgetCheckResult, BudgetEstimatePreflight, BudgetEscalationDecision, BudgetEscalationResult, ClaimLockInput, ConfiguredProviderSummary, DependencyReport, DecisionInput, DecisionRecord, EvidenceInput, EventEntry, ExecutionPlan, ExecutionRun, GateEvaluationResult, HandoffInput, LockEntry, PlaywrightEvidenceInput, PlaywrightTestPlan, ProviderRouting, ProviderFallbackResult, PreRunValidationReport, PullRequestSummary, ModelProvenanceInput, ModelProvenanceRecord, ReadinessReport, ReviewInput, Role, Task, TaskContext, TaskGraphBatchRun, TaskGraphDryRunMode, TaskGraphDryRunPreview, TaskGraphPlan, UsageReport, UpdateTaskInput, WorkflowGateApprovalInput, WorkflowGateApprovalResult, WorkflowStatus, WorkflowSummary, WorkflowConfig } from "./types.js";
1
+ import type { AddTaskInput, ArtifactResult, BudgetCheckResult, BudgetEstimatePreflight, BudgetEscalationDecision, BudgetEscalationResult, ClaimLockInput, ConfiguredProviderSummary, DependencyReport, DecisionInput, DecisionRecord, EventEntry, ExecutionPlan, ExecutionRun, GateEvaluationResult, HandoffInput, LockEntry, ProviderRouting, ProviderFallbackResult, PreRunValidationReport, ModelProvenanceInput, ModelProvenanceRecord, ReadinessReport, Role, Task, TaskContext, TaskGraphBatchRun, TaskGraphDryRunMode, TaskGraphDryRunPreview, TaskGraphPlan, UsageReport, UpdateTaskInput, WorkflowStatus, WorkflowConfig } from "./types.js";
2
+ export { addEvidence, addPlaywrightEvidence, listEvidence, listReviews, recordReview, } from "./workflow-evidence-service.js";
3
+ export { generatePlaywrightTestPlan, generatePullRequestSummary, getWorkflowSummary, } from "./workflow-summary-service.js";
4
+ export { approveApproval, approveWorkflowGate, listApprovals, rejectApproval, showApproval, } from "./workflow-approval-service.js";
3
5
  export declare function getWorkflowStatus(root?: string): Promise<WorkflowStatus>;
4
6
  export declare function addTask(input: AddTaskInput, root?: string): Promise<Task>;
5
7
  export declare function listTasks(root?: string): Promise<Task[]>;
@@ -29,6 +31,7 @@ export declare function checkReadiness(taskId: string, root?: string): Promise<{
29
31
  report: ReadinessReport;
30
32
  }>;
31
33
  export declare function evaluateWorkflowGate(gateId: string, taskId: string, root?: string): Promise<GateEvaluationResult>;
34
+ export declare function previewWorkflowGate(gateId: string, taskId: string, root?: string): Promise<GateEvaluationResult>;
32
35
  export declare function createHandoff(input: HandoffInput, root?: string): Promise<ArtifactResult>;
33
36
  export declare function recordDecision(input: DecisionInput, root?: string): Promise<DecisionRecord>;
34
37
  export declare function listDecisions(taskId?: string, root?: string): Promise<EventEntry[]>;
@@ -46,20 +49,6 @@ export declare function executePlanWithBudgetPreflight(taskId: string, root?: st
46
49
  override?: boolean;
47
50
  }): Promise<ExecutionRun>;
48
51
  export declare function checkBudgetEstimatePreflight(taskId: string, estimatedCostUsd: number, root?: string): Promise<BudgetEstimatePreflight>;
49
- export declare function listApprovals(taskId?: string, root?: string): Promise<ApprovalRecord[]>;
50
- export declare function approveWorkflowGate(input: WorkflowGateApprovalInput, root?: string): Promise<WorkflowGateApprovalResult>;
51
- export declare function showApproval(id: string, root?: string): Promise<ApprovalRecord & {
52
- content: string;
53
- }>;
54
- export declare function approveApproval(input: ApprovalDecisionInput, root?: string): Promise<ApprovalRecord>;
55
- export declare function rejectApproval(input: ApprovalDecisionInput, root?: string): Promise<ApprovalRecord>;
56
- export declare function recordReview(input: ReviewInput, root?: string, notificationTransports?: NotificationTransports): Promise<ArtifactResult>;
57
- export declare function listReviews(taskId?: string, root?: string): Promise<EventEntry[]>;
58
- export declare function addEvidence(input: EvidenceInput, root?: string): Promise<ArtifactResult>;
59
- export declare function listEvidence(taskId?: string, root?: string): Promise<EventEntry[]>;
60
- export declare function getWorkflowSummary(root?: string): Promise<WorkflowSummary>;
61
- export declare function generatePullRequestSummary(taskId: string, root?: string): Promise<PullRequestSummary>;
62
- export declare function generatePlaywrightTestPlan(taskId: string, root?: string): Promise<PlaywrightTestPlan>;
63
52
  export declare function getWorkflowConfig(root?: string): Promise<WorkflowConfig>;
64
53
  export declare function listConfiguredModelProviders(root?: string): Promise<ConfiguredProviderSummary[]>;
65
54
  export declare function completeWithProviderFallback(routing: ProviderRouting, prompt: string, { failingProviders, root, taskId, role, jsonMode, providerMode, }?: {
@@ -75,4 +64,3 @@ export declare function recordModelProvenance(input: ModelProvenanceInput, root?
75
64
  export declare function listModelProvenance(taskId?: string, root?: string): Promise<ModelProvenanceRecord[]>;
76
65
  export declare function getUsageReport(taskId?: string, root?: string): Promise<UsageReport>;
77
66
  export declare function checkUsageBudget(taskId?: string, root?: string): Promise<BudgetCheckResult>;
78
- export declare function addPlaywrightEvidence(input: PlaywrightEvidenceInput, root?: string): Promise<ArtifactResult>;