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.
Files changed (161) hide show
  1. package/CHANGELOG.md +51 -427
  2. package/README.md +161 -37
  3. package/dist/src/index.d.ts +1 -1
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/v2/acceptance-proof.d.ts +5 -0
  6. package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
  7. package/dist/src/v2/acceptance-proof.js +10 -2
  8. package/dist/src/v2/acceptance-proof.js.map +1 -1
  9. package/dist/src/v2/adapters/gh-issue-adapter.d.ts.map +1 -1
  10. package/dist/src/v2/adapters/gh-issue-adapter.js +6 -7
  11. package/dist/src/v2/adapters/gh-issue-adapter.js.map +1 -1
  12. package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts +7 -1
  13. package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts.map +1 -1
  14. package/dist/src/v2/adapters/gh-pull-request-adapter.js +288 -0
  15. package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -1
  16. package/dist/src/v2/adapters/pull-requests.d.ts +69 -0
  17. package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -1
  18. package/dist/src/v2/adapters/pull-requests.js +48 -0
  19. package/dist/src/v2/adapters/pull-requests.js.map +1 -1
  20. package/dist/src/v2/adapters/worktree.d.ts +1 -0
  21. package/dist/src/v2/adapters/worktree.d.ts.map +1 -1
  22. package/dist/src/v2/adapters/worktree.js +10 -1
  23. package/dist/src/v2/adapters/worktree.js.map +1 -1
  24. package/dist/src/v2/cli-contract.d.ts +3 -3
  25. package/dist/src/v2/cli-contract.d.ts.map +1 -1
  26. package/dist/src/v2/cli-contract.js +1 -3
  27. package/dist/src/v2/cli-contract.js.map +1 -1
  28. package/dist/src/v2/cli.d.ts +33 -0
  29. package/dist/src/v2/cli.d.ts.map +1 -0
  30. package/dist/src/v2/{candidate-cli.js → cli.js} +55 -39
  31. package/dist/src/v2/cli.js.map +1 -0
  32. package/dist/src/v2/code-review-report.d.ts +1 -1
  33. package/dist/src/v2/code-review-report.d.ts.map +1 -1
  34. package/dist/src/v2/code-review-report.js +2 -2
  35. package/dist/src/v2/code-review-report.js.map +1 -1
  36. package/dist/src/v2/codex-process.d.ts.map +1 -1
  37. package/dist/src/v2/codex-process.js +12 -1
  38. package/dist/src/v2/codex-process.js.map +1 -1
  39. package/dist/src/v2/config.d.ts +2 -3
  40. package/dist/src/v2/config.d.ts.map +1 -1
  41. package/dist/src/v2/config.js +0 -3
  42. package/dist/src/v2/config.js.map +1 -1
  43. package/dist/src/v2/contained-report-operation.d.ts +2 -2
  44. package/dist/src/v2/contained-report-operation.d.ts.map +1 -1
  45. package/dist/src/v2/contained-report-operation.js +1 -1
  46. package/dist/src/v2/contained-report-operation.js.map +1 -1
  47. package/dist/src/v2/containment.d.ts +15 -2
  48. package/dist/src/v2/containment.d.ts.map +1 -1
  49. package/dist/src/v2/containment.js +43 -6
  50. package/dist/src/v2/containment.js.map +1 -1
  51. package/dist/src/v2/direct-delivery.d.ts +5 -10
  52. package/dist/src/v2/direct-delivery.d.ts.map +1 -1
  53. package/dist/src/v2/direct-delivery.js +32 -91
  54. package/dist/src/v2/direct-delivery.js.map +1 -1
  55. package/dist/src/v2/proof-report.d.ts.map +1 -1
  56. package/dist/src/v2/proof-report.js +55 -29
  57. package/dist/src/v2/proof-report.js.map +1 -1
  58. package/dist/src/v2/review-feedback-coordinator.d.ts +54 -0
  59. package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -0
  60. package/dist/src/v2/review-feedback-coordinator.js +245 -0
  61. package/dist/src/v2/review-feedback-coordinator.js.map +1 -0
  62. package/dist/src/v2/review-feedback.d.ts +127 -0
  63. package/dist/src/v2/review-feedback.d.ts.map +1 -0
  64. package/dist/src/v2/review-feedback.js +436 -0
  65. package/dist/src/v2/review-feedback.js.map +1 -0
  66. package/dist/src/v2/run-issue.d.ts +63 -9
  67. package/dist/src/v2/run-issue.d.ts.map +1 -1
  68. package/dist/src/v2/run-issue.js +798 -78
  69. package/dist/src/v2/run-issue.js.map +1 -1
  70. package/dist/src/v2/run-store.d.ts +49 -5
  71. package/dist/src/v2/run-store.d.ts.map +1 -1
  72. package/dist/src/v2/run-store.js +138 -44
  73. package/dist/src/v2/run-store.js.map +1 -1
  74. package/dist/src/v2/runtime.d.ts +40 -3
  75. package/dist/src/v2/runtime.d.ts.map +1 -1
  76. package/dist/src/v2/runtime.js +245 -52
  77. package/dist/src/v2/runtime.js.map +1 -1
  78. package/dist/src/v2/setup-cli.d.ts.map +1 -1
  79. package/dist/src/v2/setup-cli.js +4 -11
  80. package/dist/src/v2/setup-cli.js.map +1 -1
  81. package/dist/src/v2/setup-runtime.d.ts.map +1 -1
  82. package/dist/src/v2/setup-runtime.js +1 -61
  83. package/dist/src/v2/setup-runtime.js.map +1 -1
  84. package/dist/src/v2/setup-store.d.ts +0 -5
  85. package/dist/src/v2/setup-store.d.ts.map +1 -1
  86. package/dist/src/v2/setup-store.js +3 -106
  87. package/dist/src/v2/setup-store.js.map +1 -1
  88. package/dist/src/v2/setup.d.ts +6 -46
  89. package/dist/src/v2/setup.d.ts.map +1 -1
  90. package/dist/src/v2/setup.js +12 -294
  91. package/dist/src/v2/setup.js.map +1 -1
  92. package/dist/src/v2/workflow-assets.d.ts +19 -11
  93. package/dist/src/v2/workflow-assets.d.ts.map +1 -1
  94. package/dist/src/v2/workflow-assets.js +132 -40
  95. package/dist/src/v2/workflow-assets.js.map +1 -1
  96. package/docs/deep-dive.md +328 -56
  97. package/internal-workflow/docs/agents/bugfix-quality-gate.md +11 -0
  98. package/internal-workflow/docs/agents/coding-skill-routing.md +116 -196
  99. package/internal-workflow/docs/agents/contract-test-ledger.md +11 -1
  100. package/internal-workflow/docs/agents/review-gates.md +32 -39
  101. package/internal-workflow/docs/agents/review-protocol.md +75 -147
  102. package/internal-workflow/evals/coding-skill-evals.json +84 -0
  103. package/internal-workflow/manifest.json +1 -1
  104. package/internal-workflow/operations/acceptance-proof/SKILL.md +7 -1
  105. package/internal-workflow/operations/ambiguity-review/SKILL.md +2 -0
  106. package/internal-workflow/operations/code-review/SKILL.md +21 -1
  107. package/internal-workflow/operations/implementation/SKILL.md +22 -1
  108. package/internal-workflow/operations/spec-author/SKILL.md +10 -1
  109. package/internal-workflow/operations/spec-review/SKILL.md +10 -1
  110. package/internal-workflow/operations/triage/SKILL.md +10 -1
  111. package/internal-workflow/schemas/code-review-v1.json +1 -1
  112. package/internal-workflow/schemas/proof-report-v1.json +1 -1
  113. package/internal-workflow/skills/agent-auto/SKILL.md +6 -1
  114. package/internal-workflow/skills/code-debugger/SKILL.md +122 -0
  115. package/internal-workflow/skills/code-debugger/agents/openai.yaml +7 -0
  116. package/internal-workflow/skills/code-review/SKILL.md +51 -17
  117. package/internal-workflow/skills/code-review/references/cleanup-lens.md +52 -0
  118. package/internal-workflow/skills/implementation-spec-maker/SKILL.md +15 -6
  119. package/internal-workflow/skills/implementation-spec-maker/agents/openai.yaml +1 -1
  120. package/internal-workflow/skills/implementation-spec-maker/references/spec-template.md +2 -2
  121. package/internal-workflow/skills/implementation-spec-review/SKILL.md +108 -204
  122. package/internal-workflow/skills/implementation-spec-review/evals/evals.json +24 -0
  123. package/internal-workflow/skills/implementation-spec-review/references/review-loop.md +93 -0
  124. package/internal-workflow/skills/small-task-implementer/SKILL.md +15 -8
  125. package/internal-workflow/skills/spec-implementer/SKILL.md +101 -172
  126. package/internal-workflow/skills/spec-implementer/evals/evals.json +30 -0
  127. package/internal-workflow/skills/spec-implementer/references/review-loop.md +100 -0
  128. package/internal-workflow/skills/tdd/SKILL.md +20 -6
  129. package/internal-workflow/skills/tdd/agents/openai.yaml +2 -2
  130. package/internal-workflow/skills/tdd/evals/evals.json +18 -0
  131. package/internal-workflow/skills/tdd/mocking.md +3 -42
  132. package/internal-workflow/skills/tdd/refactoring.md +6 -8
  133. package/package.json +9 -6
  134. package/dist/src/v2/adapters/target-activity-fence.d.ts +0 -23
  135. package/dist/src/v2/adapters/target-activity-fence.d.ts.map +0 -1
  136. package/dist/src/v2/adapters/target-activity-fence.js +0 -249
  137. package/dist/src/v2/adapters/target-activity-fence.js.map +0 -1
  138. package/dist/src/v2/candidate-cli.d.ts +0 -26
  139. package/dist/src/v2/candidate-cli.d.ts.map +0 -1
  140. package/dist/src/v2/candidate-cli.js.map +0 -1
  141. package/dist/src/v2/legacy-cutover.d.ts +0 -52
  142. package/dist/src/v2/legacy-cutover.d.ts.map +0 -1
  143. package/dist/src/v2/legacy-cutover.js +0 -87
  144. package/dist/src/v2/legacy-cutover.js.map +0 -1
  145. package/internal-workflow/docs/agents/artifact-review-loop.md +0 -267
  146. package/internal-workflow/docs/agents/implementation-review-loop.md +0 -302
  147. package/internal-workflow/operations/cleanup-review/SKILL.md +0 -3
  148. package/internal-workflow/operations/spec-implementation/SKILL.md +0 -3
  149. package/internal-workflow/profiles/implementer_deep.toml +0 -9
  150. package/internal-workflow/profiles/researcher_standard.toml +0 -9
  151. package/internal-workflow/profiles/reviewer_fast.toml +0 -9
  152. package/internal-workflow/skills/cleanup-review/SKILL.md +0 -84
  153. package/internal-workflow/skills/cleanup-review/agents/openai.yaml +0 -6
  154. package/internal-workflow/skills/codebase-design/DEEPENING.md +0 -35
  155. package/internal-workflow/skills/codebase-design/DESIGN-IT-TWICE.md +0 -50
  156. package/internal-workflow/skills/codebase-design/SKILL.md +0 -82
  157. package/internal-workflow/skills/codebase-design/agents/openai.yaml +0 -6
  158. package/internal-workflow/skills/research/SKILL.md +0 -107
  159. package/internal-workflow/skills/research/agents/openai.yaml +0 -6
  160. package/internal-workflow/skills/ui-evidence-proof/SKILL.md +0 -123
  161. 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 AgentAutoConfigV1 } from './config.js';
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: NonNullable<RunRecordV1['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: AgentAutoConfigV1;
134
+ config: AgentAutoConfig;
127
135
  }>;
128
- validateContainment(config: AgentAutoConfigV1): Promise<void>;
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
- migratePreRouteRun(active: ActiveRun, issue?: RunIssueSnapshot): Promise<ActiveRun>;
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;