@miller-tech/uap 1.150.2 → 1.152.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.
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Epic Mission — the epic-controller delivery runner (the DEFAULT `uap
3
+ * deliver` path: epics are on for every mission), extracted from deliver.ts
4
+ * behind narrow functional seams.
5
+ *
6
+ * Why extracted: this was the largest untested closure left in deliver.ts
7
+ * after the orchestrated-mission extraction (PR #518) — the exact structural
8
+ * condition that let PR #516 ship an inert feature. The contracts/scaffold
9
+ * steering, epic spec assembly, ledger wiring, split policy, parallel-branch
10
+ * selection, and acceptance parity in here were unobservable; now they are
11
+ * unit-tested with every seam faked (test/delivery/epic-mission.test.ts).
12
+ *
13
+ * What this module owns: epic planning → Epic[] assembly (with the
14
+ * single-'mission' fallback), the completion-ledger lifecycle, the
15
+ * epic-controller wiring (attempts / split policy / split re-planning), the
16
+ * per-epic scoped prompt + spec composition (contracts / scaffold / fill
17
+ * steering, priors, retry feedback), the parallel-vs-classic branch choice,
18
+ * epic-level acceptance parity, contract locking, and the mission aggregate.
19
+ *
20
+ * What stays with the caller (deliver.ts), injected as seams: every executor
21
+ * (epic planning, task decomposition, the classic convergence loop, the
22
+ * orchestrated runner), judge state + the acceptance judge, task records,
23
+ * ledger and contract-lock effects, and logging.
24
+ */
25
+ import { CONTEXT_BUDGET_MARKER } from './context-budget.js';
26
+ import { runEpics } from './epic-controller.js';
27
+ import { foldDeliveryResult } from './orchestrated-mission.js';
28
+ /**
29
+ * Run a mission as a SEQUENCE of epics on the epic controller — each epic a
30
+ * fresh convergence context (classic loop, or an orchestrated task DAG under
31
+ * parallel dispatch), retried with failure feedback and recursively split
32
+ * when it cannot land whole.
33
+ */
34
+ export async function runEpicMission(deps) {
35
+ const note = deps.note ?? (() => undefined);
36
+ const all = {
37
+ success: true, alreadyDelivered: false, turns: 0, bestScore: 0, bestTurn: 0,
38
+ history: [], finalFeedback: '', finalOutput: '', totalDurationMs: 0,
39
+ };
40
+ const planned = await deps.planEpics();
41
+ const epics = (planned.length >= 2
42
+ ? planned
43
+ : [{ id: 'mission', title: 'Mission', goal: deps.instruction }]).map((ph) => ({
44
+ id: ph.id,
45
+ title: ph.title,
46
+ goal: ph.goal,
47
+ ...(ph.deps ? { deps: ph.deps } : {}),
48
+ ...(ph.contracts ? { contracts: true } : {}),
49
+ ...(ph.scaffold ? { scaffold: true } : {}),
50
+ }));
51
+ note(`🗂 epic controller: ${epics.length} epic(s): ${epics.map((e) => e.title).join(' → ')}`);
52
+ let lastContractEpicFiles = [];
53
+ // Hands-free: auto-populate the completion ledger so the whole multi-epic
54
+ // build has an objective, cross-session definition of done (Option B). The
55
+ // Stop hook + reactor consult it to keep any model going until 100%.
56
+ try {
57
+ deps.ledgerInit?.(epics.map((e) => ({ id: e.id, title: e.title, ...(e.deps ? { deps: e.deps } : {}) })));
58
+ }
59
+ catch {
60
+ // ledger is best-effort
61
+ }
62
+ const epicResult = await runEpics({
63
+ mission: deps.instruction,
64
+ epics,
65
+ maxAttemptsPerEpic: deps.maxAttemptsPerEpic,
66
+ splitDepth: deps.splitDepth,
67
+ splitOnAnyFailure: deps.splitOnAnyFailure,
68
+ // Re-decompose a failed epic into sub-epics. Fires on context-budget
69
+ // exhaustion (rail auto-size) and, under splitOnAnyFailure, on any
70
+ // exhausted-attempts failure (auto-escalation). Always provided so the
71
+ // escalation has a planner; declines (null) when it can't produce ≥2.
72
+ splitEpic: async (epic, lastFailure) => {
73
+ const budgetHit = (lastFailure ?? '').includes(CONTEXT_BUDGET_MARKER);
74
+ const reason = budgetHit
75
+ ? `outgrew its ~${(deps.sessionBudget ?? 0).toLocaleString()}-token session budget`
76
+ : 'could not be delivered whole after all attempts';
77
+ note(` ✂ epic ${epic.id} ${reason} — re-planning as smaller sub-epics`);
78
+ const subGoal = `${epic.goal}\n\n(The previous attempt did not complete` +
79
+ `${lastFailure ? `: ${lastFailure.slice(0, 300)}` : ''}. Split this into smaller, independently completable phases.)`;
80
+ const subs = await deps.planSplit(subGoal);
81
+ return subs.length >= 2 ? subs.map((s) => ({ id: s.id, title: s.title, goal: s.goal })) : null;
82
+ },
83
+ onEpic: (epic, outcome) => {
84
+ try {
85
+ deps.ledgerMark?.(epic.id, outcome.accepted ? 'done' : 'failed', outcome.accepted ? undefined : outcome.summary);
86
+ }
87
+ catch {
88
+ // best-effort
89
+ }
90
+ if (epic.contracts && outcome.accepted && lastContractEpicFiles.length > 0) {
91
+ const locked = deps.lockContracts(lastContractEpicFiles);
92
+ if (locked.length > 0) {
93
+ note(` 🔒 contracts locked for later epics: ${locked.join(', ')}`);
94
+ }
95
+ }
96
+ note(` ${outcome.accepted ? '✓' : '✗'} epic ${epic.id}: ${outcome.accepted ? 'accepted' : 'failed'} after ${outcome.attempts} attempt(s), ${outcome.turns} turn(s)`);
97
+ },
98
+ runEpic: async (epic, ctx) => {
99
+ const priors = ctx.priorSummaries.length
100
+ ? `\n\nALREADY BUILT (prior epics — build on them, do not redo):\n${ctx.priorSummaries.map((sm, i) => `${i + 1}. ${sm}`).join('\n')}`
101
+ : '';
102
+ const retry = ctx.lastFailure ? `\n\nPREVIOUS ATTEMPT FEEDBACK (fix this):\n${ctx.lastFailure}` : '';
103
+ // Contracts-first steering: the contracts epic is told its output IS
104
+ // the frozen API; later epics are told which files are locked and to
105
+ // build against them exactly. Locked paths also land in the judge's
106
+ // spec, so spec-referenced evidence guarantees it SEES the contracts.
107
+ const locked = deps.lockedContracts();
108
+ const contractsNote = epic.contracts
109
+ ? '\n\nThis is the CONTRACTS epic: define the COMPLETE shared types/interfaces/registry APIs the later epics will build against. They must compile, with minimal stub bodies. After this epic is accepted these files are FROZEN for the rest of the mission — make the signatures right.'
110
+ : locked.length > 0
111
+ ? `\n\nLOCKED CONTRACTS (read-only — write attempts will be refused): ${locked.join(', ')}. Build against these exact APIs; make YOUR code match their imports, type names and signatures.`
112
+ : '';
113
+ const scaffoldIds = new Set(epics.filter((e) => e.scaffold).map((e) => e.id));
114
+ const fillsScaffold = !epic.scaffold && (epic.deps ?? []).some((d) => scaffoldIds.has(d));
115
+ const scaffoldNote = epic.scaffold
116
+ ? '\n\nThis is a SCAFFOLD epic: create the compiling SKELETON only — complete public signatures, wired imports/exports, and todo!()-style stub bodies (todo!() / raise NotImplementedError / throw new Error("TODO")). Do NOT implement the logic; a later FILL epic does that. The build/check gates must pass.'
117
+ : fillsScaffold
118
+ ? '\n\nThis is a FILL epic: the skeleton already exists with correct signatures. IMPLEMENT the stub bodies (todo!()/NotImplementedError/TODO throws) — do NOT change any existing signature, rename anything, or restructure modules. When you finish, no stub markers should remain in the files this epic fills.'
119
+ : '';
120
+ const scoped = `OVERALL MISSION (context): ${deps.instruction.slice(0, 300)}\n\n` +
121
+ `EPIC — ${epic.title}:\n${epic.goal}${priors}${retry}${contractsNote}${scaffoldNote}\n\n` +
122
+ 'Deliver ONLY this epic. All gates must pass at the end.';
123
+ note(`▶ epic ${epic.id} (attempt ${ctx.attempt}): ${epic.title}`);
124
+ // Grade the epic's DELIVERABLE, not the process prompt: the scoped
125
+ // prompt carries process instructions ("read X first"), prior-epic
126
+ // summaries, and retry feedback — none verifiable from code, so a
127
+ // small judge rejects objectively-green turns against them forever.
128
+ const epicSpec = `EPIC — ${epic.title}:\n${epic.goal}` +
129
+ (epic.criteria?.length ? `\nAcceptance criteria:\n${epic.criteria.map((c) => `- ${c}`).join('\n')}` : '') +
130
+ (!epic.contracts && locked.length > 0 ? `\n(Builds against locked contracts: ${locked.join(', ')})` : '') +
131
+ (fillsScaffold ? '\n(FILL epic: no todo!()/NotImplementedError/TODO-throw stub markers may remain in the files it implements; signatures must be unchanged.)' : '') +
132
+ (epic.scaffold ? '\n(SCAFFOLD epic: complete compiling signatures with stub bodies are the DELIVERABLE — unimplemented logic is expected and correct here.)' : '');
133
+ deps.setEpicSpec(epicSpec);
134
+ const epicTask = (await deps.openTask?.(`${epic.title} — ${epic.goal.slice(0, 120)}`)) ?? null;
135
+ /** Shared tail: aggregate, record, lock bookkeeping, budget-marker summary. */
136
+ const settle = (r) => {
137
+ foldDeliveryResult(all, r);
138
+ deps.completeTask?.(epicTask, r);
139
+ const files = [...new Set(r.history.flatMap((h) => h.filesApplied ?? []))];
140
+ if (epic.contracts)
141
+ lastContractEpicFiles = files;
142
+ // Rail sizing: surface budget exhaustion to the epic controller — its
143
+ // split path keys off CONTEXT_BUDGET_MARKER in the failure summary,
144
+ // and the goal-based summary would otherwise swallow the signal.
145
+ const budgetHit = !r.success && r.history.some((h) => h.budgetStopped);
146
+ return {
147
+ success: r.success,
148
+ turns: r.turns,
149
+ summary: `${epic.goal.slice(0, 140)}${files.length ? ` [files: ${files.join(', ')}]` : ''}` +
150
+ (budgetHit ? ` ${CONTEXT_BUDGET_MARKER} session(s) exceeded the context budget — scope is too large for one session` : ''),
151
+ };
152
+ };
153
+ // Epic-path parallel dispatch: with deliver.parallelTasks > 1, an epic
154
+ // whose goal itself decomposes runs as an orchestrated task DAG —
155
+ // worktree-isolated parallel dispatch inside the DEFAULT (epics-on)
156
+ // path. Only the DECOMPOSITION call is fail-soft (a miss falls through
157
+ // to the classic single loop); a runner exception must propagate —
158
+ // swallowing it would silently restart the epic on a partially-merged
159
+ // tree.
160
+ if (deps.epicParallelTasks > 1) {
161
+ // Retry feedback must reach the decomposition (fresh tasks that fix
162
+ // the failure) — mirroring the split path — because the
163
+ // orchestrator's 300-char mission snippet cannot carry it into
164
+ // every task.
165
+ const epicPlanGoal = `${epic.title}: ${epic.goal}` +
166
+ (ctx.lastFailure
167
+ ? `\n\n(The previous attempt did not complete: ${ctx.lastFailure.slice(0, 300)}. The tasks you produce must FIX this.)`
168
+ : '');
169
+ let epicPlan = [];
170
+ try {
171
+ epicPlan = await deps.planEpicTasks(epicPlanGoal);
172
+ }
173
+ catch {
174
+ epicPlan = [];
175
+ }
176
+ if (epicPlan.length < 2) {
177
+ note(` ⇉ epic ${epic.id}: no usable task decomposition — classic single-loop epic`);
178
+ }
179
+ else {
180
+ note(` ⇉ epic ${epic.id}: decomposed into ${epicPlan.length} tasks — orchestrated parallel dispatch`);
181
+ // The orchestrator's mission snippet carries the HEAD of this
182
+ // text — lead with the epic essence, then retry + steering.
183
+ const epicMissionText = `EPIC — ${epic.title}: ${epic.goal}` +
184
+ (ctx.lastFailure ? `\nPREVIOUS ATTEMPT FEEDBACK (address this): ${ctx.lastFailure}` : '') +
185
+ `${contractsNote}${scaffoldNote}${priors}`;
186
+ const r = await deps.runOrchestrated(epicMissionText, epicPlan, epicTask?.id);
187
+ // Epic-level acceptance parity: the classic path judges every
188
+ // green turn against the EPIC spec (criteria, FILL "no stub
189
+ // markers remain", locked contracts). Green tasks + a green
190
+ // combined tree still must satisfy it — one judge call, BEFORE
191
+ // settle so the task record reflects the judged outcome (a
192
+ // rejected attempt must not leave a "done" record behind).
193
+ let acceptanceFailure = null;
194
+ if (r.success && deps.judgeEpic) {
195
+ const verdict = await deps.judgeEpic(epicSpec);
196
+ if (!verdict) {
197
+ // Fail-open must never be invisible — the acceptance rail just
198
+ // silently degraded to objective verdicts.
199
+ note(` ⚖ epic ${epic.id}: acceptance judge unavailable — objective verdicts stand`);
200
+ }
201
+ else if (!verdict.passed) {
202
+ acceptanceFailure = (verdict.feedback ?? '').slice(0, 240);
203
+ }
204
+ }
205
+ const effective = acceptanceFailure !== null
206
+ ? { ...r, success: false, finalFeedback: `EPIC acceptance failed: ${acceptanceFailure}` }
207
+ : r;
208
+ const settled = settle(effective);
209
+ if (acceptanceFailure !== null) {
210
+ return {
211
+ success: false,
212
+ turns: r.turns,
213
+ summary: `${epic.goal.slice(0, 120)} — tasks green but EPIC acceptance failed: ${acceptanceFailure}`,
214
+ };
215
+ }
216
+ return settled;
217
+ }
218
+ }
219
+ const r = await deps.runEpicLoop(scoped);
220
+ return settle(r);
221
+ },
222
+ });
223
+ all.success = epicResult.success;
224
+ if (!epicResult.success) {
225
+ all.finalFeedback = `epic controller incomplete — failed epic(s): ${epicResult.failed.join(', ')}\n${all.finalFeedback}`;
226
+ }
227
+ return all;
228
+ }
229
+ //# sourceMappingURL=epic-mission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epic-mission.js","sourceRoot":"","sources":["../../src/delivery/epic-mission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EAAE,QAAQ,EAAiC,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AA0D/D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAqB;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAS,EAAE,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,GAAG,GAAmB;QAC1B,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC3E,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;KACpE,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACvC,MAAM,KAAK,GAAW,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;QACxC,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAChE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACb,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3C,CAAC,CAAC,CAAC;IACJ,IAAI,CAAC,wBAAwB,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,qBAAqB,GAAa,EAAE,CAAC;IAEzC,0EAA0E;IAC1E,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC;QAChC,OAAO,EAAE,IAAI,CAAC,WAAW;QACzB,KAAK;QACL,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,qEAAqE;QACrE,mEAAmE;QACnE,uEAAuE;QACvE,sEAAsE;QACtE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,SAAS;gBACtB,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,uBAAuB;gBACnF,CAAC,CAAC,iDAAiD,CAAC;YACtD,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,IAAI,MAAM,qCAAqC,CAAC,CAAC;YACzE,MAAM,OAAO,GACX,GAAG,IAAI,CAAC,IAAI,4CAA4C;gBACxD,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,+DAA+D,CAAC;YACxH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjG,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YACxB,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnH,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;gBACzD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,0CAA0C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YACD,IAAI,CACF,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,UAAU,OAAO,CAAC,QAAQ,gBAAgB,OAAO,CAAC,KAAK,UAAU,CAChK,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAA0B,EAAE;YACnD,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,MAAM;gBACtC,CAAC,CAAC,kEAAkE,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACrI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,8CAA8C,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrG,qEAAqE;YACrE,qEAAqE;YACrE,oEAAoE;YACpE,sEAAsE;YACtE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACtC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS;gBAClC,CAAC,CAAC,wRAAwR;gBAC1R,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;oBACjB,CAAC,CAAC,sEAAsE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kGAAkG;oBAC3L,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ;gBAChC,CAAC,CAAC,+SAA+S;gBACjT,CAAC,CAAC,aAAa;oBACb,CAAC,CAAC,iTAAiT;oBACnT,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,MAAM,GACV,8BAA8B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM;gBAClE,UAAU,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,aAAa,GAAG,YAAY,MAAM;gBACzF,yDAAyD,CAAC;YAC5D,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,aAAa,GAAG,CAAC,OAAO,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAClE,mEAAmE;YACnE,mEAAmE;YACnE,kEAAkE;YAClE,oEAAoE;YACpE,MAAM,QAAQ,GACZ,UAAU,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,EAAE;gBACrC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,2BAA2B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzG,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,uCAAuC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzG,CAAC,aAAa,CAAC,CAAC,CAAC,4IAA4I,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,2IAA2I,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrK,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;YAE/F,+EAA+E;YAC/E,MAAM,MAAM,GAAG,CAAC,CAAiB,EAAiB,EAAE;gBAClD,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3E,IAAI,IAAI,CAAC,SAAS;oBAAE,qBAAqB,GAAG,KAAK,CAAC;gBAClD,sEAAsE;gBACtE,oEAAoE;gBACpE,iEAAiE;gBACjE,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBACvE,OAAO;oBACL,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,OAAO,EACL,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBAClF,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,qBAAqB,8EAA8E,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7H,CAAC;YACJ,CAAC,CAAC;YAEF,uEAAuE;YACvE,kEAAkE;YAClE,oEAAoE;YACpE,uEAAuE;YACvE,mEAAmE;YACnE,sEAAsE;YACtE,QAAQ;YACR,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBAC/B,oEAAoE;gBACpE,wDAAwD;gBACxD,+DAA+D;gBAC/D,cAAc;gBACd,MAAM,YAAY,GAChB,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;oBAC7B,CAAC,GAAG,CAAC,WAAW;wBACd,CAAC,CAAC,+CAA+C,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,yCAAyC;wBACvH,CAAC,CAAC,EAAE,CAAC,CAAC;gBACV,IAAI,QAAQ,GAAoB,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;gBACpD,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ,GAAG,EAAE,CAAC;gBAChB,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,2DAA2D,CAAC,CAAC;gBACvF,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,qBAAqB,QAAQ,CAAC,MAAM,yCAAyC,CAAC,CAAC;oBACvG,8DAA8D;oBAC9D,4DAA4D;oBAC5D,MAAM,eAAe,GACnB,UAAU,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;wBACpC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,+CAA+C,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzF,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,EAAE,CAAC;oBAC7C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC9E,8DAA8D;oBAC9D,4DAA4D;oBAC5D,4DAA4D;oBAC5D,+DAA+D;oBAC/D,2DAA2D;oBAC3D,2DAA2D;oBAC3D,IAAI,iBAAiB,GAAkB,IAAI,CAAC;oBAC5C,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;4BACb,+DAA+D;4BAC/D,2CAA2C;4BAC3C,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,2DAA2D,CAAC,CAAC;wBACvF,CAAC;6BAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;4BAC3B,iBAAiB,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBAC7D,CAAC;oBACH,CAAC;oBACD,MAAM,SAAS,GAAmB,iBAAiB,KAAK,IAAI;wBAC1D,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,2BAA2B,iBAAiB,EAAE,EAAE;wBACzF,CAAC,CAAC,CAAC,CAAC;oBACN,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;oBAClC,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;wBAC/B,OAAO;4BACL,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,8CAA8C,iBAAiB,EAAE;yBACrG,CAAC;oBACJ,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IAEH,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,GAAG,CAAC,aAAa,GAAG,gDAAgD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3H,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -11,6 +11,9 @@ export { extractContract, type ContractResult, } from './contract-extractor.js';
11
11
  export { orchestrate, assembleTaskContext, governContext, type OrchestratorTask, type TaskOutcome, type AssembledContext, type OrchestratorConfig, type OrchestratorResult, } from './task-orchestrator.js';
12
12
  export { planDeliveryPhases, parsePhaseArray, phaseInstruction, shouldDecompose, type DeliveryPhase, } from './decompose.js';
13
13
  export { validatePhaseGraph, parsePlanVerdict, runPlanThoughtExperiment, reviewPlanText, type PhaseGraphValidation, type PlanReviewVerdict, } from './plan-check.js';
14
+ export { runOrchestratedMission, foldDeliveryResult, type OrchestratedMissionDeps, } from './orchestrated-mission.js';
15
+ export { runEpicMission, type EpicMissionDeps } from './epic-mission.js';
16
+ export { createTaskWorkspaceManager, resolveParallelTasks, type TaskWorkspace, type TaskWorkspaceManager, } from './task-workspace.js';
14
17
  export { autoMineHaloTraces, summarizeWeaknesses, isAutoMineEnabled, weaknessGuidance, loadPersistedWeaknesses, type AutoMineResult, } from './auto-mine.js';
15
18
  export { judgeScreenshots, parseVisionVerdict, visionSummary, visionJudgeConfigured, type VisionVerdict, } from './vision-judge.js';
16
19
  export { runVisualGate, discoverEntryPages, judgePage, motionBetween, visualRuntimeNote, readVisualTargets, type VisualVerdict, type PageVisualReport, type VisualGateOptions, type VisualBrowserDriver, } from './visual-gate.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,9 @@ export { extractContract, } from './contract-extractor.js';
11
11
  export { orchestrate, assembleTaskContext, governContext, } from './task-orchestrator.js';
12
12
  export { planDeliveryPhases, parsePhaseArray, phaseInstruction, shouldDecompose, } from './decompose.js';
13
13
  export { validatePhaseGraph, parsePlanVerdict, runPlanThoughtExperiment, reviewPlanText, } from './plan-check.js';
14
+ export { runOrchestratedMission, foldDeliveryResult, } from './orchestrated-mission.js';
15
+ export { runEpicMission } from './epic-mission.js';
16
+ export { createTaskWorkspaceManager, resolveParallelTasks, } from './task-workspace.js';
14
17
  export { autoMineHaloTraces, summarizeWeaknesses, isAutoMineEnabled, weaknessGuidance, loadPersistedWeaknesses, } from './auto-mine.js';
15
18
  export { judgeScreenshots, parseVisionVerdict, visionSummary, visionJudgeConfigured, } from './vision-judge.js';
16
19
  export { runVisualGate, discoverEntryPages, judgePage, motionBetween, visualRuntimeNote, readVisualTargets, } from './visual-gate.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,oBAAoB,GAcrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,cAAc,GAGf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,eAAe,GAEhB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,aAAa,GAMd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,GAGf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,GAExB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,GAEtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAKlB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GAGzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,SAAS,GAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GAKxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,yBAAyB,GAM1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,GAKf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,WAAW,GAIZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,YAAY,GAIb,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,cAAc,GAMf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GAMf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,GAG/B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,GAG3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,cAAc,GAEf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,GAGzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAGpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,kBAAkB,EAAkC,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,oBAAoB,GAcrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,cAAc,GAGf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,eAAe,GAEhB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,aAAa,GAMd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,GAGf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GAEnB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAwB,MAAM,mBAAmB,CAAC;AAEzE,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,GAGrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,GAExB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,GAEtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAKlB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GAGzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,SAAS,GAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GAKxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,yBAAyB,GAM1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,GAKf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,WAAW,GAIZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,YAAY,GAIb,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,cAAc,GAMf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GAMf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,GAG/B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,GAG3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,cAAc,GAEf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,GAGzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAGpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,kBAAkB,EAAkC,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Orchestrated Mission — the blackboard-orchestrated delivery runner,
3
+ * extracted from deliver.ts behind narrow functional seams.
4
+ *
5
+ * Why extracted: as a 250-line closure over a dozen ambient locals inside
6
+ * deliver.ts, the orchestrate() wiring was UNOBSERVABLE — which is exactly
7
+ * how a released feature shipped with `concurrency` never plumbed (PR #516
8
+ * review, critical #1). With the seams injected, the wiring is unit-testable
9
+ * (see test/delivery/orchestrated-mission.test.ts) and the same runner now
10
+ * serves BOTH the top-level orchestrated path and the epic controller's
11
+ * inner missions (epic-path parallel dispatch).
12
+ *
13
+ * What this module owns: the task DAG execution (orchestrate + concurrency),
14
+ * worktree-isolated parallel dispatch (acquire → run → serialized merge-back
15
+ * → cleanup), the mission aggregate, contract extraction (P4), the NEW_TASKS
16
+ * re-planning feed (P5), and post-merge combined-tree verification.
17
+ *
18
+ * What stays with the caller (deliver.ts), injected as seams: building the
19
+ * per-root convergence loop + executor (`runLoop`), acceptance-spec/evidence
20
+ * bookkeeping (`beginTaskSpec`/`endTaskSpec`), task records, memory
21
+ * retrieval/publish, the merge-boundary predicate, the combined-tree gate
22
+ * ladder, and logging.
23
+ */
24
+ import type { DeliveryResult } from './convergence-loop.js';
25
+ import { type OrchestratorTask, type TaskOutcome } from './task-orchestrator.js';
26
+ import type { DeliveryTaskHandle } from './task-sync.js';
27
+ import type { TaskWorkspaceManager } from './task-workspace.js';
28
+ export interface OrchestratedMissionDeps {
29
+ /** The overall mission text (orientation lines only — never dumped whole). */
30
+ instruction: string;
31
+ /** The REAL project root results merge back into. */
32
+ projectRoot: string;
33
+ /** The task DAG to execute. */
34
+ tasks: OrchestratorTask[];
35
+ /**
36
+ * Resolved `deliver.parallelTasks` (1 = sequential). Parallel dispatch
37
+ * additionally requires a workspace manager; without one it degrades to
38
+ * sequential with a note.
39
+ */
40
+ parallelTasks: number;
41
+ /**
42
+ * Run ONE task's convergence loop in `root` and return its result. The
43
+ * caller owns loop construction (config, executor, iteration hooks) —
44
+ * `isolated` is true when `root` is a throwaway workspace, which is the
45
+ * caller's cue to strip checkpointing/explorer and bind a per-root
46
+ * executor.
47
+ */
48
+ runLoop: (args: {
49
+ root: string;
50
+ prompt: string;
51
+ taskId: string;
52
+ isolated: boolean;
53
+ }) => Promise<DeliveryResult>;
54
+ /**
55
+ * Workspace manager for parallel isolation, or null to run in-tree. The
56
+ * caller constructs it (or injects a fake in tests). Ignored when
57
+ * parallelTasks <= 1.
58
+ */
59
+ workspaceManager: TaskWorkspaceManager | null;
60
+ /** Acceptance-spec + write-evidence bookkeeping around one task run. */
61
+ beginTaskSpec?: (root: string, spec: string) => void;
62
+ endTaskSpec?: (root: string) => void;
63
+ /** Delivery-task records (fail-soft; both optional). */
64
+ openTask?: (title: string) => Promise<DeliveryTaskHandle | null>;
65
+ completeTask?: (record: DeliveryTaskHandle | null, result: DeliveryResult) => void;
66
+ /** P3 — per-task memory retrieval (compact design lines). */
67
+ retrieveDesign?: (task: OrchestratorTask) => string[] | Promise<string[]>;
68
+ /** P3/P4 — durable publish of a completed task's contract/summary. */
69
+ publish?: (outcome: TaskOutcome, task: OrchestratorTask) => void | Promise<void>;
70
+ /** Merge-boundary defense-in-depth: refuse deltas touching these files. */
71
+ isMergeBlocked?: (file: string) => boolean;
72
+ /**
73
+ * Post-merge combined-tree verification (one gate-ladder run on the real
74
+ * root). Return null to skip; only invoked when isolation was active.
75
+ */
76
+ verifyCombined?: () => Promise<{
77
+ passed: boolean;
78
+ feedback: string;
79
+ } | null>;
80
+ /** Progress lines (the caller decorates with chalk). */
81
+ note?: (line: string) => void;
82
+ /** Orchestrator caps (caller resolves env/config). */
83
+ contextBudgetChars?: number;
84
+ maxTasks?: number;
85
+ }
86
+ /** Fold one loop/mission result into a running aggregate (turns, history,
87
+ * best score, latest feedback/output). Shared by this runner and the epic
88
+ * controller when it embeds an orchestrated mission. */
89
+ export declare function foldDeliveryResult(target: DeliveryResult, source: DeliveryResult): void;
90
+ /**
91
+ * Execute a decomposed mission on the blackboard orchestrator, with
92
+ * worktree-isolated parallel dispatch when `parallelTasks > 1` and a
93
+ * workspace manager is available.
94
+ */
95
+ export declare function runOrchestratedMission(deps: OrchestratedMissionDeps): Promise<DeliveryResult>;
96
+ //# sourceMappingURL=orchestrated-mission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrated-mission.d.ts","sourceRoot":"","sources":["../../src/delivery/orchestrated-mission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAMhE,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC;KACnB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9B;;;;OAIG;IACH,gBAAgB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC9C,wEAAwE;IACxE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACjE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACnF,6DAA6D;IAC7D,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC7E,wDAAwD;IACxD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyBD;;wDAEwD;AACxD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAUvF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,CAqLnG"}