sneakoscope 7.1.0 → 7.3.0

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 (534) hide show
  1. package/README.md +9 -1
  2. package/config/architecture-budgets.v1.json +1 -8
  3. package/crates/sks-core/Cargo.lock +225 -1
  4. package/crates/sks-core/Cargo.toml +8 -1
  5. package/crates/sks-core/src/main.rs +7 -1
  6. package/crates/sks-core/src/search/files.rs +114 -0
  7. package/crates/sks-core/src/search/mod.rs +274 -0
  8. package/crates/sks-core/src/search/text.rs +175 -0
  9. package/dist/bin/sks-dispatch.js +4 -3
  10. package/dist/cli/command-manifest-lite.js +177 -6
  11. package/dist/cli/command-registry.js +42 -8
  12. package/dist/cli/help.js +30 -0
  13. package/dist/cli/install-helpers-codex-lb-config.js +9 -6
  14. package/dist/cli/install-helpers-codex-lb-selftest-chain.js +1 -1
  15. package/dist/cli/install-helpers-install-support.js +1 -1
  16. package/dist/cli/install-helpers.js +19 -9
  17. package/dist/cli/router.js +16 -3
  18. package/dist/commands/codex-app.js +40 -5
  19. package/dist/commands/doctor-profile.js +78 -0
  20. package/dist/commands/doctor.js +29 -69
  21. package/dist/commands/search.js +4 -0
  22. package/dist/config/skills-manifest.json +53 -60
  23. package/dist/core/agent-bridge/agent-manifest.js +22 -26
  24. package/dist/core/agent-bridge/host-capability-policy.js +109 -8
  25. package/dist/core/agent-bridge/host-capability-runtime.js +178 -50
  26. package/dist/core/agent-guidance/directive-registry.js +123 -0
  27. package/dist/core/agents/agent-effort-policy.js +45 -6
  28. package/dist/core/agents/agent-worker-pipeline.js +1 -3
  29. package/dist/core/agents/native-worker-backend-router.js +43 -19
  30. package/dist/core/auto-review.js +1 -3
  31. package/dist/core/code-structure.js +282 -19
  32. package/dist/core/codex/codex-config-guard.js +14 -4
  33. package/dist/core/codex/codex-config-toml.js +1 -3
  34. package/dist/core/codex-app/codex-agent-role-sync.js +1 -3
  35. package/dist/core/codex-app/codex-app-fast-ui-repair.js +14 -1
  36. package/dist/core/codex-app/codex-app-types.js +2 -3
  37. package/dist/core/codex-app/codex-desktop-routing-ownership.js +91 -0
  38. package/dist/core/codex-app/codex-hook-approval-probe.js +1 -3
  39. package/dist/core/codex-app/codex-hook-lifecycle.js +1 -3
  40. package/dist/core/codex-app/codex-init-deep.js +22 -10
  41. package/dist/core/codex-app/codex-model-catalog.js +384 -0
  42. package/dist/core/codex-app/codex-models-cache.js +160 -0
  43. package/dist/core/codex-app/desktop-routing-snapshot.js +233 -0
  44. package/dist/core/codex-app/glm-profile-installer.js +1 -3
  45. package/dist/core/codex-app/mcp-manager.js +1 -3
  46. package/dist/core/codex-app/menubar/constants.js +3 -0
  47. package/dist/core/codex-app/menubar/installer.js +11 -1
  48. package/dist/core/codex-app/multi-provider-router-support.js +202 -0
  49. package/dist/core/codex-app/multi-provider-router.js +379 -0
  50. package/dist/core/codex-app/openrouter-activate.js +189 -26
  51. package/dist/core/codex-app/openrouter-base-instructions.js +1 -0
  52. package/dist/core/codex-app/openrouter-model-catalog.js +217 -0
  53. package/dist/core/codex-app/role-model-catalog-priority.js +61 -0
  54. package/dist/core/codex-app.js +30 -6
  55. package/dist/core/codex-compat/codex-hook-semantic-validator.js +1 -3
  56. package/dist/core/codex-control/codex-app-server-v2-client.js +39 -2
  57. package/dist/core/codex-lb/codex-lb-env.js +1 -3
  58. package/dist/core/codex-lb/codex-lb-tool-catalog.js +6 -1
  59. package/dist/core/codex-native/codex-native-feature-broker.js +2 -6
  60. package/dist/core/codex-native/codex-native-interop-policy.js +1 -3
  61. package/dist/core/codex-native/codex-native-reference-cache.js +1 -3
  62. package/dist/core/codex-native/codex-native-reference-source.js +1 -3
  63. package/dist/core/codex-native/codex-native-repair-transaction.js +1 -3
  64. package/dist/core/codex-native/core-skill-manifest.js +3 -2
  65. package/dist/core/codex-native/native-capability-repair-matrix.js +1 -3
  66. package/dist/core/codex-plugins/codex-plugin-repair.js +1 -3
  67. package/dist/core/codex-runtime/codex-desktop-config-policy.js +4 -4
  68. package/dist/core/commands/agent-bridge-command.js +24 -3
  69. package/dist/core/commands/image-ux-review-command.js +5 -11
  70. package/dist/core/commands/menubar-command.js +1 -1
  71. package/dist/core/commands/naruto-command.js +40 -13
  72. package/dist/core/commands/pipeline-command.js +5 -2
  73. package/dist/core/commands/release-command.js +63 -1
  74. package/dist/core/commands/remote-command.js +18 -0
  75. package/dist/core/commands/search-command.js +151 -0
  76. package/dist/core/commands/telegram-command.js +251 -108
  77. package/dist/core/commands/uninstall-command.js +1 -1
  78. package/dist/core/config/secret-preservation.js +1 -3
  79. package/dist/core/context7-client.js +2 -1
  80. package/dist/core/db-review.js +704 -0
  81. package/dist/core/db-safety.js +17 -23
  82. package/dist/core/doctor/browser-use-repair.js +1 -3
  83. package/dist/core/doctor/codex-startup-config-repair.js +1 -3
  84. package/dist/core/doctor/computer-use-repair.js +1 -3
  85. package/dist/core/doctor/context7-mcp-repair.js +1 -3
  86. package/dist/core/doctor/current-project-guidance.js +1 -3
  87. package/dist/core/doctor/doctor-codex-startup-repair.js +1 -3
  88. package/dist/core/doctor/doctor-dirty-planner.js +2 -2
  89. package/dist/core/doctor/doctor-native-capability-repair.js +1 -3
  90. package/dist/core/doctor/doctor-transaction.js +1 -3
  91. package/dist/core/doctor/imagegen-repair.js +1 -3
  92. package/dist/core/doctor/legacy-global-hook-cleanup.js +1 -3
  93. package/dist/core/doctor/mcp-transport-collision-repair.js +1 -3
  94. package/dist/core/doctor/retired-managed-residue-private.js +1 -3
  95. package/dist/core/doctor/supabase-mcp-repair.js +1 -3
  96. package/dist/core/engineering-sanity-review.js +186 -0
  97. package/dist/core/errors/message.js +3 -0
  98. package/dist/core/evidence/evidence-schema.js +1 -3
  99. package/dist/core/feature-fixtures.js +1 -0
  100. package/dist/core/feature-registry.js +1 -3
  101. package/dist/core/fsx.js +13 -0
  102. package/dist/core/git-hygiene/shared-memory-publish.js +1 -3
  103. package/dist/core/git-hygiene/validators.js +1 -3
  104. package/dist/core/harness-guard.js +21 -3
  105. package/dist/core/hooks-runtime/hook-context.js +2 -2
  106. package/dist/core/image-ux-review/imagegen-adapter.js +52 -56
  107. package/dist/core/image-ux-review/real-callout-extractor.js +6 -1
  108. package/dist/core/image-ux-review.js +3 -5
  109. package/dist/core/imagegen/codex-lb-imagegen-target.js +70 -0
  110. package/dist/core/imagegen/imagegen-capability.js +11 -11
  111. package/dist/core/imagegen/imagegen-evidence.js +32 -0
  112. package/dist/core/init/skills.js +9 -11
  113. package/dist/core/init.js +4 -6
  114. package/dist/core/json/records.js +9 -0
  115. package/dist/core/json-schema-validator.js +1 -3
  116. package/dist/core/lean-engineering-policy.js +54 -0
  117. package/dist/core/loops/loop-continuation-enforcer.js +1 -3
  118. package/dist/core/mad-sks/sql-plane/mcp-executor.js +2 -1
  119. package/dist/core/mad-sks/sql-plane/policy.js +2 -1
  120. package/dist/core/managed-assets/managed-assets-manifest.js +4 -3
  121. package/dist/core/mcp-config/codex-cli-adapter.js +1 -3
  122. package/dist/core/mcp-config/config-reader.js +2 -3
  123. package/dist/core/mcp-config/guarded-patch.js +1 -1
  124. package/dist/core/mcp-config/health-check.js +2 -1
  125. package/dist/core/mcp-config/mutation.js +1 -1
  126. package/dist/core/mcp-config/restore.js +1 -1
  127. package/dist/core/mcp-config/secret-policy.js +1 -3
  128. package/dist/core/migration/migration-transaction-journal.js +3 -3
  129. package/dist/core/naruto/naruto-concurrency-governor.js +2 -2
  130. package/dist/core/perf/import-graph-budget.js +91 -1
  131. package/dist/core/pipeline/pipeline-plan-writer.js +1 -1
  132. package/dist/core/pipeline-internals/runtime-core.js +121 -23
  133. package/dist/core/pipeline-internals/runtime-gates.js +193 -4
  134. package/dist/core/pipeline.js +1 -1
  135. package/dist/core/ppt-review/slide-imagegen-review.js +7 -7
  136. package/dist/core/ppt.js +3 -3
  137. package/dist/core/product-design-app-server.js +2 -1
  138. package/dist/core/proof/fake-real-proof-policy.js +1 -3
  139. package/dist/core/proof/root-cause-policy.js +1 -3
  140. package/dist/core/proof/validation.js +1 -3
  141. package/dist/core/provider/model-router.js +4 -0
  142. package/dist/core/provider/provider-context.js +1 -3
  143. package/dist/core/providers/openrouter/openrouter-account.js +1 -3
  144. package/dist/core/quality/helper-dedup.js +0 -0
  145. package/dist/core/recallpulse.js +1 -1
  146. package/dist/core/release/file-ownership.js +26 -17
  147. package/dist/core/release/macos-menubar-proof.js +59 -1
  148. package/dist/core/release/main-push-guard.js +288 -24
  149. package/dist/core/release/main-push-receipt.js +10 -45
  150. package/dist/core/release/package-size-budget.js +1 -1
  151. package/dist/core/release/release-gate-contract.js +2 -0
  152. package/dist/core/release/release-pack-receipt.js +1 -1
  153. package/dist/core/release/release-proof-io.js +33 -0
  154. package/dist/core/release/release-upgrade-baseline.js +9 -0
  155. package/dist/core/release/runtime-script-pack-closure.js +153 -4
  156. package/dist/core/release/stage-publish.js +194 -0
  157. package/dist/core/remote/index.js +2 -0
  158. package/dist/core/remote/local-worker-client.js +35 -0
  159. package/dist/core/remote/machine-registry.js +18 -13
  160. package/dist/core/remote/owner-proof.js +1 -3
  161. package/dist/core/remote/protocol.js +1 -3
  162. package/dist/core/remote/readiness.js +1 -3
  163. package/dist/core/remote/session-binding.js +153 -0
  164. package/dist/core/remote/session-index.js +1 -3
  165. package/dist/core/remote/types.js +1 -0
  166. package/dist/core/remote/worker.js +228 -14
  167. package/dist/core/responses-stream.js +151 -0
  168. package/dist/core/routes/dollar-manifest-lite.js +1 -1
  169. package/dist/core/routes.js +8 -8
  170. package/dist/core/rust-accelerator.js +12 -2
  171. package/dist/core/safety/ssot-guard.js +1 -3
  172. package/dist/core/search/benchmark.js +358 -0
  173. package/dist/core/search/cache.js +65 -0
  174. package/dist/core/search/context.js +144 -0
  175. package/dist/core/search/doctor.js +74 -0
  176. package/dist/core/search/files.js +192 -0
  177. package/dist/core/search/index.js +5 -0
  178. package/dist/core/search/ipc.js +64 -0
  179. package/dist/core/search/provider.js +142 -0
  180. package/dist/core/search/rust-bridge.js +24 -0
  181. package/dist/core/search/structure.js +230 -0
  182. package/dist/core/search/symbol.js +272 -0
  183. package/dist/core/search/text.js +146 -0
  184. package/dist/core/search/types.js +22 -0
  185. package/dist/core/search/typescript-ls.js +215 -0
  186. package/dist/core/search-visibility/discovery.js +1 -3
  187. package/dist/core/skill-forge.js +1 -1
  188. package/dist/core/stop-gate/gate-evaluator.js +3 -3
  189. package/dist/core/stop-gate/stop-gate-check.js +1 -3
  190. package/dist/core/structured-output-adapter.js +62 -2
  191. package/dist/core/subagents/agent-catalog.js +56 -43
  192. package/dist/core/subagents/model-policy.js +17 -7
  193. package/dist/core/subagents/naruto-proof-projection.js +2 -6
  194. package/dist/core/subagents/official-subagent-config.js +1 -3
  195. package/dist/core/subagents/official-subagent-preparation.js +73 -10
  196. package/dist/core/subagents/official-subagent-prompt.js +85 -18
  197. package/dist/core/subagents/official-subagent-runner.js +10 -5
  198. package/dist/core/subagents/role-model-preferences.js +202 -44
  199. package/dist/core/subagents/subagent-evidence.js +1 -3
  200. package/dist/core/subagents/thread-budget.js +1 -1
  201. package/dist/core/subagents/triwiki-attention.js +1 -5
  202. package/dist/core/telegram/config.js +29 -12
  203. package/dist/core/telegram/hub.js +8 -2
  204. package/dist/core/telegram/index.js +2 -0
  205. package/dist/core/telegram/messages.js +8 -2
  206. package/dist/core/telegram/runtime-projection.js +8 -5
  207. package/dist/core/telegram/runtime.js +19 -9
  208. package/dist/core/telegram/service.js +181 -0
  209. package/dist/core/telegram/setup.js +220 -0
  210. package/dist/core/text/regex.js +3 -0
  211. package/dist/core/text/strings.js +6 -0
  212. package/dist/core/triwiki-wrongness/image-wrongness.js +1 -3
  213. package/dist/core/triwiki-wrongness/wrongness-ledger.js +1 -3
  214. package/dist/core/triwiki-wrongness/wrongness-proof-linker.js +1 -3
  215. package/dist/core/triwiki-wrongness/wrongness-retrieval.js +1 -3
  216. package/dist/core/triwiki-wrongness/wrongness-schema.js +1 -3
  217. package/dist/core/triwiki-wrongness/wrongness-trust-policy.js +1 -3
  218. package/dist/core/trust-kernel/completion-contract.js +1 -3
  219. package/dist/core/trust-kernel/route-contract.js +1 -3
  220. package/dist/core/update/update-migration-state.js +1 -3
  221. package/dist/core/update-check.js +20 -6
  222. package/dist/core/verification/diff-quality.js +3 -4
  223. package/dist/core/verification/impact-scan.js +36 -89
  224. package/dist/core/verification/mistake-rule-compiler.js +17 -4
  225. package/dist/core/version-manager.js +3 -20
  226. package/dist/core/version.js +1 -1
  227. package/dist/native/sks-menubar/Sources/ControlCenterWindowController.swift +23 -3
  228. package/dist/native/sks-menubar/Sources/ControlKit.swift +102 -0
  229. package/dist/native/sks-menubar/Sources/DiagnosticsViewController.swift +23 -11
  230. package/dist/native/sks-menubar/Sources/MCPServersViewController.swift +7 -3
  231. package/dist/native/sks-menubar/Sources/OperationCoordinator.swift +17 -1
  232. package/dist/native/sks-menubar/Sources/OverviewViewController.swift +22 -15
  233. package/dist/native/sks-menubar/Sources/ProcessClient.swift +15 -5
  234. package/dist/native/sks-menubar/Sources/ProvidersMultiProvider.swift +324 -0
  235. package/dist/native/sks-menubar/Sources/ProvidersOpenRouter.swift +154 -214
  236. package/dist/native/sks-menubar/Sources/ProvidersRoleModels.swift +252 -0
  237. package/dist/native/sks-menubar/Sources/ProvidersViewController.swift +77 -71
  238. package/dist/native/sks-menubar/Sources/RemoteTelegramViewController.swift +167 -51
  239. package/dist/native/sks-menubar/Sources/SettingsViewController.swift +14 -5
  240. package/dist/native/sks-menubar/Sources/SidebarItem.swift +15 -1
  241. package/dist/native/sks-menubar/Sources/StatusItemController.swift +2 -2
  242. package/dist/native/sks-menubar/Sources/UpdatesViewController.swift +16 -12
  243. package/dist/scripts/agent-guidance-dedup-check.js +23 -0
  244. package/dist/scripts/agent-message-bus-reader-check.js +1 -1
  245. package/dist/scripts/all-feature-deep-completion-check.js +1 -1
  246. package/dist/scripts/appshots-thread-attachment-discovery-check.js +1 -1
  247. package/dist/scripts/architecture-guard-check.js +1 -2
  248. package/dist/scripts/certificate-sla-check.js +1 -1
  249. package/dist/scripts/cli-output-consistency-check.js +1 -1
  250. package/dist/scripts/codex-0-134-runner-truth-check.js +1 -1
  251. package/dist/scripts/codex-0138-capability-artifact-check.js +1 -1
  252. package/dist/scripts/codex-0138-capability-check.js +1 -1
  253. package/dist/scripts/codex-0138-doctor-check.js +1 -1
  254. package/dist/scripts/codex-0138-feature-probes-check.js +1 -1
  255. package/dist/scripts/codex-0144-app-server-v2-check.js +1 -1
  256. package/dist/scripts/codex-0144-binary-identity-check.js +1 -1
  257. package/dist/scripts/codex-0144-capability-check.js +1 -1
  258. package/dist/scripts/codex-0144-core-real-probes-check.js +1 -1
  259. package/dist/scripts/codex-0144-manifest-check.js +1 -1
  260. package/dist/scripts/codex-0144-policy-check.js +1 -1
  261. package/dist/scripts/codex-0144-thread-store-check.js +1 -1
  262. package/dist/scripts/codex-agent-role-rich-content-check.js +2 -2
  263. package/dist/scripts/codex-agent-role-sync-check.js +2 -2
  264. package/dist/scripts/codex-agent-type-routing-check.js +2 -2
  265. package/dist/scripts/codex-app-execution-profile-check.js +2 -2
  266. package/dist/scripts/codex-app-handoff-check.js +1 -1
  267. package/dist/scripts/codex-app-handoff-launch-check.js +1 -1
  268. package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +1 -1
  269. package/dist/scripts/codex-lb-fast-ui-preservation-check.js +1 -3
  270. package/dist/scripts/codex-native-feature-broker-blackbox.js +2 -2
  271. package/dist/scripts/codex-native-feature-broker-check.js +2 -2
  272. package/dist/scripts/{sks-3-1-6-directive-check-lib.js → codex-native-gate-lib.js} +5 -5
  273. package/dist/scripts/codex-native-harness-compat-check.js +2 -2
  274. package/dist/scripts/codex-native-hook-lifecycle-proof-check.js +2 -2
  275. package/dist/scripts/codex-plugin-app-template-policy-check.js +1 -1
  276. package/dist/scripts/codex-sdk-backend-router-check.js +1 -1
  277. package/dist/scripts/codex-sdk-capability-check.js +1 -1
  278. package/dist/scripts/context7-evidence-dedupe-check.js +1 -1
  279. package/dist/scripts/core-skill-card-schema-check.js +1 -1
  280. package/dist/scripts/core-skill-deployment-snapshot-check.js +1 -1
  281. package/dist/scripts/core-skill-heldout-validation-check.js +1 -1
  282. package/dist/scripts/core-skill-no-inference-optimizer-check.js +1 -1
  283. package/dist/scripts/core-skill-patch-check.js +1 -1
  284. package/dist/scripts/core-skill-route-runtime-integration-check.js +1 -1
  285. package/dist/scripts/current-command-surface-check.js +1 -1
  286. package/dist/scripts/current-surface-update-e2e-check.js +4 -1
  287. package/dist/scripts/current-upgrade-matrix-check.js +1 -1
  288. package/dist/scripts/dfix-fixture-check.js +1 -1
  289. package/dist/scripts/dfix-patch-handoff-check.js +1 -1
  290. package/dist/scripts/dfix-verification-check.js +1 -1
  291. package/dist/scripts/dfix-verification-recommendation-check.js +1 -1
  292. package/dist/scripts/docs-truthfulness-check.js +16 -3
  293. package/dist/scripts/doctor-codex-app-harness-check.js +2 -2
  294. package/dist/scripts/evidence-flagship-coverage-check.js +1 -1
  295. package/dist/scripts/{sks-1-18-gate-lib.js → gate-lib.js} +1 -1
  296. package/dist/scripts/gate-policy-audit-check.js +4 -1
  297. package/dist/scripts/git-worktree-checkpoint-check.js +1 -1
  298. package/dist/scripts/git-worktree-cross-rebase-check.js +1 -1
  299. package/dist/scripts/git-worktree-diff-envelope-check.js +1 -1
  300. package/dist/scripts/git-worktree-dirty-lock-check.js +1 -1
  301. package/dist/scripts/git-worktree-dirty-main-detection-check.js +1 -1
  302. package/dist/scripts/git-worktree-integration-primary-check.js +1 -1
  303. package/dist/scripts/git-worktree-manifest-append-check.js +1 -1
  304. package/dist/scripts/git-worktree-untracked-diff-check.js +1 -1
  305. package/dist/scripts/harness-benchmark-check.js +1 -1
  306. package/dist/scripts/helper-dedup-check.js +62 -0
  307. package/dist/scripts/hook-latency-budget-check.js +1 -1
  308. package/dist/scripts/image-artifact-path-contract-check.js +1 -1
  309. package/dist/scripts/imagegen-real-smoke-check.js +2 -5
  310. package/dist/scripts/installed-package-smoke-check.js +1 -1
  311. package/dist/scripts/legacy-gate-inventory-check.js +1 -1
  312. package/dist/scripts/legacy-gate-purge-check.js +1 -1
  313. package/dist/scripts/legacy-strong-inventory-check.js +1 -1
  314. package/dist/scripts/lib/codex-sdk-gate-lib.js +1 -1
  315. package/dist/scripts/mad-sks-launch-sql-plane-boundary-check.js +1 -1
  316. package/dist/scripts/mad-sks-sql-plane-capability-check.js +1 -1
  317. package/dist/scripts/mad-sks-sql-plane-lifecycle-hook-decision-check.js +1 -1
  318. package/dist/scripts/mad-sks-sql-plane-result-lifecycle-check.js +1 -1
  319. package/dist/scripts/managed-config-merge-check.js +1 -1
  320. package/dist/scripts/mcp-plugin-inventory-check.js +1 -1
  321. package/dist/scripts/model-call-concurrency-check.js +1 -1
  322. package/dist/scripts/mutation-callsite-coverage-check.js +1 -1
  323. package/dist/scripts/naruto-ssot-gate-aliases-check.js +1 -1
  324. package/dist/scripts/naruto-ssot-pipeline-default-check.js +1 -1
  325. package/dist/scripts/naruto-ssot-route-normalization-check.js +1 -1
  326. package/dist/scripts/naruto-ssot-routing-check.js +1 -1
  327. package/dist/scripts/naruto-worktree-coding-blackbox.js +1 -1
  328. package/dist/scripts/native-capability-repair-matrix-check.js +1 -1
  329. package/dist/scripts/native-image-generation-repair-check.js +1 -1
  330. package/dist/scripts/official-subagent-workflow-check.js +3 -3
  331. package/dist/scripts/package-published-contract-check.js +37 -4
  332. package/dist/scripts/packlist-performance-check.js +17 -1
  333. package/dist/scripts/pipeline-codex-native-doctor-mad-routing-real-blackbox.js +1 -3
  334. package/dist/scripts/ppt-real-export-adapter-check.js +1 -1
  335. package/dist/scripts/ppt-real-imagegen-wiring-check.js +1 -1
  336. package/dist/scripts/ppt-reexport-rereview-check.js +1 -1
  337. package/dist/scripts/prepublish-fast-check.js +1 -1
  338. package/dist/scripts/probe-memoization-check.js +2 -2
  339. package/dist/scripts/prompt-placeholder-guard-check.js +1 -1
  340. package/dist/scripts/qa-loop-app-handoff-capability-check.js +1 -1
  341. package/dist/scripts/qa-loop-app-handoff-check.js +1 -1
  342. package/dist/scripts/qa-loop-app-handoff-cli-check.js +1 -1
  343. package/dist/scripts/qa-loop-app-handoff-confirmation-check.js +1 -1
  344. package/dist/scripts/qa-loop-app-handoff-gate-lifecycle-check.js +1 -1
  345. package/dist/scripts/qa-loop-app-handoff-launch-check.js +1 -1
  346. package/dist/scripts/qa-loop-app-handoff-status-lifecycle-check.js +1 -1
  347. package/dist/scripts/qa-loop-budget-policy-check.js +1 -1
  348. package/dist/scripts/qa-loop-effort-escalation-check.js +1 -1
  349. package/dist/scripts/qa-loop-execution-profile-routing-check.js +2 -2
  350. package/dist/scripts/qa-loop-image-path-exposure-check.js +1 -1
  351. package/dist/scripts/qa-loop-image-path-prompt-injection-check.js +1 -1
  352. package/dist/scripts/{sks-1-12-real-execution-check-lib.js → real-execution-check-lib.js} +1 -1
  353. package/dist/scripts/release-affected-selector-check.js +1 -1
  354. package/dist/scripts/release-aggressive-resource-governor-check.js +1 -1
  355. package/dist/scripts/release-cache-glob-hashing-check.js +1 -1
  356. package/dist/scripts/release-cache-input-classifier-check.js +1 -1
  357. package/dist/scripts/release-cache-neutralization-report-check.js +1 -1
  358. package/dist/scripts/release-cache-version-neutral-fixture-check.js +1 -1
  359. package/dist/scripts/release-dynamic-presets-check.js +2 -2
  360. package/dist/scripts/release-full-parallelism-blackbox.js +1 -1
  361. package/dist/scripts/release-gate-batch-runner-check.js +1 -1
  362. package/dist/scripts/release-gate-budget-check.js +1 -1
  363. package/dist/scripts/release-gate-dag-runner-check.js +1 -1
  364. package/dist/scripts/release-latency-slo-check.js +1 -1
  365. package/dist/scripts/release-metadata-check.js +256 -2
  366. package/dist/scripts/release-parallel-speed-budget-check.js +1 -1
  367. package/dist/scripts/release-proof-truth-check.js +1 -1
  368. package/dist/scripts/release-provenance-check.js +4 -2
  369. package/dist/scripts/release-runtime-truth-matrix-check.js +1 -1
  370. package/dist/scripts/research-blueprint-densifier-check.js +1 -1
  371. package/dist/scripts/research-claim-builder-check.js +1 -1
  372. package/dist/scripts/research-complete-package-fixture-check.js +1 -1
  373. package/dist/scripts/research-execution-profile-routing-check.js +2 -2
  374. package/dist/scripts/research-final-reviewer-blackbox.js +1 -1
  375. package/dist/scripts/{sks-3-1-4-directive-check-lib.js → runtime-domain-gate-lib.js} +2 -2
  376. package/dist/scripts/runtime-proof-summary-check.js +1 -1
  377. package/dist/scripts/runtime-script-pack-closure-check.js +7 -1
  378. package/dist/scripts/scheduler-batch-dispatch-check.js +1 -1
  379. package/dist/scripts/scheduler-parallel-proof-consistency-check.js +1 -1
  380. package/dist/scripts/scheduler-utilization-integral-check.js +1 -1
  381. package/dist/scripts/search-visibility-gate-lib.js +1 -1
  382. package/dist/scripts/secret-preservation-check.js +1 -1
  383. package/dist/scripts/seo-geo-geo-disambiguation-check.js +1 -1
  384. package/dist/scripts/seo-geo-skill-rich-content-check.js +1 -1
  385. package/dist/scripts/side-effect-runtime-report-check.js +1 -1
  386. package/dist/scripts/{sks-3-1-8-check-lib.js → skill-fixture-check-lib.js} +1 -1
  387. package/dist/scripts/skill-name-canonicalizer-check.js +1 -1
  388. package/dist/scripts/skills-manifest-continuity-check.js +1 -1
  389. package/dist/scripts/sks-uninstall-regression-check.js +1 -1
  390. package/dist/scripts/sksd-daemon-check.js +1 -1
  391. package/dist/scripts/super-search-provider-interface-check.js +1 -1
  392. package/dist/scripts/triwiki-cache-key-check.js +1 -1
  393. package/dist/scripts/triwiki-proof-bank-blackbox.js +2 -2
  394. package/dist/scripts/triwiki-proof-bank-check.js +1 -1
  395. package/dist/scripts/triwiki-proof-card-check.js +1 -1
  396. package/dist/scripts/type-surface-codex-app-check.js +2 -2
  397. package/dist/scripts/{sks-3-1-5-directive-check-lib.js → typed-routing-gate-lib.js} +2 -2
  398. package/dist/scripts/ultra-router-auto-router-check.js +1 -1
  399. package/dist/scripts/ux-review-extract-wires-real-extractor-check.js +1 -1
  400. package/dist/scripts/ux-review-patch-diff-recheck-check.js +1 -1
  401. package/dist/scripts/ux-review-run-wires-imagegen-check.js +9 -2
  402. package/package.json +5 -7
  403. package/release-gates.v2.json +66 -11
  404. package/runtime-required-scripts.json +138 -14
  405. package/config/bench-baseline.json +0 -7
  406. package/dist/core/codex-app/sks-menubar.js +0 -1
  407. package/dist/core/release/release-closure-contract.js +0 -30
  408. package/dist/core/release/release-closure-helpers.js +0 -293
  409. package/dist/core/release/release-closure-validation.js +0 -284
  410. package/dist/core/release/release-closure.js +0 -163
  411. package/dist/scripts/build-dist.js +0 -124
  412. package/dist/scripts/build-once-runner-check.js +0 -6
  413. package/dist/scripts/canonical-test-runner.js +0 -234
  414. package/dist/scripts/changelog-check.js +0 -45
  415. package/dist/scripts/check-architecture.js +0 -295
  416. package/dist/scripts/check-cli-entrypoint.js +0 -41
  417. package/dist/scripts/check-command-module-budget.js +0 -77
  418. package/dist/scripts/check-feature-quality.js +0 -51
  419. package/dist/scripts/check-legacy-free.js +0 -64
  420. package/dist/scripts/check-pipeline-budget.js +0 -49
  421. package/dist/scripts/check-pipeline-runtime.js +0 -16
  422. package/dist/scripts/check-publish-tag.js +0 -56
  423. package/dist/scripts/check-route-modularity.js +0 -72
  424. package/dist/scripts/codex-0140-capability-check.js +0 -14
  425. package/dist/scripts/codex-0140-feature-probes-check.js +0 -23
  426. package/dist/scripts/codex-permission-profiles-check.js +0 -34
  427. package/dist/scripts/codex-project-config-policy-splitter-check.js +0 -49
  428. package/dist/scripts/competitor-scorecard-check.js +0 -24
  429. package/dist/scripts/core-skill-no-drift-check.js +0 -23
  430. package/dist/scripts/db-route-materialization-check.js +0 -32
  431. package/dist/scripts/doctor-context7-mcp-repair-blackbox.js +0 -15
  432. package/dist/scripts/doctor-fastpath-check.js +0 -25
  433. package/dist/scripts/doctor-fix-production-blackbox.js +0 -35
  434. package/dist/scripts/doctor-idempotence-check.js +0 -6
  435. package/dist/scripts/doctor-ops-semantics-check.js +0 -83
  436. package/dist/scripts/doctor-startup-config-repair-blackbox.js +0 -18
  437. package/dist/scripts/doctor-supabase-mcp-repair-blackbox.js +0 -13
  438. package/dist/scripts/ensure-bin-executable.js +0 -16
  439. package/dist/scripts/fsx-hotpath-check.js +0 -9
  440. package/dist/scripts/high-risk-contracts-check.js +0 -183
  441. package/dist/scripts/hook-latency-quantum-check.js +0 -120
  442. package/dist/scripts/import-graph-budget-check.js +0 -9
  443. package/dist/scripts/mcp-tool-naming-parity-check.js +0 -14
  444. package/dist/scripts/naruto-codex-e2e-check.js +0 -105
  445. package/dist/scripts/naruto-write-e2e-check.js +0 -31
  446. package/dist/scripts/native-capability-postcheck-check.js +0 -16
  447. package/dist/scripts/ops-diagnostics-bundle-check.js +0 -11
  448. package/dist/scripts/parallel-production-smoke-check.js +0 -20
  449. package/dist/scripts/perf-budget-check.js +0 -12
  450. package/dist/scripts/project-skill-dedupe-blackbox.js +0 -62
  451. package/dist/scripts/release-dag-full-coverage-check.js +0 -98
  452. package/dist/scripts/release-dist-freshness-check.js +0 -6
  453. package/dist/scripts/release-file-ownership-check.js +0 -35
  454. package/dist/scripts/release-gate-script-parity-check.js +0 -148
  455. package/dist/scripts/release-macos-menubar-proof.js +0 -167
  456. package/dist/scripts/release-main-push-guard.js +0 -37
  457. package/dist/scripts/release-main-push-receipt.js +0 -43
  458. package/dist/scripts/release-metadata-1-19-check.js +0 -257
  459. package/dist/scripts/release-version-truth-check.js +0 -138
  460. package/dist/scripts/retention-apply-smoke-check.js +0 -19
  461. package/dist/scripts/retention-budget-check.js +0 -6
  462. package/dist/scripts/retention-dry-run-check.js +0 -8
  463. package/dist/scripts/rollback-recovery-smoke-check.js +0 -70
  464. package/dist/scripts/route-intent-regression-check.js +0 -42
  465. package/dist/scripts/runtime-current-terminal-check.js +0 -108
  466. package/dist/scripts/runtime-dist-parity-check.js +0 -76
  467. package/dist/scripts/runtime-no-src-mjs-check.js +0 -30
  468. package/dist/scripts/runtime-ts-rust-boundary-check.js +0 -58
  469. package/dist/scripts/runtime-ts-source-of-truth-check.js +0 -53
  470. package/dist/scripts/secret-preservation-guard-check.js +0 -36
  471. package/dist/scripts/seo-marketing-truthfulness-check.js +0 -98
  472. package/dist/scripts/seo-metadata-sync-check.js +0 -60
  473. package/dist/scripts/sizecheck.js +0 -148
  474. package/dist/scripts/sks-menubar-install-check.js +0 -333
  475. package/dist/scripts/supabase-secret-preservation-blackbox.js +0 -28
  476. package/dist/scripts/super-search-live-smoke-check.js +0 -115
  477. package/dist/scripts/super-search-local-http-smoke-check.js +0 -16
  478. package/dist/scripts/super-search-offline-contract-check.js +0 -43
  479. package/dist/scripts/update-fastpath-check.js +0 -28
  480. package/dist/scripts/update-preserves-supabase-keys-blackbox.js +0 -26
  481. package/dist/scripts/upgrade-migration-matrix-check.js +0 -351
  482. package/dist/scripts/write-build-manifest.js +0 -70
  483. package/dist/scripts/zellij-capability-check.js +0 -13
  484. package/dist/scripts/zellij-developer-controls-check.js +0 -16
  485. package/dist/scripts/zellij-doctor-readiness-check.js +0 -49
  486. package/dist/scripts/zellij-dynamic-pane-lifecycle-check.js +0 -19
  487. package/dist/scripts/zellij-fake-adapter-check.js +0 -31
  488. package/dist/scripts/zellij-first-slot-down-stack-check.js +0 -20
  489. package/dist/scripts/zellij-first-slot-down-stack-real-check.js +0 -348
  490. package/dist/scripts/zellij-homebrew-policy-check.js +0 -3
  491. package/dist/scripts/zellij-initial-main-only-blackbox.js +0 -21
  492. package/dist/scripts/zellij-lane-renderer-check.js +0 -78
  493. package/dist/scripts/zellij-launch-command-truth-check.js +0 -62
  494. package/dist/scripts/zellij-layout-valid-check.js +0 -120
  495. package/dist/scripts/zellij-pane-creation-lock-metrics-check.js +0 -10
  496. package/dist/scripts/zellij-pane-lock-concurrency-blackbox.js +0 -78
  497. package/dist/scripts/zellij-pane-lock-does-not-block-worker-check.js +0 -12
  498. package/dist/scripts/zellij-pane-lock-open-worker-integration-blackbox.js +0 -134
  499. package/dist/scripts/zellij-qa-app-handoff-status-check.js +0 -7
  500. package/dist/scripts/zellij-right-column-geometry-proof.js +0 -158
  501. package/dist/scripts/zellij-right-column-headless-overflow-check.js +0 -20
  502. package/dist/scripts/zellij-right-column-manager-check.js +0 -24
  503. package/dist/scripts/zellij-self-heal-check.js +0 -3
  504. package/dist/scripts/zellij-self-heal-dry-run-check.js +0 -3
  505. package/dist/scripts/zellij-self-heal-status-contract-check.js +0 -3
  506. package/dist/scripts/zellij-self-heal-typed-blackbox.js +0 -3
  507. package/dist/scripts/zellij-slot-column-anchor-check.js +0 -65
  508. package/dist/scripts/zellij-slot-column-anchor-telemetry-check.js +0 -8
  509. package/dist/scripts/zellij-slot-only-ui-check.js +0 -29
  510. package/dist/scripts/zellij-slot-pane-renderer-check.js +0 -149
  511. package/dist/scripts/zellij-slot-pane-stale-detection-check.js +0 -65
  512. package/dist/scripts/zellij-slot-pane-telemetry-renderer-check.js +0 -11
  513. package/dist/scripts/zellij-slot-renderer-proof-semantics-check.js +0 -58
  514. package/dist/scripts/zellij-slot-telemetry-check.js +0 -38
  515. package/dist/scripts/zellij-slot-telemetry-incremental-check.js +0 -46
  516. package/dist/scripts/zellij-slot-telemetry-live-flush-check.js +0 -55
  517. package/dist/scripts/zellij-slot-telemetry-performance-check.js +0 -32
  518. package/dist/scripts/zellij-slot-telemetry-real-blackbox.js +0 -19
  519. package/dist/scripts/zellij-slot-telemetry-renderer-check.js +0 -11
  520. package/dist/scripts/zellij-slot-telemetry-runtime-check.js +0 -23
  521. package/dist/scripts/zellij-spawn-on-demand-layout-check.js +0 -45
  522. package/dist/scripts/zellij-stacked-capability-routing-check.js +0 -9
  523. package/dist/scripts/zellij-stacked-fallback-integration-blackbox.js +0 -78
  524. package/dist/scripts/zellij-stacked-version-matrix-check.js +0 -29
  525. package/dist/scripts/zellij-stacked-version-parser-check.js +0 -19
  526. package/dist/scripts/zellij-ui-design-check.js +0 -92
  527. package/dist/scripts/zellij-update-missing-self-heal-check.js +0 -3
  528. package/dist/scripts/zellij-update-prompt-matrix-check.js +0 -16
  529. package/dist/scripts/zellij-update-prompt-mode-check.js +0 -18
  530. package/dist/scripts/zellij-update-prompt-safety-check.js +0 -8
  531. package/dist/scripts/zellij-worker-pane-manager-check.js +0 -108
  532. package/dist/scripts/zellij-worker-pane-manager-single-owner-check.js +0 -47
  533. package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +0 -199
  534. /package/dist/scripts/{sks-1-11-gate-lib.js → sks-cli-gate-lib.js} +0 -0
@@ -2,96 +2,212 @@ import Cocoa
2
2
 
3
3
  final class RemoteTelegramViewController: NSViewController, ControlCenterPage {
4
4
  private let processClient: ProcessClient
5
- private let status = NativeView.detail("Remote readiness has not been checked.")
5
+ private let operations: OperationCoordinator
6
+ private let readinessStatus = NativeView.detail("Remote readiness has not been checked.")
7
+ private let setupStatus = NativeView.detail("Telegram setup has not been checked.")
8
+ private let hubStatus = NativeView.detail("Telegram Hub status has not been checked.")
6
9
  private var generation = 0
10
+ private var busy = false
11
+ private var setupReady = false
12
+ private var hubRunning = false
7
13
  private var checkButton: NSButton!
14
+ private var connectButton: NSButton!
15
+ private var startButton: NSButton!
16
+ private var stopButton: NSButton!
17
+ private var restartButton: NSButton!
8
18
 
9
- init(processClient: ProcessClient) { self.processClient = processClient; super.init(nibName: nil, bundle: nil) }
19
+ init(processClient: ProcessClient, operations: OperationCoordinator) {
20
+ self.processClient = processClient
21
+ self.operations = operations
22
+ super.init(nibName: nil, bundle: nil)
23
+ }
10
24
  required init?(coder: NSCoder) { nil }
11
25
 
12
26
  override func loadView() {
13
- checkButton = NativeView.button("Check Readiness", target: self, action: #selector(check))
14
- view = NativeView.stack([
15
- NativeView.title("Remote & Telegram"),
16
- NativeView.detail("OpenAI Remote remains the high-fidelity coding surface. Telegram is limited to proof-aware fleet status and typed approvals; arbitrary remote shell is never enabled."),
17
- status, checkButton
27
+ connectButton = NativeView.button("Connect Bot & Register Coding Session…", target: self, action: #selector(connectBot))
28
+ startButton = NativeView.button("Start Hub", target: self, action: #selector(startHub))
29
+ stopButton = NativeView.button("Stop Hub", target: self, action: #selector(stopHub))
30
+ restartButton = NativeView.button("Restart Hub", target: self, action: #selector(restartHub))
31
+ checkButton = NativeView.button("Refresh Status", target: self, action: #selector(check))
32
+
33
+ let setupCard = NativeView.card(
34
+ title: "1. Connect your private Telegram bot",
35
+ subtitle: "Create a bot with BotFather, open that bot in Telegram, send /start, then paste the bot token here. SKS verifies the bot, detects only that private chat/user, saves the token in macOS Keychain, and registers one dedicated coding session for this project.",
36
+ views: [setupStatus, NativeView.row([connectButton])]
37
+ )
38
+ let hubCard = NativeView.card(
39
+ title: "2. Keep remote coding available",
40
+ subtitle: "The LaunchAgent keeps the Hub running and prevents idle system sleep while this Mac user is logged in. Closing the lid or logging out can still stop access. It uses a local in-process worker on this Mac; SSH remains available only for explicitly configured remote machines.",
41
+ views: [hubStatus, NativeView.row([startButton, stopButton, restartButton])]
42
+ )
43
+ let usageCard = NativeView.card(
44
+ title: "3. Code from Telegram",
45
+ subtitle: "Send ordinary text in the paired private chat. The first message creates and persists the Codex thread with its first turn; later messages resume that exact thread, wait for completion, and return Codex’s final answer. /status, /diff, /proof, and /verify remain available. Arbitrary remote shell and unpaired chats stay blocked.",
46
+ views: []
47
+ )
48
+ let readinessCard = NativeView.card(
49
+ title: "Project readiness",
50
+ subtitle: "Codex app, CLI, and Git state for this project — checked together with every status refresh.",
51
+ views: [readinessStatus]
52
+ )
53
+ view = NativeView.page([
54
+ ControlKit.header("Remote & Telegram", "Telegram remote coding is isolated to this project, uses workspace-write with network disabled, and never exposes the bot token in config, arguments, or logs."),
55
+ NativeView.row([checkButton]),
56
+ setupCard, hubCard, usageCard, readinessCard
18
57
  ])
58
+ updateButtons()
19
59
  check()
20
60
  }
21
61
 
22
62
  func refreshOnAppear() { check() }
23
63
 
64
+ @objc private func connectBot() {
65
+ guard let window = view.window else { return }
66
+ AlertFactory.textSheet(
67
+ window: window,
68
+ title: "Telegram Bot Token",
69
+ message: "First send /start to your bot from the private Telegram account you want to pair. Paste the BotFather token below. It is sent through stdin, stored in macOS Keychain, and never logged.",
70
+ secure: true,
71
+ placeholder: "123456789:ABC…"
72
+ ) { [weak self] token in
73
+ guard let self = self, let token = token else { return }
74
+ self.runMutation(
75
+ args: ["telegram", "setup", "--bot-token-stdin", "--project-root", AppRuntime.projectRoot, "--json"],
76
+ stdin: token + "\n",
77
+ kind: "telegram-setup",
78
+ summary: "Connect Telegram bot and register dedicated Codex session"
79
+ )
80
+ }
81
+ }
82
+
83
+ @objc private func startHub() {
84
+ runMutation(
85
+ args: ["telegram", "hub", "start", "--project-root", AppRuntime.projectRoot, "--json"],
86
+ kind: "telegram-hub-start",
87
+ summary: "Start Telegram Hub"
88
+ )
89
+ }
90
+
91
+ @objc private func stopHub() {
92
+ runMutation(
93
+ args: ["telegram", "hub", "stop", "--project-root", AppRuntime.projectRoot, "--json"],
94
+ kind: "telegram-hub-stop",
95
+ summary: "Stop Telegram Hub"
96
+ )
97
+ }
98
+
99
+ @objc private func restartHub() {
100
+ runMutation(
101
+ args: ["telegram", "hub", "restart", "--project-root", AppRuntime.projectRoot, "--json"],
102
+ kind: "telegram-hub-restart",
103
+ summary: "Restart Telegram Hub"
104
+ )
105
+ }
106
+
24
107
  @objc private func check() {
108
+ guard !busy else { return }
25
109
  generation += 1
26
110
  let requestGeneration = generation
27
111
  checkButton?.isEnabled = false
28
- status.stringValue = "Checking official Remote compatibility and Telegram Hub state…"
112
+ readinessStatus.stringValue = "Checking project readiness…"
113
+ setupStatus.stringValue = "Checking Keychain, pairing, and dedicated Codex session…"
114
+ hubStatus.stringValue = "Checking LaunchAgent state…"
29
115
  var remote: [String: Any]?
30
116
  var telegram: [String: Any]?
31
- var remoteFailed = false
32
- var telegramFailed = false
33
117
  let group = DispatchGroup()
34
118
  group.enter()
35
119
  processClient.run(["remote", "readiness", "--project-root", AppRuntime.projectRoot, "--json"], timeout: NativeView.statusTimeout) { [weak self] result in
36
120
  remote = self?.json(result.output)
37
- remoteFailed = result.code != 0 || remote == nil
38
121
  group.leave()
39
122
  }
40
123
  group.enter()
41
124
  processClient.run(["telegram", "status", "--project-root", AppRuntime.projectRoot, "--json"], timeout: NativeView.statusTimeout) { [weak self] result in
42
- telegram = result.code == 0 ? self?.json(result.output) : nil
43
- telegramFailed = result.code != 0 || telegram == nil
125
+ telegram = self?.json(result.output)
44
126
  group.leave()
45
127
  }
46
128
  group.notify(queue: .main) { [weak self] in
47
129
  guard let self = self, self.generation == requestGeneration else { return }
48
- self.checkButton?.isEnabled = true
49
- self.status.stringValue = self.summary(remote: remote, telegram: telegram, remoteFailed: remoteFailed, telegramFailed: telegramFailed)
130
+ self.render(remote: remote, telegram: telegram)
131
+ self.updateButtons()
50
132
  }
51
133
  }
52
134
 
53
- private func summary(remote: [String: Any]?, telegram: [String: Any]?, remoteFailed: Bool, telegramFailed: Bool) -> String {
54
- if remoteFailed && telegramFailed {
55
- return "Remote readiness and Telegram status are unavailable. Retry Check Readiness, or open Diagnostics for the redacted log."
135
+ private func runMutation(args: [String], stdin: String? = nil, kind: String, summary: String) {
136
+ guard !busy else {
137
+ hubStatus.stringValue = "Another Telegram operation is already running."
138
+ return
56
139
  }
57
- var lines: [String] = []
58
- if remoteFailed || remote == nil {
59
- lines.append("Official Remote compatibility: unavailable — probe failed or returned no readable JSON.")
60
- } else if let remote = remote {
140
+ guard let operation = operations.begin(kind: kind, mutationGroup: "telegram", summary: summary) else {
141
+ hubStatus.stringValue = "Another guarded mutation is already running. Wait or open Diagnostics."
142
+ return
143
+ }
144
+ setBusy(true)
145
+ _ = operations.update(operation, state: .running, stage: "running", progress: nil, summary: summary)
146
+ hubStatus.stringValue = "\(summary)…"
147
+ processClient.run(args, stdin: stdin, timeout: NativeView.mutationTimeout) { [weak self] result in
148
+ guard let self = self else { return }
149
+ let ok = result.code == 0
150
+ _ = self.operations.update(
151
+ operation,
152
+ state: ok ? .succeeded : .failed,
153
+ stage: "complete",
154
+ progress: 1,
155
+ summary: ok ? "\(summary) completed" : "\(summary) failed"
156
+ )
157
+ self.setBusy(false)
158
+ if !ok {
159
+ // Route setup failures to the setup card so the guidance sits
160
+ // next to the Connect button instead of the Hub status line.
161
+ if kind == "telegram-setup" {
162
+ self.setupStatus.stringValue = "Setup failed. Confirm you sent /start to this bot, then retry. The token was not written to logs."
163
+ } else {
164
+ self.hubStatus.stringValue = "\(summary) failed · \(NativeView.redactPreview(result.output))"
165
+ }
166
+ }
167
+ self.check()
168
+ }
169
+ }
170
+
171
+ private func setBusy(_ value: Bool) {
172
+ busy = value
173
+ updateButtons()
174
+ }
175
+
176
+ private func updateButtons() {
177
+ connectButton?.isEnabled = !busy
178
+ startButton?.isEnabled = !busy && setupReady && !hubRunning
179
+ stopButton?.isEnabled = !busy && hubRunning
180
+ restartButton?.isEnabled = !busy && setupReady && hubRunning
181
+ checkButton?.isEnabled = !busy
182
+ }
183
+
184
+ private func render(remote: [String: Any]?, telegram: [String: Any]?) {
185
+ if let remote = remote {
61
186
  let host = remote["host"] as? [String: Any]
62
187
  let project = remote["project"] as? [String: Any]
63
- let mcp = remote["mcp"] as? [String: Any]
64
- let sks = remote["sks"] as? [String: Any]
65
- let remoteBlockers = remote["blockers"] as? [String] ?? []
66
- let remoteWarnings = remote["warnings"] as? [String] ?? []
67
- lines.append("Official Remote compatibility: \(remote["ok"] as? Bool == true ? "Ready" : "Needs attention") · Codex app \(host?["codex_app_found"] as? Bool == true ? "found" : "missing") · CLI \(host?["codex_cli_found"] as? Bool == true ? "found" : "missing")")
68
- lines.append("Project: Git \(project?["git_repo"] as? Bool == true ? "ready" : "missing") · worktree \(project?["worktree"] as? Bool == true ? "yes" : "no") · dirty \(project?["dirty"] as? Bool == true ? "yes" : "no") · allowlist \(project?["allowed"] as? Bool == true ? "ready" : "blocked")")
69
- lines.append("MCP: \(mcp?["effective_count"] as? Int ?? 0) effective · \(mcp?["failed_count"] as? Int ?? 0) failed · SKS proof \(sks?["proof_surfaces_ready"] as? Bool == true ? "ready" : "missing")")
70
- if !remoteBlockers.isEmpty {
71
- lines.append("Remote blockers: \(remoteBlockers.prefix(3).joined(separator: "; "))\(remoteBlockers.count > 3 ? "…" : "")")
72
- } else if !remoteWarnings.isEmpty {
73
- lines.append("Remote warnings: \(remoteWarnings.prefix(3).joined(separator: "; "))\(remoteWarnings.count > 3 ? "…" : "")")
74
- } else {
75
- lines.append("Remote blockers 0 · warnings 0")
76
- }
188
+ let blockers = remote["blockers"] as? [String] ?? []
189
+ readinessStatus.stringValue = "Project readiness: \(remote["ok"] as? Bool == true ? "Ready" : "Needs attention") · Codex app \(host?["codex_app_found"] as? Bool == true ? "found" : "missing") · CLI \(host?["codex_cli_found"] as? Bool == true ? "found" : "missing") · Git \(project?["git_repo"] as? Bool == true ? "ready" : "missing")" + (blockers.isEmpty ? "" : " · \(blockers.prefix(2).joined(separator: "; "))")
190
+ } else {
191
+ readinessStatus.stringValue = "Project readiness is unavailable. Open Diagnostics for the redacted log."
77
192
  }
78
193
 
79
- if telegramFailed || telegram == nil {
80
- lines.append("Telegram Hub: unavailable — status probe failed.")
81
- lines.append("Remote fleet: unavailable until Telegram status succeeds.")
82
- } else if let telegram = telegram {
83
- let owner = telegram["owner"] as? [String: Any]
84
- let configured = telegram["configured"] as? Bool
85
- let hubState = owner != nil ? "Running" : configured == true ? "Stopped" : configured == false ? "Not configured" : "Unknown"
86
- let telegramIssues = (telegram["config_issues"] as? [String] ?? []) + (telegram["remote_config_issues"] as? [String] ?? [])
87
- lines.append("Telegram Hub: \(hubState) · \(telegram["topic_count"] as? Int ?? 0) topics · \(telegram["machine_count"] as? Int ?? 0) machines · \(telegram["target_count"] as? Int ?? 0) targets")
88
- if telegramIssues.isEmpty {
89
- lines.append("Telegram issues 0")
90
- } else {
91
- lines.append("Telegram issues \(telegramIssues.count): \(telegramIssues.prefix(2).joined(separator: "; "))\(telegramIssues.count > 2 ? "…" : "")")
92
- }
194
+ guard let telegram = telegram else {
195
+ setupReady = false
196
+ hubRunning = false
197
+ setupStatus.stringValue = "Telegram setup status is unavailable."
198
+ hubStatus.stringValue = "Telegram Hub status is unavailable."
199
+ return
93
200
  }
94
- return lines.joined(separator: "\n")
201
+ let token = telegram["token_configured"] as? Bool == true
202
+ let pairing = telegram["pairing_valid"] as? Bool == true
203
+ let sessions = telegram["registered_session_count"] as? Int ?? 0
204
+ setupReady = token && pairing && sessions > 0
205
+ hubRunning = telegram["hub_running"] as? Bool == true
206
+ setupStatus.stringValue = "Keychain token \(token ? "ready" : "missing") · private pairing \(pairing ? "ready" : "missing") · dedicated Codex sessions \(sessions)" + (setupReady ? " · ready to start" : " · connect the bot to continue")
207
+ let service = telegram["service"] as? [String: Any]
208
+ let installed = service?["installed"] as? Bool == true
209
+ let state = service?["state"] as? String
210
+ hubStatus.stringValue = "Hub \(hubRunning ? "Running" : installed ? "Stopped" : "Not installed")" + (state.map { " · launchd \($0)" } ?? "") + (hubRunning ? " · send a Telegram message to code" : setupReady ? " · click Start Hub" : "")
95
211
  }
96
212
 
97
213
  private func json(_ text: String) -> [String: Any]? {
@@ -2,7 +2,7 @@ import Cocoa
2
2
 
3
3
  final class SettingsViewController: NSViewController, ControlCenterPage {
4
4
  private let notifications: NotificationCoordinator
5
- private let quitWithCodex = NSButton(checkboxWithTitle: "Quit SKS Menu when Codex quits (otherwise keep icon, hide only after a Codex session ends)", target: nil, action: nil)
5
+ private let quitWithCodex = NSButton(checkboxWithTitle: "Quit SKS Menu when Codex quits", target: nil, action: nil)
6
6
  private let status = NativeView.detail("Settings use the native app configuration file.")
7
7
  init(notifications: NotificationCoordinator) { self.notifications = notifications; super.init(nibName: nil, bundle: nil) }
8
8
  required init?(coder: NSCoder) { nil }
@@ -12,10 +12,19 @@ final class SettingsViewController: NSViewController, ControlCenterPage {
12
12
  quitWithCodex.state = readConfig()["quit_with_codex"] as? Bool == true ? .on : .off
13
13
  quitWithCodex.setAccessibilityLabel("Quit SKS Menu when Codex quits")
14
14
  let authorize = NativeView.button("Enable Notifications", target: self, action: #selector(enableNotifications))
15
- view = NativeView.stack([
16
- NativeView.title("Settings"),
17
- NativeView.detail("These options stay on this Mac. Notification permission and Codex lifecycle behavior never leave the machine."),
18
- quitWithCodex, authorize, status
15
+ let lifecycleCard = NativeView.card(
16
+ title: "Codex lifecycle",
17
+ subtitle: "Off keeps the menu icon available on cold start and hides it only after a Codex session ends.",
18
+ views: [quitWithCodex]
19
+ )
20
+ let notificationsCard = NativeView.card(
21
+ title: "Notifications",
22
+ subtitle: "Operation results always stay available in Control Center, even when notifications are denied.",
23
+ views: [NativeView.row([authorize]), status]
24
+ )
25
+ view = NativeView.page([
26
+ ControlKit.header("Settings", "These options stay on this Mac. Notification permission and Codex lifecycle behavior never leave the machine."),
27
+ lifecycleCard, notificationsCard
19
28
  ])
20
29
  refreshOnAppear()
21
30
  }
@@ -1,11 +1,25 @@
1
1
  import Foundation
2
2
 
3
+ // Ordered by expected use frequency: provider/model work first, then updates,
4
+ // then integrations, then maintenance.
3
5
  enum SidebarItem: String, CaseIterable {
4
6
  case overview = "Overview"
7
+ case providers = "Providers"
5
8
  case updates = "Updates"
6
9
  case mcpServers = "MCP Servers"
7
- case providers = "Providers"
8
10
  case remoteTelegram = "Remote & Telegram"
9
11
  case diagnostics = "Diagnostics"
10
12
  case settings = "Settings"
13
+
14
+ var symbolName: String {
15
+ switch self {
16
+ case .overview: return "gauge"
17
+ case .providers: return "cpu"
18
+ case .updates: return "arrow.down.circle"
19
+ case .mcpServers: return "server.rack"
20
+ case .remoteTelegram: return "paperplane"
21
+ case .diagnostics: return "stethoscope"
22
+ case .settings: return "gearshape"
23
+ }
24
+ }
11
25
  }
@@ -124,7 +124,7 @@ final class StatusItemController: NSObject, NSMenuDelegate {
124
124
  else if operationFailed { icon = .warning; summary = "Needs attention — last operation failed" }
125
125
  else if actionRequired || notificationAuthorizationDenied || pendingCount > 0 {
126
126
  icon = .attention
127
- summary = notificationAuthorizationDenied ? "Notifications require attention" : pendingCount > 0 ? "Input or approval required" : "Input or approval required"
127
+ summary = pendingCount > 0 ? "Input or approval required" : notificationAuthorizationDenied ? "Notifications require attention" : "Input or approval required"
128
128
  }
129
129
  else if sksUpdate || codexUpdate {
130
130
  icon = .updateAvailable
@@ -231,7 +231,7 @@ final class StatusItemController: NSObject, NSMenuDelegate {
231
231
  if update["source"] as? String == "disabled" { return false }
232
232
  guard update["schema"] as? String == "sks.update-status.v3",
233
233
  let expiresAt = update["expires_at"] as? String,
234
- let expiry = ISO8601DateFormatter().date(from: expiresAt) else { return true }
234
+ let expiry = SKSTimestamp.date(from: expiresAt) else { return true }
235
235
  return expiry <= now
236
236
  }
237
237
 
@@ -1,7 +1,10 @@
1
1
  import Cocoa
2
2
 
3
3
  final class UpdatesViewController: NSViewController, ControlCenterPage {
4
- private static let controlCenterUpdateEnvironment = ["SKS_UPDATE_DEFER_MENUBAR_RESTART": "1"]
4
+ private static let controlCenterUpdateEnvironment = [
5
+ "SKS_UPDATE_DEFER_MENUBAR_RESTART": "1",
6
+ "SKS_SKIP_SKS_MENUBAR_LAUNCH": "1"
7
+ ]
5
8
  private let processClient: ProcessClient
6
9
  private let operations: OperationCoordinator
7
10
  private let notifications: NotificationCoordinator
@@ -31,15 +34,17 @@ final class UpdatesViewController: NSViewController, ControlCenterPage {
31
34
  checkButton = NativeView.button("Check Now", target: self, action: #selector(checkNow))
32
35
  codexUpdateButton = NativeView.button("Update Codex CLI", target: self, action: #selector(updateCodexCLI))
33
36
  codexUpdateButton.setAccessibilityHelp("Update the operator Codex CLI using its verified installation method.")
34
- reviewButton = NativeView.button("Review and Update", target: self, action: #selector(reviewAndUpdate))
37
+ reviewButton = ControlKit.primaryButton("Review and Update", target: self, action: #selector(reviewAndUpdate))
38
+ reviewButton.setAccessibilityHelp("Review the staged update first, then confirm before anything is installed.")
35
39
  codexUpdateStatus.setAccessibilityLabel("Codex CLI update result")
36
40
  let buttons = NSStackView(views: [checkButton, codexUpdateButton, reviewButton, progress])
37
41
  buttons.orientation = .horizontal; buttons.spacing = 8
38
- view = NativeView.stack([
39
- NativeView.title("Updates"),
40
- NativeView.detail("SKS, Codex CLI, and Menu Bar status share one local snapshot. Prefer the latest Codex CLI; SKS stays version-agnostic and capability-gates features. Network refresh only runs on demand or after expiry."),
41
- status, codexUpdateStatus, stageStatus, remediation, buttons,
42
- NativeView.detail("Rollback guidance and the previous Menu Bar app remain available if final verification fails. The update receipt records the exact recovery command and stage state.")
42
+ view = NativeView.page([
43
+ ControlKit.header("Updates", "SKS, Codex CLI, and Menu Bar status share one local snapshot. Prefer the latest Codex CLI; SKS stays version-agnostic and capability-gates features. Network refresh only runs on demand or after expiry."),
44
+ buttons,
45
+ NativeView.card(title: "Status", subtitle: "Versions from the shared local snapshot.", views: [status, codexUpdateStatus]),
46
+ NativeView.card(title: "Progress", subtitle: "Authoritative stage checklist from the update receipt.", views: [stageStatus]),
47
+ NativeView.card(title: "Recovery", subtitle: "Rollback guidance and the previous Menu Bar app remain available if final verification fails. The update receipt records the exact recovery command and stage state.", views: [remediation])
43
48
  ])
44
49
  loadCached()
45
50
  }
@@ -295,7 +300,7 @@ final class UpdatesViewController: NSViewController, ControlCenterPage {
295
300
  let menu = json["menubar"] as? [String: Any]
296
301
  let generatedAt = json["generated_at"] as? String ?? "unknown"
297
302
  let expiresAt = json["expires_at"] as? String ?? "unknown"
298
- let expired = ISO8601DateFormatter().date(from: expiresAt).map { $0 <= Date() } ?? true
303
+ let expired = SKSTimestamp.date(from: expiresAt).map { $0 <= Date() } ?? true
299
304
  status.stringValue = [
300
305
  "SKS \(sks?["current"] as? String ?? "unknown") → \(sks?["latest"] as? String ?? "unknown") · Codex CLI \(codex?["current"] as? String ?? "unknown") → \(codex?["latest"] as? String ?? "unknown")",
301
306
  "Menu Bar expected \(menu?["expected_version"] as? String ?? AppRuntime.packageVersion) · installed \(menu?["installed_version"] as? String ?? "unknown") · rebuild \(menu?["rebuild_required"] as? Bool == true ? "required" : "not required")",
@@ -334,8 +339,7 @@ final class UpdatesViewController: NSViewController, ControlCenterPage {
334
339
 
335
340
  private func receipt(_ receipt: UpdateOperationReceiptSnapshot, belongsTo operation: OperationSnapshot) -> Bool {
336
341
  guard receipt.kind == "update" || receipt.kind == "rollback" else { return false }
337
- let parser = ISO8601DateFormatter()
338
- guard let receiptDate = parser.date(from: receipt.startedAt), let operationDate = parser.date(from: operation.startedAt) else { return receipt.startedAt >= operation.startedAt }
342
+ guard let receiptDate = SKSTimestamp.date(from: receipt.startedAt), let operationDate = SKSTimestamp.date(from: operation.startedAt) else { return receipt.startedAt >= operation.startedAt }
339
343
  return receiptDate >= operationDate.addingTimeInterval(-1)
340
344
  }
341
345
 
@@ -362,11 +366,11 @@ final class UpdatesViewController: NSViewController, ControlCenterPage {
362
366
  if id == current { return "● \(id) — running" }
363
367
  return "○ \(id)"
364
368
  }
365
- return "Update stages (14):\n" + rows.joined(separator: "\n")
369
+ return "Update stages (\(OperationCoordinator.updateStageOrder.count)):\n" + rows.joined(separator: "\n")
366
370
  }
367
371
 
368
372
  private func formatTimestamp(_ value: String) -> String {
369
- guard let date = ISO8601DateFormatter().date(from: value) else { return value }
373
+ guard let date = SKSTimestamp.date(from: value) else { return value }
370
374
  let formatter = DateFormatter()
371
375
  formatter.dateStyle = .medium
372
376
  formatter.timeStyle = .medium
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { analyzeAgentGuidance } from '../core/agent-guidance/directive-registry.js';
5
+ import { renderInitDeepAgentGuidance } from '../core/codex-app/codex-init-deep.js';
6
+ import { writeJsonAtomic } from '../core/fsx.js';
7
+ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
8
+ const files = renderInitDeepAgentGuidance([
9
+ { score: 1, dir: '.', file_count: 120, languages: ['ts'], guidance: 'Use local source conventions and keep changes owner-scoped.' },
10
+ { score: 1, dir: 'src/core', file_count: 79, languages: ['ts'], guidance: 'Use local source conventions and keep changes owner-scoped.' },
11
+ { score: 1, dir: 'src/core/release', file_count: 47, languages: ['ts'], guidance: 'High-risk SKS runtime area; hydrate TriWiki/current source before edits.' },
12
+ { score: 1, dir: 'src/cli', file_count: 27, languages: ['ts'], guidance: 'Use local source conventions and keep changes owner-scoped.' },
13
+ { score: 1, dir: 'docs', file_count: 40, languages: ['md'], guidance: 'Use local source conventions and keep changes owner-scoped.' }
14
+ ]);
15
+ const report = analyzeAgentGuidance(files, { sharedScopePath: 'ROOT' });
16
+ const output = path.join(root, '.sneakoscope', 'reports', 'agent-guidance-dedup.json');
17
+ await writeJsonAtomic(output, report);
18
+ console.log(JSON.stringify(report, null, 2));
19
+ if (!report.ok) {
20
+ console.error('Agent guidance carries directives that say nothing new.');
21
+ console.error('State a directive once, at the broadest scope that covers its readers, and prefer the canonical principle over its restatements.');
22
+ process.exitCode = 1;
23
+ }
@@ -3,7 +3,7 @@ import fs from 'node:fs/promises';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
5
  import { appendAgentMessage, readAgentMessageBus } from '../core/agents/agent-message-bus.js';
6
- import { assertGate, emitGate } from './sks-1-18-gate-lib.js';
6
+ import { assertGate, emitGate } from './gate-lib.js';
7
7
  const missionId = 'M-agent-message-reader';
8
8
  const root = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-agent-message-'));
9
9
  const agents = path.join(root, '.sneakoscope', 'missions', missionId, 'agents');
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
- import { assertGate, emitGate, requireContains, root, runSksJson } from './sks-1-12-real-execution-check-lib.js';
4
+ import { assertGate, emitGate, requireContains, root, runSksJson } from './real-execution-check-lib.js';
5
5
  const requiredGates = [
6
6
  'ux-review:run-wires-imagegen',
7
7
  'ux-review:extract-wires-real-extractor',
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
- import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
4
+ import { assertGate, emitGate, importDist, root } from './gate-lib.js';
5
5
  const detector = await importDist('core/codex/appshots-detector.js');
6
6
  const evidenceMod = await importDist('core/source-intelligence/appshots-evidence.js');
7
7
  const fixture = writeAppshotFixture();
@@ -33,7 +33,6 @@ if (architectureBudgets.schema !== 'sks.architecture-budgets.v1')
33
33
  if (architectureBudgets.waiver_policy?.mode !== 'shrink-only')
34
34
  issues.push('architecture waivers must be shrink-only');
35
35
  for (const [id, maxLines] of [
36
- ['menubar-facade', 80],
37
36
  ['menubar-typescript', 450],
38
37
  ['menubar-swift', 500],
39
38
  ['menubar-app-delegate', 250],
@@ -52,7 +51,7 @@ assertIncludes('src/scripts/check-architecture.ts', "args.includes('--strict-all
52
51
  assertIncludes('src/scripts/check-architecture.ts', "'config', 'architecture-budgets.v1.json'", 'architecture check must load the budget SSOT');
53
52
  assertIncludes('src/scripts/check-architecture.ts', 'shrink-only ceiling', 'architecture check must enforce shrink-only waivers');
54
53
  assertIncludes('docs/architecture.md', '`config/architecture-budgets.v1.json`', 'architecture docs must name the budget SSOT');
55
- for (const token of ['`80`', '`250`', '`450`', '`500`', '`900`', '`1200`', '`1800`', '`3000`', '`--strict-all`', 'shrink-only']) {
54
+ for (const token of ['`250`', '`450`', '`500`', '`900`', '`1200`', '`1800`', '`3000`', '`--strict-all`', 'shrink-only']) {
56
55
  assertIncludes('docs/architecture.md', token, `architecture docs missing ${token}`);
57
56
  }
58
57
  assertIncludes('src/core/pipeline-internals/runtime-core.ts', "'ssot_guard'");
@@ -1,4 +1,4 @@
1
- import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
1
+ import { assertGate, emitGate, importDist, root } from './gate-lib.js';
2
2
  const graphMod = await importDist('core/triwiki/triwiki-affected-graph.js');
3
3
  const certMod = await importDist('core/triwiki/triwiki-sla-certificate.js');
4
4
  const graph = graphMod.computeTriWikiAffectedGraph({ root, changedFiles: ['src/core/triwiki/triwiki-proof-bank.ts'], tier: 'affected' });
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
3
  import { spawnSync } from 'node:child_process';
4
- import { assertGate, emitGate, root } from './sks-1-18-gate-lib.js';
4
+ import { assertGate, emitGate, root } from './gate-lib.js';
5
5
  import { PACKAGE_VERSION } from '../core/version.js';
6
6
  const executed = [
7
7
  ['review'],
@@ -2,7 +2,7 @@
2
2
  import fs from 'node:fs';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
- import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
5
+ import { assertGate, emitGate, importDist, root } from './gate-lib.js';
6
6
  const runner = await importDist('core/agents/agent-runner-codex-exec.js');
7
7
  const compat = await importDist('core/codex/codex-0-134-compat.js');
8
8
  const history = await importDist('core/source-intelligence/codex-history-search.js');
@@ -2,7 +2,7 @@
2
2
  import fs from 'node:fs/promises';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
- import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
5
+ import { assertGate, emitGate, importDist } from './gate-lib.js';
6
6
  process.env.SKS_CODEX_0138_FAKE = '1';
7
7
  const mod = await importDist('core/codex-control/codex-0138-capability.js');
8
8
  const root = await fs.mkdtemp(path.join(os.tmpdir(), 'sks-codex-0138-cap-'));
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
2
+ import { assertGate, emitGate, importDist } from './gate-lib.js';
3
3
  process.env.SKS_CODEX_0138_FAKE = '1';
4
4
  process.env.SKS_CODEX_VERSION_FAKE = 'codex-cli 0.138.0';
5
5
  const mod = await importDist('core/codex-control/codex-0138-capability.js');
@@ -2,7 +2,7 @@
2
2
  import fs from 'node:fs/promises';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
- import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
5
+ import { assertGate, emitGate, importDist } from './gate-lib.js';
6
6
  import { writeTextAtomic } from '../core/fsx.js';
7
7
  process.env.SKS_CODEX_0138_FAKE = '1';
8
8
  const mod = await importDist('core/doctor/codex-0138-doctor.js');
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
2
+ import { assertGate, emitGate, importDist } from './gate-lib.js';
3
3
  process.env.SKS_CODEX_0138_FAKE = '1';
4
4
  process.env.SKS_CODEX_VERSION_FAKE = 'codex-cli 0.138.0';
5
5
  process.env.SKS_CODEX_0138_PROBE = '1';
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { assertGate, emitGate, readText } from './sks-1-18-gate-lib.js';
2
+ import { assertGate, emitGate, readText } from './gate-lib.js';
3
3
  import { createCodexAppServerV2Client, currentTimeResponse } from '../core/codex-control/codex-app-server-v2-client.js';
4
4
  import { CURRENT_CODEX_RELEASE_MANIFEST } from '../core/codex-compat/codex-release-manifest.js';
5
5
  const requireReal = process.argv.includes('--require-real') || process.env.SKS_REQUIRE_CODEX_0144_APP_SERVER === '1';
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { assertGate, emitGate } from './sks-1-18-gate-lib.js';
2
+ import { assertGate, emitGate } from './gate-lib.js';
3
3
  import { CURRENT_CODEX_RELEASE_MANIFEST } from '../core/codex-compat/codex-release-manifest.js';
4
4
  import { compareSemverLike } from '../core/codex-compat/codex-version-policy.js';
5
5
  import { resolveOfficialCodexPackageRuntime } from '../core/codex-runtime/resolve-codex-runtime.js';
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { assertGate, emitGate } from './sks-1-18-gate-lib.js';
2
+ import { assertGate, emitGate } from './gate-lib.js';
3
3
  import { CODEX_0144_FEATURE_KEYS, detectCodex0144Capability, writeCodex0144CapabilityArtifacts } from '../core/codex-control/codex-0144-capability.js';
4
4
  const requireReal = process.argv.includes('--require-real') || process.env.SKS_REQUIRE_CODEX_0144 === '1';
5
5
  if (!requireReal)
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { emitGate, importDist, root } from './sks-1-18-gate-lib.js';
2
+ import { emitGate, importDist, root } from './gate-lib.js';
3
3
  const args = process.argv.slice(2);
4
4
  const requireReal = args.includes('--require-real');
5
5
  const allowNetwork = args.includes('--allow-network');
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { assertGate, emitGate, readJson, root } from './sks-1-18-gate-lib.js';
2
+ import { assertGate, emitGate, readJson, root } from './gate-lib.js';
3
3
  import { codexReleaseManifestParity } from '../core/codex-compat/codex-release-manifest.js';
4
4
  import { detectCodex0144Capability } from '../core/codex-control/codex-0144-capability.js';
5
5
  const parity = await codexReleaseManifestParity(root);
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { assertGate, emitGate } from './sks-1-18-gate-lib.js';
2
+ import { assertGate, emitGate } from './gate-lib.js';
3
3
  import { buildCodexExecutionPolicy } from '../core/codex-control/codex-sdk-config-policy.js';
4
4
  import { buildCodexSdkEnv } from '../core/codex-control/codex-sdk-env-policy.js';
5
5
  process.env.AWS_SECRET_ACCESS_KEY = 'fixture-secret-aws';
@@ -2,7 +2,7 @@
2
2
  import fsp from 'node:fs/promises';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
- import { assertGate, emitGate } from './sks-1-18-gate-lib.js';
5
+ import { assertGate, emitGate } from './gate-lib.js';
6
6
  import { readCodexThreadRegistry, recordCodexThread } from '../core/codex-control/codex-thread-registry.js';
7
7
  const tmp = await fsp.mkdtemp(path.join(os.tmpdir(), 'sks-codex-0144-thread-store-'));
8
8
  try {