sneakoscope 7.3.0 → 7.6.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 (283) hide show
  1. package/README.md +129 -10
  2. package/crates/sks-core/Cargo.lock +1 -1
  3. package/crates/sks-core/Cargo.toml +1 -1
  4. package/dist/cli/codex-app-command.js +1 -1
  5. package/dist/cli/command-manifest-lite.js +4 -1
  6. package/dist/cli/command-registry.js +2 -0
  7. package/dist/cli/install-helpers-codex-lb-chain.js +42 -0
  8. package/dist/cli/install-helpers-codex-lb-config.js +114 -9
  9. package/dist/cli/install-helpers-install-support.js +6 -16
  10. package/dist/cli/install-helpers.js +788 -600
  11. package/dist/cli/router.js +30 -2
  12. package/dist/commands/codex-app.js +37 -1
  13. package/dist/commands/codex-lb.js +491 -300
  14. package/dist/config/skills-manifest.json +57 -71
  15. package/dist/core/align/align-route.js +127 -0
  16. package/dist/core/codex-app/codex-app-fast-ui-repair.js +8 -4
  17. package/dist/core/codex-app/codex-app-restart.js +83 -0
  18. package/dist/core/codex-app/codex-app-ui-state-snapshot.js +8 -4
  19. package/dist/core/codex-app/desktop-routing-snapshot.js +1 -1
  20. package/dist/core/codex-app/menubar/constants.js +5 -0
  21. package/dist/core/codex-app/menubar/generation-transaction-journal.js +1 -3
  22. package/dist/core/codex-app/menubar/installer.js +18 -0
  23. package/dist/core/codex-app/multi-provider-router.js +22 -10
  24. package/dist/core/codex-app/openrouter-activate.js +26 -1
  25. package/dist/core/codex-app.js +118 -26
  26. package/dist/core/codex-control/codex-app-server-runtime-env.js +86 -0
  27. package/dist/core/codex-control/codex-app-server-v2-client.js +78 -8
  28. package/dist/core/codex-control/codex-task-runner.js +2 -2
  29. package/dist/core/codex-lb/capability-runner.js +204 -0
  30. package/dist/core/codex-lb/capability-types.js +1 -0
  31. package/dist/core/codex-lb/codex-lb-env.js +9 -13
  32. package/dist/core/codex-lb/codex-lb-setup.js +45 -8
  33. package/dist/core/codex-lb/codex-lb-tool-catalog.js +52 -74
  34. package/dist/core/codex-lb/codex-lb-tool-output-recovery.js +1 -1
  35. package/dist/core/codex-lb/desktop-auth-invariant.js +185 -0
  36. package/dist/core/codex-lb/desktop-bridge/client.js +34 -0
  37. package/dist/core/codex-lb/desktop-bridge/header-policy.js +106 -0
  38. package/dist/core/codex-lb/desktop-bridge/http-forward.js +101 -0
  39. package/dist/core/codex-lb/desktop-bridge/index.js +10 -0
  40. package/dist/core/codex-lb/desktop-bridge/launchd.js +81 -0
  41. package/dist/core/codex-lb/desktop-bridge/location-rewrite.js +27 -0
  42. package/dist/core/codex-lb/desktop-bridge/security.js +274 -0
  43. package/dist/core/codex-lb/desktop-bridge/server.js +179 -0
  44. package/dist/core/codex-lb/desktop-bridge/state.js +119 -0
  45. package/dist/core/codex-lb/desktop-bridge/types.js +16 -0
  46. package/dist/core/codex-lb/desktop-bridge/websocket-forward.js +151 -0
  47. package/dist/core/codex-lb/desktop-center-credentials.js +189 -0
  48. package/dist/core/codex-lb/desktop-controller.js +1410 -0
  49. package/dist/core/codex-lb/desktop-mode.js +32 -0
  50. package/dist/core/codex-lb/desktop-real-evidence.js +168 -0
  51. package/dist/core/codex-lb/desktop-service.js +613 -0
  52. package/dist/core/codex-lb/legacy-migration.js +575 -0
  53. package/dist/core/codex-lb/migration-receipt.js +246 -0
  54. package/dist/core/codex-lb/probes/auxiliary-surfaces-probe.js +60 -0
  55. package/dist/core/codex-lb/probes/bridge-probe.js +75 -0
  56. package/dist/core/codex-lb/probes/catalog-probe.js +128 -0
  57. package/dist/core/codex-lb/probes/computer-use-probe.js +50 -0
  58. package/dist/core/codex-lb/probes/image-generation-probe.js +47 -0
  59. package/dist/core/codex-lb/probes/probe-evidence.js +39 -0
  60. package/dist/core/codex-lb/probes/voice-realtime-probe.js +44 -0
  61. package/dist/core/codex-lb/trusted-deep-evidence.js +403 -0
  62. package/dist/core/codex-native/core-skill-manifest.js +22 -6
  63. package/dist/core/codex-runtime/codex-desktop-config-policy.js +2 -1
  64. package/dist/core/commands/align-command.js +220 -0
  65. package/dist/core/commands/image-ux-review-command.js +280 -68
  66. package/dist/core/commands/naruto-command.js +257 -8
  67. package/dist/core/commands/ppt-command.js +2 -2
  68. package/dist/core/commands/telegram-command.js +402 -34
  69. package/dist/core/commands/triwiki-command.js +11 -1
  70. package/dist/core/commands/triwiki-graph-command.js +160 -0
  71. package/dist/core/commands/wiki-command.js +100 -20
  72. package/dist/core/doctor/skill-legacy-surface.js +1 -3
  73. package/dist/core/errors/message.js +3 -0
  74. package/dist/core/evidence/evidence-freshness.js +14 -0
  75. package/dist/core/feature-fixtures.js +9 -1
  76. package/dist/core/feature-registry.js +5 -3
  77. package/dist/core/fsx.js +7 -3
  78. package/dist/core/hooks-runtime/codex-commit-hooks-selftest.js +82 -0
  79. package/dist/core/hooks-runtime/context-graph-freshness-preflight.js +113 -0
  80. package/dist/core/hooks-runtime/hook-context.js +15 -2
  81. package/dist/core/hooks-runtime/managed-skill-generation-heal.js +46 -0
  82. package/dist/core/hooks-runtime/naruto-terminal-finalization.js +1 -0
  83. package/dist/core/hooks-runtime/official-subagent-lifecycle.js +1 -1
  84. package/dist/core/hooks-runtime/tool-output-quarantine.js +1 -1
  85. package/dist/core/hooks-runtime.js +33 -89
  86. package/dist/core/image-ux-review/callout-extraction.js +6 -0
  87. package/dist/core/image-ux-review/imagegen-adapter.js +64 -23
  88. package/dist/core/image-ux-review/real-callout-extractor.js +1 -0
  89. package/dist/core/image-ux-review.js +230 -12
  90. package/dist/core/imagegen/codex-lb-imagegen-target.js +21 -7
  91. package/dist/core/imagegen/imagegen-capability.js +10 -4
  92. package/dist/core/imagegen/require-imagegen.js +29 -5
  93. package/dist/core/init/skills.js +25 -13
  94. package/dist/core/init.js +1 -1
  95. package/dist/core/install/installed-package-smoke.js +157 -4
  96. package/dist/core/managed-assets/managed-assets-manifest.js +2 -1
  97. package/dist/core/managed-path-safety.js +8 -10
  98. package/dist/core/mcp-config/backup.js +2 -4
  99. package/dist/core/mcp-config/config-reader.js +2 -4
  100. package/dist/core/mcp-config/scope.js +3 -5
  101. package/dist/core/naruto/context-graph-advisor-scope.js +242 -0
  102. package/dist/core/naruto/context-graph-advisor.js +0 -0
  103. package/dist/core/perf/release-latency-slo.js +12 -6
  104. package/dist/core/pipeline-internals/runtime-core.js +78 -0
  105. package/dist/core/pipeline-internals/runtime-gates.js +5 -2
  106. package/dist/core/policy/latest-version-guidance.js +113 -0
  107. package/dist/core/ppt.js +8 -8
  108. package/dist/core/preflight/parallel-preflight-engine.js +1 -1
  109. package/dist/core/proof/auto-finalize.js +98 -6
  110. package/dist/core/proof/route-proof-gate.js +12 -1
  111. package/dist/core/proof/route-proof-policy.js +8 -8
  112. package/dist/core/release/gate-manifest.js +32 -1
  113. package/dist/core/release/npm-stage-contract.js +21 -0
  114. package/dist/core/release/package-size-budget.js +2 -2
  115. package/dist/core/release/release-gate-contract.js +5 -0
  116. package/dist/core/release/release-proof-io.js +1 -3
  117. package/dist/core/release/release-real-contract.js +5 -4
  118. package/dist/core/release/release-stamp-proof.js +1 -3
  119. package/dist/core/release/stage-publish.js +27 -0
  120. package/dist/core/remote/audit-idempotency.js +50 -18
  121. package/dist/core/remote/codex-public-activity.js +283 -0
  122. package/dist/core/remote/index.js +1 -0
  123. package/dist/core/remote/ssh-worker-client.js +4 -1
  124. package/dist/core/remote/worker.js +206 -27
  125. package/dist/core/research/research-adversarial-review.js +1 -3
  126. package/dist/core/research/research-claim-synthesizer.js +1 -3
  127. package/dist/core/research/research-falsification-runner.js +1 -3
  128. package/dist/core/research/research-source-evidence.js +1 -3
  129. package/dist/core/responses-stream.js +65 -19
  130. package/dist/core/routes/constants.js +1 -1
  131. package/dist/core/routes/design-policy.js +7 -2
  132. package/dist/core/routes/dollar-manifest-lite.js +2 -4
  133. package/dist/core/routes/evidence.js +1 -1
  134. package/dist/core/routes.js +30 -10
  135. package/dist/core/safety/command-contract/contracts.js +2 -0
  136. package/dist/core/safety/command-contract/types.js +1 -1
  137. package/dist/core/search/context-graph-seeds.js +205 -0
  138. package/dist/core/search/context.js +0 -0
  139. package/dist/core/search/provider.js +2 -2
  140. package/dist/core/secret-redaction.js +6 -0
  141. package/dist/core/subagents/naruto-help-contract.js +2 -1
  142. package/dist/core/subagents/naruto-host-credentials.js +161 -0
  143. package/dist/core/subagents/official-subagent-preparation.js +4 -1
  144. package/dist/core/subagents/official-subagent-prompt.js +44 -2
  145. package/dist/core/subagents/official-subagent-runner.js +26 -8
  146. package/dist/core/subagents/triwiki-attention.js +135 -123
  147. package/dist/core/telegram/bot-api.js +85 -10
  148. package/dist/core/telegram/center-snapshot.js +718 -0
  149. package/dist/core/telegram/config.js +158 -31
  150. package/dist/core/telegram/hub.js +288 -33
  151. package/dist/core/telegram/index.js +2 -0
  152. package/dist/core/telegram/ingress-spool.js +419 -0
  153. package/dist/core/telegram/ledgers.js +188 -29
  154. package/dist/core/telegram/messages.js +26 -6
  155. package/dist/core/telegram/owner-lock.js +10 -7
  156. package/dist/core/telegram/runtime-projection.js +38 -3
  157. package/dist/core/telegram/runtime.js +298 -63
  158. package/dist/core/telegram/service.js +137 -8
  159. package/dist/core/telegram/setup.js +291 -73
  160. package/dist/core/text/strings.js +3 -0
  161. package/dist/core/triwiki/code-pack.js +12 -120
  162. package/dist/core/triwiki/context-graph/compiler/cache-key.js +277 -0
  163. package/dist/core/triwiki/context-graph/compiler/extract.js +104 -0
  164. package/dist/core/triwiki/context-graph/compiler/freshness.js +108 -0
  165. package/dist/core/triwiki/context-graph/compiler/index.js +237 -0
  166. package/dist/core/triwiki/context-graph/compiler/merge.js +0 -0
  167. package/dist/core/triwiki/context-graph/compiler/serialize.js +115 -0
  168. package/dist/core/triwiki/context-graph/contracts.js +236 -0
  169. package/dist/core/triwiki/context-graph/extractors/code/builders.js +150 -0
  170. package/dist/core/triwiki/context-graph/extractors/code/declarations.js +161 -0
  171. package/dist/core/triwiki/context-graph/extractors/code/index.js +265 -0
  172. package/dist/core/triwiki/context-graph/extractors/code/inventory.js +237 -0
  173. package/dist/core/triwiki/context-graph/extractors/code/module-graph.js +252 -0
  174. package/dist/core/triwiki/context-graph/extractors/code/modules.js +79 -0
  175. package/dist/core/triwiki/context-graph/extractors/code/references.js +184 -0
  176. package/dist/core/triwiki/context-graph/extractors/code/selection.js +100 -0
  177. package/dist/core/triwiki/context-graph/extractors/code/ts-config.js +161 -0
  178. package/dist/core/triwiki/context-graph/extractors/code/types.js +18 -0
  179. package/dist/core/triwiki/context-graph/extractors/evidence/claims.js +289 -0
  180. package/dist/core/triwiki/context-graph/extractors/evidence/index.js +54 -0
  181. package/dist/core/triwiki/context-graph/extractors/evidence/proof-index.js +213 -0
  182. package/dist/core/triwiki/context-graph/extractors/evidence/proofs.js +266 -0
  183. package/dist/core/triwiki/context-graph/extractors/evidence/redaction.js +177 -0
  184. package/dist/core/triwiki/context-graph/extractors/evidence/shared.js +0 -0
  185. package/dist/core/triwiki/context-graph/extractors/evidence/sources.js +154 -0
  186. package/dist/core/triwiki/context-graph/extractors/index.js +7 -0
  187. package/dist/core/triwiki/context-graph/extractors/topology/commands.js +207 -0
  188. package/dist/core/triwiki/context-graph/extractors/topology/gate-edges.js +201 -0
  189. package/dist/core/triwiki/context-graph/extractors/topology/gates.js +182 -0
  190. package/dist/core/triwiki/context-graph/extractors/topology/globs.js +124 -0
  191. package/dist/core/triwiki/context-graph/extractors/topology/index.js +92 -0
  192. package/dist/core/triwiki/context-graph/extractors/topology/routes.js +135 -0
  193. package/dist/core/triwiki/context-graph/extractors/topology/shared.js +215 -0
  194. package/dist/core/triwiki/context-graph/graph-index.js +143 -0
  195. package/dist/core/triwiki/context-graph/ids.js +0 -0
  196. package/dist/core/triwiki/context-graph/lint/index.js +0 -0
  197. package/dist/core/triwiki/context-graph/lint/rules.js +232 -0
  198. package/dist/core/triwiki/context-graph/lint/warnings.js +93 -0
  199. package/dist/core/triwiki/context-graph/paths.js +116 -0
  200. package/dist/core/triwiki/context-graph/profiles.js +78 -0
  201. package/dist/core/triwiki/context-graph/projections/anchors.js +91 -0
  202. package/dist/core/triwiki/context-graph/projections/attention.js +58 -0
  203. package/dist/core/triwiki/context-graph/projections/code-pack-workspace.js +62 -0
  204. package/dist/core/triwiki/context-graph/projections/code-pack.js +144 -0
  205. package/dist/core/triwiki/context-graph/projections/index.js +7 -0
  206. package/dist/core/triwiki/context-graph/projections/module-view.js +140 -0
  207. package/dist/core/triwiki/context-graph/projections/node-summary.js +118 -0
  208. package/dist/core/triwiki/context-graph/projections/pack-contract.js +6 -0
  209. package/dist/core/triwiki/context-graph/query/explain.js +0 -0
  210. package/dist/core/triwiki/context-graph/query/index.js +178 -0
  211. package/dist/core/triwiki/context-graph/query/load.js +116 -0
  212. package/dist/core/triwiki/context-graph/query/pack.js +117 -0
  213. package/dist/core/triwiki/context-graph/query/rank.js +142 -0
  214. package/dist/core/triwiki/context-graph/query/ranking-config.js +64 -0
  215. package/dist/core/triwiki/context-graph/query/seeds.js +241 -0
  216. package/dist/core/triwiki/context-graph/query/snapshot-cache.js +72 -0
  217. package/dist/core/triwiki/context-graph/query/traverse.js +154 -0
  218. package/dist/core/triwiki/context-graph/query-types.js +29 -0
  219. package/dist/core/triwiki/context-graph/store/compile-lock.js +21 -0
  220. package/dist/core/triwiki/context-graph/store/event-log.js +48 -0
  221. package/dist/core/triwiki/context-graph/store/fragment-cache.js +85 -0
  222. package/dist/core/triwiki/context-graph/store/graph-status.js +85 -0
  223. package/dist/core/triwiki/context-graph/store/snapshot-store.js +155 -0
  224. package/dist/core/triwiki/triwiki-proof-bank-index-repair.js +115 -0
  225. package/dist/core/triwiki/triwiki-proof-bank-index-store.js +290 -0
  226. package/dist/core/triwiki/triwiki-proof-bank-index.js +126 -0
  227. package/dist/core/triwiki/triwiki-proof-bank.js +7 -1
  228. package/dist/core/verification/context-graph-affected.js +271 -0
  229. package/dist/core/version.js +1 -1
  230. package/dist/native/sks-menubar/Sources/AlertFactory.swift +11 -3
  231. package/dist/native/sks-menubar/Sources/AppDelegate.swift +9 -0
  232. package/dist/native/sks-menubar/Sources/ControlCenterWindowController.swift +25 -3
  233. package/dist/native/sks-menubar/Sources/ControlKit.swift +19 -8
  234. package/dist/native/sks-menubar/Sources/DiagnosticsViewController.swift +1 -2
  235. package/dist/native/sks-menubar/Sources/MCPServersViewController.swift +45 -17
  236. package/dist/native/sks-menubar/Sources/OverviewSummary.swift +162 -0
  237. package/dist/native/sks-menubar/Sources/OverviewViewController.swift +136 -190
  238. package/dist/native/sks-menubar/Sources/ProcessClient.swift +107 -11
  239. package/dist/native/sks-menubar/Sources/ProvidersMultiProvider.swift +5 -1
  240. package/dist/native/sks-menubar/Sources/ProvidersOpenRouter.swift +16 -4
  241. package/dist/native/sks-menubar/Sources/ProvidersRoleModels.swift +4 -1
  242. package/dist/native/sks-menubar/Sources/ProvidersRoutingTruth.swift +131 -0
  243. package/dist/native/sks-menubar/Sources/ProvidersViewController.swift +288 -341
  244. package/dist/native/sks-menubar/Sources/RemoteTelegramCenterState.swift +447 -0
  245. package/dist/native/sks-menubar/Sources/RemoteTelegramRendering.swift +484 -0
  246. package/dist/native/sks-menubar/Sources/RemoteTelegramViewController.swift +364 -115
  247. package/dist/native/sks-menubar/Sources/SettingsViewController.swift +73 -12
  248. package/dist/native/sks-menubar/Sources/SidebarItem.swift +3 -3
  249. package/dist/native/sks-menubar/Sources/StatusItemController.swift +13 -13
  250. package/dist/native/sks-menubar/Sources/TelegramHubSupervisor.swift +469 -0
  251. package/dist/native/sks-menubar/Sources/UpdatesViewController.swift +1 -6
  252. package/dist/native/sks-menubar/Tests/AppRuntimeTestSupport.swift +12 -0
  253. package/dist/native/sks-menubar/Tests/NativeTelegramRegressionRunner.swift +55 -0
  254. package/dist/native/sks-menubar/Tests/ProcessClientTests.swift +33 -0
  255. package/dist/native/sks-menubar/Tests/ProvidersViewControllerTests.swift +142 -0
  256. package/dist/native/sks-menubar/Tests/RemoteTelegramCenterStateTests.swift +56 -0
  257. package/dist/native/sks-menubar/Tests/TelegramHubSupervisorTests.swift +55 -0
  258. package/dist/scripts/codex-lb-catalog-passthrough-check.js +120 -0
  259. package/dist/scripts/codex-lb-desktop-auth-invariant-check.js +169 -0
  260. package/dist/scripts/codex-lb-desktop-bridge-check.js +394 -0
  261. package/dist/scripts/codex-lb-desktop-bridge-latency-check.js +196 -0
  262. package/dist/scripts/codex-lb-desktop-capabilities-check.js +287 -0
  263. package/dist/scripts/codex-lb-desktop-real-evidence-check.js +123 -0
  264. package/dist/scripts/codex-lb-fast-mode-truth-check.js +10 -3
  265. package/dist/scripts/codex-lb-fast-ui-preservation-check.js +81 -40
  266. package/dist/scripts/codex-lb-gpt56-fast-profile-check.js +99 -37
  267. package/dist/scripts/context-graph-check.js +191 -0
  268. package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +1 -1
  269. package/dist/scripts/gate-policy-audit-check.js +1 -1
  270. package/dist/scripts/helper-dedup-check.js +0 -2
  271. package/dist/scripts/installed-package-smoke-check.js +4 -1
  272. package/dist/scripts/latest-version-guidance-check.js +74 -0
  273. package/dist/scripts/release-metadata-check.js +21 -4
  274. package/dist/scripts/release-real-check.js +7 -0
  275. package/dist/scripts/ux-review-imagegen-blackbox-check.js +25 -1
  276. package/dist/scripts/ux-review-run-wires-imagegen-check.js +9 -1
  277. package/package.json +8 -3
  278. package/release-gates.v2.json +176 -1
  279. package/runtime-required-scripts.json +30 -0
  280. package/schemas/triwiki/context-graph.schema.json +119 -0
  281. package/dist/cli/install-helpers-codex-lb-selftest-chain.js +0 -112
  282. package/dist/cli/install-helpers-codex-lb-selftest.js +0 -481
  283. package/dist/core/triwiki/code-index-scanner.js +0 -309
@@ -1,46 +1,53 @@
1
1
  {
2
2
  "schema": "sks.skills-manifest.v1",
3
- "package_version": "7.3.0",
3
+ "package_version": "7.6.0",
4
4
  "skills": [
5
5
  {
6
6
  "canonical_name": "sks",
7
7
  "type": "official",
8
- "content_sha256": "cb2eee3490221e837005d327ccbe72baeb1dd27bccbe858a3a304b2247f3ced4",
8
+ "content_sha256": "3f041955756518bf178b26ffffb9c1a7686506fcefa1d11e19580e73724d1c04",
9
+ "hash_history": [],
10
+ "deprecated_aliases": []
11
+ },
12
+ {
13
+ "canonical_name": "sks-align",
14
+ "type": "core",
15
+ "content_sha256": "e85790ca1075efce194724e5656285ce03f2a751f53acf8ac847b155a0aa04d4",
9
16
  "hash_history": [],
10
17
  "deprecated_aliases": []
11
18
  },
12
19
  {
13
20
  "canonical_name": "sks-answer",
14
21
  "type": "official",
15
- "content_sha256": "f5d22cce006db0b3f98a49aee3513fef94efd791672692bf8f72c7474bbd96bf",
22
+ "content_sha256": "edf3d92e0006fd2ead58e6e06308483b22d4d8702dd4b00d7d7d73ffadabfe5e",
16
23
  "hash_history": [],
17
24
  "deprecated_aliases": []
18
25
  },
19
26
  {
20
27
  "canonical_name": "sks-autoresearch",
21
28
  "type": "official",
22
- "content_sha256": "a1fedbf9c54113d0ccb434d884a1af76f71ae3e25bfa68c7ff58afc91dab618a",
29
+ "content_sha256": "f9ea3d3a2eb3f4147ab5e60b690d3f65b0b265e607e8e98f02755c6ff6ed75db",
23
30
  "hash_history": [],
24
31
  "deprecated_aliases": []
25
32
  },
26
33
  {
27
34
  "canonical_name": "sks-autoresearch-loop",
28
35
  "type": "official",
29
- "content_sha256": "e02cf869ebaa6d1586abc0d1fa677c4f90ae726e91da38f548db6fcea18035f4",
36
+ "content_sha256": "a6a207fbed853367b66c67ca0a15b45a3bed7e3e9a80095ea141516babb6a39b",
30
37
  "hash_history": [],
31
38
  "deprecated_aliases": []
32
39
  },
33
40
  {
34
41
  "canonical_name": "sks-commit",
35
42
  "type": "official",
36
- "content_sha256": "79c8caad78c81d08d7dac063dca4b7e37f67c45cb62c7c2e3079079f5b0ac302",
43
+ "content_sha256": "aa7815af8b6c91cc6c8bd536403195bf54c41ea926d7d13e9664254798abbde9",
37
44
  "hash_history": [],
38
45
  "deprecated_aliases": []
39
46
  },
40
47
  {
41
48
  "canonical_name": "sks-commit-and-push",
42
49
  "type": "official",
43
- "content_sha256": "3cedab2172ef6adb2d0b35c7b4c7e5e6857bfddbf479e1ee77d19d18097ad621",
50
+ "content_sha256": "28dde91448ace2098912ad40b33e69028de86e344e03878b0b26e21b010e33a8",
44
51
  "hash_history": [],
45
52
  "deprecated_aliases": []
46
53
  },
@@ -54,56 +61,56 @@
54
61
  {
55
62
  "canonical_name": "sks-computer-use-fast",
56
63
  "type": "official",
57
- "content_sha256": "deb2f51c99442711717768a3f1b1808ac563059cb2b80300597354ad670207fe",
64
+ "content_sha256": "a35267c4613784b4f6b777e6e1b848138c9b13190b3f3c3757130cdbdf5998c5",
58
65
  "hash_history": [],
59
66
  "deprecated_aliases": []
60
67
  },
61
68
  {
62
69
  "canonical_name": "sks-context7-docs",
63
70
  "type": "official",
64
- "content_sha256": "5a46589337cffde58d11a0c50ce991469288d7b2c70b39d37601cfc23a66b70c",
71
+ "content_sha256": "cf26b66f3233cb09c66410874240badaff21b5e93f7b126e5c59f05a21e361b0",
65
72
  "hash_history": [],
66
73
  "deprecated_aliases": []
67
74
  },
68
75
  {
69
76
  "canonical_name": "sks-cu",
70
77
  "type": "official",
71
- "content_sha256": "33797b7346c642e034d41c71cbf0d440a420d6eb105e70525ddd0b09e2a3c130",
78
+ "content_sha256": "db25c3ab99af6540f2e892c4fa540099a9044f154d2f02c7dbc5d3bd95e4583c",
72
79
  "hash_history": [],
73
80
  "deprecated_aliases": []
74
81
  },
75
82
  {
76
83
  "canonical_name": "sks-db",
77
84
  "type": "official",
78
- "content_sha256": "46657bed1ab8a157fe25ca0d0e86b5238bb84ccf4736e304f58a5476d168509b",
85
+ "content_sha256": "bc3913aa20b9c3ced1736228ef1d888257d1fafcb0581d521e5bf541c0e1b110",
79
86
  "hash_history": [],
80
87
  "deprecated_aliases": []
81
88
  },
82
89
  {
83
90
  "canonical_name": "sks-db-safety-guard",
84
91
  "type": "official",
85
- "content_sha256": "0432a7c2a18cf3ecd3ffcfcb4af8b97946121bb3f4ca6395207a5d6fd8a62a07",
92
+ "content_sha256": "bcda64cbadb8d7ab8a266e074a7be10c2c04a8544af53026fc0839ab340672b4",
86
93
  "hash_history": [],
87
94
  "deprecated_aliases": []
88
95
  },
89
96
  {
90
97
  "canonical_name": "sks-design-artifact-expert",
91
98
  "type": "official",
92
- "content_sha256": "585111000f389a93901128030e521290eaa98e1c66fd107148c9e251c0f7c460",
99
+ "content_sha256": "8c65b66e4eb0e07453915b0318aac93d034fff38e1c08903f292c0a5874ba024",
93
100
  "hash_history": [],
94
101
  "deprecated_aliases": []
95
102
  },
96
103
  {
97
104
  "canonical_name": "sks-design-system-builder",
98
105
  "type": "official",
99
- "content_sha256": "77e167d83ec7ec3a682c25152d9f9fe9de1ae171c636030b96c22310407e09fe",
106
+ "content_sha256": "b50b8fe2d29db5374c5fefd61c5afa58e40f62c8ed32f82598de8b1d7871f068",
100
107
  "hash_history": [],
101
108
  "deprecated_aliases": []
102
109
  },
103
110
  {
104
111
  "canonical_name": "sks-design-ui-editor",
105
112
  "type": "official",
106
- "content_sha256": "146faf2de3cfd89faf0e029a43b918b99d5b4f525aba0bebb2358bfe5abd7bcd",
113
+ "content_sha256": "06c7222431f5bb49dd22c66534e046026cddbf6d3abfe3c1f11dbf07857a8bc9",
107
114
  "hash_history": [],
108
115
  "deprecated_aliases": []
109
116
  },
@@ -117,119 +124,119 @@
117
124
  {
118
125
  "canonical_name": "sks-fast-mode",
119
126
  "type": "official",
120
- "content_sha256": "7fe28096547a524182b93c9c66969bcd2a28cd13a2a03f7732261411e8d38bf6",
127
+ "content_sha256": "ffd2328037dcef488925245ee63f077141d08a402561d59450a2b6d081bda303",
121
128
  "hash_history": [],
122
129
  "deprecated_aliases": []
123
130
  },
124
131
  {
125
132
  "canonical_name": "sks-fast-off",
126
133
  "type": "official",
127
- "content_sha256": "485260fabc5cfd21957c26a5400e089d52f1edd082cbfbdc319ba32e0c429b57",
134
+ "content_sha256": "605ef5e425777cb4cd504e2d9f92349b307040a42d55d1c4db7eb3fa4edcd5f1",
128
135
  "hash_history": [],
129
136
  "deprecated_aliases": []
130
137
  },
131
138
  {
132
139
  "canonical_name": "sks-fast-on",
133
140
  "type": "official",
134
- "content_sha256": "6e48083e14fb0abc2d81c47d47535f181a3193abdbdabb2946ca64816e4ca94b",
141
+ "content_sha256": "3ffaee1647bd5a17eeb6e19df2a6213fb7c6b478d90ff220e1625b20a3efcab2",
135
142
  "hash_history": [],
136
143
  "deprecated_aliases": []
137
144
  },
138
145
  {
139
146
  "canonical_name": "sks-from-chat-img",
140
147
  "type": "official",
141
- "content_sha256": "c5bf3e69d9f721aca9f0014c454726667efb8a5537f173cf3527e6e081a9ff82",
148
+ "content_sha256": "089cede943f25b3844b09036808eb4daa13e63488b07624f8a12d8f52d02eba3",
142
149
  "hash_history": [],
143
150
  "deprecated_aliases": []
144
151
  },
145
152
  {
146
153
  "canonical_name": "sks-getdesign-reference",
147
154
  "type": "official",
148
- "content_sha256": "e3a8e93d846608b80488521200918ba3153be8efcd6d93fc8e6618995d914186",
155
+ "content_sha256": "9663fe48b361473f9bfb0fbb347df89374a47f9ab5e5fcd9075f2c321d8553e3",
149
156
  "hash_history": [],
150
157
  "deprecated_aliases": []
151
158
  },
152
159
  {
153
160
  "canonical_name": "sks-goal",
154
161
  "type": "official",
155
- "content_sha256": "e3b25621c29d1de2d42d5665eed8d2f7e47405c148ffffde9d2b3512c03efb76",
162
+ "content_sha256": "9a94700ad47341ff9d9359bbd7712643dc1d1f6815767be083bef7dae37af695",
156
163
  "hash_history": [],
157
164
  "deprecated_aliases": []
158
165
  },
159
166
  {
160
167
  "canonical_name": "sks-gx",
161
168
  "type": "official",
162
- "content_sha256": "2ef7c8cf533d4124982435db323421abb3487cfbd80683164929ad8bd45b06ea",
169
+ "content_sha256": "8707320038fba641625bf600f4d301eca2272d31f76678d1f2f83f93437fe5da",
163
170
  "hash_history": [],
164
171
  "deprecated_aliases": []
165
172
  },
166
173
  {
167
174
  "canonical_name": "sks-gx-visual-generate",
168
175
  "type": "official",
169
- "content_sha256": "a4479d6bf49b88c075d4511457b4fdf326acff25b023c5159eb75ee8e6dac4d7",
176
+ "content_sha256": "0cbea16c433631846e5b69057b217601af933614c21476af3b01bcafadb9860e",
170
177
  "hash_history": [],
171
178
  "deprecated_aliases": []
172
179
  },
173
180
  {
174
181
  "canonical_name": "sks-gx-visual-read",
175
182
  "type": "official",
176
- "content_sha256": "c2c633c901d9b0ba815b03a2ade546e20b20ac3b7043334439193a0c24c770de",
183
+ "content_sha256": "564b65afef98eb276ce17805cfe503c1335f2c348d2cef445a09191ea7ece12a",
177
184
  "hash_history": [],
178
185
  "deprecated_aliases": []
179
186
  },
180
187
  {
181
188
  "canonical_name": "sks-gx-visual-validate",
182
189
  "type": "official",
183
- "content_sha256": "fbe98cfdb70fd65b7d5e4c9ebab43973ede19080480c8854cf00e35a8cb7766d",
190
+ "content_sha256": "b44ddde4a4198364b8083f23045a2edcd92ace21eff4e1e422841e05906f9ac3",
184
191
  "hash_history": [],
185
192
  "deprecated_aliases": []
186
193
  },
187
194
  {
188
195
  "canonical_name": "sks-help",
189
196
  "type": "official",
190
- "content_sha256": "11ca737a77ecf9c88e015a5375bd2faff993ad94044612d7809b220c739e8cc6",
197
+ "content_sha256": "55a356d59d63b0fc85d8faf744c30be7f11fe465795c91a3f41e198e1f4bad9a",
191
198
  "hash_history": [],
192
199
  "deprecated_aliases": []
193
200
  },
194
201
  {
195
202
  "canonical_name": "sks-honest-mode",
196
203
  "type": "official",
197
- "content_sha256": "cde5af27a3a420585c6dc0c2e8b629d564336b334b483d57e17bb4da039ca3ba",
204
+ "content_sha256": "594eec8e8698d002932b83c45c43ae69e954fd3af115a1bfe70701016f619a27",
198
205
  "hash_history": [],
199
206
  "deprecated_aliases": []
200
207
  },
201
208
  {
202
209
  "canonical_name": "sks-hproof-claim-ledger",
203
210
  "type": "official",
204
- "content_sha256": "57ebddb3199eb0e633458a15a9be300b63fd236ba4e2d379c8724479de121cbe",
211
+ "content_sha256": "3d49d0272bb327ec4b43b8871c70fb9979ed67e2dd3e5fb50e2e6b50ef2695a8",
205
212
  "hash_history": [],
206
213
  "deprecated_aliases": []
207
214
  },
208
215
  {
209
216
  "canonical_name": "sks-hproof-evidence-bind",
210
217
  "type": "official",
211
- "content_sha256": "4d6707f9eeb53ffd5f81e6dbf183cbf962114eb0543474731575cd3c19192998",
218
+ "content_sha256": "216c45a2874ed0bd7712200c158764258ce9e81ab8e914f0776ae2cf4619dc14",
212
219
  "hash_history": [],
213
220
  "deprecated_aliases": []
214
221
  },
215
222
  {
216
223
  "canonical_name": "sks-image-ux-review",
217
224
  "type": "core",
218
- "content_sha256": "4df93b70fe2c361bec37e61968224a26374f7f7e235f8b9d34b9117f87bab203",
225
+ "content_sha256": "c280b1a6d99ceae473dca9c4ba74014e9a46e502239c300f0ae08424037cf8d1",
219
226
  "hash_history": [],
220
227
  "deprecated_aliases": []
221
228
  },
222
229
  {
223
230
  "canonical_name": "sks-imagegen",
224
231
  "type": "official",
225
- "content_sha256": "f113c43fd071156c6bad9845e709f39e1ab4b7b0855a9a5f4c8d22c037a73e95",
232
+ "content_sha256": "fb87ea6e665adbfdbae74b7a708221a3e9568867ec4e7b80efa634c23aa03971",
226
233
  "hash_history": [],
227
234
  "deprecated_aliases": []
228
235
  },
229
236
  {
230
237
  "canonical_name": "sks-imagegen-source-scout",
231
238
  "type": "official",
232
- "content_sha256": "1608c2aec5cf4a3f79ecdaa1f1694f7bbbb523e98a98736718f5031c90b6e9af",
239
+ "content_sha256": "9f42f56df8364ff52a7601e2d4de3e0666f2ff7c76046a17de9865c12fe97408",
233
240
  "hash_history": [],
234
241
  "deprecated_aliases": []
235
242
  },
@@ -250,49 +257,49 @@
250
257
  {
251
258
  "canonical_name": "sks-mad-sks",
252
259
  "type": "official",
253
- "content_sha256": "a6af07d14257f14a62b5fb7edcc5b28ce60295dabdf74e13e658a7a2d3bd2209",
260
+ "content_sha256": "e34596b5973e8fd1db635d254d40b22200c91afe6c0d9ee4556538e301fa6c05",
254
261
  "hash_history": [],
255
262
  "deprecated_aliases": []
256
263
  },
257
264
  {
258
265
  "canonical_name": "sks-naruto",
259
266
  "type": "core",
260
- "content_sha256": "079772f24dca40fa7d8a5e142f8b7dfea432714500dead2f6ce8a62c739e80a1",
267
+ "content_sha256": "5e47869a72c0850aa8203131f490e0902c779b60e00c57bcb4f69a1f051cc022",
261
268
  "hash_history": [],
262
269
  "deprecated_aliases": []
263
270
  },
264
271
  {
265
272
  "canonical_name": "sks-performance-evaluator",
266
273
  "type": "official",
267
- "content_sha256": "83a4f040b25f70a2eae9ef88b40650011b272aab72d96918013ae11c9fcda612",
274
+ "content_sha256": "d9de307443bfd04848fa742048a33166c368505822c48f78b6fe779b51c82d1d",
268
275
  "hash_history": [],
269
276
  "deprecated_aliases": []
270
277
  },
271
278
  {
272
279
  "canonical_name": "sks-pipeline-runner",
273
280
  "type": "official",
274
- "content_sha256": "8a9b1a6fbdc57f1234afe004e191430b87c0241b5c0db480c5151022f77f819b",
281
+ "content_sha256": "bbf8fc439a89eef049b9501cb0bab3e91eb0ef0d9f9947d7e33149970e201bb9",
275
282
  "hash_history": [],
276
283
  "deprecated_aliases": []
277
284
  },
278
285
  {
279
286
  "canonical_name": "sks-plan",
280
287
  "type": "official",
281
- "content_sha256": "28694024f69a3900ac05510eec5730d79b24526c86cdbf6bd6d4f93ab1e5baa0",
288
+ "content_sha256": "3273408e8ee0715e25180f5fbc6838b46755d565f8e9b6a8c531a056508f5345",
282
289
  "hash_history": [],
283
290
  "deprecated_aliases": []
284
291
  },
285
292
  {
286
293
  "canonical_name": "sks-ppt",
287
294
  "type": "official",
288
- "content_sha256": "12044bd4af884e9d0103072f4a4e69b7b6a36ff54c38fefb3dc3d1096740483b",
295
+ "content_sha256": "25542ac2e5ca816f66e18045ece70452b5050a57c6cb736152ce91e6e21add90",
289
296
  "hash_history": [],
290
297
  "deprecated_aliases": []
291
298
  },
292
299
  {
293
300
  "canonical_name": "sks-prompt-pipeline",
294
301
  "type": "official",
295
- "content_sha256": "e42bc048139db7e9cd47db73619868ad733011f6b5868d7515cb886d5fcede02",
302
+ "content_sha256": "e32592f2ab1b9f7249c38672740953d22d5bbc5f797c50bef63e3d8843b3b15b",
296
303
  "hash_history": [],
297
304
  "deprecated_aliases": []
298
305
  },
@@ -306,21 +313,21 @@
306
313
  {
307
314
  "canonical_name": "sks-reasoning-router",
308
315
  "type": "official",
309
- "content_sha256": "d7d926e4a45aa58e035b6d2393f25ba037345b2b8e7d943aac8a58f6a36e951d",
316
+ "content_sha256": "14a756f1aa2488b3dda8bebda71d084c47a75d3d71c1f3756fbfee073869dddc",
310
317
  "hash_history": [],
311
318
  "deprecated_aliases": []
312
319
  },
313
320
  {
314
321
  "canonical_name": "sks-reflection",
315
322
  "type": "official",
316
- "content_sha256": "294a123898e432988ca257c0a282c0c376375902ee317033b4d64bc083a67a8f",
323
+ "content_sha256": "56cdda60da4b83a6689b442c9fa0cdb37ba34db2e3491cad57da34dab1c851b3",
317
324
  "hash_history": [],
318
325
  "deprecated_aliases": []
319
326
  },
320
327
  {
321
328
  "canonical_name": "sks-release-review",
322
329
  "type": "official",
323
- "content_sha256": "f54be3b2ac517884c1fb421c9a13e2fa2815af2a35b2c5d1a6d4a8ab5b1cd809",
330
+ "content_sha256": "6024ca41bdc838faf71c6af0a758b24b1384c9152672eaad2984d8c0ce502d4b",
324
331
  "hash_history": [],
325
332
  "deprecated_aliases": []
326
333
  },
@@ -334,7 +341,7 @@
334
341
  {
335
342
  "canonical_name": "sks-review",
336
343
  "type": "official",
337
- "content_sha256": "a7d171582d9e45206d91699dfd6999081fa900b40f5335520b3fb4090ba564d3",
344
+ "content_sha256": "9496ca84473b2d3b4ef01e0fe98fb5e5ff1ac2cdd3af096618a2f327801d5d1f",
338
345
  "hash_history": [],
339
346
  "deprecated_aliases": []
340
347
  },
@@ -355,70 +362,49 @@
355
362
  {
356
363
  "canonical_name": "sks-solution-scout",
357
364
  "type": "official",
358
- "content_sha256": "fb7e937f18a8009af39e6ce9149aabf8f7a47fb2e682d0c7658d5f1c19d27d21",
365
+ "content_sha256": "716f4279002dfc60716cfd5de660508192304a5222b3e508ca899ed009a9499f",
359
366
  "hash_history": [],
360
367
  "deprecated_aliases": []
361
368
  },
362
369
  {
363
370
  "canonical_name": "sks-super-search",
364
371
  "type": "official",
365
- "content_sha256": "c4ef18cc7c032f40dc188f78ee00fc0c3a1a07599adb76b50378bebf84a9ef27",
372
+ "content_sha256": "c6c97ad7dbc5c968d0f8de96421f3fd1bbfcd388599d74cfe91b9317fe957000",
366
373
  "hash_history": [],
367
374
  "deprecated_aliases": []
368
375
  },
369
376
  {
370
377
  "canonical_name": "sks-turbo-context-pack",
371
378
  "type": "official",
372
- "content_sha256": "0e61cd389fce68a4921e6e86630b917d673acf68d4103b0a963980a9abd635bd",
373
- "hash_history": [],
374
- "deprecated_aliases": []
375
- },
376
- {
377
- "canonical_name": "sks-ui-ux-review",
378
- "type": "official",
379
- "content_sha256": "820f285e519c3897c5ca67685c3affdeede88baaf62e868f195fe3d04b2953b5",
380
- "hash_history": [],
381
- "deprecated_aliases": []
382
- },
383
- {
384
- "canonical_name": "sks-ux-review",
385
- "type": "official",
386
- "content_sha256": "a2d5caea2e887a67aff77f5f7abaf5ea19acbf49216e85c66b5a86932c1ad461",
387
- "hash_history": [],
388
- "deprecated_aliases": []
389
- },
390
- {
391
- "canonical_name": "sks-visual-review",
392
- "type": "official",
393
- "content_sha256": "8bffeabb27de6e6c29b648441e270b41a0596685c73908c7a684dce3da1ddbd2",
379
+ "content_sha256": "9c49d5f998dc13e8d544f1f28e61c145dc545c809b9991ea297807ec28473501",
394
380
  "hash_history": [],
395
381
  "deprecated_aliases": []
396
382
  },
397
383
  {
398
384
  "canonical_name": "sks-wiki",
399
385
  "type": "official",
400
- "content_sha256": "0e7e981496c90b95b3435fb286951b55d81b26fcfdb1115a4f50ea194dada411",
386
+ "content_sha256": "4abe9bda72341037bc74871c9ee8f9c9622a24e648c6e2548a315cada1b8a43d",
401
387
  "hash_history": [],
402
388
  "deprecated_aliases": []
403
389
  },
404
390
  {
405
391
  "canonical_name": "sks-with-local-llm-off",
406
392
  "type": "official",
407
- "content_sha256": "87e64de81d397b87d68bdec77b2da9cba21561daa001f2c3ab4005f743747118",
393
+ "content_sha256": "08af93a5084a3940ba149bfcef8bb87af96483053b5d10a9d8ae3cfa7b37310a",
408
394
  "hash_history": [],
409
395
  "deprecated_aliases": []
410
396
  },
411
397
  {
412
398
  "canonical_name": "sks-with-local-llm-on",
413
399
  "type": "official",
414
- "content_sha256": "9568a6c639aca8f6fc406a47c5249c70f47d50519c60b2477a3090c33258f2f9",
400
+ "content_sha256": "7717c1f67bf1e51de6c5c34b4d5ae9783399248f559282ad974b5232c3932766",
415
401
  "hash_history": [],
416
402
  "deprecated_aliases": []
417
403
  },
418
404
  {
419
405
  "canonical_name": "sks-work",
420
406
  "type": "official",
421
- "content_sha256": "adea3128d5fec72b9934c7d83c923416803403ad68298f1073ece9a3a220a474",
407
+ "content_sha256": "599bd2004c244b8a6cd7d422a0cab6d9c62f8ed1397abcd73603bd7ceac8e7e6",
422
408
  "hash_history": [],
423
409
  "deprecated_aliases": []
424
410
  }
@@ -0,0 +1,127 @@
1
+ import path from 'node:path';
2
+ import { nowIso, readJson, writeJsonAtomic } from '../fsx.js';
3
+ export const ALIGN_PLAN_ARTIFACT = 'align-plan.json';
4
+ export const ALIGN_LEDGER_ARTIFACT = 'align-ledger.json';
5
+ export const ALIGN_GATE_ARTIFACT = 'align-gate.json';
6
+ export const ALIGN_OFFICIAL_GUIDES = Object.freeze([
7
+ 'https://developers.openai.com/api/docs/guides/latest-model',
8
+ 'https://developers.openai.com/api/docs/guides/tools-programmatic-tool-calling',
9
+ 'https://developers.openai.com/api/docs/guides/agents',
10
+ 'https://github.com/openai/skills'
11
+ ]);
12
+ export const ALIGN_WORKSTREAMS = Object.freeze([
13
+ 'latest_model_prompt_grammar',
14
+ 'programmatic_tool_calling',
15
+ 'agents_guidance',
16
+ 'openai_skills_and_plugins',
17
+ 'latest_only_cleanup',
18
+ 'deduplicate_prompt_config'
19
+ ]);
20
+ export function buildAlignPlan(missionId, task) {
21
+ return {
22
+ schema: 'sks.align-plan.v1',
23
+ schema_version: 1,
24
+ generated_at: nowIso(),
25
+ mission_id: missionId,
26
+ task: String(task || '').trim() || 'Align SKS prompts, settings, and skills to the latest GPT-5.6 official guides',
27
+ official_guides: ALIGN_OFFICIAL_GUIDES,
28
+ workstreams: ALIGN_WORKSTREAMS,
29
+ policy: {
30
+ latest_only: true,
31
+ no_legacy_compat: true,
32
+ deduplicate: true,
33
+ immutable_core_skills_protected: true
34
+ },
35
+ next_actions: [
36
+ 'Fetch and apply the latest GPT-5.6 prompting / programmatic tool calling / agents guides',
37
+ 'Deep-analyze openai/skills and current Plugins guidance, then improve every SKS command/skill surface',
38
+ 'Keep latest-version only: delete unnecessary legacy settings and compatibility knobs',
39
+ 'Deduplicate redundant prompt and config content',
40
+ 'Protect immutable core skills (mutable_by_doctor/update/setup=false)',
41
+ 'Record align-ledger.json and pass align-gate.json, then finish with Honest Mode'
42
+ ]
43
+ };
44
+ }
45
+ export function buildAlignLedgerSeed(missionId) {
46
+ return {
47
+ schema: 'sks.align-ledger.v1',
48
+ schema_version: 1,
49
+ generated_at: nowIso(),
50
+ mission_id: missionId,
51
+ completed_workstreams: [],
52
+ changed_paths: [],
53
+ deleted_legacy_settings: [],
54
+ deduplicated_surfaces: [],
55
+ blockers: [],
56
+ notes: []
57
+ };
58
+ }
59
+ export function evaluateAlignGate(plan, ledger, missionId) {
60
+ const blockers = [];
61
+ const planPresent = Boolean(plan && plan.schema === 'sks.align-plan.v1');
62
+ const ledgerPresent = Boolean(ledger && ledger.schema === 'sks.align-ledger.v1');
63
+ if (!planPresent)
64
+ blockers.push('align_plan_missing');
65
+ if (!ledgerPresent)
66
+ blockers.push('align_ledger_missing');
67
+ const completed = new Set(ledger?.completed_workstreams || []);
68
+ const workstreamsComplete = ALIGN_WORKSTREAMS.every((item) => completed.has(item));
69
+ if (ledgerPresent && !workstreamsComplete)
70
+ blockers.push('align_workstreams_incomplete');
71
+ const latestOnly = plan?.policy?.latest_only === true;
72
+ const noLegacyCompat = plan?.policy?.no_legacy_compat === true;
73
+ if (!latestOnly)
74
+ blockers.push('latest_only_policy_missing');
75
+ if (!noLegacyCompat)
76
+ blockers.push('no_legacy_compat_policy_missing');
77
+ const dedupeRecorded = Boolean(ledgerPresent && Array.isArray(ledger?.deduplicated_surfaces));
78
+ if (ledgerPresent && !dedupeRecorded)
79
+ blockers.push('dedupe_surface_missing');
80
+ if (Array.isArray(ledger?.blockers) && ledger.blockers.length > 0) {
81
+ blockers.push(...ledger.blockers.map((item) => `ledger:${item}`));
82
+ }
83
+ const passed = blockers.length === 0;
84
+ return {
85
+ schema: 'sks.align-gate.v1',
86
+ schema_version: 1,
87
+ generated_at: nowIso(),
88
+ mission_id: missionId,
89
+ passed,
90
+ ok: passed,
91
+ status: passed ? 'pass' : 'blocked',
92
+ plan_present: planPresent,
93
+ ledger_present: ledgerPresent,
94
+ workstreams_complete: workstreamsComplete,
95
+ latest_only: latestOnly,
96
+ no_legacy_compat: noLegacyCompat,
97
+ dedupe_recorded: dedupeRecorded,
98
+ blockers
99
+ };
100
+ }
101
+ export async function writeAlignRouteArtifacts(dir, missionId, task) {
102
+ const plan = buildAlignPlan(missionId, task);
103
+ const ledger = buildAlignLedgerSeed(missionId);
104
+ const gate = evaluateAlignGate(plan, ledger, missionId);
105
+ await writeJsonAtomic(path.join(dir, ALIGN_PLAN_ARTIFACT), plan);
106
+ await writeJsonAtomic(path.join(dir, ALIGN_LEDGER_ARTIFACT), ledger);
107
+ await writeJsonAtomic(path.join(dir, ALIGN_GATE_ARTIFACT), gate);
108
+ return { plan, ledger, gate };
109
+ }
110
+ export async function readAlignGate(dir) {
111
+ return readJson(path.join(dir, ALIGN_GATE_ARTIFACT), null);
112
+ }
113
+ export async function refreshAlignGate(dir, missionId) {
114
+ const plan = await readJson(path.join(dir, ALIGN_PLAN_ARTIFACT), null);
115
+ const ledger = await readJson(path.join(dir, ALIGN_LEDGER_ARTIFACT), null);
116
+ const gate = evaluateAlignGate(plan, ledger, missionId);
117
+ await writeJsonAtomic(path.join(dir, ALIGN_GATE_ARTIFACT), gate);
118
+ return { plan, ledger, gate };
119
+ }
120
+ export function alignNextActionText(missionId) {
121
+ return [
122
+ `Execute the $sks-align modernization mission ${missionId}.`,
123
+ 'Read align-plan.json, fetch the official GPT-5.6 / programmatic tool calling / agents / openai/skills guides,',
124
+ 'update SKS prompts/settings/skills to latest-only grammar, delete legacy compat knobs, deduplicate redundant config,',
125
+ 'protect immutable core skills, update align-ledger.json, pass align-gate.json, then finish with Honest Mode.'
126
+ ].join(' ');
127
+ }
@@ -117,7 +117,7 @@ export async function repairCodexAppFastUi(root = process.cwd(), input = {}) {
117
117
  auth_mode: after.indicators.auth_mode,
118
118
  chat_surface: after.indicators.chat_surface,
119
119
  chatgpt_oauth_backup_available: after.indicators.chatgpt_oauth_backup_available,
120
- next_action: requiresConfirmation ? 'Run `sks doctor --fix --repair-codex-app-ui` after reviewing the repair plan.' : manual && safeAutoApply ? 'Run `sks doctor --fix` to apply the safe Codex App UI repair.' : manual ? 'Run `sks doctor --fix --repair-codex-app-ui` after reviewing the repair plan.' : chatgptOauthInactive ? 'Run `sks codex-lb use-oauth --restart-app` to restore the Codex App Chat/Pro surface. This explicit switch leaves saved codex-lb credentials available for later reuse.' : changed ? 'Restart Codex App if the selector was already hidden.' : 'No Codex App UI repair needed.',
120
+ next_action: requiresConfirmation ? 'Run `sks doctor --fix --repair-codex-app-ui` after reviewing the repair plan.' : manual && safeAutoApply ? 'Run `sks doctor --fix` to apply the safe Codex App UI repair.' : manual ? 'Run `sks doctor --fix --repair-codex-app-ui` after reviewing the repair plan.' : chatgptOauthInactive ? 'Run `sks codex-lb migrate-legacy-desktop --restart-app`; if no valid OAuth backup exists, run `codex login` first. Ordinary codex-lb routing commands never replace ChatGPT OAuth.' : changed ? 'Restart Codex App if the selector was already hidden.' : 'No Codex App UI repair needed.',
121
121
  blockers
122
122
  };
123
123
  if (input.reportPath)
@@ -195,10 +195,14 @@ function hasActiveCodexLbProviderSelection(text) {
195
195
  if (!/(?:^|\n)\s*model_provider\s*=\s*"codex-lb"\s*(?:#.*)?(?=\n|$)/.test(source))
196
196
  return false;
197
197
  const body = source.match(/(?:^|\n)\[model_providers\.codex-lb\]([^\n]*(?:\n(?!\s*\[)[^\n]*)*)/)?.[1] || '';
198
- return /(?:^|\n)\s*name\s*=\s*"openai"\s*(?:#.*)?(?=\n|$)/.test(body)
199
- && /(?:^|\n)\s*wire_api\s*=\s*"responses"\s*(?:#.*)?(?=\n|$)/.test(body)
200
- && /(?:^|\n)\s*env_key\s*=\s*"CODEX_LB_API_KEY"\s*(?:#.*)?(?=\n|$)/.test(body)
198
+ const providerIdentity = /(?:^|\n)\s*name\s*=\s*"(?:openai|codex-lb)"\s*(?:#.*)?(?=\n|$)/i.test(body);
199
+ const baseUrl = /(?:^|\n)\s*base_url\s*=\s*"https?:\/\/[^"]+"\s*(?:#.*)?(?=\n|$)/.test(body);
200
+ const responsesWire = /(?:^|\n)\s*wire_api\s*=\s*"responses"\s*(?:#.*)?(?=\n|$)/.test(body);
201
+ const cliProviderAuth = /(?:^|\n)\s*env_key\s*=\s*"CODEX_LB_API_KEY"\s*(?:#.*)?(?=\n|$)/.test(body)
202
+ && /(?:^|\n)\s*requires_openai_auth\s*=\s*false\s*(?:#.*)?(?=\n|$)/.test(body);
203
+ const desktopCompatAuth = /(?:^|\n)\s*env_http_headers\s*=\s*\{[^}\n]*"X-Codex-LB-API-Key"\s*=\s*"CODEX_LB_API_KEY"[^}\n]*\}\s*(?:#.*)?(?=\n|$)/.test(body)
201
204
  && /(?:^|\n)\s*requires_openai_auth\s*=\s*true\s*(?:#.*)?(?=\n|$)/.test(body);
205
+ return providerIdentity && baseUrl && responsesWire && (cliProviderAuth || desktopCompatAuth);
202
206
  }
203
207
  function stripMatchingLines(text, shouldRemove) {
204
208
  const lines = text.split(/\r?\n/);