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
|
@@ -17,13 +17,21 @@ export async function buildNativeCapabilityRepairMatrix(input) {
|
|
|
17
17
|
const root = path.resolve(input.root);
|
|
18
18
|
const selected = new Set(input.capabilities || NATIVE_CAPABILITY_IDS);
|
|
19
19
|
const fixture = input.fixture || false;
|
|
20
|
+
const needsImageCapability = selected.has('image_generation');
|
|
20
21
|
const imageCapability = fixture
|
|
21
22
|
? fixtureImageCapability(fixture)
|
|
22
|
-
:
|
|
23
|
+
: needsImageCapability
|
|
24
|
+
? await detectImagegenCapability({ timeoutMs: 2500 }).catch((err) => ({ blockers: [messageOf(err)], auth_readiness: null, codex_app: { available: false } }))
|
|
25
|
+
: { blockers: [], auth_readiness: null, codex_app: { available: false } };
|
|
26
|
+
const needsNativeFeatureMatrix = selected.has('app_handoff') || selected.has('image_path_exposure');
|
|
23
27
|
const nativeFeatureMatrix = fixture
|
|
24
28
|
? fixtureNativeFeatureMatrix(fixture)
|
|
25
|
-
:
|
|
26
|
-
|
|
29
|
+
: needsNativeFeatureMatrix
|
|
30
|
+
? await buildCodexNativeFeatureMatrix({ root, mode: 'read-only' }).catch((err) => ({ ok: false, features: {}, blockers: [messageOf(err)], invocation_defaults: {} }))
|
|
31
|
+
: { ok: true, features: {}, blockers: [], invocation_defaults: {} };
|
|
32
|
+
const states = await Promise.all(NATIVE_CAPABILITY_IDS
|
|
33
|
+
.filter((id) => selected.has(id))
|
|
34
|
+
.map((id) => stateForCapability(root, id, imageCapability, nativeFeatureMatrix, fixture)));
|
|
27
35
|
const coreBlockers = states.flatMap((state) => state.core_blockers || state.blockers);
|
|
28
36
|
const routeBlockers = mergeRouteBlockers(states);
|
|
29
37
|
const warnings = states.flatMap((state) => state.warnings);
|
|
@@ -47,24 +55,47 @@ export async function buildNativeCapabilityRepairMatrix(input) {
|
|
|
47
55
|
await writeJsonAtomic(reportPath, matrix).catch(() => undefined);
|
|
48
56
|
return matrix;
|
|
49
57
|
}
|
|
50
|
-
async function stateForCapability(root, id, imageCapability, nativeFeatureMatrix) {
|
|
58
|
+
async function stateForCapability(root, id, imageCapability, nativeFeatureMatrix, fixture) {
|
|
51
59
|
const reports = path.join(root, '.sneakoscope', 'reports');
|
|
52
60
|
if (id === 'image_generation') {
|
|
53
|
-
const
|
|
61
|
+
const fixtureVerified = fixture === 'all-repairable';
|
|
62
|
+
const builtInConfigured = imageCapability?.codex_app?.available === true;
|
|
63
|
+
const authReady = imageCapability?.auth_readiness?.headless_auto_available === true;
|
|
64
|
+
const realOutputVerified = (builtInConfigured
|
|
65
|
+
&& imageCapability?.real_generation_available === true
|
|
66
|
+
&& imageCapability?.real_output_verified_by_capability_check === true
|
|
67
|
+
&& fixture === false);
|
|
68
|
+
const verified = fixtureVerified || realOutputVerified;
|
|
69
|
+
const routeBlocker = builtInConfigured
|
|
70
|
+
? 'codex_imagegen_real_output_unverified'
|
|
71
|
+
: 'codex_app_builtin_imagegen_capability_missing';
|
|
54
72
|
return {
|
|
55
73
|
id,
|
|
56
|
-
before: verified ? 'verified' : 'blocked',
|
|
74
|
+
before: verified ? 'verified' : builtInConfigured ? 'degraded' : 'blocked',
|
|
57
75
|
repairability: verified ? 'auto' : 'manual-required',
|
|
58
76
|
availability: verified ? 'verified' : 'manual-required',
|
|
59
77
|
required_for: ['route-image'],
|
|
60
|
-
repair_actions: verified
|
|
78
|
+
repair_actions: verified
|
|
79
|
+
? ['postcheck-imagegen-path-contract']
|
|
80
|
+
: builtInConfigured
|
|
81
|
+
? ['Invoke Codex App $imagegen with gpt-image-2 in a fresh task and record the selected raster output path before retrying the image route.']
|
|
82
|
+
: ['Sign in to Codex App, enable the built-in $imagegen / gpt-image-2 surface, then verify it with a real generated raster output before retrying the image route.'],
|
|
61
83
|
after: null,
|
|
62
84
|
artifact_path: path.join(reports, 'native-capability-repair-matrix.json'),
|
|
63
85
|
core_blockers: [],
|
|
64
|
-
route_blockers: verified ? {} : { 'route-image': [
|
|
65
|
-
manual_actions: verified ? [] : [
|
|
86
|
+
route_blockers: verified ? {} : { 'route-image': [routeBlocker] },
|
|
87
|
+
manual_actions: verified ? [] : [
|
|
88
|
+
builtInConfigured
|
|
89
|
+
? 'Generate one real raster with Codex App $imagegen / gpt-image-2 and bind its output path to the route evidence.'
|
|
90
|
+
: 'Sign in to Codex App and enable/use the built-in $imagegen / gpt-image-2 surface before image routes.'
|
|
91
|
+
],
|
|
66
92
|
blockers: [],
|
|
67
|
-
warnings: verified ? [] : [
|
|
93
|
+
warnings: verified ? [] : [
|
|
94
|
+
'image_generation_not_verified_without_real_capability',
|
|
95
|
+
...(authReady && !builtInConfigured ? ['imagegen_auth_readiness_is_not_builtin_output_proof'] : [])
|
|
96
|
+
],
|
|
97
|
+
evidence_level: fixtureVerified ? 'fixture' : realOutputVerified ? 'real-interaction' : builtInConfigured ? 'configuration' : authReady ? 'environment-hint' : 'none',
|
|
98
|
+
real_interaction_verified: realOutputVerified
|
|
68
99
|
};
|
|
69
100
|
}
|
|
70
101
|
if (id === 'image_followup_edit') {
|
|
@@ -118,38 +149,50 @@ async function stateForCapability(root, id, imageCapability, nativeFeatureMatrix
|
|
|
118
149
|
};
|
|
119
150
|
}
|
|
120
151
|
if (id === 'computer_use') {
|
|
121
|
-
const
|
|
152
|
+
const fixtureVerified = fixture === 'all-repairable';
|
|
153
|
+
const envHint = process.env.SKS_COMPUTER_USE_CAPABILITY === 'verified';
|
|
122
154
|
return {
|
|
123
155
|
id,
|
|
124
|
-
before:
|
|
125
|
-
availability:
|
|
156
|
+
before: fixtureVerified ? 'verified' : envHint ? 'degraded' : 'unknown',
|
|
157
|
+
availability: fixtureVerified ? 'verified' : 'manual-required',
|
|
126
158
|
required_for: ['route-computer-use'],
|
|
127
|
-
repairability:
|
|
128
|
-
repair_actions:
|
|
159
|
+
repairability: fixtureVerified ? 'auto' : 'manual-required',
|
|
160
|
+
repair_actions: fixtureVerified ? ['postcheck-computer-use'] : ['Enable Codex Computer Use and macOS Screen Recording/Accessibility permissions; execute a real native interaction, then rerun `sks doctor --capabilities --yes`.'],
|
|
129
161
|
after: null,
|
|
130
162
|
artifact_path: path.join(reports, 'native-capability-repair-matrix.json'),
|
|
131
163
|
core_blockers: [],
|
|
132
|
-
route_blockers:
|
|
133
|
-
manual_actions:
|
|
164
|
+
route_blockers: fixtureVerified ? {} : { 'route-computer-use': ['computer_use_os_permission_or_capability_unknown'] },
|
|
165
|
+
manual_actions: fixtureVerified ? [] : ['Enable Codex Computer Use and macOS Screen Recording/Accessibility permissions and verify a real interaction before `$CU` routes.'],
|
|
134
166
|
blockers: [],
|
|
135
|
-
warnings:
|
|
167
|
+
warnings: fixtureVerified ? [] : [
|
|
168
|
+
'manual_os_permission_required',
|
|
169
|
+
...(envHint ? ['computer_use_environment_hint_is_not_interaction_proof'] : [])
|
|
170
|
+
],
|
|
171
|
+
evidence_level: fixtureVerified ? 'fixture' : envHint ? 'environment-hint' : 'none',
|
|
172
|
+
real_interaction_verified: false
|
|
136
173
|
};
|
|
137
174
|
}
|
|
138
|
-
const
|
|
175
|
+
const fixtureVerified = fixture === 'all-repairable';
|
|
176
|
+
const chromeHint = process.env.SKS_CHROME_EXTENSION_READY === '1';
|
|
139
177
|
return {
|
|
140
178
|
id,
|
|
141
|
-
before:
|
|
142
|
-
availability:
|
|
179
|
+
before: fixtureVerified ? 'verified' : chromeHint ? 'degraded' : 'unknown',
|
|
180
|
+
availability: fixtureVerified ? 'verified' : 'manual-required',
|
|
143
181
|
required_for: ['route-chrome-web-review'],
|
|
144
|
-
repairability:
|
|
145
|
-
repair_actions:
|
|
182
|
+
repairability: fixtureVerified ? 'auto' : 'manual-required',
|
|
183
|
+
repair_actions: fixtureVerified ? ['postcheck-chrome-extension-readiness'] : ['Install/enable the official Codex Chrome Extension, approve it in Codex App, then verify a real browser interaction; web/browser/localhost verification must use the Chrome extension path first.'],
|
|
146
184
|
after: null,
|
|
147
185
|
artifact_path: path.join(reports, 'native-capability-repair-matrix.json'),
|
|
148
186
|
core_blockers: [],
|
|
149
|
-
route_blockers:
|
|
150
|
-
manual_actions:
|
|
187
|
+
route_blockers: fixtureVerified ? {} : { 'route-chrome-web-review': ['codex_chrome_extension_readiness_not_verified'] },
|
|
188
|
+
manual_actions: fixtureVerified ? [] : ['Install/enable the official Codex Chrome Extension and verify a real interaction before browser/web review routes.'],
|
|
151
189
|
blockers: [],
|
|
152
|
-
warnings:
|
|
190
|
+
warnings: fixtureVerified ? [] : [
|
|
191
|
+
'manual_chrome_extension_setup_required',
|
|
192
|
+
...(chromeHint ? ['chrome_extension_environment_hint_is_not_interaction_proof'] : [])
|
|
193
|
+
],
|
|
194
|
+
evidence_level: fixtureVerified ? 'fixture' : chromeHint ? 'environment-hint' : 'none',
|
|
195
|
+
real_interaction_verified: false
|
|
153
196
|
};
|
|
154
197
|
}
|
|
155
198
|
export async function writeSavedArtifactPathContract(root) {
|
|
@@ -253,7 +296,13 @@ async function dirWritable(dir) {
|
|
|
253
296
|
}
|
|
254
297
|
function fixtureImageCapability(mode) {
|
|
255
298
|
return mode === 'all-repairable'
|
|
256
|
-
? {
|
|
299
|
+
? {
|
|
300
|
+
codex_app: { available: true },
|
|
301
|
+
auth_readiness: { headless_auto_available: true },
|
|
302
|
+
real_generation_available: true,
|
|
303
|
+
real_output_verified_by_capability_check: false,
|
|
304
|
+
blockers: []
|
|
305
|
+
}
|
|
257
306
|
: { codex_app: { available: false }, auth_readiness: { headless_auto_available: false }, blockers: ['fixture_manual_required'] };
|
|
258
307
|
}
|
|
259
308
|
function fixtureNativeFeatureMatrix(mode) {
|
|
@@ -2,31 +2,36 @@ import path from 'node:path';
|
|
|
2
2
|
import { findCodexBinary } from '../codex-adapter.js';
|
|
3
3
|
import { detectCodex0138Capability } from '../codex-control/codex-0138-capability.js';
|
|
4
4
|
import { nowIso, runProcess, writeJsonAtomic } from '../fsx.js';
|
|
5
|
-
|
|
5
|
+
import { redactSecrets, redactString } from '../secret-redaction.js';
|
|
6
|
+
export async function runCodexPluginListJson(codexBin) {
|
|
6
7
|
if (process.env.SKS_CODEX_PLUGIN_JSON_FAKE === '1')
|
|
7
8
|
return fakePluginList();
|
|
8
|
-
const bin = await findCodexBinary();
|
|
9
|
+
const bin = codexBin === undefined ? await findCodexBinary() : codexBin;
|
|
9
10
|
if (!bin)
|
|
10
11
|
return { plugins: [], blockers: ['codex_cli_missing'] };
|
|
11
12
|
return runCodexJson(bin, ['plugin', 'list', '--json']);
|
|
12
13
|
}
|
|
13
|
-
export async function runCodexPluginDetailJson(pluginId) {
|
|
14
|
+
export async function runCodexPluginDetailJson(pluginId, codexBin) {
|
|
14
15
|
if (process.env.SKS_CODEX_PLUGIN_JSON_FAKE === '1')
|
|
15
16
|
return fakePluginDetail(pluginId);
|
|
16
|
-
const bin = await findCodexBinary();
|
|
17
|
+
const bin = codexBin === undefined ? await findCodexBinary() : codexBin;
|
|
17
18
|
if (!bin)
|
|
18
19
|
return { blockers: ['codex_cli_missing'] };
|
|
19
20
|
return runCodexJson(bin, ['plugin', 'detail', pluginId, '--json']);
|
|
20
21
|
}
|
|
21
|
-
export async function buildCodexPluginInventory() {
|
|
22
|
+
export async function buildCodexPluginInventory(input = {}) {
|
|
22
23
|
const started = Date.now();
|
|
23
24
|
const capability = await detectCodex0138Capability();
|
|
24
|
-
const
|
|
25
|
+
const codexBin = input.codexBin === undefined ? await findCodexBinary() : input.codexBin;
|
|
26
|
+
const listJson = input.listJson === undefined ? await runCodexPluginListJson(codexBin) : input.listJson;
|
|
25
27
|
const summaries = normalizePluginList(listJson);
|
|
26
28
|
const concurrency = Math.max(1, Number(process.env.SKS_CODEX_PLUGIN_DETAIL_CONCURRENCY || 6) || 6);
|
|
29
|
+
const detailJsonSupported = input.detailJsonSupported ?? await codexPluginDetailJsonSupported(codexBin);
|
|
27
30
|
let failed = 0;
|
|
28
31
|
const plugins = await mapWithConcurrency(summaries, concurrency, async (summary) => {
|
|
29
|
-
const detail =
|
|
32
|
+
const detail = detailJsonSupported
|
|
33
|
+
? await runCodexPluginDetailJson(pluginSelector(summary), codexBin).catch((err) => ({ error: err?.message || String(err) }))
|
|
34
|
+
: {};
|
|
30
35
|
if (detail?.error || normalizeList(detail?.blockers).length > 0)
|
|
31
36
|
failed += 1;
|
|
32
37
|
return normalizePlugin(summary, detail);
|
|
@@ -36,18 +41,19 @@ export async function buildCodexPluginInventory() {
|
|
|
36
41
|
...normalizeList(listJson?.blockers),
|
|
37
42
|
...(process.env.SKS_CODEX_PLUGIN_JSON_FAKE_NO_MCP === '1' ? ['fixture_mcp_candidates_disabled'] : [])
|
|
38
43
|
];
|
|
39
|
-
return {
|
|
44
|
+
return redactSecrets({
|
|
40
45
|
schema: 'sks.codex-plugin-inventory.v1',
|
|
41
46
|
generated_at: nowIso(),
|
|
42
47
|
codex_0138_capability: capability,
|
|
43
48
|
fetch_concurrency: concurrency,
|
|
44
|
-
detail_fetch_count: summaries.length,
|
|
49
|
+
detail_fetch_count: detailJsonSupported ? summaries.length : 0,
|
|
45
50
|
detail_fetch_failed_count: failed,
|
|
51
|
+
detail_json_supported: detailJsonSupported,
|
|
46
52
|
duration_ms: Date.now() - started,
|
|
47
53
|
plugins,
|
|
48
|
-
marketplace_available: plugins.some((plugin) => plugin.source === 'marketplace' || plugin.source === 'remote') || Boolean(listJson?.marketplace_available || listJson?.marketplaceAvailable),
|
|
54
|
+
marketplace_available: plugins.some((plugin) => plugin.source === 'marketplace' || plugin.source === 'remote' || plugin.marketplace) || Boolean(listJson?.marketplace_available || listJson?.marketplaceAvailable),
|
|
49
55
|
blockers
|
|
50
|
-
};
|
|
56
|
+
});
|
|
51
57
|
}
|
|
52
58
|
export async function mapWithConcurrency(items, concurrency, fn) {
|
|
53
59
|
const limit = Math.max(1, Math.floor(concurrency || 1));
|
|
@@ -93,39 +99,79 @@ async function runCodexJson(bin, args) {
|
|
|
93
99
|
return text ? JSON.parse(text) : {};
|
|
94
100
|
}
|
|
95
101
|
catch {
|
|
96
|
-
return { raw_text: text, blockers: [`codex_plugin_json_parse_failed:${args.join(' ')}`] };
|
|
102
|
+
return { raw_text: redactString(text), blockers: [`codex_plugin_json_parse_failed:${args.join(' ')}`] };
|
|
97
103
|
}
|
|
98
104
|
}
|
|
99
|
-
function normalizePluginList(value) {
|
|
105
|
+
export function normalizePluginList(value) {
|
|
100
106
|
if (Array.isArray(value))
|
|
101
107
|
return value;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
108
|
+
const rows = [];
|
|
109
|
+
const append = (items, installed = null) => {
|
|
110
|
+
if (!Array.isArray(items))
|
|
111
|
+
return;
|
|
112
|
+
for (const item of items)
|
|
113
|
+
rows.push(installed === null ? item : { ...item, installed: item?.installed ?? installed });
|
|
114
|
+
};
|
|
115
|
+
append(value?.installed, true);
|
|
116
|
+
append(value?.available, false);
|
|
117
|
+
for (const key of ['plugins', 'installed_plugins', 'installedPlugins', 'items'])
|
|
118
|
+
append(value?.[key]);
|
|
119
|
+
const deduped = new Map();
|
|
120
|
+
for (const row of rows) {
|
|
121
|
+
const selector = pluginSelector(row);
|
|
122
|
+
const current = deduped.get(selector);
|
|
123
|
+
if (!current || (row?.installed === true && current?.installed !== true))
|
|
124
|
+
deduped.set(selector, row);
|
|
105
125
|
}
|
|
106
|
-
return [];
|
|
126
|
+
return [...deduped.values()];
|
|
107
127
|
}
|
|
108
128
|
function normalizePlugin(summary, detail) {
|
|
109
129
|
const raw = { summary, detail };
|
|
110
|
-
const id = String(detail?.id || summary?.id || summary?.plugin_id || summary?.name || 'unknown');
|
|
130
|
+
const id = String(detail?.id || detail?.pluginId || summary?.id || summary?.pluginId || summary?.plugin_id || pluginSelector(summary) || summary?.name || 'unknown');
|
|
111
131
|
const name = String(detail?.name || summary?.name || id);
|
|
112
|
-
const
|
|
132
|
+
const marketplace = stringOrNull(detail?.marketplaceName || detail?.marketplace || summary?.marketplaceName || summary?.marketplace);
|
|
133
|
+
const sourceText = sourceValue(detail?.source || detail?.marketplaceSource || summary?.source || summary?.marketplaceSource).toLowerCase();
|
|
113
134
|
const source = sourceText.includes('marketplace') ? 'marketplace'
|
|
114
135
|
: sourceText.includes('remote') ? 'remote'
|
|
115
136
|
: sourceText.includes('local') ? 'local'
|
|
116
137
|
: 'unknown';
|
|
138
|
+
const installed = boolish(detail?.installed ?? summary?.installed, false);
|
|
117
139
|
return {
|
|
118
140
|
id,
|
|
119
141
|
name,
|
|
120
142
|
source,
|
|
121
|
-
|
|
122
|
-
|
|
143
|
+
marketplace,
|
|
144
|
+
version: stringOrNull(detail?.version || summary?.version),
|
|
145
|
+
installed,
|
|
146
|
+
enabled: boolish(detail?.enabled ?? summary?.enabled, installed),
|
|
123
147
|
default_prompts: normalizeList(detail?.default_prompts || detail?.defaultPrompts || detail?.prompts),
|
|
124
148
|
remote_mcp_servers: normalizeMcpServers(detail?.remote_mcp_servers || detail?.remoteMcpServers || detail?.mcp_servers || detail?.mcpServers),
|
|
125
149
|
unavailable_app_templates: normalizeList(detail?.unavailable_app_templates || detail?.unavailableAppTemplates || detail?.app_templates_unavailable),
|
|
126
150
|
raw
|
|
127
151
|
};
|
|
128
152
|
}
|
|
153
|
+
function pluginSelector(value) {
|
|
154
|
+
const explicit = String(value?.pluginId || value?.plugin_id || value?.id || '').trim();
|
|
155
|
+
if (explicit)
|
|
156
|
+
return explicit;
|
|
157
|
+
const name = String(value?.name || '').trim();
|
|
158
|
+
const marketplace = String(value?.marketplaceName || value?.marketplace || '').trim();
|
|
159
|
+
return name && marketplace ? `${name}@${marketplace}` : name;
|
|
160
|
+
}
|
|
161
|
+
function sourceValue(value) {
|
|
162
|
+
if (value && typeof value === 'object') {
|
|
163
|
+
return String(value.source || value.sourceType || value.type || value.path || '');
|
|
164
|
+
}
|
|
165
|
+
return String(value || '');
|
|
166
|
+
}
|
|
167
|
+
async function codexPluginDetailJsonSupported(codexBin) {
|
|
168
|
+
if (process.env.SKS_CODEX_PLUGIN_JSON_FAKE === '1')
|
|
169
|
+
return true;
|
|
170
|
+
if (!codexBin)
|
|
171
|
+
return false;
|
|
172
|
+
const help = await runProcess(codexBin, ['plugin', '--help'], { timeoutMs: 5000, maxOutputBytes: 32 * 1024 }).catch(() => null);
|
|
173
|
+
return help?.code === 0 && /^\s*detail\s+/m.test(`${help.stdout || ''}\n${help.stderr || ''}`);
|
|
174
|
+
}
|
|
129
175
|
function normalizeMcpServers(value) {
|
|
130
176
|
const rows = Array.isArray(value) ? value : value && typeof value === 'object' ? Object.entries(value).map(([name, row]) => ({ name, ...(row || {}) })) : [];
|
|
131
177
|
return rows.map((row, index) => ({
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { findCodexBinary } from '../codex-adapter.js';
|
|
2
|
+
import { nowIso, runProcess } from '../fsx.js';
|
|
3
|
+
import { redactSecrets, redactString } from '../secret-redaction.js';
|
|
4
|
+
import { buildCodexPluginInventory } from './codex-plugin-json.js';
|
|
5
|
+
export const CODEX_PLUGIN_REPAIR_SCHEMA = 'sks.codex-plugin-repair.v1';
|
|
6
|
+
export async function ensureCodexPlugins(input) {
|
|
7
|
+
const pluginIds = [...new Set((input.pluginIds || []).map(String))];
|
|
8
|
+
const invalid = pluginIds.filter((id) => !/^[a-z0-9][a-z0-9._-]*@[a-z0-9][a-z0-9._-]*$/i.test(id));
|
|
9
|
+
if (invalid.length) {
|
|
10
|
+
return report({
|
|
11
|
+
ok: false,
|
|
12
|
+
apply: input.apply === true,
|
|
13
|
+
codexBin: null,
|
|
14
|
+
pluginIds,
|
|
15
|
+
before: null,
|
|
16
|
+
after: null,
|
|
17
|
+
installs: [],
|
|
18
|
+
blockers: invalid.map((id) => `invalid_plugin_selector:${id}`)
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const codexBin = input.codexBin === undefined ? await findCodexBinary() : input.codexBin;
|
|
22
|
+
const inventory = input.inventoryFactory || (() => buildCodexPluginInventory({ codexBin }));
|
|
23
|
+
const before = await inventory().catch((err) => failedInventory(err));
|
|
24
|
+
const missingBefore = pluginIds.filter((id) => !pluginReady(before, id));
|
|
25
|
+
const installs = [];
|
|
26
|
+
if (input.apply === true && codexBin) {
|
|
27
|
+
const run = input.run || (async (bin, args) => runProcess(bin, args, {
|
|
28
|
+
timeoutMs: input.timeoutMs || 30_000,
|
|
29
|
+
maxOutputBytes: 128 * 1024
|
|
30
|
+
}));
|
|
31
|
+
for (const pluginId of missingBefore) {
|
|
32
|
+
const result = await run(codexBin, ['plugin', 'add', pluginId, '--json']).catch((err) => ({
|
|
33
|
+
code: 1,
|
|
34
|
+
stdout: '',
|
|
35
|
+
stderr: messageOf(err)
|
|
36
|
+
}));
|
|
37
|
+
installs.push({
|
|
38
|
+
plugin_id: pluginId,
|
|
39
|
+
attempted: true,
|
|
40
|
+
ok: result.code === 0,
|
|
41
|
+
command: `${codexBin} plugin add ${pluginId} --json`,
|
|
42
|
+
exit_code: result.code,
|
|
43
|
+
stdout_tail: tail(result.stdout),
|
|
44
|
+
stderr_tail: tail(result.stderr)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const after = installs.length ? await inventory().catch((err) => failedInventory(err)) : before;
|
|
49
|
+
const missingAfter = pluginIds.filter((id) => !pluginReady(after, id));
|
|
50
|
+
const blockers = [
|
|
51
|
+
...(!codexBin && missingAfter.length ? ['codex_cli_missing'] : []),
|
|
52
|
+
...(input.apply !== true ? missingAfter.map((id) => `codex_plugin_repair_not_applied:${id}`) : []),
|
|
53
|
+
...missingAfter.map((id) => `codex_plugin_not_ready_after_recheck:${id}`),
|
|
54
|
+
...installs.filter((step) => !step.ok).map((step) => `codex_plugin_add_failed:${step.plugin_id}`)
|
|
55
|
+
];
|
|
56
|
+
return report({
|
|
57
|
+
ok: missingAfter.length === 0,
|
|
58
|
+
apply: input.apply === true,
|
|
59
|
+
codexBin,
|
|
60
|
+
pluginIds,
|
|
61
|
+
before,
|
|
62
|
+
after,
|
|
63
|
+
installs,
|
|
64
|
+
blockers: [...new Set(blockers)]
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function report(input) {
|
|
68
|
+
const changed = input.installs.some((step) => step.ok);
|
|
69
|
+
return redactSecrets({
|
|
70
|
+
schema: CODEX_PLUGIN_REPAIR_SCHEMA,
|
|
71
|
+
generated_at: nowIso(),
|
|
72
|
+
ok: input.ok,
|
|
73
|
+
apply: input.apply,
|
|
74
|
+
codex_bin: input.codexBin,
|
|
75
|
+
plugin_ids: input.pluginIds,
|
|
76
|
+
before: input.before,
|
|
77
|
+
after: input.after,
|
|
78
|
+
installs: input.installs,
|
|
79
|
+
changed,
|
|
80
|
+
rechecked_after_install: input.installs.length > 0,
|
|
81
|
+
current_task_tool_manifest_verified: false,
|
|
82
|
+
requires_new_task: changed,
|
|
83
|
+
restart_app_if_stale: changed,
|
|
84
|
+
next_actions: changed
|
|
85
|
+
? [
|
|
86
|
+
'Start a new Codex/Work task so the repaired plugin skills and tools are attached to a fresh task manifest.',
|
|
87
|
+
'If the plugin is still missing in the new task, restart the ChatGPT/Codex desktop app and re-run `sks doctor --fix --repair-native-capabilities --yes`.'
|
|
88
|
+
]
|
|
89
|
+
: [],
|
|
90
|
+
blockers: input.blockers
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function pluginReady(inventory, pluginId) {
|
|
94
|
+
return inventory.plugins.some((plugin) => plugin.id === pluginId && plugin.installed === true && plugin.enabled === true);
|
|
95
|
+
}
|
|
96
|
+
function failedInventory(err) {
|
|
97
|
+
return {
|
|
98
|
+
schema: 'sks.codex-plugin-inventory.v1',
|
|
99
|
+
generated_at: nowIso(),
|
|
100
|
+
codex_0138_capability: null,
|
|
101
|
+
fetch_concurrency: 0,
|
|
102
|
+
detail_fetch_count: 0,
|
|
103
|
+
detail_fetch_failed_count: 0,
|
|
104
|
+
detail_json_supported: false,
|
|
105
|
+
duration_ms: 0,
|
|
106
|
+
plugins: [],
|
|
107
|
+
marketplace_available: false,
|
|
108
|
+
blockers: [`codex_plugin_inventory_failed:${redactString(messageOf(err))}`]
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function tail(value, max = 2000) {
|
|
112
|
+
const text = redactString(String(value || ''));
|
|
113
|
+
return text.length > max ? text.slice(-max) : text;
|
|
114
|
+
}
|
|
115
|
+
function messageOf(err) {
|
|
116
|
+
return err instanceof Error ? err.message : String(err);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=codex-plugin-repair.js.map
|