sneakoscope 8.0.2 → 8.0.4

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 (376) hide show
  1. package/README.md +150 -37
  2. package/config/skills-hash-ledger.v1.json +1 -1
  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 +55 -27
  6. package/dist/bin/install.js +6 -32
  7. package/dist/bin/sks-dispatch.js +1 -1
  8. package/dist/cli/args.js +0 -2
  9. package/dist/cli/cli-theme.js +18 -9
  10. package/dist/cli/command-manifest-lite.js +6 -6
  11. package/dist/cli/command-registry.js +6 -6
  12. package/dist/cli/feature-commands.js +9 -7
  13. package/dist/cli/install-helpers-codex-lb-chain.js +198 -7
  14. package/dist/cli/install-helpers-codex-lb-config.js +78 -10
  15. package/dist/cli/install-helpers-install-support.js +9 -6
  16. package/dist/cli/install-helpers.js +101 -49
  17. package/dist/cli/install-tool-helpers.js +2 -82
  18. package/dist/cli/output.js +6 -1
  19. package/dist/cli/router.js +101 -2
  20. package/dist/commands/codex-lb.js +119 -19
  21. package/dist/commands/doctor-profile.js +1 -1
  22. package/dist/commands/doctor.js +727 -144
  23. package/dist/commands/mad-sks.js +1 -5
  24. package/dist/config/skills-manifest.json +4 -2
  25. package/dist/core/agents/agent-codex-cockpit.js +0 -3
  26. package/dist/core/agents/agent-effort-policy.js +5 -5
  27. package/dist/core/agents/agent-janitor.js +0 -20
  28. package/dist/core/agents/agent-orchestrator.js +9 -56
  29. package/dist/core/agents/agent-output-validator.js +2 -3
  30. package/dist/core/agents/agent-patch-schema.js +2 -2
  31. package/dist/core/agents/agent-proof-evidence.js +0 -65
  32. package/dist/core/agents/agent-recursion-guard.js +1 -1
  33. package/dist/core/agents/agent-runner-codex-exec.js +5 -3
  34. package/dist/core/agents/agent-scheduler.js +327 -85
  35. package/dist/core/agents/agent-schema.js +1 -1
  36. package/dist/core/agents/agent-trust-report.js +0 -36
  37. package/dist/core/agents/agent-worker-pipeline.js +0 -1
  38. package/dist/core/agents/fast-mode-policy.js +1 -3
  39. package/dist/core/agents/native-cli-worker-runtime-proof.js +1 -1
  40. package/dist/core/agents/native-cli-worker-runtime.js +69 -647
  41. package/dist/core/agents/native-cli-worker.js +6 -7
  42. package/dist/core/agents/native-worker-backend-router.js +2 -32
  43. package/dist/core/agents/no-subagent-scaling-policy.js +1 -1
  44. package/dist/core/agents/parallel-runtime-proof.js +1 -6
  45. package/dist/core/agents/runtime-proof-summary.js +1 -35
  46. package/dist/core/architecture-hardening/contracts/contracts.js +193 -0
  47. package/dist/core/architecture-hardening/migration/migration.js +111 -0
  48. package/dist/core/architecture-hardening/state/state-service.js +155 -0
  49. package/dist/core/artifact-schemas.js +0 -3
  50. package/dist/core/codex/codex-config-guard.js +238 -52
  51. package/dist/core/codex-adapter.js +5 -3
  52. package/dist/core/codex-app/auxiliary-oauth-policy.js +36 -0
  53. package/dist/core/codex-app/catalog-compat/catalog-service.js +104 -0
  54. package/dist/core/codex-app/child-policy/child-policy.js +35 -0
  55. package/dist/core/codex-app/codex-app-handoff.js +0 -1
  56. package/dist/core/codex-app/codex-hook-lifecycle.js +1 -1
  57. package/dist/core/codex-app/codex-init-deep.js +1 -1
  58. package/dist/core/codex-app/menubar/app-bundle.js +2 -0
  59. package/dist/core/codex-app/menubar/constants.js +14 -1
  60. package/dist/core/codex-app/menubar/global-install.js +288 -0
  61. package/dist/core/codex-app/menubar/installer.js +79 -14
  62. package/dist/core/codex-app/menubar/launch-agent.js +267 -45
  63. package/dist/core/codex-app/menubar/paths.js +3 -0
  64. package/dist/core/codex-app/menubar/rollback.js +55 -7
  65. package/dist/core/codex-app/menubar/status.js +75 -4
  66. package/dist/core/codex-app/provider-child-policy.js +64 -0
  67. package/dist/core/codex-app/provider-mode.js +91 -0
  68. package/dist/core/codex-app/provider-operation-stages.js +20 -0
  69. package/dist/core/codex-app/provider-session-policy.js +85 -0
  70. package/dist/core/codex-app/session-policy/session-pinning.js +68 -0
  71. package/dist/core/codex-app.js +3 -2
  72. package/dist/core/codex-control/codex-0139-image-path-real-probe.js +3 -1
  73. package/dist/core/codex-control/codex-0139-web-search-probe.js +3 -1
  74. package/dist/core/codex-control/codex-app-server-runtime-env.js +13 -4
  75. package/dist/core/codex-control/codex-app-server-v2-client.js +3 -3
  76. package/dist/core/codex-control/codex-control-proof.js +0 -1
  77. package/dist/core/codex-control/codex-task-runner.js +1 -4
  78. package/dist/core/codex-exec-output-schema.js +4 -1
  79. package/dist/core/codex-lb/codex-lb-env.js +63 -72
  80. package/dist/core/codex-lb/codex-lb-setup.js +15 -2
  81. package/dist/core/codex-lb/desktop-bridge/header-policy.js +6 -0
  82. package/dist/core/codex-lb/desktop-bridge/http-forward.js +48 -6
  83. package/dist/core/codex-lb/desktop-bridge/security.js +134 -0
  84. package/dist/core/codex-lb/desktop-bridge/server.js +9 -3
  85. package/dist/core/codex-lb/desktop-bridge/state.js +26 -6
  86. package/dist/core/codex-lb/desktop-bridge/types.js +1 -0
  87. package/dist/core/codex-lb/desktop-center-credentials.js +517 -58
  88. package/dist/core/codex-lb/desktop-controller.js +177 -56
  89. package/dist/core/codex-lb/desktop-service.js +179 -40
  90. package/dist/core/codex-lb/legacy-migration.js +1 -3
  91. package/dist/core/codex-lb/native-openai-transport/transport.js +68 -0
  92. package/dist/core/codex-lb/probes/cli-image-tool-probe.js +1 -1
  93. package/dist/core/codex-lb/provider-routing/provider-router.js +58 -0
  94. package/dist/core/codex-lb/routing-truth.js +327 -0
  95. package/dist/core/codex-native/codex-native-feature-broker.js +4 -0
  96. package/dist/core/codex-native/codex-native-pattern-analysis.js +1 -2
  97. package/dist/core/codex-native/core-skill-manifest.js +1 -1
  98. package/dist/core/codex-plugins/codex-plugin-json.js +26 -6
  99. package/dist/core/codex-plugins/codex-plugin-repair.js +32 -6
  100. package/dist/core/commands/basic-cli.js +9 -7
  101. package/dist/core/commands/computer-use-command.js +1 -1
  102. package/dist/core/commands/image-ux-review-command.js +16 -9
  103. package/dist/core/commands/install-package-command.js +105 -0
  104. package/dist/core/commands/intent-normalization/normalizer.js +96 -0
  105. package/dist/core/commands/mad-sks-command.js +23 -274
  106. package/dist/core/commands/mad-sks-headless.js +11 -30
  107. package/dist/core/commands/naruto-command.js +0 -25
  108. package/dist/core/commands/qa-loop-command.js +104 -22
  109. package/dist/core/commands/remote-command.js +2 -2
  110. package/dist/core/commands/research-command.js +10 -5
  111. package/dist/core/commands/telegram-command.js +407 -0
  112. package/dist/core/config-adopt/config-adopt-command.js +35 -0
  113. package/dist/core/config-adopt/config-adopt.js +346 -0
  114. package/dist/core/config-adopt/index.js +3 -0
  115. package/dist/core/doctor/command-alias-cleanup.js +4 -1
  116. package/dist/core/doctor/current-project-guidance-nested.js +37 -6
  117. package/dist/core/doctor/current-project-guidance.js +15 -9
  118. package/dist/core/doctor/doctor-dirty-planner.js +1 -4
  119. package/dist/core/doctor/doctor-readiness-matrix.js +15 -18
  120. package/dist/core/doctor/retired-managed-residue-private.js +4 -3
  121. package/dist/core/doctor/retired-managed-residue-runtime.js +2 -2
  122. package/dist/core/doctor/skill-legacy-surface.js +11 -10
  123. package/dist/core/doctor/sks-menubar-doctor.js +4 -0
  124. package/dist/core/evaluation.js +0 -19
  125. package/dist/core/evidence/v2/evidence-key.js +105 -0
  126. package/dist/core/feature-fixtures.js +12 -7
  127. package/dist/core/feature-registry.js +52 -21
  128. package/dist/core/hooks-runtime/hook-context.js +9 -0
  129. package/dist/core/hooks-runtime/managed-skill-admission.js +54 -4
  130. package/dist/core/hooks-runtime/official-subagent-lifecycle.js +69 -52
  131. package/dist/core/hooks-runtime/stop-finalization.js +226 -0
  132. package/dist/core/hooks-runtime/stop-repeat-guard.js +21 -2
  133. package/dist/core/hooks-runtime/subagent-skill-availability-contract.js +2 -2
  134. package/dist/core/hooks-runtime/subagent-skill-availability-evidence.js +3 -3
  135. package/dist/core/hooks-runtime/subagent-skill-availability-guards.js +43 -5
  136. package/dist/core/hooks-runtime/subagent-skill-availability.js +64 -30
  137. package/dist/core/hooks-runtime/subagent-stop-hook.js +15 -2
  138. package/dist/core/hooks-runtime.js +179 -212
  139. package/dist/core/image/reference-evidence/reference-registry.js +145 -0
  140. package/dist/core/image-ux-review/imagegen-adapter.js +21 -9
  141. package/dist/core/image-ux-review/reference-policy/reference-policy.js +9 -0
  142. package/dist/core/imagegen/codex-lb-imagegen-target.js +8 -0
  143. package/dist/core/imagegen/imagegen-capability.js +59 -2
  144. package/dist/core/imagegen/require-imagegen.js +2 -2
  145. package/dist/core/init/skills.js +17 -3
  146. package/dist/core/init.js +3 -3
  147. package/dist/core/install/installed-package-smoke.js +23 -5
  148. package/dist/core/json/canonical.js +9 -0
  149. package/dist/core/locks/file-lock.js +0 -1
  150. package/dist/core/loops/loop-continuation-enforcer.js +65 -7
  151. package/dist/core/loops/loop-decomposer.js +0 -1
  152. package/dist/core/loops/loop-gate-runner.js +65 -4
  153. package/dist/core/loops/loop-gate-selector.js +0 -2
  154. package/dist/core/loops/loop-proof-validation.js +38 -0
  155. package/dist/core/loops/loop-risk-classifier.js +1 -1
  156. package/dist/core/loops/loop-runtime.js +14 -2
  157. package/dist/core/loops/loop-scheduler.js +7 -2
  158. package/dist/core/loops/loop-worker-runtime.js +0 -15
  159. package/dist/core/loops/loop-worktree-runtime.js +52 -4
  160. package/dist/core/managed-assets/managed-assets-manifest.js +14 -14
  161. package/dist/core/naruto/hardware-capacity-probe.js +9 -6
  162. package/dist/core/naruto/naruto-active-pool.js +2 -14
  163. package/dist/core/naruto/naruto-concurrency-governor.js +71 -31
  164. package/dist/core/naruto/naruto-loop-worker-router.js +0 -2
  165. package/dist/core/naruto/naruto-verification-dag.js +0 -1
  166. package/dist/core/naruto/naruto-write-e2e.js +1 -2
  167. package/dist/core/naruto/resource-pressure-monitor.js +0 -4
  168. package/dist/core/observability/architecture-hardening/safe-projection.js +65 -0
  169. package/dist/core/perf/import-graph-budget.js +0 -1
  170. package/dist/core/perf/release-latency-slo.js +3 -2
  171. package/dist/core/preflight/parallel-preflight-engine.js +2 -15
  172. package/dist/core/product-design-app-server.js +13 -1
  173. package/dist/core/proof/fake-real-proof-policy.js +2 -17
  174. package/dist/core/proof/route-proof-gate.js +2 -10
  175. package/dist/core/proof/route-proof-policy.js +1 -1
  176. package/dist/core/proof/runtime-evidence-policy.js +185 -0
  177. package/dist/core/proof/runtime-truth-matrix.js +64 -39
  178. package/dist/core/proof/validation.js +27 -11
  179. package/dist/core/provider/provider-context.js +18 -2
  180. package/dist/core/providers/openrouter/openrouter-account.js +3 -2
  181. package/dist/core/python-tools/python-tool-runner.js +1 -1
  182. package/dist/core/qa-loop/qa-execution-control.js +57 -0
  183. package/dist/core/questions.js +1 -1
  184. package/dist/core/release/extreme-parallel-scheduler.js +0 -3
  185. package/dist/core/release/gate-manifest.js +3 -7
  186. package/dist/core/release/gate-pack-manifest.js +3 -7
  187. package/dist/core/release/package-size-budget.js +2 -2
  188. package/dist/core/release/physical-release-gates.js +189 -0
  189. package/dist/core/release/publish-preflight.js +113 -0
  190. package/dist/core/release/release-gate-affected-selector.js +0 -2
  191. package/dist/core/release/release-gate-batch-runner.js +1 -1
  192. package/dist/core/release/release-gate-node.js +0 -1
  193. package/dist/core/release/release-gate-resource-governor.js +0 -1
  194. package/dist/core/release/release-pack-receipt.js +5 -8
  195. package/dist/core/release/release-real-contract.js +0 -6
  196. package/dist/core/release/resource-class-budget.js +0 -1
  197. package/dist/core/release/stage-publish.js +178 -36
  198. package/dist/core/research/research-adversarial-review.js +103 -9
  199. package/dist/core/research.js +1 -1
  200. package/dist/core/retention.js +0 -1
  201. package/dist/core/routes/constants.js +1 -1
  202. package/dist/core/routes/diagnostic-allowlist.js +0 -1
  203. package/dist/core/routes/dollar-manifest-lite.js +1 -1
  204. package/dist/core/routes.js +46 -15
  205. package/dist/core/runtime/execution-control.js +226 -0
  206. package/dist/core/runtime/progress-recovery/progress-recovery.js +89 -0
  207. package/dist/core/runtime/task-profile.js +10 -4
  208. package/dist/core/runtime/verification-budget.js +10 -1
  209. package/dist/core/safety/intent-contract/intent-contract.js +94 -0
  210. package/dist/core/safety/mutation-guard.js +0 -2
  211. package/dist/core/safety/mutation-ledger.js +0 -2
  212. package/dist/core/safety/requested-scope-contract.js +0 -0
  213. package/dist/core/search-visibility/discovery.js +1 -1
  214. package/dist/core/search-visibility/index.js +12 -0
  215. package/dist/core/search-visibility/verifier.js +112 -3
  216. package/dist/core/security/private-credential-file.js +209 -0
  217. package/dist/core/session/project-namespace.js +0 -5
  218. package/dist/core/skills/skill-agent-metadata.js +1 -3
  219. package/dist/core/strategy/adhd-orchestrating-gate.js +0 -1
  220. package/dist/core/subagents/agent-catalog.js +19 -34
  221. package/dist/core/subagents/model-policy.js +65 -24
  222. package/dist/core/subagents/naruto-help-contract.js +8 -8
  223. package/dist/core/subagents/naruto-host-credentials.js +13 -0
  224. package/dist/core/subagents/official-subagent-config.js +16 -6
  225. package/dist/core/subagents/official-subagent-preparation.js +35 -16
  226. package/dist/core/subagents/official-subagent-prompt.js +7 -7
  227. package/dist/core/subagents/official-subagent-runner.js +27 -4
  228. package/dist/core/subagents/role-model-preferences.js +1 -1
  229. package/dist/core/subagents/thread-budget.js +19 -12
  230. package/dist/core/subagents/wave-lifecycle.js +18 -6
  231. package/dist/core/telegram/access.js +58 -0
  232. package/dist/core/telegram/client.js +157 -0
  233. package/dist/core/telegram/confirmation.js +37 -0
  234. package/dist/core/telegram/doctor.js +154 -0
  235. package/dist/core/telegram/index.js +9 -0
  236. package/dist/core/telegram/keychain.js +317 -0
  237. package/dist/core/telegram/liveness.js +118 -0
  238. package/dist/core/telegram/poller.js +90 -0
  239. package/dist/core/telegram/redaction.js +15 -0
  240. package/dist/core/telegram/state-lock.js +416 -0
  241. package/dist/core/telegram/types.js +1 -0
  242. package/dist/core/text/strings.js +3 -0
  243. package/dist/core/triwiki/context-graph/store/evidence-write-lock.js +29 -0
  244. package/dist/core/triwiki/context-graph/store/fragment-cache.js +24 -0
  245. package/dist/core/triwiki/context-graph/store/snapshot-store.js +69 -21
  246. package/dist/core/triwiki/triwiki-gate-impact-map.js +2 -2
  247. package/dist/core/triwiki/triwiki-module-card.js +1 -2
  248. package/dist/core/update/installed-cli-resolution.js +170 -0
  249. package/dist/core/update/update-diagnostics.js +52 -0
  250. package/dist/core/update/update-migration-state.js +30 -12
  251. package/dist/core/update/update-operation.js +2 -1
  252. package/dist/core/update/update-stage-diagnostics.js +38 -0
  253. package/dist/core/update/update-status.js +2 -9
  254. package/dist/core/update-check.js +279 -91
  255. package/dist/core/version.js +1 -1
  256. package/dist/native/sks-menubar/Sources/AppDelegate.swift +19 -1
  257. package/dist/native/sks-menubar/Sources/AppIdentity.swift +7 -0
  258. package/dist/native/sks-menubar/Sources/ControlCenterWindowController.swift +6 -2
  259. package/dist/native/sks-menubar/Sources/OperationCoordinator.swift +159 -92
  260. package/dist/native/sks-menubar/Sources/OperationModels.swift +389 -0
  261. package/dist/native/sks-menubar/Sources/OverviewViewController.swift +57 -0
  262. package/dist/native/sks-menubar/Sources/ProcessClient.swift +3 -1
  263. package/dist/native/sks-menubar/Sources/ProvidersConnectTest.swift +115 -0
  264. package/dist/native/sks-menubar/Sources/ProvidersFastMode.swift +17 -0
  265. package/dist/native/sks-menubar/Sources/ProvidersMultiProvider.swift +3 -0
  266. package/dist/native/sks-menubar/Sources/ProvidersOpenRouter.swift +58 -17
  267. package/dist/native/sks-menubar/Sources/ProvidersReliability.swift +302 -0
  268. package/dist/native/sks-menubar/Sources/ProvidersRoleModels.swift +5 -0
  269. package/dist/native/sks-menubar/Sources/ProvidersRoutingTruth.swift +190 -0
  270. package/dist/native/sks-menubar/Sources/ProvidersViewController.swift +158 -126
  271. package/dist/native/sks-menubar/Sources/RemoteCodingViewController.swift +462 -26
  272. package/dist/native/sks-menubar/Sources/SKSKeychainStore.swift +344 -0
  273. package/dist/native/sks-menubar/Sources/SecureProcessEnvelope.swift +27 -0
  274. package/dist/native/sks-menubar/Sources/SingletonInstanceGuard.swift +328 -0
  275. package/dist/native/sks-menubar/Sources/StatusItemController.swift +10 -2
  276. package/dist/native/sks-menubar/Sources/TelegramPrivateFileStore.swift +498 -0
  277. package/dist/native/sks-menubar/Sources/TelegramPrivateFileSupport.swift +236 -0
  278. package/dist/native/sks-menubar/Sources/TelegramProcessGateway.swift +454 -0
  279. package/dist/native/sks-menubar/Sources/TelegramRuntimeSupport.swift +56 -0
  280. package/dist/native/sks-menubar/Sources/TelegramStateLock.swift +448 -0
  281. package/dist/native/sks-menubar/Sources/TelegramSupport.swift +187 -0
  282. package/dist/native/sks-menubar/Sources/TelegramTransport.swift +499 -0
  283. package/dist/native/sks-menubar/Sources/main.swift +15 -1
  284. package/dist/scripts/all-feature-deep-completion-check.js +5 -1
  285. package/dist/scripts/check-publish-tag.js +56 -0
  286. package/dist/scripts/codex-lb-fast-mode-truth-check.js +10 -3
  287. package/dist/scripts/codex-lb-fast-ui-preservation-check.js +12 -3
  288. package/dist/scripts/codex-lb-gpt56-fast-profile-check.js +4 -2
  289. package/dist/scripts/codex-native-agent-role-content-check.js +3 -3
  290. package/dist/scripts/codex-native-gate-lib.js +14 -7
  291. package/dist/scripts/current-command-surface-check.js +7 -7
  292. package/dist/scripts/current-surface-update-e2e-check.js +4 -3
  293. package/dist/scripts/current-upgrade-matrix-check.js +5 -24
  294. package/dist/scripts/docs-truthfulness-check.js +17 -13
  295. package/dist/scripts/gate-lib.js +0 -2
  296. package/dist/scripts/gate-policy-audit-check.js +3 -2
  297. package/dist/scripts/harness-benchmark-check.js +1 -1
  298. package/dist/scripts/init-deep-backup-retention-check.js +1 -1
  299. package/dist/scripts/lib/codex-sdk-gate-lib.js +1 -2
  300. package/dist/scripts/loop-directive-check-lib.js +28 -38
  301. package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +14 -180
  302. package/dist/scripts/mad-sks-launch-sql-plane-boundary-check.js +2 -11
  303. package/dist/scripts/official-subagent-workflow-check.js +1 -1
  304. package/dist/scripts/packlist-performance-check.js +1 -2
  305. package/dist/scripts/prepublish-release-check-or-fast.js +32 -0
  306. package/dist/scripts/publish-preflight.js +12 -0
  307. package/dist/scripts/release-affected-selector-check.js +2 -2
  308. package/dist/scripts/release-gate-batch-runner-check.js +2 -2
  309. package/dist/scripts/release-metadata-check.js +8 -12
  310. package/dist/scripts/release-real-check.js +2 -54
  311. package/dist/scripts/runtime-domain-gate-lib.js +2 -96
  312. package/dist/scripts/runtime-proof-summary-check.js +2 -6
  313. package/dist/scripts/search-visibility-gate-lib.js +0 -1
  314. package/dist/scripts/sks-cli-gate-lib.js +1 -1
  315. package/dist/scripts/typed-routing-gate-lib.js +7 -59
  316. package/docs/demo.tape +1 -1
  317. package/infra-harness-gates.json +1 -1456
  318. package/package.json +10 -7
  319. package/release-gates.v2.json +0 -1
  320. package/schemas/agents/parallel-runtime-proof.schema.json +0 -2
  321. package/schemas/codex/agent-result.schema.json +0 -6
  322. package/schemas/naruto/naruto-concurrency-governor.schema.json +1 -3
  323. package/schemas/release/release-gate-node.schema.json +1 -1
  324. package/dist/commands/zellij-lane.js +0 -22
  325. package/dist/commands/zellij-monitor-pane.js +0 -26
  326. package/dist/commands/zellij-slot-column-anchor.js +0 -22
  327. package/dist/commands/zellij-slot-pane.js +0 -80
  328. package/dist/commands/zellij-viewport-pane.js +0 -57
  329. package/dist/commands/zellij.js +0 -422
  330. package/dist/core/agents/agent-runner-zellij.js +0 -164
  331. package/dist/core/agents/agent-slot-pane-binding-proof.js +0 -96
  332. package/dist/core/agents/parallel-write-fixture.js +0 -305
  333. package/dist/core/agents/worker-pane-communication-contract.js +0 -100
  334. package/dist/core/agents/zellij-lane-supervisor.js +0 -428
  335. package/dist/core/agents/zellij-right-lane-cockpit.js +0 -66
  336. package/dist/core/doctor/doctor-zellij-repair.js +0 -40
  337. package/dist/core/ops/upgrade-migration-fixtures.js +0 -119
  338. package/dist/core/proof/route-finalizer-fixtures.js +0 -21
  339. package/dist/core/zellij/homebrew-policy.js +0 -43
  340. package/dist/core/zellij/zellij-capability.js +0 -126
  341. package/dist/core/zellij/zellij-clipboard-config.js +0 -52
  342. package/dist/core/zellij/zellij-command.js +0 -149
  343. package/dist/core/zellij/zellij-fake-adapter.js +0 -186
  344. package/dist/core/zellij/zellij-lane-renderer.js +0 -706
  345. package/dist/core/zellij/zellij-lane-runtime.js +0 -189
  346. package/dist/core/zellij/zellij-launcher.js +0 -268
  347. package/dist/core/zellij/zellij-layout-builder.js +0 -191
  348. package/dist/core/zellij/zellij-monitor-renderer.js +0 -52
  349. package/dist/core/zellij/zellij-official-subagent-activity.js +0 -526
  350. package/dist/core/zellij/zellij-official-subagent-telemetry.js +0 -258
  351. package/dist/core/zellij/zellij-pane-proof.js +0 -226
  352. package/dist/core/zellij/zellij-right-column-manager.js +0 -308
  353. package/dist/core/zellij/zellij-screen-proof.js +0 -120
  354. package/dist/core/zellij/zellij-self-heal-types.js +0 -44
  355. package/dist/core/zellij/zellij-self-heal.js +0 -408
  356. package/dist/core/zellij/zellij-slot-column-anchor.js +0 -304
  357. package/dist/core/zellij/zellij-slot-pane-renderer.js +0 -521
  358. package/dist/core/zellij/zellij-slot-telemetry.js +0 -384
  359. package/dist/core/zellij/zellij-theme.js +0 -66
  360. package/dist/core/zellij/zellij-ui-mode.js +0 -34
  361. package/dist/core/zellij/zellij-update.js +0 -348
  362. package/dist/core/zellij/zellij-viewport-binder.js +0 -61
  363. package/dist/core/zellij/zellij-worker-pane-manager.js +0 -881
  364. package/dist/core/zellij/zellij-worker-pane-summary.js +0 -64
  365. package/dist/native/sks-menubar/Tests/AppRuntimeTestSupport.swift +0 -26
  366. package/dist/native/sks-menubar/Tests/OperationCoordinatorTests.swift +0 -174
  367. package/dist/native/sks-menubar/Tests/ProcessClientTests.swift +0 -20
  368. package/dist/native/sks-menubar/Tests/ProvidersViewControllerTests.swift +0 -142
  369. package/dist/scripts/zellij-pane-proof-check.js +0 -88
  370. package/dist/scripts/zellij-real-session-cleanup-check.js +0 -139
  371. package/dist/scripts/zellij-real-session-launch-check.js +0 -126
  372. package/dist/scripts/zellij-screen-proof-check.js +0 -43
  373. package/schemas/zellij/zellij-right-column-state.schema.json +0 -40
  374. package/schemas/zellij/zellij-slot-telemetry.schema.json +0 -89
  375. package/schemas/zellij/zellij-worker-pane.schema.json +0 -53
  376. package/scripts/build-clean-atomic.mjs +0 -323
package/README.md CHANGED
@@ -22,7 +22,7 @@ Proof-first orchestration for Codex CLI, ChatGPT Desktop, AI coding agents, mult
22
22
  Sneakoscope Codex (`sks`) is an open-source trust layer for Codex CLI and ChatGPT Desktop. It coordinates bounded AI coding agents, records machine-verifiable evidence, preserves project memory, and blocks release claims that are not supported by current tests or artifacts. Search visibility outcomes are measured separately; SKS does not promise rankings or traffic.
23
23
  <!-- END SKS SEARCH VISIBILITY MARKETING -->
24
24
 
25
- This README documents package **SKS 8.0.2** — its own identity, read from `package.json` and subject to release-gate verification, not advice about what to install.
25
+ This README documents package **SKS 8.0.4** — its own identity, read from `package.json` and subject to release-gate verification, not advice about what to install.
26
26
 
27
27
  Use the official latest stable SKS and Codex CLI releases. SKS stays version-agnostic: older hosts keep working where capabilities allow, while Menu Bar / Center induce updates to the latest stable build. Run `sks update-check` for what is installed and read the capability report for what is actually supported — feature availability is decided by capability probes, not by a version number printed in a document. It resolves managed SKS skills from the authoritative global install, preserves a runnable Naruto child slot when `max_threads=2`, and keeps Menu Bar repair transactional so stamped generations remain verifiable. Naruto uses stable opt-in multi-agent V2 when the host exposes it. Local code search is mode-separated (`sks search files|text|structure|symbol|context`); `context` is answered by the compiled TriWiki Context Graph with evidence paths rather than lexical guessing — see [docs/architecture/context-graph.md](docs/architecture/context-graph.md) and [docs/architecture/search-engine-target.md](docs/architecture/search-engine-target.md). See [CHANGELOG.md](CHANGELOG.md).
28
28
 
@@ -32,7 +32,7 @@ Use the official latest stable SKS and Codex CLI releases. SKS stays version-agn
32
32
  | --- | --- |
33
33
  | Overview mixed Menu Bar, installed SKS, and cached registry versions | Each value is labeled by authority, stale or unavailable probes remain explicit, and Refresh forces a bounded update-status refresh. |
34
34
  | Naruto stopped creating children after its first wave | The root parent records settled waves, recovers open-thread capacity, rescans the ready DAG, and can launch later direct-child waves under the same workflow run. |
35
- | Most delegated work drifted to Sol Max | Read-heavy discovery uses Terra Medium, ordinary implementation uses Sol High, and Sol Max is reserved for focused high-risk or final judgment slices. |
35
+ | Most delegated work drifted to Sol Max | Read-heavy discovery uses Terra Max, ordinary implementation uses Sol High, and Sol Max is reserved for focused high-risk or final judgment slices. |
36
36
  | Goal creation started a second SKS-owned mission and loop | Codex native Goal is the only persisted owner; create/edit objectives are detailed and bounded, while SKS writes no Goal state or fallback loop. |
37
37
  | Global instructions accumulated duplicated route rules and forced synthetic tests | One Core Engineering Directive anchors all work, route-specific details stay with their route, and verification targets normal behavior, meaningful boundaries, and plausible failures. |
38
38
  | GUI-launched status commands could hang or contaminate real update state during tests | Menu Bar commands use a safe HOME cwd, closed stdin, and timeouts; update fixtures use isolated HOME and cache paths. |
@@ -40,10 +40,10 @@ Use the official latest stable SKS and Codex CLI releases. SKS stays version-agn
40
40
  ## Install In One Command
41
41
 
42
42
  ```sh
43
- npx sneakoscope install --yes
43
+ npm exec --yes --package=sneakoscope@latest -- sneakoscope install --yes
44
44
  ```
45
45
 
46
- That installs or repairs SKS, runs `sks doctor --fix`, and prepares the Codex App integration. The plugin marketplace path is also prepared through `plugins/sks/.codex-plugin/plugin.json`.
46
+ The explicit `@latest` tag prevents a local package or stale npx cache from silently choosing an older installer. The installer verifies the registry tag, installs the exact version carried by that package, runs the exact installed entrypoint's `doctor --fix`, and succeeds only when the first `sks` on `PATH` targets that entrypoint and reports the same version. An older or same-version shadow prefix that still wins is reported as a blocker with a recoverable prior-version command. The plugin marketplace path is also prepared through `plugins/sks/.codex-plugin/plugin.json`.
47
47
 
48
48
  For package-managed installs:
49
49
 
@@ -54,20 +54,124 @@ commands. To intentionally run the legacy bootstrap during installation, set
54
54
  stronger safety override.
55
55
 
56
56
  ```sh
57
- npm i -g sneakoscope
58
- sks bootstrap --yes
59
- sks doctor --fix
57
+ npm install --global sneakoscope@latest
58
+ node "$(npm root --global)/sneakoscope/dist/bin/sks.js" bootstrap --yes
59
+ node "$(npm root --global)/sneakoscope/dist/bin/sks.js" doctor --fix
60
+ sks --version
60
61
  ```
61
62
 
63
+ The two setup calls intentionally use the entrypoint under the npm global root.
64
+ The final `sks --version` must report that same package version; if it does not,
65
+ an older prefix still precedes the new npm bin directory on `PATH`.
66
+
62
67
  The SKS menu bar shows the installed Codex CLI version and latest known version. An `⬆` marker appears when an update is available; **Update Codex CLI Now** uses native `codex update` when the selected CLI advertises it, otherwise it verifies the installation provenance and invokes the matching official standalone-installer, npm-global, or Homebrew-cask update method. If the method cannot be verified, it fails closed instead of guessing. Control Center updates keep the active UI alive until the operation receipt is durable, then relaunch the companion out of process. This is an explicit global tool mutation. **Run sks doctor --fix** performs the global-only menu repair flow without treating the user's home directory as a project.
63
68
 
64
69
  **Manage MCP Servers…** opens a native macOS manager for the global `~/.codex/config.toml`. It can add remote URL or local stdio servers, enable/disable existing entries, remove entries after confirmation, and refresh the current state. Mutations are lock-protected, backed up, TOML-validated, and written with mode `0600`; configured environment values and command arguments are never rendered in the list. Changes apply to new Codex sessions. The same plumbing is available through the canonical `sks mcp config list|get|add|edit|duplicate|enable|disable|remove|test|login|logout|backups|restore` surface for diagnostics and automation.
65
70
 
66
- ### Remote coding: Orca (external option)
67
-
68
- SKS no longer provides a first-party Telegram coding bridge. If you want to monitor or steer coding work from another device, consider [Orca](https://github.com/stablyai/orca), an external MIT-licensed project that can launch Codex in a worktree. Orca is not bundled with SKS, supported by SKS, or required to use SKS; SKS adds no Orca dependency or configuration.
69
-
70
- Orca's mobile companion and Remote Orca Servers are beta. Their desktop/server runtime remains the source of truth and must keep running; remote access may require a private LAN or Tailscale path. See [the Orca migration and remote-coding guide](docs/orca-remote-coding.md) for scope, setup links, and former Telegram-user migration notes.
71
+ ### Remote control: Telegram BotFather integration
72
+
73
+ SKS 8.0.4 provides a first-party Telegram Bot API transport for the existing
74
+ typed remote-control contract. A bounded outbound `getUpdates` loop runs only
75
+ inside the resident Menu Bar process: it opens no inbound port, tunnel, daemon,
76
+ or public webhook.
77
+
78
+ #### BotFather setup
79
+
80
+ 1. In Telegram, open **@BotFather**, send `/newbot`, and complete its name and
81
+ username prompts. BotFather returns the bot token. The token authorizes the
82
+ bot against the Bot API; treat it like a password. Do not place it in a
83
+ shell command, config file, commit, issue, or screenshot.
84
+ 2. On the Mac that runs SKS, open **SKS Center → Remote Coding**, choose
85
+ **Enter Bot Token…**, and paste the token into the native secure-input
86
+ sheet. SKS verifies `getMe` and the bot's webhook state before it stores
87
+ anything. If a webhook is active, the token is not retained and Center asks
88
+ for explicit consent before removing that webhook without dropping pending
89
+ updates.
90
+
91
+ For a terminal-only setup, use a no-echo `zsh` prompt and pipe the token on
92
+ standard input; direct interactive TTY input is intentionally rejected:
93
+
94
+ ```sh
95
+ IFS= read -r -s "sks_telegram_token?BotFather token: "
96
+ printf '\n'
97
+ printf '%s\n' "$sks_telegram_token" | sks telegram setup --token-stdin
98
+ unset sks_telegram_token
99
+ ```
100
+
101
+ If that command reports an existing webhook, review the delivery change and
102
+ repeat the same no-echo flow with `--remove-webhook`. This is explicit
103
+ consent to stop the old webhook endpoint; SKS always requests
104
+ `drop_pending_updates=false`. The token travels only on standard input, is
105
+ verified with Telegram before storage, is never printed, and is stored in
106
+ the owner-only user secret file. A token supplied by `TELEGRAM_BOT_TOKEN` or
107
+ `SKS_TELEGRAM_BOT_TOKEN` is also supported for an operator-managed runtime,
108
+ but environment values can be exposed to other local processes and are not
109
+ the recommended setup path. SKS Center restarts its resident poller after a
110
+ successful save; if that restart reports a blocker, resolve it before
111
+ generating or sending a pairing code.
112
+ 3. For terminal-only setup, restart the resident Menu Bar process immediately
113
+ after setup (and after any webhook removal or token rotation). The poller
114
+ must be running before it can consume and confirm `/start`:
115
+
116
+ ```sh
117
+ sks menubar restart
118
+ ```
119
+
120
+ There is deliberately no `sks telegram start` or `sks telegram stop`:
121
+ Telegram is not a separate daemon. SKS Center exposes **Start**, **Stop**,
122
+ and **Restart** for the poller owned by the current resident Menu Bar
123
+ process. **Stop** preserves the token and pairings and lasts only until that
124
+ companion is relaunched. To keep Telegram stopped across relaunches, stop or
125
+ uninstall the entire Menu Bar companion; that also disables its other
126
+ resident features.
127
+ 4. Issue a short-lived pairing code with `sks telegram pair`:
128
+
129
+ ```sh
130
+ sks telegram pair --json
131
+ ```
132
+
133
+ From the one intended **private** chat, send the returned
134
+ `/start <pairing-code>` message to the bot before it expires. Only that
135
+ private chat/user pair is enrolled. Unpaired chats receive no reply.
136
+ 5. After the bot confirms pairing, send a typed command such as:
137
+
138
+ ```text
139
+ /sks status {}
140
+ ```
141
+
142
+ The command grammar is `/sks <command> <JSON object>`; the JSON object may
143
+ be omitted when the command needs no options. The allowlist is `gates`,
144
+ `paths`, `pipeline`, `proof`, `search`, `stats`, `status`, `stop-gate`,
145
+ `trust`, `update-check`, and `validate-artifacts`. If SKS replies with a
146
+ short-lived confirmation nonce, send the exact `/confirm <nonce>` message
147
+ once before it expires. Arbitrary prose and free-form shell commands are not
148
+ executed.
149
+ 6. Confirm runtime evidence:
150
+
151
+ ```sh
152
+ sks telegram status --json
153
+ sks telegram doctor --json
154
+ sks doctor
155
+ ```
156
+
157
+ `status` reads the secret-free liveness receipt. `telegram doctor` evaluates
158
+ token presence, the bot identity, pairing, audit health, poller state, and
159
+ liveness. A ready result requires a real `getMe` check, a paired private
160
+ chat, and a running poller; a configured token alone is not readiness.
161
+
162
+ The transport accepts only allowlisted typed commands. It never accepts
163
+ free-form shell input; higher-risk commands require actor-bound two-step
164
+ confirmation and an audit receipt. Telegram long polling and a webhook cannot
165
+ be active together. If Doctor reports a webhook/409 conflict, enter the token
166
+ again in SKS Center and approve webhook removal, or repeat the no-echo CLI
167
+ setup with `--remove-webhook`, then restart the poller. SKS never drops pending
168
+ updates during that transition.
169
+
170
+ If a token may have leaked, revoke/regenerate it in BotFather, enter the
171
+ replacement through SKS Center (or the no-echo CLI flow), and restart the
172
+ poller. Token rotation and BotFather credential changes are external actions;
173
+ SKS does not publish packages, revoke tokens, or make any other irreversible
174
+ remote change on the operator's behalf.
71
175
 
72
176
  ## The Front Door
73
177
 
@@ -79,28 +183,37 @@ Orca's mobile companion and Remote Orca Servers are beta. Their desktop/server r
79
183
  | `$sks-mad-sks` / `sks mad-sks` | Single high-risk MAD route for scoped permission widening plus SQL-plane execution, including read-back proof and profile closure. |
80
184
  | `$sks-review` / `sks review --staged` | Reviews diffs with `evidence: machine` findings sorted above `evidence: llm`. |
81
185
 
82
- `sks --mad` now prioritizes the interactive ready path: independent macOS config probes run concurrently, failed read-only preflight does not repeat mutation-capable repair inspection, verified Zellij/codex-lb evidence is reused, and the remote Zellij update lookup runs after the UI is ready. Existing unreadable or malformed config still blocks safely; pass an explicit repair flag such as `--repair-config` when repair is intended.
186
+ `sks --mad` now prioritizes the interactive ready path: independent macOS config probes run concurrently, failed read-only preflight does not repeat mutation-capable repair inspection, and verified Codex evidence is reused. Existing unreadable or malformed config still blocks safely; pass an explicit repair flag such as `--repair-config` when repair is intended.
83
187
 
84
188
  ## Naruto Workflow
85
189
 
86
- `$sks-naruto` and `sks naruto run "task" --agents 8 --max-threads 12` use Codex official subagents. Standalone and Codex App tasks that request project-host database, spreadsheet, or render tools require the non-persistent `--trusted-project` flag after the operator reviews the checkout; an App session ID scopes evidence but does not grant trust. The parent is GPT-5.6 Sol Max. Tiny mechanical `worker` slices use Luna Max; ordinary UI, logic, backend, and native coding uses Sol High; review, testing, debugging, architecture, integration, security, database, research, release, and other judgment-sensitive work uses Sol Max; long-context scans and direct Computer Use, Browser/Chrome, or image-generation execution uses Terra Medium. Mixed execution/judgment work is split when possible, and unsplittable judgment defaults to Sol Max.
190
+ `$sks-naruto` and `sks naruto run "task" --agents 8 --max-threads 12` use Codex official subagents. Standalone and Codex App tasks that request project-host database, spreadsheet, or render tools require the non-persistent `--trusted-project` flag after the operator reviews the checkout; an App session ID scopes evidence but does not grant trust. The parent is GPT-5.6 Sol Max. Tiny mechanical `worker` slices—including clear simple code, configuration, and setup changes—use Luna Max; ordinary UI, logic, backend, and native coding uses Sol High; review, testing, debugging, architecture, integration, security, database, research, release, and other judgment-sensitive work uses Sol Max; long-context scans, long-term memory, large-scale first-draft code processing, and direct Computer Use, Browser/Chrome, or image-generation execution use Terra Max. Mixed execution/judgment work is split when possible, and unsplittable judgment defaults to Sol Max.
191
+
192
+ Fresh SKS-owned project config enables Codex 0.145+ multi-agent V2 with `agents.max_concurrent_threads_per_session = 256`, `features.multi_agent_v2.max_concurrent_threads_per_session = 257`, `max_depth = 1`, and `interrupt_message = true`. Nested delegation remains forbidden. Explicit user-owned limits are preserved, while legacy SKS-owned 12/13 defaults migrate to 256/257.
87
193
 
88
- Fresh SKS-owned project config enables Codex 0.145+ multi-agent V2 with `agents.max_concurrent_threads_per_session = 12`, `features.multi_agent_v2.max_concurrent_threads_per_session = 13`, `max_depth = 1`, and `interrupt_message = true`. Nested delegation remains forbidden. Explicit user limits are preserved, and larger requests run in waves.
194
+ Naruto's automatic starting tiers are 4/6/8 children for ordinary work and 16
195
+ for mass cheap-model work. After decomposition, either lane may expand to the
196
+ SKS-owned ceiling of 256 independent useful children. Explicit
197
+ `--agents N` and `--max-threads N` values from 1 through 256 remain
198
+ authoritative instead of being reduced to those automatic tiers. A first wave
199
+ may reach 256 child slots only when independent ready work, disjoint ownership,
200
+ verifier/tool capacity, and the external Codex/session host all permit it;
201
+ otherwise Naruto records the exact active limiter and reuses returned capacity
202
+ in later waves.
89
203
 
90
- Naruto's automatic tiers are 4/6/8 children for ordinary work and 16 for
91
- mass cheap-model work, with automatic ceilings of 12 and 64 respectively.
92
- The absolute `--agents`/`--max-threads` frame ceiling is 256, and requests
93
- beyond current capacity reuse slots across waves. `SKS_NARUTO_REMOTE_API_PARALLEL_BUDGET`
94
- can lower the governor's remote API parallel-request budget. These are structural
95
- scheduling limits, not a recommended target or proof that 256 live agents were
96
- load-tested on the current host; CPU, memory, file descriptors, process/worktree
97
- capacity, ready work, and verifier capacity can select a much smaller active wave.
204
+ `SKS_NARUTO_REMOTE_API_PARALLEL_BUDGET` declares a lower remote provider/API
205
+ parallel-request budget for the governor. It cannot raise a lower external-host
206
+ or session limit. The official Codex lane does not impose a local CPU/RAM or
207
+ unmeasured API-default clamp; it follows an explicit provider budget and a
208
+ measured host cap. The 256 ceiling is structural, not a recommendation or proof
209
+ that 256 live agents were load-tested on the current host. The four GPT-5.6
210
+ model profiles are routing lanes, not an agent-count limit.
98
211
 
99
212
  Gates are task-profile aware: greetings and answer-only turns create no mission gate; tiny work gets minimal verification; parallel work gets scoped ownership and verification; high-risk work keeps the full safety gates. `SubagentStart`/`SubagentStop` prove lifecycle only. Completion also requires `subagent-parent-summary.json` with one trustworthy structured outcome per thread, correlated with `subagent-events.jsonl` and `subagent-evidence.json`.
100
213
 
101
214
  Every installed Codex hook runs one common Naruto decision gate. The gate records `none`, `generic_naruto`, or `route_owned`: Answer, DFix, Wiki, Computer Use, Goal, and simple Git/control turns stay lightweight; ordinary non-trivial work defaults to two independent official subagents; critical work spanning at least three risk domains may use three. Research, AutoResearch, and QA-Loop retain their own exact orchestration contracts instead of receiving a second generic fan-out. Explicit `--agents N` remains authoritative.
102
215
 
103
- SKS installs twenty-five narrow project custom agents, including native AppKit, toolchain, protocol, runtime-reliability, TriWiki-evidence, long-context, Computer Use, Browser/Chrome, and image-generation specialists. Delegation prompts inject at most the three roles recommended for the current goal rather than serializing the full catalog, so expanding role coverage does not serialize the full inventory into every prompt. TriWiki context is also bounded and query-aware: ordinary work receives up to four trust/hydration anchors and complex, parallel, or high-risk work receives up to six, with source hydration required before relying on lower-trust hints. In CLI Zellij mode, the right side is a live observability surface rather than a static lane reservation: one monitor plus one viewport by default (maximum three) shows official thread role/model, redacted live phase/task/file updates from rollout-compatible Codex sessions on the official latest stable CLI, plus `running`, `verifying`, and trustworthy parent-verdict completion/failure states. Rollout activity is display-only and never completion proof.
216
+ SKS installs twenty-five narrow project custom agents, including native AppKit, toolchain, protocol, runtime-reliability, TriWiki-evidence, long-context, Computer Use, Browser/Chrome, and image-generation specialists. Delegation prompts inject at most the three roles recommended for the current goal rather than serializing the full catalog, so expanding role coverage does not serialize the full inventory into every prompt. TriWiki context is also bounded and query-aware: ordinary work receives up to four trust/hydration anchors and complex, parallel, or high-risk work receives up to six, with source hydration required before relying on lower-trust hints. Official event evidence and the parent verdict—not display state—determine completion.
104
217
 
105
218
  Official subagent requests use `--agents`; removed scheduler, pool, backend, and model flags fail closed.
106
219
 
@@ -123,13 +236,13 @@ sks naruto run "task" \
123
236
  | Which provider block | `--model-provider=<name>` | `SKS_NARUTO_MODEL_PROVIDER` | Names a `[model_providers.<name>]` block. Host mode only |
124
237
  | Which credential variable | `--provider-env-key=<NAME>` | `SKS_NARUTO_PROVIDER_ENV_KEY` | Forwards exactly that variable to the child so the block's `env_key` resolves. Host mode only |
125
238
  | Release the login only | `--no-forced-login-method` | `SKS_NARUTO_FORCED_LOGIN_METHOD=none` | Keeps the SKS provider, drops the forced ChatGPT login |
126
- | Parent model / effort | `--parent-model`, `--parent-effort` | `SKS_NARUTO_PARENT_MODEL`, `SKS_NARUTO_PARENT_EFFORT` | Overrides the built-in parent policy |
127
- | Subagent model / effort | `--subagent-model`, `--subagent-effort` | `SKS_NARUTO_SUBAGENT_MODEL`, `SKS_NARUTO_SUBAGENT_EFFORT` | Overrides the default subagent policy |
239
+ | Parent model / effort | `--parent-model`, `--parent-effort` | `SKS_NARUTO_PARENT_MODEL`, `SKS_NARUTO_PARENT_EFFORT` | Overrides the built-in parent policy; GPT-5.6 parents remain Sol/Terra/Luna Max-only as applicable |
240
+ | Subagent model / effort | `--subagent-model`, `--subagent-effort` | `SKS_NARUTO_SUBAGENT_MODEL`, `SKS_NARUTO_SUBAGENT_EFFORT` | Overrides the default subagent policy; GPT-5.6 Luna/Terra require Max and Sol requires High or Max |
128
241
 
129
242
  Guarantees this contract makes:
130
243
 
131
244
  - **SKS never reads, stores, forwards to a third party, or logs your credential.** It forwards one named environment variable to the Codex child and records only that variable's *name* in receipts. Values of secret-shaped variables are redacted from captured output.
132
- - **A malformed value blocks the run.** An unknown auth mode, a provider name with a space, an effort tier that is not `minimal|low|medium|high|max`, or a `--provider-env-key` that is absent from the environment all fail before mission state is written. SKS never quietly falls back to its own credential — that surprise is the failure mode this contract exists to prevent.
245
+ - **A malformed or policy-invalid value blocks the run.** An unknown auth mode, a provider name with a space, an effort tier that is not `minimal|low|medium|high|max`, a GPT-5.6 Luna/Terra effort other than Max, or a `--provider-env-key` that is absent from the environment all fail before mission state is written. SKS never quietly falls back to its own credential — that surprise is the failure mode this contract exists to prevent.
133
246
  - **Mixed configurations are refused.** Naming a provider while SKS still forces a ChatGPT login would authenticate one way and bill another, so it is a blocker rather than a silent precedence rule.
134
247
  - **The default is unchanged.** Managed mode still pins the ChatGPT login, and the real-credential smoke gate still proves it.
135
248
 
@@ -214,7 +327,7 @@ Adapter rules that keep updates safe:
214
327
  | Did tests/typecheck fail? | Another model may say so. | Machine check output is tagged `evidence: machine`. |
215
328
  | Are findings ranked? | Usually one blended opinion. | Machine evidence sorts before LLM findings. |
216
329
  | Can work stop? | The model decides. | Stop gates, Completion Proof, and Honest Mode decide. |
217
- | Can I inspect agent-thread progress? | Usually no runtime UI. | Use the official Codex subagent/thread surfaces and SKS Zellij monitor/viewport panes. |
330
+ | Can I inspect agent-thread progress? | Usually no runtime UI. | Use the official Codex subagent/thread surfaces and their proof artifacts. |
218
331
 
219
332
  ## Demo
220
333
 
@@ -234,10 +347,10 @@ It shows the current quickstart flow: one-line install, `$sks-plan`, `sks review
234
347
  - Project memory: `sks memory build`
235
348
  - Codebase index/pack for LLM context: `sks wiki refresh --code`, `sks wiki validate --json` (code-pack freshness)
236
349
  - Native capability repair: `sks doctor --fix` (imagegen/Computer Use/Browser Use), `.sneakoscope/reports/native-capability-readiness.json`
237
- - codex-lb continuity: `sks codex-lb status --json` verifies the selected proxy's unauthenticated `/health` `X-App-Version`. Tool-heavy continuation requires a codex-lb deployment that reports the capability; use the official latest stable release. Older or unverified deployments block setup, doctor, and launch instead of silently falling back.
350
+ - codex-lb continuity: `sks codex-lb status --json` verifies the selected proxy's unauthenticated `/health` `X-App-Version`. Tool-heavy continuation requires a codex-lb deployment that reports the capability; use the official latest stable release. Older or unverified deployments block setup, doctor, and launch instead of silently falling back. A selected route is green only after one measured request records the destination host, gateway-key authentication class, measurement time, and latency; config presence alone is not routing proof.
238
351
  - Agent bridge for any agent system: `sks mcp-server`, `sks agent-bridge setup`, `SKS_AGENT_MODE=1` — see [docs/AGENT-BRIDGE.md](docs/AGENT-BRIDGE.md)
239
- - Release gates: `npm run release:check:affected` for ordinary change-aware verification and `npm run release:check:confidence` for the final local confidence pass.
240
- - Release preparation: typecheck, one clean build, focused tests, affected/confidence gates, then `npm publish --dry-run --json --registry https://registry.npmjs.org/ --tag latest --access public`. The dry-run does not publish; authorization remains a separate maintainer workflow.
352
+ - Release gates: `npm run release:check:affected` for ordinary change-aware verification and `npm run release:check:confidence` for the final local confidence pass. Evidence for the 8.0.4 physical checklist includes a successful old-install-to-8.0.4 resolved-CLI upgrade, a 5,001-directory update scan, exactly one running Menu Bar process at the current package version, one measured real codex-lb request to the selected remote host, and one Telegram command/reply E2E over cellular.
353
+ - Release preparation: typecheck, one clean build, focused tests, affected/confidence gates, all four source-bound physical receipts, then `npm publish --dry-run --json --registry https://registry.npmjs.org/ --tag latest --access public`. The dry-run does not publish or require release tags; real staging/publication remains a separate authenticated maintainer workflow.
241
354
  - Release readiness notes: [docs/release-readiness.md](docs/release-readiness.md) and [CHANGELOG.md](CHANGELOG.md)
242
355
  - Image generation review routes require Codex App `$imagegen`/`gpt-image-2` evidence with recorded output hashes; direct API fallback and mock fixtures do not satisfy full route gates.
243
356
 
@@ -248,22 +361,22 @@ It shows the current quickstart flow: one-line install, `$sks-plan`, `sks review
248
361
  - macOS optional: menu bar integration and `/usr/bin/open`
249
362
  - The menubar icon shows and hides itself automatically as the Codex desktop app launches/quits; set `quit_with_codex: true` in `~/.codex/sks-menubar/config.json` to have the menubar fully quit with Codex instead of just hiding (default `false`).
250
363
  - Native input dialogs (API keys, codex-lb setup) pass secrets to `sks` via `--api-key-stdin` instead of a visible Terminal window or process arguments.
251
- - Codex Desktop always keeps its real ChatGPT OAuth identity. codex-lb setup stores a separate gateway endpoint/key in an owner-only `0600` env file and never replaces `~/.codex/auth.json`; Keychain requests fail closed until a dedicated signed helper is available.
364
+ - Codex Desktop keeps `~/.codex/auth.json` byte-preserved. **Use codex-lb** atomically stores the provider definition and active top-level selection and resolves its separate gateway key from the owner-only `0600` env file; while selected, requests must not consume the stored ChatGPT OAuth identity. Turning codex-lb off returns to the official OAuth path. Keychain requests fail closed until a dedicated signed helper is available.
252
365
  - Explicit codex-lb setup/reconfiguration migrates the retired generic `sks-codex-lb` Keychain item only after the replacement owner-only store is verified, deletes only the exact legacy account, and proves absence by readback. If cleanup cannot be proved, the replacement store is retained and the provider key should be rotated.
253
- - Providers separates **Desktop Full Capability**, **CLI Provider**, and **Capability Matrix**. Desktop Full Capability keeps the built-in OpenAI provider and routes supported traffic through a loopback bridge; CLI Provider is selected only for the CLI process.
366
+ - Providers exposes atomic **Use codex-lb** / **Use ChatGPT OAuth** selection plus shared RoutingTruth. A green codex-lb state requires one measured request to the configured remote base URL; the Menu Bar and Doctor render the same host, authentication class, measurement time, and latency.
254
367
  - The retired dual-auth compatibility mode is detected only for safe migration. It cannot be activated or reported ready because it would require a global GUI secret.
255
- - Authentication and routing modes do not toggle Codex App's native model picker, Fast, image, Browser Use, Computer Use, voice, plugins/apps, or other built-in surfaces. Capability status describes evidence for the codex-lb data path, not permission to use the native feature.
368
+ - Authentication and routing modes do not toggle Codex App's native model picker, Fast, image, Browser Use, Computer Use, voice, plugins/apps, or other built-in surfaces. Capability status describes measured evidence for the codex-lb data path, not permission to use a native feature.
256
369
  - `sks update`, setup, repair, and routing changes preserve OAuth, user model/reasoning/Fast settings, unknown catalog fields, and unrelated provider configuration. Legacy shared-auth routing requires explicit `sks codex-lb migrate-legacy-desktop --restart-app`; without a real restart and post-restart identity check it cannot finalize a migration receipt.
257
370
  - The remote codex-lb service remains independently hosted and operated. SKS uses only the configured URL and gateway key; it does not deploy, restart, or change credentials on that host.
258
- - Full release proof blocks with `real_required_missing` until fresh trust-anchored evidence covers the real Desktop feature/lifecycle matrix and the separately hosted other-Mac runtime; fixtures and configuration cannot satisfy that boundary.
259
- - Update installs always rebuild the companion with the newly installed SKS package, preventing a previous-version updater from restoring a stale menu binary.
371
+ - Full release proof blocks with `real_required_missing` until fresh trust-anchored evidence covers the real Desktop feature/lifecycle matrix, one measured gateway-key request to the selected separately hosted codex-lb instance, and the other-Mac runtime; fixtures and configuration cannot satisfy that boundary.
372
+ - Update installs stop and verify every prior Menu Bar process before replacement, rebuild the companion from the newly installed SKS package, bootstrap it, and require exactly one running process whose version probe equals the current package version.
373
+ - Telegram remote control uses one bounded long-poller inside that same Menu Bar process. Release evidence must include a real cellular command/reply round trip; `getMe`, a local fixture, or a configured token alone cannot satisfy the E2E gate.
260
374
  - The menubar dropdown's `View Last Log` item opens the most recent background action's log file, so you don't need to keep a Terminal window open to see command output.
261
375
  - `Manage MCP Servers…` provides a resizable native table and add/remove/enable/disable controls for global Codex MCP configuration. Secret environment values and command arguments are accepted through native dialogs/stdin but omitted from list output and logs.
262
376
  - `sks menubar status --json` reports a `codex_sync` object with `bundle_id`, `codex_running`, and `icon_visible_expected` to show Codex-lifecycle detection state.
263
377
  - The menu displays the installed Codex CLI version, adds an `⬆` status icon when `sks codex update-status` sees a newer release, runs the official self-updater through `Update Codex CLI Now`, and exposes `Run sks doctor --fix` as a background repair action.
264
378
  - **Codex Fast** is labeled as the official 1.5× Codex speed option, with a verified service-tier status row and direct On/Off actions. Center explains that ChatGPT-sign-in GPT-5.6/GPT-5.5 use 2.5× Standard credits and GPT-5.4 uses 2×, while API-key token pricing and API Priority processing are separate. Model selection, Codex-Spark, and reasoning effort remain independent; status failures render as unavailable with neither choice falsely selected.
265
379
  - If Codex shows `[No tool output found for custom tool call ...]`, SKS blocks reuse of that structurally ambiguous thread. Upgrade codex-lb or run `sks codex-lb disable`, inspect possible side effects, then continue the persisted mission in a fresh Codex task. SKS never rewrites session JSONL or fabricates a successful tool output.
266
- - Zellij optional but recommended for terminal worker panes
267
380
 
268
381
  ## License
269
382
 
@@ -38,7 +38,7 @@
38
38
  { "canonical_name": "sks-init-deep", "trusted_sha256": ["a679fa4ba36e070de5753994f58595c4352302cc98d868ba70ff98305d15f451"] },
39
39
  { "canonical_name": "sks-loop", "trusted_sha256": ["e56f9c4d0f7227961779daf6806943f1926bb588ce21a965a813e8ad91cfd5c8"] },
40
40
  { "canonical_name": "sks-mad-sks", "trusted_sha256": ["03fb5063d19c3d48d004cd8e6e39bfe244016d7edacfe99e5dab087cbbfa6db9", "a3d0110ca97576130893311b3267621acb02c16ca9aea4b2da3e5300eea58158"] },
41
- { "canonical_name": "sks-naruto", "trusted_sha256": ["f8e808622e222b4ad7dcb2907e5f06a890db83139ae443ec6c8c33781dfa3e37", "49b5e3dcc1b537b49c2cf09e5b875cb16acb05c622b22798e265e64dacd8ac90"] },
41
+ { "canonical_name": "sks-naruto", "trusted_sha256": ["d0d5968e78ac25e1d3e588735de1ddbcf149cfb3165edebca5dec1ed7c7a5c46", "34222c72e4e1ead3584907f4d905444b7de820283ee7348018f110d5e6b04461", "f8e808622e222b4ad7dcb2907e5f06a890db83139ae443ec6c8c33781dfa3e37", "49b5e3dcc1b537b49c2cf09e5b875cb16acb05c622b22798e265e64dacd8ac90"] },
42
42
  { "canonical_name": "sks-performance-evaluator", "trusted_sha256": ["5b8c6cea19ffda8e434700297ed060fde3cfcfc9c98635402599e84756466db4", "c0bfd5a2e6c74813cb5dac9dadd4c7543ee768a48cf3e36b86b3d9306c2712c6"] },
43
43
  { "canonical_name": "sks-pipeline-runner", "trusted_sha256": ["020ba4da2f96bcda23cee4596b1e790816780178f1917dee748ff4b289cba0e5", "ffcbe0ea4b585e3d2886f1d9fa7a3b88706aaf42182fb177b2371b76beb0ddcd"] },
44
44
  { "canonical_name": "sks-plan", "trusted_sha256": ["7795867b38a5f169924125850f137c31995cf28000f74284839530a68ace156a", "b6f3b09230e9809acf4e13df2de6af3c75a8534e8890d6560664ebfc2e4072f8"] },
@@ -259,7 +259,7 @@ dependencies = [
259
259
 
260
260
  [[package]]
261
261
  name = "sks-core"
262
- version = "8.0.2"
262
+ version = "8.0.4"
263
263
  dependencies = [
264
264
  "globset",
265
265
  "grep-matcher",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sks-core"
3
- version = "8.0.2"
3
+ version = "8.0.4"
4
4
  edition = "2021"
5
5
 
6
6
  [dependencies]
@@ -13,11 +13,7 @@ function rootJsonFastInline(fs, cwd = process.cwd()) {
13
13
  }
14
14
  async function doctorJsonFastInline(input = {}) {
15
15
  const startedAt = Date.now();
16
- const { inspectOAuthCallbackPortConflict, oauthCallbackDoctorGuidance } = await import('../core/codex/oauth-callback-port-diagnostic.js');
17
- const oauthCallbackPortDiagnostic = await inspectOAuthCallbackPortConflict({
18
- ...(input.run ? { run: input.run } : {})
19
- });
20
- const oauthCallbackOperatorActions = oauthCallbackDoctorGuidance(oauthCallbackPortDiagnostic);
16
+ const secretResolution = await inspectCodexLbSecretResolutionFastInline(input);
21
17
  const write = input.write || ((text) => process.stdout.write(text));
22
18
  write(`${JSON.stringify({
23
19
  schema: 'sks.doctor-status.v3',
@@ -38,20 +34,6 @@ async function doctorJsonFastInline(input = {}) {
38
34
  hook_evidence_policy: 'unknown-do-not-count',
39
35
  agent_role_strategy: 'message-role'
40
36
  },
41
- zellij_readiness: {
42
- schema: 'sks.zellij-readiness.v1',
43
- binary: 'zellij',
44
- status: 'skipped',
45
- min_version: '0.41.0',
46
- version: null,
47
- required_for: ['sks --mad', 'interactive lane UI'],
48
- layout_proof: 'unavailable',
49
- pane_proof: 'unavailable',
50
- screen_proof: 'unavailable',
51
- mad_ready: false,
52
- cli_ready: false,
53
- ready_for_interactive_runtime: false
54
- },
55
37
  codex: { bin: null, version: null, available: null, skipped: true, reason: 'fast_readonly_json' },
56
38
  repair: {
57
39
  setup: null,
@@ -59,12 +41,10 @@ async function doctorJsonFastInline(input = {}) {
59
41
  },
60
42
  doctor_fix_transaction: null,
61
43
  blockers: [],
62
- warnings: [
63
- 'fast_readonly_doctor_skipped_optional_deep_diagnostics',
64
- ...oauthCallbackPortDiagnostic.warnings
65
- ],
66
- operator_actions: oauthCallbackOperatorActions,
67
- oauth_callback_port_diagnostic: oauthCallbackPortDiagnostic
44
+ warnings: ['fast_readonly_doctor_skipped_optional_deep_diagnostics'],
45
+ codex_lb: {
46
+ secret_resolution: secretResolution
47
+ }
68
48
  }, null, 2)}\n`);
69
49
  }
70
50
  async function narutoHelpJsonFastInline() {
@@ -125,12 +105,60 @@ function findProjectRootSync(fs, start) {
125
105
  dir = parent;
126
106
  }
127
107
  }
108
+ async function inspectCodexLbSecretResolutionFastInline(input) {
109
+ const processEnv = input.processEnv || process.env;
110
+ const home = input.home || processEnv.HOME || processEnv.USERPROFILE || process.cwd();
111
+ const codexHome = joinPath(home, '.codex');
112
+ const envPath = joinPath(codexHome, 'sks-codex-lb.env');
113
+ const metadataPath = joinPath(codexHome, 'sks-codex-lb.json');
114
+ const [{ inspectConfinedPath }, { readPrivateCredentialFile }] = await Promise.all([
115
+ import('../core/managed-path-safety.js'),
116
+ import('../core/security/private-credential-file.js')
117
+ ]);
118
+ let envFilePresent = false;
119
+ let envFilePrivate = false;
120
+ try {
121
+ const inspected = await inspectConfinedPath(codexHome, envPath);
122
+ envFilePresent = inspected.exists;
123
+ const expectedUid = typeof process.getuid === 'function' ? process.getuid() : null;
124
+ envFilePrivate = inspected.exists
125
+ && !inspected.leafSymlink
126
+ && inspected.stat?.isFile() === true
127
+ && (inspected.stat.mode & 0o777) === 0o600
128
+ && (expectedUid === null || inspected.stat.uid === expectedUid);
129
+ }
130
+ catch {
131
+ envFilePresent = false;
132
+ }
133
+ let metadataValid = false;
134
+ if (envFilePrivate) {
135
+ try {
136
+ const snapshot = await readPrivateCredentialFile(codexHome, metadataPath, 'codex_lb_metadata', { maxBytes: 64 * 1024 });
137
+ const metadata = JSON.parse(snapshot.bytes.toString('utf8'));
138
+ metadataValid = metadata?.schema === 'sks.codex-lb-metadata.v1'
139
+ && /^[a-f0-9]{64}$/.test(String(metadata?.api_key?.sha256 || '').trim().toLowerCase())
140
+ && Boolean(String(metadata?.base_url || '').trim());
141
+ }
142
+ catch {
143
+ metadataValid = false;
144
+ }
145
+ }
146
+ const processKeyPresent = Boolean(String(processEnv.CODEX_LB_API_KEY || '').trim());
147
+ const source = envFilePrivate && metadataValid ? 'env-file' : processKeyPresent ? 'process.env' : 'missing';
148
+ return {
149
+ source,
150
+ path: source === 'env-file' || envFilePresent ? envPath : null,
151
+ prompt_risk: (input.platform || process.platform) === 'darwin'
152
+ ? 'unknown_keychain_not_probed'
153
+ : 'none'
154
+ };
155
+ }
128
156
  function fsInline() {
129
157
  return process.getBuiltinModule?.('node:fs') || require('node:fs');
130
158
  }
131
- function readJsonSyncInline(file) {
159
+ function readJsonSyncInline(file, fs = fsInline()) {
132
160
  try {
133
- return JSON.parse(fsInline().readFileSync(file, 'utf8'));
161
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
134
162
  }
135
163
  catch {
136
164
  return null;
@@ -1,33 +1,7 @@
1
1
  #!/usr/bin/env node
2
- const { spawnSync } = require('node:child_process');
3
- const args = process.argv.slice(2);
4
- const command = args.find((arg) => !arg.startsWith('-')) || 'install';
5
- const autonomous = args.includes('--no-tui') || args.includes('--yes') || args.includes('-y');
6
- function run(cmd, cmdArgs) {
7
- const result = spawnSync(cmd, cmdArgs, { stdio: 'inherit' });
8
- return result.status ?? 1;
9
- }
10
- if (!['install', 'setup', 'bootstrap'].includes(command)) {
11
- console.error('Usage: npx sneakoscope install [--yes|--no-tui]');
12
- process.exit(2);
13
- }
14
- console.log('SKS installer - proof-first Codex harness');
15
- const already = spawnSync('sks', ['--version'], { encoding: 'utf8' });
16
- if (already.status !== 0) {
17
- console.log('> installing global package (npm i -g sneakoscope)...');
18
- if (run('npm', ['install', '-g', 'sneakoscope']) !== 0) {
19
- console.error('global install failed - check npm permissions');
20
- process.exit(1);
21
- }
22
- }
23
- console.log('> repairing/validating environment (sks doctor --fix)...');
24
- if (run('sks', ['doctor', '--fix', ...(autonomous ? ['--yes'] : [])]) !== 0) {
25
- console.error('doctor reported blockers - see report above');
26
- process.exit(1);
27
- }
28
- console.log(`
29
- SKS ready. 다음 3개만 기억하세요 (Codex 입력창에서):
30
- $sks-plan "무엇을 만들지" - 계획만 세움 (코드 안 건드림)
31
- $sks-work - 계획을 증거 기반으로 실행
32
- 실행 상태: sks status --json / zellij 세션은 자동
33
- `);
2
+ import('../core/commands/install-package-command.js')
3
+ .then(({ installPackageCommand }) => installPackageCommand())
4
+ .catch((error) => {
5
+ console.error(error instanceof Error ? error.message : String(error));
6
+ process.exitCode = 1;
7
+ });
@@ -13,7 +13,7 @@ async function runSks(args) {
13
13
  const { rootJsonFastInline } = await import('./fast-inline.js');
14
14
  rootJsonFastInline(fs);
15
15
  }
16
- else if (args[0] === 'doctor' && args.includes('--json') && !args.includes('--report-file') && !args.includes('--fix') && !args.includes('--full') && !args.includes('--capabilities') && !args.includes('--search')) {
16
+ else if (args[0] === 'doctor' && args.includes('--json') && !args.includes('--report-file') && !args.includes('--fix') && !args.includes('--full') && !args.includes('--capabilities') && !args.includes('--profile') && !args.includes('--search')) {
17
17
  const { doctorJsonFastInline } = await import('./fast-inline.js');
18
18
  await doctorJsonFastInline();
19
19
  }
package/dist/cli/args.js CHANGED
@@ -42,9 +42,7 @@ export function positionalArgs(args = []) {
42
42
  '--write-mode',
43
43
  '--max-write-agents',
44
44
  '--service-tier',
45
- '--zellij-session-name',
46
45
  '--worker-placement',
47
- '--zellij-visible-pane-cap',
48
46
  '--phase',
49
47
  '--message',
50
48
  '--role',
@@ -1,24 +1,33 @@
1
1
  import { PACKAGE_VERSION } from '../core/version.js';
2
- import { ANSI_CODES, paint, resolveZellijTheme } from '../core/zellij/zellij-theme.js';
3
- const theme = resolveZellijTheme();
2
+ const ANSI_CODES = {
3
+ reset: '\x1b[0m',
4
+ dim: '\x1b[2m',
5
+ red: '\x1b[31m',
6
+ green: '\x1b[32m',
7
+ yellow: '\x1b[33m'
8
+ };
9
+ const colorEnabled = process.env.NO_COLOR !== '1' && process.stdout.isTTY !== false;
10
+ function paint(code, text) {
11
+ return colorEnabled && code ? `${code}${text}${ANSI_CODES.reset}` : text;
12
+ }
4
13
  export const ui = {
5
14
  banner(cmd) {
6
- console.log(paint(theme, ANSI_CODES.dim, `SKS ${PACKAGE_VERSION} · ${cmd}`));
15
+ console.log(paint(ANSI_CODES.dim, `SKS ${PACKAGE_VERSION} · ${cmd}`));
7
16
  },
8
17
  ok(msg) {
9
- console.log(`${paint(theme, ANSI_CODES.green, '✔')} ${msg}`);
18
+ console.log(`${paint(ANSI_CODES.green, '✔')} ${msg}`);
10
19
  },
11
20
  warn(msg) {
12
- console.log(`${paint(theme, ANSI_CODES.yellow, '▲')} ${msg}`);
21
+ console.log(`${paint(ANSI_CODES.yellow, '▲')} ${msg}`);
13
22
  },
14
23
  fail(msg) {
15
- console.log(`${paint(theme, ANSI_CODES.red, '✖')} ${msg}`);
24
+ console.log(`${paint(ANSI_CODES.red, '✖')} ${msg}`);
16
25
  },
17
26
  step(msg) {
18
- console.log(`${paint(theme, ANSI_CODES.dim, '>')} ${msg}`);
27
+ console.log(`${paint(ANSI_CODES.dim, '>')} ${msg}`);
19
28
  },
20
29
  kv(k, v) {
21
- console.log(` ${paint(theme, ANSI_CODES.dim, k.padEnd(18))} ${v}`);
30
+ console.log(` ${paint(ANSI_CODES.dim, k.padEnd(18))} ${v}`);
22
31
  },
23
32
  table(rows) {
24
33
  if (!rows.length)
@@ -26,7 +35,7 @@ export const ui = {
26
35
  const widths = rows[0]?.map((_cell, index) => Math.max(...rows.map((row) => String(row[index] || '').length))) || [];
27
36
  for (const [rowIndex, row] of rows.entries()) {
28
37
  const line = row.map((cell, index) => String(cell || '').padEnd(widths[index] || 0)).join(' ').trimEnd();
29
- console.log(rowIndex === 0 ? paint(theme, ANSI_CODES.dim, line) : line);
38
+ console.log(rowIndex === 0 ? paint(ANSI_CODES.dim, line) : line);
30
39
  }
31
40
  }
32
41
  };
@@ -14,9 +14,11 @@ const COMMAND_MANIFEST_LITE_BASE = [
14
14
  { name: 'status', summary: 'Show concise active mission and trust status', maturity: 'stable', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
15
15
  { name: 'review', summary: 'Review a git diff with machine evidence first', maturity: 'stable', allowedDuringActiveRoute: true },
16
16
  { name: 'root', summary: 'Show active SKS root', maturity: 'stable', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
17
+ { name: 'install', summary: 'Install the exact packaged SKS version globally and verify the resolved CLI', maturity: 'stable', skipMigrationGate: true },
17
18
  { name: 'update', summary: 'Inspect, review, apply, or roll back the global SKS update', maturity: 'stable' },
18
19
  { name: 'uninstall', summary: 'Uninstall SKS global skills, hooks, config, menu bar, and optional project residue', maturity: 'stable', allowedDuringActiveRoute: true },
19
20
  { name: 'update-check', summary: 'Show the shared SKS, Codex CLI, and Menu Bar update status', maturity: 'stable', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
21
+ { name: 'config', summary: 'Adopt project Codex config into SKS management', maturity: 'stable', skipMigrationGate: true },
20
22
  { name: 'mcp', summary: 'Manage scoped Codex MCP configuration', maturity: 'beta', skipMigrationGate: true },
21
23
  { name: 'wizard', summary: 'Open setup wizard help', maturity: 'stable' },
22
24
  { name: 'usage', summary: 'Show focused usage topic', maturity: 'stable', readonly: true, allowedDuringActiveRoute: true, diagnostic: true },
@@ -37,13 +39,8 @@ const COMMAND_MANIFEST_LITE_BASE = [
37
39
  { name: 'codex-lb', summary: 'Inspect codex-lb status and circuit health', maturity: 'beta', skipMigrationGate: true },
38
40
  { name: 'menubar', summary: 'Inspect/install/restart/uninstall SKS menu bar', maturity: 'beta', skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
39
41
  { name: 'remote', summary: 'Inspect official Remote readiness and run the proof-aware SSH stdio worker', maturity: 'beta' },
42
+ { name: 'telegram', summary: 'Pair and inspect the Telegram remote-control transport', maturity: 'beta', skipMigrationGate: true },
40
43
  { name: 'hooks', summary: 'Explain and inspect Codex hooks', maturity: 'beta', skipMigrationGate: true },
41
- { name: 'zellij-lane', summary: 'Render a Zellij lane frame for SKS sessions', maturity: 'beta' },
42
- { name: 'zellij-slot-pane', summary: 'Render a compact Zellij worker slot pane', maturity: 'beta' },
43
- { name: 'zellij-monitor-pane', summary: 'Render the live Zellij MAD/Naruto monitor pane', maturity: 'beta', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
44
- { name: 'zellij-viewport-pane', summary: 'Render a dynamically bound Zellij worker viewport pane', maturity: 'beta', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
45
- { name: 'zellij-slot-column-anchor', summary: 'Render the compact SLOTS anchor pane for first-slot-down Zellij stacks', maturity: 'beta' },
46
- { name: 'zellij', summary: 'Inspect Zellij runtime status and explain repair (no auto-install)', maturity: 'beta', skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
47
44
  { name: 'mad-sks', summary: 'MAD-SKS scoped permission modifier + SQL-plane execution', maturity: 'beta', mutatesRouteState: true },
48
45
  { name: 'auto-review', summary: 'Manage auto-review profile', maturity: 'beta' },
49
46
  { name: 'dollar-commands', summary: 'List Codex App dollar commands', maturity: 'stable', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
@@ -116,6 +113,7 @@ const COMMAND_CONTRACT_OVERRIDES_LITE = {
116
113
  check: { risk: 'R1', latency: 'long' },
117
114
  'commit-and-push': { risk: 'R3' },
118
115
  'computer-use': { latency: 'long' },
116
+ config: { risk: 'R2', supportsJson: true, remoteAllowed: false, inputProfile: 'json-only' },
119
117
  dfix: { latency: 'long' },
120
118
  'dollar-commands': { risk: 'R2', latency: 'normal' },
121
119
  eval: { latency: 'long' },
@@ -124,6 +122,7 @@ const COMMAND_CONTRACT_OVERRIDES_LITE = {
124
122
  },
125
123
  harness: { latency: 'long' },
126
124
  'image-ux-review': { latency: 'long' },
125
+ install: { risk: 'R2', latency: 'long' },
127
126
  loop: { latency: 'long' },
128
127
  'mad-sks': { risk: 'R3', latency: 'long' },
129
128
  mcp: { risk: 'R2', latency: 'long', supportsJson: true, inputProfile: 'json-only' },
@@ -165,6 +164,7 @@ const COMMAND_CONTRACT_OVERRIDES_LITE = {
165
164
  requiredCapabilities: ['proof.stop-gate']
166
165
  },
167
166
  task: { risk: 'R1', latency: 'long' },
167
+ telegram: { risk: 'R2', supportsJson: true, remoteAllowed: false, inputProfile: 'json-only' },
168
168
  trust: {
169
169
  risk: 'R0', latency: 'fast', supportsJson: true, remoteAllowed: true, inputProfile: 'trust', requiredCapabilities: ['proof.trust']
170
170
  },