sneakoscope 6.0.3 → 6.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/README.md +29 -12
  2. package/config/codex-releases/{rust-v0.142.0.json → rust-v0.144.1.json} +6 -6
  3. package/crates/sks-core/Cargo.lock +1 -1
  4. package/crates/sks-core/Cargo.toml +1 -1
  5. package/dist/bin/fast-inline.js +18 -14
  6. package/dist/bin/sks-dispatch.js +2 -4
  7. package/dist/cli/args.js +2 -0
  8. package/dist/cli/command-manifest-lite.js +2 -3
  9. package/dist/cli/command-registry.js +3 -4
  10. package/dist/cli/help-fast.js +1 -1
  11. package/dist/cli/install-helpers.js +348 -763
  12. package/dist/cli/install-tool-helpers.js +287 -0
  13. package/dist/cli/router.js +91 -6
  14. package/dist/commands/codex-lb.js +188 -53
  15. package/dist/commands/codex.js +44 -5
  16. package/dist/commands/doctor.js +302 -46
  17. package/dist/commands/tmux.js +5 -1
  18. package/dist/commands/versioning.js +7 -0
  19. package/dist/commands/zellij-monitor-pane.js +2 -0
  20. package/dist/commands/zellij-viewport-pane.js +3 -1
  21. package/dist/commands/zellij.js +1 -1
  22. package/dist/config/skills-manifest.json +59 -59
  23. package/dist/core/agent-bridge/agent-manifest.js +48 -0
  24. package/dist/core/agents/agent-central-ledger.js +9 -0
  25. package/dist/core/agents/agent-cleanup-executor.js +334 -41
  26. package/dist/core/agents/agent-cleanup.js +20 -1
  27. package/dist/core/agents/agent-command-surface.js +3 -1
  28. package/dist/core/agents/agent-effort-policy.js +30 -38
  29. package/dist/core/agents/agent-janitor.js +9 -10
  30. package/dist/core/agents/agent-namespace-safety.js +56 -0
  31. package/dist/core/agents/agent-orchestrator.js +25 -3
  32. package/dist/core/agents/agent-output-validator.js +1 -1
  33. package/dist/core/agents/agent-plan.js +100 -21
  34. package/dist/core/agents/agent-role-config.js +43 -49
  35. package/dist/core/agents/agent-runner-codex-exec.js +18 -3
  36. package/dist/core/agents/agent-runner-process.js +1 -0
  37. package/dist/core/agents/agent-schema.js +3 -2
  38. package/dist/core/agents/fast-mode-policy.js +3 -5
  39. package/dist/core/agents/native-cli-session-swarm.js +1 -1
  40. package/dist/core/agents/native-worker-backend-router.js +2 -1
  41. package/dist/core/agents/work-partition/repo-inventory.js +68 -7
  42. package/dist/core/agents/zellij-right-lane-cockpit.js +2 -2
  43. package/dist/core/code-structure.js +5 -4
  44. package/dist/core/codex/agent-config-file-repair.js +94 -193
  45. package/dist/core/codex/codex-cli-update.js +723 -0
  46. package/dist/core/codex/codex-config-guard.js +38 -11
  47. package/dist/core/codex/codex-project-config-policy.js +3 -6
  48. package/dist/core/codex/codex-startup-config-postcheck.js +52 -42
  49. package/dist/core/codex-adapter.js +35 -22
  50. package/dist/core/codex-app/codex-agent-role-sync.js +13 -54
  51. package/dist/core/codex-app/codex-app-fast-ui-repair.js +51 -20
  52. package/dist/core/codex-app/codex-app-launcher.js +48 -17
  53. package/dist/core/codex-app/codex-app-restart.js +23 -2
  54. package/dist/core/codex-app/codex-app-ui-state-snapshot.js +11 -3
  55. package/dist/core/codex-app/sks-menubar.js +136 -5
  56. package/dist/core/codex-app.js +35 -14
  57. package/dist/core/codex-compat/codex-hook-warning-detector.js +10 -1
  58. package/dist/core/codex-compat/codex-release-manifest.js +6 -6
  59. package/dist/core/codex-control/codex-0139-doctor-real-probe.js +7 -1
  60. package/dist/core/codex-control/codex-0139-image-path-real-probe.js +29 -12
  61. package/dist/core/codex-control/codex-0139-probe-runner.js +103 -28
  62. package/dist/core/codex-control/codex-0139-real-probe-summary.js +7 -3
  63. package/dist/core/codex-control/codex-0139-real-probes.js +21 -6
  64. package/dist/core/codex-control/codex-0139-sandbox-real-probe.js +39 -13
  65. package/dist/core/codex-control/codex-0139-web-search-probe.js +28 -14
  66. package/dist/core/codex-control/{codex-0142-capability.js → codex-0144-capability.js} +22 -22
  67. package/dist/core/codex-control/codex-0144-collab-agent-real-probe.js +63 -0
  68. package/dist/core/codex-control/codex-lb-launch-recovery.js +278 -0
  69. package/dist/core/codex-control/codex-multi-agent-event-normalizer.js +5 -1
  70. package/dist/core/codex-control/codex-reliability-shield.js +93 -30
  71. package/dist/core/codex-control/codex-sdk-adapter.js +96 -13
  72. package/dist/core/codex-control/codex-sdk-config-policy.js +2 -1
  73. package/dist/core/codex-control/codex-sdk-sandbox-policy.js +6 -3
  74. package/dist/core/codex-control/codex-task-runner.js +62 -9
  75. package/dist/core/codex-control/python-codex-sdk-adapter.js +30 -3
  76. package/dist/core/codex-exec-output-schema.js +35 -6
  77. package/dist/core/codex-lb/codex-lb-env.js +30 -1
  78. package/dist/core/codex-lb/codex-lb-tool-catalog.js +478 -0
  79. package/dist/core/codex-lb/codex-lb-tool-output-recovery.js +291 -0
  80. package/dist/core/codex-native/codex-native-feature-broker.js +31 -38
  81. package/dist/core/codex-native/codex-native-feature-matrix.js +2 -2
  82. package/dist/core/codex-native/codex-native-repair-transaction.js +1 -1
  83. package/dist/core/codex-native/core-skill-manifest.js +8 -4
  84. package/dist/core/codex-native/native-capability-postcheck.js +16 -8
  85. package/dist/core/codex-native/native-capability-repair-matrix.js +76 -27
  86. package/dist/core/codex-plugins/codex-plugin-json.js +67 -21
  87. package/dist/core/codex-plugins/codex-plugin-repair.js +118 -0
  88. package/dist/core/codex-runtime/codex-desktop-config-policy.js +305 -0
  89. package/dist/core/commands/agent-bridge-command.js +23 -2
  90. package/dist/core/commands/agent-command.js +38 -5
  91. package/dist/core/commands/basic-cli.js +77 -30
  92. package/dist/core/commands/command-utils.js +1 -1
  93. package/dist/core/commands/gc-command.js +27 -4
  94. package/dist/core/commands/image-ux-review-command.js +55 -24
  95. package/dist/core/commands/mad-sks-command.js +182 -137
  96. package/dist/core/commands/naruto-command.js +643 -1153
  97. package/dist/core/commands/pipeline-command.js +1 -0
  98. package/dist/core/commands/research-command.js +293 -231
  99. package/dist/core/commands/run-command.js +100 -23
  100. package/dist/core/commands/team-command.js +2 -3
  101. package/dist/core/commands/team-legacy-observe-command.js +94 -359
  102. package/dist/core/commands/wiki-command.js +179 -83
  103. package/dist/core/computer-use-live-evidence.js +166 -3
  104. package/dist/core/computer-use-status.js +5 -2
  105. package/dist/core/daemon/sksd-hook-daemon-entrypoint.js +2 -2
  106. package/dist/core/daemon/sksd-hook-daemon.js +171 -28
  107. package/dist/core/daemon/sksd-hook-dispatch.js +2 -2
  108. package/dist/core/db-safety.js +2 -2
  109. package/dist/core/decision-lattice.js +6 -6
  110. package/dist/core/dfix/verification-selector.js +6 -4
  111. package/dist/core/doctor/browser-use-repair.js +54 -13
  112. package/dist/core/doctor/codex-0139-doctor.js +3 -2
  113. package/dist/core/doctor/codex-startup-config-repair.js +8 -3
  114. package/dist/core/doctor/computer-use-repair.js +28 -39
  115. package/dist/core/doctor/doctor-codex-startup-repair.js +24 -149
  116. package/dist/core/doctor/doctor-context7-repair.js +1 -1
  117. package/dist/core/doctor/doctor-dirty-planner.js +1 -1
  118. package/dist/core/doctor/doctor-native-capability-repair.js +74 -3
  119. package/dist/core/doctor/imagegen-repair.js +47 -12
  120. package/dist/core/doctor/legacy-global-hook-cleanup.js +179 -0
  121. package/dist/core/feature-fixture-executor.js +71 -7
  122. package/dist/core/feature-fixture-runner.js +53 -12
  123. package/dist/core/feature-fixtures.js +47 -14
  124. package/dist/core/feature-registry.js +53 -58
  125. package/dist/core/fsx.js +54 -6
  126. package/dist/core/harness-conflicts.js +19 -10
  127. package/dist/core/hooks-runtime/code-pack-freshness-preflight.js +5 -4
  128. package/dist/core/hooks-runtime/hook-invocation-dedupe.js +147 -0
  129. package/dist/core/hooks-runtime/hook-io.js +14 -4
  130. package/dist/core/hooks-runtime/light-turn.js +70 -0
  131. package/dist/core/hooks-runtime/payload-signals.js +270 -0
  132. package/dist/core/hooks-runtime/team-digest.js +0 -1
  133. package/dist/core/hooks-runtime/tool-output-quarantine.js +93 -0
  134. package/dist/core/hooks-runtime.js +418 -250
  135. package/dist/core/image/image-artifact-path-contract.js +8 -6
  136. package/dist/core/image/image-artifact-registry.js +5 -1
  137. package/dist/core/image-ux-review/imagegen-adapter.js +5 -2
  138. package/dist/core/imagegen/imagegen-capability.js +10 -13
  139. package/dist/core/imagegen/require-imagegen.js +37 -11
  140. package/dist/core/init/skills.js +16 -30
  141. package/dist/core/init.js +144 -36
  142. package/dist/core/managed-assets/managed-assets-manifest.js +417 -14
  143. package/dist/core/mission.js +24 -1
  144. package/dist/core/naruto/naruto-work-graph.js +70 -4
  145. package/dist/core/ops/reporting.js +3 -0
  146. package/dist/core/pipeline-internals/runtime-core.js +578 -180
  147. package/dist/core/pipeline-internals/runtime-gates.js +191 -49
  148. package/dist/core/ppt/style-tokens.js +1 -1
  149. package/dist/core/ppt-review/index.js +1 -1
  150. package/dist/core/ppt-review/slide-exporter.js +23 -17
  151. package/dist/core/ppt-review/slide-imagegen-review.js +1 -1
  152. package/dist/core/ppt-review/slide-issue-extraction.js +4 -2
  153. package/dist/core/preflight/parallel-preflight-engine.js +50 -1
  154. package/dist/core/product-design-plugin.js +2 -2
  155. package/dist/core/proof/route-finalizer.js +1 -1
  156. package/dist/core/proof/route-proof-gate.js +7 -2
  157. package/dist/core/proof-field.js +3 -3
  158. package/dist/core/provider/model-router.js +38 -32
  159. package/dist/core/recallpulse/policy.js +12 -28
  160. package/dist/core/recallpulse.js +11 -6
  161. package/dist/core/release/gate-manifest.js +18 -12
  162. package/dist/core/release/gate-pack-manifest.js +1 -1
  163. package/dist/core/release/npm-pack-proof.js +247 -0
  164. package/dist/core/release/package-dist-snapshot.js +151 -0
  165. package/dist/core/release/package-size-budget.js +5 -0
  166. package/dist/core/release/release-authorization-snapshot.js +115 -0
  167. package/dist/core/release/release-gate-affected-selector.js +15 -3
  168. package/dist/core/release/release-gate-cache-v2.js +30 -0
  169. package/dist/core/release/release-gate-contract.js +161 -0
  170. package/dist/core/release/release-gate-dag.js +44 -3
  171. package/dist/core/release/release-gate-hermetic-env.js +28 -17
  172. package/dist/core/release/release-real-contract.js +496 -0
  173. package/dist/core/release-parallel-full-coverage.js +31 -143
  174. package/dist/core/research/claim-evidence-matrix.js +41 -6
  175. package/dist/core/research/experiment-plan.js +14 -10
  176. package/dist/core/research/falsification.js +9 -2
  177. package/dist/core/research/implementation-blueprint-densifier.js +82 -60
  178. package/dist/core/research/implementation-blueprint.js +32 -26
  179. package/dist/core/research/mock-result.js +122 -11
  180. package/dist/core/research/replication-pack.js +15 -8
  181. package/dist/core/research/research-adversarial-review.js +1068 -0
  182. package/dist/core/research/research-claim-builder.js +69 -17
  183. package/dist/core/research/research-claim-synthesizer.js +343 -0
  184. package/dist/core/research/research-cycle-runner.js +53 -3
  185. package/dist/core/research/research-falsification-runner.js +176 -0
  186. package/dist/core/research/research-final-reviewer.js +44 -125
  187. package/dist/core/research/research-realistic-report.js +14 -6
  188. package/dist/core/research/research-review-artifact-digest.js +66 -0
  189. package/dist/core/research/research-source-evidence.js +144 -0
  190. package/dist/core/research/research-source-layer-catalog.js +68 -0
  191. package/dist/core/research/research-source-ledger-merge.js +250 -12
  192. package/dist/core/research/research-source-shards.js +26 -70
  193. package/dist/core/research/research-stage-runner.js +237 -247
  194. package/dist/core/research/research-super-search.js +184 -0
  195. package/dist/core/research/research-synthesis-prompt.js +20 -1
  196. package/dist/core/research/research-synthesis-writer.js +86 -5
  197. package/dist/core/research/research-work-graph.js +25 -18
  198. package/dist/core/research/source-quality-report.js +21 -0
  199. package/dist/core/research.js +429 -280
  200. package/dist/core/retention/retention-budget.js +25 -6
  201. package/dist/core/retention.js +980 -101
  202. package/dist/core/routes/constants.js +1 -1
  203. package/dist/core/routes/dollar-manifest-lite.js +11 -11
  204. package/dist/core/routes/evidence.js +4 -4
  205. package/dist/core/routes/ppt-policy.js +1 -1
  206. package/dist/core/routes.js +92 -64
  207. package/dist/core/runtime/task-profile.js +66 -0
  208. package/dist/core/runtime/verification-budget.js +12 -0
  209. package/dist/core/secret-redaction.js +4 -0
  210. package/dist/core/security/high-risk-contracts.js +6 -6
  211. package/dist/core/stop-gate/stop-gate-check.js +49 -12
  212. package/dist/core/subagents/agent-catalog.js +215 -0
  213. package/dist/core/subagents/model-policy.js +118 -0
  214. package/dist/core/subagents/naruto-help-contract.js +40 -0
  215. package/dist/core/subagents/official-subagent-config.js +488 -0
  216. package/dist/core/subagents/official-subagent-preparation.js +251 -0
  217. package/dist/core/subagents/official-subagent-prompt.js +137 -0
  218. package/dist/core/subagents/official-subagent-runner.js +129 -0
  219. package/dist/core/subagents/subagent-evidence.js +663 -0
  220. package/dist/core/subagents/terminology.js +16 -0
  221. package/dist/core/subagents/thread-budget.js +21 -0
  222. package/dist/core/subagents/triwiki-attention.js +65 -0
  223. package/dist/core/super-search/runtime-helpers.js +173 -19
  224. package/dist/core/super-search/runtime.js +140 -15
  225. package/dist/core/super-search/source-records.js +49 -8
  226. package/dist/core/team-review-policy.js +15 -0
  227. package/dist/core/triwiki/code-pack.js +8 -2
  228. package/dist/core/triwiki/triwiki-cache-key.js +108 -29
  229. package/dist/core/triwiki/triwiki-module-card.js +1 -1
  230. package/dist/core/triwiki-attention.js +13 -6
  231. package/dist/core/triwiki-provenance.js +274 -0
  232. package/dist/core/triwiki-runtime.js +21 -7
  233. package/dist/core/triwiki-wrongness/wrongness-ledger.js +187 -61
  234. package/dist/core/triwiki-wrongness/wrongness-retrieval.js +11 -2
  235. package/dist/core/triwiki-wrongness/wrongness-trust-policy.js +2 -0
  236. package/dist/core/update-check.js +23 -15
  237. package/dist/core/version-manager.js +51 -1
  238. package/dist/core/version.js +1 -1
  239. package/dist/core/wiki-coordinate.js +128 -12
  240. package/dist/core/work-order-ledger.js +208 -10
  241. package/dist/core/zellij/zellij-command.js +12 -1
  242. package/dist/core/zellij/zellij-dashboard-pane.js +3 -3
  243. package/dist/core/zellij/zellij-fake-adapter.js +3 -1
  244. package/dist/core/zellij/zellij-launcher.js +51 -21
  245. package/dist/core/zellij/zellij-layout-builder.js +14 -5
  246. package/dist/core/zellij/zellij-official-subagent-activity.js +477 -0
  247. package/dist/core/zellij/zellij-official-subagent-telemetry.js +264 -0
  248. package/dist/core/zellij/zellij-pane-proof.js +32 -6
  249. package/dist/core/zellij/zellij-slot-pane-renderer.js +17 -5
  250. package/dist/core/zellij/zellij-slot-telemetry.js +15 -3
  251. package/dist/core/zellij/zellij-ui-mode.js +1 -1
  252. package/dist/core/zellij/zellij-viewport-binder.js +3 -0
  253. package/dist/core/zellij/zellij-worker-pane-manager.js +5 -3
  254. package/dist/scripts/agent-fast-mode-default-check.js +48 -29
  255. package/dist/scripts/agent-role-config-repair-check.js +34 -15
  256. package/dist/scripts/agent-wiki-context-proof-check.js +16 -2
  257. package/dist/scripts/all-feature-deep-completion-check.js +14 -4
  258. package/dist/scripts/architecture-guard-check.js +8 -1
  259. package/dist/scripts/build-dist.js +17 -5
  260. package/dist/scripts/canonical-test-runner.js +188 -0
  261. package/dist/scripts/check-command-module-budget.js +38 -16
  262. package/dist/scripts/check-legacy-free.js +1 -1
  263. package/dist/scripts/check-route-modularity.js +0 -1
  264. package/dist/scripts/check-ts-contracts.js +1 -1
  265. package/dist/scripts/codex-0139-interrupt-agent-check.js +5 -1
  266. package/dist/scripts/{codex-0142-app-server-v2-check.js → codex-0144-app-server-v2-check.js} +11 -10
  267. package/dist/scripts/{codex-0142-binary-identity-check.js → codex-0144-binary-identity-check.js} +4 -4
  268. package/dist/scripts/codex-0144-capability-check.js +21 -0
  269. package/dist/scripts/{codex-0139-real-probes-check.js → codex-0144-core-real-probes-check.js} +19 -5
  270. package/dist/scripts/{codex-0142-doctor-wiring-check.js → codex-0144-doctor-wiring-check.js} +6 -6
  271. package/dist/scripts/{codex-0142-manifest-check.js → codex-0144-manifest-check.js} +11 -3
  272. package/dist/scripts/{codex-0142-policy-check.js → codex-0144-policy-check.js} +2 -2
  273. package/dist/scripts/{codex-0142-thread-store-check.js → codex-0144-thread-store-check.js} +3 -3
  274. package/dist/scripts/codex-app-provider-model-ui-check.js +53 -19
  275. package/dist/scripts/codex-app-ui-preservation-check.js +35 -4
  276. package/dist/scripts/codex-control-all-pipelines-check.js +7 -3
  277. package/dist/scripts/codex-control-side-effect-scope-check.js +2 -2
  278. package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +27 -0
  279. package/dist/scripts/codex-effort-auto-discovery-check.js +1 -1
  280. package/dist/scripts/codex-lb-fast-mode-truth-check.js +1 -0
  281. package/dist/scripts/{codex-lb-gpt55-fast-profile-check.js → codex-lb-gpt56-fast-profile-check.js} +56 -5
  282. package/dist/scripts/codex-model-metadata-check.js +1 -1
  283. package/dist/scripts/codex-native-agent-role-content-check.js +15 -7
  284. package/dist/scripts/codex-native-repair-transaction-check.js +3 -1
  285. package/dist/scripts/codex-sdk-all-pipelines-check.js +7 -4
  286. package/dist/scripts/codex-sdk-research-pipeline-check.js +30 -8
  287. package/dist/scripts/codex-sdk-sandbox-policy-check.js +5 -1
  288. package/dist/scripts/codex-sdk-version-compat-check.js +2 -1
  289. package/dist/scripts/db-route-materialization-check.js +33 -0
  290. package/dist/scripts/dfix-fixture-check.js +1 -1
  291. package/dist/scripts/docs-truthfulness-check.js +4 -2
  292. package/dist/scripts/doctor-codex-startup-repair-check.js +47 -25
  293. package/dist/scripts/doctor-context7-repair-check.js +2 -1
  294. package/dist/scripts/doctor-fix-production-blackbox.js +12 -2
  295. package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +34 -7
  296. package/dist/scripts/doctor-imagegen-repair-check.js +14 -4
  297. package/dist/scripts/doctor-startup-config-repair-blackbox.js +9 -3
  298. package/dist/scripts/doctor-startup-config-repair-check.js +13 -3
  299. package/dist/scripts/install-update-preserves-config-check.js +7 -2
  300. package/dist/scripts/legacy-gate-inventory-check.js +7 -5
  301. package/dist/scripts/legacy-strong-inventory-check.js +7 -5
  302. package/dist/scripts/legacy-upgrade-matrix-check.js +4 -4
  303. package/dist/scripts/lib/native-cli-session-swarm-check-lib.js +173 -13
  304. package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +165 -6
  305. package/dist/scripts/managed-role-manifest-parity-check.js +5 -4
  306. package/dist/scripts/mutation-callsite-coverage-check.js +0 -11
  307. package/dist/scripts/naruto-codex-e2e-check.js +14 -7
  308. package/dist/scripts/naruto-shadow-clone-swarm-check.js +4 -201
  309. package/dist/scripts/npm-publish-performance-check.js +20 -12
  310. package/dist/scripts/official-subagent-workflow-check.js +145 -0
  311. package/dist/scripts/package-published-contract-check.js +6 -20
  312. package/dist/scripts/packlist-performance-check.js +17 -3
  313. package/dist/scripts/parallel-verification-engine-check.js +2 -2
  314. package/dist/scripts/postinstall-safe-side-effects-check.js +8 -3
  315. package/dist/scripts/ppt-no-mock-as-real-check.js +3 -1
  316. package/dist/scripts/prepublish-release-check-or-fast.js +23 -86
  317. package/dist/scripts/product-design-plugin-routing-check.js +1 -1
  318. package/dist/scripts/release-affected-selector-check.js +74 -1
  319. package/dist/scripts/release-check-stamp.js +324 -239
  320. package/dist/scripts/release-dag-full-coverage-check.js +7 -15
  321. package/dist/scripts/release-dynamic-presets-check.js +10 -1
  322. package/dist/scripts/release-gate-dag-runner-check.js +3 -3
  323. package/dist/scripts/release-gate-dag-runner.js +35 -11
  324. package/dist/scripts/release-gate-existence-audit.js +1 -2
  325. package/dist/scripts/release-gate-script-parity-check.js +1 -1
  326. package/dist/scripts/release-parallel-full-coverage-check.js +12 -6
  327. package/dist/scripts/release-parallel-speed-budget-check.js +18 -2
  328. package/dist/scripts/release-real-check.js +390 -157
  329. package/dist/scripts/release-registry-check.js +61 -16
  330. package/dist/scripts/release-runtime-truth-matrix-check.js +22 -0
  331. package/dist/scripts/research-blueprint-densifier-check.js +2 -2
  332. package/dist/scripts/research-real-cycle-no-legacy-final-md-check.js +11 -7
  333. package/dist/scripts/route-proof-artifact-structure-check.js +1 -0
  334. package/dist/scripts/search-visibility-gate-lib.js +1 -1
  335. package/dist/scripts/seo-geo-route-identity-check.js +30 -4
  336. package/dist/scripts/sizecheck.js +4 -4
  337. package/dist/scripts/sks-1-11-gate-lib.js +53 -6
  338. package/dist/scripts/sks-3-1-4-directive-check-lib.js +8 -2
  339. package/dist/scripts/sks-3-1-5-directive-check-lib.js +3 -2
  340. package/dist/scripts/sks-3-1-6-directive-check-lib.js +5 -3
  341. package/dist/scripts/sks-menubar-install-check.js +8 -0
  342. package/dist/scripts/sks-uninstall-regression-check.js +1 -1
  343. package/dist/scripts/sksd-daemon-check.js +16 -6
  344. package/dist/scripts/trust-fixture-check.js +32 -10
  345. package/dist/scripts/write-build-manifest.js +2 -1
  346. package/dist/scripts/wrongness-fixture-check.js +1 -1
  347. package/dist/scripts/zellij-layout-valid-check.js +36 -11
  348. package/dist/scripts/zellij-pane-proof-check.js +33 -2
  349. package/dist/scripts/zellij-real-session-cleanup-check.js +122 -2
  350. package/dist/scripts/zellij-real-session-launch-check.js +76 -5
  351. package/dist/scripts/zellij-slot-pane-renderer-check.js +4 -4
  352. package/dist/scripts/zellij-spawn-on-demand-layout-check.js +3 -3
  353. package/docs/demo.tape +1 -1
  354. package/infra-harness-gates.json +1486 -0
  355. package/package.json +32 -19
  356. package/release-gates.v2.json +4060 -0
  357. package/runtime-required-scripts.json +9 -0
  358. package/schemas/codex/{app-server-0.142 → app-server-0.144}/codex_app_server_protocol.v2.schemas.json +1146 -781
  359. package/schemas/codex/codex-0139-real-probe-result.schema.json +39 -5
  360. package/schemas/codex/ppt-slide-issue-ledger.schema.json +2 -1
  361. package/dist/commands/db.js +0 -6
  362. package/dist/core/codex-control/codex-0139-multi-agent-real-probe.js +0 -107
  363. package/dist/core/commands/db-command.js +0 -146
  364. package/dist/core/research/prompt.js +0 -15
  365. package/dist/scripts/agent-native-release-gate.js +0 -274
  366. package/dist/scripts/codex-0142-capability-check.js +0 -21
  367. package/dist/scripts/codex-control-tool-call-sequence-repair-check.js +0 -14
  368. package/dist/scripts/command-performance-scorecard-check.js +0 -204
  369. package/dist/scripts/config-managed-merge-callsite-coverage-check.js +0 -212
  370. package/dist/scripts/dollar-performance-scorecard-check.js +0 -257
  371. package/dist/scripts/gate-timing-check.js +0 -16
  372. package/dist/scripts/ops-maturity-scorecard-check.js +0 -12
  373. package/dist/scripts/performance-baseline-check.js +0 -12
  374. package/dist/scripts/performance-improvement-report-check.js +0 -58
  375. package/dist/scripts/release-parallel-check.js +0 -389
  376. package/dist/scripts/release-runner-efficiency-check.js +0 -15
  377. package/dist/scripts/retention-long-run-smoke-check.js +0 -299
  378. package/docs/assets/sneakoscope-architecture-pipeline.jpg +0 -0
@@ -8,6 +8,8 @@ import { getCodexInfo } from '../core/codex-adapter.js';
8
8
  import { rustInfo } from '../core/rust-accelerator.js';
9
9
  import { codexAppIntegrationStatus } from '../core/codex-app.js';
10
10
  import { codexLbMetrics, readCodexLbCircuit } from '../core/codex-lb-circuit.js';
11
+ import { codexLbStatus } from '../cli/install-helpers.js';
12
+ import { codexLbToolOutputRecoveryOverrideAcknowledged } from '../core/codex-lb/codex-lb-tool-output-recovery.js';
11
13
  import { normalizeInstallScope } from '../core/init.js';
12
14
  import { inspectCodexConfigReadability } from '../core/codex/codex-config-readability.js';
13
15
  import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
@@ -25,9 +27,36 @@ import { isUpdateMigrationReceiptCurrent, projectUpdateMigrationReceiptPath, wri
25
27
  import { inspectSksMenuBarStatus, installSksMenuBar } from '../core/codex-app/sks-menubar.js';
26
28
  import { sweepSksTempDirs } from '../core/retention.js';
27
29
  import { detectImagegenCapability } from '../core/imagegen/imagegen-capability.js';
28
- export async function run(_command, args = []) {
30
+ import { CURRENT_CODEX_RELEASE_MANIFEST } from '../core/codex-compat/codex-release-manifest.js';
31
+ import { formatHarnessConflictReport, scanHarnessConflicts } from '../core/harness-conflicts.js';
32
+ export async function run(_command, args = [], deps = {}) {
29
33
  const root = await projectRoot();
30
34
  const doctorFix = flag(args, '--fix');
35
+ const globalOnly = doctorFix && flag(args, '--global-only');
36
+ if (doctorFix) {
37
+ const conflictScan = await scanHarnessConflicts(root);
38
+ if (conflictScan.hard_block) {
39
+ const blocked = {
40
+ schema: 'sks.doctor-status.v3',
41
+ ok: false,
42
+ status: 'blocked_harness_conflict',
43
+ diagnostic_depth: 'fix',
44
+ root,
45
+ blockers: conflictScan.hard.map((item) => `${item.name || 'harness'}:${item.path}`),
46
+ conflicts: conflictScan.conflicts,
47
+ cleanup_prompt_command: 'sks conflicts prompt',
48
+ no_fix_writes_performed: true
49
+ };
50
+ process.exitCode = 1;
51
+ if (flag(args, '--json')) {
52
+ printJson(blocked);
53
+ return blocked;
54
+ }
55
+ console.error(formatHarnessConflictReport(conflictScan, { includePrompt: false }));
56
+ console.error('Run `sks conflicts prompt` and obtain explicit human approval before cleanup.');
57
+ return blocked;
58
+ }
59
+ }
31
60
  const doctorProfile = doctorProfileFromArgs(args, doctorFix);
32
61
  if (!flag(args, '--json')) {
33
62
  cliUi.banner('doctor');
@@ -35,10 +64,153 @@ export async function run(_command, args = []) {
35
64
  }
36
65
  if (!doctorFix && flag(args, '--json') && doctorProfile === 'fast')
37
66
  return runDoctorJsonFastPath(args, root);
38
- if (doctorFix)
39
- return withSecretPreservationGuard(root, 'doctor-fix', () => runDoctor(args, root, doctorFix));
67
+ if (doctorFix) {
68
+ const guardRoot = globalOnly
69
+ ? path.resolve(deps.home || process.env.HOME || os.homedir())
70
+ : root;
71
+ return withSecretPreservationGuard(guardRoot, 'doctor-fix', async () => (globalOnly
72
+ ? runDoctorGlobalOnlyFix(args, root, deps)
73
+ : runDoctor(args, root, doctorFix)));
74
+ }
40
75
  return runDoctor(args, root, doctorFix);
41
76
  }
77
+ export async function executeDoctorGlobalOnlyFix(args = [], root, deps = {}) {
78
+ const startedAtMs = Date.now();
79
+ const home = path.resolve(deps.home || process.env.HOME || os.homedir());
80
+ const reconcileSkillsImpl = deps.reconcileSkillsImpl
81
+ || (await import('../core/init/skills.js')).reconcileSkills;
82
+ const ensureGlobalFastModeImpl = deps.ensureGlobalCodexFastModeDuringInstallImpl
83
+ || (await import('../cli/install-helpers.js')).ensureGlobalCodexFastModeDuringInstall;
84
+ const installMenuBarImpl = deps.installSksMenuBarImpl || installSksMenuBar;
85
+ const codexLbStatusImpl = deps.codexLbStatusImpl || codexLbStatus;
86
+ const providerStatus = await codexLbStatusImpl({
87
+ probeToolOutputRecovery: true,
88
+ allowUnverifiedToolOutputRecovery: codexLbToolOutputRecoveryOverrideAcknowledged({ args })
89
+ }).catch((err) => ({
90
+ selected: null,
91
+ provider_ready: false,
92
+ recovery_probe_failed: true,
93
+ tool_output_recovery: {
94
+ ok: false,
95
+ status: 'probe_failed',
96
+ blockers: ['codex_lb_tool_output_recovery_status_probe_failed'],
97
+ operator_actions: []
98
+ },
99
+ error: err?.message || String(err)
100
+ }));
101
+ const globalSkills = await reconcileSkillsImpl({
102
+ targetDir: path.join(home, '.agents', 'skills'),
103
+ scope: 'global',
104
+ fix: true
105
+ }).catch((err) => ({
106
+ schema: 'sks.skill-reconcile.v1',
107
+ scope: 'global',
108
+ target_dir: path.join(home, '.agents', 'skills'),
109
+ fix: true,
110
+ error: err?.message || String(err),
111
+ core_skill_integrity: { ok: false, installed_count: 0, restored_count: 0 }
112
+ }));
113
+ const globalFastMode = await ensureGlobalFastModeImpl().catch((err) => ({
114
+ status: 'failed',
115
+ error: err?.message || String(err)
116
+ }));
117
+ const menuBar = await installMenuBarImpl({
118
+ home,
119
+ root: home,
120
+ apply: true,
121
+ launch: true,
122
+ quiet: flag(args, '--json') || flag(args, '--machine-only')
123
+ }).catch((err) => ({
124
+ schema: 'sks.codex-app-sks-menubar.v1',
125
+ ok: false,
126
+ status: 'blocked',
127
+ blockers: [err?.message || String(err)],
128
+ warnings: []
129
+ }));
130
+ const recoveryReady = codexLbRecoveryStatusReady(providerStatus, true);
131
+ const globalSkillsReady = !globalSkills?.error
132
+ && globalSkills?.core_skill_integrity?.ok !== false;
133
+ const globalFastModeReady = globalFastMode?.status !== 'failed'
134
+ && globalFastMode?.ok !== false;
135
+ const menuBarReady = menuBar?.ok !== false;
136
+ const blockers = [...new Set([
137
+ ...(!globalSkillsReady ? [`global_skills_reconcile_failed:${globalSkills?.error || 'core_skill_integrity'}`] : []),
138
+ ...(!globalFastModeReady ? [`global_fast_mode_repair_failed:${globalFastMode?.error || globalFastMode?.status || 'unknown'}`] : []),
139
+ ...(!menuBarReady ? (menuBar?.blockers || ['sks_menubar_repair_failed']) : []),
140
+ ...(!recoveryReady ? (providerStatus?.tool_output_recovery?.blockers || ['codex_lb_tool_output_recovery_unverified']) : [])
141
+ ].map(String).filter(Boolean))];
142
+ const ok = blockers.length === 0;
143
+ return {
144
+ schema: 'sks.doctor-status.v3',
145
+ elapsed_ms: Date.now() - startedAtMs,
146
+ ok,
147
+ status: ok ? 'global_fix_ok' : 'blocked',
148
+ diagnostic_depth: 'global-only',
149
+ global_only: true,
150
+ install_scope: 'global',
151
+ root,
152
+ home,
153
+ project_root_alias_detected: path.resolve(root) === home,
154
+ no_project_writes_performed: true,
155
+ project_phases_skipped: [
156
+ 'project_skills_reconcile',
157
+ 'project_codex_config_repair',
158
+ 'project_context7_mcp_repair',
159
+ 'project_supabase_mcp_repair',
160
+ 'project_hook_trust_repair',
161
+ 'project_command_alias_cleanup',
162
+ 'project_migration_receipt'
163
+ ],
164
+ skills: { global: globalSkills, project: { skipped: true, reason: 'global_only_doctor' } },
165
+ codex_app_fast_mode: globalFastMode,
166
+ sks_menubar: menuBar,
167
+ codex_lb: {
168
+ provider_status: providerStatus,
169
+ tool_output_recovery: providerStatus?.tool_output_recovery || null,
170
+ recovery_ok: recoveryReady
171
+ },
172
+ blockers,
173
+ next_actions: [
174
+ ...(recoveryReady ? [] : (providerStatus?.tool_output_recovery?.operator_actions || [])),
175
+ 'Run `sks doctor --fix --json` from a specific project directory when project-scoped repair is required.'
176
+ ]
177
+ };
178
+ }
179
+ async function runDoctorGlobalOnlyFix(args = [], root, deps = {}) {
180
+ const result = await executeDoctorGlobalOnlyFix(args, root, deps);
181
+ const reportFile = readOption(args, '--report-file', null);
182
+ if (reportFile)
183
+ await writeJsonReportFile(reportFile, result);
184
+ if (flag(args, '--machine-only') && !flag(args, '--json')) {
185
+ if (!result.ok)
186
+ process.exitCode = 1;
187
+ return result;
188
+ }
189
+ if (flag(args, '--json')) {
190
+ printJson(result);
191
+ }
192
+ else {
193
+ console.log(`SKS Doctor global repair: ${result.ok ? 'ok' : 'blocked'}`);
194
+ console.log(`Global skills: ${result.skills.global?.error ? 'blocked' : 'reconciled'}`);
195
+ console.log(`SKS menu bar: ${result.sks_menubar?.status || (result.sks_menubar?.ok ? 'ok' : 'blocked')}`);
196
+ for (const blocker of result.blockers)
197
+ console.log(`- blocker: ${blocker}`);
198
+ for (const action of result.next_actions)
199
+ console.log(`- ${action}`);
200
+ }
201
+ if (!result.ok)
202
+ process.exitCode = 1;
203
+ return result;
204
+ }
205
+ function codexLbRecoveryStatusReady(status, probeRequired = false) {
206
+ if (status == null)
207
+ return !probeRequired;
208
+ if (status.recovery_probe_failed === true || status.error)
209
+ return false;
210
+ if (status.selected === false)
211
+ return true;
212
+ return status.selected === true && status.tool_output_recovery?.ok === true;
213
+ }
42
214
  async function runDoctorJsonFastPath(args = [], root) {
43
215
  const startedAtMs = Date.now();
44
216
  const codexBin = readOption(args, '--codex-bin', process.env.SKS_DOCTOR_CODEX_BIN || '');
@@ -358,7 +530,31 @@ async function runDoctor(args = [], root, doctorFix) {
358
530
  const codexApp = deepDiagnostics
359
531
  ? await codexAppIntegrationStatus({ codex }).catch((err) => ({ ok: false, error: err.message }))
360
532
  : { ok: false, skipped: true, warnings: ['codex_app_optional_diagnostic_skipped'] };
361
- const codexLb = codexLbMetrics(await readCodexLbCircuit(root).catch(() => ({})));
533
+ const codexLbCircuit = codexLbMetrics(await readCodexLbCircuit(root).catch(() => ({})));
534
+ const codexLbProviderStatus = deepDiagnostics || doctorFix
535
+ ? await codexLbStatus({
536
+ probeToolOutputRecovery: true,
537
+ allowUnverifiedToolOutputRecovery: codexLbToolOutputRecoveryOverrideAcknowledged({ args })
538
+ }).catch((err) => ({
539
+ selected: null,
540
+ provider_ready: false,
541
+ recovery_probe_failed: true,
542
+ tool_output_recovery: {
543
+ ok: false,
544
+ status: 'probe_failed',
545
+ blockers: ['codex_lb_tool_output_recovery_status_probe_failed'],
546
+ operator_actions: []
547
+ },
548
+ error: err?.message || String(err)
549
+ }))
550
+ : null;
551
+ const codexLbRecoveryReady = codexLbRecoveryStatusReady(codexLbProviderStatus, deepDiagnostics || doctorFix);
552
+ const codexLb = {
553
+ ...codexLbCircuit,
554
+ provider_status: codexLbProviderStatus,
555
+ tool_output_recovery: codexLbProviderStatus?.tool_output_recovery || null,
556
+ recovery_ok: codexLbRecoveryReady
557
+ };
362
558
  const providerContext = deepDiagnostics
363
559
  ? await resolveProviderContext({ root, route: '$Doctor', serviceTier: process.env.SKS_SERVICE_TIER || 'fast' }).catch((err) => ({
364
560
  schema: 'sks.provider-context.v1',
@@ -754,49 +950,78 @@ async function runDoctor(args = [], root, doctorFix) {
754
950
  const zellij = await checkZellijCapability({ root, require: process.env.SKS_REQUIRE_ZELLIJ === '1' });
755
951
  const localModel = await readLocalModelConfig().catch(() => null);
756
952
  const permissionProfiles = await inventoryCodexPermissionProfiles(root, { writeReport: true });
757
- const agentRoleConfigRepair = await repairAgentRoleConfigs({
758
- root,
759
- apply: doctorFix,
760
- reportPath: `${root}/.sneakoscope/reports/agent-role-config-repair.json`
761
- }).catch((err) => ({
762
- schema: 'sks.agent-role-config-repair.v1',
763
- ok: false,
764
- apply: doctorFix,
765
- missing: [],
766
- existing: [],
767
- created: [],
768
- warnings_suppressed: false,
769
- blockers: [err?.message || String(err)]
953
+ const startupRoleRepair = startupConfigRepair?.role_repair;
954
+ const agentRoleConfigRepair = doctorFix && startupRoleRepair
955
+ ? startupRoleRepair
956
+ : await repairAgentRoleConfigs({
957
+ root,
958
+ apply: false,
959
+ reportPath: `${root}/.sneakoscope/reports/agent-role-config-repair.json`
960
+ }).catch((err) => ({
961
+ schema: 'sks.agent-role-config-repair.v1',
962
+ ok: false,
963
+ apply: false,
964
+ missing: [],
965
+ existing: [],
966
+ created: [],
967
+ warnings_suppressed: false,
968
+ blockers: [err?.message || String(err)]
969
+ }));
970
+ const officialSubagentConfig = await (await import('../core/subagents/official-subagent-config.js'))
971
+ .readOfficialSubagentConfig(root)
972
+ .catch((err) => ({
973
+ maxThreads: null,
974
+ maxDepth: null,
975
+ blockers: [`official_subagent_config_read_failed:${err?.message || String(err)}`],
976
+ warnings: []
770
977
  }));
771
978
  const globalSksInstallCleanup = flag(args, '--fix') && !flag(args, '--local-only')
772
979
  ? await (await import('../core/doctor/global-sks-install-cleanup.js')).cleanDuplicateGlobalSksInstalls({ root, fix: true }).catch((err) => ({ schema: 'sks.global-sks-install-cleanup.v1', ok: false, fix: true, error: err?.message || String(err), blockers: ['global_sks_install_cleanup_exception'] }))
773
980
  : null;
774
981
  const shouldProbeNativeCapabilityRepairs = doctorFix || deepDiagnostics || nativeCapabilityDiagnosticsRequested;
775
982
  const imagegen = await detectImagegenCapability({ codexBin: codexBin || undefined }).catch((err) => ({ ok: false, error: err.message, auth_readiness: null, core_ready: false, blockers: ['imagegen_detection_exception'] }));
776
- const imagegenRepair = imagegen.core_ready === true
777
- ? {
983
+ const imagegenRepair = shouldProbeNativeCapabilityRepairs
984
+ ? await (await import('../core/doctor/imagegen-repair.js')).repairCodexImagegen({ root, apply: doctorFix, codexBin: codexBin || null }).catch((err) => ({
778
985
  schema: 'sks.doctor-imagegen-repair.v1',
779
- ok: true,
780
- attempted: false,
986
+ ok: false,
987
+ attempted: true,
781
988
  apply: doctorFix,
782
- recovered: true,
783
- before: imagegen,
784
- after: imagegen,
785
- steps: [],
786
- blockers: [],
787
- manual_actions: [],
788
- communication_test: { level: 'flag_level', ok: true, checked: 'codex features list --json (feature-flag/plugin metadata only)', real_generation_round_trip_performed: false, blocker: null }
789
- }
790
- : shouldProbeNativeCapabilityRepairs
791
- ? await (await import('../core/doctor/imagegen-repair.js')).repairCodexImagegen({ root, apply: doctorFix, codexBin: codexBin || null }).catch((err) => ({
989
+ recovered: false,
990
+ capability_ready: false,
991
+ route_ready: false,
992
+ real_generation_verified: false,
993
+ blockers: [err?.message || String(err)],
994
+ manual_actions: ['Run `sks doctor --fix --json` after enabling Codex App image_generation.']
995
+ }))
996
+ : imagegen.core_ready === true
997
+ ? {
792
998
  schema: 'sks.doctor-imagegen-repair.v1',
793
999
  ok: false,
794
- attempted: true,
1000
+ attempted: false,
795
1001
  apply: doctorFix,
796
1002
  recovered: false,
797
- blockers: [err?.message || String(err)],
798
- manual_actions: ['Run `sks doctor --fix --json` after enabling Codex App image_generation.']
799
- }))
1003
+ capability_ready: true,
1004
+ configuration_ready: true,
1005
+ route_ready: false,
1006
+ real_generation_verified: false,
1007
+ current_task_tool_manifest_verified: false,
1008
+ requires_new_task: true,
1009
+ before: imagegen,
1010
+ after: imagegen,
1011
+ steps: [],
1012
+ blockers: ['codex_imagegen_current_task_tool_manifest_unverified', 'codex_imagegen_real_output_unverified'],
1013
+ manual_actions: [
1014
+ 'Start a fresh Codex/Work task so $imagegen is present in its tool manifest.',
1015
+ 'Invoke $imagegen with gpt-image-2 and bind the selected raster output path to route evidence.'
1016
+ ],
1017
+ communication_test: {
1018
+ level: 'flag_level',
1019
+ ok: false,
1020
+ checked: 'codex features list (feature-flag/plugin metadata only)',
1021
+ real_generation_round_trip_performed: false,
1022
+ blocker: 'codex_imagegen_real_output_unverified'
1023
+ }
1024
+ }
800
1025
  : deferredNativeRepair('sks.doctor-imagegen-repair.v1', doctorFix, [
801
1026
  'Run `sks doctor --fix --repair-native-capabilities --json` after enabling Codex App image_generation.'
802
1027
  ]);
@@ -843,12 +1068,23 @@ async function runDoctor(args = [], root, doctorFix) {
843
1068
  : null;
844
1069
  const nativeCapabilityReadinessStatus = (repair) => repair?.skipped === true
845
1070
  ? (repair.status || 'deferred')
846
- : (repair?.recovered === true || repair?.ok === true ? 'ok' : repair?.attempted ? 'blocked' : 'not-needed');
1071
+ : repair?.route_ready === true
1072
+ ? 'ok'
1073
+ : repair?.capability_ready === true
1074
+ ? 'available-unverified'
1075
+ : (repair?.recovered === true || repair?.ok === true ? 'ok' : repair?.attempted ? 'blocked' : 'not-needed');
847
1076
  const nativeCapabilityReadiness = {
848
1077
  schema: 'sks.native-capability-readiness.v1',
849
1078
  generated_at: nowIso(),
850
1079
  apply: doctorFix,
851
- imagegen: { status: nativeCapabilityReadinessStatus(imagegenRepair), communication_test: imagegenRepair?.communication_test || null, blockers: imagegenRepair?.blockers || [] },
1080
+ imagegen: {
1081
+ status: nativeCapabilityReadinessStatus(imagegenRepair),
1082
+ capability_ready: imagegenRepair?.capability_ready === true,
1083
+ route_ready: imagegenRepair?.route_ready === true,
1084
+ generated_output_verified: imagegenRepair?.real_generation_verified === true,
1085
+ communication_test: imagegenRepair?.communication_test || null,
1086
+ blockers: imagegenRepair?.blockers || []
1087
+ },
852
1088
  computer_use: { status: nativeCapabilityReadinessStatus(computerUseRepair), blockers: computerUseRepair?.blockers || [], next_actions: computerUseRepair?.next_actions || [] },
853
1089
  browser_use: { status: nativeCapabilityReadinessStatus(browserUseRepair), blockers: browserUseRepair?.blockers || [], next_actions: browserUseRepair?.next_actions || [] }
854
1090
  };
@@ -1026,7 +1262,13 @@ async function runDoctor(args = [], root, doctorFix) {
1026
1262
  }
1027
1263
  const zellijReadiness = buildZellijReadiness(root, zellij, ready);
1028
1264
  const runtimeReadiness = buildRuntimeReadiness(zellijReadiness, codexNativeFeatureMatrix);
1029
- const resultOk = ready.ready && (!sksUpdate || sksUpdate.ok !== false) && commandAliasCleanup.ok !== false && codexStartupRepair.ok !== false;
1265
+ const resultOk = ready.ready
1266
+ && (!sksUpdate || sksUpdate.ok !== false)
1267
+ && commandAliasCleanup.ok !== false
1268
+ && codexStartupRepair.ok !== false
1269
+ && agentRoleConfigRepair.ok !== false
1270
+ && (officialSubagentConfig.blockers || []).length === 0
1271
+ && codexLbRecoveryReady;
1030
1272
  const result = {
1031
1273
  schema: 'sks.doctor-status.v3',
1032
1274
  elapsed_ms: Date.now() - startedAtMs,
@@ -1034,7 +1276,7 @@ async function runDoctor(args = [], root, doctorFix) {
1034
1276
  status: resultOk ? (doctorFix ? 'fix_ok' : deepDiagnostics ? 'full_ok' : 'fast_ok') : 'blocked',
1035
1277
  diagnostic_depth: deepDiagnostics ? 'full' : doctorFix ? 'fix' : 'fast',
1036
1278
  deep_diagnostics_skipped: !deepDiagnostics,
1037
- deep_ok: deepDiagnostics ? Boolean(ready.ready) : null,
1279
+ deep_ok: deepDiagnostics ? resultOk : null,
1038
1280
  not_counted_as_full_doctor: !deepDiagnostics,
1039
1281
  root,
1040
1282
  arg_warnings: argWarnings,
@@ -1069,6 +1311,7 @@ async function runDoctor(args = [], root, doctorFix) {
1069
1311
  } : null,
1070
1312
  local_model: localModel,
1071
1313
  agent_role_config: agentRoleConfigRepair,
1314
+ official_subagent_config: officialSubagentConfig,
1072
1315
  zellij_readiness: zellijReadiness,
1073
1316
  codex_permission_profiles: permissionProfiles,
1074
1317
  command_aliases: commandAliasCleanup,
@@ -1080,7 +1323,11 @@ async function runDoctor(args = [], root, doctorFix) {
1080
1323
  error: sksTempSweep.error || null
1081
1324
  },
1082
1325
  imagegen: {
1083
- ok: imagegen.auth_readiness?.available_paths?.length > 0,
1326
+ ok: imagegenRepair?.route_ready === true,
1327
+ capability_ready: imagegen.codex_app?.available === true,
1328
+ route_ready: imagegenRepair?.route_ready === true,
1329
+ generated_output_verified: imagegenRepair?.real_generation_verified === true,
1330
+ auth_ready: imagegen.auth_readiness?.headless_auto_available === true,
1084
1331
  auth_readiness: imagegen.auth_readiness || null,
1085
1332
  codex_app_builtin_available: imagegen.codex_app?.available === true
1086
1333
  },
@@ -1117,6 +1364,8 @@ async function runDoctor(args = [], root, doctorFix) {
1117
1364
  console.log('SKS Doctor');
1118
1365
  for (const warning of argWarnings)
1119
1366
  console.log(`Argument warning: ${warning}`);
1367
+ for (const warning of officialSubagentConfig.warnings || [])
1368
+ console.log(`Official subagent warning: ${warning}`);
1120
1369
  console.log(`Root: ${root}`);
1121
1370
  console.log(`Node: ${result.node.ok ? 'ok' : 'fail'} ${result.node.version}`);
1122
1371
  console.log(`Codex: ${codex.bin ? 'ok' : 'missing'} ${codex.version || ''}`);
@@ -1252,7 +1501,7 @@ async function runDoctor(args = [], root, doctorFix) {
1252
1501
  console.log(` - ${action}`);
1253
1502
  }
1254
1503
  }
1255
- console.log(`Image Gen repair: ${imagegenRepair.recovered ? 'ok' : imagegenRepair.attempted ? 'blocked' : 'not-needed'}`);
1504
+ console.log(`Image Gen repair: ${nativeCapabilityReadiness.imagegen.status}`);
1256
1505
  for (const action of imagegenRepair.manual_actions || [])
1257
1506
  console.log(` - ${action}`);
1258
1507
  console.log(`Computer Use repair: ${computerUseRepair.recovered ? 'ok' : computerUseRepair.attempted ? 'blocked' : 'not-needed'}`);
@@ -1272,7 +1521,7 @@ async function runDoctor(args = [], root, doctorFix) {
1272
1521
  }
1273
1522
  const codex0138 = codex0138Capability.report || {};
1274
1523
  console.log('Codex current compatibility:');
1275
- console.log(` target: rust-v0.142.0`);
1524
+ console.log(` target: ${CURRENT_CODEX_RELEASE_MANIFEST.targetTag}`);
1276
1525
  console.log(` runtime: ${codex.version || 'unknown'}`);
1277
1526
  console.log(` multi-agent mode: ${codexNativeFeatureMatrix.features?.multi_agent_mode?.ok ? 'verified' : 'unverified'}`);
1278
1527
  console.log(` rollout budget: ${codexNativeFeatureMatrix.features?.rollout_budget?.ok ? 'verified' : 'unverified'}`);
@@ -1294,6 +1543,13 @@ async function runDoctor(args = [], root, doctorFix) {
1294
1543
  if (codex0138Doctor?.fixed?.length)
1295
1544
  console.log(` doctor --fix repaired: ${codex0138Doctor.fixed.join(', ')}`);
1296
1545
  console.log(`codex-lb: ${codexLb.ok ? 'ok' : `warning ${codexLb.circuit?.state || 'unknown'}`}`);
1546
+ if (codexLb.tool_output_recovery) {
1547
+ const recovery = codexLb.tool_output_recovery;
1548
+ console.log(` interrupted tool-output recovery: ${recovery.ok ? 'ready' : 'blocked'} (${recovery.observed_version || recovery.status}; minimum ${recovery.minimum_version})`);
1549
+ if (!recovery.ok)
1550
+ for (const action of recovery.operator_actions || [])
1551
+ console.log(` action: ${action}`);
1552
+ }
1297
1553
  if (localModel) {
1298
1554
  console.log('Local LLM:');
1299
1555
  console.log(` enabled: ${localModel.enabled ? 'yes' : 'no'}`);
@@ -1378,9 +1634,9 @@ function buildRuntimeReadiness(zellijReadiness, matrix) {
1378
1634
  ...(zellijStatus === 'headless_available' ? ['MAD can run with --headless; live panes require repair'] : []),
1379
1635
  ...(hookPolicy !== 'approved-only' ? ['hook-derived evidence will not count'] : []),
1380
1636
  ...(agentStrategy !== 'agent_type' ? ['message-role fallback active'] : []),
1381
- ...(multiAgentMode === 'proactive' ? ['Codex 0.142 multi-agent proactive mode available for Naruto-style routes'] : []),
1382
- ...(rolloutBudget === 'codex-0142-shared' ? ['Codex 0.142 rollout budget can be recorded in route proof'] : []),
1383
- ...(researchSource === 'indexed-web-search' ? ['Codex 0.142 indexed web search selected for source-intelligence routes'] : [])
1637
+ ...(multiAgentMode === 'proactive' ? [`Codex ${CURRENT_CODEX_RELEASE_MANIFEST.requiredCliVersion} multi-agent proactive mode available for Naruto-style routes`] : []),
1638
+ ...(rolloutBudget === 'codex-0144-shared' ? [`Codex ${CURRENT_CODEX_RELEASE_MANIFEST.requiredCliVersion} rollout budget can be recorded in route proof`] : []),
1639
+ ...(researchSource === 'indexed-web-search' ? [`Codex ${CURRENT_CODEX_RELEASE_MANIFEST.requiredCliVersion} indexed web search selected for source-intelligence routes`] : [])
1384
1640
  ],
1385
1641
  repair_actions: [...new Set(repairActions)]
1386
1642
  };
@@ -1447,7 +1703,7 @@ function unknownDoctorFlags(args = []) {
1447
1703
  const knownBoolean = new Set([
1448
1704
  '--fix', '--yes', '-y', '--machine-only', '--actual-codex', '--require-actual-codex',
1449
1705
  '--full', '--capabilities', '--repair-codex-app-ui', '--repair-zellij', '--install-homebrew',
1450
- '--repair-native-capabilities', '--repair-codex-native', '--local-only', '--project', '--global',
1706
+ '--repair-native-capabilities', '--repair-codex-native', '--local-only', '--global-only', '--project', '--global',
1451
1707
  '--dry-run', '--json'
1452
1708
  ]);
1453
1709
  const knownValue = new Set(['--profile', '--report-file', '--codex-bin', '--install-scope']);
@@ -6,7 +6,11 @@ export async function run(_command, args = []) {
6
6
  runtime: 'tmux',
7
7
  status: 'removed_runtime',
8
8
  replacement: 'zellij',
9
- operator_actions: ['Use `sks --mad`, `sks team open-zellij`, or `npm run zellij:capability`.']
9
+ operator_actions: [
10
+ 'Use `sks --mad` for the supported SKS Zellij launcher.',
11
+ 'Use `sks zellij status` or `npm run zellij:capability` for runtime diagnostics.',
12
+ 'Use `sks naruto status|subagents|proof` for official subagent missions.'
13
+ ]
10
14
  };
11
15
  if (json)
12
16
  console.log(JSON.stringify(result, null, 2));
@@ -3,6 +3,13 @@ import { bumpProjectVersion, disableVersionGitHook, versioningStatus } from '../
3
3
  import { flag } from '../cli/args.js';
4
4
  import { printJson } from '../cli/output.js';
5
5
  export async function run(_command, args = []) {
6
+ if (flag(args, '--help') || flag(args, '-h')) {
7
+ const usage = 'Usage: sks versioning status|bump [major|minor|patch]|disable [--json]';
8
+ if (flag(args, '--json'))
9
+ return printJson({ ok: true, command: 'versioning', usage, mutated: false });
10
+ console.log(usage);
11
+ return;
12
+ }
6
13
  const root = await projectRoot();
7
14
  const action = args[0] || 'status';
8
15
  const bump = ['major', 'minor', 'patch'].includes(String(args[1] || '')) ? String(args[1]) : null;
@@ -1,12 +1,14 @@
1
1
  import { readZellijSlotTelemetrySnapshot } from '../core/zellij/zellij-slot-telemetry.js';
2
2
  import { renderZellijMonitor } from '../core/zellij/zellij-monitor-renderer.js';
3
3
  import { projectRoot } from '../core/fsx.js';
4
+ import { refreshOfficialSubagentZellijActivity } from '../core/zellij/zellij-official-subagent-activity.js';
4
5
  export async function run(_cmd = 'zellij-monitor-pane', args = []) {
5
6
  const mission = readOption(args, '--mission', 'latest') || 'latest';
6
7
  const root = await projectRoot();
7
8
  const intervalMs = Math.max(500, Number(readOption(args, '--interval-ms', String(process.env.SKS_ZELLIJ_REFRESH_MS || '1000')) || 1000));
8
9
  const once = !flag(args, '--watch');
9
10
  for (;;) {
11
+ await refreshOfficialSubagentZellijActivity({ root, missionId: mission }).catch(() => null);
10
12
  const snapshot = await readZellijSlotTelemetrySnapshot(root, mission).catch(() => null);
11
13
  const text = renderZellijMonitor({ snapshot, missionId: mission, root });
12
14
  process.stdout.write(`\x1b[H${text}\n\x1b[0J`);
@@ -4,13 +4,14 @@ import { projectRoot, readJson } from '../core/fsx.js';
4
4
  import { readZellijSlotTelemetrySnapshot } from '../core/zellij/zellij-slot-telemetry.js';
5
5
  import { bindViewports } from '../core/zellij/zellij-viewport-binder.js';
6
6
  import { renderZellijSlotPaneFromArtifacts } from '../core/zellij/zellij-slot-pane-renderer.js';
7
+ import { refreshOfficialSubagentZellijActivity } from '../core/zellij/zellij-official-subagent-activity.js';
7
8
  import { ANSI_CODES, paint, resolveZellijTheme } from '../core/zellij/zellij-theme.js';
8
9
  let previousBindings = [];
9
10
  export async function run(_cmd = 'zellij-viewport-pane', args = []) {
10
11
  const mission = String(readOption(args, '--mission', 'latest') || 'latest');
11
12
  const index = Math.max(1, Number(readOption(args, '--index', '1')) || 1);
12
13
  const of = Math.max(index, Number(readOption(args, '--of', '4')) || 4);
13
- const intervalMs = Math.max(500, Number(process.env.SKS_ZELLIJ_REFRESH_MS || 1000));
14
+ const intervalMs = Math.max(500, Number(readOption(args, '--interval-ms', String(process.env.SKS_ZELLIJ_REFRESH_MS || '1000')) || 1000));
14
15
  const root = await projectRoot();
15
16
  previousBindings = Array.from({ length: of }, () => null);
16
17
  const once = !flag(args, '--watch');
@@ -24,6 +25,7 @@ export async function run(_cmd = 'zellij-viewport-pane', args = []) {
24
25
  }
25
26
  async function renderViewportFrame(root, mission, index, of) {
26
27
  const theme = resolveZellijTheme();
28
+ await refreshOfficialSubagentZellijActivity({ root, missionId: mission }).catch(() => null);
27
29
  const snapshot = await readZellijSlotTelemetrySnapshot(root, mission).catch(() => null);
28
30
  const missionId = snapshot?.mission_id || mission;
29
31
  const pins = await readJson(pinsPath(root, missionId), { pins: [] });
@@ -53,7 +53,7 @@ async function zellijStatus(root, args, json) {
53
53
  ok: ready || !requireReal,
54
54
  status,
55
55
  version: capability.version || null,
56
- required_for: ['sks --mad', 'sks team open-zellij', 'interactive lane UI'],
56
+ required_for: ['sks --mad', 'interactive MAD lane UI', 'standalone Zellij diagnostics'],
57
57
  blockers: capability.blockers || [],
58
58
  warnings: capability.warnings || [],
59
59
  install_hint: ready ? null : installHint(),