@ebrindley/build 0.0.0-stage → 1.42.1-rc28

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 (878) hide show
  1. package/.build-project/providers/catalog.json +13951 -0
  2. package/.build-project/providers/pricing.json +1978 -0
  3. package/.build-project/providers/registry.json +4103 -0
  4. package/.github/SECURITY.md +75 -0
  5. package/.nvmrc +1 -0
  6. package/CHANGELOG.md +661 -0
  7. package/CODE_OF_CONDUCT.md +44 -0
  8. package/CONTRIBUTING.md +24 -0
  9. package/INSTALL.md +623 -0
  10. package/LICENSE +21 -0
  11. package/README.md +118 -2
  12. package/THIRD_PARTY_NOTICES.txt +26 -0
  13. package/dist/ai-judge-UE5UOYOO.js +191 -0
  14. package/dist/allowlist-grounding-KPLN6NC5.js +16 -0
  15. package/dist/allowlist-utils-MZZKKXRD.js +31 -0
  16. package/dist/apply-completion-mode-EM37UZHB.js +110 -0
  17. package/dist/artifact-migrator-WPACNSEP.js +276 -0
  18. package/dist/ask-2OZ4JFQR.js +176 -0
  19. package/dist/auth-6UKBTJUQ.js +185 -0
  20. package/dist/auth-H5KJL6HL.js +165 -0
  21. package/dist/auth-LVJRJDMU.js +12 -0
  22. package/dist/auth-NHZOCNRR.js +94 -0
  23. package/dist/auth-PBXHWXGW.js +95 -0
  24. package/dist/auth-T7Y5DCAH.js +91 -0
  25. package/dist/auth-TVVKCHQW.js +13 -0
  26. package/dist/auth-UHB2UCSS.js +97 -0
  27. package/dist/auth-VACA3VUL.js +98 -0
  28. package/dist/auth-VVLC77S3.js +44 -0
  29. package/dist/auth-liveness-XO4AGDDD.js +53 -0
  30. package/dist/autoloop-cleanup-SI3VGAAR.js +106 -0
  31. package/dist/autoloop-evidence-gates-J5GG5YQB.js +39 -0
  32. package/dist/autoloop-gate-policy-SUNAEP6Q.js +169 -0
  33. package/dist/autoloop-helpers-VQGQNTT6.js +52 -0
  34. package/dist/autoloop-ledger-P6TIDP7C.js +96 -0
  35. package/dist/autoloop-ledger-subscriber-HFAGOZXH.js +161 -0
  36. package/dist/autoloop-run-defaults-GWGZBNT7.js +27 -0
  37. package/dist/autoloop-run-lock-GBWRM5A2.js +197 -0
  38. package/dist/autoloop-success-C32QVWOP.js +93 -0
  39. package/dist/autoloop-termination-summary-GI6IBQWD.js +58 -0
  40. package/dist/autoloop-trajectory-AMKSQISD.js +70 -0
  41. package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
  42. package/dist/automatic-branch-cleanup-R62X2C5O.js +49 -0
  43. package/dist/autonomous-loop-controller-2WL363LW.js +4386 -0
  44. package/dist/backend-YUTFDZXZ.js +30 -0
  45. package/dist/background-executor-Z3ODTMD7.js +260 -0
  46. package/dist/backlog-75QPEAMW.js +403 -0
  47. package/dist/backlog-execution-intent-GWUV5TUK.js +19 -0
  48. package/dist/backup-active-store-XHWLN34M.js +16 -0
  49. package/dist/backup-machine-stores-UI4LTJOY.js +251 -0
  50. package/dist/backup-telemetry-db-Z4ICYCNW.js +26 -0
  51. package/dist/branch-archive-manager-FMSQ7YJF.js +18 -0
  52. package/dist/branch-cleanup-manager-ST6FJGND.js +35 -0
  53. package/dist/build-gate-7NKWPY62.js +68 -0
  54. package/dist/build-root-S7DINODY.js +18 -0
  55. package/dist/change-summary-R6CB6VXJ.js +50 -0
  56. package/dist/chunk-24MNKKOM.js +173 -0
  57. package/dist/chunk-2H6VZFIO.js +235 -0
  58. package/dist/chunk-2JIX3EKV.js +39 -0
  59. package/dist/chunk-2KO7HVZM.js +106 -0
  60. package/dist/chunk-2L36U25O.js +100 -0
  61. package/dist/chunk-2NMNFUQA.js +475 -0
  62. package/dist/chunk-2OUAEH67.js +83 -0
  63. package/dist/chunk-2VLJUXJU.js +115 -0
  64. package/dist/chunk-2VUEDIUM.js +77 -0
  65. package/dist/chunk-2Y2IIHPI.js +430 -0
  66. package/dist/chunk-2YRG3LHZ.js +220 -0
  67. package/dist/chunk-2Z5Q3SUY.js +65 -0
  68. package/dist/chunk-32IYXIE5.js +873 -0
  69. package/dist/chunk-33IGPPUI.js +292 -0
  70. package/dist/chunk-352PCJLK.js +283 -0
  71. package/dist/chunk-35J4NE6S.js +226 -0
  72. package/dist/chunk-3C7WBIVK.js +1016 -0
  73. package/dist/chunk-3H3EY6U7.js +1225 -0
  74. package/dist/chunk-3H4MWYIC.js +198 -0
  75. package/dist/chunk-3HHWQR3N.js +2479 -0
  76. package/dist/chunk-3JKNRYEE.js +14 -0
  77. package/dist/chunk-3LECCYZY.js +128 -0
  78. package/dist/chunk-3LOY6YZI.js +852 -0
  79. package/dist/chunk-3M57DADF.js +44 -0
  80. package/dist/chunk-3NOTLVLG.js +3803 -0
  81. package/dist/chunk-3OPP2OZB.js +1480 -0
  82. package/dist/chunk-3P5IN5E7.js +9 -0
  83. package/dist/chunk-3PL22IYZ.js +20 -0
  84. package/dist/chunk-3REDAJUJ.js +14 -0
  85. package/dist/chunk-3S2R4XJI.js +203 -0
  86. package/dist/chunk-3UBZI5DW.js +61 -0
  87. package/dist/chunk-3VV5OBGG.js +308 -0
  88. package/dist/chunk-3WY5TU2O.js +823 -0
  89. package/dist/chunk-43OKHTW4.js +82 -0
  90. package/dist/chunk-45KUJBDI.js +112 -0
  91. package/dist/chunk-47X5LM7B.js +224 -0
  92. package/dist/chunk-4B6FQJ77.js +268 -0
  93. package/dist/chunk-4BTDUT2S.js +42 -0
  94. package/dist/chunk-4DJL2VXA.js +24 -0
  95. package/dist/chunk-4EBSXZ73.js +48 -0
  96. package/dist/chunk-4QKP6I4C.js +294 -0
  97. package/dist/chunk-4U6XK2DG.js +300 -0
  98. package/dist/chunk-4UMRUFBD.js +132 -0
  99. package/dist/chunk-4US4SYJ4.js +569 -0
  100. package/dist/chunk-4ZPLWEZO.js +154 -0
  101. package/dist/chunk-56WPYDJH.js +624 -0
  102. package/dist/chunk-57WRCJJW.js +50 -0
  103. package/dist/chunk-5AW4RMNG.js +24 -0
  104. package/dist/chunk-5EQN56OZ.js +155 -0
  105. package/dist/chunk-5F43TUIN.js +38 -0
  106. package/dist/chunk-5FKHIKTS.js +115 -0
  107. package/dist/chunk-5HDP7XZG.js +91 -0
  108. package/dist/chunk-5KQETTNS.js +152 -0
  109. package/dist/chunk-5PDVN2KO.js +498 -0
  110. package/dist/chunk-5UBIFVRD.js +509 -0
  111. package/dist/chunk-5YDE3Q62.js +46 -0
  112. package/dist/chunk-626AJVMU.js +302 -0
  113. package/dist/chunk-633XZ7UF.js +3583 -0
  114. package/dist/chunk-63DHNHGA.js +236 -0
  115. package/dist/chunk-666656AR.js +568 -0
  116. package/dist/chunk-67YRJPJO.js +19 -0
  117. package/dist/chunk-6CAU7VBA.js +20 -0
  118. package/dist/chunk-6CB3KJRY.js +21 -0
  119. package/dist/chunk-6DBMALXL.js +29 -0
  120. package/dist/chunk-6E25C4IA.js +269 -0
  121. package/dist/chunk-6FIBNIQU.js +73 -0
  122. package/dist/chunk-6G57FYBV.js +189 -0
  123. package/dist/chunk-6KZKRTG3.js +4885 -0
  124. package/dist/chunk-6LAH2UV2.js +525 -0
  125. package/dist/chunk-6PZY2TTU.js +921 -0
  126. package/dist/chunk-6T6NHXK4.js +230 -0
  127. package/dist/chunk-6TBEX4R4.js +432 -0
  128. package/dist/chunk-6TRD7TEE.js +911 -0
  129. package/dist/chunk-6XCP2RAI.js +47 -0
  130. package/dist/chunk-726G6WDL.js +351 -0
  131. package/dist/chunk-75EMT7BF.js +616 -0
  132. package/dist/chunk-762ACDZJ.js +4696 -0
  133. package/dist/chunk-77I6G4CO.js +1 -0
  134. package/dist/chunk-7DJ6SQH3.js +510 -0
  135. package/dist/chunk-7HPCIOMA.js +1383 -0
  136. package/dist/chunk-7HYBSRPZ.js +17503 -0
  137. package/dist/chunk-7KBEOPVB.js +73 -0
  138. package/dist/chunk-7LHJDJB3.js +2222 -0
  139. package/dist/chunk-7NVJMH52.js +306 -0
  140. package/dist/chunk-7RMARDVH.js +33 -0
  141. package/dist/chunk-7SEWU4QG.js +36 -0
  142. package/dist/chunk-7TUTZTI2.js +911 -0
  143. package/dist/chunk-7VBDFPUM.js +340 -0
  144. package/dist/chunk-7VRJHTGZ.js +6406 -0
  145. package/dist/chunk-7YAOUUKK.js +493 -0
  146. package/dist/chunk-AAAODV76.js +860 -0
  147. package/dist/chunk-AB4HUJVQ.js +339 -0
  148. package/dist/chunk-AEQWV746.js +611 -0
  149. package/dist/chunk-AHU3FKPA.js +11639 -0
  150. package/dist/chunk-AISTV5XU.js +226 -0
  151. package/dist/chunk-AJBTKGJZ.js +48 -0
  152. package/dist/chunk-AJJNW7XT.js +248 -0
  153. package/dist/chunk-AJN5Y5YZ.js +160 -0
  154. package/dist/chunk-ALDTFNZ3.js +150 -0
  155. package/dist/chunk-ARARVIZK.js +281 -0
  156. package/dist/chunk-ATBM6AW5.js +53 -0
  157. package/dist/chunk-ATKEKM3E.js +206 -0
  158. package/dist/chunk-AUJLW6JZ.js +92 -0
  159. package/dist/chunk-AY3MHEFM.js +24 -0
  160. package/dist/chunk-B7PYTV72.js +236 -0
  161. package/dist/chunk-B7YRSULE.js +1423 -0
  162. package/dist/chunk-BAWJNMWF.js +339 -0
  163. package/dist/chunk-BBPIILO2.js +88 -0
  164. package/dist/chunk-BD3PGW6A.js +957 -0
  165. package/dist/chunk-BDPYFAB4.js +44 -0
  166. package/dist/chunk-BIUV23HH.js +729 -0
  167. package/dist/chunk-BQ3VAGXH.js +243 -0
  168. package/dist/chunk-BQJOGAWT.js +31 -0
  169. package/dist/chunk-BT7EG7CO.js +68 -0
  170. package/dist/chunk-BV3XQQLU.js +27 -0
  171. package/dist/chunk-BY6ODHNZ.js +78 -0
  172. package/dist/chunk-BZRLSZNV.js +79 -0
  173. package/dist/chunk-C3DH3NCY.js +2773 -0
  174. package/dist/chunk-C3KCMAJP.js +756 -0
  175. package/dist/chunk-C7AGUJ5K.js +267 -0
  176. package/dist/chunk-CBSWKQCX.js +342 -0
  177. package/dist/chunk-CE5OZBYY.js +21 -0
  178. package/dist/chunk-CFCVYHSW.js +373 -0
  179. package/dist/chunk-CHA2HDE5.js +126 -0
  180. package/dist/chunk-CIHWPGS5.js +146 -0
  181. package/dist/chunk-CJBSZX3F.js +127 -0
  182. package/dist/chunk-CLA6QIJM.js +43 -0
  183. package/dist/chunk-CPSVQR2I.js +365 -0
  184. package/dist/chunk-CRPRVNQ4.js +254 -0
  185. package/dist/chunk-CSIE4Y7C.js +1093 -0
  186. package/dist/chunk-CSOPSYDY.js +142 -0
  187. package/dist/chunk-CSXLLEGB.js +205 -0
  188. package/dist/chunk-CTDLERWU.js +293 -0
  189. package/dist/chunk-CULBXMSK.js +110 -0
  190. package/dist/chunk-D2M2Y5ID.js +21 -0
  191. package/dist/chunk-D37WY7SH.js +1060 -0
  192. package/dist/chunk-D4VJFCGZ.js +89 -0
  193. package/dist/chunk-D6WTZMZB.js +48 -0
  194. package/dist/chunk-DBHOWDUH.js +976 -0
  195. package/dist/chunk-DCACX7BV.js +19364 -0
  196. package/dist/chunk-DFHX4XYA.js +128 -0
  197. package/dist/chunk-DIKBRRKE.js +176 -0
  198. package/dist/chunk-DJG5RIOR.js +9 -0
  199. package/dist/chunk-DNIOIISW.js +616 -0
  200. package/dist/chunk-DOA5G7IA.js +315 -0
  201. package/dist/chunk-DP7FKP6W.js +855 -0
  202. package/dist/chunk-DS2JZ677.js +79 -0
  203. package/dist/chunk-DSRLVYBS.js +82 -0
  204. package/dist/chunk-EAEVKNJA.js +209 -0
  205. package/dist/chunk-EEUESN3T.js +575 -0
  206. package/dist/chunk-EJ4LUU5Y.js +73 -0
  207. package/dist/chunk-EJIWTPSZ.js +1063 -0
  208. package/dist/chunk-EJVCDTAN.js +116 -0
  209. package/dist/chunk-EKLUBDBQ.js +627 -0
  210. package/dist/chunk-EN62WLFD.js +849 -0
  211. package/dist/chunk-ENYRCL43.js +26 -0
  212. package/dist/chunk-EP22ZMFO.js +273 -0
  213. package/dist/chunk-EP4SVAVI.js +87 -0
  214. package/dist/chunk-EPAMVGI3.js +1562 -0
  215. package/dist/chunk-EPRMH6HO.js +24 -0
  216. package/dist/chunk-ES6NWJ36.js +4057 -0
  217. package/dist/chunk-ETA2K4KI.js +30 -0
  218. package/dist/chunk-ETAD4NKD.js +31 -0
  219. package/dist/chunk-EUWIIDQ7.js +93 -0
  220. package/dist/chunk-EVE3OD2W.js +141 -0
  221. package/dist/chunk-EXA26FFC.js +459 -0
  222. package/dist/chunk-EXSPAA35.js +244 -0
  223. package/dist/chunk-F55YABKV.js +258 -0
  224. package/dist/chunk-F5DNGU5W.js +27 -0
  225. package/dist/chunk-F622MJYV.js +103 -0
  226. package/dist/chunk-F6NIQD74.js +5111 -0
  227. package/dist/chunk-FAWJTC34.js +43 -0
  228. package/dist/chunk-FAZBRHGG.js +47 -0
  229. package/dist/chunk-FIEUSGNJ.js +39 -0
  230. package/dist/chunk-FKCG7K6H.js +1146 -0
  231. package/dist/chunk-FOVVXV45.js +229 -0
  232. package/dist/chunk-FRBPKBFE.js +30 -0
  233. package/dist/chunk-FSA5BPFI.js +268 -0
  234. package/dist/chunk-FSJ5TTZ3.js +29 -0
  235. package/dist/chunk-FT7SGLXT.js +193 -0
  236. package/dist/chunk-FUUVZZUB.js +62 -0
  237. package/dist/chunk-FYMRVUNZ.js +1697 -0
  238. package/dist/chunk-FYTAA5FG.js +162 -0
  239. package/dist/chunk-G3VB2UCZ.js +3892 -0
  240. package/dist/chunk-G6OIMVXH.js +405 -0
  241. package/dist/chunk-G7PQCXVH.js +228 -0
  242. package/dist/chunk-GAB6UW52.js +1087 -0
  243. package/dist/chunk-GAFJEYLK.js +29 -0
  244. package/dist/chunk-GC4CRMTS.js +642 -0
  245. package/dist/chunk-GFHSIWHL.js +5297 -0
  246. package/dist/chunk-GI5M67YA.js +735 -0
  247. package/dist/chunk-GIJWHUWF.js +191 -0
  248. package/dist/chunk-GO6DRECI.js +1 -0
  249. package/dist/chunk-GOFVBTMN.js +314 -0
  250. package/dist/chunk-GQIP72ZJ.js +13 -0
  251. package/dist/chunk-GQXLXRFA.js +28 -0
  252. package/dist/chunk-GT6HFKJB.js +48 -0
  253. package/dist/chunk-GVJGSSKM.js +174 -0
  254. package/dist/chunk-GWHGTG37.js +36 -0
  255. package/dist/chunk-GZAJHLKO.js +18 -0
  256. package/dist/chunk-GZK62I3N.js +314 -0
  257. package/dist/chunk-H3HGMISG.js +483 -0
  258. package/dist/chunk-H3ISZJMJ.js +403 -0
  259. package/dist/chunk-H4HXVWEC.js +9 -0
  260. package/dist/chunk-H6MJGKAW.js +120 -0
  261. package/dist/chunk-HBTTGVR5.js +353 -0
  262. package/dist/chunk-HBZ322WZ.js +35 -0
  263. package/dist/chunk-HEP3ILP4.js +34 -0
  264. package/dist/chunk-HGFXODKO.js +106 -0
  265. package/dist/chunk-HHWDTB6S.js +59 -0
  266. package/dist/chunk-HKO45NLZ.js +286 -0
  267. package/dist/chunk-HLVTEA6A.js +89 -0
  268. package/dist/chunk-HS3SY6HN.js +160 -0
  269. package/dist/chunk-HT5OCGKN.js +899 -0
  270. package/dist/chunk-HXIIEMGF.js +78 -0
  271. package/dist/chunk-I56TH7VM.js +46 -0
  272. package/dist/chunk-I6FN3R5D.js +352 -0
  273. package/dist/chunk-I7SCBHJN.js +655 -0
  274. package/dist/chunk-IJM4GKAT.js +529 -0
  275. package/dist/chunk-IMEYU36R.js +344 -0
  276. package/dist/chunk-INJ3SS6A.js +936 -0
  277. package/dist/chunk-IUKOPCCE.js +441 -0
  278. package/dist/chunk-IVEPZQJO.js +33 -0
  279. package/dist/chunk-IVZEONFC.js +43 -0
  280. package/dist/chunk-IWBHRSG7.js +936 -0
  281. package/dist/chunk-IYY3HQAD.js +484 -0
  282. package/dist/chunk-J2ICMYDA.js +48 -0
  283. package/dist/chunk-J2QCFLUN.js +505 -0
  284. package/dist/chunk-J5HM6V5P.js +1039 -0
  285. package/dist/chunk-J6NZX6QH.js +398 -0
  286. package/dist/chunk-JBBB2Y47.js +432 -0
  287. package/dist/chunk-JDCZQZU7.js +42 -0
  288. package/dist/chunk-JEDNXGSS.js +169 -0
  289. package/dist/chunk-JHP7OT6K.js +89 -0
  290. package/dist/chunk-JLS65NUQ.js +14 -0
  291. package/dist/chunk-JNMWYMC6.js +38 -0
  292. package/dist/chunk-JNSTWNNW.js +25 -0
  293. package/dist/chunk-JOSK6GEU.js +9564 -0
  294. package/dist/chunk-JQUMSIGC.js +100 -0
  295. package/dist/chunk-JVHGMURQ.js +1106 -0
  296. package/dist/chunk-JYXS47FQ.js +951 -0
  297. package/dist/chunk-K2ZMW2Z5.js +2147 -0
  298. package/dist/chunk-K7FAFORM.js +14 -0
  299. package/dist/chunk-KBJXX3ON.js +333 -0
  300. package/dist/chunk-KHFKVQWY.js +486 -0
  301. package/dist/chunk-KHMEI3DQ.js +173 -0
  302. package/dist/chunk-KHW3UD7B.js +69 -0
  303. package/dist/chunk-KKQKWAMF.js +365 -0
  304. package/dist/chunk-KOKXJV2U.js +455 -0
  305. package/dist/chunk-KQ4NGOJI.js +14 -0
  306. package/dist/chunk-KQYQOXMS.js +342 -0
  307. package/dist/chunk-KTMW65UX.js +14 -0
  308. package/dist/chunk-KUEWV2JH.js +593 -0
  309. package/dist/chunk-KXYDV3HP.js +1523 -0
  310. package/dist/chunk-KZ4JMGZ5.js +96 -0
  311. package/dist/chunk-KZWGBUIO.js +2659 -0
  312. package/dist/chunk-L2CBG5IX.js +1892 -0
  313. package/dist/chunk-L2S235CU.js +314 -0
  314. package/dist/chunk-L32WD57F.js +98 -0
  315. package/dist/chunk-LDJCKAJP.js +123 -0
  316. package/dist/chunk-LDWNBEN7.js +541 -0
  317. package/dist/chunk-LJVH57G2.js +241 -0
  318. package/dist/chunk-LPQ7NZEN.js +209 -0
  319. package/dist/chunk-LRGH3CCV.js +148 -0
  320. package/dist/chunk-LULOGMMM.js +1133 -0
  321. package/dist/chunk-LWGKN2GY.js +8284 -0
  322. package/dist/chunk-LX4F24ZH.js +157 -0
  323. package/dist/chunk-M4BUEXXF.js +839 -0
  324. package/dist/chunk-M6UHOC4I.js +553 -0
  325. package/dist/chunk-MCBNWZNO.js +657 -0
  326. package/dist/chunk-MEMSY6VY.js +223 -0
  327. package/dist/chunk-MHLEZQQI.js +145 -0
  328. package/dist/chunk-MJ6WNSIX.js +192 -0
  329. package/dist/chunk-MKASIKWZ.js +442 -0
  330. package/dist/chunk-MNOVBYFU.js +60 -0
  331. package/dist/chunk-MO2BYAAF.js +2896 -0
  332. package/dist/chunk-MP6P7Y2A.js +180 -0
  333. package/dist/chunk-MQ4TFJAG.js +3365 -0
  334. package/dist/chunk-MT2WAIR3.js +131 -0
  335. package/dist/chunk-MTU7VTNN.js +1122 -0
  336. package/dist/chunk-MULMXX4V.js +150 -0
  337. package/dist/chunk-MW2DWWVA.js +147 -0
  338. package/dist/chunk-MY3ZPUN4.js +151 -0
  339. package/dist/chunk-MYLH2S4G.js +64 -0
  340. package/dist/chunk-MZ5WYKNA.js +28 -0
  341. package/dist/chunk-N3Q2JNPV.js +249 -0
  342. package/dist/chunk-N5DX4JAK.js +12 -0
  343. package/dist/chunk-NAINGKHF.js +35 -0
  344. package/dist/chunk-NEQUQHOX.js +223 -0
  345. package/dist/chunk-NHNPEZS4.js +1408 -0
  346. package/dist/chunk-NHTIXJCR.js +17 -0
  347. package/dist/chunk-NKLPMBNV.js +1154 -0
  348. package/dist/chunk-NMVZ5YES.js +199 -0
  349. package/dist/chunk-NRFRY3GE.js +256 -0
  350. package/dist/chunk-NTD6CSI6.js +1266 -0
  351. package/dist/chunk-NUO7B3SH.js +318 -0
  352. package/dist/chunk-NVOHIJKG.js +1319 -0
  353. package/dist/chunk-NXH3RX7O.js +523 -0
  354. package/dist/chunk-NXZ3DURF.js +257 -0
  355. package/dist/chunk-O26L6F7F.js +209 -0
  356. package/dist/chunk-O5RRIUEP.js +124 -0
  357. package/dist/chunk-O5X6BKAO.js +10 -0
  358. package/dist/chunk-O6ZQUVTR.js +31 -0
  359. package/dist/chunk-O7FE75QZ.js +306 -0
  360. package/dist/chunk-OC7Z6AJQ.js +81 -0
  361. package/dist/chunk-OH7IEZ63.js +307 -0
  362. package/dist/chunk-OI734GRS.js +115 -0
  363. package/dist/chunk-OJBH62DK.js +684 -0
  364. package/dist/chunk-OKJLVSTJ.js +247 -0
  365. package/dist/chunk-OMX5VL43.js +79 -0
  366. package/dist/chunk-ONHAMBN6.js +12 -0
  367. package/dist/chunk-ONYPLIVE.js +753 -0
  368. package/dist/chunk-OSK7QWPD.js +637 -0
  369. package/dist/chunk-OTXLMJKP.js +438 -0
  370. package/dist/chunk-OV5PKQMA.js +213 -0
  371. package/dist/chunk-OXK5HA4B.js +31 -0
  372. package/dist/chunk-OYDWFQA4.js +272 -0
  373. package/dist/chunk-OZAUKWHB.js +22 -0
  374. package/dist/chunk-P5P2EKGH.js +94 -0
  375. package/dist/chunk-P6SSWAKY.js +29 -0
  376. package/dist/chunk-P7CQGPLS.js +30 -0
  377. package/dist/chunk-P7RVCHQV.js +197 -0
  378. package/dist/chunk-PEBWDYIW.js +726 -0
  379. package/dist/chunk-PFCXFO7A.js +9193 -0
  380. package/dist/chunk-PFLDWMX6.js +168 -0
  381. package/dist/chunk-PHZGLQSK.js +15883 -0
  382. package/dist/chunk-PNFTPNSR.js +20 -0
  383. package/dist/chunk-PPHXX4W7.js +175 -0
  384. package/dist/chunk-PPZESPJT.js +262 -0
  385. package/dist/chunk-PRDHI2L5.js +296 -0
  386. package/dist/chunk-PSTKWHHN.js +32 -0
  387. package/dist/chunk-PV53ODOT.js +555 -0
  388. package/dist/chunk-PVJBTI7P.js +24 -0
  389. package/dist/chunk-PXKERBKX.js +100 -0
  390. package/dist/chunk-PZ5AY32C.js +10 -0
  391. package/dist/chunk-Q3DHEZA5.js +85 -0
  392. package/dist/chunk-Q5RZDVQK.js +204 -0
  393. package/dist/chunk-Q64IR2Z2.js +4933 -0
  394. package/dist/chunk-Q6Z5UGPL.js +398 -0
  395. package/dist/chunk-QAMAV4DT.js +627 -0
  396. package/dist/chunk-QBWF4444.js +112 -0
  397. package/dist/chunk-QDKYT4CI.js +22805 -0
  398. package/dist/chunk-QFLBRWCJ.js +126 -0
  399. package/dist/chunk-QILAQACE.js +107 -0
  400. package/dist/chunk-QJ6OEH4K.js +3683 -0
  401. package/dist/chunk-QK3NLYTV.js +320 -0
  402. package/dist/chunk-QOFLUS24.js +535 -0
  403. package/dist/chunk-QOIASNEJ.js +98 -0
  404. package/dist/chunk-QP4UTSOV.js +3587 -0
  405. package/dist/chunk-QP5ST7RI.js +904 -0
  406. package/dist/chunk-QS5AGRZN.js +167 -0
  407. package/dist/chunk-QTAOU53N.js +107 -0
  408. package/dist/chunk-QTCLJHLZ.js +351 -0
  409. package/dist/chunk-QTOLTG4L.js +119 -0
  410. package/dist/chunk-QWDV4OSL.js +142 -0
  411. package/dist/chunk-QWMQ74KD.js +508 -0
  412. package/dist/chunk-QX6LOMMH.js +158 -0
  413. package/dist/chunk-QXBKIHY7.js +238 -0
  414. package/dist/chunk-QXBKTJT6.js +270 -0
  415. package/dist/chunk-QYQOVOLR.js +196 -0
  416. package/dist/chunk-R2CKS6WT.js +73 -0
  417. package/dist/chunk-R2TIYG7U.js +68 -0
  418. package/dist/chunk-R2W3LESH.js +465 -0
  419. package/dist/chunk-R5EXHMUN.js +100 -0
  420. package/dist/chunk-RBBTBCHX.js +289 -0
  421. package/dist/chunk-RBKLOUXA.js +121 -0
  422. package/dist/chunk-RCP2Y6DQ.js +86 -0
  423. package/dist/chunk-RCYEJSD5.js +260 -0
  424. package/dist/chunk-RFDVSI4N.js +134 -0
  425. package/dist/chunk-RGJU63FV.js +1717 -0
  426. package/dist/chunk-RI4EX2QE.js +18 -0
  427. package/dist/chunk-RIMARPCF.js +152 -0
  428. package/dist/chunk-RJ6RSNT6.js +42 -0
  429. package/dist/chunk-RNI2GUIF.js +131 -0
  430. package/dist/chunk-RPHUWJ3K.js +264 -0
  431. package/dist/chunk-RPIMAMV7.js +361 -0
  432. package/dist/chunk-RQFX6YRN.js +49 -0
  433. package/dist/chunk-RRC5BL7B.js +285 -0
  434. package/dist/chunk-RSYTSBOO.js +79 -0
  435. package/dist/chunk-RWQQIKIC.js +35 -0
  436. package/dist/chunk-RZUBOZH2.js +373 -0
  437. package/dist/chunk-S2E632FQ.js +380 -0
  438. package/dist/chunk-S2VQCZO4.js +22 -0
  439. package/dist/chunk-S2XIMQJQ.js +681 -0
  440. package/dist/chunk-S47ISY27.js +183 -0
  441. package/dist/chunk-S6I4KISU.js +142 -0
  442. package/dist/chunk-S6TAFQI5.js +2403 -0
  443. package/dist/chunk-SBBNT5ZJ.js +27 -0
  444. package/dist/chunk-SDJV2DTQ.js +491 -0
  445. package/dist/chunk-SDPIFNLD.js +33 -0
  446. package/dist/chunk-SF6YK3JI.js +835 -0
  447. package/dist/chunk-SK3ZFONO.js +976 -0
  448. package/dist/chunk-SKTFRFQ7.js +1775 -0
  449. package/dist/chunk-SNGM452K.js +2002 -0
  450. package/dist/chunk-STW7OFOA.js +581 -0
  451. package/dist/chunk-SU6UFUQY.js +1351 -0
  452. package/dist/chunk-SVJM3LJA.js +27 -0
  453. package/dist/chunk-SVUNZOPG.js +129 -0
  454. package/dist/chunk-T5XLUYV3.js +34 -0
  455. package/dist/chunk-T7E5JS6N.js +57 -0
  456. package/dist/chunk-TA3N5MMO.js +450 -0
  457. package/dist/chunk-TAJPCXSB.js +13 -0
  458. package/dist/chunk-TDEMDRN2.js +1639 -0
  459. package/dist/chunk-TDSEX5CF.js +24 -0
  460. package/dist/chunk-TGCVL74Y.js +28 -0
  461. package/dist/chunk-TGXXYDL4.js +1012 -0
  462. package/dist/chunk-TIKTYUJO.js +296 -0
  463. package/dist/chunk-TIZAJD4M.js +6029 -0
  464. package/dist/chunk-TLSEZZCG.js +5549 -0
  465. package/dist/chunk-TMBDRHAX.js +19 -0
  466. package/dist/chunk-TRURQUBP.js +1217 -0
  467. package/dist/chunk-TSQ256N5.js +152 -0
  468. package/dist/chunk-TUQMMFEQ.js +2244 -0
  469. package/dist/chunk-U424MJLC.js +81 -0
  470. package/dist/chunk-U4DRS6ZW.js +11 -0
  471. package/dist/chunk-U5KS22IN.js +204 -0
  472. package/dist/chunk-UAPHFJPN.js +673 -0
  473. package/dist/chunk-UB7LQITD.js +1040 -0
  474. package/dist/chunk-UBVRHGAZ.js +237 -0
  475. package/dist/chunk-UDNNAQN5.js +98 -0
  476. package/dist/chunk-UJP3XM54.js +342 -0
  477. package/dist/chunk-UJYDH2MW.js +305 -0
  478. package/dist/chunk-UKMPASIC.js +399 -0
  479. package/dist/chunk-UKUL3EHK.js +763 -0
  480. package/dist/chunk-UPHU64NB.js +1327 -0
  481. package/dist/chunk-URMSZXAD.js +43 -0
  482. package/dist/chunk-US3RT6CY.js +525 -0
  483. package/dist/chunk-UTDEOPKV.js +30 -0
  484. package/dist/chunk-UUUDKV7N.js +13 -0
  485. package/dist/chunk-UVKWU3SM.js +39 -0
  486. package/dist/chunk-V2TVPO3X.js +521 -0
  487. package/dist/chunk-V3KLVK7B.js +398 -0
  488. package/dist/chunk-V3YFFHDR.js +17 -0
  489. package/dist/chunk-VAG6GUBR.js +1162 -0
  490. package/dist/chunk-VBENAHDA.js +1814 -0
  491. package/dist/chunk-VBNCKCCI.js +16 -0
  492. package/dist/chunk-VCGSWN5M.js +1300 -0
  493. package/dist/chunk-VE2O2I7M.js +115 -0
  494. package/dist/chunk-VIFHYTI5.js +31 -0
  495. package/dist/chunk-VJER3FUS.js +5080 -0
  496. package/dist/chunk-VLMDM56Q.js +268 -0
  497. package/dist/chunk-VMFZEVVX.js +99 -0
  498. package/dist/chunk-VNDPQVUZ.js +1853 -0
  499. package/dist/chunk-VSPJRLGA.js +4783 -0
  500. package/dist/chunk-VSWC5ZXI.js +103 -0
  501. package/dist/chunk-VYI4DSZP.js +2017 -0
  502. package/dist/chunk-W4BAIQ6L.js +1212 -0
  503. package/dist/chunk-W7VQAL2K.js +2203 -0
  504. package/dist/chunk-WEI3ZDZH.js +33 -0
  505. package/dist/chunk-WEIUS5NT.js +26 -0
  506. package/dist/chunk-WEW7UFWE.js +546 -0
  507. package/dist/chunk-WGQAXLNA.js +384 -0
  508. package/dist/chunk-WJAL4JL3.js +206 -0
  509. package/dist/chunk-WKFOJ5ZG.js +141 -0
  510. package/dist/chunk-WMWQEFLN.js +2177 -0
  511. package/dist/chunk-WNECKKO2.js +154 -0
  512. package/dist/chunk-WPKLYOAM.js +195 -0
  513. package/dist/chunk-WSH37YQN.js +243 -0
  514. package/dist/chunk-WV3KQDPE.js +84 -0
  515. package/dist/chunk-WZFC4V4U.js +389 -0
  516. package/dist/chunk-XCOIBNET.js +13 -0
  517. package/dist/chunk-XDM65LBX.js +53 -0
  518. package/dist/chunk-XGU6PBO5.js +645 -0
  519. package/dist/chunk-XHOI4V62.js +43 -0
  520. package/dist/chunk-XIBVFMLQ.js +6858 -0
  521. package/dist/chunk-XJ2E7YEJ.js +117 -0
  522. package/dist/chunk-XON4ZCYX.js +69 -0
  523. package/dist/chunk-XQPEWJPI.js +127 -0
  524. package/dist/chunk-XSJTIFUY.js +31 -0
  525. package/dist/chunk-XT7OVWM3.js +64 -0
  526. package/dist/chunk-XTXYIISX.js +1104 -0
  527. package/dist/chunk-XV7NZL4B.js +57 -0
  528. package/dist/chunk-XWIZ6B5S.js +109 -0
  529. package/dist/chunk-XWLIKOBX.js +240 -0
  530. package/dist/chunk-XZOXEIN4.js +156 -0
  531. package/dist/chunk-XZRS7I7W.js +3673 -0
  532. package/dist/chunk-Y4ZDDHB6.js +44 -0
  533. package/dist/chunk-Y733RB7T.js +194 -0
  534. package/dist/chunk-YBHUB4XR.js +14931 -0
  535. package/dist/chunk-YKC75XK4.js +147 -0
  536. package/dist/chunk-YKMXFVK7.js +27 -0
  537. package/dist/chunk-YO5BAJ55.js +225 -0
  538. package/dist/chunk-YPDCLXNZ.js +568 -0
  539. package/dist/chunk-YSQPGVFK.js +116 -0
  540. package/dist/chunk-YTVVTIWJ.js +716 -0
  541. package/dist/chunk-YVCMDVBB.js +698 -0
  542. package/dist/chunk-YYTOA6DP.js +114 -0
  543. package/dist/chunk-Z5WGNULV.js +88 -0
  544. package/dist/chunk-Z6NGVVXG.js +66 -0
  545. package/dist/chunk-Z7CDQNH3.js +20 -0
  546. package/dist/chunk-ZH4G3FU5.js +187 -0
  547. package/dist/chunk-ZJB6SQPA.js +257 -0
  548. package/dist/chunk-ZL6E4HMY.js +42 -0
  549. package/dist/chunk-ZMLOC3DW.js +62 -0
  550. package/dist/chunk-ZORW64QH.js +101 -0
  551. package/dist/chunk-ZVVD2XGV.js +1369 -0
  552. package/dist/cli-utils-ER33ODC5.js +31 -0
  553. package/dist/cli-validation-6CHPTANV.js +146 -0
  554. package/dist/commit-utils-3STAY7C7.js +49 -0
  555. package/dist/compatibility-notice-IHNXR2JR.js +21 -0
  556. package/dist/compete-config-resolver-V3GDNJMM.js +125 -0
  557. package/dist/compete-results-XUM3PJHS.js +318 -0
  558. package/dist/competition-outcome-tracker-NWSMVUPG.js +62 -0
  559. package/dist/config-4HHE4OIK.js +238 -0
  560. package/dist/config-D6YAZASH.js +10 -0
  561. package/dist/config-MIPRDYYV.js +46 -0
  562. package/dist/config-audit-GA5DCUAI.js +371 -0
  563. package/dist/config-explain-4LMO556H.js +71 -0
  564. package/dist/config-loader-RGP634PC.js +51 -0
  565. package/dist/config-manager-J2UTO635.js +114 -0
  566. package/dist/config-merger-TVUJBZTS.js +14 -0
  567. package/dist/config-validator-H4ZVIE56.js +122 -0
  568. package/dist/cost-HSIV5U2Y.js +85 -0
  569. package/dist/data-migration-state-OAUL2WPQ.js +35 -0
  570. package/dist/db-migrator-NUOW5NKR.js +34 -0
  571. package/dist/default-paths-UILB62BN.js +49 -0
  572. package/dist/discovery-V6GYUJUC.js +53 -0
  573. package/dist/doctor-BBSMCDWE.js +271 -0
  574. package/dist/doctor-context-blocks-LPY75VZA.js +231 -0
  575. package/dist/doctor-instructions-import-JXHDDOE5.js +70 -0
  576. package/dist/doctor-purpose-6YJOXPBE.js +30 -0
  577. package/dist/domain-analyzer-S35ABUNA.js +48 -0
  578. package/dist/ensure-initialized-Q6PEU55O.js +78 -0
  579. package/dist/entry.js +922 -0
  580. package/dist/error-parser-core-MZFMFANN.js +70 -0
  581. package/dist/evaluation-context-GQBYDAEV.js +63 -0
  582. package/dist/evidence-plan-resolver-5FUAP3SA.js +111 -0
  583. package/dist/execution-data-writer-YCG5UH37.js +72 -0
  584. package/dist/execution-policy-applier-PWZM5LNA.js +63 -0
  585. package/dist/execution-preflight-DASJWWQF.js +223 -0
  586. package/dist/execution-roles-KNSNNB2D.js +112 -0
  587. package/dist/exit-code-error-QIY5DOKF.js +18 -0
  588. package/dist/external-temp-cleanup-CAW7LQ6R.js +360 -0
  589. package/dist/factory-YCYCB7AE.js +209 -0
  590. package/dist/file-utils-ZQYNBQBW.js +45 -0
  591. package/dist/flywheel-allowlist-revert-H22HA6JE.js +21 -0
  592. package/dist/flywheel-autoloop-executor-PDOASJEZ.js +316 -0
  593. package/dist/flywheel-autoloop-unverified-TOKYFCDC.js +36 -0
  594. package/dist/flywheel-competition-executor-YJUMMEJO.js +320 -0
  595. package/dist/flywheel-executor-JWU43KAY.js +437 -0
  596. package/dist/flywheel-git-isolation-FQ2TRWMB.js +56 -0
  597. package/dist/flywheel-manifest-HDPNMWWF.js +114 -0
  598. package/dist/flywheel-model-defaults-UHAKTZT3.js +110 -0
  599. package/dist/flywheel-preflight-III2C7TH.js +163 -0
  600. package/dist/flywheel-resume-2O45MS7Y.js +31 -0
  601. package/dist/flywheel-resume-execution-lease-P2BK257J.js +59 -0
  602. package/dist/flywheel-safety-AVAVFXIJ.js +19 -0
  603. package/dist/flywheel-scope-decision-ALJUUNGG.js +14 -0
  604. package/dist/get-telemetry-logger-MPDVO2JA.js +155 -0
  605. package/dist/git-message-style-KCXGMTDT.js +104 -0
  606. package/dist/guidance-profile-config-G3K5YQOO.js +113 -0
  607. package/dist/guidance-profile-renderer-TX4TNDFL.js +23 -0
  608. package/dist/identity-XLQJ4YJF.js +25 -0
  609. package/dist/index-query-6NUY4FKX.js +37 -0
  610. package/dist/index.js +85588 -0
  611. package/dist/indexer-DL54CM3K.js +44 -0
  612. package/dist/init-OUZ72344.js +245 -0
  613. package/dist/instructions-import-offer-NSYXSITC.js +363 -0
  614. package/dist/instructions-run-NBII7W36.js +114 -0
  615. package/dist/interrupted-work-E4TLKJLE.js +43 -0
  616. package/dist/invoke-provider-auth-NEWEIHCI.js +38 -0
  617. package/dist/judge-scoring.json +64 -0
  618. package/dist/lab-mode-YXQ2Y3NG.js +44 -0
  619. package/dist/lab-utils-5QAMDJR5.js +29 -0
  620. package/dist/linux-host-class-YDWQX65O.js +31 -0
  621. package/dist/llm-judge-executor-OJSNCTFJ.js +179 -0
  622. package/dist/local-ci-config-VZ4WWDT5.js +48 -0
  623. package/dist/local-executor-DCMDDRX2.js +280 -0
  624. package/dist/logger-5KNKS3O4.js +154 -0
  625. package/dist/matrix-prompt-builder-4ZBOGZSB.js +527 -0
  626. package/dist/matrix-result-parser-EZJM4YXP.js +14 -0
  627. package/dist/merge-batch-RTEEMVDB.js +313 -0
  628. package/dist/merge-batch-members-VIWGVRHP.js +24 -0
  629. package/dist/merge-queue-TIIUSOY6.js +126 -0
  630. package/dist/merge-queue-trust-DUNZ4J65.js +21 -0
  631. package/dist/metadata-UKSMWM6J.js +29 -0
  632. package/dist/model-catalog-readiness-R5KJBP5M.js +202 -0
  633. package/dist/model-invocations-db-XTUPPQ34.js +70 -0
  634. package/dist/model-resolver-JFZ2MHOJ.js +39 -0
  635. package/dist/model-resolver-SCQ57KAQ.js +217 -0
  636. package/dist/model-roles-D3OR4NAH.js +110 -0
  637. package/dist/monitor-F4SIU5G2.js +96 -0
  638. package/dist/nested-worktrees-2WUWQ75N.js +23 -0
  639. package/dist/next-S3IRLVER.js +96 -0
  640. package/dist/next-UKPFRXOO.js +148 -0
  641. package/dist/opportunistic-TL4S26VX.js +86 -0
  642. package/dist/optimization-config-resolver-NAEIYU6A.js +148 -0
  643. package/dist/package-HJR4QJT4.js +10 -0
  644. package/dist/parse-git-status-7PIYFPS2.js +21 -0
  645. package/dist/path-security-5WJSY56G.js +41 -0
  646. package/dist/paths-JUI7C4KU.js +45 -0
  647. package/dist/plan-backlog-list-fast-SSTQL5XP.js +89 -0
  648. package/dist/plan-backlog-show-fast-PFRAQ3JB.js +114 -0
  649. package/dist/plan-sprint-list-fast-HD2KBZSY.js +110 -0
  650. package/dist/plan-sprint-status-fast-YFYH7WQF.js +116 -0
  651. package/dist/plan-task-status-fast-JU5PNLUU.js +114 -0
  652. package/dist/plan-to-flywheel-PY5MSY2H.js +529 -0
  653. package/dist/preflight-PJHGTJNZ.js +12 -0
  654. package/dist/process-registry-B4ZUCN7T.js +28 -0
  655. package/dist/process-scanner-TU3QHWVB.js +23 -0
  656. package/dist/processes-6FHVGT72.js +28 -0
  657. package/dist/processes-json-fast-YWTMUWXB.js +72 -0
  658. package/dist/profile-HWTC56SG.js +209 -0
  659. package/dist/project-runtime-paths-2UQNG5Y4.js +41 -0
  660. package/dist/protected-branches-N36LDBFY.js +71 -0
  661. package/dist/provider-aware-resource-manager-YTFAHNGJ.js +40 -0
  662. package/dist/provider-matrix-2KO2V5OM.js +214 -0
  663. package/dist/provider-matrix-renderer-MEC3PER7.js +139 -0
  664. package/dist/provider-output-forwarding-2AHL7YMA.js +26 -0
  665. package/dist/provider-registry-WCZ65QHC.js +136 -0
  666. package/dist/provider-temp-cleanup-IUNPJCZF.js +14 -0
  667. package/dist/prune-engine-EOQVWEP6.js +448 -0
  668. package/dist/publication-turn-S42RZTQF.js +44 -0
  669. package/dist/quality-gate-JQMVCKOO.js +72 -0
  670. package/dist/quickstart-3O6FRCFB.js +105 -0
  671. package/dist/readiness-GW6ABRHB.js +139 -0
  672. package/dist/readiness-KFZCXDTT.js +215 -0
  673. package/dist/registry-7XG376SY.js +217 -0
  674. package/dist/repair-helpers-TTV5FEF4.js +117 -0
  675. package/dist/repo-root-YG6MQZDW.js +28 -0
  676. package/dist/resolution-engine-FFEK7HQ2.js +187 -0
  677. package/dist/resolve-provider-cli-ZEXVZKET.js +44 -0
  678. package/dist/restore-telemetry-db-E7BR5PO7.js +459 -0
  679. package/dist/routing-events-AW6SRZ6G.js +13 -0
  680. package/dist/routing-history-store-FMDDQL6W.js +39 -0
  681. package/dist/routing-planner-C6OHO3EY.js +221 -0
  682. package/dist/runner-KHDNQ5KU.js +1194 -0
  683. package/dist/runner-PIS2BW7Y.js +1801 -0
  684. package/dist/safety-E3JJVSFL.js +67 -0
  685. package/dist/safety-stanza-HE6GXP4G.js +49 -0
  686. package/dist/sandbox-7LBZC5PE.js +72 -0
  687. package/dist/sandbox-ASWCDYZL.js +80 -0
  688. package/dist/schema-extensions.sql +234 -0
  689. package/dist/security-JI22TBEB.js +17 -0
  690. package/dist/setup-bb-plugin-FQXLA76Y.js +531 -0
  691. package/dist/setup-claude-code-NF4ZSHVE.js +197 -0
  692. package/dist/setup-temp-cleanup-2APZ4HMA.js +29 -0
  693. package/dist/shared-utils-34HJZ6JX.js +40 -0
  694. package/dist/simple-artifact-goal-MQLDDMMX.js +29 -0
  695. package/dist/sprint-N7JFTEGL.js +403 -0
  696. package/dist/sprint-bridge-KJXIBNRJ.js +117 -0
  697. package/dist/sprint-completion-dependents-34SR7JVL.js +43 -0
  698. package/dist/sprint-execution-service-A6JPUBWY.js +376 -0
  699. package/dist/sprint-manager-MU2ZUWN2.js +140 -0
  700. package/dist/sqlite-timeout-config-U2CT4LKU.js +13 -0
  701. package/dist/sqlite-wrapper-FSGJ2QEW.js +19 -0
  702. package/dist/stale-cleanup-orchestrator-4X6324VF.js +71 -0
  703. package/dist/storage-access-I3V5LER7.js +31 -0
  704. package/dist/store-XVG64ZR2.js +25 -0
  705. package/dist/task-classifier-MN2DYE5R.js +558 -0
  706. package/dist/task-list-fast-7AT6LTTA.js +112 -0
  707. package/dist/task-manager-LHPBBRRE.js +136 -0
  708. package/dist/task-report-OLPAWBTK.js +64 -0
  709. package/dist/task-type-detector-6RG3YNZF.js +27 -0
  710. package/dist/task-type-resolver-EQHOUIHT.js +64 -0
  711. package/dist/telemetry-5VYSK772.js +212 -0
  712. package/dist/telemetry-health-tracker-4GFW2EMP.js +12 -0
  713. package/dist/telemetry-path-resolver-H3NFHHQY.js +34 -0
  714. package/dist/telemetry-reliability-URJDTNPZ.js +76 -0
  715. package/dist/transports-NREZQTJK.js +106 -0
  716. package/dist/unified-cost-tracker-5MTBJ2CL.js +59 -0
  717. package/dist/unified-state-cleanup-GGAXLHXF.js +292 -0
  718. package/dist/universal-cost-calculator-JTFEJVWK.js +70 -0
  719. package/dist/user-agents-QLIGPLP2.js +30 -0
  720. package/dist/variant-execution-I4ZZUAWY.js +319 -0
  721. package/dist/variant-opt-parser-JHCXKY2K.js +251 -0
  722. package/dist/variant-request-input-PL37N3AN.js +11 -0
  723. package/dist/variant-state-cleanup-KHMXRBZN.js +287 -0
  724. package/dist/variant-worker-COB5YTJX.js +4517 -0
  725. package/dist/variant-worker.js +26 -0
  726. package/dist/variants-XGDSXYG3.js +267 -0
  727. package/dist/verification-command-YSPU4VBH.js +66 -0
  728. package/dist/verify-command-timeout-DQUYH33Z.js +11 -0
  729. package/dist/verify-commands-LOHMOFKC.js +65 -0
  730. package/dist/warning-JSKSFKBT.js +13 -0
  731. package/dist/work-edge-K65NHVWY.js +50 -0
  732. package/dist/work-item-writer-KY5ZWZWW.js +30 -0
  733. package/dist/worker-JNXXEIT6.js +1504 -0
  734. package/dist/worker.js +21 -0
  735. package/dist/workspace-tree-identity-JO5PSKTW.js +52 -0
  736. package/dist/worktree-environment-WTVABAQW.js +64 -0
  737. package/dist/worktree-metrics-VZRQI26T.js +66 -0
  738. package/dist/writeback-TQFQBJNU.js +50 -0
  739. package/docs/CLI_REFERENCE.md +8287 -0
  740. package/docs/PROVIDER_SETUP.md +1737 -0
  741. package/docs/README.md +96 -0
  742. package/docs/TROUBLESHOOTING.md +2209 -0
  743. package/docs/getting-started/QUICK_START.md +260 -0
  744. package/docs/getting-started/README.md +198 -0
  745. package/docs/getting-started/SETUP.md +25 -0
  746. package/docs/reference/AGENT_CONTEXT.md +84 -0
  747. package/docs/reference/DELIVERY_ONBOARDING.md +198 -0
  748. package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
  749. package/docs/reference/SECURITY.md +291 -0
  750. package/docs/reference/TELEMETRY_PRIVACY.md +259 -0
  751. package/integrations/bb-plugin-build/README.md +391 -0
  752. package/integrations/bb-plugin-build/app.css +431 -0
  753. package/integrations/bb-plugin-build/app.tsx +6210 -0
  754. package/integrations/bb-plugin-build/package.json +45 -0
  755. package/integrations/bb-plugin-build/server.ts +488 -0
  756. package/integrations/bb-plugin-build/src/adapter.ts +3672 -0
  757. package/integrations/bb-plugin-build/src/backlog-authoring-model.ts +150 -0
  758. package/integrations/bb-plugin-build/src/backlog-authoring-schema.ts +458 -0
  759. package/integrations/bb-plugin-build/src/backlog-authoring-service.ts +467 -0
  760. package/integrations/bb-plugin-build/src/backlog-authoring-view.ts +1025 -0
  761. package/integrations/bb-plugin-build/src/command-evidence-schema.ts +13 -0
  762. package/integrations/bb-plugin-build/src/competition-defaults-schema.ts +122 -0
  763. package/integrations/bb-plugin-build/src/competition-defaults-service.ts +105 -0
  764. package/integrations/bb-plugin-build/src/competition-defaults-view.ts +138 -0
  765. package/integrations/bb-plugin-build/src/contract.ts +718 -0
  766. package/integrations/bb-plugin-build/src/execution-activity-view.ts +98 -0
  767. package/integrations/bb-plugin-build/src/finalize-model.ts +205 -0
  768. package/integrations/bb-plugin-build/src/finalize-schema.ts +150 -0
  769. package/integrations/bb-plugin-build/src/finalize-service.ts +330 -0
  770. package/integrations/bb-plugin-build/src/finalize-view.ts +159 -0
  771. package/integrations/bb-plugin-build/src/judge-operations-readback.ts +303 -0
  772. package/integrations/bb-plugin-build/src/judge-operations-schema.ts +33 -0
  773. package/integrations/bb-plugin-build/src/judge-operations-view.ts +459 -0
  774. package/integrations/bb-plugin-build/src/model.ts +1318 -0
  775. package/integrations/bb-plugin-build/src/monitor-service.ts +233 -0
  776. package/integrations/bb-plugin-build/src/panel-read-ux.ts +97 -0
  777. package/integrations/bb-plugin-build/src/patch-preview-schema.ts +166 -0
  778. package/integrations/bb-plugin-build/src/patch-preview-service.ts +480 -0
  779. package/integrations/bb-plugin-build/src/patch-preview-view.ts +109 -0
  780. package/integrations/bb-plugin-build/src/planning-readback.ts +228 -0
  781. package/integrations/bb-plugin-build/src/planning-service.ts +647 -0
  782. package/integrations/bb-plugin-build/src/planning-sync-evidence.ts +37 -0
  783. package/integrations/bb-plugin-build/src/planning-workspace-readback.ts +33 -0
  784. package/integrations/bb-plugin-build/src/planning-workspace-schema.ts +131 -0
  785. package/integrations/bb-plugin-build/src/planning-workspace.ts +333 -0
  786. package/integrations/bb-plugin-build/src/poll-handoff.ts +136 -0
  787. package/integrations/bb-plugin-build/src/project-target-server.ts +21 -0
  788. package/integrations/bb-plugin-build/src/project-target.ts +45 -0
  789. package/integrations/bb-plugin-build/src/reference-index.ts +218 -0
  790. package/integrations/bb-plugin-build/src/repository-identity.ts +17 -0
  791. package/integrations/bb-plugin-build/src/repository-schema.ts +30 -0
  792. package/integrations/bb-plugin-build/src/result-explorer-view.ts +597 -0
  793. package/integrations/bb-plugin-build/src/result-readback-model.ts +163 -0
  794. package/integrations/bb-plugin-build/src/result-readback-schema.ts +319 -0
  795. package/integrations/bb-plugin-build/src/result-readback-service.ts +333 -0
  796. package/integrations/bb-plugin-build/src/run-page-view.ts +332 -0
  797. package/integrations/bb-plugin-build/src/setup-config-schema.ts +293 -0
  798. package/integrations/bb-plugin-build/src/setup-config-service.ts +620 -0
  799. package/integrations/bb-plugin-build/src/setup-config-view.ts +388 -0
  800. package/integrations/bb-plugin-build/src/sprint-close-model.ts +150 -0
  801. package/integrations/bb-plugin-build/src/sprint-close-schema.ts +128 -0
  802. package/integrations/bb-plugin-build/src/sprint-close-service.ts +293 -0
  803. package/integrations/bb-plugin-build/src/sprint-close-view.ts +116 -0
  804. package/integrations/bb-plugin-build/src/sprint-composition-model.ts +709 -0
  805. package/integrations/bb-plugin-build/src/sprint-composition-readback.ts +231 -0
  806. package/integrations/bb-plugin-build/src/sprint-composition-schema.ts +597 -0
  807. package/integrations/bb-plugin-build/src/sprint-composition-service.ts +773 -0
  808. package/integrations/bb-plugin-build/src/sprint-composition-view.ts +1221 -0
  809. package/integrations/bb-plugin-build/src/sprint-execution-schema.ts +188 -0
  810. package/integrations/bb-plugin-build/src/sprint-execution-service.ts +289 -0
  811. package/integrations/bb-plugin-build/src/sprint-execution-view.ts +54 -0
  812. package/integrations/bb-plugin-build/src/task-authoring-model.ts +563 -0
  813. package/integrations/bb-plugin-build/src/task-authoring-schema.ts +629 -0
  814. package/integrations/bb-plugin-build/src/task-authoring-service.ts +842 -0
  815. package/integrations/bb-plugin-build/src/task-authoring-view.ts +1227 -0
  816. package/integrations/bb-plugin-build/src/task-catalog-schema.ts +46 -0
  817. package/integrations/bb-plugin-build/src/task-catalog-service.ts +44 -0
  818. package/integrations/bb-plugin-build/src/task-detail-readback.ts +56 -0
  819. package/integrations/bb-plugin-build/src/task-detail-schema.ts +171 -0
  820. package/integrations/bb-plugin-build/src/task-navigation.ts +446 -0
  821. package/integrations/bb-plugin-build/src/workbench-route.ts +74 -0
  822. package/package.json +306 -4
  823. package/schemas/README.md +80 -0
  824. package/schemas/build.config.schema.json +2110 -0
  825. package/schemas/config-v1.schema.json +136 -0
  826. package/schemas/execution-config.schema.json +47 -0
  827. package/schemas/judge-scoring.schema.json +257 -0
  828. package/schemas/provider-config.schema.json +179 -0
  829. package/schemas/telemetry-config.schema.json +79 -0
  830. package/schemas/user-preferences.schema.json +141 -0
  831. package/scripts/assert-node-runtime.mjs +146 -0
  832. package/scripts/preflight-native.mjs +49 -0
  833. package/scripts/setup-git-hooks.mjs +39 -0
  834. package/scripts/sync.sh +2871 -0
  835. package/scripts/write-node-launcher.sh +138 -0
  836. package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
  837. package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
  838. package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
  839. package/templates/.build-project/README.md +41 -0
  840. package/templates/.build-project/agents/README.md +50 -0
  841. package/templates/.build-project/agents/architect.md +10 -0
  842. package/templates/.build-project/agents/code-reviewer.md +10 -0
  843. package/templates/.build-project/agents/debugger.md +10 -0
  844. package/templates/.build-project/agents/documenter.md +10 -0
  845. package/templates/.build-project/agents/test-automator.md +10 -0
  846. package/templates/.build-project/config/build.config.jsonc +64 -0
  847. package/templates/.build-project/config/project-context.template.json +6 -0
  848. package/templates/.build-project/config/task-type-aliases.presets/kanban.yaml +14 -0
  849. package/templates/.build-project/config/task-type-aliases.presets/scrum.yaml +17 -0
  850. package/templates/.build-project/config/task-type-aliases.presets/xp.yaml +12 -0
  851. package/templates/.build-project/config/task-type-aliases.yaml +29 -0
  852. package/templates/.build-project/gitignore.template +70 -0
  853. package/templates/.build-project/task-types/analysis.yaml +38 -0
  854. package/templates/.build-project/task-types/architecture.yaml +35 -0
  855. package/templates/.build-project/task-types/doc.yaml +34 -0
  856. package/templates/.build-project/task-types/feature.yaml +22 -0
  857. package/templates/.build-project/task-types/general.yaml +4 -0
  858. package/templates/.build-project/task-types/security.yaml +38 -0
  859. package/templates/AGENTS.template.md +85 -0
  860. package/templates/CLAUDE.template.md +1 -0
  861. package/templates/GEMINI.template.md +1 -0
  862. package/templates/builtin-workflows/code-review.yaml +73 -0
  863. package/templates/builtin-workflows/skills/code-review/SKILL.md +61 -0
  864. package/templates/builtin-workflows/skills/execution-contract-analysis/SKILL.md +24 -0
  865. package/templates/builtin-workflows/skills/execution-contract-code/SKILL.md +19 -0
  866. package/templates/builtin-workflows/skills/execution-contract-structured/SKILL.md +17 -0
  867. package/templates/ci/incident-intake.mjs +787 -0
  868. package/templates/ci/incidents.yml.template +103 -0
  869. package/templates/ci/node.yml.template +17 -0
  870. package/templates/ci/python.yml.template +17 -0
  871. package/templates/guard-kit/GUARD_SETUP.md.template +258 -0
  872. package/templates/guard-kit/build-guard.yml.template +189 -0
  873. package/templates/guard-kit/check.mjs.template +932 -0
  874. package/templates/guard-kit/config.json.template +7 -0
  875. package/templates/guard-kit/policy.json.template +1 -0
  876. package/templates/profiles/README.md +57 -0
  877. package/templates/profiles/frontier-claude.json +23 -0
  878. package/templates/profiles/frontier-codex.json +23 -0
@@ -0,0 +1,976 @@
1
+ import {
2
+ getArtifactDir
3
+ } from "./chunk-6TRD7TEE.js";
4
+ import {
5
+ atomicWriteJson,
6
+ atomicWriteText
7
+ } from "./chunk-RFDVSI4N.js";
8
+ import {
9
+ acquireFencedFileLock,
10
+ ensureLockTargetFile
11
+ } from "./chunk-QYQOVOLR.js";
12
+ import {
13
+ filterPatchDiffBySecretPaths
14
+ } from "./chunk-AEQWV746.js";
15
+ import {
16
+ resolveContainedPath
17
+ } from "./chunk-RCP2Y6DQ.js";
18
+ import {
19
+ emitCustomWarning
20
+ } from "./chunk-7VRJHTGZ.js";
21
+ import {
22
+ PROVIDER_SECRET_PATTERNS
23
+ } from "./chunk-CPSVQR2I.js";
24
+
25
+ // src/automation/flywheel-security.ts
26
+ var PROVIDER_REPLACEMENT_BY_ID = {
27
+ "anthropic-api-key": "[REDACTED_API_KEY]",
28
+ "openai-project-api-key": "[REDACTED_API_KEY]",
29
+ "openai-service-account-key": "[REDACTED_API_KEY]",
30
+ "openai-admin-api-key": "[REDACTED_API_KEY]",
31
+ "openrouter-api-key": "[REDACTED_API_KEY]",
32
+ "google-api-key": "[REDACTED_API_KEY]",
33
+ "xai-api-key": "[REDACTED_API_KEY]",
34
+ "slack-token": "[REDACTED_SLACK_TOKEN]",
35
+ "gitlab-token": "[REDACTED_API_KEY]",
36
+ "npm-token": "[REDACTED_API_KEY]",
37
+ "github-token": "[REDACTED_GITHUB_TOKEN]",
38
+ "github-fine-grained-pat": "[REDACTED_GITHUB_TOKEN]"
39
+ };
40
+ var REDACTION_RULES = [
41
+ // Shared F1–F5 provider-prefix inventory (same sources/min lengths as error-sanitizer).
42
+ ...PROVIDER_SECRET_PATTERNS.map((pattern) => ({
43
+ source: pattern.source,
44
+ replacement: PROVIDER_REPLACEMENT_BY_ID[pattern.id],
45
+ name: pattern.id
46
+ })),
47
+ // Broader / flywheel-local API key forms (not part of the shared inventory).
48
+ {
49
+ source: "sk-[a-zA-Z0-9]{32,}",
50
+ replacement: "[REDACTED_API_KEY]",
51
+ name: "openai-api-key"
52
+ },
53
+ {
54
+ source: "ya29\\.[a-zA-Z0-9._-]+",
55
+ replacement: "[REDACTED_OAUTH_TOKEN]",
56
+ name: "google-oauth-token"
57
+ },
58
+ {
59
+ source: "AKIA[0-9A-Z]{16}",
60
+ replacement: "[REDACTED_AWS_KEY]",
61
+ name: "aws-access-key"
62
+ },
63
+ {
64
+ source: `aws_secret_access_key[=:]\\s*['"]?[a-zA-Z0-9+/=]{32,}['"]?`,
65
+ replacement: "aws_secret_access_key=[REDACTED]",
66
+ name: "aws-secret-access-key"
67
+ },
68
+ // Userinfo of any URL scheme (https, redis, amqp, ftp, ...); DB schemes below also
69
+ // redact the host. Runs before the email rule, which would otherwise take the
70
+ // `pass@host.tld` tail and leave the username.
71
+ {
72
+ source: "(?<=:\\/\\/)[^:/@\\s]+:[^@/\\s]+@",
73
+ replacement: "[REDACTED]@",
74
+ name: "url-userinfo"
75
+ },
76
+ // Credentials in assignments/configurations
77
+ // Use negative lookahead (?!\[) to avoid matching our own [REDACTED] placeholders
78
+ {
79
+ source: 'password["\\s:=]+(?!\\[)[^\\s"]+',
80
+ replacement: "password=[REDACTED]",
81
+ name: "password"
82
+ },
83
+ {
84
+ source: 'token["\\s:=]+(?!\\[)[^\\s"]+',
85
+ replacement: "token=[REDACTED]",
86
+ name: "token"
87
+ },
88
+ {
89
+ source: 'secret["\\s:=]+(?!\\[)[^\\s"]+',
90
+ replacement: "secret=[REDACTED]",
91
+ name: "secret"
92
+ },
93
+ {
94
+ source: 'api[_-]?key["\\s:=]+(?!\\[)[^\\s"]+',
95
+ replacement: "api_key=[REDACTED]",
96
+ name: "api-key"
97
+ },
98
+ // Authorization headers
99
+ {
100
+ source: "Bearer\\s+[a-zA-Z0-9\\-._~+/]+=*",
101
+ replacement: "Bearer [REDACTED]",
102
+ name: "bearer-token"
103
+ },
104
+ {
105
+ source: "Authorization:\\s*[^\\n]+",
106
+ replacement: "Authorization: [REDACTED]",
107
+ name: "auth-header"
108
+ },
109
+ // PII patterns
110
+ {
111
+ source: "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b",
112
+ replacement: "[REDACTED_EMAIL]",
113
+ name: "email"
114
+ },
115
+ {
116
+ source: "\\b\\d{3}-\\d{2}-\\d{4}\\b",
117
+ replacement: "[REDACTED_SSN]",
118
+ name: "ssn"
119
+ },
120
+ {
121
+ source: "\\b\\d{4}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{4}\\b",
122
+ replacement: "[REDACTED_CARD]",
123
+ name: "credit-card"
124
+ },
125
+ // Database connection strings
126
+ {
127
+ source: 'postgres:\\/\\/[^@]+@[^\\s"]+',
128
+ replacement: "postgres://[REDACTED]@[REDACTED]",
129
+ name: "postgres-url"
130
+ },
131
+ {
132
+ source: 'mongodb(\\+srv)?:\\/\\/[^@]+@[^\\s"]+',
133
+ replacement: "mongodb://[REDACTED]",
134
+ name: "mongo-url"
135
+ },
136
+ {
137
+ source: 'mysql:\\/\\/[^@]+@[^\\s"]+',
138
+ replacement: "mysql://[REDACTED]",
139
+ name: "mysql-url"
140
+ },
141
+ // Private keys (PEM format)
142
+ {
143
+ source: "-----BEGIN [A-Z ]+-----[\\s\\S]*?-----END [A-Z ]+-----",
144
+ replacement: "[REDACTED_PRIVATE_KEY]",
145
+ name: "private-key"
146
+ },
147
+ // JWT tokens
148
+ {
149
+ source: "eyJ[a-zA-Z0-9_-]{10,}\\.eyJ[a-zA-Z0-9_-]{10,}\\.[a-zA-Z0-9_-]{10,}",
150
+ replacement: "[REDACTED_JWT]",
151
+ name: "jwt-token"
152
+ },
153
+ // Azure patterns
154
+ {
155
+ source: "AccountKey=[a-zA-Z0-9+/=]{32,}",
156
+ replacement: "AccountKey=[REDACTED]",
157
+ name: "azure-account-key"
158
+ },
159
+ // IP addresses — note: this pattern also matches 4-segment version strings (e.g. "1.2.3.4").
160
+ // A boundary-only fix risks masking real IPs that appear in version-like contexts, so the
161
+ // tradeoff is accepted: redact conservatively and let callers strip [REDACTED_IP] from
162
+ // non-sensitive outputs if needed.
163
+ {
164
+ source: "\\b(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d+)?\\b",
165
+ replacement: "[REDACTED_IP]",
166
+ name: "ip-address"
167
+ }
168
+ ];
169
+ function emitRedactionDiagnostic(ruleName, count) {
170
+ emitCustomWarning(
171
+ "INFO" /* INFO */,
172
+ "validation" /* VALIDATION */,
173
+ "Sensitive content was redacted before prompt use",
174
+ { subsystem: "flywheel-security", executionPhase: "validation" },
175
+ {
176
+ metadata: { ruleName, count },
177
+ skipConsole: true
178
+ }
179
+ );
180
+ }
181
+ function emitHighSensitiveContentDiagnostic(entry) {
182
+ emitCustomWarning(
183
+ "WARN" /* WARN */,
184
+ "validation" /* VALIDATION */,
185
+ "High sensitive content volume detected during prompt sanitization",
186
+ {
187
+ subsystem: "flywheel-security",
188
+ executionPhase: "validation"
189
+ },
190
+ {
191
+ metadata: {
192
+ workflowId: entry.workflowId,
193
+ source: entry.source,
194
+ stageId: entry.stageId,
195
+ patternsFound: entry.patternsFound
196
+ },
197
+ skipConsole: true
198
+ }
199
+ );
200
+ }
201
+ var Redactor = class {
202
+ lastRedactionCount = 0;
203
+ lastRedactedPatterns = [];
204
+ /**
205
+ * Redact sensitive patterns from text
206
+ *
207
+ * @param text - Text to redact
208
+ * @returns Redacted text
209
+ */
210
+ redactSensitive(text) {
211
+ let redacted = text;
212
+ this.lastRedactionCount = 0;
213
+ this.lastRedactedPatterns = [];
214
+ for (const rule of REDACTION_RULES) {
215
+ const pattern = new RegExp(rule.source, "gi");
216
+ const matches = redacted.match(pattern);
217
+ if (matches) {
218
+ this.lastRedactionCount += matches.length;
219
+ this.lastRedactedPatterns.push(rule.name);
220
+ emitRedactionDiagnostic(rule.name, matches.length);
221
+ }
222
+ redacted = redacted.replace(pattern, rule.replacement);
223
+ }
224
+ return redacted;
225
+ }
226
+ /**
227
+ * Check if text contains sensitive patterns
228
+ *
229
+ * Excludes already-redacted placeholders from detection to avoid
230
+ * false positives after redaction has been applied.
231
+ *
232
+ * @param text - Text to check
233
+ * @returns True if sensitive patterns found (excluding redacted placeholders)
234
+ */
235
+ containsSensitivePatterns(text) {
236
+ let textWithoutPlaceholders = text;
237
+ for (const rule of REDACTION_RULES) {
238
+ const replacementPattern = new RegExp(
239
+ `${rule.replacement.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}(?![^\\s"])`,
240
+ "g"
241
+ );
242
+ textWithoutPlaceholders = textWithoutPlaceholders.replace(replacementPattern, "");
243
+ }
244
+ textWithoutPlaceholders = textWithoutPlaceholders.replace(/\[REDACTED(?:_[A-Z_]+)?\]/gi, "");
245
+ for (const rule of REDACTION_RULES) {
246
+ const pattern = new RegExp(rule.source, "gi");
247
+ if (pattern.test(textWithoutPlaceholders)) {
248
+ return true;
249
+ }
250
+ }
251
+ return false;
252
+ }
253
+ /**
254
+ * Get count of patterns redacted in last call
255
+ */
256
+ getLastRedactionCount() {
257
+ return this.lastRedactionCount;
258
+ }
259
+ /**
260
+ * Get names of patterns redacted in last call
261
+ */
262
+ getLastRedactedPatterns() {
263
+ return [...this.lastRedactedPatterns];
264
+ }
265
+ };
266
+ var SecurityBoundary = class {
267
+ redactor;
268
+ auditLog = [];
269
+ workflowId;
270
+ constructor(workflowId) {
271
+ this.redactor = new Redactor();
272
+ this.workflowId = workflowId;
273
+ }
274
+ /**
275
+ * Sanitize text before prompt injection
276
+ *
277
+ * **CRITICAL**: This MUST be called for ALL text entering prompts,
278
+ * regardless of source. Even "already processed" text must be re-redacted
279
+ * because it might have been modified or contain reflected secrets.
280
+ *
281
+ * @param text - Text to sanitize
282
+ * @param source - Where the text came from (for audit)
283
+ * @param stageId - Current stage ID (for audit)
284
+ * @returns Sanitized text
285
+ * @throws Error if redaction fails (text still contains sensitive patterns)
286
+ */
287
+ async sanitizeForPromptInjection(text, source, stageId) {
288
+ const redacted = this.redactor.redactSensitive(text);
289
+ const entry = {
290
+ timestamp: /* @__PURE__ */ new Date(),
291
+ source,
292
+ originalLength: text.length,
293
+ redactedLength: redacted.length,
294
+ patternsFound: this.redactor.getLastRedactionCount(),
295
+ workflowId: this.workflowId,
296
+ stageId
297
+ };
298
+ this.auditLog.push(entry);
299
+ if (entry.patternsFound > 5) {
300
+ emitHighSensitiveContentDiagnostic(entry);
301
+ }
302
+ if (this.redactor.containsSensitivePatterns(redacted)) {
303
+ throw new Error(
304
+ `Redaction verification failed for ${source}: sensitive content remains after redaction`
305
+ );
306
+ }
307
+ return redacted;
308
+ }
309
+ /**
310
+ * Build retry prompt with mandatory re-redaction
311
+ *
312
+ * Constructs a retry prompt that includes judge feedback and context,
313
+ * with all components sanitized through the security boundary.
314
+ *
315
+ * @param stage - Stage configuration
316
+ * @param failure - Validation failure details
317
+ * @param context - Additional context to include
318
+ * @returns Sanitized retry prompt
319
+ */
320
+ async buildRetryPrompt(stage, failure, context) {
321
+ const safeJudgeFeedback = await this.sanitizeForPromptInjection(
322
+ failure.judgeFeedback,
323
+ "judge-feedback",
324
+ stage.id
325
+ );
326
+ let safeContext = "";
327
+ if (context) {
328
+ safeContext = await this.sanitizeForPromptInjection(context, "context-retrieval", stage.id);
329
+ }
330
+ const parts = [
331
+ stage.prompt ?? "",
332
+ "",
333
+ `Previous attempt scored ${failure.score}% (threshold: ${failure.threshold}%).`,
334
+ "",
335
+ "Issues to address:",
336
+ safeJudgeFeedback
337
+ ];
338
+ if (safeContext) {
339
+ parts.push("", "Relevant context:", safeContext);
340
+ }
341
+ const retryPrompt = parts.join("\n").trim();
342
+ return this.sanitizeForPromptInjection(retryPrompt, "retry-prompt", stage.id);
343
+ }
344
+ /**
345
+ * Sanitize stage output before storing or forwarding
346
+ *
347
+ * @param output - Stage output content
348
+ * @param stageId - Stage that produced the output
349
+ * @returns Sanitized output
350
+ */
351
+ async sanitizeStageOutput(output, stageId) {
352
+ return this.sanitizeForPromptInjection(output, "stage-output", stageId);
353
+ }
354
+ /**
355
+ * Sanitize template variable before interpolation
356
+ *
357
+ * @param value - Variable value
358
+ * @param stageId - Stage using the variable
359
+ * @returns Sanitized value
360
+ */
361
+ async sanitizeTemplateVariable(value, stageId) {
362
+ return this.sanitizeForPromptInjection(value, "template-variable", stageId);
363
+ }
364
+ /**
365
+ * Get audit log for security review
366
+ */
367
+ getAuditLog() {
368
+ return [...this.auditLog];
369
+ }
370
+ /**
371
+ * Get summary statistics from audit log
372
+ */
373
+ getAuditSummary() {
374
+ const bySource = {
375
+ "user-input": 0,
376
+ "judge-feedback": 0,
377
+ "context-retrieval": 0,
378
+ "stage-output": 0,
379
+ "template-variable": 0,
380
+ "retry-prompt": 0
381
+ };
382
+ let totalRedactions = 0;
383
+ let highRiskEvents = 0;
384
+ for (const entry of this.auditLog) {
385
+ totalRedactions += entry.patternsFound;
386
+ bySource[entry.source] += entry.patternsFound;
387
+ if (entry.patternsFound > 5) {
388
+ highRiskEvents++;
389
+ }
390
+ }
391
+ return {
392
+ totalRedactions,
393
+ bySource,
394
+ highRiskEvents
395
+ };
396
+ }
397
+ /**
398
+ * Clear audit log (for testing or after review)
399
+ */
400
+ clearAuditLog() {
401
+ this.auditLog = [];
402
+ }
403
+ };
404
+ function createSecurityBoundary(workflowId) {
405
+ return new SecurityBoundary(workflowId);
406
+ }
407
+
408
+ // src/automation/flywheel-artifact-store.ts
409
+ import * as fs from "fs/promises";
410
+ import * as path from "path";
411
+
412
+ // src/automation/flywheel-path-safe-ids.ts
413
+ var PATH_SAFE_IDENTIFIER_PATTERN = /^[A-Za-z0-9_-]+$/;
414
+ function isPathSafeIdentifier(value) {
415
+ return PATH_SAFE_IDENTIFIER_PATTERN.test(value);
416
+ }
417
+
418
+ // src/automation/flywheel-artifact-store.ts
419
+ var ArtifactNotFoundError = class extends Error {
420
+ constructor(ref, stageId, reason) {
421
+ super(
422
+ `Stage '${stageId}' references missing artifact '${ref}'. ${reason}
423
+ Hint: Ensure the dependency stage completed successfully and produced the expected output.`
424
+ );
425
+ this.ref = ref;
426
+ this.stageId = stageId;
427
+ this.reason = reason;
428
+ this.name = "ArtifactNotFoundError";
429
+ }
430
+ ref;
431
+ stageId;
432
+ reason;
433
+ };
434
+ var ArtifactValidationError = class extends Error {
435
+ constructor(ref, reason) {
436
+ super(`Invalid artifact '${ref}': ${reason}`);
437
+ this.ref = ref;
438
+ this.reason = reason;
439
+ this.name = "ArtifactValidationError";
440
+ }
441
+ ref;
442
+ reason;
443
+ };
444
+ var ArtifactPathEscapeError = class extends Error {
445
+ constructor(stageId, outputName, reason) {
446
+ super(
447
+ `Refusing to write artifact '${stageId}.${outputName}': ${reason}. Stage ids and output names must match ^[A-Za-z0-9_-]+$ and resolve inside the artifact store.`
448
+ );
449
+ this.stageId = stageId;
450
+ this.outputName = outputName;
451
+ this.name = "ArtifactPathEscapeError";
452
+ }
453
+ stageId;
454
+ outputName;
455
+ };
456
+ var ARTIFACT_EXTENSIONS = {
457
+ text: "txt",
458
+ json: "json",
459
+ diff: "diff",
460
+ files: "txt",
461
+ // List of files as text
462
+ testResults: "json"
463
+ // Test results as structured JSON
464
+ };
465
+ var VALID_ARTIFACT_TYPES = new Set(Object.keys(ARTIFACT_EXTENSIONS));
466
+ function isStageOutputType(value) {
467
+ return typeof value === "string" && VALID_ARTIFACT_TYPES.has(value);
468
+ }
469
+ function parseStoredTimestamp(value) {
470
+ if (value instanceof Date) {
471
+ return Number.isNaN(value.getTime()) ? void 0 : value;
472
+ }
473
+ if (typeof value !== "string" && typeof value !== "number") {
474
+ return void 0;
475
+ }
476
+ const parsed = new Date(value);
477
+ return Number.isNaN(parsed.getTime()) ? void 0 : parsed;
478
+ }
479
+ var METADATA_LOCK_DISABLE_ENV = "BUILD_FLYWHEEL_ARTIFACT_METADATA_LOCK_DISABLE";
480
+ function isMetadataFileLockDisabled() {
481
+ const raw = process.env[METADATA_LOCK_DISABLE_ENV]?.trim().toLowerCase() ?? "";
482
+ return raw === "1" || raw === "true" || raw === "yes" || raw === "on";
483
+ }
484
+ async function writeFileWithParentRetry(filePath, content) {
485
+ await atomicWriteText(filePath, content, { ensureDir: true });
486
+ }
487
+ function findPathComponentViolation(value) {
488
+ if (value.length === 0) return "component is empty";
489
+ if (value.includes("\0")) return "component contains a null byte";
490
+ if (value.includes("/") || value.includes("\\")) {
491
+ return "component contains a path separator";
492
+ }
493
+ if (value === "." || value === "..") return "component is a relative path segment";
494
+ if (path.isAbsolute(value)) return "component is an absolute path";
495
+ if (path.basename(value) !== value) return "component is not a single path component";
496
+ return void 0;
497
+ }
498
+ function resolveArtifactWritePath(basePath, stageId, name, filename) {
499
+ const stageIdViolation = findPathComponentViolation(stageId);
500
+ if (stageIdViolation) {
501
+ throw new ArtifactPathEscapeError(stageId, name, `stage id ${stageIdViolation}`);
502
+ }
503
+ const nameViolation = findPathComponentViolation(name);
504
+ if (nameViolation) {
505
+ throw new ArtifactPathEscapeError(stageId, name, `output name ${nameViolation}`);
506
+ }
507
+ const stageDir = path.join(basePath, stageId);
508
+ const artifactPath = path.join(stageDir, filename);
509
+ const contained = resolveContainedPath(basePath, containmentCandidate(basePath, artifactPath));
510
+ if (!contained.contained) {
511
+ throw new ArtifactPathEscapeError(
512
+ stageId,
513
+ name,
514
+ `resolved path escapes the artifact store (${contained.reason})`
515
+ );
516
+ }
517
+ return { stageDir, artifactPath };
518
+ }
519
+ function validateArtifactIdentity(entry) {
520
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) return void 0;
521
+ const { stageId, name, type, size, createdAt } = entry;
522
+ if (typeof stageId !== "string" || findPathComponentViolation(stageId)) return void 0;
523
+ if (typeof name !== "string" || findPathComponentViolation(name)) return void 0;
524
+ if (!isStageOutputType(type)) return void 0;
525
+ if (typeof size !== "number" || !Number.isFinite(size) || size < 0) return void 0;
526
+ const created = parseStoredTimestamp(createdAt);
527
+ if (!created) return void 0;
528
+ return { stageId, name, type, size, createdAt: created };
529
+ }
530
+ function parsePersistedMetadata(content, basePath) {
531
+ const parsed = JSON.parse(content);
532
+ if (!Array.isArray(parsed)) {
533
+ throw new Error("artifact metadata is not an array");
534
+ }
535
+ const entries = /* @__PURE__ */ new Map();
536
+ let malformed = 0;
537
+ let uncontained = 0;
538
+ for (const raw of parsed) {
539
+ const identity = validateArtifactIdentity(raw);
540
+ if (!identity) {
541
+ malformed += 1;
542
+ continue;
543
+ }
544
+ let artifactPath;
545
+ try {
546
+ artifactPath = resolveArtifactWritePath(
547
+ basePath,
548
+ identity.stageId,
549
+ identity.name,
550
+ `${identity.name}.${ARTIFACT_EXTENSIONS[identity.type]}`
551
+ ).artifactPath;
552
+ } catch {
553
+ uncontained += 1;
554
+ continue;
555
+ }
556
+ entries.set(`${identity.stageId}.${identity.name}`, {
557
+ stageId: identity.stageId,
558
+ name: identity.name,
559
+ type: identity.type,
560
+ path: artifactPath,
561
+ size: identity.size,
562
+ createdAt: identity.createdAt
563
+ });
564
+ }
565
+ return { entries, malformed, uncontained };
566
+ }
567
+ function containmentCandidate(root, candidate) {
568
+ const relative2 = path.relative(root, candidate);
569
+ if (relative2 === "" || relative2.startsWith("..") || path.isAbsolute(relative2)) {
570
+ return candidate;
571
+ }
572
+ return relative2;
573
+ }
574
+ async function acquireMetadataFileLock(lockTargetPath) {
575
+ if (isMetadataFileLockDisabled()) {
576
+ return void 0;
577
+ }
578
+ await fs.mkdir(path.dirname(lockTargetPath), { recursive: true });
579
+ await ensureLockTargetFile(lockTargetPath);
580
+ return acquireFencedFileLock(lockTargetPath, {
581
+ stale: 3e4,
582
+ retries: { retries: 200, minTimeout: 25, maxTimeout: 250, factor: 1.5 },
583
+ description: "Artifact metadata lock"
584
+ });
585
+ }
586
+ function parseArtifactRef(ref) {
587
+ const dotIndex = ref.indexOf(".");
588
+ if (dotIndex === -1 || dotIndex === 0 || dotIndex === ref.length - 1) {
589
+ throw new Error(
590
+ `Invalid artifact reference format: '${ref}'. Expected 'stageId.outputName' (e.g., 'p1-scan.assignment')`
591
+ );
592
+ }
593
+ return {
594
+ stageId: ref.slice(0, dotIndex),
595
+ outputName: ref.slice(dotIndex + 1)
596
+ };
597
+ }
598
+ var ArtifactStore = class _ArtifactStore {
599
+ constructor(workflowId, scope) {
600
+ this.scope = scope;
601
+ this.workflowId = workflowId;
602
+ if (scope) {
603
+ scope.parent.ensureInitialized();
604
+ if (!isPathSafeIdentifier(scope.ownerStageId)) {
605
+ throw new ArtifactPathEscapeError(scope.ownerStageId, "_scope", "invalid scope owner");
606
+ }
607
+ this.basePath = path.join(scope.parent.basePath, ".scopes", scope.ownerStageId);
608
+ const contained = resolveContainedPath(
609
+ scope.parent.basePath,
610
+ containmentCandidate(scope.parent.basePath, this.basePath)
611
+ );
612
+ if (!contained.contained) {
613
+ throw new ArtifactPathEscapeError(scope.ownerStageId, "_scope", contained.reason);
614
+ }
615
+ } else {
616
+ this.basePath = path.join(getArtifactDir(workflowId), "artifacts");
617
+ }
618
+ this.metadataPath = path.join(this.basePath, "_metadata.json");
619
+ }
620
+ scope;
621
+ workflowId;
622
+ basePath;
623
+ metadataPath;
624
+ metadata = /* @__PURE__ */ new Map();
625
+ initialized = false;
626
+ localProducerIds = /* @__PURE__ */ new Set();
627
+ /**
628
+ * In-process promise-chain lock. Serialises concurrent save() calls on this
629
+ * instance so they do not race inside saveMetadata().
630
+ */
631
+ metadataWriteLock = Promise.resolve();
632
+ /** Internal execution view; authored refs stay local to this producer namespace. */
633
+ async createScope(ownerStageId, producerIds) {
634
+ const store = new _ArtifactStore(this.workflowId, { parent: this, ownerStageId });
635
+ store.declareProducers(producerIds);
636
+ await store.initialize();
637
+ return store;
638
+ }
639
+ /** Reserve a plan's producers before execution, including newly replanned stages. */
640
+ declareProducers(producerIds) {
641
+ for (const id of producerIds) this.localProducerIds.add(id);
642
+ }
643
+ readStore(ref) {
644
+ this.ensureInitialized();
645
+ const { stageId } = parseArtifactRef(ref);
646
+ return this.scope && !this.localProducerIds.has(stageId) ? this.scope.parent.readStore(ref) : this;
647
+ }
648
+ /**
649
+ * Initialize the artifact store
650
+ *
651
+ * Creates the artifacts directory and loads existing metadata if present.
652
+ * Must be called before any save/load operations.
653
+ *
654
+ * Persisted metadata is treated as untrusted input: each entry's shape is
655
+ * validated and its filesystem path is re-derived from `stageId`/`name`/`type`
656
+ * against this store's current base path. A `path` field written into
657
+ * `_metadata.json` by anything other than this store is ignored, so it cannot
658
+ * redirect a later `load()` at a file outside the workflow. Entries whose
659
+ * re-derived file no longer exists simply fail `load()` through the existing
660
+ * ArtifactNotFoundError path.
661
+ */
662
+ async initialize() {
663
+ if (this.initialized) return;
664
+ await fs.mkdir(this.basePath, { recursive: true });
665
+ try {
666
+ const metadataContent = await fs.readFile(this.metadataPath, "utf-8");
667
+ const { entries, malformed, uncontained } = parsePersistedMetadata(
668
+ metadataContent,
669
+ this.basePath
670
+ );
671
+ for (const [key, artifact] of entries) {
672
+ this.metadata.set(key, artifact);
673
+ this.localProducerIds.add(artifact.stageId);
674
+ }
675
+ if (malformed > 0) {
676
+ console.warn(`Warning: Skipped ${malformed} malformed artifact metadata entries`);
677
+ }
678
+ if (uncontained > 0) {
679
+ console.warn(
680
+ `Warning: Skipped ${uncontained} artifact metadata entries that resolve outside the artifact store`
681
+ );
682
+ }
683
+ } catch (error) {
684
+ if (error.code !== "ENOENT") {
685
+ console.warn(`Warning: Failed to load artifact metadata: ${error}`);
686
+ }
687
+ }
688
+ this.initialized = true;
689
+ }
690
+ /**
691
+ * Save an artifact to the store
692
+ *
693
+ * @param stageId - ID of the stage producing the artifact
694
+ * @param name - Output name (from stage.outputs configuration)
695
+ * @param type - Artifact type (determines file extension and validation)
696
+ * @param content - Artifact content (string or object for JSON types)
697
+ * @returns Stored artifact metadata
698
+ */
699
+ async save(stageId, name, type, content) {
700
+ this.ensureInitialized();
701
+ const extension = ARTIFACT_EXTENSIONS[type];
702
+ const filename = `${name}.${extension}`;
703
+ const { stageDir, artifactPath } = resolveArtifactWritePath(
704
+ this.basePath,
705
+ stageId,
706
+ name,
707
+ filename
708
+ );
709
+ await fs.mkdir(stageDir, { recursive: true });
710
+ let serializedContent;
711
+ if (type === "json" || type === "testResults") {
712
+ serializedContent = typeof content === "string" ? content : JSON.stringify(content, null, 2);
713
+ try {
714
+ JSON.parse(serializedContent);
715
+ } catch {
716
+ throw new ArtifactValidationError(
717
+ `${stageId}.${name}`,
718
+ `Content is not valid JSON: ${serializedContent.slice(0, 100)}...`
719
+ );
720
+ }
721
+ } else {
722
+ serializedContent = typeof content === "string" ? content : JSON.stringify(content);
723
+ }
724
+ await writeFileWithParentRetry(artifactPath, serializedContent);
725
+ const artifact = {
726
+ stageId,
727
+ name,
728
+ type,
729
+ path: artifactPath,
730
+ size: Buffer.byteLength(serializedContent, "utf-8"),
731
+ createdAt: /* @__PURE__ */ new Date()
732
+ };
733
+ const key = `${stageId}.${name}`;
734
+ this.metadata.set(key, artifact);
735
+ this.localProducerIds.add(stageId);
736
+ await this.saveMetadata(key, artifact);
737
+ return artifact;
738
+ }
739
+ /**
740
+ * Load an artifact from the store
741
+ *
742
+ * @param ref - Artifact reference in format 'stageId.outputName'
743
+ * @param requestingStageId - ID of the stage requesting the artifact (for error messages)
744
+ * @returns Artifact content as string
745
+ * @throws ArtifactNotFoundError if artifact doesn't exist or escapes the store root
746
+ */
747
+ async load(ref, requestingStageId) {
748
+ const store = this.readStore(ref);
749
+ if (store !== this) return store.load(ref, requestingStageId);
750
+ const { stageId, outputName } = parseArtifactRef(ref);
751
+ const key = `${stageId}.${outputName}`;
752
+ const artifact = this.metadata.get(key);
753
+ if (!artifact) {
754
+ throw new ArtifactNotFoundError(
755
+ ref,
756
+ requestingStageId ?? "unknown",
757
+ `No artifact found for reference '${ref}'. Available artifacts: [${Array.from(this.metadata.keys()).join(", ") || "none"}]`
758
+ );
759
+ }
760
+ const containment = resolveContainedPath(
761
+ this.basePath,
762
+ containmentCandidate(this.basePath, artifact.path)
763
+ );
764
+ if (!containment.contained) {
765
+ throw new ArtifactNotFoundError(
766
+ ref,
767
+ requestingStageId ?? "unknown",
768
+ `Artifact path escapes the workflow artifact directory (${containment.reason}).`
769
+ );
770
+ }
771
+ try {
772
+ return await fs.readFile(containment.canonicalPath, "utf-8");
773
+ } catch (_error) {
774
+ throw new ArtifactNotFoundError(
775
+ ref,
776
+ requestingStageId ?? "unknown",
777
+ `Artifact file not found at '${artifact.path}'. The file may have been deleted.`
778
+ );
779
+ }
780
+ }
781
+ /**
782
+ * Load an artifact and parse as JSON
783
+ *
784
+ * @param ref - Artifact reference
785
+ * @param requestingStageId - ID of the stage requesting the artifact
786
+ * @returns Parsed JSON content
787
+ */
788
+ async loadJson(ref, requestingStageId) {
789
+ const content = await this.load(ref, requestingStageId);
790
+ try {
791
+ return JSON.parse(content);
792
+ } catch {
793
+ throw new ArtifactValidationError(ref, "Artifact content is not valid JSON");
794
+ }
795
+ }
796
+ /**
797
+ * Check if an artifact exists
798
+ *
799
+ * @param ref - Artifact reference
800
+ * @returns true if artifact exists
801
+ */
802
+ has(ref) {
803
+ return this.getMetadata(ref) !== void 0;
804
+ }
805
+ /**
806
+ * Get metadata for an artifact
807
+ *
808
+ * @param ref - Artifact reference
809
+ * @returns Artifact metadata or undefined if not found
810
+ */
811
+ getMetadata(ref) {
812
+ const store = this.readStore(ref);
813
+ const { stageId, outputName } = parseArtifactRef(ref);
814
+ return store.metadata.get(`${stageId}.${outputName}`);
815
+ }
816
+ /**
817
+ * List all artifacts in the store
818
+ *
819
+ * @returns Array of all stored artifact metadata
820
+ */
821
+ list() {
822
+ this.ensureInitialized();
823
+ const inherited = this.scope?.parent.list().filter((artifact) => !this.localProducerIds.has(artifact.stageId)) ?? [];
824
+ return [...inherited, ...this.metadata.values()];
825
+ }
826
+ /**
827
+ * List artifacts for a specific stage
828
+ *
829
+ * @param stageId - Stage ID to filter by
830
+ * @returns Array of artifacts from the specified stage
831
+ */
832
+ listByStage(stageId) {
833
+ return this.list().filter((artifact) => artifact.stageId === stageId);
834
+ }
835
+ /**
836
+ * Resolve multiple artifact inputs and format for prompt injection
837
+ *
838
+ * @param inputs - Array of artifact references
839
+ * @param requestingStageId - ID of the stage requesting the artifacts
840
+ * @returns Formatted string with all artifact contents
841
+ */
842
+ async resolveInputs(inputs, requestingStageId) {
843
+ if (!inputs || inputs.length === 0) {
844
+ return "";
845
+ }
846
+ const resolvedArtifacts = [];
847
+ for (const ref of inputs) {
848
+ const content = filterPatchDiffBySecretPaths(await this.load(ref, requestingStageId));
849
+ const metadata = this.getMetadata(ref);
850
+ const header = `--- Artifact: ${ref} (${metadata?.type ?? "unknown"}) ---`;
851
+ resolvedArtifacts.push(`${header}
852
+ ${content}
853
+ `);
854
+ }
855
+ return resolvedArtifacts.join("\n");
856
+ }
857
+ /**
858
+ * Get the base path for this store
859
+ */
860
+ getBasePath() {
861
+ return this.basePath;
862
+ }
863
+ /**
864
+ * Get the workflow ID
865
+ */
866
+ getWorkflowId() {
867
+ return this.workflowId;
868
+ }
869
+ /**
870
+ * Ensure store is initialized
871
+ */
872
+ ensureInitialized() {
873
+ if (!this.initialized) {
874
+ throw new Error("ArtifactStore not initialized. Call initialize() before using the store.");
875
+ }
876
+ }
877
+ /**
878
+ * Persist a single new or updated artifact entry to _metadata.json.
879
+ *
880
+ * Correctness guarantees:
881
+ * 1. In-process serialisation: chained onto metadataWriteLock so rapid
882
+ * concurrent save() calls on this instance are sequenced.
883
+ * 2. Cross-process serialisation: acquires a proper-lockfile exclusive lock
884
+ * on the metadata file before performing the read-merge-write cycle so
885
+ * concurrent saves from parallel stages in the same or separate processes
886
+ * cannot overwrite each other's entries.
887
+ * 3. Read-merge-write under lock: re-reads _metadata.json from disk while
888
+ * holding the lock, merges the new entry into the on-disk state, then
889
+ * writes back. This prevents the snapshot-then-write problem where a
890
+ * concurrent writer's entries are clobbered by an older in-memory snapshot.
891
+ * 4. Crash safety: uses atomicWriteJson (temp + rename) so a mid-write crash
892
+ * cannot leave a partially-written metadata file.
893
+ *
894
+ * @param newKey - The metadata map key for the entry just written (stageId.name)
895
+ * @param newArtifact - The artifact metadata to persist
896
+ */
897
+ saveMetadata(newKey, newArtifact) {
898
+ this.metadataWriteLock = this.metadataWriteLock.catch(() => {
899
+ }).then(async () => {
900
+ let releaseFileLock;
901
+ try {
902
+ releaseFileLock = await acquireMetadataFileLock(this.metadataPath);
903
+ let onDisk = /* @__PURE__ */ new Map();
904
+ try {
905
+ const raw = await fs.readFile(this.metadataPath, "utf-8");
906
+ onDisk = parsePersistedMetadata(raw, this.basePath).entries;
907
+ } catch (err) {
908
+ if (err.code !== "ENOENT") {
909
+ }
910
+ }
911
+ const merged = new Map(onDisk);
912
+ for (const [k, v] of this.metadata) {
913
+ merged.set(k, v);
914
+ }
915
+ merged.set(newKey, newArtifact);
916
+ for (const [k, v] of merged) {
917
+ this.metadata.set(k, v);
918
+ this.localProducerIds.add(v.stageId);
919
+ }
920
+ await releaseFileLock?.assertOwned();
921
+ await atomicWriteJson(this.metadataPath, Array.from(merged.values()));
922
+ } finally {
923
+ if (releaseFileLock) {
924
+ try {
925
+ await releaseFileLock();
926
+ } catch {
927
+ }
928
+ }
929
+ }
930
+ });
931
+ return this.metadataWriteLock;
932
+ }
933
+ };
934
+ async function resolvePromptArtifacts(prompt, inputs, store, stageId, securityBoundary) {
935
+ const boundary = securityBoundary ?? createSecurityBoundary(store.getWorkflowId());
936
+ let resolvedPrompt = prompt;
937
+ const placeholderPattern = /\{\{artifact:([^}]+)\}\}/g;
938
+ const matches = [...prompt.matchAll(placeholderPattern)];
939
+ for (const match of matches) {
940
+ const ref = match[1] ?? "";
941
+ let content = filterPatchDiffBySecretPaths(await store.load(ref, stageId));
942
+ content = await boundary.sanitizeForPromptInjection(content, "stage-output", stageId);
943
+ resolvedPrompt = resolvedPrompt.split(match[0]).join(content);
944
+ }
945
+ if (inputs && inputs.length > 0) {
946
+ let inputsContext = await store.resolveInputs(inputs, stageId);
947
+ if (inputsContext) {
948
+ inputsContext = await boundary.sanitizeForPromptInjection(
949
+ inputsContext,
950
+ "stage-output",
951
+ stageId
952
+ );
953
+ }
954
+ if (inputsContext) {
955
+ resolvedPrompt = `## Input Artifacts
956
+
957
+ ${inputsContext}
958
+
959
+ ## Task
960
+
961
+ ${resolvedPrompt}`;
962
+ }
963
+ }
964
+ return resolvedPrompt;
965
+ }
966
+
967
+ export {
968
+ PATH_SAFE_IDENTIFIER_PATTERN,
969
+ isPathSafeIdentifier,
970
+ createSecurityBoundary,
971
+ ArtifactNotFoundError,
972
+ parseArtifactRef,
973
+ ArtifactStore,
974
+ resolvePromptArtifacts
975
+ };
976
+ //# sourceMappingURL=chunk-SK3ZFONO.js.map