sneakoscope 4.8.5 → 4.8.7

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.
Files changed (197) hide show
  1. package/README.md +17 -17
  2. package/crates/sks-core/Cargo.lock +1 -1
  3. package/crates/sks-core/Cargo.toml +1 -1
  4. package/crates/sks-core/src/main.rs +1 -1
  5. package/dist/bin/sks.js +1 -1
  6. package/dist/cli/command-registry.js +63 -40
  7. package/dist/cli/install-helpers.js +115 -47
  8. package/dist/cli/router.js +58 -2
  9. package/dist/commands/codex-lb.js +4 -4
  10. package/dist/commands/doctor.js +85 -3
  11. package/dist/commands/zellij-monitor-pane.js +25 -0
  12. package/dist/commands/zellij-slot-pane.js +39 -2
  13. package/dist/commands/zellij-viewport-pane.js +56 -0
  14. package/dist/commands/zellij.js +55 -2
  15. package/dist/config/skills-manifest.json +465 -0
  16. package/dist/core/agents/agent-central-ledger.js +10 -5
  17. package/dist/core/agents/agent-lifecycle.js +86 -35
  18. package/dist/core/agents/agent-orchestrator.js +41 -11
  19. package/dist/core/agents/agent-patch-queue-store.js +14 -3
  20. package/dist/core/agents/agent-patch-queue.js +4 -0
  21. package/dist/core/agents/agent-runner-codex-exec.js +24 -0
  22. package/dist/core/agents/agent-scheduler.js +2 -3
  23. package/dist/core/agents/fast-mode-policy.js +3 -4
  24. package/dist/core/agents/native-cli-session-proof.js +1 -1
  25. package/dist/core/agents/native-cli-session-swarm.js +30 -13
  26. package/dist/core/agents/native-cli-worker.js +73 -112
  27. package/dist/core/agents/worker-pane-communication-contract.js +2 -3
  28. package/dist/core/auto-review.js +25 -4
  29. package/dist/core/codex/agent-config-file-repair.js +15 -2
  30. package/dist/core/codex/codex-cli-syntax-builder.js +2 -0
  31. package/dist/core/codex/codex-config-eperm-repair.js +8 -2
  32. package/dist/core/codex/codex-config-guard.js +289 -0
  33. package/dist/core/codex/codex-config-toml.js +122 -0
  34. package/dist/core/codex/codex-project-config-policy.js +59 -7
  35. package/dist/core/codex-app/codex-init-deep.js +10 -3
  36. package/dist/core/codex-app/sks-menubar.js +767 -122
  37. package/dist/core/codex-control/codex-fake-sdk-adapter.js +6 -4
  38. package/dist/core/codex-control/codex-reliability-shield.js +36 -17
  39. package/dist/core/codex-control/codex-sdk-adapter.js +2 -2
  40. package/dist/core/codex-control/codex-sdk-config-policy.js +4 -0
  41. package/dist/core/codex-control/codex-task-runner.js +48 -18
  42. package/dist/core/codex-control/python-codex-sdk-adapter.js +4 -1
  43. package/dist/core/codex-lb/codex-lb-setup.js +2 -5
  44. package/dist/core/codex-native/core-skill-manifest.js +2 -1
  45. package/dist/core/codex-native/skill-registry-ledger.js +24 -5
  46. package/dist/core/commands/command-utils.js +22 -2
  47. package/dist/core/commands/fast-mode-command.js +36 -11
  48. package/dist/core/commands/gates-command.js +58 -0
  49. package/dist/core/commands/mad-sks-command.js +18 -5
  50. package/dist/core/commands/menubar-command.js +125 -0
  51. package/dist/core/commands/naruto-command.js +1 -14
  52. package/dist/core/commands/pipeline-command.js +22 -3
  53. package/dist/core/commands/release-command.js +5 -5
  54. package/dist/core/commands/route-command.js +62 -0
  55. package/dist/core/commands/status-command.js +22 -3
  56. package/dist/core/commands/stop-gate-command.js +1 -1
  57. package/dist/core/commands/team-legacy-observe-command.js +221 -3
  58. package/dist/core/commands/uninstall-command.js +298 -0
  59. package/dist/core/db-safety.js +5 -1
  60. package/dist/core/doctor/codex-startup-config-repair.js +14 -3
  61. package/dist/core/doctor/confirm-repair.js +27 -0
  62. package/dist/core/doctor/context7-mcp-repair.js +35 -7
  63. package/dist/core/doctor/doctor-codex-startup-repair.js +10 -3
  64. package/dist/core/doctor/doctor-context7-repair.js +17 -4
  65. package/dist/core/doctor/doctor-dirty-planner.js +27 -9
  66. package/dist/core/doctor/doctor-native-capability-repair.js +12 -2
  67. package/dist/core/doctor/doctor-readiness-matrix.js +27 -2
  68. package/dist/core/doctor/doctor-repair-postcheck.js +4 -0
  69. package/dist/core/doctor/doctor-transaction.js +13 -5
  70. package/dist/core/doctor/supabase-mcp-repair.js +23 -5
  71. package/dist/core/feature-fixtures.js +10 -3
  72. package/dist/core/feature-registry.js +4 -1
  73. package/dist/core/fsx.js +58 -2
  74. package/dist/core/hooks-runtime/skill-reconcile-preflight.js +43 -0
  75. package/dist/core/hooks-runtime/team-digest.js +86 -0
  76. package/dist/core/hooks-runtime.js +89 -134
  77. package/dist/core/init/skills.js +647 -0
  78. package/dist/core/init.js +13 -384
  79. package/dist/core/lean-engineering-policy.js +2 -1
  80. package/dist/core/mad-db/mad-db-coordinator.js +3 -3
  81. package/dist/core/mission.js +142 -46
  82. package/dist/core/naruto/naruto-active-pool.js +94 -22
  83. package/dist/core/naruto/naruto-backpressure.js +5 -1
  84. package/dist/core/naruto/naruto-real-worker-child.js +67 -11
  85. package/dist/core/naruto/naruto-real-worker-runtime.js +9 -7
  86. package/dist/core/naruto/resource-pressure-monitor.js +33 -15
  87. package/dist/core/permission-gates.js +45 -19
  88. package/dist/core/pipeline-internals/runtime-core.js +69 -230
  89. package/dist/core/pipeline-internals/runtime-gates.js +136 -81
  90. package/dist/core/ppt/artifacts.js +19 -0
  91. package/dist/core/ppt/html.js +96 -0
  92. package/dist/core/ppt/style-tokens.js +248 -0
  93. package/dist/core/ppt.js +6 -352
  94. package/dist/core/qa-loop/{qa-contract-v2.js → qa-contract.js} +1 -1
  95. package/dist/core/qa-loop/{qa-gate-v2.js → qa-gate.js} +1 -1
  96. package/dist/core/qa-loop/qa-runtime-artifacts.js +2 -2
  97. package/dist/core/qa-loop.js +11 -4
  98. package/dist/core/questions.js +1 -1
  99. package/dist/core/recallpulse/policy.js +226 -0
  100. package/dist/core/recallpulse.js +3 -226
  101. package/dist/core/release/gate-manifest.js +2 -2
  102. package/dist/core/release/release-gate-affected-selector.js +3 -10
  103. package/dist/core/release/release-gate-batch-runner.js +4 -2
  104. package/dist/core/release/release-gate-cache-v2.js +27 -14
  105. package/dist/core/release/release-gate-dag.js +12 -3
  106. package/dist/core/release/release-gate-hermetic-env.js +10 -0
  107. package/dist/core/research/mock-result.js +406 -0
  108. package/dist/core/research/prompt.js +15 -0
  109. package/dist/core/research.js +2 -402
  110. package/dist/core/retention.js +89 -4
  111. package/dist/core/routes/constants.js +48 -0
  112. package/dist/core/routes/design-policy.js +37 -0
  113. package/dist/core/routes/diagnostic-allowlist.js +55 -0
  114. package/dist/core/routes/evidence.js +77 -0
  115. package/dist/core/routes/ppt-policy.js +26 -0
  116. package/dist/core/routes.js +31 -205
  117. package/dist/core/safety/mutation-ledger.js +2 -0
  118. package/dist/core/safety/ssot-guard.js +2 -2
  119. package/dist/core/skill-forge.js +9 -4
  120. package/dist/core/stop-gate/stop-gate-check.js +17 -17
  121. package/dist/core/stop-gate/stop-gate-resolver.js +19 -6
  122. package/dist/core/stop-gate/stop-gate-writer.js +16 -1
  123. package/dist/core/team-dag.js +12 -465
  124. package/dist/core/team-dashboard-renderer.js +13 -94
  125. package/dist/core/team-live.js +68 -804
  126. package/dist/core/update/update-migration-state.js +20 -30
  127. package/dist/core/update-check.js +28 -2
  128. package/dist/core/version.js +1 -1
  129. package/dist/core/zellij/zellij-layout-builder.js +44 -16
  130. package/dist/core/zellij/zellij-monitor-renderer.js +53 -0
  131. package/dist/core/zellij/zellij-self-heal.js +18 -26
  132. package/dist/core/zellij/zellij-slot-pane-renderer.js +166 -150
  133. package/dist/core/zellij/zellij-slot-telemetry.js +30 -12
  134. package/dist/core/zellij/zellij-theme.js +67 -0
  135. package/dist/core/zellij/zellij-ui-mode.js +16 -0
  136. package/dist/core/zellij/zellij-viewport-binder.js +59 -0
  137. package/dist/core/zellij/zellij-worker-pane-manager.js +53 -5
  138. package/dist/scripts/agent-patch-swarm-gate-lib.js +2 -2
  139. package/dist/scripts/build-dist.js +8 -0
  140. package/dist/scripts/check-pipeline-budget.js +1 -7
  141. package/dist/scripts/check-pipeline-runtime.js +1 -8
  142. package/dist/scripts/codex-control-all-pipelines-check.js +5 -14
  143. package/dist/scripts/codex-lb-fast-ui-preservation-check.js +106 -0
  144. package/dist/scripts/codex-lb-gpt55-fast-profile-check.js +105 -0
  145. package/dist/scripts/codex-lb-missing-env-regression.js +2 -3
  146. package/dist/scripts/codex-project-config-policy-merge-regression.js +3 -3
  147. package/dist/scripts/codex-sdk-all-pipelines-check.js +5 -9
  148. package/dist/scripts/concurrent-session-collision-check.js +67 -0
  149. package/dist/scripts/core-skill-integrity-blackbox.js +3 -4
  150. package/dist/scripts/docs-truthfulness-check.js +1 -1
  151. package/dist/scripts/fast-codex-service-tier-proof-check.js +2 -2
  152. package/dist/scripts/gate-policy-audit-check.js +200 -0
  153. package/dist/scripts/hook-latency-budget-check.js +45 -0
  154. package/dist/scripts/lib/codex-sdk-gate-lib.js +2 -2
  155. package/dist/scripts/lib/real-codex-parallel-gate.js +2 -2
  156. package/dist/scripts/loop-directive-check-lib.js +1 -1
  157. package/dist/scripts/mad-db-real-supabase-e2e.js +2 -2
  158. package/dist/scripts/mad-sks-zellij-default-pane-worker-check.js +3 -2
  159. package/dist/scripts/mad-sks-zellij-launch-check.js +1 -1
  160. package/dist/scripts/naruto-zellij-dynamic-right-column-check.js +7 -7
  161. package/dist/scripts/official-docs-compat-report.js +2 -2
  162. package/dist/scripts/parallel-claim-enforcement-check.js +14 -5
  163. package/dist/scripts/product-design-plugin-routing-check.js +10 -5
  164. package/dist/scripts/project-skill-dedupe-check.js +23 -5
  165. package/dist/scripts/qa-loop-surface-router-check.js +2 -2
  166. package/dist/scripts/release-affected-selector-check.js +2 -2
  167. package/dist/scripts/release-cache-glob-hashing-check.js +1 -0
  168. package/dist/scripts/release-check-dynamic-execute.js +32 -35
  169. package/dist/scripts/release-check-dynamic.js +19 -28
  170. package/dist/scripts/release-check-stamp.js +2 -2
  171. package/dist/scripts/release-dag-full-coverage-check.js +57 -394
  172. package/dist/scripts/release-dynamic-performance-check.js +18 -19
  173. package/dist/scripts/release-dynamic-presets-check.js +2 -2
  174. package/dist/scripts/release-gate-dag-runner-check.js +10 -2
  175. package/dist/scripts/release-gate-dag-runner.js +11 -1
  176. package/dist/scripts/release-gate-existence-audit.js +59 -91
  177. package/dist/scripts/release-gate-planner.js +43 -23
  178. package/dist/scripts/release-metadata-1-19-check.js +100 -12
  179. package/dist/scripts/release-readiness-report.js +38 -7
  180. package/dist/scripts/release-stability-report-check.js +12 -8
  181. package/dist/scripts/search-visibility-gate-lib.js +2 -2
  182. package/dist/scripts/skills-manifest-continuity-check.js +46 -0
  183. package/dist/scripts/sks-menubar-install-check.js +87 -21
  184. package/dist/scripts/sks-uninstall-regression-check.js +54 -0
  185. package/dist/scripts/uninstall-inventory-check.js +3 -0
  186. package/dist/scripts/worker-pane-communication-contract-check.js +1 -2
  187. package/dist/scripts/zellij-initial-main-only-blackbox.js +4 -4
  188. package/dist/scripts/zellij-layout-valid-check.js +18 -11
  189. package/dist/scripts/zellij-right-column-geometry-proof.js +2 -4
  190. package/dist/scripts/zellij-slot-pane-renderer-check.js +12 -11
  191. package/dist/scripts/zellij-slot-pane-stale-detection-check.js +3 -4
  192. package/dist/scripts/zellij-slot-pane-telemetry-renderer-check.js +3 -2
  193. package/dist/scripts/zellij-slot-telemetry-renderer-check.js +4 -2
  194. package/dist/scripts/zellij-spawn-on-demand-layout-check.js +8 -2
  195. package/dist/scripts/zellij-viewport-binder-check.js +9 -0
  196. package/package.json +16 -965
  197. package/dist/core/pipeline-runtime.js +0 -2
package/README.md CHANGED
@@ -24,7 +24,7 @@
24
24
  | 🍥 **`$Naruto` swarm** | Up to 100 parallel clone workers behind a hardware-safe concurrency governor, lease-based parallel writes, and a scheduler that backfills idle slots while runnable work remains |
25
25
  | 🖥️ **Live Zellij cockpit** | Workers stack vertically as native Zellij stacked panes; each pane streams heartbeat, current file, tool events, and stdout tails every second |
26
26
  | 🧾 **Completion Proof** | Every serious route ends with schema-backed proof artifacts — no "trust me, it's done" |
27
- | 🛡️ **Safety gates** | DB/migration/destructive operations stay gated, 190+ release gate scripts, Honest Mode |
27
+ | 🛡️ **Safety gates** | DB/migration/destructive operations stay gated, ≤200 release-preset gates, Honest Mode |
28
28
  | 🖼️ **Visual evidence** | Image Voxel TriWiki plus `$imagegen`/`gpt-image-2`-bound visual review flows |
29
29
 
30
30
  ## LLM Init Prompt for Codex Native Agent Builders
@@ -49,7 +49,7 @@ sks seo-geo-optimizer apply latest --mode seo --apply --json
49
49
  sks seo-geo-optimizer audit --mode geo --target package --offline --json
50
50
  ```
51
51
 
52
- > 📋 **Current release: `v4.8.5`** — full release history lives in [CHANGELOG.md](CHANGELOG.md). This README documents how Sneakoscope works today, not its version-by-version changes. Release readiness is tracked in [docs/release-readiness.md](docs/release-readiness.md).
52
+ > 📋 **Current release: `v4.8.6`** — full release history lives in [CHANGELOG.md](CHANGELOG.md). This README documents how Sneakoscope works today, not its version-by-version changes. Release readiness is tracked in [docs/release-readiness.md](docs/release-readiness.md).
53
53
 
54
54
  ## 🍥 Parallelism, UX, And Integrations
55
55
 
@@ -328,8 +328,8 @@ sks update
328
328
  ```sh
329
329
  sks
330
330
  sks --mad
331
- sks team open-zellij latest
332
- sks team attach-zellij latest
331
+ sks zellij status
332
+ sks naruto dashboard latest
333
333
  ```
334
334
 
335
335
  Interactive SKS sessions use Zellij layouts. By default SKS launches Codex in Fast service tier with `--model gpt-5.5`, `-c service_tier="fast"`, the selected `model_reasoning_effort`, and `--no-alt-screen` for Zellij-backed interactive panes so terminal scrollback captures the conversation transcript. Non-GLM SKS sessions force the model to `gpt-5.5`, while the model guard also recognizes `gpt-5.4-mini` as a supported GPT-5.4 mini model; `sks --mad --glm` is the OpenRouter GLM 5.2 exception. `SKS_CODEX_MODEL` and `SKS_CODEX_FAST_HIGH=0` cannot downgrade or remove the non-GLM model pin. You can still set `SKS_CODEX_REASONING` to change reasoning effort, and `SKS_ZELLIJ_CODEX_ALT_SCREEN=1` restores Codex's alternate-screen UI for the next launch. Use `sks --mad --workspace <name>` for an explicit MAD session and `sks help` for CLI help.
@@ -406,12 +406,12 @@ This syncs existing codex-lb provider auth, creates/uses the `sks-mad-high` xhig
406
406
 
407
407
  Before launching, SKS checks npm for a newer `sneakoscope` and prints a non-blocking update notice when one is available; use `sks update` when you want SKS to update itself from npm. Use `--yes` to approve missing dependency installs automatically. Tune MAD swarm startup with `--mad-agents <n>`, `--mad-swarm-work-items <n>`, and `--mad-swarm-backend <backend>`; `--no-mad-swarm` keeps only the cockpit UI if you need a temporary fallback.
408
408
 
409
- ### Team Missions
409
+ ### Naruto Missions
410
410
 
411
411
  ```sh
412
- sks team "implement this feature"
413
- sks team "wide refactor" executor:5 reviewer:6
414
- sks team "max native fan-out" --agents 12
412
+ sks naruto run "implement this feature"
413
+ sks naruto run "wide refactor" --clones 12
414
+ sks naruto run "max native fan-out" --clones 50 --work-items 50
415
415
  sks team watch latest
416
416
  sks team lane latest --agent native_agent_1 --follow
417
417
  sks team message latest --from native_agent_1 --to executor_1 --message "handoff note"
@@ -421,7 +421,7 @@ sks team dashboard latest
421
421
  sks team log latest
422
422
  ```
423
423
 
424
- Team missions keep at least five QA/reviewer lanes active, record live events, compile runtime tasks and worker inboxes, write schema-backed effort/work-order/dashboard artifacts, and reconcile split live lanes in Zellij when available. Native analysis lanes use the agent kernel exclusively. Use `sks team watch`, `sks team lane`, `sks team message`, and `sks team cleanup-zellij` to inspect or close the live view.
424
+ Naruto is the execution SSOT for new wide work. `sks team "<task>"` remains a deprecated compatibility alias that redirects to Naruto and writes `team-alias-to-naruto.json`; `sks team watch`, `sks team lane`, `sks team message`, and `sks team cleanup-zellij` remain read-only/cleanup observation helpers for old Team missions.
425
425
 
426
426
  ### Native Multi-Session Agents
427
427
 
@@ -438,8 +438,8 @@ Native worker sessions write independent artifact directories under `agents/sess
438
438
  Manual fan-out syntax:
439
439
 
440
440
  - Direct agent route: `sks agent run "<task>" --agents 8 --concurrency 4 --mock --json`
441
- - Team prompt role counts: `$Team <task> executor:8 reviewer:5`
442
- - Team CLI flag: `sks team "<task>" --agents 8`
441
+ - Naruto prompt fan-out: `$Naruto <task> --clones 8`
442
+ - Deprecated Team alias: `sks team "<task>" --clones 8`
443
443
 
444
444
  Effort and model tier are assigned per agent. Managed native agents use bounded workspace-write TOML profiles, but every write still needs an assigned lease, non-overlap proof, and parent-owned integration. When the main model is GPT, simple bounded code/docs slices can downshift to `gpt-5.4-mini`, ordinary tool/lease work uses `gpt-5.5` with low model reasoning, and safety/DB/schema/release lanes use `gpt-5.5` with high model reasoning. When the main model is GLM, native workers stay locked to `z-ai/glm-5.2` and receive GLM effort tiers (`minimal`, `low`, `high`, or `xhigh`) instead of falling back to GPT. If a lease conflict, schema failure, proof blocker, DB risk, or release risk appears, the parent can escalate that lane while keeping unrelated lanes cheaper and faster.
445
445
 
@@ -519,8 +519,8 @@ $PPT create a customer proposal deck as HTML/PDF
519
519
 
520
520
  Sneakoscope has two surfaces:
521
521
 
522
- - Terminal commands such as `sks deps check`, `sks team "task"`, and `sks --mad`
523
- - Codex App prompt commands such as `$Team`, `$DFix`, `$QA-LOOP`, and `$Wiki`
522
+ - Terminal commands such as `sks deps check`, `sks naruto run "task"`, and `sks --mad`
523
+ - Codex App prompt commands such as `$Naruto`, `$DFix`, `$QA-LOOP`, and `$Wiki`
524
524
 
525
525
  After installing, run:
526
526
 
@@ -698,7 +698,7 @@ Install Zellij from [zellij.dev](https://zellij.dev/documentation/installation.h
698
698
  ### Zellij copy or right lanes feel wrong
699
699
 
700
700
  ```sh
701
- sks team open-zellij latest
701
+ sks naruto dashboard latest
702
702
  sks zellij status
703
703
  ```
704
704
 
@@ -739,12 +739,12 @@ If another agent tool's managed config conflicts with setup, SKS blocks setup/do
739
739
 
740
740
  ```sh
741
741
  sks pipeline status --json
742
+ sks naruto status latest --json
742
743
  sks team watch latest
743
- sks team lane latest --agent parent_orchestrator --follow
744
744
  sks wiki validate .sneakoscope/wiki/context-pack.json
745
745
  ```
746
746
 
747
- Finalization requires evidence, valid Team cleanup artifacts, reflection when required, and Honest Mode.
747
+ Finalization requires evidence, valid Naruto gate artifacts, reflection when required, and Honest Mode. `sks team watch` remains available only for legacy Team missions.
748
748
 
749
749
  ## 🏗️ Development And Release
750
750
 
@@ -763,7 +763,7 @@ npm run release:check
763
763
  npm run publish:dry
764
764
  ```
765
765
 
766
- `release:check` runs the change-aware affected release gate for ordinary local checks. Publish readiness uses `release:check:full`, which runs the full release DAG and writes a source digest stamp under `.sneakoscope/reports/` so publish commands can verify the same source/dist state. The DAG preserves the 1.18 baseline gates and adds Codex 0.136 compatibility, inherited Codex 0.135/0.134 runner truth, patch swarm runtime truth, transaction journaling, serial conflict rebase, strict strategy-to-patch proof, rollback command proof, Native CLI Session Swarm 5/10/20-process proof, Real Worker Backend Router proof, Codex child overlap proof, model-authored patch-envelope separation, Zellij layout/pane/screen/socket-dir proof, no-subagent-scaling proof, Fast mode default/worker/Codex/MAD propagation proof, Appshots attachment provenance, MCP runtime overlap evidence, task graph expansion, schema-bound follow-up work, actual Agent/Team/Research/QA route blackboxes, scheduler proof hardening, Source Intelligence propagation, Goal mode propagation checks, slot telemetry, update notice, MAD-DB, and Naruto SSOT gates. Broader live gates remain explicit scripts such as `release:real-check`; real Codex patch smoke, real Codex parallel worker proof, and real Zellij proof are optional unless their `SKS_REQUIRE_REAL_*` or `SKS_REQUIRE_ZELLIJ=1` environment variables are set. Generate the human-readable registry with `sks features inventory --write-docs`. Plain `npm publish` uses the `latest` dist-tag. `npm run publish:dry` runs `release:check:full`, verifies the fresh stamp, and then performs provenance/registry and npm dry-run checks. `npm run publish:npm` and `npm run release:publish` run `npm run publish:prep-ignore-scripts` first, then `npm publish --ignore-scripts`, so the real publish path stays strict even when lifecycle scripts are skipped. Operators who intentionally run `npm publish --ignore-scripts` directly must run `npm run publish:prep-ignore-scripts` immediately before it. npm's `prepublishOnly` uses `prepublish-release-check-or-fast` to accept that current stamp before the real publish; if the stamp is missing or stale, it runs `release:check:full` once before continuing.
766
+ `release:check` runs the change-aware affected release gate for ordinary local checks. Publish readiness uses `release:check:full`, which runs the full release DAG and writes a source digest stamp under `.sneakoscope/reports/` so publish commands can verify the same source/dist state. The release preset is capped at 200 user-concern gates, with terminal harness gates split into `infra-harness-gates.json` and runnable through `sks gates run harness`. Gate commands execute directly from `release-gates.v2.json`; `package.json` keeps a small user-facing script surface. Broader live gates remain explicit commands; real Codex patch smoke, real Codex parallel worker proof, and real Zellij proof are optional unless their `SKS_REQUIRE_REAL_*` or `SKS_REQUIRE_ZELLIJ=1` environment variables are set.
767
767
 
768
768
  Version bumps are manual. Run `sks versioning bump` only when preparing release metadata; SKS will not create `.git/hooks/pre-commit` or auto-bump during ordinary commits.
769
769
 
@@ -76,7 +76,7 @@ dependencies = [
76
76
 
77
77
  [[package]]
78
78
  name = "sks-core"
79
- version = "4.8.5"
79
+ version = "4.8.7"
80
80
  dependencies = [
81
81
  "serde_json",
82
82
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sks-core"
3
- version = "4.8.5"
3
+ version = "4.8.7"
4
4
  edition = "2021"
5
5
 
6
6
  [dependencies]
@@ -4,7 +4,7 @@ use std::io::{self, Read, Seek, SeekFrom};
4
4
  fn main() {
5
5
  let mut args = std::env::args().skip(1);
6
6
  match args.next().as_deref() {
7
- Some("--version") => println!("sks-rs 4.8.5"),
7
+ Some("--version") => println!("sks-rs 4.8.7"),
8
8
  Some("compact-info") => {
9
9
  let mut input = String::new();
10
10
  let _ = io::stdin().read_to_string(&mut input);
package/dist/bin/sks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const FAST_PACKAGE_VERSION = '4.8.5';
2
+ const FAST_PACKAGE_VERSION = '4.8.7';
3
3
  const args = process.argv.slice(2);
4
4
  try {
5
5
  if (args[0] === '--agent' && args[1] === 'worker') {
@@ -66,84 +66,107 @@ function subcommand(loader, exportName, packageRequiredFile, fallbackSubcommand)
66
66
  };
67
67
  };
68
68
  }
69
- function entry(maturity, summary, packageRequiredFile, lazy) {
70
- return { maturity, summary, packageRequiredFiles: [packageRequiredFile], lazy };
69
+ function entry(maturity, summary, packageRequiredFile, lazy, contract = {}) {
70
+ return { maturity, summary, packageRequiredFiles: [packageRequiredFile], lazy, ...contract };
71
+ }
72
+ function skipMigrationGate(command) {
73
+ return { ...command, skipMigrationGate: true };
74
+ }
75
+ function readOnly(command) {
76
+ return { ...command, readonly: true, diagnostic: true, allowedDuringActiveRoute: true, activeRoutePolicy: 'always', skipMigrationGate: true };
77
+ }
78
+ function activeRouteDiagnostic(command) {
79
+ return { ...command, diagnostic: true, allowedDuringActiveRoute: true, activeRoutePolicy: 'diagnostic-only', skipMigrationGate: true };
80
+ }
81
+ function routeStateMutator(command, ownedGateFiles = []) {
82
+ return { ...command, mutatesRouteState: true, ownsGates: true, activeRoutePolicy: 'blocked-while-active', ownedGateFiles };
71
83
  }
72
84
  const basicModule = '../core/commands/basic-cli.js';
73
85
  const basicArgs = (exportName) => argsCommand(() => import(basicModule), exportName, 'dist/core/commands/basic-cli.js');
74
86
  const basicNoArgs = (exportName) => noArgsCommand(() => import(basicModule), exportName, 'dist/core/commands/basic-cli.js');
75
87
  const gcArgs = (exportName) => argsCommand(() => import('../core/commands/gc-command.js'), exportName, 'dist/core/commands/gc-command.js');
76
88
  export const COMMANDS = {
77
- help: entry('stable', 'Show SKS help', 'dist/commands/help.js', directCommand(() => import('../commands/help.js'), 'dist/commands/help.js')),
78
- version: entry('stable', 'Show SKS version', 'dist/commands/version.js', directCommand(() => import('../commands/version.js'), 'dist/commands/version.js')),
79
- commands: entry('stable', 'List SKS commands', 'dist/core/commands/basic-cli.js', basicArgs('commandsCommand')),
80
- check: entry('stable', 'Run five-minute proof-bank affected checks', 'dist/core/commands/check-command.js', argsCommand(() => import('../core/commands/check-command.js'), 'checkCommand', 'dist/core/commands/check-command.js')),
81
- task: entry('stable', 'Run an SLA-bounded SKS task check', 'dist/core/commands/task-command.js', argsCommand(() => import('../core/commands/task-command.js'), 'taskCommand', 'dist/core/commands/task-command.js')),
82
- release: entry('stable', 'Run affected/full/background release gates', 'dist/core/commands/release-command.js', argsCommand(() => import('../core/commands/release-command.js'), 'releaseCommand', 'dist/core/commands/release-command.js')),
83
- triwiki: entry('stable', 'Inspect TriWiki index, affected graph, and proof bank', 'dist/core/commands/triwiki-command.js', argsCommand(() => import('../core/commands/triwiki-command.js'), 'triwikiCommand', 'dist/core/commands/triwiki-command.js')),
84
- daemon: entry('stable', 'Inspect or warm the local SKS daemon cache', 'dist/core/commands/daemon-command.js', argsCommand(() => import('../core/commands/daemon-command.js'), 'daemonCommand', 'dist/core/commands/daemon-command.js')),
89
+ help: readOnly(entry('stable', 'Show SKS help', 'dist/commands/help.js', directCommand(() => import('../commands/help.js'), 'dist/commands/help.js'))),
90
+ version: readOnly(entry('stable', 'Show SKS version', 'dist/commands/version.js', directCommand(() => import('../commands/version.js'), 'dist/commands/version.js'))),
91
+ commands: readOnly(entry('stable', 'List SKS commands', 'dist/core/commands/basic-cli.js', basicArgs('commandsCommand'))),
92
+ check: skipMigrationGate(entry('stable', 'Run five-minute proof-bank affected checks', 'dist/core/commands/check-command.js', argsCommand(() => import('../core/commands/check-command.js'), 'checkCommand', 'dist/core/commands/check-command.js'))),
93
+ gates: skipMigrationGate(entry('stable', 'Run release gate DAG by gate id or preset', 'dist/core/commands/gates-command.js', argsCommand(() => import('../core/commands/gates-command.js'), 'gatesCommand', 'dist/core/commands/gates-command.js'))),
94
+ task: skipMigrationGate(entry('stable', 'Run an SLA-bounded SKS task check', 'dist/core/commands/task-command.js', argsCommand(() => import('../core/commands/task-command.js'), 'taskCommand', 'dist/core/commands/task-command.js'))),
95
+ release: skipMigrationGate(entry('stable', 'Run affected/full/background release gates', 'dist/core/commands/release-command.js', argsCommand(() => import('../core/commands/release-command.js'), 'releaseCommand', 'dist/core/commands/release-command.js'))),
96
+ triwiki: skipMigrationGate(entry('stable', 'Inspect TriWiki index, affected graph, and proof bank', 'dist/core/commands/triwiki-command.js', argsCommand(() => import('../core/commands/triwiki-command.js'), 'triwikiCommand', 'dist/core/commands/triwiki-command.js'))),
97
+ daemon: skipMigrationGate(entry('stable', 'Inspect or warm the local SKS daemon cache', 'dist/core/commands/daemon-command.js', argsCommand(() => import('../core/commands/daemon-command.js'), 'daemonCommand', 'dist/core/commands/daemon-command.js'))),
85
98
  run: entry('beta', 'Classify and execute a task through the SKS trust kernel', 'dist/core/commands/run-command.js', argsCommand(() => import('../core/commands/run-command.js'), 'runCommand', 'dist/core/commands/run-command.js')),
86
- status: entry('stable', 'Show concise active mission and trust status', 'dist/core/commands/status-command.js', argsCommand(() => import('../core/commands/status-command.js'), 'statusCommand', 'dist/core/commands/status-command.js')),
87
- root: entry('stable', 'Show active SKS root', 'dist/commands/root.js', directCommand(() => import('../commands/root.js'), 'dist/commands/root.js')),
88
- update: entry('stable', 'Update the global SKS npm package', 'dist/core/commands/basic-cli.js', subcommand(() => import(basicModule), 'updateCommand', 'dist/core/commands/basic-cli.js', 'now')),
89
- 'update-check': entry('stable', 'Check npm package freshness', 'dist/core/commands/basic-cli.js', basicArgs('updateCheckCommand')),
99
+ status: readOnly(entry('stable', 'Show concise active mission and trust status', 'dist/core/commands/status-command.js', argsCommand(() => import('../core/commands/status-command.js'), 'statusCommand', 'dist/core/commands/status-command.js'))),
100
+ root: readOnly(entry('stable', 'Show active SKS root', 'dist/commands/root.js', directCommand(() => import('../commands/root.js'), 'dist/commands/root.js'))),
101
+ update: skipMigrationGate(entry('stable', 'Update the global SKS npm package', 'dist/core/commands/basic-cli.js', subcommand(() => import(basicModule), 'updateCommand', 'dist/core/commands/basic-cli.js', 'now'))),
102
+ uninstall: entry('stable', 'Uninstall SKS global skills, hooks, config, menu bar, and optional project residue', 'dist/core/commands/uninstall-command.js', argsCommand(() => import('../core/commands/uninstall-command.js'), 'uninstallCommand', 'dist/core/commands/uninstall-command.js'), {
103
+ skipMigrationGate: true,
104
+ readonly: false,
105
+ allowedDuringActiveRoute: true,
106
+ activeRoutePolicy: 'always'
107
+ }),
108
+ 'update-check': readOnly(entry('stable', 'Check npm package freshness', 'dist/core/commands/basic-cli.js', basicArgs('updateCheckCommand'))),
90
109
  wizard: entry('stable', 'Open setup wizard help', 'dist/core/commands/basic-cli.js', basicNoArgs('quickstartCommand')),
91
- usage: entry('stable', 'Show focused usage topic', 'dist/core/commands/basic-cli.js', basicArgs('usageCommand')),
110
+ usage: readOnly(entry('stable', 'Show focused usage topic', 'dist/core/commands/basic-cli.js', basicArgs('usageCommand'))),
92
111
  quickstart: entry('stable', 'Show quickstart flow', 'dist/core/commands/basic-cli.js', basicNoArgs('quickstartCommand')),
93
112
  setup: entry('stable', 'Initialize SKS state', 'dist/core/commands/basic-cli.js', basicArgs('setupCommand')),
94
113
  bootstrap: entry('stable', 'Initialize SKS project files', 'dist/core/commands/basic-cli.js', basicArgs('bootstrapCommand')),
95
114
  init: entry('stable', 'Initialize local control surface', 'dist/core/commands/basic-cli.js', basicArgs('initCommand')),
96
115
  deps: entry('stable', 'Check local dependencies', 'dist/core/commands/basic-cli.js', subcommand(() => import(basicModule), 'depsCommand', 'dist/core/commands/basic-cli.js', 'check')),
97
116
  'fix-path': entry('stable', 'Repair hook command paths', 'dist/core/commands/basic-cli.js', basicArgs('fixPathCommand')),
98
- doctor: entry('stable', 'Check and repair SKS install', 'dist/commands/doctor.js', directCommand(() => import('../commands/doctor.js'), 'dist/commands/doctor.js')),
117
+ doctor: activeRouteDiagnostic(entry('stable', 'Check and repair SKS install', 'dist/commands/doctor.js', directCommand(() => import('../commands/doctor.js'), 'dist/commands/doctor.js'))),
99
118
  git: entry('beta', 'Inspect and enforce SKS git collaboration hygiene', 'dist/commands/git.js', directCommand(() => import('../commands/git.js'), 'dist/commands/git.js')),
100
- paths: entry('beta', 'Inspect SKS managed paths', 'dist/core/commands/paths-command.js', argsCommand(() => import('../core/commands/paths-command.js'), 'pathsCommand', 'dist/core/commands/paths-command.js')),
101
- rollback: 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')),
102
- postinstall: entry('stable', 'Run postinstall bootstrap', 'dist/core/commands/basic-cli.js', basicArgs('postinstallCommand')),
103
- codex: entry('beta', 'Check Codex CLI compatibility and vendored hook schemas', 'dist/commands/codex.js', directCommand(() => import('../commands/codex.js'), 'dist/commands/codex.js')),
119
+ paths: readOnly(entry('beta', 'Inspect SKS managed paths', 'dist/core/commands/paths-command.js', argsCommand(() => import('../core/commands/paths-command.js'), 'pathsCommand', 'dist/core/commands/paths-command.js'))),
120
+ 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'))),
121
+ postinstall: skipMigrationGate(entry('stable', 'Run postinstall bootstrap', 'dist/core/commands/basic-cli.js', basicArgs('postinstallCommand'))),
122
+ 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'))),
104
123
  'codex-app': entry('beta', 'Check Codex App readiness', 'dist/commands/codex-app.js', directCommand(() => import('../commands/codex-app.js'), 'dist/commands/codex-app.js')),
105
124
  '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')),
106
125
  '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')),
126
+ 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'))),
107
127
  hooks: entry('beta', 'Explain and inspect Codex hooks', 'dist/commands/hooks.js', directCommand(() => import('../commands/hooks.js'), 'dist/commands/hooks.js')),
108
128
  tmux: entry('beta', 'Show removed-runtime migration notice', 'dist/commands/tmux.js', directCommand(() => import('../commands/tmux.js'), 'dist/commands/tmux.js')),
109
129
  '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')),
110
130
  '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')),
131
+ 'zellij-monitor-pane': skipMigrationGate(readOnly(entry('beta', 'Render the live Zellij MAD/Naruto monitor pane', 'dist/commands/zellij-monitor-pane.js', directCommand(() => import('../commands/zellij-monitor-pane.js'), 'dist/commands/zellij-monitor-pane.js')))),
132
+ 'zellij-viewport-pane': skipMigrationGate(readOnly(entry('beta', 'Render a dynamically bound Zellij worker viewport pane', 'dist/commands/zellij-viewport-pane.js', directCommand(() => import('../commands/zellij-viewport-pane.js'), 'dist/commands/zellij-viewport-pane.js')))),
111
133
  'zellij-slot-column-anchor': entry('beta', 'Render the compact SLOTS anchor pane for first-slot-down Zellij stacks', 'dist/commands/zellij-slot-column-anchor.js', directCommand(() => import('../commands/zellij-slot-column-anchor.js'), 'dist/commands/zellij-slot-column-anchor.js')),
112
- zellij: entry('beta', 'Inspect Zellij runtime status and explain repair (no auto-install)', 'dist/commands/zellij.js', directCommand(() => import('../commands/zellij.js'), 'dist/commands/zellij.js')),
113
- 'mad-sks': entry('beta', 'MAD-SKS scoped permission modifier', 'dist/commands/mad-sks.js', directCommand(() => import('../commands/mad-sks.js'), 'dist/commands/mad-sks.js')),
134
+ zellij: activeRouteDiagnostic(entry('beta', 'Inspect Zellij runtime status and explain repair (no auto-install)', 'dist/commands/zellij.js', directCommand(() => import('../commands/zellij.js'), 'dist/commands/zellij.js'))),
135
+ 'mad-sks': routeStateMutator(entry('beta', 'MAD-SKS scoped permission modifier', 'dist/commands/mad-sks.js', directCommand(() => import('../commands/mad-sks.js'), 'dist/commands/mad-sks.js')), ['mad-sks-gate.json']),
114
136
  glm: entry('beta', 'Run GLM 5.2 MAD mode through OpenRouter', 'dist/core/commands/glm-command.js', argsCommand(() => import('../core/commands/glm-command.js'), 'glmCommand', 'dist/core/commands/glm-command.js')),
115
- 'mad-db': entry('beta', 'Run first-class MadDB SQL-plane execution cycles with mission-local Supabase write transport', 'dist/commands/mad-db.js', directCommand(() => import('../commands/mad-db.js'), 'dist/commands/mad-db.js')),
137
+ 'mad-db': routeStateMutator(entry('beta', 'Run first-class MadDB SQL-plane execution cycles with mission-local Supabase write transport', 'dist/commands/mad-db.js', directCommand(() => import('../commands/mad-db.js'), 'dist/commands/mad-db.js')), ['mad-db-gate.json']),
116
138
  'auto-review': entry('beta', 'Manage auto-review profile', 'dist/commands/auto-review.js', directCommand(() => import('../commands/auto-review.js'), 'dist/commands/auto-review.js')),
117
139
  'dollar-commands': entry('stable', 'List Codex App dollar commands', 'dist/core/commands/basic-cli.js', basicArgs('dollarCommandsCommand')),
118
140
  'fast-mode': entry('stable', 'Toggle SKS Fast mode default for dollar-command routes', 'dist/core/commands/fast-mode-command.js', argsCommand(() => import('../core/commands/fast-mode-command.js'), 'fastModeCommand', 'dist/core/commands/fast-mode-command.js')),
119
141
  commit: entry('stable', 'Create a simple git commit', 'dist/commands/commit.js', directCommand(() => import('../commands/commit.js'), 'dist/commands/commit.js')),
120
142
  'commit-and-push': entry('stable', 'Create a simple git commit and push', 'dist/commands/commit-and-push.js', directCommand(() => import('../commands/commit-and-push.js'), 'dist/commands/commit-and-push.js')),
121
- dfix: entry('stable', 'Run DFix diagnose/plan/patch/verify loop', 'dist/core/commands/dfix-command.js', commandArgsCommand(() => import('../core/commands/dfix-command.js'), 'dfixCommand', 'dist/core/commands/dfix-command.js')),
122
- team: entry('beta', 'Deprecated alias. New execution redirects to Naruto; legacy observe/watch remains.', 'dist/core/commands/team-command.js', argsCommand(() => import('../core/commands/team-command.js'), 'team', 'dist/core/commands/team-command.js')),
123
- agent: entry('beta', 'Run native multi-session agent missions', 'dist/core/commands/agent-command.js', argsCommand(() => import('../core/commands/agent-command.js'), 'agentCommand', 'dist/core/commands/agent-command.js')),
143
+ dfix: routeStateMutator(entry('stable', 'Run DFix diagnose/plan/patch/verify loop', 'dist/core/commands/dfix-command.js', commandArgsCommand(() => import('../core/commands/dfix-command.js'), 'dfixCommand', 'dist/core/commands/dfix-command.js')), ['dfix-gate.json']),
144
+ team: routeStateMutator(entry('beta', 'Deprecated alias. New execution redirects to Naruto; legacy observe/watch remains.', 'dist/core/commands/team-command.js', argsCommand(() => import('../core/commands/team-command.js'), 'team', 'dist/core/commands/team-command.js')), ['team-gate.json', 'naruto-gate.json']),
145
+ agent: routeStateMutator(entry('beta', 'Run native multi-session agent missions', 'dist/core/commands/agent-command.js', argsCommand(() => import('../core/commands/agent-command.js'), 'agentCommand', 'dist/core/commands/agent-command.js')), ['agent-gate.json']),
124
146
  'with-local-llm': entry('beta', 'Enable or inspect local Ollama worker backend', 'dist/core/commands/local-model-command.js', argsCommand(() => import('../core/commands/local-model-command.js'), 'localModelCommand', 'dist/core/commands/local-model-command.js')),
125
- naruto: entry('labs', 'Run $Naruto shadow-clone swarm (up to 100 parallel sessions)', 'dist/core/commands/naruto-command.js', argsCommand(() => import('../core/commands/naruto-command.js'), 'narutoCommand', 'dist/core/commands/naruto-command.js')),
126
- 'stop-gate': entry('beta', 'Check canonical stop-gate resolution for a route/mission', 'dist/core/commands/stop-gate-command.js', commandArgsCommand(() => import('../core/commands/stop-gate-command.js'), 'stopGateCommand', 'dist/core/commands/stop-gate-command.js')),
127
- loop: entry('labs', 'Dynamic Loop Runtime: plan/run/status/proof loop graphs.', 'dist/core/commands/loop-command.js', subcommand(() => import('../core/commands/loop-command.js'), 'loopCommand', 'dist/core/commands/loop-command.js', 'help')),
128
- 'qa-loop': entry('beta', 'Run QA loop missions', 'dist/core/commands/qa-loop-command.js', subcommand(() => import('../core/commands/qa-loop-command.js'), 'qaLoopCommand', 'dist/core/commands/qa-loop-command.js')),
129
- research: entry('labs', 'Run research missions', 'dist/core/commands/research-command.js', subcommand(() => import('../core/commands/research-command.js'), 'researchCommand', 'dist/core/commands/research-command.js')),
130
- autoresearch: entry('labs', 'Alias for research/autoresearch route', 'dist/core/commands/autoresearch-command.js', subcommand(() => import('../core/commands/autoresearch-command.js'), 'autoresearchCommand', 'dist/core/commands/autoresearch-command.js', 'status')),
131
- ppt: entry('labs', 'Inspect/build PPT artifacts', 'dist/core/commands/ppt-command.js', commandArgsCommand(() => import('../core/commands/ppt-command.js'), 'pptCommand', 'dist/core/commands/ppt-command.js')),
132
- 'image-ux-review': entry('labs', 'Inspect image UX artifacts', 'dist/core/commands/image-ux-review-command.js', commandArgsCommand(() => import('../core/commands/image-ux-review-command.js'), 'imageUxReviewCommand', 'dist/core/commands/image-ux-review-command.js')),
133
- 'computer-use': 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')),
147
+ naruto: routeStateMutator(entry('labs', 'Run $Naruto shadow-clone swarm (up to 100 parallel sessions)', 'dist/core/commands/naruto-command.js', argsCommand(() => import('../core/commands/naruto-command.js'), 'narutoCommand', 'dist/core/commands/naruto-command.js')), ['naruto-gate.json', 'stop-gate.json']),
148
+ 'stop-gate': readOnly(entry('beta', 'Check canonical stop-gate resolution for a route/mission', 'dist/core/commands/stop-gate-command.js', commandArgsCommand(() => import('../core/commands/stop-gate-command.js'), 'stopGateCommand', 'dist/core/commands/stop-gate-command.js'))),
149
+ route: activeRouteDiagnostic(entry('beta', 'Inspect or close active route state', 'dist/core/commands/route-command.js', subcommand(() => import('../core/commands/route-command.js'), 'routeCommand', 'dist/core/commands/route-command.js', 'status'))),
150
+ loop: routeStateMutator(entry('labs', 'Dynamic Loop Runtime: plan/run/status/proof loop graphs.', 'dist/core/commands/loop-command.js', subcommand(() => import('../core/commands/loop-command.js'), 'loopCommand', 'dist/core/commands/loop-command.js', 'help')), ['loop-graph-proof.json']),
151
+ 'qa-loop': routeStateMutator(entry('beta', 'Run QA loop missions', 'dist/core/commands/qa-loop-command.js', subcommand(() => import('../core/commands/qa-loop-command.js'), 'qaLoopCommand', 'dist/core/commands/qa-loop-command.js')), ['qa-gate.json']),
152
+ research: routeStateMutator(entry('labs', 'Run research missions', 'dist/core/commands/research-command.js', subcommand(() => import('../core/commands/research-command.js'), 'researchCommand', 'dist/core/commands/research-command.js')), ['research-gate.json']),
153
+ autoresearch: routeStateMutator(entry('labs', 'Alias for research/autoresearch route', 'dist/core/commands/autoresearch-command.js', subcommand(() => import('../core/commands/autoresearch-command.js'), 'autoresearchCommand', 'dist/core/commands/autoresearch-command.js', 'status')), ['research-gate.json']),
154
+ ppt: routeStateMutator(entry('labs', 'Inspect/build PPT artifacts', 'dist/core/commands/ppt-command.js', commandArgsCommand(() => import('../core/commands/ppt-command.js'), 'pptCommand', 'dist/core/commands/ppt-command.js')), ['ppt-gate.json']),
155
+ 'image-ux-review': routeStateMutator(entry('labs', 'Inspect image UX artifacts', 'dist/core/commands/image-ux-review-command.js', commandArgsCommand(() => import('../core/commands/image-ux-review-command.js'), 'imageUxReviewCommand', 'dist/core/commands/image-ux-review-command.js')), ['image-ux-review-gate.json']),
156
+ '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']),
134
157
  context7: entry('beta', 'Context7 checks and docs', 'dist/cli/context7-command.js', subcommand(() => import('./context7-command.js'), 'context7Command', 'dist/cli/context7-command.js', 'check')),
135
158
  'insane-search': entry('beta', 'Run provider-independent InsaneSearch source intelligence', 'dist/cli/insane-search-command.js', subcommand(() => import('./insane-search-command.js'), 'insaneSearchCommand', 'dist/cli/insane-search-command.js', 'doctor')),
136
159
  'ultra-search': entry('beta', 'Compatibility alias for InsaneSearch source intelligence', 'dist/cli/insane-search-command.js', subcommand(() => import('./insane-search-command.js'), 'ultraSearchCommand', 'dist/cli/insane-search-command.js', 'doctor')),
137
160
  xai: entry('beta', 'Deprecated compatibility notice for removed xAI/Grok setup', 'dist/cli/xai-command.js', subcommand(() => import('./xai-command.js'), 'xaiCommand', 'dist/cli/xai-command.js', 'check')),
138
161
  recallpulse: entry('labs', 'RecallPulse evidence route', 'dist/commands/recallpulse.js', directCommand(() => import('../commands/recallpulse.js'), 'dist/commands/recallpulse.js')),
139
- pipeline: entry('beta', 'Inspect pipeline missions', 'dist/commands/pipeline.js', directCommand(() => import('../commands/pipeline.js'), 'dist/commands/pipeline.js')),
162
+ pipeline: activeRouteDiagnostic(entry('beta', 'Inspect pipeline missions', 'dist/commands/pipeline.js', directCommand(() => import('../commands/pipeline.js'), 'dist/commands/pipeline.js'))),
140
163
  guard: entry('beta', 'Check harness guard', 'dist/commands/guard.js', directCommand(() => import('../commands/guard.js'), 'dist/commands/guard.js')),
141
164
  conflicts: entry('beta', 'Check harness conflicts', 'dist/commands/conflicts.js', directCommand(() => import('../commands/conflicts.js'), 'dist/commands/conflicts.js')),
142
165
  versioning: entry('stable', 'Manage release version metadata', 'dist/commands/versioning.js', directCommand(() => import('../commands/versioning.js'), 'dist/commands/versioning.js')),
143
166
  reasoning: entry('labs', 'Show reasoning route', 'dist/core/commands/basic-cli.js', basicArgs('reasoningCommand')),
144
167
  aliases: entry('stable', 'Show command aliases', 'dist/core/commands/basic-cli.js', basicNoArgs('aliasesCommand')),
145
168
  selftest: entry('stable', 'Run local mock selftest', 'dist/core/commands/basic-cli.js', basicArgs('selftestCommand')),
146
- goal: entry('beta', 'Manage Goal bridge workflow', 'dist/core/commands/goal-command.js', subcommand(() => import('../core/commands/goal-command.js'), 'goalCommand', 'dist/core/commands/goal-command.js')),
169
+ goal: routeStateMutator(entry('beta', 'Manage Goal bridge workflow', 'dist/core/commands/goal-command.js', subcommand(() => import('../core/commands/goal-command.js'), 'goalCommand', 'dist/core/commands/goal-command.js')), ['goal-gate.json']),
147
170
  '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')),
148
171
  hook: entry('beta', 'Codex hook entrypoint', 'dist/commands/hook.js', directCommand(() => import('../commands/hook.js'), 'dist/commands/hook.js')),
149
172
  profile: entry('labs', 'Inspect/set profile', 'dist/commands/profile.js', directCommand(() => import('../commands/profile.js'), 'dist/commands/profile.js')),
@@ -160,9 +183,9 @@ export const COMMANDS = {
160
183
  db: entry('beta', 'Inspect DB safety policy', 'dist/core/commands/db-command.js', subcommand(() => import('../core/commands/db-command.js'), 'dbCommand', 'dist/core/commands/db-command.js', 'policy')),
161
184
  eval: entry('labs', 'Run eval reports', 'dist/core/commands/eval-command.js', subcommand(() => import('../core/commands/eval-command.js'), 'evalCommand', 'dist/core/commands/eval-command.js', 'run')),
162
185
  harness: entry('labs', 'Run harness fixtures', 'dist/core/commands/harness-command.js', subcommand(() => import('../core/commands/harness-command.js'), 'harnessCommand', 'dist/core/commands/harness-command.js', 'fixture')),
163
- wiki: entry('beta', 'Manage TriWiki and image voxel ledgers', 'dist/commands/wiki.js', directCommand(() => import('../commands/wiki.js'), 'dist/commands/wiki.js')),
164
- gc: entry('labs', 'Compact/prune runtime state', 'dist/core/commands/gc-command.js', gcArgs('gcCommand')),
165
- stats: entry('labs', 'Show storage stats', 'dist/core/commands/gc-command.js', gcArgs('statsCommand')),
186
+ wiki: activeRouteDiagnostic(entry('beta', 'Manage TriWiki and image voxel ledgers', 'dist/commands/wiki.js', directCommand(() => import('../commands/wiki.js'), 'dist/commands/wiki.js'))),
187
+ gc: activeRouteDiagnostic(entry('labs', 'Compact/prune runtime state', 'dist/core/commands/gc-command.js', gcArgs('gcCommand'))),
188
+ stats: readOnly(entry('labs', 'Show storage stats', 'dist/core/commands/gc-command.js', gcArgs('statsCommand'))),
166
189
  features: entry('beta', 'Validate feature registry', 'dist/commands/features.js', directCommand(() => import('../commands/features.js'), 'dist/commands/features.js')),
167
190
  'all-features': entry('beta', 'Run all-features selftest', 'dist/commands/all-features.js', directCommand(() => import('../commands/all-features.js'), 'dist/commands/all-features.js')),
168
191
  perf: entry('beta', 'Run performance checks', 'dist/commands/perf.js', directCommand(() => import('../commands/perf.js'), 'dist/commands/perf.js')),