sneakoscope 6.0.3 → 6.1.2
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/README.md +29 -12
- package/config/codex-releases/{rust-v0.142.0.json → rust-v0.144.1.json} +6 -6
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/dist/bin/fast-inline.js +18 -14
- package/dist/bin/sks-dispatch.js +2 -4
- package/dist/cli/args.js +2 -0
- package/dist/cli/command-manifest-lite.js +2 -3
- package/dist/cli/command-registry.js +3 -4
- package/dist/cli/help-fast.js +1 -1
- package/dist/cli/install-helpers.js +348 -763
- package/dist/cli/install-tool-helpers.js +287 -0
- package/dist/cli/router.js +91 -6
- package/dist/commands/codex-lb.js +188 -53
- package/dist/commands/codex.js +44 -5
- package/dist/commands/doctor.js +302 -46
- package/dist/commands/tmux.js +5 -1
- package/dist/commands/versioning.js +7 -0
- package/dist/commands/zellij-monitor-pane.js +2 -0
- package/dist/commands/zellij-viewport-pane.js +3 -1
- package/dist/commands/zellij.js +1 -1
- package/dist/config/skills-manifest.json +59 -59
- package/dist/core/agent-bridge/agent-manifest.js +48 -0
- package/dist/core/agents/agent-central-ledger.js +9 -0
- package/dist/core/agents/agent-cleanup-executor.js +334 -41
- package/dist/core/agents/agent-cleanup.js +20 -1
- package/dist/core/agents/agent-command-surface.js +3 -1
- package/dist/core/agents/agent-effort-policy.js +30 -38
- package/dist/core/agents/agent-janitor.js +9 -10
- package/dist/core/agents/agent-namespace-safety.js +56 -0
- package/dist/core/agents/agent-orchestrator.js +25 -3
- package/dist/core/agents/agent-output-validator.js +1 -1
- package/dist/core/agents/agent-plan.js +100 -21
- package/dist/core/agents/agent-role-config.js +43 -49
- package/dist/core/agents/agent-runner-codex-exec.js +18 -3
- package/dist/core/agents/agent-runner-process.js +1 -0
- package/dist/core/agents/agent-schema.js +3 -2
- package/dist/core/agents/fast-mode-policy.js +3 -5
- package/dist/core/agents/native-cli-session-swarm.js +1 -1
- package/dist/core/agents/native-worker-backend-router.js +2 -1
- package/dist/core/agents/work-partition/repo-inventory.js +68 -7
- package/dist/core/agents/zellij-right-lane-cockpit.js +2 -2
- package/dist/core/code-structure.js +5 -4
- package/dist/core/codex/agent-config-file-repair.js +94 -193
- package/dist/core/codex/codex-cli-update.js +723 -0
- package/dist/core/codex/codex-config-guard.js +38 -11
- package/dist/core/codex/codex-project-config-policy.js +3 -6
- package/dist/core/codex/codex-startup-config-postcheck.js +52 -42
- package/dist/core/codex-adapter.js +35 -22
- package/dist/core/codex-app/codex-agent-role-sync.js +13 -54
- package/dist/core/codex-app/codex-app-fast-ui-repair.js +51 -20
- package/dist/core/codex-app/codex-app-launcher.js +48 -17
- package/dist/core/codex-app/codex-app-restart.js +23 -2
- package/dist/core/codex-app/codex-app-ui-state-snapshot.js +11 -3
- package/dist/core/codex-app/sks-menubar.js +136 -5
- package/dist/core/codex-app.js +35 -14
- package/dist/core/codex-compat/codex-hook-warning-detector.js +10 -1
- package/dist/core/codex-compat/codex-release-manifest.js +6 -6
- package/dist/core/codex-control/codex-0139-doctor-real-probe.js +7 -1
- package/dist/core/codex-control/codex-0139-image-path-real-probe.js +29 -12
- package/dist/core/codex-control/codex-0139-probe-runner.js +103 -28
- package/dist/core/codex-control/codex-0139-real-probe-summary.js +7 -3
- package/dist/core/codex-control/codex-0139-real-probes.js +21 -6
- package/dist/core/codex-control/codex-0139-sandbox-real-probe.js +39 -13
- package/dist/core/codex-control/codex-0139-web-search-probe.js +28 -14
- package/dist/core/codex-control/{codex-0142-capability.js → codex-0144-capability.js} +22 -22
- package/dist/core/codex-control/codex-0144-collab-agent-real-probe.js +63 -0
- package/dist/core/codex-control/codex-lb-launch-recovery.js +278 -0
- package/dist/core/codex-control/codex-multi-agent-event-normalizer.js +5 -1
- package/dist/core/codex-control/codex-reliability-shield.js +93 -30
- package/dist/core/codex-control/codex-sdk-adapter.js +96 -13
- package/dist/core/codex-control/codex-sdk-config-policy.js +2 -1
- package/dist/core/codex-control/codex-sdk-sandbox-policy.js +6 -3
- package/dist/core/codex-control/codex-task-runner.js +62 -9
- package/dist/core/codex-control/python-codex-sdk-adapter.js +30 -3
- package/dist/core/codex-exec-output-schema.js +35 -6
- package/dist/core/codex-lb/codex-lb-env.js +30 -1
- package/dist/core/codex-lb/codex-lb-tool-catalog.js +478 -0
- package/dist/core/codex-lb/codex-lb-tool-output-recovery.js +291 -0
- package/dist/core/codex-native/codex-native-feature-broker.js +31 -38
- package/dist/core/codex-native/codex-native-feature-matrix.js +2 -2
- package/dist/core/codex-native/codex-native-repair-transaction.js +1 -1
- package/dist/core/codex-native/core-skill-manifest.js +8 -4
- package/dist/core/codex-native/native-capability-postcheck.js +16 -8
- package/dist/core/codex-native/native-capability-repair-matrix.js +76 -27
- package/dist/core/codex-plugins/codex-plugin-json.js +67 -21
- package/dist/core/codex-plugins/codex-plugin-repair.js +118 -0
- package/dist/core/codex-runtime/codex-desktop-config-policy.js +305 -0
- package/dist/core/commands/agent-bridge-command.js +23 -2
- package/dist/core/commands/agent-command.js +38 -5
- package/dist/core/commands/basic-cli.js +77 -30
- package/dist/core/commands/command-utils.js +1 -1
- package/dist/core/commands/gc-command.js +27 -4
- package/dist/core/commands/image-ux-review-command.js +55 -24
- package/dist/core/commands/mad-sks-command.js +182 -137
- package/dist/core/commands/naruto-command.js +643 -1153
- package/dist/core/commands/pipeline-command.js +1 -0
- package/dist/core/commands/research-command.js +293 -231
- package/dist/core/commands/run-command.js +100 -23
- package/dist/core/commands/team-command.js +2 -3
- package/dist/core/commands/team-legacy-observe-command.js +94 -359
- package/dist/core/commands/wiki-command.js +179 -83
- package/dist/core/computer-use-live-evidence.js +166 -3
- package/dist/core/computer-use-status.js +5 -2
- package/dist/core/daemon/sksd-hook-daemon-entrypoint.js +2 -2
- package/dist/core/daemon/sksd-hook-daemon.js +171 -28
- package/dist/core/daemon/sksd-hook-dispatch.js +2 -2
- package/dist/core/db-safety.js +2 -2
- package/dist/core/decision-lattice.js +6 -6
- package/dist/core/dfix/verification-selector.js +6 -4
- package/dist/core/doctor/browser-use-repair.js +54 -13
- package/dist/core/doctor/codex-0139-doctor.js +3 -2
- package/dist/core/doctor/codex-startup-config-repair.js +8 -3
- package/dist/core/doctor/computer-use-repair.js +28 -39
- package/dist/core/doctor/doctor-codex-startup-repair.js +24 -149
- package/dist/core/doctor/doctor-context7-repair.js +1 -1
- package/dist/core/doctor/doctor-dirty-planner.js +1 -1
- package/dist/core/doctor/doctor-native-capability-repair.js +74 -3
- package/dist/core/doctor/imagegen-repair.js +47 -12
- package/dist/core/doctor/legacy-global-hook-cleanup.js +179 -0
- package/dist/core/feature-fixture-executor.js +71 -7
- package/dist/core/feature-fixture-runner.js +53 -12
- package/dist/core/feature-fixtures.js +47 -14
- package/dist/core/feature-registry.js +53 -58
- package/dist/core/fsx.js +54 -6
- package/dist/core/harness-conflicts.js +19 -10
- package/dist/core/hooks-runtime/code-pack-freshness-preflight.js +5 -4
- package/dist/core/hooks-runtime/hook-invocation-dedupe.js +147 -0
- package/dist/core/hooks-runtime/hook-io.js +14 -4
- package/dist/core/hooks-runtime/light-turn.js +70 -0
- package/dist/core/hooks-runtime/payload-signals.js +270 -0
- package/dist/core/hooks-runtime/team-digest.js +0 -1
- package/dist/core/hooks-runtime/tool-output-quarantine.js +93 -0
- package/dist/core/hooks-runtime.js +418 -250
- package/dist/core/image/image-artifact-path-contract.js +8 -6
- package/dist/core/image/image-artifact-registry.js +5 -1
- package/dist/core/image-ux-review/imagegen-adapter.js +5 -2
- package/dist/core/imagegen/imagegen-capability.js +10 -13
- package/dist/core/imagegen/require-imagegen.js +37 -11
- package/dist/core/init/skills.js +16 -30
- package/dist/core/init.js +144 -36
- package/dist/core/managed-assets/managed-assets-manifest.js +417 -14
- package/dist/core/mission.js +24 -1
- package/dist/core/naruto/naruto-work-graph.js +70 -4
- package/dist/core/ops/reporting.js +3 -0
- package/dist/core/pipeline-internals/runtime-core.js +578 -180
- package/dist/core/pipeline-internals/runtime-gates.js +191 -49
- package/dist/core/ppt/style-tokens.js +1 -1
- package/dist/core/ppt-review/index.js +1 -1
- package/dist/core/ppt-review/slide-exporter.js +23 -17
- package/dist/core/ppt-review/slide-imagegen-review.js +1 -1
- package/dist/core/ppt-review/slide-issue-extraction.js +4 -2
- package/dist/core/preflight/parallel-preflight-engine.js +50 -1
- package/dist/core/product-design-plugin.js +2 -2
- package/dist/core/proof/route-finalizer.js +1 -1
- package/dist/core/proof/route-proof-gate.js +7 -2
- package/dist/core/proof-field.js +3 -3
- package/dist/core/provider/model-router.js +38 -32
- package/dist/core/recallpulse/policy.js +12 -28
- package/dist/core/recallpulse.js +11 -6
- package/dist/core/release/gate-manifest.js +18 -12
- package/dist/core/release/gate-pack-manifest.js +1 -1
- package/dist/core/release/npm-pack-proof.js +247 -0
- package/dist/core/release/package-dist-snapshot.js +151 -0
- package/dist/core/release/package-size-budget.js +5 -0
- package/dist/core/release/release-authorization-snapshot.js +115 -0
- package/dist/core/release/release-gate-affected-selector.js +15 -3
- package/dist/core/release/release-gate-cache-v2.js +30 -0
- package/dist/core/release/release-gate-contract.js +161 -0
- package/dist/core/release/release-gate-dag.js +44 -3
- package/dist/core/release/release-gate-hermetic-env.js +28 -17
- package/dist/core/release/release-real-contract.js +496 -0
- package/dist/core/release-parallel-full-coverage.js +31 -143
- package/dist/core/research/claim-evidence-matrix.js +41 -6
- package/dist/core/research/experiment-plan.js +14 -10
- package/dist/core/research/falsification.js +9 -2
- package/dist/core/research/implementation-blueprint-densifier.js +82 -60
- package/dist/core/research/implementation-blueprint.js +32 -26
- package/dist/core/research/mock-result.js +122 -11
- package/dist/core/research/replication-pack.js +15 -8
- package/dist/core/research/research-adversarial-review.js +1068 -0
- package/dist/core/research/research-claim-builder.js +69 -17
- package/dist/core/research/research-claim-synthesizer.js +343 -0
- package/dist/core/research/research-cycle-runner.js +53 -3
- package/dist/core/research/research-falsification-runner.js +176 -0
- package/dist/core/research/research-final-reviewer.js +44 -125
- package/dist/core/research/research-realistic-report.js +14 -6
- package/dist/core/research/research-review-artifact-digest.js +66 -0
- package/dist/core/research/research-source-evidence.js +144 -0
- package/dist/core/research/research-source-layer-catalog.js +68 -0
- package/dist/core/research/research-source-ledger-merge.js +250 -12
- package/dist/core/research/research-source-shards.js +26 -70
- package/dist/core/research/research-stage-runner.js +237 -247
- package/dist/core/research/research-super-search.js +184 -0
- package/dist/core/research/research-synthesis-prompt.js +20 -1
- package/dist/core/research/research-synthesis-writer.js +86 -5
- package/dist/core/research/research-work-graph.js +25 -18
- package/dist/core/research/source-quality-report.js +21 -0
- package/dist/core/research.js +429 -280
- package/dist/core/retention/retention-budget.js +25 -6
- package/dist/core/retention.js +980 -101
- package/dist/core/routes/constants.js +1 -1
- package/dist/core/routes/dollar-manifest-lite.js +11 -11
- package/dist/core/routes/evidence.js +4 -4
- package/dist/core/routes/ppt-policy.js +1 -1
- package/dist/core/routes.js +92 -64
- package/dist/core/runtime/task-profile.js +66 -0
- package/dist/core/runtime/verification-budget.js +12 -0
- package/dist/core/secret-redaction.js +4 -0
- package/dist/core/security/high-risk-contracts.js +6 -6
- package/dist/core/stop-gate/stop-gate-check.js +49 -12
- package/dist/core/subagents/agent-catalog.js +215 -0
- package/dist/core/subagents/model-policy.js +118 -0
- package/dist/core/subagents/naruto-help-contract.js +40 -0
- package/dist/core/subagents/official-subagent-config.js +488 -0
- package/dist/core/subagents/official-subagent-preparation.js +251 -0
- package/dist/core/subagents/official-subagent-prompt.js +137 -0
- package/dist/core/subagents/official-subagent-runner.js +129 -0
- package/dist/core/subagents/subagent-evidence.js +663 -0
- package/dist/core/subagents/terminology.js +16 -0
- package/dist/core/subagents/thread-budget.js +21 -0
- package/dist/core/subagents/triwiki-attention.js +65 -0
- package/dist/core/super-search/runtime-helpers.js +173 -19
- package/dist/core/super-search/runtime.js +140 -15
- package/dist/core/super-search/source-records.js +49 -8
- package/dist/core/team-review-policy.js +15 -0
- package/dist/core/triwiki/code-pack.js +8 -2
- package/dist/core/triwiki/triwiki-cache-key.js +108 -29
- package/dist/core/triwiki/triwiki-module-card.js +1 -1
- package/dist/core/triwiki-attention.js +13 -6
- package/dist/core/triwiki-provenance.js +274 -0
- package/dist/core/triwiki-runtime.js +21 -7
- package/dist/core/triwiki-wrongness/wrongness-ledger.js +187 -61
- package/dist/core/triwiki-wrongness/wrongness-retrieval.js +11 -2
- package/dist/core/triwiki-wrongness/wrongness-trust-policy.js +2 -0
- package/dist/core/update-check.js +23 -15
- package/dist/core/version-manager.js +51 -1
- package/dist/core/version.js +1 -1
- package/dist/core/wiki-coordinate.js +128 -12
- package/dist/core/work-order-ledger.js +208 -10
- package/dist/core/zellij/zellij-command.js +12 -1
- package/dist/core/zellij/zellij-dashboard-pane.js +3 -3
- package/dist/core/zellij/zellij-fake-adapter.js +3 -1
- package/dist/core/zellij/zellij-launcher.js +51 -21
- package/dist/core/zellij/zellij-layout-builder.js +14 -5
- package/dist/core/zellij/zellij-official-subagent-activity.js +477 -0
- package/dist/core/zellij/zellij-official-subagent-telemetry.js +264 -0
- package/dist/core/zellij/zellij-pane-proof.js +32 -6
- package/dist/core/zellij/zellij-slot-pane-renderer.js +17 -5
- package/dist/core/zellij/zellij-slot-telemetry.js +15 -3
- package/dist/core/zellij/zellij-ui-mode.js +1 -1
- package/dist/core/zellij/zellij-viewport-binder.js +3 -0
- package/dist/core/zellij/zellij-worker-pane-manager.js +5 -3
- package/dist/scripts/agent-fast-mode-default-check.js +48 -29
- package/dist/scripts/agent-role-config-repair-check.js +34 -15
- package/dist/scripts/agent-wiki-context-proof-check.js +16 -2
- package/dist/scripts/all-feature-deep-completion-check.js +14 -4
- package/dist/scripts/architecture-guard-check.js +8 -1
- package/dist/scripts/build-dist.js +17 -5
- package/dist/scripts/canonical-test-runner.js +188 -0
- package/dist/scripts/check-command-module-budget.js +38 -16
- package/dist/scripts/check-legacy-free.js +1 -1
- package/dist/scripts/check-route-modularity.js +0 -1
- package/dist/scripts/check-ts-contracts.js +1 -1
- package/dist/scripts/codex-0139-interrupt-agent-check.js +5 -1
- package/dist/scripts/{codex-0142-app-server-v2-check.js → codex-0144-app-server-v2-check.js} +11 -10
- package/dist/scripts/{codex-0142-binary-identity-check.js → codex-0144-binary-identity-check.js} +4 -4
- package/dist/scripts/codex-0144-capability-check.js +21 -0
- package/dist/scripts/{codex-0139-real-probes-check.js → codex-0144-core-real-probes-check.js} +19 -5
- package/dist/scripts/{codex-0142-doctor-wiring-check.js → codex-0144-doctor-wiring-check.js} +6 -6
- package/dist/scripts/{codex-0142-manifest-check.js → codex-0144-manifest-check.js} +11 -3
- package/dist/scripts/{codex-0142-policy-check.js → codex-0144-policy-check.js} +2 -2
- package/dist/scripts/{codex-0142-thread-store-check.js → codex-0144-thread-store-check.js} +3 -3
- package/dist/scripts/codex-app-provider-model-ui-check.js +53 -19
- package/dist/scripts/codex-app-ui-preservation-check.js +35 -4
- package/dist/scripts/codex-control-all-pipelines-check.js +7 -3
- package/dist/scripts/codex-control-side-effect-scope-check.js +2 -2
- package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +27 -0
- package/dist/scripts/codex-effort-auto-discovery-check.js +1 -1
- package/dist/scripts/codex-lb-fast-mode-truth-check.js +1 -0
- package/dist/scripts/{codex-lb-gpt55-fast-profile-check.js → codex-lb-gpt56-fast-profile-check.js} +56 -5
- package/dist/scripts/codex-model-metadata-check.js +1 -1
- package/dist/scripts/codex-native-agent-role-content-check.js +15 -7
- package/dist/scripts/codex-native-repair-transaction-check.js +3 -1
- package/dist/scripts/codex-sdk-all-pipelines-check.js +7 -4
- package/dist/scripts/codex-sdk-research-pipeline-check.js +30 -8
- package/dist/scripts/codex-sdk-sandbox-policy-check.js +5 -1
- package/dist/scripts/codex-sdk-version-compat-check.js +2 -1
- package/dist/scripts/db-route-materialization-check.js +33 -0
- package/dist/scripts/dfix-fixture-check.js +1 -1
- package/dist/scripts/docs-truthfulness-check.js +4 -2
- package/dist/scripts/doctor-codex-startup-repair-check.js +47 -25
- package/dist/scripts/doctor-context7-repair-check.js +2 -1
- package/dist/scripts/doctor-fix-production-blackbox.js +12 -2
- package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +34 -7
- package/dist/scripts/doctor-imagegen-repair-check.js +14 -4
- package/dist/scripts/doctor-startup-config-repair-blackbox.js +9 -3
- package/dist/scripts/doctor-startup-config-repair-check.js +13 -3
- package/dist/scripts/install-update-preserves-config-check.js +7 -2
- package/dist/scripts/legacy-gate-inventory-check.js +7 -5
- package/dist/scripts/legacy-strong-inventory-check.js +7 -5
- package/dist/scripts/legacy-upgrade-matrix-check.js +4 -4
- package/dist/scripts/lib/native-cli-session-swarm-check-lib.js +173 -13
- package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +165 -6
- package/dist/scripts/managed-role-manifest-parity-check.js +5 -4
- package/dist/scripts/mutation-callsite-coverage-check.js +0 -11
- package/dist/scripts/naruto-codex-e2e-check.js +14 -7
- package/dist/scripts/naruto-shadow-clone-swarm-check.js +4 -201
- package/dist/scripts/npm-publish-performance-check.js +20 -12
- package/dist/scripts/official-subagent-workflow-check.js +145 -0
- package/dist/scripts/package-published-contract-check.js +6 -20
- package/dist/scripts/packlist-performance-check.js +17 -3
- package/dist/scripts/parallel-verification-engine-check.js +2 -2
- package/dist/scripts/postinstall-safe-side-effects-check.js +8 -3
- package/dist/scripts/ppt-no-mock-as-real-check.js +3 -1
- package/dist/scripts/prepublish-release-check-or-fast.js +23 -86
- package/dist/scripts/product-design-plugin-routing-check.js +1 -1
- package/dist/scripts/release-affected-selector-check.js +74 -1
- package/dist/scripts/release-check-stamp.js +324 -239
- package/dist/scripts/release-dag-full-coverage-check.js +7 -15
- package/dist/scripts/release-dynamic-presets-check.js +10 -1
- package/dist/scripts/release-gate-dag-runner-check.js +3 -3
- package/dist/scripts/release-gate-dag-runner.js +35 -11
- package/dist/scripts/release-gate-existence-audit.js +1 -2
- package/dist/scripts/release-gate-script-parity-check.js +1 -1
- package/dist/scripts/release-parallel-full-coverage-check.js +12 -6
- package/dist/scripts/release-parallel-speed-budget-check.js +18 -2
- package/dist/scripts/release-real-check.js +390 -157
- package/dist/scripts/release-registry-check.js +61 -16
- package/dist/scripts/release-runtime-truth-matrix-check.js +22 -0
- package/dist/scripts/research-blueprint-densifier-check.js +2 -2
- package/dist/scripts/research-real-cycle-no-legacy-final-md-check.js +11 -7
- package/dist/scripts/route-proof-artifact-structure-check.js +1 -0
- package/dist/scripts/search-visibility-gate-lib.js +1 -1
- package/dist/scripts/seo-geo-route-identity-check.js +30 -4
- package/dist/scripts/sizecheck.js +4 -4
- package/dist/scripts/sks-1-11-gate-lib.js +53 -6
- package/dist/scripts/sks-3-1-4-directive-check-lib.js +8 -2
- package/dist/scripts/sks-3-1-5-directive-check-lib.js +3 -2
- package/dist/scripts/sks-3-1-6-directive-check-lib.js +5 -3
- package/dist/scripts/sks-menubar-install-check.js +8 -0
- package/dist/scripts/sks-uninstall-regression-check.js +1 -1
- package/dist/scripts/sksd-daemon-check.js +16 -6
- package/dist/scripts/trust-fixture-check.js +32 -10
- package/dist/scripts/write-build-manifest.js +2 -1
- package/dist/scripts/wrongness-fixture-check.js +1 -1
- package/dist/scripts/zellij-layout-valid-check.js +36 -11
- package/dist/scripts/zellij-pane-proof-check.js +33 -2
- package/dist/scripts/zellij-real-session-cleanup-check.js +122 -2
- package/dist/scripts/zellij-real-session-launch-check.js +76 -5
- package/dist/scripts/zellij-slot-pane-renderer-check.js +4 -4
- package/dist/scripts/zellij-spawn-on-demand-layout-check.js +3 -3
- package/docs/demo.tape +1 -1
- package/infra-harness-gates.json +1486 -0
- package/package.json +32 -19
- package/release-gates.v2.json +4060 -0
- package/runtime-required-scripts.json +9 -0
- package/schemas/codex/{app-server-0.142 → app-server-0.144}/codex_app_server_protocol.v2.schemas.json +1146 -781
- package/schemas/codex/codex-0139-real-probe-result.schema.json +39 -5
- package/schemas/codex/ppt-slide-issue-ledger.schema.json +2 -1
- package/dist/commands/db.js +0 -6
- package/dist/core/codex-control/codex-0139-multi-agent-real-probe.js +0 -107
- package/dist/core/commands/db-command.js +0 -146
- package/dist/core/research/prompt.js +0 -15
- package/dist/scripts/agent-native-release-gate.js +0 -274
- package/dist/scripts/codex-0142-capability-check.js +0 -21
- package/dist/scripts/codex-control-tool-call-sequence-repair-check.js +0 -14
- package/dist/scripts/command-performance-scorecard-check.js +0 -204
- package/dist/scripts/config-managed-merge-callsite-coverage-check.js +0 -212
- package/dist/scripts/dollar-performance-scorecard-check.js +0 -257
- package/dist/scripts/gate-timing-check.js +0 -16
- package/dist/scripts/ops-maturity-scorecard-check.js +0 -12
- package/dist/scripts/performance-baseline-check.js +0 -12
- package/dist/scripts/performance-improvement-report-check.js +0 -58
- package/dist/scripts/release-parallel-check.js +0 -389
- package/dist/scripts/release-runner-efficiency-check.js +0 -15
- package/dist/scripts/retention-long-run-smoke-check.js +0 -299
- package/docs/assets/sneakoscope-architecture-pipeline.jpg +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { assertGate, emitGate } from './sks-1-18-gate-lib.js';
|
|
3
|
+
import { CODEX_0144_FEATURE_KEYS, detectCodex0144Capability, writeCodex0144CapabilityArtifacts } from '../core/codex-control/codex-0144-capability.js';
|
|
4
|
+
const requireReal = process.argv.includes('--require-real') || process.env.SKS_REQUIRE_CODEX_0144 === '1';
|
|
5
|
+
if (!requireReal)
|
|
6
|
+
process.env.SKS_CODEX_0144_FAKE = '1';
|
|
7
|
+
const cap = await detectCodex0144Capability({ requireReal });
|
|
8
|
+
assertGate(cap.ok === true, 'Codex 0.144.1 capability probe must pass', cap);
|
|
9
|
+
assertGate(Object.keys(cap.feature_states).length === CODEX_0144_FEATURE_KEYS.length, 'Codex 0.144.1 feature count mismatch', cap);
|
|
10
|
+
assertGate(Object.values(cap.feature_states).every((state) => String(state.certainty) !== 'assumed_by_version'), 'Codex 0.144.1 capability must not use assumed_by_version evidence', cap);
|
|
11
|
+
if (requireReal) {
|
|
12
|
+
assertGate(cap.probe_mode === 'real-schema', 'Codex 0.144.1 require-real must use generated schema evidence', cap);
|
|
13
|
+
assertGate(cap.release_authorizing === true, 'Codex 0.144.1 require-real must be release-authorizing', cap);
|
|
14
|
+
await writeCodex0144CapabilityArtifacts(process.cwd(), { requireReal: true });
|
|
15
|
+
}
|
|
16
|
+
emitGate('codex:0144:capability', {
|
|
17
|
+
features: CODEX_0144_FEATURE_KEYS.length,
|
|
18
|
+
probe_mode: cap.probe_mode,
|
|
19
|
+
release_authorizing: cap.release_authorizing
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=codex-0144-capability-check.js.map
|
package/dist/scripts/{codex-0139-real-probes-check.js → codex-0144-core-real-probes-check.js}
RENAMED
|
@@ -1,28 +1,42 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// @ts-nocheck
|
|
3
|
-
import {
|
|
3
|
+
import { emitGate, importDist, root } from './sks-1-18-gate-lib.js';
|
|
4
4
|
const args = process.argv.slice(2);
|
|
5
5
|
const requireReal = args.includes('--require-real');
|
|
6
6
|
const allowNetwork = args.includes('--allow-network');
|
|
7
7
|
const allowDesktop = args.includes('--allow-desktop');
|
|
8
8
|
const json = args.includes('--json');
|
|
9
|
-
const timeoutMs = Number(readArg('--timeout-ms')
|
|
9
|
+
const timeoutMs = Number(readArg('--timeout-ms')
|
|
10
|
+
|| process.env.SKS_CODEX_0144_CORE_REAL_PROBE_TIMEOUT_MS
|
|
11
|
+
|| process.env.SKS_CODEX_0139_REAL_PROBE_TIMEOUT_MS
|
|
12
|
+
|| 120000);
|
|
10
13
|
const missionId = readArg('--mission-id') || process.env.SKS_MISSION_ID || process.env.SNEAKOSCOPE_MISSION_ID || null;
|
|
11
14
|
const probes = readRepeated('--probe');
|
|
12
15
|
const mod = await importDist('core/codex-control/codex-0139-probe-runner.js');
|
|
13
16
|
const writer = await importDist('core/codex-control/codex-0139-real-probes.js');
|
|
14
17
|
const result = await mod.runCodex0139RealProbes({ root, missionId, requireReal, allowNetwork, allowDesktop, timeoutMs, probes });
|
|
15
18
|
const artifacts = await writer.writeCodex0139RealProbeResult(root, result, { missionId, writeDist: true });
|
|
16
|
-
|
|
17
|
-
emitGate(requireReal ? 'codex:
|
|
19
|
+
const ok = requireReal ? result.release_authorizing === true : result.overall_ok === true;
|
|
20
|
+
emitGate(requireReal ? 'codex:0144-core-real-probes:require-real' : 'codex:0144-core-real-probes', {
|
|
21
|
+
ok,
|
|
18
22
|
overall_ok: result.overall_ok,
|
|
23
|
+
release_authorizing: result.release_authorizing,
|
|
24
|
+
target_version: result.target_version,
|
|
25
|
+
compatibility_origin: result.compatibility_origin,
|
|
26
|
+
compatibility_authority: result.compatibility_authority,
|
|
19
27
|
parsed_version: result.parsed_version,
|
|
28
|
+
requested_probes: result.requested_probes,
|
|
20
29
|
skipped: result.skipped,
|
|
21
30
|
blockers: result.blockers,
|
|
31
|
+
warnings: result.warnings,
|
|
32
|
+
external_integration_status: result.external_integration_status,
|
|
33
|
+
temp_cleanup: result.temp_cleanup,
|
|
22
34
|
artifact: '.sneakoscope/codex-0139-real-probes.json',
|
|
23
35
|
mission_artifact: artifacts.mission_artifact ? `.sneakoscope/missions/${missionId}/codex-0139-real-probes.json` : null,
|
|
24
36
|
...(json ? { result } : {})
|
|
25
37
|
});
|
|
38
|
+
if (!ok)
|
|
39
|
+
process.exitCode = 1;
|
|
26
40
|
function readArg(name) {
|
|
27
41
|
const idx = args.indexOf(name);
|
|
28
42
|
return idx >= 0 ? args[idx + 1] : null;
|
|
@@ -34,4 +48,4 @@ function readRepeated(name) {
|
|
|
34
48
|
out.push(args[i + 1]);
|
|
35
49
|
return out;
|
|
36
50
|
}
|
|
37
|
-
//# sourceMappingURL=codex-
|
|
51
|
+
//# sourceMappingURL=codex-0144-core-real-probes-check.js.map
|
package/dist/scripts/{codex-0142-doctor-wiring-check.js → codex-0144-doctor-wiring-check.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
|
|
3
|
-
process.env.
|
|
3
|
+
process.env.SKS_CODEX_0144_FAKE = '1';
|
|
4
4
|
process.env.SKS_CODEX_0138_FAKE = '1';
|
|
5
5
|
process.env.SKS_CODEX_0139_FAKE = '1';
|
|
6
6
|
process.env.SKS_CODEX_0140_FAKE = '1';
|
|
@@ -8,14 +8,14 @@ process.env.SKS_CODEX_PLUGIN_JSON_FAKE = '1';
|
|
|
8
8
|
const { buildCodexNativeFeatureMatrix } = await importDist('core/codex-native/codex-native-feature-broker.js');
|
|
9
9
|
const matrix = await buildCodexNativeFeatureMatrix({ root: process.cwd(), mode: 'read-only' });
|
|
10
10
|
const report = {
|
|
11
|
-
schema: 'sks.codex-
|
|
12
|
-
|
|
11
|
+
schema: 'sks.codex-0144-doctor-wiring-check.v1',
|
|
12
|
+
codex_0144: matrix.features.codex_0144?.ok,
|
|
13
13
|
multi_agent_mode: matrix.features.multi_agent_mode?.ok,
|
|
14
14
|
rollout_budget: matrix.features.rollout_budget?.ok,
|
|
15
15
|
indexed_web_search: matrix.features.indexed_web_search?.ok,
|
|
16
16
|
current_time_read: matrix.features.current_time_read?.ok,
|
|
17
17
|
invocation_defaults: matrix.invocation_defaults
|
|
18
18
|
};
|
|
19
|
-
assertGate(report.
|
|
20
|
-
emitGate('codex-native:
|
|
21
|
-
//# sourceMappingURL=codex-
|
|
19
|
+
assertGate(report.codex_0144 === true && report.multi_agent_mode === true && report.rollout_budget === true && report.indexed_web_search === true && report.current_time_read === true, 'Codex 0.144.1 capability must feed Doctor/native runtime feature matrix', report);
|
|
20
|
+
emitGate('codex-native:0144-doctor-wiring', report);
|
|
21
|
+
//# sourceMappingURL=codex-0144-doctor-wiring-check.js.map
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { assertGate, emitGate, readJson, root } from './sks-1-18-gate-lib.js';
|
|
3
3
|
import { codexReleaseManifestParity } from '../core/codex-compat/codex-release-manifest.js';
|
|
4
|
+
import { detectCodex0144Capability } from '../core/codex-control/codex-0144-capability.js';
|
|
4
5
|
const parity = await codexReleaseManifestParity(root);
|
|
6
|
+
const shippedCapability = await detectCodex0144Capability({ root });
|
|
5
7
|
const pkg = readJson('package.json');
|
|
6
8
|
const lock = readJson('package-lock.json');
|
|
7
9
|
const manifest = parity.manifest;
|
|
@@ -14,9 +16,15 @@ assertGate(dep === manifest.sdkVersion, 'package.json must pin @openai/codex-sdk
|
|
|
14
16
|
assertGate(lockSdk === manifest.sdkVersion, 'package-lock must resolve @openai/codex-sdk to manifest sdkVersion', { lockSdk, sdkVersion: manifest.sdkVersion });
|
|
15
17
|
assertGate(lockCli === manifest.requiredCliVersion, 'package-lock must resolve @openai/codex to manifest requiredCliVersion', { lockCli, requiredCliVersion: manifest.requiredCliVersion });
|
|
16
18
|
assertGate(pkg.version === lockRootVersion, 'package version must match package-lock root version', { version: pkg.version, lockRootVersion });
|
|
17
|
-
|
|
19
|
+
assertGate(shippedCapability.generated_schema_sha256 === manifest.generatedSchemaSha256, 'shipped App Server schema digest must match manifest generatedSchemaSha256', {
|
|
20
|
+
shippedSchemaSha256: shippedCapability.generated_schema_sha256,
|
|
21
|
+
manifestSchemaSha256: manifest.generatedSchemaSha256,
|
|
22
|
+
probeMode: shippedCapability.probe_mode
|
|
23
|
+
});
|
|
24
|
+
emitGate('codex:0144:manifest', {
|
|
18
25
|
manifest_sha256: parity.manifest_sha256,
|
|
19
26
|
target_tag: manifest.targetTag,
|
|
20
|
-
sdk_version: manifest.sdkVersion
|
|
27
|
+
sdk_version: manifest.sdkVersion,
|
|
28
|
+
generated_schema_sha256: shippedCapability.generated_schema_sha256
|
|
21
29
|
});
|
|
22
|
-
//# sourceMappingURL=codex-
|
|
30
|
+
//# sourceMappingURL=codex-0144-manifest-check.js.map
|
|
@@ -23,10 +23,10 @@ for (const key of ['AWS_SECRET_ACCESS_KEY', 'GITHUB_TOKEN', 'SLACK_BOT_TOKEN'])
|
|
|
23
23
|
assertGate(!(key in env.env), `secret env must not be inherited: ${key}`, env.proof);
|
|
24
24
|
}
|
|
25
25
|
assertGate(policy.network === 'disabled' && policy.approval === 'on-request' && policy.gitRepoCheck === 'required', 'default Codex execution policy must be conservative', policy);
|
|
26
|
-
emitGate('codex:
|
|
26
|
+
emitGate('codex:0144:policy', {
|
|
27
27
|
inherited_key_count: env.proof.inherited_key_count,
|
|
28
28
|
blocked_sensitive_host_env_key_count: env.proof.blocked_sensitive_host_env_key_count,
|
|
29
29
|
network: policy.network,
|
|
30
30
|
approval: policy.approval
|
|
31
31
|
});
|
|
32
|
-
//# sourceMappingURL=codex-
|
|
32
|
+
//# sourceMappingURL=codex-0144-policy-check.js.map
|
|
@@ -4,7 +4,7 @@ import os from 'node:os';
|
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { assertGate, emitGate } from './sks-1-18-gate-lib.js';
|
|
6
6
|
import { readCodexThreadRegistry, recordCodexThread } from '../core/codex-control/codex-thread-registry.js';
|
|
7
|
-
const tmp = await fsp.mkdtemp(path.join(os.tmpdir(), 'sks-codex-
|
|
7
|
+
const tmp = await fsp.mkdtemp(path.join(os.tmpdir(), 'sks-codex-0144-thread-store-'));
|
|
8
8
|
try {
|
|
9
9
|
await Promise.all(Array.from({ length: 100 }, async (_, index) => {
|
|
10
10
|
await recordCodexThread(tmp, {
|
|
@@ -33,7 +33,7 @@ try {
|
|
|
33
33
|
await recordCodexThread(tmp, { thread_id: 'after-corruption', session_id: 'session-b', work_item_id: 'work-corrupt' });
|
|
34
34
|
const repaired = await readCodexThreadRegistry(tmp);
|
|
35
35
|
assertGate(repaired?.corruption?.preserved_path, 'thread registry corruption must be preserved with evidence', repaired);
|
|
36
|
-
emitGate('codex:
|
|
36
|
+
emitGate('codex:0144:thread-store', {
|
|
37
37
|
concurrent_writes: 100,
|
|
38
38
|
storage_mode: registry.storage_mode,
|
|
39
39
|
corruption_preserved: true
|
|
@@ -51,4 +51,4 @@ async function exists(file) {
|
|
|
51
51
|
return false;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
//# sourceMappingURL=codex-
|
|
54
|
+
//# sourceMappingURL=codex-0144-thread-store-check.js.map
|
|
@@ -14,30 +14,44 @@ const missing = await codexProviderModelUiStatus({ home, cwd, env: { HOME: home
|
|
|
14
14
|
const missingText = formatCodexAppStatus(statusFixture(missing));
|
|
15
15
|
await fs.writeFile(path.join(home, '.codex', 'config.toml'), readyConfig(), 'utf8');
|
|
16
16
|
await fs.writeFile(path.join(home, '.codex', 'sks-codex-lb.env'), "export CODEX_LB_BASE_URL='https://lb.example.test/backend-api/codex'\nexport CODEX_LB_API_KEY='sk-codex-lb-fixture'\n", 'utf8');
|
|
17
|
+
const readyCatalog = {
|
|
18
|
+
schema: 'sks.codex-lb-model-catalog.v1',
|
|
19
|
+
ok: true,
|
|
20
|
+
status: 'ready',
|
|
21
|
+
models: ['gpt-5.6-sol', 'gpt-5.6-terra', 'gpt-5.6-luna'],
|
|
22
|
+
model_efforts: {
|
|
23
|
+
'gpt-5.6-sol': ['xhigh', 'max', 'ultra'],
|
|
24
|
+
'gpt-5.6-terra': ['xhigh', 'max', 'ultra'],
|
|
25
|
+
'gpt-5.6-luna': ['xhigh', 'max']
|
|
26
|
+
},
|
|
27
|
+
blockers: []
|
|
28
|
+
};
|
|
17
29
|
const ready = await codexProviderModelUiStatus({
|
|
18
30
|
home,
|
|
19
31
|
cwd,
|
|
20
32
|
env: { HOME: home, OPENROUTER_API_KEY: 'sk-or-fixture' },
|
|
21
|
-
codexLbModelCatalog:
|
|
22
|
-
schema: 'sks.codex-lb-model-catalog.v1',
|
|
23
|
-
ok: true,
|
|
24
|
-
status: 'ready',
|
|
25
|
-
models: ['gpt-5.6-sol', 'gpt-5.6-terra', 'gpt-5.6-luna'],
|
|
26
|
-
model_efforts: {
|
|
27
|
-
'gpt-5.6-sol': ['xhigh', 'max', 'ultra'],
|
|
28
|
-
'gpt-5.6-terra': ['xhigh', 'max', 'ultra'],
|
|
29
|
-
'gpt-5.6-luna': ['xhigh', 'max']
|
|
30
|
-
},
|
|
31
|
-
blockers: []
|
|
32
|
-
}
|
|
33
|
+
codexLbModelCatalog: readyCatalog
|
|
33
34
|
});
|
|
34
35
|
const readyText = formatCodexAppStatus(statusFixture(ready));
|
|
35
|
-
|
|
36
|
+
await fs.writeFile(path.join(home, '.codex', 'config.toml'), codexLbOnlyConfig(), 'utf8');
|
|
37
|
+
const selectedCodexLb = await codexProviderModelUiStatus({
|
|
38
|
+
home,
|
|
39
|
+
cwd,
|
|
40
|
+
env: { HOME: home },
|
|
41
|
+
codexLbModelCatalog: readyCatalog
|
|
42
|
+
});
|
|
43
|
+
const ok = missing.ok === true
|
|
44
|
+
&& missing.status === 'ready'
|
|
45
|
+
&& missing.selected_provider === 'oauth'
|
|
46
|
+
&& missing.blockers.length === 0
|
|
47
|
+
&& missing.optional_provider_status === 'setup_available'
|
|
48
|
+
&& missing.optional_provider_blockers.includes('glm_openrouter_provider_missing')
|
|
49
|
+
&& missing.optional_provider_blockers.includes('codex_lb_provider_missing')
|
|
36
50
|
&& missing.glm.exposed === false
|
|
37
51
|
&& missing.codex_lb.key_entry_visible === true
|
|
38
52
|
&& missing.ui_actions.includes('sks codex-app set-openrouter-key --api-key-stdin')
|
|
39
53
|
&& missing.ui_actions.includes('sks codex-lb setup --host <domain> --api-key-stdin --yes')
|
|
40
|
-
&& /Provider UI:\s*
|
|
54
|
+
&& /Provider UI:\s*oauth ready, optional providers can be configured/.test(missingText)
|
|
41
55
|
&& /GLM Model:\s*setup/.test(missingText)
|
|
42
56
|
&& /codex-lb Key:\s*missing \(input: sks codex-lb setup/.test(missingText)
|
|
43
57
|
&& ready.ok === true
|
|
@@ -48,17 +62,24 @@ const ok = missing.ok === false
|
|
|
48
62
|
&& ready.codex_lb.key_present === true
|
|
49
63
|
&& ready.codex_lb.model_catalog_ok === true
|
|
50
64
|
&& ready.codex_lb.expected_models_present === true
|
|
51
|
-
&& /Provider UI:\s*
|
|
65
|
+
&& /Provider UI:\s*oauth ready/.test(readyText)
|
|
52
66
|
&& ready.desktop_picker_verified === false
|
|
53
67
|
&& readyText.includes(`GLM Model: ok ${GLM_52_OPENROUTER_MODEL}`)
|
|
54
68
|
&& /codex-lb Key:\s*configured/.test(readyText)
|
|
55
|
-
&&
|
|
69
|
+
&& selectedCodexLb.ok === true
|
|
70
|
+
&& selectedCodexLb.status === 'ready'
|
|
71
|
+
&& selectedCodexLb.selected_provider === 'codex-lb'
|
|
72
|
+
&& selectedCodexLb.selected_provider_blockers.length === 0
|
|
73
|
+
&& selectedCodexLb.blockers.length === 0
|
|
74
|
+
&& selectedCodexLb.optional_provider_blockers.includes('glm_openrouter_provider_missing')
|
|
75
|
+
&& !JSON.stringify({ missing, ready, selectedCodexLb, missingText, readyText }).includes('sk-codex-lb-fixture');
|
|
56
76
|
emit({
|
|
57
77
|
schema: 'sks.codex-app-provider-model-ui-check.v1',
|
|
58
78
|
ok,
|
|
59
79
|
missing,
|
|
60
80
|
ready,
|
|
61
|
-
|
|
81
|
+
selected_codex_lb: selectedCodexLb,
|
|
82
|
+
secret_safe: !JSON.stringify({ missing, ready, selectedCodexLb, missingText, readyText }).includes('sk-codex-lb-fixture'),
|
|
62
83
|
blockers: ok ? [] : ['codex_app_provider_model_ui_check_failed']
|
|
63
84
|
});
|
|
64
85
|
function readyConfig() {
|
|
@@ -89,12 +110,25 @@ function readyConfig() {
|
|
|
89
110
|
''
|
|
90
111
|
].join('\n');
|
|
91
112
|
}
|
|
113
|
+
function codexLbOnlyConfig() {
|
|
114
|
+
return [
|
|
115
|
+
'model_provider = "codex-lb"',
|
|
116
|
+
'[model_providers.codex-lb]',
|
|
117
|
+
'name = "openai"',
|
|
118
|
+
'base_url = "https://lb.example.test/backend-api/codex"',
|
|
119
|
+
'wire_api = "responses"',
|
|
120
|
+
'env_key = "CODEX_LB_API_KEY"',
|
|
121
|
+
'supports_websockets = true',
|
|
122
|
+
'requires_openai_auth = true',
|
|
123
|
+
''
|
|
124
|
+
].join('\n');
|
|
125
|
+
}
|
|
92
126
|
function statusFixture(providerModelUi) {
|
|
93
127
|
return {
|
|
94
128
|
ok: providerModelUi.ok,
|
|
95
129
|
app: { installed: true, path: '/Applications/Codex.app' },
|
|
96
|
-
codex_cli: { ok: true, version: '0.
|
|
97
|
-
remote_control: { ok: true, min_version: '0.130.0', codex_cli: { version_number: '0.
|
|
130
|
+
codex_cli: { ok: true, version: '0.144.1' },
|
|
131
|
+
remote_control: { ok: true, min_version: '0.130.0', codex_cli: { version_number: '0.144.1' } },
|
|
98
132
|
features: {
|
|
99
133
|
checked: true,
|
|
100
134
|
required_flags_ok: true,
|
|
@@ -34,13 +34,14 @@ delete process.env.SKS_MANAGE_CODEX_APP_PLUGINS;
|
|
|
34
34
|
const ok = featureValue(out, 'hooks') === 'false' && featureValue(out, 'multi_agent') === 'false';
|
|
35
35
|
results.push({ case: 'preserves_disabled_features', ok, hooks: featureValue(out, 'hooks') });
|
|
36
36
|
}
|
|
37
|
-
// 1b)
|
|
37
|
+
// 1b) Stable host capabilities preserve an explicit user false; only a
|
|
38
|
+
// genuinely removed SKS stamp is stripped.
|
|
38
39
|
{
|
|
39
40
|
const out = normalize('[features]\nguardian_approval = false\nbrowser_use_external = false\nfast_mode_ui = true\n');
|
|
40
|
-
const ok = featureValue(out, 'guardian_approval') ===
|
|
41
|
-
&& featureValue(out, 'browser_use_external') ===
|
|
41
|
+
const ok = featureValue(out, 'guardian_approval') === 'false'
|
|
42
|
+
&& featureValue(out, 'browser_use_external') === 'false'
|
|
42
43
|
&& featureValue(out, 'fast_mode_ui') === undefined;
|
|
43
|
-
results.push({ case: '
|
|
44
|
+
results.push({ case: 'preserves_stable_and_strips_removed_flags', ok });
|
|
44
45
|
}
|
|
45
46
|
// 2) Default install must NOT auto-enable any marketplace plugins.
|
|
46
47
|
{
|
|
@@ -66,11 +67,41 @@ delete process.env.SKS_MANAGE_CODEX_APP_PLUGINS;
|
|
|
66
67
|
&& featureValue(out, 'hooks') === 'true'
|
|
67
68
|
&& featureValue(out, 'multi_agent') === 'true'
|
|
68
69
|
&& featureValue(out, 'fast_mode') === 'true'
|
|
70
|
+
&& featureValue(out, 'computer_use') === 'true'
|
|
71
|
+
&& featureValue(out, 'browser_use') === 'true'
|
|
72
|
+
&& featureValue(out, 'browser_use_external') === 'true'
|
|
73
|
+
&& featureValue(out, 'image_generation') === 'true'
|
|
74
|
+
&& featureValue(out, 'in_app_browser') === 'true'
|
|
75
|
+
&& featureValue(out, 'tool_suggest') === 'true'
|
|
76
|
+
&& featureValue(out, 'plugins') === 'true'
|
|
69
77
|
&& !/\[user\.fast_mode\]/.test(out)
|
|
70
78
|
&& !/\[profiles\.sks-fast-high\]/.test(out)
|
|
71
79
|
&& !/^model\s*=/m.test(out);
|
|
72
80
|
results.push({ case: 'fresh_config_seeds_defaults', ok });
|
|
73
81
|
}
|
|
82
|
+
// 7) A blank-separated SKS migration block must release only its own native
|
|
83
|
+
// model/reasoning locks. The documented service tier and an unrelated user
|
|
84
|
+
// model selection remain untouched.
|
|
85
|
+
{
|
|
86
|
+
const migrated = normalize([
|
|
87
|
+
'# SKS moved machine-local Codex config from .codex/config.toml at 2026-07-11T00:00:00Z',
|
|
88
|
+
'',
|
|
89
|
+
'service_tier = "fast"',
|
|
90
|
+
'model = "gpt-5.6-sol"',
|
|
91
|
+
'model_reasoning_effort = "ultra"',
|
|
92
|
+
'',
|
|
93
|
+
'[features]',
|
|
94
|
+
'fast_mode = true',
|
|
95
|
+
''
|
|
96
|
+
].join('\n'));
|
|
97
|
+
const user = normalize('model = "user-selected-model"\nmodel_reasoning_effort = "low"\nservice_tier = "fast"\n');
|
|
98
|
+
const ok = !/^model\s*=/m.test(migrated.split(/\n\s*\[/)[0] || '')
|
|
99
|
+
&& !/^model_reasoning_effort\s*=/m.test(migrated.split(/\n\s*\[/)[0] || '')
|
|
100
|
+
&& /^service_tier\s*=\s*"fast"/m.test(migrated)
|
|
101
|
+
&& /^model\s*=\s*"user-selected-model"/m.test(user)
|
|
102
|
+
&& /^model_reasoning_effort\s*=\s*"low"/m.test(user);
|
|
103
|
+
results.push({ case: 'bounded_sks_mode_lock_provenance', ok });
|
|
104
|
+
}
|
|
74
105
|
// 6) Opt-in enables plugins on a fresh config, but still preserves a user-disabled one.
|
|
75
106
|
{
|
|
76
107
|
process.env.SKS_MANAGE_CODEX_APP_PLUGINS = '1';
|
|
@@ -12,6 +12,7 @@ const sources = {
|
|
|
12
12
|
team: readText('src/core/commands/team-command.ts'),
|
|
13
13
|
qa: readText('src/core/commands/qa-loop-command.ts'),
|
|
14
14
|
research: readText('src/core/commands/research-command.ts'),
|
|
15
|
+
researchStage: readText('src/core/research/research-stage-runner.ts'),
|
|
15
16
|
naruto: readText('src/core/commands/naruto-command.ts'),
|
|
16
17
|
dfix: readText('src/core/commands/dfix-command.ts'),
|
|
17
18
|
workerRouter: readText('src/core/agents/native-worker-backend-router.ts')
|
|
@@ -19,11 +20,14 @@ const sources = {
|
|
|
19
20
|
const teamCreateRedirectsToNaruto = sources.team.includes('redirectTeamCreateToNaruto') && sources.team.includes('narutoCommand');
|
|
20
21
|
assertGate(teamCreateRedirectsToNaruto, 'Team create must route through Naruto codex control backend SSOT');
|
|
21
22
|
assertGate(sources.qa.includes("mock ? 'fake' : 'codex-sdk'"), 'QA must route native agents through codex control backend');
|
|
22
|
-
assertGate(sources.research.includes("mock ? '
|
|
23
|
-
|
|
23
|
+
assertGate(sources.research.includes("backend: mock ? 'mock' : 'codex-sdk'")
|
|
24
|
+
&& sources.researchStage.includes('runCodexTask({'), 'Research must route real stages through the Codex control backend');
|
|
25
|
+
assertGate(sources.naruto.includes('runOfficialSubagentWorkflow'), 'Naruto must invoke the official Codex subagent runner');
|
|
26
|
+
assertGate(sources.naruto.includes("workflow: 'official_codex_subagent'"), 'Naruto must persist the official subagent workflow contract');
|
|
27
|
+
assertGate(!sources.naruto.includes("backend: 'codex-sdk'"), 'Naruto must not fall back to the legacy codex-sdk backend selector');
|
|
24
28
|
assertGate(sources.workerRouter.includes('runCodexTask({'), 'native worker router must call runCodexTask');
|
|
25
29
|
const fixture = await runFakeCodexSdkTaskFixture('control-all-pipelines');
|
|
26
30
|
assertGate(fixture.result.ok === true, 'all pipeline control fixture must pass', fixture.result);
|
|
27
31
|
assertGate(fixture.proof.reliability_shield?.ok === true, 'all pipeline fixture must include reliability shield proof', fixture.proof);
|
|
28
|
-
emitGate('codex-control:all-pipelines', { gates: required.length, sdk_thread_id: fixture.result.sdkThreadId });
|
|
32
|
+
emitGate('codex-control:all-pipelines', { gates: required.length, naruto_workflow: 'official_codex_subagent', sdk_thread_id: fixture.result.sdkThreadId });
|
|
29
33
|
//# sourceMappingURL=codex-control-all-pipelines-check.js.map
|
|
@@ -13,12 +13,12 @@ const base = {
|
|
|
13
13
|
mutationLedgerRoot: process.cwd()
|
|
14
14
|
};
|
|
15
15
|
const readOnly = mod.mapCodexSdkSandboxPolicy({ ...base, sandboxPolicy: 'read-only', requestedScopeContract: { read_only: true } });
|
|
16
|
-
const
|
|
16
|
+
const emptyWriteScope = mod.mapCodexSdkSandboxPolicy({ ...base, sandboxPolicy: 'workspace-write', requestedScopeContract: { read_only: false, allowed_paths: [], write_paths: [] } });
|
|
17
17
|
const workspaceScoped = mod.mapCodexSdkSandboxPolicy({ ...base, sandboxPolicy: 'workspace-write', requestedScopeContract: { read_only: false, allowed_paths: ['src/core'], write_paths: ['src/core'] } });
|
|
18
18
|
const fullBlocked = mod.mapCodexSdkSandboxPolicy({ ...base, sandboxPolicy: 'full-access', requestedScopeContract: { read_only: false, user_confirmed_full_access: true, mad_sks_authorized: false } });
|
|
19
19
|
const fullMad = mod.mapCodexSdkSandboxPolicy({ ...base, sandboxPolicy: 'full-access', requestedScopeContract: { read_only: false, user_confirmed_full_access: true, mad_sks_authorized: true } });
|
|
20
20
|
assertGate(readOnly.ok && readOnly.sandboxMode === 'read-only', 'read-only sandbox mapping failed', readOnly);
|
|
21
|
-
assertGate(
|
|
21
|
+
assertGate(emptyWriteScope.ok && emptyWriteScope.sandboxMode === 'read-only', 'workspace-write without scoped paths must downgrade to read-only', emptyWriteScope);
|
|
22
22
|
assertGate(workspaceScoped.ok && workspaceScoped.sandboxMode === 'workspace-write', 'workspace-write scoped mapping failed', workspaceScoped);
|
|
23
23
|
assertGate(!fullBlocked.ok && fullBlocked.blockers.includes('codex_sdk_full_access_requires_explicit_mad_scope'), 'full-access must require explicit MAD scope', fullBlocked);
|
|
24
24
|
assertGate(fullMad.ok && fullMad.sandboxMode === 'danger-full-access', 'MAD-scoped full access must map to danger-full-access', fullMad);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
|
|
4
|
+
const mod = await importDist('core/codex-control/codex-reliability-shield.js');
|
|
5
|
+
const audit = mod.auditToolOutputContinuity([
|
|
6
|
+
{ type: 'thread.started' },
|
|
7
|
+
{ type: 'item.completed', item: { id: 'call-1', call_id: 'call-1', type: 'custom_tool_call', name: 'fixture' } },
|
|
8
|
+
{ type: 'item.completed', item: { id: 'call-2', call_id: 'call-2', type: 'custom_tool_call', name: 'fixture' } },
|
|
9
|
+
{ type: 'item.completed', item: { call_id: 'call-1', type: 'custom_tool_call_output', output: 'ok' } }
|
|
10
|
+
]);
|
|
11
|
+
assertGate(audit.missingToolResultCount === 1, 'one missing custom tool output must be detected', audit);
|
|
12
|
+
assertGate(audit.missingToolCallIds.includes('call-2'), 'missing custom tool call id not reported', audit);
|
|
13
|
+
assertGate(!audit.events.some((event) => event.type === 'tool_result.stubbed'), 'continuity audit must never fabricate a tool output', audit);
|
|
14
|
+
const rolloutAudit = mod.auditToolOutputContinuity([
|
|
15
|
+
{ type: 'response_item', payload: { type: 'custom_tool_call', call_id: 'rollout-call-1', name: 'fixture' } },
|
|
16
|
+
{ type: 'rollout_record', response_item: { payload: { type: 'custom_tool_call', call_id: 'rollout-call-2', name: 'fixture' } } },
|
|
17
|
+
{ type: 'response_item', payload: { type: 'custom_tool_call_output', call_id: 'rollout-call-1', output: 'ok' } }
|
|
18
|
+
]);
|
|
19
|
+
assertGate(rolloutAudit.missingToolResultCount === 1, 'persisted response_item rollout envelopes must be audited', rolloutAudit);
|
|
20
|
+
assertGate(rolloutAudit.missingToolCallIds.includes('rollout-call-2'), 'rollout envelope missing call id not reported', rolloutAudit);
|
|
21
|
+
emitGate('codex-control:tool-output-continuity-audit', {
|
|
22
|
+
status: 'fail_closed_audit',
|
|
23
|
+
fabricated_tool_result_count: 0,
|
|
24
|
+
missing_tool_result_count: audit.missingToolResultCount,
|
|
25
|
+
rollout_missing_tool_result_count: rolloutAudit.missingToolResultCount
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=codex-control-tool-output-continuity-audit-check.js.map
|
|
@@ -4,7 +4,7 @@ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
|
|
|
4
4
|
process.env.SKS_CODEX_MODEL_METADATA_FAKE = '1';
|
|
5
5
|
process.env.SKS_CODEX_MODEL_EFFORTS = 'low,medium,high,xhigh';
|
|
6
6
|
const mod = await importDist('core/codex-control/codex-model-capabilities.js');
|
|
7
|
-
const capability = await mod.resolveCodexModelEffortCapability({ model: 'gpt-5.
|
|
7
|
+
const capability = await mod.resolveCodexModelEffortCapability({ model: 'gpt-5.6-terra' });
|
|
8
8
|
assertGate(capability.metadata_source === 'app-server' && capability.advertised_efforts.join(',') === 'low,medium,high,xhigh', 'effort capability must auto-discover model advertised effort order');
|
|
9
9
|
delete process.env.SKS_CODEX_MODEL_METADATA_FAKE;
|
|
10
10
|
delete process.env.SKS_CODEX_MODEL_EFFORTS;
|
|
@@ -7,6 +7,7 @@ const calls = [];
|
|
|
7
7
|
const home = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-codex-lb-fast-truth-'));
|
|
8
8
|
await fs.mkdir(path.join(home, '.codex'), { recursive: true });
|
|
9
9
|
await fs.writeFile(path.join(home, '.codex', 'config.toml'), [
|
|
10
|
+
'model = "gpt-5.6-sol"',
|
|
10
11
|
'model_provider = "codex-lb"',
|
|
11
12
|
'service_tier = "fast"',
|
|
12
13
|
'',
|
package/dist/scripts/{codex-lb-gpt55-fast-profile-check.js → codex-lb-gpt56-fast-profile-check.js}
RENAMED
|
@@ -5,7 +5,8 @@ import path from 'node:path';
|
|
|
5
5
|
import { codexFastModeDesktopStatus, codexLbConfigPath, configureCodexLb, ensureGlobalCodexFastModeDuringInstall, releaseCodexLbAuthHold, repairCodexLbAuth } from '../cli/install-helpers.js';
|
|
6
6
|
import { repairCodexConfigStructure, splitCodexProjectConfigPolicy } from '../core/codex/codex-project-config-policy.js';
|
|
7
7
|
import { parseCodexConfigToml, validateCodexConfigRoundTrip } from '../core/codex/codex-config-toml.js';
|
|
8
|
-
|
|
8
|
+
import { normalizeCodexLbToolCatalog } from '../core/codex-lb/codex-lb-tool-catalog.js';
|
|
9
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-codex-lb-gpt56-fast-'));
|
|
9
10
|
const home = path.join(tmp, 'home');
|
|
10
11
|
const root = path.join(tmp, 'project');
|
|
11
12
|
const codexHome = path.join(home, '.codex');
|
|
@@ -52,6 +53,7 @@ await fs.writeFile(projectConfig, [
|
|
|
52
53
|
const split = await splitCodexProjectConfigPolicy(root, { apply: true, codexHome, configPath: projectConfig, writeReport: false });
|
|
53
54
|
const structure = await repairCodexConfigStructure(configPath, { apply: true });
|
|
54
55
|
const final = assertFastProfile(await fs.readFile(configPath, 'utf8'), 'after_rewriters');
|
|
56
|
+
const toolCatalog = assertGpt56ToolCatalogContract();
|
|
55
57
|
const ok = setup.ok !== false
|
|
56
58
|
&& !['failed', 'skipped_unsafe_rewrite', 'unparseable_config_preserved'].includes(String(fastOn.status))
|
|
57
59
|
&& release.status !== 'failed'
|
|
@@ -60,9 +62,10 @@ const ok = setup.ok !== false
|
|
|
60
62
|
&& structure.ok === true
|
|
61
63
|
&& first.ok
|
|
62
64
|
&& afterOauth.ok
|
|
63
|
-
&& final.ok
|
|
65
|
+
&& final.ok
|
|
66
|
+
&& toolCatalog.ok;
|
|
64
67
|
const report = {
|
|
65
|
-
schema: 'sks.codex-lb-
|
|
68
|
+
schema: 'sks.codex-lb-gpt56-fast-profile-check.v1',
|
|
66
69
|
ok,
|
|
67
70
|
setup_status: setup.status,
|
|
68
71
|
fast_on_status: fastOn.status,
|
|
@@ -71,7 +74,8 @@ const report = {
|
|
|
71
74
|
split_status: split.status || null,
|
|
72
75
|
structure_status: structure.status,
|
|
73
76
|
assertions: [first, afterOauth, final],
|
|
74
|
-
|
|
77
|
+
tool_catalog: toolCatalog,
|
|
78
|
+
blockers: [...[first, afterOauth, final].flatMap((item) => item.blockers), ...toolCatalog.blockers]
|
|
75
79
|
};
|
|
76
80
|
console.log(JSON.stringify(report, null, 2));
|
|
77
81
|
if (!report.ok)
|
|
@@ -103,4 +107,51 @@ function assertFastProfile(text, label) {
|
|
|
103
107
|
blockers
|
|
104
108
|
};
|
|
105
109
|
}
|
|
106
|
-
|
|
110
|
+
function assertGpt56ToolCatalogContract() {
|
|
111
|
+
const normalized = normalizeCodexLbToolCatalog({
|
|
112
|
+
models: ['gpt-5.6-sol', 'gpt-5.6-terra', 'gpt-5.6-luna'].map(codex0144Model)
|
|
113
|
+
});
|
|
114
|
+
const models = normalized.catalog.models.filter((model) => String(model.slug).startsWith('gpt-5.6-'));
|
|
115
|
+
const blockers = [
|
|
116
|
+
...normalized.blockers,
|
|
117
|
+
...(normalized.schema === 'sks.codex-lb-tool-catalog.v1' ? [] : ['codex_lb_gpt56_catalog_schema_mismatch']),
|
|
118
|
+
...(normalized.tools_transport === 'full_responses' ? [] : ['codex_lb_gpt56_native_tool_transport_not_full_responses']),
|
|
119
|
+
...(normalized.patched_models.join(',') === 'gpt-5.6-luna,gpt-5.6-sol,gpt-5.6-terra' ? [] : ['codex_lb_gpt56_catalog_patch_set_incomplete']),
|
|
120
|
+
...(models.length === 3 ? [] : ['codex_lb_gpt56_catalog_model_set_incomplete']),
|
|
121
|
+
...(models.every((model) => model.use_responses_lite === false) ? [] : ['codex_lb_gpt56_responses_lite_not_disabled']),
|
|
122
|
+
...(models.every((model) => model.tool_mode === 'code_mode_only') ? [] : ['codex_lb_gpt56_native_tool_mode_not_preserved']),
|
|
123
|
+
...(models.every((model) => model.supports_parallel_tool_calls === true) ? [] : ['codex_lb_gpt56_parallel_tool_calls_not_preserved']),
|
|
124
|
+
...(models.every((model) => model.minimal_client_version === '0.144.1') ? [] : ['codex_lb_gpt56_codex_0144_contract_missing'])
|
|
125
|
+
];
|
|
126
|
+
return {
|
|
127
|
+
schema: normalized.schema,
|
|
128
|
+
ok: blockers.length === 0,
|
|
129
|
+
codex_cli_contract: '0.144.1',
|
|
130
|
+
models: normalized.gpt56_models,
|
|
131
|
+
patched_models: normalized.patched_models,
|
|
132
|
+
tools_transport: normalized.tools_transport,
|
|
133
|
+
native_tool_mode: 'code_mode_only',
|
|
134
|
+
blockers
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function codex0144Model(slug) {
|
|
138
|
+
return {
|
|
139
|
+
slug,
|
|
140
|
+
display_name: slug.replace('gpt-', 'GPT-').replaceAll('-', ' '),
|
|
141
|
+
supported_reasoning_levels: [{ effort: 'max', description: 'Maximum' }],
|
|
142
|
+
shell_type: 'shell_command',
|
|
143
|
+
visibility: 'list',
|
|
144
|
+
supported_in_api: true,
|
|
145
|
+
priority: 1,
|
|
146
|
+
base_instructions: 'You are Codex.',
|
|
147
|
+
supports_reasoning_summaries: true,
|
|
148
|
+
support_verbosity: true,
|
|
149
|
+
truncation_policy: { mode: 'tokens', limit: 10_000 },
|
|
150
|
+
supports_parallel_tool_calls: true,
|
|
151
|
+
experimental_supported_tools: [],
|
|
152
|
+
tool_mode: 'code_mode_only',
|
|
153
|
+
use_responses_lite: true,
|
|
154
|
+
minimal_client_version: '0.144.1'
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=codex-lb-gpt56-fast-profile-check.js.map
|
|
@@ -4,7 +4,7 @@ import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
|
|
|
4
4
|
process.env.SKS_CODEX_MODEL_METADATA_FAKE = '1';
|
|
5
5
|
process.env.SKS_CODEX_MODEL_EFFORTS = 'low,medium,high,xhigh';
|
|
6
6
|
const mod = await importDist('core/codex-control/codex-model-metadata.js');
|
|
7
|
-
const metadata = await mod.collectCodexModelMetadata({ model: 'gpt-5.
|
|
7
|
+
const metadata = await mod.collectCodexModelMetadata({ model: 'gpt-5.6-terra' });
|
|
8
8
|
assertGate(metadata.source === 'app-server' && metadata.advertised_efforts.includes('xhigh'), 'Codex model metadata collector must expose advertised efforts');
|
|
9
9
|
emitGate('codex:model-metadata', { source: metadata.source, efforts: metadata.advertised_efforts });
|
|
10
10
|
//# sourceMappingURL=codex-model-metadata-check.js.map
|
|
@@ -2,18 +2,26 @@
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import os from 'node:os';
|
|
5
|
+
import { parse } from 'smol-toml';
|
|
5
6
|
import { syncCodexAgentRoles } from '../core/codex-app/codex-agent-role-sync.js';
|
|
7
|
+
import { MANAGED_OFFICIAL_SUBAGENT_ROLES } from '../core/managed-assets/managed-assets-manifest.js';
|
|
6
8
|
const root = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'sks-agent-role-content-'));
|
|
7
9
|
const codexHome = path.join(root, 'codex-home');
|
|
8
10
|
const report = await syncCodexAgentRoles({ root, codexHome, apply: true, agentTypeSupported: true });
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
const expert = await fs.promises.readFile(path.join(root, '.codex', 'agents', 'expert.toml'), 'utf8');
|
|
12
|
+
const worker = await fs.promises.readFile(path.join(root, '.codex', 'agents', 'worker.toml'), 'utf8');
|
|
13
|
+
assertGate(expert.includes('model = "gpt-5.6-sol"') && expert.includes('model_reasoning_effort = "max"'), 'expert role must use Sol Max');
|
|
14
|
+
assertGate(worker.includes('model = "gpt-5.6-luna"') && worker.includes('model_reasoning_effort = "max"'), 'worker role must use Luna Max');
|
|
15
|
+
assertGate(expert.includes('Do not spawn another subagent.') && worker.includes('Do not redesign the task, expand scope, or spawn another subagent.'), 'official roles must prohibit nested delegation');
|
|
16
|
+
for (const role of MANAGED_OFFICIAL_SUBAGENT_ROLES) {
|
|
17
|
+
const text = await fs.promises.readFile(path.join(root, '.codex', 'agents', role.filename), 'utf8');
|
|
18
|
+
const doc = parse(text);
|
|
19
|
+
assertGate(doc.name === role.codex_name && doc.model === role.model && doc.model_reasoning_effort === 'max', `official role policy mismatch:${role.codex_name}`);
|
|
20
|
+
assertGate(Object.hasOwn(doc, 'sandbox_mode') === (role.sandbox === 'read-only'), `official role sandbox inheritance mismatch:${role.codex_name}`);
|
|
21
|
+
assertGate(doc.sandbox_mode === role.sandbox, `official role sandbox value mismatch:${role.codex_name}`);
|
|
13
22
|
}
|
|
14
|
-
assertGate(
|
|
15
|
-
assertGate(
|
|
16
|
-
assertGate(report.strategy === 'agent_type' && report.probe_artifact_path && report.clobbered_user_roles === false, 'agent role report strategy/probe/no-clobber fields missing');
|
|
23
|
+
assertGate(!fs.existsSync(path.join(codexHome, 'agents')), 'agent role sync must not create global directive roles');
|
|
24
|
+
assertGate(report.strategy === 'agent_type' && report.probe_artifact_path && report.clobbered_user_roles === false && report.official_roles.length === MANAGED_OFFICIAL_SUBAGENT_ROLES.length, 'agent role report strategy/probe/catalog/no-clobber fields missing');
|
|
17
25
|
emitGate('codex-native:agent-role-content');
|
|
18
26
|
function assertGate(condition, message) {
|
|
19
27
|
if (condition)
|
|
@@ -11,11 +11,13 @@ process.env.CODEX_HOME = path.join(root, 'codex-home');
|
|
|
11
11
|
try {
|
|
12
12
|
const denied = await repairCodexNativeManagedAssets({ root, requestedBy: 'manual' });
|
|
13
13
|
assertGate(denied.ok === false && denied.blockers.includes('repair_transaction_requires_yes'), 'repair transaction must require --yes before mutation', denied);
|
|
14
|
-
assertGate(!(await exists(path.join(root, 'codex-home', 'skills'))) && !(await exists(path.join(root, 'codex-home', 'agents'))), 'no-yes repair created managed assets', denied);
|
|
14
|
+
assertGate(!(await exists(path.join(root, 'codex-home', 'skills'))) && !(await exists(path.join(root, 'codex-home', 'agents'))) && !(await exists(path.join(root, '.codex', 'agents'))), 'no-yes repair created managed assets', denied);
|
|
15
15
|
const report = await repairCodexNativeManagedAssets({ root, requestedBy: 'manual', yes: true });
|
|
16
16
|
assertGate(report.schema === 'sks.codex-native-repair-transaction.v1' && report.repaired.length === 4, 'repair transaction report incomplete', report);
|
|
17
17
|
assertGate(report.confirmed === true && typeof report.mutation_ledger_path === 'string', 'repair transaction missing confirmation/ledger proof', report);
|
|
18
18
|
assertGate(report.repaired.every((row) => row.artifact_path && Array.isArray(row.blockers)), 'repair rows missing artifact/blocker contract', report);
|
|
19
|
+
assertGate(await exists(path.join(root, '.codex', 'agents', 'worker.toml')) && await exists(path.join(root, '.codex', 'agents', 'expert.toml')), 'repair transaction did not create official project agent roles', report);
|
|
20
|
+
assertGate(!(await exists(path.join(root, 'codex-home', 'agents'))), 'repair transaction created legacy global agent roles', report);
|
|
19
21
|
}
|
|
20
22
|
finally {
|
|
21
23
|
if (previous === undefined)
|