@svenroth-ai/shipwright 0.28.0 → 0.29.1

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 (306) hide show
  1. package/client/dist/apple-touch-icon.png +0 -0
  2. package/client/dist/assets/{EmbeddedTerminal-4xgNUBUu.js → EmbeddedTerminal-BXosRYLy.js} +30 -30
  3. package/client/dist/assets/{abnfDiagram-VRR7QNED-BdCNbaqc.js → abnfDiagram-VCTEODGH-BGxuVEiU.js} +1 -1
  4. package/client/dist/assets/arc-o82bcJs8.js +1 -0
  5. package/client/dist/assets/architectureDiagram-5GKGNRK7-CaeUIM7e.js +36 -0
  6. package/client/dist/assets/blockDiagram-I7D4REHJ-DtWpTjgT.js +129 -0
  7. package/client/dist/assets/c4Diagram-7LVT6UL2-sJULbaUv.js +38 -0
  8. package/client/dist/assets/channel-CLBQbfQb.js +1 -0
  9. package/client/dist/assets/{chunk-2Q5K7J3B-4N6AnmBJ.js → chunk-2Q5K7J3B-CPeH4xHb.js} +1 -1
  10. package/client/dist/assets/{chunk-5VM5RSS4-Bwd7rtD3.js → chunk-5VM5RSS4-DxiKB3qZ.js} +1 -1
  11. package/client/dist/assets/{chunk-32BRIVSS-Cs67LiCy.js → chunk-F27PBJKO-B8V1zhCX.js} +1 -1
  12. package/client/dist/assets/{chunk-EX3LRPZG-CQqGfptD.js → chunk-IMKFNOWR-BtXet829.js} +5 -5
  13. package/client/dist/assets/{chunk-JWPE2WC7-ClvKd4PN.js → chunk-JWPE2WC7-BaQYKssR.js} +1 -1
  14. package/client/dist/assets/chunk-POPQ4Y6H-I1x_vfH3.js +1 -0
  15. package/client/dist/assets/{chunk-MOJQB5TN-Cwvj8GE1.js → chunk-SVP7TREG-Bvt8jrSp.js} +1 -1
  16. package/client/dist/assets/{chunk-V7JOEXUC-CYFfa4PY.js → chunk-TICWLB2K--9ywNq1F.js} +1 -1
  17. package/client/dist/assets/{chunk-XXDRQBXY-BQAZ6Our.js → chunk-XXDRQBXY-DrIyrBs1.js} +1 -1
  18. package/client/dist/assets/classDiagram-ZZMXUADV-D8z-o3xu.js +1 -0
  19. package/client/dist/assets/classDiagram-v2-VYDZK3BY-D8z-o3xu.js +1 -0
  20. package/client/dist/assets/{cose-bilkent-JH36ORCC-C76Yia6h.js → cose-bilkent-JH36ORCC-DISm8_p0.js} +1 -1
  21. package/client/dist/assets/{cynefin-VYW2F7L2-pJe7rdTi.js → cynefin-OW5HDTMX-wyDjqucU.js} +3 -3
  22. package/client/dist/assets/{cynefinDiagram-TSTJHNR4-EeHQ7dYV.js → cynefinDiagram-5FMLGOSQ-CN-IKDQ6.js} +1 -1
  23. package/client/dist/assets/dagre-GXQ25YYZ-QY0m5eSL.js +4 -0
  24. package/client/dist/assets/diagram-S7CK7UJ4-DhjaAe2g.js +30 -0
  25. package/client/dist/assets/diagram-UQ7AKVKN-D-3R3axg.js +41 -0
  26. package/client/dist/assets/{diagram-FQU43EPY-DW_-leqw.js → diagram-VSXAHHWV-BxXEtjRu.js} +2 -2
  27. package/client/dist/assets/{diagram-G47NLZAW-C_hsLD4u.js → diagram-VX7I27RA-DkbXkJpd.js} +1 -1
  28. package/client/dist/assets/{diagram-NH7WQ7WH-CbeQuO_f.js → diagram-Z3DM3KII-DQGRD9gQ.js} +1 -1
  29. package/client/dist/assets/{ebnfDiagram-CCIWWBDH-B8Z8WHF6.js → ebnfDiagram-PWID7BFC-C_XxskCm.js} +1 -1
  30. package/client/dist/assets/erDiagram-RLTQ6QDP-BhBsYQ7c.js +99 -0
  31. package/client/dist/assets/flowDiagram-HODETNUW-D7fXEPrM.js +168 -0
  32. package/client/dist/assets/{ganttDiagram-NO4QXBWP-K3X0DYBa.js → ganttDiagram-EL5Y4UJY-Bwf8EtWr.js} +4 -4
  33. package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-B2SEx0xa.js → gitGraphDiagram-WWUBYQGX-C3_ixsOl.js} +1 -1
  34. package/client/dist/assets/index-DWrPE3aq.css +1 -0
  35. package/client/dist/assets/index-DwRlIUrK.js +924 -0
  36. package/client/dist/assets/infoDiagram-27XIBGKW-BpcHmgOL.js +2 -0
  37. package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-CrN7QJzt.js → ishikawaDiagram-5VMMS53U-DzSGmhT5.js} +4 -4
  38. package/client/dist/assets/{journeyDiagram-5HDEW3XC-XHIsl7rM.js → journeyDiagram-3NMN7TZE-CT1CrVQO.js} +2 -2
  39. package/client/dist/assets/{kanban-definition-HUTT4EX6-A6HJqHw7.js → kanban-definition-UXKFOSKX-N1CNMAOm.js} +8 -8
  40. package/client/dist/assets/katex-C5jXJg4s.js +257 -0
  41. package/client/dist/assets/layout-CR8gdfo4.js +1 -0
  42. package/client/dist/assets/{linear-D1vF9IQB.js → linear-CfLRjQgX.js} +1 -1
  43. package/client/dist/assets/mermaid.core-Bnqt31Q7.js +312 -0
  44. package/client/dist/assets/{mindmap-definition-LN4V7U3C-CxRkUj6Z.js → mindmap-definition-YA3MSWOX-Brc-v1M4.js} +2 -2
  45. package/client/dist/assets/{pegDiagram-2B236MQR-Bs9dp-8a.js → pegDiagram-XKGWAZYB-D8jUV01U.js} +1 -1
  46. package/client/dist/assets/{pieDiagram-ENE6RG2P-DBWILzB8.js → pieDiagram-E7YTZNPT-BiSkIsrz.js} +3 -3
  47. package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-DrCVJJx6.js → quadrantDiagram-AXDQQJYC-CJetqQxd.js} +1 -1
  48. package/client/dist/assets/{railroadDiagram-RFXS5EU6-BdPW2dNf.js → railroadDiagram-O6MQD6OU-DTTtZpGO.js} +1 -1
  49. package/client/dist/assets/{requirementDiagram-TGXJPOKE-Bj_g3tC5.js → requirementDiagram-BXWQKSXE-meFCoLtR.js} +5 -5
  50. package/client/dist/assets/{sankeyDiagram-HTMAVEWB-BGL9NnsS.js → sankeyDiagram-P5KCCOFB-BR9eN4Do.js} +4 -4
  51. package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-DEirxTZY.js → sequenceDiagram-WJ2MYXX4-BdVzFsCC.js} +1 -1
  52. package/client/dist/assets/{sizeCapture-X5ZJPWSS-BtLrvrea.js → sizeCapture-INFHLROL-CZoZ7r-1.js} +1 -1
  53. package/client/dist/assets/stateDiagram-D77RDMKH-Cmc-iYtm.js +1 -0
  54. package/client/dist/assets/stateDiagram-v2-MP3YSRHH-Cj-hQ4qB.js +1 -0
  55. package/client/dist/assets/swimlanes-42K2YHIH-DN4MssUX.js +1 -0
  56. package/client/dist/assets/swimlanesDiagram-VR7AAH4N-DFxrYFKF.js +8 -0
  57. package/client/dist/assets/{timeline-definition-FHXFAJF6-CnBKJtD_.js → timeline-definition-24CTP7MA-pxxqlxwt.js} +3 -3
  58. package/client/dist/assets/{vennDiagram-L72KCM5P-BYmiJYoh.js → vennDiagram-4TSXK5OY-DiItNcze.js} +5 -5
  59. package/client/dist/assets/{wardleyDiagram-EHGQE667-DU7vW8q3.js → wardleyDiagram-VM6X3IG4-Dfvub75z.js} +1 -1
  60. package/client/dist/assets/xychartDiagram-S5SC5T6Z-Bx83X515.js +7 -0
  61. package/client/dist/favicon-16.png +0 -0
  62. package/client/dist/favicon-32.png +0 -0
  63. package/client/dist/icon-192.png +0 -0
  64. package/client/dist/icon-512.png +0 -0
  65. package/client/dist/icon-maskable-512.png +0 -0
  66. package/client/dist/index.html +11 -2
  67. package/client/dist/manifest.json +13 -0
  68. package/package.json +2 -2
  69. package/server/dist/config.d.ts.map +1 -1
  70. package/server/dist/config.js +7 -2
  71. package/server/dist/config.js.map +1 -1
  72. package/server/dist/core/adopt-scan-findings.d.ts +12 -0
  73. package/server/dist/core/adopt-scan-findings.d.ts.map +1 -0
  74. package/server/dist/core/adopt-scan-findings.js +96 -0
  75. package/server/dist/core/adopt-scan-findings.js.map +1 -0
  76. package/server/dist/core/adopt-scan.d.ts +49 -0
  77. package/server/dist/core/adopt-scan.d.ts.map +1 -0
  78. package/server/dist/core/adopt-scan.js +201 -0
  79. package/server/dist/core/adopt-scan.js.map +1 -0
  80. package/server/dist/core/custom-profile-command-policy.d.ts +6 -0
  81. package/server/dist/core/custom-profile-command-policy.d.ts.map +1 -0
  82. package/server/dist/core/custom-profile-command-policy.js +110 -0
  83. package/server/dist/core/custom-profile-command-policy.js.map +1 -0
  84. package/server/dist/core/custom-profile-loader.d.ts +34 -0
  85. package/server/dist/core/custom-profile-loader.d.ts.map +1 -0
  86. package/server/dist/core/custom-profile-loader.js +225 -0
  87. package/server/dist/core/custom-profile-loader.js.map +1 -0
  88. package/server/dist/core/preview-child-lifecycle.d.ts +7 -2
  89. package/server/dist/core/preview-child-lifecycle.d.ts.map +1 -1
  90. package/server/dist/core/preview-child-lifecycle.js +17 -5
  91. package/server/dist/core/preview-child-lifecycle.js.map +1 -1
  92. package/server/dist/core/preview-session-manager.d.ts +1 -0
  93. package/server/dist/core/preview-session-manager.d.ts.map +1 -1
  94. package/server/dist/core/preview-session-manager.js +2 -2
  95. package/server/dist/core/preview-session-manager.js.map +1 -1
  96. package/server/dist/core/project-actions-loader.d.ts +13 -0
  97. package/server/dist/core/project-actions-loader.d.ts.map +1 -1
  98. package/server/dist/core/project-actions-loader.js +28 -6
  99. package/server/dist/core/project-actions-loader.js.map +1 -1
  100. package/server/dist/core/project-data-dir.d.ts +41 -0
  101. package/server/dist/core/project-data-dir.d.ts.map +1 -0
  102. package/server/dist/core/project-data-dir.js +64 -0
  103. package/server/dist/core/project-data-dir.js.map +1 -0
  104. package/server/dist/core/project-data-migrate.d.ts +14 -0
  105. package/server/dist/core/project-data-migrate.d.ts.map +1 -0
  106. package/server/dist/core/project-data-migrate.js +94 -0
  107. package/server/dist/core/project-data-migrate.js.map +1 -0
  108. package/server/dist/core/project-manager.d.ts.map +1 -1
  109. package/server/dist/core/project-manager.js +9 -10
  110. package/server/dist/core/project-manager.js.map +1 -1
  111. package/server/dist/core/session-file/access.d.ts +26 -0
  112. package/server/dist/core/session-file/access.d.ts.map +1 -0
  113. package/server/dist/core/session-file/access.js +143 -0
  114. package/server/dist/core/session-file/access.js.map +1 -0
  115. package/server/dist/core/session-file/asset-access.d.ts +15 -0
  116. package/server/dist/core/session-file/asset-access.d.ts.map +1 -0
  117. package/server/dist/core/session-file/asset-access.js +141 -0
  118. package/server/dist/core/session-file/asset-access.js.map +1 -0
  119. package/server/dist/core/session-file/evidence.d.ts +25 -0
  120. package/server/dist/core/session-file/evidence.d.ts.map +1 -0
  121. package/server/dist/core/session-file/evidence.js +201 -0
  122. package/server/dist/core/session-file/evidence.js.map +1 -0
  123. package/server/dist/core/session-file/probe.d.ts +16 -0
  124. package/server/dist/core/session-file/probe.d.ts.map +1 -0
  125. package/server/dist/core/session-file/probe.js +63 -0
  126. package/server/dist/core/session-file/probe.js.map +1 -0
  127. package/server/dist/core/session-file/safe-read.d.ts +33 -0
  128. package/server/dist/core/session-file/safe-read.d.ts.map +1 -0
  129. package/server/dist/core/session-file/safe-read.js +103 -0
  130. package/server/dist/core/session-file/safe-read.js.map +1 -0
  131. package/server/dist/core/session-file/sensitive.d.ts +5 -0
  132. package/server/dist/core/session-file/sensitive.d.ts.map +1 -0
  133. package/server/dist/core/session-file/sensitive.js +52 -0
  134. package/server/dist/core/session-file/sensitive.js.map +1 -0
  135. package/server/dist/core/session-info/collect.d.ts +70 -0
  136. package/server/dist/core/session-info/collect.d.ts.map +1 -0
  137. package/server/dist/core/session-info/collect.js +248 -0
  138. package/server/dist/core/session-info/collect.js.map +1 -0
  139. package/server/dist/core/session-info/line-scan.d.ts +20 -0
  140. package/server/dist/core/session-info/line-scan.d.ts.map +1 -0
  141. package/server/dist/core/session-info/line-scan.js +109 -0
  142. package/server/dist/core/session-info/line-scan.js.map +1 -0
  143. package/server/dist/core/session-info/remote-control.d.ts +9 -0
  144. package/server/dist/core/session-info/remote-control.d.ts.map +1 -0
  145. package/server/dist/core/session-info/remote-control.js +64 -0
  146. package/server/dist/core/session-info/remote-control.js.map +1 -0
  147. package/server/dist/core/session-info/session-info.d.ts +18 -0
  148. package/server/dist/core/session-info/session-info.d.ts.map +1 -0
  149. package/server/dist/core/session-info/session-info.js +170 -0
  150. package/server/dist/core/session-info/session-info.js.map +1 -0
  151. package/server/dist/core/session-info/small-file.d.ts +2 -0
  152. package/server/dist/core/session-info/small-file.d.ts.map +1 -0
  153. package/server/dist/core/session-info/small-file.js +42 -0
  154. package/server/dist/core/session-info/small-file.js.map +1 -0
  155. package/server/dist/core/session-info/subagent-transcript.d.ts +12 -0
  156. package/server/dist/core/session-info/subagent-transcript.d.ts.map +1 -0
  157. package/server/dist/core/session-info/subagent-transcript.js +78 -0
  158. package/server/dist/core/session-info/subagent-transcript.js.map +1 -0
  159. package/server/dist/core/session-info/subagents.d.ts +14 -0
  160. package/server/dist/core/session-info/subagents.d.ts.map +1 -0
  161. package/server/dist/core/session-info/subagents.js +92 -0
  162. package/server/dist/core/session-info/subagents.js.map +1 -0
  163. package/server/dist/core/session-info/test-fixtures.d.ts +50 -0
  164. package/server/dist/core/session-info/test-fixtures.d.ts.map +1 -0
  165. package/server/dist/core/session-info/test-fixtures.js +43 -0
  166. package/server/dist/core/session-info/test-fixtures.js.map +1 -0
  167. package/server/dist/core/session-info/types.d.ts +77 -0
  168. package/server/dist/core/session-info/types.d.ts.map +1 -0
  169. package/server/dist/core/session-info/types.js +14 -0
  170. package/server/dist/core/session-info/types.js.map +1 -0
  171. package/server/dist/core/stack-profiles-create.d.ts +31 -0
  172. package/server/dist/core/stack-profiles-create.d.ts.map +1 -0
  173. package/server/dist/core/stack-profiles-create.js +128 -0
  174. package/server/dist/core/stack-profiles-create.js.map +1 -0
  175. package/server/dist/core/stack-profiles.d.ts +49 -0
  176. package/server/dist/core/stack-profiles.d.ts.map +1 -0
  177. package/server/dist/core/stack-profiles.js +142 -0
  178. package/server/dist/core/stack-profiles.js.map +1 -0
  179. package/server/dist/external/_shared/helpers.d.ts +2 -0
  180. package/server/dist/external/_shared/helpers.d.ts.map +1 -1
  181. package/server/dist/external/_shared/helpers.js.map +1 -1
  182. package/server/dist/external/actions/get.d.ts +3 -1
  183. package/server/dist/external/actions/get.d.ts.map +1 -1
  184. package/server/dist/external/actions/get.js +15 -4
  185. package/server/dist/external/actions/get.js.map +1 -1
  186. package/server/dist/external/actions/routes.d.ts +3 -1
  187. package/server/dist/external/actions/routes.d.ts.map +1 -1
  188. package/server/dist/external/actions/routes.js.map +1 -1
  189. package/server/dist/external/actions/stub.d.ts.map +1 -1
  190. package/server/dist/external/actions/stub.js +15 -4
  191. package/server/dist/external/actions/stub.js.map +1 -1
  192. package/server/dist/external/actions/upload-delete.d.ts.map +1 -1
  193. package/server/dist/external/actions/upload-delete.js +30 -20
  194. package/server/dist/external/actions/upload-delete.js.map +1 -1
  195. package/server/dist/external/actions/upload.d.ts.map +1 -1
  196. package/server/dist/external/actions/upload.js +5 -4
  197. package/server/dist/external/actions/upload.js.map +1 -1
  198. package/server/dist/external/create-external-routes-args.d.ts +3 -1
  199. package/server/dist/external/create-external-routes-args.d.ts.map +1 -1
  200. package/server/dist/external/inbox/_phase-gate.d.ts +9 -0
  201. package/server/dist/external/inbox/_phase-gate.d.ts.map +1 -0
  202. package/server/dist/external/inbox/_phase-gate.js +87 -0
  203. package/server/dist/external/inbox/_phase-gate.js.map +1 -0
  204. package/server/dist/external/inbox/_types.d.ts +7 -0
  205. package/server/dist/external/inbox/_types.d.ts.map +1 -1
  206. package/server/dist/external/inbox/routes.d.ts.map +1 -1
  207. package/server/dist/external/inbox/routes.js +2 -0
  208. package/server/dist/external/inbox/routes.js.map +1 -1
  209. package/server/dist/external/launch/action-substitution-branch.js +2 -2
  210. package/server/dist/external/launch/action-substitution-branch.js.map +1 -1
  211. package/server/dist/external/mission-context/facts.js +2 -2
  212. package/server/dist/external/mission-context/facts.js.map +1 -1
  213. package/server/dist/external/preview/routes.d.ts +3 -1
  214. package/server/dist/external/preview/routes.d.ts.map +1 -1
  215. package/server/dist/external/preview/routes.js +8 -1
  216. package/server/dist/external/preview/routes.js.map +1 -1
  217. package/server/dist/external/routes.d.ts.map +1 -1
  218. package/server/dist/external/routes.js +2 -2
  219. package/server/dist/external/routes.js.map +1 -1
  220. package/server/dist/external/session-file/probe-route.d.ts +4 -0
  221. package/server/dist/external/session-file/probe-route.d.ts.map +1 -0
  222. package/server/dist/external/session-file/probe-route.js +66 -0
  223. package/server/dist/external/session-file/probe-route.js.map +1 -0
  224. package/server/dist/external/session-file/routes.d.ts +12 -0
  225. package/server/dist/external/session-file/routes.d.ts.map +1 -0
  226. package/server/dist/external/session-file/routes.js +90 -0
  227. package/server/dist/external/session-file/routes.js.map +1 -0
  228. package/server/dist/external/session-file/session-file.fixture.d.ts +45 -0
  229. package/server/dist/external/session-file/session-file.fixture.d.ts.map +1 -0
  230. package/server/dist/external/session-file/session-file.fixture.js +41 -0
  231. package/server/dist/external/session-file/session-file.fixture.js.map +1 -0
  232. package/server/dist/external/session-info/routes.d.ts +15 -0
  233. package/server/dist/external/session-info/routes.d.ts.map +1 -0
  234. package/server/dist/external/session-info/routes.js +57 -0
  235. package/server/dist/external/session-info/routes.js.map +1 -0
  236. package/server/dist/external/tasks/_phase-helpers.js +2 -2
  237. package/server/dist/external/tasks/_phase-helpers.js.map +1 -1
  238. package/server/dist/external/tasks/create.js +2 -2
  239. package/server/dist/external/tasks/create.js.map +1 -1
  240. package/server/dist/external-routes-wiring.d.ts.map +1 -1
  241. package/server/dist/external-routes-wiring.js +10 -1
  242. package/server/dist/external-routes-wiring.js.map +1 -1
  243. package/server/dist/index.d.ts.map +1 -1
  244. package/server/dist/index.js +6 -8
  245. package/server/dist/index.js.map +1 -1
  246. package/server/dist/routes/adopt-scan.d.ts +4 -0
  247. package/server/dist/routes/adopt-scan.d.ts.map +1 -0
  248. package/server/dist/routes/adopt-scan.js +27 -0
  249. package/server/dist/routes/adopt-scan.js.map +1 -0
  250. package/server/dist/routes/profiles.d.ts +7 -0
  251. package/server/dist/routes/profiles.d.ts.map +1 -1
  252. package/server/dist/routes/profiles.js +13 -0
  253. package/server/dist/routes/profiles.js.map +1 -1
  254. package/server/dist/routes/projects.d.ts.map +1 -1
  255. package/server/dist/routes/projects.js +58 -16
  256. package/server/dist/routes/projects.js.map +1 -1
  257. package/server/dist/routes/stack-profiles.d.ts +10 -0
  258. package/server/dist/routes/stack-profiles.d.ts.map +1 -0
  259. package/server/dist/routes/stack-profiles.js +65 -0
  260. package/server/dist/routes/stack-profiles.js.map +1 -0
  261. package/server/dist/terminal/data-target.d.ts +17 -0
  262. package/server/dist/terminal/data-target.d.ts.map +1 -0
  263. package/server/dist/terminal/data-target.js +56 -0
  264. package/server/dist/terminal/data-target.js.map +1 -0
  265. package/server/dist/terminal/image-paste.d.ts +2 -0
  266. package/server/dist/terminal/image-paste.d.ts.map +1 -1
  267. package/server/dist/terminal/image-paste.js +11 -12
  268. package/server/dist/terminal/image-paste.js.map +1 -1
  269. package/server/dist/terminal/routes.d.ts +5 -0
  270. package/server/dist/terminal/routes.d.ts.map +1 -1
  271. package/server/dist/terminal/routes.js +11 -13
  272. package/server/dist/terminal/routes.js.map +1 -1
  273. package/server/dist/types/project.d.ts +9 -0
  274. package/server/dist/types/project.d.ts.map +1 -1
  275. package/server/dist/types/stack-profile-contract.d.ts +33 -0
  276. package/server/dist/types/stack-profile-contract.d.ts.map +1 -0
  277. package/server/dist/types/stack-profile-contract.js +11 -0
  278. package/server/dist/types/stack-profile-contract.js.map +1 -0
  279. package/server/package.json +3 -3
  280. package/client/dist/assets/arc-DoZTTE1N.js +0 -1
  281. package/client/dist/assets/architectureDiagram-ZJ3FMSHR-DFTG4KtO.js +0 -36
  282. package/client/dist/assets/blockDiagram-677ZJIJ3-C34UBjOB.js +0 -132
  283. package/client/dist/assets/c4Diagram-LMCZKHZV-CbqAB1Ou.js +0 -10
  284. package/client/dist/assets/channel-DBcZw7Kn.js +0 -1
  285. package/client/dist/assets/chunk-RYQCIY6F-DrWMx37d.js +0 -1
  286. package/client/dist/assets/chunk-VR4S4FIN-B5eWtesm.js +0 -1
  287. package/client/dist/assets/classDiagram-OUVF2IWQ-C3Q1V9DU.js +0 -1
  288. package/client/dist/assets/classDiagram-v2-EOCWNBFH-C3Q1V9DU.js +0 -1
  289. package/client/dist/assets/dagre-VKFMJZFB-VXOY6IHR.js +0 -4
  290. package/client/dist/assets/diagram-OA4YK3LP-DRHY5d_c.js +0 -30
  291. package/client/dist/assets/diagram-WEI45ONY-B87OYR_S.js +0 -41
  292. package/client/dist/assets/erDiagram-Q63AITRT-DaD7oa9H.js +0 -85
  293. package/client/dist/assets/flowDiagram-23GEKE2U-GrMVpsea.js +0 -156
  294. package/client/dist/assets/graph-C9eacEi8.js +0 -1
  295. package/client/dist/assets/index-CIpLt0ie.js +0 -863
  296. package/client/dist/assets/index-DGtnTeFd.css +0 -1
  297. package/client/dist/assets/infoDiagram-FWYZ7A6U-Fi8fQ95G.js +0 -2
  298. package/client/dist/assets/katex-DkKDou_j.js +0 -257
  299. package/client/dist/assets/layout-DEXfKzaS.js +0 -1
  300. package/client/dist/assets/map-Czzmt4hB.js +0 -1
  301. package/client/dist/assets/mermaid.core-D6w9zlA0.js +0 -314
  302. package/client/dist/assets/stateDiagram-2N3HPSRC-D3GXIouX.js +0 -1
  303. package/client/dist/assets/stateDiagram-v2-6OUMAXLB-D3lXe_mJ.js +0 -1
  304. package/client/dist/assets/swimlanes-5IMT3BWC-PMRQzNhU.js +0 -2
  305. package/client/dist/assets/swimlanesDiagram-G3AALYLV-DMLbRFiO.js +0 -8
  306. package/client/dist/assets/xychartDiagram-FW5EYKEG-BEtPvBSU.js +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt-scan.js","sourceRoot":"","sources":["../../src/core/adopt-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Project-source command policy. Returns a refusal reason, or null when allowed. */
2
+ export declare function projectCommandRefusal(command: string): string | null;
3
+ /** User-source: any bare program, or an ABSOLUTE path - never a path relative to the repo. */
4
+ export declare function userCommandRefusal(command: string, projectPath?: string): string | null;
5
+ export declare function contained(root: string, target: string): boolean;
6
+ //# sourceMappingURL=custom-profile-command-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-profile-command-policy.d.ts","sourceRoot":"","sources":["../../src/core/custom-profile-command-policy.ts"],"names":[],"mappings":"AAsBA,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqCpE;AAED,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,MAAM,GAAG,IAAI,CAwBnF;AAeD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG/D"}
@@ -0,0 +1,110 @@
1
+ /*
2
+ * custom-profile-command-policy.ts — command policy for custom Preview profiles.
3
+ * Split out of custom-profile-loader.ts (300-line cap). A PROJECT-source command
4
+ * must be a bare allowlisted runner; a USER-source one may be any bare program or
5
+ * absolute path, never one pointing into the repo. Pure functions, no I/O beyond
6
+ * realpath of the program being checked.
7
+ */
8
+ import { realpathSync } from "node:fs";
9
+ import path from "node:path";
10
+ import { PreviewSessionManager } from "./preview-session-manager.js";
11
+ // `npx` is deliberately absent: it downloads and runs a package the repo names.
12
+ const RUNNERS = new Set(["npm", "pnpm", "yarn", "bun", "node", "vite", "next", "python", "python3", "uv", "deno"]);
13
+ const PACKAGE_MANAGERS = new Set(["npm", "pnpm", "yarn", "bun"]);
14
+ const SCRIPT_VERBS = new Set(["run", "run-script", "dev", "start", "serve", "preview"]);
15
+ // Interpreters take code from flags (-e, --eval=, -cprint, -Ic, --import data:...),
16
+ // subcommands (deno eval, -m) and URLs. For these the only accepted shape is
17
+ // "runner + plain file argument(s)": any dash-led argument, `eval`, or URL is refused.
18
+ const INTERPRETERS = new Set(["node", "python", "python3", "deno", "uv"]);
19
+ /** Project-source command policy. Returns a refusal reason, or null when allowed. */
20
+ export function projectCommandRefusal(command) {
21
+ let argv;
22
+ try {
23
+ argv = PreviewSessionManager.tokenizeCommand(command);
24
+ }
25
+ catch (err) {
26
+ return err instanceof Error ? err.message : "unparseable command";
27
+ }
28
+ const exe = argv[0] ?? "";
29
+ if (/[\\/:]/.test(exe))
30
+ return "a project profile may not run a path or a program inside the repo";
31
+ const name = exe.toLowerCase().replace(/\.(cmd|exe|bat)$/, "");
32
+ if (!RUNNERS.has(name))
33
+ return `“${exe}” is not an allowed runner for a project profile`;
34
+ const args = argv.slice(1);
35
+ const argRefusal = runnerArgRefusal(args);
36
+ if (argRefusal)
37
+ return argRefusal;
38
+ if (PACKAGE_MANAGERS.has(name)) {
39
+ // Run a script the repo's own package.json declares - the same trust as `npm run dev`.
40
+ // exec / dlx / x / create fetch and run a package; -e / -c run inline code.
41
+ if (!SCRIPT_VERBS.has((args[0] ?? "").toLowerCase()))
42
+ return "a project profile may only run a package script (run, dev, start)";
43
+ const verb = (args[0] ?? "").toLowerCase();
44
+ const script = verb === "run" || verb === "run-script" ? (args[1] ?? "") : "dev";
45
+ if (!script || script.startsWith("-") || /^[a-z][a-z0-9+.-]*:/i.test(script) || /[\\/]/.test(script)) {
46
+ return "a project profile must name a plain package script";
47
+ }
48
+ }
49
+ if (INTERPRETERS.has(name)) {
50
+ if (args.some((a) => a.startsWith("-") || a.toLowerCase() === "eval" || /^[a-z][a-z0-9+.-]*:/i.test(a))) {
51
+ return "flags, eval and URLs are not allowed for an interpreter in a project profile";
52
+ }
53
+ // a script INSIDE the repo only: no absolute / drive / UNC / parent-relative file argument
54
+ if (args.some((a) => /^([\\/]|[a-z]:)/i.test(a) || a.split(/[\\/]/).includes(".."))) {
55
+ return "an interpreter may only run a script inside the project";
56
+ }
57
+ if (name === "uv" && (args[0] !== "run" || INTERPRETERS.has((args[1] ?? "").toLowerCase().replace(/\.(cmd|exe|bat)$/, "")))) {
58
+ return "uv may only run a script file in a project profile";
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+ /** User-source: any bare program, or an ABSOLUTE path - never a path relative to the repo. */
64
+ export function userCommandRefusal(command, projectPath = "") {
65
+ let argv;
66
+ try {
67
+ argv = PreviewSessionManager.tokenizeCommand(command);
68
+ }
69
+ catch (err) {
70
+ return err instanceof Error ? err.message : "unparseable command";
71
+ }
72
+ const exe = argv[0] ?? "";
73
+ if (/[\\/]/.test(exe) && !path.isAbsolute(exe))
74
+ return "a profile command must be a bare program or an absolute path";
75
+ // an absolute path that points INTO the repository is the same thing as a repo-relative one
76
+ if (projectPath && path.isAbsolute(exe)) {
77
+ let root = projectPath;
78
+ let target = exe;
79
+ try {
80
+ root = realpathSync(projectPath);
81
+ target = realpathSync(exe);
82
+ }
83
+ catch {
84
+ // a program that does not exist yet cannot be resolved - compare the literal paths
85
+ }
86
+ if (contained(root, target) || contained(path.resolve(projectPath), path.resolve(exe))) {
87
+ return "a profile command may not point into the project";
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ /** Arguments no runner may take: a path out of the project, a URL, or a config/eval flag. */
93
+ function runnerArgRefusal(args) {
94
+ for (const a of args) {
95
+ if (/^([\\/]|[a-z]:)/i.test(a) || a.split(/[\\/]/).includes(".."))
96
+ return "a project profile argument may not be an absolute path or leave the project";
97
+ if (/^[a-z][a-z0-9+.-]*:/i.test(a) && !/^[a-z]:[\\/]/i.test(a))
98
+ return "a project profile argument may not be a URL";
99
+ const flag = a.toLowerCase().split("=")[0];
100
+ if (["-c", "--config", "-e", "--eval", "--print", "--require", "-r", "--import", "--loader", "--input-type"].includes(flag ?? "")) {
101
+ return "config, eval and preload flags are not allowed in a project profile";
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ export function contained(root, target) {
107
+ const rel = path.relative(root, target);
108
+ return rel !== "" && rel !== ".." && !rel.startsWith(".." + path.sep) && !path.isAbsolute(rel);
109
+ }
110
+ //# sourceMappingURL=custom-profile-command-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-profile-command-policy.js","sourceRoot":"","sources":["../../src/core/custom-profile-command-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { projectCommandRefusal, userCommandRefusal } from "./custom-profile-command-policy.js";
2
+ import type { PreviewProfile } from "./preview-session-manager.js";
3
+ import { validateStackProfile, type StackProfileDeps } from "./stack-profiles.js";
4
+ export { projectCommandRefusal, userCommandRefusal };
5
+ export type ResolvedPreviewProfile = PreviewProfile & {
6
+ stack?: {
7
+ frontend?: unknown;
8
+ };
9
+ };
10
+ export interface PreviewProfileLookup {
11
+ profile: ResolvedPreviewProfile | null;
12
+ /** Why there is no profile (diagnostics only; never shown as a verdict). */
13
+ reason?: string;
14
+ }
15
+ export interface PreviewProfileResolverDeps {
16
+ /** Bundled-snapshot loader (the existing sync one). */
17
+ bundled: (name: string) => ResolvedPreviewProfile | null;
18
+ validate?: typeof validateStackProfile;
19
+ stack?: StackProfileDeps;
20
+ homeDir?: string;
21
+ now?: () => number;
22
+ /** Max concurrent resolver processes. */
23
+ maxConcurrent?: number;
24
+ }
25
+ export declare const POSITIVE_TTL_MS = 15000;
26
+ export declare const NEGATIVE_TTL_MS = 30000;
27
+ export declare function createPreviewProfileResolver(deps: PreviewProfileResolverDeps): {
28
+ /** `fresh` bypasses the cache (spawn re-resolves right before it runs). Never throws. */
29
+ resolve(name: string, projectPath: string, opts?: {
30
+ fresh?: boolean;
31
+ }): Promise<PreviewProfileLookup>;
32
+ clear(): void;
33
+ };
34
+ //# sourceMappingURL=custom-profile-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-profile-loader.d.ts","sourceRoot":"","sources":["../../src/core/custom-profile-loader.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAa,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAsB,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGtG,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC;AAErD,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG;IAAE,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC;AAEzF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACvC,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,uDAAuD;IACvD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,sBAAsB,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,OAAO,oBAAoB,CAAC;IACvC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,eAAO,MAAM,eAAe,QAAS,CAAC;AAwBtC,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,0BAA0B;IAsGzE,yFAAyF;kBACrE,MAAM,eAAe,MAAM,SAAQ;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAQ,OAAO,CAAC,oBAAoB,CAAC;aAkCtG,IAAI;EAIhB"}
@@ -0,0 +1,225 @@
1
+ /*
2
+ * custom-profile-loader.ts — turns a stack-profile NAME into a runnable
3
+ * Preview profile, including the user's OWN profiles (project / user source)
4
+ * that the bundled-snapshot loader (`profile-loader.ts`) cannot see.
5
+ *
6
+ * The shipwright resolver is the authority on WHICH file a name means and
7
+ * whether it is valid (`validateStackProfile`, same bridge as Settings) — the
8
+ * lookup order is never re-implemented here. A custom profile file is
9
+ * UNTRUSTED input (a cloned repo can ship `.shipwright/profiles/x.json`), so:
10
+ * - it must lie inside `<project>/.shipwright/profiles` or
11
+ * `~/.shipwright/profiles` after realpath (path.relative, not startsWith);
12
+ * - it is read ONCE and only an allowlist of fields is copied (no env / cwd);
13
+ * - a PROJECT-source command must be a bare runner name from an allowlist
14
+ * (no path, no inline-eval flag) — a repo-relative binary never runs;
15
+ * - spawn stays `shell:false` through `preview-session-manager` only.
16
+ * Bundled profiles keep their sync loader; when the resolver is unavailable
17
+ * they fall back to it, so Preview for bundled stacks never regresses.
18
+ */
19
+ import { closeSync, existsSync, fstatSync, lstatSync, openSync, readFileSync, realpathSync } from "node:fs";
20
+ import os from "node:os";
21
+ import path from "node:path";
22
+ import { contained, projectCommandRefusal, userCommandRefusal } from "./custom-profile-command-policy.js";
23
+ import { isProfileNameShape, validateStackProfile } from "./stack-profiles.js";
24
+ import { userProfilesDir } from "./stack-profiles-create.js";
25
+ export { projectCommandRefusal, userCommandRefusal };
26
+ export const POSITIVE_TTL_MS = 15_000;
27
+ export const NEGATIVE_TTL_MS = 30_000;
28
+ const MAX_WAITING = 8;
29
+ const BUSY = "profile resolver busy";
30
+ function isObject(v) {
31
+ return typeof v === "object" && v !== null && !Array.isArray(v);
32
+ }
33
+ /** Copy ONLY the fields Preview uses; refuse anything malformed. */
34
+ function allowlisted(raw) {
35
+ if (!isObject(raw))
36
+ return null;
37
+ const dev = raw.dev_server;
38
+ if (!isObject(dev) || typeof dev.command !== "string" || !dev.command.trim())
39
+ return null;
40
+ const port = dev.port;
41
+ if (typeof port !== "number" || !Number.isInteger(port) || port < 1024 || port > 65535)
42
+ return null;
43
+ const out = { command: dev.command, port };
44
+ if (typeof dev.ready_path === "string" && dev.ready_path.startsWith("/"))
45
+ out.ready_path = dev.ready_path;
46
+ if (dev.host === "127.0.0.1" || dev.host === "localhost")
47
+ out.host = dev.host;
48
+ const t = dev.ready_timeout_seconds;
49
+ if (typeof t === "number" && Number.isInteger(t) && t >= 1 && t <= 600)
50
+ out.ready_timeout_seconds = t;
51
+ const frontend = isObject(raw.stack) ? raw.stack.frontend : undefined;
52
+ return { dev_server: out, stack: { frontend: frontend ?? undefined } };
53
+ }
54
+ export function createPreviewProfileResolver(deps) {
55
+ const validate = deps.validate ?? validateStackProfile;
56
+ const now = deps.now ?? (() => Date.now());
57
+ const home = deps.homeDir ?? os.homedir();
58
+ const cache = new Map();
59
+ const inFlight = new Map();
60
+ const max = deps.maxConcurrent ?? 2;
61
+ let running = 0;
62
+ const waiters = [];
63
+ async function slot(fn) {
64
+ // Hand the slot straight to the next waiter (no decrement), so a newcomer can never
65
+ // slip in between the release and the wake-up and exceed the cap.
66
+ // A stuck resolver must not queue the hot actions endpoint without bound: past a
67
+ // short queue the lookup degrades (no Preview for now) instead of waiting.
68
+ if (running >= max && waiters.length >= MAX_WAITING)
69
+ throw new Error(BUSY);
70
+ if (running >= max)
71
+ await new Promise((r) => waiters.push(r));
72
+ else
73
+ running++;
74
+ try {
75
+ return await fn();
76
+ }
77
+ finally {
78
+ const next = waiters.shift();
79
+ if (next)
80
+ next();
81
+ else
82
+ running--;
83
+ }
84
+ }
85
+ function readCustom(source, file, projectPath) {
86
+ const base = source === "project" ? path.join(projectPath, ".shipwright", "profiles") : userProfilesDir({ homeDir: home });
87
+ let realBase;
88
+ let real;
89
+ try {
90
+ // the folder itself must not be a symlink out of the project / home
91
+ if (lstatSync(base).isSymbolicLink())
92
+ return { profile: null, reason: "profiles folder is a symlink" };
93
+ realBase = realpathSync(base);
94
+ // an ancestor symlink (e.g. `.shipwright` -> elsewhere) must not relocate the folder
95
+ const anchor = source === "project" ? projectPath : home;
96
+ if (!contained(realpathSync(anchor), realBase)) {
97
+ return { profile: null, reason: "profiles folder resolves outside its allowed location" };
98
+ }
99
+ real = realpathSync(file);
100
+ }
101
+ catch {
102
+ return { profile: null, reason: "profile file unreadable" };
103
+ }
104
+ if (!contained(realBase, real))
105
+ return { profile: null, reason: "profile file is outside the profiles folder" };
106
+ let raw;
107
+ try {
108
+ // one descriptor for the type check AND the read - no check-then-act window
109
+ const fd = openSync(real, "r");
110
+ try {
111
+ if (!fstatSync(fd).isFile())
112
+ return { profile: null, reason: "profile is not a regular file" };
113
+ raw = JSON.parse(readFileSync(fd, "utf-8"));
114
+ }
115
+ finally {
116
+ closeSync(fd);
117
+ }
118
+ }
119
+ catch {
120
+ return { profile: null, reason: "profile file is not readable JSON" };
121
+ }
122
+ const profile = allowlisted(raw);
123
+ if (!profile)
124
+ return { profile: null, reason: "profile has no usable dev_server" };
125
+ const command = profile.dev_server?.command ?? "";
126
+ const refusal = source === "project" ? projectCommandRefusal(command) : userCommandRefusal(command, projectPath);
127
+ if (refusal)
128
+ return { profile: null, reason: refusal };
129
+ return { profile };
130
+ }
131
+ async function lookup(name, projectPath) {
132
+ const bundled = () => ({ profile: deps.bundled(name) });
133
+ if (!isProfileNameShape(name))
134
+ return { value: bundled(), ttl: POSITIVE_TTL_MS };
135
+ // (The resolver keys a profile on its FILE NAME - a file whose "name" differs is
136
+ // invalid - so probing `<name>.json` is exactly its lookup, not a second opinion.)
137
+ // Fast path: with no `<name>.json` in either custom folder nothing can shadow the
138
+ // bundled profile, so a resolver process (uv start-up, on a hot endpoint) is
139
+ // pointless - skip it. This only decides WHETHER to ask the resolver; which file a
140
+ // name means is still always the resolver's answer.
141
+ const candidates = [path.join(userProfilesDir({ homeDir: home }), `${name}.json`)];
142
+ if (projectPath)
143
+ candidates.push(path.join(projectPath, ".shipwright", "profiles", `${name}.json`));
144
+ if (!candidates.some((c) => existsSync(c)))
145
+ return { value: bundled(), ttl: POSITIVE_TTL_MS };
146
+ const out = await slot(() => validate({ name, projectRoot: projectPath || undefined }, deps.stack));
147
+ // Resolver unavailable / newer contract / crash => behave exactly as before.
148
+ if (out.status !== "ok")
149
+ return { value: bundled(), ttl: NEGATIVE_TTL_MS };
150
+ const report = out.report;
151
+ if (!report.valid)
152
+ return { value: { profile: null, reason: "the resolver reports this profile as invalid" }, ttl: NEGATIVE_TTL_MS };
153
+ if (!("source" in report) || typeof report.path !== "string")
154
+ return { value: { profile: null, reason: "unexpected resolver answer" }, ttl: NEGATIVE_TTL_MS };
155
+ if (report.source === "bundled")
156
+ return { value: bundled(), ttl: POSITIVE_TTL_MS };
157
+ if (report.source !== "project" && report.source !== "user")
158
+ return { value: { profile: null, reason: `unsupported profile source “${report.source}”` }, ttl: NEGATIVE_TTL_MS };
159
+ if (report.source === "project" && !projectPath)
160
+ return { value: { profile: null, reason: "no project path" }, ttl: NEGATIVE_TTL_MS };
161
+ const value = readCustom(report.source, report.path, projectPath);
162
+ return { value, file: report.path, ttl: value.profile ? POSITIVE_TTL_MS : NEGATIVE_TTL_MS };
163
+ }
164
+ function stillFresh(entry) {
165
+ if (now() - entry.at > entry.ttl)
166
+ return false;
167
+ if (!entry.file)
168
+ return true;
169
+ try {
170
+ return lstatSync(entry.file).mtimeMs === entry.mtimeMs;
171
+ }
172
+ catch {
173
+ return false; // deleted => re-resolve
174
+ }
175
+ }
176
+ return {
177
+ /** `fresh` bypasses the cache (spawn re-resolves right before it runs). Never throws. */
178
+ async resolve(name, projectPath, opts = {}) {
179
+ const key = `${projectPath}\0${name}`;
180
+ const hit = cache.get(key);
181
+ if (!opts.fresh && hit && stillFresh(hit))
182
+ return hit.value;
183
+ const started = now();
184
+ const pending = inFlight.get(key);
185
+ if (!opts.fresh && pending)
186
+ return pending;
187
+ let p;
188
+ p = (async () => {
189
+ try {
190
+ const r = await lookup(name, projectPath);
191
+ let mtimeMs;
192
+ if (r.file) {
193
+ try {
194
+ mtimeMs = lstatSync(r.file).mtimeMs;
195
+ }
196
+ catch {
197
+ mtimeMs = undefined;
198
+ }
199
+ }
200
+ const newer = cache.get(key);
201
+ if (!newer || newer.at <= started)
202
+ cache.set(key, { at: now(), ttl: r.ttl, file: r.file, mtimeMs, value: r.value });
203
+ return r.value;
204
+ }
205
+ catch (err) {
206
+ const value = { profile: null, reason: err instanceof Error ? err.message.slice(0, 200) : "lookup failed" };
207
+ // an overloaded resolver is transient - do not hide Preview for a whole TTL
208
+ if (!(err instanceof Error && err.message === BUSY))
209
+ cache.set(key, { at: now(), ttl: NEGATIVE_TTL_MS, value });
210
+ return value;
211
+ }
212
+ finally {
213
+ if (inFlight.get(key) === p)
214
+ inFlight.delete(key);
215
+ }
216
+ })();
217
+ inFlight.set(key, p);
218
+ return p;
219
+ },
220
+ clear() {
221
+ cache.clear();
222
+ },
223
+ };
224
+ }
225
+ //# sourceMappingURL=custom-profile-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-profile-loader.js","sourceRoot":"","sources":["../../src/core/custom-profile-loader.ts"],"names":[],"mappings":"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"}
@@ -59,15 +59,20 @@ export declare function buildReadyUrl(port: number, readyPath: string): URL | nu
59
59
  * tree-kills the healthy dev server and misreports preview_timeout.
60
60
  */
61
61
  export declare function isValidPort(port: unknown): port is number;
62
+ export declare function resolvePreviewHost(host: unknown): string;
62
63
  /**
63
64
  * Build the RETURNED preview URL (the one handed to window.open in the
64
65
  * browser). Mirrors buildReadyUrl's host-pinning (F10): a malicious profile
65
66
  * ready_path like "@evil.com/" — or an absolute "http://evil.com/" — must not
66
67
  * smuggle a new authority into the string. We resolve the path through the URL
67
- * constructor against a localhost origin and reject any host drift, preserving
68
+ * constructor against a pinned origin and reject any host drift, preserving
68
69
  * the historical host-only shape for a root path.
70
+ *
71
+ * The origin host is the profile's `dev_server.host` when it is one of
72
+ * PREVIEW_HOSTS (a companion that checks the Host header accepts only the host
73
+ * it bound, e.g. 127.0.0.1), otherwise `localhost`.
69
74
  */
70
- export declare function buildPreviewUrl(port: number, readyPath: string): string;
75
+ export declare function buildPreviewUrl(port: number, readyPath: string, host?: string): string;
71
76
  export declare function defaultProbeReady(args: {
72
77
  port: number;
73
78
  readyPath: string;
@@ -1 +1 @@
1
- {"version":3,"file":"preview-child-lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/preview-child-lifecycle.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKxD,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,cAAc,EACrB,QAAQ,SAAqB,GAC5B,YAAY,CAiBd;AAED,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,0DAA0D;IAC1D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IACtE,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;CAC9B;AAED,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;CACjD;AAUD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,aAAa,EACpB,MAAM,GAAE,MAAM,CAAC,OAAmB,EAClC,IAAI,GAAE,YAAiB,GACtB,IAAI,CAqCN;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC;CACtE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,aAAa,EACpB,SAAS,SAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAgBf;AAID,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcrE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAczE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAOzD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAcvE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG,OAAO,CAAC,OAAO,CAAC,CAWnB"}
1
+ {"version":3,"file":"preview-child-lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/preview-child-lifecycle.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKxD,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,cAAc,EACrB,QAAQ,SAAqB,GAC5B,YAAY,CAiBd;AAED,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,0DAA0D;IAC1D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IACtE,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;CAC9B;AAED,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;CACjD;AAUD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,aAAa,EACpB,MAAM,GAAE,MAAM,CAAC,OAAmB,EAClC,IAAI,GAAE,YAAiB,GACtB,IAAI,CAqCN;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC;CACtE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,aAAa,EACpB,SAAS,SAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAgBf;AAID,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcrE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAczE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAOzD;AAKD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAIxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAeR;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG,OAAO,CAAC,OAAO,CAAC,CAWnB"}
@@ -180,23 +180,35 @@ export function isValidPort(port) {
180
180
  port > 0 &&
181
181
  port <= 65535);
182
182
  }
183
+ /** Hosts a profile's dev_server.host may name. Anything else falls back to localhost. */
184
+ const PREVIEW_HOSTS = ["localhost", "127.0.0.1"];
185
+ export function resolvePreviewHost(host) {
186
+ return typeof host === "string" && PREVIEW_HOSTS.includes(host)
187
+ ? host
188
+ : "localhost";
189
+ }
183
190
  /**
184
191
  * Build the RETURNED preview URL (the one handed to window.open in the
185
192
  * browser). Mirrors buildReadyUrl's host-pinning (F10): a malicious profile
186
193
  * ready_path like "@evil.com/" — or an absolute "http://evil.com/" — must not
187
194
  * smuggle a new authority into the string. We resolve the path through the URL
188
- * constructor against a localhost origin and reject any host drift, preserving
195
+ * constructor against a pinned origin and reject any host drift, preserving
189
196
  * the historical host-only shape for a root path.
197
+ *
198
+ * The origin host is the profile's `dev_server.host` when it is one of
199
+ * PREVIEW_HOSTS (a companion that checks the Host header accepts only the host
200
+ * it bound, e.g. 127.0.0.1), otherwise `localhost`.
190
201
  */
191
- export function buildPreviewUrl(port, readyPath) {
192
- const origin = `http://localhost:${port}`;
202
+ export function buildPreviewUrl(port, readyPath, host) {
203
+ const pinned = resolvePreviewHost(host);
204
+ const origin = `http://${pinned}:${port}`;
193
205
  try {
194
206
  const clean = readyPath.replace(/^[/@]+/, "/").trim() || "/";
195
207
  const url = new URL(clean, `${origin}/`);
196
208
  // Reject any host OR scheme drift: an absolute "http://evil.com/", a
197
209
  // "//"/"\\" authority smuggle, or a "javascript:"/"data:" scheme all
198
- // resolve away from the pinned http://localhost origin.
199
- if (url.protocol !== "http:" || url.hostname !== "localhost")
210
+ // resolve away from the pinned origin.
211
+ if (url.protocol !== "http:" || url.hostname !== pinned)
200
212
  return origin;
201
213
  if (url.pathname === "/" && !url.search && !url.hash)
202
214
  return origin;
@@ -1 +1 @@
1
- {"version":3,"file":"preview-child-lifecycle.js","sourceRoot":"","sources":["../../src/core/preview-child-lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview-child-lifecycle.js","sourceRoot":"","sources":["../../src/core/preview-child-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface PreviewProfile {
6
6
  port?: number;
7
7
  ready_path?: string;
8
8
  ready_timeout_seconds?: number;
9
+ host?: string;
9
10
  };
10
11
  }
11
12
  export interface PreviewSpawnOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"preview-session-manager.d.ts","sourceRoot":"","sources":["../../src/core/preview-session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview-session-manager.d.ts","sourceRoot":"","sources":["../../src/core/preview-session-manager.ts"],"names":[],"mappings":"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"}
@@ -77,7 +77,7 @@ function hashProfile(p) {
77
77
  cmd: p.dev_server?.command ?? "",
78
78
  port: p.dev_server?.port ?? 0,
79
79
  ready: p.dev_server?.ready_path ?? "/",
80
- timeout: p.dev_server?.ready_timeout_seconds ?? 60,
80
+ timeout: p.dev_server?.ready_timeout_seconds ?? 60, host: p.dev_server?.host ?? "",
81
81
  });
82
82
  return createHash("sha1").update(payload).digest("hex").slice(0, 12);
83
83
  }
@@ -273,7 +273,7 @@ export class PreviewSessionManager {
273
273
  const entry = {
274
274
  projectId,
275
275
  pid: child.pid ?? -1,
276
- url: buildPreviewUrl(port, readyPath),
276
+ url: buildPreviewUrl(port, readyPath, profile.dev_server?.host),
277
277
  sessionId: randomUUID(),
278
278
  startedAt: now(),
279
279
  profileHash,