sneakoscope 4.8.6 → 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 (141) hide show
  1. package/README.md +14 -14
  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 -41
  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-lifecycle.js +86 -35
  17. package/dist/core/agents/agent-orchestrator.js +19 -10
  18. package/dist/core/agents/agent-patch-queue-store.js +14 -3
  19. package/dist/core/agents/agent-patch-queue.js +4 -0
  20. package/dist/core/agents/agent-scheduler.js +2 -3
  21. package/dist/core/agents/native-cli-session-swarm.js +30 -13
  22. package/dist/core/agents/native-cli-worker.js +2 -1
  23. package/dist/core/auto-review.js +25 -4
  24. package/dist/core/codex/agent-config-file-repair.js +15 -2
  25. package/dist/core/codex/codex-config-eperm-repair.js +8 -2
  26. package/dist/core/codex/codex-config-guard.js +289 -0
  27. package/dist/core/codex/codex-config-toml.js +122 -0
  28. package/dist/core/codex/codex-project-config-policy.js +59 -7
  29. package/dist/core/codex-app/sks-menubar.js +767 -122
  30. package/dist/core/codex-control/codex-fake-sdk-adapter.js +6 -4
  31. package/dist/core/codex-control/codex-task-runner.js +32 -14
  32. package/dist/core/codex-control/python-codex-sdk-adapter.js +4 -1
  33. package/dist/core/codex-lb/codex-lb-setup.js +2 -5
  34. package/dist/core/codex-native/skill-registry-ledger.js +24 -5
  35. package/dist/core/commands/command-utils.js +22 -2
  36. package/dist/core/commands/fast-mode-command.js +36 -11
  37. package/dist/core/commands/mad-sks-command.js +18 -5
  38. package/dist/core/commands/menubar-command.js +125 -0
  39. package/dist/core/commands/pipeline-command.js +21 -2
  40. package/dist/core/commands/route-command.js +62 -0
  41. package/dist/core/commands/status-command.js +21 -1
  42. package/dist/core/commands/team-legacy-observe-command.js +221 -3
  43. package/dist/core/commands/uninstall-command.js +298 -0
  44. package/dist/core/db-safety.js +5 -1
  45. package/dist/core/doctor/codex-startup-config-repair.js +14 -3
  46. package/dist/core/doctor/confirm-repair.js +27 -0
  47. package/dist/core/doctor/context7-mcp-repair.js +35 -7
  48. package/dist/core/doctor/doctor-codex-startup-repair.js +10 -3
  49. package/dist/core/doctor/doctor-context7-repair.js +17 -4
  50. package/dist/core/doctor/doctor-dirty-planner.js +27 -9
  51. package/dist/core/doctor/doctor-native-capability-repair.js +12 -2
  52. package/dist/core/doctor/doctor-readiness-matrix.js +27 -2
  53. package/dist/core/doctor/doctor-repair-postcheck.js +4 -0
  54. package/dist/core/doctor/doctor-transaction.js +13 -5
  55. package/dist/core/doctor/supabase-mcp-repair.js +23 -5
  56. package/dist/core/feature-fixtures.js +10 -3
  57. package/dist/core/feature-registry.js +4 -1
  58. package/dist/core/fsx.js +58 -2
  59. package/dist/core/hooks-runtime/skill-reconcile-preflight.js +43 -0
  60. package/dist/core/hooks-runtime.js +86 -46
  61. package/dist/core/init/skills.js +261 -9
  62. package/dist/core/init.js +13 -10
  63. package/dist/core/mad-db/mad-db-coordinator.js +3 -3
  64. package/dist/core/mission.js +138 -5
  65. package/dist/core/naruto/naruto-active-pool.js +69 -26
  66. package/dist/core/naruto/naruto-backpressure.js +5 -1
  67. package/dist/core/naruto/naruto-real-worker-runtime.js +9 -7
  68. package/dist/core/naruto/resource-pressure-monitor.js +33 -15
  69. package/dist/core/pipeline-internals/runtime-core.js +62 -220
  70. package/dist/core/pipeline-internals/runtime-gates.js +113 -24
  71. package/dist/core/questions.js +1 -1
  72. package/dist/core/recallpulse.js +1 -1
  73. package/dist/core/release/gate-manifest.js +2 -2
  74. package/dist/core/release/release-gate-affected-selector.js +3 -10
  75. package/dist/core/release/release-gate-batch-runner.js +4 -2
  76. package/dist/core/release/release-gate-cache-v2.js +27 -14
  77. package/dist/core/release/release-gate-dag.js +6 -1
  78. package/dist/core/release/release-gate-hermetic-env.js +10 -0
  79. package/dist/core/retention.js +89 -4
  80. package/dist/core/routes/diagnostic-allowlist.js +55 -0
  81. package/dist/core/routes.js +18 -15
  82. package/dist/core/skill-forge.js +9 -4
  83. package/dist/core/stop-gate/stop-gate-check.js +10 -3
  84. package/dist/core/stop-gate/stop-gate-resolver.js +19 -3
  85. package/dist/core/stop-gate/stop-gate-writer.js +16 -1
  86. package/dist/core/team-dag.js +12 -465
  87. package/dist/core/team-dashboard-renderer.js +13 -94
  88. package/dist/core/team-live.js +68 -804
  89. package/dist/core/update/update-migration-state.js +20 -30
  90. package/dist/core/update-check.js +28 -2
  91. package/dist/core/version.js +1 -1
  92. package/dist/core/zellij/zellij-layout-builder.js +44 -16
  93. package/dist/core/zellij/zellij-monitor-renderer.js +53 -0
  94. package/dist/core/zellij/zellij-self-heal.js +18 -26
  95. package/dist/core/zellij/zellij-slot-pane-renderer.js +162 -153
  96. package/dist/core/zellij/zellij-slot-telemetry.js +2 -0
  97. package/dist/core/zellij/zellij-theme.js +67 -0
  98. package/dist/core/zellij/zellij-ui-mode.js +16 -0
  99. package/dist/core/zellij/zellij-viewport-binder.js +59 -0
  100. package/dist/core/zellij/zellij-worker-pane-manager.js +53 -5
  101. package/dist/scripts/agent-patch-swarm-gate-lib.js +2 -2
  102. package/dist/scripts/build-dist.js +8 -0
  103. package/dist/scripts/codex-lb-fast-ui-preservation-check.js +106 -0
  104. package/dist/scripts/codex-lb-gpt55-fast-profile-check.js +105 -0
  105. package/dist/scripts/codex-lb-missing-env-regression.js +2 -3
  106. package/dist/scripts/codex-project-config-policy-merge-regression.js +3 -3
  107. package/dist/scripts/concurrent-session-collision-check.js +67 -0
  108. package/dist/scripts/core-skill-integrity-blackbox.js +3 -4
  109. package/dist/scripts/docs-truthfulness-check.js +1 -1
  110. package/dist/scripts/gate-policy-audit-check.js +130 -0
  111. package/dist/scripts/hook-latency-budget-check.js +45 -0
  112. package/dist/scripts/lib/codex-sdk-gate-lib.js +2 -2
  113. package/dist/scripts/lib/real-codex-parallel-gate.js +2 -2
  114. package/dist/scripts/loop-directive-check-lib.js +1 -1
  115. package/dist/scripts/mad-db-real-supabase-e2e.js +2 -2
  116. package/dist/scripts/mad-sks-zellij-default-pane-worker-check.js +3 -2
  117. package/dist/scripts/mad-sks-zellij-launch-check.js +1 -1
  118. package/dist/scripts/naruto-zellij-dynamic-right-column-check.js +7 -7
  119. package/dist/scripts/parallel-claim-enforcement-check.js +14 -5
  120. package/dist/scripts/project-skill-dedupe-check.js +23 -5
  121. package/dist/scripts/release-affected-selector-check.js +2 -2
  122. package/dist/scripts/release-cache-glob-hashing-check.js +1 -0
  123. package/dist/scripts/release-gate-dag-runner-check.js +10 -2
  124. package/dist/scripts/release-gate-dag-runner.js +8 -0
  125. package/dist/scripts/release-readiness-report.js +38 -7
  126. package/dist/scripts/release-stability-report-check.js +12 -8
  127. package/dist/scripts/search-visibility-gate-lib.js +2 -2
  128. package/dist/scripts/skills-manifest-continuity-check.js +46 -0
  129. package/dist/scripts/sks-menubar-install-check.js +87 -21
  130. package/dist/scripts/sks-uninstall-regression-check.js +54 -0
  131. package/dist/scripts/uninstall-inventory-check.js +3 -0
  132. package/dist/scripts/zellij-initial-main-only-blackbox.js +4 -4
  133. package/dist/scripts/zellij-layout-valid-check.js +18 -11
  134. package/dist/scripts/zellij-right-column-geometry-proof.js +2 -4
  135. package/dist/scripts/zellij-slot-pane-renderer-check.js +9 -9
  136. package/dist/scripts/zellij-slot-pane-stale-detection-check.js +3 -4
  137. package/dist/scripts/zellij-slot-pane-telemetry-renderer-check.js +3 -2
  138. package/dist/scripts/zellij-slot-telemetry-renderer-check.js +4 -2
  139. package/dist/scripts/zellij-spawn-on-demand-layout-check.js +8 -2
  140. package/dist/scripts/zellij-viewport-binder-check.js +9 -0
  141. package/package.json +4 -1
package/README.md CHANGED
@@ -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
 
@@ -76,7 +76,7 @@ dependencies = [
76
76
 
77
77
  [[package]]
78
78
  name = "sks-core"
79
- version = "4.8.6"
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.6"
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.6"),
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.6';
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,85 +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
- gates: 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')),
82
- 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')),
83
- 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')),
84
- 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')),
85
- 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'))),
86
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')),
87
- 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')),
88
- root: entry('stable', 'Show active SKS root', 'dist/commands/root.js', directCommand(() => import('../commands/root.js'), 'dist/commands/root.js')),
89
- 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')),
90
- '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'))),
91
109
  wizard: entry('stable', 'Open setup wizard help', 'dist/core/commands/basic-cli.js', basicNoArgs('quickstartCommand')),
92
- 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'))),
93
111
  quickstart: entry('stable', 'Show quickstart flow', 'dist/core/commands/basic-cli.js', basicNoArgs('quickstartCommand')),
94
112
  setup: entry('stable', 'Initialize SKS state', 'dist/core/commands/basic-cli.js', basicArgs('setupCommand')),
95
113
  bootstrap: entry('stable', 'Initialize SKS project files', 'dist/core/commands/basic-cli.js', basicArgs('bootstrapCommand')),
96
114
  init: entry('stable', 'Initialize local control surface', 'dist/core/commands/basic-cli.js', basicArgs('initCommand')),
97
115
  deps: entry('stable', 'Check local dependencies', 'dist/core/commands/basic-cli.js', subcommand(() => import(basicModule), 'depsCommand', 'dist/core/commands/basic-cli.js', 'check')),
98
116
  'fix-path': entry('stable', 'Repair hook command paths', 'dist/core/commands/basic-cli.js', basicArgs('fixPathCommand')),
99
- 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'))),
100
118
  git: entry('beta', 'Inspect and enforce SKS git collaboration hygiene', 'dist/commands/git.js', directCommand(() => import('../commands/git.js'), 'dist/commands/git.js')),
101
- 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')),
102
- 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')),
103
- postinstall: entry('stable', 'Run postinstall bootstrap', 'dist/core/commands/basic-cli.js', basicArgs('postinstallCommand')),
104
- 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'))),
105
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')),
106
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')),
107
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'))),
108
127
  hooks: entry('beta', 'Explain and inspect Codex hooks', 'dist/commands/hooks.js', directCommand(() => import('../commands/hooks.js'), 'dist/commands/hooks.js')),
109
128
  tmux: entry('beta', 'Show removed-runtime migration notice', 'dist/commands/tmux.js', directCommand(() => import('../commands/tmux.js'), 'dist/commands/tmux.js')),
110
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')),
111
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')))),
112
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')),
113
- 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')),
114
- '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']),
115
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')),
116
- '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']),
117
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')),
118
139
  'dollar-commands': entry('stable', 'List Codex App dollar commands', 'dist/core/commands/basic-cli.js', basicArgs('dollarCommandsCommand')),
119
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')),
120
141
  commit: entry('stable', 'Create a simple git commit', 'dist/commands/commit.js', directCommand(() => import('../commands/commit.js'), 'dist/commands/commit.js')),
121
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')),
122
- 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')),
123
- 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')),
124
- 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']),
125
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')),
126
- 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')),
127
- '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')),
128
- 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')),
129
- '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')),
130
- 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')),
131
- 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')),
132
- 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')),
133
- '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')),
134
- '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']),
135
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')),
136
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')),
137
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')),
138
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')),
139
161
  recallpulse: entry('labs', 'RecallPulse evidence route', 'dist/commands/recallpulse.js', directCommand(() => import('../commands/recallpulse.js'), 'dist/commands/recallpulse.js')),
140
- 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'))),
141
163
  guard: entry('beta', 'Check harness guard', 'dist/commands/guard.js', directCommand(() => import('../commands/guard.js'), 'dist/commands/guard.js')),
142
164
  conflicts: entry('beta', 'Check harness conflicts', 'dist/commands/conflicts.js', directCommand(() => import('../commands/conflicts.js'), 'dist/commands/conflicts.js')),
143
165
  versioning: entry('stable', 'Manage release version metadata', 'dist/commands/versioning.js', directCommand(() => import('../commands/versioning.js'), 'dist/commands/versioning.js')),
144
166
  reasoning: entry('labs', 'Show reasoning route', 'dist/core/commands/basic-cli.js', basicArgs('reasoningCommand')),
145
167
  aliases: entry('stable', 'Show command aliases', 'dist/core/commands/basic-cli.js', basicNoArgs('aliasesCommand')),
146
168
  selftest: entry('stable', 'Run local mock selftest', 'dist/core/commands/basic-cli.js', basicArgs('selftestCommand')),
147
- 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']),
148
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')),
149
171
  hook: entry('beta', 'Codex hook entrypoint', 'dist/commands/hook.js', directCommand(() => import('../commands/hook.js'), 'dist/commands/hook.js')),
150
172
  profile: entry('labs', 'Inspect/set profile', 'dist/commands/profile.js', directCommand(() => import('../commands/profile.js'), 'dist/commands/profile.js')),
@@ -161,9 +183,9 @@ export const COMMANDS = {
161
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')),
162
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')),
163
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')),
164
- wiki: entry('beta', 'Manage TriWiki and image voxel ledgers', 'dist/commands/wiki.js', directCommand(() => import('../commands/wiki.js'), 'dist/commands/wiki.js')),
165
- gc: entry('labs', 'Compact/prune runtime state', 'dist/core/commands/gc-command.js', gcArgs('gcCommand')),
166
- 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'))),
167
189
  features: entry('beta', 'Validate feature registry', 'dist/commands/features.js', directCommand(() => import('../commands/features.js'), 'dist/commands/features.js')),
168
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')),
169
191
  perf: entry('beta', 'Run performance checks', 'dist/commands/perf.js', directCommand(() => import('../commands/perf.js'), 'dist/commands/perf.js')),