@cat-factory/orchestration 0.109.0 → 0.110.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/execution/ExecutionService.d.ts +6 -1
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +20 -0
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/PrReviewController.d.ts +68 -0
- package/dist/modules/execution/PrReviewController.d.ts.map +1 -0
- package/dist/modules/execution/PrReviewController.js +149 -0
- package/dist/modules/execution/PrReviewController.js.map +1 -0
- package/dist/modules/execution/RunDispatcher.d.ts +8 -1
- package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
- package/dist/modules/execution/RunDispatcher.js +29 -1
- package/dist/modules/execution/RunDispatcher.js.map +1 -1
- package/dist/modules/execution/prReview.logic.d.ts +18 -0
- package/dist/modules/execution/prReview.logic.d.ts.map +1 -0
- package/dist/modules/execution/prReview.logic.js +76 -0
- package/dist/modules/execution/prReview.logic.js.map +1 -0
- package/dist/modules/notifications/NotificationService.d.ts.map +1 -1
- package/dist/modules/notifications/NotificationService.js +1 -0
- package/dist/modules/notifications/NotificationService.js.map +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { ConflictError } from '@cat-factory/kernel';
|
|
2
|
+
import { PR_REVIEWER_KIND } from '@cat-factory/agents';
|
|
3
|
+
import { coercePrReview } from './prReview.logic.js';
|
|
4
|
+
/** The step kind the PR-review park loop runs on (the read-only reviewer agent). */
|
|
5
|
+
export const PR_REVIEW_STEP_KIND = PR_REVIEWER_KIND;
|
|
6
|
+
/**
|
|
7
|
+
* Drives the human-facing half of the PR deep-review flow. The read-only `pr-reviewer`
|
|
8
|
+
* container agent slices an open PR's diff and returns prioritized findings; rather than
|
|
9
|
+
* finishing the run the moment it returns, {@link recordFindings} (run as the completion
|
|
10
|
+
* interceptor's body) records the sliced findings onto `step.prReview` and PARKS the run for a
|
|
11
|
+
* human to SELECT which findings matter through the dedicated window, then {@link resolve}
|
|
12
|
+
* records the selection and advances past the gate. A clean PR (no findings) — or an unwired
|
|
13
|
+
* reviewer — passes through: `recordFindings` records an empty `done` review and lets the
|
|
14
|
+
* normal completion finish the step.
|
|
15
|
+
*
|
|
16
|
+
* All state rides the run's `pr-reviewer` step (`step.prReview`) — no side table — so it is
|
|
17
|
+
* runtime-symmetric by construction, exactly like the fork-decision flow. The Fixer /
|
|
18
|
+
* inline-comment resolutions are the tracked PR 3 follow-up; PR 2 resolves with `finish`.
|
|
19
|
+
*/
|
|
20
|
+
export class PrReviewController {
|
|
21
|
+
deps;
|
|
22
|
+
constructor(deps) {
|
|
23
|
+
this.deps = deps;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Record the completed reviewer's findings onto the `pr-reviewer` step and decide the flow.
|
|
27
|
+
* Runs as the completion interceptor's body (short-circuiting `recordStepResult` when it
|
|
28
|
+
* parks). With findings: coerce + record them (`awaiting_selection`), raise the
|
|
29
|
+
* `pr_review_ready` card, and park on a durable decision-wait. With none (clean PR / degenerate
|
|
30
|
+
* output): record an empty `done` review in place and return `null` so the normal
|
|
31
|
+
* finish/advance spine completes the read-only step. Idempotent: a step already carrying a
|
|
32
|
+
* recorded review is left alone — an already-parked review stays parked (no re-coercion,
|
|
33
|
+
* which would re-mint the finding ids the human may be mid-selection on, nor a duplicate
|
|
34
|
+
* card), and a resolved/clean review falls through to the normal spine.
|
|
35
|
+
*/
|
|
36
|
+
async recordFindings(workspaceId, instance, step, output, model, block) {
|
|
37
|
+
// A double-fire of the completion interceptor (a durable retry/replay) must not re-coerce:
|
|
38
|
+
// re-minting finding ids would strand the human's in-flight selection and re-raise the card.
|
|
39
|
+
// Keep an unresolved review parked; leave a resolved/clean one to the normal spine.
|
|
40
|
+
if (step.prReview && step.prReview.status !== 'reviewing') {
|
|
41
|
+
return step.prReview.status === 'awaiting_selection'
|
|
42
|
+
? this.deps.stateMachine.parkStepOnDecision(workspaceId, instance, step)
|
|
43
|
+
: null;
|
|
44
|
+
}
|
|
45
|
+
const prUrl = block?.taskTypeFields?.prUrl?.trim() || null;
|
|
46
|
+
const { summary, slices, findings } = coercePrReview(output, () => this.deps.idGenerator.next('prs'), () => this.deps.idGenerator.next('prf'));
|
|
47
|
+
if (findings.length === 0) {
|
|
48
|
+
// A clean PR (or an unwired/degenerate reviewer): nothing to select. Record the review in
|
|
49
|
+
// place and let the normal completion spine finish the read-only step (no park).
|
|
50
|
+
step.prReview = {
|
|
51
|
+
status: 'done',
|
|
52
|
+
summary,
|
|
53
|
+
slices,
|
|
54
|
+
findings: [],
|
|
55
|
+
selectedFindingIds: [],
|
|
56
|
+
resolution: 'finish',
|
|
57
|
+
prUrl: prUrl ?? null,
|
|
58
|
+
model: model ?? null,
|
|
59
|
+
};
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
step.prReview = {
|
|
63
|
+
status: 'awaiting_selection',
|
|
64
|
+
summary,
|
|
65
|
+
slices,
|
|
66
|
+
findings,
|
|
67
|
+
selectedFindingIds: [],
|
|
68
|
+
resolution: null,
|
|
69
|
+
prUrl: prUrl ?? null,
|
|
70
|
+
model: model ?? null,
|
|
71
|
+
};
|
|
72
|
+
await this.raisePrReviewReady(workspaceId, instance, block, findings.length, slices.length);
|
|
73
|
+
return this.deps.stateMachine.parkStepOnDecision(workspaceId, instance, step);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Resolve a parked PR review: record the human's curated selection (`findingIds`, validated
|
|
77
|
+
* against the live findings) + the resolution, mark the review `done`, and advance the run
|
|
78
|
+
* past the gate. Mirrors the review gate's resolved-gate advance: the pure in-memory advance
|
|
79
|
+
* runs inside the CAS, its side effects (finalize / signal / emit) run once after, on the
|
|
80
|
+
* winning snapshot. PR 2 supports only `finish`; PR 3 wires `fix` / `post`.
|
|
81
|
+
*/
|
|
82
|
+
async resolve(workspaceId, executionId, input) {
|
|
83
|
+
let stepIndex = -1;
|
|
84
|
+
let state;
|
|
85
|
+
const instance = await this.deps.stateMachine.mutateInstance(workspaceId, executionId, (inst) => {
|
|
86
|
+
stepIndex = inst.steps.findIndex((s) => s.agentKind === PR_REVIEW_STEP_KIND &&
|
|
87
|
+
s.state === 'waiting_decision' &&
|
|
88
|
+
s.approval?.status === 'pending' &&
|
|
89
|
+
s.prReview?.status === 'awaiting_selection');
|
|
90
|
+
const step = stepIndex === -1 ? undefined : inst.steps[stepIndex];
|
|
91
|
+
if (!step?.approval || !step.prReview) {
|
|
92
|
+
throw new ConflictError('The run is no longer awaiting a PR-review selection');
|
|
93
|
+
}
|
|
94
|
+
const known = new Set(step.prReview.findings?.map((f) => f.id) ?? []);
|
|
95
|
+
const selectedFindingIds = (input.findingIds ?? []).filter((id) => known.has(id));
|
|
96
|
+
step.prReview = {
|
|
97
|
+
...step.prReview,
|
|
98
|
+
status: 'done',
|
|
99
|
+
resolution: input.action ?? 'finish',
|
|
100
|
+
selectedFindingIds,
|
|
101
|
+
};
|
|
102
|
+
step.approval.status = 'approved';
|
|
103
|
+
this.deps.stateMachine.advanceRunPastGate(inst, stepIndex);
|
|
104
|
+
state = step.prReview;
|
|
105
|
+
});
|
|
106
|
+
await this.deps.stateMachine.clearWaitingNotification(workspaceId, instance);
|
|
107
|
+
if (stepIndex !== -1) {
|
|
108
|
+
await this.deps.stateMachine.settleAdvancedGate(workspaceId, instance, stepIndex);
|
|
109
|
+
}
|
|
110
|
+
return state;
|
|
111
|
+
}
|
|
112
|
+
/** The active PR-review state for a run's GET, or null when no `pr-reviewer` step carries one. */
|
|
113
|
+
async getActive(workspaceId, executionId) {
|
|
114
|
+
const instance = await this.deps.executionRepository.get(workspaceId, executionId);
|
|
115
|
+
if (!instance)
|
|
116
|
+
return null;
|
|
117
|
+
return this.activePrReviewStep(instance)?.prReview ?? null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The run's "active" PR-review step: prefer the step the run is currently on, else the latest
|
|
121
|
+
* `pr-reviewer` step that carries review state. Mirrors {@link ForkDecisionController.activeForkStep}.
|
|
122
|
+
*/
|
|
123
|
+
activePrReviewStep(instance) {
|
|
124
|
+
const current = instance.steps[instance.currentStep];
|
|
125
|
+
if (current?.agentKind === PR_REVIEW_STEP_KIND && current.prReview)
|
|
126
|
+
return current;
|
|
127
|
+
for (let i = instance.steps.length - 1; i >= 0; i--) {
|
|
128
|
+
const s = instance.steps[i];
|
|
129
|
+
if (s.agentKind === PR_REVIEW_STEP_KIND && s.prReview)
|
|
130
|
+
return s;
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
/** Raise the "select PR-review findings" inbox card when the run parks. */
|
|
135
|
+
async raisePrReviewReady(workspaceId, instance, block, findingCount, sliceCount) {
|
|
136
|
+
if (!this.deps.notificationService || !block)
|
|
137
|
+
return;
|
|
138
|
+
await this.deps.notificationService.raise(workspaceId, {
|
|
139
|
+
type: 'pr_review_ready',
|
|
140
|
+
blockId: block.id,
|
|
141
|
+
executionId: instance.id,
|
|
142
|
+
title: `"${block.title}" — ${findingCount} review finding${findingCount === 1 ? '' : 's'} to triage`,
|
|
143
|
+
body: 'The PR reviewer sliced the pull request and surfaced prioritized findings. Open the ' +
|
|
144
|
+
'task to select which findings to act on.',
|
|
145
|
+
payload: { pipelineName: instance.pipelineName, findingCount, sliceCount },
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=PrReviewController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrReviewController.js","sourceRoot":"","sources":["../../../src/modules/execution/PrReviewController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentExecutor, AgentRunContext, AgentRunResult, Block, BlockRepository, BrainstormSession, ClarityReview, Clock, ExecutionEventPublisher, ExecutionInstance, ExecutionRepository, FollowUpsStepState, ForkDecisionStepState, ChooseForkInput, ForkChatRequestInput, GateDefinition, IdGenerator, IssueWritebackProvider, PipelineStep, ProviderCapabilities, ProvisionContext, RequirementConcernLevel, StepGating, RequirementReview, ResolveRunRepoContext, RunInitiatorScope, TicketTrackerProvider, WorkRunner } from '@cat-factory/kernel';
|
|
1
|
+
import type { AgentExecutor, AgentRunContext, AgentRunResult, Block, BlockRepository, BrainstormSession, ClarityReview, Clock, ExecutionEventPublisher, ExecutionInstance, ExecutionRepository, FollowUpsStepState, ForkDecisionStepState, ChooseForkInput, ForkChatRequestInput, PrReviewStepState, ResolvePrReviewInput, GateDefinition, IdGenerator, IssueWritebackProvider, PipelineStep, ProviderCapabilities, ProvisionContext, RequirementConcernLevel, StepGating, RequirementReview, ResolveRunRepoContext, RunInitiatorScope, TicketTrackerProvider, WorkRunner } from '@cat-factory/kernel';
|
|
2
2
|
import type { AgentKindRegistry } from '@cat-factory/agents';
|
|
3
3
|
import type { BugIntakeService, EnvironmentProvisioningService } from '@cat-factory/integrations';
|
|
4
4
|
import { AgentContextBuilder } from './AgentContextBuilder.js';
|
|
@@ -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 { ForkDecisionController } from './ForkDecisionController.js';
|
|
10
|
+
import { PrReviewController } from './PrReviewController.js';
|
|
10
11
|
import type { InterviewGateController } from './InterviewGateController.js';
|
|
11
12
|
import { RunStateMachine } from './RunStateMachine.js';
|
|
12
13
|
import { StepGraph } from './StepGraph.js';
|
|
@@ -57,6 +58,7 @@ export interface RunDispatcherDeps {
|
|
|
57
58
|
visualConfirmationController: VisualConfirmationController;
|
|
58
59
|
reviewGate: ReviewGateController;
|
|
59
60
|
forkDecisionController: ForkDecisionController;
|
|
61
|
+
prReviewController: PrReviewController;
|
|
60
62
|
requirementsKind: ReviewKind<RequirementReview>;
|
|
61
63
|
clarityKind: ReviewKind<ClarityReview>;
|
|
62
64
|
requirementsBrainstormKind: ReviewKind<BrainstormSession>;
|
|
@@ -120,6 +122,7 @@ export declare class RunDispatcher {
|
|
|
120
122
|
private readonly visualConfirmationController;
|
|
121
123
|
private readonly reviewGate;
|
|
122
124
|
private readonly forkDecisionController;
|
|
125
|
+
private readonly prReviewController;
|
|
123
126
|
private readonly requirementsKind;
|
|
124
127
|
private readonly clarityKind;
|
|
125
128
|
private readonly requirementsBrainstormKind;
|
|
@@ -684,6 +687,10 @@ export declare class RunDispatcher {
|
|
|
684
687
|
chooseFork(workspaceId: string, executionId: string, input: ChooseForkInput): Promise<ForkDecisionStepState>;
|
|
685
688
|
/** Send a grounded chat message about the surfaced forks (the reply arrives via the stream). */
|
|
686
689
|
forkChat(workspaceId: string, executionId: string, input: ForkChatRequestInput): Promise<ForkDecisionStepState>;
|
|
690
|
+
/** Read a run's active PR deep-review state, or null. */
|
|
691
|
+
getPrReview(workspaceId: string, executionId: string): Promise<PrReviewStepState | null>;
|
|
692
|
+
/** Resolve a parked PR review: record the human's finding selection and advance the run. */
|
|
693
|
+
resolvePrReview(workspaceId: string, executionId: string, input: ResolvePrReviewInput): Promise<PrReviewStepState>;
|
|
687
694
|
/**
|
|
688
695
|
* Locate the run + the Coder step that OWNS the addressed item + the item, throwing 404
|
|
689
696
|
* when absent. Routes by item id (not "the first enabled step") so a pipeline carrying more
|
|
@@ -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,EAGL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EAEnB,kBAAkB,EAElB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EAEpB,cAAc,EAEd,WAAW,EACX,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAGhB,uBAAuB,EACvB,UAAU,EACV,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,6 +1,6 @@
|
|
|
1
1
|
import { ConflictError, DEFAULT_RISK_POLICY, failureKindFromHarnessCause, getErrorMessage, getErrorReason, getProvider, INITIATIVE_ANALYST_AGENT_KIND, INITIATIVE_COMMITTER_AGENT_KIND, INITIATIVE_PLANNER_AGENT_KIND, isAsyncAgentExecutor, NotFoundError, parseLocalModelId, recordGateAttempt, registeredGateFactories, registeredStepResolverFactories, requireProvider, RunContendedError, sameSubtasks, } from '@cat-factory/kernel';
|
|
2
2
|
import { frameProfile, frontendOriginsForService, parseBlueprintService, parseSpecDoc, resolveAprioriWorkingBranch, } from '@cat-factory/contracts';
|
|
3
|
-
import { blueprintPostOp, commitInitiativeTracker, FORK_PROPOSER_KIND, hasTrait, isCompanionKind, isContainerBackedCompanion, INTERVIEW_GATE_TRAIT, moduleSlug, runRepoOps, specPostOp, TASK_ESTIMATOR_AGENT_KIND, } from '@cat-factory/agents';
|
|
3
|
+
import { blueprintPostOp, commitInitiativeTracker, FORK_PROPOSER_KIND, PR_REVIEWER_KIND, hasTrait, isCompanionKind, isContainerBackedCompanion, INTERVIEW_GATE_TRAIT, moduleSlug, runRepoOps, specPostOp, TASK_ESTIMATOR_AGENT_KIND, } from '@cat-factory/agents';
|
|
4
4
|
import { DEPLOYER_AGENT_KIND, isDeployStep } from '@cat-factory/integrations';
|
|
5
5
|
import { BUG_INTAKE_AGENT_KIND } from '../pipelines/pipelineShape.js';
|
|
6
6
|
import { coerceTaskEstimate, summarizeEstimate } from '../estimation/estimate.logic.js';
|
|
@@ -18,6 +18,7 @@ import { HumanTestController } from './HumanTestController.js';
|
|
|
18
18
|
import { MergeResolver } from './MergeResolver.js';
|
|
19
19
|
import { ReviewGateController } from './ReviewGateController.js';
|
|
20
20
|
import { ForkDecisionController } from './ForkDecisionController.js';
|
|
21
|
+
import { PrReviewController, PR_REVIEW_STEP_KIND } from './PrReviewController.js';
|
|
21
22
|
import { DEFAULT_FORK_MAX_CHAT_TURNS, forkPhasePending, resolveForkTriState, shouldProposeForkAuto, } from './forkDecision.logic.js';
|
|
22
23
|
import { RunStateMachine } from './RunStateMachine.js';
|
|
23
24
|
import { StepGraph } from './StepGraph.js';
|
|
@@ -118,6 +119,7 @@ export class RunDispatcher {
|
|
|
118
119
|
visualConfirmationController;
|
|
119
120
|
reviewGate;
|
|
120
121
|
forkDecisionController;
|
|
122
|
+
prReviewController;
|
|
121
123
|
requirementsKind;
|
|
122
124
|
clarityKind;
|
|
123
125
|
requirementsBrainstormKind;
|
|
@@ -164,6 +166,7 @@ export class RunDispatcher {
|
|
|
164
166
|
this.visualConfirmationController = deps.visualConfirmationController;
|
|
165
167
|
this.reviewGate = deps.reviewGate;
|
|
166
168
|
this.forkDecisionController = deps.forkDecisionController;
|
|
169
|
+
this.prReviewController = deps.prReviewController;
|
|
167
170
|
this.requirementsKind = deps.requirementsKind;
|
|
168
171
|
this.clarityKind = deps.clarityKind;
|
|
169
172
|
this.requirementsBrainstormKind = deps.requirementsBrainstormKind;
|
|
@@ -2347,6 +2350,23 @@ export class RunDispatcher {
|
|
|
2347
2350
|
return this.forkDecisionController.recordProposal(workspaceId, instance, step, proposal, step.model);
|
|
2348
2351
|
},
|
|
2349
2352
|
},
|
|
2353
|
+
// The read-only `pr-reviewer` deep-review job just finished on a review task's step. Its
|
|
2354
|
+
// structured `result.custom` is the sliced, prioritized findings; record them onto the
|
|
2355
|
+
// step's `prReview` and PARK for the human to select which findings matter (≥1 finding),
|
|
2356
|
+
// rather than the normal completion. A clean PR (no findings) returns null and falls
|
|
2357
|
+
// through to the normal finish. Keyed on the `pr-reviewer` step kind.
|
|
2358
|
+
{
|
|
2359
|
+
kind: 'pr-review',
|
|
2360
|
+
order: 106,
|
|
2361
|
+
canIntercept: ({ step }) => step.agentKind === PR_REVIEW_STEP_KIND,
|
|
2362
|
+
intercept: async ({ workspaceId, instance, step, result }) => {
|
|
2363
|
+
const output = this.agentKindRegistry
|
|
2364
|
+
.structuredOutput(PR_REVIEWER_KIND)
|
|
2365
|
+
?.safeParse(result.custom);
|
|
2366
|
+
const block = await this.blockRepository.get(workspaceId, instance.blockId);
|
|
2367
|
+
return this.prReviewController.recordFindings(workspaceId, instance, step, output, result.model ?? step.model, block);
|
|
2368
|
+
},
|
|
2369
|
+
},
|
|
2350
2370
|
// A `tester` step returned a structured report. On a withheld greenlight we do NOT
|
|
2351
2371
|
// finish the step: loop the `fixer` (within the attempt budget) and re-test, mirroring
|
|
2352
2372
|
// the CI gate. A greenlight (or no provider) returns null and falls through to the
|
|
@@ -2895,6 +2915,14 @@ export class RunDispatcher {
|
|
|
2895
2915
|
forkChat(workspaceId, executionId, input) {
|
|
2896
2916
|
return this.forkDecisionController.chat(workspaceId, executionId, input);
|
|
2897
2917
|
}
|
|
2918
|
+
/** Read a run's active PR deep-review state, or null. */
|
|
2919
|
+
getPrReview(workspaceId, executionId) {
|
|
2920
|
+
return this.prReviewController.getActive(workspaceId, executionId);
|
|
2921
|
+
}
|
|
2922
|
+
/** Resolve a parked PR review: record the human's finding selection and advance the run. */
|
|
2923
|
+
resolvePrReview(workspaceId, executionId, input) {
|
|
2924
|
+
return this.prReviewController.resolve(workspaceId, executionId, input);
|
|
2925
|
+
}
|
|
2898
2926
|
/**
|
|
2899
2927
|
* Locate the run + the Coder step that OWNS the addressed item + the item, throwing 404
|
|
2900
2928
|
* when absent. Routes by item id (not "the first enabled step") so a pipeline carrying more
|