codex-orchestrator 0.1.50 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +45 -389
- package/dist/src/index.d.ts +16 -46
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -24
- package/dist/src/index.js.map +1 -1
- package/dist/src/v2/acceptance-proof.d.ts +111 -0
- package/dist/src/v2/acceptance-proof.d.ts.map +1 -0
- package/dist/src/v2/acceptance-proof.js +427 -0
- package/dist/src/v2/acceptance-proof.js.map +1 -0
- package/dist/src/v2/adapters/command.d.ts.map +1 -0
- package/dist/src/v2/adapters/command.js.map +1 -0
- package/dist/src/v2/adapters/durable-atomic-file.d.ts.map +1 -0
- package/dist/src/v2/adapters/durable-atomic-file.js.map +1 -0
- package/dist/src/v2/adapters/gh-cli.d.ts.map +1 -0
- package/dist/src/v2/adapters/gh-cli.js.map +1 -0
- package/dist/src/v2/adapters/gh-issue-adapter.d.ts.map +1 -0
- package/dist/src/v2/adapters/gh-issue-adapter.js.map +1 -0
- package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts.map +1 -0
- package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -0
- package/dist/src/v2/adapters/issues.d.ts.map +1 -0
- package/dist/src/v2/adapters/issues.js.map +1 -0
- package/dist/src/v2/adapters/mission-coordinator-lock.d.ts.map +1 -0
- package/dist/src/v2/adapters/mission-coordinator-lock.js.map +1 -0
- package/dist/src/v2/adapters/path-policy.d.ts.map +1 -0
- package/dist/src/v2/adapters/path-policy.js.map +1 -0
- package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -0
- package/dist/src/v2/adapters/pull-requests.js.map +1 -0
- package/dist/src/v2/adapters/target-activity-fence.d.ts.map +1 -0
- package/dist/src/{runner → v2/adapters}/target-activity-fence.js +1 -1
- package/dist/src/v2/adapters/target-activity-fence.js.map +1 -0
- package/dist/src/{git → v2/adapters}/worktree.d.ts +1 -1
- package/dist/src/v2/adapters/worktree.d.ts.map +1 -0
- package/dist/src/{git → v2/adapters}/worktree.js +2 -2
- package/dist/src/v2/adapters/worktree.js.map +1 -0
- package/dist/src/v2/atomic-store.d.ts +36 -0
- package/dist/src/v2/atomic-store.d.ts.map +1 -0
- package/dist/src/v2/atomic-store.js +328 -0
- package/dist/src/v2/atomic-store.js.map +1 -0
- package/dist/src/v2/candidate-cli.d.ts +22 -0
- package/dist/src/v2/candidate-cli.d.ts.map +1 -0
- package/dist/src/v2/candidate-cli.js +161 -0
- package/dist/src/v2/candidate-cli.js.map +1 -0
- package/dist/src/v2/checked-change.d.ts +49 -0
- package/dist/src/v2/checked-change.d.ts.map +1 -0
- package/dist/src/v2/checked-change.js +139 -0
- package/dist/src/v2/checked-change.js.map +1 -0
- package/dist/src/v2/cli-contract.d.ts +8 -0
- package/dist/src/v2/cli-contract.d.ts.map +1 -0
- package/dist/src/v2/cli-contract.js +32 -0
- package/dist/src/v2/cli-contract.js.map +1 -0
- package/dist/src/v2/codex-process.d.ts +71 -0
- package/dist/src/v2/codex-process.d.ts.map +1 -0
- package/dist/src/v2/codex-process.js +404 -0
- package/dist/src/v2/codex-process.js.map +1 -0
- package/dist/src/v2/config.d.ts +45 -0
- package/dist/src/v2/config.d.ts.map +1 -0
- package/dist/src/v2/config.js +139 -0
- package/dist/src/v2/config.js.map +1 -0
- package/dist/src/v2/containment.d.ts +55 -0
- package/dist/src/v2/containment.d.ts.map +1 -0
- package/dist/src/v2/containment.js +370 -0
- package/dist/src/v2/containment.js.map +1 -0
- package/dist/src/v2/implementation-report.d.ts +18 -0
- package/dist/src/v2/implementation-report.d.ts.map +1 -0
- package/dist/src/v2/implementation-report.js +147 -0
- package/dist/src/v2/implementation-report.js.map +1 -0
- package/dist/src/v2/legacy-cutover.d.ts +52 -0
- package/dist/src/v2/legacy-cutover.d.ts.map +1 -0
- package/dist/src/v2/legacy-cutover.js +87 -0
- package/dist/src/v2/legacy-cutover.js.map +1 -0
- package/dist/src/v2/mobile-lease.d.ts +97 -0
- package/dist/src/v2/mobile-lease.d.ts.map +1 -0
- package/dist/src/v2/mobile-lease.js +253 -0
- package/dist/src/v2/mobile-lease.js.map +1 -0
- package/dist/src/v2/proof-report.d.ts +118 -0
- package/dist/src/v2/proof-report.d.ts.map +1 -0
- package/dist/src/v2/proof-report.js +703 -0
- package/dist/src/v2/proof-report.js.map +1 -0
- package/dist/src/v2/proof-store.d.ts +42 -0
- package/dist/src/v2/proof-store.d.ts.map +1 -0
- package/dist/src/v2/proof-store.js +180 -0
- package/dist/src/v2/proof-store.js.map +1 -0
- package/dist/src/v2/report-envelope.d.ts +4 -0
- package/dist/src/v2/report-envelope.d.ts.map +1 -0
- package/dist/src/v2/report-envelope.js +46 -0
- package/dist/src/v2/report-envelope.js.map +1 -0
- package/dist/src/v2/run-issue.d.ts +213 -0
- package/dist/src/v2/run-issue.d.ts.map +1 -0
- package/dist/src/v2/run-issue.js +906 -0
- package/dist/src/v2/run-issue.js.map +1 -0
- package/dist/src/v2/run-store.d.ts +136 -0
- package/dist/src/v2/run-store.d.ts.map +1 -0
- package/dist/src/v2/run-store.js +346 -0
- package/dist/src/v2/run-store.js.map +1 -0
- package/dist/src/v2/runtime-assets.d.ts +31 -0
- package/dist/src/v2/runtime-assets.d.ts.map +1 -0
- package/dist/src/v2/runtime-assets.js +473 -0
- package/dist/src/v2/runtime-assets.js.map +1 -0
- package/dist/src/v2/runtime.d.ts +137 -0
- package/dist/src/v2/runtime.d.ts.map +1 -0
- package/dist/src/v2/runtime.js +847 -0
- package/dist/src/v2/runtime.js.map +1 -0
- package/dist/src/v2/setup-cli.d.ts +5 -0
- package/dist/src/v2/setup-cli.d.ts.map +1 -0
- package/dist/src/v2/setup-cli.js +83 -0
- package/dist/src/v2/setup-cli.js.map +1 -0
- package/dist/src/v2/setup-runtime.d.ts +6 -0
- package/dist/src/v2/setup-runtime.d.ts.map +1 -0
- package/dist/src/v2/setup-runtime.js +213 -0
- package/dist/src/v2/setup-runtime.js.map +1 -0
- package/dist/src/v2/setup-store.d.ts +19 -0
- package/dist/src/v2/setup-store.d.ts.map +1 -0
- package/dist/src/v2/setup-store.js +208 -0
- package/dist/src/v2/setup-store.js.map +1 -0
- package/dist/src/v2/setup.d.ts +147 -0
- package/dist/src/v2/setup.d.ts.map +1 -0
- package/dist/src/v2/setup.js +529 -0
- package/dist/src/v2/setup.js.map +1 -0
- package/docs/deep-dive.md +54 -803
- package/internal-skills/acceptance-proof/SKILL.md +14 -0
- package/internal-skills/acceptance-proof/references/android.md +14 -0
- package/internal-skills/acceptance-proof/references/browser.md +13 -0
- package/internal-skills/acceptance-proof/references/ios.md +14 -0
- package/internal-skills/acceptance-proof/tools/android-lease.mjs +280 -0
- package/internal-skills/acceptance-proof/tools/ios-lease.mjs +288 -0
- package/internal-skills/agent-auto/SKILL.md +14 -0
- package/package.json +11 -18
- package/bridge-runtime.json +0 -2719
- package/dist/src/bridge-runtime.d.ts +0 -17
- package/dist/src/bridge-runtime.d.ts.map +0 -1
- package/dist/src/bridge-runtime.js +0 -168
- package/dist/src/bridge-runtime.js.map +0 -1
- package/dist/src/cli.d.ts +0 -3
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -569
- package/dist/src/cli.js.map +0 -1
- package/dist/src/codex/command-adapter.d.ts +0 -47
- package/dist/src/codex/command-adapter.d.ts.map +0 -1
- package/dist/src/codex/command-adapter.js +0 -169
- package/dist/src/codex/command-adapter.js.map +0 -1
- package/dist/src/codex/mobile-device-guard.d.ts +0 -7
- package/dist/src/codex/mobile-device-guard.d.ts.map +0 -1
- package/dist/src/codex/mobile-device-guard.js +0 -63
- package/dist/src/codex/mobile-device-guard.js.map +0 -1
- package/dist/src/config/constants.d.ts +0 -6
- package/dist/src/config/constants.d.ts.map +0 -1
- package/dist/src/config/constants.js +0 -19
- package/dist/src/config/constants.js.map +0 -1
- package/dist/src/config/schema.d.ts +0 -234
- package/dist/src/config/schema.d.ts.map +0 -1
- package/dist/src/config/schema.js +0 -673
- package/dist/src/config/schema.js.map +0 -1
- package/dist/src/fs/durable-atomic-file.d.ts.map +0 -1
- package/dist/src/fs/durable-atomic-file.js.map +0 -1
- package/dist/src/git/base-branch.d.ts +0 -26
- package/dist/src/git/base-branch.d.ts.map +0 -1
- package/dist/src/git/base-branch.js +0 -45
- package/dist/src/git/base-branch.js.map +0 -1
- package/dist/src/git/worktree.d.ts.map +0 -1
- package/dist/src/git/worktree.js.map +0 -1
- package/dist/src/github/gh-cli.d.ts.map +0 -1
- package/dist/src/github/gh-cli.js.map +0 -1
- package/dist/src/github/gh-issue-adapter.d.ts.map +0 -1
- package/dist/src/github/gh-issue-adapter.js.map +0 -1
- package/dist/src/github/gh-pull-request-adapter.d.ts.map +0 -1
- package/dist/src/github/gh-pull-request-adapter.js.map +0 -1
- package/dist/src/github/issues.d.ts.map +0 -1
- package/dist/src/github/issues.js.map +0 -1
- package/dist/src/github/pull-requests.d.ts.map +0 -1
- package/dist/src/github/pull-requests.js.map +0 -1
- package/dist/src/package-info.d.ts +0 -6
- package/dist/src/package-info.d.ts.map +0 -1
- package/dist/src/package-info.js +0 -13
- package/dist/src/package-info.js.map +0 -1
- package/dist/src/path-policy.d.ts.map +0 -1
- package/dist/src/path-policy.js.map +0 -1
- package/dist/src/process/command.d.ts.map +0 -1
- package/dist/src/process/command.js.map +0 -1
- package/dist/src/review-handoff.d.ts +0 -3
- package/dist/src/review-handoff.d.ts.map +0 -1
- package/dist/src/review-handoff.js +0 -8
- package/dist/src/review-handoff.js.map +0 -1
- package/dist/src/runner/acceptance-proof-loop.d.ts +0 -97
- package/dist/src/runner/acceptance-proof-loop.d.ts.map +0 -1
- package/dist/src/runner/acceptance-proof-loop.js +0 -404
- package/dist/src/runner/acceptance-proof-loop.js.map +0 -1
- package/dist/src/runner/acceptance-proof-runner.d.ts +0 -24
- package/dist/src/runner/acceptance-proof-runner.d.ts.map +0 -1
- package/dist/src/runner/acceptance-proof-runner.js +0 -121
- package/dist/src/runner/acceptance-proof-runner.js.map +0 -1
- package/dist/src/runner/acceptance-proof.d.ts +0 -189
- package/dist/src/runner/acceptance-proof.d.ts.map +0 -1
- package/dist/src/runner/acceptance-proof.js +0 -594
- package/dist/src/runner/acceptance-proof.js.map +0 -1
- package/dist/src/runner/agent-attempt.d.ts +0 -105
- package/dist/src/runner/agent-attempt.d.ts.map +0 -1
- package/dist/src/runner/agent-attempt.js +0 -245
- package/dist/src/runner/agent-attempt.js.map +0 -1
- package/dist/src/runner/android-visual-proof-command.d.ts +0 -26
- package/dist/src/runner/android-visual-proof-command.d.ts.map +0 -1
- package/dist/src/runner/android-visual-proof-command.js +0 -592
- package/dist/src/runner/android-visual-proof-command.js.map +0 -1
- package/dist/src/runner/auto-visual-proof-command.d.ts +0 -15
- package/dist/src/runner/auto-visual-proof-command.d.ts.map +0 -1
- package/dist/src/runner/auto-visual-proof-command.js +0 -64
- package/dist/src/runner/auto-visual-proof-command.js.map +0 -1
- package/dist/src/runner/browser-proof-contract.d.ts +0 -134
- package/dist/src/runner/browser-proof-contract.d.ts.map +0 -1
- package/dist/src/runner/browser-proof-contract.js +0 -400
- package/dist/src/runner/browser-proof-contract.js.map +0 -1
- package/dist/src/runner/browser-visual-proof-command.d.ts +0 -101
- package/dist/src/runner/browser-visual-proof-command.d.ts.map +0 -1
- package/dist/src/runner/browser-visual-proof-command.js +0 -532
- package/dist/src/runner/browser-visual-proof-command.js.map +0 -1
- package/dist/src/runner/command-utils.d.ts +0 -15
- package/dist/src/runner/command-utils.d.ts.map +0 -1
- package/dist/src/runner/command-utils.js +0 -228
- package/dist/src/runner/command-utils.js.map +0 -1
- package/dist/src/runner/completion-report.d.ts +0 -121
- package/dist/src/runner/completion-report.d.ts.map +0 -1
- package/dist/src/runner/completion-report.js +0 -381
- package/dist/src/runner/completion-report.js.map +0 -1
- package/dist/src/runner/context-snapshot.d.ts +0 -33
- package/dist/src/runner/context-snapshot.d.ts.map +0 -1
- package/dist/src/runner/context-snapshot.js +0 -99
- package/dist/src/runner/context-snapshot.js.map +0 -1
- package/dist/src/runner/daemon-command.d.ts +0 -30
- package/dist/src/runner/daemon-command.d.ts.map +0 -1
- package/dist/src/runner/daemon-command.js +0 -262
- package/dist/src/runner/daemon-command.js.map +0 -1
- package/dist/src/runner/doctor-command.d.ts +0 -41
- package/dist/src/runner/doctor-command.d.ts.map +0 -1
- package/dist/src/runner/doctor-command.js +0 -177
- package/dist/src/runner/doctor-command.js.map +0 -1
- package/dist/src/runner/durable-run-summary.d.ts +0 -80
- package/dist/src/runner/durable-run-summary.d.ts.map +0 -1
- package/dist/src/runner/durable-run-summary.js +0 -200
- package/dist/src/runner/durable-run-summary.js.map +0 -1
- package/dist/src/runner/flutter-sdk-discovery.d.ts +0 -5
- package/dist/src/runner/flutter-sdk-discovery.d.ts.map +0 -1
- package/dist/src/runner/flutter-sdk-discovery.js +0 -103
- package/dist/src/runner/flutter-sdk-discovery.js.map +0 -1
- package/dist/src/runner/fresh-context-review.d.ts +0 -22
- package/dist/src/runner/fresh-context-review.d.ts.map +0 -1
- package/dist/src/runner/fresh-context-review.js +0 -177
- package/dist/src/runner/fresh-context-review.js.map +0 -1
- package/dist/src/runner/handoff-evidence.d.ts +0 -141
- package/dist/src/runner/handoff-evidence.d.ts.map +0 -1
- package/dist/src/runner/handoff-evidence.js +0 -543
- package/dist/src/runner/handoff-evidence.js.map +0 -1
- package/dist/src/runner/hygiene-cleanup.d.ts +0 -15
- package/dist/src/runner/hygiene-cleanup.d.ts.map +0 -1
- package/dist/src/runner/hygiene-cleanup.js +0 -25
- package/dist/src/runner/hygiene-cleanup.js.map +0 -1
- package/dist/src/runner/ios-visual-proof-command.d.ts +0 -25
- package/dist/src/runner/ios-visual-proof-command.d.ts.map +0 -1
- package/dist/src/runner/ios-visual-proof-command.js +0 -353
- package/dist/src/runner/ios-visual-proof-command.js.map +0 -1
- package/dist/src/runner/issue-state-machine.d.ts +0 -39
- package/dist/src/runner/issue-state-machine.d.ts.map +0 -1
- package/dist/src/runner/issue-state-machine.js +0 -124
- package/dist/src/runner/issue-state-machine.js.map +0 -1
- package/dist/src/runner/issue-tree.d.ts +0 -65
- package/dist/src/runner/issue-tree.d.ts.map +0 -1
- package/dist/src/runner/issue-tree.js +0 -474
- package/dist/src/runner/issue-tree.js.map +0 -1
- package/dist/src/runner/lifecycle-events.d.ts +0 -44
- package/dist/src/runner/lifecycle-events.d.ts.map +0 -1
- package/dist/src/runner/lifecycle-events.js +0 -108
- package/dist/src/runner/lifecycle-events.js.map +0 -1
- package/dist/src/runner/local-execution-session.d.ts +0 -112
- package/dist/src/runner/local-execution-session.d.ts.map +0 -1
- package/dist/src/runner/local-execution-session.js +0 -1064
- package/dist/src/runner/local-execution-session.js.map +0 -1
- package/dist/src/runner/local-state.d.ts +0 -44
- package/dist/src/runner/local-state.d.ts.map +0 -1
- package/dist/src/runner/local-state.js +0 -150
- package/dist/src/runner/local-state.js.map +0 -1
- package/dist/src/runner/mission-activation.d.ts +0 -29
- package/dist/src/runner/mission-activation.d.ts.map +0 -1
- package/dist/src/runner/mission-activation.js +0 -54
- package/dist/src/runner/mission-activation.js.map +0 -1
- package/dist/src/runner/mission-agent-broker.d.ts +0 -53
- package/dist/src/runner/mission-agent-broker.d.ts.map +0 -1
- package/dist/src/runner/mission-agent-broker.js +0 -182
- package/dist/src/runner/mission-agent-broker.js.map +0 -1
- package/dist/src/runner/mission-cancellation.d.ts +0 -77
- package/dist/src/runner/mission-cancellation.d.ts.map +0 -1
- package/dist/src/runner/mission-cancellation.js +0 -180
- package/dist/src/runner/mission-cancellation.js.map +0 -1
- package/dist/src/runner/mission-canonical-path.d.ts +0 -34
- package/dist/src/runner/mission-canonical-path.d.ts.map +0 -1
- package/dist/src/runner/mission-canonical-path.js +0 -121
- package/dist/src/runner/mission-canonical-path.js.map +0 -1
- package/dist/src/runner/mission-capability-kernel.d.ts +0 -34
- package/dist/src/runner/mission-capability-kernel.d.ts.map +0 -1
- package/dist/src/runner/mission-capability-kernel.js +0 -158
- package/dist/src/runner/mission-capability-kernel.js.map +0 -1
- package/dist/src/runner/mission-check-policy.d.ts +0 -17
- package/dist/src/runner/mission-check-policy.d.ts.map +0 -1
- package/dist/src/runner/mission-check-policy.js +0 -31
- package/dist/src/runner/mission-check-policy.js.map +0 -1
- package/dist/src/runner/mission-coordinator-lock.d.ts.map +0 -1
- package/dist/src/runner/mission-coordinator-lock.js.map +0 -1
- package/dist/src/runner/mission-deployment.d.ts +0 -21
- package/dist/src/runner/mission-deployment.d.ts.map +0 -1
- package/dist/src/runner/mission-deployment.js +0 -108
- package/dist/src/runner/mission-deployment.js.map +0 -1
- package/dist/src/runner/mission-evaluation.d.ts +0 -61
- package/dist/src/runner/mission-evaluation.d.ts.map +0 -1
- package/dist/src/runner/mission-evaluation.js +0 -183
- package/dist/src/runner/mission-evaluation.js.map +0 -1
- package/dist/src/runner/mission-executor-probe.d.ts +0 -10
- package/dist/src/runner/mission-executor-probe.d.ts.map +0 -1
- package/dist/src/runner/mission-executor-probe.js +0 -180
- package/dist/src/runner/mission-executor-probe.js.map +0 -1
- package/dist/src/runner/mission-git-contracts.d.ts +0 -75
- package/dist/src/runner/mission-git-contracts.d.ts.map +0 -1
- package/dist/src/runner/mission-git-contracts.js +0 -201
- package/dist/src/runner/mission-git-contracts.js.map +0 -1
- package/dist/src/runner/mission-git-runtime-owner-ref.d.ts +0 -13
- package/dist/src/runner/mission-git-runtime-owner-ref.d.ts.map +0 -1
- package/dist/src/runner/mission-git-runtime-owner-ref.js +0 -111
- package/dist/src/runner/mission-git-runtime-owner-ref.js.map +0 -1
- package/dist/src/runner/mission-git-transaction.d.ts +0 -97
- package/dist/src/runner/mission-git-transaction.d.ts.map +0 -1
- package/dist/src/runner/mission-git-transaction.js +0 -1009
- package/dist/src/runner/mission-git-transaction.js.map +0 -1
- package/dist/src/runner/mission-identifiers.d.ts +0 -31
- package/dist/src/runner/mission-identifiers.d.ts.map +0 -1
- package/dist/src/runner/mission-identifiers.js +0 -75
- package/dist/src/runner/mission-identifiers.js.map +0 -1
- package/dist/src/runner/mission-input-snapshot.d.ts +0 -21
- package/dist/src/runner/mission-input-snapshot.d.ts.map +0 -1
- package/dist/src/runner/mission-input-snapshot.js +0 -63
- package/dist/src/runner/mission-input-snapshot.js.map +0 -1
- package/dist/src/runner/mission-ownership.d.ts +0 -38
- package/dist/src/runner/mission-ownership.d.ts.map +0 -1
- package/dist/src/runner/mission-ownership.js +0 -88
- package/dist/src/runner/mission-ownership.js.map +0 -1
- package/dist/src/runner/mission-patch-audit.d.ts +0 -21
- package/dist/src/runner/mission-patch-audit.d.ts.map +0 -1
- package/dist/src/runner/mission-patch-audit.js +0 -186
- package/dist/src/runner/mission-patch-audit.js.map +0 -1
- package/dist/src/runner/mission-path-language.d.ts +0 -6
- package/dist/src/runner/mission-path-language.d.ts.map +0 -1
- package/dist/src/runner/mission-path-language.js +0 -106
- package/dist/src/runner/mission-path-language.js.map +0 -1
- package/dist/src/runner/mission-permit-authority.d.ts +0 -26
- package/dist/src/runner/mission-permit-authority.d.ts.map +0 -1
- package/dist/src/runner/mission-permit-authority.js +0 -145
- package/dist/src/runner/mission-permit-authority.js.map +0 -1
- package/dist/src/runner/mission-plan-parent-coordinator.d.ts +0 -87
- package/dist/src/runner/mission-plan-parent-coordinator.d.ts.map +0 -1
- package/dist/src/runner/mission-plan-parent-coordinator.js +0 -441
- package/dist/src/runner/mission-plan-parent-coordinator.js.map +0 -1
- package/dist/src/runner/mission-plan-parent.d.ts +0 -156
- package/dist/src/runner/mission-plan-parent.d.ts.map +0 -1
- package/dist/src/runner/mission-plan-parent.js +0 -589
- package/dist/src/runner/mission-plan-parent.js.map +0 -1
- package/dist/src/runner/mission-process-executor.d.ts +0 -25
- package/dist/src/runner/mission-process-executor.d.ts.map +0 -1
- package/dist/src/runner/mission-process-executor.js +0 -182
- package/dist/src/runner/mission-process-executor.js.map +0 -1
- package/dist/src/runner/mission-publication-git.d.ts +0 -21
- package/dist/src/runner/mission-publication-git.d.ts.map +0 -1
- package/dist/src/runner/mission-publication-git.js +0 -61
- package/dist/src/runner/mission-publication-git.js.map +0 -1
- package/dist/src/runner/mission-publication.d.ts +0 -192
- package/dist/src/runner/mission-publication.d.ts.map +0 -1
- package/dist/src/runner/mission-publication.js +0 -1001
- package/dist/src/runner/mission-publication.js.map +0 -1
- package/dist/src/runner/mission-quarantine-patch-executor.d.ts +0 -29
- package/dist/src/runner/mission-quarantine-patch-executor.d.ts.map +0 -1
- package/dist/src/runner/mission-quarantine-patch-executor.js +0 -121
- package/dist/src/runner/mission-quarantine-patch-executor.js.map +0 -1
- package/dist/src/runner/mission-repository-executor.d.ts +0 -54
- package/dist/src/runner/mission-repository-executor.d.ts.map +0 -1
- package/dist/src/runner/mission-repository-executor.js +0 -192
- package/dist/src/runner/mission-repository-executor.js.map +0 -1
- package/dist/src/runner/mission-repository-observer.d.ts +0 -8
- package/dist/src/runner/mission-repository-observer.d.ts.map +0 -1
- package/dist/src/runner/mission-repository-observer.js +0 -24
- package/dist/src/runner/mission-repository-observer.js.map +0 -1
- package/dist/src/runner/mission-reservations.d.ts +0 -15
- package/dist/src/runner/mission-reservations.d.ts.map +0 -1
- package/dist/src/runner/mission-reservations.js +0 -116
- package/dist/src/runner/mission-reservations.js.map +0 -1
- package/dist/src/runner/mission-resolution-loop.d.ts +0 -172
- package/dist/src/runner/mission-resolution-loop.d.ts.map +0 -1
- package/dist/src/runner/mission-resolution-loop.js +0 -318
- package/dist/src/runner/mission-resolution-loop.js.map +0 -1
- package/dist/src/runner/mission-runtime-owner.d.ts +0 -36
- package/dist/src/runner/mission-runtime-owner.d.ts.map +0 -1
- package/dist/src/runner/mission-runtime-owner.js +0 -174
- package/dist/src/runner/mission-runtime-owner.js.map +0 -1
- package/dist/src/runner/mission-safe-executor.d.ts +0 -96
- package/dist/src/runner/mission-safe-executor.d.ts.map +0 -1
- package/dist/src/runner/mission-safe-executor.js +0 -288
- package/dist/src/runner/mission-safe-executor.js.map +0 -1
- package/dist/src/runner/mission-sandbox.d.ts +0 -16
- package/dist/src/runner/mission-sandbox.d.ts.map +0 -1
- package/dist/src/runner/mission-sandbox.js +0 -91
- package/dist/src/runner/mission-sandbox.js.map +0 -1
- package/dist/src/runner/mission-scheduler.d.ts +0 -57
- package/dist/src/runner/mission-scheduler.d.ts.map +0 -1
- package/dist/src/runner/mission-scheduler.js +0 -205
- package/dist/src/runner/mission-scheduler.js.map +0 -1
- package/dist/src/runner/mission-scope-expansion.d.ts +0 -47
- package/dist/src/runner/mission-scope-expansion.d.ts.map +0 -1
- package/dist/src/runner/mission-scope-expansion.js +0 -147
- package/dist/src/runner/mission-scope-expansion.js.map +0 -1
- package/dist/src/runner/mission-state-machine.d.ts +0 -118
- package/dist/src/runner/mission-state-machine.d.ts.map +0 -1
- package/dist/src/runner/mission-state-machine.js +0 -316
- package/dist/src/runner/mission-state-machine.js.map +0 -1
- package/dist/src/runner/mission-state-store.d.ts +0 -70
- package/dist/src/runner/mission-state-store.d.ts.map +0 -1
- package/dist/src/runner/mission-state-store.js +0 -916
- package/dist/src/runner/mission-state-store.js.map +0 -1
- package/dist/src/runner/mobile-device-lease.d.ts +0 -11
- package/dist/src/runner/mobile-device-lease.d.ts.map +0 -1
- package/dist/src/runner/mobile-device-lease.js +0 -121
- package/dist/src/runner/mobile-device-lease.js.map +0 -1
- package/dist/src/runner/mobile-visual-proof-command.d.ts +0 -17
- package/dist/src/runner/mobile-visual-proof-command.d.ts.map +0 -1
- package/dist/src/runner/mobile-visual-proof-command.js +0 -168
- package/dist/src/runner/mobile-visual-proof-command.js.map +0 -1
- package/dist/src/runner/plan-auto-command.d.ts +0 -35
- package/dist/src/runner/plan-auto-command.d.ts.map +0 -1
- package/dist/src/runner/plan-auto-command.js +0 -918
- package/dist/src/runner/plan-auto-command.js.map +0 -1
- package/dist/src/runner/plan-auto-recovery.d.ts +0 -83
- package/dist/src/runner/plan-auto-recovery.d.ts.map +0 -1
- package/dist/src/runner/plan-auto-recovery.js +0 -303
- package/dist/src/runner/plan-auto-recovery.js.map +0 -1
- package/dist/src/runner/prompt.d.ts +0 -68
- package/dist/src/runner/prompt.d.ts.map +0 -1
- package/dist/src/runner/prompt.js +0 -202
- package/dist/src/runner/prompt.js.map +0 -1
- package/dist/src/runner/proof-routing.d.ts +0 -73
- package/dist/src/runner/proof-routing.d.ts.map +0 -1
- package/dist/src/runner/proof-routing.js +0 -182
- package/dist/src/runner/proof-routing.js.map +0 -1
- package/dist/src/runner/proof-strategy.d.ts +0 -21
- package/dist/src/runner/proof-strategy.d.ts.map +0 -1
- package/dist/src/runner/proof-strategy.js +0 -26
- package/dist/src/runner/proof-strategy.js.map +0 -1
- package/dist/src/runner/recovery.d.ts +0 -25
- package/dist/src/runner/recovery.d.ts.map +0 -1
- package/dist/src/runner/recovery.js +0 -89
- package/dist/src/runner/recovery.js.map +0 -1
- package/dist/src/runner/review-gate-policy.d.ts +0 -13
- package/dist/src/runner/review-gate-policy.d.ts.map +0 -1
- package/dist/src/runner/review-gate-policy.js +0 -241
- package/dist/src/runner/review-gate-policy.js.map +0 -1
- package/dist/src/runner/review-gates.d.ts +0 -28
- package/dist/src/runner/review-gates.d.ts.map +0 -1
- package/dist/src/runner/review-gates.js +0 -328
- package/dist/src/runner/review-gates.js.map +0 -1
- package/dist/src/runner/rework-policy.d.ts +0 -48
- package/dist/src/runner/rework-policy.d.ts.map +0 -1
- package/dist/src/runner/rework-policy.js +0 -150
- package/dist/src/runner/rework-policy.js.map +0 -1
- package/dist/src/runner/run-log.d.ts +0 -18
- package/dist/src/runner/run-log.d.ts.map +0 -1
- package/dist/src/runner/run-log.js +0 -53
- package/dist/src/runner/run-log.js.map +0 -1
- package/dist/src/runner/runner-handoff-decision.d.ts +0 -48
- package/dist/src/runner/runner-handoff-decision.d.ts.map +0 -1
- package/dist/src/runner/runner-handoff-decision.js +0 -93
- package/dist/src/runner/runner-handoff-decision.js.map +0 -1
- package/dist/src/runner/safety.d.ts +0 -14
- package/dist/src/runner/safety.d.ts.map +0 -1
- package/dist/src/runner/safety.js +0 -31
- package/dist/src/runner/safety.js.map +0 -1
- package/dist/src/runner/scope-isolation-policy.d.ts +0 -17
- package/dist/src/runner/scope-isolation-policy.d.ts.map +0 -1
- package/dist/src/runner/scope-isolation-policy.js +0 -82
- package/dist/src/runner/scope-isolation-policy.js.map +0 -1
- package/dist/src/runner/scoped-auto-command.d.ts +0 -90
- package/dist/src/runner/scoped-auto-command.d.ts.map +0 -1
- package/dist/src/runner/scoped-auto-command.js +0 -561
- package/dist/src/runner/scoped-auto-command.js.map +0 -1
- package/dist/src/runner/scoped-recovery.d.ts +0 -78
- package/dist/src/runner/scoped-recovery.d.ts.map +0 -1
- package/dist/src/runner/scoped-recovery.js +0 -601
- package/dist/src/runner/scoped-recovery.js.map +0 -1
- package/dist/src/runner/session-home.d.ts +0 -8
- package/dist/src/runner/session-home.d.ts.map +0 -1
- package/dist/src/runner/session-home.js +0 -18
- package/dist/src/runner/session-home.js.map +0 -1
- package/dist/src/runner/status-command.d.ts +0 -38
- package/dist/src/runner/status-command.d.ts.map +0 -1
- package/dist/src/runner/status-command.js +0 -97
- package/dist/src/runner/status-command.js.map +0 -1
- package/dist/src/runner/target-activity-fence.d.ts.map +0 -1
- package/dist/src/runner/target-activity-fence.js.map +0 -1
- package/dist/src/runner/terminal-outcome.d.ts +0 -58
- package/dist/src/runner/terminal-outcome.d.ts.map +0 -1
- package/dist/src/runner/terminal-outcome.js +0 -73
- package/dist/src/runner/terminal-outcome.js.map +0 -1
- package/dist/src/runner/visual-proof-runner.d.ts +0 -27
- package/dist/src/runner/visual-proof-runner.d.ts.map +0 -1
- package/dist/src/runner/visual-proof-runner.js +0 -379
- package/dist/src/runner/visual-proof-runner.js.map +0 -1
- package/dist/src/runner/worktree-cleanup.d.ts +0 -27
- package/dist/src/runner/worktree-cleanup.d.ts.map +0 -1
- package/dist/src/runner/worktree-cleanup.js +0 -63
- package/dist/src/runner/worktree-cleanup.js.map +0 -1
- package/dist/src/setup/codex-command-resolver.d.ts +0 -10
- package/dist/src/setup/codex-command-resolver.d.ts.map +0 -1
- package/dist/src/setup/codex-command-resolver.js +0 -91
- package/dist/src/setup/codex-command-resolver.js.map +0 -1
- package/dist/src/setup/github-label-adapter.d.ts +0 -13
- package/dist/src/setup/github-label-adapter.d.ts.map +0 -1
- package/dist/src/setup/github-label-adapter.js +0 -28
- package/dist/src/setup/github-label-adapter.js.map +0 -1
- package/dist/src/setup/labels.d.ts +0 -27
- package/dist/src/setup/labels.d.ts.map +0 -1
- package/dist/src/setup/labels.js +0 -42
- package/dist/src/setup/labels.js.map +0 -1
- package/dist/src/setup/project-config.d.ts +0 -24
- package/dist/src/setup/project-config.d.ts.map +0 -1
- package/dist/src/setup/project-config.js +0 -678
- package/dist/src/setup/project-config.js.map +0 -1
- package/dist/src/setup/prompt-sync.d.ts +0 -14
- package/dist/src/setup/prompt-sync.d.ts.map +0 -1
- package/dist/src/setup/prompt-sync.js +0 -228
- package/dist/src/setup/prompt-sync.js.map +0 -1
- package/dist/src/setup/setup-command.d.ts +0 -29
- package/dist/src/setup/setup-command.d.ts.map +0 -1
- package/dist/src/setup/setup-command.js +0 -304
- package/dist/src/setup/setup-command.js.map +0 -1
- package/dist/src/setup/skill-runtime-v2-preparation.d.ts +0 -56
- package/dist/src/setup/skill-runtime-v2-preparation.d.ts.map +0 -1
- package/dist/src/setup/skill-runtime-v2-preparation.js +0 -304
- package/dist/src/setup/skill-runtime-v2-preparation.js.map +0 -1
- package/dist/src/setup/workflows.d.ts +0 -10
- package/dist/src/setup/workflows.d.ts.map +0 -1
- package/dist/src/setup/workflows.js +0 -41
- package/dist/src/setup/workflows.js.map +0 -1
- package/prompts/setup-skill.md +0 -12
- package/prompts/workflows/acceptance-proof.md +0 -29
- package/prompts/workflows/breakdown-review.md +0 -48
- package/prompts/workflows/issue-breakdown.md +0 -155
- package/prompts/workflows/issue-tree-orchestration.md +0 -163
- package/prompts/workflows/prd.md +0 -80
- package/prompts/workflows/scoped-implementation.md +0 -129
- package/prompts/workflows/triage.md +0 -149
- /package/dist/src/{process → v2/adapters}/command.d.ts +0 -0
- /package/dist/src/{process → v2/adapters}/command.js +0 -0
- /package/dist/src/{fs → v2/adapters}/durable-atomic-file.d.ts +0 -0
- /package/dist/src/{fs → v2/adapters}/durable-atomic-file.js +0 -0
- /package/dist/src/{github → v2/adapters}/gh-cli.d.ts +0 -0
- /package/dist/src/{github → v2/adapters}/gh-cli.js +0 -0
- /package/dist/src/{github → v2/adapters}/gh-issue-adapter.d.ts +0 -0
- /package/dist/src/{github → v2/adapters}/gh-issue-adapter.js +0 -0
- /package/dist/src/{github → v2/adapters}/gh-pull-request-adapter.d.ts +0 -0
- /package/dist/src/{github → v2/adapters}/gh-pull-request-adapter.js +0 -0
- /package/dist/src/{github → v2/adapters}/issues.d.ts +0 -0
- /package/dist/src/{github → v2/adapters}/issues.js +0 -0
- /package/dist/src/{runner → v2/adapters}/mission-coordinator-lock.d.ts +0 -0
- /package/dist/src/{runner → v2/adapters}/mission-coordinator-lock.js +0 -0
- /package/dist/src/{path-policy.d.ts → v2/adapters/path-policy.d.ts} +0 -0
- /package/dist/src/{path-policy.js → v2/adapters/path-policy.js} +0 -0
- /package/dist/src/{github → v2/adapters}/pull-requests.d.ts +0 -0
- /package/dist/src/{github → v2/adapters}/pull-requests.js +0 -0
- /package/dist/src/{runner → v2/adapters}/target-activity-fence.d.ts +0 -0
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { type BrowserProofCheckpointEvidence, type BrowserProofDiagnostics, type BrowserProofScenario } from './browser-proof-contract.js';
|
|
2
|
-
import type { AcceptanceProofStatus } from './acceptance-proof.js';
|
|
3
|
-
export interface BrowserVisualProofCommandInput {
|
|
4
|
-
issueNumber: number;
|
|
5
|
-
worktreePath?: string;
|
|
6
|
-
artifactDir?: string;
|
|
7
|
-
scenarioPath?: string;
|
|
8
|
-
baseUrl?: string;
|
|
9
|
-
env?: NodeJS.ProcessEnv;
|
|
10
|
-
envPassthrough?: string[];
|
|
11
|
-
strictConsoleErrors?: boolean;
|
|
12
|
-
strictNetworkFailures?: boolean;
|
|
13
|
-
adapter?: BrowserProofAdapter;
|
|
14
|
-
}
|
|
15
|
-
export interface BrowserProofRunResult {
|
|
16
|
-
checkpoints: BrowserProofCheckpointEvidence[];
|
|
17
|
-
diagnostics: BrowserProofDiagnostics;
|
|
18
|
-
consoleErrors: string[];
|
|
19
|
-
networkFailures: string[];
|
|
20
|
-
browserRuntime?: {
|
|
21
|
-
executablePath?: string;
|
|
22
|
-
chromiumInstallAttempted: boolean;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
export interface BrowserProofAdapter {
|
|
26
|
-
run(input: {
|
|
27
|
-
scenario: BrowserProofScenario;
|
|
28
|
-
worktreePath: string;
|
|
29
|
-
proofDir: string;
|
|
30
|
-
artifactDir: string;
|
|
31
|
-
issueNumber: number;
|
|
32
|
-
env: NodeJS.ProcessEnv;
|
|
33
|
-
}): Promise<BrowserProofRunResult>;
|
|
34
|
-
}
|
|
35
|
-
export declare function parseBrowserVisualProofArgs(args: string[], env?: NodeJS.ProcessEnv): {
|
|
36
|
-
ok: true;
|
|
37
|
-
value: BrowserVisualProofCommandInput;
|
|
38
|
-
} | {
|
|
39
|
-
ok: false;
|
|
40
|
-
error: string;
|
|
41
|
-
};
|
|
42
|
-
export declare function runBrowserVisualProofCommand(input: BrowserVisualProofCommandInput): Promise<{
|
|
43
|
-
status: AcceptanceProofStatus;
|
|
44
|
-
reportPath: string;
|
|
45
|
-
}>;
|
|
46
|
-
type PlaywrightLikeModule = {
|
|
47
|
-
chromium?: {
|
|
48
|
-
launchPersistentContext: (profileDir: string, options: {
|
|
49
|
-
headless: boolean;
|
|
50
|
-
executablePath?: string;
|
|
51
|
-
}) => Promise<{
|
|
52
|
-
newPage: () => Promise<PlaywrightLikePage>;
|
|
53
|
-
close: () => Promise<void>;
|
|
54
|
-
}>;
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
interface BrowserProofAdapterRuntime {
|
|
58
|
-
playwright: PlaywrightLikeModule;
|
|
59
|
-
installedBrowserPaths: string[];
|
|
60
|
-
installChromium: (env: NodeJS.ProcessEnv) => Promise<void>;
|
|
61
|
-
}
|
|
62
|
-
export declare function createDefaultBrowserProofAdapterForTest(runtime: PlaywrightLikeModule | Partial<BrowserProofAdapterRuntime>): BrowserProofAdapter;
|
|
63
|
-
type PlaywrightLikePage = {
|
|
64
|
-
on: (event: 'console' | 'requestfailed', handler: (value: PlaywrightLikeConsoleMessage & PlaywrightLikeRequest) => void) => void;
|
|
65
|
-
setViewportSize: (size: {
|
|
66
|
-
width: number;
|
|
67
|
-
height: number;
|
|
68
|
-
}) => Promise<void>;
|
|
69
|
-
goto: (url: string) => Promise<unknown>;
|
|
70
|
-
click: (selector: string) => Promise<void>;
|
|
71
|
-
getByText: (text: string) => {
|
|
72
|
-
click: () => Promise<void>;
|
|
73
|
-
waitFor: () => Promise<void>;
|
|
74
|
-
};
|
|
75
|
-
fill: (selector: string, value: string) => Promise<void>;
|
|
76
|
-
press: (selector: string, key: string) => Promise<void>;
|
|
77
|
-
waitForSelector: (selector: string) => Promise<void>;
|
|
78
|
-
locator: (selector: string) => {
|
|
79
|
-
textContent: () => Promise<string | null>;
|
|
80
|
-
waitFor: () => Promise<void>;
|
|
81
|
-
evaluate: <T>(fn: (element: Element) => T) => Promise<T>;
|
|
82
|
-
};
|
|
83
|
-
url: () => string;
|
|
84
|
-
screenshot: (options: {
|
|
85
|
-
path: string;
|
|
86
|
-
fullPage: boolean;
|
|
87
|
-
}) => Promise<unknown>;
|
|
88
|
-
};
|
|
89
|
-
type PlaywrightLikeConsoleMessage = {
|
|
90
|
-
type: () => string;
|
|
91
|
-
text: () => string;
|
|
92
|
-
};
|
|
93
|
-
type PlaywrightLikeRequest = {
|
|
94
|
-
method: () => string;
|
|
95
|
-
url: () => string;
|
|
96
|
-
failure: () => {
|
|
97
|
-
errorText?: string;
|
|
98
|
-
} | null;
|
|
99
|
-
};
|
|
100
|
-
export {};
|
|
101
|
-
//# sourceMappingURL=browser-visual-proof-command.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser-visual-proof-command.d.ts","sourceRoot":"","sources":["../../../src/runner/browser-visual-proof-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,532 +0,0 @@
|
|
|
1
|
-
import { execFile } from 'node:child_process';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
-
import { createRequire } from 'node:module';
|
|
5
|
-
import { homedir } from 'node:os';
|
|
6
|
-
import { delimiter, dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
7
|
-
import { assembleBlockedBrowserProofReport, assembleBrowserAcceptanceProofReport, assertBrowserProofArtifactPath, browserProofArtifactPath, browserProofRuntimeEnv, validateBrowserProofScenario, } from './browser-proof-contract.js';
|
|
8
|
-
const require = createRequire(import.meta.url);
|
|
9
|
-
export function parseBrowserVisualProofArgs(args, env = process.env) {
|
|
10
|
-
const parsed = {
|
|
11
|
-
issueNumber: Number(env.CODEX_ORCHESTRATOR_ISSUE_NUMBER),
|
|
12
|
-
worktreePath: env.CODEX_ORCHESTRATOR_WORKTREE_PATH ?? process.cwd(),
|
|
13
|
-
artifactDir: env.CODEX_ORCHESTRATOR_ARTIFACT_DIR,
|
|
14
|
-
scenarioPath: env.CODEX_ORCHESTRATOR_BROWSER_PROOF_SCENARIO_PATH,
|
|
15
|
-
baseUrl: env.CODEX_ORCHESTRATOR_BROWSER_BASE_URL,
|
|
16
|
-
envPassthrough: envListFromEnv(env.CODEX_ORCHESTRATOR_BROWSER_ENV_PASSTHROUGH),
|
|
17
|
-
strictConsoleErrors: booleanFromEnv(env.CODEX_ORCHESTRATOR_BROWSER_STRICT_CONSOLE),
|
|
18
|
-
strictNetworkFailures: booleanFromEnv(env.CODEX_ORCHESTRATOR_BROWSER_STRICT_NETWORK),
|
|
19
|
-
};
|
|
20
|
-
for (let index = 0; index < args.length; index += 1) {
|
|
21
|
-
const arg = args[index];
|
|
22
|
-
const next = () => {
|
|
23
|
-
const value = args[index + 1];
|
|
24
|
-
if (!value || value.startsWith('--'))
|
|
25
|
-
return undefined;
|
|
26
|
-
index += 1;
|
|
27
|
-
return value;
|
|
28
|
-
};
|
|
29
|
-
switch (arg) {
|
|
30
|
-
case '--issue': {
|
|
31
|
-
const value = next();
|
|
32
|
-
if (!value || !Number.isInteger(Number(value)) || Number(value) < 1) {
|
|
33
|
-
return { ok: false, error: 'visual-proof browser requires --issue <number>' };
|
|
34
|
-
}
|
|
35
|
-
parsed.issueNumber = Number(value);
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
case '--target':
|
|
39
|
-
case '--worktree': {
|
|
40
|
-
const value = next();
|
|
41
|
-
if (!value)
|
|
42
|
-
return { ok: false, error: `${arg} requires a value` };
|
|
43
|
-
parsed.worktreePath = value;
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
case '--artifact-dir': {
|
|
47
|
-
const value = next();
|
|
48
|
-
if (!value)
|
|
49
|
-
return { ok: false, error: `${arg} requires a value` };
|
|
50
|
-
parsed.artifactDir = value;
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
case '--scenario': {
|
|
54
|
-
const value = next();
|
|
55
|
-
if (!value)
|
|
56
|
-
return { ok: false, error: `${arg} requires a value` };
|
|
57
|
-
parsed.scenarioPath = value;
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
60
|
-
case '--base-url': {
|
|
61
|
-
const value = next();
|
|
62
|
-
if (!value)
|
|
63
|
-
return { ok: false, error: `${arg} requires a value` };
|
|
64
|
-
parsed.baseUrl = value;
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
case '--strict-console':
|
|
68
|
-
parsed.strictConsoleErrors = true;
|
|
69
|
-
break;
|
|
70
|
-
case '--strict-network':
|
|
71
|
-
parsed.strictNetworkFailures = true;
|
|
72
|
-
break;
|
|
73
|
-
default:
|
|
74
|
-
return { ok: false, error: `Unknown visual-proof browser option: ${arg ?? ''}` };
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (!Number.isInteger(parsed.issueNumber) || parsed.issueNumber < 1) {
|
|
78
|
-
return { ok: false, error: 'visual-proof browser requires --issue <number>' };
|
|
79
|
-
}
|
|
80
|
-
return { ok: true, value: parsed };
|
|
81
|
-
}
|
|
82
|
-
export async function runBrowserVisualProofCommand(input) {
|
|
83
|
-
const env = input.env ?? process.env;
|
|
84
|
-
const issueNumber = input.issueNumber;
|
|
85
|
-
const worktreePath = resolve(input.worktreePath ?? env.CODEX_ORCHESTRATOR_WORKTREE_PATH ?? process.cwd());
|
|
86
|
-
const artifactDir = input.artifactDir ?? env.CODEX_ORCHESTRATOR_ARTIFACT_DIR ?? '.codex-orchestrator/proofs';
|
|
87
|
-
const proofDir = resolve(worktreePath, artifactDir, `issue-${issueNumber}`);
|
|
88
|
-
const reportPath = env[browserProofRuntimeEnv.reportPath] ?? join(proofDir, 'acceptance-proof-report.json');
|
|
89
|
-
const scenarioPath = input.scenarioPath
|
|
90
|
-
? resolve(worktreePath, input.scenarioPath)
|
|
91
|
-
: join(proofDir, 'browser-proof-scenario.json');
|
|
92
|
-
const envPassthrough = input.envPassthrough ?? envListFromEnv(env.CODEX_ORCHESTRATOR_BROWSER_ENV_PASSTHROUGH) ?? [];
|
|
93
|
-
await mkdir(proofDir, { recursive: true });
|
|
94
|
-
const scenarioGuard = validateScenarioPath(scenarioPath, proofDir);
|
|
95
|
-
if (!scenarioGuard.ok) {
|
|
96
|
-
const report = assembleBlockedBrowserProofReport({
|
|
97
|
-
issueNumber,
|
|
98
|
-
artifactDir,
|
|
99
|
-
issue: {
|
|
100
|
-
kind: 'invalidScenario',
|
|
101
|
-
diagnostic: scenarioGuard.error,
|
|
102
|
-
requiredChanges: [scenarioGuard.error],
|
|
103
|
-
},
|
|
104
|
-
});
|
|
105
|
-
await writeReportWithDiagnostics(worktreePath, reportPath, report, { kind: 'invalidScenario', diagnostic: scenarioGuard.error });
|
|
106
|
-
return { status: 'blocked', reportPath };
|
|
107
|
-
}
|
|
108
|
-
const loaded = await loadScenario(scenarioPath, input.baseUrl);
|
|
109
|
-
if (!loaded.ok) {
|
|
110
|
-
const report = assembleBlockedBrowserProofReport({
|
|
111
|
-
issueNumber,
|
|
112
|
-
artifactDir,
|
|
113
|
-
issue: {
|
|
114
|
-
kind: 'invalidScenario',
|
|
115
|
-
diagnostic: loaded.error,
|
|
116
|
-
requiredChanges: [loaded.error],
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
await writeReportWithDiagnostics(worktreePath, reportPath, report, { kind: 'invalidScenario', diagnostic: loaded.error });
|
|
120
|
-
return { status: 'blocked', reportPath };
|
|
121
|
-
}
|
|
122
|
-
const validated = validateBrowserProofScenario(loaded.scenario, {
|
|
123
|
-
artifactDir,
|
|
124
|
-
issueNumber,
|
|
125
|
-
envPassthrough,
|
|
126
|
-
});
|
|
127
|
-
if (!validated.ok) {
|
|
128
|
-
const diagnostic = validated.errors.join('; ');
|
|
129
|
-
const report = assembleBlockedBrowserProofReport({
|
|
130
|
-
issueNumber,
|
|
131
|
-
artifactDir,
|
|
132
|
-
issue: {
|
|
133
|
-
kind: 'invalidScenario',
|
|
134
|
-
diagnostic,
|
|
135
|
-
requiredChanges: validated.errors,
|
|
136
|
-
},
|
|
137
|
-
});
|
|
138
|
-
await writeReportWithDiagnostics(worktreePath, reportPath, report, { kind: 'invalidScenario', diagnostic });
|
|
139
|
-
return { status: 'blocked', reportPath };
|
|
140
|
-
}
|
|
141
|
-
try {
|
|
142
|
-
const runtimeDirs = await ensureBrowserRuntimeDirs(env);
|
|
143
|
-
if (!runtimeDirs.ok) {
|
|
144
|
-
const report = assembleBlockedBrowserProofReport({
|
|
145
|
-
issueNumber,
|
|
146
|
-
artifactDir,
|
|
147
|
-
scenario: validated.scenario,
|
|
148
|
-
issue: {
|
|
149
|
-
kind: runtimeDirs.kind,
|
|
150
|
-
diagnostic: runtimeDirs.error,
|
|
151
|
-
requiredChanges: [runtimeDirs.error],
|
|
152
|
-
},
|
|
153
|
-
});
|
|
154
|
-
await writeReportWithDiagnostics(worktreePath, reportPath, report, { kind: runtimeDirs.kind, diagnostic: runtimeDirs.error });
|
|
155
|
-
return { status: 'blocked', reportPath };
|
|
156
|
-
}
|
|
157
|
-
const adapter = input.adapter ?? defaultBrowserProofAdapter();
|
|
158
|
-
const run = await adapter.run({ scenario: validated.scenario, worktreePath, proofDir, artifactDir, issueNumber, env });
|
|
159
|
-
const strictBlockers = [
|
|
160
|
-
...(input.strictConsoleErrors && run.consoleErrors.length > 0 ? [`Console errors: ${run.consoleErrors.join('; ')}`] : []),
|
|
161
|
-
...(input.strictNetworkFailures && run.networkFailures.length > 0 ? [`Network failures: ${run.networkFailures.join('; ')}`] : []),
|
|
162
|
-
];
|
|
163
|
-
if (strictBlockers.length > 0) {
|
|
164
|
-
const strictKind = run.consoleErrors.length > 0 ? 'consoleErrors' : 'networkFailures';
|
|
165
|
-
const report = assembleBlockedBrowserProofReport({
|
|
166
|
-
issueNumber,
|
|
167
|
-
artifactDir,
|
|
168
|
-
scenario: validated.scenario,
|
|
169
|
-
issue: {
|
|
170
|
-
kind: strictKind,
|
|
171
|
-
diagnostic: strictBlockers.join('; '),
|
|
172
|
-
requiredChanges: strictBlockers,
|
|
173
|
-
},
|
|
174
|
-
diagnostics: run.diagnostics,
|
|
175
|
-
});
|
|
176
|
-
await writeReportWithDiagnostics(worktreePath, reportPath, report, { kind: strictKind, diagnostic: strictBlockers.join('; ') });
|
|
177
|
-
return { status: 'blocked', reportPath };
|
|
178
|
-
}
|
|
179
|
-
const report = assembleBrowserAcceptanceProofReport({
|
|
180
|
-
issueNumber,
|
|
181
|
-
artifactDir,
|
|
182
|
-
scenario: validated.scenario,
|
|
183
|
-
checkpoints: run.checkpoints,
|
|
184
|
-
diagnostics: run.diagnostics,
|
|
185
|
-
workflow: workflowFromScenario(validated.scenario),
|
|
186
|
-
layoutFindings: ['Browser proof reviewed layout-relevant viewport artifacts.'],
|
|
187
|
-
copyFindings: ['Browser proof reviewed visible text through DOM and screenshot artifacts.'],
|
|
188
|
-
});
|
|
189
|
-
await writeJson(reportPath, report);
|
|
190
|
-
return { status: 'passed', reportPath };
|
|
191
|
-
}
|
|
192
|
-
catch (error) {
|
|
193
|
-
const message = error instanceof Error ? error.message : 'browser proof failed';
|
|
194
|
-
const assertion = error instanceof Error && 'code' in error && error.code === 'ASSERTION_FAILED';
|
|
195
|
-
if (assertion) {
|
|
196
|
-
const report = needsReworkReport(issueNumber, artifactDir, validated.scenario, message);
|
|
197
|
-
await writeJson(reportPath, report);
|
|
198
|
-
return { status: 'needs-rework', reportPath };
|
|
199
|
-
}
|
|
200
|
-
const report = assembleBlockedBrowserProofReport({
|
|
201
|
-
issueNumber,
|
|
202
|
-
artifactDir,
|
|
203
|
-
scenario: validated.scenario,
|
|
204
|
-
issue: {
|
|
205
|
-
kind: /playwright/iu.test(message) ? 'playwrightPackage' : 'browserBinary',
|
|
206
|
-
diagnostic: message,
|
|
207
|
-
requiredChanges: [message],
|
|
208
|
-
},
|
|
209
|
-
});
|
|
210
|
-
await writeReportWithDiagnostics(worktreePath, reportPath, report, { kind: 'browserBinary', diagnostic: message });
|
|
211
|
-
return { status: 'blocked', reportPath };
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
export function createDefaultBrowserProofAdapterForTest(runtime) {
|
|
215
|
-
if ('chromium' in runtime) {
|
|
216
|
-
return defaultBrowserProofAdapter({ playwright: runtime });
|
|
217
|
-
}
|
|
218
|
-
return defaultBrowserProofAdapter(runtime);
|
|
219
|
-
}
|
|
220
|
-
function defaultBrowserProofAdapter(runtime = {}) {
|
|
221
|
-
return {
|
|
222
|
-
async run(input) {
|
|
223
|
-
const moduleName = 'playwright-core';
|
|
224
|
-
const playwright = runtime.playwright ?? await import(moduleName);
|
|
225
|
-
if (!playwright.chromium) {
|
|
226
|
-
throw new Error('Playwright chromium runtime is unavailable.');
|
|
227
|
-
}
|
|
228
|
-
const profileDir = input.env[browserProofRuntimeEnv.playwrightProfileDir] ?? join(input.proofDir, 'playwright-profile');
|
|
229
|
-
const executablePath = input.env[browserProofRuntimeEnv.browserExecutablePath]
|
|
230
|
-
?? firstExistingPath(runtime.installedBrowserPaths ?? installedBrowserExecutableCandidates(input.env));
|
|
231
|
-
let chromiumInstallAttempted = false;
|
|
232
|
-
const context = await launchBrowserContext({
|
|
233
|
-
chromium: playwright.chromium,
|
|
234
|
-
profileDir,
|
|
235
|
-
executablePath,
|
|
236
|
-
env: input.env,
|
|
237
|
-
installChromium: async (installEnv) => {
|
|
238
|
-
chromiumInstallAttempted = true;
|
|
239
|
-
await (runtime.installChromium ?? installPlaywrightChromium)(installEnv);
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
const page = await context.newPage();
|
|
243
|
-
const consoleErrors = [];
|
|
244
|
-
const networkFailures = [];
|
|
245
|
-
page.on('console', (message) => {
|
|
246
|
-
if (message.type() === 'error')
|
|
247
|
-
consoleErrors.push(message.text());
|
|
248
|
-
});
|
|
249
|
-
page.on('requestfailed', (request) => {
|
|
250
|
-
networkFailures.push(`${request.method()} ${request.url()} ${request.failure()?.errorText ?? ''}`.trim());
|
|
251
|
-
});
|
|
252
|
-
const checkpoints = [];
|
|
253
|
-
try {
|
|
254
|
-
for (const viewport of input.scenario.viewports) {
|
|
255
|
-
await page.setViewportSize({ width: viewport.width, height: viewport.height });
|
|
256
|
-
for (const step of input.scenario.steps) {
|
|
257
|
-
await runBrowserStep(page, input.scenario.baseUrl, step, input, checkpoints);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
finally {
|
|
262
|
-
await context.close();
|
|
263
|
-
}
|
|
264
|
-
const browserRuntime = { executablePath, chromiumInstallAttempted };
|
|
265
|
-
const diagnostics = await writeBrowserDiagnostics(input, consoleErrors, networkFailures, browserRuntime);
|
|
266
|
-
return { checkpoints, diagnostics, consoleErrors, networkFailures, browserRuntime };
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
async function launchBrowserContext(input) {
|
|
271
|
-
try {
|
|
272
|
-
return await input.chromium.launchPersistentContext(input.profileDir, {
|
|
273
|
-
headless: true,
|
|
274
|
-
...(input.executablePath ? { executablePath: input.executablePath } : {}),
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
catch (error) {
|
|
278
|
-
if (input.executablePath || !isMissingPlaywrightBrowser(error)) {
|
|
279
|
-
throw error;
|
|
280
|
-
}
|
|
281
|
-
await input.installChromium(input.env);
|
|
282
|
-
return input.chromium.launchPersistentContext(input.profileDir, { headless: true });
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
function installedBrowserExecutableCandidates(env) {
|
|
286
|
-
return [
|
|
287
|
-
...macBrowserExecutableCandidates(),
|
|
288
|
-
...linuxBrowserExecutableCandidates(env),
|
|
289
|
-
...windowsBrowserExecutableCandidates(env),
|
|
290
|
-
];
|
|
291
|
-
}
|
|
292
|
-
function macBrowserExecutableCandidates() {
|
|
293
|
-
return [
|
|
294
|
-
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
|
295
|
-
join(homedir(), 'Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),
|
|
296
|
-
'/Applications/Chromium.app/Contents/MacOS/Chromium',
|
|
297
|
-
join(homedir(), 'Applications/Chromium.app/Contents/MacOS/Chromium'),
|
|
298
|
-
'/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',
|
|
299
|
-
join(homedir(), 'Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge'),
|
|
300
|
-
];
|
|
301
|
-
}
|
|
302
|
-
function linuxBrowserExecutableCandidates(env) {
|
|
303
|
-
return [
|
|
304
|
-
findExecutableOnPath('google-chrome-stable', env),
|
|
305
|
-
findExecutableOnPath('google-chrome', env),
|
|
306
|
-
findExecutableOnPath('chromium', env),
|
|
307
|
-
findExecutableOnPath('chromium-browser', env),
|
|
308
|
-
findExecutableOnPath('microsoft-edge', env),
|
|
309
|
-
findExecutableOnPath('microsoft-edge-stable', env),
|
|
310
|
-
].filter((path) => Boolean(path));
|
|
311
|
-
}
|
|
312
|
-
function windowsBrowserExecutableCandidates(env) {
|
|
313
|
-
return [
|
|
314
|
-
env.LOCALAPPDATA ? join(env.LOCALAPPDATA, 'Google', 'Chrome', 'Application', 'chrome.exe') : undefined,
|
|
315
|
-
env.PROGRAMFILES ? join(env.PROGRAMFILES, 'Google', 'Chrome', 'Application', 'chrome.exe') : undefined,
|
|
316
|
-
env['PROGRAMFILES(X86)'] ? join(env['PROGRAMFILES(X86)'], 'Google', 'Chrome', 'Application', 'chrome.exe') : undefined,
|
|
317
|
-
env.LOCALAPPDATA ? join(env.LOCALAPPDATA, 'Microsoft', 'Edge', 'Application', 'msedge.exe') : undefined,
|
|
318
|
-
env.PROGRAMFILES ? join(env.PROGRAMFILES, 'Microsoft', 'Edge', 'Application', 'msedge.exe') : undefined,
|
|
319
|
-
env['PROGRAMFILES(X86)'] ? join(env['PROGRAMFILES(X86)'], 'Microsoft', 'Edge', 'Application', 'msedge.exe') : undefined,
|
|
320
|
-
].filter((path) => Boolean(path));
|
|
321
|
-
}
|
|
322
|
-
function findExecutableOnPath(command, env) {
|
|
323
|
-
const pathEntries = (env.PATH ?? '').split(delimiter).filter(Boolean);
|
|
324
|
-
const extensions = process.platform === 'win32'
|
|
325
|
-
? (env.PATHEXT ?? '.EXE;.CMD;.BAT;.COM').split(';')
|
|
326
|
-
: [''];
|
|
327
|
-
for (const pathEntry of pathEntries) {
|
|
328
|
-
for (const extension of extensions) {
|
|
329
|
-
const candidate = join(pathEntry, `${command}${extension}`);
|
|
330
|
-
if (existsSync(candidate))
|
|
331
|
-
return candidate;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
return undefined;
|
|
335
|
-
}
|
|
336
|
-
function firstExistingPath(paths) {
|
|
337
|
-
return paths.find((path) => existsSync(path));
|
|
338
|
-
}
|
|
339
|
-
function isMissingPlaywrightBrowser(error) {
|
|
340
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
341
|
-
return /Executable doesn't exist/iu.test(message)
|
|
342
|
-
|| /run (?:the following command to )?download new browsers/iu.test(message)
|
|
343
|
-
|| /playwright install/iu.test(message);
|
|
344
|
-
}
|
|
345
|
-
async function installPlaywrightChromium(env) {
|
|
346
|
-
const cliPath = require.resolve('playwright-core/cli.js');
|
|
347
|
-
await new Promise((resolvePromise, reject) => {
|
|
348
|
-
execFile(process.execPath, [cliPath, 'install', 'chromium'], { env: { ...process.env, ...env } }, (error, stdout, stderr) => {
|
|
349
|
-
if (error) {
|
|
350
|
-
reject(new Error(`Playwright Chromium install failed: ${error.message}\n${stderr}\n${stdout}`.trim()));
|
|
351
|
-
return;
|
|
352
|
-
}
|
|
353
|
-
resolvePromise();
|
|
354
|
-
});
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
async function runBrowserStep(page, baseUrl, step, input, checkpoints) {
|
|
358
|
-
switch (step.action) {
|
|
359
|
-
case 'navigate':
|
|
360
|
-
await page.goto(step.url ?? new URL(step.path ?? '/', baseUrl).toString());
|
|
361
|
-
break;
|
|
362
|
-
case 'click':
|
|
363
|
-
if (step.selector)
|
|
364
|
-
await page.click(step.selector);
|
|
365
|
-
else
|
|
366
|
-
await page.getByText(step.text ?? '').click();
|
|
367
|
-
break;
|
|
368
|
-
case 'fill':
|
|
369
|
-
await page.fill(step.selector, step.value);
|
|
370
|
-
break;
|
|
371
|
-
case 'press':
|
|
372
|
-
await page.press(step.selector, step.key);
|
|
373
|
-
break;
|
|
374
|
-
case 'waitForSelector':
|
|
375
|
-
await page.waitForSelector(step.selector);
|
|
376
|
-
break;
|
|
377
|
-
case 'waitForText':
|
|
378
|
-
await page.getByText(step.text).waitFor();
|
|
379
|
-
break;
|
|
380
|
-
case 'assertText': {
|
|
381
|
-
const text = step.selector ? await page.locator(step.selector).textContent() : step.text;
|
|
382
|
-
if (!text?.includes(step.text))
|
|
383
|
-
throw assertionError(`Expected text ${step.text} was missing`);
|
|
384
|
-
break;
|
|
385
|
-
}
|
|
386
|
-
case 'assertUrl':
|
|
387
|
-
if (!page.url().includes(step.expected))
|
|
388
|
-
throw assertionError(`Expected URL ${step.expected} but got ${page.url()}`);
|
|
389
|
-
break;
|
|
390
|
-
case 'screenshot':
|
|
391
|
-
await mkdir(dirname(browserProofArtifactFilePath(input.worktreePath, step.path, input.artifactDir, input.issueNumber)), { recursive: true });
|
|
392
|
-
await page.screenshot({ path: browserProofArtifactFilePath(input.worktreePath, step.path, input.artifactDir, input.issueNumber), fullPage: true });
|
|
393
|
-
checkpoints.push({ ...step, kind: 'screenshot', description: `Browser screenshot ${step.checkpointId}` });
|
|
394
|
-
break;
|
|
395
|
-
case 'domSnapshot': {
|
|
396
|
-
const html = await page.locator('body').evaluate((element) => element.outerHTML);
|
|
397
|
-
await mkdir(dirname(browserProofArtifactFilePath(input.worktreePath, step.path, input.artifactDir, input.issueNumber)), { recursive: true });
|
|
398
|
-
await writeFile(browserProofArtifactFilePath(input.worktreePath, step.path, input.artifactDir, input.issueNumber), html, 'utf8');
|
|
399
|
-
checkpoints.push({ ...step, kind: 'domSnapshot', description: `Browser DOM snapshot ${step.checkpointId}` });
|
|
400
|
-
break;
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
async function writeBrowserDiagnostics(input, consoleErrors, networkFailures, browserRuntime) {
|
|
405
|
-
const consoleLogRef = browserProofArtifactPath(input.artifactDir, input.issueNumber, 'console.log');
|
|
406
|
-
const networkLogRef = browserProofArtifactPath(input.artifactDir, input.issueNumber, 'network.log');
|
|
407
|
-
const runSummaryRef = browserProofArtifactPath(input.artifactDir, input.issueNumber, 'browser-summary.json');
|
|
408
|
-
const consoleLogPath = browserProofArtifactFilePath(input.worktreePath, consoleLogRef, input.artifactDir, input.issueNumber);
|
|
409
|
-
const networkLogPath = browserProofArtifactFilePath(input.worktreePath, networkLogRef, input.artifactDir, input.issueNumber);
|
|
410
|
-
const runSummaryPath = browserProofArtifactFilePath(input.worktreePath, runSummaryRef, input.artifactDir, input.issueNumber);
|
|
411
|
-
await writeFile(consoleLogPath, consoleErrors.join('\n'), 'utf8');
|
|
412
|
-
await writeFile(networkLogPath, networkFailures.join('\n'), 'utf8');
|
|
413
|
-
await writeFile(runSummaryPath, JSON.stringify({
|
|
414
|
-
status: 'completed',
|
|
415
|
-
steps: input.scenario.steps.length,
|
|
416
|
-
browserRuntime: browserRuntime
|
|
417
|
-
? {
|
|
418
|
-
executablePath: browserRuntime.executablePath ?? null,
|
|
419
|
-
chromiumInstallAttempted: browserRuntime.chromiumInstallAttempted,
|
|
420
|
-
}
|
|
421
|
-
: undefined,
|
|
422
|
-
}, null, 2), 'utf8');
|
|
423
|
-
return {
|
|
424
|
-
consoleLogPath: consoleLogRef,
|
|
425
|
-
networkLogPath: networkLogRef,
|
|
426
|
-
runSummaryPath: runSummaryRef,
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
function needsReworkReport(issueNumber, artifactDir, scenario, message) {
|
|
430
|
-
const diagnosticPath = `${artifactDir}/issue-${issueNumber}/browser-proof-diagnostics.json`;
|
|
431
|
-
return {
|
|
432
|
-
status: 'needs-rework',
|
|
433
|
-
criteria: scenario.criteria.map((criterion) => ({
|
|
434
|
-
id: criterion.id,
|
|
435
|
-
description: criterion.description,
|
|
436
|
-
status: 'failed',
|
|
437
|
-
confidence: 'high',
|
|
438
|
-
reasoningSummary: message,
|
|
439
|
-
artifactRefs: [diagnosticPath],
|
|
440
|
-
})),
|
|
441
|
-
artifacts: [{ type: 'log', path: diagnosticPath, description: 'Browser assertion failure' }],
|
|
442
|
-
proofPhaseDiff: { allowedProofPaths: [diagnosticPath], forbiddenProductPaths: [] },
|
|
443
|
-
reworkRequest: {
|
|
444
|
-
summary: message,
|
|
445
|
-
requiredChanges: [message],
|
|
446
|
-
evidenceRefs: [diagnosticPath],
|
|
447
|
-
},
|
|
448
|
-
residualRisks: [],
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
|
-
async function loadScenario(path, baseUrl) {
|
|
452
|
-
try {
|
|
453
|
-
const scenario = JSON.parse(await readFile(path, 'utf8'));
|
|
454
|
-
return { ok: true, scenario: baseUrl ? { ...scenario, baseUrl } : scenario };
|
|
455
|
-
}
|
|
456
|
-
catch (error) {
|
|
457
|
-
const message = error instanceof Error && 'code' in error && error.code === 'ENOENT'
|
|
458
|
-
? `Browser proof scenario file was not found: ${path}`
|
|
459
|
-
: `Browser proof scenario is malformed: ${error instanceof Error ? error.message : String(error)}`;
|
|
460
|
-
return { ok: false, error: message };
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
function validateScenarioPath(path, proofDir) {
|
|
464
|
-
const resolvedPath = resolve(path);
|
|
465
|
-
const resolvedProofDir = resolve(proofDir);
|
|
466
|
-
const relativePath = relative(resolvedProofDir, resolvedPath);
|
|
467
|
-
const name = resolvedPath.split('/').at(-1) ?? '';
|
|
468
|
-
if (name === '.env' || name.startsWith('.env.')) {
|
|
469
|
-
return { ok: false, error: `Browser proof scenario path must not reference a secret file: ${path}` };
|
|
470
|
-
}
|
|
471
|
-
if (relativePath.length === 0 || relativePath.startsWith('..') || isAbsolute(relativePath)) {
|
|
472
|
-
return { ok: false, error: `Browser proof scenario path must stay under the proof directory: ${path}` };
|
|
473
|
-
}
|
|
474
|
-
return { ok: true };
|
|
475
|
-
}
|
|
476
|
-
async function ensureBrowserRuntimeDirs(env) {
|
|
477
|
-
const dirs = [
|
|
478
|
-
{ kind: 'profileDir', path: env[browserProofRuntimeEnv.playwrightProfileDir] },
|
|
479
|
-
{ kind: 'cacheDir', path: env[browserProofRuntimeEnv.browserCacheDir] },
|
|
480
|
-
];
|
|
481
|
-
for (const dir of dirs) {
|
|
482
|
-
if (!dir.path)
|
|
483
|
-
continue;
|
|
484
|
-
try {
|
|
485
|
-
await mkdir(dir.path, { recursive: true });
|
|
486
|
-
}
|
|
487
|
-
catch (error) {
|
|
488
|
-
return {
|
|
489
|
-
ok: false,
|
|
490
|
-
kind: dir.kind,
|
|
491
|
-
error: `Browser proof could not prepare ${dir.kind}: ${error instanceof Error ? error.message : String(error)}`,
|
|
492
|
-
};
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
return { ok: true };
|
|
496
|
-
}
|
|
497
|
-
function browserProofArtifactFilePath(worktreePath, artifactPath, artifactDir, issueNumber) {
|
|
498
|
-
return resolve(worktreePath, assertBrowserProofArtifactPath(artifactPath, artifactDir, issueNumber));
|
|
499
|
-
}
|
|
500
|
-
function workflowFromScenario(scenario) {
|
|
501
|
-
return {
|
|
502
|
-
entrypoint: scenario.baseUrl,
|
|
503
|
-
path: scenario.steps.map((step) => step.action),
|
|
504
|
-
screenState: 'Browser proof scenario completed with mapped checkpoint evidence.',
|
|
505
|
-
};
|
|
506
|
-
}
|
|
507
|
-
async function writeReportWithDiagnostics(worktreePath, reportPath, report, diagnostic) {
|
|
508
|
-
const diagnosticPath = report.artifacts[0]?.path;
|
|
509
|
-
if (diagnosticPath) {
|
|
510
|
-
await mkdir(dirname(join(worktreePath, diagnosticPath)), { recursive: true });
|
|
511
|
-
await writeFile(join(worktreePath, diagnosticPath), JSON.stringify(diagnostic, null, 2), 'utf8');
|
|
512
|
-
}
|
|
513
|
-
await writeJson(reportPath, report);
|
|
514
|
-
}
|
|
515
|
-
async function writeJson(path, value) {
|
|
516
|
-
await mkdir(dirname(path), { recursive: true });
|
|
517
|
-
await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
|
|
518
|
-
}
|
|
519
|
-
function assertionError(message) {
|
|
520
|
-
return Object.assign(new Error(message), { code: 'ASSERTION_FAILED' });
|
|
521
|
-
}
|
|
522
|
-
function booleanFromEnv(value) {
|
|
523
|
-
if (value === undefined)
|
|
524
|
-
return undefined;
|
|
525
|
-
return /^(?:1|true|yes)$/iu.test(value);
|
|
526
|
-
}
|
|
527
|
-
function envListFromEnv(value) {
|
|
528
|
-
if (!value)
|
|
529
|
-
return undefined;
|
|
530
|
-
return value.split(/[,\n]/u).map((entry) => entry.trim()).filter(Boolean);
|
|
531
|
-
}
|
|
532
|
-
//# sourceMappingURL=browser-visual-proof-command.js.map
|