@svenroth-ai/shipwright 0.26.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 (621) hide show
  1. package/client/dist/assets/{EmbeddedTerminal-D3wpPNZP.js → EmbeddedTerminal-4xgNUBUu.js} +19 -19
  2. package/client/dist/assets/{abnfDiagram-VRR7QNED-BkLIltB3.js → abnfDiagram-VRR7QNED-BdCNbaqc.js} +1 -1
  3. package/client/dist/assets/{arc-Sw-Gh0nI.js → arc-DoZTTE1N.js} +1 -1
  4. package/client/dist/assets/{architectureDiagram-ZJ3FMSHR-rdxUi9Ks.js → architectureDiagram-ZJ3FMSHR-DFTG4KtO.js} +1 -1
  5. package/client/dist/assets/{blockDiagram-677ZJIJ3-Ch_9dj8a.js → blockDiagram-677ZJIJ3-C34UBjOB.js} +1 -1
  6. package/client/dist/assets/{c4Diagram-LMCZKHZV-CkFlO65x.js → c4Diagram-LMCZKHZV-CbqAB1Ou.js} +1 -1
  7. package/client/dist/assets/channel-DBcZw7Kn.js +1 -0
  8. package/client/dist/assets/{chunk-2Q5K7J3B-CypX83xu.js → chunk-2Q5K7J3B-4N6AnmBJ.js} +1 -1
  9. package/client/dist/assets/{chunk-32BRIVSS-DxVLYGdl.js → chunk-32BRIVSS-Cs67LiCy.js} +1 -1
  10. package/client/dist/assets/{chunk-5VM5RSS4-Cxk1evhx.js → chunk-5VM5RSS4-Bwd7rtD3.js} +1 -1
  11. package/client/dist/assets/{chunk-EX3LRPZG-n9q5S4yJ.js → chunk-EX3LRPZG-CQqGfptD.js} +1 -1
  12. package/client/dist/assets/{chunk-JWPE2WC7-jeL4xvir.js → chunk-JWPE2WC7-ClvKd4PN.js} +1 -1
  13. package/client/dist/assets/{chunk-MOJQB5TN-DDSHN0cj.js → chunk-MOJQB5TN-Cwvj8GE1.js} +1 -1
  14. package/client/dist/assets/{chunk-RYQCIY6F-C0bo383g.js → chunk-RYQCIY6F-DrWMx37d.js} +1 -1
  15. package/client/dist/assets/{chunk-V7JOEXUC-C0jDXXAU.js → chunk-V7JOEXUC-CYFfa4PY.js} +1 -1
  16. package/client/dist/assets/{chunk-VR4S4FIN-h-Rr4Pn2.js → chunk-VR4S4FIN-B5eWtesm.js} +1 -1
  17. package/client/dist/assets/{chunk-XXDRQBXY-BexSo0-s.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-BQXzaioj.js → cose-bilkent-JH36ORCC-C76Yia6h.js} +1 -1
  21. package/client/dist/assets/{cynefin-VYW2F7L2-BJIofhfe.js → cynefin-VYW2F7L2-pJe7rdTi.js} +1 -1
  22. package/client/dist/assets/{cynefinDiagram-TSTJHNR4-DmPqTM1T.js → cynefinDiagram-TSTJHNR4-EeHQ7dYV.js} +1 -1
  23. package/client/dist/assets/{dagre-VKFMJZFB-1xljvw6X.js → dagre-VKFMJZFB-VXOY6IHR.js} +1 -1
  24. package/client/dist/assets/{diagram-FQU43EPY-iyL9muCG.js → diagram-FQU43EPY-DW_-leqw.js} +1 -1
  25. package/client/dist/assets/{diagram-G47NLZAW-DREp2Th6.js → diagram-G47NLZAW-C_hsLD4u.js} +1 -1
  26. package/client/dist/assets/{diagram-NH7WQ7WH-h0X3Is2S.js → diagram-NH7WQ7WH-CbeQuO_f.js} +1 -1
  27. package/client/dist/assets/{diagram-OA4YK3LP-Bj8YZRFJ.js → diagram-OA4YK3LP-DRHY5d_c.js} +1 -1
  28. package/client/dist/assets/{diagram-WEI45ONY-BZOf805d.js → diagram-WEI45ONY-B87OYR_S.js} +1 -1
  29. package/client/dist/assets/{ebnfDiagram-CCIWWBDH-DO5JnXda.js → ebnfDiagram-CCIWWBDH-B8Z8WHF6.js} +1 -1
  30. package/client/dist/assets/{erDiagram-Q63AITRT-DRgcqg1T.js → erDiagram-Q63AITRT-DaD7oa9H.js} +1 -1
  31. package/client/dist/assets/{flowDiagram-23GEKE2U-C3J9QmrW.js → flowDiagram-23GEKE2U-GrMVpsea.js} +1 -1
  32. package/client/dist/assets/{ganttDiagram-NO4QXBWP-BIEl3Tkm.js → ganttDiagram-NO4QXBWP-K3X0DYBa.js} +1 -1
  33. package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-BNF0tFWC.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-DEyFxiyY.js → infoDiagram-FWYZ7A6U-Fi8fQ95G.js} +1 -1
  37. package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-B_ehlg3I.js → ishikawaDiagram-FXEZZL3T-CrN7QJzt.js} +1 -1
  38. package/client/dist/assets/{journeyDiagram-5HDEW3XC-Dp00FyJS.js → journeyDiagram-5HDEW3XC-XHIsl7rM.js} +1 -1
  39. package/client/dist/assets/{kanban-definition-HUTT4EX6-CTAf16q8.js → kanban-definition-HUTT4EX6-A6HJqHw7.js} +1 -1
  40. package/client/dist/assets/{linear-9vNUgmYd.js → linear-D1vF9IQB.js} +1 -1
  41. package/client/dist/assets/{mermaid.core-A6tjaEVD.js → mermaid.core-D6w9zlA0.js} +4 -4
  42. package/client/dist/assets/{mindmap-definition-LN4V7U3C-DRW3bmCY.js → mindmap-definition-LN4V7U3C-CxRkUj6Z.js} +1 -1
  43. package/client/dist/assets/{pegDiagram-2B236MQR-DJFCjHp2.js → pegDiagram-2B236MQR-Bs9dp-8a.js} +1 -1
  44. package/client/dist/assets/{pieDiagram-ENE6RG2P-KRd-sGvC.js → pieDiagram-ENE6RG2P-DBWILzB8.js} +1 -1
  45. package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-9TLZE3Hu.js → quadrantDiagram-ABIIQ3AL-DrCVJJx6.js} +1 -1
  46. package/client/dist/assets/{railroadDiagram-RFXS5EU6-y4tLtjXg.js → railroadDiagram-RFXS5EU6-BdPW2dNf.js} +1 -1
  47. package/client/dist/assets/{requirementDiagram-TGXJPOKE-B9EOQDQM.js → requirementDiagram-TGXJPOKE-Bj_g3tC5.js} +1 -1
  48. package/client/dist/assets/{sankeyDiagram-HTMAVEWB-zfwiDzkT.js → sankeyDiagram-HTMAVEWB-BGL9NnsS.js} +1 -1
  49. package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-DW1LWepL.js → sequenceDiagram-DBY2YBRQ-DEirxTZY.js} +1 -1
  50. package/client/dist/assets/{sizeCapture-X5ZJPWSS-BM81Mik0.js → sizeCapture-X5ZJPWSS-BtLrvrea.js} +1 -1
  51. package/client/dist/assets/{stateDiagram-2N3HPSRC-D0EMIw1w.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-CKXNCX6M.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-ByzIfvL5.js → timeline-definition-FHXFAJF6-CnBKJtD_.js} +1 -1
  56. package/client/dist/assets/{vennDiagram-L72KCM5P-Xep38xBH.js → vennDiagram-L72KCM5P-BYmiJYoh.js} +1 -1
  57. package/client/dist/assets/{wardleyDiagram-EHGQE667-DKWDpx6g.js → wardleyDiagram-EHGQE667-DU7vW8q3.js} +1 -1
  58. package/client/dist/assets/{xychartDiagram-FW5EYKEG-BGcwZTnu.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/probes.mjs +10 -4
  62. package/lib/server.mjs +149 -12
  63. package/lib/util.mjs +5 -1
  64. package/package.json +1 -1
  65. package/scripts/deploy-procs.mjs +105 -20
  66. package/scripts/deploy-swap.mjs +23 -2
  67. package/server/dist/config.d.ts +9 -0
  68. package/server/dist/config.d.ts.map +1 -1
  69. package/server/dist/config.js +1 -0
  70. package/server/dist/config.js.map +1 -1
  71. package/server/dist/core/campaign-events.d.ts.map +1 -1
  72. package/server/dist/core/campaign-events.js +1 -0
  73. package/server/dist/core/campaign-events.js.map +1 -1
  74. package/server/dist/core/campaign-loop-state.d.ts.map +1 -1
  75. package/server/dist/core/campaign-loop-state.js +54 -21
  76. package/server/dist/core/campaign-loop-state.js.map +1 -1
  77. package/server/dist/core/campaign-parse.d.ts +4 -0
  78. package/server/dist/core/campaign-parse.d.ts.map +1 -1
  79. package/server/dist/core/campaign-parse.js +9 -0
  80. package/server/dist/core/campaign-parse.js.map +1 -1
  81. package/server/dist/core/campaign-readiness-schema.d.ts +33 -0
  82. package/server/dist/core/campaign-readiness-schema.d.ts.map +1 -0
  83. package/server/dist/core/campaign-readiness-schema.js +70 -0
  84. package/server/dist/core/campaign-readiness-schema.js.map +1 -0
  85. package/server/dist/core/campaign-readiness.d.ts +59 -0
  86. package/server/dist/core/campaign-readiness.d.ts.map +1 -0
  87. package/server/dist/core/campaign-readiness.js +163 -0
  88. package/server/dist/core/campaign-readiness.js.map +1 -0
  89. package/server/dist/core/campaign-status-json.d.ts +3 -0
  90. package/server/dist/core/campaign-status-json.d.ts.map +1 -1
  91. package/server/dist/core/campaign-status-json.js +7 -0
  92. package/server/dist/core/campaign-status-json.js.map +1 -1
  93. package/server/dist/core/campaign-store.d.ts.map +1 -1
  94. package/server/dist/core/campaign-store.js +4 -1
  95. package/server/dist/core/campaign-store.js.map +1 -1
  96. package/server/dist/core/campaign-types.d.ts +8 -0
  97. package/server/dist/core/campaign-types.d.ts.map +1 -1
  98. package/server/dist/core/campaign-worktree-root.d.ts +19 -0
  99. package/server/dist/core/campaign-worktree-root.d.ts.map +1 -0
  100. package/server/dist/core/campaign-worktree-root.js +76 -0
  101. package/server/dist/core/campaign-worktree-root.js.map +1 -0
  102. package/server/dist/core/claim-record-lock.d.ts +30 -0
  103. package/server/dist/core/claim-record-lock.d.ts.map +1 -0
  104. package/server/dist/core/claim-record-lock.js +90 -0
  105. package/server/dist/core/claim-record-lock.js.map +1 -0
  106. package/server/dist/core/cli-child-spawn.d.ts +28 -0
  107. package/server/dist/core/cli-child-spawn.d.ts.map +1 -0
  108. package/server/dist/core/cli-child-spawn.js +146 -0
  109. package/server/dist/core/cli-child-spawn.js.map +1 -0
  110. package/server/dist/core/codex-models-probe.d.ts +46 -0
  111. package/server/dist/core/codex-models-probe.d.ts.map +1 -0
  112. package/server/dist/core/codex-models-probe.js +103 -0
  113. package/server/dist/core/codex-models-probe.js.map +1 -0
  114. package/server/dist/core/codex-oracle-runner.d.ts +68 -0
  115. package/server/dist/core/codex-oracle-runner.d.ts.map +1 -0
  116. package/server/dist/core/codex-oracle-runner.js +124 -0
  117. package/server/dist/core/codex-oracle-runner.js.map +1 -0
  118. package/server/dist/core/codex-status-report.d.ts +6 -0
  119. package/server/dist/core/codex-status-report.d.ts.map +1 -0
  120. package/server/dist/core/codex-status-report.js +40 -0
  121. package/server/dist/core/codex-status-report.js.map +1 -0
  122. package/server/dist/core/codex-task-watcher-types.d.ts +69 -0
  123. package/server/dist/core/codex-task-watcher-types.d.ts.map +1 -0
  124. package/server/dist/core/codex-task-watcher-types.js +12 -0
  125. package/server/dist/core/codex-task-watcher-types.js.map +1 -0
  126. package/server/dist/core/codex-task-watcher.d.ts +30 -0
  127. package/server/dist/core/codex-task-watcher.d.ts.map +1 -0
  128. package/server/dist/core/codex-task-watcher.js +252 -0
  129. package/server/dist/core/codex-task-watcher.js.map +1 -0
  130. package/server/dist/core/codex-terminal-signal-detect.d.ts +7 -0
  131. package/server/dist/core/codex-terminal-signal-detect.d.ts.map +1 -0
  132. package/server/dist/core/codex-terminal-signal-detect.js +113 -0
  133. package/server/dist/core/codex-terminal-signal-detect.js.map +1 -0
  134. package/server/dist/core/codex-thread-discovery.d.ts +21 -0
  135. package/server/dist/core/codex-thread-discovery.d.ts.map +1 -0
  136. package/server/dist/core/codex-thread-discovery.js +169 -0
  137. package/server/dist/core/codex-thread-discovery.js.map +1 -0
  138. package/server/dist/core/codextender-auth-file-sweep.d.ts +41 -0
  139. package/server/dist/core/codextender-auth-file-sweep.d.ts.map +1 -0
  140. package/server/dist/core/codextender-auth-file-sweep.js +97 -0
  141. package/server/dist/core/codextender-auth-file-sweep.js.map +1 -0
  142. package/server/dist/core/codextender-proxy-probe.d.ts +80 -0
  143. package/server/dist/core/codextender-proxy-probe.d.ts.map +1 -0
  144. package/server/dist/core/codextender-proxy-probe.js +179 -0
  145. package/server/dist/core/codextender-proxy-probe.js.map +1 -0
  146. package/server/dist/core/contract-version.d.ts +16 -1
  147. package/server/dist/core/contract-version.d.ts.map +1 -1
  148. package/server/dist/core/contract-version.js +16 -1
  149. package/server/dist/core/contract-version.js.map +1 -1
  150. package/server/dist/core/launcher-codex.d.ts +61 -0
  151. package/server/dist/core/launcher-codex.d.ts.map +1 -0
  152. package/server/dist/core/launcher-codex.js +187 -0
  153. package/server/dist/core/launcher-codex.js.map +1 -0
  154. package/server/dist/core/launcher-codextender-env.d.ts +44 -0
  155. package/server/dist/core/launcher-codextender-env.d.ts.map +1 -0
  156. package/server/dist/core/launcher-codextender-env.js +212 -0
  157. package/server/dist/core/launcher-codextender-env.js.map +1 -0
  158. package/server/dist/core/launcher-codextender.d.ts +72 -0
  159. package/server/dist/core/launcher-codextender.d.ts.map +1 -0
  160. package/server/dist/core/launcher-codextender.js +98 -0
  161. package/server/dist/core/launcher-codextender.js.map +1 -0
  162. package/server/dist/core/launcher-codextender.smoke-helpers.d.ts +25 -0
  163. package/server/dist/core/launcher-codextender.smoke-helpers.d.ts.map +1 -0
  164. package/server/dist/core/launcher-codextender.smoke-helpers.js +211 -0
  165. package/server/dist/core/launcher-codextender.smoke-helpers.js.map +1 -0
  166. package/server/dist/core/launcher-permission-flags.d.ts +17 -0
  167. package/server/dist/core/launcher-permission-flags.d.ts.map +1 -0
  168. package/server/dist/core/launcher-permission-flags.js +27 -0
  169. package/server/dist/core/launcher-permission-flags.js.map +1 -0
  170. package/server/dist/core/launcher.d.ts +18 -0
  171. package/server/dist/core/launcher.d.ts.map +1 -1
  172. package/server/dist/core/launcher.js +6 -0
  173. package/server/dist/core/launcher.js.map +1 -1
  174. package/server/dist/core/leadwright-preflight-transport.d.ts +27 -0
  175. package/server/dist/core/leadwright-preflight-transport.d.ts.map +1 -0
  176. package/server/dist/core/leadwright-preflight-transport.js +124 -0
  177. package/server/dist/core/leadwright-preflight-transport.js.map +1 -0
  178. package/server/dist/core/mission-context/artifacts-tests-ac.d.ts +6 -0
  179. package/server/dist/core/mission-context/artifacts-tests-ac.d.ts.map +1 -0
  180. package/server/dist/core/mission-context/artifacts-tests-ac.js +31 -0
  181. package/server/dist/core/mission-context/artifacts-tests-ac.js.map +1 -0
  182. package/server/dist/core/mission-context/artifacts-tests.d.ts.map +1 -1
  183. package/server/dist/core/mission-context/artifacts-tests.js +20 -0
  184. package/server/dist/core/mission-context/artifacts-tests.js.map +1 -1
  185. package/server/dist/core/mission-context/resolver-io.d.ts +10 -0
  186. package/server/dist/core/mission-context/resolver-io.d.ts.map +1 -1
  187. package/server/dist/core/mission-context/resolver-parts.d.ts +8 -7
  188. package/server/dist/core/mission-context/resolver-parts.d.ts.map +1 -1
  189. package/server/dist/core/mission-context/resolver-parts.js +22 -14
  190. package/server/dist/core/mission-context/resolver-parts.js.map +1 -1
  191. package/server/dist/core/mission-context/resolver.d.ts.map +1 -1
  192. package/server/dist/core/mission-context/resolver.js +1 -1
  193. package/server/dist/core/mission-context/resolver.js.map +1 -1
  194. package/server/dist/core/mission-context/run-id-recovery.d.ts +18 -2
  195. package/server/dist/core/mission-context/run-id-recovery.d.ts.map +1 -1
  196. package/server/dist/core/mission-context/run-id-recovery.js +38 -18
  197. package/server/dist/core/mission-context/run-id-recovery.js.map +1 -1
  198. package/server/dist/core/mission-context/traceability.d.ts.map +1 -1
  199. package/server/dist/core/mission-context/traceability.js +15 -1
  200. package/server/dist/core/mission-context/traceability.js.map +1 -1
  201. package/server/dist/core/mission-context/types-slice2.d.ts +44 -0
  202. package/server/dist/core/mission-context/types-slice2.d.ts.map +1 -1
  203. package/server/dist/core/model-tier-config-reader.d.ts +14 -1
  204. package/server/dist/core/model-tier-config-reader.d.ts.map +1 -1
  205. package/server/dist/core/model-tier-config-reader.js +34 -2
  206. package/server/dist/core/model-tier-config-reader.js.map +1 -1
  207. package/server/dist/core/powershell-probe.smoke-helpers.d.ts +12 -0
  208. package/server/dist/core/powershell-probe.smoke-helpers.d.ts.map +1 -0
  209. package/server/dist/core/powershell-probe.smoke-helpers.js +80 -0
  210. package/server/dist/core/powershell-probe.smoke-helpers.js.map +1 -0
  211. package/server/dist/core/readiness-install-hints.d.ts +1 -1
  212. package/server/dist/core/readiness-install-hints.d.ts.map +1 -1
  213. package/server/dist/core/readiness-install-hints.js +5 -0
  214. package/server/dist/core/readiness-install-hints.js.map +1 -1
  215. package/server/dist/core/readiness-probe-run.d.ts +61 -0
  216. package/server/dist/core/readiness-probe-run.d.ts.map +1 -1
  217. package/server/dist/core/readiness-probe-run.js +93 -15
  218. package/server/dist/core/readiness-probe-run.js.map +1 -1
  219. package/server/dist/core/readiness-probe.d.ts +1 -1
  220. package/server/dist/core/readiness-probe.d.ts.map +1 -1
  221. package/server/dist/core/readiness-probe.js +36 -8
  222. package/server/dist/core/readiness-probe.js.map +1 -1
  223. package/server/dist/core/sdk-sessions-merge.d.ts +19 -0
  224. package/server/dist/core/sdk-sessions-merge.d.ts.map +1 -1
  225. package/server/dist/core/sdk-sessions-merge.js +19 -5
  226. package/server/dist/core/sdk-sessions-merge.js.map +1 -1
  227. package/server/dist/core/sdk-sessions-refresh.d.ts +50 -0
  228. package/server/dist/core/sdk-sessions-refresh.d.ts.map +1 -0
  229. package/server/dist/core/sdk-sessions-refresh.js +69 -0
  230. package/server/dist/core/sdk-sessions-refresh.js.map +1 -0
  231. package/server/dist/core/sdk-sessions-store.d.ts +48 -0
  232. package/server/dist/core/sdk-sessions-store.d.ts.map +1 -1
  233. package/server/dist/core/sdk-sessions-store.js +8 -9
  234. package/server/dist/core/sdk-sessions-store.js.map +1 -1
  235. package/server/dist/core/sdk-sessions-validate.d.ts.map +1 -1
  236. package/server/dist/core/sdk-sessions-validate.js +11 -0
  237. package/server/dist/core/sdk-sessions-validate.js.map +1 -1
  238. package/server/dist/core/settings-reader.d.ts +18 -0
  239. package/server/dist/core/settings-reader.d.ts.map +1 -0
  240. package/server/dist/core/settings-reader.js +40 -0
  241. package/server/dist/core/settings-reader.js.map +1 -0
  242. package/server/dist/core/shell-quote.d.ts +29 -0
  243. package/server/dist/core/shell-quote.d.ts.map +1 -1
  244. package/server/dist/core/shell-quote.js +34 -0
  245. package/server/dist/core/shell-quote.js.map +1 -1
  246. package/server/dist/core/shipwright-plugin-version-reader.d.ts +15 -0
  247. package/server/dist/core/shipwright-plugin-version-reader.d.ts.map +1 -0
  248. package/server/dist/core/shipwright-plugin-version-reader.js +49 -0
  249. package/server/dist/core/shipwright-plugin-version-reader.js.map +1 -0
  250. package/server/dist/core/task-editability.d.ts +1 -1
  251. package/server/dist/core/task-editability.d.ts.map +1 -1
  252. package/server/dist/core/task-editability.js +1 -0
  253. package/server/dist/core/task-editability.js.map +1 -1
  254. package/server/dist/core/triage-cli-runner.d.ts.map +1 -1
  255. package/server/dist/core/triage-cli-runner.js +6 -21
  256. package/server/dist/core/triage-cli-runner.js.map +1 -1
  257. package/server/dist/core/triage-compose.d.ts.map +1 -1
  258. package/server/dist/core/triage-compose.js +34 -3
  259. package/server/dist/core/triage-compose.js.map +1 -1
  260. package/server/dist/core/triage-store.d.ts +2 -1
  261. package/server/dist/core/triage-store.d.ts.map +1 -1
  262. package/server/dist/core/triage-store.js +1 -1
  263. package/server/dist/core/triage-store.js.map +1 -1
  264. package/server/dist/external/create-external-routes-args.d.ts +122 -0
  265. package/server/dist/external/create-external-routes-args.d.ts.map +1 -0
  266. package/server/dist/external/create-external-routes-args.js +2 -0
  267. package/server/dist/external/create-external-routes-args.js.map +1 -0
  268. package/server/dist/external/inbox/_codex.d.ts +14 -0
  269. package/server/dist/external/inbox/_codex.d.ts.map +1 -0
  270. package/server/dist/external/inbox/_codex.js +88 -0
  271. package/server/dist/external/inbox/_codex.js.map +1 -0
  272. package/server/dist/external/inbox/_derive.d.ts +2 -25
  273. package/server/dist/external/inbox/_derive.d.ts.map +1 -1
  274. package/server/dist/external/inbox/_derive.js +11 -0
  275. package/server/dist/external/inbox/_derive.js.map +1 -1
  276. package/server/dist/external/inbox/_lead.d.ts +23 -0
  277. package/server/dist/external/inbox/_lead.d.ts.map +1 -0
  278. package/server/dist/external/inbox/_lead.js +83 -0
  279. package/server/dist/external/inbox/_lead.js.map +1 -0
  280. package/server/dist/external/inbox/_types.d.ts +55 -0
  281. package/server/dist/external/inbox/_types.d.ts.map +1 -0
  282. package/server/dist/external/inbox/_types.js +13 -0
  283. package/server/dist/external/inbox/_types.js.map +1 -0
  284. package/server/dist/external/inbox/routes.d.ts +7 -0
  285. package/server/dist/external/inbox/routes.d.ts.map +1 -1
  286. package/server/dist/external/inbox/routes.js +43 -2
  287. package/server/dist/external/inbox/routes.js.map +1 -1
  288. package/server/dist/external/launch/_helpers.d.ts +4 -0
  289. package/server/dist/external/launch/_helpers.d.ts.map +1 -1
  290. package/server/dist/external/launch/_helpers.js.map +1 -1
  291. package/server/dist/external/launch/action-substitution-branch.d.ts +12 -0
  292. package/server/dist/external/launch/action-substitution-branch.d.ts.map +1 -1
  293. package/server/dist/external/launch/action-substitution-branch.js +35 -1
  294. package/server/dist/external/launch/action-substitution-branch.js.map +1 -1
  295. package/server/dist/external/launch/branch-dispatch.d.ts +15 -0
  296. package/server/dist/external/launch/branch-dispatch.d.ts.map +1 -0
  297. package/server/dist/external/launch/branch-dispatch.js +73 -0
  298. package/server/dist/external/launch/branch-dispatch.js.map +1 -0
  299. package/server/dist/external/launch/campaign-step-branch.d.ts +7 -1
  300. package/server/dist/external/launch/campaign-step-branch.d.ts.map +1 -1
  301. package/server/dist/external/launch/campaign-step-branch.js +70 -2
  302. package/server/dist/external/launch/campaign-step-branch.js.map +1 -1
  303. package/server/dist/external/launch/claim-executor-permissions.d.ts +31 -0
  304. package/server/dist/external/launch/claim-executor-permissions.d.ts.map +1 -0
  305. package/server/dist/external/launch/claim-executor-permissions.js +107 -0
  306. package/server/dist/external/launch/claim-executor-permissions.js.map +1 -0
  307. package/server/dist/external/launch/claim-executor-template-arming.d.ts +42 -0
  308. package/server/dist/external/launch/claim-executor-template-arming.d.ts.map +1 -0
  309. package/server/dist/external/launch/claim-executor-template-arming.js +121 -0
  310. package/server/dist/external/launch/claim-executor-template-arming.js.map +1 -0
  311. package/server/dist/external/launch/claim-holder-gate.d.ts +51 -0
  312. package/server/dist/external/launch/claim-holder-gate.d.ts.map +1 -0
  313. package/server/dist/external/launch/claim-holder-gate.js +95 -0
  314. package/server/dist/external/launch/claim-holder-gate.js.map +1 -0
  315. package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts +3 -0
  316. package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts.map +1 -0
  317. package/server/dist/external/launch/claim-permission-perimeter-assert.js +24 -0
  318. package/server/dist/external/launch/claim-permission-perimeter-assert.js.map +1 -0
  319. package/server/dist/external/launch/legacy-fallback-branch.d.ts +14 -0
  320. package/server/dist/external/launch/legacy-fallback-branch.d.ts.map +1 -1
  321. package/server/dist/external/launch/legacy-fallback-branch.js +3 -1
  322. package/server/dist/external/launch/legacy-fallback-branch.js.map +1 -1
  323. package/server/dist/external/launch/master-run-branch.js +2 -2
  324. package/server/dist/external/launch/master-run-branch.js.map +1 -1
  325. package/server/dist/external/launch/mixed-intents-guard.d.ts +10 -0
  326. package/server/dist/external/launch/mixed-intents-guard.d.ts.map +1 -0
  327. package/server/dist/external/launch/mixed-intents-guard.js +49 -0
  328. package/server/dist/external/launch/mixed-intents-guard.js.map +1 -0
  329. package/server/dist/external/launch/parse-body.d.ts +29 -0
  330. package/server/dist/external/launch/parse-body.d.ts.map +1 -1
  331. package/server/dist/external/launch/parse-body.js +66 -0
  332. package/server/dist/external/launch/parse-body.js.map +1 -1
  333. package/server/dist/external/launch/routes.d.ts +3 -0
  334. package/server/dist/external/launch/routes.d.ts.map +1 -1
  335. package/server/dist/external/launch/routes.js +99 -128
  336. package/server/dist/external/launch/routes.js.map +1 -1
  337. package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts +20 -0
  338. package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts.map +1 -0
  339. package/server/dist/external/launch/runtime-chokepoint-codextender.js +51 -0
  340. package/server/dist/external/launch/runtime-chokepoint-codextender.js.map +1 -0
  341. package/server/dist/external/launch/runtime-chokepoint-errors.d.ts +33 -0
  342. package/server/dist/external/launch/runtime-chokepoint-errors.d.ts.map +1 -0
  343. package/server/dist/external/launch/runtime-chokepoint-errors.js +63 -0
  344. package/server/dist/external/launch/runtime-chokepoint-errors.js.map +1 -0
  345. package/server/dist/external/launch/runtime-chokepoint.d.ts +120 -0
  346. package/server/dist/external/launch/runtime-chokepoint.d.ts.map +1 -0
  347. package/server/dist/external/launch/runtime-chokepoint.js +201 -0
  348. package/server/dist/external/launch/runtime-chokepoint.js.map +1 -0
  349. package/server/dist/external/mission-context/routes.d.ts +33 -27
  350. package/server/dist/external/mission-context/routes.d.ts.map +1 -1
  351. package/server/dist/external/mission-context/routes.js +30 -27
  352. package/server/dist/external/mission-context/routes.js.map +1 -1
  353. package/server/dist/external/mission-context/test-harness.d.ts +6 -0
  354. package/server/dist/external/mission-context/test-harness.d.ts.map +1 -1
  355. package/server/dist/external/mission-context/test-harness.js +6 -1
  356. package/server/dist/external/mission-context/test-harness.js.map +1 -1
  357. package/server/dist/external/mission-context/wire.d.ts.map +1 -1
  358. package/server/dist/external/mission-context/wire.js +24 -2
  359. package/server/dist/external/mission-context/wire.js.map +1 -1
  360. package/server/dist/external/org/audit-log.d.ts +19 -0
  361. package/server/dist/external/org/audit-log.d.ts.map +1 -1
  362. package/server/dist/external/org/audit-log.js +33 -18
  363. package/server/dist/external/org/audit-log.js.map +1 -1
  364. package/server/dist/external/org/beat-effect-audit-read.d.ts +15 -0
  365. package/server/dist/external/org/beat-effect-audit-read.d.ts.map +1 -0
  366. package/server/dist/external/org/beat-effect-audit-read.js +73 -0
  367. package/server/dist/external/org/beat-effect-audit-read.js.map +1 -0
  368. package/server/dist/external/org/beat-register-health.d.ts +57 -0
  369. package/server/dist/external/org/beat-register-health.d.ts.map +1 -0
  370. package/server/dist/external/org/beat-register-health.js +125 -0
  371. package/server/dist/external/org/beat-register-health.js.map +1 -0
  372. package/server/dist/external/org/beat-register-release-core.d.ts.map +1 -1
  373. package/server/dist/external/org/beat-register-release-core.js +4 -1
  374. package/server/dist/external/org/beat-register-release-core.js.map +1 -1
  375. package/server/dist/external/org/beat-register-release-request.d.ts +20 -0
  376. package/server/dist/external/org/beat-register-release-request.d.ts.map +1 -0
  377. package/server/dist/external/org/beat-register-release-request.js +92 -0
  378. package/server/dist/external/org/beat-register-release-request.js.map +1 -0
  379. package/server/dist/external/org/beat-register-release.d.ts +3 -1
  380. package/server/dist/external/org/beat-register-release.d.ts.map +1 -1
  381. package/server/dist/external/org/beat-register-release.js +15 -57
  382. package/server/dist/external/org/beat-register-release.js.map +1 -1
  383. package/server/dist/external/org/beat-register.d.ts +18 -20
  384. package/server/dist/external/org/beat-register.d.ts.map +1 -1
  385. package/server/dist/external/org/beat-register.js +30 -56
  386. package/server/dist/external/org/beat-register.js.map +1 -1
  387. package/server/dist/external/org/beat-steps-read.d.ts +17 -0
  388. package/server/dist/external/org/beat-steps-read.d.ts.map +1 -0
  389. package/server/dist/external/org/beat-steps-read.js +89 -0
  390. package/server/dist/external/org/beat-steps-read.js.map +1 -0
  391. package/server/dist/external/org/charter-authority-read.d.ts +39 -0
  392. package/server/dist/external/org/charter-authority-read.d.ts.map +1 -0
  393. package/server/dist/external/org/charter-authority-read.js +142 -0
  394. package/server/dist/external/org/charter-authority-read.js.map +1 -0
  395. package/server/dist/external/org/commit-validate.d.ts +18 -0
  396. package/server/dist/external/org/commit-validate.d.ts.map +1 -0
  397. package/server/dist/external/org/commit-validate.js +59 -0
  398. package/server/dist/external/org/commit-validate.js.map +1 -0
  399. package/server/dist/external/org/commit-writes.d.ts +68 -0
  400. package/server/dist/external/org/commit-writes.d.ts.map +1 -0
  401. package/server/dist/external/org/commit-writes.js +110 -0
  402. package/server/dist/external/org/commit-writes.js.map +1 -0
  403. package/server/dist/external/org/commit.d.ts +73 -0
  404. package/server/dist/external/org/commit.d.ts.map +1 -0
  405. package/server/dist/external/org/commit.js +181 -0
  406. package/server/dist/external/org/commit.js.map +1 -0
  407. package/server/dist/external/org/commit.test-fixtures.d.ts +38 -0
  408. package/server/dist/external/org/commit.test-fixtures.d.ts.map +1 -0
  409. package/server/dist/external/org/commit.test-fixtures.js +67 -0
  410. package/server/dist/external/org/commit.test-fixtures.js.map +1 -0
  411. package/server/dist/external/org/countersign-core.d.ts +19 -0
  412. package/server/dist/external/org/countersign-core.d.ts.map +1 -0
  413. package/server/dist/external/org/countersign-core.js +122 -0
  414. package/server/dist/external/org/countersign-core.js.map +1 -0
  415. package/server/dist/external/org/countersign-request.d.ts +14 -0
  416. package/server/dist/external/org/countersign-request.d.ts.map +1 -0
  417. package/server/dist/external/org/countersign-request.js +78 -0
  418. package/server/dist/external/org/countersign-request.js.map +1 -0
  419. package/server/dist/external/org/countersign.d.ts +6 -5
  420. package/server/dist/external/org/countersign.d.ts.map +1 -1
  421. package/server/dist/external/org/countersign.js +12 -141
  422. package/server/dist/external/org/countersign.js.map +1 -1
  423. package/server/dist/external/org/daemon-config-read.d.ts +31 -0
  424. package/server/dist/external/org/daemon-config-read.d.ts.map +1 -0
  425. package/server/dist/external/org/daemon-config-read.js +50 -0
  426. package/server/dist/external/org/daemon-config-read.js.map +1 -0
  427. package/server/dist/external/org/decisions-lock.d.ts +6 -4
  428. package/server/dist/external/org/decisions-lock.d.ts.map +1 -1
  429. package/server/dist/external/org/decisions-lock.js +9 -8
  430. package/server/dist/external/org/decisions-lock.js.map +1 -1
  431. package/server/dist/external/org/domains.d.ts +35 -0
  432. package/server/dist/external/org/domains.d.ts.map +1 -0
  433. package/server/dist/external/org/domains.js +29 -0
  434. package/server/dist/external/org/domains.js.map +1 -0
  435. package/server/dist/external/org/existing-charters-read.d.ts +5 -0
  436. package/server/dist/external/org/existing-charters-read.d.ts.map +1 -0
  437. package/server/dist/external/org/existing-charters-read.js +31 -0
  438. package/server/dist/external/org/existing-charters-read.js.map +1 -0
  439. package/server/dist/external/org/lead-question-threads.d.ts +46 -0
  440. package/server/dist/external/org/lead-question-threads.d.ts.map +1 -0
  441. package/server/dist/external/org/lead-question-threads.js +132 -0
  442. package/server/dist/external/org/lead-question-threads.js.map +1 -0
  443. package/server/dist/external/org/leadwright-proposal-merge.d.ts +54 -0
  444. package/server/dist/external/org/leadwright-proposal-merge.d.ts.map +1 -0
  445. package/server/dist/external/org/leadwright-proposal-merge.js +47 -0
  446. package/server/dist/external/org/leadwright-proposal-merge.js.map +1 -0
  447. package/server/dist/external/org/mount.d.ts +11 -0
  448. package/server/dist/external/org/mount.d.ts.map +1 -1
  449. package/server/dist/external/org/mount.js +7 -1
  450. package/server/dist/external/org/mount.js.map +1 -1
  451. package/server/dist/external/org/org-chart-full-read.d.ts +19 -0
  452. package/server/dist/external/org/org-chart-full-read.d.ts.map +1 -0
  453. package/server/dist/external/org/org-chart-full-read.js +58 -0
  454. package/server/dist/external/org/org-chart-full-read.js.map +1 -0
  455. package/server/dist/external/org/org-file-lock.d.ts +41 -0
  456. package/server/dist/external/org/org-file-lock.d.ts.map +1 -0
  457. package/server/dist/external/org/org-file-lock.js +90 -0
  458. package/server/dist/external/org/org-file-lock.js.map +1 -0
  459. package/server/dist/external/org/routes.d.ts +10 -0
  460. package/server/dist/external/org/routes.d.ts.map +1 -1
  461. package/server/dist/external/org/routes.js +22 -1
  462. package/server/dist/external/org/routes.js.map +1 -1
  463. package/server/dist/external/org/usage.d.ts.map +1 -1
  464. package/server/dist/external/org/usage.js +20 -2
  465. package/server/dist/external/org/usage.js.map +1 -1
  466. package/server/dist/external/org/verdict.d.ts +57 -0
  467. package/server/dist/external/org/verdict.d.ts.map +1 -0
  468. package/server/dist/external/org/verdict.js +74 -0
  469. package/server/dist/external/org/verdict.js.map +1 -0
  470. package/server/dist/external/routes.d.ts +3 -101
  471. package/server/dist/external/routes.d.ts.map +1 -1
  472. package/server/dist/external/routes.js +12 -3
  473. package/server/dist/external/routes.js.map +1 -1
  474. package/server/dist/external/tasks/create.d.ts.map +1 -1
  475. package/server/dist/external/tasks/create.js +8 -0
  476. package/server/dist/external/tasks/create.js.map +1 -1
  477. package/server/dist/external/tasks/fork.d.ts +29 -0
  478. package/server/dist/external/tasks/fork.d.ts.map +1 -0
  479. package/server/dist/external/tasks/fork.js +166 -0
  480. package/server/dist/external/tasks/fork.js.map +1 -0
  481. package/server/dist/external/tasks/lifecycle.d.ts.map +1 -1
  482. package/server/dist/external/tasks/lifecycle.js +10 -57
  483. package/server/dist/external/tasks/lifecycle.js.map +1 -1
  484. package/server/dist/external/tasks/patch.d.ts.map +1 -1
  485. package/server/dist/external/tasks/patch.js +17 -0
  486. package/server/dist/external/tasks/patch.js.map +1 -1
  487. package/server/dist/external/tasks/routes.d.ts +2 -0
  488. package/server/dist/external/tasks/routes.d.ts.map +1 -1
  489. package/server/dist/external/tasks/routes.js +7 -0
  490. package/server/dist/external/tasks/routes.js.map +1 -1
  491. package/server/dist/external/transcript/routes.d.ts.map +1 -1
  492. package/server/dist/external/transcript/routes.js +25 -3
  493. package/server/dist/external/transcript/routes.js.map +1 -1
  494. package/server/dist/external-routes-wiring.d.ts +28 -0
  495. package/server/dist/external-routes-wiring.d.ts.map +1 -0
  496. package/server/dist/external-routes-wiring.js +61 -0
  497. package/server/dist/external-routes-wiring.js.map +1 -0
  498. package/server/dist/index.d.ts.map +1 -1
  499. package/server/dist/index.js +111 -44
  500. package/server/dist/index.js.map +1 -1
  501. package/server/dist/lib/resolveHonoHost.d.ts.map +1 -1
  502. package/server/dist/lib/resolveHonoHost.js +16 -1
  503. package/server/dist/lib/resolveHonoHost.js.map +1 -1
  504. package/server/dist/routes/_triage-api-harness.d.ts +1 -1
  505. package/server/dist/routes/_triage-api-harness.d.ts.map +1 -1
  506. package/server/dist/routes/_triage-api-harness.js.map +1 -1
  507. package/server/dist/routes/campaigns-readiness.d.ts +10 -0
  508. package/server/dist/routes/campaigns-readiness.d.ts.map +1 -0
  509. package/server/dist/routes/campaigns-readiness.js +58 -0
  510. package/server/dist/routes/campaigns-readiness.js.map +1 -0
  511. package/server/dist/routes/campaigns.d.ts.map +1 -1
  512. package/server/dist/routes/campaigns.js +3 -0
  513. package/server/dist/routes/campaigns.js.map +1 -1
  514. package/server/dist/routes/codex-models.d.ts +15 -0
  515. package/server/dist/routes/codex-models.d.ts.map +1 -0
  516. package/server/dist/routes/codex-models.js +77 -0
  517. package/server/dist/routes/codex-models.js.map +1 -0
  518. package/server/dist/routes/codextender-models.d.ts +16 -0
  519. package/server/dist/routes/codextender-models.d.ts.map +1 -0
  520. package/server/dist/routes/codextender-models.js +81 -0
  521. package/server/dist/routes/codextender-models.js.map +1 -0
  522. package/server/dist/routes/diagnostics.d.ts +27 -0
  523. package/server/dist/routes/diagnostics.d.ts.map +1 -1
  524. package/server/dist/routes/diagnostics.js +5 -1
  525. package/server/dist/routes/diagnostics.js.map +1 -1
  526. package/server/dist/routes/org-chart-lead-guard.d.ts +10 -0
  527. package/server/dist/routes/org-chart-lead-guard.d.ts.map +1 -0
  528. package/server/dist/routes/org-chart-lead-guard.js +49 -0
  529. package/server/dist/routes/org-chart-lead-guard.js.map +1 -0
  530. package/server/dist/routes/org-inventory-composite.d.ts +20 -0
  531. package/server/dist/routes/org-inventory-composite.d.ts.map +1 -0
  532. package/server/dist/routes/org-inventory-composite.js +100 -0
  533. package/server/dist/routes/org-inventory-composite.js.map +1 -0
  534. package/server/dist/routes/org-lead-setup-wizard.d.ts +10 -0
  535. package/server/dist/routes/org-lead-setup-wizard.d.ts.map +1 -0
  536. package/server/dist/routes/org-lead-setup-wizard.js +51 -0
  537. package/server/dist/routes/org-lead-setup-wizard.js.map +1 -0
  538. package/server/dist/routes/org-leads-composite.d.ts.map +1 -1
  539. package/server/dist/routes/org-leads-composite.js +35 -9
  540. package/server/dist/routes/org-leads-composite.js.map +1 -1
  541. package/server/dist/routes/org-threads-composite.d.ts +24 -0
  542. package/server/dist/routes/org-threads-composite.d.ts.map +1 -0
  543. package/server/dist/routes/org-threads-composite.js +51 -0
  544. package/server/dist/routes/org-threads-composite.js.map +1 -0
  545. package/server/dist/routes/org-writes.d.ts +14 -0
  546. package/server/dist/routes/org-writes.d.ts.map +1 -0
  547. package/server/dist/routes/org-writes.js +61 -0
  548. package/server/dist/routes/org-writes.js.map +1 -0
  549. package/server/dist/routes/org.d.ts +14 -0
  550. package/server/dist/routes/org.d.ts.map +1 -1
  551. package/server/dist/routes/org.js +63 -47
  552. package/server/dist/routes/org.js.map +1 -1
  553. package/server/dist/routes/settings.d.ts.map +1 -1
  554. package/server/dist/routes/settings.js +23 -2
  555. package/server/dist/routes/settings.js.map +1 -1
  556. package/server/dist/routes/triage.d.ts +17 -0
  557. package/server/dist/routes/triage.d.ts.map +1 -1
  558. package/server/dist/routes/triage.js +29 -0
  559. package/server/dist/routes/triage.js.map +1 -1
  560. package/server/dist/terminal/pty-manager.d.ts +37 -1
  561. package/server/dist/terminal/pty-manager.d.ts.map +1 -1
  562. package/server/dist/terminal/pty-manager.js +33 -3
  563. package/server/dist/terminal/pty-manager.js.map +1 -1
  564. package/server/dist/terminal/pty-write-chunker.d.ts +109 -0
  565. package/server/dist/terminal/pty-write-chunker.d.ts.map +1 -0
  566. package/server/dist/terminal/pty-write-chunker.js +234 -0
  567. package/server/dist/terminal/pty-write-chunker.js.map +1 -0
  568. package/server/dist/terminal/routes.d.ts.map +1 -1
  569. package/server/dist/terminal/routes.js +9 -0
  570. package/server/dist/terminal/routes.js.map +1 -1
  571. package/server/dist/terminal/ws-upgrade-handler.d.ts.map +1 -1
  572. package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts.map +1 -1
  573. package/server/dist/terminal/ws-upgrade-handler.fixtures.js +1 -0
  574. package/server/dist/terminal/ws-upgrade-handler.fixtures.js.map +1 -1
  575. package/server/dist/terminal/ws-upgrade-handler.js +14 -5
  576. package/server/dist/terminal/ws-upgrade-handler.js.map +1 -1
  577. package/server/dist/test/event-test-counts-fixtures.d.ts +40 -0
  578. package/server/dist/test/event-test-counts-fixtures.d.ts.map +1 -0
  579. package/server/dist/test/event-test-counts-fixtures.js +56 -0
  580. package/server/dist/test/event-test-counts-fixtures.js.map +1 -0
  581. package/server/dist/types/leadwright-beat-step.d.ts +19 -0
  582. package/server/dist/types/leadwright-beat-step.d.ts.map +1 -0
  583. package/server/dist/types/leadwright-beat-step.js +56 -0
  584. package/server/dist/types/leadwright-beat-step.js.map +1 -0
  585. package/server/dist/types/leadwright-preflight.d.ts +90 -0
  586. package/server/dist/types/leadwright-preflight.d.ts.map +1 -0
  587. package/server/dist/types/leadwright-preflight.js +65 -0
  588. package/server/dist/types/leadwright-preflight.js.map +1 -0
  589. package/server/dist/types/leadwright-schema-drift.d.ts +28 -0
  590. package/server/dist/types/leadwright-schema-drift.d.ts.map +1 -0
  591. package/server/dist/types/leadwright-schema-drift.js +89 -0
  592. package/server/dist/types/leadwright-schema-drift.js.map +1 -0
  593. package/server/dist/types/org-inventory.d.ts +53 -0
  594. package/server/dist/types/org-inventory.d.ts.map +1 -0
  595. package/server/dist/types/org-inventory.js +11 -0
  596. package/server/dist/types/org-inventory.js.map +1 -0
  597. package/server/dist/types/org.d.ts +76 -6
  598. package/server/dist/types/org.d.ts.map +1 -1
  599. package/server/dist/types/run-config-retry.d.ts +29 -0
  600. package/server/dist/types/run-config-retry.d.ts.map +1 -0
  601. package/server/dist/types/run-config-retry.js +47 -0
  602. package/server/dist/types/run-config-retry.js.map +1 -0
  603. package/server/dist/types/run-config-v2.d.ts +29 -41
  604. package/server/dist/types/run-config-v2.d.ts.map +1 -1
  605. package/server/dist/types/run-config-v2.js +16 -50
  606. package/server/dist/types/run-config-v2.js.map +1 -1
  607. package/server/dist/types/settings.d.ts +33 -0
  608. package/server/dist/types/settings.d.ts.map +1 -1
  609. package/server/dist/vendor/leadwright/beat-step.schema.json +83 -0
  610. package/server/dist/vendor/leadwright/claim-record-lock-contract.json +15 -0
  611. package/server/dist/vendor/leadwright/org-chart.schema.json +195 -0
  612. package/server/dist/vendor/leadwright/preflight-input.schema.json +318 -0
  613. package/server/dist/vendor/leadwright/preflight-result.schema.json +56 -0
  614. package/server/package.json +1 -1
  615. package/client/dist/assets/channel-BYPbLjRl.js +0 -1
  616. package/client/dist/assets/classDiagram-OUVF2IWQ-CsFIeTju.js +0 -1
  617. package/client/dist/assets/classDiagram-v2-EOCWNBFH-CsFIeTju.js +0 -1
  618. package/client/dist/assets/index-BnTOrFHb.js +0 -829
  619. package/client/dist/assets/index-CYPc6qxw.css +0 -1
  620. package/client/dist/assets/stateDiagram-v2-6OUMAXLB-B3E4_xxT.js +0 -1
  621. package/client/dist/assets/swimlanesDiagram-G3AALYLV-BegQBqnC.js +0 -8
@@ -0,0 +1,252 @@
1
+ /*
2
+ * core/codex-task-watcher.ts — Codex Light §5.1 `CodexTaskWatcher`: the
3
+ * plain module (no new process) that ties the completion oracle (§1) to
4
+ * the live pty (§4) into the actual runtime behavior AC5/AC6 need.
5
+ *
6
+ * On every `tick()`, for each live Codex-runtime task whose pty has been
7
+ * silent ≥ `stallTimeoutMs` (Settings-configurable, default 15 min, floor
8
+ * 5 min — §5's Settings field), calls the oracle CLI (`codex-oracle-
9
+ * runner.ts`) and classifies per the spec's table:
10
+ *
11
+ * not_done + silent → auto-nudge, capped at one attempt per stall
12
+ * EPISODE (a fresh `lastDataAt` starts a new one)
13
+ * delivery_pending, delivery_state absent/"indeterminate" → case 13
14
+ * proper; keep re-polling every tick, never nudge
15
+ * delivery_pending, delivery_state === "error" → surface distinctly to
16
+ * Inbox, never re-poll as "still pending" forever
17
+ * (§5.1's correction — do NOT branch on the
18
+ * verdict string alone)
19
+ * done → label done; the pty is left running (§4 —
20
+ * marking done never kills the process)
21
+ * no_oracle → one self-check nudge per episode, then
22
+ * Inbox-only once that nudge is spent (§5.4's
23
+ * self-report can still resolve it — see below)
24
+ *
25
+ * `snapshot()` exposes the resulting notices for the Inbox aggregator
26
+ * (`external/inbox/_codex.ts`) — an ephemeral, in-memory side-channel, not
27
+ * persisted to `sdk-sessions.json`; a server restart just re-derives it.
28
+ *
29
+ * Each `checkTask()` pass also attempts §4's `threadId` discovery
30
+ * (`core/codex-thread-discovery.ts`) for any Codex task that doesn't have
31
+ * one yet — a fresh launch never learns its own thread id from the launch
32
+ * command (v1 has no `--session-id`-equivalent flag), so without this the
33
+ * resume branch in `runtime-chokepoint.ts` could never fire. `tick()`'s
34
+ * reentrancy guard (below) also protects this from a cross-tick race.
35
+ *
36
+ * §5.3 Guided-mode approval/structured-error TEXT detection does NOT live
37
+ * here — it runs as an Inbox post-pass (`external/inbox/_codex.ts`'s
38
+ * `appendCodexTerminalSignals`, over `core/codex-terminal-signal-detect.ts`).
39
+ *
40
+ * §5.4's structured self-report (`codex-status-report.ts`) is consulted
41
+ * only in the `no_oracle` branch of `classify()` below — see that branch's
42
+ * own comment for why.
43
+ */
44
+ import { parseShipwrightStatusReport } from "./codex-status-report.js";
45
+ import { DEFAULT_STALL_TIMEOUT_MS, DEFAULT_LAUNCH_CONFIRM_TIMEOUT_MS, } from "./codex-task-watcher-types.js";
46
+ // Types/interfaces/constants live in `codex-task-watcher-types.ts` (split to
47
+ // stay under the 300-line guideline); re-exported here so every existing
48
+ // import site (`from "./codex-task-watcher.js"`) is unaffected.
49
+ export { DEFAULT_STALL_TIMEOUT_MS, DEFAULT_LAUNCH_CONFIRM_TIMEOUT_MS, } from "./codex-task-watcher-types.js";
50
+ const WAKER_PROMPT = "\n[Shipwright] Still there? If you're finished, wrap up and close with your " +
51
+ "SHIPWRIGHT-STATUS block. If not, please continue.\n";
52
+ const SELF_CHECK_PROMPT = "\n[Shipwright] This phase has no automated completion check — please confirm " +
53
+ "your status directly: are you done, or still working? Close with your " +
54
+ "SHIPWRIGHT-STATUS block either way.\n";
55
+ export class CodexTaskWatcher {
56
+ deps;
57
+ episodes = new Map();
58
+ notices = new Map();
59
+ nowFn;
60
+ stallTimeoutMs;
61
+ launchConfirmTimeoutMs;
62
+ /** Reentrancy guard (doubt-review finding) — `index.ts`'s `setInterval`
63
+ * never awaits the prior tick, and one tick can outlive 60s with a
64
+ * handful of stalled tasks (N sequential up-to-30s oracle calls). Two
65
+ * OVERLAPPING ticks would each build their own `claimedThreadIds` from
66
+ * `store.list()` and miss the other's in-flight §4 discovery, risking
67
+ * two tasks in the same cwd permanently claiming the same threadId (no
68
+ * re-validation once set). Skipping an overlapping tick is always safe
69
+ * — the next one 60s later just re-evaluates the same tasks. */
70
+ ticking = false;
71
+ constructor(deps) {
72
+ this.deps = deps;
73
+ this.nowFn = deps.now ?? Date.now;
74
+ this.stallTimeoutMs = deps.stallTimeoutMs ?? DEFAULT_STALL_TIMEOUT_MS;
75
+ this.launchConfirmTimeoutMs = deps.launchConfirmTimeoutMs ?? DEFAULT_LAUNCH_CONFIRM_TIMEOUT_MS;
76
+ }
77
+ async resolveStallTimeoutMs() {
78
+ return typeof this.stallTimeoutMs === "function" ? await this.stallTimeoutMs() : this.stallTimeoutMs;
79
+ }
80
+ async resolveLaunchConfirmTimeoutMs() {
81
+ return typeof this.launchConfirmTimeoutMs === "function"
82
+ ? await this.launchConfirmTimeoutMs()
83
+ : this.launchConfirmTimeoutMs;
84
+ }
85
+ /** Ephemeral, in-memory Inbox feed — see the module header. */
86
+ snapshot() {
87
+ return [...this.notices.values()];
88
+ }
89
+ async tick() {
90
+ if (this.ticking)
91
+ return; // reentrancy guard — see the field doc above
92
+ this.ticking = true;
93
+ try {
94
+ const allTasks = this.deps.store.list();
95
+ // §4 discovery de-dup — a rollout file already claimed by one task (in
96
+ // the store, or by an earlier task this same tick) is never handed to
97
+ // a second one, guarding the rare case of two Codex tasks launched in
98
+ // the same cwd within the same discovery window. The `ticking` guard
99
+ // above is what makes "this same tick" the only case that can ever
100
+ // happen — see its doc for why a cross-tick race would otherwise slip
101
+ // past this Set entirely.
102
+ const claimedThreadIds = new Set(allTasks.map((t) => t.threadId).filter((id) => Boolean(id)));
103
+ const tasks = allTasks.filter((t) => t.runtime === "codex" &&
104
+ (t.state === "active" || t.state === "awaiting_external_start"));
105
+ // Resolved ONCE per tick, not per task — the production getter
106
+ // re-reads settings.json on every call, so per-task was an N+1 read
107
+ // (code-review finding). A live edit still lands next tick either way.
108
+ const stallTimeoutMs = await this.resolveStallTimeoutMs();
109
+ const launchConfirmTimeoutMs = await this.resolveLaunchConfirmTimeoutMs();
110
+ for (const task of tasks) {
111
+ await this.checkTask(task, claimedThreadIds, stallTimeoutMs, launchConfirmTimeoutMs);
112
+ }
113
+ }
114
+ finally {
115
+ this.ticking = false;
116
+ }
117
+ }
118
+ async checkTask(task, claimedThreadIds, stallTimeoutMs, launchConfirmTimeoutMs) {
119
+ const lastDataAt = this.deps.ptyManager.getLastDataAt(task.taskId);
120
+ if (lastDataAt === null) {
121
+ // pty gone (PR #466 preflight finding) — any notice describes a
122
+ // state that no longer exists; don't leave it in the Inbox forever.
123
+ this.episodes.delete(task.taskId);
124
+ this.notices.delete(task.taskId);
125
+ return;
126
+ }
127
+ if (!task.threadId && this.deps.discoverThreadId && task.launchedAt) {
128
+ const threadId = await this.deps.discoverThreadId({
129
+ cwd: task.cwd,
130
+ sinceIso: task.launchedAt,
131
+ excludeThreadIds: claimedThreadIds,
132
+ });
133
+ if (threadId) {
134
+ claimedThreadIds.add(threadId);
135
+ this.deps.store.patch(task.taskId, { threadId });
136
+ await this.deps.store.persist();
137
+ task = { ...task, threadId };
138
+ }
139
+ }
140
+ const now = this.nowFn();
141
+ const silenceMs = now - lastDataAt;
142
+ // §5.2 — launch-confirmation timeout: distinct, shorter window, only
143
+ // while still awaiting the handshake and nothing has ever streamed.
144
+ // Disposition (external-code-review, OpenAI MEDIUM, accepted not fixed):
145
+ // `lastDataAt` is PtyManager's generic "any bytes" idle timer (ADR-068-A1)
146
+ // — a shell-prompt echo counts the same as a real Codex frame. Accepted:
147
+ // AC8's CLI check closes the common case; `codex-terminal-signal-detect.ts`
148
+ // already accepts the same fragile-TUI-matching gap elsewhere.
149
+ if (task.state === "awaiting_external_start") {
150
+ if (silenceMs >= launchConfirmTimeoutMs) {
151
+ this.setNotice(task.taskId, "launch_confirmation_failed", "Codex never produced output after launch — the terminal may not have started correctly.");
152
+ }
153
+ return;
154
+ }
155
+ // Doubt-review finding: reaching here means state left
156
+ // awaiting_external_start, so a stale launch_confirmation_failed
157
+ // banner must not keep sitting in the Inbox for a healthy run.
158
+ if (this.notices.get(task.taskId)?.kind === "launch_confirmation_failed") {
159
+ this.notices.delete(task.taskId);
160
+ }
161
+ const prev = this.episodes.get(task.taskId);
162
+ if (!prev || prev.lastSeenDataAt !== lastDataAt) {
163
+ this.episodes.set(task.taskId, { lastSeenDataAt: lastDataAt, nudged: false });
164
+ // A fresh episode's nudge notice is stale — mirrors the two clears above.
165
+ if (this.notices.get(task.taskId)?.kind === "nudge_sent") {
166
+ this.notices.delete(task.taskId);
167
+ }
168
+ }
169
+ if (silenceMs < stallTimeoutMs)
170
+ return;
171
+ const project = this.deps.getProjectById(task.projectId);
172
+ if (!project)
173
+ return;
174
+ const outcome = await this.deps.runOracle({
175
+ projectRoot: project.path,
176
+ phase: task.phase ?? "",
177
+ session: task.sessionUuid,
178
+ since: task.launchedAt,
179
+ });
180
+ if (outcome.kind !== "ok")
181
+ return; // engine-unavailable/failed — try again next tick
182
+ await this.classify(task, outcome.result.verdict, outcome.result.evidence);
183
+ }
184
+ async classify(task, verdict, evidence) {
185
+ const episode = this.episodes.get(task.taskId);
186
+ // External-code-review (GLM MEDIUM): a delivery_error notice, once
187
+ // set, was never cleared unless the task reached "done" — mirrors the
188
+ // launch_confirmation_failed clearing fix in checkTask() above.
189
+ const isDeliveryError = verdict === "delivery_pending" && evidence.delivery_state === "error";
190
+ if (!isDeliveryError && this.notices.get(task.taskId)?.kind === "delivery_error") {
191
+ this.notices.delete(task.taskId);
192
+ }
193
+ if (verdict === "done") {
194
+ await this.markDone(task.taskId);
195
+ return;
196
+ }
197
+ if (verdict === "delivery_pending") {
198
+ if (evidence.delivery_state === "error") {
199
+ this.setNotice(task.taskId, "delivery_error", "Codex's PR delivery failed (CI failed or the PR was closed) — needs your attention.");
200
+ }
201
+ // absent / "indeterminate" — case 13 proper: keep re-polling, never nudge.
202
+ //
203
+ // Disposition (external-code-review, GLM MEDIUM, accepted not
204
+ // fixed): re-polls the oracle every 60s tick while stalled+pending
205
+ // — §1.6/§5.1's "low-frequency" language could read as wanting a
206
+ // slower interval. Accepted: spec's "Open items" #4 names this
207
+ // interval a build-time call, and 60s matches the watcher's one
208
+ // existing tick rather than a second timer for an unspecified value.
209
+ return;
210
+ }
211
+ if (!episode || episode.nudged) {
212
+ if (verdict === "no_oracle") {
213
+ // §5.4 (external-code-review, OpenAI MEDIUM): the self-report's
214
+ // one behavior-changing use — no_oracle has no other completion
215
+ // signal, so a well-formed done:true report still on-screen after
216
+ // the spent nudge counts as real completion. Every OTHER verdict
217
+ // still defers to the oracle on disagreement, per §5.4.
218
+ const selfReport = parseShipwrightStatusReport(this.deps.peekTerminalText?.(task.taskId) ?? "");
219
+ if (selfReport?.done) {
220
+ await this.markDone(task.taskId);
221
+ return;
222
+ }
223
+ this.setNotice(task.taskId, "no_oracle_unresolved", "This phase has no automated completion check and the self-check nudge didn't resolve it.");
224
+ }
225
+ return;
226
+ }
227
+ // not_done or no_oracle — one nudge per episode. A watched task
228
+ // (attachCount !== 0) gets neither, by design (doubt-review, low):
229
+ // someone already has the terminal open.
230
+ if (this.deps.ptyManager.attachCount(task.taskId) !== 0)
231
+ return;
232
+ this.deps.ptyManager.write(task.taskId, verdict === "no_oracle" ? SELF_CHECK_PROMPT : WAKER_PROMPT);
233
+ episode.nudged = true;
234
+ this.setNotice(task.taskId, "nudge_sent", verdict === "no_oracle"
235
+ ? "Sent a self-check nudge — no automated completion check exists for this phase."
236
+ : "Sent a nudge — the completion oracle reports this run isn't done yet.");
237
+ }
238
+ setNotice(taskId, kind, detail) {
239
+ this.notices.set(taskId, { taskId, kind, detail, at: this.nowFn() });
240
+ }
241
+ // Shared by an oracle "done" verdict and a §5.4 self-report completion.
242
+ // boardColumn synced alongside state (doubt-review finding) — mirrors
243
+ // POST /tasks/:id/close's AC-6 fix; otherwise a task dragged to a
244
+ // non-Done column stays stranded/locked once auto-completed.
245
+ async markDone(taskId) {
246
+ this.episodes.delete(taskId);
247
+ this.notices.delete(taskId);
248
+ this.deps.store.patch(taskId, { state: "done", boardColumn: "done" });
249
+ await this.deps.store.persist();
250
+ }
251
+ }
252
+ //# sourceMappingURL=codex-task-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-task-watcher.js","sourceRoot":"","sources":["../../src/core/codex-task-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** A pending Codex approval request (command exec or patch apply) in the
2
+ * trailing text of a live embedded terminal, or `null`. */
3
+ export declare function extractCodexApprovalPrompt(visibleText: string): string | null;
4
+ /** A Codex-reported structured error/turn-abort in the trailing text of a
5
+ * live embedded terminal, or `null`. */
6
+ export declare function extractCodexErrorText(visibleText: string): string | null;
7
+ //# sourceMappingURL=codex-terminal-signal-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-terminal-signal-detect.d.ts","sourceRoot":"","sources":["../../src/core/codex-terminal-signal-detect.ts"],"names":[],"mappings":"AAuFA;4DAC4D;AAC5D,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS7E;AAED;yCACyC;AACzC,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAaxE"}
@@ -0,0 +1,113 @@
1
+ /*
2
+ * codex-terminal-signal-detect.ts — Codex Light §5.3 "Guided-mode approvals
3
+ * and structured errors": pure detectors over the visible-viewport text of
4
+ * a Codex-runtime embedded terminal, mirroring `terminal-prompt-detect.ts`'s
5
+ * shape (bottom-anchored, bounded, best-effort) but keyed to Codex's own
6
+ * strings instead of Claude's.
7
+ *
8
+ * Evidence: `codex-task-watcher.ts`'s module header previously scoped this
9
+ * detector OUT as "no verified plain-pty-TUI text pattern to build a
10
+ * detector from yet" — the spec's own §3 confirmation test only exercised
11
+ * `request_user_input` over the APP-SERVER protocol (Stage 2, not v1). That
12
+ * gap is now closed for the plain-pty case: the exact strings below were
13
+ * extracted directly from the real, installed `codex-cli 0.147.0` Windows
14
+ * binary (`@openai/codex-win32-x64`'s `codex.exe`, via a printable-string
15
+ * scan), the same evidence tier `codex-thread-discovery.ts` used for the
16
+ * rollout-file naming convention. One honest gap remains, smaller than that
17
+ * one: these strings are confirmed to exist verbatim in the binary, not
18
+ * (yet) observed in an actual rendered pty capture of a live approval
19
+ * dialog — ratatui box-drawing/wrapping around them is unverified. The
20
+ * detectors are therefore deliberately conservative (a short, literal
21
+ * heading match within a bottom-anchored recency window, no footer-shape
22
+ * assumptions) so a wrapped border cannot produce a false NEGATIVE beyond
23
+ * "missed this tick, the next poll on unchanged text still forms a false
24
+ * positive risk that a real capture might have avoided" — and the anchor
25
+ * strings are distinctive enough (only Codex's own approval elicitation or
26
+ * error footer would ever emit them) that a false POSITIVE is effectively
27
+ * impossible.
28
+ *
29
+ * Independent of the silence-timer/oracle loop (§5.3's own wording) — wired
30
+ * as an Inbox post-pass (`external/inbox/_codex.ts`), not into
31
+ * `CodexTaskWatcher.tick()`, exactly like `terminal_prompt`'s own
32
+ * `appendTerminalPrompts` post-pass.
33
+ */
34
+ /** Recency window — how many trailing lines of visible text count as "the
35
+ * current bottom-most content" for either signal. A live dialog or error
36
+ * footer is always the last thing Codex printed; older scrollback above
37
+ * this window is deliberately never scanned (an old, since-scrolled-past
38
+ * approval/error must not resurrect itself as "still pending"). */
39
+ const RECENCY_WINDOW_LINES = 40;
40
+ /** Codex's two known approval-elicitation headings (command exec, patch
41
+ * apply) — verified verbatim in the real codex.exe binary. */
42
+ const APPROVAL_HEADING = /Allow Codex to (run `|apply proposed code changes\?)/i;
43
+ /** Codex's generic turn-ending error footer — shown for a turn abort,
44
+ * Ctrl-C interrupt, high load, rate limit, etc.; the one constant across
45
+ * all of them. Verified verbatim in the real codex.exe binary. */
46
+ const ERROR_FOOTER = /Something went wrong\??\s*Hit\s*`?\/feedback`?\s*to report the issue/i;
47
+ const MAX_BLOCK_LINES = 24;
48
+ /** Mirrors terminal-prompt-detect.ts's MAX_QUESTION_TEXT_LEN cap — keeps a
49
+ * pathological viewport from leaking unbounded text into the Inbox. */
50
+ const MAX_SIGNAL_TEXT_LEN = 4000;
51
+ function isBlank(line) {
52
+ return line.trim().length === 0;
53
+ }
54
+ function recencyLines(visibleText) {
55
+ const lines = visibleText.split("\n");
56
+ const startIndex = Math.max(0, lines.length - RECENCY_WINDOW_LINES);
57
+ return { lines: lines.slice(startIndex), startIndex };
58
+ }
59
+ /** Collect a bounded block around the matched heading line — from the
60
+ * heading down to the next blank-line gap or the hard cap, so the block
61
+ * captures the command/heading plus its immediately-following option
62
+ * list without pulling in unrelated scrollback. */
63
+ function collectBlock(lines, headingIndex) {
64
+ const block = [];
65
+ let blankRun = 0;
66
+ for (let i = headingIndex; i < lines.length && block.length < MAX_BLOCK_LINES; i++) {
67
+ const line = lines[i];
68
+ if (isBlank(line)) {
69
+ blankRun++;
70
+ if (blankRun >= 2)
71
+ break;
72
+ }
73
+ else {
74
+ blankRun = 0;
75
+ }
76
+ block.push(line);
77
+ }
78
+ while (block.length > 0 && isBlank(block[block.length - 1]))
79
+ block.pop();
80
+ const text = block.join("\n");
81
+ return text.length > MAX_SIGNAL_TEXT_LEN ? text.slice(0, MAX_SIGNAL_TEXT_LEN) : text;
82
+ }
83
+ /** A pending Codex approval request (command exec or patch apply) in the
84
+ * trailing text of a live embedded terminal, or `null`. */
85
+ export function extractCodexApprovalPrompt(visibleText) {
86
+ if (!visibleText)
87
+ return null;
88
+ const { lines } = recencyLines(visibleText);
89
+ for (let i = lines.length - 1; i >= 0; i--) {
90
+ if (APPROVAL_HEADING.test(lines[i])) {
91
+ return collectBlock(lines, i);
92
+ }
93
+ }
94
+ return null;
95
+ }
96
+ /** A Codex-reported structured error/turn-abort in the trailing text of a
97
+ * live embedded terminal, or `null`. */
98
+ export function extractCodexErrorText(visibleText) {
99
+ if (!visibleText)
100
+ return null;
101
+ const { lines } = recencyLines(visibleText);
102
+ for (let i = lines.length - 1; i >= 0; i--) {
103
+ if (ERROR_FOOTER.test(lines[i])) {
104
+ // The error line itself is usually self-contained ("<cause>.
105
+ // Something went wrong? Hit `/feedback` ...") — a few lines of
106
+ // leading context in case the cause wrapped onto the prior line.
107
+ const from = Math.max(0, i - 2);
108
+ return collectBlock(lines, from);
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ //# sourceMappingURL=codex-terminal-signal-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-terminal-signal-detect.js","sourceRoot":"","sources":["../../src/core/codex-terminal-signal-detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface CodexThreadDiscoveryDeps {
2
+ readdir: (dir: string) => Promise<string[]>;
3
+ /** Reads just the head of a file — rollout files can be large, but `session_meta` is always the very first line. */
4
+ readHead: (filePath: string, maxBytes: number) => Promise<string>;
5
+ homeDir: () => string;
6
+ }
7
+ export declare function codexSessionsRoot(deps: Pick<CodexThreadDiscoveryDeps, "homeDir">): string;
8
+ export interface DiscoverCodexThreadIdArgs {
9
+ cwd: string;
10
+ /** ISO-8601 — only rollout files at/after this instant are considered. */
11
+ sinceIso: string;
12
+ /** Skip these thread ids — already claimed by another task this process knows about. */
13
+ excludeThreadIds?: ReadonlySet<string>;
14
+ }
15
+ /**
16
+ * Best-effort, filename-first discovery of the thread id a fresh Codex
17
+ * launch produced. Returns `null` (not an error) when nothing matches yet.
18
+ */
19
+ export declare function discoverCodexThreadId(args: DiscoverCodexThreadIdArgs, deps: CodexThreadDiscoveryDeps): Promise<string | null>;
20
+ export declare const defaultCodexThreadDiscoveryDeps: CodexThreadDiscoveryDeps;
21
+ //# sourceMappingURL=codex-thread-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-thread-discovery.d.ts","sourceRoot":"","sources":["../../src/core/codex-thread-discovery.ts"],"names":[],"mappings":"AAkDA,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,oHAAoH;IACpH,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB;AAkBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,wBAAwB,EAAE,SAAS,CAAC,GAAG,MAAM,CAEzF;AA2BD,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,yBAAyB,EAC/B,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqDxB;AAED,eAAO,MAAM,+BAA+B,EAAE,wBAa7C,CAAC"}
@@ -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