sneakoscope 6.0.3 → 6.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/README.md +29 -12
  2. package/config/codex-releases/{rust-v0.142.0.json → rust-v0.144.1.json} +6 -6
  3. package/crates/sks-core/Cargo.lock +1 -1
  4. package/crates/sks-core/Cargo.toml +1 -1
  5. package/dist/bin/fast-inline.js +18 -14
  6. package/dist/bin/sks-dispatch.js +2 -4
  7. package/dist/cli/args.js +2 -0
  8. package/dist/cli/command-manifest-lite.js +2 -3
  9. package/dist/cli/command-registry.js +3 -4
  10. package/dist/cli/help-fast.js +1 -1
  11. package/dist/cli/install-helpers.js +348 -763
  12. package/dist/cli/install-tool-helpers.js +287 -0
  13. package/dist/cli/router.js +91 -6
  14. package/dist/commands/codex-lb.js +188 -53
  15. package/dist/commands/codex.js +44 -5
  16. package/dist/commands/doctor.js +302 -46
  17. package/dist/commands/tmux.js +5 -1
  18. package/dist/commands/versioning.js +7 -0
  19. package/dist/commands/zellij-monitor-pane.js +2 -0
  20. package/dist/commands/zellij-viewport-pane.js +3 -1
  21. package/dist/commands/zellij.js +1 -1
  22. package/dist/config/skills-manifest.json +59 -59
  23. package/dist/core/agent-bridge/agent-manifest.js +48 -0
  24. package/dist/core/agents/agent-central-ledger.js +9 -0
  25. package/dist/core/agents/agent-cleanup-executor.js +334 -41
  26. package/dist/core/agents/agent-cleanup.js +20 -1
  27. package/dist/core/agents/agent-command-surface.js +3 -1
  28. package/dist/core/agents/agent-effort-policy.js +30 -38
  29. package/dist/core/agents/agent-janitor.js +9 -10
  30. package/dist/core/agents/agent-namespace-safety.js +56 -0
  31. package/dist/core/agents/agent-orchestrator.js +25 -3
  32. package/dist/core/agents/agent-output-validator.js +1 -1
  33. package/dist/core/agents/agent-plan.js +100 -21
  34. package/dist/core/agents/agent-role-config.js +43 -49
  35. package/dist/core/agents/agent-runner-codex-exec.js +18 -3
  36. package/dist/core/agents/agent-runner-process.js +1 -0
  37. package/dist/core/agents/agent-schema.js +3 -2
  38. package/dist/core/agents/fast-mode-policy.js +3 -5
  39. package/dist/core/agents/native-cli-session-swarm.js +1 -1
  40. package/dist/core/agents/native-worker-backend-router.js +2 -1
  41. package/dist/core/agents/work-partition/repo-inventory.js +68 -7
  42. package/dist/core/agents/zellij-right-lane-cockpit.js +2 -2
  43. package/dist/core/code-structure.js +5 -4
  44. package/dist/core/codex/agent-config-file-repair.js +94 -193
  45. package/dist/core/codex/codex-cli-update.js +723 -0
  46. package/dist/core/codex/codex-config-guard.js +38 -11
  47. package/dist/core/codex/codex-project-config-policy.js +3 -6
  48. package/dist/core/codex/codex-startup-config-postcheck.js +52 -42
  49. package/dist/core/codex-adapter.js +35 -22
  50. package/dist/core/codex-app/codex-agent-role-sync.js +13 -54
  51. package/dist/core/codex-app/codex-app-fast-ui-repair.js +51 -20
  52. package/dist/core/codex-app/codex-app-launcher.js +48 -17
  53. package/dist/core/codex-app/codex-app-restart.js +23 -2
  54. package/dist/core/codex-app/codex-app-ui-state-snapshot.js +11 -3
  55. package/dist/core/codex-app/sks-menubar.js +136 -5
  56. package/dist/core/codex-app.js +35 -14
  57. package/dist/core/codex-compat/codex-hook-warning-detector.js +10 -1
  58. package/dist/core/codex-compat/codex-release-manifest.js +6 -6
  59. package/dist/core/codex-control/codex-0139-doctor-real-probe.js +7 -1
  60. package/dist/core/codex-control/codex-0139-image-path-real-probe.js +29 -12
  61. package/dist/core/codex-control/codex-0139-probe-runner.js +103 -28
  62. package/dist/core/codex-control/codex-0139-real-probe-summary.js +7 -3
  63. package/dist/core/codex-control/codex-0139-real-probes.js +21 -6
  64. package/dist/core/codex-control/codex-0139-sandbox-real-probe.js +39 -13
  65. package/dist/core/codex-control/codex-0139-web-search-probe.js +28 -14
  66. package/dist/core/codex-control/{codex-0142-capability.js → codex-0144-capability.js} +22 -22
  67. package/dist/core/codex-control/codex-0144-collab-agent-real-probe.js +63 -0
  68. package/dist/core/codex-control/codex-lb-launch-recovery.js +278 -0
  69. package/dist/core/codex-control/codex-multi-agent-event-normalizer.js +5 -1
  70. package/dist/core/codex-control/codex-reliability-shield.js +93 -30
  71. package/dist/core/codex-control/codex-sdk-adapter.js +96 -13
  72. package/dist/core/codex-control/codex-sdk-config-policy.js +2 -1
  73. package/dist/core/codex-control/codex-sdk-sandbox-policy.js +6 -3
  74. package/dist/core/codex-control/codex-task-runner.js +62 -9
  75. package/dist/core/codex-control/python-codex-sdk-adapter.js +30 -3
  76. package/dist/core/codex-exec-output-schema.js +35 -6
  77. package/dist/core/codex-lb/codex-lb-env.js +30 -1
  78. package/dist/core/codex-lb/codex-lb-tool-catalog.js +478 -0
  79. package/dist/core/codex-lb/codex-lb-tool-output-recovery.js +291 -0
  80. package/dist/core/codex-native/codex-native-feature-broker.js +31 -38
  81. package/dist/core/codex-native/codex-native-feature-matrix.js +2 -2
  82. package/dist/core/codex-native/codex-native-repair-transaction.js +1 -1
  83. package/dist/core/codex-native/core-skill-manifest.js +8 -4
  84. package/dist/core/codex-native/native-capability-postcheck.js +16 -8
  85. package/dist/core/codex-native/native-capability-repair-matrix.js +76 -27
  86. package/dist/core/codex-plugins/codex-plugin-json.js +67 -21
  87. package/dist/core/codex-plugins/codex-plugin-repair.js +118 -0
  88. package/dist/core/codex-runtime/codex-desktop-config-policy.js +305 -0
  89. package/dist/core/commands/agent-bridge-command.js +23 -2
  90. package/dist/core/commands/agent-command.js +38 -5
  91. package/dist/core/commands/basic-cli.js +77 -30
  92. package/dist/core/commands/command-utils.js +1 -1
  93. package/dist/core/commands/gc-command.js +27 -4
  94. package/dist/core/commands/image-ux-review-command.js +55 -24
  95. package/dist/core/commands/mad-sks-command.js +182 -137
  96. package/dist/core/commands/naruto-command.js +643 -1153
  97. package/dist/core/commands/pipeline-command.js +1 -0
  98. package/dist/core/commands/research-command.js +293 -231
  99. package/dist/core/commands/run-command.js +100 -23
  100. package/dist/core/commands/team-command.js +2 -3
  101. package/dist/core/commands/team-legacy-observe-command.js +94 -359
  102. package/dist/core/commands/wiki-command.js +179 -83
  103. package/dist/core/computer-use-live-evidence.js +166 -3
  104. package/dist/core/computer-use-status.js +5 -2
  105. package/dist/core/daemon/sksd-hook-daemon-entrypoint.js +2 -2
  106. package/dist/core/daemon/sksd-hook-daemon.js +171 -28
  107. package/dist/core/daemon/sksd-hook-dispatch.js +2 -2
  108. package/dist/core/db-safety.js +2 -2
  109. package/dist/core/decision-lattice.js +6 -6
  110. package/dist/core/dfix/verification-selector.js +6 -4
  111. package/dist/core/doctor/browser-use-repair.js +54 -13
  112. package/dist/core/doctor/codex-0139-doctor.js +3 -2
  113. package/dist/core/doctor/codex-startup-config-repair.js +8 -3
  114. package/dist/core/doctor/computer-use-repair.js +28 -39
  115. package/dist/core/doctor/doctor-codex-startup-repair.js +24 -149
  116. package/dist/core/doctor/doctor-context7-repair.js +1 -1
  117. package/dist/core/doctor/doctor-dirty-planner.js +1 -1
  118. package/dist/core/doctor/doctor-native-capability-repair.js +74 -3
  119. package/dist/core/doctor/imagegen-repair.js +47 -12
  120. package/dist/core/doctor/legacy-global-hook-cleanup.js +179 -0
  121. package/dist/core/feature-fixture-executor.js +71 -7
  122. package/dist/core/feature-fixture-runner.js +53 -12
  123. package/dist/core/feature-fixtures.js +47 -14
  124. package/dist/core/feature-registry.js +53 -58
  125. package/dist/core/fsx.js +54 -6
  126. package/dist/core/harness-conflicts.js +19 -10
  127. package/dist/core/hooks-runtime/code-pack-freshness-preflight.js +5 -4
  128. package/dist/core/hooks-runtime/hook-invocation-dedupe.js +147 -0
  129. package/dist/core/hooks-runtime/hook-io.js +14 -4
  130. package/dist/core/hooks-runtime/light-turn.js +70 -0
  131. package/dist/core/hooks-runtime/payload-signals.js +270 -0
  132. package/dist/core/hooks-runtime/team-digest.js +0 -1
  133. package/dist/core/hooks-runtime/tool-output-quarantine.js +93 -0
  134. package/dist/core/hooks-runtime.js +418 -250
  135. package/dist/core/image/image-artifact-path-contract.js +8 -6
  136. package/dist/core/image/image-artifact-registry.js +5 -1
  137. package/dist/core/image-ux-review/imagegen-adapter.js +5 -2
  138. package/dist/core/imagegen/imagegen-capability.js +10 -13
  139. package/dist/core/imagegen/require-imagegen.js +37 -11
  140. package/dist/core/init/skills.js +16 -30
  141. package/dist/core/init.js +144 -36
  142. package/dist/core/managed-assets/managed-assets-manifest.js +417 -14
  143. package/dist/core/mission.js +24 -1
  144. package/dist/core/naruto/naruto-work-graph.js +70 -4
  145. package/dist/core/ops/reporting.js +3 -0
  146. package/dist/core/pipeline-internals/runtime-core.js +578 -180
  147. package/dist/core/pipeline-internals/runtime-gates.js +191 -49
  148. package/dist/core/ppt/style-tokens.js +1 -1
  149. package/dist/core/ppt-review/index.js +1 -1
  150. package/dist/core/ppt-review/slide-exporter.js +23 -17
  151. package/dist/core/ppt-review/slide-imagegen-review.js +1 -1
  152. package/dist/core/ppt-review/slide-issue-extraction.js +4 -2
  153. package/dist/core/preflight/parallel-preflight-engine.js +50 -1
  154. package/dist/core/product-design-plugin.js +2 -2
  155. package/dist/core/proof/route-finalizer.js +1 -1
  156. package/dist/core/proof/route-proof-gate.js +7 -2
  157. package/dist/core/proof-field.js +3 -3
  158. package/dist/core/provider/model-router.js +38 -32
  159. package/dist/core/recallpulse/policy.js +12 -28
  160. package/dist/core/recallpulse.js +11 -6
  161. package/dist/core/release/gate-manifest.js +18 -12
  162. package/dist/core/release/gate-pack-manifest.js +1 -1
  163. package/dist/core/release/npm-pack-proof.js +247 -0
  164. package/dist/core/release/package-dist-snapshot.js +151 -0
  165. package/dist/core/release/package-size-budget.js +5 -0
  166. package/dist/core/release/release-authorization-snapshot.js +115 -0
  167. package/dist/core/release/release-gate-affected-selector.js +15 -3
  168. package/dist/core/release/release-gate-cache-v2.js +30 -0
  169. package/dist/core/release/release-gate-contract.js +161 -0
  170. package/dist/core/release/release-gate-dag.js +44 -3
  171. package/dist/core/release/release-gate-hermetic-env.js +28 -17
  172. package/dist/core/release/release-real-contract.js +496 -0
  173. package/dist/core/release-parallel-full-coverage.js +31 -143
  174. package/dist/core/research/claim-evidence-matrix.js +41 -6
  175. package/dist/core/research/experiment-plan.js +14 -10
  176. package/dist/core/research/falsification.js +9 -2
  177. package/dist/core/research/implementation-blueprint-densifier.js +82 -60
  178. package/dist/core/research/implementation-blueprint.js +32 -26
  179. package/dist/core/research/mock-result.js +122 -11
  180. package/dist/core/research/replication-pack.js +15 -8
  181. package/dist/core/research/research-adversarial-review.js +1068 -0
  182. package/dist/core/research/research-claim-builder.js +69 -17
  183. package/dist/core/research/research-claim-synthesizer.js +343 -0
  184. package/dist/core/research/research-cycle-runner.js +53 -3
  185. package/dist/core/research/research-falsification-runner.js +176 -0
  186. package/dist/core/research/research-final-reviewer.js +44 -125
  187. package/dist/core/research/research-realistic-report.js +14 -6
  188. package/dist/core/research/research-review-artifact-digest.js +66 -0
  189. package/dist/core/research/research-source-evidence.js +144 -0
  190. package/dist/core/research/research-source-layer-catalog.js +68 -0
  191. package/dist/core/research/research-source-ledger-merge.js +250 -12
  192. package/dist/core/research/research-source-shards.js +26 -70
  193. package/dist/core/research/research-stage-runner.js +237 -247
  194. package/dist/core/research/research-super-search.js +184 -0
  195. package/dist/core/research/research-synthesis-prompt.js +20 -1
  196. package/dist/core/research/research-synthesis-writer.js +86 -5
  197. package/dist/core/research/research-work-graph.js +25 -18
  198. package/dist/core/research/source-quality-report.js +21 -0
  199. package/dist/core/research.js +429 -280
  200. package/dist/core/retention/retention-budget.js +25 -6
  201. package/dist/core/retention.js +980 -101
  202. package/dist/core/routes/constants.js +1 -1
  203. package/dist/core/routes/dollar-manifest-lite.js +11 -11
  204. package/dist/core/routes/evidence.js +4 -4
  205. package/dist/core/routes/ppt-policy.js +1 -1
  206. package/dist/core/routes.js +92 -64
  207. package/dist/core/runtime/task-profile.js +66 -0
  208. package/dist/core/runtime/verification-budget.js +12 -0
  209. package/dist/core/secret-redaction.js +4 -0
  210. package/dist/core/security/high-risk-contracts.js +6 -6
  211. package/dist/core/stop-gate/stop-gate-check.js +49 -12
  212. package/dist/core/subagents/agent-catalog.js +215 -0
  213. package/dist/core/subagents/model-policy.js +118 -0
  214. package/dist/core/subagents/naruto-help-contract.js +40 -0
  215. package/dist/core/subagents/official-subagent-config.js +488 -0
  216. package/dist/core/subagents/official-subagent-preparation.js +251 -0
  217. package/dist/core/subagents/official-subagent-prompt.js +137 -0
  218. package/dist/core/subagents/official-subagent-runner.js +129 -0
  219. package/dist/core/subagents/subagent-evidence.js +663 -0
  220. package/dist/core/subagents/terminology.js +16 -0
  221. package/dist/core/subagents/thread-budget.js +21 -0
  222. package/dist/core/subagents/triwiki-attention.js +65 -0
  223. package/dist/core/super-search/runtime-helpers.js +173 -19
  224. package/dist/core/super-search/runtime.js +140 -15
  225. package/dist/core/super-search/source-records.js +49 -8
  226. package/dist/core/team-review-policy.js +15 -0
  227. package/dist/core/triwiki/code-pack.js +8 -2
  228. package/dist/core/triwiki/triwiki-cache-key.js +108 -29
  229. package/dist/core/triwiki/triwiki-module-card.js +1 -1
  230. package/dist/core/triwiki-attention.js +13 -6
  231. package/dist/core/triwiki-provenance.js +274 -0
  232. package/dist/core/triwiki-runtime.js +21 -7
  233. package/dist/core/triwiki-wrongness/wrongness-ledger.js +187 -61
  234. package/dist/core/triwiki-wrongness/wrongness-retrieval.js +11 -2
  235. package/dist/core/triwiki-wrongness/wrongness-trust-policy.js +2 -0
  236. package/dist/core/update-check.js +23 -15
  237. package/dist/core/version-manager.js +51 -1
  238. package/dist/core/version.js +1 -1
  239. package/dist/core/wiki-coordinate.js +128 -12
  240. package/dist/core/work-order-ledger.js +208 -10
  241. package/dist/core/zellij/zellij-command.js +12 -1
  242. package/dist/core/zellij/zellij-dashboard-pane.js +3 -3
  243. package/dist/core/zellij/zellij-fake-adapter.js +3 -1
  244. package/dist/core/zellij/zellij-launcher.js +51 -21
  245. package/dist/core/zellij/zellij-layout-builder.js +14 -5
  246. package/dist/core/zellij/zellij-official-subagent-activity.js +477 -0
  247. package/dist/core/zellij/zellij-official-subagent-telemetry.js +264 -0
  248. package/dist/core/zellij/zellij-pane-proof.js +32 -6
  249. package/dist/core/zellij/zellij-slot-pane-renderer.js +17 -5
  250. package/dist/core/zellij/zellij-slot-telemetry.js +15 -3
  251. package/dist/core/zellij/zellij-ui-mode.js +1 -1
  252. package/dist/core/zellij/zellij-viewport-binder.js +3 -0
  253. package/dist/core/zellij/zellij-worker-pane-manager.js +5 -3
  254. package/dist/scripts/agent-fast-mode-default-check.js +48 -29
  255. package/dist/scripts/agent-role-config-repair-check.js +34 -15
  256. package/dist/scripts/agent-wiki-context-proof-check.js +16 -2
  257. package/dist/scripts/all-feature-deep-completion-check.js +14 -4
  258. package/dist/scripts/architecture-guard-check.js +8 -1
  259. package/dist/scripts/build-dist.js +17 -5
  260. package/dist/scripts/canonical-test-runner.js +188 -0
  261. package/dist/scripts/check-command-module-budget.js +38 -16
  262. package/dist/scripts/check-legacy-free.js +1 -1
  263. package/dist/scripts/check-route-modularity.js +0 -1
  264. package/dist/scripts/check-ts-contracts.js +1 -1
  265. package/dist/scripts/codex-0139-interrupt-agent-check.js +5 -1
  266. package/dist/scripts/{codex-0142-app-server-v2-check.js → codex-0144-app-server-v2-check.js} +11 -10
  267. package/dist/scripts/{codex-0142-binary-identity-check.js → codex-0144-binary-identity-check.js} +4 -4
  268. package/dist/scripts/codex-0144-capability-check.js +21 -0
  269. package/dist/scripts/{codex-0139-real-probes-check.js → codex-0144-core-real-probes-check.js} +19 -5
  270. package/dist/scripts/{codex-0142-doctor-wiring-check.js → codex-0144-doctor-wiring-check.js} +6 -6
  271. package/dist/scripts/{codex-0142-manifest-check.js → codex-0144-manifest-check.js} +11 -3
  272. package/dist/scripts/{codex-0142-policy-check.js → codex-0144-policy-check.js} +2 -2
  273. package/dist/scripts/{codex-0142-thread-store-check.js → codex-0144-thread-store-check.js} +3 -3
  274. package/dist/scripts/codex-app-provider-model-ui-check.js +53 -19
  275. package/dist/scripts/codex-app-ui-preservation-check.js +35 -4
  276. package/dist/scripts/codex-control-all-pipelines-check.js +7 -3
  277. package/dist/scripts/codex-control-side-effect-scope-check.js +2 -2
  278. package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +27 -0
  279. package/dist/scripts/codex-effort-auto-discovery-check.js +1 -1
  280. package/dist/scripts/codex-lb-fast-mode-truth-check.js +1 -0
  281. package/dist/scripts/{codex-lb-gpt55-fast-profile-check.js → codex-lb-gpt56-fast-profile-check.js} +56 -5
  282. package/dist/scripts/codex-model-metadata-check.js +1 -1
  283. package/dist/scripts/codex-native-agent-role-content-check.js +15 -7
  284. package/dist/scripts/codex-native-repair-transaction-check.js +3 -1
  285. package/dist/scripts/codex-sdk-all-pipelines-check.js +7 -4
  286. package/dist/scripts/codex-sdk-research-pipeline-check.js +30 -8
  287. package/dist/scripts/codex-sdk-sandbox-policy-check.js +5 -1
  288. package/dist/scripts/codex-sdk-version-compat-check.js +2 -1
  289. package/dist/scripts/db-route-materialization-check.js +33 -0
  290. package/dist/scripts/dfix-fixture-check.js +1 -1
  291. package/dist/scripts/docs-truthfulness-check.js +4 -2
  292. package/dist/scripts/doctor-codex-startup-repair-check.js +47 -25
  293. package/dist/scripts/doctor-context7-repair-check.js +2 -1
  294. package/dist/scripts/doctor-fix-production-blackbox.js +12 -2
  295. package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +34 -7
  296. package/dist/scripts/doctor-imagegen-repair-check.js +14 -4
  297. package/dist/scripts/doctor-startup-config-repair-blackbox.js +9 -3
  298. package/dist/scripts/doctor-startup-config-repair-check.js +13 -3
  299. package/dist/scripts/install-update-preserves-config-check.js +7 -2
  300. package/dist/scripts/legacy-gate-inventory-check.js +7 -5
  301. package/dist/scripts/legacy-strong-inventory-check.js +7 -5
  302. package/dist/scripts/legacy-upgrade-matrix-check.js +4 -4
  303. package/dist/scripts/lib/native-cli-session-swarm-check-lib.js +173 -13
  304. package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +165 -6
  305. package/dist/scripts/managed-role-manifest-parity-check.js +5 -4
  306. package/dist/scripts/mutation-callsite-coverage-check.js +0 -11
  307. package/dist/scripts/naruto-codex-e2e-check.js +14 -7
  308. package/dist/scripts/naruto-shadow-clone-swarm-check.js +4 -201
  309. package/dist/scripts/npm-publish-performance-check.js +20 -12
  310. package/dist/scripts/official-subagent-workflow-check.js +145 -0
  311. package/dist/scripts/package-published-contract-check.js +6 -20
  312. package/dist/scripts/packlist-performance-check.js +17 -3
  313. package/dist/scripts/parallel-verification-engine-check.js +2 -2
  314. package/dist/scripts/postinstall-safe-side-effects-check.js +8 -3
  315. package/dist/scripts/ppt-no-mock-as-real-check.js +3 -1
  316. package/dist/scripts/prepublish-release-check-or-fast.js +23 -86
  317. package/dist/scripts/product-design-plugin-routing-check.js +1 -1
  318. package/dist/scripts/release-affected-selector-check.js +74 -1
  319. package/dist/scripts/release-check-stamp.js +324 -239
  320. package/dist/scripts/release-dag-full-coverage-check.js +7 -15
  321. package/dist/scripts/release-dynamic-presets-check.js +10 -1
  322. package/dist/scripts/release-gate-dag-runner-check.js +3 -3
  323. package/dist/scripts/release-gate-dag-runner.js +35 -11
  324. package/dist/scripts/release-gate-existence-audit.js +1 -2
  325. package/dist/scripts/release-gate-script-parity-check.js +1 -1
  326. package/dist/scripts/release-parallel-full-coverage-check.js +12 -6
  327. package/dist/scripts/release-parallel-speed-budget-check.js +18 -2
  328. package/dist/scripts/release-real-check.js +390 -157
  329. package/dist/scripts/release-registry-check.js +61 -16
  330. package/dist/scripts/release-runtime-truth-matrix-check.js +22 -0
  331. package/dist/scripts/research-blueprint-densifier-check.js +2 -2
  332. package/dist/scripts/research-real-cycle-no-legacy-final-md-check.js +11 -7
  333. package/dist/scripts/route-proof-artifact-structure-check.js +1 -0
  334. package/dist/scripts/search-visibility-gate-lib.js +1 -1
  335. package/dist/scripts/seo-geo-route-identity-check.js +30 -4
  336. package/dist/scripts/sizecheck.js +4 -4
  337. package/dist/scripts/sks-1-11-gate-lib.js +53 -6
  338. package/dist/scripts/sks-3-1-4-directive-check-lib.js +8 -2
  339. package/dist/scripts/sks-3-1-5-directive-check-lib.js +3 -2
  340. package/dist/scripts/sks-3-1-6-directive-check-lib.js +5 -3
  341. package/dist/scripts/sks-menubar-install-check.js +8 -0
  342. package/dist/scripts/sks-uninstall-regression-check.js +1 -1
  343. package/dist/scripts/sksd-daemon-check.js +16 -6
  344. package/dist/scripts/trust-fixture-check.js +32 -10
  345. package/dist/scripts/write-build-manifest.js +2 -1
  346. package/dist/scripts/wrongness-fixture-check.js +1 -1
  347. package/dist/scripts/zellij-layout-valid-check.js +36 -11
  348. package/dist/scripts/zellij-pane-proof-check.js +33 -2
  349. package/dist/scripts/zellij-real-session-cleanup-check.js +122 -2
  350. package/dist/scripts/zellij-real-session-launch-check.js +76 -5
  351. package/dist/scripts/zellij-slot-pane-renderer-check.js +4 -4
  352. package/dist/scripts/zellij-spawn-on-demand-layout-check.js +3 -3
  353. package/docs/demo.tape +1 -1
  354. package/infra-harness-gates.json +1486 -0
  355. package/package.json +32 -19
  356. package/release-gates.v2.json +4060 -0
  357. package/runtime-required-scripts.json +9 -0
  358. package/schemas/codex/{app-server-0.142 → app-server-0.144}/codex_app_server_protocol.v2.schemas.json +1146 -781
  359. package/schemas/codex/codex-0139-real-probe-result.schema.json +39 -5
  360. package/schemas/codex/ppt-slide-issue-ledger.schema.json +2 -1
  361. package/dist/commands/db.js +0 -6
  362. package/dist/core/codex-control/codex-0139-multi-agent-real-probe.js +0 -107
  363. package/dist/core/commands/db-command.js +0 -146
  364. package/dist/core/research/prompt.js +0 -15
  365. package/dist/scripts/agent-native-release-gate.js +0 -274
  366. package/dist/scripts/codex-0142-capability-check.js +0 -21
  367. package/dist/scripts/codex-control-tool-call-sequence-repair-check.js +0 -14
  368. package/dist/scripts/command-performance-scorecard-check.js +0 -204
  369. package/dist/scripts/config-managed-merge-callsite-coverage-check.js +0 -212
  370. package/dist/scripts/dollar-performance-scorecard-check.js +0 -257
  371. package/dist/scripts/gate-timing-check.js +0 -16
  372. package/dist/scripts/ops-maturity-scorecard-check.js +0 -12
  373. package/dist/scripts/performance-baseline-check.js +0 -12
  374. package/dist/scripts/performance-improvement-report-check.js +0 -58
  375. package/dist/scripts/release-parallel-check.js +0 -389
  376. package/dist/scripts/release-runner-efficiency-check.js +0 -15
  377. package/dist/scripts/retention-long-run-smoke-check.js +0 -299
  378. package/docs/assets/sneakoscope-architecture-pipeline.jpg +0 -0
@@ -7,7 +7,9 @@ import { printJson } from '../cli/output.js';
7
7
  import { codexLbMetrics, readCodexLbCircuit, recordCodexLbHealthEvent, resetCodexLbCircuit, codexLbProofEvidence } from '../core/codex-lb-circuit.js';
8
8
  import { checkCodexLbResponseChain, codexLbStatus, configureCodexLb, formatCodexLbStatusText, releaseCodexLbAuthHold, repairCodexLbAuth, unselectCodexLbProvider } from '../cli/install-helpers.js';
9
9
  import { buildCodexLbSetupPlan, codexLbPersistenceSummary, renderCodexLbSetupPlan } from '../core/codex-lb/codex-lb-setup.js';
10
+ import { CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_FLAG, codexLbToolOutputRecoveryOverrideAcknowledged } from '../core/codex-lb/codex-lb-tool-output-recovery.js';
10
11
  import { restartCodexApp } from '../core/codex-app/codex-app-restart.js';
12
+ import { repairCodexAppFastUi } from '../core/codex-app/codex-app-fast-ui-repair.js';
11
13
  export async function run(command, args = []) {
12
14
  const root = await projectRoot();
13
15
  const action = args[0] || 'status';
@@ -21,15 +23,19 @@ export async function run(command, args = []) {
21
23
  return;
22
24
  }
23
25
  if (action === 'status' || action === 'check') {
24
- const result = await codexLbStatus();
26
+ const allowUnverifiedToolOutputRecovery = codexLbToolOutputRecoveryOverrideAcknowledged({ args });
27
+ const result = await codexLbStatus({ probeToolOutputRecovery: true, allowUnverifiedToolOutputRecovery });
25
28
  const shaped = shapeCodexLbStatus(result);
29
+ if (result.selected && result.tool_output_recovery?.ok !== true)
30
+ process.exitCode = 1;
26
31
  if (flag(args, '--json'))
27
32
  return printJson(shaped);
28
33
  process.stdout.write(formatCodexLbStatusText(result));
29
34
  return;
30
35
  }
31
36
  if (action === 'doctor') {
32
- const status = shapeCodexLbStatus(await codexLbStatus());
37
+ const allowUnverifiedToolOutputRecovery = codexLbToolOutputRecoveryOverrideAcknowledged({ args });
38
+ const status = shapeCodexLbStatus(await codexLbStatus({ probeToolOutputRecovery: true, allowUnverifiedToolOutputRecovery }));
33
39
  const metrics = codexLbMetrics(await readCodexLbCircuit(root));
34
40
  const result = { schema: 'sks.codex-lb-doctor.v1', ok: Boolean(status.ok && metrics.ok), deep: flag(args, '--deep'), status, metrics };
35
41
  if (flag(args, '--json'))
@@ -40,9 +46,14 @@ export async function run(command, args = []) {
40
46
  return;
41
47
  }
42
48
  if (action === 'health' || action === 'verify-chain' || action === 'chain') {
43
- const status = await codexLbStatus();
49
+ const allowUnverifiedToolOutputRecovery = codexLbToolOutputRecoveryOverrideAcknowledged({ args });
50
+ const status = await codexLbStatus({ probeToolOutputRecovery: true, allowUnverifiedToolOutputRecovery });
44
51
  const blocker = !status.env_key_configured ? 'missing_env_key' : !status.base_url ? 'missing_base_url' : 'not_configured';
45
- const result = status.ok ? await checkCodexLbResponseChain(status, { force: true, root, fastMode: flag(args, '--fast') || flag(args, '--priority') }) : { ok: false, status: blocker, codex_lb: status };
52
+ const result = status.selected && status.tool_output_recovery?.ok !== true
53
+ ? { ok: false, status: 'tool_output_recovery_blocked', codex_lb: status, tool_output_recovery: status.tool_output_recovery }
54
+ : status.ok
55
+ ? await checkCodexLbResponseChain(status, { force: true, root, fastMode: flag(args, '--fast') || flag(args, '--priority') })
56
+ : { ok: false, status: blocker, codex_lb: status };
46
57
  if (flag(args, '--json'))
47
58
  return printJson(result);
48
59
  console.log(`codex-lb response chain: ${result.ok ? 'ok' : `failed (${result.status})`}`);
@@ -51,37 +62,48 @@ export async function run(command, args = []) {
51
62
  return;
52
63
  }
53
64
  if (action === 'fast-check' || action === 'fast' || action === 'verify-fast') {
54
- const status = await codexLbStatus();
65
+ const allowUnverifiedToolOutputRecovery = codexLbToolOutputRecoveryOverrideAcknowledged({ args });
66
+ const status = await codexLbStatus({ probeToolOutputRecovery: true, allowUnverifiedToolOutputRecovery });
55
67
  const blocker = !status.env_key_configured ? 'missing_env_key' : !status.base_url ? 'missing_base_url' : !status.provider_contract_ok ? 'provider_contract_drift' : 'not_configured';
56
- const chain = status.env_key_configured && status.base_url
57
- ? await checkCodexLbResponseChain(status, { force: true, cache: false, root, fastMode: true })
58
- : { ok: false, status: blocker, codex_lb: status };
68
+ const modelSelection = await resolveCodexLbFastCheckModel(status);
69
+ const chain = status.selected && status.tool_output_recovery?.ok !== true
70
+ ? { ok: false, status: 'tool_output_recovery_blocked', codex_lb: status, tool_output_recovery: status.tool_output_recovery }
71
+ : status.env_key_configured && status.base_url && modelSelection.model
72
+ ? await checkCodexLbResponseChain(status, { force: true, cache: false, root, fastMode: true, model: modelSelection.model })
73
+ : { ok: false, status: modelSelection.model ? blocker : 'model_unselected', codex_lb: status };
59
74
  const evidence = await fastEvidenceFromChain(chain, readOption(args, '--request-log', readOption(args, '--request-log-json', null)));
60
75
  const providerReady = status.provider_contract_ok === true;
76
+ const chainVerified = isCodexLbFastChainVerified(chain);
61
77
  const result = {
62
78
  schema: 'sks.codex-lb-fast-check.v1',
63
- ok: Boolean(providerReady && chain.ok && evidence.fast_requested && evidence.fast_actual),
79
+ ok: Boolean(providerReady && chainVerified && evidence.fast_requested && evidence.fast_actual),
64
80
  status: !providerReady
65
81
  ? 'provider_contract_drift'
66
- : chain.ok
67
- ? evidence.fast_actual
68
- ? 'fast_verified'
69
- : evidence.fast_requested
70
- ? 'fast_requested_but_actual_unverified'
71
- : 'fast_not_requested'
72
- : chain.status,
82
+ : chain.skipped === true
83
+ ? 'fast_check_chain_skipped'
84
+ : chainVerified
85
+ ? evidence.fast_actual
86
+ ? 'fast_verified'
87
+ : evidence.fast_requested
88
+ ? 'fast_requested_but_actual_unverified'
89
+ : 'fast_not_requested'
90
+ : chain.status,
73
91
  codex_lb: status,
92
+ model_selection: modelSelection,
74
93
  chain,
75
94
  evidence,
76
95
  degraded_models: Array.isArray(chain.degraded_models) ? chain.degraded_models : [],
77
96
  quota_low: Boolean(chain.quota_low),
78
97
  blockers: [
79
98
  ...(providerReady ? [] : ['codex_lb_provider_contract_drift']),
80
- ...(chain.ok
81
- ? evidence.fast_actual
82
- ? []
83
- : ['codex_lb_actual_fast_service_tier_unverified']
84
- : [chain.status || blocker])
99
+ ...modelSelection.blockers,
100
+ ...(chain.skipped === true
101
+ ? ['codex_lb_fast_check_chain_skipped']
102
+ : chainVerified
103
+ ? evidence.fast_actual
104
+ ? []
105
+ : [evidence.fast_requested ? 'codex_lb_actual_fast_service_tier_unverified' : 'codex_lb_fast_service_tier_not_requested']
106
+ : [chain.status || blocker])
85
107
  ]
86
108
  };
87
109
  if (flag(args, '--json'))
@@ -94,12 +116,16 @@ export async function run(command, args = []) {
94
116
  return;
95
117
  }
96
118
  if (action === 'repair' || action === 'resync' || action === 'login') {
97
- const result = await repairCodexLbAuth();
98
- if (flag(args, '--json'))
99
- return printJson(result);
100
- console.log(`codex-lb repair: ${result.ok ? 'ok' : result.status}`);
101
- if (!result.ok)
119
+ const result = await repairCodexLbAuth({
120
+ allowUnverifiedToolOutputRecovery: codexLbToolOutputRecoveryOverrideAcknowledged({ args })
121
+ });
122
+ const fastUi = await repairCodexAppFastUiAfterMutation(root, Boolean(result.ok));
123
+ const shaped = { ...result, ok: Boolean(result.ok && fastUi.ok), codex_app_fast_ui: fastUi };
124
+ if (!shaped.ok)
102
125
  process.exitCode = 1;
126
+ if (flag(args, '--json'))
127
+ return printJson(shaped);
128
+ console.log(`codex-lb repair: ${shaped.ok ? 'ok' : result.ok ? 'fast_ui_repair_failed' : result.status}`);
103
129
  return;
104
130
  }
105
131
  if (action === 'release') {
@@ -145,10 +171,17 @@ export async function run(command, args = []) {
145
171
  process.exitCode = 1;
146
172
  return;
147
173
  }
148
- const result = await configureCodexLb({ host, apiKey: newKey, authMode: flag(args, '--preserve-auth') ? 'preserve' : 'codex-lb', forceCodexLbApiKeyAuth: !flag(args, '--preserve-auth') });
149
- const restart = await maybeRestartCodexAppForAuthSwitch(args, Boolean(result.ok));
150
- const ok = Boolean(result.ok && restart?.ok !== false);
151
- const output = { ...result, ok, action: 'set-key', restart_app: restart };
174
+ const result = await configureCodexLb({
175
+ host,
176
+ apiKey: newKey,
177
+ authMode: flag(args, '--preserve-auth') ? 'preserve' : 'codex-lb',
178
+ forceCodexLbApiKeyAuth: !flag(args, '--preserve-auth'),
179
+ allowUnverifiedToolOutputRecovery: codexLbToolOutputRecoveryOverrideAcknowledged({ args })
180
+ });
181
+ const fastUi = await repairCodexAppFastUiAfterMutation(root, Boolean(result.ok));
182
+ const restart = await maybeRestartCodexAppForAuthSwitch(args, Boolean(result.ok && fastUi.ok));
183
+ const ok = Boolean(result.ok && fastUi.ok && restart?.ok !== false);
184
+ const output = { ...result, ok, action: 'set-key', codex_app_fast_ui: fastUi, restart_app: restart };
152
185
  if (!ok)
153
186
  process.exitCode = 1;
154
187
  if (flag(args, '--json'))
@@ -162,10 +195,16 @@ export async function run(command, args = []) {
162
195
  }
163
196
  if (action === 'use-codex-lb' || action === 'use-lb') {
164
197
  // Switch auth mode -> codex-lb (API key). Re-selects the provider and re-syncs auth.
165
- const result = await repairCodexLbAuth({ forceCodexLbApiKeyAuth: true, authMode: 'codex-lb', forceFastMode: !flag(args, '--no-fast') });
166
- const restart = await maybeRestartCodexAppForAuthSwitch(args, Boolean(result.ok));
167
- const ok = Boolean(result.ok && restart?.ok !== false);
168
- const shaped = { ...result, ok, mode: 'codex-lb', restart_app: restart };
198
+ const result = await repairCodexLbAuth({
199
+ forceCodexLbApiKeyAuth: true,
200
+ authMode: 'codex-lb',
201
+ forceFastMode: !flag(args, '--no-fast'),
202
+ allowUnverifiedToolOutputRecovery: codexLbToolOutputRecoveryOverrideAcknowledged({ args })
203
+ });
204
+ const fastUi = await repairCodexAppFastUiAfterMutation(root, Boolean(result.ok));
205
+ const restart = await maybeRestartCodexAppForAuthSwitch(args, Boolean(result.ok && fastUi.ok));
206
+ const ok = Boolean(result.ok && fastUi.ok && restart?.ok !== false);
207
+ const shaped = { ...result, ok, mode: 'codex-lb', codex_app_fast_ui: fastUi, restart_app: restart };
169
208
  if (!ok)
170
209
  process.exitCode = 1;
171
210
  if (flag(args, '--json'))
@@ -181,9 +220,10 @@ export async function run(command, args = []) {
181
220
  // Switch auth mode -> ChatGPT OAuth. Restores the saved OAuth login if present.
182
221
  const result = await releaseCodexLbAuthHold({ force: flag(args, '--force') });
183
222
  const authOk = !['no_backup', 'auth_in_use', 'failed'].includes(result.status);
184
- const restart = await maybeRestartCodexAppForAuthSwitch(args, authOk);
185
- const ok = Boolean(authOk && restart?.ok !== false);
186
- const shaped = { ...result, ok, mode: 'oauth', restart_app: restart };
223
+ const fastUi = await repairCodexAppFastUiAfterMutation(root, authOk);
224
+ const restart = await maybeRestartCodexAppForAuthSwitch(args, Boolean(authOk && fastUi.ok));
225
+ const ok = Boolean(authOk && fastUi.ok && restart?.ok !== false);
226
+ const shaped = { ...result, ok, mode: 'oauth', codex_app_fast_ui: fastUi, restart_app: restart };
187
227
  if (!ok)
188
228
  process.exitCode = 1;
189
229
  if (flag(args, '--json'))
@@ -311,16 +351,18 @@ export async function run(command, args = []) {
311
351
  shellProfile: options.shellProfile,
312
352
  runHealth: options.health,
313
353
  apiKeySource: options.apiKeySource,
314
- allowInsecureHttp: options.allowInsecureLocalhost
354
+ allowInsecureHttp: options.allowInsecureLocalhost,
355
+ allowUnverifiedToolOutputRecovery: codexLbToolOutputRecoveryOverrideAcknowledged({ args })
315
356
  });
316
- const restart = await maybeRestartCodexAppForAuthSwitch(args, Boolean(result.ok) && !flag(args, '--preserve-auth'));
317
- const shaped = { schema: 'sks.codex-lb-setup.v1', ...result, api_key: { present: Boolean(options.apiKey), redacted: true }, env_file_chmod: '0600' };
357
+ const fastUi = await repairCodexAppFastUiAfterMutation(root, Boolean(result.ok));
358
+ const restart = await maybeRestartCodexAppForAuthSwitch(args, Boolean(result.ok && fastUi.ok) && !flag(args, '--preserve-auth'));
359
+ const shaped = { schema: 'sks.codex-lb-setup.v1', ...result, api_key: { present: Boolean(options.apiKey), redacted: true }, env_file_chmod: '0600', codex_app_fast_ui: fastUi };
318
360
  shaped.restart_app = restart;
319
361
  if (options.health)
320
362
  shaped.applied_actions = [...(shaped.applied_actions || []), { type: 'run_health_check', target: 'codex-lb response chain', ok: true }];
321
363
  if (options.health)
322
364
  shaped.chain_health = result.ok ? await checkCodexLbResponseChain(result, { force: true, root }) : null;
323
- shaped.ok = Boolean(result.ok && restart?.ok !== false);
365
+ shaped.ok = Boolean(result.ok && fastUi.ok && restart?.ok !== false);
324
366
  if (!shaped.ok)
325
367
  process.exitCode = 1;
326
368
  if (flag(args, '--json'))
@@ -363,6 +405,7 @@ export async function run(command, args = []) {
363
405
  return;
364
406
  }
365
407
  console.error('Usage: sks codex-lb status|metrics|doctor --deep|health|setup|set-key|use-codex-lb|use-oauth|repair|release|unselect|circuit reset|circuit record-fixture|proof-evidence [--json]');
408
+ console.error(` ${CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_FLAG} explicitly acknowledge an old/unverified proxy for this command (unsafe)`);
366
409
  console.error(' set-key swap the codex-lb API key (reuses the stored host): sks codex-lb set-key --api-key-stdin');
367
410
  console.error(' use-codex-lb switch auth mode to codex-lb (API key)');
368
411
  console.error(' use-oauth switch auth mode to ChatGPT OAuth (restores saved login, else: codex login)');
@@ -375,7 +418,85 @@ async function maybeRestartCodexAppForAuthSwitch(args = [], enabled) {
375
418
  const shouldRestart = requested || (!flag(args, '--json') && !flag(args, '--no-restart-app') && !flag(args, '--no-restart'));
376
419
  return restartCodexApp({ enabled: shouldRestart });
377
420
  }
378
- async function fastEvidenceFromChain(chain = {}, requestLogPath = null) {
421
+ async function repairCodexAppFastUiAfterMutation(root, enabled) {
422
+ if (!enabled) {
423
+ return {
424
+ schema: 'sks.codex-app-fast-ui-repair.v1',
425
+ ok: true,
426
+ status: 'skipped',
427
+ skipped: true,
428
+ reason: 'previous_step_failed',
429
+ actions: [],
430
+ blockers: []
431
+ };
432
+ }
433
+ try {
434
+ return await repairCodexAppFastUi(root, { apply: true });
435
+ }
436
+ catch (err) {
437
+ return {
438
+ schema: 'sks.codex-app-fast-ui-repair.v1',
439
+ ok: false,
440
+ status: 'failed',
441
+ actions: [],
442
+ blockers: ['codex_app_fast_ui_repair_failed'],
443
+ error: String(err?.message || err)
444
+ };
445
+ }
446
+ }
447
+ export function isCodexLbFastChainVerified(chain = {}) {
448
+ return chain.ok === true && chain.skipped !== true;
449
+ }
450
+ export async function resolveCodexLbFastCheckModel(status = {}, env = process.env) {
451
+ const explicit = String(env.SKS_CODEX_MODEL || env.CODEX_MODEL || '').trim();
452
+ if (explicit)
453
+ return { model: explicit, source: env.SKS_CODEX_MODEL ? 'SKS_CODEX_MODEL' : 'CODEX_MODEL', blockers: [] };
454
+ const configPath = String(status.config_path || '').trim();
455
+ const config = configPath ? await readText(configPath, '').catch(() => '') : '';
456
+ const configured = topLevelTomlString(config, 'model');
457
+ if (configured)
458
+ return { model: configured, source: 'global_config', blockers: [] };
459
+ const configuredCatalogPath = topLevelTomlString(config, 'model_catalog_json');
460
+ if (!configuredCatalogPath)
461
+ return { model: null, source: null, blockers: ['codex_lb_fast_check_model_unselected'] };
462
+ const home = String(env.HOME || '').trim();
463
+ const expandedCatalogPath = configuredCatalogPath.startsWith('~/') && home
464
+ ? path.join(home, configuredCatalogPath.slice(2))
465
+ : configuredCatalogPath;
466
+ const catalogPath = path.isAbsolute(expandedCatalogPath)
467
+ ? expandedCatalogPath
468
+ : path.resolve(path.dirname(configPath), expandedCatalogPath);
469
+ try {
470
+ const payload = JSON.parse(await readText(catalogPath, ''));
471
+ const model = selectPriorityCapableCatalogModel(payload);
472
+ return model
473
+ ? { model, source: 'model_catalog_json', blockers: [] }
474
+ : { model: null, source: 'model_catalog_json', blockers: ['codex_lb_fast_check_priority_model_unavailable'] };
475
+ }
476
+ catch {
477
+ return { model: null, source: 'model_catalog_json', blockers: ['codex_lb_fast_check_catalog_invalid'] };
478
+ }
479
+ }
480
+ function topLevelTomlString(text, key) {
481
+ const topLevel = String(text || '').split(/\n\s*\[/)[0] || '';
482
+ const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
483
+ return (topLevel.match(new RegExp(`(?:^|\\n)\\s*${escaped}\\s*=\\s*"([^"]+)"`))?.[1] || '').trim();
484
+ }
485
+ function selectPriorityCapableCatalogModel(payload = {}) {
486
+ const models = Array.isArray(payload?.models) ? payload.models : Array.isArray(payload?.data) ? payload.data : [];
487
+ return models
488
+ .filter((row) => {
489
+ if (!row || typeof row !== 'object' || row.supported_in_api !== true || typeof row.slug !== 'string' || !row.slug.trim())
490
+ return false;
491
+ const serviceTiers = Array.isArray(row.service_tiers) ? row.service_tiers : [];
492
+ const speedTiers = Array.isArray(row.additional_speed_tiers) ? row.additional_speed_tiers : [];
493
+ return serviceTiers.some((tier) => normalizeTier(typeof tier === 'string' ? tier : tier?.id) === 'priority')
494
+ || speedTiers.some((tier) => normalizeTier(tier) === 'priority');
495
+ })
496
+ .sort((left, right) => Number(left.priority ?? Number.MAX_SAFE_INTEGER) - Number(right.priority ?? Number.MAX_SAFE_INTEGER)
497
+ || String(left.slug).localeCompare(String(right.slug)))[0]?.slug || null;
498
+ }
499
+ export async function fastEvidenceFromChain(chain = {}, requestLogPath = null) {
379
500
  const chainEvidence = chain.service_tier_evidence || {};
380
501
  const logRows = requestLogPath ? await readRequestLogRows(String(requestLogPath)) : [];
381
502
  const logEvidence = serviceTierEvidenceFromRows(logRows);
@@ -423,14 +544,14 @@ async function readRequestLogRows(file) {
423
544
  }
424
545
  return rows;
425
546
  }
426
- function serviceTierEvidenceFromRows(rows = []) {
547
+ export function serviceTierEvidenceFromRows(rows = []) {
427
548
  let requested = null;
428
549
  let actual = null;
429
550
  let effective = null;
430
551
  for (const row of rows) {
431
552
  requested ||= normalizeTier(row?.requestedServiceTier || row?.requested_service_tier || row?.request?.service_tier || row?.body?.service_tier);
432
- actual ||= normalizeTier(row?.actualServiceTier || row?.actual_service_tier || row?.response?.actualServiceTier);
433
- effective ||= normalizeTier(row?.serviceTier || row?.service_tier || row?.response?.serviceTier);
553
+ actual ||= normalizeTier(row?.actualServiceTier || row?.actual_service_tier || row?.response?.actualServiceTier || row?.response?.actual_service_tier);
554
+ effective ||= responseServiceTier(row);
434
555
  }
435
556
  return {
436
557
  requested_service_tier: requested,
@@ -439,6 +560,17 @@ function serviceTierEvidenceFromRows(rows = []) {
439
560
  fast_actual: actual === 'priority' || effective === 'priority'
440
561
  };
441
562
  }
563
+ function responseServiceTier(row) {
564
+ const nested = normalizeTier(row?.response?.serviceTier || row?.response?.service_tier || row?.event?.response?.serviceTier || row?.event?.response?.service_tier);
565
+ if (nested)
566
+ return nested;
567
+ const responseKind = String(row?.direction || row?.phase || row?.kind || row?.type || '').trim().toLowerCase();
568
+ const responseBody = row?.object === 'response' || /^resp[_-]/i.test(String(row?.id || '')) || Array.isArray(row?.output);
569
+ if (responseBody || responseKind === 'response' || responseKind === 'inbound' || responseKind.startsWith('response.')) {
570
+ return normalizeTier(row?.serviceTier || row?.service_tier);
571
+ }
572
+ return null;
573
+ }
442
574
  function normalizeTier(value) {
443
575
  const text = String(value || '').trim().toLowerCase();
444
576
  if (text === 'fast')
@@ -483,9 +615,10 @@ function shapeCodexLbStatus(status = {}) {
483
615
  return {
484
616
  schema: 'sks.codex-lb-status.v1',
485
617
  ...status,
486
- configured: Boolean(status.ok),
487
- setup_needed: !status.ok,
488
- repair_available: !status.ok,
618
+ configured: Boolean(status.provider_ready ?? status.ok),
619
+ setup_needed: !Boolean(status.provider_ready ?? status.ok),
620
+ upgrade_needed: Boolean(status.selected && status.tool_output_recovery?.ok !== true),
621
+ repair_available: !Boolean(status.provider_ready ?? status.ok),
489
622
  api_key: {
490
623
  present: Boolean(status.env_key_configured),
491
624
  source: status.env_loader?.api_key?.source || null,
@@ -494,11 +627,13 @@ function shapeCodexLbStatus(status = {}) {
494
627
  persistence,
495
628
  env_loader: status.env_loader || null,
496
629
  env_auto_load: Boolean(status.env_file && status.env_key_configured),
497
- guidance: status.ok ? [] : [
498
- 'codex-lb API key is not configured.',
499
- 'Run: sks codex-lb setup',
500
- 'Or: sks codex-lb setup --host <domain> --api-key-stdin --yes'
501
- ]
630
+ guidance: status.selected && status.tool_output_recovery?.ok !== true
631
+ ? status.tool_output_recovery.operator_actions || []
632
+ : status.ok ? [] : [
633
+ 'codex-lb API key is not configured.',
634
+ 'Run: sks codex-lb setup',
635
+ 'Or: sks codex-lb setup --host <domain> --api-key-stdin --yes'
636
+ ]
502
637
  };
503
638
  }
504
639
  async function codexLbSetupOptions(args = []) {
@@ -4,7 +4,9 @@ import { codexCompatibilityReport, codexDoctorReport } from '../core/codex-compa
4
4
  import { codexVersionReport } from '../core/codex-compat/codex-version.js';
5
5
  import { codexSchemaSnapshotReport } from '../core/codex-compat/codex-schema-snapshot.js';
6
6
  import { detectCodex0141Capability } from '../core/codex-control/codex-0141-capability.js';
7
- import { detectCodex0142Capability } from '../core/codex-control/codex-0142-capability.js';
7
+ import { detectCodex0144Capability } from '../core/codex-control/codex-0144-capability.js';
8
+ import { CURRENT_CODEX_RELEASE_MANIFEST } from '../core/codex-compat/codex-release-manifest.js';
9
+ import { inspectCodexCliUpdate, updateCodexCliNow } from '../core/codex/codex-cli-update.js';
8
10
  export async function run(_command, args = []) {
9
11
  const action = args[0] || 'compatibility';
10
12
  if (action === 'compatibility' || action === 'compat') {
@@ -26,6 +28,43 @@ export async function run(_command, args = []) {
26
28
  console.log(`Codex detected: ${result.detected.version || 'not installed'} (${result.policy.status})`);
27
29
  return;
28
30
  }
31
+ if (action === 'update-status' || action === 'update-check') {
32
+ const result = await inspectCodexCliUpdate({ force: flag(args, '--refresh') || flag(args, '--force') });
33
+ if (flag(args, '--json')) {
34
+ printJson(result);
35
+ if (!result.ok)
36
+ process.exitCode = 1;
37
+ return;
38
+ }
39
+ console.log(`Codex CLI: ${result.current_version || 'not installed'}${result.latest_version ? ` (latest ${result.latest_version})` : ''}`);
40
+ console.log(`Update: ${result.update_available === true ? 'available' : result.update_available === false ? 'current' : 'unverified'}`);
41
+ for (const warning of result.warnings)
42
+ console.log(`- warning: ${warning}`);
43
+ for (const actionLine of result.guidance)
44
+ console.log(`- ${actionLine}`);
45
+ if (!result.ok)
46
+ process.exitCode = 1;
47
+ return;
48
+ }
49
+ if (action === 'update' || action === 'update-now') {
50
+ const result = await updateCodexCliNow();
51
+ if (flag(args, '--json')) {
52
+ printJson(result);
53
+ if (!result.ok)
54
+ process.exitCode = 1;
55
+ return;
56
+ }
57
+ console.log(`Codex CLI update: ${result.status}${result.after_version ? ` (${result.before_version || 'unknown'} -> ${result.after_version})` : ''}`);
58
+ if (result.raw_output)
59
+ console.log(result.raw_output);
60
+ for (const blocker of result.blockers)
61
+ console.log(`- blocker: ${blocker}`);
62
+ for (const actionLine of result.guidance)
63
+ console.log(`- ${actionLine}`);
64
+ if (!result.ok)
65
+ process.exitCode = 1;
66
+ return;
67
+ }
29
68
  if (action === '0.141' || action === '0141' || action === 'rust-v0.141.0') {
30
69
  const result = await detectCodex0141Capability();
31
70
  if (flag(args, '--json'))
@@ -39,11 +78,11 @@ export async function run(_command, args = []) {
39
78
  process.exitCode = 1;
40
79
  return;
41
80
  }
42
- if (action === '0.142' || action === '0142' || action === 'rust-v0.142.0') {
43
- const result = await detectCodex0142Capability({ requireReal: flag(args, '--require-real') });
81
+ if (action === '0.144' || action === '0144' || action === CURRENT_CODEX_RELEASE_MANIFEST.targetTag) {
82
+ const result = await detectCodex0144Capability({ requireReal: flag(args, '--require-real') });
44
83
  if (flag(args, '--json'))
45
84
  return printJson(result);
46
- console.log(`Codex 0.142 compatibility: ${result.ok ? 'ok' : 'blocked'} (${result.probe_mode})`);
85
+ console.log(`Codex ${CURRENT_CODEX_RELEASE_MANIFEST.requiredCliVersion} compatibility: ${result.ok ? 'ok' : 'blocked'} (${result.probe_mode})`);
47
86
  for (const blocker of result.blockers || [])
48
87
  console.log(`- blocker: ${blocker}`);
49
88
  for (const warning of result.warnings || [])
@@ -70,7 +109,7 @@ export async function run(_command, args = []) {
70
109
  process.exitCode = 1;
71
110
  return;
72
111
  }
73
- console.error('Usage: sks codex compatibility|version|doctor|schema|0.142|0.141 [--json]');
112
+ console.error('Usage: sks codex compatibility|version|update-status [--refresh]|update|doctor|schema|0.144|0.141 [--json]');
74
113
  process.exitCode = 1;
75
114
  }
76
115
  //# sourceMappingURL=codex.js.map