sneakoscope 8.0.3 → 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 (321) hide show
  1. package/README.md +125 -36
  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 +0 -14
  6. package/dist/bin/install.js +6 -32
  7. package/dist/cli/args.js +0 -2
  8. package/dist/cli/cli-theme.js +18 -9
  9. package/dist/cli/command-manifest-lite.js +2 -6
  10. package/dist/cli/command-registry.js +2 -6
  11. package/dist/cli/feature-commands.js +9 -7
  12. package/dist/cli/install-helpers-codex-lb-chain.js +12 -8
  13. package/dist/cli/install-helpers-codex-lb-config.js +5 -3
  14. package/dist/cli/install-helpers-install-support.js +9 -6
  15. package/dist/cli/install-helpers.js +12 -5
  16. package/dist/cli/install-tool-helpers.js +2 -82
  17. package/dist/cli/output.js +6 -1
  18. package/dist/cli/router.js +101 -2
  19. package/dist/commands/codex-lb.js +5 -3
  20. package/dist/commands/doctor-profile.js +1 -1
  21. package/dist/commands/doctor.js +32 -109
  22. package/dist/commands/mad-sks.js +1 -5
  23. package/dist/config/skills-manifest.json +3 -2
  24. package/dist/core/agents/agent-codex-cockpit.js +0 -3
  25. package/dist/core/agents/agent-effort-policy.js +5 -5
  26. package/dist/core/agents/agent-janitor.js +0 -20
  27. package/dist/core/agents/agent-orchestrator.js +9 -56
  28. package/dist/core/agents/agent-output-validator.js +2 -3
  29. package/dist/core/agents/agent-patch-schema.js +2 -2
  30. package/dist/core/agents/agent-proof-evidence.js +0 -65
  31. package/dist/core/agents/agent-recursion-guard.js +1 -1
  32. package/dist/core/agents/agent-scheduler.js +327 -85
  33. package/dist/core/agents/agent-schema.js +1 -1
  34. package/dist/core/agents/agent-trust-report.js +0 -36
  35. package/dist/core/agents/agent-worker-pipeline.js +0 -1
  36. package/dist/core/agents/fast-mode-policy.js +1 -3
  37. package/dist/core/agents/native-cli-worker-runtime-proof.js +1 -1
  38. package/dist/core/agents/native-cli-worker-runtime.js +69 -647
  39. package/dist/core/agents/native-cli-worker.js +6 -7
  40. package/dist/core/agents/native-worker-backend-router.js +2 -32
  41. package/dist/core/agents/no-subagent-scaling-policy.js +1 -1
  42. package/dist/core/agents/parallel-runtime-proof.js +1 -6
  43. package/dist/core/agents/runtime-proof-summary.js +1 -35
  44. package/dist/core/architecture-hardening/contracts/contracts.js +193 -0
  45. package/dist/core/architecture-hardening/migration/migration.js +111 -0
  46. package/dist/core/architecture-hardening/state/state-service.js +155 -0
  47. package/dist/core/artifact-schemas.js +0 -3
  48. package/dist/core/codex-app/auxiliary-oauth-policy.js +36 -0
  49. package/dist/core/codex-app/catalog-compat/catalog-service.js +104 -0
  50. package/dist/core/codex-app/child-policy/child-policy.js +35 -0
  51. package/dist/core/codex-app/codex-app-handoff.js +0 -1
  52. package/dist/core/codex-app/codex-hook-lifecycle.js +1 -1
  53. package/dist/core/codex-app/codex-init-deep.js +1 -1
  54. package/dist/core/codex-app/menubar/app-bundle.js +2 -0
  55. package/dist/core/codex-app/menubar/constants.js +4 -0
  56. package/dist/core/codex-app/provider-child-policy.js +64 -0
  57. package/dist/core/codex-app/provider-mode.js +91 -0
  58. package/dist/core/codex-app/provider-operation-stages.js +20 -0
  59. package/dist/core/codex-app/provider-session-policy.js +85 -0
  60. package/dist/core/codex-app/session-policy/session-pinning.js +68 -0
  61. package/dist/core/codex-app.js +3 -2
  62. package/dist/core/codex-control/codex-control-proof.js +0 -1
  63. package/dist/core/codex-control/codex-task-runner.js +1 -4
  64. package/dist/core/codex-lb/desktop-bridge/header-policy.js +6 -0
  65. package/dist/core/codex-lb/desktop-bridge/http-forward.js +48 -6
  66. package/dist/core/codex-lb/desktop-bridge/security.js +134 -0
  67. package/dist/core/codex-lb/desktop-bridge/server.js +9 -3
  68. package/dist/core/codex-lb/desktop-bridge/state.js +26 -6
  69. package/dist/core/codex-lb/desktop-bridge/types.js +1 -0
  70. package/dist/core/codex-lb/desktop-controller.js +26 -34
  71. package/dist/core/codex-lb/desktop-service.js +179 -40
  72. package/dist/core/codex-lb/legacy-migration.js +1 -3
  73. package/dist/core/codex-lb/native-openai-transport/transport.js +68 -0
  74. package/dist/core/codex-lb/probes/cli-image-tool-probe.js +1 -1
  75. package/dist/core/codex-lb/provider-routing/provider-router.js +58 -0
  76. package/dist/core/codex-lb/routing-truth.js +4 -4
  77. package/dist/core/codex-native/codex-native-feature-broker.js +4 -0
  78. package/dist/core/codex-native/codex-native-pattern-analysis.js +1 -2
  79. package/dist/core/codex-native/core-skill-manifest.js +1 -1
  80. package/dist/core/codex-plugins/codex-plugin-json.js +26 -6
  81. package/dist/core/codex-plugins/codex-plugin-repair.js +32 -6
  82. package/dist/core/commands/basic-cli.js +2 -6
  83. package/dist/core/commands/computer-use-command.js +1 -1
  84. package/dist/core/commands/image-ux-review-command.js +16 -9
  85. package/dist/core/commands/install-package-command.js +105 -0
  86. package/dist/core/commands/intent-normalization/normalizer.js +96 -0
  87. package/dist/core/commands/mad-sks-command.js +23 -274
  88. package/dist/core/commands/mad-sks-headless.js +11 -30
  89. package/dist/core/commands/naruto-command.js +0 -25
  90. package/dist/core/commands/qa-loop-command.js +102 -22
  91. package/dist/core/commands/remote-command.js +2 -2
  92. package/dist/core/commands/research-command.js +10 -5
  93. package/dist/core/commands/telegram-command.js +176 -10
  94. package/dist/core/doctor/current-project-guidance.js +4 -3
  95. package/dist/core/doctor/doctor-dirty-planner.js +1 -4
  96. package/dist/core/doctor/doctor-readiness-matrix.js +1 -18
  97. package/dist/core/doctor/retired-managed-residue-private.js +3 -2
  98. package/dist/core/doctor/retired-managed-residue-runtime.js +2 -2
  99. package/dist/core/doctor/skill-legacy-surface.js +11 -10
  100. package/dist/core/evaluation.js +0 -19
  101. package/dist/core/evidence/v2/evidence-key.js +105 -0
  102. package/dist/core/feature-fixtures.js +4 -7
  103. package/dist/core/feature-registry.js +52 -21
  104. package/dist/core/hooks-runtime/official-subagent-lifecycle.js +0 -51
  105. package/dist/core/hooks-runtime/stop-finalization.js +226 -0
  106. package/dist/core/hooks-runtime/stop-repeat-guard.js +21 -2
  107. package/dist/core/hooks-runtime.js +31 -208
  108. package/dist/core/image/reference-evidence/reference-registry.js +145 -0
  109. package/dist/core/image-ux-review/imagegen-adapter.js +21 -9
  110. package/dist/core/image-ux-review/reference-policy/reference-policy.js +9 -0
  111. package/dist/core/imagegen/codex-lb-imagegen-target.js +8 -0
  112. package/dist/core/imagegen/imagegen-capability.js +15 -4
  113. package/dist/core/init.js +3 -3
  114. package/dist/core/install/installed-package-smoke.js +15 -3
  115. package/dist/core/json/canonical.js +9 -0
  116. package/dist/core/locks/file-lock.js +0 -1
  117. package/dist/core/loops/loop-continuation-enforcer.js +65 -7
  118. package/dist/core/loops/loop-decomposer.js +0 -1
  119. package/dist/core/loops/loop-gate-runner.js +65 -4
  120. package/dist/core/loops/loop-gate-selector.js +0 -2
  121. package/dist/core/loops/loop-proof-validation.js +38 -0
  122. package/dist/core/loops/loop-risk-classifier.js +1 -1
  123. package/dist/core/loops/loop-runtime.js +14 -2
  124. package/dist/core/loops/loop-scheduler.js +7 -2
  125. package/dist/core/loops/loop-worker-runtime.js +0 -15
  126. package/dist/core/loops/loop-worktree-runtime.js +52 -4
  127. package/dist/core/managed-assets/managed-assets-manifest.js +14 -14
  128. package/dist/core/naruto/hardware-capacity-probe.js +0 -3
  129. package/dist/core/naruto/naruto-active-pool.js +2 -14
  130. package/dist/core/naruto/naruto-concurrency-governor.js +4 -8
  131. package/dist/core/naruto/naruto-loop-worker-router.js +0 -2
  132. package/dist/core/naruto/naruto-verification-dag.js +0 -1
  133. package/dist/core/naruto/naruto-write-e2e.js +1 -2
  134. package/dist/core/naruto/resource-pressure-monitor.js +0 -4
  135. package/dist/core/observability/architecture-hardening/safe-projection.js +65 -0
  136. package/dist/core/perf/release-latency-slo.js +3 -2
  137. package/dist/core/preflight/parallel-preflight-engine.js +2 -15
  138. package/dist/core/proof/fake-real-proof-policy.js +2 -17
  139. package/dist/core/proof/route-proof-gate.js +2 -10
  140. package/dist/core/proof/route-proof-policy.js +1 -1
  141. package/dist/core/proof/runtime-evidence-policy.js +185 -0
  142. package/dist/core/proof/runtime-truth-matrix.js +64 -39
  143. package/dist/core/proof/validation.js +27 -11
  144. package/dist/core/provider/provider-context.js +18 -2
  145. package/dist/core/providers/openrouter/openrouter-account.js +3 -2
  146. package/dist/core/python-tools/python-tool-runner.js +1 -1
  147. package/dist/core/qa-loop/qa-execution-control.js +57 -0
  148. package/dist/core/questions.js +1 -1
  149. package/dist/core/release/extreme-parallel-scheduler.js +0 -3
  150. package/dist/core/release/gate-manifest.js +3 -7
  151. package/dist/core/release/gate-pack-manifest.js +3 -7
  152. package/dist/core/release/package-size-budget.js +2 -2
  153. package/dist/core/release/physical-release-gates.js +189 -0
  154. package/dist/core/release/publish-preflight.js +113 -0
  155. package/dist/core/release/release-gate-affected-selector.js +0 -2
  156. package/dist/core/release/release-gate-batch-runner.js +1 -1
  157. package/dist/core/release/release-gate-node.js +0 -1
  158. package/dist/core/release/release-gate-resource-governor.js +0 -1
  159. package/dist/core/release/release-pack-receipt.js +4 -6
  160. package/dist/core/release/release-real-contract.js +0 -6
  161. package/dist/core/release/resource-class-budget.js +0 -1
  162. package/dist/core/release/stage-publish.js +178 -36
  163. package/dist/core/research/research-adversarial-review.js +103 -9
  164. package/dist/core/research.js +1 -1
  165. package/dist/core/retention.js +0 -1
  166. package/dist/core/routes/constants.js +1 -1
  167. package/dist/core/routes/diagnostic-allowlist.js +0 -1
  168. package/dist/core/routes/dollar-manifest-lite.js +1 -1
  169. package/dist/core/routes.js +45 -14
  170. package/dist/core/runtime/execution-control.js +226 -0
  171. package/dist/core/runtime/progress-recovery/progress-recovery.js +89 -0
  172. package/dist/core/runtime/task-profile.js +10 -4
  173. package/dist/core/runtime/verification-budget.js +10 -1
  174. package/dist/core/safety/intent-contract/intent-contract.js +94 -0
  175. package/dist/core/safety/mutation-guard.js +0 -2
  176. package/dist/core/safety/mutation-ledger.js +0 -2
  177. package/dist/core/safety/requested-scope-contract.js +0 -0
  178. package/dist/core/search-visibility/discovery.js +1 -1
  179. package/dist/core/search-visibility/index.js +12 -0
  180. package/dist/core/search-visibility/verifier.js +112 -3
  181. package/dist/core/session/project-namespace.js +0 -5
  182. package/dist/core/skills/skill-agent-metadata.js +1 -3
  183. package/dist/core/strategy/adhd-orchestrating-gate.js +0 -1
  184. package/dist/core/subagents/agent-catalog.js +2 -2
  185. package/dist/core/subagents/model-policy.js +65 -24
  186. package/dist/core/subagents/naruto-help-contract.js +3 -3
  187. package/dist/core/subagents/naruto-host-credentials.js +13 -0
  188. package/dist/core/subagents/official-subagent-preparation.js +1 -1
  189. package/dist/core/subagents/official-subagent-prompt.js +3 -3
  190. package/dist/core/subagents/role-model-preferences.js +1 -1
  191. package/dist/core/telegram/access.js +5 -1
  192. package/dist/core/telegram/client.js +13 -0
  193. package/dist/core/telegram/doctor.js +3 -0
  194. package/dist/core/telegram/keychain.js +100 -48
  195. package/dist/core/telegram/liveness.js +9 -0
  196. package/dist/core/telegram/state-lock.js +416 -0
  197. package/dist/core/text/strings.js +3 -0
  198. package/dist/core/triwiki/context-graph/store/evidence-write-lock.js +29 -0
  199. package/dist/core/triwiki/context-graph/store/fragment-cache.js +24 -0
  200. package/dist/core/triwiki/context-graph/store/snapshot-store.js +69 -21
  201. package/dist/core/triwiki/triwiki-gate-impact-map.js +2 -2
  202. package/dist/core/triwiki/triwiki-module-card.js +1 -2
  203. package/dist/core/update/installed-cli-resolution.js +170 -0
  204. package/dist/core/update/update-migration-state.js +25 -11
  205. package/dist/core/update-check.js +140 -68
  206. package/dist/core/version.js +1 -1
  207. package/dist/native/sks-menubar/Sources/AppDelegate.swift +8 -3
  208. package/dist/native/sks-menubar/Sources/ControlCenterWindowController.swift +6 -2
  209. package/dist/native/sks-menubar/Sources/OperationCoordinator.swift +156 -90
  210. package/dist/native/sks-menubar/Sources/OperationModels.swift +389 -0
  211. package/dist/native/sks-menubar/Sources/OverviewViewController.swift +57 -0
  212. package/dist/native/sks-menubar/Sources/ProcessClient.swift +3 -1
  213. package/dist/native/sks-menubar/Sources/ProvidersMultiProvider.swift +3 -0
  214. package/dist/native/sks-menubar/Sources/ProvidersOpenRouter.swift +58 -17
  215. package/dist/native/sks-menubar/Sources/ProvidersReliability.swift +302 -0
  216. package/dist/native/sks-menubar/Sources/ProvidersRoleModels.swift +5 -0
  217. package/dist/native/sks-menubar/Sources/ProvidersViewController.swift +65 -74
  218. package/dist/native/sks-menubar/Sources/RemoteCodingViewController.swift +462 -26
  219. package/dist/native/sks-menubar/Sources/SKSKeychainStore.swift +344 -0
  220. package/dist/native/sks-menubar/Sources/SecureProcessEnvelope.swift +27 -0
  221. package/dist/native/sks-menubar/Sources/StatusItemController.swift +10 -2
  222. package/dist/native/sks-menubar/Sources/TelegramPrivateFileStore.swift +192 -14
  223. package/dist/native/sks-menubar/Sources/TelegramPrivateFileSupport.swift +3 -70
  224. package/dist/native/sks-menubar/Sources/TelegramProcessGateway.swift +241 -25
  225. package/dist/native/sks-menubar/Sources/TelegramStateLock.swift +448 -0
  226. package/dist/native/sks-menubar/Sources/TelegramSupport.swift +131 -0
  227. package/dist/native/sks-menubar/Sources/TelegramTransport.swift +131 -106
  228. package/dist/scripts/all-feature-deep-completion-check.js +5 -1
  229. package/dist/scripts/check-publish-tag.js +56 -0
  230. package/dist/scripts/codex-lb-fast-mode-truth-check.js +9 -2
  231. package/dist/scripts/codex-lb-fast-ui-preservation-check.js +11 -2
  232. package/dist/scripts/codex-lb-gpt56-fast-profile-check.js +4 -2
  233. package/dist/scripts/codex-native-agent-role-content-check.js +3 -3
  234. package/dist/scripts/codex-native-gate-lib.js +14 -7
  235. package/dist/scripts/current-command-surface-check.js +5 -3
  236. package/dist/scripts/current-surface-update-e2e-check.js +4 -3
  237. package/dist/scripts/current-upgrade-matrix-check.js +5 -24
  238. package/dist/scripts/docs-truthfulness-check.js +17 -13
  239. package/dist/scripts/gate-lib.js +0 -2
  240. package/dist/scripts/gate-policy-audit-check.js +3 -2
  241. package/dist/scripts/harness-benchmark-check.js +1 -1
  242. package/dist/scripts/init-deep-backup-retention-check.js +1 -1
  243. package/dist/scripts/lib/codex-sdk-gate-lib.js +1 -2
  244. package/dist/scripts/loop-directive-check-lib.js +28 -38
  245. package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +14 -180
  246. package/dist/scripts/mad-sks-launch-sql-plane-boundary-check.js +2 -11
  247. package/dist/scripts/prepublish-release-check-or-fast.js +32 -0
  248. package/dist/scripts/publish-preflight.js +12 -0
  249. package/dist/scripts/release-affected-selector-check.js +2 -2
  250. package/dist/scripts/release-gate-batch-runner-check.js +2 -2
  251. package/dist/scripts/release-metadata-check.js +8 -12
  252. package/dist/scripts/release-real-check.js +2 -54
  253. package/dist/scripts/runtime-domain-gate-lib.js +2 -96
  254. package/dist/scripts/runtime-proof-summary-check.js +2 -6
  255. package/dist/scripts/search-visibility-gate-lib.js +0 -1
  256. package/dist/scripts/sks-cli-gate-lib.js +1 -1
  257. package/dist/scripts/typed-routing-gate-lib.js +7 -59
  258. package/docs/demo.tape +1 -1
  259. package/infra-harness-gates.json +1 -1456
  260. package/package.json +10 -7
  261. package/release-gates.v2.json +0 -1
  262. package/schemas/agents/parallel-runtime-proof.schema.json +0 -2
  263. package/schemas/codex/agent-result.schema.json +0 -6
  264. package/schemas/naruto/naruto-concurrency-governor.schema.json +1 -3
  265. package/schemas/release/release-gate-node.schema.json +1 -1
  266. package/dist/commands/zellij-lane.js +0 -22
  267. package/dist/commands/zellij-monitor-pane.js +0 -26
  268. package/dist/commands/zellij-slot-column-anchor.js +0 -22
  269. package/dist/commands/zellij-slot-pane.js +0 -80
  270. package/dist/commands/zellij-viewport-pane.js +0 -57
  271. package/dist/commands/zellij.js +0 -422
  272. package/dist/core/agents/agent-runner-zellij.js +0 -164
  273. package/dist/core/agents/agent-slot-pane-binding-proof.js +0 -96
  274. package/dist/core/agents/parallel-write-fixture.js +0 -305
  275. package/dist/core/agents/worker-pane-communication-contract.js +0 -100
  276. package/dist/core/agents/zellij-lane-supervisor.js +0 -428
  277. package/dist/core/agents/zellij-right-lane-cockpit.js +0 -66
  278. package/dist/core/doctor/doctor-zellij-repair.js +0 -40
  279. package/dist/core/ops/upgrade-migration-fixtures.js +0 -119
  280. package/dist/core/proof/route-finalizer-fixtures.js +0 -21
  281. package/dist/core/zellij/homebrew-policy.js +0 -43
  282. package/dist/core/zellij/zellij-capability.js +0 -126
  283. package/dist/core/zellij/zellij-clipboard-config.js +0 -52
  284. package/dist/core/zellij/zellij-command.js +0 -149
  285. package/dist/core/zellij/zellij-fake-adapter.js +0 -186
  286. package/dist/core/zellij/zellij-lane-renderer.js +0 -706
  287. package/dist/core/zellij/zellij-lane-runtime.js +0 -189
  288. package/dist/core/zellij/zellij-launcher.js +0 -287
  289. package/dist/core/zellij/zellij-layout-builder.js +0 -191
  290. package/dist/core/zellij/zellij-monitor-renderer.js +0 -52
  291. package/dist/core/zellij/zellij-official-subagent-activity.js +0 -526
  292. package/dist/core/zellij/zellij-official-subagent-telemetry.js +0 -258
  293. package/dist/core/zellij/zellij-pane-proof.js +0 -226
  294. package/dist/core/zellij/zellij-right-column-manager.js +0 -308
  295. package/dist/core/zellij/zellij-screen-proof.js +0 -120
  296. package/dist/core/zellij/zellij-self-heal-types.js +0 -44
  297. package/dist/core/zellij/zellij-self-heal.js +0 -408
  298. package/dist/core/zellij/zellij-slot-column-anchor.js +0 -304
  299. package/dist/core/zellij/zellij-slot-pane-renderer.js +0 -521
  300. package/dist/core/zellij/zellij-slot-telemetry.js +0 -384
  301. package/dist/core/zellij/zellij-theme.js +0 -66
  302. package/dist/core/zellij/zellij-ui-mode.js +0 -34
  303. package/dist/core/zellij/zellij-update.js +0 -348
  304. package/dist/core/zellij/zellij-viewport-binder.js +0 -61
  305. package/dist/core/zellij/zellij-worker-pane-manager.js +0 -881
  306. package/dist/core/zellij/zellij-worker-pane-summary.js +0 -64
  307. package/dist/native/sks-menubar/Tests/AppRuntimeTestSupport.swift +0 -26
  308. package/dist/native/sks-menubar/Tests/OperationCoordinatorTests.swift +0 -175
  309. package/dist/native/sks-menubar/Tests/ProcessClientTests.swift +0 -20
  310. package/dist/native/sks-menubar/Tests/ProvidersViewControllerTests.swift +0 -271
  311. package/dist/native/sks-menubar/Tests/SingletonInstanceGuardTests.swift +0 -183
  312. package/dist/native/sks-menubar/Tests/TelegramRuntimeSmokeTests.swift +0 -267
  313. package/dist/native/sks-menubar/Tests/TelegramRuntimeTests.swift +0 -222
  314. package/dist/scripts/zellij-pane-proof-check.js +0 -88
  315. package/dist/scripts/zellij-real-session-cleanup-check.js +0 -139
  316. package/dist/scripts/zellij-real-session-launch-check.js +0 -126
  317. package/dist/scripts/zellij-screen-proof-check.js +0 -43
  318. package/schemas/zellij/zellij-right-column-state.schema.json +0 -40
  319. package/schemas/zellij/zellij-slot-telemetry.schema.json +0 -89
  320. package/schemas/zellij/zellij-worker-pane.schema.json +0 -53
  321. package/scripts/build-clean-atomic.mjs +0 -323
@@ -10,7 +10,6 @@ import { EMPTY_CODEX_INFO, getCodexInfo } from '../core/codex-adapter.js';
10
10
  import { formatHarnessConflictReport, llmHarnessCleanupPrompt, scanHarnessConflicts } from '../core/harness-conflicts.js';
11
11
  import { initProject, installGlobalSkills } from '../core/init.js';
12
12
  import { context7ConfigToml, DOLLAR_SKILL_NAMES, GETDESIGN_REFERENCE, hasContext7ConfigText, RECOMMENDED_SKILLS } from '../core/routes.js';
13
- import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
14
13
  import { reconcileCodexAppUpgradeProcesses } from '../core/codex-app.js';
15
14
  import { restartCodexApp } from '../core/codex-app/codex-app-restart.js';
16
15
  import { cleanupMacLaunchSecretEnvironment } from '../core/codex-app/menubar/index.js';
@@ -72,12 +71,13 @@ export async function selftestSksShimRepair() {
72
71
  const staleShimTmp = tmpdir();
73
72
  const staleBin = path.join(staleShimTmp, 'old-prefix', 'bin');
74
73
  const stalePkg = path.join(staleShimTmp, 'old-prefix', 'lib', 'node_modules', 'sneakoscope');
75
- await ensureDir(path.join(stalePkg, 'bin'));
74
+ const staleEntrypoint = path.join(stalePkg, 'dist', 'bin', 'sks.js');
75
+ await ensureDir(path.dirname(staleEntrypoint));
76
76
  await ensureDir(staleBin);
77
77
  await writeTextAtomic(path.join(stalePkg, 'package.json'), JSON.stringify({ name: 'sneakoscope', version: '0.0.1' }, null, 2));
78
- await writeTextAtomic(path.join(stalePkg, 'bin', 'sks.js'), '#!/usr/bin/env node\nconsole.log("sneakoscope 0.0.1");\n');
79
- await fsp.chmod(path.join(stalePkg, 'bin', 'sks.js'), 0o755).catch(() => { });
80
- await fsp.symlink(path.join(stalePkg, 'bin', 'sks.js'), path.join(staleBin, 'sks'));
78
+ await writeTextAtomic(staleEntrypoint, '#!/usr/bin/env node\nconsole.log("sneakoscope 0.0.1");\n');
79
+ await fsp.chmod(staleEntrypoint, 0o755).catch(() => { });
80
+ await fsp.symlink(staleEntrypoint, path.join(staleBin, 'sks'));
81
81
  const repair = await ensureSksCommandDuringInstall({ force: true, pathEnv: staleBin, home: path.join(staleShimTmp, 'home') });
82
82
  if (repair.status !== 'repaired')
83
83
  throw new Error(`selftest: stale global sks shim was not repaired (${repair.status})`);
@@ -136,10 +136,13 @@ async function inspectSksPathShim(candidate, opts = {}) {
136
136
  }
137
137
  function sksPackageRootForBin(file) {
138
138
  const normalized = String(file || '').split(path.sep).join('/');
139
- const marker = '/node_modules/sneakoscope/bin/';
139
+ const marker = '/node_modules/sneakoscope/';
140
140
  const idx = normalized.lastIndexOf(marker);
141
141
  if (idx < 0)
142
142
  return null;
143
+ const relative = normalized.slice(idx + marker.length);
144
+ if (!/^(?:dist\/)?bin\//.test(relative))
145
+ return null;
143
146
  return normalized.slice(0, idx + '/node_modules/sneakoscope'.length).split('/').join(path.sep);
144
147
  }
145
148
  async function installedPackageVersion(root) {
@@ -9,7 +9,6 @@ import { guardedPackageInstall, guardContextForRoute } from '../core/safety/muta
9
9
  import { formatHarnessConflictReport, llmHarnessCleanupPrompt, scanHarnessConflicts } from '../core/harness-conflicts.js';
10
10
  import { initProject, installGlobalSkills } from '../core/init.js';
11
11
  import { context7ConfigToml, DOLLAR_SKILL_NAMES, GETDESIGN_REFERENCE, hasContext7ConfigText, RECOMMENDED_SKILLS } from '../core/routes.js';
12
- import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
13
12
  import { reconcileCodexAppUpgradeProcesses } from '../core/codex-app.js';
14
13
  import { restartCodexApp } from '../core/codex-app/codex-app-restart.js';
15
14
  import { cleanupMacLaunchSecretEnvironment } from '../core/codex-app/menubar/index.js';
@@ -1633,12 +1632,16 @@ export async function codexLbStatus(opts = {}) {
1633
1632
  && providerName === 'codex-lb'
1634
1633
  && providerWireApi === 'responses'
1635
1634
  && providerEnvKey === CODEX_LB_PROVIDER_ENV_KEY
1635
+ && providerHasSeparateGatewayAuth
1636
1636
  && providerSupportsWebsockets === true
1637
1637
  && providerOpenAiAuthDisabled;
1638
1638
  const retiredCompatConfigured = desktopMode === 'desktop-dual-auth-compat';
1639
1639
  const definedButNotSelected = providerConfigured && !selected && desktopMode === null;
1640
1640
  const providerContractOk = !retiredCompatConfigured && cliProviderContractOk;
1641
- const providerUsesCodexLbEnvAuth = providerConfigured && providerEnvKey === CODEX_LB_PROVIDER_ENV_KEY && providerOpenAiAuthDisabled;
1641
+ const providerUsesCodexLbEnvAuth = providerConfigured
1642
+ && providerEnvKey === CODEX_LB_PROVIDER_ENV_KEY
1643
+ && providerHasSeparateGatewayAuth
1644
+ && providerOpenAiAuthDisabled;
1642
1645
  const oauthAvailable = authMode.mode === 'chatgpt_oauth' || authMode.mode === 'browser_marker';
1643
1646
  const authRoutingCoherent = desktopMode === 'desktop-native-bridge'
1644
1647
  ? !selected && oauthAvailable && !codexLbKeyInSharedAuth
@@ -1884,11 +1887,15 @@ function codexLbProviderOpenAiAuthDisabled(text = '') {
1884
1887
  }
1885
1888
  function codexLbProviderEnvKey(text = '') {
1886
1889
  const block = String(text || '').match(/(^|\n)\[model_providers\.codex-lb\]([\s\S]*?)(?=\n\[[^\]]+\]|\s*$)/)?.[2] || '';
1887
- return block.match(/(^|\n)\s*env_key\s*=\s*"([^"]+)"/)?.[2] || '';
1890
+ return block.match(/(^|\n)\s*env_key\s*=\s*"([^"]+)"/)?.[2]
1891
+ || block.match(/env_http_headers\s*=\s*\{[^}]*"X-Codex-LB-API-Key"\s*=\s*"([^"]+)"[^}]*\}/)?.[1]
1892
+ || '';
1888
1893
  }
1889
1894
  function codexLbProviderHasSeparateGatewayAuth(text = '') {
1890
1895
  const block = String(text || '').match(/(^|\n)\[model_providers\.codex-lb\]([\s\S]*?)(?=\n\[[^\]]+\]|\s*$)/)?.[2] || '';
1891
- return /X-Codex-LB-API-Key/.test(block) && /CODEX_LB_API_KEY/.test(block);
1896
+ return /X-Codex-LB-API-Key/.test(block)
1897
+ && /CODEX_LB_API_KEY/.test(block)
1898
+ && !/(^|\n)\s*env_key\s*=/.test(block);
1892
1899
  }
1893
1900
  function codexLbFastModeConfigStatus(text = '') {
1894
1901
  const globalServiceTier = topLevelTomlString(text, 'service_tier');
@@ -2872,7 +2879,7 @@ async function inspectCodexLbMacLaunchEnvironment(baseUrl = '', opts = {}) {
2872
2879
  : []
2873
2880
  };
2874
2881
  }
2875
- export { checkContext7, ensureCodexCliTool, ensureMadLaunchDependencies, ensureRelatedCliTools, ensureZellijCliTool, formatMadLaunchDependencyAction, maybePromptCodexUpdateForLaunch, maybePromptSksUpdateForLaunch, shouldAutoApproveInstall } from './install-tool-helpers.js';
2882
+ export { checkContext7, ensureCodexCliTool, ensureRelatedCliTools, maybePromptCodexUpdateForLaunch, maybePromptSksUpdateForLaunch, shouldAutoApproveInstall } from './install-tool-helpers.js';
2876
2883
  export { codexFastModeDesktopStatus, ensureGlobalCodexFastModeDuringInstall, normalizeCodexFastModeUiConfig, safeWriteCodexConfigToml } from '../core/codex-runtime/codex-desktop-config-policy.js';
2877
2884
  export { checkRequiredSkills, context7GlobalMcpStatus, ensureCodexImagegenDuringInstall, ensureGlobalCodexSkillsDuringInstall, ensureProjectContext7Config, ensureSksCommandDuringInstall, globalCodexSkillsRoot, selftestSksShimRepair } from './install-helpers-install-support.js';
2878
2885
  export { askPostinstallQuestion, codexLbConfigPath, codexLbEnvPath, normalizeCodexLbBaseUrl } from './install-helpers-codex-lb-shared.js';
@@ -7,56 +7,10 @@ import { exists, globalSksRoot, PACKAGE_VERSION, runProcess, which } from '../co
7
7
  import { hasContext7ConfigText } from '../core/routes.js';
8
8
  import { createRequestedScopeContract } from '../core/safety/requested-scope-contract.js';
9
9
  import { guardedPackageInstall, guardContextForRoute } from '../core/safety/mutation-guard.js';
10
- import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
11
10
  export async function ensureRelatedCliTools(args = []) {
12
11
  const skip = args.includes('--skip-cli-tools') || process.env.SKS_SKIP_CLI_TOOLS === '1';
13
12
  const codex = await ensureCodexCliTool({ skip, args });
14
- const zellijRepair = skip ? { status: 'skipped', reason: 'SKS_SKIP_CLI_TOOLS=1 or --skip-cli-tools' } : await ensureZellijCliTool(args);
15
- const zellij = await checkZellijCapability({ require: false, writeReport: false });
16
- return {
17
- codex,
18
- zellij: {
19
- ok: zellij.status === 'ok',
20
- bin: zellij.bin,
21
- version: zellij.version,
22
- min_version: zellij.min_version,
23
- current_session: false,
24
- repair: zellijRepair,
25
- install_hint: zellij.status === 'ok' ? null : zellijInstallHint(),
26
- error: zellijRepair.error || zellij.blockers[0] || zellij.warnings[0] || null
27
- }
28
- };
29
- }
30
- export async function ensureMadLaunchDependencies(args = []) {
31
- const skip = args.includes('--skip-cli-tools') || process.env.SKS_SKIP_CLI_TOOLS === '1';
32
- const zellijRepair = skip ? { target: 'zellij', status: 'skipped', reason: 'SKS_SKIP_CLI_TOOLS=1 or --skip-cli-tools' } : await ensureZellijCliTool(args);
33
- const zellij = await checkZellijCapability({ require: false, writeReport: false });
34
- const ready = zellij.status === 'ok';
35
- return {
36
- ready,
37
- actions: ready ? [] : [{
38
- target: 'zellij',
39
- status: zellijRepair.status,
40
- command: zellijRepair.command || zellijInstallHint(),
41
- error: zellijRepair.error || zellij.blockers[0] || zellij.warnings[0] || null,
42
- repair: zellijRepair
43
- }],
44
- status: {
45
- zellij: {
46
- ok: ready,
47
- status: zellij.status,
48
- version: zellij.version,
49
- min_version: zellij.min_version,
50
- repair: zellijRepair,
51
- install_hint: ready ? null : zellijInstallHint()
52
- }
53
- }
54
- };
55
- }
56
- export function formatMadLaunchDependencyAction(action = {}) {
57
- const command = action.command ? ` Run: ${action.command}.` : '';
58
- const error = action.error ? ` ${action.error}` : '';
59
- return `${action.target || 'dependency'} ${action.status || 'blocked'}.${command}${error}`.trim();
13
+ return { codex };
60
14
  }
61
15
  export async function ensureCodexCliTool({ skip = false, args = [] } = {}) {
62
16
  if (skip)
@@ -88,37 +42,6 @@ export async function ensureCodexCliTool({ skip = false, args = [] } = {}) {
88
42
  hint: after.bin ? null : 'npm completed, but codex is not on PATH. Restart the shell or set SKS_CODEX_BIN.'
89
43
  };
90
44
  }
91
- export async function ensureZellijCliTool(args = [], opts = {}) {
92
- const before = await checkZellijCapability({ require: false, writeReport: false });
93
- if (before.status === 'ok')
94
- return { target: 'zellij', status: 'present', bin: before.bin, version: before.version || null };
95
- const command = zellijInstallHint();
96
- if (process.platform !== 'darwin')
97
- return { target: 'zellij', status: 'manual_required', command, error: before.blockers[0] || before.warnings[0] || 'zellij not found' };
98
- const brew = await which('brew').catch(() => null);
99
- if (!brew)
100
- return { target: 'zellij', status: 'manual_required', command: 'Install Homebrew, then run: brew install zellij', error: before.blockers[0] || before.warnings[0] || 'zellij not found' };
101
- if (args.includes('--dry-run') || opts.dryRun)
102
- return { target: 'zellij', status: 'dry_run', command, error: before.blockers[0] || before.warnings[0] || null };
103
- const hasInstalledZellij = Boolean(before.version);
104
- const question = hasInstalledZellij
105
- ? `Homebrew Zellij ${before.version || 'unknown'} is not ready. Upgrade to latest Zellij with ${command}?`
106
- : `Zellij is missing. Install latest Zellij with ${command}?`;
107
- if (!await confirmInstallYesDefault(question, args))
108
- return { target: 'zellij', status: 'needs_approval', command, error: before.blockers[0] || before.warnings[0] || null };
109
- const brewArgs = hasInstalledZellij ? ['upgrade', 'zellij'] : ['install', 'zellij'];
110
- const zellijRoot = globalSksRoot();
111
- const zellijContract = createRequestedScopeContract({
112
- route: 'install', userRequest: command, projectRoot: zellijRoot, overrides: { package_install: true, zellij_install: true }
113
- });
114
- const install = await guardedPackageInstall(guardContextForRoute(zellijRoot, zellijContract, command), 'zellij', { confirmed: true, command: brew, args: brewArgs, timeoutMs: 180000 }).catch((err) => ({ code: 1, stdout: '', stderr: err.message }));
115
- if (install.code !== 0)
116
- return { target: 'zellij', status: 'failed', command, error: `${install.stderr || install.stdout || command + ' failed'}`.trim() };
117
- const after = await checkZellijCapability({ require: false, writeReport: false });
118
- if (after.status !== 'ok')
119
- return { target: 'zellij', status: 'installed_not_ready', command, error: after.blockers[0] || after.warnings[0] || 'zellij installed but not ready' };
120
- return { target: 'zellij', status: hasInstalledZellij ? 'upgraded' : 'installed', command, bin: after.bin, version: after.version || null };
121
- }
122
45
  export async function maybePromptCodexUpdateForLaunch(args = [], opts = {}) {
123
46
  if (hasFlag(args, '--json') || hasFlag(args, '--skip-cli-tools') || hasFlag(args, '--skip-codex-update') || process.env.SKS_SKIP_CODEX_UPDATE === '1')
124
47
  return { status: 'skipped' };
@@ -126,7 +49,7 @@ export async function maybePromptCodexUpdateForLaunch(args = [], opts = {}) {
126
49
  const codex = await getCodexInfo().catch(() => EMPTY_CODEX_INFO);
127
50
  const current = codexCliVersionNumber(codex.version);
128
51
  const command = 'npm i -g @openai/codex@latest';
129
- const label = opts.label || 'Zellij launch';
52
+ const label = opts.label || 'Codex launch';
130
53
  const missing = !codex.bin;
131
54
  const updateAvailable = Boolean(latest.version && current && compareVersions(latest.version, current) > 0);
132
55
  if (!missing && !updateAvailable)
@@ -215,9 +138,6 @@ export async function checkContext7(root) {
215
138
  result.ok = result.project.ok || result.codex_mcp_list.ok || (result.global.ok && !list.checked);
216
139
  return result;
217
140
  }
218
- function zellijInstallHint() {
219
- return process.platform === 'darwin' ? 'brew install zellij' : 'Install Zellij from https://zellij.dev/documentation/installation.html';
220
- }
221
141
  async function confirmInstallYesDefault(question, args = []) {
222
142
  if (hasFlag(args, '--from-postinstall') && process.env.SKS_POSTINSTALL_AUTO_INSTALL_CLI_TOOLS !== '1')
223
143
  return false;
@@ -2,6 +2,11 @@ import { PACKAGE_VERSION } from '../core/version.js';
2
2
  export function sksTextLogo() {
3
3
  return `SKS\nSNEAKOSCOPE CODEX v${PACKAGE_VERSION}`;
4
4
  }
5
- export function printJson(value) {
5
+ export function printJson(value, options = {}) {
6
+ if (options.failureExitCode !== false && value && typeof value === 'object' && value.ok === false) {
7
+ const current = Number(process.exitCode || 0);
8
+ if (!Number.isFinite(current) || current === 0)
9
+ process.exitCode = 1;
10
+ }
6
11
  console.log(JSON.stringify(value, null, 2));
7
12
  }
@@ -1,7 +1,53 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { createHash } from 'node:crypto';
1
3
  import { COMMAND_ALIASES_LITE, COMMAND_MANIFEST_BY_NAME, COMMAND_NAME_SET, } from './command-manifest-lite.js';
2
4
  import { ui as cliUi } from './cli-theme.js';
3
5
  import { helpResult, isHelpRequest, renderManifestHelp } from './help.js';
4
6
  import { findRetiredGlobalExecutionArgumentErrors } from './global-mode-router.js';
7
+ import { normalizeIntentCommand, } from '../core/commands/intent-normalization/normalizer.js';
8
+ const routerIntentStorage = new AsyncLocalStorage();
9
+ export function currentRouterIntentContract() {
10
+ return routerIntentStorage.getStore() || null;
11
+ }
12
+ export function prepareRouterExecutionIntent(argv, inheritance = {}) {
13
+ const effectiveArgv = argv.length ? [...argv] : ['doctor'];
14
+ const rawCommand = effectiveArgv[0]?.startsWith('$')
15
+ ? effectiveArgv.join(' ')
16
+ : `sks ${effectiveArgv.join(' ')}`;
17
+ const parent = inheritance.parentContract;
18
+ if (parent) {
19
+ const normalized = normalizeIntentCommand({
20
+ rawCommand,
21
+ naturalLanguageEffect: parent.natural_language_effect,
22
+ effect: parent.effect,
23
+ observedChangedPaths: parent.observed_changed_paths,
24
+ targetHashes: parent.target_hashes,
25
+ policyVersion: parent.policy_version,
26
+ modeSnapshot: parent.mode_snapshot,
27
+ evidenceState: parent.evidence_state,
28
+ retryBudget: parent.retry_budget,
29
+ requestedRisk: parent.risk,
30
+ explicitUltraOptIn: parent.risk === 'ULTRA',
31
+ force: parent.force,
32
+ });
33
+ if (normalized.contract.contract_hash !== parent.contract_hash) {
34
+ throw new Error('router_parent_intent_contract_mismatch');
35
+ }
36
+ return Object.freeze({ ...normalized, contract: parent });
37
+ }
38
+ const preflight = normalizeIntentCommand({
39
+ rawCommand,
40
+ naturalLanguageEffect: inheritance.naturalLanguageEffect || `Execute ${effectiveArgv[0] || 'doctor'}`,
41
+ effect: inheritance.effect || classifyCliIntentEffect(effectiveArgv),
42
+ targetHashes: [createHash('sha256').update(`${process.cwd()}\0${effectiveArgv[0] || 'doctor'}`).digest('hex')],
43
+ policyVersion: 'sks-cli-router-v1',
44
+ modeSnapshot: inheritance.modeSnapshot || providerModeFromEnvironment(),
45
+ evidenceState: inheritance.evidenceState || 'missing',
46
+ retryBudget: inheritance.retryBudget ?? 0,
47
+ force: effectiveArgv.includes('--force'),
48
+ });
49
+ return preflight;
50
+ }
5
51
  export function isCommandName(value) {
6
52
  return COMMAND_NAME_SET.has(value);
7
53
  }
@@ -22,7 +68,28 @@ export function normalizeCommand(args = []) {
22
68
  export async function dispatch(args) {
23
69
  const argv = args ?? process.argv.slice(2);
24
70
  try {
25
- return await dispatchInner(argv);
71
+ let intent = null;
72
+ try {
73
+ intent = prepareRouterExecutionIntent(argv);
74
+ }
75
+ catch (error) {
76
+ const code = error instanceof Error ? error.message : String(error);
77
+ if (code === 'intent_legacy_option_unsupported') {
78
+ process.exitCode = 1;
79
+ const result = { ok: false, status: 'blocked', reason: code, command: argv[0] || 'doctor' };
80
+ if (argv.includes('--json'))
81
+ console.log(JSON.stringify(result, null, 2));
82
+ else
83
+ console.error(code);
84
+ return result;
85
+ }
86
+ if (!['intent_cli_command_unknown', 'intent_dollar_command_unknown', 'intent_dollar_command_unmapped'].includes(code)) {
87
+ throw error;
88
+ }
89
+ }
90
+ return intent
91
+ ? await routerIntentStorage.run(intent.contract, () => dispatchInner(argv))
92
+ : await dispatchInner(argv);
26
93
  }
27
94
  catch (err) {
28
95
  const message = err instanceof Error ? err.message : String(err);
@@ -37,6 +104,32 @@ export async function dispatch(args) {
37
104
  return result;
38
105
  }
39
106
  }
107
+ function providerModeFromEnvironment() {
108
+ const mode = String(process.env.SKS_PROVIDER_MODE || '').trim();
109
+ return mode === 'codex-lb' || mode === 'openrouter' || mode === 'chatgpt-oauth'
110
+ ? mode
111
+ : 'chatgpt-oauth';
112
+ }
113
+ function classifyCliIntentEffect(argv) {
114
+ const normalized = normalizeCommand(argv);
115
+ const command = normalized.command;
116
+ const entry = command ? COMMAND_MANIFEST_BY_NAME[command] : null;
117
+ const tokens = argv.map((value) => String(value).toLowerCase());
118
+ const action = tokens.slice(1).find((value) => !value.startsWith('-')) || '';
119
+ if (entry?.readonly === true || safeReadOnlySubcommand(command, normalized.args))
120
+ return 'read';
121
+ if (/^(?:delete|remove|uninstall|purge|cleanup)$/.test(action))
122
+ return 'delete';
123
+ if (/^(?:deploy|publish|release|push)$/.test(action))
124
+ return 'deploy';
125
+ if (/^(?:login|logout|signin|sign-in|auth|setup|reconnect)$/.test(action))
126
+ return 'auth';
127
+ if (/^(?:install|update|upgrade|add-dependency)$/.test(action))
128
+ return 'dependency';
129
+ if (/^(?:security|permissions|sign|verify-signature|rotate)$/.test(action))
130
+ return 'security';
131
+ return 'write';
132
+ }
40
133
  async function dispatchInner(argv) {
41
134
  const retiredGlm = findRetiredGlobalExecutionArgumentErrors(argv).filter((item) => item.includes('--glm'));
42
135
  if (retiredGlm.length && argv.some((arg) => arg === '--glm' || String(arg).startsWith('--glm='))) {
@@ -133,7 +226,13 @@ async function dispatchInner(argv) {
133
226
  }
134
227
  if (typeof mod.run !== 'function')
135
228
  throw new Error(`Command ${command} must export run(command, args)`);
136
- return mod.run(rawCommand || command, rest);
229
+ const result = await mod.run(rawCommand || command, rest);
230
+ if (argv.includes('--json') && result && typeof result === 'object' && result.ok === false) {
231
+ const current = Number(process.exitCode || 0);
232
+ if (!Number.isFinite(current) || current === 0)
233
+ process.exitCode = 1;
234
+ }
235
+ return result;
137
236
  }
138
237
  async function ensureActiveRouteCommandGate(command, args) {
139
238
  const entry = COMMAND_MANIFEST_BY_NAME[command];
@@ -106,7 +106,8 @@ export async function run(command, args = []) {
106
106
  const routingTruth = await measureAndWriteCodexLbRoutingTruth({
107
107
  selected: status.selected === true,
108
108
  baseUrl: loadedEnv.base_url,
109
- apiKey: loadedEnv.secret_api_key
109
+ apiKey: loadedEnv.secret_api_key,
110
+ authTransport: 'x-codex-lb-api-key'
110
111
  }, {
111
112
  home: path.dirname(path.dirname(status.env_path))
112
113
  });
@@ -144,7 +145,8 @@ export async function run(command, args = []) {
144
145
  const routingTruth = await measureAndWriteCodexLbRoutingTruth({
145
146
  selected: status.selected === true,
146
147
  baseUrl: loadedEnv.base_url,
147
- apiKey: loadedEnv.secret_api_key
148
+ apiKey: loadedEnv.secret_api_key,
149
+ authTransport: 'x-codex-lb-api-key'
148
150
  }, {
149
151
  home: path.dirname(path.dirname(status.env_path))
150
152
  });
@@ -561,7 +563,7 @@ export async function run(command, args = []) {
561
563
  selected: result.codex_lb?.selected === true,
562
564
  baseUrl: result.base_url || null,
563
565
  apiKey: options.apiKey,
564
- authTransport: 'authorization-bearer'
566
+ authTransport: 'x-codex-lb-api-key'
565
567
  }, {
566
568
  home: path.dirname(path.dirname(result.env_path))
567
569
  })
@@ -51,7 +51,7 @@ export function doctorPhaseIdsForProfile(profile) {
51
51
  function unknownDoctorFlags(args) {
52
52
  const knownBoolean = new Set([
53
53
  '--fix', '--yes', '-y', '--machine-only', '--actual-codex', '--require-actual-codex',
54
- '--full', '--capabilities', '--repair-codex-app-ui', '--repair-zellij', '--install-homebrew',
54
+ '--full', '--capabilities', '--repair-codex-app-ui',
55
55
  '--repair-native-capabilities', '--repair-codex-native', '--local-only', '--global-only', '--project', '--global',
56
56
  '--dry-run', '--json'
57
57
  ]);