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,291 @@
|
|
|
1
|
+
import { codexLbBaseUrlSecurityBlocker, normalizeCodexLbBaseUrl } from './codex-lb-env.js';
|
|
2
|
+
import { redactString } from '../secret-redaction.js';
|
|
3
|
+
export const CODEX_LB_TOOL_OUTPUT_RECOVERY_SCHEMA = 'sks.codex-lb-tool-output-recovery.v1';
|
|
4
|
+
export const CODEX_LB_TOOL_OUTPUT_RECOVERY_MIN_VERSION = '1.21.0-beta.3';
|
|
5
|
+
export const CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_ENV = 'SKS_ALLOW_UNVERIFIED_CODEX_LB_RECOVERY';
|
|
6
|
+
export const CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_FLAG = '--allow-unverified-codex-lb-recovery';
|
|
7
|
+
const UPGRADE_ACTION = `Upgrade codex-lb to ${CODEX_LB_TOOL_OUTPUT_RECOVERY_MIN_VERSION} or later, then rerun \`sks codex-lb status\`.`;
|
|
8
|
+
const OAUTH_ACTION = 'To avoid the proxy, run `sks codex-lb use-oauth`; SKS will not switch providers silently.';
|
|
9
|
+
const FRESH_THREAD_ACTION = 'After upgrading or switching providers, open a fresh Codex thread and continue the persisted mission; do not replay the corrupted turn.';
|
|
10
|
+
export async function probeCodexLbToolOutputRecovery(opts = {}) {
|
|
11
|
+
const baseUrl = normalizeCodexLbBaseUrl(opts.baseUrl);
|
|
12
|
+
if (!baseUrl) {
|
|
13
|
+
return blockedProbe('invalid_base_url', {
|
|
14
|
+
baseUrl: null,
|
|
15
|
+
healthUrl: null,
|
|
16
|
+
blockers: ['codex_lb_tool_output_recovery_base_url_missing']
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const transportBlocker = codexLbBaseUrlSecurityBlocker(baseUrl);
|
|
20
|
+
if (transportBlocker) {
|
|
21
|
+
return blockedProbe('transport_blocked', {
|
|
22
|
+
baseUrl,
|
|
23
|
+
healthUrl: codexLbHealthUrl(baseUrl),
|
|
24
|
+
blockers: [transportBlocker]
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const healthUrl = codexLbHealthUrl(baseUrl);
|
|
28
|
+
if (!healthUrl) {
|
|
29
|
+
return blockedProbe('invalid_base_url', {
|
|
30
|
+
baseUrl,
|
|
31
|
+
healthUrl: null,
|
|
32
|
+
blockers: ['codex_lb_tool_output_recovery_base_url_invalid']
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (opts.allowReservedTestHostBypass === true && isReservedTestHost(baseUrl)) {
|
|
36
|
+
return {
|
|
37
|
+
...baseProbe(baseUrl, healthUrl),
|
|
38
|
+
ok: true,
|
|
39
|
+
status: 'skipped_reserved_host',
|
|
40
|
+
required: false,
|
|
41
|
+
test_bypass: true
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const fetchImpl = opts.fetchImpl || globalThis.fetch;
|
|
45
|
+
if (typeof fetchImpl !== 'function') {
|
|
46
|
+
return applyCodexLbToolOutputRecoveryOverride(blockedProbe('probe_unavailable', {
|
|
47
|
+
baseUrl,
|
|
48
|
+
healthUrl,
|
|
49
|
+
blockers: ['codex_lb_tool_output_recovery_probe_unavailable']
|
|
50
|
+
}), opts.allowUnverified === true);
|
|
51
|
+
}
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timeoutMs = Math.max(250, Number(opts.timeoutMs || 4_000));
|
|
54
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
55
|
+
timer.unref?.();
|
|
56
|
+
try {
|
|
57
|
+
const response = await fetchImpl(healthUrl, {
|
|
58
|
+
method: 'GET',
|
|
59
|
+
headers: { accept: 'application/json' },
|
|
60
|
+
redirect: 'follow',
|
|
61
|
+
signal: controller.signal
|
|
62
|
+
});
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
return applyCodexLbToolOutputRecoveryOverride(blockedProbe('probe_unavailable', {
|
|
65
|
+
baseUrl,
|
|
66
|
+
healthUrl,
|
|
67
|
+
httpStatus: response.status,
|
|
68
|
+
blockers: [`codex_lb_tool_output_recovery_health_http_error:${response.status}`]
|
|
69
|
+
}), opts.allowUnverified === true);
|
|
70
|
+
}
|
|
71
|
+
const observedVersion = normalizeCodexLbVersion(response.headers.get('x-app-version'));
|
|
72
|
+
if (!observedVersion) {
|
|
73
|
+
return applyCodexLbToolOutputRecoveryOverride(blockedProbe('version_unverified', {
|
|
74
|
+
baseUrl,
|
|
75
|
+
healthUrl,
|
|
76
|
+
httpStatus: response.status,
|
|
77
|
+
blockers: ['codex_lb_tool_output_recovery_version_unverified']
|
|
78
|
+
}), opts.allowUnverified === true);
|
|
79
|
+
}
|
|
80
|
+
const compatible = compareCodexLbVersions(observedVersion, CODEX_LB_TOOL_OUTPUT_RECOVERY_MIN_VERSION) >= 0;
|
|
81
|
+
const result = {
|
|
82
|
+
...baseProbe(baseUrl, healthUrl),
|
|
83
|
+
ok: compatible,
|
|
84
|
+
status: compatible ? 'compatible' : 'version_too_old',
|
|
85
|
+
observed_version: observedVersion,
|
|
86
|
+
supports_interrupted_tool_output_recovery: compatible,
|
|
87
|
+
verified: true,
|
|
88
|
+
http_status: response.status,
|
|
89
|
+
blockers: compatible ? [] : ['codex_lb_tool_output_recovery_version_too_old']
|
|
90
|
+
};
|
|
91
|
+
return applyCodexLbToolOutputRecoveryOverride(result, opts.allowUnverified === true);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
const error = err instanceof Error
|
|
95
|
+
? err.name === 'AbortError' ? 'codex-lb health probe timed out' : redactCodexLbProbeText(err.message)
|
|
96
|
+
: redactCodexLbProbeText(String(err));
|
|
97
|
+
return applyCodexLbToolOutputRecoveryOverride(blockedProbe('probe_unavailable', {
|
|
98
|
+
baseUrl,
|
|
99
|
+
healthUrl,
|
|
100
|
+
blockers: ['codex_lb_tool_output_recovery_probe_failed'],
|
|
101
|
+
error
|
|
102
|
+
}), opts.allowUnverified === true);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
clearTimeout(timer);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export function codexLbToolOutputRecoveryNotSelected() {
|
|
109
|
+
return {
|
|
110
|
+
...baseProbe(null, null),
|
|
111
|
+
ok: true,
|
|
112
|
+
required: false,
|
|
113
|
+
status: 'not_selected'
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export function codexLbToolOutputRecoveryNotChecked(required = false) {
|
|
117
|
+
return {
|
|
118
|
+
...baseProbe(null, null),
|
|
119
|
+
ok: !required,
|
|
120
|
+
required,
|
|
121
|
+
status: 'not_checked',
|
|
122
|
+
blockers: required ? ['codex_lb_tool_output_recovery_not_checked'] : []
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export function codexLbToolOutputRecoveryOverrideAcknowledged(input = {}) {
|
|
126
|
+
const args = (input.args || []).map((arg) => String(arg));
|
|
127
|
+
const env = input.env || process.env;
|
|
128
|
+
return args.includes(CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_FLAG)
|
|
129
|
+
|| env[CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_ENV] === '1';
|
|
130
|
+
}
|
|
131
|
+
export function applyCodexLbToolOutputRecoveryOverride(probe, acknowledged) {
|
|
132
|
+
if (probe.ok || !acknowledged)
|
|
133
|
+
return probe;
|
|
134
|
+
return {
|
|
135
|
+
...probe,
|
|
136
|
+
ok: true,
|
|
137
|
+
status: 'override_acknowledged',
|
|
138
|
+
override_acknowledged: true,
|
|
139
|
+
blockers: [],
|
|
140
|
+
warnings: [
|
|
141
|
+
...probe.warnings,
|
|
142
|
+
`Operator explicitly acknowledged unverified codex-lb tool-output recovery via ${CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_FLAG} or ${CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_ENV}=1.`,
|
|
143
|
+
...probe.blockers
|
|
144
|
+
]
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function codexLbHealthUrl(baseUrl) {
|
|
148
|
+
try {
|
|
149
|
+
const parsed = new URL(normalizeCodexLbBaseUrl(baseUrl));
|
|
150
|
+
return new URL('/health', parsed.origin).toString();
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export function normalizeCodexLbVersion(value) {
|
|
157
|
+
const match = String(value || '').trim().match(/v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/);
|
|
158
|
+
if (!match)
|
|
159
|
+
return null;
|
|
160
|
+
const major = Number(match[1]);
|
|
161
|
+
const minor = Number(match[2]);
|
|
162
|
+
const patch = Number(match[3]);
|
|
163
|
+
if (![major, minor, patch].every(Number.isSafeInteger))
|
|
164
|
+
return null;
|
|
165
|
+
return `${major}.${minor}.${patch}${match[4] ? `-${match[4]}` : ''}`;
|
|
166
|
+
}
|
|
167
|
+
export function compareCodexLbVersions(left, right) {
|
|
168
|
+
const a = parseVersion(left);
|
|
169
|
+
const b = parseVersion(right);
|
|
170
|
+
if (!a || !b)
|
|
171
|
+
return -1;
|
|
172
|
+
for (let index = 0; index < 3; index += 1) {
|
|
173
|
+
const delta = (a.core[index] || 0) - (b.core[index] || 0);
|
|
174
|
+
if (delta !== 0)
|
|
175
|
+
return delta > 0 ? 1 : -1;
|
|
176
|
+
}
|
|
177
|
+
if (!a.pre.length && !b.pre.length)
|
|
178
|
+
return 0;
|
|
179
|
+
if (!a.pre.length)
|
|
180
|
+
return 1;
|
|
181
|
+
if (!b.pre.length)
|
|
182
|
+
return -1;
|
|
183
|
+
const length = Math.max(a.pre.length, b.pre.length);
|
|
184
|
+
for (let index = 0; index < length; index += 1) {
|
|
185
|
+
const aPart = a.pre[index];
|
|
186
|
+
const bPart = b.pre[index];
|
|
187
|
+
if (aPart === undefined)
|
|
188
|
+
return -1;
|
|
189
|
+
if (bPart === undefined)
|
|
190
|
+
return 1;
|
|
191
|
+
if (aPart === bPart)
|
|
192
|
+
continue;
|
|
193
|
+
const aNumber = /^\d+$/.test(aPart) ? Number(aPart) : null;
|
|
194
|
+
const bNumber = /^\d+$/.test(bPart) ? Number(bPart) : null;
|
|
195
|
+
if (aNumber !== null && bNumber !== null)
|
|
196
|
+
return aNumber > bNumber ? 1 : -1;
|
|
197
|
+
if (aNumber !== null)
|
|
198
|
+
return -1;
|
|
199
|
+
if (bNumber !== null)
|
|
200
|
+
return 1;
|
|
201
|
+
return aPart > bPart ? 1 : -1;
|
|
202
|
+
}
|
|
203
|
+
return 0;
|
|
204
|
+
}
|
|
205
|
+
function baseProbe(baseUrl, healthUrl) {
|
|
206
|
+
return {
|
|
207
|
+
schema: CODEX_LB_TOOL_OUTPUT_RECOVERY_SCHEMA,
|
|
208
|
+
ok: false,
|
|
209
|
+
required: true,
|
|
210
|
+
status: 'version_unverified',
|
|
211
|
+
base_url: redactCodexLbProbeUrl(baseUrl),
|
|
212
|
+
health_url: redactCodexLbProbeUrl(healthUrl),
|
|
213
|
+
observed_version: null,
|
|
214
|
+
minimum_version: CODEX_LB_TOOL_OUTPUT_RECOVERY_MIN_VERSION,
|
|
215
|
+
version_header: 'x-app-version',
|
|
216
|
+
supports_interrupted_tool_output_recovery: null,
|
|
217
|
+
verified: false,
|
|
218
|
+
override_acknowledged: false,
|
|
219
|
+
test_bypass: false,
|
|
220
|
+
http_status: null,
|
|
221
|
+
blockers: [],
|
|
222
|
+
warnings: [],
|
|
223
|
+
operator_actions: [UPGRADE_ACTION, OAUTH_ACTION, FRESH_THREAD_ACTION]
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function blockedProbe(status, input) {
|
|
227
|
+
return {
|
|
228
|
+
...baseProbe(input.baseUrl, input.healthUrl),
|
|
229
|
+
status,
|
|
230
|
+
blockers: input.blockers,
|
|
231
|
+
...(input.httpStatus === undefined ? {} : { http_status: input.httpStatus }),
|
|
232
|
+
...(input.error === undefined ? {} : { error: redactCodexLbProbeText(input.error) })
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
function redactCodexLbProbeUrl(value) {
|
|
236
|
+
if (!value)
|
|
237
|
+
return null;
|
|
238
|
+
try {
|
|
239
|
+
const parsed = new URL(value);
|
|
240
|
+
parsed.username = '';
|
|
241
|
+
parsed.password = '';
|
|
242
|
+
parsed.hash = '';
|
|
243
|
+
for (const key of [...parsed.searchParams.keys()]) {
|
|
244
|
+
if (/(?:access[_-]?token|api[_-]?key|secret|password|token|credential)/i.test(key)) {
|
|
245
|
+
parsed.searchParams.set(key, 'redacted');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return redactCodexLbProbeText(parsed.toString());
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return redactCodexLbProbeText(value);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function redactCodexLbProbeText(value) {
|
|
255
|
+
return redactString(String(value || ''))
|
|
256
|
+
.replace(/([a-z][a-z0-9+.-]*:\/\/)[^/@\s]+@/gi, '$1[redacted]@')
|
|
257
|
+
.replace(/([?&](?:access[_-]?token|api[_-]?key|secret|password|token|credential)=)[^&#\s]*/gi, '$1[redacted]')
|
|
258
|
+
.replace(/(\b(?:access[_-]?token|api[_-]?key|secret|password|token|credential)\s*[:=]\s*)(?:\[redacted\]|"[^"]*"|'[^']*'|[^\s,;}\]]+)/gi, '$1[redacted]');
|
|
259
|
+
}
|
|
260
|
+
function parseVersion(value) {
|
|
261
|
+
const normalized = normalizeCodexLbVersion(value);
|
|
262
|
+
if (!normalized)
|
|
263
|
+
return null;
|
|
264
|
+
const [coreText = '', preText = ''] = normalized.split('-', 2);
|
|
265
|
+
const coreParts = coreText.split('.').map(Number);
|
|
266
|
+
const major = coreParts[0];
|
|
267
|
+
const minor = coreParts[1];
|
|
268
|
+
const patch = coreParts[2];
|
|
269
|
+
if (major === undefined || minor === undefined || patch === undefined)
|
|
270
|
+
return null;
|
|
271
|
+
return { core: [major, minor, patch], pre: preText ? preText.split('.') : [] };
|
|
272
|
+
}
|
|
273
|
+
function isReservedTestHost(baseUrl) {
|
|
274
|
+
try {
|
|
275
|
+
const hostname = new URL(baseUrl).hostname.toLowerCase();
|
|
276
|
+
return hostname === 'example.test'
|
|
277
|
+
|| hostname.endsWith('.example.test')
|
|
278
|
+
|| hostname === 'example.invalid'
|
|
279
|
+
|| hostname.endsWith('.example.invalid')
|
|
280
|
+
|| hostname === 'example.com'
|
|
281
|
+
|| hostname.endsWith('.example.com')
|
|
282
|
+
|| hostname === 'example.org'
|
|
283
|
+
|| hostname.endsWith('.example.org')
|
|
284
|
+
|| hostname === 'example.net'
|
|
285
|
+
|| hostname.endsWith('.example.net');
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=codex-lb-tool-output-recovery.js.map
|
|
@@ -7,15 +7,15 @@ import { probeCodexHookApprovalState } from '../codex-app/codex-hook-approval-pr
|
|
|
7
7
|
import { detectCodex0138Capability } from '../codex-control/codex-0138-capability.js';
|
|
8
8
|
import { detectCodex0139Capability } from '../codex-control/codex-0139-capability.js';
|
|
9
9
|
import { detectCodex0140Capability } from '../codex-control/codex-0140-capability.js';
|
|
10
|
-
import {
|
|
10
|
+
import { detectCodex0144Capability } from '../codex-control/codex-0144-capability.js';
|
|
11
11
|
import { buildCodexPluginInventory } from '../codex-plugins/codex-plugin-json.js';
|
|
12
12
|
import { nowIso, runProcess, writeJsonAtomic } from '../fsx.js';
|
|
13
|
-
import {
|
|
13
|
+
import { MANAGED_OFFICIAL_SUBAGENT_ROLES, MANAGED_SKILLS, managedOfficialSubagentRoleOwnsText } from '../managed-assets/managed-assets-manifest.js';
|
|
14
14
|
import { buildMcpPluginServerCandidates } from '../mcp/mcp-plugin-inventory.js';
|
|
15
15
|
import { codexNativeFeatureState, computeCodexNativeInvocationDefaults } from './codex-native-feature-matrix.js';
|
|
16
16
|
const REPORT_PATH = '.sneakoscope/reports/codex-native-feature-matrix.json';
|
|
17
17
|
const REQUIRED_SKILL_NAMES = MANAGED_SKILLS.map((skill) => skill.id);
|
|
18
|
-
const REQUIRED_AGENT_ROLES =
|
|
18
|
+
const REQUIRED_AGENT_ROLES = MANAGED_OFFICIAL_SUBAGENT_ROLES.map((role) => role.id);
|
|
19
19
|
const invocationMatrixCache = new Map();
|
|
20
20
|
export async function buildCodexNativeFeatureMatrix(input = { root: process.cwd() }) {
|
|
21
21
|
const root = path.resolve(input.root || process.cwd());
|
|
@@ -37,26 +37,26 @@ export async function buildCodexNativeFeatureMatrix(input = { root: process.cwd(
|
|
|
37
37
|
process.env.SKS_CODEX_0138_FAKE,
|
|
38
38
|
process.env.SKS_CODEX_0139_FAKE,
|
|
39
39
|
process.env.SKS_CODEX_0140_FAKE,
|
|
40
|
-
process.env.
|
|
40
|
+
process.env.SKS_CODEX_0144_FAKE,
|
|
41
41
|
process.env.SKS_CODEX_PLUGIN_JSON_FAKE
|
|
42
42
|
]
|
|
43
43
|
});
|
|
44
44
|
if (!input.missionDir && !repairManagedAssets && invocationMatrixCache.has(cacheKey)) {
|
|
45
45
|
return invocationMatrixCache.get(cacheKey);
|
|
46
46
|
}
|
|
47
|
-
const fixtureMode = process.env.SKS_CODEX_0138_FAKE === '1' || process.env.SKS_CODEX_0139_FAKE === '1' || process.env.SKS_CODEX_0140_FAKE === '1' || process.env.
|
|
47
|
+
const fixtureMode = process.env.SKS_CODEX_0138_FAKE === '1' || process.env.SKS_CODEX_0139_FAKE === '1' || process.env.SKS_CODEX_0140_FAKE === '1' || process.env.SKS_CODEX_0144_FAKE === '1' || process.env.SKS_CODEX_PLUGIN_JSON_FAKE === '1';
|
|
48
48
|
const codexBin = fixtureMode ? process.env.CODEX_BIN || 'codex' : await findCodexBinary().catch(() => null);
|
|
49
49
|
const version = codexBin ? await codexVersion(codexBin) : null;
|
|
50
50
|
const cap0138 = await detectCodex0138Capability({ codexBin }).catch((err) => ({ blockers: [messageOf(err)] }));
|
|
51
51
|
const cap0139 = await detectCodex0139Capability({ codexBin }).catch((err) => ({ blockers: [messageOf(err)] }));
|
|
52
52
|
const cap0140 = await detectCodex0140Capability({ codexBin }).catch((err) => ({ blockers: [messageOf(err)] }));
|
|
53
|
-
const
|
|
54
|
-
schema: 'sks.codex-
|
|
53
|
+
const cap0144 = await detectCodex0144Capability({ codexBin, root }).catch((err) => ({
|
|
54
|
+
schema: 'sks.codex-0144-capability.v1',
|
|
55
55
|
ok: false,
|
|
56
56
|
release_authorizing: false,
|
|
57
57
|
feature_states: {},
|
|
58
58
|
blockers: [messageOf(err)],
|
|
59
|
-
warnings: ['
|
|
59
|
+
warnings: ['codex_0144_probe_exception']
|
|
60
60
|
}));
|
|
61
61
|
const app = await codexAppIntegrationStatus({ codex: { bin: codexBin, version, available: Boolean(codexBin) } }).catch((err) => ({ ok: false, blockers: [messageOf(err)] }));
|
|
62
62
|
const plugins = await buildCodexPluginInventory().catch((err) => ({
|
|
@@ -141,17 +141,17 @@ export async function buildCodexNativeFeatureMatrix(input = { root: process.cwd(
|
|
|
141
141
|
app_handoff: boolState(booleanFeature(cap0138, 'supports_app_handoff'), 'actual-probe', '.sneakoscope/codex-0138-capability.json', blockersOf(cap0138)),
|
|
142
142
|
image_path_exposure: boolState(booleanFeature(cap0138, 'supports_image_path_exposure'), 'actual-probe', '.sneakoscope/codex-0138-capability.json', blockersOf(cap0138)),
|
|
143
143
|
code_mode_web_search: boolState(booleanFeature(cap0139, 'supports_code_mode_web_search'), 'actual-probe', '.sneakoscope/codex-0139-capability.json', blockersOf(cap0139)),
|
|
144
|
-
|
|
145
|
-
multi_agent_mode:
|
|
146
|
-
rollout_budget:
|
|
147
|
-
indexed_web_search:
|
|
148
|
-
current_time_read:
|
|
149
|
-
terminal_subagent_error:
|
|
150
|
-
exec_mcp_reconnect:
|
|
151
|
-
plugin_catalog_refresh:
|
|
152
|
-
native_thread_list_search:
|
|
153
|
-
remote_native_environment:
|
|
154
|
-
app_server_overload:
|
|
144
|
+
codex_0144: boolState(recordOk(cap0144) === true, 'actual-probe', '.sneakoscope/codex/codex-0144-capability.json', blockersOf(cap0144), warningsOf(cap0144)),
|
|
145
|
+
multi_agent_mode: codex0144State(cap0144, 'multi_agent_mode_schema'),
|
|
146
|
+
rollout_budget: codex0144State(cap0144, 'rollout_budget_schema'),
|
|
147
|
+
indexed_web_search: codex0144State(cap0144, 'indexed_web_search_schema'),
|
|
148
|
+
current_time_read: codex0144State(cap0144, 'current_time_read_schema'),
|
|
149
|
+
terminal_subagent_error: codex0144State(cap0144, 'terminal_subagent_error_schema'),
|
|
150
|
+
exec_mcp_reconnect: codex0144State(cap0144, 'exec_mcp_reconnect_schema'),
|
|
151
|
+
plugin_catalog_refresh: codex0144State(cap0144, 'plugin_catalog_refresh_schema'),
|
|
152
|
+
native_thread_list_search: codex0144State(cap0144, 'native_thread_list_search_schema'),
|
|
153
|
+
remote_native_environment: codex0144State(cap0144, 'remote_native_environment_schema'),
|
|
154
|
+
app_server_overload: codex0144State(cap0144, 'app_server_overload_schema'),
|
|
155
155
|
codex_0140: boolState(booleanFeature(cap0140, 'supports_0140'), 'actual-probe', '.sneakoscope/codex-0140-capability.json', blockersOf(cap0140)),
|
|
156
156
|
usage_views: boolState(booleanFeature(cap0140?.features || {}, 'usage_views'), 'actual-probe', '.sneakoscope/codex-0140-capability.json', blockersOf(cap0140)),
|
|
157
157
|
goal_attachment_preservation: boolState(booleanFeature(cap0140?.features || {}, 'goal_attachment_preservation'), 'actual-probe', '.sneakoscope/codex-0140-capability.json', blockersOf(cap0140)),
|
|
@@ -176,7 +176,7 @@ export async function buildCodexNativeFeatureMatrix(input = { root: process.cwd(
|
|
|
176
176
|
codex_0138: cap0138,
|
|
177
177
|
codex_0139: cap0139,
|
|
178
178
|
codex_0140: cap0140,
|
|
179
|
-
|
|
179
|
+
codex_0144: cap0144,
|
|
180
180
|
app,
|
|
181
181
|
plugin_inventory: plugins,
|
|
182
182
|
mcp_candidates: mcpCandidates,
|
|
@@ -248,22 +248,15 @@ async function inspectManagedSkillState(root) {
|
|
|
248
248
|
};
|
|
249
249
|
}
|
|
250
250
|
async function inspectManagedAgentRoleState(root) {
|
|
251
|
-
const
|
|
252
|
-
path.join(root, '.codex', 'agents'),
|
|
253
|
-
...(process.env.CODEX_HOME ? [path.join(process.env.CODEX_HOME, 'agents')] : [])
|
|
254
|
-
];
|
|
251
|
+
const dir = path.join(root, '.codex', 'agents');
|
|
255
252
|
let existingCount = 0;
|
|
256
253
|
const managed = new Set();
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
const text = await fs.readFile(path.join(dir, role.filename), 'utf8').catch(() => '');
|
|
264
|
-
if (managedAgentRoleOwnsText(text, role))
|
|
265
|
-
managed.add(role.id);
|
|
266
|
-
}
|
|
254
|
+
const rows = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
255
|
+
existingCount = rows.filter((row) => row.isFile() && row.name.endsWith('.toml')).length;
|
|
256
|
+
for (const role of MANAGED_OFFICIAL_SUBAGENT_ROLES) {
|
|
257
|
+
const text = await fs.readFile(path.join(dir, role.filename), 'utf8').catch(() => '');
|
|
258
|
+
if (managedOfficialSubagentRoleOwnsText(text, role))
|
|
259
|
+
managed.add(role.id);
|
|
267
260
|
}
|
|
268
261
|
const missing = REQUIRED_AGENT_ROLES.filter((role) => !managed.has(role));
|
|
269
262
|
return {
|
|
@@ -336,23 +329,23 @@ function warningsOf(value) {
|
|
|
336
329
|
return [];
|
|
337
330
|
return value.warnings.map((item) => String(item)).filter(Boolean);
|
|
338
331
|
}
|
|
339
|
-
function
|
|
332
|
+
function codex0144State(capability, key) {
|
|
340
333
|
const state = isRecord(capability)
|
|
341
334
|
&& isRecord(capability.feature_states)
|
|
342
335
|
&& isRecord(capability.feature_states[key])
|
|
343
336
|
? capability.feature_states[key]
|
|
344
337
|
: null;
|
|
345
338
|
const evidence = Array.isArray(state?.evidence) ? state.evidence.map(String) : [];
|
|
346
|
-
const blockers = Array.isArray(state?.blockers) ? state.blockers.map(String) : [`
|
|
339
|
+
const blockers = Array.isArray(state?.blockers) ? state.blockers.map(String) : [`codex_0144_${key}_not_verified`];
|
|
347
340
|
const supported = state?.supported === true;
|
|
348
341
|
const certainty = typeof state?.certainty === 'string' ? state.certainty : '';
|
|
349
342
|
const input = {
|
|
350
343
|
ok: supported,
|
|
351
344
|
source: 'actual-probe',
|
|
352
|
-
artifact_path: '.sneakoscope/codex/codex-
|
|
345
|
+
artifact_path: '.sneakoscope/codex/codex-0144-capability.json',
|
|
353
346
|
evidence,
|
|
354
347
|
blockers: supported ? [] : blockers,
|
|
355
|
-
warnings: certainty && certainty !== 'actual' && certainty !== 'discovered' ? [`
|
|
348
|
+
warnings: certainty && certainty !== 'actual' && certainty !== 'discovered' ? [`codex_0144_${key}_${certainty}`] : []
|
|
356
349
|
};
|
|
357
350
|
if (!supported)
|
|
358
351
|
input.unavailableStatus = 'fallback';
|
|
@@ -21,14 +21,14 @@ export function computeCodexNativeInvocationDefaults(matrix) {
|
|
|
21
21
|
return {
|
|
22
22
|
loop_worker_role_strategy: features.agent_type.ok ? 'agent_type' : 'message-role',
|
|
23
23
|
multi_agent_mode: multiAgentOk && features.agent_type.ok ? 'proactive' : multiAgentOk ? 'explicitRequestOnly' : 'none',
|
|
24
|
-
rollout_budget_strategy: rolloutBudgetOk ? 'codex-
|
|
24
|
+
rollout_budget_strategy: rolloutBudgetOk ? 'codex-0144-shared' : 'sks-local-only',
|
|
25
25
|
qa_visual_review_strategy: features.app_handoff.ok ? 'app-handoff' : 'headless-artifact',
|
|
26
26
|
research_source_strategy: indexedSearchOk ? 'indexed-web-search' : features.mcp_inventory.ok ? 'mcp-plugin-candidates' : features.code_mode_web_search.ok ? 'web-sources' : 'local-files',
|
|
27
27
|
image_followup_strategy: features.image_path_exposure.ok ? 'model-visible-path' : 'artifact-path',
|
|
28
28
|
hook_evidence_policy: hookStatus === 'available' ? 'approved-only' : hookStatus === 'unavailable' ? 'not-installed' : 'unknown-do-not-count',
|
|
29
29
|
skill_bridge_strategy: features.skill_sync.ok || features.skill_picker.ok ? 'sks-managed-skills' : 'cli-only',
|
|
30
30
|
current_time_source: currentTimeOk ? 'codex-currentTime-read' : 'external-clock',
|
|
31
|
-
overload_retry_policy: overloadOk ? 'codex-
|
|
31
|
+
overload_retry_policy: overloadOk ? 'codex-0144-retryable' : 'generic'
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
export function matrixFeatureOk(matrix, key) {
|
|
@@ -54,7 +54,7 @@ export async function repairCodexNativeManagedAssets(input) {
|
|
|
54
54
|
rows.push({
|
|
55
55
|
asset: 'agent_roles',
|
|
56
56
|
ok: recordOk(report) !== false,
|
|
57
|
-
changed: listLength(report, 'created') > 0,
|
|
57
|
+
changed: listLength(report, 'created') + listLength(report, 'updated') > 0,
|
|
58
58
|
artifact_path: '.sneakoscope/reports/codex-agent-role-sync.json',
|
|
59
59
|
blockers: blockersOf(report)
|
|
60
60
|
});
|
|
@@ -20,10 +20,13 @@ const CORE_SKILL_DEFINITIONS = [
|
|
|
20
20
|
canonical_name: 'naruto',
|
|
21
21
|
display_name: 'naruto',
|
|
22
22
|
route: '$Naruto',
|
|
23
|
-
purpose: '
|
|
24
|
-
when: 'Use when the selected route
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
purpose: 'run a Codex official subagent workflow with official agent threads while parent integration remains owner.',
|
|
24
|
+
when: 'Use when the user explicitly invokes $Naruto or the selected route requires bounded parallel delegation.',
|
|
25
|
+
workflow: 'Use sks naruto run "<task>" [--agents N] [--max-threads N] [--json]. Automatic fan-out is one by default, two only for an explicit parallel request or independent risk domains, and at most three for critical multi-domain risk; an explicit operator --agents N remains authoritative. The GPT-5.6 Sol Max parent selects the narrow project-scoped custom role whose description matches each defensible slice: GPT-5.6 Luna Max for clear bounded work and exploration, GPT-5.6 Sol Max for complex implementation, UI, debugging, testing, architecture, integration, security, DB, research, release, and other judgment-sensitive work. Read-only roles declare sandbox_mode="read-only"; write roles inherit the parent permission mode. Treat Codex [agents].max_threads as the concurrency authority, keep max_depth=1, avoid duplicate or overlapping write slices, wait for every requested subagent, reuse only bounded TriWiki attention.use_first anchors with on-demand source hydration, treat SubagentStart/SubagentStop as lifecycle-only evidence, require subagent-parent-summary.json with one structured outcome per thread, and let the parent own integration and final judgment.',
|
|
26
|
+
safety: 'Preserve user-authored content, inherit the parent permission mode, do not spawn nested subagents, do not inject the full pack or the full TriWiki context into every child, and do not fall back to another model, process swarm, custom scheduler, or worker pool. The historical Naruto process runtime is removed; stop with explicit blocker evidence when the official path is unavailable.',
|
|
27
|
+
cli: 'sks naruto run "<task>" [--agents N] [--max-threads N] [--json]; sks naruto status|subagents|proof [--mission <id>] [--json]',
|
|
28
|
+
evidence: 'subagent-plan.json, subagent-events.jsonl, subagent-parent-summary.json, subagent-evidence.json, naruto-summary.json, and naruto-gate.json.',
|
|
29
|
+
fallback: 'Return explicit official-subagent availability blockers and continue parent-owned only when the sealed task still has meaningful in-scope work; never fabricate process, PID, or subagent evidence.'
|
|
27
30
|
},
|
|
28
31
|
{
|
|
29
32
|
id: 'sks-core-qa-loop',
|
|
@@ -43,6 +46,7 @@ const CORE_SKILL_DEFINITIONS = [
|
|
|
43
46
|
route: '$Research',
|
|
44
47
|
purpose: 'run evidence-bound discovery, source ledgers, and synthesis cycles.',
|
|
45
48
|
when: 'Use for discovery, evaluation, external-source claims, or frontier-style research.',
|
|
49
|
+
workflow: 'Run layered Super Search first and accept only source rows correlated to verified proof, source-ledger, and hydrated-content artifacts. Then run exactly three independent official research_reviewer threads on GPT-5.6 Sol Max using Einstein, von Neumann, and Skeptic composite lenses. Any objection triggers a mission-local research_synthesizer revision and a fresh three-thread review cycle. agent-ledger.json and debate-ledger.json are compatibility projections only; do not launch a removed legacy scheduler or a custom debate pool.',
|
|
46
50
|
evidence: 'research plan, source ledger, cycle record, synthesis, and final review.',
|
|
47
51
|
fallback: 'State source/tool unavailability and avoid unsupported live-accuracy claims.'
|
|
48
52
|
},
|
|
@@ -49,13 +49,20 @@ async function postcheckCapability(root, state, fixture) {
|
|
|
49
49
|
return { ...state, after: 'blocked', blockers: [...state.blockers, `unknown_capability:${state.id}`] };
|
|
50
50
|
}
|
|
51
51
|
function postcheckImageGeneration(state, fixture) {
|
|
52
|
-
if (fixture === 'all-repairable' || state.before === 'verified'
|
|
52
|
+
if (fixture === 'all-repairable' || (state.before === 'verified'
|
|
53
|
+
&& state.evidence_level === 'real-interaction'
|
|
54
|
+
&& state.real_interaction_verified === true))
|
|
53
55
|
return verified(state);
|
|
56
|
+
const blocker = state.evidence_level === 'configuration'
|
|
57
|
+
? 'codex_imagegen_real_output_unverified'
|
|
58
|
+
: 'codex_app_builtin_imagegen_capability_missing';
|
|
54
59
|
return {
|
|
55
60
|
...state,
|
|
56
61
|
after: 'unknown',
|
|
62
|
+
availability: 'manual-required',
|
|
63
|
+
repairability: 'manual-required',
|
|
57
64
|
core_blockers: [],
|
|
58
|
-
route_blockers: mergeStateRouteBlockers(state, 'route-image', [
|
|
65
|
+
route_blockers: mergeStateRouteBlockers(state, 'route-image', [blocker]),
|
|
59
66
|
blockers: [],
|
|
60
67
|
warnings: [...new Set([...state.warnings, 'image_generation_not_verified_without_real_capability'])]
|
|
61
68
|
};
|
|
@@ -69,12 +76,14 @@ async function postcheckImageFollowupEdit(root, state) {
|
|
|
69
76
|
return routeBlocked(state, 'route-image', ['image_followup_sample_artifact_unwritable']);
|
|
70
77
|
return verified(state);
|
|
71
78
|
}
|
|
72
|
-
function postcheckComputerUse(state,
|
|
73
|
-
if (
|
|
79
|
+
function postcheckComputerUse(state, fixture) {
|
|
80
|
+
if (fixture === 'all-repairable')
|
|
74
81
|
return verified(state);
|
|
75
82
|
return {
|
|
76
83
|
...state,
|
|
77
84
|
after: 'unknown',
|
|
85
|
+
availability: 'manual-required',
|
|
86
|
+
repairability: 'manual-required',
|
|
78
87
|
core_blockers: [],
|
|
79
88
|
route_blockers: mergeStateRouteBlockers(state, 'route-computer-use', ['computer_use_os_permission_or_capability_unknown']),
|
|
80
89
|
blockers: [],
|
|
@@ -82,20 +91,19 @@ function postcheckComputerUse(state, _fixture) {
|
|
|
82
91
|
};
|
|
83
92
|
}
|
|
84
93
|
function postcheckChromeWebReview(state, fixture) {
|
|
85
|
-
if (fixture === 'all-repairable'
|
|
94
|
+
if (fixture === 'all-repairable')
|
|
86
95
|
return verified(state);
|
|
87
96
|
return {
|
|
88
97
|
...state,
|
|
89
98
|
after: 'unknown',
|
|
99
|
+
availability: 'manual-required',
|
|
100
|
+
repairability: 'manual-required',
|
|
90
101
|
core_blockers: [],
|
|
91
102
|
route_blockers: mergeStateRouteBlockers(state, 'route-chrome-web-review', ['codex_chrome_extension_readiness_not_verified']),
|
|
92
103
|
blockers: [],
|
|
93
104
|
warnings: [...new Set([...state.warnings, 'manual_chrome_extension_setup_required'])]
|
|
94
105
|
};
|
|
95
106
|
}
|
|
96
|
-
function syntheticNativeVerificationAllowed(fixture) {
|
|
97
|
-
return fixture === 'all-repairable' || process.env.SKS_NATIVE_CAPABILITY_FIXTURE === '1' || process.env.NODE_ENV === 'test';
|
|
98
|
-
}
|
|
99
107
|
async function postcheckAppScreenshot(root, state) {
|
|
100
108
|
const dir = path.join(root, '.sneakoscope', 'app-screenshots');
|
|
101
109
|
const registry = path.join(dir, 'screenshot-registry.json');
|