@cat-factory/orchestration 0.195.3 → 0.199.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/container/execution-service.d.ts.map +1 -1
- package/dist/container/execution-service.js +4 -0
- package/dist/container/execution-service.js.map +1 -1
- package/dist/modules/board/BoardService.d.ts +5 -0
- package/dist/modules/board/BoardService.d.ts.map +1 -1
- package/dist/modules/board/BoardService.js +30 -24
- package/dist/modules/board/BoardService.js.map +1 -1
- package/dist/modules/board/taskTypeCreationDefaults.d.ts +69 -0
- package/dist/modules/board/taskTypeCreationDefaults.d.ts.map +1 -0
- package/dist/modules/board/taskTypeCreationDefaults.js +63 -0
- package/dist/modules/board/taskTypeCreationDefaults.js.map +1 -0
- package/dist/modules/execution/AgentContextBuilder.d.ts +20 -1
- package/dist/modules/execution/AgentContextBuilder.d.ts.map +1 -1
- package/dist/modules/execution/AgentContextBuilder.js +21 -1
- package/dist/modules/execution/AgentContextBuilder.js.map +1 -1
- package/dist/modules/execution/ExecutionService.d.ts +24 -1
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +58 -66
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/ExecutionServiceDependencies.d.ts +8 -1
- package/dist/modules/execution/ExecutionServiceDependencies.d.ts.map +1 -1
- package/dist/modules/execution/InputGateController.d.ts +104 -0
- package/dist/modules/execution/InputGateController.d.ts.map +1 -0
- package/dist/modules/execution/InputGateController.js +202 -0
- package/dist/modules/execution/InputGateController.js.map +1 -0
- package/dist/modules/execution/StepDecisionController.d.ts +6 -0
- package/dist/modules/execution/StepDecisionController.d.ts.map +1 -1
- package/dist/modules/execution/StepDecisionController.js +18 -4
- package/dist/modules/execution/StepDecisionController.js.map +1 -1
- package/dist/modules/execution/gate-window-controllers.d.ts +17 -0
- package/dist/modules/execution/gate-window-controllers.d.ts.map +1 -1
- package/dist/modules/execution/gate-window-controllers.js +25 -0
- package/dist/modules/execution/gate-window-controllers.js.map +1 -1
- package/dist/modules/execution/run-context-admission.d.ts +1 -1
- package/dist/modules/execution/run-context-admission.d.ts.map +1 -1
- package/dist/modules/execution/run-context-admission.js +1 -0
- package/dist/modules/execution/run-context-admission.js.map +1 -1
- package/dist/modules/execution/stepPreamble.d.ts +52 -0
- package/dist/modules/execution/stepPreamble.d.ts.map +1 -0
- package/dist/modules/execution/stepPreamble.js +86 -0
- package/dist/modules/execution/stepPreamble.js.map +1 -0
- package/dist/modules/settings/workspaceSettingsMerge.d.ts.map +1 -1
- package/dist/modules/settings/workspaceSettingsMerge.js +1 -0
- package/dist/modules/settings/workspaceSettingsMerge.js.map +1 -1
- package/dist/validation/validateRegistrations.d.ts +8 -1
- package/dist/validation/validateRegistrations.d.ts.map +1 -1
- package/dist/validation/validateRegistrations.js +293 -87
- package/dist/validation/validateRegistrations.js.map +1 -1
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-context-admission.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/run-context-admission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AAEzE;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,4BAA4B,EAC1B,qBAAqB,GACrB,iBAAiB,GACjB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,0BAA0B,GAC1B,uBAAuB,GACvB,0BAA0B,GAC1B,oBAAoB,GACpB,qBAAqB,GACrB,gBAAgB,GAChB,6BAA6B,GAC7B,wBAAwB,GACxB,yBAAyB,GACzB,6BAA6B,GAC7B,sBAAsB,GACtB,yBAAyB,GACzB,uBAAuB,GACvB,yBAAyB,GACzB,kBAAkB,GAClB,eAAe,GACf,cAAc,GACd,0BAA0B,GAC1B,4BAA4B,GAC5B,6BAA6B,GAC7B,kBAAkB,GAClB,8BAA8B,GAC9B,8BAA8B,GAC9B,QAAQ,GACR,kCAAkC,GAClC,uBAAuB,GACvB,kBAAkB,GAClB,6BAA6B,GAC7B,uBAAuB,CAC1B,CAAA;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,uBAAuB,GAAG;IAC1E,cAAc,EAAE,mBAAmB,CAAA;IACnC,SAAS,EAAE,YAAY,CAAA;CACxB,
|
|
1
|
+
{"version":3,"file":"run-context-admission.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/run-context-admission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AAEzE;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,4BAA4B,EAC1B,qBAAqB,GACrB,iBAAiB,GACjB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,0BAA0B,GAC1B,kBAAkB,GAClB,uBAAuB,GACvB,0BAA0B,GAC1B,oBAAoB,GACpB,qBAAqB,GACrB,gBAAgB,GAChB,6BAA6B,GAC7B,wBAAwB,GACxB,yBAAyB,GACzB,6BAA6B,GAC7B,sBAAsB,GACtB,yBAAyB,GACzB,uBAAuB,GACvB,yBAAyB,GACzB,kBAAkB,GAClB,eAAe,GACf,cAAc,GACd,0BAA0B,GAC1B,4BAA4B,GAC5B,6BAA6B,GAC7B,kBAAkB,GAClB,8BAA8B,GAC9B,8BAA8B,GAC9B,QAAQ,GACR,kCAAkC,GAClC,uBAAuB,GACvB,kBAAkB,GAClB,6BAA6B,GAC7B,uBAAuB,CAC1B,CAAA;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,uBAAuB,GAAG;IAC1E,cAAc,EAAE,mBAAmB,CAAA;IACnC,SAAS,EAAE,YAAY,CAAA;CACxB,CAkDA"}
|
|
@@ -18,6 +18,7 @@ export function buildRunContextAndAdmission(deps) {
|
|
|
18
18
|
accountRepository: deps.accountRepository,
|
|
19
19
|
agentKindRegistry: deps.agentKindRegistry,
|
|
20
20
|
initiativePresetRegistry: deps.initiativePresetRegistry,
|
|
21
|
+
taskTypeRegistry: deps.taskTypeRegistry,
|
|
21
22
|
agentPrompts: deps.agentPromptRepository,
|
|
22
23
|
agentSettings: deps.workspaceAgentSettingsRepository,
|
|
23
24
|
modelPresets: deps.modelPresetRepository,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-context-admission.js","sourceRoot":"","sources":["../../../src/modules/execution/run-context-admission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"run-context-admission.js","sourceRoot":"","sources":["../../../src/modules/execution/run-context-admission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AA+ChD,MAAM,UAAU,2BAA2B,CAAC,IAA6B;IAIvE,MAAM,cAAc,GAAG,IAAI,mBAAmB,CAAC;QAC7C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;QACvD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,YAAY,EAAE,IAAI,CAAC,qBAAqB;QACxC,aAAa,EAAE,IAAI,CAAC,gCAAgC;QACpD,YAAY,EAAE,IAAI,CAAC,qBAAqB;QACxC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,eAAe,EAAE,IAAI,CAAC,wBAAwB;QAC9C,SAAS,EAAE,IAAI,CAAC,kBAAkB;QAClC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,KAAK,EAAE,IAAI,CAAC,cAAc;QAC1B,kBAAkB,EAAE,IAAI,CAAC,2BAA2B;QACpD,aAAa,EAAE,IAAI,CAAC,sBAAsB;QAC1C,cAAc,EAAE,IAAI,CAAC,uBAAuB;QAC5C,kBAAkB,EAAE,IAAI,CAAC,2BAA2B;QACpD,WAAW,EAAE,IAAI,CAAC,oBAAoB;QACtC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;QACrD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;QACrD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;QAC7D,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAA;IACF,uFAAuF;IACvF,gFAAgF;IAChF,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC;QACjC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,cAAc;QACd,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,KAAK,EAAE,IAAI,CAAC,YAAY;QACxB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;QACrD,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;QACvD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;QAC3D,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;QAC7D,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;QAC7D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,4BAA4B,EAAE,IAAI,CAAC,4BAA4B;QAC/D,4BAA4B,EAAE,IAAI,CAAC,4BAA4B;KAChE,CAAC,CAAA;IACF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Block, ExecutionInstance, PipelineStep } from '@cat-factory/kernel';
|
|
2
|
+
import type { AgentKindRegistry } from '@cat-factory/agents';
|
|
3
|
+
import type { AdvanceResult } from './advance.js';
|
|
4
|
+
import type { InputGateController } from './InputGateController.js';
|
|
5
|
+
import type { RunStateMachine } from './RunStateMachine.js';
|
|
6
|
+
import type { StepGraph } from './StepGraph.js';
|
|
7
|
+
export interface StepPreambleDeps {
|
|
8
|
+
spend: {
|
|
9
|
+
isOverBudget: (workspaceId: string, scope: {
|
|
10
|
+
accountId?: string | null;
|
|
11
|
+
userId?: string | null;
|
|
12
|
+
}) => Promise<boolean>;
|
|
13
|
+
};
|
|
14
|
+
/** `WorkspaceRepository.accountOf` — the budget scope's account. */
|
|
15
|
+
accountOf: (workspaceId: string) => Promise<string | null | undefined>;
|
|
16
|
+
/** `RunDispatcher.currentStepIsNonMetered` — the spend gate's exemption. */
|
|
17
|
+
currentStepIsNonMetered: (workspaceId: string, instance: ExecutionInstance, step: PipelineStep) => Promise<boolean>;
|
|
18
|
+
/** `RunDispatcher.skipGatedStep` — finishes an estimate-gated-out step as `skipped`. */
|
|
19
|
+
skipGatedStep: (workspaceId: string, instance: ExecutionInstance, step: PipelineStep, isFinalStep: boolean) => Promise<AdvanceResult>;
|
|
20
|
+
/** `BlockRepository.get` — the block every downstream handler reads, fetched once here. */
|
|
21
|
+
blockOf: (workspaceId: string, blockId: string) => Promise<Block | null>;
|
|
22
|
+
stateMachine: RunStateMachine;
|
|
23
|
+
stepGraph: StepGraph;
|
|
24
|
+
inputGate: InputGateController;
|
|
25
|
+
agentKindRegistry: AgentKindRegistry;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* What the preamble decided. `proceed` carries the block every downstream handler needs (read
|
|
29
|
+
* once here rather than again per handler); `stop` carries the {@link AdvanceResult} the driver
|
|
30
|
+
* acts on. A discriminated result rather than a nullable one, because "keep going" has a payload
|
|
31
|
+
* and "we are done" has a different one, and a caller must not be able to reach for the wrong
|
|
32
|
+
* half.
|
|
33
|
+
*/
|
|
34
|
+
export type StepPreambleOutcome = {
|
|
35
|
+
kind: 'proceed';
|
|
36
|
+
block: Block;
|
|
37
|
+
isFinalStep: boolean;
|
|
38
|
+
} | {
|
|
39
|
+
kind: 'stop';
|
|
40
|
+
result: AdvanceResult;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Run the four pre-dispatch checks for a step, in order.
|
|
44
|
+
*
|
|
45
|
+
* The ORDER is load-bearing twice over. The spend gate is first because a run over budget must
|
|
46
|
+
* not do work of any kind, including the reads below it. The input gate sits immediately before
|
|
47
|
+
* the handler dispatch because that is the last point at which the run has cost NOTHING: the
|
|
48
|
+
* estimate-gating skip beneath it spends no tokens either, but everything past
|
|
49
|
+
* `dispatchStepHandler` does.
|
|
50
|
+
*/
|
|
51
|
+
export declare function runStepPreamble(deps: StepPreambleDeps, workspaceId: string, instance: ExecutionInstance, step: PipelineStep): Promise<StepPreambleOutcome>;
|
|
52
|
+
//# sourceMappingURL=stepPreamble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepPreamble.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/stepPreamble.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAoB/C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE;QACL,YAAY,EAAE,CACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,KACzD,OAAO,CAAC,OAAO,CAAC,CAAA;KACtB,CAAA;IACD,oEAAoE;IACpE,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;IACtE,4EAA4E;IAC5E,uBAAuB,EAAE,CACvB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,wFAAwF;IACxF,aAAa,EAAE,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,OAAO,KACjB,OAAO,CAAC,aAAa,CAAC,CAAA;IAC3B,2FAA2F;IAC3F,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IACxE,YAAY,EAAE,eAAe,CAAA;IAC7B,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,mBAAmB,CAAA;IAC9B,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAA;AAE3C;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,mBAAmB,CAAC,CA6E9B"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { isReentrantDecisionResume } from './reentrancy.logic.js';
|
|
2
|
+
import { producerWasSkipped, shouldRunGatedStep } from './stepGating.logic.js';
|
|
3
|
+
/**
|
|
4
|
+
* Run the four pre-dispatch checks for a step, in order.
|
|
5
|
+
*
|
|
6
|
+
* The ORDER is load-bearing twice over. The spend gate is first because a run over budget must
|
|
7
|
+
* not do work of any kind, including the reads below it. The input gate sits immediately before
|
|
8
|
+
* the handler dispatch because that is the last point at which the run has cost NOTHING: the
|
|
9
|
+
* estimate-gating skip beneath it spends no tokens either, but everything past
|
|
10
|
+
* `dispatchStepHandler` does.
|
|
11
|
+
*/
|
|
12
|
+
export async function runStepPreamble(deps, workspaceId, instance, step) {
|
|
13
|
+
// Spend gate: don't incur monetary LLM cost once the budget is exhausted. Pause the run (so
|
|
14
|
+
// the frontend can flag it) and stop here. A previously-paused run that finds the budget has
|
|
15
|
+
// freed up resumes and proceeds. EXEMPTION: a step that incurs no metered monetary cost (a
|
|
16
|
+
// flat-rate subscription like Claude Code / Codex, or a local-runner model, keyless on the
|
|
17
|
+
// user's own endpoint) never contributes to the budget, so it must not be held hostage by a
|
|
18
|
+
// budget other (metered) models exhausted. This is what lets a deliberately local-only /
|
|
19
|
+
// subscription-only workspace keep running at a `0` budget (see the spend-budget docs).
|
|
20
|
+
const budgetAccountId = await deps.accountOf(workspaceId);
|
|
21
|
+
if (await deps.spend.isOverBudget(workspaceId, {
|
|
22
|
+
accountId: budgetAccountId,
|
|
23
|
+
userId: instance.initiatedBy,
|
|
24
|
+
})) {
|
|
25
|
+
if (!(await deps.currentStepIsNonMetered(workspaceId, instance, step))) {
|
|
26
|
+
if (instance.status !== 'paused') {
|
|
27
|
+
instance.status = 'paused';
|
|
28
|
+
await deps.stateMachine.casPersist(workspaceId, instance);
|
|
29
|
+
await deps.stateMachine.emitInstance(workspaceId, instance);
|
|
30
|
+
// Surface the pause in the inbox (F3): a `paused` run is invisible to the sweeper and
|
|
31
|
+
// has no auto-resume, so without this card the paused board badge is its only signal.
|
|
32
|
+
await deps.stateMachine.raiseBudgetPaused(workspaceId);
|
|
33
|
+
}
|
|
34
|
+
return { kind: 'stop', result: { kind: 'paused' } };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (instance.status === 'paused')
|
|
38
|
+
instance.status = 'running';
|
|
39
|
+
if (step.state === 'waiting_decision') {
|
|
40
|
+
// Several gates are re-entrant: a human action sets a `pending*` marker on the parked step
|
|
41
|
+
// and wakes the driver, and the step handler must run the (slow) resume work in the durable
|
|
42
|
+
// driver instead of immediately re-parking on its stale decision id. See
|
|
43
|
+
// {@link isReentrantDecisionResume} for the per-gate cases.
|
|
44
|
+
if (!isReentrantDecisionResume(step, deps.agentKindRegistry)) {
|
|
45
|
+
// Parked on either an agent-raised decision or a human approval gate; both are addressed
|
|
46
|
+
// by the same durable event id.
|
|
47
|
+
const pendingId = step.decision?.id ?? step.approval?.id;
|
|
48
|
+
if (pendingId) {
|
|
49
|
+
instance.status = 'blocked';
|
|
50
|
+
await deps.stateMachine.casPersist(workspaceId, instance);
|
|
51
|
+
await deps.stateMachine.emitInstance(workspaceId, instance);
|
|
52
|
+
return { kind: 'stop', result: { kind: 'awaiting_decision', decisionId: pendingId } };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
deps.stepGraph.startStep(step);
|
|
57
|
+
const block = await deps.blockOf(workspaceId, instance.blockId);
|
|
58
|
+
if (!block)
|
|
59
|
+
return { kind: 'stop', result: { kind: 'noop' } };
|
|
60
|
+
// The PRE-DISPATCH INPUT GATE. Evaluated at most once per run (the verdict on
|
|
61
|
+
// `instance.inputGate` is the guard) and only at step 0; a park here costs nothing because
|
|
62
|
+
// nothing has run yet. `null` means proceed.
|
|
63
|
+
const gated = await deps.inputGate.evaluate(workspaceId, instance, step, block);
|
|
64
|
+
if (gated)
|
|
65
|
+
return { kind: 'stop', result: gated };
|
|
66
|
+
const isFinalStep = instance.currentStep === instance.steps.length - 1;
|
|
67
|
+
// Estimate gating: a step gated on the task estimate is transparently SKIPPED when the
|
|
68
|
+
// estimate (written by an earlier task-estimator step in this same run) falls below the
|
|
69
|
+
// threshold. No agent is spun up; the step finishes as `skipped` and the run advances.
|
|
70
|
+
// Evaluated here rather than at build time, because the estimate only exists once the
|
|
71
|
+
// estimator step has run.
|
|
72
|
+
//
|
|
73
|
+
// A COMPANION whose producer was skipped is skipped for the second reason: with producers now
|
|
74
|
+
// gatable, it would otherwise grade whatever step happens to precede it. Checked alongside its
|
|
75
|
+
// own gate because either reason is sufficient and they need not agree: a companion with no
|
|
76
|
+
// gate of its own still cascades.
|
|
77
|
+
const gatedOut = step.gating?.enabled && !shouldRunGatedStep(block.estimate, step.gating);
|
|
78
|
+
if (gatedOut || producerWasSkipped(instance.steps, instance.currentStep)) {
|
|
79
|
+
return {
|
|
80
|
+
kind: 'stop',
|
|
81
|
+
result: await deps.skipGatedStep(workspaceId, instance, step, isFinalStep),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return { kind: 'proceed', block, isFinalStep };
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=stepPreamble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepPreamble.js","sourceRoot":"","sources":["../../../src/modules/execution/stepPreamble.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceSettingsMerge.d.ts","sourceRoot":"","sources":["../../../src/modules/settings/workspaceSettingsMerge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG1F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,4BAA4B,GAClC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"workspaceSettingsMerge.d.ts","sourceRoot":"","sources":["../../../src/modules/settings/workspaceSettingsMerge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG1F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,4BAA4B,GAClC,iBAAiB,CA6CnB"}
|
|
@@ -24,6 +24,7 @@ export function mergeWorkspaceSettings(current, patch) {
|
|
|
24
24
|
artifactRetentionDays: patch.artifactRetentionDays ?? current.artifactRetentionDays,
|
|
25
25
|
kaizenEnabled: patch.kaizenEnabled ?? current.kaizenEnabled,
|
|
26
26
|
delegateAgentsToRunnerPool: patch.delegateAgentsToRunnerPool ?? current.delegateAgentsToRunnerPool,
|
|
27
|
+
inputGateMode: patch.inputGateMode ?? current.inputGateMode,
|
|
27
28
|
reviewFrictionMode: patch.reviewFrictionMode ?? current.reviewFrictionMode,
|
|
28
29
|
reviewFrictionWarnCount: patch.reviewFrictionWarnCount ?? current.reviewFrictionWarnCount,
|
|
29
30
|
reviewFrictionBlockCount: patch.reviewFrictionBlockCount !== undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceSettingsMerge.js","sourceRoot":"","sources":["../../../src/modules/settings/workspaceSettingsMerge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAA0B,EAC1B,KAAmC;IAEnC,OAAO;QACL,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,IAAI,OAAO,CAAC,wBAAwB;QAC5F,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;QAC3D,eAAe,EACb,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe;QACvF,gBAAgB,EACd,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB;QAC1F,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB;QACvE,2BAA2B,EACzB,KAAK,CAAC,2BAA2B,IAAI,OAAO,CAAC,2BAA2B;QAC1E,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,IAAI,OAAO,CAAC,qBAAqB;QACnF,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;QAC3D,0BAA0B,EACxB,KAAK,CAAC,0BAA0B,IAAI,OAAO,CAAC,0BAA0B;QACxE,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,OAAO,CAAC,kBAAkB;QAC1E,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,IAAI,OAAO,CAAC,uBAAuB;QACzF,wBAAwB,EACtB,KAAK,CAAC,wBAAwB,KAAK,SAAS;YAC1C,CAAC,CAAC,KAAK,CAAC,wBAAwB;YAChC,CAAC,CAAC,OAAO,CAAC,wBAAwB;QACtC,+BAA+B,EAC7B,KAAK,CAAC,+BAA+B,KAAK,SAAS;YACjD,CAAC,CAAC,KAAK,CAAC,+BAA+B;YACvC,CAAC,CAAC,OAAO,CAAC,+BAA+B;QAC7C,aAAa,EAAE,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;QAC9F,iBAAiB,EACf,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB;QAC7F,oBAAoB,EAClB,KAAK,CAAC,oBAAoB,KAAK,SAAS;YACtC,CAAC,CAAC,KAAK,CAAC,oBAAoB;YAC5B,CAAC,CAAC,OAAO,CAAC,oBAAoB;QAClC,0BAA0B,EACxB,KAAK,CAAC,0BAA0B,KAAK,SAAS;YAC5C,CAAC,CAAC,KAAK,CAAC,0BAA0B;YAClC,CAAC,CAAC,OAAO,CAAC,0BAA0B;QACxC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB;QACvE,6FAA6F;QAC7F,kFAAkF;QAClF,2FAA2F;QAC3F,+EAA+E;QAC/E,QAAQ,EACN,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ;KAC/F,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"workspaceSettingsMerge.js","sourceRoot":"","sources":["../../../src/modules/settings/workspaceSettingsMerge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAA0B,EAC1B,KAAmC;IAEnC,OAAO;QACL,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,IAAI,OAAO,CAAC,wBAAwB;QAC5F,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;QAC3D,eAAe,EACb,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe;QACvF,gBAAgB,EACd,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB;QAC1F,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB;QACvE,2BAA2B,EACzB,KAAK,CAAC,2BAA2B,IAAI,OAAO,CAAC,2BAA2B;QAC1E,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,IAAI,OAAO,CAAC,qBAAqB;QACnF,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;QAC3D,0BAA0B,EACxB,KAAK,CAAC,0BAA0B,IAAI,OAAO,CAAC,0BAA0B;QACxE,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;QAC3D,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,OAAO,CAAC,kBAAkB;QAC1E,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,IAAI,OAAO,CAAC,uBAAuB;QACzF,wBAAwB,EACtB,KAAK,CAAC,wBAAwB,KAAK,SAAS;YAC1C,CAAC,CAAC,KAAK,CAAC,wBAAwB;YAChC,CAAC,CAAC,OAAO,CAAC,wBAAwB;QACtC,+BAA+B,EAC7B,KAAK,CAAC,+BAA+B,KAAK,SAAS;YACjD,CAAC,CAAC,KAAK,CAAC,+BAA+B;YACvC,CAAC,CAAC,OAAO,CAAC,+BAA+B;QAC7C,aAAa,EAAE,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;QAC9F,iBAAiB,EACf,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB;QAC7F,oBAAoB,EAClB,KAAK,CAAC,oBAAoB,KAAK,SAAS;YACtC,CAAC,CAAC,KAAK,CAAC,oBAAoB;YAC5B,CAAC,CAAC,OAAO,CAAC,oBAAoB;QAClC,0BAA0B,EACxB,KAAK,CAAC,0BAA0B,KAAK,SAAS;YAC5C,CAAC,CAAC,KAAK,CAAC,0BAA0B;YAClC,CAAC,CAAC,OAAO,CAAC,0BAA0B;QACxC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB;QACvE,6FAA6F;QAC7F,kFAAkF;QAClF,2FAA2F;QAC3F,+EAA+E;QAC/E,QAAQ,EACN,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ;KAC/F,CAAA;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentKindRegistry } from '@cat-factory/agents';
|
|
2
|
-
import type { BinaryGeneratorRegistry, FoundationalServiceRegistry, GateRegistry, PipelineRegistry, TaskTypeRegistry } from '@cat-factory/kernel';
|
|
2
|
+
import type { BinaryGeneratorRegistry, FoundationalServiceRegistry, GateRegistry, InitiativePresetRegistry, PipelineRegistry, TaskTypeRegistry } from '@cat-factory/kernel';
|
|
3
3
|
/** A single problem found during validation. `error` aborts boot; `warn` is logged only. */
|
|
4
4
|
export interface RegistrationProblem {
|
|
5
5
|
severity: 'error' | 'warn';
|
|
@@ -34,6 +34,13 @@ export interface ValidateRegistrationsOptions {
|
|
|
34
34
|
* a bad `formPanel`, or a `defaultPipelineId` naming a nonexistent pipeline fails at boot.
|
|
35
35
|
*/
|
|
36
36
|
taskTypeRegistry?: TaskTypeRegistry;
|
|
37
|
+
/**
|
|
38
|
+
* The app-owned initiative-preset registry to validate (the facade's injected instance — the SAME
|
|
39
|
+
* one it threads through `CoreDependencies.initiativePresetRegistry`). Optional: when omitted, no
|
|
40
|
+
* preset create form is checked. A facade passes it so a preset whose form cannot be filled fails
|
|
41
|
+
* at boot rather than rendering an empty picker (or an invisible field) in the create modal.
|
|
42
|
+
*/
|
|
43
|
+
initiativePresetRegistry?: InitiativePresetRegistry;
|
|
37
44
|
/**
|
|
38
45
|
* The app-owned foundational-service registry to validate (the facade's injected instance —
|
|
39
46
|
* the SAME one it threads through `CoreDependencies.foundationalServiceRegistry`). Optional:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateRegistrations.d.ts","sourceRoot":"","sources":["../../src/validation/validateRegistrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,EAEV,uBAAuB,EACvB,2BAA2B,EAC3B,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"validateRegistrations.d.ts","sourceRoot":"","sources":["../../src/validation/validateRegistrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,EAEV,uBAAuB,EACvB,2BAA2B,EAC3B,YAAY,EACZ,wBAAwB,EAGxB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,qBAAqB,CAAA;AA6D5B,4FAA4F;AAC5F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,uFAAuF;AACvF,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,iBAAiB,EAAE,iBAAiB,CAAA;IACpC;;;;OAIG;IACH,YAAY,EAAE,YAAY,CAAA;IAC1B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAA;IACnD;;;;;;OAMG;IACH,2BAA2B,CAAC,EAAE,2BAA2B,CAAA;IACzD;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;IACjD,qGAAqG;IACrG,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACxC,qGAAqG;IACrG,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACxC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACrC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAChD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,4BAA4B,GACjC,mBAAmB,EAAE,CAuFvB;AA0wBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI,CAY9E;AAOD,yGAAyG;AACzG,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI,CASlF;AAED,uFAAuF;AACvF,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD"}
|