@svenroth-ai/shipwright 0.24.1-next.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 (1014) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -0
  3. package/bin/shipwright.mjs +187 -0
  4. package/client/dist/assets/EmbeddedTerminal-6GBZ9nXN.css +32 -0
  5. package/client/dist/assets/EmbeddedTerminal-CpeDvtzx.js +123 -0
  6. package/client/dist/assets/MarkdownEditorModal-Di9HN39z.js +212 -0
  7. package/client/dist/assets/abnfDiagram-VRR7QNED-BbSdq0X7.js +1 -0
  8. package/client/dist/assets/arc-BZT7vKjm.js +1 -0
  9. package/client/dist/assets/architectureDiagram-ZJ3FMSHR-BuRwoNgV.js +36 -0
  10. package/client/dist/assets/blockDiagram-677ZJIJ3-B2RNYWcr.js +132 -0
  11. package/client/dist/assets/c4Diagram-LMCZKHZV-fbXlt08K.js +10 -0
  12. package/client/dist/assets/channel-2-wkFEKK.js +1 -0
  13. package/client/dist/assets/chunk-2Q5K7J3B-NqMRUe5-.js +1 -0
  14. package/client/dist/assets/chunk-32BRIVSS-CIr9bFCd.js +1 -0
  15. package/client/dist/assets/chunk-5VM5RSS4-l0I6rbZN.js +15 -0
  16. package/client/dist/assets/chunk-EX3LRPZG-DXinoCxp.js +231 -0
  17. package/client/dist/assets/chunk-JWPE2WC7-BAcCano9.js +1 -0
  18. package/client/dist/assets/chunk-MOJQB5TN-DMVOqL7C.js +88 -0
  19. package/client/dist/assets/chunk-RYQCIY6F-CtNSAItH.js +1 -0
  20. package/client/dist/assets/chunk-V7JOEXUC-CufSmC93.js +206 -0
  21. package/client/dist/assets/chunk-VR4S4FIN-_BbUF9fa.js +1 -0
  22. package/client/dist/assets/chunk-XXDRQBXY-uQ35hUPB.js +1 -0
  23. package/client/dist/assets/classDiagram-OUVF2IWQ-A9SpDakb.js +1 -0
  24. package/client/dist/assets/classDiagram-v2-EOCWNBFH-A9SpDakb.js +1 -0
  25. package/client/dist/assets/cose-bilkent-JH36ORCC-B9q9uYCX.js +1 -0
  26. package/client/dist/assets/cynefin-VYW2F7L2-C2_bJyZA.js +178 -0
  27. package/client/dist/assets/cynefinDiagram-TSTJHNR4-0mzVmPv4.js +62 -0
  28. package/client/dist/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
  29. package/client/dist/assets/dagre-VKFMJZFB-CIE9HMtr.js +4 -0
  30. package/client/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  31. package/client/dist/assets/diagram-FQU43EPY-DdkBaZrX.js +3 -0
  32. package/client/dist/assets/diagram-G47NLZAW-Cql4k2sg.js +24 -0
  33. package/client/dist/assets/diagram-NH7WQ7WH-FRAUyqEu.js +24 -0
  34. package/client/dist/assets/diagram-OA4YK3LP-DXo8GTB8.js +30 -0
  35. package/client/dist/assets/diagram-WEI45ONY-DqVtWGdt.js +41 -0
  36. package/client/dist/assets/ebnfDiagram-CCIWWBDH-B0La0RsO.js +1 -0
  37. package/client/dist/assets/erDiagram-Q63AITRT-DHbbqiY9.js +85 -0
  38. package/client/dist/assets/flowDiagram-23GEKE2U-I6vhJlCk.js +156 -0
  39. package/client/dist/assets/ganttDiagram-NO4QXBWP-CDYZHcsU.js +292 -0
  40. package/client/dist/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
  41. package/client/dist/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
  42. package/client/dist/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
  43. package/client/dist/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
  44. package/client/dist/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
  45. package/client/dist/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
  46. package/client/dist/assets/gitGraphDiagram-IHSO6WYX-dyf7caP8.js +106 -0
  47. package/client/dist/assets/graph-C9eacEi8.js +1 -0
  48. package/client/dist/assets/index-BYrVLOXw.js +609 -0
  49. package/client/dist/assets/index-BZvZ9izZ.css +1 -0
  50. package/client/dist/assets/infoDiagram-FWYZ7A6U-BlWH6vM3.js +2 -0
  51. package/client/dist/assets/init-Gi6I4Gst.js +1 -0
  52. package/client/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  53. package/client/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  54. package/client/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  55. package/client/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  56. package/client/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  57. package/client/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  58. package/client/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  59. package/client/dist/assets/ishikawaDiagram-FXEZZL3T-BEKH-_6E.js +70 -0
  60. package/client/dist/assets/journeyDiagram-5HDEW3XC-cn_mQ2U9.js +139 -0
  61. package/client/dist/assets/kanban-definition-HUTT4EX6-DGZiYhYV.js +89 -0
  62. package/client/dist/assets/katex-DkKDou_j.js +257 -0
  63. package/client/dist/assets/layout-DEXfKzaS.js +1 -0
  64. package/client/dist/assets/linear-CdtYl6qR.js +1 -0
  65. package/client/dist/assets/map-Czzmt4hB.js +1 -0
  66. package/client/dist/assets/mermaid.core-CrKi1642.js +314 -0
  67. package/client/dist/assets/mindmap-definition-LN4V7U3C-G_CA7V9L.js +96 -0
  68. package/client/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  69. package/client/dist/assets/pegDiagram-2B236MQR-6ZeO9kDM.js +1 -0
  70. package/client/dist/assets/pieDiagram-ENE6RG2P-Bd0InZSQ.js +39 -0
  71. package/client/dist/assets/quadrantDiagram-ABIIQ3AL-Bg1m9Csn.js +7 -0
  72. package/client/dist/assets/railroadDiagram-RFXS5EU6-CCzPP1JU.js +1 -0
  73. package/client/dist/assets/requirementDiagram-TGXJPOKE-iN7kyPgM.js +84 -0
  74. package/client/dist/assets/sankeyDiagram-HTMAVEWB-DN1v_DUJ.js +40 -0
  75. package/client/dist/assets/sequenceDiagram-DBY2YBRQ-C5LMp5Sa.js +162 -0
  76. package/client/dist/assets/sizeCapture-X5ZJPWSS-Bp9jVLhL.js +1 -0
  77. package/client/dist/assets/stateDiagram-2N3HPSRC-VbWBetTf.js +1 -0
  78. package/client/dist/assets/stateDiagram-v2-6OUMAXLB-BuaUtNAG.js +1 -0
  79. package/client/dist/assets/swimlanes-5IMT3BWC-CrXokvQ-.js +2 -0
  80. package/client/dist/assets/swimlanesDiagram-G3AALYLV-C6hwc993.js +8 -0
  81. package/client/dist/assets/timeline-definition-FHXFAJF6-Cxx1NT9A.js +120 -0
  82. package/client/dist/assets/vennDiagram-L72KCM5P-C6DBgaEy.js +34 -0
  83. package/client/dist/assets/wardleyDiagram-EHGQE667-RV7xMg8g.js +78 -0
  84. package/client/dist/assets/xychartDiagram-FW5EYKEG-Llhe9pB1.js +7 -0
  85. package/client/dist/backdrops/deck-golden.jpg +0 -0
  86. package/client/dist/backdrops/lighthouse.jpg +0 -0
  87. package/client/dist/index.html +27 -0
  88. package/client/dist/shipwright-logo-white.png +0 -0
  89. package/lib/cache-runtime.mjs +72 -0
  90. package/lib/cache-sync.mjs +243 -0
  91. package/lib/claude-cli.mjs +173 -0
  92. package/lib/plugins.mjs +181 -0
  93. package/lib/preflight.mjs +208 -0
  94. package/lib/probes.mjs +53 -0
  95. package/lib/server.mjs +315 -0
  96. package/lib/util.mjs +83 -0
  97. package/lib/version-check.mjs +76 -0
  98. package/lib/win32-spawn.mjs +253 -0
  99. package/package.json +67 -0
  100. package/scripts/deploy-procs.mjs +208 -0
  101. package/scripts/deploy-swap.mjs +276 -0
  102. package/scripts/kill-targets.js +140 -0
  103. package/scripts/repair-claude-json.mjs +295 -0
  104. package/server/dist/config/default-actions.json +90 -0
  105. package/server/dist/config.d.ts +96 -0
  106. package/server/dist/config.d.ts.map +1 -0
  107. package/server/dist/config.js +68 -0
  108. package/server/dist/config.js.map +1 -0
  109. package/server/dist/core/actions-schema-validator.d.ts +8 -0
  110. package/server/dist/core/actions-schema-validator.d.ts.map +1 -0
  111. package/server/dist/core/actions-schema-validator.js +394 -0
  112. package/server/dist/core/actions-schema-validator.js.map +1 -0
  113. package/server/dist/core/actions-substitute.d.ts +115 -0
  114. package/server/dist/core/actions-substitute.d.ts.map +1 -0
  115. package/server/dist/core/actions-substitute.js +549 -0
  116. package/server/dist/core/actions-substitute.js.map +1 -0
  117. package/server/dist/core/board-column.d.ts +3 -0
  118. package/server/dist/core/board-column.d.ts.map +1 -0
  119. package/server/dist/core/board-column.js +4 -0
  120. package/server/dist/core/board-column.js.map +1 -0
  121. package/server/dist/core/campaign-events.d.ts +39 -0
  122. package/server/dist/core/campaign-events.d.ts.map +1 -0
  123. package/server/dist/core/campaign-events.js +192 -0
  124. package/server/dist/core/campaign-events.js.map +1 -0
  125. package/server/dist/core/campaign-loop-state.d.ts +31 -0
  126. package/server/dist/core/campaign-loop-state.d.ts.map +1 -0
  127. package/server/dist/core/campaign-loop-state.js +124 -0
  128. package/server/dist/core/campaign-loop-state.js.map +1 -0
  129. package/server/dist/core/campaign-parse.d.ts +28 -0
  130. package/server/dist/core/campaign-parse.d.ts.map +1 -0
  131. package/server/dist/core/campaign-parse.js +174 -0
  132. package/server/dist/core/campaign-parse.js.map +1 -0
  133. package/server/dist/core/campaign-paths.d.ts +24 -0
  134. package/server/dist/core/campaign-paths.d.ts.map +1 -0
  135. package/server/dist/core/campaign-paths.js +111 -0
  136. package/server/dist/core/campaign-paths.js.map +1 -0
  137. package/server/dist/core/campaign-route-helpers.d.ts +19 -0
  138. package/server/dist/core/campaign-route-helpers.d.ts.map +1 -0
  139. package/server/dist/core/campaign-route-helpers.js +51 -0
  140. package/server/dist/core/campaign-route-helpers.js.map +1 -0
  141. package/server/dist/core/campaign-status-json.d.ts +55 -0
  142. package/server/dist/core/campaign-status-json.d.ts.map +1 -0
  143. package/server/dist/core/campaign-status-json.js +57 -0
  144. package/server/dist/core/campaign-status-json.js.map +1 -0
  145. package/server/dist/core/campaign-store.d.ts +10 -0
  146. package/server/dist/core/campaign-store.d.ts.map +1 -0
  147. package/server/dist/core/campaign-store.js +245 -0
  148. package/server/dist/core/campaign-store.js.map +1 -0
  149. package/server/dist/core/campaign-types.d.ts +101 -0
  150. package/server/dist/core/campaign-types.d.ts.map +1 -0
  151. package/server/dist/core/campaign-types.js +10 -0
  152. package/server/dist/core/campaign-types.js.map +1 -0
  153. package/server/dist/core/campaign-write.d.ts +13 -0
  154. package/server/dist/core/campaign-write.d.ts.map +1 -0
  155. package/server/dist/core/campaign-write.js +128 -0
  156. package/server/dist/core/campaign-write.js.map +1 -0
  157. package/server/dist/core/cascade-delete-project-tasks.d.ts +14 -0
  158. package/server/dist/core/cascade-delete-project-tasks.d.ts.map +1 -0
  159. package/server/dist/core/cascade-delete-project-tasks.js +68 -0
  160. package/server/dist/core/cascade-delete-project-tasks.js.map +1 -0
  161. package/server/dist/core/claude-bin-resolver.d.ts +62 -0
  162. package/server/dist/core/claude-bin-resolver.d.ts.map +1 -0
  163. package/server/dist/core/claude-bin-resolver.js +208 -0
  164. package/server/dist/core/claude-bin-resolver.js.map +1 -0
  165. package/server/dist/core/claude-theme-reader.d.ts +15 -0
  166. package/server/dist/core/claude-theme-reader.d.ts.map +1 -0
  167. package/server/dist/core/claude-theme-reader.js +52 -0
  168. package/server/dist/core/claude-theme-reader.js.map +1 -0
  169. package/server/dist/core/cli-compat.d.ts +43 -0
  170. package/server/dist/core/cli-compat.d.ts.map +1 -0
  171. package/server/dist/core/cli-compat.js +88 -0
  172. package/server/dist/core/cli-compat.js.map +1 -0
  173. package/server/dist/core/compliance-dimensions.d.ts +20 -0
  174. package/server/dist/core/compliance-dimensions.d.ts.map +1 -0
  175. package/server/dist/core/compliance-dimensions.js +114 -0
  176. package/server/dist/core/compliance-dimensions.js.map +1 -0
  177. package/server/dist/core/compliance-reader.d.ts +49 -0
  178. package/server/dist/core/compliance-reader.d.ts.map +1 -0
  179. package/server/dist/core/compliance-reader.js +147 -0
  180. package/server/dist/core/compliance-reader.js.map +1 -0
  181. package/server/dist/core/contract-version.d.ts +72 -0
  182. package/server/dist/core/contract-version.d.ts.map +1 -0
  183. package/server/dist/core/contract-version.js +114 -0
  184. package/server/dist/core/contract-version.js.map +1 -0
  185. package/server/dist/core/design-feedback.d.ts +29 -0
  186. package/server/dist/core/design-feedback.d.ts.map +1 -0
  187. package/server/dist/core/design-feedback.js +80 -0
  188. package/server/dist/core/design-feedback.js.map +1 -0
  189. package/server/dist/core/dismissed-campaigns-store.d.ts +45 -0
  190. package/server/dist/core/dismissed-campaigns-store.d.ts.map +1 -0
  191. package/server/dist/core/dismissed-campaigns-store.js +147 -0
  192. package/server/dist/core/dismissed-campaigns-store.js.map +1 -0
  193. package/server/dist/core/event-log-reader.d.ts +19 -0
  194. package/server/dist/core/event-log-reader.d.ts.map +1 -0
  195. package/server/dist/core/event-log-reader.js +209 -0
  196. package/server/dist/core/event-log-reader.js.map +1 -0
  197. package/server/dist/core/event-log-types.d.ts +99 -0
  198. package/server/dist/core/event-log-types.d.ts.map +1 -0
  199. package/server/dist/core/event-log-types.js +14 -0
  200. package/server/dist/core/event-log-types.js.map +1 -0
  201. package/server/dist/core/gitignore-cache.d.ts +16 -0
  202. package/server/dist/core/gitignore-cache.d.ts.map +1 -0
  203. package/server/dist/core/gitignore-cache.js +103 -0
  204. package/server/dist/core/gitignore-cache.js.map +1 -0
  205. package/server/dist/core/grade-runner.d.ts +63 -0
  206. package/server/dist/core/grade-runner.d.ts.map +1 -0
  207. package/server/dist/core/grade-runner.js +176 -0
  208. package/server/dist/core/grade-runner.js.map +1 -0
  209. package/server/dist/core/grade-target.d.ts +43 -0
  210. package/server/dist/core/grade-target.d.ts.map +1 -0
  211. package/server/dist/core/grade-target.js +162 -0
  212. package/server/dist/core/grade-target.js.map +1 -0
  213. package/server/dist/core/inbox-derive.d.ts +56 -0
  214. package/server/dist/core/inbox-derive.d.ts.map +1 -0
  215. package/server/dist/core/inbox-derive.js +211 -0
  216. package/server/dist/core/inbox-derive.js.map +1 -0
  217. package/server/dist/core/jsonl-decode.d.ts +28 -0
  218. package/server/dist/core/jsonl-decode.d.ts.map +1 -0
  219. package/server/dist/core/jsonl-decode.js +96 -0
  220. package/server/dist/core/jsonl-decode.js.map +1 -0
  221. package/server/dist/core/jsonl-records.d.ts +104 -0
  222. package/server/dist/core/jsonl-records.d.ts.map +1 -0
  223. package/server/dist/core/jsonl-records.js +222 -0
  224. package/server/dist/core/jsonl-records.js.map +1 -0
  225. package/server/dist/core/launcher.d.ts +74 -0
  226. package/server/dist/core/launcher.d.ts.map +1 -0
  227. package/server/dist/core/launcher.js +192 -0
  228. package/server/dist/core/launcher.js.map +1 -0
  229. package/server/dist/core/mission-context/artifacts-commit.d.ts +28 -0
  230. package/server/dist/core/mission-context/artifacts-commit.d.ts.map +1 -0
  231. package/server/dist/core/mission-context/artifacts-commit.js +98 -0
  232. package/server/dist/core/mission-context/artifacts-commit.js.map +1 -0
  233. package/server/dist/core/mission-context/artifacts-decisions.d.ts +5 -0
  234. package/server/dist/core/mission-context/artifacts-decisions.d.ts.map +1 -0
  235. package/server/dist/core/mission-context/artifacts-decisions.js +114 -0
  236. package/server/dist/core/mission-context/artifacts-decisions.js.map +1 -0
  237. package/server/dist/core/mission-context/artifacts-slice2.d.ts +12 -0
  238. package/server/dist/core/mission-context/artifacts-slice2.d.ts.map +1 -0
  239. package/server/dist/core/mission-context/artifacts-slice2.js +125 -0
  240. package/server/dist/core/mission-context/artifacts-slice2.js.map +1 -0
  241. package/server/dist/core/mission-context/artifacts-tests.d.ts +34 -0
  242. package/server/dist/core/mission-context/artifacts-tests.d.ts.map +1 -0
  243. package/server/dist/core/mission-context/artifacts-tests.js +236 -0
  244. package/server/dist/core/mission-context/artifacts-tests.js.map +1 -0
  245. package/server/dist/core/mission-context/artifacts.d.ts +33 -0
  246. package/server/dist/core/mission-context/artifacts.d.ts.map +1 -0
  247. package/server/dist/core/mission-context/artifacts.js +186 -0
  248. package/server/dist/core/mission-context/artifacts.js.map +1 -0
  249. package/server/dist/core/mission-context/association.d.ts +27 -0
  250. package/server/dist/core/mission-context/association.d.ts.map +1 -0
  251. package/server/dist/core/mission-context/association.js +69 -0
  252. package/server/dist/core/mission-context/association.js.map +1 -0
  253. package/server/dist/core/mission-context/campaign-artifacts.d.ts +9 -0
  254. package/server/dist/core/mission-context/campaign-artifacts.d.ts.map +1 -0
  255. package/server/dist/core/mission-context/campaign-artifacts.js +195 -0
  256. package/server/dist/core/mission-context/campaign-artifacts.js.map +1 -0
  257. package/server/dist/core/mission-context/campaign-facts.d.ts +99 -0
  258. package/server/dist/core/mission-context/campaign-facts.d.ts.map +1 -0
  259. package/server/dist/core/mission-context/campaign-facts.js +111 -0
  260. package/server/dist/core/mission-context/campaign-facts.js.map +1 -0
  261. package/server/dist/core/mission-context/decision-drops.d.ts +46 -0
  262. package/server/dist/core/mission-context/decision-drops.d.ts.map +1 -0
  263. package/server/dist/core/mission-context/decision-drops.js +269 -0
  264. package/server/dist/core/mission-context/decision-drops.js.map +1 -0
  265. package/server/dist/core/mission-context/decisions.d.ts +91 -0
  266. package/server/dist/core/mission-context/decisions.d.ts.map +1 -0
  267. package/server/dist/core/mission-context/decisions.js +222 -0
  268. package/server/dist/core/mission-context/decisions.js.map +1 -0
  269. package/server/dist/core/mission-context/doc-ids.d.ts +35 -0
  270. package/server/dist/core/mission-context/doc-ids.d.ts.map +1 -0
  271. package/server/dist/core/mission-context/doc-ids.js +78 -0
  272. package/server/dist/core/mission-context/doc-ids.js.map +1 -0
  273. package/server/dist/core/mission-context/document-read.d.ts +14 -0
  274. package/server/dist/core/mission-context/document-read.d.ts.map +1 -0
  275. package/server/dist/core/mission-context/document-read.js +36 -0
  276. package/server/dist/core/mission-context/document-read.js.map +1 -0
  277. package/server/dist/core/mission-context/fold-map.d.ts +45 -0
  278. package/server/dist/core/mission-context/fold-map.d.ts.map +1 -0
  279. package/server/dist/core/mission-context/fold-map.js +168 -0
  280. package/server/dist/core/mission-context/fold-map.js.map +1 -0
  281. package/server/dist/core/mission-context/fs-read.d.ts +47 -0
  282. package/server/dist/core/mission-context/fs-read.d.ts.map +1 -0
  283. package/server/dist/core/mission-context/fs-read.js +104 -0
  284. package/server/dist/core/mission-context/fs-read.js.map +1 -0
  285. package/server/dist/core/mission-context/iterate-record.d.ts +52 -0
  286. package/server/dist/core/mission-context/iterate-record.d.ts.map +1 -0
  287. package/server/dist/core/mission-context/iterate-record.js +156 -0
  288. package/server/dist/core/mission-context/iterate-record.js.map +1 -0
  289. package/server/dist/core/mission-context/merge-check.d.ts +60 -0
  290. package/server/dist/core/mission-context/merge-check.d.ts.map +1 -0
  291. package/server/dist/core/mission-context/merge-check.js +217 -0
  292. package/server/dist/core/mission-context/merge-check.js.map +1 -0
  293. package/server/dist/core/mission-context/merge-refresh.d.ts +14 -0
  294. package/server/dist/core/mission-context/merge-refresh.d.ts.map +1 -0
  295. package/server/dist/core/mission-context/merge-refresh.js +53 -0
  296. package/server/dist/core/mission-context/merge-refresh.js.map +1 -0
  297. package/server/dist/core/mission-context/merged-events.d.ts +34 -0
  298. package/server/dist/core/mission-context/merged-events.d.ts.map +1 -0
  299. package/server/dist/core/mission-context/merged-events.js +120 -0
  300. package/server/dist/core/mission-context/merged-events.js.map +1 -0
  301. package/server/dist/core/mission-context/pipeline-artifacts.d.ts +53 -0
  302. package/server/dist/core/mission-context/pipeline-artifacts.d.ts.map +1 -0
  303. package/server/dist/core/mission-context/pipeline-artifacts.js +161 -0
  304. package/server/dist/core/mission-context/pipeline-artifacts.js.map +1 -0
  305. package/server/dist/core/mission-context/planned-impact.d.ts +28 -0
  306. package/server/dist/core/mission-context/planned-impact.d.ts.map +1 -0
  307. package/server/dist/core/mission-context/planned-impact.js +129 -0
  308. package/server/dist/core/mission-context/planned-impact.js.map +1 -0
  309. package/server/dist/core/mission-context/pointer.d.ts +44 -0
  310. package/server/dist/core/mission-context/pointer.d.ts.map +1 -0
  311. package/server/dist/core/mission-context/pointer.js +165 -0
  312. package/server/dist/core/mission-context/pointer.js.map +1 -0
  313. package/server/dist/core/mission-context/resolver-io.d.ts +47 -0
  314. package/server/dist/core/mission-context/resolver-io.d.ts.map +1 -0
  315. package/server/dist/core/mission-context/resolver-io.js +11 -0
  316. package/server/dist/core/mission-context/resolver-io.js.map +1 -0
  317. package/server/dist/core/mission-context/resolver-parts.d.ts +57 -0
  318. package/server/dist/core/mission-context/resolver-parts.d.ts.map +1 -0
  319. package/server/dist/core/mission-context/resolver-parts.js +136 -0
  320. package/server/dist/core/mission-context/resolver-parts.js.map +1 -0
  321. package/server/dist/core/mission-context/resolver.d.ts +11 -0
  322. package/server/dist/core/mission-context/resolver.d.ts.map +1 -0
  323. package/server/dist/core/mission-context/resolver.js +261 -0
  324. package/server/dist/core/mission-context/resolver.js.map +1 -0
  325. package/server/dist/core/mission-context/review-record-entry.d.ts +45 -0
  326. package/server/dist/core/mission-context/review-record-entry.d.ts.map +1 -0
  327. package/server/dist/core/mission-context/review-record-entry.js +214 -0
  328. package/server/dist/core/mission-context/review-record-entry.js.map +1 -0
  329. package/server/dist/core/mission-context/review-record.d.ts +35 -0
  330. package/server/dist/core/mission-context/review-record.d.ts.map +1 -0
  331. package/server/dist/core/mission-context/review-record.js +259 -0
  332. package/server/dist/core/mission-context/review-record.js.map +1 -0
  333. package/server/dist/core/mission-context/review-state.d.ts +33 -0
  334. package/server/dist/core/mission-context/review-state.d.ts.map +1 -0
  335. package/server/dist/core/mission-context/review-state.js +249 -0
  336. package/server/dist/core/mission-context/review-state.js.map +1 -0
  337. package/server/dist/core/mission-context/run-id-recovery.d.ts +44 -0
  338. package/server/dist/core/mission-context/run-id-recovery.d.ts.map +1 -0
  339. package/server/dist/core/mission-context/run-id-recovery.js +175 -0
  340. package/server/dist/core/mission-context/run-id-recovery.js.map +1 -0
  341. package/server/dist/core/mission-context/scenario.d.ts +121 -0
  342. package/server/dist/core/mission-context/scenario.d.ts.map +1 -0
  343. package/server/dist/core/mission-context/scenario.js +151 -0
  344. package/server/dist/core/mission-context/scenario.js.map +1 -0
  345. package/server/dist/core/mission-context/slice2-sources.d.ts +40 -0
  346. package/server/dist/core/mission-context/slice2-sources.d.ts.map +1 -0
  347. package/server/dist/core/mission-context/slice2-sources.js +80 -0
  348. package/server/dist/core/mission-context/slice2-sources.js.map +1 -0
  349. package/server/dist/core/mission-context/slice2-test-fixtures.d.ts +17 -0
  350. package/server/dist/core/mission-context/slice2-test-fixtures.d.ts.map +1 -0
  351. package/server/dist/core/mission-context/slice2-test-fixtures.js +61 -0
  352. package/server/dist/core/mission-context/slice2-test-fixtures.js.map +1 -0
  353. package/server/dist/core/mission-context/slice3-sources.d.ts +43 -0
  354. package/server/dist/core/mission-context/slice3-sources.d.ts.map +1 -0
  355. package/server/dist/core/mission-context/slice3-sources.js +192 -0
  356. package/server/dist/core/mission-context/slice3-sources.js.map +1 -0
  357. package/server/dist/core/mission-context/spec-candidates.d.ts +66 -0
  358. package/server/dist/core/mission-context/spec-candidates.d.ts.map +1 -0
  359. package/server/dist/core/mission-context/spec-candidates.js +164 -0
  360. package/server/dist/core/mission-context/spec-candidates.js.map +1 -0
  361. package/server/dist/core/mission-context/test-evidence.d.ts +14 -0
  362. package/server/dist/core/mission-context/test-evidence.d.ts.map +1 -0
  363. package/server/dist/core/mission-context/test-evidence.js +53 -0
  364. package/server/dist/core/mission-context/test-evidence.js.map +1 -0
  365. package/server/dist/core/mission-context/tests-diff.d.ts +68 -0
  366. package/server/dist/core/mission-context/tests-diff.d.ts.map +1 -0
  367. package/server/dist/core/mission-context/tests-diff.js +151 -0
  368. package/server/dist/core/mission-context/tests-diff.js.map +1 -0
  369. package/server/dist/core/mission-context/traceability.d.ts +58 -0
  370. package/server/dist/core/mission-context/traceability.d.ts.map +1 -0
  371. package/server/dist/core/mission-context/traceability.js +168 -0
  372. package/server/dist/core/mission-context/traceability.js.map +1 -0
  373. package/server/dist/core/mission-context/types-slice2.d.ts +192 -0
  374. package/server/dist/core/mission-context/types-slice2.d.ts.map +1 -0
  375. package/server/dist/core/mission-context/types-slice2.js +15 -0
  376. package/server/dist/core/mission-context/types-slice2.js.map +1 -0
  377. package/server/dist/core/mission-context/types-slice3.d.ts +84 -0
  378. package/server/dist/core/mission-context/types-slice3.d.ts.map +1 -0
  379. package/server/dist/core/mission-context/types-slice3.js +24 -0
  380. package/server/dist/core/mission-context/types-slice3.js.map +1 -0
  381. package/server/dist/core/mission-context/types.d.ts +198 -0
  382. package/server/dist/core/mission-context/types.d.ts.map +1 -0
  383. package/server/dist/core/mission-context/types.js +44 -0
  384. package/server/dist/core/mission-context/types.js.map +1 -0
  385. package/server/dist/core/mission-context/worktree-roots.d.ts +103 -0
  386. package/server/dist/core/mission-context/worktree-roots.d.ts.map +1 -0
  387. package/server/dist/core/mission-context/worktree-roots.js +201 -0
  388. package/server/dist/core/mission-context/worktree-roots.js.map +1 -0
  389. package/server/dist/core/model-tier-config-reader.d.ts +16 -0
  390. package/server/dist/core/model-tier-config-reader.d.ts.map +1 -0
  391. package/server/dist/core/model-tier-config-reader.js +87 -0
  392. package/server/dist/core/model-tier-config-reader.js.map +1 -0
  393. package/server/dist/core/normalize-fs-path.d.ts +2 -0
  394. package/server/dist/core/normalize-fs-path.d.ts.map +1 -0
  395. package/server/dist/core/normalize-fs-path.js +31 -0
  396. package/server/dist/core/normalize-fs-path.js.map +1 -0
  397. package/server/dist/core/parameter-resolver.d.ts +32 -0
  398. package/server/dist/core/parameter-resolver.d.ts.map +1 -0
  399. package/server/dist/core/parameter-resolver.js +300 -0
  400. package/server/dist/core/parameter-resolver.js.map +1 -0
  401. package/server/dist/core/path-guard.d.ts +40 -0
  402. package/server/dist/core/path-guard.d.ts.map +1 -0
  403. package/server/dist/core/path-guard.js +147 -0
  404. package/server/dist/core/path-guard.js.map +1 -0
  405. package/server/dist/core/pr-status.d.ts +47 -0
  406. package/server/dist/core/pr-status.d.ts.map +1 -0
  407. package/server/dist/core/pr-status.js +157 -0
  408. package/server/dist/core/pr-status.js.map +1 -0
  409. package/server/dist/core/preview-child-lifecycle.d.ts +77 -0
  410. package/server/dist/core/preview-child-lifecycle.d.ts.map +1 -0
  411. package/server/dist/core/preview-child-lifecycle.js +223 -0
  412. package/server/dist/core/preview-child-lifecycle.js.map +1 -0
  413. package/server/dist/core/preview-coherence.d.ts +59 -0
  414. package/server/dist/core/preview-coherence.d.ts.map +1 -0
  415. package/server/dist/core/preview-coherence.js +66 -0
  416. package/server/dist/core/preview-coherence.js.map +1 -0
  417. package/server/dist/core/preview-session-manager.d.ts +86 -0
  418. package/server/dist/core/preview-session-manager.d.ts.map +1 -0
  419. package/server/dist/core/preview-session-manager.js +303 -0
  420. package/server/dist/core/preview-session-manager.js.map +1 -0
  421. package/server/dist/core/preview-win32-spawn.d.ts +11 -0
  422. package/server/dist/core/preview-win32-spawn.d.ts.map +1 -0
  423. package/server/dist/core/preview-win32-spawn.js +45 -0
  424. package/server/dist/core/preview-win32-spawn.js.map +1 -0
  425. package/server/dist/core/profile-loader.d.ts +65 -0
  426. package/server/dist/core/profile-loader.d.ts.map +1 -0
  427. package/server/dist/core/profile-loader.js +125 -0
  428. package/server/dist/core/profile-loader.js.map +1 -0
  429. package/server/dist/core/project-actions-loader.d.ts +103 -0
  430. package/server/dist/core/project-actions-loader.d.ts.map +1 -0
  431. package/server/dist/core/project-actions-loader.js +161 -0
  432. package/server/dist/core/project-actions-loader.js.map +1 -0
  433. package/server/dist/core/project-manager.d.ts +110 -0
  434. package/server/dist/core/project-manager.d.ts.map +1 -0
  435. package/server/dist/core/project-manager.js +339 -0
  436. package/server/dist/core/project-manager.js.map +1 -0
  437. package/server/dist/core/project-registry-io.d.ts +64 -0
  438. package/server/dist/core/project-registry-io.d.ts.map +1 -0
  439. package/server/dist/core/project-registry-io.js +194 -0
  440. package/server/dist/core/project-registry-io.js.map +1 -0
  441. package/server/dist/core/readiness-probe.d.ts +89 -0
  442. package/server/dist/core/readiness-probe.d.ts.map +1 -0
  443. package/server/dist/core/readiness-probe.js +216 -0
  444. package/server/dist/core/readiness-probe.js.map +1 -0
  445. package/server/dist/core/run-config-reader.d.ts +35 -0
  446. package/server/dist/core/run-config-reader.d.ts.map +1 -0
  447. package/server/dist/core/run-config-reader.js +362 -0
  448. package/server/dist/core/run-config-reader.js.map +1 -0
  449. package/server/dist/core/run-data-join.d.ts +60 -0
  450. package/server/dist/core/run-data-join.d.ts.map +1 -0
  451. package/server/dist/core/run-data-join.js +264 -0
  452. package/server/dist/core/run-data-join.js.map +1 -0
  453. package/server/dist/core/run-data-types.d.ts +126 -0
  454. package/server/dist/core/run-data-types.d.ts.map +1 -0
  455. package/server/dist/core/run-data-types.js +25 -0
  456. package/server/dist/core/run-data-types.js.map +1 -0
  457. package/server/dist/core/run-loop-state-reader.d.ts +27 -0
  458. package/server/dist/core/run-loop-state-reader.d.ts.map +1 -0
  459. package/server/dist/core/run-loop-state-reader.js +79 -0
  460. package/server/dist/core/run-loop-state-reader.js.map +1 -0
  461. package/server/dist/core/sdk-sessions-merge.d.ts +60 -0
  462. package/server/dist/core/sdk-sessions-merge.d.ts.map +1 -0
  463. package/server/dist/core/sdk-sessions-merge.js +220 -0
  464. package/server/dist/core/sdk-sessions-merge.js.map +1 -0
  465. package/server/dist/core/sdk-sessions-store.d.ts +261 -0
  466. package/server/dist/core/sdk-sessions-store.d.ts.map +1 -0
  467. package/server/dist/core/sdk-sessions-store.js +315 -0
  468. package/server/dist/core/sdk-sessions-store.js.map +1 -0
  469. package/server/dist/core/sdk-sessions-validate.d.ts +9 -0
  470. package/server/dist/core/sdk-sessions-validate.d.ts.map +1 -0
  471. package/server/dist/core/sdk-sessions-validate.js +237 -0
  472. package/server/dist/core/sdk-sessions-validate.js.map +1 -0
  473. package/server/dist/core/session-jsonl-io.d.ts +35 -0
  474. package/server/dist/core/session-jsonl-io.d.ts.map +1 -0
  475. package/server/dist/core/session-jsonl-io.js +128 -0
  476. package/server/dist/core/session-jsonl-io.js.map +1 -0
  477. package/server/dist/core/session-parser.d.ts +81 -0
  478. package/server/dist/core/session-parser.d.ts.map +1 -0
  479. package/server/dist/core/session-parser.js +168 -0
  480. package/server/dist/core/session-parser.js.map +1 -0
  481. package/server/dist/core/session-watcher-debug.d.ts +7 -0
  482. package/server/dist/core/session-watcher-debug.d.ts.map +1 -0
  483. package/server/dist/core/session-watcher-debug.js +31 -0
  484. package/server/dist/core/session-watcher-debug.js.map +1 -0
  485. package/server/dist/core/session-watcher.d.ts +101 -0
  486. package/server/dist/core/session-watcher.d.ts.map +1 -0
  487. package/server/dist/core/session-watcher.js +226 -0
  488. package/server/dist/core/session-watcher.js.map +1 -0
  489. package/server/dist/core/shell-quote.d.ts +5 -0
  490. package/server/dist/core/shell-quote.d.ts.map +1 -0
  491. package/server/dist/core/shell-quote.js +49 -0
  492. package/server/dist/core/shell-quote.js.map +1 -0
  493. package/server/dist/core/task-editability.d.ts +22 -0
  494. package/server/dist/core/task-editability.d.ts.map +1 -0
  495. package/server/dist/core/task-editability.js +34 -0
  496. package/server/dist/core/task-editability.js.map +1 -0
  497. package/server/dist/core/terminal-prompt-detect.d.ts +7 -0
  498. package/server/dist/core/terminal-prompt-detect.d.ts.map +1 -0
  499. package/server/dist/core/terminal-prompt-detect.js +128 -0
  500. package/server/dist/core/terminal-prompt-detect.js.map +1 -0
  501. package/server/dist/core/tests-gate.d.ts +23 -0
  502. package/server/dist/core/tests-gate.d.ts.map +1 -0
  503. package/server/dist/core/tests-gate.js +92 -0
  504. package/server/dist/core/tests-gate.js.map +1 -0
  505. package/server/dist/core/triage-amend.d.ts +33 -0
  506. package/server/dist/core/triage-amend.d.ts.map +1 -0
  507. package/server/dist/core/triage-amend.js +109 -0
  508. package/server/dist/core/triage-amend.js.map +1 -0
  509. package/server/dist/core/triage-board-read.d.ts +37 -0
  510. package/server/dist/core/triage-board-read.d.ts.map +1 -0
  511. package/server/dist/core/triage-board-read.js +148 -0
  512. package/server/dist/core/triage-board-read.js.map +1 -0
  513. package/server/dist/core/triage-cli-runner.d.ts +61 -0
  514. package/server/dist/core/triage-cli-runner.d.ts.map +1 -0
  515. package/server/dist/core/triage-cli-runner.js +92 -0
  516. package/server/dist/core/triage-cli-runner.js.map +1 -0
  517. package/server/dist/core/triage-compose.d.ts +33 -0
  518. package/server/dist/core/triage-compose.d.ts.map +1 -0
  519. package/server/dist/core/triage-compose.js +51 -0
  520. package/server/dist/core/triage-compose.js.map +1 -0
  521. package/server/dist/core/triage-contract.d.ts +18 -0
  522. package/server/dist/core/triage-contract.d.ts.map +1 -0
  523. package/server/dist/core/triage-contract.js +45 -0
  524. package/server/dist/core/triage-contract.js.map +1 -0
  525. package/server/dist/core/triage-defer.d.ts +36 -0
  526. package/server/dist/core/triage-defer.d.ts.map +1 -0
  527. package/server/dist/core/triage-defer.js +117 -0
  528. package/server/dist/core/triage-defer.js.map +1 -0
  529. package/server/dist/core/triage-enrich.d.ts +31 -0
  530. package/server/dist/core/triage-enrich.d.ts.map +1 -0
  531. package/server/dist/core/triage-enrich.js +127 -0
  532. package/server/dist/core/triage-enrich.js.map +1 -0
  533. package/server/dist/core/triage-lock.d.ts +12 -0
  534. package/server/dist/core/triage-lock.d.ts.map +1 -0
  535. package/server/dist/core/triage-lock.js +41 -0
  536. package/server/dist/core/triage-lock.js.map +1 -0
  537. package/server/dist/core/triage-origin.d.ts +52 -0
  538. package/server/dist/core/triage-origin.d.ts.map +1 -0
  539. package/server/dist/core/triage-origin.js +0 -0
  540. package/server/dist/core/triage-origin.js.map +1 -0
  541. package/server/dist/core/triage-paths.d.ts +25 -0
  542. package/server/dist/core/triage-paths.d.ts.map +1 -0
  543. package/server/dist/core/triage-paths.js +125 -0
  544. package/server/dist/core/triage-paths.js.map +1 -0
  545. package/server/dist/core/triage-raw.d.ts +33 -0
  546. package/server/dist/core/triage-raw.d.ts.map +1 -0
  547. package/server/dist/core/triage-raw.js +66 -0
  548. package/server/dist/core/triage-raw.js.map +1 -0
  549. package/server/dist/core/triage-store.d.ts +42 -0
  550. package/server/dist/core/triage-store.d.ts.map +1 -0
  551. package/server/dist/core/triage-store.js +268 -0
  552. package/server/dist/core/triage-store.js.map +1 -0
  553. package/server/dist/core/triage-validation.d.ts +58 -0
  554. package/server/dist/core/triage-validation.d.ts.map +1 -0
  555. package/server/dist/core/triage-validation.js +198 -0
  556. package/server/dist/core/triage-validation.js.map +1 -0
  557. package/server/dist/core/win32-spawn.d.ts +29 -0
  558. package/server/dist/core/win32-spawn.d.ts.map +1 -0
  559. package/server/dist/core/win32-spawn.js +271 -0
  560. package/server/dist/core/win32-spawn.js.map +1 -0
  561. package/server/dist/external/__tests__/api-contract-probes.d.ts +49 -0
  562. package/server/dist/external/__tests__/api-contract-probes.d.ts.map +1 -0
  563. package/server/dist/external/__tests__/api-contract-probes.js +295 -0
  564. package/server/dist/external/__tests__/api-contract-probes.js.map +1 -0
  565. package/server/dist/external/_lead-fields-tag-filter-harness.d.ts +7 -0
  566. package/server/dist/external/_lead-fields-tag-filter-harness.d.ts.map +1 -0
  567. package/server/dist/external/_lead-fields-tag-filter-harness.js +41 -0
  568. package/server/dist/external/_lead-fields-tag-filter-harness.js.map +1 -0
  569. package/server/dist/external/_routes-edit-fields-harness.d.ts +8 -0
  570. package/server/dist/external/_routes-edit-fields-harness.d.ts.map +1 -0
  571. package/server/dist/external/_routes-edit-fields-harness.js +49 -0
  572. package/server/dist/external/_routes-edit-fields-harness.js.map +1 -0
  573. package/server/dist/external/_shared/helpers.d.ts +143 -0
  574. package/server/dist/external/_shared/helpers.d.ts.map +1 -0
  575. package/server/dist/external/_shared/helpers.js +231 -0
  576. package/server/dist/external/_shared/helpers.js.map +1 -0
  577. package/server/dist/external/actions/_helpers.d.ts +15 -0
  578. package/server/dist/external/actions/_helpers.d.ts.map +1 -0
  579. package/server/dist/external/actions/_helpers.js +48 -0
  580. package/server/dist/external/actions/_helpers.js.map +1 -0
  581. package/server/dist/external/actions/get.d.ts +8 -0
  582. package/server/dist/external/actions/get.d.ts.map +1 -0
  583. package/server/dist/external/actions/get.js +96 -0
  584. package/server/dist/external/actions/get.js.map +1 -0
  585. package/server/dist/external/actions/routes.d.ts +9 -0
  586. package/server/dist/external/actions/routes.d.ts.map +1 -0
  587. package/server/dist/external/actions/routes.js +33 -0
  588. package/server/dist/external/actions/routes.js.map +1 -0
  589. package/server/dist/external/actions/stub.d.ts +6 -0
  590. package/server/dist/external/actions/stub.d.ts.map +1 -0
  591. package/server/dist/external/actions/stub.js +51 -0
  592. package/server/dist/external/actions/stub.js.map +1 -0
  593. package/server/dist/external/actions/upload-delete.d.ts +6 -0
  594. package/server/dist/external/actions/upload-delete.d.ts.map +1 -0
  595. package/server/dist/external/actions/upload-delete.js +46 -0
  596. package/server/dist/external/actions/upload-delete.js.map +1 -0
  597. package/server/dist/external/actions/upload.d.ts +6 -0
  598. package/server/dist/external/actions/upload.d.ts.map +1 -0
  599. package/server/dist/external/actions/upload.js +141 -0
  600. package/server/dist/external/actions/upload.js.map +1 -0
  601. package/server/dist/external/compliance/routes.d.ts +9 -0
  602. package/server/dist/external/compliance/routes.d.ts.map +1 -0
  603. package/server/dist/external/compliance/routes.js +46 -0
  604. package/server/dist/external/compliance/routes.js.map +1 -0
  605. package/server/dist/external/design-review/__tests__/_helpers.d.ts +16 -0
  606. package/server/dist/external/design-review/__tests__/_helpers.d.ts.map +1 -0
  607. package/server/dist/external/design-review/__tests__/_helpers.js +92 -0
  608. package/server/dist/external/design-review/__tests__/_helpers.js.map +1 -0
  609. package/server/dist/external/design-review/feedback-write.d.ts +7 -0
  610. package/server/dist/external/design-review/feedback-write.d.ts.map +1 -0
  611. package/server/dist/external/design-review/feedback-write.js +126 -0
  612. package/server/dist/external/design-review/feedback-write.js.map +1 -0
  613. package/server/dist/external/design-review/gate.d.ts +11 -0
  614. package/server/dist/external/design-review/gate.d.ts.map +1 -0
  615. package/server/dist/external/design-review/gate.js +39 -0
  616. package/server/dist/external/design-review/gate.js.map +1 -0
  617. package/server/dist/external/design-review/routes.d.ts +9 -0
  618. package/server/dist/external/design-review/routes.d.ts.map +1 -0
  619. package/server/dist/external/design-review/routes.js +25 -0
  620. package/server/dist/external/design-review/routes.js.map +1 -0
  621. package/server/dist/external/design-review/serve.d.ts +10 -0
  622. package/server/dist/external/design-review/serve.d.ts.map +1 -0
  623. package/server/dist/external/design-review/serve.js +184 -0
  624. package/server/dist/external/design-review/serve.js.map +1 -0
  625. package/server/dist/external/events/routes.d.ts +16 -0
  626. package/server/dist/external/events/routes.d.ts.map +1 -0
  627. package/server/dist/external/events/routes.js +46 -0
  628. package/server/dist/external/events/routes.js.map +1 -0
  629. package/server/dist/external/file/_helpers.d.ts +62 -0
  630. package/server/dist/external/file/_helpers.d.ts.map +1 -0
  631. package/server/dist/external/file/_helpers.js +146 -0
  632. package/server/dist/external/file/_helpers.js.map +1 -0
  633. package/server/dist/external/file/routes.d.ts +7 -0
  634. package/server/dist/external/file/routes.d.ts.map +1 -0
  635. package/server/dist/external/file/routes.js +122 -0
  636. package/server/dist/external/file/routes.js.map +1 -0
  637. package/server/dist/external/file/write.d.ts +20 -0
  638. package/server/dist/external/file/write.d.ts.map +1 -0
  639. package/server/dist/external/file/write.js +172 -0
  640. package/server/dist/external/file/write.js.map +1 -0
  641. package/server/dist/external/inbox/_cache.d.ts +48 -0
  642. package/server/dist/external/inbox/_cache.d.ts.map +1 -0
  643. package/server/dist/external/inbox/_cache.js +46 -0
  644. package/server/dist/external/inbox/_cache.js.map +1 -0
  645. package/server/dist/external/inbox/_derive.d.ts +56 -0
  646. package/server/dist/external/inbox/_derive.d.ts.map +1 -0
  647. package/server/dist/external/inbox/_derive.js +231 -0
  648. package/server/dist/external/inbox/_derive.js.map +1 -0
  649. package/server/dist/external/inbox/routes.d.ts +13 -0
  650. package/server/dist/external/inbox/routes.d.ts.map +1 -0
  651. package/server/dist/external/inbox/routes.js +59 -0
  652. package/server/dist/external/inbox/routes.js.map +1 -0
  653. package/server/dist/external/launch/_helpers.d.ts +17 -0
  654. package/server/dist/external/launch/_helpers.d.ts.map +1 -0
  655. package/server/dist/external/launch/_helpers.js +25 -0
  656. package/server/dist/external/launch/_helpers.js.map +1 -0
  657. package/server/dist/external/launch/action-substitution-branch.d.ts +11 -0
  658. package/server/dist/external/launch/action-substitution-branch.d.ts.map +1 -0
  659. package/server/dist/external/launch/action-substitution-branch.js +112 -0
  660. package/server/dist/external/launch/action-substitution-branch.js.map +1 -0
  661. package/server/dist/external/launch/campaign-branch.d.ts +12 -0
  662. package/server/dist/external/launch/campaign-branch.d.ts.map +1 -0
  663. package/server/dist/external/launch/campaign-branch.js +95 -0
  664. package/server/dist/external/launch/campaign-branch.js.map +1 -0
  665. package/server/dist/external/launch/campaign-step-branch.d.ts +12 -0
  666. package/server/dist/external/launch/campaign-step-branch.d.ts.map +1 -0
  667. package/server/dist/external/launch/campaign-step-branch.js +108 -0
  668. package/server/dist/external/launch/campaign-step-branch.js.map +1 -0
  669. package/server/dist/external/launch/legacy-fallback-branch.d.ts +12 -0
  670. package/server/dist/external/launch/legacy-fallback-branch.d.ts.map +1 -0
  671. package/server/dist/external/launch/legacy-fallback-branch.js +29 -0
  672. package/server/dist/external/launch/legacy-fallback-branch.js.map +1 -0
  673. package/server/dist/external/launch/master-run-branch.d.ts +24 -0
  674. package/server/dist/external/launch/master-run-branch.d.ts.map +1 -0
  675. package/server/dist/external/launch/master-run-branch.js +168 -0
  676. package/server/dist/external/launch/master-run-branch.js.map +1 -0
  677. package/server/dist/external/launch/parse-body.d.ts +46 -0
  678. package/server/dist/external/launch/parse-body.d.ts.map +1 -0
  679. package/server/dist/external/launch/parse-body.js +115 -0
  680. package/server/dist/external/launch/parse-body.js.map +1 -0
  681. package/server/dist/external/launch/phase-task-branch.d.ts +18 -0
  682. package/server/dist/external/launch/phase-task-branch.d.ts.map +1 -0
  683. package/server/dist/external/launch/phase-task-branch.js +170 -0
  684. package/server/dist/external/launch/phase-task-branch.js.map +1 -0
  685. package/server/dist/external/launch/routes.d.ts +23 -0
  686. package/server/dist/external/launch/routes.d.ts.map +1 -0
  687. package/server/dist/external/launch/routes.js +198 -0
  688. package/server/dist/external/launch/routes.js.map +1 -0
  689. package/server/dist/external/media/_helpers.d.ts +32 -0
  690. package/server/dist/external/media/_helpers.d.ts.map +1 -0
  691. package/server/dist/external/media/_helpers.js +77 -0
  692. package/server/dist/external/media/_helpers.js.map +1 -0
  693. package/server/dist/external/media/routes.d.ts +7 -0
  694. package/server/dist/external/media/routes.d.ts.map +1 -0
  695. package/server/dist/external/media/routes.js +120 -0
  696. package/server/dist/external/media/routes.js.map +1 -0
  697. package/server/dist/external/mission-context/facts-slice3.d.ts +22 -0
  698. package/server/dist/external/mission-context/facts-slice3.d.ts.map +1 -0
  699. package/server/dist/external/mission-context/facts-slice3.js +143 -0
  700. package/server/dist/external/mission-context/facts-slice3.js.map +1 -0
  701. package/server/dist/external/mission-context/facts.d.ts +44 -0
  702. package/server/dist/external/mission-context/facts.d.ts.map +1 -0
  703. package/server/dist/external/mission-context/facts.js +109 -0
  704. package/server/dist/external/mission-context/facts.js.map +1 -0
  705. package/server/dist/external/mission-context/routes.d.ts +83 -0
  706. package/server/dist/external/mission-context/routes.d.ts.map +1 -0
  707. package/server/dist/external/mission-context/routes.js +226 -0
  708. package/server/dist/external/mission-context/routes.js.map +1 -0
  709. package/server/dist/external/mission-context/test-harness.d.ts +62 -0
  710. package/server/dist/external/mission-context/test-harness.d.ts.map +1 -0
  711. package/server/dist/external/mission-context/test-harness.js +121 -0
  712. package/server/dist/external/mission-context/test-harness.js.map +1 -0
  713. package/server/dist/external/mission-context/wire.d.ts +12 -0
  714. package/server/dist/external/mission-context/wire.d.ts.map +1 -0
  715. package/server/dist/external/mission-context/wire.js +62 -0
  716. package/server/dist/external/mission-context/wire.js.map +1 -0
  717. package/server/dist/external/model-config/routes.d.ts +9 -0
  718. package/server/dist/external/model-config/routes.d.ts.map +1 -0
  719. package/server/dist/external/model-config/routes.js +18 -0
  720. package/server/dist/external/model-config/routes.js.map +1 -0
  721. package/server/dist/external/org/__tests__/fixtures/lock-race-worker.d.ts +2 -0
  722. package/server/dist/external/org/__tests__/fixtures/lock-race-worker.d.ts.map +1 -0
  723. package/server/dist/external/org/__tests__/fixtures/lock-race-worker.js +67 -0
  724. package/server/dist/external/org/__tests__/fixtures/lock-race-worker.js.map +1 -0
  725. package/server/dist/external/org/_helpers.d.ts +67 -0
  726. package/server/dist/external/org/_helpers.d.ts.map +1 -0
  727. package/server/dist/external/org/_helpers.js +146 -0
  728. package/server/dist/external/org/_helpers.js.map +1 -0
  729. package/server/dist/external/org/beat-register-release-audit.d.ts +17 -0
  730. package/server/dist/external/org/beat-register-release-audit.d.ts.map +1 -0
  731. package/server/dist/external/org/beat-register-release-audit.js +96 -0
  732. package/server/dist/external/org/beat-register-release-audit.js.map +1 -0
  733. package/server/dist/external/org/beat-register-release-core.d.ts +50 -0
  734. package/server/dist/external/org/beat-register-release-core.d.ts.map +1 -0
  735. package/server/dist/external/org/beat-register-release-core.js +183 -0
  736. package/server/dist/external/org/beat-register-release-core.js.map +1 -0
  737. package/server/dist/external/org/beat-register-release.d.ts +13 -0
  738. package/server/dist/external/org/beat-register-release.d.ts.map +1 -0
  739. package/server/dist/external/org/beat-register-release.js +81 -0
  740. package/server/dist/external/org/beat-register-release.js.map +1 -0
  741. package/server/dist/external/org/beat-register.d.ts +100 -0
  742. package/server/dist/external/org/beat-register.d.ts.map +1 -0
  743. package/server/dist/external/org/beat-register.js +198 -0
  744. package/server/dist/external/org/beat-register.js.map +1 -0
  745. package/server/dist/external/org/countersign.d.ts +8 -0
  746. package/server/dist/external/org/countersign.d.ts.map +1 -0
  747. package/server/dist/external/org/countersign.js +157 -0
  748. package/server/dist/external/org/countersign.js.map +1 -0
  749. package/server/dist/external/org/cron.d.ts +22 -0
  750. package/server/dist/external/org/cron.d.ts.map +1 -0
  751. package/server/dist/external/org/cron.js +59 -0
  752. package/server/dist/external/org/cron.js.map +1 -0
  753. package/server/dist/external/org/decisions-lock.d.ts +68 -0
  754. package/server/dist/external/org/decisions-lock.d.ts.map +1 -0
  755. package/server/dist/external/org/decisions-lock.js +209 -0
  756. package/server/dist/external/org/decisions-lock.js.map +1 -0
  757. package/server/dist/external/org/file-read.d.ts +14 -0
  758. package/server/dist/external/org/file-read.d.ts.map +1 -0
  759. package/server/dist/external/org/file-read.js +80 -0
  760. package/server/dist/external/org/file-read.js.map +1 -0
  761. package/server/dist/external/org/file-write.d.ts +14 -0
  762. package/server/dist/external/org/file-write.d.ts.map +1 -0
  763. package/server/dist/external/org/file-write.js +205 -0
  764. package/server/dist/external/org/file-write.js.map +1 -0
  765. package/server/dist/external/org/last-run.d.ts +28 -0
  766. package/server/dist/external/org/last-run.d.ts.map +1 -0
  767. package/server/dist/external/org/last-run.js +137 -0
  768. package/server/dist/external/org/last-run.js.map +1 -0
  769. package/server/dist/external/org/org-chart-lookup.d.ts +16 -0
  770. package/server/dist/external/org/org-chart-lookup.d.ts.map +1 -0
  771. package/server/dist/external/org/org-chart-lookup.js +100 -0
  772. package/server/dist/external/org/org-chart-lookup.js.map +1 -0
  773. package/server/dist/external/org/org-chart.d.ts +25 -0
  774. package/server/dist/external/org/org-chart.d.ts.map +1 -0
  775. package/server/dist/external/org/org-chart.js +110 -0
  776. package/server/dist/external/org/org-chart.js.map +1 -0
  777. package/server/dist/external/org/routes.d.ts +12 -0
  778. package/server/dist/external/org/routes.d.ts.map +1 -0
  779. package/server/dist/external/org/routes.js +90 -0
  780. package/server/dist/external/org/routes.js.map +1 -0
  781. package/server/dist/external/org/usage.d.ts +24 -0
  782. package/server/dist/external/org/usage.d.ts.map +1 -0
  783. package/server/dist/external/org/usage.js +110 -0
  784. package/server/dist/external/org/usage.js.map +1 -0
  785. package/server/dist/external/pr-status/routes.d.ts +7 -0
  786. package/server/dist/external/pr-status/routes.d.ts.map +1 -0
  787. package/server/dist/external/pr-status/routes.js +37 -0
  788. package/server/dist/external/pr-status/routes.js.map +1 -0
  789. package/server/dist/external/preview/routes.d.ts +10 -0
  790. package/server/dist/external/preview/routes.d.ts.map +1 -0
  791. package/server/dist/external/preview/routes.js +71 -0
  792. package/server/dist/external/preview/routes.js.map +1 -0
  793. package/server/dist/external/routes.d.ts +106 -0
  794. package/server/dist/external/routes.d.ts.map +1 -0
  795. package/server/dist/external/routes.js +162 -0
  796. package/server/dist/external/routes.js.map +1 -0
  797. package/server/dist/external/run-config/routes.d.ts +9 -0
  798. package/server/dist/external/run-config/routes.d.ts.map +1 -0
  799. package/server/dist/external/run-config/routes.js +55 -0
  800. package/server/dist/external/run-config/routes.js.map +1 -0
  801. package/server/dist/external/runs/routes.d.ts +16 -0
  802. package/server/dist/external/runs/routes.d.ts.map +1 -0
  803. package/server/dist/external/runs/routes.js +69 -0
  804. package/server/dist/external/runs/routes.js.map +1 -0
  805. package/server/dist/external/tasks/_phase-helpers.d.ts +37 -0
  806. package/server/dist/external/tasks/_phase-helpers.d.ts.map +1 -0
  807. package/server/dist/external/tasks/_phase-helpers.js +101 -0
  808. package/server/dist/external/tasks/_phase-helpers.js.map +1 -0
  809. package/server/dist/external/tasks/create.d.ts +12 -0
  810. package/server/dist/external/tasks/create.d.ts.map +1 -0
  811. package/server/dist/external/tasks/create.js +139 -0
  812. package/server/dist/external/tasks/create.js.map +1 -0
  813. package/server/dist/external/tasks/lifecycle.d.ts +12 -0
  814. package/server/dist/external/tasks/lifecycle.d.ts.map +1 -0
  815. package/server/dist/external/tasks/lifecycle.js +231 -0
  816. package/server/dist/external/tasks/lifecycle.js.map +1 -0
  817. package/server/dist/external/tasks/list-get.d.ts +11 -0
  818. package/server/dist/external/tasks/list-get.d.ts.map +1 -0
  819. package/server/dist/external/tasks/list-get.js +50 -0
  820. package/server/dist/external/tasks/list-get.js.map +1 -0
  821. package/server/dist/external/tasks/patch.d.ts +12 -0
  822. package/server/dist/external/tasks/patch.d.ts.map +1 -0
  823. package/server/dist/external/tasks/patch.js +192 -0
  824. package/server/dist/external/tasks/patch.js.map +1 -0
  825. package/server/dist/external/tasks/routes.d.ts +18 -0
  826. package/server/dist/external/tasks/routes.d.ts.map +1 -0
  827. package/server/dist/external/tasks/routes.js +49 -0
  828. package/server/dist/external/tasks/routes.js.map +1 -0
  829. package/server/dist/external/transcript/routes.d.ts +12 -0
  830. package/server/dist/external/transcript/routes.d.ts.map +1 -0
  831. package/server/dist/external/transcript/routes.js +160 -0
  832. package/server/dist/external/transcript/routes.js.map +1 -0
  833. package/server/dist/external/tree/routes.d.ts +7 -0
  834. package/server/dist/external/tree/routes.d.ts.map +1 -0
  835. package/server/dist/external/tree/routes.js +96 -0
  836. package/server/dist/external/tree/routes.js.map +1 -0
  837. package/server/dist/index.d.ts +3 -0
  838. package/server/dist/index.d.ts.map +1 -0
  839. package/server/dist/index.js +774 -0
  840. package/server/dist/index.js.map +1 -0
  841. package/server/dist/lib/bind-errors.d.ts +18 -0
  842. package/server/dist/lib/bind-errors.d.ts.map +1 -0
  843. package/server/dist/lib/bind-errors.js +43 -0
  844. package/server/dist/lib/bind-errors.js.map +1 -0
  845. package/server/dist/lib/resolveHonoHost.d.ts +3 -0
  846. package/server/dist/lib/resolveHonoHost.d.ts.map +1 -0
  847. package/server/dist/lib/resolveHonoHost.js +34 -0
  848. package/server/dist/lib/resolveHonoHost.js.map +1 -0
  849. package/server/dist/lib/resolveNetworkProfile.d.ts +28 -0
  850. package/server/dist/lib/resolveNetworkProfile.d.ts.map +1 -0
  851. package/server/dist/lib/resolveNetworkProfile.js +42 -0
  852. package/server/dist/lib/resolveNetworkProfile.js.map +1 -0
  853. package/server/dist/lib/resolveTailscaleIp.d.ts +26 -0
  854. package/server/dist/lib/resolveTailscaleIp.d.ts.map +1 -0
  855. package/server/dist/lib/resolveTailscaleIp.js +61 -0
  856. package/server/dist/lib/resolveTailscaleIp.js.map +1 -0
  857. package/server/dist/lib/resolveTrustedOrigins.d.ts +9 -0
  858. package/server/dist/lib/resolveTrustedOrigins.d.ts.map +1 -0
  859. package/server/dist/lib/resolveTrustedOrigins.js +154 -0
  860. package/server/dist/lib/resolveTrustedOrigins.js.map +1 -0
  861. package/server/dist/middleware/error-handler.d.ts +8 -0
  862. package/server/dist/middleware/error-handler.d.ts.map +1 -0
  863. package/server/dist/middleware/error-handler.js +75 -0
  864. package/server/dist/middleware/error-handler.js.map +1 -0
  865. package/server/dist/middleware/logger.d.ts +3 -0
  866. package/server/dist/middleware/logger.d.ts.map +1 -0
  867. package/server/dist/middleware/logger.js +13 -0
  868. package/server/dist/middleware/logger.js.map +1 -0
  869. package/server/dist/routes/_triage-api-harness.d.ts +16 -0
  870. package/server/dist/routes/_triage-api-harness.d.ts.map +1 -0
  871. package/server/dist/routes/_triage-api-harness.js +89 -0
  872. package/server/dist/routes/_triage-api-harness.js.map +1 -0
  873. package/server/dist/routes/campaigns.d.ts +26 -0
  874. package/server/dist/routes/campaigns.d.ts.map +1 -0
  875. package/server/dist/routes/campaigns.js +237 -0
  876. package/server/dist/routes/campaigns.js.map +1 -0
  877. package/server/dist/routes/diagnostics.d.ts +84 -0
  878. package/server/dist/routes/diagnostics.d.ts.map +1 -0
  879. package/server/dist/routes/diagnostics.js +143 -0
  880. package/server/dist/routes/diagnostics.js.map +1 -0
  881. package/server/dist/routes/grade.d.ts +13 -0
  882. package/server/dist/routes/grade.d.ts.map +1 -0
  883. package/server/dist/routes/grade.js +45 -0
  884. package/server/dist/routes/grade.js.map +1 -0
  885. package/server/dist/routes/profiles.d.ts +25 -0
  886. package/server/dist/routes/profiles.d.ts.map +1 -0
  887. package/server/dist/routes/profiles.js +58 -0
  888. package/server/dist/routes/profiles.js.map +1 -0
  889. package/server/dist/routes/projects.d.ts +20 -0
  890. package/server/dist/routes/projects.d.ts.map +1 -0
  891. package/server/dist/routes/projects.js +105 -0
  892. package/server/dist/routes/projects.js.map +1 -0
  893. package/server/dist/routes/readiness.d.ts +11 -0
  894. package/server/dist/routes/readiness.d.ts.map +1 -0
  895. package/server/dist/routes/readiness.js +52 -0
  896. package/server/dist/routes/readiness.js.map +1 -0
  897. package/server/dist/routes/settings.d.ts +13 -0
  898. package/server/dist/routes/settings.d.ts.map +1 -0
  899. package/server/dist/routes/settings.js +69 -0
  900. package/server/dist/routes/settings.js.map +1 -0
  901. package/server/dist/routes/terminal-appearance.d.ts +7 -0
  902. package/server/dist/routes/terminal-appearance.d.ts.map +1 -0
  903. package/server/dist/routes/terminal-appearance.js +28 -0
  904. package/server/dist/routes/terminal-appearance.js.map +1 -0
  905. package/server/dist/routes/triage.d.ts +35 -0
  906. package/server/dist/routes/triage.d.ts.map +1 -0
  907. package/server/dist/routes/triage.js +496 -0
  908. package/server/dist/routes/triage.js.map +1 -0
  909. package/server/dist/terminal/backpressure-telemetry.d.ts +86 -0
  910. package/server/dist/terminal/backpressure-telemetry.d.ts.map +1 -0
  911. package/server/dist/terminal/backpressure-telemetry.js +158 -0
  912. package/server/dist/terminal/backpressure-telemetry.js.map +1 -0
  913. package/server/dist/terminal/boot-wipe.d.ts +47 -0
  914. package/server/dist/terminal/boot-wipe.d.ts.map +1 -0
  915. package/server/dist/terminal/boot-wipe.js +122 -0
  916. package/server/dist/terminal/boot-wipe.js.map +1 -0
  917. package/server/dist/terminal/headless-mirror.d.ts +139 -0
  918. package/server/dist/terminal/headless-mirror.d.ts.map +1 -0
  919. package/server/dist/terminal/headless-mirror.js +389 -0
  920. package/server/dist/terminal/headless-mirror.js.map +1 -0
  921. package/server/dist/terminal/headless-probe.d.ts +26 -0
  922. package/server/dist/terminal/headless-probe.d.ts.map +1 -0
  923. package/server/dist/terminal/headless-probe.js +99 -0
  924. package/server/dist/terminal/headless-probe.js.map +1 -0
  925. package/server/dist/terminal/idle-reaper.d.ts +47 -0
  926. package/server/dist/terminal/idle-reaper.d.ts.map +1 -0
  927. package/server/dist/terminal/idle-reaper.js +95 -0
  928. package/server/dist/terminal/idle-reaper.js.map +1 -0
  929. package/server/dist/terminal/image-paste.d.ts +60 -0
  930. package/server/dist/terminal/image-paste.d.ts.map +1 -0
  931. package/server/dist/terminal/image-paste.js +260 -0
  932. package/server/dist/terminal/image-paste.js.map +1 -0
  933. package/server/dist/terminal/pty-manager.d.ts +452 -0
  934. package/server/dist/terminal/pty-manager.d.ts.map +1 -0
  935. package/server/dist/terminal/pty-manager.js +1014 -0
  936. package/server/dist/terminal/pty-manager.js.map +1 -0
  937. package/server/dist/terminal/replay-snapshot.d.ts +25 -0
  938. package/server/dist/terminal/replay-snapshot.d.ts.map +1 -0
  939. package/server/dist/terminal/replay-snapshot.js +124 -0
  940. package/server/dist/terminal/replay-snapshot.js.map +1 -0
  941. package/server/dist/terminal/resync-gate.d.ts +20 -0
  942. package/server/dist/terminal/resync-gate.d.ts.map +1 -0
  943. package/server/dist/terminal/resync-gate.js +58 -0
  944. package/server/dist/terminal/resync-gate.js.map +1 -0
  945. package/server/dist/terminal/routes.d.ts +67 -0
  946. package/server/dist/terminal/routes.d.ts.map +1 -0
  947. package/server/dist/terminal/routes.js +455 -0
  948. package/server/dist/terminal/routes.js.map +1 -0
  949. package/server/dist/terminal/scrollback-store.d.ts +120 -0
  950. package/server/dist/terminal/scrollback-store.d.ts.map +1 -0
  951. package/server/dist/terminal/scrollback-store.js +572 -0
  952. package/server/dist/terminal/scrollback-store.js.map +1 -0
  953. package/server/dist/terminal/snapshot-preserve.d.ts +63 -0
  954. package/server/dist/terminal/snapshot-preserve.d.ts.map +1 -0
  955. package/server/dist/terminal/snapshot-preserve.js +116 -0
  956. package/server/dist/terminal/snapshot-preserve.js.map +1 -0
  957. package/server/dist/terminal/snapshot-store.d.ts +147 -0
  958. package/server/dist/terminal/snapshot-store.d.ts.map +1 -0
  959. package/server/dist/terminal/snapshot-store.js +439 -0
  960. package/server/dist/terminal/snapshot-store.js.map +1 -0
  961. package/server/dist/terminal/snapshot-tmp-sweep.d.ts +48 -0
  962. package/server/dist/terminal/snapshot-tmp-sweep.d.ts.map +1 -0
  963. package/server/dist/terminal/snapshot-tmp-sweep.js +141 -0
  964. package/server/dist/terminal/snapshot-tmp-sweep.js.map +1 -0
  965. package/server/dist/terminal/spawn-env.d.ts +46 -0
  966. package/server/dist/terminal/spawn-env.d.ts.map +1 -0
  967. package/server/dist/terminal/spawn-env.js +232 -0
  968. package/server/dist/terminal/spawn-env.js.map +1 -0
  969. package/server/dist/terminal/terminal-reset.d.ts +31 -0
  970. package/server/dist/terminal/terminal-reset.d.ts.map +1 -0
  971. package/server/dist/terminal/terminal-reset.js +43 -0
  972. package/server/dist/terminal/terminal-reset.js.map +1 -0
  973. package/server/dist/terminal/ws-heartbeat.d.ts +78 -0
  974. package/server/dist/terminal/ws-heartbeat.d.ts.map +1 -0
  975. package/server/dist/terminal/ws-heartbeat.js +164 -0
  976. package/server/dist/terminal/ws-heartbeat.js.map +1 -0
  977. package/server/dist/terminal/ws-upgrade-handler.d.ts +96 -0
  978. package/server/dist/terminal/ws-upgrade-handler.d.ts.map +1 -0
  979. package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts +46 -0
  980. package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts.map +1 -0
  981. package/server/dist/terminal/ws-upgrade-handler.fixtures.js +126 -0
  982. package/server/dist/terminal/ws-upgrade-handler.fixtures.js.map +1 -0
  983. package/server/dist/terminal/ws-upgrade-handler.js +518 -0
  984. package/server/dist/terminal/ws-upgrade-handler.js.map +1 -0
  985. package/server/dist/types/action-schema.d.ts +75 -0
  986. package/server/dist/types/action-schema.d.ts.map +1 -0
  987. package/server/dist/types/action-schema.js +32 -0
  988. package/server/dist/types/action-schema.js.map +1 -0
  989. package/server/dist/types/project.d.ts +72 -0
  990. package/server/dist/types/project.d.ts.map +1 -0
  991. package/server/dist/types/project.js +16 -0
  992. package/server/dist/types/project.js.map +1 -0
  993. package/server/dist/types/run-config-v2.d.ts +172 -0
  994. package/server/dist/types/run-config-v2.d.ts.map +1 -0
  995. package/server/dist/types/run-config-v2.js +169 -0
  996. package/server/dist/types/run-config-v2.js.map +1 -0
  997. package/server/dist/types/settings.d.ts +25 -0
  998. package/server/dist/types/settings.d.ts.map +1 -0
  999. package/server/dist/types/settings.js +12 -0
  1000. package/server/dist/types/settings.js.map +1 -0
  1001. package/server/dist/types/task.d.ts +55 -0
  1002. package/server/dist/types/task.d.ts.map +1 -0
  1003. package/server/dist/types/task.js +13 -0
  1004. package/server/dist/types/task.js.map +1 -0
  1005. package/server/dist/types/triage.d.ts +135 -0
  1006. package/server/dist/types/triage.d.ts.map +1 -0
  1007. package/server/dist/types/triage.js +15 -0
  1008. package/server/dist/types/triage.js.map +1 -0
  1009. package/server/package.json +43 -0
  1010. package/server/profiles/PROFILE_SCHEMA_VERSION +1 -0
  1011. package/server/profiles/README.md +27 -0
  1012. package/server/profiles/python-plugin-monorepo.json +35 -0
  1013. package/server/profiles/supabase-nextjs.json +253 -0
  1014. package/server/profiles/vite-hono.json +92 -0
@@ -0,0 +1,222 @@
1
+ /*
2
+ * core/mission-context/decisions.ts — the DECISIONS artifact source
3
+ * (CONTRACT §6 row 5 / §10 Slice-2, campaign 2026-07-18-mission-artifacts).
4
+ *
5
+ * `.shipwright/agent_docs/decision_log.md` is a 639 KB append-only log of EVERY
6
+ * ADR this project ever recorded. The provenance problem external-review GPT #10
7
+ * closed is what makes it usable: each iterate's ADR carries a
8
+ * `- **Run-ID:** <run_id>` bullet, so this run's decisions are an EXACT-MATCH
9
+ * filter — not a date heuristic, not "the last N entries". That exactness is
10
+ * AC3: a concurrent iterate's ADRs, written into the same file minutes apart,
11
+ * can never leak into this run.
12
+ *
13
+ * Two disciplines this module exists to keep (S1 review lessons):
14
+ *
15
+ * 1. SCOPE THE READ TO THE SECTION THE CONTRACT NAMED. The right panel renders
16
+ * "the ADR Markdown", not the decision log. So we extract the matched ADR
17
+ * BLOCKS and render those — pointing the viewer at the whole 639 KB file
18
+ * would bury this run's two decisions under four hundred unrelated ones.
19
+ * 2. BOUND EVERYTHING. Entry count, per-entry size and total size are all
20
+ * capped, and truncation is REPORTED rather than silently applied.
21
+ */
22
+ import { existsSync } from "node:fs";
23
+ import path from "node:path";
24
+ import { readRunDrops } from "./decision-drops.js";
25
+ import { readBoundedFile } from "./fs-read.js";
26
+ import { pathGuard } from "../path-guard.js";
27
+ export const DECISION_LOG_REL = ".shipwright/agent_docs/decision_log.md";
28
+ /** Real file is ~640 KB and only grows; 16 MB bounds it with room to spare. */
29
+ const MAX_LOG_BYTES = 16 * 1024 * 1024;
30
+ /** One iterate records a handful of ADRs. 20 is a generous, bounded ceiling. */
31
+ export const MAX_DECISION_ENTRIES = 20;
32
+ /** Per-entry and total caps on the Markdown carried into the response. */
33
+ const MAX_ENTRY_CHARS = 64 * 1024;
34
+ const MAX_TOTAL_CHARS = 256 * 1024;
35
+ /** Absolute path to the decision log — used for `sourceRev` probing. */
36
+ export function decisionLogPath(projectRoot) {
37
+ return path.join(projectRoot, ...DECISION_LOG_REL.split("/"));
38
+ }
39
+ /** An ADR heading at h1–h4: `### ADR-070: title`. */
40
+ const ADR_HEADING = /^#{1,4}[ \t]+(ADR-[0-9A-Za-z._-]+)[ \t]*(?::[ \t]*(.*))?$/;
41
+ /** Any h1–h3 heading closes the previous ADR block. */
42
+ const BLOCK_BOUNDARY = /^#{1,3}[ \t]+\S/;
43
+ /**
44
+ * The Run-ID bullet. BOTH real spellings occur in this repo's log and both must
45
+ * match, or a third of the entries would silently never resolve:
46
+ * `- **Run-ID:** iterate-…` (colon inside the bold)
47
+ * `- **Run-ID**: iterate-…` (colon outside)
48
+ */
49
+ const RUN_ID_BULLET = /^[ \t]*[-*][ \t]*\*\*Run-ID[ \t]*:?[ \t]*\*\*[ \t]*:?[ \t]*(\S.*)$/i;
50
+ /**
51
+ * The recorded value, normalised for comparison: strip Markdown code ticks,
52
+ * quotes and trailing punctuation a human may have typed around it.
53
+ */
54
+ function normaliseRunId(raw) {
55
+ return raw
56
+ .trim()
57
+ .replace(/^[`'"]+/, "")
58
+ .replace(/[`'".,;]+$/, "")
59
+ .trim();
60
+ }
61
+ /** The Run-ID this block declares, or null when it declares none. */
62
+ export function blockRunId(block) {
63
+ for (const line of block.split(/\r?\n/)) {
64
+ const m = RUN_ID_BULLET.exec(line);
65
+ if (m) {
66
+ const v = normaliseRunId(m[1]);
67
+ return v.length > 0 ? v : null;
68
+ }
69
+ }
70
+ return null;
71
+ }
72
+ /**
73
+ * Split the log into ADR blocks. Exported for direct unit testing — the
74
+ * splitting rule is the fragile part and deserves its own cases.
75
+ */
76
+ export function splitAdrBlocks(text) {
77
+ const lines = text.split(/\r?\n/);
78
+ const blocks = [];
79
+ let current = null;
80
+ for (const line of lines) {
81
+ const heading = ADR_HEADING.exec(line);
82
+ if (heading) {
83
+ if (current)
84
+ blocks.push(current);
85
+ current = { adrId: heading[1], title: (heading[2] ?? "").trim(), lines: [line] };
86
+ continue;
87
+ }
88
+ if (current && BLOCK_BOUNDARY.test(line)) {
89
+ // A non-ADR h1–h3 heading ends the block — an ADR body never contains one.
90
+ blocks.push(current);
91
+ current = null;
92
+ continue;
93
+ }
94
+ if (current)
95
+ current.lines.push(line);
96
+ }
97
+ if (current)
98
+ blocks.push(current);
99
+ return blocks;
100
+ }
101
+ /**
102
+ * The ADRs this run recorded.
103
+ *
104
+ * `unavailable` means the log itself could not be read. An `ok` with zero
105
+ * entries means the log WAS read and this run recorded no ADR — a real, honest
106
+ * answer, and the caller renders the two cases differently.
107
+ */
108
+ export function readRunDecisions(projectRoot, runId) {
109
+ if (typeof runId !== "string" || runId.trim().length === 0) {
110
+ return { status: "unavailable", reason: "missing" };
111
+ }
112
+ const guard = pathGuard(projectRoot, DECISION_LOG_REL);
113
+ if (!guard.ok)
114
+ return { status: "unavailable", reason: "denied" };
115
+ if (!existsSync(guard.absolute))
116
+ return { status: "unavailable", reason: "missing" };
117
+ const read = readBoundedFile(guard.absolute, MAX_LOG_BYTES);
118
+ if (!read)
119
+ return { status: "unavailable", reason: "too_large" };
120
+ const wanted = runId.trim();
121
+ const entries = [];
122
+ let truncated = false;
123
+ let totalChars = 0;
124
+ for (const block of splitAdrBlocks(read.text)) {
125
+ const text = block.lines.join("\n").trimEnd();
126
+ // EXACT match — the whole point of the Run-ID tag (AC3). A prefix or
127
+ // substring test would let `…-mission-s2` match `…-mission-s2-followup`.
128
+ if (blockRunId(text) !== wanted)
129
+ continue;
130
+ if (entries.length >= MAX_DECISION_ENTRIES) {
131
+ truncated = true;
132
+ break;
133
+ }
134
+ const clipped = text.length > MAX_ENTRY_CHARS ? `${text.slice(0, MAX_ENTRY_CHARS)}\n\n…` : text;
135
+ if (totalChars + clipped.length > MAX_TOTAL_CHARS) {
136
+ truncated = true;
137
+ break;
138
+ }
139
+ totalChars += clipped.length;
140
+ if (clipped.length < text.length)
141
+ truncated = true;
142
+ entries.push({ adrId: block.adrId, title: block.title, markdown: clipped });
143
+ }
144
+ return { status: "ok", entries, truncated };
145
+ }
146
+ /** Join key between a drop and the log entry it became. */
147
+ function titleKey(title) {
148
+ return title.trim().replace(/\s+/g, " ").toLowerCase();
149
+ }
150
+ /**
151
+ * The run's decisions from **drops ∪ decision_log**, merged PER ENTRY.
152
+ *
153
+ * The dedupe granularity is the load-bearing detail, and an earlier version got
154
+ * it wrong: it keyed on the RUN, returning early whenever the log held any entry
155
+ * for this run and never reading the drops at all. The record's true granularity
156
+ * is run + `_NNN`, and those coincide only if aggregation were all-or-nothing.
157
+ * It is not — `aggregate_decisions.py` snapshots the drops it will fold, writes
158
+ * them, then unlinks them ONE AT A TIME, so a drop written mid-aggregation is
159
+ * never snapshotted and simply stays on disk. A run could therefore have `_001`
160
+ * published and `_002` still pending, and the run-level short-circuit rendered
161
+ * the first while the second vanished with `sawUnreadable: false` — a decision
162
+ * lost silently, by the function written to stop decisions being lost silently.
163
+ *
164
+ * So: read BOTH, always. A drop whose TITLE matches a published entry has been
165
+ * folded and is suppressed as the duplicate it is (`format_entry` renders the
166
+ * drop's own `title` as the ADR heading, and a drop with no title never becomes
167
+ * an entry here, so the join holds for exactly the drops we would render). Every
168
+ * other drop is still pending and renders unnumbered. The log wins on conflict;
169
+ * it no longer wins on mere presence.
170
+ */
171
+ export function readRunDecisionRecord(projectRoot, runId) {
172
+ const log = readRunDecisions(projectRoot, runId);
173
+ // Read unconditionally. A readable log must never be allowed to assert that
174
+ // an unread drops directory held nothing — the second half of the same bug.
175
+ const drops = readRunDrops(projectRoot, runId);
176
+ // An ABSENT decision_log.md is not a fault — it is a project that has never
177
+ // had a release aggregation, which is most of them. Only a log that is there
178
+ // and unusable (denied, over the cap) is. Treating `missing` as a fault would
179
+ // pin Decisions at "records could not be read" for every such project even
180
+ // when the drops answered perfectly well: the very confusion this iterate is
181
+ // about, rebuilt one level up. (Caught by its own test, not by review.)
182
+ //
183
+ // An empty/invalid runId also reports `missing` here, but it independently
184
+ // fails `isSafeRunId` in the drops reader → `denied` → still surfaced below.
185
+ const logUnreadable = log.status === "unavailable" && log.reason !== "missing";
186
+ const logEntries = log.status === "ok" ? log.entries : [];
187
+ const logTruncated = log.status === "ok" && log.truncated;
188
+ const dropsUnreadable = drops.status === "unavailable";
189
+ const dropEntries = drops.status === "ok" ? drops.entries : [];
190
+ const dropsTruncated = drops.status === "ok" && drops.truncated;
191
+ const malformedCount = drops.status === "ok" ? drops.malformed : 0;
192
+ // Published titles suppress their own drop; everything else is still pending.
193
+ const published = new Set(logEntries.map((e) => titleKey(e.title)).filter((k) => k.length > 0));
194
+ const pending = dropEntries.filter((d) => !published.has(titleKey(d.title)));
195
+ return {
196
+ entries: [
197
+ ...logEntries.map((e) => ({
198
+ adrId: e.adrId,
199
+ title: e.title,
200
+ markdown: e.markdown,
201
+ source: "decision_log",
202
+ })),
203
+ ...pending.map((d) => ({
204
+ adrId: null,
205
+ title: d.title,
206
+ markdown: d.markdown,
207
+ source: "drop",
208
+ })),
209
+ ],
210
+ // BOTH sources' truncation, not just the drops'. A bounded scan that was cut
211
+ // short has not established that this run has no further decision.
212
+ truncated: logTruncated || dropsTruncated,
213
+ malformedCount,
214
+ // Every way either source could have lost something, OR-ed in ONE place so
215
+ // no branch can hardcode `false` without looking — which is exactly what the
216
+ // run-level short-circuit used to do.
217
+ sawUnreadable: logUnreadable || dropsUnreadable || malformedCount > 0 || logTruncated || dropsTruncated,
218
+ // The uncountable subset, for the sentence that cannot cite a number.
219
+ logOrScanLoss: logUnreadable || dropsUnreadable || logTruncated || dropsTruncated,
220
+ };
221
+ }
222
+ //# sourceMappingURL=decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions.js","sourceRoot":"","sources":["../../../src/core/mission-context/decisions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export interface DocIdPayload {
2
+ /** Binding: the task this descriptor was built for. */
3
+ t: string;
4
+ /** Binding: the session uuid. */
5
+ s: string;
6
+ /** Binding: the project root the resolve ran against. */
7
+ p: string;
8
+ /** The iterate run id. */
9
+ r: string;
10
+ /** The root the document was resolved in (project root or a worktree). */
11
+ root: string;
12
+ /** Known-layout relative path segments, joined with "/". */
13
+ rel: string;
14
+ /** Context-wide source revision at mint time. */
15
+ rev: string;
16
+ /**
17
+ * PER-DOCUMENT fingerprint (`<size>:<mtimeMs>`) at mint time.
18
+ *
19
+ * The context-wide `rev` is not sufficient for AC3: it is derived from the
20
+ * adopted spec + event log, so editing only the iterate document would leave
21
+ * it unchanged and the detail endpoint would silently serve the NEW body as
22
+ * `ok` (external code review, openai HIGH). The detail endpoint recomputes
23
+ * this and reports `stale` on any difference.
24
+ */
25
+ f: string;
26
+ }
27
+ /** Mint an opaque id for a resolved document. */
28
+ export declare function mintDocId(payload: DocIdPayload): string;
29
+ /**
30
+ * Verify + decode. Returns null on ANY defect (shape, signature, JSON, missing
31
+ * field) — the caller then 404s with a generic message rather than explaining
32
+ * which part failed, so the endpoint is not an oracle.
33
+ */
34
+ export declare function parseDocId(id: unknown): DocIdPayload | null;
35
+ //# sourceMappingURL=doc-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-ids.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/doc-ids.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,CAAC,EAAE,MAAM,CAAC;IACV,iCAAiC;IACjC,CAAC,EAAE,MAAM,CAAC;IACV,yDAAyD;IACzD,CAAC,EAAE,MAAM,CAAC;IACV,0BAA0B;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;;OAQG;IACH,CAAC,EAAE,MAAM,CAAC;CACX;AAeD,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAGvD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CA2B3D"}
@@ -0,0 +1,78 @@
1
+ /*
2
+ * core/mission-context/doc-ids.ts — OPAQUE artifact-document ids
3
+ * (CONTRACT §5.2, Review-2 GPT #9).
4
+ *
5
+ * The client must NOT construct `/file?path=…` for a Mission artifact. If it
6
+ * did, the path rules would exist in two places and the descriptor and the file
7
+ * read would drift — the classic "the UI shows spec A but fetches file B" bug.
8
+ * Instead the resolver mints an opaque, SIGNED id and the detail endpoint is
9
+ * the only thing that turns it back into a path.
10
+ *
11
+ * The id is a signed capability, not a secret: it carries the binding fields
12
+ * (task, session, project root, run, the chosen root, the relative path, and
13
+ * the source revision) under an HMAC over a per-process key. Tampering with any
14
+ * field invalidates the signature, so a caller cannot rewrite `relPath` to
15
+ * point at `../../.env`.
16
+ *
17
+ * The signature is NOT the security boundary on its own — the detail endpoint
18
+ * ALSO re-checks that the decoded task/session belong to the requesting
19
+ * project and re-runs pathGuard + realPathGuard against the decoded root. The
20
+ * HMAC is what makes those checks cheap and unambiguous; the guards are what
21
+ * make them safe. A per-process key means ids do not survive a restart, which
22
+ * is correct: they are request-scoped handles, not durable links.
23
+ */
24
+ import { createHmac, randomBytes, timingSafeEqual } from "node:crypto";
25
+ /** Regenerated every boot — ids are ephemeral handles by design. */
26
+ const KEY = randomBytes(32);
27
+ function b64url(buf) {
28
+ return buf.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
29
+ }
30
+ function unb64url(s) {
31
+ const pad = s.length % 4 === 0 ? "" : "=".repeat(4 - (s.length % 4));
32
+ return Buffer.from(s.replace(/-/g, "+").replace(/_/g, "/") + pad, "base64");
33
+ }
34
+ function sign(body) {
35
+ return b64url(createHmac("sha256", KEY).update(body).digest());
36
+ }
37
+ /** Mint an opaque id for a resolved document. */
38
+ export function mintDocId(payload) {
39
+ const body = b64url(Buffer.from(JSON.stringify(payload), "utf-8"));
40
+ return `${body}.${sign(body)}`;
41
+ }
42
+ /**
43
+ * Verify + decode. Returns null on ANY defect (shape, signature, JSON, missing
44
+ * field) — the caller then 404s with a generic message rather than explaining
45
+ * which part failed, so the endpoint is not an oracle.
46
+ */
47
+ export function parseDocId(id) {
48
+ if (typeof id !== "string" || id.length === 0 || id.length > 4096)
49
+ return null;
50
+ const dot = id.lastIndexOf(".");
51
+ if (dot <= 0 || dot === id.length - 1)
52
+ return null;
53
+ const body = id.slice(0, dot);
54
+ const sig = id.slice(dot + 1);
55
+ const expected = sign(body);
56
+ // Constant-time compare — lengths must match first (timingSafeEqual throws
57
+ // on a length mismatch, which would itself be a side channel).
58
+ const a = Buffer.from(sig, "utf-8");
59
+ const b = Buffer.from(expected, "utf-8");
60
+ if (a.length !== b.length || !timingSafeEqual(a, b))
61
+ return null;
62
+ let parsed;
63
+ try {
64
+ parsed = JSON.parse(unb64url(body).toString("utf-8"));
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
70
+ return null;
71
+ const o = parsed;
72
+ for (const k of ["t", "s", "p", "r", "root", "rel", "rev", "f"]) {
73
+ if (typeof o[k] !== "string" || o[k].length === 0)
74
+ return null;
75
+ }
76
+ return o;
77
+ }
78
+ //# sourceMappingURL=doc-ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-ids.js","sourceRoot":"","sources":["../../../src/core/mission-context/doc-ids.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Re-resolve a document for the detail endpoint. `expectFingerprint` implements
3
+ * AC3's "changed → stale": the descriptor promised a specific revision, so a
4
+ * rewritten file reports `changed` rather than serving different content under
5
+ * an id the client believes points at what it was shown.
6
+ */
7
+ export declare function readDocumentBody(root: string, relParts: string[], expectFingerprint?: string): {
8
+ ok: true;
9
+ body: string;
10
+ } | {
11
+ ok: false;
12
+ reason: "denied" | "not_found" | "too_large" | "changed";
13
+ };
14
+ //# sourceMappingURL=document-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-read.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/document-read.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,iBAAiB,CAAC,EAAE,MAAM,GAExB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAA;CAAE,CAW1E"}
@@ -0,0 +1,36 @@
1
+ /*
2
+ * core/mission-context/document-read.ts — the artifact-detail endpoint's
3
+ * document read (CONTRACT §5.2).
4
+ *
5
+ * Split out of `resolver.ts` in Slice 2: that file is the ORCHESTRATION of a
6
+ * context response, while this is a single re-read on a later, unrelated
7
+ * request. Keeping them together pushed resolver.ts past the 300-LOC rule and
8
+ * the two have no shared state — only the guards, which live in
9
+ * `worktree-roots.ts` either way.
10
+ */
11
+ import { existsSync } from "node:fs";
12
+ import { docFingerprint, readBounded } from "./resolver-parts.js";
13
+ import { MAX_DOC_BYTES, resolveFirstDoc } from "./worktree-roots.js";
14
+ /**
15
+ * Re-resolve a document for the detail endpoint. `expectFingerprint` implements
16
+ * AC3's "changed → stale": the descriptor promised a specific revision, so a
17
+ * rewritten file reports `changed` rather than serving different content under
18
+ * an id the client believes points at what it was shown.
19
+ */
20
+ export function readDocumentBody(root, relParts, expectFingerprint) {
21
+ const r = resolveFirstDoc(root, [relParts]);
22
+ if (!r.ok)
23
+ return { ok: false, reason: r.reason === "denied" ? "denied" : "not_found" };
24
+ if (r.sizeBytes > MAX_DOC_BYTES)
25
+ return { ok: false, reason: "too_large" };
26
+ if (!existsSync(r.absolute))
27
+ return { ok: false, reason: "not_found" };
28
+ if (expectFingerprint && docFingerprint(r.absolute) !== expectFingerprint) {
29
+ return { ok: false, reason: "changed" };
30
+ }
31
+ const body = readBounded(r.absolute);
32
+ if (body == null)
33
+ return { ok: false, reason: "not_found" };
34
+ return { ok: true, body };
35
+ }
36
+ //# sourceMappingURL=document-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-read.js","sourceRoot":"","sources":["../../../src/core/mission-context/document-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAErE;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,QAAkB,EAClB,iBAA0B;IAI1B,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxF,IAAI,CAAC,CAAC,SAAS,GAAG,aAAa;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC3E,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACvE,IAAI,iBAAiB,IAAI,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,iBAAiB,EAAE,CAAC;QAC1E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC5D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { FrRow } from "./types.js";
2
+ /** The adopted spec, relative to the project root. Constant — no user segment. */
3
+ export declare const SPEC_REL_PARTS: string[];
4
+ export declare function isFrId(v: unknown): v is string;
5
+ export interface FrEntry {
6
+ id: string;
7
+ area: string | null;
8
+ name: string | null;
9
+ description: string | null;
10
+ }
11
+ export interface FoldMap {
12
+ /** Surviving capability rows, keyed by id. */
13
+ entries: Map<string, FrEntry>;
14
+ /** folded id → parent id (one hop; `resolveFr` follows the chain). */
15
+ folds: Map<string, string>;
16
+ /** True when spec.md was found and parsed — false means "resolve raw". */
17
+ loaded: boolean;
18
+ }
19
+ /**
20
+ * Parse the FR table rows + the `## FR-Fold-Map` alias table out of spec.md.
21
+ *
22
+ * Both are pipe tables, distinguished by shape rather than by position: a
23
+ * capability row's 2nd column is an AREA code, a fold row's 2nd column is
24
+ * another FR id. That keeps the parser stable if the sections move.
25
+ */
26
+ export declare function parseFoldMap(specText: string): FoldMap;
27
+ /**
28
+ * Load (and mtime-cache) the fold map for a project root. A missing or
29
+ * unreadable spec.md yields an EMPTY map with `loaded: false`, which makes
30
+ * `resolveFr` echo ids raw — the honest degradation, never a blank.
31
+ */
32
+ export declare function loadFoldMap(projectRoot: string): FoldMap;
33
+ /** Test-only cache reset. */
34
+ export declare function _clearFoldMapCache(): void;
35
+ /**
36
+ * Resolve one FR id to its display row. Follows a fold CHAIN (a folded id whose
37
+ * parent was itself later folded) with a hop bound and cycle detection; on a
38
+ * cycle it stops at the last id reached rather than throwing.
39
+ */
40
+ export declare function resolveFr(map: FoldMap, originalFrId: string): FrRow;
41
+ /** Resolve a list, dropping non-FR-shaped junk but keeping unknown-but-valid ids raw. */
42
+ export declare function resolveFrList(map: FoldMap, ids: readonly string[]): FrRow[];
43
+ /** Absolute path to the adopted spec (for sourceRev mtime probing). */
44
+ export declare function specPath(projectRoot: string): string;
45
+ //# sourceMappingURL=fold-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold-map.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/fold-map.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,kFAAkF;AAClF,eAAO,MAAM,cAAc,UAAuD,CAAC;AAQnF,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAE9C;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,8CAA8C;IAC9C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,sEAAsE;IACtE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;CACjB;AAqBD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA6BtD;AAQD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAkBxD;AAED,6BAA6B;AAC7B,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAKD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,CAuBnE;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,EAAE,CAa3E;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,168 @@
1
+ /*
2
+ * core/mission-context/fold-map.ts — resolve an FR id to its SURVIVING parent
3
+ * (CONTRACT §3.1 / §6; prereq PR #287).
4
+ *
5
+ * The 2026-07-17 taxonomy cleanup folded 37 endpoint/delta rows into their
6
+ * owning capability and recorded the aliases in `## FR-Fold-Map`. Historical
7
+ * `affected_frs` values and source `@fr` tags still name the FOLDED ids — that
8
+ * was deliberate (finer provenance), so every consumer must resolve through the
9
+ * map before display. The canonical example, and AC2 of this slice:
10
+ * FR-01.44 (terminal appearance) → FR-01.28 (Embedded terminal)
11
+ *
12
+ * Honesty rule (§3.1, last clause): an id in NEITHER the table nor the map is
13
+ * shown RAW — never blanked, never silently dropped. A missing name is a
14
+ * display gap; a vanished requirement id would be a lie about what the run did.
15
+ *
16
+ * BOTH ids survive resolution (`originalFrId` + `displayFrId`) so the UI can
17
+ * say "FR-01.28 — mapped from FR-01.44" instead of quietly rewriting history.
18
+ */
19
+ import { existsSync } from "node:fs";
20
+ import path from "node:path";
21
+ import { readBoundedFile } from "./fs-read.js";
22
+ import { pathGuard } from "../path-guard.js";
23
+ /** The adopted spec, relative to the project root. Constant — no user segment. */
24
+ export const SPEC_REL_PARTS = [".shipwright", "planning", "01-adopted", "spec.md"];
25
+ /** Hard cap on spec.md — bounds a corrupt/huge file (CONTRACT §11). */
26
+ const MAX_SPEC_BYTES = 4 * 1024 * 1024;
27
+ /** `FR-01.66` — the immutable id grammar. */
28
+ const FR_ID_RE = /^FR-\d{2}\.\d{2,3}$/;
29
+ export function isFrId(v) {
30
+ return typeof v === "string" && FR_ID_RE.test(v);
31
+ }
32
+ const EMPTY_MAP = { entries: new Map(), folds: new Map(), loaded: false };
33
+ /** Strip markdown code ticks + whitespace from a table cell. */
34
+ function cell(s) {
35
+ return s.replace(/`/g, "").trim();
36
+ }
37
+ /** Keep the adopted row's user-facing capability sentence, not its markup or changelog. */
38
+ function readableDescription(value) {
39
+ if (!value)
40
+ return null;
41
+ const leading = value.split(/<br\s*\/?>/i, 1)[0];
42
+ const text = leading
43
+ .replace(/\*\*/g, "")
44
+ .replace(/\[([^\]]+)\]\([^)]*\)/g, "$1")
45
+ .replace(/\s+/g, " ")
46
+ .trim();
47
+ return text || null;
48
+ }
49
+ /**
50
+ * Parse the FR table rows + the `## FR-Fold-Map` alias table out of spec.md.
51
+ *
52
+ * Both are pipe tables, distinguished by shape rather than by position: a
53
+ * capability row's 2nd column is an AREA code, a fold row's 2nd column is
54
+ * another FR id. That keeps the parser stable if the sections move.
55
+ */
56
+ export function parseFoldMap(specText) {
57
+ const entries = new Map();
58
+ const folds = new Map();
59
+ for (const line of specText.split(/\r?\n/)) {
60
+ if (!line.startsWith("|"))
61
+ continue;
62
+ const cols = line.split("|").slice(1, -1).map(cell);
63
+ if (cols.length < 2)
64
+ continue;
65
+ const first = cols[0];
66
+ if (!isFrId(first))
67
+ continue;
68
+ // NB: use the regex, not the `v is string` predicate — the predicate would
69
+ // narrow this already-string cell to `never` in the else branch.
70
+ const second = cols[1];
71
+ if (FR_ID_RE.test(second)) {
72
+ // Fold row: | `FR-01.44` | `FR-01.28` | delta | description |
73
+ folds.set(first, second);
74
+ }
75
+ else if (cols.length >= 3) {
76
+ // Capability row: | FR-01.66 | TSK | Mission view (live session) | … |
77
+ entries.set(first, {
78
+ id: first,
79
+ area: second.length > 0 && second.length <= 8 ? second : null,
80
+ name: cols[2].length > 0 ? cols[2] : null,
81
+ description: readableDescription(cols[4]),
82
+ });
83
+ }
84
+ }
85
+ return { entries, folds, loaded: entries.size > 0 || folds.size > 0 };
86
+ }
87
+ const cache = new Map();
88
+ /**
89
+ * Load (and mtime-cache) the fold map for a project root. A missing or
90
+ * unreadable spec.md yields an EMPTY map with `loaded: false`, which makes
91
+ * `resolveFr` echo ids raw — the honest degradation, never a blank.
92
+ */
93
+ export function loadFoldMap(projectRoot) {
94
+ const guard = pathGuard(projectRoot, SPEC_REL_PARTS.join("/"));
95
+ if (!guard.ok || !existsSync(guard.absolute))
96
+ return EMPTY_MAP;
97
+ // ONE atomic read: the mtime used as the cache key describes exactly the
98
+ // bytes parsed below, so the cache can never key a different revision than
99
+ // the map it holds (CodeQL js/file-system-race).
100
+ const read = readBoundedFile(guard.absolute, MAX_SPEC_BYTES);
101
+ if (!read)
102
+ return EMPTY_MAP;
103
+ const hit = cache.get(guard.absolute);
104
+ if (hit && hit.mtimeMs === read.mtimeMs)
105
+ return hit.map;
106
+ const map = parseFoldMap(read.text);
107
+ const mtimeMs = read.mtimeMs;
108
+ if (cache.size > 32)
109
+ cache.clear();
110
+ cache.set(guard.absolute, { map, mtimeMs });
111
+ return map;
112
+ }
113
+ /** Test-only cache reset. */
114
+ export function _clearFoldMapCache() {
115
+ cache.clear();
116
+ }
117
+ /** Bound the alias chain — a malformed map must not spin (A→B→A). */
118
+ const MAX_FOLD_HOPS = 8;
119
+ /**
120
+ * Resolve one FR id to its display row. Follows a fold CHAIN (a folded id whose
121
+ * parent was itself later folded) with a hop bound and cycle detection; on a
122
+ * cycle it stops at the last id reached rather than throwing.
123
+ */
124
+ export function resolveFr(map, originalFrId) {
125
+ const original = originalFrId.trim();
126
+ let current = original;
127
+ const seen = new Set([current]);
128
+ for (let hop = 0; hop < MAX_FOLD_HOPS; hop++) {
129
+ const next = map.folds.get(current);
130
+ if (!next || seen.has(next))
131
+ break;
132
+ seen.add(next);
133
+ current = next;
134
+ }
135
+ const entry = map.entries.get(current) ?? null;
136
+ return {
137
+ originalFrId: original,
138
+ displayFrId: current,
139
+ name: entry?.name ?? null,
140
+ area: entry?.area ?? null,
141
+ description: entry?.description ?? null,
142
+ sourceAnchor: `fr-${current.slice(3).replace(".", "")}`,
143
+ // Only set when the fold actually MOVED the id — never a self-reference.
144
+ mappedFrom: current !== original ? original : null,
145
+ };
146
+ }
147
+ /** Resolve a list, dropping non-FR-shaped junk but keeping unknown-but-valid ids raw. */
148
+ export function resolveFrList(map, ids) {
149
+ const out = [];
150
+ const seenDisplay = new Set();
151
+ for (const id of ids) {
152
+ if (!isFrId(id))
153
+ continue;
154
+ const row = resolveFr(map, id);
155
+ // Two folded ids can collapse onto the same parent — keep the first, so the
156
+ // rail does not repeat a capability.
157
+ if (seenDisplay.has(row.displayFrId))
158
+ continue;
159
+ seenDisplay.add(row.displayFrId);
160
+ out.push(row);
161
+ }
162
+ return out;
163
+ }
164
+ /** Absolute path to the adopted spec (for sourceRev mtime probing). */
165
+ export function specPath(projectRoot) {
166
+ return path.join(projectRoot, ...SPEC_REL_PARTS);
167
+ }
168
+ //# sourceMappingURL=fold-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold-map.js","sourceRoot":"","sources":["../../../src/core/mission-context/fold-map.ts"],"names":[],"mappings":"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"}