@svenroth-ai/shipwright 0.27.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/client/dist/assets/{EmbeddedTerminal-CqCQUDtp.js → EmbeddedTerminal-4xgNUBUu.js} +19 -19
  2. package/client/dist/assets/{abnfDiagram-VRR7QNED-DX2objTP.js → abnfDiagram-VRR7QNED-BdCNbaqc.js} +1 -1
  3. package/client/dist/assets/{arc-DQmjbsFU.js → arc-DoZTTE1N.js} +1 -1
  4. package/client/dist/assets/{architectureDiagram-ZJ3FMSHR-DAvCsPCW.js → architectureDiagram-ZJ3FMSHR-DFTG4KtO.js} +1 -1
  5. package/client/dist/assets/{blockDiagram-677ZJIJ3-DC-dlyYI.js → blockDiagram-677ZJIJ3-C34UBjOB.js} +1 -1
  6. package/client/dist/assets/{c4Diagram-LMCZKHZV-DSlmXfhE.js → c4Diagram-LMCZKHZV-CbqAB1Ou.js} +1 -1
  7. package/client/dist/assets/channel-DBcZw7Kn.js +1 -0
  8. package/client/dist/assets/{chunk-2Q5K7J3B-C111EHL6.js → chunk-2Q5K7J3B-4N6AnmBJ.js} +1 -1
  9. package/client/dist/assets/{chunk-32BRIVSS-DrCYs2XG.js → chunk-32BRIVSS-Cs67LiCy.js} +1 -1
  10. package/client/dist/assets/{chunk-5VM5RSS4-DIejoaXS.js → chunk-5VM5RSS4-Bwd7rtD3.js} +1 -1
  11. package/client/dist/assets/{chunk-EX3LRPZG-CGWNeH2g.js → chunk-EX3LRPZG-CQqGfptD.js} +1 -1
  12. package/client/dist/assets/{chunk-JWPE2WC7-CCH0SRFY.js → chunk-JWPE2WC7-ClvKd4PN.js} +1 -1
  13. package/client/dist/assets/{chunk-MOJQB5TN-B3OpZGRv.js → chunk-MOJQB5TN-Cwvj8GE1.js} +1 -1
  14. package/client/dist/assets/{chunk-RYQCIY6F-BKhdp_8v.js → chunk-RYQCIY6F-DrWMx37d.js} +1 -1
  15. package/client/dist/assets/{chunk-V7JOEXUC-B6Bu8x1y.js → chunk-V7JOEXUC-CYFfa4PY.js} +1 -1
  16. package/client/dist/assets/{chunk-VR4S4FIN-OgFi2_iB.js → chunk-VR4S4FIN-B5eWtesm.js} +1 -1
  17. package/client/dist/assets/{chunk-XXDRQBXY-xyjuuhxl.js → chunk-XXDRQBXY-BQAZ6Our.js} +1 -1
  18. package/client/dist/assets/classDiagram-OUVF2IWQ-C3Q1V9DU.js +1 -0
  19. package/client/dist/assets/classDiagram-v2-EOCWNBFH-C3Q1V9DU.js +1 -0
  20. package/client/dist/assets/{cose-bilkent-JH36ORCC-BQIH3SCK.js → cose-bilkent-JH36ORCC-C76Yia6h.js} +1 -1
  21. package/client/dist/assets/{cynefin-VYW2F7L2-oyLAz8te.js → cynefin-VYW2F7L2-pJe7rdTi.js} +1 -1
  22. package/client/dist/assets/{cynefinDiagram-TSTJHNR4-DoLCsH0l.js → cynefinDiagram-TSTJHNR4-EeHQ7dYV.js} +1 -1
  23. package/client/dist/assets/{dagre-VKFMJZFB-D7djx1_Y.js → dagre-VKFMJZFB-VXOY6IHR.js} +1 -1
  24. package/client/dist/assets/{diagram-FQU43EPY-DFuYE0Vf.js → diagram-FQU43EPY-DW_-leqw.js} +1 -1
  25. package/client/dist/assets/{diagram-G47NLZAW-CffCZVXk.js → diagram-G47NLZAW-C_hsLD4u.js} +1 -1
  26. package/client/dist/assets/{diagram-NH7WQ7WH-BhrHtUlt.js → diagram-NH7WQ7WH-CbeQuO_f.js} +1 -1
  27. package/client/dist/assets/{diagram-OA4YK3LP-CwQPbOn0.js → diagram-OA4YK3LP-DRHY5d_c.js} +1 -1
  28. package/client/dist/assets/{diagram-WEI45ONY-abtYnYqH.js → diagram-WEI45ONY-B87OYR_S.js} +1 -1
  29. package/client/dist/assets/{ebnfDiagram-CCIWWBDH-DfV7gT4m.js → ebnfDiagram-CCIWWBDH-B8Z8WHF6.js} +1 -1
  30. package/client/dist/assets/{erDiagram-Q63AITRT-vtbCprgH.js → erDiagram-Q63AITRT-DaD7oa9H.js} +1 -1
  31. package/client/dist/assets/{flowDiagram-23GEKE2U-CVCgcyDF.js → flowDiagram-23GEKE2U-GrMVpsea.js} +1 -1
  32. package/client/dist/assets/{ganttDiagram-NO4QXBWP-BclyOgMb.js → ganttDiagram-NO4QXBWP-K3X0DYBa.js} +1 -1
  33. package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-BXT4rIKj.js → gitGraphDiagram-IHSO6WYX-B2SEx0xa.js} +1 -1
  34. package/client/dist/assets/index-CIpLt0ie.js +863 -0
  35. package/client/dist/assets/index-DGtnTeFd.css +1 -0
  36. package/client/dist/assets/{infoDiagram-FWYZ7A6U-Dr4mN24J.js → infoDiagram-FWYZ7A6U-Fi8fQ95G.js} +1 -1
  37. package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-BBUFWq5C.js → ishikawaDiagram-FXEZZL3T-CrN7QJzt.js} +1 -1
  38. package/client/dist/assets/{journeyDiagram-5HDEW3XC-CmclipcQ.js → journeyDiagram-5HDEW3XC-XHIsl7rM.js} +1 -1
  39. package/client/dist/assets/{kanban-definition-HUTT4EX6-eIzUeZ03.js → kanban-definition-HUTT4EX6-A6HJqHw7.js} +1 -1
  40. package/client/dist/assets/{linear-DGiT7uKK.js → linear-D1vF9IQB.js} +1 -1
  41. package/client/dist/assets/{mermaid.core-BcLNGbxW.js → mermaid.core-D6w9zlA0.js} +4 -4
  42. package/client/dist/assets/{mindmap-definition-LN4V7U3C-C4ANnNiP.js → mindmap-definition-LN4V7U3C-CxRkUj6Z.js} +1 -1
  43. package/client/dist/assets/{pegDiagram-2B236MQR-DnMeh3Yh.js → pegDiagram-2B236MQR-Bs9dp-8a.js} +1 -1
  44. package/client/dist/assets/{pieDiagram-ENE6RG2P-CKV_rkhF.js → pieDiagram-ENE6RG2P-DBWILzB8.js} +1 -1
  45. package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-BuUsGwHh.js → quadrantDiagram-ABIIQ3AL-DrCVJJx6.js} +1 -1
  46. package/client/dist/assets/{railroadDiagram-RFXS5EU6-BwwdKnFL.js → railroadDiagram-RFXS5EU6-BdPW2dNf.js} +1 -1
  47. package/client/dist/assets/{requirementDiagram-TGXJPOKE-CpQZouJV.js → requirementDiagram-TGXJPOKE-Bj_g3tC5.js} +1 -1
  48. package/client/dist/assets/{sankeyDiagram-HTMAVEWB-4fnDUNVa.js → sankeyDiagram-HTMAVEWB-BGL9NnsS.js} +1 -1
  49. package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-BOcaWlM0.js → sequenceDiagram-DBY2YBRQ-DEirxTZY.js} +1 -1
  50. package/client/dist/assets/{sizeCapture-X5ZJPWSS-_pv-9R0c.js → sizeCapture-X5ZJPWSS-BtLrvrea.js} +1 -1
  51. package/client/dist/assets/{stateDiagram-2N3HPSRC-CFwCOonY.js → stateDiagram-2N3HPSRC-D3GXIouX.js} +1 -1
  52. package/client/dist/assets/stateDiagram-v2-6OUMAXLB-D3lXe_mJ.js +1 -0
  53. package/client/dist/assets/{swimlanes-5IMT3BWC-DFa2tzxu.js → swimlanes-5IMT3BWC-PMRQzNhU.js} +2 -2
  54. package/client/dist/assets/swimlanesDiagram-G3AALYLV-DMLbRFiO.js +8 -0
  55. package/client/dist/assets/{timeline-definition-FHXFAJF6-rhGYElgn.js → timeline-definition-FHXFAJF6-CnBKJtD_.js} +1 -1
  56. package/client/dist/assets/{vennDiagram-L72KCM5P-BoGjRxyA.js → vennDiagram-L72KCM5P-BYmiJYoh.js} +1 -1
  57. package/client/dist/assets/{wardleyDiagram-EHGQE667-D-IGv5bH.js → wardleyDiagram-EHGQE667-DU7vW8q3.js} +1 -1
  58. package/client/dist/assets/{xychartDiagram-FW5EYKEG-D9PFTCfm.js → xychartDiagram-FW5EYKEG-BEtPvBSU.js} +1 -1
  59. package/client/dist/index.html +2 -2
  60. package/lib/preflight.mjs +24 -5
  61. package/lib/util.mjs +5 -1
  62. package/package.json +1 -1
  63. package/scripts/deploy-procs.mjs +105 -20
  64. package/scripts/deploy-swap.mjs +23 -2
  65. package/server/dist/config.d.ts +9 -0
  66. package/server/dist/config.d.ts.map +1 -1
  67. package/server/dist/config.js +1 -0
  68. package/server/dist/config.js.map +1 -1
  69. package/server/dist/core/campaign-events.d.ts.map +1 -1
  70. package/server/dist/core/campaign-events.js +1 -0
  71. package/server/dist/core/campaign-events.js.map +1 -1
  72. package/server/dist/core/campaign-loop-state.d.ts.map +1 -1
  73. package/server/dist/core/campaign-loop-state.js +54 -21
  74. package/server/dist/core/campaign-loop-state.js.map +1 -1
  75. package/server/dist/core/campaign-parse.d.ts +4 -0
  76. package/server/dist/core/campaign-parse.d.ts.map +1 -1
  77. package/server/dist/core/campaign-parse.js +9 -0
  78. package/server/dist/core/campaign-parse.js.map +1 -1
  79. package/server/dist/core/campaign-readiness-schema.d.ts +33 -0
  80. package/server/dist/core/campaign-readiness-schema.d.ts.map +1 -0
  81. package/server/dist/core/campaign-readiness-schema.js +70 -0
  82. package/server/dist/core/campaign-readiness-schema.js.map +1 -0
  83. package/server/dist/core/campaign-readiness.d.ts +59 -0
  84. package/server/dist/core/campaign-readiness.d.ts.map +1 -0
  85. package/server/dist/core/campaign-readiness.js +163 -0
  86. package/server/dist/core/campaign-readiness.js.map +1 -0
  87. package/server/dist/core/campaign-status-json.d.ts +3 -0
  88. package/server/dist/core/campaign-status-json.d.ts.map +1 -1
  89. package/server/dist/core/campaign-status-json.js +7 -0
  90. package/server/dist/core/campaign-status-json.js.map +1 -1
  91. package/server/dist/core/campaign-store.d.ts.map +1 -1
  92. package/server/dist/core/campaign-store.js +4 -1
  93. package/server/dist/core/campaign-store.js.map +1 -1
  94. package/server/dist/core/campaign-types.d.ts +8 -0
  95. package/server/dist/core/campaign-types.d.ts.map +1 -1
  96. package/server/dist/core/campaign-worktree-root.d.ts +19 -0
  97. package/server/dist/core/campaign-worktree-root.d.ts.map +1 -0
  98. package/server/dist/core/campaign-worktree-root.js +76 -0
  99. package/server/dist/core/campaign-worktree-root.js.map +1 -0
  100. package/server/dist/core/claim-record-lock.d.ts +30 -0
  101. package/server/dist/core/claim-record-lock.d.ts.map +1 -0
  102. package/server/dist/core/claim-record-lock.js +90 -0
  103. package/server/dist/core/claim-record-lock.js.map +1 -0
  104. package/server/dist/core/cli-child-spawn.d.ts +28 -0
  105. package/server/dist/core/cli-child-spawn.d.ts.map +1 -0
  106. package/server/dist/core/cli-child-spawn.js +146 -0
  107. package/server/dist/core/cli-child-spawn.js.map +1 -0
  108. package/server/dist/core/codex-models-probe.d.ts +46 -0
  109. package/server/dist/core/codex-models-probe.d.ts.map +1 -0
  110. package/server/dist/core/codex-models-probe.js +103 -0
  111. package/server/dist/core/codex-models-probe.js.map +1 -0
  112. package/server/dist/core/codex-oracle-runner.d.ts +68 -0
  113. package/server/dist/core/codex-oracle-runner.d.ts.map +1 -0
  114. package/server/dist/core/codex-oracle-runner.js +124 -0
  115. package/server/dist/core/codex-oracle-runner.js.map +1 -0
  116. package/server/dist/core/codex-status-report.d.ts +6 -0
  117. package/server/dist/core/codex-status-report.d.ts.map +1 -0
  118. package/server/dist/core/codex-status-report.js +40 -0
  119. package/server/dist/core/codex-status-report.js.map +1 -0
  120. package/server/dist/core/codex-task-watcher-types.d.ts +69 -0
  121. package/server/dist/core/codex-task-watcher-types.d.ts.map +1 -0
  122. package/server/dist/core/codex-task-watcher-types.js +12 -0
  123. package/server/dist/core/codex-task-watcher-types.js.map +1 -0
  124. package/server/dist/core/codex-task-watcher.d.ts +30 -0
  125. package/server/dist/core/codex-task-watcher.d.ts.map +1 -0
  126. package/server/dist/core/codex-task-watcher.js +252 -0
  127. package/server/dist/core/codex-task-watcher.js.map +1 -0
  128. package/server/dist/core/codex-terminal-signal-detect.d.ts +7 -0
  129. package/server/dist/core/codex-terminal-signal-detect.d.ts.map +1 -0
  130. package/server/dist/core/codex-terminal-signal-detect.js +113 -0
  131. package/server/dist/core/codex-terminal-signal-detect.js.map +1 -0
  132. package/server/dist/core/codex-thread-discovery.d.ts +21 -0
  133. package/server/dist/core/codex-thread-discovery.d.ts.map +1 -0
  134. package/server/dist/core/codex-thread-discovery.js +169 -0
  135. package/server/dist/core/codex-thread-discovery.js.map +1 -0
  136. package/server/dist/core/codextender-auth-file-sweep.d.ts +41 -0
  137. package/server/dist/core/codextender-auth-file-sweep.d.ts.map +1 -0
  138. package/server/dist/core/codextender-auth-file-sweep.js +97 -0
  139. package/server/dist/core/codextender-auth-file-sweep.js.map +1 -0
  140. package/server/dist/core/codextender-proxy-probe.d.ts +80 -0
  141. package/server/dist/core/codextender-proxy-probe.d.ts.map +1 -0
  142. package/server/dist/core/codextender-proxy-probe.js +179 -0
  143. package/server/dist/core/codextender-proxy-probe.js.map +1 -0
  144. package/server/dist/core/contract-version.d.ts +16 -1
  145. package/server/dist/core/contract-version.d.ts.map +1 -1
  146. package/server/dist/core/contract-version.js +16 -1
  147. package/server/dist/core/contract-version.js.map +1 -1
  148. package/server/dist/core/launcher-codex.d.ts +61 -0
  149. package/server/dist/core/launcher-codex.d.ts.map +1 -0
  150. package/server/dist/core/launcher-codex.js +187 -0
  151. package/server/dist/core/launcher-codex.js.map +1 -0
  152. package/server/dist/core/launcher-codextender-env.d.ts +44 -0
  153. package/server/dist/core/launcher-codextender-env.d.ts.map +1 -0
  154. package/server/dist/core/launcher-codextender-env.js +212 -0
  155. package/server/dist/core/launcher-codextender-env.js.map +1 -0
  156. package/server/dist/core/launcher-codextender.d.ts +72 -0
  157. package/server/dist/core/launcher-codextender.d.ts.map +1 -0
  158. package/server/dist/core/launcher-codextender.js +98 -0
  159. package/server/dist/core/launcher-codextender.js.map +1 -0
  160. package/server/dist/core/launcher-codextender.smoke-helpers.d.ts +25 -0
  161. package/server/dist/core/launcher-codextender.smoke-helpers.d.ts.map +1 -0
  162. package/server/dist/core/launcher-codextender.smoke-helpers.js +211 -0
  163. package/server/dist/core/launcher-codextender.smoke-helpers.js.map +1 -0
  164. package/server/dist/core/launcher-permission-flags.d.ts +17 -0
  165. package/server/dist/core/launcher-permission-flags.d.ts.map +1 -0
  166. package/server/dist/core/launcher-permission-flags.js +27 -0
  167. package/server/dist/core/launcher-permission-flags.js.map +1 -0
  168. package/server/dist/core/launcher.d.ts +18 -0
  169. package/server/dist/core/launcher.d.ts.map +1 -1
  170. package/server/dist/core/launcher.js +6 -0
  171. package/server/dist/core/launcher.js.map +1 -1
  172. package/server/dist/core/leadwright-preflight-transport.d.ts +27 -0
  173. package/server/dist/core/leadwright-preflight-transport.d.ts.map +1 -0
  174. package/server/dist/core/leadwright-preflight-transport.js +124 -0
  175. package/server/dist/core/leadwright-preflight-transport.js.map +1 -0
  176. package/server/dist/core/mission-context/artifacts-tests-ac.d.ts +6 -0
  177. package/server/dist/core/mission-context/artifacts-tests-ac.d.ts.map +1 -0
  178. package/server/dist/core/mission-context/artifacts-tests-ac.js +31 -0
  179. package/server/dist/core/mission-context/artifacts-tests-ac.js.map +1 -0
  180. package/server/dist/core/mission-context/artifacts-tests.d.ts.map +1 -1
  181. package/server/dist/core/mission-context/artifacts-tests.js +20 -0
  182. package/server/dist/core/mission-context/artifacts-tests.js.map +1 -1
  183. package/server/dist/core/mission-context/resolver-io.d.ts +10 -0
  184. package/server/dist/core/mission-context/resolver-io.d.ts.map +1 -1
  185. package/server/dist/core/mission-context/resolver-parts.d.ts +8 -7
  186. package/server/dist/core/mission-context/resolver-parts.d.ts.map +1 -1
  187. package/server/dist/core/mission-context/resolver-parts.js +22 -14
  188. package/server/dist/core/mission-context/resolver-parts.js.map +1 -1
  189. package/server/dist/core/mission-context/resolver.d.ts.map +1 -1
  190. package/server/dist/core/mission-context/resolver.js +1 -1
  191. package/server/dist/core/mission-context/resolver.js.map +1 -1
  192. package/server/dist/core/mission-context/run-id-recovery.d.ts +18 -2
  193. package/server/dist/core/mission-context/run-id-recovery.d.ts.map +1 -1
  194. package/server/dist/core/mission-context/run-id-recovery.js +38 -18
  195. package/server/dist/core/mission-context/run-id-recovery.js.map +1 -1
  196. package/server/dist/core/mission-context/traceability.d.ts.map +1 -1
  197. package/server/dist/core/mission-context/traceability.js +15 -1
  198. package/server/dist/core/mission-context/traceability.js.map +1 -1
  199. package/server/dist/core/mission-context/types-slice2.d.ts +44 -0
  200. package/server/dist/core/mission-context/types-slice2.d.ts.map +1 -1
  201. package/server/dist/core/model-tier-config-reader.d.ts +14 -1
  202. package/server/dist/core/model-tier-config-reader.d.ts.map +1 -1
  203. package/server/dist/core/model-tier-config-reader.js +34 -2
  204. package/server/dist/core/model-tier-config-reader.js.map +1 -1
  205. package/server/dist/core/powershell-probe.smoke-helpers.d.ts +12 -0
  206. package/server/dist/core/powershell-probe.smoke-helpers.d.ts.map +1 -0
  207. package/server/dist/core/powershell-probe.smoke-helpers.js +80 -0
  208. package/server/dist/core/powershell-probe.smoke-helpers.js.map +1 -0
  209. package/server/dist/core/readiness-install-hints.d.ts +1 -1
  210. package/server/dist/core/readiness-install-hints.d.ts.map +1 -1
  211. package/server/dist/core/readiness-install-hints.js +5 -0
  212. package/server/dist/core/readiness-install-hints.js.map +1 -1
  213. package/server/dist/core/readiness-probe-run.d.ts +61 -0
  214. package/server/dist/core/readiness-probe-run.d.ts.map +1 -1
  215. package/server/dist/core/readiness-probe-run.js +93 -15
  216. package/server/dist/core/readiness-probe-run.js.map +1 -1
  217. package/server/dist/core/readiness-probe.d.ts +1 -1
  218. package/server/dist/core/readiness-probe.d.ts.map +1 -1
  219. package/server/dist/core/readiness-probe.js +36 -8
  220. package/server/dist/core/readiness-probe.js.map +1 -1
  221. package/server/dist/core/sdk-sessions-store.d.ts +46 -0
  222. package/server/dist/core/sdk-sessions-store.d.ts.map +1 -1
  223. package/server/dist/core/sdk-sessions-store.js +1 -0
  224. package/server/dist/core/sdk-sessions-store.js.map +1 -1
  225. package/server/dist/core/sdk-sessions-validate.d.ts.map +1 -1
  226. package/server/dist/core/sdk-sessions-validate.js +11 -0
  227. package/server/dist/core/sdk-sessions-validate.js.map +1 -1
  228. package/server/dist/core/settings-reader.d.ts +18 -0
  229. package/server/dist/core/settings-reader.d.ts.map +1 -0
  230. package/server/dist/core/settings-reader.js +40 -0
  231. package/server/dist/core/settings-reader.js.map +1 -0
  232. package/server/dist/core/shell-quote.d.ts +29 -0
  233. package/server/dist/core/shell-quote.d.ts.map +1 -1
  234. package/server/dist/core/shell-quote.js +34 -0
  235. package/server/dist/core/shell-quote.js.map +1 -1
  236. package/server/dist/core/task-editability.d.ts +1 -1
  237. package/server/dist/core/task-editability.d.ts.map +1 -1
  238. package/server/dist/core/task-editability.js +1 -0
  239. package/server/dist/core/task-editability.js.map +1 -1
  240. package/server/dist/core/triage-cli-runner.d.ts.map +1 -1
  241. package/server/dist/core/triage-cli-runner.js +6 -21
  242. package/server/dist/core/triage-cli-runner.js.map +1 -1
  243. package/server/dist/core/triage-compose.d.ts.map +1 -1
  244. package/server/dist/core/triage-compose.js +34 -3
  245. package/server/dist/core/triage-compose.js.map +1 -1
  246. package/server/dist/core/triage-store.d.ts +2 -1
  247. package/server/dist/core/triage-store.d.ts.map +1 -1
  248. package/server/dist/core/triage-store.js +1 -1
  249. package/server/dist/core/triage-store.js.map +1 -1
  250. package/server/dist/external/create-external-routes-args.d.ts +122 -0
  251. package/server/dist/external/create-external-routes-args.d.ts.map +1 -0
  252. package/server/dist/external/create-external-routes-args.js +2 -0
  253. package/server/dist/external/create-external-routes-args.js.map +1 -0
  254. package/server/dist/external/inbox/_codex.d.ts +14 -0
  255. package/server/dist/external/inbox/_codex.d.ts.map +1 -0
  256. package/server/dist/external/inbox/_codex.js +88 -0
  257. package/server/dist/external/inbox/_codex.js.map +1 -0
  258. package/server/dist/external/inbox/_derive.d.ts.map +1 -1
  259. package/server/dist/external/inbox/_derive.js +11 -0
  260. package/server/dist/external/inbox/_derive.js.map +1 -1
  261. package/server/dist/external/inbox/_types.d.ts +23 -0
  262. package/server/dist/external/inbox/_types.d.ts.map +1 -1
  263. package/server/dist/external/inbox/_types.js +8 -5
  264. package/server/dist/external/inbox/_types.js.map +1 -1
  265. package/server/dist/external/inbox/routes.d.ts +7 -0
  266. package/server/dist/external/inbox/routes.d.ts.map +1 -1
  267. package/server/dist/external/inbox/routes.js +15 -2
  268. package/server/dist/external/inbox/routes.js.map +1 -1
  269. package/server/dist/external/launch/_helpers.d.ts +4 -0
  270. package/server/dist/external/launch/_helpers.d.ts.map +1 -1
  271. package/server/dist/external/launch/_helpers.js.map +1 -1
  272. package/server/dist/external/launch/action-substitution-branch.d.ts +12 -0
  273. package/server/dist/external/launch/action-substitution-branch.d.ts.map +1 -1
  274. package/server/dist/external/launch/action-substitution-branch.js +35 -1
  275. package/server/dist/external/launch/action-substitution-branch.js.map +1 -1
  276. package/server/dist/external/launch/branch-dispatch.d.ts +15 -0
  277. package/server/dist/external/launch/branch-dispatch.d.ts.map +1 -0
  278. package/server/dist/external/launch/branch-dispatch.js +73 -0
  279. package/server/dist/external/launch/branch-dispatch.js.map +1 -0
  280. package/server/dist/external/launch/campaign-step-branch.d.ts +7 -1
  281. package/server/dist/external/launch/campaign-step-branch.d.ts.map +1 -1
  282. package/server/dist/external/launch/campaign-step-branch.js +70 -2
  283. package/server/dist/external/launch/campaign-step-branch.js.map +1 -1
  284. package/server/dist/external/launch/claim-executor-permissions.d.ts +31 -0
  285. package/server/dist/external/launch/claim-executor-permissions.d.ts.map +1 -0
  286. package/server/dist/external/launch/claim-executor-permissions.js +107 -0
  287. package/server/dist/external/launch/claim-executor-permissions.js.map +1 -0
  288. package/server/dist/external/launch/claim-executor-template-arming.d.ts +42 -0
  289. package/server/dist/external/launch/claim-executor-template-arming.d.ts.map +1 -0
  290. package/server/dist/external/launch/claim-executor-template-arming.js +121 -0
  291. package/server/dist/external/launch/claim-executor-template-arming.js.map +1 -0
  292. package/server/dist/external/launch/claim-holder-gate.d.ts +9 -0
  293. package/server/dist/external/launch/claim-holder-gate.d.ts.map +1 -1
  294. package/server/dist/external/launch/claim-holder-gate.js +10 -2
  295. package/server/dist/external/launch/claim-holder-gate.js.map +1 -1
  296. package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts +3 -0
  297. package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts.map +1 -0
  298. package/server/dist/external/launch/claim-permission-perimeter-assert.js +24 -0
  299. package/server/dist/external/launch/claim-permission-perimeter-assert.js.map +1 -0
  300. package/server/dist/external/launch/legacy-fallback-branch.d.ts +14 -0
  301. package/server/dist/external/launch/legacy-fallback-branch.d.ts.map +1 -1
  302. package/server/dist/external/launch/legacy-fallback-branch.js +3 -1
  303. package/server/dist/external/launch/legacy-fallback-branch.js.map +1 -1
  304. package/server/dist/external/launch/master-run-branch.js +2 -2
  305. package/server/dist/external/launch/master-run-branch.js.map +1 -1
  306. package/server/dist/external/launch/mixed-intents-guard.d.ts +10 -0
  307. package/server/dist/external/launch/mixed-intents-guard.d.ts.map +1 -0
  308. package/server/dist/external/launch/mixed-intents-guard.js +49 -0
  309. package/server/dist/external/launch/mixed-intents-guard.js.map +1 -0
  310. package/server/dist/external/launch/parse-body.d.ts +29 -0
  311. package/server/dist/external/launch/parse-body.d.ts.map +1 -1
  312. package/server/dist/external/launch/parse-body.js +66 -0
  313. package/server/dist/external/launch/parse-body.js.map +1 -1
  314. package/server/dist/external/launch/routes.d.ts +3 -0
  315. package/server/dist/external/launch/routes.d.ts.map +1 -1
  316. package/server/dist/external/launch/routes.js +76 -109
  317. package/server/dist/external/launch/routes.js.map +1 -1
  318. package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts +20 -0
  319. package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts.map +1 -0
  320. package/server/dist/external/launch/runtime-chokepoint-codextender.js +51 -0
  321. package/server/dist/external/launch/runtime-chokepoint-codextender.js.map +1 -0
  322. package/server/dist/external/launch/runtime-chokepoint-errors.d.ts +33 -0
  323. package/server/dist/external/launch/runtime-chokepoint-errors.d.ts.map +1 -0
  324. package/server/dist/external/launch/runtime-chokepoint-errors.js +63 -0
  325. package/server/dist/external/launch/runtime-chokepoint-errors.js.map +1 -0
  326. package/server/dist/external/launch/runtime-chokepoint.d.ts +120 -0
  327. package/server/dist/external/launch/runtime-chokepoint.d.ts.map +1 -0
  328. package/server/dist/external/launch/runtime-chokepoint.js +201 -0
  329. package/server/dist/external/launch/runtime-chokepoint.js.map +1 -0
  330. package/server/dist/external/mission-context/routes.d.ts +33 -27
  331. package/server/dist/external/mission-context/routes.d.ts.map +1 -1
  332. package/server/dist/external/mission-context/routes.js +30 -27
  333. package/server/dist/external/mission-context/routes.js.map +1 -1
  334. package/server/dist/external/mission-context/test-harness.d.ts +6 -0
  335. package/server/dist/external/mission-context/test-harness.d.ts.map +1 -1
  336. package/server/dist/external/mission-context/test-harness.js +6 -1
  337. package/server/dist/external/mission-context/test-harness.js.map +1 -1
  338. package/server/dist/external/mission-context/wire.d.ts.map +1 -1
  339. package/server/dist/external/mission-context/wire.js +24 -2
  340. package/server/dist/external/mission-context/wire.js.map +1 -1
  341. package/server/dist/external/org/audit-log.d.ts +19 -0
  342. package/server/dist/external/org/audit-log.d.ts.map +1 -1
  343. package/server/dist/external/org/audit-log.js +33 -18
  344. package/server/dist/external/org/audit-log.js.map +1 -1
  345. package/server/dist/external/org/beat-effect-audit-read.d.ts +15 -0
  346. package/server/dist/external/org/beat-effect-audit-read.d.ts.map +1 -0
  347. package/server/dist/external/org/beat-effect-audit-read.js +73 -0
  348. package/server/dist/external/org/beat-effect-audit-read.js.map +1 -0
  349. package/server/dist/external/org/beat-register-health.d.ts +57 -0
  350. package/server/dist/external/org/beat-register-health.d.ts.map +1 -0
  351. package/server/dist/external/org/beat-register-health.js +125 -0
  352. package/server/dist/external/org/beat-register-health.js.map +1 -0
  353. package/server/dist/external/org/beat-register-release-core.d.ts.map +1 -1
  354. package/server/dist/external/org/beat-register-release-core.js +4 -1
  355. package/server/dist/external/org/beat-register-release-core.js.map +1 -1
  356. package/server/dist/external/org/beat-register-release-request.d.ts +20 -0
  357. package/server/dist/external/org/beat-register-release-request.d.ts.map +1 -0
  358. package/server/dist/external/org/beat-register-release-request.js +92 -0
  359. package/server/dist/external/org/beat-register-release-request.js.map +1 -0
  360. package/server/dist/external/org/beat-register-release.d.ts +3 -1
  361. package/server/dist/external/org/beat-register-release.d.ts.map +1 -1
  362. package/server/dist/external/org/beat-register-release.js +15 -57
  363. package/server/dist/external/org/beat-register-release.js.map +1 -1
  364. package/server/dist/external/org/beat-register.d.ts +18 -20
  365. package/server/dist/external/org/beat-register.d.ts.map +1 -1
  366. package/server/dist/external/org/beat-register.js +30 -56
  367. package/server/dist/external/org/beat-register.js.map +1 -1
  368. package/server/dist/external/org/beat-steps-read.d.ts +17 -0
  369. package/server/dist/external/org/beat-steps-read.d.ts.map +1 -0
  370. package/server/dist/external/org/beat-steps-read.js +89 -0
  371. package/server/dist/external/org/beat-steps-read.js.map +1 -0
  372. package/server/dist/external/org/charter-authority-read.d.ts +39 -0
  373. package/server/dist/external/org/charter-authority-read.d.ts.map +1 -0
  374. package/server/dist/external/org/charter-authority-read.js +142 -0
  375. package/server/dist/external/org/charter-authority-read.js.map +1 -0
  376. package/server/dist/external/org/commit-validate.d.ts +18 -0
  377. package/server/dist/external/org/commit-validate.d.ts.map +1 -0
  378. package/server/dist/external/org/commit-validate.js +59 -0
  379. package/server/dist/external/org/commit-validate.js.map +1 -0
  380. package/server/dist/external/org/commit-writes.d.ts +68 -0
  381. package/server/dist/external/org/commit-writes.d.ts.map +1 -0
  382. package/server/dist/external/org/commit-writes.js +110 -0
  383. package/server/dist/external/org/commit-writes.js.map +1 -0
  384. package/server/dist/external/org/commit.d.ts +73 -0
  385. package/server/dist/external/org/commit.d.ts.map +1 -0
  386. package/server/dist/external/org/commit.js +181 -0
  387. package/server/dist/external/org/commit.js.map +1 -0
  388. package/server/dist/external/org/commit.test-fixtures.d.ts +38 -0
  389. package/server/dist/external/org/commit.test-fixtures.d.ts.map +1 -0
  390. package/server/dist/external/org/commit.test-fixtures.js +67 -0
  391. package/server/dist/external/org/commit.test-fixtures.js.map +1 -0
  392. package/server/dist/external/org/countersign-core.d.ts +19 -0
  393. package/server/dist/external/org/countersign-core.d.ts.map +1 -0
  394. package/server/dist/external/org/countersign-core.js +122 -0
  395. package/server/dist/external/org/countersign-core.js.map +1 -0
  396. package/server/dist/external/org/countersign-request.d.ts +14 -0
  397. package/server/dist/external/org/countersign-request.d.ts.map +1 -0
  398. package/server/dist/external/org/countersign-request.js +78 -0
  399. package/server/dist/external/org/countersign-request.js.map +1 -0
  400. package/server/dist/external/org/countersign.d.ts +6 -5
  401. package/server/dist/external/org/countersign.d.ts.map +1 -1
  402. package/server/dist/external/org/countersign.js +12 -141
  403. package/server/dist/external/org/countersign.js.map +1 -1
  404. package/server/dist/external/org/daemon-config-read.d.ts +31 -0
  405. package/server/dist/external/org/daemon-config-read.d.ts.map +1 -0
  406. package/server/dist/external/org/daemon-config-read.js +50 -0
  407. package/server/dist/external/org/daemon-config-read.js.map +1 -0
  408. package/server/dist/external/org/decisions-lock.d.ts +6 -4
  409. package/server/dist/external/org/decisions-lock.d.ts.map +1 -1
  410. package/server/dist/external/org/decisions-lock.js +9 -8
  411. package/server/dist/external/org/decisions-lock.js.map +1 -1
  412. package/server/dist/external/org/domains.d.ts +35 -0
  413. package/server/dist/external/org/domains.d.ts.map +1 -0
  414. package/server/dist/external/org/domains.js +29 -0
  415. package/server/dist/external/org/domains.js.map +1 -0
  416. package/server/dist/external/org/existing-charters-read.d.ts +5 -0
  417. package/server/dist/external/org/existing-charters-read.d.ts.map +1 -0
  418. package/server/dist/external/org/existing-charters-read.js +31 -0
  419. package/server/dist/external/org/existing-charters-read.js.map +1 -0
  420. package/server/dist/external/org/leadwright-proposal-merge.d.ts +54 -0
  421. package/server/dist/external/org/leadwright-proposal-merge.d.ts.map +1 -0
  422. package/server/dist/external/org/leadwright-proposal-merge.js +47 -0
  423. package/server/dist/external/org/leadwright-proposal-merge.js.map +1 -0
  424. package/server/dist/external/org/mount.d.ts +10 -2
  425. package/server/dist/external/org/mount.d.ts.map +1 -1
  426. package/server/dist/external/org/mount.js +6 -1
  427. package/server/dist/external/org/mount.js.map +1 -1
  428. package/server/dist/external/org/org-chart-full-read.d.ts +19 -0
  429. package/server/dist/external/org/org-chart-full-read.d.ts.map +1 -0
  430. package/server/dist/external/org/org-chart-full-read.js +58 -0
  431. package/server/dist/external/org/org-chart-full-read.js.map +1 -0
  432. package/server/dist/external/org/org-file-lock.d.ts +41 -0
  433. package/server/dist/external/org/org-file-lock.d.ts.map +1 -0
  434. package/server/dist/external/org/org-file-lock.js +90 -0
  435. package/server/dist/external/org/org-file-lock.js.map +1 -0
  436. package/server/dist/external/org/routes.d.ts +10 -0
  437. package/server/dist/external/org/routes.d.ts.map +1 -1
  438. package/server/dist/external/org/routes.js +22 -1
  439. package/server/dist/external/org/routes.js.map +1 -1
  440. package/server/dist/external/org/verdict.d.ts +57 -0
  441. package/server/dist/external/org/verdict.d.ts.map +1 -0
  442. package/server/dist/external/org/verdict.js +74 -0
  443. package/server/dist/external/org/verdict.js.map +1 -0
  444. package/server/dist/external/routes.d.ts +3 -101
  445. package/server/dist/external/routes.d.ts.map +1 -1
  446. package/server/dist/external/routes.js +19 -4
  447. package/server/dist/external/routes.js.map +1 -1
  448. package/server/dist/external/tasks/create.d.ts.map +1 -1
  449. package/server/dist/external/tasks/create.js +8 -0
  450. package/server/dist/external/tasks/create.js.map +1 -1
  451. package/server/dist/external/tasks/fork.d.ts +29 -0
  452. package/server/dist/external/tasks/fork.d.ts.map +1 -0
  453. package/server/dist/external/tasks/fork.js +166 -0
  454. package/server/dist/external/tasks/fork.js.map +1 -0
  455. package/server/dist/external/tasks/lifecycle.d.ts.map +1 -1
  456. package/server/dist/external/tasks/lifecycle.js +10 -57
  457. package/server/dist/external/tasks/lifecycle.js.map +1 -1
  458. package/server/dist/external/tasks/patch.d.ts.map +1 -1
  459. package/server/dist/external/tasks/patch.js +17 -0
  460. package/server/dist/external/tasks/patch.js.map +1 -1
  461. package/server/dist/external/tasks/routes.d.ts +2 -0
  462. package/server/dist/external/tasks/routes.d.ts.map +1 -1
  463. package/server/dist/external/tasks/routes.js +7 -0
  464. package/server/dist/external/tasks/routes.js.map +1 -1
  465. package/server/dist/external/transcript/routes.d.ts.map +1 -1
  466. package/server/dist/external/transcript/routes.js +25 -3
  467. package/server/dist/external/transcript/routes.js.map +1 -1
  468. package/server/dist/external-routes-wiring.d.ts +28 -0
  469. package/server/dist/external-routes-wiring.d.ts.map +1 -0
  470. package/server/dist/external-routes-wiring.js +61 -0
  471. package/server/dist/external-routes-wiring.js.map +1 -0
  472. package/server/dist/index.d.ts.map +1 -1
  473. package/server/dist/index.js +111 -44
  474. package/server/dist/index.js.map +1 -1
  475. package/server/dist/lib/resolveHonoHost.d.ts.map +1 -1
  476. package/server/dist/lib/resolveHonoHost.js +16 -1
  477. package/server/dist/lib/resolveHonoHost.js.map +1 -1
  478. package/server/dist/routes/_triage-api-harness.d.ts +1 -1
  479. package/server/dist/routes/_triage-api-harness.d.ts.map +1 -1
  480. package/server/dist/routes/_triage-api-harness.js.map +1 -1
  481. package/server/dist/routes/campaigns-readiness.d.ts +10 -0
  482. package/server/dist/routes/campaigns-readiness.d.ts.map +1 -0
  483. package/server/dist/routes/campaigns-readiness.js +58 -0
  484. package/server/dist/routes/campaigns-readiness.js.map +1 -0
  485. package/server/dist/routes/campaigns.d.ts.map +1 -1
  486. package/server/dist/routes/campaigns.js +3 -0
  487. package/server/dist/routes/campaigns.js.map +1 -1
  488. package/server/dist/routes/codex-models.d.ts +15 -0
  489. package/server/dist/routes/codex-models.d.ts.map +1 -0
  490. package/server/dist/routes/codex-models.js +77 -0
  491. package/server/dist/routes/codex-models.js.map +1 -0
  492. package/server/dist/routes/codextender-models.d.ts +16 -0
  493. package/server/dist/routes/codextender-models.d.ts.map +1 -0
  494. package/server/dist/routes/codextender-models.js +81 -0
  495. package/server/dist/routes/codextender-models.js.map +1 -0
  496. package/server/dist/routes/diagnostics.d.ts +15 -0
  497. package/server/dist/routes/diagnostics.d.ts.map +1 -1
  498. package/server/dist/routes/diagnostics.js +1 -0
  499. package/server/dist/routes/diagnostics.js.map +1 -1
  500. package/server/dist/routes/org-chart-lead-guard.d.ts +10 -0
  501. package/server/dist/routes/org-chart-lead-guard.d.ts.map +1 -0
  502. package/server/dist/routes/org-chart-lead-guard.js +49 -0
  503. package/server/dist/routes/org-chart-lead-guard.js.map +1 -0
  504. package/server/dist/routes/org-inventory-composite.d.ts +20 -0
  505. package/server/dist/routes/org-inventory-composite.d.ts.map +1 -0
  506. package/server/dist/routes/org-inventory-composite.js +100 -0
  507. package/server/dist/routes/org-inventory-composite.js.map +1 -0
  508. package/server/dist/routes/org-lead-setup-wizard.d.ts +10 -0
  509. package/server/dist/routes/org-lead-setup-wizard.d.ts.map +1 -0
  510. package/server/dist/routes/org-lead-setup-wizard.js +51 -0
  511. package/server/dist/routes/org-lead-setup-wizard.js.map +1 -0
  512. package/server/dist/routes/org-leads-composite.d.ts.map +1 -1
  513. package/server/dist/routes/org-leads-composite.js +35 -9
  514. package/server/dist/routes/org-leads-composite.js.map +1 -1
  515. package/server/dist/routes/org-writes.d.ts +14 -0
  516. package/server/dist/routes/org-writes.d.ts.map +1 -0
  517. package/server/dist/routes/org-writes.js +61 -0
  518. package/server/dist/routes/org-writes.js.map +1 -0
  519. package/server/dist/routes/org.d.ts +11 -2
  520. package/server/dist/routes/org.d.ts.map +1 -1
  521. package/server/dist/routes/org.js +50 -47
  522. package/server/dist/routes/org.js.map +1 -1
  523. package/server/dist/routes/settings.d.ts.map +1 -1
  524. package/server/dist/routes/settings.js +23 -2
  525. package/server/dist/routes/settings.js.map +1 -1
  526. package/server/dist/routes/triage.d.ts +17 -0
  527. package/server/dist/routes/triage.d.ts.map +1 -1
  528. package/server/dist/routes/triage.js +29 -0
  529. package/server/dist/routes/triage.js.map +1 -1
  530. package/server/dist/terminal/pty-manager.d.ts +14 -0
  531. package/server/dist/terminal/pty-manager.d.ts.map +1 -1
  532. package/server/dist/terminal/pty-manager.js +11 -0
  533. package/server/dist/terminal/pty-manager.js.map +1 -1
  534. package/server/dist/terminal/routes.d.ts.map +1 -1
  535. package/server/dist/terminal/routes.js +9 -0
  536. package/server/dist/terminal/routes.js.map +1 -1
  537. package/server/dist/terminal/ws-upgrade-handler.d.ts.map +1 -1
  538. package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts.map +1 -1
  539. package/server/dist/terminal/ws-upgrade-handler.fixtures.js +1 -0
  540. package/server/dist/terminal/ws-upgrade-handler.fixtures.js.map +1 -1
  541. package/server/dist/terminal/ws-upgrade-handler.js +14 -5
  542. package/server/dist/terminal/ws-upgrade-handler.js.map +1 -1
  543. package/server/dist/test/event-test-counts-fixtures.d.ts +40 -0
  544. package/server/dist/test/event-test-counts-fixtures.d.ts.map +1 -0
  545. package/server/dist/test/event-test-counts-fixtures.js +56 -0
  546. package/server/dist/test/event-test-counts-fixtures.js.map +1 -0
  547. package/server/dist/types/leadwright-beat-step.d.ts +19 -0
  548. package/server/dist/types/leadwright-beat-step.d.ts.map +1 -0
  549. package/server/dist/types/leadwright-beat-step.js +56 -0
  550. package/server/dist/types/leadwright-beat-step.js.map +1 -0
  551. package/server/dist/types/leadwright-preflight.d.ts +90 -0
  552. package/server/dist/types/leadwright-preflight.d.ts.map +1 -0
  553. package/server/dist/types/leadwright-preflight.js +65 -0
  554. package/server/dist/types/leadwright-preflight.js.map +1 -0
  555. package/server/dist/types/leadwright-schema-drift.d.ts +28 -0
  556. package/server/dist/types/leadwright-schema-drift.d.ts.map +1 -0
  557. package/server/dist/types/leadwright-schema-drift.js +89 -0
  558. package/server/dist/types/leadwright-schema-drift.js.map +1 -0
  559. package/server/dist/types/org-inventory.d.ts +53 -0
  560. package/server/dist/types/org-inventory.d.ts.map +1 -0
  561. package/server/dist/types/org-inventory.js +11 -0
  562. package/server/dist/types/org-inventory.js.map +1 -0
  563. package/server/dist/types/org.d.ts +57 -6
  564. package/server/dist/types/org.d.ts.map +1 -1
  565. package/server/dist/types/run-config-retry.d.ts +29 -0
  566. package/server/dist/types/run-config-retry.d.ts.map +1 -0
  567. package/server/dist/types/run-config-retry.js +47 -0
  568. package/server/dist/types/run-config-retry.js.map +1 -0
  569. package/server/dist/types/run-config-v2.d.ts +29 -41
  570. package/server/dist/types/run-config-v2.d.ts.map +1 -1
  571. package/server/dist/types/run-config-v2.js +16 -50
  572. package/server/dist/types/run-config-v2.js.map +1 -1
  573. package/server/dist/types/settings.d.ts +33 -0
  574. package/server/dist/types/settings.d.ts.map +1 -1
  575. package/server/dist/vendor/leadwright/beat-step.schema.json +83 -0
  576. package/server/dist/vendor/leadwright/claim-record-lock-contract.json +15 -0
  577. package/server/dist/vendor/leadwright/org-chart.schema.json +195 -0
  578. package/server/dist/vendor/leadwright/preflight-input.schema.json +318 -0
  579. package/server/dist/vendor/leadwright/preflight-result.schema.json +56 -0
  580. package/server/package.json +1 -1
  581. package/client/dist/assets/channel-BfmIcrp7.js +0 -1
  582. package/client/dist/assets/classDiagram-OUVF2IWQ-HfUQZ6Uc.js +0 -1
  583. package/client/dist/assets/classDiagram-v2-EOCWNBFH-HfUQZ6Uc.js +0 -1
  584. package/client/dist/assets/index-CKU9dY18.css +0 -1
  585. package/client/dist/assets/index-DOMl6atu.js +0 -847
  586. package/client/dist/assets/stateDiagram-v2-6OUMAXLB-srkiu3Ib.js +0 -1
  587. package/client/dist/assets/swimlanesDiagram-G3AALYLV-Dq-0K9Zm.js +0 -8
@@ -0,0 +1,169 @@
1
+ /*
2
+ * core/codex-thread-discovery.ts — Codex Light §4's missing piece: how a
3
+ * fresh Codex launch's `threadId` actually gets captured. v1 launches Codex
4
+ * as a plain interactive TUI in a pty (§2.2) — there is no app-server call
5
+ * (deferred to Stage 2) and no `--session-id`-equivalent flag Codex accepts
6
+ * at the top level (`codex --help`, verified live against an installed
7
+ * Codex CLI: no such flag exists), so the id must be DISCOVERED after the
8
+ * fact, filename-first — the exact pattern CLAUDE.md rule 3 already uses
9
+ * for Claude's own JSONL discovery.
10
+ *
11
+ * Verified live (2026-09-16, codex-cli 0.147.0) against a real installed
12
+ * Codex CLI: every session — interactive or subagent — writes a rollout
13
+ * file to `~/.codex/sessions/<local-YYYY>/<local-MM>/<local-DD>/rollout-
14
+ * <local-ISO-with-dashes-for-colons>-<thread-id>.jsonl`, whose FIRST line
15
+ * is always `{"type":"session_meta","payload":{"id":"<thread-id>","cwd":
16
+ * "<abs-path>",...}}` — the thread id is in the filename AND the first
17
+ * line's payload, mirroring the filename-first + first-line-sanity-check
18
+ * shape Claude's own discovery already uses. `cwd` is the launch working
19
+ * directory verbatim (OS-native separators), letting us match a rollout
20
+ * file to the task that spawned it without Codex ever needing to accept a
21
+ * caller-supplied id.
22
+ *
23
+ * Consumed by `CodexTaskWatcher` (`codex-task-watcher.ts`): on every tick,
24
+ * a live Codex task with no `threadId` yet gets one discovery attempt;
25
+ * `null` is not an error (the rollout file may not have flushed to disk
26
+ * yet, or Codex may still be starting up) — the caller just retries next
27
+ * tick. Once found, `threadId` is patched onto the task record and the
28
+ * §4 resume branch (`runtime-chokepoint.ts`'s `resume = Boolean(task.
29
+ * threadId)`) starts working on the task's next launch.
30
+ *
31
+ * Known, accepted limitation (doubt-review, disposition: documented, not
32
+ * fixed): matching is purely (cwd, launch-time window) — there is no
33
+ * possession/identity proof tying a candidate rollout file to THIS
34
+ * webui-spawned pty specifically. An operator manually running `codex` in
35
+ * the same project directory, in another terminal, within the same
36
+ * discovery window would produce an indistinguishable rollout file; if it
37
+ * happens to be the earliest unclaimed match, it gets bound to the wrong
38
+ * task (and, once `threadId` is set, discovery never re-runs for that
39
+ * task, so the mistake is not self-correcting). Accepted because it needs
40
+ * an external actor deliberately racing the exact window, has no
41
+ * destructive blast radius (a wrong `threadId` just makes `codex resume`
42
+ * on the Resume button open the wrong-but-still-real thread, not corrupt
43
+ * anything), and there is no stronger signal Codex's CLI exposes to
44
+ * disambiguate against in v1.
45
+ */
46
+ import fsPromises from "node:fs/promises";
47
+ import os from "node:os";
48
+ import path from "node:path";
49
+ const ROLLOUT_RE = /^rollout-(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2})-([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\.jsonl$/;
50
+ /**
51
+ * Disposition (doubt-review, low-severity, accepted not fixed): if a
52
+ * rollout file's first `session_meta` JSON line ever exceeds this many
53
+ * bytes, `JSON.parse` on the truncated head throws, the candidate is
54
+ * skipped, and — with no larger-buffer retry — that task's discovery
55
+ * fails identically on every later tick (permanent, not degrading: the
56
+ * `resume` branch never fires and every "Resume" click silently
57
+ * relaunches fresh). Accepted because the verified real `session_meta`
58
+ * line (module header) is compact, and 4KB is a generous margin over it;
59
+ * revisit with a retry-on-parse-failure if a future Codex CLI version
60
+ * ever grows this payload.
61
+ */
62
+ const HEAD_BYTES = 4096;
63
+ export function codexSessionsRoot(deps) {
64
+ return path.join(deps.homeDir(), ".codex", "sessions");
65
+ }
66
+ function normalizeCwd(p) {
67
+ return p.replace(/\\/g, "/").replace(/\/+$/, "").toLowerCase();
68
+ }
69
+ /** The launch day plus a one-day hedge either side, against a local-midnight folder-boundary race. */
70
+ function dayFolders(since) {
71
+ const days = [-1, 0, 1].map((offset) => {
72
+ const d = new Date(since.getTime());
73
+ d.setDate(d.getDate() + offset);
74
+ const y = String(d.getFullYear());
75
+ const m = String(d.getMonth() + 1).padStart(2, "0");
76
+ const day = String(d.getDate()).padStart(2, "0");
77
+ return path.join(y, m, day);
78
+ });
79
+ return [...new Set(days)];
80
+ }
81
+ function parseFilenameTimestamp(stamp) {
82
+ // "2026-09-16T07-32-17" -> "2026-09-16T07:32:17" (local — no zone suffix,
83
+ // matching how `new Date()` already parses a zone-less ISO string: local).
84
+ const iso = stamp.replace(/T(\d{2})-(\d{2})-(\d{2})$/, "T$1:$2:$3");
85
+ const t = new Date(iso).getTime();
86
+ return Number.isNaN(t) ? 0 : t;
87
+ }
88
+ /**
89
+ * Best-effort, filename-first discovery of the thread id a fresh Codex
90
+ * launch produced. Returns `null` (not an error) when nothing matches yet.
91
+ */
92
+ export async function discoverCodexThreadId(args, deps) {
93
+ const since = new Date(args.sinceIso);
94
+ if (Number.isNaN(since.getTime()))
95
+ return null;
96
+ const sinceMs = since.getTime() - 5_000; // small clock-skew grace
97
+ const wantCwd = normalizeCwd(args.cwd);
98
+ const root = codexSessionsRoot(deps);
99
+ const candidates = [];
100
+ for (const folder of dayFolders(since)) {
101
+ const dir = path.join(root, folder);
102
+ let names;
103
+ try {
104
+ names = await deps.readdir(dir);
105
+ }
106
+ catch {
107
+ continue;
108
+ }
109
+ for (const name of names) {
110
+ const m = ROLLOUT_RE.exec(name);
111
+ if (!m)
112
+ continue;
113
+ const threadId = m[2];
114
+ if (args.excludeThreadIds?.has(threadId))
115
+ continue;
116
+ const ts = parseFilenameTimestamp(m[1]);
117
+ if (ts < sinceMs)
118
+ continue;
119
+ candidates.push({ ts, threadId, file: path.join(dir, name) });
120
+ }
121
+ }
122
+ candidates.sort((a, b) => a.ts - b.ts);
123
+ for (const candidate of candidates) {
124
+ let head;
125
+ try {
126
+ head = await deps.readHead(candidate.file, HEAD_BYTES);
127
+ }
128
+ catch {
129
+ continue;
130
+ }
131
+ const firstLine = head.split("\n", 1)[0];
132
+ let parsed;
133
+ try {
134
+ parsed = JSON.parse(firstLine);
135
+ }
136
+ catch {
137
+ continue;
138
+ }
139
+ if (!parsed || typeof parsed !== "object")
140
+ continue;
141
+ if (parsed.type !== "session_meta")
142
+ continue;
143
+ const payload = parsed.payload;
144
+ if (!payload || typeof payload !== "object")
145
+ continue;
146
+ const id = payload.id;
147
+ const cwd = payload.cwd;
148
+ if (typeof id === "string" && typeof cwd === "string" && normalizeCwd(cwd) === wantCwd) {
149
+ return id;
150
+ }
151
+ }
152
+ return null;
153
+ }
154
+ export const defaultCodexThreadDiscoveryDeps = {
155
+ readdir: (dir) => fsPromises.readdir(dir),
156
+ readHead: async (filePath, maxBytes) => {
157
+ const fh = await fsPromises.open(filePath, "r");
158
+ try {
159
+ const buf = Buffer.alloc(maxBytes);
160
+ const { bytesRead } = await fh.read(buf, 0, maxBytes, 0);
161
+ return buf.toString("utf-8", 0, bytesRead);
162
+ }
163
+ finally {
164
+ await fh.close();
165
+ }
166
+ },
167
+ homeDir: () => os.homedir(),
168
+ };
169
+ //# sourceMappingURL=codex-thread-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-thread-discovery.js","sourceRoot":"","sources":["../../src/core/codex-thread-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Default reclamation age (10 min) — deliberately much shorter than
3
+ * `snapshot-tmp-sweep.ts`'s 1h default: this file holds a LIVE credential,
4
+ * not just terminal cell-state, and a normal launch's own cleanup deletes it
5
+ * within seconds of the `claude` invocation exiting.
6
+ */
7
+ export declare const DEFAULT_CODEXTENDER_AUTH_TMP_MAX_AGE_MS: number;
8
+ export interface CodextenderAuthFileSweepDeps {
9
+ readdir: (dir: string) => Promise<string[]>;
10
+ stat: (p: string) => Promise<{
11
+ mtimeMs: number;
12
+ }>;
13
+ unlink: (p: string) => Promise<void>;
14
+ }
15
+ export interface CodextenderAuthFileSweepOpts {
16
+ dir: string;
17
+ /** Reclaim tmp files whose mtime is older than this. Default 10 min. */
18
+ maxAgeMs?: number;
19
+ deps?: Partial<CodextenderAuthFileSweepDeps>;
20
+ /** Injected for tests. Defaults to Date.now. */
21
+ now?: () => number;
22
+ logWarn?: (msg: string) => void;
23
+ logInfo?: (msg: string) => void;
24
+ }
25
+ export interface CodextenderAuthFileSweepResult {
26
+ /** stale credential files unlinked. */
27
+ deleted: number;
28
+ /** stat/unlink failures (kept going). */
29
+ errors: number;
30
+ /** files younger than the cutoff, left in place (still in use). */
31
+ preserved: number;
32
+ }
33
+ /**
34
+ * Age-gated sweep of orphaned `codextender-auth-*.tmp` credential files.
35
+ * Best-effort: dir-read failure and per-file failures are non-fatal (they
36
+ * log a warn and never throw) — the same posture `sweepOrphanSnapshotTmp`
37
+ * takes, for the same reason (a sweep failure must never crash boot or the
38
+ * periodic timer).
39
+ */
40
+ export declare function sweepOrphanCodextenderAuthFiles(opts: CodextenderAuthFileSweepOpts): Promise<CodextenderAuthFileSweepResult>;
41
+ //# sourceMappingURL=codextender-auth-file-sweep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codextender-auth-file-sweep.d.ts","sourceRoot":"","sources":["../../src/core/codextender-auth-file-sweep.ts"],"names":[],"mappings":"AA8BA;;;;;GAKG;AACH,eAAO,MAAM,uCAAuC,QAAiB,CAAC;AAEtE,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAC7C,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,8BAA8B;IAC7C,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,8BAA8B,CAAC,CAoDzC"}
@@ -0,0 +1,97 @@
1
+ /*
2
+ * codextender-auth-file-sweep.ts — bounded reclamation of orphaned
3
+ * `codextender-auth-*.tmp` credential files (PR-review round 10, iterate-
4
+ * 2026-09-23; Sven's own decision on the CI-BLOCKed design question).
5
+ *
6
+ * `writeCodextenderAuthTokenFile` (launcher-codextender.ts) writes the
7
+ * Codextender proxy's bearer token to a private `0o600` temp file once per
8
+ * launch; the generated command's cleanup suffix deletes it right after the
9
+ * `claude` invocation exits. If the command is never executed (copied out
10
+ * instead of auto-run), the pty is killed before the suffix runs, or launch
11
+ * fails before a command is ever returned to run, that delete step never
12
+ * fires and the file is stranded — the exact gap the required `PR Review`
13
+ * CI gate BLOCKed twice on. Mirrors `snapshot-tmp-sweep.ts`'s shape (same
14
+ * age-gated, best-effort, injectable-deps design) for the same reason: a
15
+ * live write's own cleanup runs within seconds, so anything older than the
16
+ * cutoff is provably orphaned — no active-task veto needed.
17
+ *
18
+ * Wired into the boot + periodic sweep in index.ts alongside the scrollback
19
+ * and snapshot-tmp sweeps. Unlike those two (scoped to the terminal
20
+ * scrollback dir), this one scans `os.tmpdir()` — where
21
+ * `writeCodextenderAuthTokenFile` actually writes — so `dir` is threaded
22
+ * through for testability rather than hardcoded.
23
+ */
24
+ import * as fsAsync from "node:fs/promises";
25
+ import * as path from "node:path";
26
+ /** Matches `codextender-auth-<uuid>.tmp`. Bounded — ReDoS-safe. */
27
+ const CODEXTENDER_AUTH_TMP_RE = /^codextender-auth-[0-9a-fA-F-]{36}\.tmp$/;
28
+ /**
29
+ * Default reclamation age (10 min) — deliberately much shorter than
30
+ * `snapshot-tmp-sweep.ts`'s 1h default: this file holds a LIVE credential,
31
+ * not just terminal cell-state, and a normal launch's own cleanup deletes it
32
+ * within seconds of the `claude` invocation exiting.
33
+ */
34
+ export const DEFAULT_CODEXTENDER_AUTH_TMP_MAX_AGE_MS = 10 * 60 * 1000;
35
+ const defaultDeps = {
36
+ readdir: (dir) => fsAsync.readdir(dir),
37
+ stat: (p) => fsAsync.stat(p),
38
+ unlink: (p) => fsAsync.unlink(p),
39
+ };
40
+ /**
41
+ * Age-gated sweep of orphaned `codextender-auth-*.tmp` credential files.
42
+ * Best-effort: dir-read failure and per-file failures are non-fatal (they
43
+ * log a warn and never throw) — the same posture `sweepOrphanSnapshotTmp`
44
+ * takes, for the same reason (a sweep failure must never crash boot or the
45
+ * periodic timer).
46
+ */
47
+ export async function sweepOrphanCodextenderAuthFiles(opts) {
48
+ const deps = { ...defaultDeps, ...opts.deps };
49
+ const now = opts.now ?? Date.now;
50
+ const logWarn = opts.logWarn ?? ((m) => console.warn(m));
51
+ const logInfo = opts.logInfo ?? ((m) => console.log(m));
52
+ const cutoff = now() - (opts.maxAgeMs ?? DEFAULT_CODEXTENDER_AUTH_TMP_MAX_AGE_MS);
53
+ const result = { deleted: 0, errors: 0, preserved: 0 };
54
+ let entries;
55
+ try {
56
+ entries = await deps.readdir(opts.dir);
57
+ }
58
+ catch (err) {
59
+ // ENOENT = dir not created yet (benign). Any other error (EACCES/EPERM/
60
+ // EIO) is a real operational failure that leaves credential files on
61
+ // disk — surface it so the gap stays visible; this function never throws.
62
+ if (err.code !== "ENOENT") {
63
+ logWarn(`[codextender-auth-sweep] readdir failed (${err.message}); orphan credential files may persist`);
64
+ }
65
+ return result;
66
+ }
67
+ for (const name of entries) {
68
+ if (!CODEXTENDER_AUTH_TMP_RE.test(name))
69
+ continue;
70
+ const full = path.join(opts.dir, name);
71
+ let mtimeMs;
72
+ try {
73
+ mtimeMs = (await deps.stat(full)).mtimeMs;
74
+ }
75
+ catch {
76
+ result.errors++;
77
+ continue;
78
+ }
79
+ if (mtimeMs >= cutoff) {
80
+ result.preserved++;
81
+ continue;
82
+ }
83
+ try {
84
+ await deps.unlink(full);
85
+ result.deleted++;
86
+ }
87
+ catch (err) {
88
+ result.errors++;
89
+ logWarn(`[codextender-auth-sweep] unlink failed for ${name}: ${err.message}`);
90
+ }
91
+ }
92
+ if (result.deleted > 0 || result.errors > 0) {
93
+ logInfo(`[codextender-auth-sweep] orphan sweep: deleted=${result.deleted} errors=${result.errors} preserved=${result.preserved}`);
94
+ }
95
+ return result;
96
+ }
97
+ //# sourceMappingURL=codextender-auth-file-sweep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codextender-auth-file-sweep.js","sourceRoot":"","sources":["../../src/core/codextender-auth-file-sweep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * `codextenderPort` is persisted/read as arbitrary JSON (PUT /api/settings
3
+ * accepts an unvalidated body; a hand-edited settings.json is untyped on
4
+ * disk too) before ever reaching here, so `port: number`'s compile-time
5
+ * type is not a runtime guarantee. Both probes below MUST reject anything
6
+ * outside a real TCP port before interpolating it into a URL — a value
7
+ * like `"4000@attacker.example"` would otherwise redirect the request via
8
+ * URL userinfo-authority confusion (PR-review BLOCK, iterate-2026-09-23
9
+ * fifth round). This is the enforcement point regardless of how an invalid
10
+ * value got in; `routes/settings.ts`'s PUT-time rejection (same finding)
11
+ * is defense-in-depth on top of it, not a substitute for it.
12
+ */
13
+ export declare function isValidCodextenderPort(value: unknown): value is number;
14
+ export interface CodextenderModelEntry {
15
+ slug: string;
16
+ display_name: string;
17
+ /** LiteLLM's declared context window for this alias (its `model_info.
18
+ * max_input_tokens`), when the proxy's `/v1/models` response carries one.
19
+ * Absent on an older/unpatched proxy — callers must treat that the same
20
+ * as "unknown", never assume a number. */
21
+ max_input_tokens?: number;
22
+ }
23
+ export interface CodextenderProbeResult {
24
+ ok: boolean;
25
+ models: CodextenderModelEntry[];
26
+ }
27
+ export interface CodextenderProbeDeps {
28
+ /** Test seam — defaults to the real global `fetch`. */
29
+ fetchFn?: typeof fetch;
30
+ /** Probe timeout in ms. Default 1500 — short enough that a launch or a
31
+ * datalist render never feels stuck on an unreachable proxy. */
32
+ timeoutMs?: number;
33
+ /** Test seam — defaults to `resolveCodextenderAuthToken()` (reads
34
+ * `process.env.CODEXTENDER_AUTH_TOKEN`, no built-in fallback). */
35
+ authToken?: string;
36
+ }
37
+ /**
38
+ * `GET http://127.0.0.1:<port>/v1/models` with the configured Codextender
39
+ * master-key bearer token (`deps.authToken` or `resolveCodextenderAuthToken()`).
40
+ * Never throws — an unconfigured token, any network error, non-2xx status,
41
+ * timeout, or malformed body all resolve `{ok: false, models: []}` rather
42
+ * than rejecting, so callers never need a try/catch.
43
+ *
44
+ * LiteLLM's `/v1/models` response is OpenAI-shaped (`{"data": [{"id":
45
+ * "sol"}, ...]}`) — it carries no separate display name, so `display_name`
46
+ * is set to the same slug (matches `codex-models-probe.ts`'s
47
+ * `CodexModelCatalogEntry` shape for the client's shared consumer).
48
+ */
49
+ export declare function probeCodextenderModels(port: number, deps?: CodextenderProbeDeps): Promise<CodextenderProbeResult>;
50
+ /**
51
+ * Resolves the REAL context window for the Codextender alias a task is
52
+ * about to launch with, straight from the proxy's own `/v1/models` response
53
+ * (operator finding, 2026-09-26, live Codextender iterate test) — never a
54
+ * number hardcoded here a second time. Claude Code assumes a 200K context
55
+ * window for any model id it doesn't recognize (the Codex alias is one) and
56
+ * proactively over-compacts against that wrong, much-too-small ceiling; the
57
+ * fix is `launcher-codextender.ts` setting `CLAUDE_CODE_MAX_CONTEXT_TOKENS`
58
+ * from THIS value, so a change to codextender's own declared window (its
59
+ * `config.py` `model_info.max_input_tokens`) can never drift out of sync
60
+ * with what webui tells Claude Code — both repos read the same live number.
61
+ *
62
+ * Never throws, same contract as `probeCodextenderModels` — resolves
63
+ * `undefined` (not a guessed fallback) when the probe fails, the alias
64
+ * isn't in the response, or the response carries no usable
65
+ * `max_input_tokens` for it (an older/unpatched proxy). The caller's
66
+ * contract for `undefined` is "leave `CLAUDE_CODE_MAX_CONTEXT_TOKENS`
67
+ * unset", which is the conservative, safe default — Claude Code's own 200K
68
+ * fallback — rather than risking an inflated ceiling that starves
69
+ * compaction entirely.
70
+ */
71
+ export declare function resolveCodextenderMaxContextTokens(port: number, model: string | undefined, deps?: CodextenderProbeDeps): Promise<number | undefined>;
72
+ /**
73
+ * `GET http://127.0.0.1:<port>/health/liveliness` — no auth header
74
+ * required (confirmed live against a real local LiteLLM proxy). This is
75
+ * the AC8 pre-flight probe: it only needs to know the proxy process is up
76
+ * and answering, not what it serves. Never throws — same
77
+ * never-reject contract as `probeCodextenderModels`.
78
+ */
79
+ export declare function probeCodextenderLiveness(port: number, deps?: CodextenderProbeDeps): Promise<boolean>;
80
+ //# sourceMappingURL=codextender-proxy-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codextender-proxy-probe.d.ts","sourceRoot":"","sources":["../../src/core/codextender-proxy-probe.ts"],"names":[],"mappings":"AAmCA;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAOtE;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB;;;+CAG2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB;qEACiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;uEACmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsBD;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAmCjC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,kCAAkC,CACtD,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM7B;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
@@ -0,0 +1,179 @@
1
+ /*
2
+ * codextender-proxy-probe — HTTP probes of the local Codextender (LiteLLM)
3
+ * proxy (Codextender integration spec Part B.3/B.5, re-verified live
4
+ * 2026-09-23).
5
+ *
6
+ * Two distinct endpoints, deliberately not collapsed into one probe:
7
+ * - `probeCodextenderLiveness` -> `GET /health/liveliness`, no auth
8
+ * header. This is the AC8 pre-flight check (`runtime-chokepoint.ts`'s
9
+ * `checkCodextenderProxyAvailable` default, and its fork-route
10
+ * equivalent in `external/tasks/fork.ts`) — a launch/fork only needs to
11
+ * know the proxy is UP, not what it serves.
12
+ * - `probeCodextenderModels` -> `GET /v1/models`, WITH
13
+ * `Authorization: Bearer <token>` where `<token>` comes from
14
+ * `process.env.CODEXTENDER_AUTH_TOKEN` (`resolveCodextenderAuthToken()`
15
+ * in `launcher-codextender.ts` — no built-in default, PR-review BLOCK,
16
+ * iterate-2026-09-23) — an unconfigured token degrades this probe to
17
+ * `{ok: false}` the same as an unreachable proxy, rather than sending a
18
+ * baked-in value. Confirmed live against a real local LiteLLM proxy: an
19
+ * unauthenticated `/v1/models` request returns `500` (a LiteLLM quirk,
20
+ * not a clean 401), so omitting the header makes every probe look like
21
+ * a hard failure regardless. Backs the cached `/api/codextender-models`
22
+ * route (`routes/codextender-models.ts`), which wraps this probe in a
23
+ * TTL cache mirroring `codex-models.ts`'s shape.
24
+ *
25
+ * Deliberately no CLI shell-out (unlike `codex-models-probe.ts`) — the
26
+ * proxy already speaks these two endpoints natively (LiteLLM's own
27
+ * built-in routes), so plain HTTP GETs are both the cheapest check and the
28
+ * datalist's real source.
29
+ */
30
+ import { DEFAULT_CODEXTENDER_MODEL_ALIAS, resolveCodextenderAuthToken, } from "./launcher-codextender.js";
31
+ /**
32
+ * `codextenderPort` is persisted/read as arbitrary JSON (PUT /api/settings
33
+ * accepts an unvalidated body; a hand-edited settings.json is untyped on
34
+ * disk too) before ever reaching here, so `port: number`'s compile-time
35
+ * type is not a runtime guarantee. Both probes below MUST reject anything
36
+ * outside a real TCP port before interpolating it into a URL — a value
37
+ * like `"4000@attacker.example"` would otherwise redirect the request via
38
+ * URL userinfo-authority confusion (PR-review BLOCK, iterate-2026-09-23
39
+ * fifth round). This is the enforcement point regardless of how an invalid
40
+ * value got in; `routes/settings.ts`'s PUT-time rejection (same finding)
41
+ * is defense-in-depth on top of it, not a substitute for it.
42
+ */
43
+ export function isValidCodextenderPort(value) {
44
+ return (typeof value === "number" &&
45
+ Number.isInteger(value) &&
46
+ value >= 1 &&
47
+ value <= 65535);
48
+ }
49
+ /**
50
+ * PR-review preflight BLOCK (round 14, 2026-09-26) — `max_input_tokens`
51
+ * lives under each entry's `model_info` object (LiteLLM's own extension to
52
+ * the OpenAI-shaped `/v1/models` list; codextender's operator finding
53
+ * describes its config as declaring the value "in its LiteLLM
54
+ * `model_info`"), NOT as a flat, top-level field on the entry. A flat
55
+ * `entry.max_input_tokens` is checked too, purely as a forward-compatible
56
+ * fallback in case a future LiteLLM/codextender version flattens it — the
57
+ * nested form is the one actually confirmed, so it takes precedence.
58
+ */
59
+ function extractMaxInputTokens(entry) {
60
+ const modelInfo = entry.model_info;
61
+ const nested = modelInfo && typeof modelInfo === "object"
62
+ ? modelInfo.max_input_tokens
63
+ : undefined;
64
+ const raw = nested ?? entry.max_input_tokens;
65
+ return typeof raw === "number" && Number.isInteger(raw) && raw > 0 ? raw : undefined;
66
+ }
67
+ /**
68
+ * `GET http://127.0.0.1:<port>/v1/models` with the configured Codextender
69
+ * master-key bearer token (`deps.authToken` or `resolveCodextenderAuthToken()`).
70
+ * Never throws — an unconfigured token, any network error, non-2xx status,
71
+ * timeout, or malformed body all resolve `{ok: false, models: []}` rather
72
+ * than rejecting, so callers never need a try/catch.
73
+ *
74
+ * LiteLLM's `/v1/models` response is OpenAI-shaped (`{"data": [{"id":
75
+ * "sol"}, ...]}`) — it carries no separate display name, so `display_name`
76
+ * is set to the same slug (matches `codex-models-probe.ts`'s
77
+ * `CodexModelCatalogEntry` shape for the client's shared consumer).
78
+ */
79
+ export async function probeCodextenderModels(port, deps = {}) {
80
+ if (!isValidCodextenderPort(port))
81
+ return { ok: false, models: [] };
82
+ const authToken = deps.authToken ?? resolveCodextenderAuthToken();
83
+ if (!authToken)
84
+ return { ok: false, models: [] };
85
+ const fetchFn = deps.fetchFn ?? fetch;
86
+ const timeoutMs = deps.timeoutMs ?? 1500;
87
+ const controller = new AbortController();
88
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
89
+ try {
90
+ const res = await fetchFn(`http://127.0.0.1:${port}/v1/models`, {
91
+ signal: controller.signal,
92
+ headers: { Authorization: `Bearer ${authToken}` },
93
+ });
94
+ if (!res.ok)
95
+ return { ok: false, models: [] };
96
+ const body = await res.json();
97
+ const rawModels = body?.data;
98
+ if (!Array.isArray(rawModels))
99
+ return { ok: false, models: [] };
100
+ const models = [];
101
+ for (const entry of rawModels) {
102
+ if (!entry || typeof entry !== "object")
103
+ continue;
104
+ const id = entry.id;
105
+ if (typeof id !== "string" || id.trim() === "")
106
+ continue;
107
+ const maxInputTokens = extractMaxInputTokens(entry);
108
+ models.push({
109
+ slug: id,
110
+ display_name: id,
111
+ ...(maxInputTokens !== undefined ? { max_input_tokens: maxInputTokens } : {}),
112
+ });
113
+ }
114
+ return { ok: true, models };
115
+ }
116
+ catch {
117
+ return { ok: false, models: [] };
118
+ }
119
+ finally {
120
+ clearTimeout(timer);
121
+ }
122
+ }
123
+ /**
124
+ * Resolves the REAL context window for the Codextender alias a task is
125
+ * about to launch with, straight from the proxy's own `/v1/models` response
126
+ * (operator finding, 2026-09-26, live Codextender iterate test) — never a
127
+ * number hardcoded here a second time. Claude Code assumes a 200K context
128
+ * window for any model id it doesn't recognize (the Codex alias is one) and
129
+ * proactively over-compacts against that wrong, much-too-small ceiling; the
130
+ * fix is `launcher-codextender.ts` setting `CLAUDE_CODE_MAX_CONTEXT_TOKENS`
131
+ * from THIS value, so a change to codextender's own declared window (its
132
+ * `config.py` `model_info.max_input_tokens`) can never drift out of sync
133
+ * with what webui tells Claude Code — both repos read the same live number.
134
+ *
135
+ * Never throws, same contract as `probeCodextenderModels` — resolves
136
+ * `undefined` (not a guessed fallback) when the probe fails, the alias
137
+ * isn't in the response, or the response carries no usable
138
+ * `max_input_tokens` for it (an older/unpatched proxy). The caller's
139
+ * contract for `undefined` is "leave `CLAUDE_CODE_MAX_CONTEXT_TOKENS`
140
+ * unset", which is the conservative, safe default — Claude Code's own 200K
141
+ * fallback — rather than risking an inflated ceiling that starves
142
+ * compaction entirely.
143
+ */
144
+ export async function resolveCodextenderMaxContextTokens(port, model, deps = {}) {
145
+ const alias = model?.trim() || DEFAULT_CODEXTENDER_MODEL_ALIAS;
146
+ const result = await probeCodextenderModels(port, deps);
147
+ if (!result.ok)
148
+ return undefined;
149
+ const entry = result.models.find((m) => m.slug === alias);
150
+ return entry?.max_input_tokens;
151
+ }
152
+ /**
153
+ * `GET http://127.0.0.1:<port>/health/liveliness` — no auth header
154
+ * required (confirmed live against a real local LiteLLM proxy). This is
155
+ * the AC8 pre-flight probe: it only needs to know the proxy process is up
156
+ * and answering, not what it serves. Never throws — same
157
+ * never-reject contract as `probeCodextenderModels`.
158
+ */
159
+ export async function probeCodextenderLiveness(port, deps = {}) {
160
+ if (!isValidCodextenderPort(port))
161
+ return false;
162
+ const fetchFn = deps.fetchFn ?? fetch;
163
+ const timeoutMs = deps.timeoutMs ?? 1500;
164
+ const controller = new AbortController();
165
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
166
+ try {
167
+ const res = await fetchFn(`http://127.0.0.1:${port}/health/liveliness`, {
168
+ signal: controller.signal,
169
+ });
170
+ return res.ok;
171
+ }
172
+ catch {
173
+ return false;
174
+ }
175
+ finally {
176
+ clearTimeout(timer);
177
+ }
178
+ }
179
+ //# sourceMappingURL=codextender-proxy-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codextender-proxy-probe.js","sourceRoot":"","sources":["../../src/core/codextender-proxy-probe.ts"],"names":[],"mappings":"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"}
@@ -44,12 +44,27 @@ export declare const PROFILE_SCHEMA_VERSION = 1;
44
44
  * (it consumes `Object.values(requirements)` then inner `.id`/`.tests`), so v3
45
45
  * is a pure data-shape acknowledgement — no reader-logic change.
46
46
  *
47
+ * **v4** (shipwright monorepo campaign req3-04c-ac-identity-wave2, P3.2:
48
+ * "AC-scoped `@covers` tag grammar + test-traceability manifest v4") —
49
+ * additive AC-scoped test binding. A test link may carry an optional
50
+ * `ac_id` (e.g. `covers("FR-01.11/AC07")` → `"AC07"`), and a requirement
51
+ * node may carry an optional `acs` breakdown mirroring its own
52
+ * `tests`/`coverage` shape, scoped per AC. Both are OMITTED ENTIRELY when
53
+ * the requirement has no AC-scoped tag anywhere, so a repo with none of
54
+ * these tags yet emits a byte-identical v3-shaped body (only the
55
+ * `schema_version` const moves). This reader does not consume `ac_id` or
56
+ * `acs` — it still only reads `.id`/`.tests[<layer>][*].id/.layer/.resolved_from`,
57
+ * every one of which is unchanged and required in both v3 and v4 — so a
58
+ * v4 manifest with NO AC tags at all (a "v3-shaped bare FR tag" body) and
59
+ * one WITH AC tags both invert identically; frozen fixture in
60
+ * `traceability.v4-fixture.test.ts` pins both shapes.
61
+ *
47
62
  * A manifest declaring a HIGHER version is warned once (via
48
63
  * `checkContractVersion`) and still read best-effort — the inner shape the
49
64
  * reader consumes has been stable across the bumps seen so far, so an
50
65
  * ahead-of-us manifest still yields a useful index.
51
66
  */
52
- export declare const TRACEABILITY_SCHEMA_VERSION = 3;
67
+ export declare const TRACEABILITY_SCHEMA_VERSION = 4;
53
68
  /**
54
69
  * Check a parsed artefact's declared version against the library's
55
70
  * known max. Logs one JSON warning per (artefact, path, version)
@@ -1 +1 @@
1
- {"version":3,"file":"contract-version.d.ts","sourceRoot":"","sources":["../../src/core/contract-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAc7C;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAmDV;AAED,gEAAgE;AAChE,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
1
+ {"version":3,"file":"contract-version.d.ts","sourceRoot":"","sources":["../../src/core/contract-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAc7C;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAmDV;AAED,gEAAgE;AAChE,wBAAgB,cAAc,IAAI,IAAI,CAErC"}