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
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { buildCodexExecArgs, findCodexBinary } from '../codex-adapter.js';
|
|
3
|
+
import { buildCodexExecArgs, findCodexBinary, runCodexExec } from '../codex-adapter.js';
|
|
4
4
|
import { ensureDir, runProcess, writeBinaryAtomic } from '../fsx.js';
|
|
5
5
|
import { buildImageArtifactPathContract } from '../image/image-artifact-path-contract.js';
|
|
6
6
|
import { codex0139ProbeTail, skippedCodex0139Probe } from './codex-0139-real-probes.js';
|
|
7
|
-
const ONE_BY_ONE_PNG = Buffer.from('
|
|
7
|
+
const ONE_BY_ONE_PNG = Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4//8/AAX+Av4N70a4AAAAAElFTkSuQmCC', 'base64');
|
|
8
8
|
export async function runCodex0139ImageReferencedPathRealProbe(input) {
|
|
9
9
|
const started = Date.now();
|
|
10
10
|
const tempDir = path.join(input.root, '.sneakoscope', 'tmp', 'codex-0139-real-probes', `image-path-${Date.now()}`);
|
|
@@ -14,10 +14,10 @@ export async function runCodex0139ImageReferencedPathRealProbe(input) {
|
|
|
14
14
|
await writeBinaryAtomic(inputA, ONE_BY_ONE_PNG);
|
|
15
15
|
await writeBinaryAtomic(inputB, ONE_BY_ONE_PNG);
|
|
16
16
|
const contract = await buildImageArtifactPathContract(input.root, {
|
|
17
|
-
missionId: 'codex-
|
|
17
|
+
missionId: 'codex-0144-image-path-real-probe',
|
|
18
18
|
images: [
|
|
19
|
-
{ id: 'input-a', kind: 'input_attachment', filePath: inputA, route: 'codex-
|
|
20
|
-
{ id: 'input-b', kind: 'input_attachment', filePath: inputB, route: 'codex-
|
|
19
|
+
{ id: 'input-a', kind: 'input_attachment', filePath: inputA, route: 'codex-0144-core-real-probe', stage: 'candidate' },
|
|
20
|
+
{ id: 'input-b', kind: 'input_attachment', filePath: inputB, route: 'codex-0144-core-real-probe', stage: 'referenced' }
|
|
21
21
|
]
|
|
22
22
|
});
|
|
23
23
|
const codexBin = input.codexBin || await findCodexBinary();
|
|
@@ -34,7 +34,7 @@ export async function runCodex0139ImageReferencedPathRealProbe(input) {
|
|
|
34
34
|
artifact_paths: [tempDir]
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
-
if (process.env.SKS_CODEX_0139_IMAGE_REAL_PROBE_ALLOW_SKIP === '1') {
|
|
37
|
+
if (process.env.SKS_CODEX_0144_IMAGE_REAL_PROBE_ALLOW_SKIP === '1' || process.env.SKS_CODEX_0139_IMAGE_REAL_PROBE_ALLOW_SKIP === '1') {
|
|
38
38
|
return {
|
|
39
39
|
...skippedCodex0139Probe('codex_image_edit_actual_api_skipped', {
|
|
40
40
|
codex_bin: codexBin,
|
|
@@ -48,17 +48,26 @@ export async function runCodex0139ImageReferencedPathRealProbe(input) {
|
|
|
48
48
|
}
|
|
49
49
|
const outputFile = path.join(tempDir, 'last-message.txt');
|
|
50
50
|
const prompt = [
|
|
51
|
-
'This is a Codex 0.
|
|
51
|
+
'This is a Codex 0.144.1 image path routing probe.',
|
|
52
52
|
`Only the image file named ${path.basename(inputB)} is intentionally referenced.`,
|
|
53
53
|
`Return compact JSON {"referenced_path":"${inputB.replace(/\\/g, '\\\\')}","saw_image":true}.`,
|
|
54
54
|
'Do not edit files and do not reference any other image path.'
|
|
55
55
|
].join(' ');
|
|
56
|
-
const extraArgs = ['--image', inputB, '--skip-git-repo-check', '--ephemeral'];
|
|
56
|
+
const extraArgs = ['-c', 'mcp_servers={}', '--image', inputB, '--skip-git-repo-check', '--ephemeral'];
|
|
57
57
|
const args = buildCodexExecArgs({ root: tempDir, prompt, outputFile, json: true, extraArgs });
|
|
58
|
-
const result = await
|
|
59
|
-
|
|
58
|
+
const result = await runCodexExec({
|
|
59
|
+
root: tempDir,
|
|
60
|
+
recoveryRoot: input.root,
|
|
61
|
+
prompt,
|
|
62
|
+
outputFile,
|
|
63
|
+
json: true,
|
|
64
|
+
extraArgs,
|
|
60
65
|
timeoutMs: input.timeoutMs || 60000,
|
|
61
|
-
|
|
66
|
+
maxBufferBytes: 512 * 1024,
|
|
67
|
+
codexBin,
|
|
68
|
+
env: input.env || process.env,
|
|
69
|
+
...(typeof input.recoveryFetch === 'function' ? { recoveryFetch: input.recoveryFetch } : {}),
|
|
70
|
+
...(typeof input.runProcessImpl === 'function' ? { runProcessImpl: input.runProcessImpl } : {})
|
|
62
71
|
}).catch((err) => ({ code: 1, stdout: '', stderr: err?.message || String(err) }));
|
|
63
72
|
const outputText = await fs.readFile(outputFile, 'utf8').catch(() => '');
|
|
64
73
|
const combined = `${result.stdout || ''}\n${result.stderr || ''}\n${outputText}`;
|
|
@@ -68,6 +77,7 @@ export async function runCodex0139ImageReferencedPathRealProbe(input) {
|
|
|
68
77
|
const ok = exactReferencedPath
|
|
69
78
|
&& commandReferencesOnlyInputB
|
|
70
79
|
&& outputReferencesInputB
|
|
80
|
+
&& processExitedSuccessfully
|
|
71
81
|
&& contract.blockers.length === 0;
|
|
72
82
|
return {
|
|
73
83
|
ok,
|
|
@@ -86,9 +96,16 @@ export async function runCodex0139ImageReferencedPathRealProbe(input) {
|
|
|
86
96
|
process_exited_successfully: processExitedSuccessfully,
|
|
87
97
|
process_warning: processExitedSuccessfully ? null : 'Codex emitted the referenced path evidence before process timeout/nonzero exit.',
|
|
88
98
|
output_file: outputFile,
|
|
99
|
+
codex_lb_tool_output_recovery: result.codexLbToolOutputRecovery || null,
|
|
89
100
|
contract_blockers: contract.blockers
|
|
90
101
|
},
|
|
91
|
-
blockers: ok ? [] : [
|
|
102
|
+
blockers: ok ? [] : [
|
|
103
|
+
...(processExitedSuccessfully ? [] : ['codex_image_referenced_path_process_failed_or_timed_out']),
|
|
104
|
+
...(result.codexLbToolOutputRecovery?.blockers || []),
|
|
105
|
+
...(!exactReferencedPath || !commandReferencesOnlyInputB || !outputReferencesInputB || contract.blockers.length > 0
|
|
106
|
+
? ['codex_image_referenced_path_actual_cli_probe_failed']
|
|
107
|
+
: [])
|
|
108
|
+
]
|
|
92
109
|
};
|
|
93
110
|
}
|
|
94
111
|
//# sourceMappingURL=codex-0139-image-path-real-probe.js.map
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { findCodexBinary } from '../codex-adapter.js';
|
|
4
|
-
import {
|
|
4
|
+
import { parseCodexVersionText } from '../codex-compat/codex-version-policy.js';
|
|
5
|
+
import { CURRENT_CODEX_RELEASE_MANIFEST } from '../codex-compat/codex-release-manifest.js';
|
|
5
6
|
import { runProcess } from '../fsx.js';
|
|
6
7
|
import { runCodex0139DoctorEnvRealProbe } from './codex-0139-doctor-real-probe.js';
|
|
7
8
|
import { runCodex0139ImageReferencedPathRealProbe } from './codex-0139-image-path-real-probe.js';
|
|
8
|
-
import {
|
|
9
|
+
import { runCodex0144CollabAgentToolSchemaRealProbe } from './codex-0144-collab-agent-real-probe.js';
|
|
9
10
|
import { runCodex0139MarketplaceSourceRealProbe, runCodex0139PluginCacheRealProbe } from './codex-0139-plugin-real-probes.js';
|
|
10
11
|
import { buildCodex0139RealProbeResult, CODEX_0139_REAL_PROBE_NAMES, skippedCodex0139Probe } from './codex-0139-real-probes.js';
|
|
11
12
|
import { runCodex0139RichSchemaRealProbe } from './codex-0139-rich-schema-real-probe.js';
|
|
@@ -14,34 +15,68 @@ import { runCodex0139WebSearchRealProbe } from './codex-0139-web-search-probe.js
|
|
|
14
15
|
export async function runCodex0139RealProbes(input) {
|
|
15
16
|
const timeoutMs = Math.max(1, Number(input.timeoutMs || 120000) || 120000);
|
|
16
17
|
const requireReal = input.requireReal === true;
|
|
17
|
-
const codexBin = input.codexBin || await
|
|
18
|
+
const codexBin = input.codexBin || await findCurrentCodexRealProbeBinary();
|
|
18
19
|
const versionText = await readCodexVersionText(codexBin, timeoutMs);
|
|
19
20
|
const parsedVersion = parseCodexVersionText(versionText);
|
|
20
|
-
const
|
|
21
|
-
const
|
|
21
|
+
const currentVersion = parsedVersion === CURRENT_CODEX_RELEASE_MANIFEST.requiredCliVersion;
|
|
22
|
+
const requestedRaw = input.probes?.length ? input.probes : CODEX_0139_REAL_PROBE_NAMES;
|
|
23
|
+
const unknownProbeNames = requestedRaw.filter((name) => !CODEX_0139_REAL_PROBE_NAMES.includes(name));
|
|
24
|
+
const requested = [...new Set(requestedRaw.filter((name) => CODEX_0139_REAL_PROBE_NAMES.includes(name)))];
|
|
22
25
|
const probes = Object.fromEntries(CODEX_0139_REAL_PROBE_NAMES.map((name) => [name, skippedCodex0139Probe('probe_not_requested')]));
|
|
23
|
-
const extraBlockers =
|
|
26
|
+
const extraBlockers = unknownProbeNames.map((name) => `unknown_real_probe:${name}`);
|
|
24
27
|
if (!codexBin)
|
|
25
28
|
extraBlockers.push('codex_cli_missing');
|
|
26
|
-
if (!
|
|
27
|
-
extraBlockers.push('
|
|
28
|
-
if (!codexBin || !
|
|
29
|
+
if (!currentVersion)
|
|
30
|
+
extraBlockers.push(`codex_${CURRENT_CODEX_RELEASE_MANIFEST.requiredCliVersion.replaceAll('.', '_')}_required`);
|
|
31
|
+
if (!codexBin || !currentVersion) {
|
|
29
32
|
for (const name of requested) {
|
|
30
|
-
probes[name] = skippedCodex0139Probe(!codexBin ? 'codex_cli_missing' : '
|
|
33
|
+
probes[name] = skippedCodex0139Probe(!codexBin ? 'codex_cli_missing' : 'codex_current_release_required', { parsed_version: parsedVersion });
|
|
31
34
|
}
|
|
32
|
-
|
|
35
|
+
const tempCleanup = await cleanupProbeTempRoot(input.root);
|
|
36
|
+
return buildCodex0139RealProbeResult({ codexBin, versionText, parsedVersion, requireReal, timeoutMs, probes, requiredProbeNames: requested, releaseAuthorizing: false, tempCleanup, extraBlockers });
|
|
33
37
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
let rows = [];
|
|
39
|
+
let tempCleanup;
|
|
40
|
+
try {
|
|
41
|
+
rows = await Promise.all(requested.map(async (name) => {
|
|
42
|
+
try {
|
|
43
|
+
const probe = await runOne(name, {
|
|
44
|
+
root: input.root,
|
|
45
|
+
requireReal,
|
|
46
|
+
timeoutMs,
|
|
47
|
+
codexBin,
|
|
48
|
+
allowNetwork: input.allowNetwork,
|
|
49
|
+
allowDesktop: input.allowDesktop
|
|
50
|
+
});
|
|
51
|
+
return [name, surfaceRuntimeWarnings(probe)];
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const errorClass = err instanceof Error ? err.name : typeof err;
|
|
55
|
+
extraBlockers.push(`codex_real_probe_runner_failed:${name}`);
|
|
56
|
+
return [name, skippedCodex0139Probe('codex_real_probe_runner_failed', { error_class: errorClass })];
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
tempCleanup = await cleanupProbeTempRoot(input.root);
|
|
43
62
|
}
|
|
44
|
-
|
|
63
|
+
for (const [name, probe] of rows)
|
|
64
|
+
probes[name] = probe;
|
|
65
|
+
sanitizeCleanedTempArtifacts(probes, input.root);
|
|
66
|
+
if (!tempCleanup.ok)
|
|
67
|
+
extraBlockers.push('codex_real_probe_temp_cleanup_failed');
|
|
68
|
+
return buildCodex0139RealProbeResult({
|
|
69
|
+
codexBin,
|
|
70
|
+
versionText,
|
|
71
|
+
parsedVersion,
|
|
72
|
+
requireReal,
|
|
73
|
+
timeoutMs,
|
|
74
|
+
probes,
|
|
75
|
+
requiredProbeNames: requested,
|
|
76
|
+
releaseAuthorizing: requireReal && currentVersion,
|
|
77
|
+
tempCleanup,
|
|
78
|
+
extraBlockers
|
|
79
|
+
});
|
|
45
80
|
}
|
|
46
81
|
async function runOne(name, input) {
|
|
47
82
|
switch (name) {
|
|
@@ -57,11 +92,11 @@ async function runOne(name, input) {
|
|
|
57
92
|
return runCodex0139PluginCacheRealProbe(input);
|
|
58
93
|
case 'sandbox_profile_alias':
|
|
59
94
|
return runCodex0139SandboxProfileAliasProbe(input);
|
|
60
|
-
case '
|
|
61
|
-
return
|
|
95
|
+
case 'collab_agent_tool_schema':
|
|
96
|
+
return runCodex0144CollabAgentToolSchemaRealProbe(input);
|
|
62
97
|
case 'image_referenced_path':
|
|
63
98
|
return runCodex0139ImageReferencedPathRealProbe(input);
|
|
64
|
-
case '
|
|
99
|
+
case 'sandbox_proxy_environment':
|
|
65
100
|
return runCodex0139SandboxProxyPreservationProbe(input);
|
|
66
101
|
}
|
|
67
102
|
}
|
|
@@ -76,7 +111,7 @@ async function readCodexVersionText(codexBin, timeoutMs) {
|
|
|
76
111
|
const text = `${result.stdout || ''}${result.stderr || ''}`.trim();
|
|
77
112
|
return text || null;
|
|
78
113
|
}
|
|
79
|
-
export async function
|
|
114
|
+
export async function findCurrentCodexRealProbeBinary() {
|
|
80
115
|
const candidates = await codexBinaryCandidates();
|
|
81
116
|
let firstExisting = null;
|
|
82
117
|
for (const candidate of candidates) {
|
|
@@ -84,18 +119,18 @@ export async function findCodex0139RealProbeBinary() {
|
|
|
84
119
|
firstExisting = candidate;
|
|
85
120
|
const versionText = await readCodexVersionText(candidate, 30000);
|
|
86
121
|
const parsed = parseCodexVersionText(versionText);
|
|
87
|
-
if (parsed
|
|
122
|
+
if (parsed === CURRENT_CODEX_RELEASE_MANIFEST.requiredCliVersion)
|
|
88
123
|
return candidate;
|
|
89
124
|
}
|
|
90
125
|
return firstExisting || await findCodexBinary();
|
|
91
126
|
}
|
|
92
127
|
async function codexBinaryCandidates() {
|
|
93
128
|
const raw = [
|
|
129
|
+
path.join(process.cwd(), 'node_modules', '.bin', process.platform === 'win32' ? 'codex.cmd' : 'codex'),
|
|
94
130
|
process.env.SKS_CODEX_BIN,
|
|
95
131
|
process.env.DCODEX_CODEX_BIN,
|
|
96
132
|
process.env.CODEX_BIN,
|
|
97
|
-
...pathCandidates('codex')
|
|
98
|
-
path.join(process.cwd(), 'node_modules', '.bin', process.platform === 'win32' ? 'codex.cmd' : 'codex')
|
|
133
|
+
...pathCandidates('codex')
|
|
99
134
|
].filter(Boolean).map(String);
|
|
100
135
|
const out = [];
|
|
101
136
|
for (const candidate of raw) {
|
|
@@ -110,6 +145,46 @@ async function codexBinaryCandidates() {
|
|
|
110
145
|
}
|
|
111
146
|
return out;
|
|
112
147
|
}
|
|
148
|
+
function surfaceRuntimeWarnings(probe) {
|
|
149
|
+
const warnings = [...(probe.warnings || [])];
|
|
150
|
+
const blockers = [...probe.blockers];
|
|
151
|
+
const stderr = String(probe.stderr_tail || '');
|
|
152
|
+
if (/AuthRequired|Auth required|No access token was provided/i.test(stderr)) {
|
|
153
|
+
warnings.push('codex_real_probe_external_mcp_auth_required');
|
|
154
|
+
}
|
|
155
|
+
if (probe.evidence?.process_warning)
|
|
156
|
+
warnings.push('codex_real_probe_process_warning');
|
|
157
|
+
return {
|
|
158
|
+
...probe,
|
|
159
|
+
ok: probe.ok && blockers.length === 0,
|
|
160
|
+
warnings: [...new Set(warnings)],
|
|
161
|
+
blockers: [...new Set(blockers)]
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
async function cleanupProbeTempRoot(root) {
|
|
165
|
+
const tempRoot = path.join(root, '.sneakoscope', 'tmp', 'codex-0139-real-probes');
|
|
166
|
+
await fs.rm(tempRoot, { recursive: true, force: true }).catch(() => undefined);
|
|
167
|
+
const remainingEntries = await fs.readdir(tempRoot).catch(() => []);
|
|
168
|
+
return { root: tempRoot, ok: remainingEntries.length === 0, remaining_entries: remainingEntries };
|
|
169
|
+
}
|
|
170
|
+
function sanitizeCleanedTempArtifacts(probes, root) {
|
|
171
|
+
const tempRoot = path.resolve(root, '.sneakoscope', 'tmp', 'codex-0139-real-probes');
|
|
172
|
+
for (const probe of Object.values(probes)) {
|
|
173
|
+
const tempArtifacts = probe.artifact_paths.filter((artifact) => {
|
|
174
|
+
const resolved = path.resolve(artifact);
|
|
175
|
+
return resolved === tempRoot || resolved.startsWith(`${tempRoot}${path.sep}`);
|
|
176
|
+
});
|
|
177
|
+
if (!tempArtifacts.length)
|
|
178
|
+
continue;
|
|
179
|
+
probe.artifact_paths = probe.artifact_paths.filter((artifact) => !tempArtifacts.includes(artifact));
|
|
180
|
+
probe.evidence = {
|
|
181
|
+
...probe.evidence,
|
|
182
|
+
observed_temp_artifact_count: tempArtifacts.length,
|
|
183
|
+
temp_artifacts_cleaned: true,
|
|
184
|
+
durable_evidence: 'embedded_in_codex_real_probe_report'
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
113
188
|
function pathCandidates(command) {
|
|
114
189
|
const exts = process.platform === 'win32' ? ['.cmd', '.exe', '.bat', ''] : [''];
|
|
115
190
|
return (process.env.PATH || '').split(path.delimiter).flatMap((dir) => exts.map((ext) => path.join(dir, `${command}${ext}`)));
|
|
@@ -3,17 +3,21 @@ import { codex0139ProbeArtifactPath } from './codex-0139-real-probes.js';
|
|
|
3
3
|
import { readJson, writeJsonAtomic } from '../fsx.js';
|
|
4
4
|
export async function buildCodex0139RealProbeSummary(root) {
|
|
5
5
|
const result = await readJson(codex0139ProbeArtifactPath(root));
|
|
6
|
-
const
|
|
6
|
+
const requested = new Set((result.requested_probes?.length ? result.requested_probes : Object.keys(result.probes || {})).map(String));
|
|
7
|
+
const requestedEntries = Object.entries(result.probes || {}).filter(([name]) => requested.has(name));
|
|
8
|
+
const probes = Object.fromEntries(requestedEntries.map(([name, probe]) => [name, {
|
|
7
9
|
ok: probe.ok === true,
|
|
8
10
|
mode: probe.mode,
|
|
9
11
|
blockers: probe.blockers || []
|
|
10
12
|
}]));
|
|
11
|
-
const values =
|
|
13
|
+
const values = requestedEntries.map(([, probe]) => probe);
|
|
12
14
|
const skippedCount = values.filter((probe) => probe.mode === 'skipped').length;
|
|
13
15
|
const failedCount = values.filter((probe) => probe.ok !== true && probe.mode !== 'skipped').length;
|
|
14
16
|
return {
|
|
15
17
|
schema: 'sks.codex-0139-real-probe-summary.v1',
|
|
16
|
-
|
|
18
|
+
target_version: result.target_version,
|
|
19
|
+
compatibility_authority: 'deprecated_non_authoritative_lineage_only',
|
|
20
|
+
ok: result.overall_ok === true,
|
|
17
21
|
require_real: result.require_real,
|
|
18
22
|
codex_bin: result.codex_bin,
|
|
19
23
|
parsed_version: result.parsed_version,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import { CURRENT_CODEX_RELEASE_MANIFEST } from '../codex-compat/codex-release-manifest.js';
|
|
2
3
|
import { nowIso, writeJsonAtomic } from '../fsx.js';
|
|
3
4
|
export const CODEX_0139_REAL_PROBE_NAMES = [
|
|
4
5
|
'code_mode_web_search',
|
|
@@ -7,9 +8,9 @@ export const CODEX_0139_REAL_PROBE_NAMES = [
|
|
|
7
8
|
'marketplace_source_json',
|
|
8
9
|
'plugin_catalog_cache',
|
|
9
10
|
'sandbox_profile_alias',
|
|
10
|
-
'
|
|
11
|
+
'collab_agent_tool_schema',
|
|
11
12
|
'image_referenced_path',
|
|
12
|
-
'
|
|
13
|
+
'sandbox_proxy_environment'
|
|
13
14
|
];
|
|
14
15
|
export function codex0139ProbeArtifactPath(root) {
|
|
15
16
|
return path.join(root, '.sneakoscope', 'codex-0139-real-probes.json');
|
|
@@ -50,24 +51,38 @@ export function codex0139ProbeTail(text, limit = 4000) {
|
|
|
50
51
|
return raw.length <= limit ? raw : raw.slice(raw.length - limit);
|
|
51
52
|
}
|
|
52
53
|
export function buildCodex0139RealProbeResult(input) {
|
|
53
|
-
const
|
|
54
|
-
const
|
|
54
|
+
const requiredProbeNames = input.requiredProbeNames ? [...new Set(input.requiredProbeNames)] : [...CODEX_0139_REAL_PROBE_NAMES];
|
|
55
|
+
const skipped = requiredProbeNames.filter((name) => input.probes[name]?.mode === 'skipped');
|
|
56
|
+
const failed = requiredProbeNames.filter((name) => input.probes[name] && input.probes[name].ok !== true && input.probes[name].mode !== 'skipped');
|
|
55
57
|
const blockers = [
|
|
56
58
|
...(input.extraBlockers || []),
|
|
57
|
-
...
|
|
59
|
+
...requiredProbeNames.flatMap((name) => input.probes[name]?.blockers || []),
|
|
58
60
|
...(input.requireReal && skipped.length ? skipped.map((name) => `require_real_skipped:${name}`) : [])
|
|
59
61
|
];
|
|
62
|
+
const warnings = requiredProbeNames.flatMap((name) => input.probes[name]?.warnings || []);
|
|
63
|
+
const overallOk = input.requireReal ? blockers.length === 0 && failed.length === 0 && skipped.length === 0 : failed.length === 0;
|
|
60
64
|
return {
|
|
61
65
|
schema: 'sks.codex-0139-real-probe-result.v1',
|
|
66
|
+
target_version: CURRENT_CODEX_RELEASE_MANIFEST.requiredCliVersion,
|
|
67
|
+
compatibility_origin: 'codex-0139-real-probe-result-v1',
|
|
68
|
+
compatibility_authority: 'deprecated_non_authoritative_lineage_only',
|
|
62
69
|
generated_at: nowIso(),
|
|
63
70
|
codex_bin: input.codexBin,
|
|
64
71
|
version_text: input.versionText,
|
|
65
72
|
parsed_version: input.parsedVersion,
|
|
66
73
|
require_real: input.requireReal,
|
|
67
|
-
|
|
74
|
+
release_authorizing: Boolean(input.releaseAuthorizing && overallOk),
|
|
75
|
+
overall_ok: overallOk,
|
|
68
76
|
probe_timeout_ms: input.timeoutMs,
|
|
77
|
+
requested_probes: requiredProbeNames,
|
|
69
78
|
probes: input.probes,
|
|
70
79
|
skipped,
|
|
80
|
+
warnings: [...new Set(warnings)],
|
|
81
|
+
external_integration_status: {
|
|
82
|
+
mcp_auth: warnings.includes('codex_real_probe_external_mcp_auth_required') ? 'authentication_required' : 'not_observed',
|
|
83
|
+
release_authorization_scope: 'codex_core_compatibility_only'
|
|
84
|
+
},
|
|
85
|
+
temp_cleanup: input.tempCleanup || { root: '', ok: false, remaining_entries: [] },
|
|
71
86
|
blockers: [...new Set(blockers)]
|
|
72
87
|
};
|
|
73
88
|
}
|
|
@@ -16,7 +16,8 @@ export async function runCodex0139SandboxProfileAliasProbe(input) {
|
|
|
16
16
|
const dryArgs = sandboxHelpMentionsAlias ? ['sandbox', '-P', ':read-only', '--', 'true'] : ['-P', ':read-only', '--version'];
|
|
17
17
|
const dry = await runProcess(codexBin, dryArgs, { timeoutMs: input.timeoutMs || 30000, maxOutputBytes: 64 * 1024 }).catch((err) => ({ code: 1, stdout: '', stderr: err?.message || String(err) }));
|
|
18
18
|
const dryAccepted = dry.code === 0;
|
|
19
|
-
const
|
|
19
|
+
const helpMentionsAlias = topLevelHelpMentionsAlias || sandboxHelpMentionsAlias;
|
|
20
|
+
const ok = helpMentionsAlias && dryAccepted;
|
|
20
21
|
return {
|
|
21
22
|
ok,
|
|
22
23
|
mode: 'actual-cli',
|
|
@@ -26,15 +27,18 @@ export async function runCodex0139SandboxProfileAliasProbe(input) {
|
|
|
26
27
|
stderr_tail: codex0139ProbeTail(`${help.stderr || ''}\n${sandboxHelp.stderr || ''}\n${dry.stderr || ''}`),
|
|
27
28
|
artifact_paths: [],
|
|
28
29
|
evidence: {
|
|
29
|
-
help_mentions_P:
|
|
30
|
+
help_mentions_P: helpMentionsAlias,
|
|
30
31
|
top_level_help_mentions_P: topLevelHelpMentionsAlias,
|
|
31
32
|
sandbox_help_mentions_P: sandboxHelpMentionsAlias,
|
|
32
33
|
dry_command_attempted: true,
|
|
33
34
|
dry_command_line: [codexBin, ...dryArgs],
|
|
34
35
|
dry_command_accepted: dryAccepted,
|
|
35
|
-
dry_command_warning: dryAccepted ? null : '
|
|
36
|
+
dry_command_warning: dryAccepted ? null : 'permissions-profile alias was advertised but the real sandbox no-op failed'
|
|
36
37
|
},
|
|
37
|
-
blockers: ok ? [] : [
|
|
38
|
+
blockers: ok ? [] : [
|
|
39
|
+
...(helpMentionsAlias ? [] : ['codex_sandbox_profile_alias_help_missing']),
|
|
40
|
+
...(dryAccepted ? [] : ['codex_sandbox_profile_alias_real_command_failed'])
|
|
41
|
+
]
|
|
38
42
|
};
|
|
39
43
|
}
|
|
40
44
|
export async function runCodex0139SandboxProxyPreservationProbe(input) {
|
|
@@ -44,16 +48,23 @@ export async function runCodex0139SandboxProxyPreservationProbe(input) {
|
|
|
44
48
|
return skippedCodex0139Probe('codex_cli_missing');
|
|
45
49
|
const tempDir = path.join(input.root, '.sneakoscope', 'tmp', 'codex-0139-real-probes', `sandbox-proxy-${Date.now()}`);
|
|
46
50
|
await ensureDir(tempDir);
|
|
47
|
-
const
|
|
51
|
+
const proxyState = {
|
|
52
|
+
HTTPS_PROXY: Boolean(process.env.HTTPS_PROXY),
|
|
53
|
+
HTTP_PROXY: Boolean(process.env.HTTP_PROXY),
|
|
54
|
+
ALL_PROXY: Boolean(process.env.ALL_PROXY)
|
|
55
|
+
};
|
|
56
|
+
const probeScript = 'process.stdout.write(JSON.stringify({HTTPS_PROXY:Boolean(process.env.HTTPS_PROXY),HTTP_PROXY:Boolean(process.env.HTTP_PROXY),ALL_PROXY:Boolean(process.env.ALL_PROXY)}))';
|
|
57
|
+
const args = ['sandbox', '-P', ':read-only', '-C', tempDir, '--', process.execPath, '-e', probeScript];
|
|
48
58
|
const result = await runProcess(codexBin, args, {
|
|
49
59
|
cwd: tempDir,
|
|
50
60
|
timeoutMs: input.timeoutMs || 30000,
|
|
51
61
|
maxOutputBytes: 64 * 1024
|
|
52
62
|
}).catch((err) => ({ code: 1, stdout: '', stderr: err?.message || String(err) }));
|
|
53
63
|
const safeNoopRan = result.code === 0;
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
64
|
+
const observedProxyState = parseProxyState(result.stdout);
|
|
65
|
+
const proxyEnvironmentPreserved = observedProxyState !== null
|
|
66
|
+
&& Object.entries(proxyState).every(([key, value]) => observedProxyState[key] === value);
|
|
67
|
+
const ok = safeNoopRan && proxyEnvironmentPreserved;
|
|
57
68
|
return {
|
|
58
69
|
ok,
|
|
59
70
|
mode: 'actual-cli',
|
|
@@ -64,16 +75,31 @@ export async function runCodex0139SandboxProxyPreservationProbe(input) {
|
|
|
64
75
|
artifact_paths: [tempDir],
|
|
65
76
|
evidence: {
|
|
66
77
|
safe_noop_ran: safeNoopRan,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
78
|
+
host_proxy_presence: proxyState,
|
|
79
|
+
sandbox_proxy_presence: observedProxyState,
|
|
80
|
+
proxy_marker_checked: true,
|
|
81
|
+
proxy_environment_preserved: proxyEnvironmentPreserved,
|
|
71
82
|
permissions_profile: ':read-only'
|
|
72
83
|
},
|
|
73
84
|
blockers: ok ? [] : [
|
|
74
85
|
...(safeNoopRan ? [] : ['codex_sandbox_proxy_safe_noop_failed']),
|
|
75
|
-
...(
|
|
86
|
+
...(proxyEnvironmentPreserved ? [] : ['codex_sandbox_proxy_environment_not_preserved'])
|
|
76
87
|
]
|
|
77
88
|
};
|
|
78
89
|
}
|
|
90
|
+
function parseProxyState(text) {
|
|
91
|
+
try {
|
|
92
|
+
const parsed = JSON.parse(String(text || ''));
|
|
93
|
+
if (!parsed || typeof parsed !== 'object')
|
|
94
|
+
return null;
|
|
95
|
+
return {
|
|
96
|
+
HTTPS_PROXY: parsed.HTTPS_PROXY === true,
|
|
97
|
+
HTTP_PROXY: parsed.HTTP_PROXY === true,
|
|
98
|
+
ALL_PROXY: parsed.ALL_PROXY === true
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
79
105
|
//# sourceMappingURL=codex-0139-sandbox-real-probe.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { buildCodexExecArgs, findCodexBinary } from '../codex-adapter.js';
|
|
3
|
+
import { buildCodexExecArgs, findCodexBinary, runCodexExec } from '../codex-adapter.js';
|
|
4
4
|
import { ensureDir, runProcess, writeJsonAtomic, writeTextAtomic } from '../fsx.js';
|
|
5
5
|
import { codex0139ProbeTail, skippedCodex0139Probe } from './codex-0139-real-probes.js';
|
|
6
6
|
export async function runCodex0139WebSearchRealProbe(input) {
|
|
@@ -14,16 +14,25 @@ export async function runCodex0139WebSearchRealProbe(input) {
|
|
|
14
14
|
return skippedCodex0139Probe('codex_cli_missing');
|
|
15
15
|
const tempDir = path.join(input.root, '.sneakoscope', 'tmp', 'codex-0139-real-probes', `web-search-${Date.now()}`);
|
|
16
16
|
await ensureDir(tempDir);
|
|
17
|
-
await writeTextAtomic(path.join(tempDir, 'README.md'), 'Temporary Codex 0.
|
|
17
|
+
await writeTextAtomic(path.join(tempDir, 'README.md'), 'Temporary Codex 0.144.1 web-search real probe workspace.\n');
|
|
18
18
|
const outputFile = path.join(tempDir, 'last-message.txt');
|
|
19
|
-
const prompt = 'In code mode, use standalone web search to find the title of https://example.com
|
|
20
|
-
const args = buildCodexExecArgs({ root: tempDir, prompt, outputFile, json: true, extraArgs: [] });
|
|
21
|
-
const result = await
|
|
22
|
-
|
|
19
|
+
const prompt = 'In code mode, use standalone web search to find the title of https://example.com. Return JSON {"used_web_search":true,"answer":"...","sources":[...]}.';
|
|
20
|
+
const args = buildCodexExecArgs({ root: tempDir, prompt, outputFile, json: true, extraArgs: ['-c', 'mcp_servers={}'] });
|
|
21
|
+
const result = await runCodexExec({
|
|
22
|
+
root: tempDir,
|
|
23
|
+
recoveryRoot: input.root,
|
|
24
|
+
prompt,
|
|
25
|
+
outputFile,
|
|
26
|
+
json: true,
|
|
27
|
+
extraArgs: ['-c', 'mcp_servers={}'],
|
|
23
28
|
timeoutMs: input.timeoutMs || 120000,
|
|
24
|
-
|
|
29
|
+
maxBufferBytes: 512 * 1024,
|
|
25
30
|
stdoutFile: path.join(tempDir, 'codex.stdout.log'),
|
|
26
|
-
stderrFile: path.join(tempDir, 'codex.stderr.log')
|
|
31
|
+
stderrFile: path.join(tempDir, 'codex.stderr.log'),
|
|
32
|
+
codexBin,
|
|
33
|
+
env: input.env || process.env,
|
|
34
|
+
...(typeof input.recoveryFetch === 'function' ? { recoveryFetch: input.recoveryFetch } : {}),
|
|
35
|
+
...(typeof input.runProcessImpl === 'function' ? { runProcessImpl: input.runProcessImpl } : {})
|
|
27
36
|
}).catch((err) => ({
|
|
28
37
|
code: 1,
|
|
29
38
|
stdout: '',
|
|
@@ -32,13 +41,13 @@ export async function runCodex0139WebSearchRealProbe(input) {
|
|
|
32
41
|
const output = await fs.readFile(outputFile, 'utf8').catch(() => '');
|
|
33
42
|
const combined = `${result.stdout || ''}\n${result.stderr || ''}\n${output}`;
|
|
34
43
|
const sawWebSearchEvent = /\b(web[_ -]?search|search_result|sources?|tool_call|standalone web search)\b/i.test(combined);
|
|
35
|
-
const sawPlaintextResult = /(Example Domain|example\.com
|
|
44
|
+
const sawPlaintextResult = /(Example Domain|example\.com)/i.test(combined);
|
|
36
45
|
const resultContainsExpectedMarker = /"used_web_search"\s*:\s*true|used_web_search/i.test(combined) || sawWebSearchEvent;
|
|
37
46
|
const processExitedSuccessfully = result.code === 0;
|
|
38
|
-
const ok = sawPlaintextResult && resultContainsExpectedMarker;
|
|
47
|
+
const ok = processExitedSuccessfully && sawPlaintextResult && resultContainsExpectedMarker;
|
|
39
48
|
if (ok) {
|
|
40
|
-
await writeJsonAtomic(path.join(input.root, '.sneakoscope', 'codex-
|
|
41
|
-
schema: 'sks.codex-
|
|
49
|
+
await writeJsonAtomic(path.join(input.root, '.sneakoscope', 'codex-0144-code-mode-web-search-policy.json'), {
|
|
50
|
+
schema: 'sks.codex-0144-code-mode-web-search-policy.v1',
|
|
42
51
|
ok: true,
|
|
43
52
|
generated_at: new Date().toISOString(),
|
|
44
53
|
allow_standalone_web_search_in_code_mode: true,
|
|
@@ -64,9 +73,14 @@ export async function runCodex0139WebSearchRealProbe(input) {
|
|
|
64
73
|
result_contains_expected_marker: resultContainsExpectedMarker,
|
|
65
74
|
process_exited_successfully: processExitedSuccessfully,
|
|
66
75
|
process_warning: processExitedSuccessfully ? null : 'Codex emitted web-search evidence before process timeout/nonzero exit.',
|
|
67
|
-
output_file: outputFile
|
|
76
|
+
output_file: outputFile,
|
|
77
|
+
codex_lb_tool_output_recovery: result.codexLbToolOutputRecovery || null
|
|
68
78
|
},
|
|
69
|
-
blockers: ok ? [] : [
|
|
79
|
+
blockers: ok ? [] : [
|
|
80
|
+
...(processExitedSuccessfully ? [] : ['codex_web_search_process_failed_or_timed_out']),
|
|
81
|
+
...(result.codexLbToolOutputRecovery?.blockers || []),
|
|
82
|
+
...(!sawPlaintextResult || !resultContainsExpectedMarker ? ['codex_web_search_real_probe_failed'] : [])
|
|
83
|
+
]
|
|
70
84
|
};
|
|
71
85
|
}
|
|
72
86
|
//# sourceMappingURL=codex-0139-web-search-probe.js.map
|