@cat-factory/orchestration 0.193.0 → 0.194.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.
- package/dist/modules/board/BoardService.d.ts +2 -0
- package/dist/modules/board/BoardService.d.ts.map +1 -1
- package/dist/modules/board/BoardService.js +4 -0
- package/dist/modules/board/BoardService.js.map +1 -1
- package/dist/modules/board/publicBoardReads.d.ts +12 -0
- package/dist/modules/board/publicBoardReads.d.ts.map +1 -1
- package/dist/modules/board/publicBoardReads.js +19 -4
- package/dist/modules/board/publicBoardReads.js.map +1 -1
- package/dist/modules/execution/AgentDispatchController.d.ts +115 -0
- package/dist/modules/execution/AgentDispatchController.d.ts.map +1 -0
- package/dist/modules/execution/AgentDispatchController.js +307 -0
- package/dist/modules/execution/AgentDispatchController.js.map +1 -0
- package/dist/modules/execution/ExecutionService.d.ts +18 -105
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +70 -589
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/IterationCapController.d.ts +57 -0
- package/dist/modules/execution/IterationCapController.d.ts.map +1 -0
- package/dist/modules/execution/IterationCapController.js +141 -0
- package/dist/modules/execution/IterationCapController.js.map +1 -0
- package/dist/modules/execution/RunDispatcher.d.ts +31 -195
- package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
- package/dist/modules/execution/RunDispatcher.js +47 -313
- package/dist/modules/execution/RunDispatcher.js.map +1 -1
- package/dist/modules/execution/RunDispatcherDependencies.d.ts +142 -0
- package/dist/modules/execution/RunDispatcherDependencies.d.ts.map +1 -0
- package/dist/modules/execution/RunDispatcherDependencies.js +27 -0
- package/dist/modules/execution/RunDispatcherDependencies.js.map +1 -0
- package/dist/modules/execution/RunLifecycleController.d.ts +141 -0
- package/dist/modules/execution/RunLifecycleController.d.ts.map +1 -0
- package/dist/modules/execution/RunLifecycleController.js +489 -0
- package/dist/modules/execution/RunLifecycleController.js.map +1 -0
- package/dist/modules/execution/run-action-controllers.d.ts +18 -0
- package/dist/modules/execution/run-action-controllers.d.ts.map +1 -0
- package/dist/modules/execution/run-action-controllers.js +19 -0
- package/dist/modules/execution/run-action-controllers.js.map +1 -0
- package/package.json +11 -11
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { getErrorMessage, isAsyncAgentExecutor, parseLocalModelId } from '@cat-factory/kernel';
|
|
2
|
+
import { PR_REVIEWER_KIND, resolvePrNumber } from '@cat-factory/agents';
|
|
3
|
+
import { recordDispatchAttribution } from './step-fold.logic.js';
|
|
4
|
+
import { classifyDispatchFailure } from './job.logic.js';
|
|
5
|
+
import { initialPrReviewState } from './prReview.logic.js';
|
|
6
|
+
/**
|
|
7
|
+
* The DISPATCH half of a step, the sibling of `PollRunningController` / `PollCompletionController`
|
|
8
|
+
* on the other side of the park: build the agent context, run the kind's pre-ops, then either
|
|
9
|
+
* start an async container job and park, or make the inline LLM call and settle.
|
|
10
|
+
*
|
|
11
|
+
* It also owns the facts that can only be RECORDED AT DISPATCH, which is why they live with it
|
|
12
|
+
* rather than with the poll: the durable poll path rebuilds its handle from the STEP alone, so the
|
|
13
|
+
* resolved model, the job's attribution and the investigation diagnostics have to be stamped here
|
|
14
|
+
* or they are silently absent in production (see the dispatch-attribution rule in CLAUDE.md).
|
|
15
|
+
* `RunDispatcher` keeps thin delegates, so no call site moved.
|
|
16
|
+
*/
|
|
17
|
+
export class AgentDispatchController {
|
|
18
|
+
deps;
|
|
19
|
+
constructor(deps) {
|
|
20
|
+
this.deps = deps;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The generic container/inline-agent step — the lowest-priority StepHandler, claiming
|
|
24
|
+
* every step no more-specific handler did (coder, architect, spec-writer, merger,
|
|
25
|
+
* task-estimator, the container-backed companions, …). Builds the agent context, runs the
|
|
26
|
+
* kind's pre-ops, then either dispatches an async container job and parks (the durable
|
|
27
|
+
* driver polls between sleeps) or runs the inline LLM call and records the result. This is
|
|
28
|
+
* what the dispatch chain falls through to; all the deterministic / gate / inline-review
|
|
29
|
+
* kinds are claimed earlier by their own handlers (see {@link buildStepHandlerRegistry}).
|
|
30
|
+
*/
|
|
31
|
+
async handleAgentStep(ctx, dispatchKind, augmentContext) {
|
|
32
|
+
const { workspaceId, instance, step, block, isFinalStep, options } = ctx;
|
|
33
|
+
// Async (container) steps don't block: dispatch the job and park. The durable
|
|
34
|
+
// driver polls `pollAgentJob` between sleeps so the run can span far longer
|
|
35
|
+
// than a single durable step's timeout, while each step stays short. A set
|
|
36
|
+
// `jobId` means a prior (possibly replayed) dispatch already started the job,
|
|
37
|
+
// so we re-attach instead of starting a duplicate.
|
|
38
|
+
//
|
|
39
|
+
// `dispatchKind` overrides the dispatched agent kind WITHOUT changing `step.agentKind`
|
|
40
|
+
// — used by the fork-decision phase to dispatch the read-only `fork-proposer` explore
|
|
41
|
+
// job as a HELPER off the coder step (Phase A). The completion still records against the
|
|
42
|
+
// coder step, and the fork-proposal interceptor keys on `step.agentKind` + the fork state.
|
|
43
|
+
const context = await this.deps.contextBuilder.buildContext(workspaceId, instance, step, isFinalStep, block, dispatchKind ? { agentKind: dispatchKind } : undefined);
|
|
44
|
+
// A caller re-dispatching this step under an overriding kind can fold extra context in
|
|
45
|
+
// (e.g. the PR-review `fix` resolution points the Fixer at the reviewed PR's head branch and
|
|
46
|
+
// hands it the selected findings). Runs before pre-ops / dispatch so the job body sees it.
|
|
47
|
+
augmentContext?.(context);
|
|
48
|
+
// A registered custom kind's PRE-ops run deterministic backend repo work before the
|
|
49
|
+
// agent dispatches (e.g. read a baseline `spec/` shard into the prompt). Gated on the
|
|
50
|
+
// step not having dispatched yet so a Workflows replay (jobId already set) doesn't
|
|
51
|
+
// re-run them; a no-op for built-in kinds and when GitHub isn't wired.
|
|
52
|
+
if (!step.jobId) {
|
|
53
|
+
await this.deps.repoOps.runRegisteredPreOps(workspaceId, instance, block, step, context);
|
|
54
|
+
}
|
|
55
|
+
const executor = this.deps.agentExecutor;
|
|
56
|
+
if (isAsyncAgentExecutor(executor) && executor.runsAsync(context)) {
|
|
57
|
+
if (!step.jobId) {
|
|
58
|
+
// The model is fixed the moment its ref resolves (block pin > workspace
|
|
59
|
+
// default > env routing) — long before the container is up — so name it on
|
|
60
|
+
// the very first "spinning up container" emit instead of waiting for the
|
|
61
|
+
// dispatch to return. startJob confirms the same value below.
|
|
62
|
+
const previewModel = await this.previewStepModel(context);
|
|
63
|
+
if (previewModel)
|
|
64
|
+
step.model = previewModel;
|
|
65
|
+
// Surface the explicit container lifecycle for the cold-boot window: dispatch
|
|
66
|
+
// blocks until the per-run container is up and has accepted the job, so emitting
|
|
67
|
+
// `starting` now lets the details show the boot (and then the live phase + the
|
|
68
|
+
// container id/url) instead of a blank "working" state.
|
|
69
|
+
step.container = { status: 'starting' };
|
|
70
|
+
// Seed the in-flight PR-review state so a `pr-reviewer` run surfaces a real `reviewing`
|
|
71
|
+
// phase in the deep-review window (the reviewed PR + the live slices-reviewed progress
|
|
72
|
+
// off the step's todo subtasks) instead of an empty panel until the findings land. Only
|
|
73
|
+
// on the reviewer's OWN first dispatch: a `fix`/`post` re-dispatch reuses this step under
|
|
74
|
+
// an overriding kind and already carries `prReview` (`fixing`/`posting`), which must not
|
|
75
|
+
// be reset back to `reviewing`.
|
|
76
|
+
if (step.agentKind === PR_REVIEWER_KIND && !step.prReview) {
|
|
77
|
+
const prUrl = block?.taskTypeFields?.prUrl?.trim() || null;
|
|
78
|
+
// Capture the PR head sha NOW (review start), so the `post` resolution can detect a
|
|
79
|
+
// branch update between here and posting and fold drifted findings into the summary.
|
|
80
|
+
const reviewedHeadSha = await this.resolveReviewedHeadSha(workspaceId, instance, block);
|
|
81
|
+
step.prReview = initialPrReviewState(prUrl, step.model ?? null, reviewedHeadSha);
|
|
82
|
+
}
|
|
83
|
+
// Surface the block's ephemeral environment (if any) alongside the cold-boot
|
|
84
|
+
// phase, so a run's details show the env spinning up next to the container.
|
|
85
|
+
await this.deps.deployer.attachEnvironmentProjection(workspaceId, instance.blockId, step);
|
|
86
|
+
await this.deps.runStateMachine.casPersist(workspaceId, instance);
|
|
87
|
+
await this.deps.runStateMachine.emitInstance(workspaceId, instance);
|
|
88
|
+
let handle;
|
|
89
|
+
try {
|
|
90
|
+
handle = await executor.startJob(context);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
// Classify the throw (see {@link classifyDispatchFailure}). A genuine container
|
|
94
|
+
// accept failure (HTTP/network/capacity) is framed as `dispatch` ("container failed
|
|
95
|
+
// to start") with the EXACT provider response as detail; a dispatch-time eviction
|
|
96
|
+
// routes to `evicted`. But a job is BUILT before any container is contacted, so a
|
|
97
|
+
// precondition (e.g. `github_not_connected` — no connected repo) is a `preflight`
|
|
98
|
+
// rejection that surfaces its own actionable message + machine-readable reason
|
|
99
|
+
// instead of the misleading container framing.
|
|
100
|
+
step.container = { status: 'errored' };
|
|
101
|
+
await this.deps.runStateMachine.casPersist(workspaceId, instance);
|
|
102
|
+
await this.deps.runStateMachine.emitInstance(workspaceId, instance);
|
|
103
|
+
// Hand the classifier the step's run history so a container lost AFTER work began (a
|
|
104
|
+
// failed eviction-recovery re-dispatch, `evictionRecoveries > 0`) is reported as an
|
|
105
|
+
// unrecoverable eviction — with elapsed minutes + any partial slice count — rather than
|
|
106
|
+
// the misleading "container failed to start". See ADR 0026 D1.
|
|
107
|
+
return {
|
|
108
|
+
kind: 'job_failed',
|
|
109
|
+
...classifyDispatchFailure(error, {
|
|
110
|
+
evictionRecoveries: step.evictionRecoveries,
|
|
111
|
+
transientEvictionRecoveries: step.transientEvictionRecoveries,
|
|
112
|
+
startedAt: step.startedAt,
|
|
113
|
+
sliceCount: step.prReview?.slices?.length,
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
step.jobId = handle.jobId;
|
|
118
|
+
// Record the model at dispatch — the poll site can't resolve it later.
|
|
119
|
+
recordDispatchAttribution(step, handle, context.agentKind);
|
|
120
|
+
// Surface web-search availability + provider on the step (run details), resolved
|
|
121
|
+
// backend-side at dispatch. A static per-run fact, not gated by prompt telemetry.
|
|
122
|
+
if (handle.search)
|
|
123
|
+
step.search = handle.search;
|
|
124
|
+
// Stamp after-the-fact investigation diagnostics for this dispatch: the step's
|
|
125
|
+
// agent kind, resolved model, and repo — the facts a failure post-mortem needs but
|
|
126
|
+
// that are otherwise spread across DB joins / the harness transcript. The execution
|
|
127
|
+
// backend (native vs. container) is unknown until the transport reports it on the
|
|
128
|
+
// first poll, so `pollAgentJob` fills it in then.
|
|
129
|
+
this.recordDispatchDiagnostics(instance, context, handle);
|
|
130
|
+
// The dispatch returned, so the container is up and the job is accepted; the
|
|
131
|
+
// live phase + the container id/url arrive on the first poll.
|
|
132
|
+
step.container = { status: 'up' };
|
|
133
|
+
await this.deps.runStateMachine.casPersist(workspaceId, instance);
|
|
134
|
+
await this.deps.runStateMachine.emitInstance(workspaceId, instance);
|
|
135
|
+
}
|
|
136
|
+
return { kind: 'awaiting_job', jobId: step.jobId, stepIndex: instance.currentStep };
|
|
137
|
+
}
|
|
138
|
+
// Inline path: the model is resolved before the (blocking) LLM call, so surface
|
|
139
|
+
// it now — the board names the model while the step is querying instead of only
|
|
140
|
+
// once the result lands. recordStepResult re-asserts it from the result.
|
|
141
|
+
const previewModel = await this.previewStepModel(context);
|
|
142
|
+
if (previewModel && previewModel !== step.model) {
|
|
143
|
+
step.model = previewModel;
|
|
144
|
+
await this.deps.runStateMachine.casPersist(workspaceId, instance);
|
|
145
|
+
await this.deps.runStateMachine.emitInstance(workspaceId, instance);
|
|
146
|
+
}
|
|
147
|
+
const result = await this.runAgent(context, options);
|
|
148
|
+
return this.deps.recordStepResult(workspaceId, instance, step, isFinalStep, result);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Stamp the run's investigation diagnostics from a container dispatch (the `lastDispatch`
|
|
152
|
+
* block + the control-plane host). Mutates `instance` in place; the caller upserts. Reflects
|
|
153
|
+
* the MOST RECENT dispatch — a run's failure is almost always in its latest step, and keeping
|
|
154
|
+
* one block (not a per-step history) keeps the record small. `executionBackend` is left for the
|
|
155
|
+
* first poll to fill (the transport reports it). Never carries a token/secret.
|
|
156
|
+
*/
|
|
157
|
+
recordDispatchDiagnostics(instance, context, handle) {
|
|
158
|
+
// Orchestration is runtime-neutral (no @types/node), so read `process.platform` off globalThis
|
|
159
|
+
// with a guard rather than the bare global — undefined on a runtime that doesn't expose it
|
|
160
|
+
// (e.g. workerd), which just omits the host block. Best-effort investigation context.
|
|
161
|
+
const platform = globalThis.process?.platform;
|
|
162
|
+
instance.diagnostics = {
|
|
163
|
+
...instance.diagnostics,
|
|
164
|
+
lastDispatch: {
|
|
165
|
+
stepIndex: instance.currentStep,
|
|
166
|
+
agentKind: context.agentKind,
|
|
167
|
+
...(handle.model ? { model: handle.model } : {}),
|
|
168
|
+
...(handle.repo ? { repo: handle.repo } : {}),
|
|
169
|
+
at: this.deps.clock.now(),
|
|
170
|
+
},
|
|
171
|
+
...(platform ? { host: { platform } } : {}),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Fill in `diagnostics.lastDispatch.executionBackend` from the transport-reported backend on
|
|
176
|
+
* the first poll that carries it (native host process vs. sandboxed container — the datum that
|
|
177
|
+
* is otherwise indistinguishable after the fact). Idempotent: a no-op once set, or when the
|
|
178
|
+
* update carries no backend / the dispatch block is missing. Returns whether it changed
|
|
179
|
+
* anything (so the caller can skip a redundant upsert).
|
|
180
|
+
*/
|
|
181
|
+
recordBackendDiagnostics(instance, backend) {
|
|
182
|
+
const dispatch = instance.diagnostics?.lastDispatch;
|
|
183
|
+
if (!backend || !dispatch || dispatch.executionBackend === backend)
|
|
184
|
+
return false;
|
|
185
|
+
instance.diagnostics = {
|
|
186
|
+
...instance.diagnostics,
|
|
187
|
+
lastDispatch: { ...dispatch, executionBackend: backend },
|
|
188
|
+
};
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Preview the model a step will run (`provider:model`) ahead of the work, so the
|
|
193
|
+
* board can show it during the inline query / container cold-boot rather than only
|
|
194
|
+
* once the result or job handle lands. Best-effort: the executor may not implement
|
|
195
|
+
* a preview, and a resolution failure (e.g. an unwired container kind that fails at
|
|
196
|
+
* dispatch anyway) must never break the run — both yield undefined.
|
|
197
|
+
*/
|
|
198
|
+
async previewStepModel(context) {
|
|
199
|
+
if (!this.deps.agentExecutor.resolveModel)
|
|
200
|
+
return undefined;
|
|
201
|
+
try {
|
|
202
|
+
return await this.deps.agentExecutor.resolveModel(context);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Whether the current step incurs NO metered monetary LLM cost, so the spend gate can
|
|
210
|
+
* let it proceed even when the budget is exhausted. Two non-metered cases:
|
|
211
|
+
* - a flat-rate SUBSCRIPTION (quota) model — Claude Code / Codex on a pooled token;
|
|
212
|
+
* resolved through the executor (the authority on "subscriptions always win").
|
|
213
|
+
* - a LOCAL-runner model (Ollama / LM Studio / …) — keyless, runs on the user's own
|
|
214
|
+
* endpoint, so it costs the deployment nothing; detected off the resolved model id.
|
|
215
|
+
* This is what makes a `0` budget mean "no PAID spend" without bricking a workspace that
|
|
216
|
+
* deliberately runs only local models or subscriptions (see the spend-budget docs).
|
|
217
|
+
*
|
|
218
|
+
* Once the executor resolves the step's concrete model id, the metered/non-metered
|
|
219
|
+
* decision is delegated to the SAME {@link modelIdIsMetered} predicate the up-front
|
|
220
|
+
* {@link assertBudgetAllowsPipeline} gate uses, so the two gates can't classify a model
|
|
221
|
+
* differently (a divergence would let a run pass the start gate then immediately pause,
|
|
222
|
+
* or vice versa). The executor's `isQuotaBased` is still consulted first as the
|
|
223
|
+
* authoritative subscription-routing signal; the shared predicate covers local-runner +
|
|
224
|
+
* subscription-by-capability + Cloudflare classification identically to the start gate.
|
|
225
|
+
* Falls back to a bare local-id check when no capability resolver is wired.
|
|
226
|
+
*
|
|
227
|
+
* Best-effort and side-effect-free: an executor without the capability, a missing block,
|
|
228
|
+
* or any resolution error all report false (treated as budget-metered, the prior
|
|
229
|
+
* behaviour). Only consulted on the over-budget path, so it never touches the happy path.
|
|
230
|
+
*/
|
|
231
|
+
async currentStepIsNonMetered(workspaceId, instance, step) {
|
|
232
|
+
try {
|
|
233
|
+
const block = await this.deps.blockRepository.get(workspaceId, instance.blockId);
|
|
234
|
+
if (!block)
|
|
235
|
+
return false;
|
|
236
|
+
const isFinalStep = instance.currentStep === instance.steps.length - 1;
|
|
237
|
+
const context = await this.deps.contextBuilder.buildContext(workspaceId, instance, step, isFinalStep, block);
|
|
238
|
+
if (this.deps.agentExecutor.isQuotaBased &&
|
|
239
|
+
(await this.deps.agentExecutor.isQuotaBased(context))) {
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
if (this.deps.agentExecutor.resolveModel) {
|
|
243
|
+
const modelId = await this.deps.agentExecutor.resolveModel(context);
|
|
244
|
+
// Classify the resolved id through the shared predicate (same as the start gate)
|
|
245
|
+
// when capabilities are wired; else fall back to the bare local-runner check.
|
|
246
|
+
if (this.deps.resolveProviderCapabilities) {
|
|
247
|
+
const caps = await this.deps.resolveProviderCapabilities(workspaceId, instance.initiatedBy, block.modelPresetId);
|
|
248
|
+
if (!this.deps.modelIdIsMetered(modelId, caps))
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
else if (parseLocalModelId(modelId)) {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Resolve the reviewed PR's head sha at review-START, stamped onto `step.prReview` when the
|
|
263
|
+
* `pr-reviewer` first dispatches. The `post` resolution later re-reads the PR head and folds
|
|
264
|
+
* every finding into the summary when it moved (the frozen line numbers may have drifted). Best
|
|
265
|
+
* effort: null on any failure, no PR number, or a client without the `pullRequestHeadSha`
|
|
266
|
+
* capability — the drift check then simply doesn't run (posting falls back to per-line filtering).
|
|
267
|
+
*/
|
|
268
|
+
async resolveReviewedHeadSha(workspaceId, instance, block) {
|
|
269
|
+
if (!block)
|
|
270
|
+
return null;
|
|
271
|
+
const prNumber = resolvePrNumber(block.taskTypeFields ?? undefined);
|
|
272
|
+
if (prNumber == null)
|
|
273
|
+
return null;
|
|
274
|
+
try {
|
|
275
|
+
const runRepo = await this.deps.resolveRunRepoContext?.(workspaceId, block.id);
|
|
276
|
+
const headSha = runRepo?.repo.pullRequestHeadSha;
|
|
277
|
+
if (!headSha)
|
|
278
|
+
return null;
|
|
279
|
+
return await this.deps.runInitiatorScope({ workspaceId, initiatedBy: instance.initiatedBy }, () => headSha(prNumber));
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Invoke the agent for an already-built context. Failures are swallowed into the
|
|
287
|
+
* step output so a run never wedges — unless `rethrowAgentErrors` is set (the
|
|
288
|
+
* durable path), in which case the error propagates so the driver's per-step
|
|
289
|
+
* retry can take over.
|
|
290
|
+
*/
|
|
291
|
+
async runAgent(context, options = {}) {
|
|
292
|
+
try {
|
|
293
|
+
return await this.deps.agentExecutor.run(context);
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
// The durable driver wants real failures to surface so its per-step retry
|
|
297
|
+
// can kick in (and the error gets persisted after retries are exhausted).
|
|
298
|
+
if (options.rethrowAgentErrors)
|
|
299
|
+
throw error;
|
|
300
|
+
// Otherwise a failed agent must not wedge the run; record and complete.
|
|
301
|
+
return {
|
|
302
|
+
output: `Agent error: ${getErrorMessage(error)}`,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=AgentDispatchController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentDispatchController.js","sourceRoot":"","sources":["../../../src/modules/execution/AgentDispatchController.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAsC1D;;;;;;;;;;GAUG;AACH,MAAM,OAAO,uBAAuB;IACL,IAAI;IAAjC,YAA6B,IAAuB;oBAAvB,IAAI;IAAsB,CAAC;IAExD;;;;;;;;OAQG;IACH,KAAK,CAAC,eAAe,CACnB,GAAuB,EACvB,YAAqB,EACrB,cAAmD;QAEnD,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;QAExE,8EAA8E;QAC9E,4EAA4E;QAC5E,2EAA2E;QAC3E,8EAA8E;QAC9E,mDAAmD;QACnD,EAAE;QACF,uFAAuF;QACvF,sFAAsF;QACtF,yFAAyF;QACzF,2FAA2F;QAC3F,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CACzD,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,KAAK,EACL,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CACvD,CAAA;QACD,uFAAuF;QACvF,6FAA6F;QAC7F,2FAA2F;QAC3F,cAAc,EAAE,CAAC,OAAO,CAAC,CAAA;QACzB,oFAAoF;QACpF,sFAAsF;QACtF,mFAAmF;QACnF,uEAAuE;QACvE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1F,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;QACxC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,wEAAwE;gBACxE,2EAA2E;gBAC3E,yEAAyE;gBACzE,8DAA8D;gBAC9D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBACzD,IAAI,YAAY;oBAAE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;gBAC3C,8EAA8E;gBAC9E,iFAAiF;gBACjF,+EAA+E;gBAC/E,wDAAwD;gBACxD,IAAI,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;gBACvC,wFAAwF;gBACxF,uFAAuF;gBACvF,wFAAwF;gBACxF,0FAA0F;gBAC1F,yFAAyF;gBACzF,gCAAgC;gBAChC,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC1D,MAAM,KAAK,GAAG,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,CAAA;oBAC1D,oFAAoF;oBACpF,qFAAqF;oBACrF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;oBACvF,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,eAAe,CAAC,CAAA;gBAClF,CAAC;gBACD,6EAA6E;gBAC7E,4EAA4E;gBAC5E,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBACzF,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;gBACjE,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;gBAEnE,IAAI,MAAsB,CAAA;gBAC1B,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAC3C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,gFAAgF;oBAChF,oFAAoF;oBACpF,kFAAkF;oBAClF,kFAAkF;oBAClF,kFAAkF;oBAClF,+EAA+E;oBAC/E,+CAA+C;oBAC/C,IAAI,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;oBACtC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;oBACjE,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;oBACnE,qFAAqF;oBACrF,oFAAoF;oBACpF,wFAAwF;oBACxF,+DAA+D;oBAC/D,OAAO;wBACL,IAAI,EAAE,YAAY;wBAClB,GAAG,uBAAuB,CAAC,KAAK,EAAE;4BAChC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;4BAC3C,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;4BAC7D,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM;yBAC1C,CAAC;qBACH,CAAA;gBACH,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;gBACzB,uEAAuE;gBACvE,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;gBAC1D,iFAAiF;gBACjF,kFAAkF;gBAClF,IAAI,MAAM,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;gBAC9C,+EAA+E;gBAC/E,mFAAmF;gBACnF,oFAAoF;gBACpF,kFAAkF;gBAClF,kDAAkD;gBAClD,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;gBACzD,6EAA6E;gBAC7E,8DAA8D;gBAC9D,IAAI,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBACjC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;gBACjE,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YACrE,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAA;QACrF,CAAC;QAED,gFAAgF;QAChF,gFAAgF;QAChF,yEAAyE;QACzE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACzD,IAAI,YAAY,IAAI,YAAY,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;YACzB,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YACjE,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;IACrF,CAAC;IAED;;;;;;OAMG;IACK,yBAAyB,CAC/B,QAA2B,EAC3B,OAAwB,EACxB,MAAsB;QAEtB,+FAA+F;QAC/F,2FAA2F;QAC3F,sFAAsF;QACtF,MAAM,QAAQ,GAAI,UAAkD,CAAC,OAAO,EAAE,QAAQ,CAAA;QACtF,QAAQ,CAAC,WAAW,GAAG;YACrB,GAAG,QAAQ,CAAC,WAAW;YACvB,YAAY,EAAE;gBACZ,SAAS,EAAE,QAAQ,CAAC,WAAW;gBAC/B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;aAC1B;YACD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAA;IACH,CAAC;IAED;;;;;;OAMG;IACH,wBAAwB,CAAC,QAA2B,EAAE,OAA2B;QAC/E,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAA;QACnD,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,KAAK,OAAO;YAAE,OAAO,KAAK,CAAA;QAChF,QAAQ,CAAC,WAAW,GAAG;YACrB,GAAG,QAAQ,CAAC,WAAW;YACvB,YAAY,EAAE,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE;SACzD,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAAwB;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;YAAE,OAAO,SAAS,CAAA;QAC3D,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,KAAK,CAAC,uBAAuB,CAC3B,WAAmB,EACnB,QAA2B,EAC3B,IAAwC;QAExC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;YAChF,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAA;YACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;YACtE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CACzD,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,KAAK,CACN,CAAA;YACD,IACE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;gBACpC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EACrD,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;gBACnE,iFAAiF;gBACjF,8EAA8E;gBAC9E,IAAI,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;oBAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,2BAA2B,CACtD,WAAW,EACX,QAAQ,CAAC,WAAW,EACpB,KAAK,CAAC,aAAa,CACpB,CAAA;oBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;wBAAE,OAAO,IAAI,CAAA;gBAC7D,CAAC;qBAAM,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,sBAAsB,CAClC,WAAmB,EACnB,QAA2B,EAC3B,KAA+B;QAE/B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACvB,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,cAAc,IAAI,SAAS,CAAC,CAAA;QACnE,IAAI,QAAQ,IAAI,IAAI;YAAE,OAAO,IAAI,CAAA;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;YAC9E,MAAM,OAAO,GAAG,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAA;YAChD,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAA;YACzB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CACtC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,EAClD,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CACxB,CAAA;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAwB,EAAE,OAAO,GAAmB,EAAE;QACnE,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,0EAA0E;YAC1E,IAAI,OAAO,CAAC,kBAAkB;gBAAE,MAAM,KAAK,CAAA;YAC3C,wEAAwE;YACxE,OAAO;gBACL,MAAM,EAAE,gBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE;aACjD,CAAA;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -83,7 +83,6 @@ export declare class ExecutionService {
|
|
|
83
83
|
* their drops without a null-check. `noopLogger` when a facade wired none.
|
|
84
84
|
*/
|
|
85
85
|
private readonly log;
|
|
86
|
-
private readonly subscriptionActivations?;
|
|
87
86
|
private readonly pokeInitiativeLoop?;
|
|
88
87
|
private readonly resolveWorkspaceModelDefault?;
|
|
89
88
|
/**
|
|
@@ -96,6 +95,13 @@ export declare class ExecutionService {
|
|
|
96
95
|
private readonly runDispatcher;
|
|
97
96
|
/** The human decision surface on a parked run (approve / reject / merge / …). */
|
|
98
97
|
private readonly stepDecisions;
|
|
98
|
+
/**
|
|
99
|
+
* The surfaces a HUMAN drives on a whole run: its lifecycle (launch / re-launch / resume / end,
|
|
100
|
+
* which share the claim-then-hand-off order) and the three-way iteration-cap resolution both
|
|
101
|
+
* automatic-rework gates park for. Extracted so this service keeps the per-step machine; the
|
|
102
|
+
* public methods that reach them are thin pass-throughs.
|
|
103
|
+
*/
|
|
104
|
+
private readonly runActions;
|
|
99
105
|
/** Maintains the run's verification report on its PR (a hook on step settlement). */
|
|
100
106
|
private readonly prVerificationReport;
|
|
101
107
|
constructor(dependencies: ExecutionServiceDependencies);
|
|
@@ -170,8 +176,6 @@ export declare class ExecutionService {
|
|
|
170
176
|
* only an unpinned run falls to the workspace per-kind defaults.
|
|
171
177
|
*/
|
|
172
178
|
private resolveIndividualVendors;
|
|
173
|
-
/** Start a pipeline against a block, replacing any prior run on it. */
|
|
174
|
-
start(workspaceId: string, blockId: string, pipelineId: string, options?: RunStartOptions): Promise<ExecutionInstance>;
|
|
175
179
|
/**
|
|
176
180
|
* Advance a single run by exactly one step and report what happened. This is
|
|
177
181
|
* the durable driver's entry point: it reloads the run from storage (so it is
|
|
@@ -241,24 +245,7 @@ export declare class ExecutionService {
|
|
|
241
245
|
private inferBlockTechnical;
|
|
242
246
|
/** Pick the brainstorm kind for a stage (the dedicated window drives both via the same loop). */
|
|
243
247
|
private brainstormKindFor;
|
|
244
|
-
/**
|
|
245
|
-
* Route an iteration-cap resolution to its gate-specific handlers. `stop-reset` is
|
|
246
|
-
* uniform across gates: cancel the run and return the block to phase zero (editable),
|
|
247
|
-
* keeping whatever reference artifact each gate persists (the requirements doc on its
|
|
248
|
-
* own table; a companion's producer output on its branch). Shared by the requirements
|
|
249
|
-
* gate (`requirementsReview.resolveExceeded`, via {@link ReviewGateController}) and the
|
|
250
|
-
* companion gate ({@link resolveCompanionExceeded}) so the three-way choice lives in one place.
|
|
251
|
-
*/
|
|
252
|
-
private dispatchIterationCap;
|
|
253
|
-
/**
|
|
254
|
-
* Resolve a companion step parked at its automatic-rework cap (`companion.exceeded`):
|
|
255
|
-
* grant one more round, proceed accepting the producer's current output, or stop the
|
|
256
|
-
* task and reset it to phase zero. The companion mirror of the requirements
|
|
257
|
-
* iteration-cap resolution (`requirementsReview.resolveExceeded`), sharing the iteration-cap dispatch + the
|
|
258
|
-
* gate-resume plumbing. Idempotent — an already-resolved gate returns the instance
|
|
259
|
-
* unchanged. Scoped by execution + approval id (the execution controller surface),
|
|
260
|
-
* since a companion gate is not block-addressed like the requirements window.
|
|
261
|
-
*/
|
|
248
|
+
/** @see IterationCapController.resolveCompanionExceeded */
|
|
262
249
|
resolveCompanionExceeded(workspaceId: string, executionId: string, approvalId: string, choice: IterationCapChoice): Promise<ExecutionInstance>;
|
|
263
250
|
/**
|
|
264
251
|
* Merge a block's PR(s) for real, then mark it `done`. The remote merge happens FIRST (via
|
|
@@ -324,96 +311,22 @@ export declare class ExecutionService {
|
|
|
324
311
|
* faulted); `kind` classifies the cause so the right hint is shown.
|
|
325
312
|
*/
|
|
326
313
|
failRun(workspaceId: string, executionId: string, message: string, kind?: AgentFailureKind, detail?: string | null, reason?: string | null): Promise<void>;
|
|
327
|
-
/**
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
*
|
|
335
|
-
* A fresh instance id is minted because the durable runner addresses one
|
|
336
|
-
* Workflows instance per execution id and the failed one is terminal — the new
|
|
337
|
-
* instance simply starts with `currentStep` pointed at the failed step, so the
|
|
338
|
-
* driver advances forward from there and never re-issues the completed steps'
|
|
339
|
-
* work. Mirrors {@link BootstrapService.retry}; both are reached via the unified
|
|
340
|
-
* `POST /agent-runs/:id/retry` endpoint.
|
|
341
|
-
*/
|
|
342
|
-
retry(workspaceId: string, executionId: string,
|
|
343
|
-
/** The retrying user (their personal subscription is used for individual-usage
|
|
344
|
-
* models). Falls back to the original initiator when omitted. */
|
|
345
|
-
initiatedBy?: string | null,
|
|
346
|
-
/** Mint the per-run personal-credential activation (see {@link start}). */
|
|
347
|
-
activate?: (executionId: string) => Promise<void>): Promise<ExecutionInstance>;
|
|
348
|
-
/**
|
|
349
|
-
* Restart a run from a human-chosen step: re-run from `fromStepIndex` onward,
|
|
350
|
-
* regardless of how far the run had progressed (a `done`, `failed`, `blocked`,
|
|
351
|
-
* `paused` or still-`running` run are all valid sources). Unlike {@link retry}
|
|
352
|
-
* (which resumes at the first FAILURE) this rewinds to an arbitrary step the user
|
|
353
|
-
* picked — so it can re-run steps that already completed.
|
|
354
|
-
*
|
|
355
|
-
* What is preserved vs reset:
|
|
356
|
-
* - Steps BEFORE `fromStepIndex` keep their `output`/approval/timing untouched, so
|
|
357
|
-
* the engine still hands the restarted step its predecessors' work as
|
|
358
|
-
* `priorOutputs` (and their resolved `decisions`) — a useful handoff.
|
|
359
|
-
* - The chosen step and every later one are reset to a clean, re-runnable state,
|
|
360
|
-
* dropping each step's iteration counters (companion attempts, gate/test attempts,
|
|
361
|
-
* eviction recoveries) so the restart starts those loops from zero.
|
|
362
|
-
* - A block's incorporated requirements are NOT touched: they live on the
|
|
363
|
-
* requirement-review record, so a restarted spec-writer/coder still receives the
|
|
364
|
-
* incorporated document (or the base description when none was generated). When the
|
|
365
|
-
* chosen step is the `requirements-review` gate ITSELF, re-running it mints a fresh
|
|
366
|
-
* iteration-1 review (the reviewer's `review()` replaces the prior one), which is
|
|
367
|
-
* exactly the "reset the iterations counter from this step" semantics.
|
|
368
|
-
*
|
|
369
|
-
* Like {@link retry} a fresh instance id is minted (the durable runner addresses one
|
|
370
|
-
* driver per execution id). Any still-live driver/container for the run being
|
|
371
|
-
* replaced is torn down first, so restarting a RUNNING run never orphans a container
|
|
372
|
-
* or a parked Workflows instance.
|
|
373
|
-
*/
|
|
374
|
-
restartFromStep(workspaceId: string, executionId: string, fromStepIndex: number,
|
|
375
|
-
/** The restarting user (their personal subscription is used for individual-usage
|
|
376
|
-
* models). Falls back to the original initiator when omitted. */
|
|
377
|
-
initiatedBy?: string | null,
|
|
378
|
-
/** Mint the per-run personal-credential activation (see {@link start}). */
|
|
379
|
-
activate?: (executionId: string) => Promise<void>): Promise<ExecutionInstance>;
|
|
380
|
-
/**
|
|
381
|
-
* The bound callbacks the two run-start funnels (`runStart.ts`) need, so they depend on no
|
|
382
|
-
* concrete repository or service. Those funnels own the ORDER between a run's atomic claim and
|
|
383
|
-
* its hand-off and are documented there; every start path calls both, writing the block state
|
|
384
|
-
* that path owns in between.
|
|
385
|
-
*/
|
|
386
|
-
private get runStartDeps();
|
|
387
|
-
/**
|
|
388
|
-
* Resume every run paused by the spend safeguard in this workspace. Flips them
|
|
389
|
-
* back to `running` and re-drives the durable runner. If the budget is still
|
|
390
|
-
* exhausted the spend gate will simply pause them again on their next step.
|
|
391
|
-
*/
|
|
314
|
+
/** @see RunLifecycleController.start */
|
|
315
|
+
start(workspaceId: string, blockId: string, pipelineId: string, options?: RunStartOptions): Promise<ExecutionInstance>;
|
|
316
|
+
/** @see RunLifecycleController.retry */
|
|
317
|
+
retry(workspaceId: string, executionId: string, initiatedBy?: string | null, activate?: (executionId: string) => Promise<void>): Promise<ExecutionInstance>;
|
|
318
|
+
/** @see RunLifecycleController.restartFromStep */
|
|
319
|
+
restartFromStep(workspaceId: string, executionId: string, fromStepIndex: number, initiatedBy?: string | null, activate?: (executionId: string) => Promise<void>): Promise<ExecutionInstance>;
|
|
320
|
+
/** @see RunLifecycleController.resumePaused */
|
|
392
321
|
resumePaused(workspaceId: string): Promise<ExecutionInstance[]>;
|
|
393
|
-
/**
|
|
322
|
+
/** @see RunLifecycleController.cancel */
|
|
394
323
|
cancel(workspaceId: string, blockId: string): Promise<Block>;
|
|
395
|
-
/**
|
|
396
|
-
* Explicitly stop a *running* run by id (the unified `POST /agent-runs/:id/stop`
|
|
397
|
-
* surface): kill its per-run container, tear down the durable driver, then record
|
|
398
|
-
* a terminal `cancelled` failure so the board shows the run stopped (with retry)
|
|
399
|
-
* rather than spinning forever. Idempotent — a run already terminal is returned
|
|
400
|
-
* as-is. `opts.reason`/`opts.kind` let the orphan sweep reuse this with its own
|
|
401
|
-
* wording instead of the user-facing default.
|
|
402
|
-
*/
|
|
324
|
+
/** @see RunLifecycleController.stopRun */
|
|
403
325
|
stopRun(workspaceId: string, executionId: string, opts?: {
|
|
404
326
|
reason?: string;
|
|
405
327
|
kind?: AgentFailureKind;
|
|
406
328
|
}): Promise<ExecutionInstance>;
|
|
407
|
-
/**
|
|
408
|
-
* Tear down every run under a block subtree — kill each container, terminate each
|
|
409
|
-
* durable driver, and delete the run record — so deleting a service/module never
|
|
410
|
-
* orphans a container or a Workflows instance. Best-effort and silent: the board
|
|
411
|
-
* delete that follows emits the coarse refresh, so no per-run event is needed.
|
|
412
|
-
*
|
|
413
|
-
* Returns the workspace block list it loaded so the immediately-following `removeBlock`
|
|
414
|
-
* can reuse it instead of re-listing the whole board (this teardown deletes only run
|
|
415
|
-
* records, never blocks, so the list is still current) — see {@link PreloadedBlocks}.
|
|
416
|
-
*/
|
|
329
|
+
/** @see RunLifecycleController.teardownForBlockTree */
|
|
417
330
|
teardownForBlockTree(workspaceId: string, rootId: string): Promise<PreloadedBlocks>;
|
|
418
331
|
}
|
|
419
332
|
//# sourceMappingURL=ExecutionService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionService.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/ExecutionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,6BAA6B,EAG7B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ExecutionService.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/ExecutionService.ts"],"names":[],"mappings":"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"}
|