@cat-factory/orchestration 0.74.3 → 0.76.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.d.ts +32 -2
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +52 -1
- package/dist/container.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/docInterview/DocInterviewService.d.ts +68 -0
- package/dist/modules/docInterview/DocInterviewService.d.ts.map +1 -0
- package/dist/modules/docInterview/DocInterviewService.js +174 -0
- package/dist/modules/docInterview/DocInterviewService.js.map +1 -0
- package/dist/modules/docInterview/doc-interview.logic.d.ts +42 -0
- package/dist/modules/docInterview/doc-interview.logic.d.ts.map +1 -0
- package/dist/modules/docInterview/doc-interview.logic.js +111 -0
- package/dist/modules/docInterview/doc-interview.logic.js.map +1 -0
- package/dist/modules/execution/AgentContextBuilder.d.ts +9 -1
- package/dist/modules/execution/AgentContextBuilder.d.ts.map +1 -1
- package/dist/modules/execution/AgentContextBuilder.js +33 -5
- package/dist/modules/execution/AgentContextBuilder.js.map +1 -1
- package/dist/modules/execution/DocInterviewController.d.ts +12 -0
- package/dist/modules/execution/DocInterviewController.d.ts.map +1 -0
- package/dist/modules/execution/DocInterviewController.js +56 -0
- package/dist/modules/execution/DocInterviewController.js.map +1 -0
- package/dist/modules/execution/ExecutionService.d.ts +27 -2
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +34 -2
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/InitiativeInterviewController.d.ts +4 -41
- package/dist/modules/execution/InitiativeInterviewController.d.ts.map +1 -1
- package/dist/modules/execution/InitiativeInterviewController.js +39 -132
- package/dist/modules/execution/InitiativeInterviewController.js.map +1 -1
- package/dist/modules/execution/InterviewGateController.d.ts +82 -0
- package/dist/modules/execution/InterviewGateController.d.ts.map +1 -0
- package/dist/modules/execution/InterviewGateController.js +128 -0
- package/dist/modules/execution/InterviewGateController.js.map +1 -0
- package/dist/modules/execution/RunDispatcher.d.ts +4 -0
- package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
- package/dist/modules/execution/RunDispatcher.js +16 -1
- package/dist/modules/execution/RunDispatcher.js.map +1 -1
- package/package.json +12 -12
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Block, BlockRepository, ExecutionInstance, ExecutionRepository, PipelineStep, WorkRunner } from '@cat-factory/kernel';
|
|
2
|
+
import type { AdvanceResult } from './advance.js';
|
|
3
|
+
import type { RunStateMachine } from './RunStateMachine.js';
|
|
4
|
+
import type { StepGraph } from './StepGraph.js';
|
|
5
|
+
/** The durable-driver collaborators every interview gate needs (shared with every other gate). */
|
|
6
|
+
export interface InterviewGateDeps {
|
|
7
|
+
blockRepository: BlockRepository;
|
|
8
|
+
executionRepository: ExecutionRepository;
|
|
9
|
+
workRunner: WorkRunner;
|
|
10
|
+
stateMachine: RunStateMachine;
|
|
11
|
+
stepGraph: StepGraph;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The per-feature differences an interview gate varies over. Everything else (the
|
|
15
|
+
* park/answer/resume/advance spine) lives in {@link InterviewGateController}.
|
|
16
|
+
*
|
|
17
|
+
* @typeParam TEntity the interview entity the window renders and the actions return (a
|
|
18
|
+
* `DocInterviewSession` for the doc interviewer, an `Initiative` for the planning interviewer).
|
|
19
|
+
*/
|
|
20
|
+
export interface InterviewGateKind<TEntity> {
|
|
21
|
+
/** The pipeline-step `agentKind` this gate runs as (e.g. `doc-interviewer`). */
|
|
22
|
+
readonly agentKind: string;
|
|
23
|
+
/** Label for `assertFound` when a block has no live interview entity (e.g. `Initiative`). */
|
|
24
|
+
readonly entityName: string;
|
|
25
|
+
/** Whether the inline interviewer LLM is wired; false → the gate passes through unchanged. */
|
|
26
|
+
enabled(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Drop any prior run's interview state for the block so a RE-RUN starts a clean interview
|
|
29
|
+
* (mirrors `IterativeReviewService.review` clearing the block before iteration 1). Optional — an
|
|
30
|
+
* entity-native gate whose entity lifecycle already isolates runs leaves it unset (no-op).
|
|
31
|
+
*/
|
|
32
|
+
resetForFreshRun?(workspaceId: string, blockId: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Run ONE interviewer pass and persist its result (owning its own load / model resolution /
|
|
35
|
+
* entity writes / live-event emit): return `park` when it asked the human a fresh batch of
|
|
36
|
+
* questions (the gate then parks on the decision-wait), or `advance` when it converged — or
|
|
37
|
+
* there was nothing to interview into.
|
|
38
|
+
*/
|
|
39
|
+
runPass(workspaceId: string, instance: ExecutionInstance, block: Block, opts: {
|
|
40
|
+
proceed: boolean;
|
|
41
|
+
}): Promise<'park' | 'advance'>;
|
|
42
|
+
/** Record the human's answer to one pending question (and emit); null when there is no entity. */
|
|
43
|
+
recordAnswer(workspaceId: string, blockId: string, questionId: string, answer: string): Promise<TEntity | null>;
|
|
44
|
+
/** The block's current interview entity, or null (the window load path). */
|
|
45
|
+
current(workspaceId: string, blockId: string): Promise<TEntity | null>;
|
|
46
|
+
}
|
|
47
|
+
export declare class InterviewGateController<TEntity> {
|
|
48
|
+
private readonly deps;
|
|
49
|
+
private readonly kind;
|
|
50
|
+
constructor(deps: InterviewGateDeps, kind: InterviewGateKind<TEntity>);
|
|
51
|
+
/**
|
|
52
|
+
* Run the interviewer gate step. When no interviewer model is wired the step passes through
|
|
53
|
+
* (pipelines — and the conformance suite — run unchanged). Otherwise it runs an interviewer
|
|
54
|
+
* pass: questions → PARK for the window; converged → advance. Re-entrant: after the human
|
|
55
|
+
* `continue`s (or `proceed`s), the durable driver wakes and re-enters here, running the (slow)
|
|
56
|
+
* interviewer LLM in the driver rather than the HTTP request.
|
|
57
|
+
*/
|
|
58
|
+
evaluate(workspaceId: string, instance: ExecutionInstance, step: PipelineStep, block: Block, isFinalStep: boolean): Promise<AdvanceResult>;
|
|
59
|
+
/** One interviewer pass: the strategy decides + persists, we park or advance. */
|
|
60
|
+
private dispatchPass;
|
|
61
|
+
/** Record the human's answer to one pending question. Does NOT resume the run. */
|
|
62
|
+
answer(workspaceId: string, blockId: string, questionId: string, answer: string): Promise<TEntity>;
|
|
63
|
+
/** Submit the answers and resume the interview (the interviewer re-runs, may ask more). */
|
|
64
|
+
continue(workspaceId: string, blockId: string): Promise<TEntity>;
|
|
65
|
+
/** Skip remaining questions: force the interviewer to converge, then advance. */
|
|
66
|
+
proceed(workspaceId: string, blockId: string): Promise<TEntity>;
|
|
67
|
+
/** The current interview entity for a block (window load path). */
|
|
68
|
+
getByBlock(workspaceId: string, blockId: string): Promise<TEntity | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Record the continue/proceed intent on the parked interviewer step and signal the durable
|
|
71
|
+
* driver to wake — which re-enters {@link evaluate} and runs the (slow) interviewer LLM off the
|
|
72
|
+
* HTTP request. Off-path (no parked run) it is a no-op read: the interview is not live, so there
|
|
73
|
+
* is no driver to wake.
|
|
74
|
+
*/
|
|
75
|
+
private resume;
|
|
76
|
+
private requireCurrent;
|
|
77
|
+
/** Locate the run + interviewer step a block's interview is parked on (or null). */
|
|
78
|
+
private findParkedStep;
|
|
79
|
+
/** Finish the interviewer step and advance to the next step (or finish the run). */
|
|
80
|
+
private completeStep;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=InterviewGateController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterviewGateController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/InterviewGateController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACX,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAc/C,kGAAkG;AAClG,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,eAAe,CAAA;IAChC,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,EAAE,eAAe,CAAA;IAC7B,SAAS,EAAE,SAAS,CAAA;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB,CAAC,OAAO;IACxC,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,8FAA8F;IAC9F,OAAO,IAAI,OAAO,CAAA;IAClB;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE;;;;;OAKG;IACH,OAAO,CACL,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9B,kGAAkG;IAClG,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;CACvE;AAED,qBAAa,uBAAuB,CAAC,OAAO;IAExC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAC/C;IAEJ;;;;;;OAMG;IACG,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,aAAa,CAAC,CAmBxB;IAED,iFAAiF;YACnE,YAAY;IAmB1B,kFAAkF;IAClF,MAAM,CACJ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAKlB;IAED,2FAA2F;IAC3F,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/D;IAED,iFAAiF;IACjF,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9D;IAED,mEAAmE;IACnE,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAExE;IAED;;;;;OAKG;YACW,MAAM;YAqBN,cAAc;IAI5B,oFAAoF;YACtE,cAAc;IAiB5B,oFAAoF;YACtE,YAAY;CA2B3B"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { assertFound } from '@cat-factory/kernel';
|
|
2
|
+
export class InterviewGateController {
|
|
3
|
+
deps;
|
|
4
|
+
kind;
|
|
5
|
+
constructor(deps, kind) {
|
|
6
|
+
this.deps = deps;
|
|
7
|
+
this.kind = kind;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Run the interviewer gate step. When no interviewer model is wired the step passes through
|
|
11
|
+
* (pipelines — and the conformance suite — run unchanged). Otherwise it runs an interviewer
|
|
12
|
+
* pass: questions → PARK for the window; converged → advance. Re-entrant: after the human
|
|
13
|
+
* `continue`s (or `proceed`s), the durable driver wakes and re-enters here, running the (slow)
|
|
14
|
+
* interviewer LLM in the driver rather than the HTTP request.
|
|
15
|
+
*/
|
|
16
|
+
async evaluate(workspaceId, instance, step, block, isFinalStep) {
|
|
17
|
+
// Re-entry: the human answered and asked to continue/proceed. `proceed` forces the
|
|
18
|
+
// interviewer to converge (no more questions); `continue` lets it ask follow-ups. A parked
|
|
19
|
+
// run is never re-entered here without a decision (a blocked run no-ops in `advanceInstance`),
|
|
20
|
+
// so this branch is the ONLY resume path and the one below is the genuine first dispatch.
|
|
21
|
+
const pending = step.pendingInterview;
|
|
22
|
+
if (pending) {
|
|
23
|
+
step.pendingInterview = null;
|
|
24
|
+
if (!this.kind.enabled())
|
|
25
|
+
return this.completeStep(workspaceId, instance, step, isFinalStep);
|
|
26
|
+
return this.dispatchPass(workspaceId, instance, step, block, isFinalStep, {
|
|
27
|
+
proceed: pending.proceed === true,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
// Fresh entry for this run: drop any prior run's interview state so a re-run starts a clean
|
|
31
|
+
// interview instead of reusing a stale (often converged / at-cap) session. Runs even when the
|
|
32
|
+
// interviewer is unwired, so a stale brief from an earlier wired run can't bleed downstream.
|
|
33
|
+
await this.kind.resetForFreshRun?.(workspaceId, block.id);
|
|
34
|
+
if (!this.kind.enabled())
|
|
35
|
+
return this.completeStep(workspaceId, instance, step, isFinalStep);
|
|
36
|
+
return this.dispatchPass(workspaceId, instance, step, block, isFinalStep, { proceed: false });
|
|
37
|
+
}
|
|
38
|
+
/** One interviewer pass: the strategy decides + persists, we park or advance. */
|
|
39
|
+
async dispatchPass(workspaceId, instance, step, block, isFinalStep, opts) {
|
|
40
|
+
const decision = await this.kind.runPass(workspaceId, instance, block, opts);
|
|
41
|
+
if (decision === 'park') {
|
|
42
|
+
// Surface a decision-required notification so the parked interview gate is discoverable.
|
|
43
|
+
await this.deps.stateMachine.raiseDecisionRequired(workspaceId, instance);
|
|
44
|
+
return this.deps.stateMachine.parkStepOnDecision(workspaceId, instance, step);
|
|
45
|
+
}
|
|
46
|
+
return this.completeStep(workspaceId, instance, step, isFinalStep);
|
|
47
|
+
}
|
|
48
|
+
// ---- window actions (driven by the per-feature server controller) --------------------------
|
|
49
|
+
/** Record the human's answer to one pending question. Does NOT resume the run. */
|
|
50
|
+
answer(workspaceId, blockId, questionId, answer) {
|
|
51
|
+
return this.requireCurrent(this.kind.recordAnswer(workspaceId, blockId, questionId, answer), blockId);
|
|
52
|
+
}
|
|
53
|
+
/** Submit the answers and resume the interview (the interviewer re-runs, may ask more). */
|
|
54
|
+
continue(workspaceId, blockId) {
|
|
55
|
+
return this.resume(workspaceId, blockId, { proceed: false }, 'continue');
|
|
56
|
+
}
|
|
57
|
+
/** Skip remaining questions: force the interviewer to converge, then advance. */
|
|
58
|
+
proceed(workspaceId, blockId) {
|
|
59
|
+
return this.resume(workspaceId, blockId, { proceed: true }, 'proceed');
|
|
60
|
+
}
|
|
61
|
+
/** The current interview entity for a block (window load path). */
|
|
62
|
+
getByBlock(workspaceId, blockId) {
|
|
63
|
+
return this.kind.current(workspaceId, blockId);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Record the continue/proceed intent on the parked interviewer step and signal the durable
|
|
67
|
+
* driver to wake — which re-enters {@link evaluate} and runs the (slow) interviewer LLM off the
|
|
68
|
+
* HTTP request. Off-path (no parked run) it is a no-op read: the interview is not live, so there
|
|
69
|
+
* is no driver to wake.
|
|
70
|
+
*/
|
|
71
|
+
async resume(workspaceId, blockId, intent, choice) {
|
|
72
|
+
const parked = await this.findParkedStep(workspaceId, blockId);
|
|
73
|
+
if (parked) {
|
|
74
|
+
const { instance, step } = parked;
|
|
75
|
+
step.pendingInterview = intent.proceed ? { proceed: true } : {};
|
|
76
|
+
// Re-arm BEFORE signalling: the park left the run `blocked`, and `advanceInstance`
|
|
77
|
+
// no-ops unless it is `running`/`paused`, so a woken driver would otherwise return
|
|
78
|
+
// without re-entering the gate.
|
|
79
|
+
if (instance.status === 'blocked')
|
|
80
|
+
instance.status = 'running';
|
|
81
|
+
await this.deps.stateMachine.persistInstance(workspaceId, instance);
|
|
82
|
+
await this.deps.stateMachine.emitInstance(workspaceId, instance);
|
|
83
|
+
await this.deps.workRunner.signalDecision(workspaceId, instance.id, step.approval.id, choice);
|
|
84
|
+
}
|
|
85
|
+
return this.requireCurrent(this.kind.current(workspaceId, blockId), blockId);
|
|
86
|
+
}
|
|
87
|
+
async requireCurrent(entity, blockId) {
|
|
88
|
+
return assertFound(await entity, this.kind.entityName, blockId);
|
|
89
|
+
}
|
|
90
|
+
/** Locate the run + interviewer step a block's interview is parked on (or null). */
|
|
91
|
+
async findParkedStep(workspaceId, blockId) {
|
|
92
|
+
const block = await this.deps.blockRepository.get(workspaceId, blockId);
|
|
93
|
+
if (!block?.executionId)
|
|
94
|
+
return null;
|
|
95
|
+
const instance = await this.deps.executionRepository.get(workspaceId, block.executionId);
|
|
96
|
+
if (!instance)
|
|
97
|
+
return null;
|
|
98
|
+
const step = instance.steps.find((s) => s.agentKind === this.kind.agentKind &&
|
|
99
|
+
s.state === 'waiting_decision' &&
|
|
100
|
+
s.approval?.status === 'pending');
|
|
101
|
+
return step ? { instance, step } : null;
|
|
102
|
+
}
|
|
103
|
+
/** Finish the interviewer step and advance to the next step (or finish the run). */
|
|
104
|
+
async completeStep(workspaceId, instance, step, isFinalStep) {
|
|
105
|
+
this.deps.stepGraph.finishStep(step);
|
|
106
|
+
step.progress = 1;
|
|
107
|
+
step.subtasks = undefined;
|
|
108
|
+
step.approval = null;
|
|
109
|
+
step.pendingInterview = null;
|
|
110
|
+
if (isFinalStep) {
|
|
111
|
+
instance.status = 'done';
|
|
112
|
+
await this.deps.stateMachine.finalizeBlock(workspaceId, instance, undefined);
|
|
113
|
+
await this.deps.stateMachine.persistInstance(workspaceId, instance);
|
|
114
|
+
await this.deps.stateMachine.emitInstance(workspaceId, instance);
|
|
115
|
+
await this.deps.stateMachine.stopRunContainer(workspaceId, instance);
|
|
116
|
+
return { kind: 'done' };
|
|
117
|
+
}
|
|
118
|
+
instance.currentStep += 1;
|
|
119
|
+
const next = instance.steps[instance.currentStep];
|
|
120
|
+
if (next)
|
|
121
|
+
this.deps.stepGraph.startStep(next);
|
|
122
|
+
await this.deps.stateMachine.updateBlockProgress(workspaceId, instance, 'in_progress');
|
|
123
|
+
await this.deps.stateMachine.persistInstance(workspaceId, instance);
|
|
124
|
+
await this.deps.stateMachine.emitInstance(workspaceId, instance);
|
|
125
|
+
return { kind: 'continue' };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=InterviewGateController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterviewGateController.js","sourceRoot":"","sources":["../../../src/modules/execution/InterviewGateController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAqEjD,MAAM,OAAO,uBAAuB;IAEf,IAAI;IACJ,IAAI;IAFvB,YACmB,IAAuB,EACvB,IAAgC;oBADhC,IAAI;oBACJ,IAAI;IACpB,CAAC;IAEJ;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CACZ,WAAmB,EACnB,QAA2B,EAC3B,IAAkB,EAClB,KAAY,EACZ,WAAoB;QAEpB,mFAAmF;QACnF,2FAA2F;QAC3F,+FAA+F;QAC/F,0FAA0F;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAA;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBAAE,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;YAC5F,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;gBACxE,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI;aAClC,CAAC,CAAA;QACJ,CAAC;QACD,4FAA4F;QAC5F,8FAA8F;QAC9F,6FAA6F;QAC7F,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;QAC5F,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/F,CAAC;IAED,iFAAiF;IACzE,KAAK,CAAC,YAAY,CACxB,WAAmB,EACnB,QAA2B,EAC3B,IAAkB,EAClB,KAAY,EACZ,WAAoB,EACpB,IAA0B;QAE1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAC5E,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,yFAAyF;YACzF,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YACzE,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC/E,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IACpE,CAAC;IAED,+FAA+F;IAE/F,kFAAkF;IAClF,MAAM,CACJ,WAAmB,EACnB,OAAe,EACf,UAAkB,EAClB,MAAc;QAEd,OAAO,IAAI,CAAC,cAAc,CACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,EAChE,OAAO,CACR,CAAA;IACH,CAAC;IAED,2FAA2F;IAC3F,QAAQ,CAAC,WAAmB,EAAE,OAAe;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,CAAA;IAC1E,CAAC;IAED,iFAAiF;IACjF,OAAO,CAAC,WAAmB,EAAE,OAAe;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,CAAA;IACxE,CAAC;IAED,mEAAmE;IACnE,UAAU,CAAC,WAAmB,EAAE,OAAe;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,MAAM,CAClB,WAAmB,EACnB,OAAe,EACf,MAA4B,EAC5B,MAA8B;QAE9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC9D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;YACjC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC/D,mFAAmF;YACnF,mFAAmF;YACnF,gCAAgC;YAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;gBAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAA;YAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YACnE,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAChE,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,QAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAChG,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;IAC9E,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAA+B,EAAE,OAAe;QAC3E,OAAO,WAAW,CAAC,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACjE,CAAC;IAED,oFAAoF;IAC5E,KAAK,CAAC,cAAc,CAC1B,WAAmB,EACnB,OAAe;QAEf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACvE,IAAI,CAAC,KAAK,EAAE,WAAW;YAAE,OAAO,IAAI,CAAA;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;QACxF,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS;YACnC,CAAC,CAAC,KAAK,KAAK,kBAAkB;YAC9B,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CACnC,CAAA;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACzC,CAAC;IAED,oFAAoF;IAC5E,KAAK,CAAC,YAAY,CACxB,WAAmB,EACnB,QAA2B,EAC3B,IAAkB,EAClB,WAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC5B,IAAI,WAAW,EAAE,CAAC;YAChB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAA;YACxB,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;YAC5E,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YACnE,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAChE,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YACpE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QACzB,CAAC;QACD,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAA;QACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACjD,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAA;QACtF,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QACnE,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QAChE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IAC7B,CAAC;CACF"}
|
|
@@ -7,6 +7,7 @@ import { HumanTestController } from './HumanTestController.js';
|
|
|
7
7
|
import { MergeResolver } from './MergeResolver.js';
|
|
8
8
|
import { ReviewGateController, type ReviewKind } from './ReviewGateController.js';
|
|
9
9
|
import type { InitiativeInterviewController } from './InitiativeInterviewController.js';
|
|
10
|
+
import type { DocInterviewController } from './DocInterviewController.js';
|
|
10
11
|
import { RunStateMachine } from './RunStateMachine.js';
|
|
11
12
|
import { StepGraph } from './StepGraph.js';
|
|
12
13
|
import { TesterController } from './TesterController.js';
|
|
@@ -60,6 +61,8 @@ export interface RunDispatcherDeps {
|
|
|
60
61
|
architectureBrainstormKind: ReviewKind<BrainstormSession>;
|
|
61
62
|
/** The interactive-planning interviewer gate (slice 2); absent → the step passes through. */
|
|
62
63
|
initiativeInterviewController?: InitiativeInterviewController;
|
|
64
|
+
/** The interactive document-interview gate (WS5); absent → the step passes through. */
|
|
65
|
+
docInterviewController?: DocInterviewController;
|
|
63
66
|
runInitiatorScope: RunInitiatorScope;
|
|
64
67
|
environmentProvisioning?: EnvironmentProvisioningService;
|
|
65
68
|
ticketTrackerProvider?: TicketTrackerProvider;
|
|
@@ -116,6 +119,7 @@ export declare class RunDispatcher {
|
|
|
116
119
|
private readonly requirementsBrainstormKind;
|
|
117
120
|
private readonly architectureBrainstormKind;
|
|
118
121
|
private readonly initiativeInterviewController?;
|
|
122
|
+
private readonly docInterviewController?;
|
|
119
123
|
private readonly runInitiatorScope;
|
|
120
124
|
private readonly environmentProvisioning?;
|
|
121
125
|
private readonly ticketTrackerProvider?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunDispatcher.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/RunDispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,eAAe,EACf,cAAc,EAEd,KAAK,EACL,eAAe,EAEf,iBAAiB,EACjB,aAAa,EACb,KAAK,EAEL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EAEnB,kBAAkB,EAElB,cAAc,EAEd,WAAW,EACX,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAGhB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EAErB,iBAAiB,EAMjB,qBAAqB,EACrB,UAAU,EACX,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"RunDispatcher.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/RunDispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConflictError, DEFAULT_MERGE_PRESET, getErrorMessage, getProvider, INITIATIVE_ANALYST_AGENT_KIND, INITIATIVE_COMMITTER_AGENT_KIND, INITIATIVE_INTERVIEWER_AGENT_KIND, INITIATIVE_PLANNER_AGENT_KIND, isAsyncAgentExecutor, NotFoundError, parseLocalModelId, recordGateAttempt, registeredGateFactories, registeredStepResolverFactories, requireProvider, sameSubtasks, } from '@cat-factory/kernel';
|
|
1
|
+
import { ConflictError, DEFAULT_MERGE_PRESET, getErrorMessage, DOC_INTERVIEWER_AGENT_KIND, getProvider, INITIATIVE_ANALYST_AGENT_KIND, INITIATIVE_COMMITTER_AGENT_KIND, INITIATIVE_INTERVIEWER_AGENT_KIND, INITIATIVE_PLANNER_AGENT_KIND, isAsyncAgentExecutor, NotFoundError, parseLocalModelId, recordGateAttempt, registeredGateFactories, registeredStepResolverFactories, requireProvider, sameSubtasks, } from '@cat-factory/kernel';
|
|
2
2
|
import { frontendOriginsForService, parseBlueprintService, parseSpecDoc, } from '@cat-factory/contracts';
|
|
3
3
|
import { blueprintPostOp, commitInitiativeTracker, isCompanionKind, isContainerBackedCompanion, moduleSlug, runRepoOps, specPostOp, TASK_ESTIMATOR_AGENT_KIND, } from '@cat-factory/agents';
|
|
4
4
|
import { DEPLOYER_AGENT_KIND, isDeployStep } from '@cat-factory/integrations';
|
|
@@ -120,6 +120,7 @@ export class RunDispatcher {
|
|
|
120
120
|
requirementsBrainstormKind;
|
|
121
121
|
architectureBrainstormKind;
|
|
122
122
|
initiativeInterviewController;
|
|
123
|
+
docInterviewController;
|
|
123
124
|
runInitiatorScope;
|
|
124
125
|
environmentProvisioning;
|
|
125
126
|
ticketTrackerProvider;
|
|
@@ -164,6 +165,7 @@ export class RunDispatcher {
|
|
|
164
165
|
this.requirementsBrainstormKind = deps.requirementsBrainstormKind;
|
|
165
166
|
this.architectureBrainstormKind = deps.architectureBrainstormKind;
|
|
166
167
|
this.initiativeInterviewController = deps.initiativeInterviewController;
|
|
168
|
+
this.docInterviewController = deps.docInterviewController;
|
|
167
169
|
this.runInitiatorScope = deps.runInitiatorScope;
|
|
168
170
|
this.environmentProvisioning = deps.environmentProvisioning;
|
|
169
171
|
this.ticketTrackerProvider = deps.ticketTrackerProvider;
|
|
@@ -1959,6 +1961,19 @@ export class RunDispatcher {
|
|
|
1959
1961
|
// without the store, but never leave the run stuck).
|
|
1960
1962
|
this.recordStepResult(workspaceId, instance, step, isFinalStep, { output: '' }),
|
|
1961
1963
|
},
|
|
1964
|
+
// The `doc-interviewer` step converses with the human to refine a document's scope /
|
|
1965
|
+
// structure — an inline LLM gate that PARKS the run on a decision-wait while they answer
|
|
1966
|
+
// through the interview window, then synthesizes an authoring brief onto its session and
|
|
1967
|
+
// advances (see {@link DocInterviewController}). Pass-through when the interviewer isn't
|
|
1968
|
+
// wired (no model), so document pipelines + conformance run unchanged off the raw outline.
|
|
1969
|
+
{
|
|
1970
|
+
kind: DOC_INTERVIEWER_AGENT_KIND,
|
|
1971
|
+
order: 114,
|
|
1972
|
+
canHandle: ({ step }) => step.agentKind === DOC_INTERVIEWER_AGENT_KIND,
|
|
1973
|
+
handle: ({ workspaceId, instance, step, block, isFinalStep }) => this.docInterviewController
|
|
1974
|
+
? this.docInterviewController.evaluate(workspaceId, instance, step, block, isFinalStep)
|
|
1975
|
+
: this.recordStepResult(workspaceId, instance, step, isFinalStep, { output: '' }),
|
|
1976
|
+
},
|
|
1962
1977
|
// The `initiative-committer` step persists an APPROVED initiative plan: it runs
|
|
1963
1978
|
// strictly after the planner's human gate, flips the entity to `executing`, and
|
|
1964
1979
|
// mirrors the tracker into the repo (`docs/initiatives/<slug>/`) when GitHub is
|