codex-orchestrator 0.1.41 → 0.1.42
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 +10 -0
- package/dist/src/github/gh-issue-adapter.d.ts +2 -0
- package/dist/src/github/gh-issue-adapter.d.ts.map +1 -1
- package/dist/src/github/gh-issue-adapter.js +7 -1
- package/dist/src/github/gh-issue-adapter.js.map +1 -1
- package/dist/src/github/issues.d.ts +3 -0
- package/dist/src/github/issues.d.ts.map +1 -1
- package/dist/src/github/issues.js +7 -1
- package/dist/src/github/issues.js.map +1 -1
- package/dist/src/runner/acceptance-proof-loop.d.ts +115 -0
- package/dist/src/runner/acceptance-proof-loop.d.ts.map +1 -0
- package/dist/src/runner/acceptance-proof-loop.js +401 -0
- package/dist/src/runner/acceptance-proof-loop.js.map +1 -0
- package/dist/src/runner/acceptance-proof-runner.d.ts +2 -20
- package/dist/src/runner/acceptance-proof-runner.d.ts.map +1 -1
- package/dist/src/runner/acceptance-proof-runner.js +9 -103
- package/dist/src/runner/acceptance-proof-runner.js.map +1 -1
- package/dist/src/runner/agent-attempt.d.ts +105 -0
- package/dist/src/runner/agent-attempt.d.ts.map +1 -0
- package/dist/src/runner/agent-attempt.js +235 -0
- package/dist/src/runner/agent-attempt.js.map +1 -0
- package/dist/src/runner/daemon-command.d.ts +1 -1
- package/dist/src/runner/daemon-command.d.ts.map +1 -1
- package/dist/src/runner/daemon-command.js +24 -0
- package/dist/src/runner/daemon-command.js.map +1 -1
- package/dist/src/runner/durable-run-summary.js +10 -1
- package/dist/src/runner/durable-run-summary.js.map +1 -1
- package/dist/src/runner/local-execution-session.d.ts.map +1 -1
- package/dist/src/runner/local-execution-session.js +83 -126
- package/dist/src/runner/local-execution-session.js.map +1 -1
- package/dist/src/runner/plan-auto-command.d.ts.map +1 -1
- package/dist/src/runner/plan-auto-command.js +181 -295
- package/dist/src/runner/plan-auto-command.js.map +1 -1
- package/dist/src/runner/review-gate-policy.d.ts +3 -11
- package/dist/src/runner/review-gate-policy.d.ts.map +1 -1
- package/dist/src/runner/review-gate-policy.js +6 -178
- package/dist/src/runner/review-gate-policy.js.map +1 -1
- package/dist/src/runner/runner-handoff-decision.d.ts.map +1 -1
- package/dist/src/runner/runner-handoff-decision.js +22 -4
- package/dist/src/runner/runner-handoff-decision.js.map +1 -1
- package/dist/src/runner/scoped-auto-command.d.ts.map +1 -1
- package/dist/src/runner/scoped-auto-command.js +104 -221
- package/dist/src/runner/scoped-auto-command.js.map +1 -1
- package/dist/src/runner/terminal-outcome.d.ts +58 -0
- package/dist/src/runner/terminal-outcome.d.ts.map +1 -0
- package/dist/src/runner/terminal-outcome.js +73 -0
- package/dist/src/runner/terminal-outcome.js.map +1 -0
- package/dist/src/runner/visual-proof-runner.d.ts +2 -0
- package/dist/src/runner/visual-proof-runner.d.ts.map +1 -1
- package/dist/src/runner/visual-proof-runner.js +30 -8
- package/dist/src/runner/visual-proof-runner.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
import { globMatches } from '../path-policy.js';
|
|
2
|
+
import { buildAcceptanceProofReportOutcome, buildBlockedAcceptanceProofOutcome, buildForbiddenAcceptanceProofDiffEvidence, classifyAcceptanceProofDiff, createAcceptanceProofDiffCapture, readAcceptanceProofReport, } from './acceptance-proof.js';
|
|
3
|
+
import { resolveAcceptanceProofStrategy } from './proof-strategy.js';
|
|
4
|
+
export function planAcceptanceProofAttempt(input) {
|
|
5
|
+
const proofStrategy = resolveAcceptanceProofStrategy({ config: input.config, issue: input.issue }).strategy;
|
|
6
|
+
const commandTemplate = runnerVisualProofPolicy(input.config).commandTemplate;
|
|
7
|
+
const desirable = visualProofDesirable(input, proofStrategy);
|
|
8
|
+
const applies = acceptanceProofApplies(input, proofStrategy, desirable);
|
|
9
|
+
if (!applies) {
|
|
10
|
+
return {
|
|
11
|
+
kind: 'skip',
|
|
12
|
+
applies: false,
|
|
13
|
+
reason: proofStrategy === 'none' || proofStrategy === 'non-visual-smoke'
|
|
14
|
+
? 'proof strategy disables browser/mobile visual proof'
|
|
15
|
+
: 'acceptance proof does not apply',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (input.adaptiveAdapterAvailable && (hasAcceptanceProofProfile(input.config) || !commandTemplate)) {
|
|
19
|
+
return {
|
|
20
|
+
kind: 'adaptive',
|
|
21
|
+
applies: true,
|
|
22
|
+
reason: 'adaptive acceptance proof is available',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (commandTemplate) {
|
|
26
|
+
return {
|
|
27
|
+
kind: 'command',
|
|
28
|
+
applies: true,
|
|
29
|
+
reason: 'runner-owned acceptance proof command is available',
|
|
30
|
+
commandTemplate,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
kind: 'skip',
|
|
35
|
+
applies: true,
|
|
36
|
+
reason: 'acceptance proof applies but no adaptive adapter or runner command is available',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export async function runAcceptanceProofLoopAttempt(input) {
|
|
40
|
+
const plan = planAcceptanceProofAttempt({
|
|
41
|
+
config: input.config,
|
|
42
|
+
issue: input.issue,
|
|
43
|
+
changedFiles: input.initialChangedFiles,
|
|
44
|
+
adaptiveAdapterAvailable: input.adaptiveAdapterAvailable,
|
|
45
|
+
});
|
|
46
|
+
if (plan.kind === 'skip') {
|
|
47
|
+
return {
|
|
48
|
+
status: 'skipped',
|
|
49
|
+
changedFiles: input.initialChangedFiles,
|
|
50
|
+
validation: [],
|
|
51
|
+
artifacts: [],
|
|
52
|
+
residualRisks: [],
|
|
53
|
+
blockers: [],
|
|
54
|
+
scopeBlockers: [],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const diffCapture = await createAcceptanceProofDiffCapture({
|
|
58
|
+
worktreePath: input.worktreePath,
|
|
59
|
+
changedFiles: input.initialChangedFiles,
|
|
60
|
+
});
|
|
61
|
+
const adapterResult = await executeSelectedAdapter(input, plan);
|
|
62
|
+
const changeSet = await input.collectChangeSet({
|
|
63
|
+
worktreePath: input.worktreePath,
|
|
64
|
+
baseHead: input.beforeHead,
|
|
65
|
+
});
|
|
66
|
+
const changedFiles = changeSet.changedPaths;
|
|
67
|
+
const proofPhaseChangedFiles = await diffCapture.collectProofPhaseChangedFiles(changedFiles);
|
|
68
|
+
const reportOutcome = await evaluateAdapterReport({
|
|
69
|
+
config: input.config,
|
|
70
|
+
adapterResult,
|
|
71
|
+
proofPhaseChangedFiles,
|
|
72
|
+
artifactExists: input.artifactExists,
|
|
73
|
+
});
|
|
74
|
+
const proofDiff = classifyAcceptanceProofDiff(input.config, proofPhaseChangedFiles);
|
|
75
|
+
const forbiddenDiffEvidence = proofDiff.forbiddenProductPaths.length > 0
|
|
76
|
+
? buildForbiddenAcceptanceProofDiffEvidence({
|
|
77
|
+
command: adapterResult.command,
|
|
78
|
+
baseEvidence: reportOutcome.evidence,
|
|
79
|
+
reportPath: adapterResult.reportPath,
|
|
80
|
+
artifactDir: adapterResult.artifactDir,
|
|
81
|
+
artifactPaths: proofPhaseChangedFiles,
|
|
82
|
+
forbiddenProductPaths: proofDiff.forbiddenProductPaths,
|
|
83
|
+
})
|
|
84
|
+
: undefined;
|
|
85
|
+
const proofOutcome = forbiddenDiffEvidence
|
|
86
|
+
? {
|
|
87
|
+
...reportOutcome,
|
|
88
|
+
status: 'blocked',
|
|
89
|
+
validation: forbiddenDiffEvidence.validation,
|
|
90
|
+
blockers: forbiddenDiffEvidence.blockers,
|
|
91
|
+
evidence: forbiddenDiffEvidence,
|
|
92
|
+
}
|
|
93
|
+
: reportOutcome;
|
|
94
|
+
const scopeBlockers = input.evaluateScope({ changedFiles }).blockers;
|
|
95
|
+
const scopeValidation = scopeBlockers.length > 0
|
|
96
|
+
? [{
|
|
97
|
+
command: 'acceptance proof scope isolation',
|
|
98
|
+
status: 'failed',
|
|
99
|
+
summary: scopeBlockers.join('; '),
|
|
100
|
+
}]
|
|
101
|
+
: [];
|
|
102
|
+
const status = proofOutcome.status === 'passed' && scopeBlockers.length === 0 ? 'passed' : 'blocked';
|
|
103
|
+
const blockers = uniqueStrings([...proofOutcome.blockers, ...scopeBlockers]);
|
|
104
|
+
const residualRisks = uniqueStrings([
|
|
105
|
+
...adapterResult.residualRisks,
|
|
106
|
+
...proofOutcome.residualRisks,
|
|
107
|
+
]);
|
|
108
|
+
const evidence = scopeBlockers.length > 0
|
|
109
|
+
? {
|
|
110
|
+
...proofOutcome.evidence,
|
|
111
|
+
status: 'blocked',
|
|
112
|
+
validation: [...proofOutcome.evidence.validation, ...scopeValidation],
|
|
113
|
+
blockers,
|
|
114
|
+
}
|
|
115
|
+
: proofOutcome.evidence;
|
|
116
|
+
return {
|
|
117
|
+
status,
|
|
118
|
+
changedFiles,
|
|
119
|
+
validation: [...proofOutcome.validation, ...scopeValidation],
|
|
120
|
+
artifacts: mergeProofArtifacts(adapterResult.preliminaryArtifacts, proofOutcome.artifacts),
|
|
121
|
+
residualRisks,
|
|
122
|
+
blockers,
|
|
123
|
+
scopeBlockers,
|
|
124
|
+
evidence,
|
|
125
|
+
proofReportPath: adapterResult.reportPath,
|
|
126
|
+
proofArtifactDir: adapterResult.artifactDir,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async function executeSelectedAdapter(input, plan) {
|
|
130
|
+
if (plan.kind === 'adaptive') {
|
|
131
|
+
if (!input.executeAdaptiveProof) {
|
|
132
|
+
throw new Error('Acceptance proof plan selected adaptive proof, but no adaptive adapter callback was provided.');
|
|
133
|
+
}
|
|
134
|
+
return input.executeAdaptiveProof();
|
|
135
|
+
}
|
|
136
|
+
if (plan.kind === 'command') {
|
|
137
|
+
if (!input.executeCommandProof) {
|
|
138
|
+
throw new Error('Acceptance proof plan selected command proof, but no command adapter callback was provided.');
|
|
139
|
+
}
|
|
140
|
+
return input.executeCommandProof();
|
|
141
|
+
}
|
|
142
|
+
throw new Error(`Unsupported acceptance proof plan kind: ${plan.kind}`);
|
|
143
|
+
}
|
|
144
|
+
async function evaluateAdapterReport(input) {
|
|
145
|
+
const reportRead = await readAcceptanceProofReport(input.adapterResult.reportPath);
|
|
146
|
+
if (reportRead.kind === 'missing') {
|
|
147
|
+
const validationSummary = missingReportValidationSummary(input.adapterResult);
|
|
148
|
+
const blockers = input.adapterResult.exitCode === 0
|
|
149
|
+
? ['Acceptance proof blocked: proof session did not write CODEX_ORCHESTRATOR_PROOF_REPORT_PATH.']
|
|
150
|
+
: [commandFailureSummary(input.adapterResult)];
|
|
151
|
+
return buildBlockedAcceptanceProofOutcome({
|
|
152
|
+
command: input.adapterResult.command,
|
|
153
|
+
promptPath: input.adapterResult.promptPath,
|
|
154
|
+
reportPath: input.adapterResult.reportPath,
|
|
155
|
+
artifactDir: input.adapterResult.artifactDir,
|
|
156
|
+
artifactPaths: input.adapterResult.artifactPaths,
|
|
157
|
+
validationSummary,
|
|
158
|
+
blockers,
|
|
159
|
+
residualRisks: input.adapterResult.residualRisks,
|
|
160
|
+
commandExitCode: input.adapterResult.exitCode,
|
|
161
|
+
commandOutputSummary: input.adapterResult.outputSummary,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (reportRead.kind === 'invalid') {
|
|
165
|
+
return buildBlockedAcceptanceProofOutcome({
|
|
166
|
+
command: input.adapterResult.command,
|
|
167
|
+
promptPath: input.adapterResult.promptPath,
|
|
168
|
+
reportPath: input.adapterResult.reportPath,
|
|
169
|
+
artifactDir: input.adapterResult.artifactDir,
|
|
170
|
+
artifactPaths: input.adapterResult.artifactPaths,
|
|
171
|
+
validationSummary: reportRead.message,
|
|
172
|
+
blockers: [`Acceptance proof blocked: ${reportRead.message}`],
|
|
173
|
+
residualRisks: input.adapterResult.residualRisks,
|
|
174
|
+
commandExitCode: input.adapterResult.exitCode,
|
|
175
|
+
commandOutputSummary: input.adapterResult.outputSummary,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return buildAcceptanceProofReportOutcome({
|
|
179
|
+
command: input.adapterResult.command,
|
|
180
|
+
config: input.config,
|
|
181
|
+
report: reportRead.report,
|
|
182
|
+
proofPhaseChangedFiles: input.proofPhaseChangedFiles,
|
|
183
|
+
artifactExists: input.artifactExists,
|
|
184
|
+
commandExitCode: input.adapterResult.exitCode,
|
|
185
|
+
commandOutputSummary: input.adapterResult.outputSummary,
|
|
186
|
+
promptPath: input.adapterResult.promptPath,
|
|
187
|
+
reportPath: input.adapterResult.reportPath,
|
|
188
|
+
artifactDir: input.adapterResult.artifactDir,
|
|
189
|
+
passedSummary: (report) => `${input.adapterResult.adapterKind === 'adaptive' ? 'Acceptance proof' : 'runner acceptance proof'} passed: ${report.criteria.length} criterion/criteria mapped to high-confidence artifacts.`,
|
|
190
|
+
failedSummaryPrefix: input.adapterResult.adapterKind === 'adaptive' ? 'Acceptance proof' : 'runner acceptance proof',
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
function missingReportValidationSummary(adapterResult) {
|
|
194
|
+
if (adapterResult.preliminaryArtifacts.length > 0) {
|
|
195
|
+
return `runner acceptance proof failed: command completed and produced ${adapterResult.preliminaryArtifacts.length} artifact(s), but did not write a valid machine-readable acceptance proof report at ${adapterResult.reportPath}.`;
|
|
196
|
+
}
|
|
197
|
+
return 'Acceptance proof blocked: proof session did not write CODEX_ORCHESTRATOR_PROOF_REPORT_PATH.';
|
|
198
|
+
}
|
|
199
|
+
function commandFailureSummary(adapterResult) {
|
|
200
|
+
const prefix = adapterResult.adapterKind === 'adaptive' ? 'Acceptance proof failed' : 'runner acceptance proof failed';
|
|
201
|
+
return `${prefix}: ${adapterResult.outputSummary || `exit ${adapterResult.exitCode}`}`;
|
|
202
|
+
}
|
|
203
|
+
export function decideProofRouting(input) {
|
|
204
|
+
const proofStrategy = resolveAcceptanceProofStrategy({ config: input.config, issue: input.issue }).strategy;
|
|
205
|
+
const dispatchTarget = proofStrategyDispatchTarget(input, proofStrategy);
|
|
206
|
+
const desirable = visualProofDesirable(input, proofStrategy);
|
|
207
|
+
const plan = planAcceptanceProofAttempt({ ...input, adaptiveAdapterAvailable: false });
|
|
208
|
+
if (proofStrategy === 'none' || proofStrategy === 'non-visual-smoke') {
|
|
209
|
+
return {
|
|
210
|
+
applies: plan.applies,
|
|
211
|
+
desirable,
|
|
212
|
+
dispatchTarget,
|
|
213
|
+
proofStrategy,
|
|
214
|
+
action: 'skip',
|
|
215
|
+
reason: 'proof strategy disables browser/mobile visual proof',
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
if (dispatchTarget === 'browser' || dispatchTarget === 'mobile') {
|
|
219
|
+
return {
|
|
220
|
+
applies: plan.applies,
|
|
221
|
+
desirable,
|
|
222
|
+
dispatchTarget,
|
|
223
|
+
proofStrategy,
|
|
224
|
+
action: 'dispatch',
|
|
225
|
+
reason: `${dispatchTarget} proof target matched`,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
if (plan.applies && !desirable) {
|
|
229
|
+
return {
|
|
230
|
+
applies: true,
|
|
231
|
+
desirable,
|
|
232
|
+
dispatchTarget,
|
|
233
|
+
proofStrategy,
|
|
234
|
+
action: 'allow-non-visual',
|
|
235
|
+
reason: 'acceptance proof applies without browser or mobile dispatch',
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
if (plan.applies || desirable) {
|
|
239
|
+
return {
|
|
240
|
+
applies: plan.applies,
|
|
241
|
+
desirable,
|
|
242
|
+
dispatchTarget,
|
|
243
|
+
proofStrategy,
|
|
244
|
+
action: 'error',
|
|
245
|
+
reason: 'visual proof is desirable but no browser or mobile dispatch target matched',
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
applies: false,
|
|
250
|
+
desirable,
|
|
251
|
+
dispatchTarget,
|
|
252
|
+
proofStrategy,
|
|
253
|
+
action: 'error',
|
|
254
|
+
reason: 'proof routing did not match issue text or changed paths',
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
export function shouldApplyVisualProofGate(input) {
|
|
258
|
+
return decideProofRouting(input).applies;
|
|
259
|
+
}
|
|
260
|
+
export function classifyVisualProofDispatchTarget(input) {
|
|
261
|
+
return decideProofRouting(input).dispatchTarget;
|
|
262
|
+
}
|
|
263
|
+
export function isVisualProofDesirable(input) {
|
|
264
|
+
return decideProofRouting(input).desirable;
|
|
265
|
+
}
|
|
266
|
+
export function runnerVisualProofPolicy(config) {
|
|
267
|
+
const visualProof = config.reviewGates.visualProof;
|
|
268
|
+
const acceptanceProof = config.reviewGates.acceptanceProof;
|
|
269
|
+
const preferLegacyVisual = isLegacyVisualProofOverride(acceptanceProof, visualProof);
|
|
270
|
+
const commandTemplate = preferLegacyVisual
|
|
271
|
+
? visualProof.runnerValidationCommand?.trim()
|
|
272
|
+
: acceptanceProof.runnerValidationCommand?.trim() || visualProof.runnerValidationCommand?.trim();
|
|
273
|
+
return {
|
|
274
|
+
commandTemplate: commandTemplate || undefined,
|
|
275
|
+
artifactDir: preferLegacyVisual ? visualProof.artifactDir : acceptanceProof.artifactDir,
|
|
276
|
+
envPassthrough: preferLegacyVisual
|
|
277
|
+
? visualProof.envPassthrough ?? acceptanceProof.envPassthrough ?? []
|
|
278
|
+
: acceptanceProof.envPassthrough?.length
|
|
279
|
+
? acceptanceProof.envPassthrough
|
|
280
|
+
: visualProof.envPassthrough ?? [],
|
|
281
|
+
timeoutMs: preferLegacyVisual
|
|
282
|
+
? visualProof.runnerTimeoutMs ?? acceptanceProof.runnerTimeoutMs
|
|
283
|
+
: acceptanceProof.runnerTimeoutMs ?? visualProof.runnerTimeoutMs,
|
|
284
|
+
minScreenshotArtifacts: visualProof.minScreenshotArtifacts,
|
|
285
|
+
requireWhenDesirable: visualProof.requireWhenDesirable ?? false,
|
|
286
|
+
blockOnMissingProof: !preferLegacyVisual,
|
|
287
|
+
browserProof: {
|
|
288
|
+
strictConsoleErrors: acceptanceProof.browserProof?.strictConsoleErrors ?? false,
|
|
289
|
+
strictNetworkFailures: acceptanceProof.browserProof?.strictNetworkFailures ?? false,
|
|
290
|
+
scenarioPath: acceptanceProof.browserProof?.scenarioPath,
|
|
291
|
+
baseUrl: acceptanceProof.browserProof?.baseUrl,
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
function acceptanceProofApplies(input, proofStrategy, desirable) {
|
|
296
|
+
const acceptanceProof = input.config.reviewGates.acceptanceProof;
|
|
297
|
+
if (!acceptanceProof.enabled) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
if (proofStrategy === 'none' || proofStrategy === 'non-visual-smoke') {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
if (proofStrategy === 'browser-visual' || proofStrategy === 'mobile-visual' || proofStrategy === 'visual') {
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
const issueText = `${input.issue.title}\n${input.issue.body}`;
|
|
307
|
+
const internalRunnerProofOnlyChange = input.changedFiles.length > 0
|
|
308
|
+
&& input.changedFiles.every(isInternalRunnerProofPath);
|
|
309
|
+
const issueNeedsAcceptanceProof = !internalRunnerProofOnlyChange
|
|
310
|
+
&& acceptanceProof.issueTextPatterns.some((pattern) => regexMatches(pattern, issueText));
|
|
311
|
+
const changedAcceptanceProofFiles = input.changedFiles.some((path) => acceptanceProof.changedPathGlobs.some((pattern) => globMatches(pattern, path)));
|
|
312
|
+
return issueNeedsAcceptanceProof || changedAcceptanceProofFiles || desirable;
|
|
313
|
+
}
|
|
314
|
+
function proofStrategyDispatchTarget(input, proofStrategy) {
|
|
315
|
+
const normalizedFiles = input.changedFiles.map((path) => path.replaceAll('\\', '/').replace(/^\.\//u, ''));
|
|
316
|
+
const issueText = `${input.issue.title}\n${input.issue.body}`;
|
|
317
|
+
if (proofStrategy === 'none' || proofStrategy === 'non-visual-smoke') {
|
|
318
|
+
return 'none';
|
|
319
|
+
}
|
|
320
|
+
if (proofStrategy === 'browser-visual') {
|
|
321
|
+
return 'browser';
|
|
322
|
+
}
|
|
323
|
+
if (proofStrategy === 'mobile-visual') {
|
|
324
|
+
return 'mobile';
|
|
325
|
+
}
|
|
326
|
+
if (normalizedFiles.some(isMobileProofPath) || normalizedFiles.some((path) => isFlutterEntrypoint(path) && isMobileIssueText(issueText))) {
|
|
327
|
+
return 'mobile';
|
|
328
|
+
}
|
|
329
|
+
if (normalizedFiles.some((path) => input.config.reviewGates.visualProof.changedPathGlobs.some((pattern) => globMatches(pattern, path)))) {
|
|
330
|
+
return 'browser';
|
|
331
|
+
}
|
|
332
|
+
return 'none';
|
|
333
|
+
}
|
|
334
|
+
function visualProofDesirable(input, proofStrategy) {
|
|
335
|
+
const visualProof = input.config.reviewGates.visualProof;
|
|
336
|
+
if (!visualProof.enabled) {
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
const issueText = `${input.issue.title}\n${input.issue.body}`;
|
|
340
|
+
const command = runnerVisualProofPolicy(input.config).commandTemplate;
|
|
341
|
+
if (proofStrategy === 'none' || proofStrategy === 'non-visual-smoke') {
|
|
342
|
+
return false;
|
|
343
|
+
}
|
|
344
|
+
if (proofStrategy === 'browser-visual' || proofStrategy === 'mobile-visual' || proofStrategy === 'visual') {
|
|
345
|
+
return Boolean(command);
|
|
346
|
+
}
|
|
347
|
+
const internalRunnerProofOnlyChange = input.changedFiles.length > 0
|
|
348
|
+
&& input.changedFiles.every(isInternalRunnerProofPath);
|
|
349
|
+
const issueNeedsVisualProof = visualProof.enabled
|
|
350
|
+
&& !internalRunnerProofOnlyChange
|
|
351
|
+
&& visualProof.issueTextPatterns.some((pattern) => regexMatches(pattern, issueText));
|
|
352
|
+
const changedProofFiles = input.changedFiles.filter((path) => visualProof.changedPathGlobs.some((pattern) => globMatches(pattern, path)));
|
|
353
|
+
return issueNeedsVisualProof || changedProofFiles.length > 0;
|
|
354
|
+
}
|
|
355
|
+
function hasAcceptanceProofProfile(config) {
|
|
356
|
+
return Boolean(config.codex.profiles?.['acceptance-proof']);
|
|
357
|
+
}
|
|
358
|
+
function isInternalRunnerProofPath(path) {
|
|
359
|
+
return /^src\/runner\/(?:acceptance-proof|visual-proof-runner)\.ts$/u.test(path)
|
|
360
|
+
|| /^test\/(?:acceptance-proof|visual-proof-runner)\.test\.ts$/u.test(path);
|
|
361
|
+
}
|
|
362
|
+
function isLegacyVisualProofOverride(acceptanceProof, visualProof) {
|
|
363
|
+
const defaultMobileCommand = 'codex-orchestrator visual-proof mobile --issue ${issueNumber}';
|
|
364
|
+
const defaultAutoCommand = 'codex-orchestrator visual-proof auto --issue ${issueNumber}';
|
|
365
|
+
const acceptanceCommand = acceptanceProof.runnerValidationCommand?.trim() || '';
|
|
366
|
+
return (acceptanceCommand === defaultMobileCommand || acceptanceCommand === defaultAutoCommand)
|
|
367
|
+
&& Boolean(visualProof.runnerValidationCommand?.trim())
|
|
368
|
+
&& visualProof.runnerValidationCommand?.trim() !== defaultMobileCommand
|
|
369
|
+
&& visualProof.runnerValidationCommand?.trim() !== defaultAutoCommand;
|
|
370
|
+
}
|
|
371
|
+
function isMobileProofPath(path) {
|
|
372
|
+
return /^(?:android|ios)\//u.test(path)
|
|
373
|
+
|| /\.(?:xcodeproj|xcworkspace)\//u.test(path)
|
|
374
|
+
|| /(?:^|\/)(?:build\.gradle|build\.gradle\.kts|gradlew|gradlew\.bat)$/u.test(path);
|
|
375
|
+
}
|
|
376
|
+
function isFlutterEntrypoint(path) {
|
|
377
|
+
return path === 'pubspec.yaml' || /^lib\/.+\.dart$/u.test(path);
|
|
378
|
+
}
|
|
379
|
+
function isMobileIssueText(text) {
|
|
380
|
+
return /\b(?:android|ios|iphone|ipad|flutter|mobile|emulator|apk|aab|dart)\b/iu.test(text);
|
|
381
|
+
}
|
|
382
|
+
function regexMatches(pattern, text) {
|
|
383
|
+
return new RegExp(pattern, 'iu').test(text);
|
|
384
|
+
}
|
|
385
|
+
function mergeProofArtifacts(left, right) {
|
|
386
|
+
const seen = new Set(left.map((artifact) => artifact.url ?? artifact.path ?? artifact.description));
|
|
387
|
+
const merged = [...left];
|
|
388
|
+
for (const artifact of right) {
|
|
389
|
+
const key = artifact.url ?? artifact.path ?? artifact.description;
|
|
390
|
+
if (seen.has(key)) {
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
seen.add(key);
|
|
394
|
+
merged.push(artifact);
|
|
395
|
+
}
|
|
396
|
+
return merged;
|
|
397
|
+
}
|
|
398
|
+
function uniqueStrings(values) {
|
|
399
|
+
return Array.from(new Set(values));
|
|
400
|
+
}
|
|
401
|
+
//# sourceMappingURL=acceptance-proof-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acceptance-proof-loop.js","sourceRoot":"","sources":["../../../src/runner/acceptance-proof-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { CodexCommandRunInput, CodexCommandRunResult } from '../codex/command-adapter.js';
|
|
2
2
|
import type { CodexOrchestratorConfig } from '../config/schema.js';
|
|
3
|
-
import type { GitWorktreeManager } from '../git/worktree.js';
|
|
4
3
|
import type { GitHubIssue } from '../github/issues.js';
|
|
5
4
|
import type { ScopedCompletionReport } from './completion-report.js';
|
|
6
|
-
import type {
|
|
7
|
-
import { type AcceptanceProofAttemptEvidence } from './acceptance-proof.js';
|
|
5
|
+
import type { AcceptanceProofAdapterResult } from './acceptance-proof-loop.js';
|
|
8
6
|
export type { AcceptanceProofAttemptEvidence } from './acceptance-proof.js';
|
|
9
7
|
export interface RunAcceptanceProofAttemptInput {
|
|
10
8
|
config: CodexOrchestratorConfig;
|
|
@@ -16,26 +14,10 @@ export interface RunAcceptanceProofAttemptInput {
|
|
|
16
14
|
codexAdapter: {
|
|
17
15
|
run(input: CodexCommandRunInput): Promise<CodexCommandRunResult>;
|
|
18
16
|
};
|
|
19
|
-
git: Pick<GitWorktreeManager, 'collectSessionChangeSet'>;
|
|
20
|
-
beforeHead: string;
|
|
21
17
|
sessionId: string;
|
|
22
18
|
branchName: string;
|
|
23
19
|
workflowPromptText: string;
|
|
24
20
|
logPath?: string;
|
|
25
21
|
}
|
|
26
|
-
export
|
|
27
|
-
status: 'passed' | 'blocked';
|
|
28
|
-
changedFiles: string[];
|
|
29
|
-
validation: RunnerValidationLine[];
|
|
30
|
-
artifacts: ScopedCompletionReport['artifacts'];
|
|
31
|
-
residualRisks: string[];
|
|
32
|
-
blockers: string[];
|
|
33
|
-
evidence: AcceptanceProofAttemptEvidence;
|
|
34
|
-
}
|
|
35
|
-
export declare function shouldRunAcceptanceProofAttempt(input: {
|
|
36
|
-
config: CodexOrchestratorConfig;
|
|
37
|
-
issue: GitHubIssue;
|
|
38
|
-
changedFiles: string[];
|
|
39
|
-
}): boolean;
|
|
40
|
-
export declare function runAcceptanceProofAttempt(input: RunAcceptanceProofAttemptInput): Promise<AcceptanceProofAttemptResult>;
|
|
22
|
+
export declare function runAcceptanceProofAdapter(input: RunAcceptanceProofAttemptInput): Promise<AcceptanceProofAdapterResult>;
|
|
41
23
|
//# sourceMappingURL=acceptance-proof-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance-proof-runner.d.ts","sourceRoot":"","sources":["../../../src/runner/acceptance-proof-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"acceptance-proof-runner.d.ts","sourceRoot":"","sources":["../../../src/runner/acceptance-proof-runner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC/F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAG/E,YAAY,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,uBAAuB,CAAC;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,sBAAsB,CAAC;IAC7C,YAAY,EAAE;QAAE,GAAG,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;KAAE,CAAC;IACnF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,4BAA4B,CAAC,CAqEvC"}
|
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
1
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
2
|
import { dirname, join } from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
import { buildAcceptanceProofReportOutcome, buildBlockedAcceptanceProofOutcome, createAcceptanceProofDiffCapture, readAcceptanceProofReport, uiEvidenceFailureDimensions, } from './acceptance-proof.js';
|
|
3
|
+
import { uiEvidenceFailureDimensions } from './acceptance-proof.js';
|
|
6
4
|
import { cleanupSessionCodexHome, sessionCodexHomePath } from './session-home.js';
|
|
7
|
-
export function
|
|
8
|
-
const acceptanceProof = input.config.reviewGates.acceptanceProof;
|
|
9
|
-
if (!acceptanceProof.enabled) {
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
const issueText = `${input.issue.title}\n${input.issue.body}`;
|
|
13
|
-
return acceptanceProof.issueTextPatterns.some((pattern) => new RegExp(pattern, 'iu').test(issueText))
|
|
14
|
-
|| input.changedFiles.some((path) => acceptanceProof.changedPathGlobs.some((pattern) => globMatches(pattern, path)));
|
|
15
|
-
}
|
|
16
|
-
export async function runAcceptanceProofAttempt(input) {
|
|
5
|
+
export async function runAcceptanceProofAdapter(input) {
|
|
17
6
|
const proofDir = join(input.worktreePath, input.config.reviewGates.acceptanceProof.artifactDir, `issue-${input.issue.number}`);
|
|
18
7
|
const proofReportPath = join(proofDir, 'acceptance-proof-report.json');
|
|
19
8
|
const proofSessionId = `${input.sessionId}-acceptance-proof`;
|
|
@@ -34,10 +23,6 @@ export async function runAcceptanceProofAttempt(input) {
|
|
|
34
23
|
worktreePath: input.worktreePath,
|
|
35
24
|
});
|
|
36
25
|
await writeFile(proofPromptPath, promptText, 'utf8');
|
|
37
|
-
const proofDiffCapture = await createAcceptanceProofDiffCapture({
|
|
38
|
-
worktreePath: input.worktreePath,
|
|
39
|
-
changedFiles: input.changedFiles,
|
|
40
|
-
});
|
|
41
26
|
let proofResult;
|
|
42
27
|
try {
|
|
43
28
|
proofResult = await input.codexAdapter.run({
|
|
@@ -65,73 +50,17 @@ export async function runAcceptanceProofAttempt(input) {
|
|
|
65
50
|
finally {
|
|
66
51
|
await cleanupSessionCodexHome(isolatedHomePath);
|
|
67
52
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
baseHead: input.beforeHead,
|
|
71
|
-
});
|
|
72
|
-
const proofPhaseChangedFiles = await proofDiffCapture.collectProofPhaseChangedFiles(changeSet.changedPaths);
|
|
73
|
-
const reportRead = await readAcceptanceProofReport(proofReportPath);
|
|
74
|
-
if (reportRead.kind === 'missing') {
|
|
75
|
-
return blocked({
|
|
76
|
-
commandExitCode: proofResult.exitCode,
|
|
77
|
-
commandOutputSummary: `Codex exited with code ${proofResult.exitCode}: ${proofResult.stderr || proofResult.stdout}`,
|
|
78
|
-
proofPromptPath,
|
|
79
|
-
proofReportPath,
|
|
80
|
-
proofDir,
|
|
81
|
-
changedFiles: changeSet.changedPaths,
|
|
82
|
-
artifactPaths: proofPhaseChangedFiles,
|
|
83
|
-
validationSummary: 'Acceptance proof blocked: proof session did not write CODEX_ORCHESTRATOR_PROOF_REPORT_PATH.',
|
|
84
|
-
blockers: ['Acceptance proof blocked: proof session did not write CODEX_ORCHESTRATOR_PROOF_REPORT_PATH.'],
|
|
85
|
-
residualRisks: [],
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
if (reportRead.kind === 'invalid') {
|
|
89
|
-
return blocked({
|
|
90
|
-
commandExitCode: proofResult.exitCode,
|
|
91
|
-
commandOutputSummary: `Codex exited with code ${proofResult.exitCode}: ${proofResult.stderr || proofResult.stdout}`,
|
|
92
|
-
proofPromptPath,
|
|
93
|
-
proofReportPath,
|
|
94
|
-
proofDir,
|
|
95
|
-
changedFiles: changeSet.changedPaths,
|
|
96
|
-
artifactPaths: proofPhaseChangedFiles,
|
|
97
|
-
validationSummary: reportRead.message,
|
|
98
|
-
blockers: [`Acceptance proof blocked: ${reportRead.message}`],
|
|
99
|
-
residualRisks: [],
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
const outcome = buildAcceptanceProofReportOutcome({
|
|
53
|
+
return {
|
|
54
|
+
adapterKind: 'adaptive',
|
|
103
55
|
command: 'adaptive acceptance proof',
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
proofPhaseChangedFiles,
|
|
107
|
-
artifactExists: (path) => existsSync(join(input.worktreePath, path)),
|
|
108
|
-
commandExitCode: proofResult.exitCode,
|
|
109
|
-
commandOutputSummary: `proof session exited ${proofResult.exitCode}: ${proofResult.stderr || proofResult.stdout}`,
|
|
56
|
+
exitCode: proofResult.exitCode,
|
|
57
|
+
outputSummary: `proof session exited ${proofResult.exitCode}: ${proofResult.stderr || proofResult.stdout}`,
|
|
110
58
|
promptPath: proofPromptPath,
|
|
111
59
|
reportPath: proofReportPath,
|
|
112
60
|
artifactDir: proofDir,
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (outcome.status !== 'passed') {
|
|
117
|
-
return {
|
|
118
|
-
status: 'blocked',
|
|
119
|
-
changedFiles: changeSet.changedPaths,
|
|
120
|
-
validation: outcome.validation,
|
|
121
|
-
artifacts: outcome.artifacts,
|
|
122
|
-
residualRisks: outcome.residualRisks,
|
|
123
|
-
blockers: outcome.blockers,
|
|
124
|
-
evidence: outcome.evidence,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
return {
|
|
128
|
-
status: 'passed',
|
|
129
|
-
changedFiles: changeSet.changedPaths,
|
|
130
|
-
validation: outcome.validation,
|
|
131
|
-
artifacts: outcome.artifacts,
|
|
132
|
-
residualRisks: outcome.residualRisks,
|
|
133
|
-
blockers: [],
|
|
134
|
-
evidence: outcome.evidence,
|
|
61
|
+
artifactPaths: [],
|
|
62
|
+
preliminaryArtifacts: [],
|
|
63
|
+
residualRisks: [],
|
|
135
64
|
};
|
|
136
65
|
}
|
|
137
66
|
function buildAcceptanceProofPrompt(input) {
|
|
@@ -171,27 +100,4 @@ function buildAcceptanceProofPrompt(input) {
|
|
|
171
100
|
'Schema: { "status": "passed" | "needs-rework" | "blocked", "criteria": { "id": string, "description": string, "status": "passed" | "failed" | "unknown", "confidence": "high" | "medium" | "low", "reasoningSummary": string, "artifactRefs": string[] }[], "artifacts": { "type": "screenshot" | "ui-dump" | "log" | "smoke-output" | "other", "path"?: string, "url"?: string, "description": string }[], "uiEvidence"?: { "workflowScope": { "entrypoint": string, "path": string[], "screenState": string, "authPath"?: "real-login" | "seeded-session" | "not-required" | "blocked", "authShortcutReason"?: string }, "viewportCoverage": { "name": string, "width": number, "height": number, "artifactRefs": string[], "requiredBy": "desktop-web-layout" | "mobile-or-responsive" | "issue-specific" | "other" }[], "artifactFreshness": { "currentArtifactRefs": string[], "checkedAfterFinalRun": boolean }, "layoutReview": { "checked": boolean, "findings": { "summary": string, "artifactRefs": string[] }[] }, "copyReview": { "checked": boolean, "acceptedTerms"?: string[], "rejectedTermsAbsent"?: string[], "findings": { "summary": string, "artifactRefs": string[] }[] }, "sourceInputs": { "acceptanceCriteriaRefs": string[], "implementationEvidenceRefs": string[], "reproductionSignalRefs"?: string[], "manualQaPlanRefs"?: string[], "runtimeValidationRefs"?: string[] } }, "proofScriptRepair"?: { "changedPaths": string[], "summary": string }, "proofPhaseDiff": { "allowedProofPaths": string[], "forbiddenProductPaths": string[] }, "reworkRequest"?: { "summary": string, "requiredChanges": string[], "evidenceRefs": string[] }, "residualRisks": string[] }.',
|
|
172
101
|
].join('\n\n');
|
|
173
102
|
}
|
|
174
|
-
function blocked(input) {
|
|
175
|
-
const outcome = buildBlockedAcceptanceProofOutcome({
|
|
176
|
-
command: 'adaptive acceptance proof',
|
|
177
|
-
promptPath: input.proofPromptPath,
|
|
178
|
-
reportPath: input.proofReportPath,
|
|
179
|
-
artifactDir: input.proofDir,
|
|
180
|
-
artifactPaths: input.artifactPaths,
|
|
181
|
-
validationSummary: input.validationSummary,
|
|
182
|
-
blockers: input.blockers,
|
|
183
|
-
residualRisks: input.residualRisks,
|
|
184
|
-
commandExitCode: input.commandExitCode,
|
|
185
|
-
commandOutputSummary: input.commandOutputSummary,
|
|
186
|
-
});
|
|
187
|
-
return {
|
|
188
|
-
status: 'blocked',
|
|
189
|
-
changedFiles: input.changedFiles,
|
|
190
|
-
validation: outcome.validation,
|
|
191
|
-
artifacts: outcome.artifacts,
|
|
192
|
-
residualRisks: outcome.residualRisks,
|
|
193
|
-
blockers: outcome.blockers,
|
|
194
|
-
evidence: outcome.evidence,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
103
|
//# sourceMappingURL=acceptance-proof-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance-proof-runner.js","sourceRoot":"","sources":["../../../src/runner/acceptance-proof-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"acceptance-proof-runner.js","sourceRoot":"","sources":["../../../src/runner/acceptance-proof-runner.ts"],"names":[],"mappings":"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"}
|