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
@@ -0,0 +1,291 @@
1
+ import { codexLbBaseUrlSecurityBlocker, normalizeCodexLbBaseUrl } from './codex-lb-env.js';
2
+ import { redactString } from '../secret-redaction.js';
3
+ export const CODEX_LB_TOOL_OUTPUT_RECOVERY_SCHEMA = 'sks.codex-lb-tool-output-recovery.v1';
4
+ export const CODEX_LB_TOOL_OUTPUT_RECOVERY_MIN_VERSION = '1.21.0-beta.3';
5
+ export const CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_ENV = 'SKS_ALLOW_UNVERIFIED_CODEX_LB_RECOVERY';
6
+ export const CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_FLAG = '--allow-unverified-codex-lb-recovery';
7
+ const UPGRADE_ACTION = `Upgrade codex-lb to ${CODEX_LB_TOOL_OUTPUT_RECOVERY_MIN_VERSION} or later, then rerun \`sks codex-lb status\`.`;
8
+ const OAUTH_ACTION = 'To avoid the proxy, run `sks codex-lb use-oauth`; SKS will not switch providers silently.';
9
+ const FRESH_THREAD_ACTION = 'After upgrading or switching providers, open a fresh Codex thread and continue the persisted mission; do not replay the corrupted turn.';
10
+ export async function probeCodexLbToolOutputRecovery(opts = {}) {
11
+ const baseUrl = normalizeCodexLbBaseUrl(opts.baseUrl);
12
+ if (!baseUrl) {
13
+ return blockedProbe('invalid_base_url', {
14
+ baseUrl: null,
15
+ healthUrl: null,
16
+ blockers: ['codex_lb_tool_output_recovery_base_url_missing']
17
+ });
18
+ }
19
+ const transportBlocker = codexLbBaseUrlSecurityBlocker(baseUrl);
20
+ if (transportBlocker) {
21
+ return blockedProbe('transport_blocked', {
22
+ baseUrl,
23
+ healthUrl: codexLbHealthUrl(baseUrl),
24
+ blockers: [transportBlocker]
25
+ });
26
+ }
27
+ const healthUrl = codexLbHealthUrl(baseUrl);
28
+ if (!healthUrl) {
29
+ return blockedProbe('invalid_base_url', {
30
+ baseUrl,
31
+ healthUrl: null,
32
+ blockers: ['codex_lb_tool_output_recovery_base_url_invalid']
33
+ });
34
+ }
35
+ if (opts.allowReservedTestHostBypass === true && isReservedTestHost(baseUrl)) {
36
+ return {
37
+ ...baseProbe(baseUrl, healthUrl),
38
+ ok: true,
39
+ status: 'skipped_reserved_host',
40
+ required: false,
41
+ test_bypass: true
42
+ };
43
+ }
44
+ const fetchImpl = opts.fetchImpl || globalThis.fetch;
45
+ if (typeof fetchImpl !== 'function') {
46
+ return applyCodexLbToolOutputRecoveryOverride(blockedProbe('probe_unavailable', {
47
+ baseUrl,
48
+ healthUrl,
49
+ blockers: ['codex_lb_tool_output_recovery_probe_unavailable']
50
+ }), opts.allowUnverified === true);
51
+ }
52
+ const controller = new AbortController();
53
+ const timeoutMs = Math.max(250, Number(opts.timeoutMs || 4_000));
54
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
55
+ timer.unref?.();
56
+ try {
57
+ const response = await fetchImpl(healthUrl, {
58
+ method: 'GET',
59
+ headers: { accept: 'application/json' },
60
+ redirect: 'follow',
61
+ signal: controller.signal
62
+ });
63
+ if (!response.ok) {
64
+ return applyCodexLbToolOutputRecoveryOverride(blockedProbe('probe_unavailable', {
65
+ baseUrl,
66
+ healthUrl,
67
+ httpStatus: response.status,
68
+ blockers: [`codex_lb_tool_output_recovery_health_http_error:${response.status}`]
69
+ }), opts.allowUnverified === true);
70
+ }
71
+ const observedVersion = normalizeCodexLbVersion(response.headers.get('x-app-version'));
72
+ if (!observedVersion) {
73
+ return applyCodexLbToolOutputRecoveryOverride(blockedProbe('version_unverified', {
74
+ baseUrl,
75
+ healthUrl,
76
+ httpStatus: response.status,
77
+ blockers: ['codex_lb_tool_output_recovery_version_unverified']
78
+ }), opts.allowUnverified === true);
79
+ }
80
+ const compatible = compareCodexLbVersions(observedVersion, CODEX_LB_TOOL_OUTPUT_RECOVERY_MIN_VERSION) >= 0;
81
+ const result = {
82
+ ...baseProbe(baseUrl, healthUrl),
83
+ ok: compatible,
84
+ status: compatible ? 'compatible' : 'version_too_old',
85
+ observed_version: observedVersion,
86
+ supports_interrupted_tool_output_recovery: compatible,
87
+ verified: true,
88
+ http_status: response.status,
89
+ blockers: compatible ? [] : ['codex_lb_tool_output_recovery_version_too_old']
90
+ };
91
+ return applyCodexLbToolOutputRecoveryOverride(result, opts.allowUnverified === true);
92
+ }
93
+ catch (err) {
94
+ const error = err instanceof Error
95
+ ? err.name === 'AbortError' ? 'codex-lb health probe timed out' : redactCodexLbProbeText(err.message)
96
+ : redactCodexLbProbeText(String(err));
97
+ return applyCodexLbToolOutputRecoveryOverride(blockedProbe('probe_unavailable', {
98
+ baseUrl,
99
+ healthUrl,
100
+ blockers: ['codex_lb_tool_output_recovery_probe_failed'],
101
+ error
102
+ }), opts.allowUnverified === true);
103
+ }
104
+ finally {
105
+ clearTimeout(timer);
106
+ }
107
+ }
108
+ export function codexLbToolOutputRecoveryNotSelected() {
109
+ return {
110
+ ...baseProbe(null, null),
111
+ ok: true,
112
+ required: false,
113
+ status: 'not_selected'
114
+ };
115
+ }
116
+ export function codexLbToolOutputRecoveryNotChecked(required = false) {
117
+ return {
118
+ ...baseProbe(null, null),
119
+ ok: !required,
120
+ required,
121
+ status: 'not_checked',
122
+ blockers: required ? ['codex_lb_tool_output_recovery_not_checked'] : []
123
+ };
124
+ }
125
+ export function codexLbToolOutputRecoveryOverrideAcknowledged(input = {}) {
126
+ const args = (input.args || []).map((arg) => String(arg));
127
+ const env = input.env || process.env;
128
+ return args.includes(CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_FLAG)
129
+ || env[CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_ENV] === '1';
130
+ }
131
+ export function applyCodexLbToolOutputRecoveryOverride(probe, acknowledged) {
132
+ if (probe.ok || !acknowledged)
133
+ return probe;
134
+ return {
135
+ ...probe,
136
+ ok: true,
137
+ status: 'override_acknowledged',
138
+ override_acknowledged: true,
139
+ blockers: [],
140
+ warnings: [
141
+ ...probe.warnings,
142
+ `Operator explicitly acknowledged unverified codex-lb tool-output recovery via ${CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_FLAG} or ${CODEX_LB_TOOL_OUTPUT_RECOVERY_OVERRIDE_ENV}=1.`,
143
+ ...probe.blockers
144
+ ]
145
+ };
146
+ }
147
+ export function codexLbHealthUrl(baseUrl) {
148
+ try {
149
+ const parsed = new URL(normalizeCodexLbBaseUrl(baseUrl));
150
+ return new URL('/health', parsed.origin).toString();
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ }
156
+ export function normalizeCodexLbVersion(value) {
157
+ const match = String(value || '').trim().match(/v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/);
158
+ if (!match)
159
+ return null;
160
+ const major = Number(match[1]);
161
+ const minor = Number(match[2]);
162
+ const patch = Number(match[3]);
163
+ if (![major, minor, patch].every(Number.isSafeInteger))
164
+ return null;
165
+ return `${major}.${minor}.${patch}${match[4] ? `-${match[4]}` : ''}`;
166
+ }
167
+ export function compareCodexLbVersions(left, right) {
168
+ const a = parseVersion(left);
169
+ const b = parseVersion(right);
170
+ if (!a || !b)
171
+ return -1;
172
+ for (let index = 0; index < 3; index += 1) {
173
+ const delta = (a.core[index] || 0) - (b.core[index] || 0);
174
+ if (delta !== 0)
175
+ return delta > 0 ? 1 : -1;
176
+ }
177
+ if (!a.pre.length && !b.pre.length)
178
+ return 0;
179
+ if (!a.pre.length)
180
+ return 1;
181
+ if (!b.pre.length)
182
+ return -1;
183
+ const length = Math.max(a.pre.length, b.pre.length);
184
+ for (let index = 0; index < length; index += 1) {
185
+ const aPart = a.pre[index];
186
+ const bPart = b.pre[index];
187
+ if (aPart === undefined)
188
+ return -1;
189
+ if (bPart === undefined)
190
+ return 1;
191
+ if (aPart === bPart)
192
+ continue;
193
+ const aNumber = /^\d+$/.test(aPart) ? Number(aPart) : null;
194
+ const bNumber = /^\d+$/.test(bPart) ? Number(bPart) : null;
195
+ if (aNumber !== null && bNumber !== null)
196
+ return aNumber > bNumber ? 1 : -1;
197
+ if (aNumber !== null)
198
+ return -1;
199
+ if (bNumber !== null)
200
+ return 1;
201
+ return aPart > bPart ? 1 : -1;
202
+ }
203
+ return 0;
204
+ }
205
+ function baseProbe(baseUrl, healthUrl) {
206
+ return {
207
+ schema: CODEX_LB_TOOL_OUTPUT_RECOVERY_SCHEMA,
208
+ ok: false,
209
+ required: true,
210
+ status: 'version_unverified',
211
+ base_url: redactCodexLbProbeUrl(baseUrl),
212
+ health_url: redactCodexLbProbeUrl(healthUrl),
213
+ observed_version: null,
214
+ minimum_version: CODEX_LB_TOOL_OUTPUT_RECOVERY_MIN_VERSION,
215
+ version_header: 'x-app-version',
216
+ supports_interrupted_tool_output_recovery: null,
217
+ verified: false,
218
+ override_acknowledged: false,
219
+ test_bypass: false,
220
+ http_status: null,
221
+ blockers: [],
222
+ warnings: [],
223
+ operator_actions: [UPGRADE_ACTION, OAUTH_ACTION, FRESH_THREAD_ACTION]
224
+ };
225
+ }
226
+ function blockedProbe(status, input) {
227
+ return {
228
+ ...baseProbe(input.baseUrl, input.healthUrl),
229
+ status,
230
+ blockers: input.blockers,
231
+ ...(input.httpStatus === undefined ? {} : { http_status: input.httpStatus }),
232
+ ...(input.error === undefined ? {} : { error: redactCodexLbProbeText(input.error) })
233
+ };
234
+ }
235
+ function redactCodexLbProbeUrl(value) {
236
+ if (!value)
237
+ return null;
238
+ try {
239
+ const parsed = new URL(value);
240
+ parsed.username = '';
241
+ parsed.password = '';
242
+ parsed.hash = '';
243
+ for (const key of [...parsed.searchParams.keys()]) {
244
+ if (/(?:access[_-]?token|api[_-]?key|secret|password|token|credential)/i.test(key)) {
245
+ parsed.searchParams.set(key, 'redacted');
246
+ }
247
+ }
248
+ return redactCodexLbProbeText(parsed.toString());
249
+ }
250
+ catch {
251
+ return redactCodexLbProbeText(value);
252
+ }
253
+ }
254
+ function redactCodexLbProbeText(value) {
255
+ return redactString(String(value || ''))
256
+ .replace(/([a-z][a-z0-9+.-]*:\/\/)[^/@\s]+@/gi, '$1[redacted]@')
257
+ .replace(/([?&](?:access[_-]?token|api[_-]?key|secret|password|token|credential)=)[^&#\s]*/gi, '$1[redacted]')
258
+ .replace(/(\b(?:access[_-]?token|api[_-]?key|secret|password|token|credential)\s*[:=]\s*)(?:\[redacted\]|"[^"]*"|'[^']*'|[^\s,;}\]]+)/gi, '$1[redacted]');
259
+ }
260
+ function parseVersion(value) {
261
+ const normalized = normalizeCodexLbVersion(value);
262
+ if (!normalized)
263
+ return null;
264
+ const [coreText = '', preText = ''] = normalized.split('-', 2);
265
+ const coreParts = coreText.split('.').map(Number);
266
+ const major = coreParts[0];
267
+ const minor = coreParts[1];
268
+ const patch = coreParts[2];
269
+ if (major === undefined || minor === undefined || patch === undefined)
270
+ return null;
271
+ return { core: [major, minor, patch], pre: preText ? preText.split('.') : [] };
272
+ }
273
+ function isReservedTestHost(baseUrl) {
274
+ try {
275
+ const hostname = new URL(baseUrl).hostname.toLowerCase();
276
+ return hostname === 'example.test'
277
+ || hostname.endsWith('.example.test')
278
+ || hostname === 'example.invalid'
279
+ || hostname.endsWith('.example.invalid')
280
+ || hostname === 'example.com'
281
+ || hostname.endsWith('.example.com')
282
+ || hostname === 'example.org'
283
+ || hostname.endsWith('.example.org')
284
+ || hostname === 'example.net'
285
+ || hostname.endsWith('.example.net');
286
+ }
287
+ catch {
288
+ return false;
289
+ }
290
+ }
291
+ //# sourceMappingURL=codex-lb-tool-output-recovery.js.map
@@ -7,15 +7,15 @@ import { probeCodexHookApprovalState } from '../codex-app/codex-hook-approval-pr
7
7
  import { detectCodex0138Capability } from '../codex-control/codex-0138-capability.js';
8
8
  import { detectCodex0139Capability } from '../codex-control/codex-0139-capability.js';
9
9
  import { detectCodex0140Capability } from '../codex-control/codex-0140-capability.js';
10
- import { detectCodex0142Capability } from '../codex-control/codex-0142-capability.js';
10
+ import { detectCodex0144Capability } from '../codex-control/codex-0144-capability.js';
11
11
  import { buildCodexPluginInventory } from '../codex-plugins/codex-plugin-json.js';
12
12
  import { nowIso, runProcess, writeJsonAtomic } from '../fsx.js';
13
- import { MANAGED_AGENT_ROLES, MANAGED_SKILLS, managedAgentRoleOwnsText } from '../managed-assets/managed-assets-manifest.js';
13
+ import { MANAGED_OFFICIAL_SUBAGENT_ROLES, MANAGED_SKILLS, managedOfficialSubagentRoleOwnsText } from '../managed-assets/managed-assets-manifest.js';
14
14
  import { buildMcpPluginServerCandidates } from '../mcp/mcp-plugin-inventory.js';
15
15
  import { codexNativeFeatureState, computeCodexNativeInvocationDefaults } from './codex-native-feature-matrix.js';
16
16
  const REPORT_PATH = '.sneakoscope/reports/codex-native-feature-matrix.json';
17
17
  const REQUIRED_SKILL_NAMES = MANAGED_SKILLS.map((skill) => skill.id);
18
- const REQUIRED_AGENT_ROLES = MANAGED_AGENT_ROLES.map((role) => role.id);
18
+ const REQUIRED_AGENT_ROLES = MANAGED_OFFICIAL_SUBAGENT_ROLES.map((role) => role.id);
19
19
  const invocationMatrixCache = new Map();
20
20
  export async function buildCodexNativeFeatureMatrix(input = { root: process.cwd() }) {
21
21
  const root = path.resolve(input.root || process.cwd());
@@ -37,26 +37,26 @@ export async function buildCodexNativeFeatureMatrix(input = { root: process.cwd(
37
37
  process.env.SKS_CODEX_0138_FAKE,
38
38
  process.env.SKS_CODEX_0139_FAKE,
39
39
  process.env.SKS_CODEX_0140_FAKE,
40
- process.env.SKS_CODEX_0142_FAKE,
40
+ process.env.SKS_CODEX_0144_FAKE,
41
41
  process.env.SKS_CODEX_PLUGIN_JSON_FAKE
42
42
  ]
43
43
  });
44
44
  if (!input.missionDir && !repairManagedAssets && invocationMatrixCache.has(cacheKey)) {
45
45
  return invocationMatrixCache.get(cacheKey);
46
46
  }
47
- const fixtureMode = process.env.SKS_CODEX_0138_FAKE === '1' || process.env.SKS_CODEX_0139_FAKE === '1' || process.env.SKS_CODEX_0140_FAKE === '1' || process.env.SKS_CODEX_0142_FAKE === '1' || process.env.SKS_CODEX_PLUGIN_JSON_FAKE === '1';
47
+ const fixtureMode = process.env.SKS_CODEX_0138_FAKE === '1' || process.env.SKS_CODEX_0139_FAKE === '1' || process.env.SKS_CODEX_0140_FAKE === '1' || process.env.SKS_CODEX_0144_FAKE === '1' || process.env.SKS_CODEX_PLUGIN_JSON_FAKE === '1';
48
48
  const codexBin = fixtureMode ? process.env.CODEX_BIN || 'codex' : await findCodexBinary().catch(() => null);
49
49
  const version = codexBin ? await codexVersion(codexBin) : null;
50
50
  const cap0138 = await detectCodex0138Capability({ codexBin }).catch((err) => ({ blockers: [messageOf(err)] }));
51
51
  const cap0139 = await detectCodex0139Capability({ codexBin }).catch((err) => ({ blockers: [messageOf(err)] }));
52
52
  const cap0140 = await detectCodex0140Capability({ codexBin }).catch((err) => ({ blockers: [messageOf(err)] }));
53
- const cap0142 = await detectCodex0142Capability({ codexBin, root }).catch((err) => ({
54
- schema: 'sks.codex-0142-capability.v1',
53
+ const cap0144 = await detectCodex0144Capability({ codexBin, root }).catch((err) => ({
54
+ schema: 'sks.codex-0144-capability.v1',
55
55
  ok: false,
56
56
  release_authorizing: false,
57
57
  feature_states: {},
58
58
  blockers: [messageOf(err)],
59
- warnings: ['codex_0142_probe_exception']
59
+ warnings: ['codex_0144_probe_exception']
60
60
  }));
61
61
  const app = await codexAppIntegrationStatus({ codex: { bin: codexBin, version, available: Boolean(codexBin) } }).catch((err) => ({ ok: false, blockers: [messageOf(err)] }));
62
62
  const plugins = await buildCodexPluginInventory().catch((err) => ({
@@ -141,17 +141,17 @@ export async function buildCodexNativeFeatureMatrix(input = { root: process.cwd(
141
141
  app_handoff: boolState(booleanFeature(cap0138, 'supports_app_handoff'), 'actual-probe', '.sneakoscope/codex-0138-capability.json', blockersOf(cap0138)),
142
142
  image_path_exposure: boolState(booleanFeature(cap0138, 'supports_image_path_exposure'), 'actual-probe', '.sneakoscope/codex-0138-capability.json', blockersOf(cap0138)),
143
143
  code_mode_web_search: boolState(booleanFeature(cap0139, 'supports_code_mode_web_search'), 'actual-probe', '.sneakoscope/codex-0139-capability.json', blockersOf(cap0139)),
144
- codex_0142: boolState(recordOk(cap0142) === true, 'actual-probe', '.sneakoscope/codex/codex-0142-capability.json', blockersOf(cap0142), warningsOf(cap0142)),
145
- multi_agent_mode: codex0142State(cap0142, 'multi_agent_mode_schema'),
146
- rollout_budget: codex0142State(cap0142, 'rollout_budget_schema'),
147
- indexed_web_search: codex0142State(cap0142, 'indexed_web_search_schema'),
148
- current_time_read: codex0142State(cap0142, 'current_time_read_schema'),
149
- terminal_subagent_error: codex0142State(cap0142, 'terminal_subagent_error_schema'),
150
- exec_mcp_reconnect: codex0142State(cap0142, 'exec_mcp_reconnect_schema'),
151
- plugin_catalog_refresh: codex0142State(cap0142, 'plugin_catalog_refresh_schema'),
152
- native_thread_list_search: codex0142State(cap0142, 'native_thread_list_search_schema'),
153
- remote_native_environment: codex0142State(cap0142, 'remote_native_environment_schema'),
154
- app_server_overload: codex0142State(cap0142, 'app_server_overload_schema'),
144
+ codex_0144: boolState(recordOk(cap0144) === true, 'actual-probe', '.sneakoscope/codex/codex-0144-capability.json', blockersOf(cap0144), warningsOf(cap0144)),
145
+ multi_agent_mode: codex0144State(cap0144, 'multi_agent_mode_schema'),
146
+ rollout_budget: codex0144State(cap0144, 'rollout_budget_schema'),
147
+ indexed_web_search: codex0144State(cap0144, 'indexed_web_search_schema'),
148
+ current_time_read: codex0144State(cap0144, 'current_time_read_schema'),
149
+ terminal_subagent_error: codex0144State(cap0144, 'terminal_subagent_error_schema'),
150
+ exec_mcp_reconnect: codex0144State(cap0144, 'exec_mcp_reconnect_schema'),
151
+ plugin_catalog_refresh: codex0144State(cap0144, 'plugin_catalog_refresh_schema'),
152
+ native_thread_list_search: codex0144State(cap0144, 'native_thread_list_search_schema'),
153
+ remote_native_environment: codex0144State(cap0144, 'remote_native_environment_schema'),
154
+ app_server_overload: codex0144State(cap0144, 'app_server_overload_schema'),
155
155
  codex_0140: boolState(booleanFeature(cap0140, 'supports_0140'), 'actual-probe', '.sneakoscope/codex-0140-capability.json', blockersOf(cap0140)),
156
156
  usage_views: boolState(booleanFeature(cap0140?.features || {}, 'usage_views'), 'actual-probe', '.sneakoscope/codex-0140-capability.json', blockersOf(cap0140)),
157
157
  goal_attachment_preservation: boolState(booleanFeature(cap0140?.features || {}, 'goal_attachment_preservation'), 'actual-probe', '.sneakoscope/codex-0140-capability.json', blockersOf(cap0140)),
@@ -176,7 +176,7 @@ export async function buildCodexNativeFeatureMatrix(input = { root: process.cwd(
176
176
  codex_0138: cap0138,
177
177
  codex_0139: cap0139,
178
178
  codex_0140: cap0140,
179
- codex_0142: cap0142,
179
+ codex_0144: cap0144,
180
180
  app,
181
181
  plugin_inventory: plugins,
182
182
  mcp_candidates: mcpCandidates,
@@ -248,22 +248,15 @@ async function inspectManagedSkillState(root) {
248
248
  };
249
249
  }
250
250
  async function inspectManagedAgentRoleState(root) {
251
- const dirs = [
252
- path.join(root, '.codex', 'agents'),
253
- ...(process.env.CODEX_HOME ? [path.join(process.env.CODEX_HOME, 'agents')] : [])
254
- ];
251
+ const dir = path.join(root, '.codex', 'agents');
255
252
  let existingCount = 0;
256
253
  const managed = new Set();
257
- for (const dir of dirs) {
258
- const rows = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
259
- existingCount += rows.filter((row) => row.isFile() && row.name.endsWith('.toml')).length;
260
- for (const role of MANAGED_AGENT_ROLES) {
261
- if (managed.has(role.id))
262
- continue;
263
- const text = await fs.readFile(path.join(dir, role.filename), 'utf8').catch(() => '');
264
- if (managedAgentRoleOwnsText(text, role))
265
- managed.add(role.id);
266
- }
254
+ const rows = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
255
+ existingCount = rows.filter((row) => row.isFile() && row.name.endsWith('.toml')).length;
256
+ for (const role of MANAGED_OFFICIAL_SUBAGENT_ROLES) {
257
+ const text = await fs.readFile(path.join(dir, role.filename), 'utf8').catch(() => '');
258
+ if (managedOfficialSubagentRoleOwnsText(text, role))
259
+ managed.add(role.id);
267
260
  }
268
261
  const missing = REQUIRED_AGENT_ROLES.filter((role) => !managed.has(role));
269
262
  return {
@@ -336,23 +329,23 @@ function warningsOf(value) {
336
329
  return [];
337
330
  return value.warnings.map((item) => String(item)).filter(Boolean);
338
331
  }
339
- function codex0142State(capability, key) {
332
+ function codex0144State(capability, key) {
340
333
  const state = isRecord(capability)
341
334
  && isRecord(capability.feature_states)
342
335
  && isRecord(capability.feature_states[key])
343
336
  ? capability.feature_states[key]
344
337
  : null;
345
338
  const evidence = Array.isArray(state?.evidence) ? state.evidence.map(String) : [];
346
- const blockers = Array.isArray(state?.blockers) ? state.blockers.map(String) : [`codex_0142_${key}_not_verified`];
339
+ const blockers = Array.isArray(state?.blockers) ? state.blockers.map(String) : [`codex_0144_${key}_not_verified`];
347
340
  const supported = state?.supported === true;
348
341
  const certainty = typeof state?.certainty === 'string' ? state.certainty : '';
349
342
  const input = {
350
343
  ok: supported,
351
344
  source: 'actual-probe',
352
- artifact_path: '.sneakoscope/codex/codex-0142-capability.json',
345
+ artifact_path: '.sneakoscope/codex/codex-0144-capability.json',
353
346
  evidence,
354
347
  blockers: supported ? [] : blockers,
355
- warnings: certainty && certainty !== 'actual' && certainty !== 'discovered' ? [`codex_0142_${key}_${certainty}`] : []
348
+ warnings: certainty && certainty !== 'actual' && certainty !== 'discovered' ? [`codex_0144_${key}_${certainty}`] : []
356
349
  };
357
350
  if (!supported)
358
351
  input.unavailableStatus = 'fallback';
@@ -21,14 +21,14 @@ export function computeCodexNativeInvocationDefaults(matrix) {
21
21
  return {
22
22
  loop_worker_role_strategy: features.agent_type.ok ? 'agent_type' : 'message-role',
23
23
  multi_agent_mode: multiAgentOk && features.agent_type.ok ? 'proactive' : multiAgentOk ? 'explicitRequestOnly' : 'none',
24
- rollout_budget_strategy: rolloutBudgetOk ? 'codex-0142-shared' : 'sks-local-only',
24
+ rollout_budget_strategy: rolloutBudgetOk ? 'codex-0144-shared' : 'sks-local-only',
25
25
  qa_visual_review_strategy: features.app_handoff.ok ? 'app-handoff' : 'headless-artifact',
26
26
  research_source_strategy: indexedSearchOk ? 'indexed-web-search' : features.mcp_inventory.ok ? 'mcp-plugin-candidates' : features.code_mode_web_search.ok ? 'web-sources' : 'local-files',
27
27
  image_followup_strategy: features.image_path_exposure.ok ? 'model-visible-path' : 'artifact-path',
28
28
  hook_evidence_policy: hookStatus === 'available' ? 'approved-only' : hookStatus === 'unavailable' ? 'not-installed' : 'unknown-do-not-count',
29
29
  skill_bridge_strategy: features.skill_sync.ok || features.skill_picker.ok ? 'sks-managed-skills' : 'cli-only',
30
30
  current_time_source: currentTimeOk ? 'codex-currentTime-read' : 'external-clock',
31
- overload_retry_policy: overloadOk ? 'codex-0142-retryable' : 'generic'
31
+ overload_retry_policy: overloadOk ? 'codex-0144-retryable' : 'generic'
32
32
  };
33
33
  }
34
34
  export function matrixFeatureOk(matrix, key) {
@@ -54,7 +54,7 @@ export async function repairCodexNativeManagedAssets(input) {
54
54
  rows.push({
55
55
  asset: 'agent_roles',
56
56
  ok: recordOk(report) !== false,
57
- changed: listLength(report, 'created') > 0,
57
+ changed: listLength(report, 'created') + listLength(report, 'updated') > 0,
58
58
  artifact_path: '.sneakoscope/reports/codex-agent-role-sync.json',
59
59
  blockers: blockersOf(report)
60
60
  });
@@ -20,10 +20,13 @@ const CORE_SKILL_DEFINITIONS = [
20
20
  canonical_name: 'naruto',
21
21
  display_name: 'naruto',
22
22
  route: '$Naruto',
23
- purpose: 'fan out bounded native worker lanes while parent integration remains owner.',
24
- when: 'Use when the selected route explicitly requires high-scale parallel review or implementation.',
25
- evidence: 'agent task graph, worker ledgers, leases, proof evidence, and cleanup artifacts.',
26
- fallback: 'Degrade to parent-owned execution with blockers recorded if native lanes are unavailable.'
23
+ purpose: 'run a Codex official subagent workflow with official agent threads while parent integration remains owner.',
24
+ when: 'Use when the user explicitly invokes $Naruto or the selected route requires bounded parallel delegation.',
25
+ workflow: 'Use sks naruto run "<task>" [--agents N] [--max-threads N] [--json]. Automatic fan-out is one by default, two only for an explicit parallel request or independent risk domains, and at most three for critical multi-domain risk; an explicit operator --agents N remains authoritative. The GPT-5.6 Sol Max parent selects the narrow project-scoped custom role whose description matches each defensible slice: GPT-5.6 Luna Max for clear bounded work and exploration, GPT-5.6 Sol Max for complex implementation, UI, debugging, testing, architecture, integration, security, DB, research, release, and other judgment-sensitive work. Read-only roles declare sandbox_mode="read-only"; write roles inherit the parent permission mode. Treat Codex [agents].max_threads as the concurrency authority, keep max_depth=1, avoid duplicate or overlapping write slices, wait for every requested subagent, reuse only bounded TriWiki attention.use_first anchors with on-demand source hydration, treat SubagentStart/SubagentStop as lifecycle-only evidence, require subagent-parent-summary.json with one structured outcome per thread, and let the parent own integration and final judgment.',
26
+ safety: 'Preserve user-authored content, inherit the parent permission mode, do not spawn nested subagents, do not inject the full pack or the full TriWiki context into every child, and do not fall back to another model, process swarm, custom scheduler, or worker pool. The historical Naruto process runtime is removed; stop with explicit blocker evidence when the official path is unavailable.',
27
+ cli: 'sks naruto run "<task>" [--agents N] [--max-threads N] [--json]; sks naruto status|subagents|proof [--mission <id>] [--json]',
28
+ evidence: 'subagent-plan.json, subagent-events.jsonl, subagent-parent-summary.json, subagent-evidence.json, naruto-summary.json, and naruto-gate.json.',
29
+ fallback: 'Return explicit official-subagent availability blockers and continue parent-owned only when the sealed task still has meaningful in-scope work; never fabricate process, PID, or subagent evidence.'
27
30
  },
28
31
  {
29
32
  id: 'sks-core-qa-loop',
@@ -43,6 +46,7 @@ const CORE_SKILL_DEFINITIONS = [
43
46
  route: '$Research',
44
47
  purpose: 'run evidence-bound discovery, source ledgers, and synthesis cycles.',
45
48
  when: 'Use for discovery, evaluation, external-source claims, or frontier-style research.',
49
+ workflow: 'Run layered Super Search first and accept only source rows correlated to verified proof, source-ledger, and hydrated-content artifacts. Then run exactly three independent official research_reviewer threads on GPT-5.6 Sol Max using Einstein, von Neumann, and Skeptic composite lenses. Any objection triggers a mission-local research_synthesizer revision and a fresh three-thread review cycle. agent-ledger.json and debate-ledger.json are compatibility projections only; do not launch a removed legacy scheduler or a custom debate pool.',
46
50
  evidence: 'research plan, source ledger, cycle record, synthesis, and final review.',
47
51
  fallback: 'State source/tool unavailability and avoid unsupported live-accuracy claims.'
48
52
  },
@@ -49,13 +49,20 @@ async function postcheckCapability(root, state, fixture) {
49
49
  return { ...state, after: 'blocked', blockers: [...state.blockers, `unknown_capability:${state.id}`] };
50
50
  }
51
51
  function postcheckImageGeneration(state, fixture) {
52
- if (fixture === 'all-repairable' || state.before === 'verified')
52
+ if (fixture === 'all-repairable' || (state.before === 'verified'
53
+ && state.evidence_level === 'real-interaction'
54
+ && state.real_interaction_verified === true))
53
55
  return verified(state);
56
+ const blocker = state.evidence_level === 'configuration'
57
+ ? 'codex_imagegen_real_output_unverified'
58
+ : 'codex_app_builtin_imagegen_capability_missing';
54
59
  return {
55
60
  ...state,
56
61
  after: 'unknown',
62
+ availability: 'manual-required',
63
+ repairability: 'manual-required',
57
64
  core_blockers: [],
58
- route_blockers: mergeStateRouteBlockers(state, 'route-image', ['imagegen_auth_or_codex_app_builtin_missing']),
65
+ route_blockers: mergeStateRouteBlockers(state, 'route-image', [blocker]),
59
66
  blockers: [],
60
67
  warnings: [...new Set([...state.warnings, 'image_generation_not_verified_without_real_capability'])]
61
68
  };
@@ -69,12 +76,14 @@ async function postcheckImageFollowupEdit(root, state) {
69
76
  return routeBlocked(state, 'route-image', ['image_followup_sample_artifact_unwritable']);
70
77
  return verified(state);
71
78
  }
72
- function postcheckComputerUse(state, _fixture) {
73
- if (syntheticNativeVerificationAllowed(_fixture) && process.env.SKS_COMPUTER_USE_CAPABILITY === 'verified')
79
+ function postcheckComputerUse(state, fixture) {
80
+ if (fixture === 'all-repairable')
74
81
  return verified(state);
75
82
  return {
76
83
  ...state,
77
84
  after: 'unknown',
85
+ availability: 'manual-required',
86
+ repairability: 'manual-required',
78
87
  core_blockers: [],
79
88
  route_blockers: mergeStateRouteBlockers(state, 'route-computer-use', ['computer_use_os_permission_or_capability_unknown']),
80
89
  blockers: [],
@@ -82,20 +91,19 @@ function postcheckComputerUse(state, _fixture) {
82
91
  };
83
92
  }
84
93
  function postcheckChromeWebReview(state, fixture) {
85
- if (fixture === 'all-repairable' || (syntheticNativeVerificationAllowed(fixture) && process.env.SKS_CHROME_EXTENSION_READY === '1'))
94
+ if (fixture === 'all-repairable')
86
95
  return verified(state);
87
96
  return {
88
97
  ...state,
89
98
  after: 'unknown',
99
+ availability: 'manual-required',
100
+ repairability: 'manual-required',
90
101
  core_blockers: [],
91
102
  route_blockers: mergeStateRouteBlockers(state, 'route-chrome-web-review', ['codex_chrome_extension_readiness_not_verified']),
92
103
  blockers: [],
93
104
  warnings: [...new Set([...state.warnings, 'manual_chrome_extension_setup_required'])]
94
105
  };
95
106
  }
96
- function syntheticNativeVerificationAllowed(fixture) {
97
- return fixture === 'all-repairable' || process.env.SKS_NATIVE_CAPABILITY_FIXTURE === '1' || process.env.NODE_ENV === 'test';
98
- }
99
107
  async function postcheckAppScreenshot(root, state) {
100
108
  const dir = path.join(root, '.sneakoscope', 'app-screenshots');
101
109
  const registry = path.join(dir, 'screenshot-registry.json');