sneakoscope 7.1.0 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/config/architecture-budgets.v1.json +1 -8
- package/crates/sks-core/Cargo.lock +225 -1
- package/crates/sks-core/Cargo.toml +8 -1
- package/crates/sks-core/src/main.rs +7 -1
- package/crates/sks-core/src/search/files.rs +114 -0
- package/crates/sks-core/src/search/mod.rs +274 -0
- package/crates/sks-core/src/search/text.rs +175 -0
- package/dist/bin/sks-dispatch.js +4 -3
- package/dist/cli/command-manifest-lite.js +177 -6
- package/dist/cli/command-registry.js +42 -8
- package/dist/cli/help.js +30 -0
- package/dist/cli/install-helpers-codex-lb-config.js +9 -6
- package/dist/cli/install-helpers-codex-lb-selftest-chain.js +1 -1
- package/dist/cli/install-helpers-install-support.js +1 -1
- package/dist/cli/install-helpers.js +19 -9
- package/dist/cli/router.js +16 -3
- package/dist/commands/codex-app.js +40 -5
- package/dist/commands/doctor-profile.js +78 -0
- package/dist/commands/doctor.js +29 -69
- package/dist/commands/search.js +4 -0
- package/dist/config/skills-manifest.json +53 -60
- package/dist/core/agent-bridge/agent-manifest.js +22 -26
- package/dist/core/agent-bridge/host-capability-policy.js +109 -8
- package/dist/core/agent-bridge/host-capability-runtime.js +178 -50
- package/dist/core/agent-guidance/directive-registry.js +123 -0
- package/dist/core/agents/agent-effort-policy.js +45 -6
- package/dist/core/agents/agent-worker-pipeline.js +1 -3
- package/dist/core/agents/native-worker-backend-router.js +43 -19
- package/dist/core/auto-review.js +1 -3
- package/dist/core/code-structure.js +282 -19
- package/dist/core/codex/codex-config-guard.js +14 -4
- package/dist/core/codex/codex-config-toml.js +1 -3
- package/dist/core/codex-app/codex-agent-role-sync.js +1 -3
- package/dist/core/codex-app/codex-app-fast-ui-repair.js +14 -1
- package/dist/core/codex-app/codex-app-types.js +2 -3
- package/dist/core/codex-app/codex-desktop-routing-ownership.js +91 -0
- package/dist/core/codex-app/codex-hook-approval-probe.js +1 -3
- package/dist/core/codex-app/codex-hook-lifecycle.js +1 -3
- package/dist/core/codex-app/codex-init-deep.js +22 -10
- package/dist/core/codex-app/codex-model-catalog.js +384 -0
- package/dist/core/codex-app/codex-models-cache.js +160 -0
- package/dist/core/codex-app/desktop-routing-snapshot.js +233 -0
- package/dist/core/codex-app/glm-profile-installer.js +1 -3
- package/dist/core/codex-app/mcp-manager.js +1 -3
- package/dist/core/codex-app/menubar/constants.js +3 -0
- package/dist/core/codex-app/menubar/installer.js +11 -1
- package/dist/core/codex-app/multi-provider-router-support.js +202 -0
- package/dist/core/codex-app/multi-provider-router.js +379 -0
- package/dist/core/codex-app/openrouter-activate.js +189 -26
- package/dist/core/codex-app/openrouter-base-instructions.js +1 -0
- package/dist/core/codex-app/openrouter-model-catalog.js +217 -0
- package/dist/core/codex-app/role-model-catalog-priority.js +61 -0
- package/dist/core/codex-app.js +30 -6
- package/dist/core/codex-compat/codex-hook-semantic-validator.js +1 -3
- package/dist/core/codex-control/codex-app-server-v2-client.js +39 -2
- package/dist/core/codex-lb/codex-lb-env.js +1 -3
- package/dist/core/codex-lb/codex-lb-tool-catalog.js +6 -1
- package/dist/core/codex-native/codex-native-feature-broker.js +2 -6
- package/dist/core/codex-native/codex-native-interop-policy.js +1 -3
- package/dist/core/codex-native/codex-native-reference-cache.js +1 -3
- package/dist/core/codex-native/codex-native-reference-source.js +1 -3
- package/dist/core/codex-native/codex-native-repair-transaction.js +1 -3
- package/dist/core/codex-native/core-skill-manifest.js +3 -2
- package/dist/core/codex-native/native-capability-repair-matrix.js +1 -3
- package/dist/core/codex-plugins/codex-plugin-repair.js +1 -3
- package/dist/core/codex-runtime/codex-desktop-config-policy.js +4 -4
- package/dist/core/commands/agent-bridge-command.js +24 -3
- package/dist/core/commands/image-ux-review-command.js +5 -11
- package/dist/core/commands/menubar-command.js +1 -1
- package/dist/core/commands/naruto-command.js +40 -13
- package/dist/core/commands/pipeline-command.js +5 -2
- package/dist/core/commands/release-command.js +63 -1
- package/dist/core/commands/remote-command.js +18 -0
- package/dist/core/commands/search-command.js +151 -0
- package/dist/core/commands/telegram-command.js +251 -108
- package/dist/core/commands/uninstall-command.js +1 -1
- package/dist/core/config/secret-preservation.js +1 -3
- package/dist/core/context7-client.js +2 -1
- package/dist/core/db-review.js +704 -0
- package/dist/core/db-safety.js +17 -23
- package/dist/core/doctor/browser-use-repair.js +1 -3
- package/dist/core/doctor/codex-startup-config-repair.js +1 -3
- package/dist/core/doctor/computer-use-repair.js +1 -3
- package/dist/core/doctor/context7-mcp-repair.js +1 -3
- package/dist/core/doctor/current-project-guidance.js +1 -3
- package/dist/core/doctor/doctor-codex-startup-repair.js +1 -3
- package/dist/core/doctor/doctor-dirty-planner.js +2 -2
- package/dist/core/doctor/doctor-native-capability-repair.js +1 -3
- package/dist/core/doctor/doctor-transaction.js +1 -3
- package/dist/core/doctor/imagegen-repair.js +1 -3
- package/dist/core/doctor/legacy-global-hook-cleanup.js +1 -3
- package/dist/core/doctor/mcp-transport-collision-repair.js +1 -3
- package/dist/core/doctor/retired-managed-residue-private.js +1 -3
- package/dist/core/doctor/supabase-mcp-repair.js +1 -3
- package/dist/core/engineering-sanity-review.js +186 -0
- package/dist/core/errors/message.js +3 -0
- package/dist/core/evidence/evidence-schema.js +1 -3
- package/dist/core/feature-fixtures.js +1 -0
- package/dist/core/feature-registry.js +1 -3
- package/dist/core/fsx.js +13 -0
- package/dist/core/git-hygiene/shared-memory-publish.js +1 -3
- package/dist/core/git-hygiene/validators.js +1 -3
- package/dist/core/harness-guard.js +21 -3
- package/dist/core/hooks-runtime/hook-context.js +2 -2
- package/dist/core/image-ux-review/imagegen-adapter.js +52 -56
- package/dist/core/image-ux-review/real-callout-extractor.js +6 -1
- package/dist/core/image-ux-review.js +3 -5
- package/dist/core/imagegen/codex-lb-imagegen-target.js +70 -0
- package/dist/core/imagegen/imagegen-capability.js +11 -11
- package/dist/core/imagegen/imagegen-evidence.js +32 -0
- package/dist/core/init/skills.js +9 -11
- package/dist/core/init.js +4 -6
- package/dist/core/json/records.js +9 -0
- package/dist/core/json-schema-validator.js +1 -3
- package/dist/core/lean-engineering-policy.js +54 -0
- package/dist/core/loops/loop-continuation-enforcer.js +1 -3
- package/dist/core/mad-sks/sql-plane/mcp-executor.js +2 -1
- package/dist/core/mad-sks/sql-plane/policy.js +2 -1
- package/dist/core/managed-assets/managed-assets-manifest.js +4 -3
- package/dist/core/mcp-config/codex-cli-adapter.js +1 -3
- package/dist/core/mcp-config/config-reader.js +2 -3
- package/dist/core/mcp-config/guarded-patch.js +1 -1
- package/dist/core/mcp-config/health-check.js +2 -1
- package/dist/core/mcp-config/mutation.js +1 -1
- package/dist/core/mcp-config/restore.js +1 -1
- package/dist/core/mcp-config/secret-policy.js +1 -3
- package/dist/core/migration/migration-transaction-journal.js +3 -3
- package/dist/core/naruto/naruto-concurrency-governor.js +2 -2
- package/dist/core/perf/import-graph-budget.js +91 -1
- package/dist/core/pipeline/pipeline-plan-writer.js +1 -1
- package/dist/core/pipeline-internals/runtime-core.js +121 -23
- package/dist/core/pipeline-internals/runtime-gates.js +193 -4
- package/dist/core/pipeline.js +1 -1
- package/dist/core/ppt-review/slide-imagegen-review.js +7 -7
- package/dist/core/ppt.js +3 -3
- package/dist/core/product-design-app-server.js +2 -1
- package/dist/core/proof/fake-real-proof-policy.js +1 -3
- package/dist/core/proof/root-cause-policy.js +1 -3
- package/dist/core/proof/validation.js +1 -3
- package/dist/core/provider/model-router.js +4 -0
- package/dist/core/provider/provider-context.js +1 -3
- package/dist/core/providers/openrouter/openrouter-account.js +1 -3
- package/dist/core/quality/helper-dedup.js +0 -0
- package/dist/core/recallpulse.js +1 -1
- package/dist/core/release/file-ownership.js +26 -17
- package/dist/core/release/macos-menubar-proof.js +59 -1
- package/dist/core/release/main-push-guard.js +288 -24
- package/dist/core/release/main-push-receipt.js +10 -45
- package/dist/core/release/package-size-budget.js +1 -1
- package/dist/core/release/release-gate-contract.js +2 -0
- package/dist/core/release/release-pack-receipt.js +1 -1
- package/dist/core/release/release-proof-io.js +33 -0
- package/dist/core/release/release-upgrade-baseline.js +9 -0
- package/dist/core/release/runtime-script-pack-closure.js +153 -4
- package/dist/core/release/stage-publish.js +194 -0
- package/dist/core/remote/index.js +2 -0
- package/dist/core/remote/local-worker-client.js +35 -0
- package/dist/core/remote/machine-registry.js +18 -13
- package/dist/core/remote/owner-proof.js +1 -3
- package/dist/core/remote/protocol.js +1 -3
- package/dist/core/remote/readiness.js +1 -3
- package/dist/core/remote/session-binding.js +153 -0
- package/dist/core/remote/session-index.js +1 -3
- package/dist/core/remote/types.js +1 -0
- package/dist/core/remote/worker.js +228 -14
- package/dist/core/responses-stream.js +151 -0
- package/dist/core/routes/dollar-manifest-lite.js +1 -1
- package/dist/core/routes.js +8 -8
- package/dist/core/rust-accelerator.js +12 -2
- package/dist/core/safety/ssot-guard.js +1 -3
- package/dist/core/search/benchmark.js +358 -0
- package/dist/core/search/cache.js +65 -0
- package/dist/core/search/context.js +144 -0
- package/dist/core/search/doctor.js +74 -0
- package/dist/core/search/files.js +192 -0
- package/dist/core/search/index.js +5 -0
- package/dist/core/search/ipc.js +64 -0
- package/dist/core/search/provider.js +142 -0
- package/dist/core/search/rust-bridge.js +24 -0
- package/dist/core/search/structure.js +230 -0
- package/dist/core/search/symbol.js +272 -0
- package/dist/core/search/text.js +146 -0
- package/dist/core/search/types.js +22 -0
- package/dist/core/search/typescript-ls.js +215 -0
- package/dist/core/search-visibility/discovery.js +1 -3
- package/dist/core/skill-forge.js +1 -1
- package/dist/core/stop-gate/gate-evaluator.js +3 -3
- package/dist/core/stop-gate/stop-gate-check.js +1 -3
- package/dist/core/structured-output-adapter.js +62 -2
- package/dist/core/subagents/agent-catalog.js +56 -43
- package/dist/core/subagents/model-policy.js +17 -7
- package/dist/core/subagents/naruto-proof-projection.js +2 -6
- package/dist/core/subagents/official-subagent-config.js +1 -3
- package/dist/core/subagents/official-subagent-preparation.js +73 -10
- package/dist/core/subagents/official-subagent-prompt.js +85 -18
- package/dist/core/subagents/official-subagent-runner.js +10 -5
- package/dist/core/subagents/role-model-preferences.js +202 -44
- package/dist/core/subagents/subagent-evidence.js +1 -3
- package/dist/core/subagents/thread-budget.js +1 -1
- package/dist/core/subagents/triwiki-attention.js +1 -5
- package/dist/core/telegram/config.js +29 -12
- package/dist/core/telegram/hub.js +8 -2
- package/dist/core/telegram/index.js +2 -0
- package/dist/core/telegram/messages.js +8 -2
- package/dist/core/telegram/runtime-projection.js +8 -5
- package/dist/core/telegram/runtime.js +19 -9
- package/dist/core/telegram/service.js +181 -0
- package/dist/core/telegram/setup.js +220 -0
- package/dist/core/text/regex.js +3 -0
- package/dist/core/text/strings.js +6 -0
- package/dist/core/triwiki-wrongness/image-wrongness.js +1 -3
- package/dist/core/triwiki-wrongness/wrongness-ledger.js +1 -3
- package/dist/core/triwiki-wrongness/wrongness-proof-linker.js +1 -3
- package/dist/core/triwiki-wrongness/wrongness-retrieval.js +1 -3
- package/dist/core/triwiki-wrongness/wrongness-schema.js +1 -3
- package/dist/core/triwiki-wrongness/wrongness-trust-policy.js +1 -3
- package/dist/core/trust-kernel/completion-contract.js +1 -3
- package/dist/core/trust-kernel/route-contract.js +1 -3
- package/dist/core/update/update-migration-state.js +1 -3
- package/dist/core/update-check.js +20 -6
- package/dist/core/verification/diff-quality.js +3 -4
- package/dist/core/verification/impact-scan.js +36 -89
- package/dist/core/verification/mistake-rule-compiler.js +17 -4
- package/dist/core/version-manager.js +3 -20
- package/dist/core/version.js +1 -1
- package/dist/native/sks-menubar/Sources/ControlCenterWindowController.swift +23 -3
- package/dist/native/sks-menubar/Sources/ControlKit.swift +102 -0
- package/dist/native/sks-menubar/Sources/DiagnosticsViewController.swift +23 -11
- package/dist/native/sks-menubar/Sources/MCPServersViewController.swift +7 -3
- package/dist/native/sks-menubar/Sources/OperationCoordinator.swift +17 -1
- package/dist/native/sks-menubar/Sources/OverviewViewController.swift +22 -15
- package/dist/native/sks-menubar/Sources/ProcessClient.swift +15 -5
- package/dist/native/sks-menubar/Sources/ProvidersMultiProvider.swift +324 -0
- package/dist/native/sks-menubar/Sources/ProvidersOpenRouter.swift +154 -214
- package/dist/native/sks-menubar/Sources/ProvidersRoleModels.swift +252 -0
- package/dist/native/sks-menubar/Sources/ProvidersViewController.swift +77 -71
- package/dist/native/sks-menubar/Sources/RemoteTelegramViewController.swift +167 -51
- package/dist/native/sks-menubar/Sources/SettingsViewController.swift +14 -5
- package/dist/native/sks-menubar/Sources/SidebarItem.swift +15 -1
- package/dist/native/sks-menubar/Sources/StatusItemController.swift +2 -2
- package/dist/native/sks-menubar/Sources/UpdatesViewController.swift +16 -12
- package/dist/scripts/agent-guidance-dedup-check.js +23 -0
- package/dist/scripts/agent-message-bus-reader-check.js +1 -1
- package/dist/scripts/all-feature-deep-completion-check.js +1 -1
- package/dist/scripts/appshots-thread-attachment-discovery-check.js +1 -1
- package/dist/scripts/architecture-guard-check.js +1 -2
- package/dist/scripts/certificate-sla-check.js +1 -1
- package/dist/scripts/cli-output-consistency-check.js +1 -1
- package/dist/scripts/codex-0-134-runner-truth-check.js +1 -1
- package/dist/scripts/codex-0138-capability-artifact-check.js +1 -1
- package/dist/scripts/codex-0138-capability-check.js +1 -1
- package/dist/scripts/codex-0138-doctor-check.js +1 -1
- package/dist/scripts/codex-0138-feature-probes-check.js +1 -1
- package/dist/scripts/codex-0144-app-server-v2-check.js +1 -1
- package/dist/scripts/codex-0144-binary-identity-check.js +1 -1
- package/dist/scripts/codex-0144-capability-check.js +1 -1
- package/dist/scripts/codex-0144-core-real-probes-check.js +1 -1
- package/dist/scripts/codex-0144-manifest-check.js +1 -1
- package/dist/scripts/codex-0144-policy-check.js +1 -1
- package/dist/scripts/codex-0144-thread-store-check.js +1 -1
- package/dist/scripts/codex-agent-role-rich-content-check.js +2 -2
- package/dist/scripts/codex-agent-role-sync-check.js +2 -2
- package/dist/scripts/codex-agent-type-routing-check.js +2 -2
- package/dist/scripts/codex-app-execution-profile-check.js +2 -2
- package/dist/scripts/codex-app-handoff-check.js +1 -1
- package/dist/scripts/codex-app-handoff-launch-check.js +1 -1
- package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +1 -1
- package/dist/scripts/codex-lb-fast-ui-preservation-check.js +1 -3
- package/dist/scripts/codex-native-feature-broker-blackbox.js +2 -2
- package/dist/scripts/codex-native-feature-broker-check.js +2 -2
- package/dist/scripts/{sks-3-1-6-directive-check-lib.js → codex-native-gate-lib.js} +5 -5
- package/dist/scripts/codex-native-harness-compat-check.js +2 -2
- package/dist/scripts/codex-native-hook-lifecycle-proof-check.js +2 -2
- package/dist/scripts/codex-plugin-app-template-policy-check.js +1 -1
- package/dist/scripts/codex-sdk-backend-router-check.js +1 -1
- package/dist/scripts/codex-sdk-capability-check.js +1 -1
- package/dist/scripts/context7-evidence-dedupe-check.js +1 -1
- package/dist/scripts/core-skill-card-schema-check.js +1 -1
- package/dist/scripts/core-skill-deployment-snapshot-check.js +1 -1
- package/dist/scripts/core-skill-heldout-validation-check.js +1 -1
- package/dist/scripts/core-skill-no-inference-optimizer-check.js +1 -1
- package/dist/scripts/core-skill-patch-check.js +1 -1
- package/dist/scripts/core-skill-route-runtime-integration-check.js +1 -1
- package/dist/scripts/current-command-surface-check.js +1 -1
- package/dist/scripts/current-surface-update-e2e-check.js +4 -1
- package/dist/scripts/current-upgrade-matrix-check.js +1 -1
- package/dist/scripts/dfix-fixture-check.js +1 -1
- package/dist/scripts/dfix-patch-handoff-check.js +1 -1
- package/dist/scripts/dfix-verification-check.js +1 -1
- package/dist/scripts/dfix-verification-recommendation-check.js +1 -1
- package/dist/scripts/docs-truthfulness-check.js +16 -3
- package/dist/scripts/doctor-codex-app-harness-check.js +2 -2
- package/dist/scripts/evidence-flagship-coverage-check.js +1 -1
- package/dist/scripts/{sks-1-18-gate-lib.js → gate-lib.js} +1 -1
- package/dist/scripts/gate-policy-audit-check.js +4 -1
- package/dist/scripts/git-worktree-checkpoint-check.js +1 -1
- package/dist/scripts/git-worktree-cross-rebase-check.js +1 -1
- package/dist/scripts/git-worktree-diff-envelope-check.js +1 -1
- package/dist/scripts/git-worktree-dirty-lock-check.js +1 -1
- package/dist/scripts/git-worktree-dirty-main-detection-check.js +1 -1
- package/dist/scripts/git-worktree-integration-primary-check.js +1 -1
- package/dist/scripts/git-worktree-manifest-append-check.js +1 -1
- package/dist/scripts/git-worktree-untracked-diff-check.js +1 -1
- package/dist/scripts/harness-benchmark-check.js +1 -1
- package/dist/scripts/helper-dedup-check.js +62 -0
- package/dist/scripts/hook-latency-budget-check.js +1 -1
- package/dist/scripts/image-artifact-path-contract-check.js +1 -1
- package/dist/scripts/imagegen-real-smoke-check.js +2 -5
- package/dist/scripts/installed-package-smoke-check.js +1 -1
- package/dist/scripts/legacy-gate-inventory-check.js +1 -1
- package/dist/scripts/legacy-gate-purge-check.js +1 -1
- package/dist/scripts/legacy-strong-inventory-check.js +1 -1
- package/dist/scripts/lib/codex-sdk-gate-lib.js +1 -1
- package/dist/scripts/mad-sks-launch-sql-plane-boundary-check.js +1 -1
- package/dist/scripts/mad-sks-sql-plane-capability-check.js +1 -1
- package/dist/scripts/mad-sks-sql-plane-lifecycle-hook-decision-check.js +1 -1
- package/dist/scripts/mad-sks-sql-plane-result-lifecycle-check.js +1 -1
- package/dist/scripts/managed-config-merge-check.js +1 -1
- package/dist/scripts/mcp-plugin-inventory-check.js +1 -1
- package/dist/scripts/model-call-concurrency-check.js +1 -1
- package/dist/scripts/mutation-callsite-coverage-check.js +1 -1
- package/dist/scripts/naruto-ssot-gate-aliases-check.js +1 -1
- package/dist/scripts/naruto-ssot-pipeline-default-check.js +1 -1
- package/dist/scripts/naruto-ssot-route-normalization-check.js +1 -1
- package/dist/scripts/naruto-ssot-routing-check.js +1 -1
- package/dist/scripts/naruto-worktree-coding-blackbox.js +1 -1
- package/dist/scripts/native-capability-repair-matrix-check.js +1 -1
- package/dist/scripts/native-image-generation-repair-check.js +1 -1
- package/dist/scripts/official-subagent-workflow-check.js +3 -3
- package/dist/scripts/package-published-contract-check.js +37 -4
- package/dist/scripts/packlist-performance-check.js +17 -1
- package/dist/scripts/pipeline-codex-native-doctor-mad-routing-real-blackbox.js +1 -3
- package/dist/scripts/ppt-real-export-adapter-check.js +1 -1
- package/dist/scripts/ppt-real-imagegen-wiring-check.js +1 -1
- package/dist/scripts/ppt-reexport-rereview-check.js +1 -1
- package/dist/scripts/prepublish-fast-check.js +1 -1
- package/dist/scripts/probe-memoization-check.js +2 -2
- package/dist/scripts/prompt-placeholder-guard-check.js +1 -1
- package/dist/scripts/qa-loop-app-handoff-capability-check.js +1 -1
- package/dist/scripts/qa-loop-app-handoff-check.js +1 -1
- package/dist/scripts/qa-loop-app-handoff-cli-check.js +1 -1
- package/dist/scripts/qa-loop-app-handoff-confirmation-check.js +1 -1
- package/dist/scripts/qa-loop-app-handoff-gate-lifecycle-check.js +1 -1
- package/dist/scripts/qa-loop-app-handoff-launch-check.js +1 -1
- package/dist/scripts/qa-loop-app-handoff-status-lifecycle-check.js +1 -1
- package/dist/scripts/qa-loop-budget-policy-check.js +1 -1
- package/dist/scripts/qa-loop-effort-escalation-check.js +1 -1
- package/dist/scripts/qa-loop-execution-profile-routing-check.js +2 -2
- package/dist/scripts/qa-loop-image-path-exposure-check.js +1 -1
- package/dist/scripts/qa-loop-image-path-prompt-injection-check.js +1 -1
- package/dist/scripts/{sks-1-12-real-execution-check-lib.js → real-execution-check-lib.js} +1 -1
- package/dist/scripts/release-affected-selector-check.js +1 -1
- package/dist/scripts/release-aggressive-resource-governor-check.js +1 -1
- package/dist/scripts/release-cache-glob-hashing-check.js +1 -1
- package/dist/scripts/release-cache-input-classifier-check.js +1 -1
- package/dist/scripts/release-cache-neutralization-report-check.js +1 -1
- package/dist/scripts/release-cache-version-neutral-fixture-check.js +1 -1
- package/dist/scripts/release-dynamic-presets-check.js +2 -2
- package/dist/scripts/release-full-parallelism-blackbox.js +1 -1
- package/dist/scripts/release-gate-batch-runner-check.js +1 -1
- package/dist/scripts/release-gate-budget-check.js +1 -1
- package/dist/scripts/release-gate-dag-runner-check.js +1 -1
- package/dist/scripts/release-latency-slo-check.js +1 -1
- package/dist/scripts/release-metadata-check.js +256 -2
- package/dist/scripts/release-parallel-speed-budget-check.js +1 -1
- package/dist/scripts/release-proof-truth-check.js +1 -1
- package/dist/scripts/release-provenance-check.js +4 -2
- package/dist/scripts/release-runtime-truth-matrix-check.js +1 -1
- package/dist/scripts/research-blueprint-densifier-check.js +1 -1
- package/dist/scripts/research-claim-builder-check.js +1 -1
- package/dist/scripts/research-complete-package-fixture-check.js +1 -1
- package/dist/scripts/research-execution-profile-routing-check.js +2 -2
- package/dist/scripts/research-final-reviewer-blackbox.js +1 -1
- package/dist/scripts/{sks-3-1-4-directive-check-lib.js → runtime-domain-gate-lib.js} +2 -2
- package/dist/scripts/runtime-proof-summary-check.js +1 -1
- package/dist/scripts/runtime-script-pack-closure-check.js +7 -1
- package/dist/scripts/scheduler-batch-dispatch-check.js +1 -1
- package/dist/scripts/scheduler-parallel-proof-consistency-check.js +1 -1
- package/dist/scripts/scheduler-utilization-integral-check.js +1 -1
- package/dist/scripts/search-visibility-gate-lib.js +1 -1
- package/dist/scripts/secret-preservation-check.js +1 -1
- package/dist/scripts/seo-geo-geo-disambiguation-check.js +1 -1
- package/dist/scripts/seo-geo-skill-rich-content-check.js +1 -1
- package/dist/scripts/side-effect-runtime-report-check.js +1 -1
- package/dist/scripts/{sks-3-1-8-check-lib.js → skill-fixture-check-lib.js} +1 -1
- package/dist/scripts/skill-name-canonicalizer-check.js +1 -1
- package/dist/scripts/skills-manifest-continuity-check.js +1 -1
- package/dist/scripts/sks-uninstall-regression-check.js +1 -1
- package/dist/scripts/sksd-daemon-check.js +1 -1
- package/dist/scripts/super-search-provider-interface-check.js +1 -1
- package/dist/scripts/triwiki-cache-key-check.js +1 -1
- package/dist/scripts/triwiki-proof-bank-blackbox.js +2 -2
- package/dist/scripts/triwiki-proof-bank-check.js +1 -1
- package/dist/scripts/triwiki-proof-card-check.js +1 -1
- package/dist/scripts/type-surface-codex-app-check.js +2 -2
- package/dist/scripts/{sks-3-1-5-directive-check-lib.js → typed-routing-gate-lib.js} +2 -2
- package/dist/scripts/ultra-router-auto-router-check.js +1 -1
- package/dist/scripts/ux-review-extract-wires-real-extractor-check.js +1 -1
- package/dist/scripts/ux-review-patch-diff-recheck-check.js +1 -1
- package/dist/scripts/ux-review-run-wires-imagegen-check.js +9 -2
- package/package.json +5 -7
- package/release-gates.v2.json +66 -11
- package/runtime-required-scripts.json +138 -14
- package/config/bench-baseline.json +0 -7
- package/dist/core/codex-app/sks-menubar.js +0 -1
- package/dist/core/release/release-closure-contract.js +0 -30
- package/dist/core/release/release-closure-helpers.js +0 -293
- package/dist/core/release/release-closure-validation.js +0 -284
- package/dist/core/release/release-closure.js +0 -163
- package/dist/scripts/build-dist.js +0 -124
- package/dist/scripts/build-once-runner-check.js +0 -6
- package/dist/scripts/canonical-test-runner.js +0 -234
- package/dist/scripts/changelog-check.js +0 -45
- package/dist/scripts/check-architecture.js +0 -295
- package/dist/scripts/check-cli-entrypoint.js +0 -41
- package/dist/scripts/check-command-module-budget.js +0 -77
- package/dist/scripts/check-feature-quality.js +0 -51
- package/dist/scripts/check-legacy-free.js +0 -64
- package/dist/scripts/check-pipeline-budget.js +0 -49
- package/dist/scripts/check-pipeline-runtime.js +0 -16
- package/dist/scripts/check-publish-tag.js +0 -56
- package/dist/scripts/check-route-modularity.js +0 -72
- package/dist/scripts/codex-0140-capability-check.js +0 -14
- package/dist/scripts/codex-0140-feature-probes-check.js +0 -23
- package/dist/scripts/codex-permission-profiles-check.js +0 -34
- package/dist/scripts/codex-project-config-policy-splitter-check.js +0 -49
- package/dist/scripts/competitor-scorecard-check.js +0 -24
- package/dist/scripts/core-skill-no-drift-check.js +0 -23
- package/dist/scripts/db-route-materialization-check.js +0 -32
- package/dist/scripts/doctor-context7-mcp-repair-blackbox.js +0 -15
- package/dist/scripts/doctor-fastpath-check.js +0 -25
- package/dist/scripts/doctor-fix-production-blackbox.js +0 -35
- package/dist/scripts/doctor-idempotence-check.js +0 -6
- package/dist/scripts/doctor-ops-semantics-check.js +0 -83
- package/dist/scripts/doctor-startup-config-repair-blackbox.js +0 -18
- package/dist/scripts/doctor-supabase-mcp-repair-blackbox.js +0 -13
- package/dist/scripts/ensure-bin-executable.js +0 -16
- package/dist/scripts/fsx-hotpath-check.js +0 -9
- package/dist/scripts/high-risk-contracts-check.js +0 -183
- package/dist/scripts/hook-latency-quantum-check.js +0 -120
- package/dist/scripts/import-graph-budget-check.js +0 -9
- package/dist/scripts/mcp-tool-naming-parity-check.js +0 -14
- package/dist/scripts/naruto-codex-e2e-check.js +0 -105
- package/dist/scripts/naruto-write-e2e-check.js +0 -31
- package/dist/scripts/native-capability-postcheck-check.js +0 -16
- package/dist/scripts/ops-diagnostics-bundle-check.js +0 -11
- package/dist/scripts/parallel-production-smoke-check.js +0 -20
- package/dist/scripts/perf-budget-check.js +0 -12
- package/dist/scripts/project-skill-dedupe-blackbox.js +0 -62
- package/dist/scripts/release-dag-full-coverage-check.js +0 -98
- package/dist/scripts/release-dist-freshness-check.js +0 -6
- package/dist/scripts/release-file-ownership-check.js +0 -35
- package/dist/scripts/release-gate-script-parity-check.js +0 -148
- package/dist/scripts/release-macos-menubar-proof.js +0 -167
- package/dist/scripts/release-main-push-guard.js +0 -37
- package/dist/scripts/release-main-push-receipt.js +0 -43
- package/dist/scripts/release-metadata-1-19-check.js +0 -257
- package/dist/scripts/release-version-truth-check.js +0 -138
- package/dist/scripts/retention-apply-smoke-check.js +0 -19
- package/dist/scripts/retention-budget-check.js +0 -6
- package/dist/scripts/retention-dry-run-check.js +0 -8
- package/dist/scripts/rollback-recovery-smoke-check.js +0 -70
- package/dist/scripts/route-intent-regression-check.js +0 -42
- package/dist/scripts/runtime-current-terminal-check.js +0 -108
- package/dist/scripts/runtime-dist-parity-check.js +0 -76
- package/dist/scripts/runtime-no-src-mjs-check.js +0 -30
- package/dist/scripts/runtime-ts-rust-boundary-check.js +0 -58
- package/dist/scripts/runtime-ts-source-of-truth-check.js +0 -53
- package/dist/scripts/secret-preservation-guard-check.js +0 -36
- package/dist/scripts/seo-marketing-truthfulness-check.js +0 -98
- package/dist/scripts/seo-metadata-sync-check.js +0 -60
- package/dist/scripts/sizecheck.js +0 -148
- package/dist/scripts/sks-menubar-install-check.js +0 -333
- package/dist/scripts/supabase-secret-preservation-blackbox.js +0 -28
- package/dist/scripts/super-search-live-smoke-check.js +0 -115
- package/dist/scripts/super-search-local-http-smoke-check.js +0 -16
- package/dist/scripts/super-search-offline-contract-check.js +0 -43
- package/dist/scripts/update-fastpath-check.js +0 -28
- package/dist/scripts/update-preserves-supabase-keys-blackbox.js +0 -26
- package/dist/scripts/upgrade-migration-matrix-check.js +0 -351
- package/dist/scripts/write-build-manifest.js +0 -70
- package/dist/scripts/zellij-capability-check.js +0 -13
- package/dist/scripts/zellij-developer-controls-check.js +0 -16
- package/dist/scripts/zellij-doctor-readiness-check.js +0 -49
- package/dist/scripts/zellij-dynamic-pane-lifecycle-check.js +0 -19
- package/dist/scripts/zellij-fake-adapter-check.js +0 -31
- package/dist/scripts/zellij-first-slot-down-stack-check.js +0 -20
- package/dist/scripts/zellij-first-slot-down-stack-real-check.js +0 -348
- package/dist/scripts/zellij-homebrew-policy-check.js +0 -3
- package/dist/scripts/zellij-initial-main-only-blackbox.js +0 -21
- package/dist/scripts/zellij-lane-renderer-check.js +0 -78
- package/dist/scripts/zellij-launch-command-truth-check.js +0 -62
- package/dist/scripts/zellij-layout-valid-check.js +0 -120
- package/dist/scripts/zellij-pane-creation-lock-metrics-check.js +0 -10
- package/dist/scripts/zellij-pane-lock-concurrency-blackbox.js +0 -78
- package/dist/scripts/zellij-pane-lock-does-not-block-worker-check.js +0 -12
- package/dist/scripts/zellij-pane-lock-open-worker-integration-blackbox.js +0 -134
- package/dist/scripts/zellij-qa-app-handoff-status-check.js +0 -7
- package/dist/scripts/zellij-right-column-geometry-proof.js +0 -158
- package/dist/scripts/zellij-right-column-headless-overflow-check.js +0 -20
- package/dist/scripts/zellij-right-column-manager-check.js +0 -24
- package/dist/scripts/zellij-self-heal-check.js +0 -3
- package/dist/scripts/zellij-self-heal-dry-run-check.js +0 -3
- package/dist/scripts/zellij-self-heal-status-contract-check.js +0 -3
- package/dist/scripts/zellij-self-heal-typed-blackbox.js +0 -3
- package/dist/scripts/zellij-slot-column-anchor-check.js +0 -65
- package/dist/scripts/zellij-slot-column-anchor-telemetry-check.js +0 -8
- package/dist/scripts/zellij-slot-only-ui-check.js +0 -29
- package/dist/scripts/zellij-slot-pane-renderer-check.js +0 -149
- package/dist/scripts/zellij-slot-pane-stale-detection-check.js +0 -65
- package/dist/scripts/zellij-slot-pane-telemetry-renderer-check.js +0 -11
- package/dist/scripts/zellij-slot-renderer-proof-semantics-check.js +0 -58
- package/dist/scripts/zellij-slot-telemetry-check.js +0 -38
- package/dist/scripts/zellij-slot-telemetry-incremental-check.js +0 -46
- package/dist/scripts/zellij-slot-telemetry-live-flush-check.js +0 -55
- package/dist/scripts/zellij-slot-telemetry-performance-check.js +0 -32
- package/dist/scripts/zellij-slot-telemetry-real-blackbox.js +0 -19
- package/dist/scripts/zellij-slot-telemetry-renderer-check.js +0 -11
- package/dist/scripts/zellij-slot-telemetry-runtime-check.js +0 -23
- package/dist/scripts/zellij-spawn-on-demand-layout-check.js +0 -45
- package/dist/scripts/zellij-stacked-capability-routing-check.js +0 -9
- package/dist/scripts/zellij-stacked-fallback-integration-blackbox.js +0 -78
- package/dist/scripts/zellij-stacked-version-matrix-check.js +0 -29
- package/dist/scripts/zellij-stacked-version-parser-check.js +0 -19
- package/dist/scripts/zellij-ui-design-check.js +0 -92
- package/dist/scripts/zellij-update-missing-self-heal-check.js +0 -3
- package/dist/scripts/zellij-update-prompt-matrix-check.js +0 -16
- package/dist/scripts/zellij-update-prompt-mode-check.js +0 -18
- package/dist/scripts/zellij-update-prompt-safety-check.js +0 -8
- package/dist/scripts/zellij-worker-pane-manager-check.js +0 -108
- package/dist/scripts/zellij-worker-pane-manager-single-owner-check.js +0 -47
- package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +0 -199
- /package/dist/scripts/{sks-1-11-gate-lib.js → sks-cli-gate-lib.js} +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { COMMAND_MANIFEST_BY_NAME, commandManifestNames } from './command-manifest-lite.js';
|
|
1
2
|
const SAFE_COMMAND_CONTRACT = {
|
|
2
3
|
risk: 'R2',
|
|
3
4
|
latency: 'normal',
|
|
@@ -26,6 +27,10 @@ function pickRunner(mod) {
|
|
|
26
27
|
}
|
|
27
28
|
return null;
|
|
28
29
|
}
|
|
30
|
+
function usageOf(mod) {
|
|
31
|
+
const candidate = mod?.usage;
|
|
32
|
+
return typeof candidate === 'function' ? { usage: candidate } : {};
|
|
33
|
+
}
|
|
29
34
|
function normalizeCommandModule(moduleValue, _packageRequiredFile) {
|
|
30
35
|
if (!moduleValue || typeof moduleValue !== 'object')
|
|
31
36
|
throw new Error('Invalid command module');
|
|
@@ -35,6 +40,7 @@ function normalizeCommandModule(moduleValue, _packageRequiredFile) {
|
|
|
35
40
|
throw new Error('Command module must export run/main/default callable');
|
|
36
41
|
return {
|
|
37
42
|
run: async (command, args) => runner(command, args),
|
|
43
|
+
...usageOf(rec),
|
|
38
44
|
};
|
|
39
45
|
}
|
|
40
46
|
export function directCommand(loader, packageRequiredFile) {
|
|
@@ -44,21 +50,21 @@ export function argsCommand(loader, exportName, packageRequiredFile) {
|
|
|
44
50
|
return async () => {
|
|
45
51
|
const mod = await loader();
|
|
46
52
|
const fn = functionExport(mod, exportName);
|
|
47
|
-
return { run: (_command, args) => fn(args) };
|
|
53
|
+
return { run: (_command, args) => fn(args), ...usageOf(mod) };
|
|
48
54
|
};
|
|
49
55
|
}
|
|
50
56
|
function noArgsCommand(loader, exportName, packageRequiredFile) {
|
|
51
57
|
return async () => {
|
|
52
58
|
const mod = await loader();
|
|
53
59
|
const fn = functionExport(mod, exportName);
|
|
54
|
-
return { run: () => fn() };
|
|
60
|
+
return { run: () => fn(), ...usageOf(mod) };
|
|
55
61
|
};
|
|
56
62
|
}
|
|
57
63
|
function commandArgsCommand(loader, exportName, packageRequiredFile) {
|
|
58
64
|
return async () => {
|
|
59
65
|
const mod = await loader();
|
|
60
66
|
const fn = functionExport(mod, exportName);
|
|
61
|
-
return { run: (command, args) => fn(command, args) };
|
|
67
|
+
return { run: (command, args) => fn(command, args), ...usageOf(mod) };
|
|
62
68
|
};
|
|
63
69
|
}
|
|
64
70
|
function subcommand(loader, exportName, packageRequiredFile, fallbackSubcommand) {
|
|
@@ -70,6 +76,7 @@ function subcommand(loader, exportName, packageRequiredFile, fallbackSubcommand)
|
|
|
70
76
|
const [subcommandName = fallbackSubcommand, ...rest] = args;
|
|
71
77
|
return fn(subcommandName ?? '', rest);
|
|
72
78
|
},
|
|
79
|
+
...usageOf(mod),
|
|
73
80
|
};
|
|
74
81
|
};
|
|
75
82
|
}
|
|
@@ -109,6 +116,31 @@ function applyCommandContractOverrides(commands, overrides) {
|
|
|
109
116
|
}
|
|
110
117
|
return commands;
|
|
111
118
|
}
|
|
119
|
+
function applyCommandManifestContract(commands) {
|
|
120
|
+
const definitionNames = Object.keys(commands).sort();
|
|
121
|
+
const manifestNames = commandManifestNames();
|
|
122
|
+
if (JSON.stringify(definitionNames) !== JSON.stringify(manifestNames)) {
|
|
123
|
+
throw new Error(`Command manifest/registry mismatch: registry=${definitionNames.join(',')} manifest=${manifestNames.join(',')}`);
|
|
124
|
+
}
|
|
125
|
+
for (const name of manifestNames) {
|
|
126
|
+
const command = commands[name];
|
|
127
|
+
const manifest = COMMAND_MANIFEST_BY_NAME[name];
|
|
128
|
+
if (!command || !manifest)
|
|
129
|
+
throw new Error(`Missing command manifest metadata for ${name}`);
|
|
130
|
+
Object.assign(command, {
|
|
131
|
+
maturity: manifest.maturity,
|
|
132
|
+
summary: manifest.summary,
|
|
133
|
+
risk: manifest.risk,
|
|
134
|
+
latency: manifest.latency,
|
|
135
|
+
supportsJson: manifest.supportsJson,
|
|
136
|
+
remoteAllowed: manifest.remoteAllowed,
|
|
137
|
+
telegramAllowed: manifest.telegramAllowed,
|
|
138
|
+
inputProfile: manifest.inputProfile,
|
|
139
|
+
requiredCapabilities: [...manifest.requiredCapabilities]
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return commands;
|
|
143
|
+
}
|
|
112
144
|
const COMMAND_DEFINITIONS = {
|
|
113
145
|
help: readOnly(entry('stable', 'Show SKS help', 'dist/commands/help.js', directCommand(() => import('../commands/help.js'), 'dist/commands/help.js'))),
|
|
114
146
|
version: readOnly(entry('stable', 'Show SKS version', 'dist/commands/version.js', directCommand(() => import('../commands/version.js'), 'dist/commands/version.js'))),
|
|
@@ -150,12 +182,12 @@ const COMMAND_DEFINITIONS = {
|
|
|
150
182
|
rollback: activeRouteDiagnostic(entry('beta', 'List or apply managed-path rollback actions', 'dist/core/commands/rollback-command.js', argsCommand(() => import('../core/commands/rollback-command.js'), 'rollbackCommand', 'dist/core/commands/rollback-command.js'))),
|
|
151
183
|
postinstall: skipMigrationGate(entry('stable', 'Run postinstall bootstrap', 'dist/core/commands/basic-cli.js', basicArgs('postinstallCommand'))),
|
|
152
184
|
codex: skipMigrationGate(entry('beta', 'Check Codex CLI compatibility and vendored hook schemas', 'dist/commands/codex.js', directCommand(() => import('../commands/codex.js'), 'dist/commands/codex.js'))),
|
|
153
|
-
'codex-app': entry('beta', 'Check Codex App readiness', 'dist/commands/codex-app.js', directCommand(() => import('../commands/codex-app.js'), 'dist/commands/codex-app.js')),
|
|
185
|
+
'codex-app': skipMigrationGate(entry('beta', 'Check Codex App readiness', 'dist/commands/codex-app.js', directCommand(() => import('../commands/codex-app.js'), 'dist/commands/codex-app.js'))),
|
|
154
186
|
'codex-native': entry('beta', 'Inspect Codex Native broker and routing readiness', 'dist/commands/codex-native.js', directCommand(() => import('../commands/codex-native.js'), 'dist/commands/codex-native.js')),
|
|
155
|
-
'codex-lb': entry('beta', 'Inspect codex-lb status and circuit health', 'dist/commands/codex-lb.js', directCommand(() => import('../commands/codex-lb.js'), 'dist/commands/codex-lb.js')),
|
|
187
|
+
'codex-lb': skipMigrationGate(entry('beta', 'Inspect codex-lb status and circuit health', 'dist/commands/codex-lb.js', directCommand(() => import('../commands/codex-lb.js'), 'dist/commands/codex-lb.js'))),
|
|
156
188
|
menubar: activeRouteDiagnostic(entry('beta', 'Inspect/install/restart/uninstall SKS menu bar', 'dist/core/commands/menubar-command.js', subcommand(() => import('../core/commands/menubar-command.js'), 'menubarCommand', 'dist/core/commands/menubar-command.js', 'status'))),
|
|
157
189
|
remote: entry('beta', 'Inspect official Remote readiness and run the proof-aware SSH stdio worker', 'dist/core/commands/remote-command.js', argsCommand(() => import('../core/commands/remote-command.js'), 'remoteCommand', 'dist/core/commands/remote-command.js')),
|
|
158
|
-
telegram: entry('beta', '
|
|
190
|
+
telegram: entry('beta', 'Pair and run the private local Codex Telegram Hub', 'dist/core/commands/telegram-command.js', argsCommand(() => import('../core/commands/telegram-command.js'), 'telegramCommand', 'dist/core/commands/telegram-command.js')),
|
|
159
191
|
hooks: skipMigrationGate(entry('beta', 'Explain and inspect Codex hooks', 'dist/commands/hooks.js', directCommand(() => import('../commands/hooks.js'), 'dist/commands/hooks.js'))),
|
|
160
192
|
'zellij-lane': entry('beta', 'Render a Zellij lane frame for SKS sessions', 'dist/commands/zellij-lane.js', directCommand(() => import('../commands/zellij-lane.js'), 'dist/commands/zellij-lane.js')),
|
|
161
193
|
'zellij-slot-pane': entry('beta', 'Render a compact Zellij worker slot pane', 'dist/commands/zellij-slot-pane.js', directCommand(() => import('../commands/zellij-slot-pane.js'), 'dist/commands/zellij-slot-pane.js')),
|
|
@@ -183,6 +215,7 @@ const COMMAND_DEFINITIONS = {
|
|
|
183
215
|
'computer-use': routeStateMutator(entry('beta', 'Record native Mac/non-web Computer Use visual evidence', 'dist/core/commands/computer-use-command.js', commandArgsCommand(() => import('../core/commands/computer-use-command.js'), 'computerUseCommand', 'dist/core/commands/computer-use-command.js')), ['computer-use-gate.json']),
|
|
184
216
|
context7: entry('beta', 'Context7 checks and docs', 'dist/cli/context7-command.js', subcommand(() => import('./context7-command.js'), 'context7Command', 'dist/cli/context7-command.js', 'check')),
|
|
185
217
|
'super-search': entry('beta', 'Run Super-Search provider-independent source intelligence', 'dist/cli/super-search-command.js', subcommand(() => import('./super-search-command.js'), 'superSearchCommand', 'dist/cli/super-search-command.js', 'doctor')),
|
|
218
|
+
search: readOnly(entry('beta', 'Local files/text/structure/symbol/context search engines', 'dist/commands/search.js', subcommand(() => import('../commands/search.js'), 'run', 'dist/commands/search.js', 'status'))),
|
|
186
219
|
recallpulse: entry('labs', 'RecallPulse evidence route', 'dist/commands/recallpulse.js', directCommand(() => import('../commands/recallpulse.js'), 'dist/commands/recallpulse.js')),
|
|
187
220
|
pipeline: activeRouteDiagnostic(entry('beta', 'Inspect pipeline missions', 'dist/commands/pipeline.js', directCommand(() => import('../commands/pipeline.js'), 'dist/commands/pipeline.js'))),
|
|
188
221
|
guard: entry('beta', 'Check harness guard', 'dist/commands/guard.js', directCommand(() => import('../commands/guard.js'), 'dist/commands/guard.js')),
|
|
@@ -192,7 +225,7 @@ const COMMAND_DEFINITIONS = {
|
|
|
192
225
|
aliases: entry('stable', 'Show command aliases', 'dist/core/commands/basic-cli.js', basicNoArgs('aliasesCommand')),
|
|
193
226
|
selftest: entry('stable', 'Run local mock selftest', 'dist/core/commands/basic-cli.js', basicArgs('selftestCommand')),
|
|
194
227
|
goal: entry('beta', 'Print stateless Codex native Goal controls', 'dist/core/commands/goal-command.js', subcommand(() => import('../core/commands/goal-command.js'), 'goalCommand', 'dist/core/commands/goal-command.js')),
|
|
195
|
-
'seo-geo-optimizer': entry('beta', 'Run unified SEO/GEO optimizer audit/plan/apply/verify on the search-visibility kernel', 'dist/core/commands/seo-command.js', argsCommand(() => import('../core/commands/seo-command.js'), 'seoGeoOptimizerCommand', 'dist/core/commands/seo-command.js')),
|
|
228
|
+
'seo-geo-optimizer': entry('beta', 'Run unified SEO/GEO optimizer audit/plan/apply/verify plus research/strategy (--include-marketing) on the search-visibility kernel', 'dist/core/commands/seo-command.js', argsCommand(() => import('../core/commands/seo-command.js'), 'seoGeoOptimizerCommand', 'dist/core/commands/seo-command.js')),
|
|
196
229
|
hook: skipMigrationGate(entry('beta', 'Codex hook entrypoint', 'dist/commands/hook.js', directCommand(() => import('../commands/hook.js'), 'dist/commands/hook.js'))),
|
|
197
230
|
profile: entry('labs', 'Inspect/set profile', 'dist/commands/profile.js', directCommand(() => import('../commands/profile.js'), 'dist/commands/profile.js')),
|
|
198
231
|
hproof: entry('beta', 'Evaluate H-Proof gate', 'dist/commands/hproof.js', directCommand(() => import('../commands/hproof.js'), 'dist/commands/hproof.js')),
|
|
@@ -222,7 +255,7 @@ const COMMAND_DEFINITIONS = {
|
|
|
222
255
|
}),
|
|
223
256
|
'agent-bridge': readOnly(entry('beta', 'Publish the agent-bridge manifest and print host registration snippets for external agent systems', 'dist/core/commands/agent-bridge-command.js', subcommand(() => import('../core/commands/agent-bridge-command.js'), 'agentBridgeCommand', 'dist/core/commands/agent-bridge-command.js', 'setup')))
|
|
224
257
|
};
|
|
225
|
-
|
|
258
|
+
const COMMANDS_WITH_LEGACY_CONTRACT_OVERRIDES = applyCommandContractOverrides(COMMAND_DEFINITIONS, {
|
|
226
259
|
autoresearch: { latency: 'long' },
|
|
227
260
|
bench: { latency: 'long' },
|
|
228
261
|
check: { risk: 'R1', latency: 'long' },
|
|
@@ -294,6 +327,7 @@ export const COMMANDS = applyCommandContractOverrides(COMMAND_DEFINITIONS, {
|
|
|
294
327
|
requiredCapabilities: ['proof.artifacts']
|
|
295
328
|
}
|
|
296
329
|
});
|
|
330
|
+
export const COMMANDS = applyCommandManifestContract(COMMANDS_WITH_LEGACY_CONTRACT_OVERRIDES);
|
|
297
331
|
export const TYPED_COMMANDS = COMMANDS;
|
|
298
332
|
export const LEGACY_COMMAND_ALIASES = {};
|
|
299
333
|
export const COMMAND_ALIASES = {
|
package/dist/cli/help.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function isHelpRequest(args) {
|
|
2
|
+
return args.includes('--help')
|
|
3
|
+
|| args.includes('-h')
|
|
4
|
+
|| String(args[0] || '').toLowerCase() === 'help';
|
|
5
|
+
}
|
|
6
|
+
export function renderManifestHelp(command, entry) {
|
|
7
|
+
if (!entry)
|
|
8
|
+
return `Usage: sks ${command}\n\nNo manifest entry is registered for this command.`;
|
|
9
|
+
const lines = [`Usage: sks ${entry.name} [options]`, '', entry.summary];
|
|
10
|
+
const notes = [];
|
|
11
|
+
if (entry.deprecated)
|
|
12
|
+
notes.push('deprecated — kept only for compatibility');
|
|
13
|
+
if (entry.maturity !== 'stable')
|
|
14
|
+
notes.push(`maturity: ${entry.maturity}`);
|
|
15
|
+
if (entry.readonly)
|
|
16
|
+
notes.push('read-only: does not mutate project or Codex state');
|
|
17
|
+
if (entry.diagnostic)
|
|
18
|
+
notes.push('diagnostic');
|
|
19
|
+
notes.push(`risk: ${entry.risk}`, `latency: ${entry.latency}`);
|
|
20
|
+
lines.push('', ...notes.map((note) => ` ${note}`));
|
|
21
|
+
const flags = [' --help, -h Print this usage without running the command.'];
|
|
22
|
+
if (entry.supportsJson)
|
|
23
|
+
flags.push(' --json Emit the machine-readable result.');
|
|
24
|
+
lines.push('', 'Options:', ...flags);
|
|
25
|
+
lines.push('', 'Run `sks commands` for the full command list.');
|
|
26
|
+
return lines.join('\n');
|
|
27
|
+
}
|
|
28
|
+
export function helpResult(command) {
|
|
29
|
+
return { ok: true, status: 'help', action: 'help', command };
|
|
30
|
+
}
|
|
@@ -6,6 +6,7 @@ import { openRouterSecretPaths, resolveOpenRouterApiKey } from '../core/provider
|
|
|
6
6
|
import { reconcileRetiredSksConfigText } from '../core/auto-review.js';
|
|
7
7
|
import { removeTopLevelTomlKeyIfValue, safeWriteCodexConfigToml, upsertTopLevelTomlString, upsertTomlTable } from '../core/codex-runtime/codex-desktop-config-policy.js';
|
|
8
8
|
import { codexLbConfigPath, normalizeCodexLbBaseUrl } from './install-helpers-codex-lb-shared.js';
|
|
9
|
+
import { escapeRegExp } from '../core/text/regex.js';
|
|
9
10
|
export function upsertCodexLbConfig(text = '', baseUrl, selectDefault = true) {
|
|
10
11
|
let next = selectDefault
|
|
11
12
|
? upsertTopLevelTomlString(text, 'model_provider', 'codex-lb')
|
|
@@ -140,7 +141,11 @@ export async function ensureStoredOpenRouterProviderDuringInstall(opts = {}) {
|
|
|
140
141
|
home,
|
|
141
142
|
env
|
|
142
143
|
});
|
|
143
|
-
const
|
|
144
|
+
const configPath = repair?.config_path || opts.configPath || codexLbConfigPath(home);
|
|
145
|
+
const { ensureOpenRouterModelCatalog } = await import('../core/codex-app/openrouter-model-catalog.js');
|
|
146
|
+
const catalogRepair = await ensureOpenRouterModelCatalog({ configPath, home, env })
|
|
147
|
+
.catch((err) => ({ ok: false, status: 'failed', error: err?.message || String(err) }));
|
|
148
|
+
const ok = repair?.ok !== false && catalogRepair?.ok !== false;
|
|
144
149
|
return {
|
|
145
150
|
schema: 'sks.openrouter-provider-upgrade-repair.v1',
|
|
146
151
|
ok,
|
|
@@ -148,11 +153,12 @@ export async function ensureStoredOpenRouterProviderDuringInstall(opts = {}) {
|
|
|
148
153
|
reason: ok ? 'stored_openrouter_key_provider_reconciled' : 'stored_openrouter_key_provider_repair_failed',
|
|
149
154
|
key_present: true,
|
|
150
155
|
key_source: key.source,
|
|
151
|
-
config_path:
|
|
156
|
+
config_path: configPath,
|
|
152
157
|
provider: GLM_CODEX_CONFIG_PROVIDER_ID,
|
|
153
158
|
blockers: ok ? [] : ['openrouter_provider_repair_failed'],
|
|
154
159
|
warnings: key.warnings,
|
|
155
|
-
repair
|
|
160
|
+
repair,
|
|
161
|
+
model_catalog_repair: catalogRepair
|
|
156
162
|
};
|
|
157
163
|
}
|
|
158
164
|
export function detectCodexLbSetupDrift(state = {}) {
|
|
@@ -263,9 +269,6 @@ export async function sha256Text(value = '') {
|
|
|
263
269
|
const { createHash } = await import('node:crypto');
|
|
264
270
|
return createHash('sha256').update(String(value || '')).digest('hex');
|
|
265
271
|
}
|
|
266
|
-
function escapeRegExp(value) {
|
|
267
|
-
return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
268
|
-
}
|
|
269
272
|
function topLevelTomlString(text = '', key) {
|
|
270
273
|
const topLevel = String(text || '').split(/\n\s*\[/)[0] || '';
|
|
271
274
|
return topLevel.match(new RegExp(`(^|\\n)\\s*${escapeRegExp(key)}\\s*=\\s*"([^"]+)"\\s*(?:#.*)?(?=\\n|$)`))?.[2] || '';
|
|
@@ -97,7 +97,7 @@ export async function runCodexLbLaunchChainSelftest(input) {
|
|
|
97
97
|
const survivingLegacy = legacyStamps.filter((stamp) => codexLbConfig.includes(stamp));
|
|
98
98
|
const stableCapabilityStamps = ['computer_use = true', 'browser_use = true', 'browser_use_external = true', 'image_generation = true', 'in_app_browser = true', 'guardian_approval = true', 'tool_suggest = true', 'plugins = true'];
|
|
99
99
|
const missingStableCapabilities = stableCapabilityStamps.filter((stamp) => !codexLbConfig.includes(stamp));
|
|
100
|
-
if (!codexLbConfig.includes('hooks = true') || hasDeprecatedCodexHooksFeatureFlag(codexLbConfig) ||
|
|
100
|
+
if (!codexLbConfig.includes('hooks = true') || hasDeprecatedCodexHooksFeatureFlag(codexLbConfig) || /(?:^|\n)\s*multi_agent\s*=/.test(codexLbConfig) || !codexLbConfig.includes('fast_mode = true') || !codexLbConfig.includes('apps = true') || survivingLegacy.length || missingStableCapabilities.length || !/\[profiles\.custom\][\s\S]*?model_reasoning_effort = "low"/.test(codexLbConfig) || hasTopLevelCodexModeLock(codexLbConfig))
|
|
101
101
|
throw new Error(`selftest: codex-lb setup did not enforce the current feature-flag contract${survivingLegacy.length ? ` — surviving legacy stamps: ${survivingLegacy.join(', ')}` : ''}${missingStableCapabilities.length ? ` — missing stable capabilities: ${missingStableCapabilities.join(', ')}` : ''}`);
|
|
102
102
|
if (!hasCodexUnstableFeatureWarningSuppression(codexLbConfig))
|
|
103
103
|
throw new Error('selftest: codex-lb setup did not suppress Codex unstable feature warning');
|
|
@@ -13,7 +13,7 @@ import { context7ConfigToml, DOLLAR_SKILL_NAMES, GETDESIGN_REFERENCE, hasContext
|
|
|
13
13
|
import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
|
|
14
14
|
import { reconcileCodexAppUpgradeProcesses } from '../core/codex-app.js';
|
|
15
15
|
import { restartCodexApp } from '../core/codex-app/codex-app-restart.js';
|
|
16
|
-
import { cleanupMacLaunchSecretEnvironment } from '../core/codex-app/
|
|
16
|
+
import { cleanupMacLaunchSecretEnvironment } from '../core/codex-app/menubar/index.js';
|
|
17
17
|
import { recordCodexLbHealthEvent } from '../core/codex-lb-circuit.js';
|
|
18
18
|
import { loadCodexLbEnv, writeCodexLbKeychain, codexLbMetadataPath } from '../core/codex-lb/codex-lb-env.js';
|
|
19
19
|
import { codexLbToolCatalogPath, ensureCodexLbToolCatalog } from '../core/codex-lb/codex-lb-tool-catalog.js';
|
|
@@ -13,7 +13,7 @@ import { context7ConfigToml, DOLLAR_SKILL_NAMES, GETDESIGN_REFERENCE, hasContext
|
|
|
13
13
|
import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
|
|
14
14
|
import { reconcileCodexAppUpgradeProcesses } from '../core/codex-app.js';
|
|
15
15
|
import { restartCodexApp } from '../core/codex-app/codex-app-restart.js';
|
|
16
|
-
import { cleanupMacLaunchSecretEnvironment } from '../core/codex-app/
|
|
16
|
+
import { cleanupMacLaunchSecretEnvironment } from '../core/codex-app/menubar/index.js';
|
|
17
17
|
import { recordCodexLbHealthEvent } from '../core/codex-lb-circuit.js';
|
|
18
18
|
import { loadCodexLbEnv, writeCodexLbKeychain, codexLbMetadataPath } from '../core/codex-lb/codex-lb-env.js';
|
|
19
19
|
import { codexLbToolCatalogPath, ensureCodexLbToolCatalog } from '../core/codex-lb/codex-lb-tool-catalog.js';
|
|
@@ -29,6 +29,7 @@ import { checkCodexLbResponseChain } from './install-helpers-codex-lb-chain.js';
|
|
|
29
29
|
import { CODEX_LB_CANONICAL_FAST_SERVICE_TIER, CODEX_LB_PROVIDER_ENV_KEY, CODEX_LB_PROVIDER_NAME, askPostinstallQuestion, codexAuthChatgptBackupPath, codexAuthPath, codexLbConfigPath, codexLbEnvPath, hasTopLevelCodexLbSelected, normalizeCodexLbBaseUrl, parseCodexLbEnvKey, redactSecretText } from './install-helpers-codex-lb-shared.js';
|
|
30
30
|
import { appliedCodexLbPersistenceModes, captureCodexLbSetupWriteState, codexLbSharedOpenAiRoutingState, detectCodexLbSetupDrift, ensureGlobalCodexAppGlmProfile, ensureStoredOpenRouterProviderDuringInstall, parseCodexLbEnvBaseUrl, parseCodexSharedLoginApiKey, removeCodexLbSharedOpenAiRouting, sha256Text, shellSingleQuote, upsertCodexAppGlmConfig, upsertCodexLbConfig, upsertCodexLbSharedOpenAiRouting } from './install-helpers-codex-lb-config.js';
|
|
31
31
|
import { ensureCodexImagegenDuringInstall, ensureGlobalCodexSkillsDuringInstall, ensureGlobalContext7DuringInstall, ensureGlobalGetdesignSkillDuringInstall, ensureSksCommandDuringInstall } from './install-helpers-install-support.js';
|
|
32
|
+
import { escapeRegExp } from '../core/text/regex.js';
|
|
32
33
|
function packagedSksEntrypoint() {
|
|
33
34
|
return path.join(packageRoot(), 'dist', 'bin', 'sks.js');
|
|
34
35
|
}
|
|
@@ -393,7 +394,14 @@ async function ensureCodexLbToolCatalogSelection(input, opts = {}) {
|
|
|
393
394
|
const selected = hasTopLevelCodexLbSelected(current);
|
|
394
395
|
const canBindCatalog = selected || opts.allowUnselectedCatalogWrite === true;
|
|
395
396
|
const existingCatalogPath = topLevelTomlString(current, 'model_catalog_json');
|
|
396
|
-
|
|
397
|
+
const { isSksManagedCatalogPath, resolveCatalogPath } = await import('../core/codex-app/multi-provider-router-support.js');
|
|
398
|
+
const existingCatalogResolved = existingCatalogPath
|
|
399
|
+
? resolveCatalogPath(existingCatalogPath, { home: input.home, configPath: input.configPath })
|
|
400
|
+
: null;
|
|
401
|
+
const existingCatalogReplaceable = !existingCatalogResolved
|
|
402
|
+
|| (isSksManagedCatalogPath(existingCatalogResolved, { home: input.home })
|
|
403
|
+
&& (selected || opts.willSelectProvider === true));
|
|
404
|
+
if (canBindCatalog && existingCatalogResolved && existingCatalogResolved !== path.resolve(catalogPath) && !existingCatalogReplaceable) {
|
|
397
405
|
return {
|
|
398
406
|
schema: 'sks.codex-lb-tool-catalog-selection.v1',
|
|
399
407
|
ok: false,
|
|
@@ -535,7 +543,7 @@ export async function configureCodexLb(opts = {}) {
|
|
|
535
543
|
}
|
|
536
544
|
process.env.CODEX_LB_BASE_URL = baseUrl;
|
|
537
545
|
process.env.CODEX_LB_API_KEY = apiKey;
|
|
538
|
-
let toolCatalog = await ensureCodexLbToolCatalogSelection({ home, configPath, baseUrl, apiKey }, { ...opts, allowUnselectedCatalogWrite: true });
|
|
546
|
+
let toolCatalog = await ensureCodexLbToolCatalogSelection({ home, configPath, baseUrl, apiKey }, { ...opts, allowUnselectedCatalogWrite: true, willSelectProvider: useDefaultProvider === true });
|
|
539
547
|
if (toolCatalog.config_changed || toolCatalog.status === 'repaired' || toolCatalog.status === 'cached_compatible') {
|
|
540
548
|
appliedActions.push({ type: 'write_model_tool_catalog', target: toolCatalog.path, ok: toolCatalog.ok === true, status: toolCatalog.status });
|
|
541
549
|
}
|
|
@@ -948,9 +956,14 @@ export async function repairCodexLbAuth(opts = {}) {
|
|
|
948
956
|
status = await codexLbStatus({ ...opts, probeToolOutputRecovery: true });
|
|
949
957
|
}
|
|
950
958
|
}
|
|
951
|
-
|
|
959
|
+
const repairCurrentProvider = topLevelTomlString(currentConfig, 'model_provider');
|
|
960
|
+
const repairPreserveThirdParty = Boolean(repairCurrentProvider)
|
|
961
|
+
&& repairCurrentProvider !== 'codex-lb'
|
|
962
|
+
&& opts.forceCodexLbApiKeyAuth !== true
|
|
963
|
+
&& opts.authMode !== 'codex-lb';
|
|
964
|
+
if (status.env_key_configured && status.base_url && (!status.provider_contract_ok || (!status.selected && !repairPreserveThirdParty) || legacyAuthMigrated || hasTopLevelCodexModeLock(currentConfig) || (opts.forceCodexLbApiKeyAuth === true && !status.ok))) {
|
|
952
965
|
await ensureDir(path.dirname(status.config_path));
|
|
953
|
-
let next = upsertCodexLbConfig(currentConfig, status.base_url);
|
|
966
|
+
let next = upsertCodexLbConfig(currentConfig, status.base_url, !repairPreserveThirdParty);
|
|
954
967
|
next = normalizeCodexFastModeUiConfig(next, {
|
|
955
968
|
forceFastMode: opts.forceFastMode === true || opts.forceCodexLbApiKeyAuth === true
|
|
956
969
|
});
|
|
@@ -1467,7 +1480,7 @@ export async function unselectCodexLbProvider(opts = {}) {
|
|
|
1467
1480
|
if (!hasTopLevelCodexLbSelected(current) && !managedCatalogSelected && !managedSharedOpenAiRouting)
|
|
1468
1481
|
return { ok: true, status: 'not_selected', config_path: configPath };
|
|
1469
1482
|
try {
|
|
1470
|
-
let next =
|
|
1483
|
+
let next = removeTopLevelTomlKeyIfValue(current, 'model_provider', 'codex-lb');
|
|
1471
1484
|
next = removeTopLevelTomlKeyIfValue(next, 'model_catalog_json', managedCatalogPath);
|
|
1472
1485
|
const routingRemoval = removeCodexLbSharedOpenAiRouting(next, providerBaseUrl);
|
|
1473
1486
|
next = routingRemoval.text;
|
|
@@ -1936,6 +1949,3 @@ export { askPostinstallQuestion, codexLbConfigPath, codexLbEnvPath, normalizeCod
|
|
|
1936
1949
|
export { ensureGlobalCodexAppGlmProfile, ensureStoredOpenRouterProviderDuringInstall, upsertCodexAppGlmConfig, upsertCodexLbConfig } from './install-helpers-codex-lb-config.js';
|
|
1937
1950
|
export { checkCodexLbResponseChain } from './install-helpers-codex-lb-chain.js';
|
|
1938
1951
|
export { selftestCodexLb } from './install-helpers-codex-lb-selftest.js';
|
|
1939
|
-
function escapeRegExp(value) {
|
|
1940
|
-
return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
1941
|
-
}
|
package/dist/cli/router.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { COMMAND_ALIASES_LITE, COMMAND_MANIFEST_BY_NAME, COMMAND_NAME_SET, } from './command-manifest-lite.js';
|
|
2
|
+
import { ui as cliUi } from './cli-theme.js';
|
|
3
|
+
import { helpResult, isHelpRequest, renderManifestHelp } from './help.js';
|
|
2
4
|
import { findRetiredGlobalExecutionArgumentErrors } from './global-mode-router.js';
|
|
3
5
|
export function isCommandName(value) {
|
|
4
6
|
return COMMAND_NAME_SET.has(value);
|
|
@@ -121,13 +123,18 @@ async function dispatchInner(argv) {
|
|
|
121
123
|
const { COMMANDS } = await import('./command-registry.js');
|
|
122
124
|
const commandEntry = COMMANDS[command];
|
|
123
125
|
const mod = await commandEntry.lazy();
|
|
126
|
+
if (helpRequest) {
|
|
127
|
+
cliUi.banner(`${rawCommand || command} help`);
|
|
128
|
+
cliUi.ok('usage only — the command was not run');
|
|
129
|
+
console.log(typeof mod.usage === 'function'
|
|
130
|
+
? mod.usage(rawCommand || command)
|
|
131
|
+
: renderManifestHelp(command, entry));
|
|
132
|
+
return helpResult(command);
|
|
133
|
+
}
|
|
124
134
|
if (typeof mod.run !== 'function')
|
|
125
135
|
throw new Error(`Command ${command} must export run(command, args)`);
|
|
126
136
|
return mod.run(rawCommand || command, rest);
|
|
127
137
|
}
|
|
128
|
-
function isHelpRequest(args) {
|
|
129
|
-
return args.includes('--help') || args.includes('-h') || String(args[0] || '').toLowerCase() === 'help';
|
|
130
|
-
}
|
|
131
138
|
async function ensureActiveRouteCommandGate(command, args) {
|
|
132
139
|
const entry = COMMAND_MANIFEST_BY_NAME[command];
|
|
133
140
|
if (command === 'route' || entry.readonly === true || entry.allowedDuringActiveRoute === true && entry.mutatesRouteState !== true) {
|
|
@@ -202,6 +209,12 @@ export function safeReadOnlySubcommand(command, args) {
|
|
|
202
209
|
if (command === 'remote' && ['readiness', 'status', 'show'].includes(sub)) {
|
|
203
210
|
return !args.some((arg) => ['--fix', '--yes', '-y', '--write', '--apply', '--execute', '--force', '--real'].includes(String(arg)));
|
|
204
211
|
}
|
|
212
|
+
if (command === 'remote' && ['machines', 'machine'].includes(sub) && ['list', 'validate'].includes(nested)) {
|
|
213
|
+
return !args.some((arg) => ['--fix', '--yes', '-y', '--write', '--apply', '--execute', '--force', '--real'].includes(String(arg)));
|
|
214
|
+
}
|
|
215
|
+
if (command === 'telegram' && (sub === 'validate-config' || (sub === 'hub' && nested === 'status'))) {
|
|
216
|
+
return !args.some((arg) => ['--fix', '--yes', '-y', '--write', '--apply', '--execute', '--force', '--real'].includes(String(arg)));
|
|
217
|
+
}
|
|
205
218
|
if (!['status', 'show', 'list', 'observe', 'watch', 'doctor', 'help'].includes(sub))
|
|
206
219
|
return false;
|
|
207
220
|
return !args.some((arg) => ['--fix', '--yes', '-y', '--write', '--apply', '--execute', '--force', '--real'].includes(String(arg)));
|
|
@@ -11,11 +11,11 @@ import { buildCodexHookLifecycle } from '../core/codex-app/codex-hook-lifecycle.
|
|
|
11
11
|
import { resolveCodexAppExecutionProfile } from '../core/codex-app/codex-app-execution-profile.js';
|
|
12
12
|
import { repairCodexNativeManagedAssets } from '../core/codex-native/codex-native-repair-transaction.js';
|
|
13
13
|
import { doctorCodexAppGlmProfile, installCodexAppGlmProfile } from '../core/codex-app/glm-profile-installer.js';
|
|
14
|
-
import { openRouterStatus, useOpenRouter } from '../core/codex-app/openrouter-activate.js';
|
|
15
|
-
import { OPENROUTER_DEFAULT_MODEL } from '../core/codex-app/openrouter-provider.js';
|
|
14
|
+
import { openRouterStatus, restoreDesktopRoutingSnapshot, useOpenRouter } from '../core/codex-app/openrouter-activate.js';
|
|
16
15
|
import { promptForOpenRouterKeyHidden, writeStoredOpenRouterKey } from '../core/providers/openrouter/openrouter-secret-store.js';
|
|
17
16
|
import { compactOpenRouterModelsResult, listOpenRouterModels, testOpenRouterConnection } from '../core/providers/openrouter/openrouter-account.js';
|
|
18
17
|
import { restartCodexApp } from '../core/codex-app/codex-app-restart.js';
|
|
18
|
+
import { MULTI_PROVIDER_ROUTER_DEFAULT_BASE_URL, multiProviderRouterStatus, testMultiProviderRouter, useMultiProviderRouter } from '../core/codex-app/multi-provider-router.js';
|
|
19
19
|
import { resetRoleModelPreference, roleModelPreferencesStatus, setRoleModelPreference } from '../core/subagents/role-model-preferences.js';
|
|
20
20
|
export async function run(_command, args = []) {
|
|
21
21
|
const action = args[0] || 'check';
|
|
@@ -72,11 +72,19 @@ export async function run(_command, args = []) {
|
|
|
72
72
|
}
|
|
73
73
|
if (action === 'use-openrouter' || action === 'use-or') {
|
|
74
74
|
const root = await sksRoot();
|
|
75
|
-
const model = readOption(args, '--model',
|
|
75
|
+
const model = readOption(args, '--model', '');
|
|
76
76
|
const result = await useOpenRouter({
|
|
77
77
|
root,
|
|
78
78
|
model,
|
|
79
|
-
restartApp: flag(args, '--restart-app') || flag(args, '--restart') || !flag(args, '--no-restart-app')
|
|
79
|
+
restartApp: flag(args, '--restart-app') || flag(args, '--restart') || !flag(args, '--no-restart-app'),
|
|
80
|
+
preserveThreadSidebar: !flag(args, '--no-preserve-thread-sidebar')
|
|
81
|
+
});
|
|
82
|
+
return printCodexAppResult(args, result);
|
|
83
|
+
}
|
|
84
|
+
if (action === 'restore-desktop-routing' || action === 'restore-previous-provider') {
|
|
85
|
+
const result = await restoreDesktopRoutingSnapshot({
|
|
86
|
+
restartApp: flag(args, '--restart-app') || flag(args, '--restart') || !flag(args, '--no-restart-app'),
|
|
87
|
+
restartImpl: restartCodexApp
|
|
80
88
|
});
|
|
81
89
|
return printCodexAppResult(args, result);
|
|
82
90
|
}
|
|
@@ -93,12 +101,39 @@ export async function run(_command, args = []) {
|
|
|
93
101
|
const result = await testOpenRouterConnection({ model: readOption(args, '--model', '') });
|
|
94
102
|
return printCodexAppResult(args, result);
|
|
95
103
|
}
|
|
104
|
+
if (action === 'router-status' || action === 'multi-provider-status' || action === 'opencodex-status') {
|
|
105
|
+
const result = await multiProviderRouterStatus({
|
|
106
|
+
baseUrl: readOption(args, '--base-url', ''),
|
|
107
|
+
catalogPath: readOption(args, '--catalog', '')
|
|
108
|
+
});
|
|
109
|
+
return printCodexAppResult(args, result);
|
|
110
|
+
}
|
|
111
|
+
if (action === 'router-test' || action === 'multi-provider-test' || action === 'opencodex-test') {
|
|
112
|
+
const result = await testMultiProviderRouter({
|
|
113
|
+
baseUrl: readOption(args, '--base-url', MULTI_PROVIDER_ROUTER_DEFAULT_BASE_URL),
|
|
114
|
+
catalogPath: readOption(args, '--catalog', ''),
|
|
115
|
+
model: readOption(args, '--model', '')
|
|
116
|
+
});
|
|
117
|
+
return printCodexAppResult(args, result);
|
|
118
|
+
}
|
|
119
|
+
if (action === 'use-router' || action === 'use-multi-provider' || action === 'use-opencodex') {
|
|
120
|
+
const result = await useMultiProviderRouter({
|
|
121
|
+
model: readOption(args, '--model', ''),
|
|
122
|
+
baseUrl: readOption(args, '--base-url', MULTI_PROVIDER_ROUTER_DEFAULT_BASE_URL),
|
|
123
|
+
catalogPath: readOption(args, '--catalog', ''),
|
|
124
|
+
replaceCatalog: flag(args, '--replace-catalog'),
|
|
125
|
+
forceRoutingOverride: flag(args, '--force-routing-override'),
|
|
126
|
+
restartApp: flag(args, '--restart-app') || flag(args, '--restart') || !flag(args, '--no-restart-app')
|
|
127
|
+
});
|
|
128
|
+
return printCodexAppResult(args, result);
|
|
129
|
+
}
|
|
96
130
|
if (action === 'role-models') {
|
|
97
131
|
return printCodexAppResult(args, await roleModelPreferencesStatus());
|
|
98
132
|
}
|
|
99
133
|
if (action === 'set-role-model') {
|
|
100
134
|
const result = await setRoleModelPreference({
|
|
101
135
|
role: readOption(args, '--role', ''),
|
|
136
|
+
provider: readOption(args, '--provider', ''),
|
|
102
137
|
model: readOption(args, '--model', ''),
|
|
103
138
|
reasoning: readOption(args, '--reasoning', '')
|
|
104
139
|
});
|
|
@@ -168,7 +203,7 @@ export async function run(_command, args = []) {
|
|
|
168
203
|
process.exitCode = 1;
|
|
169
204
|
return;
|
|
170
205
|
}
|
|
171
|
-
console.error('Usage: sks codex-app check|status|harness-matrix|skill-sync|agent-role-sync|init-deep|hook-lifecycle|execution-profile|set-openrouter-key [--api-key-stdin]|use-openrouter --model <id>|openrouter-status|openrouter-models [--ids-only]|openrouter-test [--model <id>]|role-models|set-role-model --role <name> --
|
|
206
|
+
console.error('Usage: sks codex-app check|status|harness-matrix|skill-sync|agent-role-sync|init-deep|hook-lifecycle|execution-profile|set-openrouter-key [--api-key-stdin]|use-openrouter --model <id>|restore-desktop-routing|openrouter-status|openrouter-models [--ids-only]|openrouter-test [--model <id>]|router-status [--base-url <loopback-url>] [--catalog <path>]|router-test --model <provider/model> [--base-url <loopback-url>] [--catalog <path>]|use-router --model <provider/model> [--base-url <loopback-url>] [--catalog <path>] [--replace-catalog] [--force-routing-override]|role-models|set-role-model --role <name> [--provider <id>] --model <catalog-slug> --reasoning <effort>|reset-role-model --role <name>|product-design [--check-only]|ensure-product-design|chrome-extension|pat status|remote-control [--json]');
|
|
172
207
|
console.error('Note: glm-profile is retired (strips leftover Desktop GLM profiles); use set-openrouter-key / use-openrouter.');
|
|
173
208
|
process.exitCode = 1;
|
|
174
209
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { flag } from '../cli/args.js';
|
|
2
|
+
import { sksMenuBarRestartDeferred } from '../core/codex-app/menubar/index.js';
|
|
3
|
+
export function doctorProfileFromArgs(args = [], doctorFix = false) {
|
|
4
|
+
const explicit = readOption(args, '--profile');
|
|
5
|
+
if (isDoctorProfile(explicit))
|
|
6
|
+
return explicit;
|
|
7
|
+
if (flag(args, '--full'))
|
|
8
|
+
return 'full';
|
|
9
|
+
if (flag(args, '--capabilities'))
|
|
10
|
+
return 'capabilities';
|
|
11
|
+
return doctorFix ? 'fix' : 'fast';
|
|
12
|
+
}
|
|
13
|
+
export function doctorArgWarnings(args = []) {
|
|
14
|
+
const warnings = [];
|
|
15
|
+
const explicit = readOption(args, '--profile');
|
|
16
|
+
if (explicit && !isDoctorProfile(explicit)) {
|
|
17
|
+
warnings.push(`unknown_profile:${explicit}; supported profiles: migration, full, capabilities, fast, fix`);
|
|
18
|
+
}
|
|
19
|
+
for (const value of unknownDoctorFlags(args))
|
|
20
|
+
warnings.push(`unknown_flag:${value}`);
|
|
21
|
+
return warnings;
|
|
22
|
+
}
|
|
23
|
+
export function doctorMenuBarInstallPolicy(args = [], doctorFix = false, env = process.env) {
|
|
24
|
+
const profile = doctorProfileFromArgs(args, doctorFix);
|
|
25
|
+
const phaseEnabled = doctorPhaseIdsForProfile(profile).includes('sks_menubar');
|
|
26
|
+
const apply = doctorFix && phaseEnabled;
|
|
27
|
+
return {
|
|
28
|
+
profile,
|
|
29
|
+
phase_enabled: phaseEnabled,
|
|
30
|
+
apply,
|
|
31
|
+
launch: apply && !sksMenuBarRestartDeferred(env)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function doctorPhaseIdsForProfile(profile) {
|
|
35
|
+
const required = [
|
|
36
|
+
'codex_startup_repair',
|
|
37
|
+
'startup_config_repair',
|
|
38
|
+
'context7_repair',
|
|
39
|
+
'context7_mcp_repair',
|
|
40
|
+
'hook_trust_repair',
|
|
41
|
+
'command_alias_cleanup'
|
|
42
|
+
];
|
|
43
|
+
if (profile === 'migration')
|
|
44
|
+
return required;
|
|
45
|
+
const optional = ['supabase_mcp_repair', 'native_capability_repair', 'sks_menubar'];
|
|
46
|
+
if (profile === 'full' || profile === 'capabilities')
|
|
47
|
+
return ['setup', ...required, ...optional];
|
|
48
|
+
return [...required, ...optional];
|
|
49
|
+
}
|
|
50
|
+
function unknownDoctorFlags(args) {
|
|
51
|
+
const knownBoolean = new Set([
|
|
52
|
+
'--fix', '--yes', '-y', '--machine-only', '--actual-codex', '--require-actual-codex',
|
|
53
|
+
'--full', '--capabilities', '--repair-codex-app-ui', '--repair-zellij', '--install-homebrew',
|
|
54
|
+
'--repair-native-capabilities', '--repair-codex-native', '--local-only', '--global-only', '--project', '--global',
|
|
55
|
+
'--dry-run', '--json'
|
|
56
|
+
]);
|
|
57
|
+
const knownValue = new Set(['--profile', '--report-file', '--codex-bin', '--install-scope']);
|
|
58
|
+
const unknown = [];
|
|
59
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
60
|
+
const arg = String(args[index] || '');
|
|
61
|
+
if (!arg.startsWith('-'))
|
|
62
|
+
continue;
|
|
63
|
+
if (knownValue.has(arg)) {
|
|
64
|
+
index += 1;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!knownBoolean.has(arg))
|
|
68
|
+
unknown.push(arg);
|
|
69
|
+
}
|
|
70
|
+
return unknown;
|
|
71
|
+
}
|
|
72
|
+
function isDoctorProfile(value) {
|
|
73
|
+
return ['migration', 'full', 'capabilities', 'fast', 'fix'].includes(String(value || ''));
|
|
74
|
+
}
|
|
75
|
+
function readOption(args, name) {
|
|
76
|
+
const index = args.indexOf(name);
|
|
77
|
+
return index >= 0 && args[index + 1] ? String(args[index + 1]) : null;
|
|
78
|
+
}
|