@svenroth-ai/shipwright 0.27.0 → 0.29.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 (799) hide show
  1. package/client/dist/apple-touch-icon.png +0 -0
  2. package/client/dist/assets/{EmbeddedTerminal-CqCQUDtp.js → EmbeddedTerminal-IkAS1bic.js} +30 -30
  3. package/client/dist/assets/{abnfDiagram-VRR7QNED-DX2objTP.js → abnfDiagram-VCTEODGH-CclAL-Ri.js} +1 -1
  4. package/client/dist/assets/arc-C8vUxwav.js +1 -0
  5. package/client/dist/assets/architectureDiagram-5GKGNRK7-DdrrZJx7.js +36 -0
  6. package/client/dist/assets/blockDiagram-I7D4REHJ-CMhbhsVq.js +129 -0
  7. package/client/dist/assets/c4Diagram-7LVT6UL2-OvlH6BiV.js +38 -0
  8. package/client/dist/assets/channel-BtkABUIE.js +1 -0
  9. package/client/dist/assets/{chunk-2Q5K7J3B-C111EHL6.js → chunk-2Q5K7J3B-BxUk85j7.js} +1 -1
  10. package/client/dist/assets/{chunk-5VM5RSS4-DIejoaXS.js → chunk-5VM5RSS4-DoTSs3Kn.js} +1 -1
  11. package/client/dist/assets/{chunk-32BRIVSS-DrCYs2XG.js → chunk-F27PBJKO-DquVu1wX.js} +1 -1
  12. package/client/dist/assets/{chunk-EX3LRPZG-CGWNeH2g.js → chunk-IMKFNOWR-8l4wPLQK.js} +5 -5
  13. package/client/dist/assets/{chunk-JWPE2WC7-CCH0SRFY.js → chunk-JWPE2WC7-CTAa0a4O.js} +1 -1
  14. package/client/dist/assets/chunk-POPQ4Y6H-BZ6zpqEF.js +1 -0
  15. package/client/dist/assets/{chunk-MOJQB5TN-B3OpZGRv.js → chunk-SVP7TREG-Dx7pMiq4.js} +1 -1
  16. package/client/dist/assets/{chunk-V7JOEXUC-B6Bu8x1y.js → chunk-TICWLB2K-BtDKT858.js} +1 -1
  17. package/client/dist/assets/{chunk-XXDRQBXY-xyjuuhxl.js → chunk-XXDRQBXY-BbrrrzuM.js} +1 -1
  18. package/client/dist/assets/classDiagram-ZZMXUADV-2gEcH3cX.js +1 -0
  19. package/client/dist/assets/classDiagram-v2-VYDZK3BY-2gEcH3cX.js +1 -0
  20. package/client/dist/assets/{cose-bilkent-JH36ORCC-BQIH3SCK.js → cose-bilkent-JH36ORCC-Bhem6unn.js} +1 -1
  21. package/client/dist/assets/{cynefin-VYW2F7L2-oyLAz8te.js → cynefin-OW5HDTMX-hukx0bAt.js} +3 -3
  22. package/client/dist/assets/{cynefinDiagram-TSTJHNR4-DoLCsH0l.js → cynefinDiagram-5FMLGOSQ-CGogKYMK.js} +1 -1
  23. package/client/dist/assets/dagre-GXQ25YYZ-BiLo3XBj.js +4 -0
  24. package/client/dist/assets/diagram-S7CK7UJ4-DBfdjdN6.js +30 -0
  25. package/client/dist/assets/diagram-UQ7AKVKN-3CvmyZYO.js +41 -0
  26. package/client/dist/assets/{diagram-FQU43EPY-DFuYE0Vf.js → diagram-VSXAHHWV-COG9399I.js} +2 -2
  27. package/client/dist/assets/{diagram-G47NLZAW-CffCZVXk.js → diagram-VX7I27RA-Dftpj84a.js} +1 -1
  28. package/client/dist/assets/{diagram-NH7WQ7WH-BhrHtUlt.js → diagram-Z3DM3KII-Dw9_CGLA.js} +1 -1
  29. package/client/dist/assets/{ebnfDiagram-CCIWWBDH-DfV7gT4m.js → ebnfDiagram-PWID7BFC-CJirhPah.js} +1 -1
  30. package/client/dist/assets/erDiagram-RLTQ6QDP-B11aYoo6.js +99 -0
  31. package/client/dist/assets/flowDiagram-HODETNUW-CPC6X9E5.js +168 -0
  32. package/client/dist/assets/{ganttDiagram-NO4QXBWP-BclyOgMb.js → ganttDiagram-EL5Y4UJY-DDSk2AAg.js} +4 -4
  33. package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-BXT4rIKj.js → gitGraphDiagram-WWUBYQGX-D_2UGciq.js} +1 -1
  34. package/client/dist/assets/index-DDSwQXcp.js +924 -0
  35. package/client/dist/assets/index-DWrPE3aq.css +1 -0
  36. package/client/dist/assets/infoDiagram-27XIBGKW-BuUv5Wms.js +2 -0
  37. package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-BBUFWq5C.js → ishikawaDiagram-5VMMS53U-DpnAnJ0q.js} +4 -4
  38. package/client/dist/assets/{journeyDiagram-5HDEW3XC-CmclipcQ.js → journeyDiagram-3NMN7TZE-CFUsXz2q.js} +2 -2
  39. package/client/dist/assets/{kanban-definition-HUTT4EX6-eIzUeZ03.js → kanban-definition-UXKFOSKX-BAq4Kujj.js} +8 -8
  40. package/client/dist/assets/katex-C5jXJg4s.js +257 -0
  41. package/client/dist/assets/layout-CccpfEe3.js +1 -0
  42. package/client/dist/assets/{linear-DGiT7uKK.js → linear-BIeIr2tp.js} +1 -1
  43. package/client/dist/assets/mermaid.core-B-Ezy6Me.js +312 -0
  44. package/client/dist/assets/{mindmap-definition-LN4V7U3C-C4ANnNiP.js → mindmap-definition-YA3MSWOX-CMPZ0Ggp.js} +2 -2
  45. package/client/dist/assets/{pegDiagram-2B236MQR-DnMeh3Yh.js → pegDiagram-XKGWAZYB-B0_2KQ6f.js} +1 -1
  46. package/client/dist/assets/{pieDiagram-ENE6RG2P-CKV_rkhF.js → pieDiagram-E7YTZNPT-1-nOk5pZ.js} +3 -3
  47. package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-BuUsGwHh.js → quadrantDiagram-AXDQQJYC-C_RdmOuq.js} +1 -1
  48. package/client/dist/assets/{railroadDiagram-RFXS5EU6-BwwdKnFL.js → railroadDiagram-O6MQD6OU-o73KM0oq.js} +1 -1
  49. package/client/dist/assets/{requirementDiagram-TGXJPOKE-CpQZouJV.js → requirementDiagram-BXWQKSXE-DnhCWJHv.js} +5 -5
  50. package/client/dist/assets/{sankeyDiagram-HTMAVEWB-4fnDUNVa.js → sankeyDiagram-P5KCCOFB-CVkYgfTV.js} +4 -4
  51. package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-BOcaWlM0.js → sequenceDiagram-WJ2MYXX4-BYLed29R.js} +1 -1
  52. package/client/dist/assets/{sizeCapture-X5ZJPWSS-_pv-9R0c.js → sizeCapture-INFHLROL-CYb4HDaH.js} +1 -1
  53. package/client/dist/assets/stateDiagram-D77RDMKH-CNKFRye_.js +1 -0
  54. package/client/dist/assets/stateDiagram-v2-MP3YSRHH-NpMhMQ36.js +1 -0
  55. package/client/dist/assets/swimlanes-42K2YHIH-BhsYrplp.js +1 -0
  56. package/client/dist/assets/swimlanesDiagram-VR7AAH4N-B4frkWBG.js +8 -0
  57. package/client/dist/assets/{timeline-definition-FHXFAJF6-rhGYElgn.js → timeline-definition-24CTP7MA-DiUXzB2p.js} +3 -3
  58. package/client/dist/assets/{vennDiagram-L72KCM5P-BoGjRxyA.js → vennDiagram-4TSXK5OY-aE4j6W86.js} +5 -5
  59. package/client/dist/assets/{wardleyDiagram-EHGQE667-D-IGv5bH.js → wardleyDiagram-VM6X3IG4-BxJXq0mU.js} +1 -1
  60. package/client/dist/assets/xychartDiagram-S5SC5T6Z-4vHeL9zc.js +7 -0
  61. package/client/dist/favicon-16.png +0 -0
  62. package/client/dist/favicon-32.png +0 -0
  63. package/client/dist/icon-192.png +0 -0
  64. package/client/dist/icon-512.png +0 -0
  65. package/client/dist/icon-maskable-512.png +0 -0
  66. package/client/dist/index.html +11 -2
  67. package/client/dist/manifest.json +13 -0
  68. package/lib/preflight.mjs +24 -5
  69. package/lib/util.mjs +5 -1
  70. package/package.json +2 -2
  71. package/scripts/deploy-procs.mjs +105 -20
  72. package/scripts/deploy-swap.mjs +23 -2
  73. package/server/dist/config.d.ts +9 -0
  74. package/server/dist/config.d.ts.map +1 -1
  75. package/server/dist/config.js +8 -2
  76. package/server/dist/config.js.map +1 -1
  77. package/server/dist/core/adopt-scan-findings.d.ts +12 -0
  78. package/server/dist/core/adopt-scan-findings.d.ts.map +1 -0
  79. package/server/dist/core/adopt-scan-findings.js +96 -0
  80. package/server/dist/core/adopt-scan-findings.js.map +1 -0
  81. package/server/dist/core/adopt-scan.d.ts +49 -0
  82. package/server/dist/core/adopt-scan.d.ts.map +1 -0
  83. package/server/dist/core/adopt-scan.js +201 -0
  84. package/server/dist/core/adopt-scan.js.map +1 -0
  85. package/server/dist/core/campaign-events.d.ts.map +1 -1
  86. package/server/dist/core/campaign-events.js +1 -0
  87. package/server/dist/core/campaign-events.js.map +1 -1
  88. package/server/dist/core/campaign-loop-state.d.ts.map +1 -1
  89. package/server/dist/core/campaign-loop-state.js +54 -21
  90. package/server/dist/core/campaign-loop-state.js.map +1 -1
  91. package/server/dist/core/campaign-parse.d.ts +4 -0
  92. package/server/dist/core/campaign-parse.d.ts.map +1 -1
  93. package/server/dist/core/campaign-parse.js +9 -0
  94. package/server/dist/core/campaign-parse.js.map +1 -1
  95. package/server/dist/core/campaign-readiness-schema.d.ts +33 -0
  96. package/server/dist/core/campaign-readiness-schema.d.ts.map +1 -0
  97. package/server/dist/core/campaign-readiness-schema.js +70 -0
  98. package/server/dist/core/campaign-readiness-schema.js.map +1 -0
  99. package/server/dist/core/campaign-readiness.d.ts +59 -0
  100. package/server/dist/core/campaign-readiness.d.ts.map +1 -0
  101. package/server/dist/core/campaign-readiness.js +163 -0
  102. package/server/dist/core/campaign-readiness.js.map +1 -0
  103. package/server/dist/core/campaign-status-json.d.ts +3 -0
  104. package/server/dist/core/campaign-status-json.d.ts.map +1 -1
  105. package/server/dist/core/campaign-status-json.js +7 -0
  106. package/server/dist/core/campaign-status-json.js.map +1 -1
  107. package/server/dist/core/campaign-store.d.ts.map +1 -1
  108. package/server/dist/core/campaign-store.js +4 -1
  109. package/server/dist/core/campaign-store.js.map +1 -1
  110. package/server/dist/core/campaign-types.d.ts +8 -0
  111. package/server/dist/core/campaign-types.d.ts.map +1 -1
  112. package/server/dist/core/campaign-worktree-root.d.ts +19 -0
  113. package/server/dist/core/campaign-worktree-root.d.ts.map +1 -0
  114. package/server/dist/core/campaign-worktree-root.js +76 -0
  115. package/server/dist/core/campaign-worktree-root.js.map +1 -0
  116. package/server/dist/core/claim-record-lock.d.ts +30 -0
  117. package/server/dist/core/claim-record-lock.d.ts.map +1 -0
  118. package/server/dist/core/claim-record-lock.js +90 -0
  119. package/server/dist/core/claim-record-lock.js.map +1 -0
  120. package/server/dist/core/cli-child-spawn.d.ts +28 -0
  121. package/server/dist/core/cli-child-spawn.d.ts.map +1 -0
  122. package/server/dist/core/cli-child-spawn.js +146 -0
  123. package/server/dist/core/cli-child-spawn.js.map +1 -0
  124. package/server/dist/core/codex-models-probe.d.ts +46 -0
  125. package/server/dist/core/codex-models-probe.d.ts.map +1 -0
  126. package/server/dist/core/codex-models-probe.js +103 -0
  127. package/server/dist/core/codex-models-probe.js.map +1 -0
  128. package/server/dist/core/codex-oracle-runner.d.ts +68 -0
  129. package/server/dist/core/codex-oracle-runner.d.ts.map +1 -0
  130. package/server/dist/core/codex-oracle-runner.js +124 -0
  131. package/server/dist/core/codex-oracle-runner.js.map +1 -0
  132. package/server/dist/core/codex-status-report.d.ts +6 -0
  133. package/server/dist/core/codex-status-report.d.ts.map +1 -0
  134. package/server/dist/core/codex-status-report.js +40 -0
  135. package/server/dist/core/codex-status-report.js.map +1 -0
  136. package/server/dist/core/codex-task-watcher-types.d.ts +69 -0
  137. package/server/dist/core/codex-task-watcher-types.d.ts.map +1 -0
  138. package/server/dist/core/codex-task-watcher-types.js +12 -0
  139. package/server/dist/core/codex-task-watcher-types.js.map +1 -0
  140. package/server/dist/core/codex-task-watcher.d.ts +30 -0
  141. package/server/dist/core/codex-task-watcher.d.ts.map +1 -0
  142. package/server/dist/core/codex-task-watcher.js +252 -0
  143. package/server/dist/core/codex-task-watcher.js.map +1 -0
  144. package/server/dist/core/codex-terminal-signal-detect.d.ts +7 -0
  145. package/server/dist/core/codex-terminal-signal-detect.d.ts.map +1 -0
  146. package/server/dist/core/codex-terminal-signal-detect.js +113 -0
  147. package/server/dist/core/codex-terminal-signal-detect.js.map +1 -0
  148. package/server/dist/core/codex-thread-discovery.d.ts +21 -0
  149. package/server/dist/core/codex-thread-discovery.d.ts.map +1 -0
  150. package/server/dist/core/codex-thread-discovery.js +169 -0
  151. package/server/dist/core/codex-thread-discovery.js.map +1 -0
  152. package/server/dist/core/codextender-auth-file-sweep.d.ts +41 -0
  153. package/server/dist/core/codextender-auth-file-sweep.d.ts.map +1 -0
  154. package/server/dist/core/codextender-auth-file-sweep.js +97 -0
  155. package/server/dist/core/codextender-auth-file-sweep.js.map +1 -0
  156. package/server/dist/core/codextender-proxy-probe.d.ts +80 -0
  157. package/server/dist/core/codextender-proxy-probe.d.ts.map +1 -0
  158. package/server/dist/core/codextender-proxy-probe.js +179 -0
  159. package/server/dist/core/codextender-proxy-probe.js.map +1 -0
  160. package/server/dist/core/contract-version.d.ts +16 -1
  161. package/server/dist/core/contract-version.d.ts.map +1 -1
  162. package/server/dist/core/contract-version.js +16 -1
  163. package/server/dist/core/contract-version.js.map +1 -1
  164. package/server/dist/core/custom-profile-command-policy.d.ts +6 -0
  165. package/server/dist/core/custom-profile-command-policy.d.ts.map +1 -0
  166. package/server/dist/core/custom-profile-command-policy.js +110 -0
  167. package/server/dist/core/custom-profile-command-policy.js.map +1 -0
  168. package/server/dist/core/custom-profile-loader.d.ts +34 -0
  169. package/server/dist/core/custom-profile-loader.d.ts.map +1 -0
  170. package/server/dist/core/custom-profile-loader.js +225 -0
  171. package/server/dist/core/custom-profile-loader.js.map +1 -0
  172. package/server/dist/core/launcher-codex.d.ts +61 -0
  173. package/server/dist/core/launcher-codex.d.ts.map +1 -0
  174. package/server/dist/core/launcher-codex.js +187 -0
  175. package/server/dist/core/launcher-codex.js.map +1 -0
  176. package/server/dist/core/launcher-codextender-env.d.ts +44 -0
  177. package/server/dist/core/launcher-codextender-env.d.ts.map +1 -0
  178. package/server/dist/core/launcher-codextender-env.js +212 -0
  179. package/server/dist/core/launcher-codextender-env.js.map +1 -0
  180. package/server/dist/core/launcher-codextender.d.ts +72 -0
  181. package/server/dist/core/launcher-codextender.d.ts.map +1 -0
  182. package/server/dist/core/launcher-codextender.js +98 -0
  183. package/server/dist/core/launcher-codextender.js.map +1 -0
  184. package/server/dist/core/launcher-codextender.smoke-helpers.d.ts +25 -0
  185. package/server/dist/core/launcher-codextender.smoke-helpers.d.ts.map +1 -0
  186. package/server/dist/core/launcher-codextender.smoke-helpers.js +211 -0
  187. package/server/dist/core/launcher-codextender.smoke-helpers.js.map +1 -0
  188. package/server/dist/core/launcher-permission-flags.d.ts +17 -0
  189. package/server/dist/core/launcher-permission-flags.d.ts.map +1 -0
  190. package/server/dist/core/launcher-permission-flags.js +27 -0
  191. package/server/dist/core/launcher-permission-flags.js.map +1 -0
  192. package/server/dist/core/launcher.d.ts +18 -0
  193. package/server/dist/core/launcher.d.ts.map +1 -1
  194. package/server/dist/core/launcher.js +6 -0
  195. package/server/dist/core/launcher.js.map +1 -1
  196. package/server/dist/core/leadwright-preflight-transport.d.ts +27 -0
  197. package/server/dist/core/leadwright-preflight-transport.d.ts.map +1 -0
  198. package/server/dist/core/leadwright-preflight-transport.js +124 -0
  199. package/server/dist/core/leadwright-preflight-transport.js.map +1 -0
  200. package/server/dist/core/mission-context/artifacts-tests-ac.d.ts +6 -0
  201. package/server/dist/core/mission-context/artifacts-tests-ac.d.ts.map +1 -0
  202. package/server/dist/core/mission-context/artifacts-tests-ac.js +31 -0
  203. package/server/dist/core/mission-context/artifacts-tests-ac.js.map +1 -0
  204. package/server/dist/core/mission-context/artifacts-tests.d.ts.map +1 -1
  205. package/server/dist/core/mission-context/artifacts-tests.js +20 -0
  206. package/server/dist/core/mission-context/artifacts-tests.js.map +1 -1
  207. package/server/dist/core/mission-context/resolver-io.d.ts +10 -0
  208. package/server/dist/core/mission-context/resolver-io.d.ts.map +1 -1
  209. package/server/dist/core/mission-context/resolver-parts.d.ts +8 -7
  210. package/server/dist/core/mission-context/resolver-parts.d.ts.map +1 -1
  211. package/server/dist/core/mission-context/resolver-parts.js +22 -14
  212. package/server/dist/core/mission-context/resolver-parts.js.map +1 -1
  213. package/server/dist/core/mission-context/resolver.d.ts.map +1 -1
  214. package/server/dist/core/mission-context/resolver.js +1 -1
  215. package/server/dist/core/mission-context/resolver.js.map +1 -1
  216. package/server/dist/core/mission-context/run-id-recovery.d.ts +18 -2
  217. package/server/dist/core/mission-context/run-id-recovery.d.ts.map +1 -1
  218. package/server/dist/core/mission-context/run-id-recovery.js +38 -18
  219. package/server/dist/core/mission-context/run-id-recovery.js.map +1 -1
  220. package/server/dist/core/mission-context/traceability.d.ts.map +1 -1
  221. package/server/dist/core/mission-context/traceability.js +15 -1
  222. package/server/dist/core/mission-context/traceability.js.map +1 -1
  223. package/server/dist/core/mission-context/types-slice2.d.ts +44 -0
  224. package/server/dist/core/mission-context/types-slice2.d.ts.map +1 -1
  225. package/server/dist/core/model-tier-config-reader.d.ts +14 -1
  226. package/server/dist/core/model-tier-config-reader.d.ts.map +1 -1
  227. package/server/dist/core/model-tier-config-reader.js +34 -2
  228. package/server/dist/core/model-tier-config-reader.js.map +1 -1
  229. package/server/dist/core/powershell-probe.smoke-helpers.d.ts +12 -0
  230. package/server/dist/core/powershell-probe.smoke-helpers.d.ts.map +1 -0
  231. package/server/dist/core/powershell-probe.smoke-helpers.js +80 -0
  232. package/server/dist/core/powershell-probe.smoke-helpers.js.map +1 -0
  233. package/server/dist/core/preview-child-lifecycle.d.ts +7 -2
  234. package/server/dist/core/preview-child-lifecycle.d.ts.map +1 -1
  235. package/server/dist/core/preview-child-lifecycle.js +17 -5
  236. package/server/dist/core/preview-child-lifecycle.js.map +1 -1
  237. package/server/dist/core/preview-session-manager.d.ts +1 -0
  238. package/server/dist/core/preview-session-manager.d.ts.map +1 -1
  239. package/server/dist/core/preview-session-manager.js +2 -2
  240. package/server/dist/core/preview-session-manager.js.map +1 -1
  241. package/server/dist/core/project-actions-loader.d.ts +13 -0
  242. package/server/dist/core/project-actions-loader.d.ts.map +1 -1
  243. package/server/dist/core/project-actions-loader.js +28 -6
  244. package/server/dist/core/project-actions-loader.js.map +1 -1
  245. package/server/dist/core/project-data-dir.d.ts +41 -0
  246. package/server/dist/core/project-data-dir.d.ts.map +1 -0
  247. package/server/dist/core/project-data-dir.js +64 -0
  248. package/server/dist/core/project-data-dir.js.map +1 -0
  249. package/server/dist/core/project-data-migrate.d.ts +14 -0
  250. package/server/dist/core/project-data-migrate.d.ts.map +1 -0
  251. package/server/dist/core/project-data-migrate.js +94 -0
  252. package/server/dist/core/project-data-migrate.js.map +1 -0
  253. package/server/dist/core/project-manager.d.ts.map +1 -1
  254. package/server/dist/core/project-manager.js +9 -10
  255. package/server/dist/core/project-manager.js.map +1 -1
  256. package/server/dist/core/readiness-install-hints.d.ts +1 -1
  257. package/server/dist/core/readiness-install-hints.d.ts.map +1 -1
  258. package/server/dist/core/readiness-install-hints.js +5 -0
  259. package/server/dist/core/readiness-install-hints.js.map +1 -1
  260. package/server/dist/core/readiness-probe-run.d.ts +61 -0
  261. package/server/dist/core/readiness-probe-run.d.ts.map +1 -1
  262. package/server/dist/core/readiness-probe-run.js +93 -15
  263. package/server/dist/core/readiness-probe-run.js.map +1 -1
  264. package/server/dist/core/readiness-probe.d.ts +1 -1
  265. package/server/dist/core/readiness-probe.d.ts.map +1 -1
  266. package/server/dist/core/readiness-probe.js +36 -8
  267. package/server/dist/core/readiness-probe.js.map +1 -1
  268. package/server/dist/core/sdk-sessions-store.d.ts +46 -0
  269. package/server/dist/core/sdk-sessions-store.d.ts.map +1 -1
  270. package/server/dist/core/sdk-sessions-store.js +1 -0
  271. package/server/dist/core/sdk-sessions-store.js.map +1 -1
  272. package/server/dist/core/sdk-sessions-validate.d.ts.map +1 -1
  273. package/server/dist/core/sdk-sessions-validate.js +11 -0
  274. package/server/dist/core/sdk-sessions-validate.js.map +1 -1
  275. package/server/dist/core/session-file/access.d.ts +26 -0
  276. package/server/dist/core/session-file/access.d.ts.map +1 -0
  277. package/server/dist/core/session-file/access.js +143 -0
  278. package/server/dist/core/session-file/access.js.map +1 -0
  279. package/server/dist/core/session-file/asset-access.d.ts +15 -0
  280. package/server/dist/core/session-file/asset-access.d.ts.map +1 -0
  281. package/server/dist/core/session-file/asset-access.js +141 -0
  282. package/server/dist/core/session-file/asset-access.js.map +1 -0
  283. package/server/dist/core/session-file/evidence.d.ts +25 -0
  284. package/server/dist/core/session-file/evidence.d.ts.map +1 -0
  285. package/server/dist/core/session-file/evidence.js +201 -0
  286. package/server/dist/core/session-file/evidence.js.map +1 -0
  287. package/server/dist/core/session-file/probe.d.ts +16 -0
  288. package/server/dist/core/session-file/probe.d.ts.map +1 -0
  289. package/server/dist/core/session-file/probe.js +63 -0
  290. package/server/dist/core/session-file/probe.js.map +1 -0
  291. package/server/dist/core/session-file/safe-read.d.ts +33 -0
  292. package/server/dist/core/session-file/safe-read.d.ts.map +1 -0
  293. package/server/dist/core/session-file/safe-read.js +103 -0
  294. package/server/dist/core/session-file/safe-read.js.map +1 -0
  295. package/server/dist/core/session-file/sensitive.d.ts +5 -0
  296. package/server/dist/core/session-file/sensitive.d.ts.map +1 -0
  297. package/server/dist/core/session-file/sensitive.js +52 -0
  298. package/server/dist/core/session-file/sensitive.js.map +1 -0
  299. package/server/dist/core/session-info/collect.d.ts +70 -0
  300. package/server/dist/core/session-info/collect.d.ts.map +1 -0
  301. package/server/dist/core/session-info/collect.js +248 -0
  302. package/server/dist/core/session-info/collect.js.map +1 -0
  303. package/server/dist/core/session-info/line-scan.d.ts +20 -0
  304. package/server/dist/core/session-info/line-scan.d.ts.map +1 -0
  305. package/server/dist/core/session-info/line-scan.js +109 -0
  306. package/server/dist/core/session-info/line-scan.js.map +1 -0
  307. package/server/dist/core/session-info/remote-control.d.ts +9 -0
  308. package/server/dist/core/session-info/remote-control.d.ts.map +1 -0
  309. package/server/dist/core/session-info/remote-control.js +64 -0
  310. package/server/dist/core/session-info/remote-control.js.map +1 -0
  311. package/server/dist/core/session-info/session-info.d.ts +18 -0
  312. package/server/dist/core/session-info/session-info.d.ts.map +1 -0
  313. package/server/dist/core/session-info/session-info.js +170 -0
  314. package/server/dist/core/session-info/session-info.js.map +1 -0
  315. package/server/dist/core/session-info/small-file.d.ts +2 -0
  316. package/server/dist/core/session-info/small-file.d.ts.map +1 -0
  317. package/server/dist/core/session-info/small-file.js +42 -0
  318. package/server/dist/core/session-info/small-file.js.map +1 -0
  319. package/server/dist/core/session-info/subagent-transcript.d.ts +12 -0
  320. package/server/dist/core/session-info/subagent-transcript.d.ts.map +1 -0
  321. package/server/dist/core/session-info/subagent-transcript.js +78 -0
  322. package/server/dist/core/session-info/subagent-transcript.js.map +1 -0
  323. package/server/dist/core/session-info/subagents.d.ts +14 -0
  324. package/server/dist/core/session-info/subagents.d.ts.map +1 -0
  325. package/server/dist/core/session-info/subagents.js +92 -0
  326. package/server/dist/core/session-info/subagents.js.map +1 -0
  327. package/server/dist/core/session-info/test-fixtures.d.ts +50 -0
  328. package/server/dist/core/session-info/test-fixtures.d.ts.map +1 -0
  329. package/server/dist/core/session-info/test-fixtures.js +43 -0
  330. package/server/dist/core/session-info/test-fixtures.js.map +1 -0
  331. package/server/dist/core/session-info/types.d.ts +77 -0
  332. package/server/dist/core/session-info/types.d.ts.map +1 -0
  333. package/server/dist/core/session-info/types.js +14 -0
  334. package/server/dist/core/session-info/types.js.map +1 -0
  335. package/server/dist/core/settings-reader.d.ts +18 -0
  336. package/server/dist/core/settings-reader.d.ts.map +1 -0
  337. package/server/dist/core/settings-reader.js +40 -0
  338. package/server/dist/core/settings-reader.js.map +1 -0
  339. package/server/dist/core/shell-quote.d.ts +29 -0
  340. package/server/dist/core/shell-quote.d.ts.map +1 -1
  341. package/server/dist/core/shell-quote.js +34 -0
  342. package/server/dist/core/shell-quote.js.map +1 -1
  343. package/server/dist/core/stack-profiles-create.d.ts +31 -0
  344. package/server/dist/core/stack-profiles-create.d.ts.map +1 -0
  345. package/server/dist/core/stack-profiles-create.js +128 -0
  346. package/server/dist/core/stack-profiles-create.js.map +1 -0
  347. package/server/dist/core/stack-profiles.d.ts +49 -0
  348. package/server/dist/core/stack-profiles.d.ts.map +1 -0
  349. package/server/dist/core/stack-profiles.js +142 -0
  350. package/server/dist/core/stack-profiles.js.map +1 -0
  351. package/server/dist/core/task-editability.d.ts +1 -1
  352. package/server/dist/core/task-editability.d.ts.map +1 -1
  353. package/server/dist/core/task-editability.js +1 -0
  354. package/server/dist/core/task-editability.js.map +1 -1
  355. package/server/dist/core/triage-cli-runner.d.ts.map +1 -1
  356. package/server/dist/core/triage-cli-runner.js +6 -21
  357. package/server/dist/core/triage-cli-runner.js.map +1 -1
  358. package/server/dist/core/triage-compose.d.ts.map +1 -1
  359. package/server/dist/core/triage-compose.js +34 -3
  360. package/server/dist/core/triage-compose.js.map +1 -1
  361. package/server/dist/core/triage-store.d.ts +2 -1
  362. package/server/dist/core/triage-store.d.ts.map +1 -1
  363. package/server/dist/core/triage-store.js +1 -1
  364. package/server/dist/core/triage-store.js.map +1 -1
  365. package/server/dist/external/_shared/helpers.d.ts +2 -0
  366. package/server/dist/external/_shared/helpers.d.ts.map +1 -1
  367. package/server/dist/external/_shared/helpers.js.map +1 -1
  368. package/server/dist/external/actions/get.d.ts +3 -1
  369. package/server/dist/external/actions/get.d.ts.map +1 -1
  370. package/server/dist/external/actions/get.js +15 -4
  371. package/server/dist/external/actions/get.js.map +1 -1
  372. package/server/dist/external/actions/routes.d.ts +3 -1
  373. package/server/dist/external/actions/routes.d.ts.map +1 -1
  374. package/server/dist/external/actions/routes.js.map +1 -1
  375. package/server/dist/external/actions/stub.d.ts.map +1 -1
  376. package/server/dist/external/actions/stub.js +15 -4
  377. package/server/dist/external/actions/stub.js.map +1 -1
  378. package/server/dist/external/actions/upload-delete.d.ts.map +1 -1
  379. package/server/dist/external/actions/upload-delete.js +30 -20
  380. package/server/dist/external/actions/upload-delete.js.map +1 -1
  381. package/server/dist/external/actions/upload.d.ts.map +1 -1
  382. package/server/dist/external/actions/upload.js +5 -4
  383. package/server/dist/external/actions/upload.js.map +1 -1
  384. package/server/dist/external/create-external-routes-args.d.ts +124 -0
  385. package/server/dist/external/create-external-routes-args.d.ts.map +1 -0
  386. package/server/dist/external/create-external-routes-args.js +2 -0
  387. package/server/dist/external/create-external-routes-args.js.map +1 -0
  388. package/server/dist/external/inbox/_codex.d.ts +14 -0
  389. package/server/dist/external/inbox/_codex.d.ts.map +1 -0
  390. package/server/dist/external/inbox/_codex.js +88 -0
  391. package/server/dist/external/inbox/_codex.js.map +1 -0
  392. package/server/dist/external/inbox/_derive.d.ts.map +1 -1
  393. package/server/dist/external/inbox/_derive.js +11 -0
  394. package/server/dist/external/inbox/_derive.js.map +1 -1
  395. package/server/dist/external/inbox/_phase-gate.d.ts +9 -0
  396. package/server/dist/external/inbox/_phase-gate.d.ts.map +1 -0
  397. package/server/dist/external/inbox/_phase-gate.js +87 -0
  398. package/server/dist/external/inbox/_phase-gate.js.map +1 -0
  399. package/server/dist/external/inbox/_types.d.ts +30 -0
  400. package/server/dist/external/inbox/_types.d.ts.map +1 -1
  401. package/server/dist/external/inbox/_types.js +8 -5
  402. package/server/dist/external/inbox/_types.js.map +1 -1
  403. package/server/dist/external/inbox/routes.d.ts +7 -0
  404. package/server/dist/external/inbox/routes.d.ts.map +1 -1
  405. package/server/dist/external/inbox/routes.js +17 -2
  406. package/server/dist/external/inbox/routes.js.map +1 -1
  407. package/server/dist/external/launch/_helpers.d.ts +4 -0
  408. package/server/dist/external/launch/_helpers.d.ts.map +1 -1
  409. package/server/dist/external/launch/_helpers.js.map +1 -1
  410. package/server/dist/external/launch/action-substitution-branch.d.ts +12 -0
  411. package/server/dist/external/launch/action-substitution-branch.d.ts.map +1 -1
  412. package/server/dist/external/launch/action-substitution-branch.js +37 -3
  413. package/server/dist/external/launch/action-substitution-branch.js.map +1 -1
  414. package/server/dist/external/launch/branch-dispatch.d.ts +15 -0
  415. package/server/dist/external/launch/branch-dispatch.d.ts.map +1 -0
  416. package/server/dist/external/launch/branch-dispatch.js +73 -0
  417. package/server/dist/external/launch/branch-dispatch.js.map +1 -0
  418. package/server/dist/external/launch/campaign-step-branch.d.ts +7 -1
  419. package/server/dist/external/launch/campaign-step-branch.d.ts.map +1 -1
  420. package/server/dist/external/launch/campaign-step-branch.js +70 -2
  421. package/server/dist/external/launch/campaign-step-branch.js.map +1 -1
  422. package/server/dist/external/launch/claim-executor-permissions.d.ts +31 -0
  423. package/server/dist/external/launch/claim-executor-permissions.d.ts.map +1 -0
  424. package/server/dist/external/launch/claim-executor-permissions.js +107 -0
  425. package/server/dist/external/launch/claim-executor-permissions.js.map +1 -0
  426. package/server/dist/external/launch/claim-executor-template-arming.d.ts +42 -0
  427. package/server/dist/external/launch/claim-executor-template-arming.d.ts.map +1 -0
  428. package/server/dist/external/launch/claim-executor-template-arming.js +121 -0
  429. package/server/dist/external/launch/claim-executor-template-arming.js.map +1 -0
  430. package/server/dist/external/launch/claim-holder-gate.d.ts +9 -0
  431. package/server/dist/external/launch/claim-holder-gate.d.ts.map +1 -1
  432. package/server/dist/external/launch/claim-holder-gate.js +10 -2
  433. package/server/dist/external/launch/claim-holder-gate.js.map +1 -1
  434. package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts +3 -0
  435. package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts.map +1 -0
  436. package/server/dist/external/launch/claim-permission-perimeter-assert.js +24 -0
  437. package/server/dist/external/launch/claim-permission-perimeter-assert.js.map +1 -0
  438. package/server/dist/external/launch/legacy-fallback-branch.d.ts +14 -0
  439. package/server/dist/external/launch/legacy-fallback-branch.d.ts.map +1 -1
  440. package/server/dist/external/launch/legacy-fallback-branch.js +3 -1
  441. package/server/dist/external/launch/legacy-fallback-branch.js.map +1 -1
  442. package/server/dist/external/launch/master-run-branch.js +2 -2
  443. package/server/dist/external/launch/master-run-branch.js.map +1 -1
  444. package/server/dist/external/launch/mixed-intents-guard.d.ts +10 -0
  445. package/server/dist/external/launch/mixed-intents-guard.d.ts.map +1 -0
  446. package/server/dist/external/launch/mixed-intents-guard.js +49 -0
  447. package/server/dist/external/launch/mixed-intents-guard.js.map +1 -0
  448. package/server/dist/external/launch/parse-body.d.ts +29 -0
  449. package/server/dist/external/launch/parse-body.d.ts.map +1 -1
  450. package/server/dist/external/launch/parse-body.js +66 -0
  451. package/server/dist/external/launch/parse-body.js.map +1 -1
  452. package/server/dist/external/launch/routes.d.ts +3 -0
  453. package/server/dist/external/launch/routes.d.ts.map +1 -1
  454. package/server/dist/external/launch/routes.js +76 -109
  455. package/server/dist/external/launch/routes.js.map +1 -1
  456. package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts +20 -0
  457. package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts.map +1 -0
  458. package/server/dist/external/launch/runtime-chokepoint-codextender.js +51 -0
  459. package/server/dist/external/launch/runtime-chokepoint-codextender.js.map +1 -0
  460. package/server/dist/external/launch/runtime-chokepoint-errors.d.ts +33 -0
  461. package/server/dist/external/launch/runtime-chokepoint-errors.d.ts.map +1 -0
  462. package/server/dist/external/launch/runtime-chokepoint-errors.js +63 -0
  463. package/server/dist/external/launch/runtime-chokepoint-errors.js.map +1 -0
  464. package/server/dist/external/launch/runtime-chokepoint.d.ts +120 -0
  465. package/server/dist/external/launch/runtime-chokepoint.d.ts.map +1 -0
  466. package/server/dist/external/launch/runtime-chokepoint.js +201 -0
  467. package/server/dist/external/launch/runtime-chokepoint.js.map +1 -0
  468. package/server/dist/external/mission-context/facts.js +2 -2
  469. package/server/dist/external/mission-context/facts.js.map +1 -1
  470. package/server/dist/external/mission-context/routes.d.ts +33 -27
  471. package/server/dist/external/mission-context/routes.d.ts.map +1 -1
  472. package/server/dist/external/mission-context/routes.js +30 -27
  473. package/server/dist/external/mission-context/routes.js.map +1 -1
  474. package/server/dist/external/mission-context/test-harness.d.ts +6 -0
  475. package/server/dist/external/mission-context/test-harness.d.ts.map +1 -1
  476. package/server/dist/external/mission-context/test-harness.js +6 -1
  477. package/server/dist/external/mission-context/test-harness.js.map +1 -1
  478. package/server/dist/external/mission-context/wire.d.ts.map +1 -1
  479. package/server/dist/external/mission-context/wire.js +24 -2
  480. package/server/dist/external/mission-context/wire.js.map +1 -1
  481. package/server/dist/external/org/audit-log.d.ts +19 -0
  482. package/server/dist/external/org/audit-log.d.ts.map +1 -1
  483. package/server/dist/external/org/audit-log.js +33 -18
  484. package/server/dist/external/org/audit-log.js.map +1 -1
  485. package/server/dist/external/org/beat-effect-audit-read.d.ts +15 -0
  486. package/server/dist/external/org/beat-effect-audit-read.d.ts.map +1 -0
  487. package/server/dist/external/org/beat-effect-audit-read.js +73 -0
  488. package/server/dist/external/org/beat-effect-audit-read.js.map +1 -0
  489. package/server/dist/external/org/beat-register-health.d.ts +57 -0
  490. package/server/dist/external/org/beat-register-health.d.ts.map +1 -0
  491. package/server/dist/external/org/beat-register-health.js +125 -0
  492. package/server/dist/external/org/beat-register-health.js.map +1 -0
  493. package/server/dist/external/org/beat-register-release-core.d.ts.map +1 -1
  494. package/server/dist/external/org/beat-register-release-core.js +4 -1
  495. package/server/dist/external/org/beat-register-release-core.js.map +1 -1
  496. package/server/dist/external/org/beat-register-release-request.d.ts +20 -0
  497. package/server/dist/external/org/beat-register-release-request.d.ts.map +1 -0
  498. package/server/dist/external/org/beat-register-release-request.js +92 -0
  499. package/server/dist/external/org/beat-register-release-request.js.map +1 -0
  500. package/server/dist/external/org/beat-register-release.d.ts +3 -1
  501. package/server/dist/external/org/beat-register-release.d.ts.map +1 -1
  502. package/server/dist/external/org/beat-register-release.js +15 -57
  503. package/server/dist/external/org/beat-register-release.js.map +1 -1
  504. package/server/dist/external/org/beat-register.d.ts +18 -20
  505. package/server/dist/external/org/beat-register.d.ts.map +1 -1
  506. package/server/dist/external/org/beat-register.js +30 -56
  507. package/server/dist/external/org/beat-register.js.map +1 -1
  508. package/server/dist/external/org/beat-steps-read.d.ts +17 -0
  509. package/server/dist/external/org/beat-steps-read.d.ts.map +1 -0
  510. package/server/dist/external/org/beat-steps-read.js +89 -0
  511. package/server/dist/external/org/beat-steps-read.js.map +1 -0
  512. package/server/dist/external/org/charter-authority-read.d.ts +39 -0
  513. package/server/dist/external/org/charter-authority-read.d.ts.map +1 -0
  514. package/server/dist/external/org/charter-authority-read.js +142 -0
  515. package/server/dist/external/org/charter-authority-read.js.map +1 -0
  516. package/server/dist/external/org/commit-validate.d.ts +18 -0
  517. package/server/dist/external/org/commit-validate.d.ts.map +1 -0
  518. package/server/dist/external/org/commit-validate.js +59 -0
  519. package/server/dist/external/org/commit-validate.js.map +1 -0
  520. package/server/dist/external/org/commit-writes.d.ts +68 -0
  521. package/server/dist/external/org/commit-writes.d.ts.map +1 -0
  522. package/server/dist/external/org/commit-writes.js +110 -0
  523. package/server/dist/external/org/commit-writes.js.map +1 -0
  524. package/server/dist/external/org/commit.d.ts +73 -0
  525. package/server/dist/external/org/commit.d.ts.map +1 -0
  526. package/server/dist/external/org/commit.js +181 -0
  527. package/server/dist/external/org/commit.js.map +1 -0
  528. package/server/dist/external/org/commit.test-fixtures.d.ts +38 -0
  529. package/server/dist/external/org/commit.test-fixtures.d.ts.map +1 -0
  530. package/server/dist/external/org/commit.test-fixtures.js +67 -0
  531. package/server/dist/external/org/commit.test-fixtures.js.map +1 -0
  532. package/server/dist/external/org/countersign-core.d.ts +19 -0
  533. package/server/dist/external/org/countersign-core.d.ts.map +1 -0
  534. package/server/dist/external/org/countersign-core.js +122 -0
  535. package/server/dist/external/org/countersign-core.js.map +1 -0
  536. package/server/dist/external/org/countersign-request.d.ts +14 -0
  537. package/server/dist/external/org/countersign-request.d.ts.map +1 -0
  538. package/server/dist/external/org/countersign-request.js +78 -0
  539. package/server/dist/external/org/countersign-request.js.map +1 -0
  540. package/server/dist/external/org/countersign.d.ts +6 -5
  541. package/server/dist/external/org/countersign.d.ts.map +1 -1
  542. package/server/dist/external/org/countersign.js +12 -141
  543. package/server/dist/external/org/countersign.js.map +1 -1
  544. package/server/dist/external/org/daemon-config-read.d.ts +31 -0
  545. package/server/dist/external/org/daemon-config-read.d.ts.map +1 -0
  546. package/server/dist/external/org/daemon-config-read.js +50 -0
  547. package/server/dist/external/org/daemon-config-read.js.map +1 -0
  548. package/server/dist/external/org/decisions-lock.d.ts +6 -4
  549. package/server/dist/external/org/decisions-lock.d.ts.map +1 -1
  550. package/server/dist/external/org/decisions-lock.js +9 -8
  551. package/server/dist/external/org/decisions-lock.js.map +1 -1
  552. package/server/dist/external/org/domains.d.ts +35 -0
  553. package/server/dist/external/org/domains.d.ts.map +1 -0
  554. package/server/dist/external/org/domains.js +29 -0
  555. package/server/dist/external/org/domains.js.map +1 -0
  556. package/server/dist/external/org/existing-charters-read.d.ts +5 -0
  557. package/server/dist/external/org/existing-charters-read.d.ts.map +1 -0
  558. package/server/dist/external/org/existing-charters-read.js +31 -0
  559. package/server/dist/external/org/existing-charters-read.js.map +1 -0
  560. package/server/dist/external/org/leadwright-proposal-merge.d.ts +54 -0
  561. package/server/dist/external/org/leadwright-proposal-merge.d.ts.map +1 -0
  562. package/server/dist/external/org/leadwright-proposal-merge.js +47 -0
  563. package/server/dist/external/org/leadwright-proposal-merge.js.map +1 -0
  564. package/server/dist/external/org/mount.d.ts +10 -2
  565. package/server/dist/external/org/mount.d.ts.map +1 -1
  566. package/server/dist/external/org/mount.js +6 -1
  567. package/server/dist/external/org/mount.js.map +1 -1
  568. package/server/dist/external/org/org-chart-full-read.d.ts +19 -0
  569. package/server/dist/external/org/org-chart-full-read.d.ts.map +1 -0
  570. package/server/dist/external/org/org-chart-full-read.js +58 -0
  571. package/server/dist/external/org/org-chart-full-read.js.map +1 -0
  572. package/server/dist/external/org/org-file-lock.d.ts +41 -0
  573. package/server/dist/external/org/org-file-lock.d.ts.map +1 -0
  574. package/server/dist/external/org/org-file-lock.js +90 -0
  575. package/server/dist/external/org/org-file-lock.js.map +1 -0
  576. package/server/dist/external/org/routes.d.ts +10 -0
  577. package/server/dist/external/org/routes.d.ts.map +1 -1
  578. package/server/dist/external/org/routes.js +22 -1
  579. package/server/dist/external/org/routes.js.map +1 -1
  580. package/server/dist/external/org/verdict.d.ts +57 -0
  581. package/server/dist/external/org/verdict.d.ts.map +1 -0
  582. package/server/dist/external/org/verdict.js +74 -0
  583. package/server/dist/external/org/verdict.js.map +1 -0
  584. package/server/dist/external/preview/routes.d.ts +3 -1
  585. package/server/dist/external/preview/routes.d.ts.map +1 -1
  586. package/server/dist/external/preview/routes.js +8 -1
  587. package/server/dist/external/preview/routes.js.map +1 -1
  588. package/server/dist/external/routes.d.ts +3 -101
  589. package/server/dist/external/routes.d.ts.map +1 -1
  590. package/server/dist/external/routes.js +21 -6
  591. package/server/dist/external/routes.js.map +1 -1
  592. package/server/dist/external/session-file/probe-route.d.ts +4 -0
  593. package/server/dist/external/session-file/probe-route.d.ts.map +1 -0
  594. package/server/dist/external/session-file/probe-route.js +66 -0
  595. package/server/dist/external/session-file/probe-route.js.map +1 -0
  596. package/server/dist/external/session-file/routes.d.ts +12 -0
  597. package/server/dist/external/session-file/routes.d.ts.map +1 -0
  598. package/server/dist/external/session-file/routes.js +90 -0
  599. package/server/dist/external/session-file/routes.js.map +1 -0
  600. package/server/dist/external/session-file/session-file.fixture.d.ts +45 -0
  601. package/server/dist/external/session-file/session-file.fixture.d.ts.map +1 -0
  602. package/server/dist/external/session-file/session-file.fixture.js +41 -0
  603. package/server/dist/external/session-file/session-file.fixture.js.map +1 -0
  604. package/server/dist/external/session-info/routes.d.ts +15 -0
  605. package/server/dist/external/session-info/routes.d.ts.map +1 -0
  606. package/server/dist/external/session-info/routes.js +57 -0
  607. package/server/dist/external/session-info/routes.js.map +1 -0
  608. package/server/dist/external/tasks/_phase-helpers.js +2 -2
  609. package/server/dist/external/tasks/_phase-helpers.js.map +1 -1
  610. package/server/dist/external/tasks/create.d.ts.map +1 -1
  611. package/server/dist/external/tasks/create.js +10 -2
  612. package/server/dist/external/tasks/create.js.map +1 -1
  613. package/server/dist/external/tasks/fork.d.ts +29 -0
  614. package/server/dist/external/tasks/fork.d.ts.map +1 -0
  615. package/server/dist/external/tasks/fork.js +166 -0
  616. package/server/dist/external/tasks/fork.js.map +1 -0
  617. package/server/dist/external/tasks/lifecycle.d.ts.map +1 -1
  618. package/server/dist/external/tasks/lifecycle.js +10 -57
  619. package/server/dist/external/tasks/lifecycle.js.map +1 -1
  620. package/server/dist/external/tasks/patch.d.ts.map +1 -1
  621. package/server/dist/external/tasks/patch.js +17 -0
  622. package/server/dist/external/tasks/patch.js.map +1 -1
  623. package/server/dist/external/tasks/routes.d.ts +2 -0
  624. package/server/dist/external/tasks/routes.d.ts.map +1 -1
  625. package/server/dist/external/tasks/routes.js +7 -0
  626. package/server/dist/external/tasks/routes.js.map +1 -1
  627. package/server/dist/external/transcript/routes.d.ts.map +1 -1
  628. package/server/dist/external/transcript/routes.js +25 -3
  629. package/server/dist/external/transcript/routes.js.map +1 -1
  630. package/server/dist/external-routes-wiring.d.ts +28 -0
  631. package/server/dist/external-routes-wiring.d.ts.map +1 -0
  632. package/server/dist/external-routes-wiring.js +70 -0
  633. package/server/dist/external-routes-wiring.js.map +1 -0
  634. package/server/dist/index.d.ts.map +1 -1
  635. package/server/dist/index.js +117 -52
  636. package/server/dist/index.js.map +1 -1
  637. package/server/dist/lib/resolveHonoHost.d.ts.map +1 -1
  638. package/server/dist/lib/resolveHonoHost.js +16 -1
  639. package/server/dist/lib/resolveHonoHost.js.map +1 -1
  640. package/server/dist/routes/_triage-api-harness.d.ts +1 -1
  641. package/server/dist/routes/_triage-api-harness.d.ts.map +1 -1
  642. package/server/dist/routes/_triage-api-harness.js.map +1 -1
  643. package/server/dist/routes/adopt-scan.d.ts +4 -0
  644. package/server/dist/routes/adopt-scan.d.ts.map +1 -0
  645. package/server/dist/routes/adopt-scan.js +27 -0
  646. package/server/dist/routes/adopt-scan.js.map +1 -0
  647. package/server/dist/routes/campaigns-readiness.d.ts +10 -0
  648. package/server/dist/routes/campaigns-readiness.d.ts.map +1 -0
  649. package/server/dist/routes/campaigns-readiness.js +58 -0
  650. package/server/dist/routes/campaigns-readiness.js.map +1 -0
  651. package/server/dist/routes/campaigns.d.ts.map +1 -1
  652. package/server/dist/routes/campaigns.js +3 -0
  653. package/server/dist/routes/campaigns.js.map +1 -1
  654. package/server/dist/routes/codex-models.d.ts +15 -0
  655. package/server/dist/routes/codex-models.d.ts.map +1 -0
  656. package/server/dist/routes/codex-models.js +77 -0
  657. package/server/dist/routes/codex-models.js.map +1 -0
  658. package/server/dist/routes/codextender-models.d.ts +16 -0
  659. package/server/dist/routes/codextender-models.d.ts.map +1 -0
  660. package/server/dist/routes/codextender-models.js +81 -0
  661. package/server/dist/routes/codextender-models.js.map +1 -0
  662. package/server/dist/routes/diagnostics.d.ts +15 -0
  663. package/server/dist/routes/diagnostics.d.ts.map +1 -1
  664. package/server/dist/routes/diagnostics.js +1 -0
  665. package/server/dist/routes/diagnostics.js.map +1 -1
  666. package/server/dist/routes/org-chart-lead-guard.d.ts +10 -0
  667. package/server/dist/routes/org-chart-lead-guard.d.ts.map +1 -0
  668. package/server/dist/routes/org-chart-lead-guard.js +49 -0
  669. package/server/dist/routes/org-chart-lead-guard.js.map +1 -0
  670. package/server/dist/routes/org-inventory-composite.d.ts +20 -0
  671. package/server/dist/routes/org-inventory-composite.d.ts.map +1 -0
  672. package/server/dist/routes/org-inventory-composite.js +100 -0
  673. package/server/dist/routes/org-inventory-composite.js.map +1 -0
  674. package/server/dist/routes/org-lead-setup-wizard.d.ts +10 -0
  675. package/server/dist/routes/org-lead-setup-wizard.d.ts.map +1 -0
  676. package/server/dist/routes/org-lead-setup-wizard.js +51 -0
  677. package/server/dist/routes/org-lead-setup-wizard.js.map +1 -0
  678. package/server/dist/routes/org-leads-composite.d.ts.map +1 -1
  679. package/server/dist/routes/org-leads-composite.js +35 -9
  680. package/server/dist/routes/org-leads-composite.js.map +1 -1
  681. package/server/dist/routes/org-writes.d.ts +14 -0
  682. package/server/dist/routes/org-writes.d.ts.map +1 -0
  683. package/server/dist/routes/org-writes.js +61 -0
  684. package/server/dist/routes/org-writes.js.map +1 -0
  685. package/server/dist/routes/org.d.ts +11 -2
  686. package/server/dist/routes/org.d.ts.map +1 -1
  687. package/server/dist/routes/org.js +50 -47
  688. package/server/dist/routes/org.js.map +1 -1
  689. package/server/dist/routes/profiles.d.ts +7 -0
  690. package/server/dist/routes/profiles.d.ts.map +1 -1
  691. package/server/dist/routes/profiles.js +13 -0
  692. package/server/dist/routes/profiles.js.map +1 -1
  693. package/server/dist/routes/projects.d.ts.map +1 -1
  694. package/server/dist/routes/projects.js +58 -16
  695. package/server/dist/routes/projects.js.map +1 -1
  696. package/server/dist/routes/settings.d.ts.map +1 -1
  697. package/server/dist/routes/settings.js +23 -2
  698. package/server/dist/routes/settings.js.map +1 -1
  699. package/server/dist/routes/stack-profiles.d.ts +10 -0
  700. package/server/dist/routes/stack-profiles.d.ts.map +1 -0
  701. package/server/dist/routes/stack-profiles.js +65 -0
  702. package/server/dist/routes/stack-profiles.js.map +1 -0
  703. package/server/dist/routes/triage.d.ts +17 -0
  704. package/server/dist/routes/triage.d.ts.map +1 -1
  705. package/server/dist/routes/triage.js +29 -0
  706. package/server/dist/routes/triage.js.map +1 -1
  707. package/server/dist/terminal/data-target.d.ts +17 -0
  708. package/server/dist/terminal/data-target.d.ts.map +1 -0
  709. package/server/dist/terminal/data-target.js +56 -0
  710. package/server/dist/terminal/data-target.js.map +1 -0
  711. package/server/dist/terminal/image-paste.d.ts +2 -0
  712. package/server/dist/terminal/image-paste.d.ts.map +1 -1
  713. package/server/dist/terminal/image-paste.js +11 -12
  714. package/server/dist/terminal/image-paste.js.map +1 -1
  715. package/server/dist/terminal/pty-manager.d.ts +14 -0
  716. package/server/dist/terminal/pty-manager.d.ts.map +1 -1
  717. package/server/dist/terminal/pty-manager.js +11 -0
  718. package/server/dist/terminal/pty-manager.js.map +1 -1
  719. package/server/dist/terminal/routes.d.ts +5 -0
  720. package/server/dist/terminal/routes.d.ts.map +1 -1
  721. package/server/dist/terminal/routes.js +20 -13
  722. package/server/dist/terminal/routes.js.map +1 -1
  723. package/server/dist/terminal/ws-upgrade-handler.d.ts.map +1 -1
  724. package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts.map +1 -1
  725. package/server/dist/terminal/ws-upgrade-handler.fixtures.js +1 -0
  726. package/server/dist/terminal/ws-upgrade-handler.fixtures.js.map +1 -1
  727. package/server/dist/terminal/ws-upgrade-handler.js +14 -5
  728. package/server/dist/terminal/ws-upgrade-handler.js.map +1 -1
  729. package/server/dist/test/event-test-counts-fixtures.d.ts +40 -0
  730. package/server/dist/test/event-test-counts-fixtures.d.ts.map +1 -0
  731. package/server/dist/test/event-test-counts-fixtures.js +56 -0
  732. package/server/dist/test/event-test-counts-fixtures.js.map +1 -0
  733. package/server/dist/types/leadwright-beat-step.d.ts +19 -0
  734. package/server/dist/types/leadwright-beat-step.d.ts.map +1 -0
  735. package/server/dist/types/leadwright-beat-step.js +56 -0
  736. package/server/dist/types/leadwright-beat-step.js.map +1 -0
  737. package/server/dist/types/leadwright-preflight.d.ts +90 -0
  738. package/server/dist/types/leadwright-preflight.d.ts.map +1 -0
  739. package/server/dist/types/leadwright-preflight.js +65 -0
  740. package/server/dist/types/leadwright-preflight.js.map +1 -0
  741. package/server/dist/types/leadwright-schema-drift.d.ts +28 -0
  742. package/server/dist/types/leadwright-schema-drift.d.ts.map +1 -0
  743. package/server/dist/types/leadwright-schema-drift.js +89 -0
  744. package/server/dist/types/leadwright-schema-drift.js.map +1 -0
  745. package/server/dist/types/org-inventory.d.ts +53 -0
  746. package/server/dist/types/org-inventory.d.ts.map +1 -0
  747. package/server/dist/types/org-inventory.js +11 -0
  748. package/server/dist/types/org-inventory.js.map +1 -0
  749. package/server/dist/types/org.d.ts +57 -6
  750. package/server/dist/types/org.d.ts.map +1 -1
  751. package/server/dist/types/project.d.ts +9 -0
  752. package/server/dist/types/project.d.ts.map +1 -1
  753. package/server/dist/types/run-config-retry.d.ts +29 -0
  754. package/server/dist/types/run-config-retry.d.ts.map +1 -0
  755. package/server/dist/types/run-config-retry.js +47 -0
  756. package/server/dist/types/run-config-retry.js.map +1 -0
  757. package/server/dist/types/run-config-v2.d.ts +29 -41
  758. package/server/dist/types/run-config-v2.d.ts.map +1 -1
  759. package/server/dist/types/run-config-v2.js +16 -50
  760. package/server/dist/types/run-config-v2.js.map +1 -1
  761. package/server/dist/types/settings.d.ts +33 -0
  762. package/server/dist/types/settings.d.ts.map +1 -1
  763. package/server/dist/types/stack-profile-contract.d.ts +33 -0
  764. package/server/dist/types/stack-profile-contract.d.ts.map +1 -0
  765. package/server/dist/types/stack-profile-contract.js +11 -0
  766. package/server/dist/types/stack-profile-contract.js.map +1 -0
  767. package/server/dist/vendor/leadwright/beat-step.schema.json +83 -0
  768. package/server/dist/vendor/leadwright/claim-record-lock-contract.json +15 -0
  769. package/server/dist/vendor/leadwright/org-chart.schema.json +195 -0
  770. package/server/dist/vendor/leadwright/preflight-input.schema.json +318 -0
  771. package/server/dist/vendor/leadwright/preflight-result.schema.json +56 -0
  772. package/server/package.json +3 -3
  773. package/client/dist/assets/arc-DQmjbsFU.js +0 -1
  774. package/client/dist/assets/architectureDiagram-ZJ3FMSHR-DAvCsPCW.js +0 -36
  775. package/client/dist/assets/blockDiagram-677ZJIJ3-DC-dlyYI.js +0 -132
  776. package/client/dist/assets/c4Diagram-LMCZKHZV-DSlmXfhE.js +0 -10
  777. package/client/dist/assets/channel-BfmIcrp7.js +0 -1
  778. package/client/dist/assets/chunk-RYQCIY6F-BKhdp_8v.js +0 -1
  779. package/client/dist/assets/chunk-VR4S4FIN-OgFi2_iB.js +0 -1
  780. package/client/dist/assets/classDiagram-OUVF2IWQ-HfUQZ6Uc.js +0 -1
  781. package/client/dist/assets/classDiagram-v2-EOCWNBFH-HfUQZ6Uc.js +0 -1
  782. package/client/dist/assets/dagre-VKFMJZFB-D7djx1_Y.js +0 -4
  783. package/client/dist/assets/diagram-OA4YK3LP-CwQPbOn0.js +0 -30
  784. package/client/dist/assets/diagram-WEI45ONY-abtYnYqH.js +0 -41
  785. package/client/dist/assets/erDiagram-Q63AITRT-vtbCprgH.js +0 -85
  786. package/client/dist/assets/flowDiagram-23GEKE2U-CVCgcyDF.js +0 -156
  787. package/client/dist/assets/graph-C9eacEi8.js +0 -1
  788. package/client/dist/assets/index-CKU9dY18.css +0 -1
  789. package/client/dist/assets/index-DOMl6atu.js +0 -847
  790. package/client/dist/assets/infoDiagram-FWYZ7A6U-Dr4mN24J.js +0 -2
  791. package/client/dist/assets/katex-DkKDou_j.js +0 -257
  792. package/client/dist/assets/layout-DEXfKzaS.js +0 -1
  793. package/client/dist/assets/map-Czzmt4hB.js +0 -1
  794. package/client/dist/assets/mermaid.core-BcLNGbxW.js +0 -314
  795. package/client/dist/assets/stateDiagram-2N3HPSRC-CFwCOonY.js +0 -1
  796. package/client/dist/assets/stateDiagram-v2-6OUMAXLB-srkiu3Ib.js +0 -1
  797. package/client/dist/assets/swimlanes-5IMT3BWC-DFa2tzxu.js +0 -2
  798. package/client/dist/assets/swimlanesDiagram-G3AALYLV-Dq-0K9Zm.js +0 -8
  799. package/client/dist/assets/xychartDiagram-FW5EYKEG-D9PFTCfm.js +0 -7
@@ -0,0 +1,77 @@
1
+ export interface SessionContextInfo {
2
+ /** input + cache_read + cache_creation of the newest non-synthetic assistant message; null when none seen. */
3
+ tokens: number | null;
4
+ model: string | null;
5
+ /** Timestamp of the message the numbers came from. */
6
+ at: string | null;
7
+ /** A compaction happened AFTER that message, so `tokens` is stale. */
8
+ compactedSince: boolean;
9
+ /** The compactor's own post-compaction estimate; only set while `compactedSince`, null when it recorded none. */
10
+ tokensAfterCompaction: number | null;
11
+ }
12
+ export interface SessionCompactionInfo {
13
+ /** Compactions seen inside the scanned window. */
14
+ count: number;
15
+ last: {
16
+ at: string | null;
17
+ preTokens: number | null;
18
+ postTokens: number | null;
19
+ } | null;
20
+ }
21
+ export interface SessionOutputFile {
22
+ /** Absolute, normalised against the cwd of the entry that wrote it. */
23
+ path: string;
24
+ tool: "Write" | "Edit" | "NotebookEdit" | "MultiEdit";
25
+ firstAt: string | null;
26
+ lastAt: string | null;
27
+ /** Agent id when a subagent produced it; null for the session itself. */
28
+ agentId: string | null;
29
+ }
30
+ export interface SessionRemoteControl {
31
+ /** A LIVE process of this session currently has a bridge session. */
32
+ active: boolean;
33
+ /** A bridge-session record exists in the JSONL — it was enabled at least once. */
34
+ onceEnabled: boolean;
35
+ pid: number | null;
36
+ }
37
+ export type SubagentState = "running" | "finished" | "finished-stale";
38
+ export interface SessionSubagent {
39
+ agentId: string;
40
+ agentType: string | null;
41
+ description: string | null;
42
+ toolUseId: string | null;
43
+ spawnDepth: number | null;
44
+ /** Set for depth-2 agents (a reviewer spawned by a sub-iterate). */
45
+ parentAgentId: string | null;
46
+ model: string | null;
47
+ prompt: string | null;
48
+ /** Last assistant text of the agent's own file (the notification's result is often just a pointer). */
49
+ answer: string | null;
50
+ startedAt: string | null;
51
+ endedAt: string | null;
52
+ durationMs: number | null;
53
+ state: SubagentState;
54
+ /** completed | failed | killed | stopped, from the parent's task-notification; null without one. */
55
+ status: string | null;
56
+ tokens: number | null;
57
+ toolUses: number | null;
58
+ }
59
+ export interface SessionInfoScan {
60
+ /** True when the session file was larger than the scan window; older history is not reflected. */
61
+ truncated: boolean;
62
+ scannedBytes: number;
63
+ sizeBytes: number;
64
+ /** Outputs / subagents beyond the caps (MAX_OUTPUTS, MAX_SUBAGENTS) that were not returned. */
65
+ outputsTruncated: number;
66
+ subagentsTruncated: number;
67
+ }
68
+ export interface SessionInfo {
69
+ sessionUuid: string;
70
+ context: SessionContextInfo;
71
+ compaction: SessionCompactionInfo;
72
+ outputs: SessionOutputFile[];
73
+ remoteControl: SessionRemoteControl;
74
+ subagents: SessionSubagent[];
75
+ scan: SessionInfoScan;
76
+ }
77
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/session-info/types.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,8GAA8G;IAC9G,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sDAAsD;IACtD,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,sEAAsE;IACtE,cAAc,EAAE,OAAO,CAAC;IACxB,iHAAiH;IACjH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACzF;AAED,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,WAAW,CAAC;IACtD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,yEAAyE;IACzE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oEAAoE;IACpE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uGAAuG;IACvG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,oGAAoG;IACpG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,kGAAkG;IAClG,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,qBAAqB,CAAC;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,IAAI,EAAE,eAAe,CAAC;CACvB"}
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Wire shapes of GET /api/external/tasks/:id/session-info (campaign
3
+ * mission-desktop-style, M2). READ-ONLY view derived from Claude's own files
4
+ * (CLAUDE.md DO-NOT #1) — nothing here is ever written back.
5
+ *
6
+ * Outputs are ATTEMPTED-then-not-rejected writes: a tool_use whose result is_error is retracted.
7
+ * Runtime: Claude only (Codex tasks have no such JSONL and answer status "missing").
8
+ *
9
+ * Deliberately absent: a context PERCENTAGE and a context WINDOW SIZE. The
10
+ * window depends on the model/plan and is not recorded in the JSONL; inventing
11
+ * one would be a guess dressed as a fact. Consumers show the raw token count.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/session-info/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,18 @@
1
+ import type { GlobalSettings } from "../types/settings.js";
2
+ export declare const DEFAULT_GLOBAL_SETTINGS: GlobalSettings;
3
+ export interface SettingsReaderDeps {
4
+ readFile: (path: string, encoding: string) => Promise<string>;
5
+ existsSync: (path: string) => boolean;
6
+ }
7
+ /**
8
+ * Back-compat for the `codexRuntimeDefault` -> `runtimeDefault` rename
9
+ * (Codextender integration, Part B.1). A settings.json written before the
10
+ * rename has `codexRuntimeDefault` but no `runtimeDefault`; without this,
11
+ * the parsed value is silently dropped on read and an operator's configured
12
+ * default reverts to "claude". Read-side only — a PUT always writes
13
+ * whatever field name the caller sends, so a re-save completes the
14
+ * migration on disk.
15
+ */
16
+ export declare function migrateLegacyRuntimeDefault(parsed: Record<string, unknown>): Record<string, unknown>;
17
+ export declare function readGlobalSettings(settingsPath: string, deps: SettingsReaderDeps): Promise<GlobalSettings>;
18
+ //# sourceMappingURL=settings-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-reader.d.ts","sourceRoot":"","sources":["../../src/core/settings-reader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,eAAO,MAAM,uBAAuB,EAAE,cAKrC,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,cAAc,CAAC,CAYzB"}
@@ -0,0 +1,40 @@
1
+ export const DEFAULT_GLOBAL_SETTINGS = {
2
+ port: 3847,
3
+ maxConcurrent: 3,
4
+ heartbeatIntervalMs: 30000,
5
+ runtimeDefault: "claude",
6
+ };
7
+ /**
8
+ * Back-compat for the `codexRuntimeDefault` -> `runtimeDefault` rename
9
+ * (Codextender integration, Part B.1). A settings.json written before the
10
+ * rename has `codexRuntimeDefault` but no `runtimeDefault`; without this,
11
+ * the parsed value is silently dropped on read and an operator's configured
12
+ * default reverts to "claude". Read-side only — a PUT always writes
13
+ * whatever field name the caller sends, so a re-save completes the
14
+ * migration on disk.
15
+ */
16
+ export function migrateLegacyRuntimeDefault(parsed) {
17
+ if (parsed.runtimeDefault !== undefined)
18
+ return parsed;
19
+ const legacy = parsed.codexRuntimeDefault;
20
+ if (legacy !== "claude" && legacy !== "codex")
21
+ return parsed;
22
+ return { ...parsed, runtimeDefault: legacy };
23
+ }
24
+ export async function readGlobalSettings(settingsPath, deps) {
25
+ if (!deps.existsSync(settingsPath))
26
+ return { ...DEFAULT_GLOBAL_SETTINGS };
27
+ try {
28
+ const content = await deps.readFile(settingsPath, "utf-8");
29
+ if (!content.trim())
30
+ return { ...DEFAULT_GLOBAL_SETTINGS };
31
+ return {
32
+ ...DEFAULT_GLOBAL_SETTINGS,
33
+ ...migrateLegacyRuntimeDefault(JSON.parse(content)),
34
+ };
35
+ }
36
+ catch {
37
+ return { ...DEFAULT_GLOBAL_SETTINGS };
38
+ }
39
+ }
40
+ //# sourceMappingURL=settings-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-reader.js","sourceRoot":"","sources":["../../src/core/settings-reader.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,IAAI,EAAE,IAAI;IACV,aAAa,EAAE,CAAC;IAChB,mBAAmB,EAAE,KAAK;IAC1B,cAAc,EAAE,QAAQ;CACzB,CAAC;AAOF;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAA+B;IAE/B,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC1C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,IAAwB;IAExB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,GAAG,uBAAuB,EAAE,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,GAAG,uBAAuB,EAAE,CAAC;QAC3D,OAAO;YACL,GAAG,uBAAuB;YAC1B,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,uBAAuB,EAAE,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -1,4 +1,33 @@
1
1
  export declare function qPs(v: string): string;
2
+ /**
3
+ * PowerShell arg-quoting for text that may contain embedded newlines
4
+ * (multi-paragraph prompts) — used where `qPs()` alone is not safe.
5
+ *
6
+ * `qPs()` produces syntactically correct PowerShell (the tokenizer is
7
+ * quote-aware and does not get confused by content inside an open single-
8
+ * quoted string), but that is not sufficient here: PSReadLine (PowerShell 7)
9
+ * maintains its OWN multi-line edit buffer as input arrives, and when that
10
+ * input is delivered via pty keystroke injection (not a real interactive
11
+ * paste event) rather than typed by a human, a literal newline inside the
12
+ * still-open quoted string can corrupt that buffer — a trailing fragment of
13
+ * the string then gets parsed and executed as its own bare command once
14
+ * Enter is finally processed. Reproduced live against a real pwsh.exe pty
15
+ * (iterate-2026-09-19-codex-launch-powershell-chunk); confirmed independent
16
+ * of write-chunking (fails identically via one atomic `pty.write()`) and
17
+ * independent of bracketed-paste wrapping (PS7's bracketed-paste handling
18
+ * does not prevent it either) — the only thing that avoided it was removing
19
+ * every literal newline from the bytes actually sent to the pty.
20
+ *
21
+ * A value with no `\r`/`\n` takes the plain `qPs()` path unchanged (stays
22
+ * human-readable for manual copy/paste). A value containing either is
23
+ * Base64-encoded — the encoded text itself has no `\r`/`\n` by construction
24
+ * (RFC 4648 alphabet) — and wrapped in a PowerShell sub-expression that
25
+ * decodes it back to the exact original string at parse time, before the
26
+ * command it's embedded in ever runs. `$(...)` around a native-command
27
+ * argument passes its result as ONE argument regardless of embedded
28
+ * whitespace, so this is transparent to the receiving process.
29
+ */
30
+ export declare function qPsMultiline(v: string): string;
2
31
  export declare function qCmd(v: string): string;
3
32
  export declare function qPosix(v: string): string;
4
33
  export declare function toPosixPath(p: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"shell-quote.d.ts","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAYA,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrC;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBtC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C"}
1
+ {"version":3,"file":"shell-quote.d.ts","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAYA,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBtC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C"}
@@ -13,6 +13,40 @@ export function qPs(v) {
13
13
  // PS single-quoted: embedded `'` → `''`.
14
14
  return `'${v.replace(/'/g, "''")}'`;
15
15
  }
16
+ /**
17
+ * PowerShell arg-quoting for text that may contain embedded newlines
18
+ * (multi-paragraph prompts) — used where `qPs()` alone is not safe.
19
+ *
20
+ * `qPs()` produces syntactically correct PowerShell (the tokenizer is
21
+ * quote-aware and does not get confused by content inside an open single-
22
+ * quoted string), but that is not sufficient here: PSReadLine (PowerShell 7)
23
+ * maintains its OWN multi-line edit buffer as input arrives, and when that
24
+ * input is delivered via pty keystroke injection (not a real interactive
25
+ * paste event) rather than typed by a human, a literal newline inside the
26
+ * still-open quoted string can corrupt that buffer — a trailing fragment of
27
+ * the string then gets parsed and executed as its own bare command once
28
+ * Enter is finally processed. Reproduced live against a real pwsh.exe pty
29
+ * (iterate-2026-09-19-codex-launch-powershell-chunk); confirmed independent
30
+ * of write-chunking (fails identically via one atomic `pty.write()`) and
31
+ * independent of bracketed-paste wrapping (PS7's bracketed-paste handling
32
+ * does not prevent it either) — the only thing that avoided it was removing
33
+ * every literal newline from the bytes actually sent to the pty.
34
+ *
35
+ * A value with no `\r`/`\n` takes the plain `qPs()` path unchanged (stays
36
+ * human-readable for manual copy/paste). A value containing either is
37
+ * Base64-encoded — the encoded text itself has no `\r`/`\n` by construction
38
+ * (RFC 4648 alphabet) — and wrapped in a PowerShell sub-expression that
39
+ * decodes it back to the exact original string at parse time, before the
40
+ * command it's embedded in ever runs. `$(...)` around a native-command
41
+ * argument passes its result as ONE argument regardless of embedded
42
+ * whitespace, so this is transparent to the receiving process.
43
+ */
44
+ export function qPsMultiline(v) {
45
+ if (!/[\r\n]/.test(v))
46
+ return qPs(v);
47
+ const b64 = Buffer.from(v, "utf8").toString("base64");
48
+ return `$([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(${qPs(b64)})))`;
49
+ }
16
50
  export function qCmd(v) {
17
51
  // cmd.exe double-quoted argument, escaped per CommandLineToArgvW (the prior
18
52
  // `"${v.replace(/"/g,'\\"')}"` left backslashes unescaped — CodeQL
@@ -1 +1 @@
1
- {"version":3,"file":"shell-quote.js","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,oCAAoC;AAEpC,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,yCAAyC;IACzC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,4EAA4E;IAC5E,mEAAmE;IACnE,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,qEAAqE;IACrE,8EAA8E;IAC9E,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,kBAAkB,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QACD,kBAAkB,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,qCAAqC;IACrC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"shell-quote.js","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,oCAAoC;AAEpC,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,yCAAyC;IACzC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,OAAO,+EAA+E,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,4EAA4E;IAC5E,mEAAmE;IACnE,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,qEAAqE;IACrE,8EAA8E;IAC9E,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,kBAAkB,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QACD,kBAAkB,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,qCAAqC;IACrC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { type StackProfileDeps } from "./stack-profiles.js";
2
+ export type StackProfileScope = "project" | "user";
3
+ export type CreateOutcome = {
4
+ status: "created";
5
+ name: string;
6
+ path: string;
7
+ } | {
8
+ status: "invalid-request";
9
+ reason: string;
10
+ } | {
11
+ status: "exists";
12
+ reason: string;
13
+ } | {
14
+ status: "failed";
15
+ reason: string;
16
+ };
17
+ export interface CreateStackProfileInput {
18
+ from: string;
19
+ name: string;
20
+ scope: StackProfileScope;
21
+ /** Required for scope "project" (destination). For scope "user" it only widens the
22
+ * collision check + validation to that project's own profiles. */
23
+ projectRoot?: string;
24
+ }
25
+ export interface CreateStackProfileDeps extends StackProfileDeps {
26
+ userProfilesDir?: string;
27
+ }
28
+ export declare function userProfilesDir(deps?: Pick<CreateStackProfileDeps, "userProfilesDir" | "homeDir">): string;
29
+ export declare function validateNewProfileName(name: unknown): string | null;
30
+ export declare function createStackProfileFromBundled(input: CreateStackProfileInput, deps?: CreateStackProfileDeps): Promise<CreateOutcome>;
31
+ //# sourceMappingURL=stack-profiles-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-profiles-create.d.ts","sourceRoot":"","sources":["../../src/core/stack-profiles-create.ts"],"names":[],"mappings":"AAoBA,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAM7B,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,iBAAiB,CAAC;IACzB;uEACmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAWD,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,GAAG,SAAS,CAAM,GAAG,MAAM,CAM9G;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASnE;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,uBAAuB,EAC9B,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,aAAa,CAAC,CAUxB"}
@@ -0,0 +1,128 @@
1
+ /*
2
+ * stack-profiles-create.ts — "create a custom profile from a bundled one".
3
+ *
4
+ * The ONLY write surface of the stack-profile feature, and deliberately tiny:
5
+ * it copies a bundled profile's JSON under a NEW name into the project's
6
+ * `.shipwright/profiles/` or the user's `~/.shipwright/profiles/`
7
+ * (`SHIPWRIGHT_USER_PROFILES_DIR` overrides, same as the resolver). Rules:
8
+ * - the name is validated against the resolver's own NAME_RE and must be
9
+ * unused in EVERY source — shadowing a bundled profile is the resolver's
10
+ * "same-name shadow" regression case, so the UI never creates one;
11
+ * - `wx` open — an existing file is never overwritten (race-safe, no
12
+ * check-then-write window);
13
+ * - the result is validated through the resolver; a copy it rejects is
14
+ * removed again, so a failed create leaves nothing behind.
15
+ */
16
+ import { promises as fsp } from "node:fs";
17
+ import os from "node:os";
18
+ import path from "node:path";
19
+ import { MAX_PROFILE_NAME_LENGTH, isProfileNameShape, listStackProfiles, validateStackProfile, } from "./stack-profiles.js";
20
+ /** Names the resolver reserves as sentinels, never real profiles. */
21
+ const RESERVED = new Set(["generic", "detecting", "custom"]);
22
+ const WINDOWS_DEVICE = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/;
23
+ function samePath(a, b) {
24
+ if (typeof a !== "string")
25
+ return false;
26
+ const norm = (x) => (process.platform === "win32" ? path.resolve(x).toLowerCase() : path.resolve(x));
27
+ return norm(a) === norm(b);
28
+ }
29
+ /** Names being created right now - two concurrent creates of one name never both run. */
30
+ const inFlight = new Set();
31
+ export function userProfilesDir(deps = {}) {
32
+ return (deps.userProfilesDir ??
33
+ (process.env.SHIPWRIGHT_USER_PROFILES_DIR?.trim() || undefined) ??
34
+ path.join(deps.homeDir ?? os.homedir(), ".shipwright", "profiles"));
35
+ }
36
+ export function validateNewProfileName(name) {
37
+ if (typeof name === "string" && name.length > MAX_PROFILE_NAME_LENGTH) {
38
+ return `Keep the name under ${MAX_PROFILE_NAME_LENGTH + 1} characters.`;
39
+ }
40
+ if (!isProfileNameShape(name)) {
41
+ return "Use lowercase letters, digits and dashes only (it must start with a letter or digit).";
42
+ }
43
+ if (RESERVED.has(name) || WINDOWS_DEVICE.test(name))
44
+ return `“${name}” is reserved — pick another name.`;
45
+ return null;
46
+ }
47
+ export async function createStackProfileFromBundled(input, deps = {}) {
48
+ if (typeof input.name === "string" && inFlight.has(input.name)) {
49
+ return { status: "exists", reason: `“${input.name}” is already being created.` };
50
+ }
51
+ inFlight.add(input.name);
52
+ try {
53
+ return await createUnlocked(input, deps);
54
+ }
55
+ finally {
56
+ inFlight.delete(input.name);
57
+ }
58
+ }
59
+ async function createUnlocked(input, deps) {
60
+ const nameProblem = validateNewProfileName(input.name);
61
+ if (nameProblem)
62
+ return { status: "invalid-request", reason: nameProblem };
63
+ if (input.scope === "project" && !input.projectRoot) {
64
+ return { status: "invalid-request", reason: "A project profile needs a project." };
65
+ }
66
+ const listed = await listStackProfiles({ projectRoot: input.projectRoot }, deps);
67
+ if (listed.status !== "ok") {
68
+ return { status: "failed", reason: listed.status === "failed" ? listed.reason : "The profile resolver isn't available." };
69
+ }
70
+ const source = listed.report.profiles.find((p) => p.name === input.from && p.source === "bundled");
71
+ if (!source || !source.valid) {
72
+ return { status: "invalid-request", reason: `“${input.from}” isn't a usable built-in profile.` };
73
+ }
74
+ if (listed.report.profiles.some((p) => p.name === input.name)) {
75
+ return { status: "exists", reason: `A profile called “${input.name}” already exists.` };
76
+ }
77
+ let content;
78
+ try {
79
+ const data = JSON.parse(await fsp.readFile(source.path, "utf-8"));
80
+ content = `${JSON.stringify({ ...data, name: input.name }, null, 2)}\n`;
81
+ }
82
+ catch (err) {
83
+ return { status: "failed", reason: `Couldn't read the built-in profile: ${String(err)}` };
84
+ }
85
+ const dir = input.scope === "project"
86
+ ? path.join(input.projectRoot, ".shipwright", "profiles")
87
+ : userProfilesDir(deps);
88
+ const target = path.join(dir, `${input.name}.json`);
89
+ try {
90
+ await fsp.mkdir(dir, { recursive: true });
91
+ // DO-NOT #10: a symlinked .shipwright / profiles dir must not redirect the write.
92
+ if (input.scope === "project") {
93
+ const rel = path.relative(await fsp.realpath(input.projectRoot), await fsp.realpath(dir));
94
+ if (rel.startsWith("..") || path.isAbsolute(rel)) {
95
+ return { status: "failed", reason: "The project's profiles folder points outside the project, so nothing was written." };
96
+ }
97
+ }
98
+ await fsp.writeFile(target, content, { encoding: "utf-8", flag: "wx" });
99
+ }
100
+ catch (err) {
101
+ if (err.code === "EEXIST") {
102
+ return { status: "exists", reason: `A profile called “${input.name}” already exists.` };
103
+ }
104
+ return { status: "failed", reason: `Couldn't write the profile: ${String(err)}` };
105
+ }
106
+ const checked = await validateStackProfile({ name: input.name, projectRoot: input.projectRoot }, deps);
107
+ // A copy stays ONLY on the resolver's explicit "valid" for THIS very file. Any
108
+ // other outcome (invalid, unreachable, timeout, newer contract, or the resolver
109
+ // resolving the name to a different file) removes the file this request created
110
+ // (wx guarantees it is ours) and says exactly why.
111
+ const sameFile = checked.status === "ok" && checked.report.valid && "path" in checked.report && samePath(checked.report.path, target);
112
+ if (!sameFile) {
113
+ const why = checked.status !== "ok"
114
+ ? "the resolver couldn't be reached to check it"
115
+ : !checked.report.valid
116
+ ? "error" in checked.report ? checked.report.error : "the resolver rejected it"
117
+ : "the resolver resolved that name to a different profile";
118
+ try {
119
+ await fsp.rm(target, { force: true });
120
+ }
121
+ catch {
122
+ return { status: "failed", reason: `The new profile didn't validate (${why}) and couldn't be removed — delete ${target} by hand.` };
123
+ }
124
+ return { status: "failed", reason: `The new profile didn't validate (${why}), so it was removed again.` };
125
+ }
126
+ return { status: "created", name: input.name, path: target };
127
+ }
128
+ //# sourceMappingURL=stack-profiles-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-profiles-create.js","sourceRoot":"","sources":["../../src/core/stack-profiles-create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAE7B,qEAAqE;AACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7D,MAAM,cAAc,GAAG,uCAAuC,CAAC;AAuB/D,SAAS,QAAQ,CAAC,CAAU,EAAE,CAAS;IACrC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,yFAAyF;AACzF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;AAEnC,MAAM,UAAU,eAAe,CAAC,OAAoE,EAAE;IACpG,OAAO,CACL,IAAI,CAAC,eAAe;QACpB,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,CAAC,CACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;QACtE,OAAO,uBAAuB,uBAAuB,GAAG,CAAC,cAAc,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,uFAAuF,CAAC;IACjG,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,IAAI,oCAAoC,CAAC;IACzG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,KAA8B,EAC9B,OAA+B,EAAE;IAEjC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,6BAA6B,EAAE,CAAC;IACnF,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,KAA8B,EAC9B,IAA4B;IAE5B,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,WAAW;QAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC3E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;IACrF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,uCAAuC,EAAE,CAAC;IAC5H,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACnG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,oCAAoC,EAAE,CAAC;IACnG,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,KAAK,CAAC,IAAI,mBAAmB,EAAE,CAAC;IAC1F,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAA4B,CAAC;QAC7F,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,uCAAuC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC5F,CAAC;IAED,MAAM,GAAG,GACP,KAAK,CAAC,KAAK,KAAK,SAAS;QACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAqB,EAAE,aAAa,EAAE,UAAU,CAAC;QACnE,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,kFAAkF;QAClF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAqB,CAAC,EAAE,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACpG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,mFAAmF,EAAE,CAAC;YAC3H,CAAC;QACH,CAAC;QACD,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,KAAK,CAAC,IAAI,mBAAmB,EAAE,CAAC;QAC1F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,+BAA+B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IACvG,+EAA+E;IAC/E,gFAAgF;IAChF,gFAAgF;IAChF,mDAAmD;IACnD,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,GAAG,GACP,OAAO,CAAC,MAAM,KAAK,IAAI;YACrB,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;gBACrB,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B;gBAC/E,CAAC,CAAC,wDAAwD,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,oCAAoC,GAAG,sCAAsC,MAAM,WAAW,EAAE,CAAC;QACtI,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,oCAAoC,GAAG,6BAA6B,EAAE,CAAC;IAC5G,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { type CliChildSpawnFn } from "./cli-child-spawn.js";
2
+ import { type RunFn } from "./readiness-probe.js";
3
+ import { type StackProfileListReport, type StackProfileValidateReport } from "../types/stack-profile-contract.js";
4
+ export declare const STACK_PROFILE_CLI_TIMEOUT_MS = 20000;
5
+ /** Mirror of the resolver's NAME_RE + a filename-safe length cap. A name that
6
+ * fails this never reaches argv (a leading `-` would parse as an option). */
7
+ export declare const PROFILE_NAME_RE: RegExp;
8
+ export declare const MAX_PROFILE_NAME_LENGTH = 64;
9
+ export declare function isProfileNameShape(name: unknown): name is string;
10
+ export type StackProfileOutcome<T> = {
11
+ status: "ok";
12
+ report: T;
13
+ } | {
14
+ status: "unsupported-contract";
15
+ version: string;
16
+ } | {
17
+ status: "engine-unavailable";
18
+ reason: string;
19
+ repairCommand: string;
20
+ } | {
21
+ status: "failed";
22
+ reason: string;
23
+ };
24
+ export interface StackProfileDeps {
25
+ run?: RunFn;
26
+ spawn?: CliChildSpawnFn;
27
+ existsFn?: (p: string) => boolean;
28
+ homeDir?: string;
29
+ baseEnv?: NodeJS.ProcessEnv;
30
+ scriptOverride?: string;
31
+ timeoutMs?: number;
32
+ }
33
+ /** The cache-owned resolver CLI (`SHIPWRIGHT_RESOLVE_PROFILE_SCRIPT` overrides
34
+ * the location — isolated E2E stacks run with an ephemeral HOME). */
35
+ export declare function resolveProfileScript(deps?: Pick<StackProfileDeps, "existsFn" | "homeDir" | "scriptOverride">): string | null;
36
+ export declare function listStackProfiles(input: {
37
+ projectRoot?: string;
38
+ }, deps?: StackProfileDeps): Promise<StackProfileOutcome<StackProfileListReport>>;
39
+ /** Validate one profile by NAME (resolved through the normal lookup order). A
40
+ * profile the resolver rejects is `{valid:false}` data, not a transport failure. */
41
+ export declare function validateStackProfile(input: {
42
+ name: string;
43
+ projectRoot?: string;
44
+ }, deps?: StackProfileDeps): Promise<StackProfileOutcome<StackProfileValidateReport | {
45
+ valid: false;
46
+ name: string;
47
+ error: string;
48
+ }>>;
49
+ //# sourceMappingURL=stack-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-profiles.d.ts","sourceRoot":"","sources":["../../src/core/stack-profiles.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAiD,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEjG,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAChC,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD;8EAC8E;AAC9E,eAAO,MAAM,eAAe,QAAyB,CAAC;AACtD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEhE;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAC7B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,MAAM,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;sEACsE;AACtE,wBAAgB,oBAAoB,CAClC,IAAI,GAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAM,GAC3E,MAAM,GAAG,IAAI,CAOf;AAoED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CAAC,CAkBtD;AAED;qFACqF;AACrF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,0BAA0B,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAwB1G"}
@@ -0,0 +1,142 @@
1
+ /*
2
+ * stack-profiles.ts — the READ-ONLY bridge to the monorepo's stack-profile
3
+ * resolver CLI (`shared/scripts/tools/resolve_profile.py list|validate --json`,
4
+ * cross-repo contract_version 1, mirrored in `types/stack-profile-contract.ts`).
5
+ * The WebUI never re-implements the lookup order (project → user → bundled) or
6
+ * the schema — it renders the resolver's verdict, exactly as the campaign DAG
7
+ * renders the scheduler's (`campaign-readiness.ts`, which this mirrors).
8
+ *
9
+ * Spawn discipline: `uv run --no-project --python ">=3.11"`, shell:false,
10
+ * fixed argv, honest engine-unavailable when uv / the script is absent — never
11
+ * a silent fallback to the bundled `server/profiles/` snapshot (that snapshot
12
+ * knows nothing of custom profiles, which is the point of this module).
13
+ */
14
+ import { existsSync } from "node:fs";
15
+ import os from "node:os";
16
+ import path from "node:path";
17
+ import { defaultCliChildSpawn } from "./cli-child-spawn.js";
18
+ import { READINESS_REPAIR_COMMAND, shipwrightCacheRoot } from "./readiness-probe.js";
19
+ import { resolveUv } from "./uv-runner.js";
20
+ import { SUPPORTED_STACK_PROFILE_CONTRACT, } from "../types/stack-profile-contract.js";
21
+ export const STACK_PROFILE_CLI_TIMEOUT_MS = 20_000;
22
+ /** Mirror of the resolver's NAME_RE + a filename-safe length cap. A name that
23
+ * fails this never reaches argv (a leading `-` would parse as an option). */
24
+ export const PROFILE_NAME_RE = /^[a-z0-9][a-z0-9-]*$/;
25
+ export const MAX_PROFILE_NAME_LENGTH = 64;
26
+ export function isProfileNameShape(name) {
27
+ return typeof name === "string" && name.length <= MAX_PROFILE_NAME_LENGTH && PROFILE_NAME_RE.test(name);
28
+ }
29
+ /** The cache-owned resolver CLI (`SHIPWRIGHT_RESOLVE_PROFILE_SCRIPT` overrides
30
+ * the location — isolated E2E stacks run with an ephemeral HOME). */
31
+ export function resolveProfileScript(deps = {}) {
32
+ const exists = deps.existsFn ?? existsSync;
33
+ const candidate = deps.scriptOverride ??
34
+ process.env.SHIPWRIGHT_RESOLVE_PROFILE_SCRIPT ??
35
+ path.join(shipwrightCacheRoot(deps.homeDir ?? os.homedir()), "shared", "scripts", "tools", "resolve_profile.py");
36
+ return exists(candidate) ? candidate : null;
37
+ }
38
+ function lastLine(text) {
39
+ const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
40
+ const err = [...lines].reverse().find((l) => l.startsWith("error:"));
41
+ return (err ?? lines.pop() ?? "").replace(/^error:\s*/, "");
42
+ }
43
+ function isEntryShape(e) {
44
+ return (isObject(e) &&
45
+ typeof e.name === "string" &&
46
+ typeof e.path === "string" &&
47
+ typeof e.valid === "boolean" &&
48
+ (e.source === "project" || e.source === "user" || e.source === "bundled"));
49
+ }
50
+ function isObject(v) {
51
+ return typeof v === "object" && v !== null && !Array.isArray(v);
52
+ }
53
+ /** Run one resolver subcommand. `cliArgs` positions are fixed; the only caller-supplied
54
+ * values are a shape-checked profile name (`--name=...`) and a registry-sourced path. */
55
+ async function runResolver(cliArgs, deps) {
56
+ const unavailable = (reason) => ({
57
+ status: "engine-unavailable",
58
+ reason,
59
+ repairCommand: READINESS_REPAIR_COMMAND,
60
+ });
61
+ const script = resolveProfileScript(deps);
62
+ if (!script)
63
+ return unavailable("The Shipwright profile resolver isn't installed.");
64
+ const uv = await resolveUv({ run: deps.run, homeDir: deps.homeDir, baseEnv: deps.baseEnv });
65
+ if (!uv)
66
+ return unavailable("uv isn't installed — profiles need it to run in a managed Python 3.11+.");
67
+ const spawn = deps.spawn ?? defaultCliChildSpawn;
68
+ const result = await spawn(uv.bin, ["run", "--no-project", "--python", ">=3.11", script, ...cliArgs], { timeoutMs: deps.timeoutMs ?? STACK_PROFILE_CLI_TIMEOUT_MS, env: uv.env });
69
+ if (result.code === -1)
70
+ return unavailable("uv couldn't start on this machine.");
71
+ if (result.spawnError === "timeout") {
72
+ return { status: "failed", reason: "Reading the profiles took too long and was stopped." };
73
+ }
74
+ return { stdout: result.stdout, code: result.code, stderr: result.stderr };
75
+ }
76
+ function isOutcome(v) {
77
+ return isObject(v) && typeof v.status === "string";
78
+ }
79
+ function parseJson(stdout) {
80
+ // `validate` prints a human line (`profile 'x': source=...`) before the JSON, so
81
+ // parse from the first line that STARTS with a brace - a brace inside that
82
+ // human line (a path, a name) must not be mistaken for the document.
83
+ const m = /^\{/m.exec(stdout);
84
+ if (!m)
85
+ return undefined;
86
+ try {
87
+ return JSON.parse(stdout.slice(m.index));
88
+ }
89
+ catch {
90
+ return undefined;
91
+ }
92
+ }
93
+ export async function listStackProfiles(input, deps = {}) {
94
+ const args = ["list", "--json", ...(input.projectRoot ? ["--project-root", input.projectRoot] : [])];
95
+ const ran = await runResolver(args, deps);
96
+ if (isOutcome(ran))
97
+ return ran;
98
+ if (ran.code !== 0)
99
+ return { status: "failed", reason: lastLine(ran.stderr) || "The profile resolver exited with an error." };
100
+ const parsed = parseJson(ran.stdout);
101
+ if (!isObject(parsed)) {
102
+ return { status: "failed", reason: "The profile resolver returned something unreadable." };
103
+ }
104
+ const version = parsed.contract_version;
105
+ if (version !== SUPPORTED_STACK_PROFILE_CONTRACT) {
106
+ return { status: "unsupported-contract", version: String(version) };
107
+ }
108
+ if (!Array.isArray(parsed.profiles) || !parsed.profiles.every(isEntryShape)) {
109
+ return { status: "failed", reason: "The profile resolver returned something unreadable." };
110
+ }
111
+ return { status: "ok", report: parsed };
112
+ }
113
+ /** Validate one profile by NAME (resolved through the normal lookup order). A
114
+ * profile the resolver rejects is `{valid:false}` data, not a transport failure. */
115
+ export async function validateStackProfile(input, deps = {}) {
116
+ if (!isProfileNameShape(input.name)) {
117
+ return { status: "ok", report: { valid: false, name: input.name, error: "That isn't a valid profile name." } };
118
+ }
119
+ const args = ["validate", "--json", `--name=${input.name}`, ...(input.projectRoot ? ["--project-root", input.projectRoot] : [])];
120
+ const ran = await runResolver(args, deps);
121
+ if (isOutcome(ran))
122
+ return ran;
123
+ if (ran.code !== 0) {
124
+ // 1/2/3 with the resolver's own "error:" line are verdicts (invalid / not found /
125
+ // bad JSON). Anything else (a crash traceback) is an outage, not "your profile is bad".
126
+ const verdict = [1, 2, 3].includes(ran.code) && /^error:/m.test(ran.stderr);
127
+ if (!verdict)
128
+ return { status: "failed", reason: lastLine(ran.stderr) || "The profile resolver crashed." };
129
+ return { status: "ok", report: { valid: false, name: input.name, error: lastLine(ran.stderr) || "The profile is not valid." } };
130
+ }
131
+ const parsed = parseJson(ran.stdout);
132
+ if (!isObject(parsed) || typeof parsed.valid !== "boolean") {
133
+ return { status: "failed", reason: "The profile resolver returned something unreadable." };
134
+ }
135
+ // `validate --json` carries no contract_version today; if upstream ever adds
136
+ // one, a different major must not be rendered as a green "valid".
137
+ if (parsed.contract_version !== undefined && parsed.contract_version !== SUPPORTED_STACK_PROFILE_CONTRACT) {
138
+ return { status: "unsupported-contract", version: String(parsed.contract_version) };
139
+ }
140
+ return { status: "ok", report: parsed };
141
+ }
142
+ //# sourceMappingURL=stack-profiles.js.map