codex-orchestrator 2.0.3 → 2.0.5
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/CHANGELOG.md +51 -427
- package/README.md +161 -37
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/v2/acceptance-proof.d.ts +5 -0
- package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
- package/dist/src/v2/acceptance-proof.js +10 -2
- package/dist/src/v2/acceptance-proof.js.map +1 -1
- package/dist/src/v2/adapters/gh-issue-adapter.d.ts.map +1 -1
- package/dist/src/v2/adapters/gh-issue-adapter.js +6 -7
- package/dist/src/v2/adapters/gh-issue-adapter.js.map +1 -1
- package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts +7 -1
- package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts.map +1 -1
- package/dist/src/v2/adapters/gh-pull-request-adapter.js +288 -0
- package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -1
- package/dist/src/v2/adapters/pull-requests.d.ts +69 -0
- package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -1
- package/dist/src/v2/adapters/pull-requests.js +48 -0
- package/dist/src/v2/adapters/pull-requests.js.map +1 -1
- package/dist/src/v2/adapters/worktree.d.ts +1 -0
- package/dist/src/v2/adapters/worktree.d.ts.map +1 -1
- package/dist/src/v2/adapters/worktree.js +10 -1
- package/dist/src/v2/adapters/worktree.js.map +1 -1
- package/dist/src/v2/cli-contract.d.ts +3 -3
- package/dist/src/v2/cli-contract.d.ts.map +1 -1
- package/dist/src/v2/cli-contract.js +1 -3
- package/dist/src/v2/cli-contract.js.map +1 -1
- package/dist/src/v2/cli.d.ts +33 -0
- package/dist/src/v2/cli.d.ts.map +1 -0
- package/dist/src/v2/{candidate-cli.js → cli.js} +55 -39
- package/dist/src/v2/cli.js.map +1 -0
- package/dist/src/v2/code-review-report.d.ts +1 -1
- package/dist/src/v2/code-review-report.d.ts.map +1 -1
- package/dist/src/v2/code-review-report.js +2 -2
- package/dist/src/v2/code-review-report.js.map +1 -1
- package/dist/src/v2/codex-process.d.ts.map +1 -1
- package/dist/src/v2/codex-process.js +12 -1
- package/dist/src/v2/codex-process.js.map +1 -1
- package/dist/src/v2/config.d.ts +2 -3
- package/dist/src/v2/config.d.ts.map +1 -1
- package/dist/src/v2/config.js +0 -3
- package/dist/src/v2/config.js.map +1 -1
- package/dist/src/v2/contained-report-operation.d.ts +2 -2
- package/dist/src/v2/contained-report-operation.d.ts.map +1 -1
- package/dist/src/v2/contained-report-operation.js +1 -1
- package/dist/src/v2/contained-report-operation.js.map +1 -1
- package/dist/src/v2/containment.d.ts +15 -2
- package/dist/src/v2/containment.d.ts.map +1 -1
- package/dist/src/v2/containment.js +43 -6
- package/dist/src/v2/containment.js.map +1 -1
- package/dist/src/v2/direct-delivery.d.ts +5 -10
- package/dist/src/v2/direct-delivery.d.ts.map +1 -1
- package/dist/src/v2/direct-delivery.js +32 -91
- package/dist/src/v2/direct-delivery.js.map +1 -1
- package/dist/src/v2/proof-report.d.ts.map +1 -1
- package/dist/src/v2/proof-report.js +55 -29
- package/dist/src/v2/proof-report.js.map +1 -1
- package/dist/src/v2/review-feedback-coordinator.d.ts +54 -0
- package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -0
- package/dist/src/v2/review-feedback-coordinator.js +245 -0
- package/dist/src/v2/review-feedback-coordinator.js.map +1 -0
- package/dist/src/v2/review-feedback.d.ts +127 -0
- package/dist/src/v2/review-feedback.d.ts.map +1 -0
- package/dist/src/v2/review-feedback.js +436 -0
- package/dist/src/v2/review-feedback.js.map +1 -0
- package/dist/src/v2/run-issue.d.ts +63 -9
- package/dist/src/v2/run-issue.d.ts.map +1 -1
- package/dist/src/v2/run-issue.js +798 -78
- package/dist/src/v2/run-issue.js.map +1 -1
- package/dist/src/v2/run-store.d.ts +49 -5
- package/dist/src/v2/run-store.d.ts.map +1 -1
- package/dist/src/v2/run-store.js +138 -44
- package/dist/src/v2/run-store.js.map +1 -1
- package/dist/src/v2/runtime.d.ts +40 -3
- package/dist/src/v2/runtime.d.ts.map +1 -1
- package/dist/src/v2/runtime.js +245 -52
- package/dist/src/v2/runtime.js.map +1 -1
- package/dist/src/v2/setup-cli.d.ts.map +1 -1
- package/dist/src/v2/setup-cli.js +4 -11
- package/dist/src/v2/setup-cli.js.map +1 -1
- package/dist/src/v2/setup-runtime.d.ts.map +1 -1
- package/dist/src/v2/setup-runtime.js +1 -61
- package/dist/src/v2/setup-runtime.js.map +1 -1
- package/dist/src/v2/setup-store.d.ts +0 -5
- package/dist/src/v2/setup-store.d.ts.map +1 -1
- package/dist/src/v2/setup-store.js +3 -106
- package/dist/src/v2/setup-store.js.map +1 -1
- package/dist/src/v2/setup.d.ts +6 -46
- package/dist/src/v2/setup.d.ts.map +1 -1
- package/dist/src/v2/setup.js +12 -294
- package/dist/src/v2/setup.js.map +1 -1
- package/dist/src/v2/workflow-assets.d.ts +19 -11
- package/dist/src/v2/workflow-assets.d.ts.map +1 -1
- package/dist/src/v2/workflow-assets.js +132 -40
- package/dist/src/v2/workflow-assets.js.map +1 -1
- package/docs/deep-dive.md +328 -56
- package/internal-workflow/docs/agents/bugfix-quality-gate.md +11 -0
- package/internal-workflow/docs/agents/coding-skill-routing.md +116 -196
- package/internal-workflow/docs/agents/contract-test-ledger.md +11 -1
- package/internal-workflow/docs/agents/review-gates.md +32 -39
- package/internal-workflow/docs/agents/review-protocol.md +75 -147
- package/internal-workflow/evals/coding-skill-evals.json +84 -0
- package/internal-workflow/manifest.json +1 -1
- package/internal-workflow/operations/acceptance-proof/SKILL.md +7 -1
- package/internal-workflow/operations/ambiguity-review/SKILL.md +2 -0
- package/internal-workflow/operations/code-review/SKILL.md +21 -1
- package/internal-workflow/operations/implementation/SKILL.md +22 -1
- package/internal-workflow/operations/spec-author/SKILL.md +10 -1
- package/internal-workflow/operations/spec-review/SKILL.md +10 -1
- package/internal-workflow/operations/triage/SKILL.md +10 -1
- package/internal-workflow/schemas/code-review-v1.json +1 -1
- package/internal-workflow/schemas/proof-report-v1.json +1 -1
- package/internal-workflow/skills/agent-auto/SKILL.md +6 -1
- package/internal-workflow/skills/code-debugger/SKILL.md +122 -0
- package/internal-workflow/skills/code-debugger/agents/openai.yaml +7 -0
- package/internal-workflow/skills/code-review/SKILL.md +51 -17
- package/internal-workflow/skills/code-review/references/cleanup-lens.md +52 -0
- package/internal-workflow/skills/implementation-spec-maker/SKILL.md +15 -6
- package/internal-workflow/skills/implementation-spec-maker/agents/openai.yaml +1 -1
- package/internal-workflow/skills/implementation-spec-maker/references/spec-template.md +2 -2
- package/internal-workflow/skills/implementation-spec-review/SKILL.md +108 -204
- package/internal-workflow/skills/implementation-spec-review/evals/evals.json +24 -0
- package/internal-workflow/skills/implementation-spec-review/references/review-loop.md +93 -0
- package/internal-workflow/skills/small-task-implementer/SKILL.md +15 -8
- package/internal-workflow/skills/spec-implementer/SKILL.md +101 -172
- package/internal-workflow/skills/spec-implementer/evals/evals.json +30 -0
- package/internal-workflow/skills/spec-implementer/references/review-loop.md +100 -0
- package/internal-workflow/skills/tdd/SKILL.md +20 -6
- package/internal-workflow/skills/tdd/agents/openai.yaml +2 -2
- package/internal-workflow/skills/tdd/evals/evals.json +18 -0
- package/internal-workflow/skills/tdd/mocking.md +3 -42
- package/internal-workflow/skills/tdd/refactoring.md +6 -8
- package/package.json +9 -6
- package/dist/src/v2/adapters/target-activity-fence.d.ts +0 -23
- package/dist/src/v2/adapters/target-activity-fence.d.ts.map +0 -1
- package/dist/src/v2/adapters/target-activity-fence.js +0 -249
- package/dist/src/v2/adapters/target-activity-fence.js.map +0 -1
- package/dist/src/v2/candidate-cli.d.ts +0 -26
- package/dist/src/v2/candidate-cli.d.ts.map +0 -1
- package/dist/src/v2/candidate-cli.js.map +0 -1
- package/dist/src/v2/legacy-cutover.d.ts +0 -52
- package/dist/src/v2/legacy-cutover.d.ts.map +0 -1
- package/dist/src/v2/legacy-cutover.js +0 -87
- package/dist/src/v2/legacy-cutover.js.map +0 -1
- package/internal-workflow/docs/agents/artifact-review-loop.md +0 -267
- package/internal-workflow/docs/agents/implementation-review-loop.md +0 -302
- package/internal-workflow/operations/cleanup-review/SKILL.md +0 -3
- package/internal-workflow/operations/spec-implementation/SKILL.md +0 -3
- package/internal-workflow/profiles/implementer_deep.toml +0 -9
- package/internal-workflow/profiles/researcher_standard.toml +0 -9
- package/internal-workflow/profiles/reviewer_fast.toml +0 -9
- package/internal-workflow/skills/cleanup-review/SKILL.md +0 -84
- package/internal-workflow/skills/cleanup-review/agents/openai.yaml +0 -6
- package/internal-workflow/skills/codebase-design/DEEPENING.md +0 -35
- package/internal-workflow/skills/codebase-design/DESIGN-IT-TWICE.md +0 -50
- package/internal-workflow/skills/codebase-design/SKILL.md +0 -82
- package/internal-workflow/skills/codebase-design/agents/openai.yaml +0 -6
- package/internal-workflow/skills/research/SKILL.md +0 -107
- package/internal-workflow/skills/research/agents/openai.yaml +0 -6
- package/internal-workflow/skills/ui-evidence-proof/SKILL.md +0 -123
- package/internal-workflow/skills/ui-evidence-proof/agents/openai.yaml +0 -6
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { canonicalJson } from './containment.js';
|
|
3
|
+
const SHA256 = /^[0-9a-f]{64}$/u;
|
|
4
|
+
const GIT_SHA = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u;
|
|
5
|
+
const SOURCE_ID = /^pr-(?:thread|review):[^\s]+$/u;
|
|
6
|
+
const MAX_SOURCES = 256;
|
|
7
|
+
export function createReviewFeedbackBootstrap() {
|
|
8
|
+
return {
|
|
9
|
+
version: 1,
|
|
10
|
+
phase: 'bootstrap-required',
|
|
11
|
+
consumedSourceIds: [],
|
|
12
|
+
previousPublishedHeadSha: null,
|
|
13
|
+
repairRound: 0,
|
|
14
|
+
activeBatch: null,
|
|
15
|
+
implementationInvocation: null,
|
|
16
|
+
history: [],
|
|
17
|
+
verifiedReceipt: null,
|
|
18
|
+
terminal: null,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function createFrozenReviewFeedbackBatch(input) {
|
|
22
|
+
const sources = structuredClone(input.sources).map((source) => ({
|
|
23
|
+
...source,
|
|
24
|
+
body: normalizeReviewFeedbackBody(source.body),
|
|
25
|
+
})).sort((left, right) => left.sourceId.localeCompare(right.sourceId));
|
|
26
|
+
const identity = {
|
|
27
|
+
runId: input.runId,
|
|
28
|
+
canonicalRepository: input.canonicalRepository,
|
|
29
|
+
pullRequest: input.pullRequest,
|
|
30
|
+
priorPublishedHeadSha: input.priorPublishedHeadSha,
|
|
31
|
+
sources,
|
|
32
|
+
};
|
|
33
|
+
const batch = {
|
|
34
|
+
version: 1,
|
|
35
|
+
batchId: createHash('sha256')
|
|
36
|
+
.update(`codex-orchestrator-review-feedback-batch-v1\0${canonicalJson(identity)}`)
|
|
37
|
+
.digest('hex'),
|
|
38
|
+
...structuredClone(input),
|
|
39
|
+
sources,
|
|
40
|
+
};
|
|
41
|
+
validateFrozenReviewFeedbackBatch(batch);
|
|
42
|
+
return batch;
|
|
43
|
+
}
|
|
44
|
+
export function normalizeReviewFeedbackBody(body) {
|
|
45
|
+
return body.replace(/\r\n?/gu, '\n');
|
|
46
|
+
}
|
|
47
|
+
export function hashReviewFeedbackText(body) {
|
|
48
|
+
return createHash('sha256').update(normalizeReviewFeedbackBody(body)).digest('hex');
|
|
49
|
+
}
|
|
50
|
+
export function hashReviewFeedbackSnapshot(value) {
|
|
51
|
+
return createHash('sha256')
|
|
52
|
+
.update(`codex-orchestrator-review-feedback-snapshot-v1\0${canonicalJson(value)}`)
|
|
53
|
+
.digest('hex');
|
|
54
|
+
}
|
|
55
|
+
export function projectReviewFeedbackBatch(batch, targetRevision) {
|
|
56
|
+
validateFrozenReviewFeedbackBatch(batch);
|
|
57
|
+
if (!Number.isSafeInteger(targetRevision) || targetRevision < 1)
|
|
58
|
+
throw new Error('review feedback target revision is invalid');
|
|
59
|
+
const sources = [...batch.sources].sort((left, right) => left.sourceId.localeCompare(right.sourceId));
|
|
60
|
+
return {
|
|
61
|
+
repairFindings: sources.map((source) => ({
|
|
62
|
+
id: source.sourceId,
|
|
63
|
+
provenance: 'pr-review',
|
|
64
|
+
sourceId: source.sourceId,
|
|
65
|
+
targetRevision,
|
|
66
|
+
summary: [
|
|
67
|
+
`${source.kind === 'thread' ? 'Pull request review thread' : 'Pull request changes-requested review'}: ${source.sourceUrl}`,
|
|
68
|
+
...(source.path ? [`Location: ${source.path}${source.line === null ? '' : `:${source.line}`}`] : []),
|
|
69
|
+
source.body,
|
|
70
|
+
].join('\n'),
|
|
71
|
+
affectedContracts: [...new Set([
|
|
72
|
+
'pr-review',
|
|
73
|
+
...(source.path ? [`path:${source.path}`] : []),
|
|
74
|
+
])].sort(),
|
|
75
|
+
status: 'open',
|
|
76
|
+
})),
|
|
77
|
+
workerFeedback: sources.map((source) => ({
|
|
78
|
+
id: source.sourceId,
|
|
79
|
+
sourceUrl: source.sourceUrl,
|
|
80
|
+
path: source.path,
|
|
81
|
+
line: source.line,
|
|
82
|
+
body: source.body,
|
|
83
|
+
})),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function appendConsumedReviewSourceIds(execution, sourceIds) {
|
|
87
|
+
validateReviewFeedbackExecution(execution);
|
|
88
|
+
const seen = new Set(execution.consumedSourceIds);
|
|
89
|
+
const consumedSourceIds = [...execution.consumedSourceIds];
|
|
90
|
+
for (const sourceId of [...sourceIds].sort()) {
|
|
91
|
+
assertSourceId(sourceId, 'review feedback consumed source ID');
|
|
92
|
+
if (!seen.has(sourceId)) {
|
|
93
|
+
seen.add(sourceId);
|
|
94
|
+
consumedSourceIds.push(sourceId);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { ...structuredClone(execution), consumedSourceIds };
|
|
98
|
+
}
|
|
99
|
+
export function bootstrapReviewFeedback(execution, previousPublishedHeadSha, existingSourceIds) {
|
|
100
|
+
if (execution.phase !== 'bootstrap-required')
|
|
101
|
+
throw new Error('review feedback bootstrap is already complete');
|
|
102
|
+
assertGitSha(previousPublishedHeadSha, 'review feedback previous published head');
|
|
103
|
+
const next = appendConsumedReviewSourceIds(execution, existingSourceIds);
|
|
104
|
+
const result = {
|
|
105
|
+
...next, phase: 'idle', previousPublishedHeadSha, repairRound: 0,
|
|
106
|
+
};
|
|
107
|
+
validateReviewFeedbackExecution(result);
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
export function activateReviewFeedback(execution, batch) {
|
|
111
|
+
validateReviewFeedbackExecution(execution);
|
|
112
|
+
validateFrozenReviewFeedbackBatch(batch);
|
|
113
|
+
if (execution.phase !== 'idle' || execution.previousPublishedHeadSha !== batch.priorPublishedHeadSha
|
|
114
|
+
|| batch.sources.some((source) => execution.consumedSourceIds.includes(source.sourceId))) {
|
|
115
|
+
throw new Error('review feedback execution cannot activate this batch');
|
|
116
|
+
}
|
|
117
|
+
const withConsumed = appendConsumedReviewSourceIds(execution, batch.sources.map((source) => source.sourceId));
|
|
118
|
+
const result = {
|
|
119
|
+
...withConsumed,
|
|
120
|
+
phase: 'frozen',
|
|
121
|
+
repairRound: 1,
|
|
122
|
+
activeBatch: structuredClone(batch),
|
|
123
|
+
implementationInvocation: null,
|
|
124
|
+
verifiedReceipt: null,
|
|
125
|
+
terminal: null,
|
|
126
|
+
};
|
|
127
|
+
validateReviewFeedbackExecution(result);
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
export function reserveNextReviewFeedbackRound(execution) {
|
|
131
|
+
validateReviewFeedbackExecution(execution);
|
|
132
|
+
if (!['frozen', 'repairing'].includes(execution.phase) || execution.repairRound >= 3) {
|
|
133
|
+
throw new Error('review feedback repair budget is exhausted or inactive');
|
|
134
|
+
}
|
|
135
|
+
const result = { ...structuredClone(execution), phase: 'repairing', repairRound: (execution.repairRound + 1) };
|
|
136
|
+
validateReviewFeedbackExecution(result);
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
export function markReviewFeedbackRepairing(execution) {
|
|
140
|
+
validateReviewFeedbackExecution(execution);
|
|
141
|
+
if (execution.phase !== 'frozen' && execution.phase !== 'repairing')
|
|
142
|
+
throw new Error('review feedback is not ready for repair');
|
|
143
|
+
const result = { ...structuredClone(execution), phase: 'repairing' };
|
|
144
|
+
validateReviewFeedbackExecution(result);
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
export function markReviewFeedbackVerified(execution, input) {
|
|
148
|
+
validateReviewFeedbackExecution(execution);
|
|
149
|
+
if (execution.phase !== 'repairing' || !execution.activeBatch)
|
|
150
|
+
throw new Error('review feedback is not ready to verify');
|
|
151
|
+
const result = {
|
|
152
|
+
...structuredClone(execution),
|
|
153
|
+
phase: 'verified',
|
|
154
|
+
implementationInvocation: null,
|
|
155
|
+
verifiedReceipt: { batchId: execution.activeBatch.batchId, ...structuredClone(input) },
|
|
156
|
+
};
|
|
157
|
+
validateReviewFeedbackExecution(result);
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
export function markReviewFeedbackPublishing(execution) {
|
|
161
|
+
validateReviewFeedbackExecution(execution);
|
|
162
|
+
if (execution.phase !== 'verified')
|
|
163
|
+
throw new Error('review feedback is not verified for publication');
|
|
164
|
+
const result = { ...structuredClone(execution), phase: 'publishing' };
|
|
165
|
+
validateReviewFeedbackExecution(result);
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
export function publishReviewFeedback(execution, receipt) {
|
|
169
|
+
validateReviewFeedbackExecution(execution);
|
|
170
|
+
validatePublishedReceipt(receipt);
|
|
171
|
+
if (execution.phase !== 'publishing' || !execution.activeBatch || receipt.batchId !== execution.activeBatch.batchId) {
|
|
172
|
+
throw new Error('review feedback publication receipt does not match active batch');
|
|
173
|
+
}
|
|
174
|
+
const result = {
|
|
175
|
+
...createReviewFeedbackBootstrap(),
|
|
176
|
+
phase: 'idle',
|
|
177
|
+
consumedSourceIds: [...execution.consumedSourceIds],
|
|
178
|
+
previousPublishedHeadSha: receipt.publishedHeadSha,
|
|
179
|
+
history: [...execution.history, structuredClone(receipt)],
|
|
180
|
+
};
|
|
181
|
+
validateReviewFeedbackExecution(result);
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
export function blockReviewFeedback(execution, kind, blockedAt) {
|
|
185
|
+
validateReviewFeedbackExecution(execution);
|
|
186
|
+
if (!execution.activeBatch)
|
|
187
|
+
throw new Error('review feedback has no active batch to block');
|
|
188
|
+
const receipt = {
|
|
189
|
+
kind: kind === 'safety' ? 'blocked-safety' : 'blocked-exhausted',
|
|
190
|
+
batchId: execution.activeBatch.batchId,
|
|
191
|
+
blockedAt,
|
|
192
|
+
};
|
|
193
|
+
const result = {
|
|
194
|
+
...structuredClone(execution),
|
|
195
|
+
phase: receipt.kind,
|
|
196
|
+
activeBatch: null,
|
|
197
|
+
implementationInvocation: null,
|
|
198
|
+
history: [...execution.history, receipt],
|
|
199
|
+
verifiedReceipt: null,
|
|
200
|
+
terminal: { kind, blockedAt },
|
|
201
|
+
};
|
|
202
|
+
validateReviewFeedbackExecution(result);
|
|
203
|
+
return result;
|
|
204
|
+
}
|
|
205
|
+
export function validateReviewFeedbackExecution(value) {
|
|
206
|
+
exactObject(value, [
|
|
207
|
+
'version', 'phase', 'consumedSourceIds', 'previousPublishedHeadSha', 'repairRound', 'activeBatch',
|
|
208
|
+
'implementationInvocation', 'history', 'verifiedReceipt', 'terminal',
|
|
209
|
+
], 'review feedback execution');
|
|
210
|
+
if (value.version !== 1)
|
|
211
|
+
throw new Error('review feedback execution version is invalid');
|
|
212
|
+
const phases = ['bootstrap-required', 'idle', 'frozen', 'repairing', 'verified', 'publishing', 'blocked-safety', 'blocked-exhausted'];
|
|
213
|
+
if (!phases.includes(value.phase))
|
|
214
|
+
throw new Error('review feedback execution phase is invalid');
|
|
215
|
+
validateSourceIds(value.consumedSourceIds, 'review feedback consumed source IDs');
|
|
216
|
+
if (value.previousPublishedHeadSha !== null)
|
|
217
|
+
assertGitSha(value.previousPublishedHeadSha, 'review feedback previous published head');
|
|
218
|
+
if (![0, 1, 2, 3].includes(value.repairRound))
|
|
219
|
+
throw new Error('review feedback repair round is invalid');
|
|
220
|
+
if (!Array.isArray(value.history) || value.history.length > MAX_SOURCES)
|
|
221
|
+
throw new Error('review feedback history is invalid');
|
|
222
|
+
for (const item of value.history)
|
|
223
|
+
validateHistory(item);
|
|
224
|
+
if (value.activeBatch !== null)
|
|
225
|
+
validateFrozenReviewFeedbackBatch(value.activeBatch);
|
|
226
|
+
if (value.implementationInvocation !== null)
|
|
227
|
+
validateImplementationInvocation(value.implementationInvocation);
|
|
228
|
+
if (value.verifiedReceipt !== null)
|
|
229
|
+
validateVerifiedReceipt(value.verifiedReceipt);
|
|
230
|
+
if (value.terminal !== null)
|
|
231
|
+
validateTerminal(value.terminal);
|
|
232
|
+
const phase = value.phase;
|
|
233
|
+
const active = ['frozen', 'repairing', 'verified', 'publishing'].includes(phase);
|
|
234
|
+
const blocked = phase === 'blocked-safety' || phase === 'blocked-exhausted';
|
|
235
|
+
if (phase === 'bootstrap-required' && (value.previousPublishedHeadSha !== null || value.repairRound !== 0 || value.activeBatch !== null)) {
|
|
236
|
+
throw new Error('review feedback bootstrap state is invalid');
|
|
237
|
+
}
|
|
238
|
+
if (phase === 'idle' && (value.previousPublishedHeadSha === null || value.repairRound !== 0 || value.activeBatch !== null
|
|
239
|
+
|| value.implementationInvocation !== null || value.terminal !== null)) {
|
|
240
|
+
throw new Error('review feedback idle state is invalid');
|
|
241
|
+
}
|
|
242
|
+
if (active && (value.previousPublishedHeadSha === null || value.activeBatch === null
|
|
243
|
+
|| ![1, 2, 3].includes(value.repairRound) || value.terminal !== null
|
|
244
|
+
|| value.activeBatch.priorPublishedHeadSha !== value.previousPublishedHeadSha)) {
|
|
245
|
+
throw new Error('review feedback active state is invalid');
|
|
246
|
+
}
|
|
247
|
+
if (blocked && (value.activeBatch !== null || value.implementationInvocation !== null || value.terminal === null
|
|
248
|
+
|| (phase === 'blocked-safety') !== (value.terminal.kind === 'safety'))) {
|
|
249
|
+
throw new Error('review feedback terminal state cannot retain active execution');
|
|
250
|
+
}
|
|
251
|
+
if (!active && value.implementationInvocation !== null)
|
|
252
|
+
throw new Error('review feedback invocation requires an active batch');
|
|
253
|
+
if (phase !== 'verified' && phase !== 'publishing' && value.verifiedReceipt !== null) {
|
|
254
|
+
throw new Error('review feedback verified receipt is invalid for phase');
|
|
255
|
+
}
|
|
256
|
+
if ((phase === 'verified' || phase === 'publishing')
|
|
257
|
+
&& value.verifiedReceipt?.batchId !== value.activeBatch?.batchId) {
|
|
258
|
+
throw new Error('review feedback verified receipt batch does not match active batch');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
export function validateFrozenReviewFeedbackBatch(value) {
|
|
262
|
+
exactObject(value, ['version', 'batchId', 'runId', 'canonicalRepository', 'pullRequest', 'priorPublishedHeadSha', 'sources', 'frozenAt'], 'review feedback batch');
|
|
263
|
+
if (value.version !== 1)
|
|
264
|
+
throw new Error('review feedback batch version is invalid');
|
|
265
|
+
assertSha(value.batchId, 'review feedback batch ID');
|
|
266
|
+
assertString(value.runId, 'review feedback run ID');
|
|
267
|
+
if (typeof value.canonicalRepository !== 'string' || !/^[a-z0-9._-]+\/[a-z0-9._-]+$/u.test(value.canonicalRepository)) {
|
|
268
|
+
throw new Error('review feedback canonical repository is invalid');
|
|
269
|
+
}
|
|
270
|
+
exactObject(value.pullRequest, ['nodeId', 'number', 'headSha', 'headRefName', 'baseRefName', 'marker'], 'review feedback pull request');
|
|
271
|
+
assertString(value.pullRequest.nodeId, 'review feedback pull request node ID');
|
|
272
|
+
if (!Number.isSafeInteger(value.pullRequest.number) || value.pullRequest.number < 1)
|
|
273
|
+
throw new Error('review feedback pull request number is invalid');
|
|
274
|
+
assertGitSha(value.pullRequest.headSha, 'review feedback pull request head');
|
|
275
|
+
for (const field of ['headRefName', 'baseRefName', 'marker'])
|
|
276
|
+
assertString(value.pullRequest[field], `review feedback pull request ${field}`);
|
|
277
|
+
assertGitSha(value.priorPublishedHeadSha, 'review feedback prior published head');
|
|
278
|
+
if (!Array.isArray(value.sources) || value.sources.length === 0 || value.sources.length > MAX_SOURCES)
|
|
279
|
+
throw new Error('review feedback sources are invalid');
|
|
280
|
+
let prior = '';
|
|
281
|
+
for (const source of value.sources) {
|
|
282
|
+
validateFrozenSource(source);
|
|
283
|
+
if (source.sourceId <= prior)
|
|
284
|
+
throw new Error('review feedback sources must be sorted and unique');
|
|
285
|
+
prior = source.sourceId;
|
|
286
|
+
}
|
|
287
|
+
assertTimestamp(value.frozenAt, 'review feedback frozenAt');
|
|
288
|
+
const expected = createHash('sha256').update(`codex-orchestrator-review-feedback-batch-v1\0${canonicalJson({
|
|
289
|
+
runId: value.runId,
|
|
290
|
+
canonicalRepository: value.canonicalRepository,
|
|
291
|
+
pullRequest: value.pullRequest,
|
|
292
|
+
priorPublishedHeadSha: value.priorPublishedHeadSha,
|
|
293
|
+
sources: value.sources,
|
|
294
|
+
})}`).digest('hex');
|
|
295
|
+
if (value.batchId !== expected)
|
|
296
|
+
throw new Error('review feedback batch hash is invalid');
|
|
297
|
+
}
|
|
298
|
+
function validateFrozenSource(value) {
|
|
299
|
+
exactObject(value, ['sourceId', 'kind', 'sourceUrl', 'path', 'line', 'body', 'bodySha256', 'snapshotSha256', 'threadState', 'commitSha', 'sourceCreatedAt', 'sourceUpdatedAt', 'author', 'permission'], 'review feedback source');
|
|
300
|
+
assertSourceId(value.sourceId, 'review feedback source ID');
|
|
301
|
+
if (value.kind !== 'thread' && value.kind !== 'review')
|
|
302
|
+
throw new Error('review feedback source kind is invalid');
|
|
303
|
+
if ((value.kind === 'thread') !== value.sourceId.startsWith('pr-thread:'))
|
|
304
|
+
throw new Error('review feedback source ID kind mismatch');
|
|
305
|
+
assertString(value.sourceUrl, 'review feedback source URL');
|
|
306
|
+
if (value.path !== null)
|
|
307
|
+
assertString(value.path, 'review feedback source path');
|
|
308
|
+
if (value.line !== null && (!Number.isSafeInteger(value.line) || value.line < 1))
|
|
309
|
+
throw new Error('review feedback source line is invalid');
|
|
310
|
+
if (typeof value.body !== 'string' || value.body.length === 0 || value.body.length > 131_072)
|
|
311
|
+
throw new Error('review feedback source body is invalid');
|
|
312
|
+
assertSha(value.bodySha256, 'review feedback source body hash');
|
|
313
|
+
if (value.bodySha256 !== hashReviewFeedbackText(value.body))
|
|
314
|
+
throw new Error('review feedback source body hash is invalid');
|
|
315
|
+
assertSha(value.snapshotSha256, 'review feedback source snapshot hash');
|
|
316
|
+
if (value.kind === 'thread') {
|
|
317
|
+
exactObject(value.threadState, ['isResolved', 'isOutdated'], 'review feedback thread state');
|
|
318
|
+
if (typeof value.threadState.isResolved !== 'boolean' || typeof value.threadState.isOutdated !== 'boolean')
|
|
319
|
+
throw new Error('review feedback thread state is invalid');
|
|
320
|
+
}
|
|
321
|
+
else if (value.threadState !== null)
|
|
322
|
+
throw new Error('review feedback review source cannot have thread state');
|
|
323
|
+
assertGitSha(value.commitSha, 'review feedback source commit');
|
|
324
|
+
assertTimestamp(value.sourceCreatedAt, 'review feedback source createdAt');
|
|
325
|
+
assertTimestamp(value.sourceUpdatedAt, 'review feedback source updatedAt');
|
|
326
|
+
exactObject(value.author, ['login', 'userId'], 'review feedback source author');
|
|
327
|
+
assertString(value.author.login, 'review feedback source author login');
|
|
328
|
+
assertString(value.author.userId, 'review feedback source author ID');
|
|
329
|
+
exactObject(value.permission, ['permission', 'userId', 'checkedAt'], 'review feedback source permission');
|
|
330
|
+
if (value.permission.permission !== 'write' && value.permission.permission !== 'admin')
|
|
331
|
+
throw new Error('review feedback source permission is invalid');
|
|
332
|
+
if (value.permission.userId !== value.author.userId)
|
|
333
|
+
throw new Error('review feedback permission identity mismatch');
|
|
334
|
+
assertTimestamp(value.permission.checkedAt, 'review feedback permission checkedAt');
|
|
335
|
+
}
|
|
336
|
+
function validateImplementationInvocation(value) {
|
|
337
|
+
exactObject(value, ['phase', 'attemptId', 'reportPath', 'preparedAt', 'baseline', 'pid', 'processGroupId', 'launchedAt'], 'review feedback implementation invocation');
|
|
338
|
+
if (value.phase !== 'prepared' && value.phase !== 'launched')
|
|
339
|
+
throw new Error('review feedback invocation phase is invalid');
|
|
340
|
+
assertString(value.attemptId, 'review feedback invocation attempt ID');
|
|
341
|
+
assertString(value.reportPath, 'review feedback invocation report path');
|
|
342
|
+
assertTimestamp(value.preparedAt, 'review feedback invocation preparedAt');
|
|
343
|
+
exactObject(value.baseline, ['headSha', 'indexTreeSha', 'trackedContentSha256', 'untrackedContentSha256', 'worktreeIdentity'], 'review feedback invocation baseline');
|
|
344
|
+
assertGitSha(value.baseline.headSha, 'review feedback invocation head');
|
|
345
|
+
assertGitSha(value.baseline.indexTreeSha, 'review feedback invocation index tree');
|
|
346
|
+
assertSha(value.baseline.trackedContentSha256, 'review feedback invocation tracked hash');
|
|
347
|
+
assertSha(value.baseline.untrackedContentSha256, 'review feedback invocation untracked hash');
|
|
348
|
+
assertString(value.baseline.worktreeIdentity, 'review feedback invocation worktree identity');
|
|
349
|
+
if (value.phase === 'prepared' && (value.pid !== null || value.processGroupId !== null || value.launchedAt !== null))
|
|
350
|
+
throw new Error('prepared review feedback invocation has launch evidence');
|
|
351
|
+
if (value.phase === 'launched') {
|
|
352
|
+
if (!Number.isSafeInteger(value.pid) || value.pid < 1 || !Number.isSafeInteger(value.processGroupId) || value.processGroupId < 1)
|
|
353
|
+
throw new Error('launched review feedback invocation process is invalid');
|
|
354
|
+
assertTimestamp(value.launchedAt, 'review feedback invocation launchedAt');
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
function validateHistory(value) {
|
|
358
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
359
|
+
throw new Error('review feedback history item is invalid');
|
|
360
|
+
const kind = value.kind;
|
|
361
|
+
if (kind === 'published')
|
|
362
|
+
validatePublishedReceipt(value);
|
|
363
|
+
else if (kind === 'blocked-safety' || kind === 'blocked-exhausted') {
|
|
364
|
+
exactObject(value, ['kind', 'batchId', 'blockedAt'], 'review feedback blocked receipt');
|
|
365
|
+
assertSha(value.batchId, 'review feedback blocked batch ID');
|
|
366
|
+
assertTimestamp(value.blockedAt, 'review feedback blockedAt');
|
|
367
|
+
}
|
|
368
|
+
else
|
|
369
|
+
throw new Error('review feedback history kind is invalid');
|
|
370
|
+
}
|
|
371
|
+
function validatePublishedReceipt(value) {
|
|
372
|
+
exactObject(value, ['kind', 'batchId', 'sourceIds', 'priorHeadSha', 'publishedHeadSha', 'pullRequestNumber', 'summaryCommentId', 'publishedAt'], 'review feedback published receipt');
|
|
373
|
+
if (value.kind !== 'published')
|
|
374
|
+
throw new Error('review feedback published receipt kind is invalid');
|
|
375
|
+
assertSha(value.batchId, 'review feedback published batch ID');
|
|
376
|
+
validateSourceIds(value.sourceIds, 'review feedback published source IDs');
|
|
377
|
+
assertGitSha(value.priorHeadSha, 'review feedback prior head');
|
|
378
|
+
assertGitSha(value.publishedHeadSha, 'review feedback published head');
|
|
379
|
+
if (!Number.isSafeInteger(value.pullRequestNumber) || value.pullRequestNumber < 1)
|
|
380
|
+
throw new Error('review feedback published PR number is invalid');
|
|
381
|
+
assertString(value.summaryCommentId, 'review feedback summary comment ID');
|
|
382
|
+
assertTimestamp(value.publishedAt, 'review feedback publishedAt');
|
|
383
|
+
}
|
|
384
|
+
function validateVerifiedReceipt(value) {
|
|
385
|
+
exactObject(value, ['batchId', 'checkedChangeSha256', 'proofId', 'verifiedAt'], 'review feedback verified receipt');
|
|
386
|
+
assertSha(value.batchId, 'review feedback verified batch ID');
|
|
387
|
+
assertSha(value.checkedChangeSha256, 'review feedback checked change hash');
|
|
388
|
+
assertString(value.proofId, 'review feedback proof ID');
|
|
389
|
+
assertTimestamp(value.verifiedAt, 'review feedback verifiedAt');
|
|
390
|
+
}
|
|
391
|
+
function validateTerminal(value) {
|
|
392
|
+
exactObject(value, ['kind', 'blockedAt'], 'review feedback terminal');
|
|
393
|
+
if (value.kind !== 'safety' && value.kind !== 'exhausted')
|
|
394
|
+
throw new Error('review feedback terminal kind is invalid');
|
|
395
|
+
assertTimestamp(value.blockedAt, 'review feedback terminal blockedAt');
|
|
396
|
+
}
|
|
397
|
+
function validateSourceIds(value, field) {
|
|
398
|
+
if (!Array.isArray(value) || value.length > MAX_SOURCES * 4)
|
|
399
|
+
throw new Error(`${field} is invalid`);
|
|
400
|
+
const seen = new Set();
|
|
401
|
+
for (const item of value) {
|
|
402
|
+
assertSourceId(item, field);
|
|
403
|
+
if (seen.has(item))
|
|
404
|
+
throw new Error(`${field} must be unique`);
|
|
405
|
+
seen.add(item);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
function assertSourceId(value, field) {
|
|
409
|
+
if (typeof value !== 'string' || !SOURCE_ID.test(value))
|
|
410
|
+
throw new Error(`${field} is invalid`);
|
|
411
|
+
}
|
|
412
|
+
function exactObject(value, keys, field) {
|
|
413
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
414
|
+
throw new Error(`${field} must be an object`);
|
|
415
|
+
const actual = Object.keys(value).sort();
|
|
416
|
+
const expected = [...keys].sort();
|
|
417
|
+
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index]))
|
|
418
|
+
throw new Error(`${field} has unknown or missing keys`);
|
|
419
|
+
}
|
|
420
|
+
function assertString(value, field) {
|
|
421
|
+
if (typeof value !== 'string' || value.length === 0 || value.length > 131_072)
|
|
422
|
+
throw new Error(`${field} is invalid`);
|
|
423
|
+
}
|
|
424
|
+
function assertSha(value, field) {
|
|
425
|
+
if (typeof value !== 'string' || !SHA256.test(value))
|
|
426
|
+
throw new Error(`${field} is invalid`);
|
|
427
|
+
}
|
|
428
|
+
function assertGitSha(value, field) {
|
|
429
|
+
if (typeof value !== 'string' || !GIT_SHA.test(value))
|
|
430
|
+
throw new Error(`${field} is invalid`);
|
|
431
|
+
}
|
|
432
|
+
function assertTimestamp(value, field) {
|
|
433
|
+
if (typeof value !== 'string' || Number.isNaN(Date.parse(value)) || new Date(value).toISOString() !== value)
|
|
434
|
+
throw new Error(`${field} is invalid`);
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=review-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-feedback.js","sourceRoot":"","sources":["../../../src/v2/review-feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CheckedChange, type CheckedChangeFreshness, type CheckedChangeMintCapability } from './checked-change.js';
|
|
2
|
-
import { type
|
|
2
|
+
import { type AgentAutoConfig } from './config.js';
|
|
3
3
|
import type { ImplementationReviewerInput, ImplementationReviewerResult } from './implementation-reviewer.js';
|
|
4
4
|
import { type FrozenCriterion, type IssueSnapshot, type ProveChangeResult } from './acceptance-proof.js';
|
|
5
5
|
import type { WorkflowGenerationReceipt } from './workflow-assets.js';
|
|
@@ -7,10 +7,13 @@ import { type RouteCoordinatorInput, type RouteCoordinatorResult, type RouteCoor
|
|
|
7
7
|
import type { RoutedContinuationRegistry } from './route-continuations.js';
|
|
8
8
|
import type { FrozenSpecReceiptV1 } from './spec-delivery.js';
|
|
9
9
|
import type { RunRecordV1, RunRecordWriter, RunStateFileV1 } from './run-store.js';
|
|
10
|
+
import type { ReviewFeedbackCoordinator } from './review-feedback-coordinator.js';
|
|
11
|
+
import { type ReviewFeedbackImplementationInvocationV1 } from './review-feedback.js';
|
|
10
12
|
export type RunIssueResult = {
|
|
11
13
|
status: 'review-ready';
|
|
12
14
|
pullRequestUrl: string;
|
|
13
15
|
evidencePath: string;
|
|
16
|
+
continuationEpoch?: string;
|
|
14
17
|
} | {
|
|
15
18
|
status: 'route-ready';
|
|
16
19
|
route: 'spec-required' | 'awaiting-user';
|
|
@@ -43,10 +46,6 @@ export type RunIssueResult = {
|
|
|
43
46
|
} | {
|
|
44
47
|
status: 'internal-error';
|
|
45
48
|
evidencePath: string;
|
|
46
|
-
} | {
|
|
47
|
-
status: 'migration-required';
|
|
48
|
-
fromVersion: 1;
|
|
49
|
-
requiredAction: string;
|
|
50
49
|
} | {
|
|
51
50
|
status: 'requeued';
|
|
52
51
|
reason: 'owner-contention';
|
|
@@ -76,6 +75,13 @@ export interface RunIssueGit {
|
|
|
76
75
|
baseBranch: string;
|
|
77
76
|
baseSha: string;
|
|
78
77
|
}): Promise<void>;
|
|
78
|
+
ensureContinuationWorktree?(input: {
|
|
79
|
+
targetRoot: string;
|
|
80
|
+
worktreePath: string;
|
|
81
|
+
branchName: string;
|
|
82
|
+
baseBranch: string;
|
|
83
|
+
publishedHeadSha: string;
|
|
84
|
+
}): Promise<void>;
|
|
79
85
|
inspectWorktree(input: {
|
|
80
86
|
worktreePath: string;
|
|
81
87
|
branchName: string;
|
|
@@ -84,6 +90,7 @@ export interface RunIssueGit {
|
|
|
84
90
|
snapshot(worktreePath: string): Promise<Omit<CheckedChangeFreshness, 'checkPolicySha256'>>;
|
|
85
91
|
fingerprintDeniedPaths(worktreePath: string, deniedPaths: string[]): Promise<string>;
|
|
86
92
|
listChangedFiles(worktreePath: string): Promise<string[]>;
|
|
93
|
+
listChangedFilesIgnoringUntrackedRoot(worktreePath: string, ignoredRoot: string): Promise<string[]>;
|
|
87
94
|
fingerprintChangedFiles(worktreePath: string, changedFiles: string[]): Promise<string>;
|
|
88
95
|
stageAll(worktreePath: string): Promise<void>;
|
|
89
96
|
getTreeSha(worktreePath: string): Promise<string>;
|
|
@@ -104,6 +111,7 @@ export interface RunIssueGit {
|
|
|
104
111
|
branchName: string;
|
|
105
112
|
}): Promise<void>;
|
|
106
113
|
}
|
|
114
|
+
type InterruptedProcess = Omit<NonNullable<RunRecordV1['process']>, 'purpose' | 'resumeLifecycle' | 'resumeReviewStage'>;
|
|
107
115
|
export type ImplementationAgentResult = {
|
|
108
116
|
kind: 'completed';
|
|
109
117
|
report: unknown;
|
|
@@ -117,15 +125,15 @@ export type ImplementationAgentResult = {
|
|
|
117
125
|
kind: 'internal-error';
|
|
118
126
|
} | {
|
|
119
127
|
kind: 'safe-halt';
|
|
120
|
-
process:
|
|
128
|
+
process: InterruptedProcess;
|
|
121
129
|
waitForAbsence(): Promise<void>;
|
|
122
130
|
};
|
|
123
131
|
export interface RunIssueDependencies {
|
|
124
132
|
readConfig(targetRoot: string): Promise<{
|
|
125
133
|
bytes: Buffer;
|
|
126
|
-
config:
|
|
134
|
+
config: AgentAutoConfig;
|
|
127
135
|
}>;
|
|
128
|
-
validateContainment(config:
|
|
136
|
+
validateContainment(config: AgentAutoConfig): Promise<void>;
|
|
129
137
|
ownerLock: {
|
|
130
138
|
acquire(input: {
|
|
131
139
|
canonicalRepository: string;
|
|
@@ -146,6 +154,9 @@ export interface RunIssueDependencies {
|
|
|
146
154
|
}): Promise<{
|
|
147
155
|
url: string;
|
|
148
156
|
body: string;
|
|
157
|
+
number?: number;
|
|
158
|
+
nodeId?: string;
|
|
159
|
+
headSha?: string;
|
|
149
160
|
} | undefined>;
|
|
150
161
|
createDraft(input: {
|
|
151
162
|
title: string;
|
|
@@ -155,7 +166,16 @@ export interface RunIssueDependencies {
|
|
|
155
166
|
}): Promise<{
|
|
156
167
|
url: string;
|
|
157
168
|
}>;
|
|
169
|
+
listConversationComments?(number: number): Promise<Array<{
|
|
170
|
+
id: string;
|
|
171
|
+
body: string;
|
|
172
|
+
}>>;
|
|
173
|
+
postConversationComment?(number: number, body: string): Promise<{
|
|
174
|
+
id: string;
|
|
175
|
+
body: string;
|
|
176
|
+
}>;
|
|
158
177
|
};
|
|
178
|
+
reviewFeedback?: ReviewFeedbackCoordinator;
|
|
159
179
|
git: RunIssueGit;
|
|
160
180
|
implementationAgent: {
|
|
161
181
|
run(input: {
|
|
@@ -167,8 +187,30 @@ export interface RunIssueDependencies {
|
|
|
167
187
|
reworkFindings: string[];
|
|
168
188
|
repairOnly: boolean;
|
|
169
189
|
workflowGeneration: WorkflowGenerationReceipt;
|
|
190
|
+
reviewFeedbackRound?: number;
|
|
191
|
+
reviewFeedback?: Array<{
|
|
192
|
+
id: string;
|
|
193
|
+
sourceUrl: string;
|
|
194
|
+
path: string | null;
|
|
195
|
+
line: number | null;
|
|
196
|
+
body: string;
|
|
197
|
+
}>;
|
|
198
|
+
onPrepared?: (input: Omit<ReviewFeedbackImplementationInvocationV1, 'phase' | 'pid' | 'processGroupId' | 'launchedAt'>) => Promise<void>;
|
|
199
|
+
onLaunched?: (input: {
|
|
200
|
+
attemptId: string;
|
|
201
|
+
pid: number;
|
|
202
|
+
processGroupId: number;
|
|
203
|
+
launchedAt: string;
|
|
204
|
+
}) => Promise<void>;
|
|
170
205
|
signal: AbortSignal;
|
|
171
206
|
}): Promise<ImplementationAgentResult>;
|
|
207
|
+
recover?(input: {
|
|
208
|
+
runId: string;
|
|
209
|
+
canonicalRepository: string;
|
|
210
|
+
invocation: ReviewFeedbackImplementationInvocationV1;
|
|
211
|
+
}): Promise<Extract<ImplementationAgentResult, {
|
|
212
|
+
kind: 'completed';
|
|
213
|
+
}> | undefined>;
|
|
172
214
|
};
|
|
173
215
|
implementationReviewer: {
|
|
174
216
|
run(input: ImplementationReviewerInput): Promise<ImplementationReviewerResult>;
|
|
@@ -198,6 +240,7 @@ export interface RunIssueDependencies {
|
|
|
198
240
|
frozenCriteria: FrozenCriterion[];
|
|
199
241
|
checkedChange: CheckedChange;
|
|
200
242
|
workflowGeneration: WorkflowGenerationReceipt;
|
|
243
|
+
beforeAgentLaunch?: () => Promise<void>;
|
|
201
244
|
}): Promise<ProveChangeResult>;
|
|
202
245
|
};
|
|
203
246
|
checkedChangeMint: CheckedChangeMintCapability;
|
|
@@ -229,6 +272,7 @@ export declare class OwnerLockContentionError extends Error {
|
|
|
229
272
|
interface ActiveRun {
|
|
230
273
|
state: RunStateFileV1;
|
|
231
274
|
record: RunRecordV1;
|
|
275
|
+
config: AgentAutoConfig;
|
|
232
276
|
}
|
|
233
277
|
export declare class RunIssue {
|
|
234
278
|
private readonly dependencies;
|
|
@@ -237,11 +281,15 @@ export declare class RunIssue {
|
|
|
237
281
|
private reconcileClaim;
|
|
238
282
|
private publish;
|
|
239
283
|
private publicationDiverged;
|
|
284
|
+
private updateExistingPullRequest;
|
|
285
|
+
private continueReviewReady;
|
|
286
|
+
private resumeActivatedReviewFeedback;
|
|
287
|
+
private reviewReadyObservationBlocked;
|
|
240
288
|
runIssue(input: {
|
|
241
289
|
targetRoot: string;
|
|
242
290
|
issueNumber: number;
|
|
243
291
|
}): Promise<RunIssueResult>;
|
|
244
|
-
|
|
292
|
+
initializeClaimedRun(active: ActiveRun, issue?: RunIssueSnapshot): Promise<ActiveRun>;
|
|
245
293
|
private routeRun;
|
|
246
294
|
private waitingState;
|
|
247
295
|
private specState;
|
|
@@ -255,11 +303,17 @@ export declare class RunIssue {
|
|
|
255
303
|
private clearIntent;
|
|
256
304
|
private confirmEffect;
|
|
257
305
|
private authorized;
|
|
306
|
+
private authorizedForExactLabels;
|
|
307
|
+
private hasTrustedClaim;
|
|
258
308
|
private readIssue;
|
|
309
|
+
private revalidateFeedbackWorker;
|
|
310
|
+
private mapFeedbackRevalidation;
|
|
259
311
|
private runImplementation;
|
|
260
312
|
private runDirectReviewFull;
|
|
261
313
|
private recoverDirectReviewInvocation;
|
|
262
314
|
private startNextCycle;
|
|
315
|
+
private repairBudgetExhausted;
|
|
316
|
+
private blockReviewFeedback;
|
|
263
317
|
private mapImplementationFailure;
|
|
264
318
|
private mapProofFailure;
|
|
265
319
|
private revoked;
|