@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,1087 @@
1
+ import {
2
+ parseJsonWithContext
3
+ } from "./chunk-P6SSWAKY.js";
4
+ import {
5
+ sqlite_wrapper_default
6
+ } from "./chunk-XQPEWJPI.js";
7
+ import {
8
+ applySqlitePragmas
9
+ } from "./chunk-HEP3ILP4.js";
10
+ import {
11
+ resolveBuildDirFromContext
12
+ } from "./chunk-7VRJHTGZ.js";
13
+
14
+ // src/prompts/store.ts
15
+ import crypto from "crypto";
16
+ import fs from "fs";
17
+ import path from "path";
18
+
19
+ // src/core/storage/activation-primitive.ts
20
+ function performActivation(db, input) {
21
+ const now = input.now ?? (/* @__PURE__ */ new Date()).toISOString();
22
+ const tx = db.transaction(() => {
23
+ db.prepare(
24
+ `UPDATE prompt_versions
25
+ SET is_active = 0, deactivated_at = ?
26
+ WHERE prompt_id = ? AND is_active = 1 AND id <> ?`
27
+ ).run(now, input.promptId, input.versionId);
28
+ db.prepare(
29
+ `UPDATE prompt_versions
30
+ SET is_active = 1,
31
+ activated_at = CASE
32
+ WHEN is_active = 1 THEN activated_at
33
+ ELSE ?
34
+ END
35
+ WHERE prompt_id = ? AND id = ?`
36
+ ).run(now, input.promptId, input.versionId);
37
+ db.prepare(
38
+ `UPDATE prompts
39
+ SET active_version_id = ?, current_version = ?, updated_at = ?
40
+ WHERE id = ?`
41
+ ).run(input.versionId, input.versionId, now, input.promptId);
42
+ });
43
+ tx();
44
+ }
45
+
46
+ // src/core/storage/prompt-version-indexes.ts
47
+ var PROMPT_VERSION_INDEXES_SQL = " CREATE INDEX IF NOT EXISTS idx_versions_prompt ON prompt_versions(prompt_id);\n CREATE INDEX IF NOT EXISTS idx_versions_active ON prompt_versions(prompt_id, is_active);";
48
+
49
+ // src/prompts/legacy-version-columns.ts
50
+ function hasVersionColumn(db, column) {
51
+ const columns = db.prepare("PRAGMA table_info(prompt_versions)").all();
52
+ return columns.some((entry) => entry.name === column);
53
+ }
54
+ function readInlineVersionContent(db, promptId, versionId) {
55
+ if (!hasVersionColumn(db, "content")) return void 0;
56
+ const row = db.prepare("SELECT content FROM prompt_versions WHERE prompt_id = ? AND id = ?").get(promptId, versionId);
57
+ return typeof row?.content === "string" ? row.content : void 0;
58
+ }
59
+ function readVersionOrder(db, promptId) {
60
+ const numberColumn = hasVersionColumn(db, "version_number") ? "version_number" : "NULL";
61
+ return db.prepare(
62
+ `SELECT id, ${numberColumn} AS versionNumber FROM prompt_versions WHERE prompt_id = ? ORDER BY rowid ASC`
63
+ ).all(promptId);
64
+ }
65
+
66
+ // src/prompts/store.ts
67
+ var PROMPT_ID_PATTERN = /^[a-z0-9-]+$/;
68
+ var LEGACY_PROMPT_ID_PATTERN = /^[a-z0-9][a-z0-9_-]*$/;
69
+ var VERSION_ID_PATTERN = /^[a-z0-9][a-z0-9._-]*$/i;
70
+ var LIKE_WILDCARD_CHARACTERS = /[%_]/g;
71
+ function escapeLikePattern(value) {
72
+ return value.replace(LIKE_WILDCARD_CHARACTERS, "\\$&");
73
+ }
74
+ function assertSafePromptId(promptId) {
75
+ if (!PROMPT_ID_PATTERN.test(promptId) && !LEGACY_PROMPT_ID_PATTERN.test(promptId)) {
76
+ throw new Error(
77
+ "Prompt ID must be a safe identifier (lowercase letters, numbers, hyphens; legacy underscores are readable)"
78
+ );
79
+ }
80
+ if (promptId.includes("/") || promptId.includes("\\")) {
81
+ throw new Error("Prompt ID cannot contain path separators");
82
+ }
83
+ }
84
+ function assertSafeVersionId(versionId) {
85
+ if (!VERSION_ID_PATTERN.test(versionId)) {
86
+ throw new Error(
87
+ "Version ID must start with an alphanumeric character and may only include dots, underscores, or hyphens"
88
+ );
89
+ }
90
+ if (versionId.includes("/") || versionId.includes("\\")) {
91
+ throw new Error("Version ID cannot contain path separators");
92
+ }
93
+ }
94
+ function atomicWriteTextSync(filePath, content) {
95
+ const dir = path.dirname(filePath);
96
+ fs.mkdirSync(dir, { recursive: true });
97
+ const tempPath = path.join(
98
+ dir,
99
+ `.tmp.${process.pid}.${Date.now()}.${crypto.randomBytes(8).toString("hex")}`
100
+ );
101
+ let fd;
102
+ try {
103
+ fd = fs.openSync(tempPath, "wx");
104
+ fs.writeFileSync(fd, content, "utf8");
105
+ fs.fsyncSync(fd);
106
+ fs.closeSync(fd);
107
+ fd = void 0;
108
+ fs.renameSync(tempPath, filePath);
109
+ } catch (error) {
110
+ if (fd !== void 0) {
111
+ try {
112
+ fs.closeSync(fd);
113
+ } catch {
114
+ }
115
+ }
116
+ try {
117
+ fs.unlinkSync(tempPath);
118
+ } catch {
119
+ }
120
+ throw error;
121
+ }
122
+ }
123
+ var PromptStore = class {
124
+ buildDir;
125
+ promptsDir;
126
+ dbDir;
127
+ activeDir;
128
+ archivedDir;
129
+ templatesDir;
130
+ db;
131
+ constructor(options = {}) {
132
+ this.buildDir = resolveBuildDirFromContext(options.buildDir);
133
+ this.promptsDir = path.join(this.buildDir, "prompts");
134
+ this.dbDir = path.join(this.promptsDir, "db");
135
+ this.activeDir = path.join(this.promptsDir, "active");
136
+ this.archivedDir = path.join(this.promptsDir, "archived");
137
+ this.templatesDir = path.join(this.promptsDir, "templates");
138
+ this.ensureDirectories();
139
+ if (!sqlite_wrapper_default) {
140
+ throw new Error("Database constructor not available");
141
+ }
142
+ const DatabaseConstructor = sqlite_wrapper_default;
143
+ this.db = new DatabaseConstructor(path.join(this.dbDir, "prompts.db"));
144
+ if (this.db.defaultSafeIntegers) {
145
+ this.db.defaultSafeIntegers(false);
146
+ }
147
+ applySqlitePragmas(this.db, { foreignKeys: true });
148
+ this.initSchema();
149
+ }
150
+ /**
151
+ * Ensure all required directories exist
152
+ */
153
+ ensureDirectories() {
154
+ [this.promptsDir, this.dbDir, this.activeDir, this.archivedDir, this.templatesDir].forEach(
155
+ (dir) => {
156
+ if (!fs.existsSync(dir)) {
157
+ fs.mkdirSync(dir, { recursive: true });
158
+ }
159
+ }
160
+ );
161
+ }
162
+ /**
163
+ * Initialize database schema
164
+ */
165
+ initSchema() {
166
+ this.db.exec(`
167
+ CREATE TABLE IF NOT EXISTS prompts (
168
+ id TEXT PRIMARY KEY,
169
+ name TEXT NOT NULL,
170
+ description TEXT NOT NULL,
171
+ category TEXT NOT NULL,
172
+ status TEXT NOT NULL,
173
+ variant TEXT,
174
+ tags TEXT NOT NULL,
175
+ auto_opt_in INTEGER DEFAULT 0,
176
+ current_version TEXT NOT NULL,
177
+ active_version_id TEXT,
178
+ created_at TEXT NOT NULL,
179
+ updated_at TEXT NOT NULL,
180
+ archived_at TEXT,
181
+ usage_count INTEGER DEFAULT 0,
182
+ last_used_at TEXT,
183
+ UNIQUE(name, category)
184
+ );
185
+
186
+ CREATE INDEX IF NOT EXISTS idx_prompts_category ON prompts(category);
187
+ CREATE INDEX IF NOT EXISTS idx_prompts_updated ON prompts(updated_at DESC);
188
+ `);
189
+ const promptColumns = this.db.prepare("PRAGMA table_info(prompts)").all();
190
+ const promptColumnNames = promptColumns.map((col) => col.name);
191
+ if (!promptColumnNames.includes("auto_opt_in")) {
192
+ this.db.exec("ALTER TABLE prompts ADD COLUMN auto_opt_in INTEGER DEFAULT 0");
193
+ }
194
+ if (!promptColumnNames.includes("active_version_id")) {
195
+ this.db.exec("ALTER TABLE prompts ADD COLUMN active_version_id TEXT");
196
+ }
197
+ if (!promptColumnNames.includes("current_version")) {
198
+ this.db.exec("ALTER TABLE prompts ADD COLUMN current_version TEXT");
199
+ this.db.exec(
200
+ "UPDATE prompts SET current_version = active_version_id WHERE current_version IS NULL"
201
+ );
202
+ }
203
+ if (!promptColumnNames.includes("status")) {
204
+ this.db.exec("ALTER TABLE prompts ADD COLUMN status TEXT NOT NULL DEFAULT 'active'");
205
+ }
206
+ if (!promptColumnNames.includes("variant")) {
207
+ this.db.exec("ALTER TABLE prompts ADD COLUMN variant TEXT");
208
+ }
209
+ if (!promptColumnNames.includes("tags")) {
210
+ this.db.exec("ALTER TABLE prompts ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'");
211
+ }
212
+ if (!promptColumnNames.includes("archived_at")) {
213
+ this.db.exec("ALTER TABLE prompts ADD COLUMN archived_at TEXT");
214
+ }
215
+ if (!promptColumnNames.includes("usage_count")) {
216
+ this.db.exec("ALTER TABLE prompts ADD COLUMN usage_count INTEGER DEFAULT 0");
217
+ }
218
+ if (!promptColumnNames.includes("last_used_at")) {
219
+ this.db.exec("ALTER TABLE prompts ADD COLUMN last_used_at TEXT");
220
+ }
221
+ this.db.exec("CREATE INDEX IF NOT EXISTS idx_prompts_status ON prompts(status)");
222
+ this.db.exec("CREATE INDEX IF NOT EXISTS idx_prompts_variant ON prompts(variant)");
223
+ this.db.exec(
224
+ "CREATE INDEX IF NOT EXISTS idx_prompts_active_version ON prompts(active_version_id)"
225
+ );
226
+ this.db.exec(`
227
+ CREATE TABLE IF NOT EXISTS prompt_versions (
228
+ id TEXT NOT NULL,
229
+ prompt_id TEXT NOT NULL,
230
+ content_hash TEXT NOT NULL,
231
+ changelog TEXT,
232
+ author TEXT,
233
+ is_active INTEGER DEFAULT 0,
234
+ is_generated INTEGER DEFAULT 0,
235
+ generation_model TEXT,
236
+ generation_prompt TEXT,
237
+ created_at TEXT NOT NULL,
238
+ activated_at TEXT,
239
+ deactivated_at TEXT,
240
+ parent_version_id TEXT,
241
+ mutation_type TEXT,
242
+ optimization_metadata TEXT,
243
+ generated_by TEXT,
244
+ activated_by TEXT,
245
+ performance_score REAL,
246
+ PRIMARY KEY (prompt_id, id),
247
+ FOREIGN KEY (prompt_id) REFERENCES prompts(id) ON DELETE CASCADE
248
+ );
249
+
250
+ ${PROMPT_VERSION_INDEXES_SQL}
251
+ `);
252
+ const versionColumns = this.db.prepare("PRAGMA table_info(prompt_versions)").all();
253
+ const versionColumnNames = versionColumns.map((col) => col.name);
254
+ if (!versionColumnNames.includes("content_hash")) {
255
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN content_hash TEXT NOT NULL DEFAULT ''");
256
+ }
257
+ if (versionColumnNames.includes("content")) {
258
+ const legacyRows = this.db.prepare("SELECT prompt_id, id, content, content_hash FROM prompt_versions").all();
259
+ const invalidHash = /^(?:sha256:)?[a-f0-9]{64}$/i;
260
+ const updateHash = this.db.prepare(
261
+ "UPDATE prompt_versions SET content_hash = ? WHERE prompt_id = ? AND id = ?"
262
+ );
263
+ const applyBackfill = () => {
264
+ for (const row of legacyRows) {
265
+ if (typeof row.content !== "string" || invalidHash.test(row.content_hash.trim()))
266
+ continue;
267
+ updateHash.run(this.hashContent(row.content), row.prompt_id, row.id);
268
+ }
269
+ };
270
+ if (this.db.transaction) {
271
+ this.db.transaction(applyBackfill)();
272
+ } else {
273
+ applyBackfill();
274
+ }
275
+ }
276
+ if (!versionColumnNames.includes("changelog")) {
277
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN changelog TEXT");
278
+ }
279
+ if (!versionColumnNames.includes("author")) {
280
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN author TEXT");
281
+ }
282
+ if (!versionColumnNames.includes("is_generated")) {
283
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN is_generated INTEGER DEFAULT 0");
284
+ }
285
+ if (!versionColumnNames.includes("generation_model")) {
286
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN generation_model TEXT");
287
+ }
288
+ if (!versionColumnNames.includes("generation_prompt")) {
289
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN generation_prompt TEXT");
290
+ }
291
+ if (!versionColumnNames.includes("activated_at")) {
292
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN activated_at TEXT");
293
+ }
294
+ if (!versionColumnNames.includes("deactivated_at")) {
295
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN deactivated_at TEXT");
296
+ }
297
+ if (!versionColumnNames.includes("parent_version_id")) {
298
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN parent_version_id TEXT");
299
+ }
300
+ if (!versionColumnNames.includes("mutation_type")) {
301
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN mutation_type TEXT");
302
+ }
303
+ if (!versionColumnNames.includes("optimization_metadata")) {
304
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN optimization_metadata TEXT");
305
+ }
306
+ if (!versionColumnNames.includes("generated_by")) {
307
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN generated_by TEXT");
308
+ }
309
+ if (!versionColumnNames.includes("activated_by")) {
310
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN activated_by TEXT");
311
+ }
312
+ if (!versionColumnNames.includes("performance_score")) {
313
+ this.db.exec("ALTER TABLE prompt_versions ADD COLUMN performance_score REAL");
314
+ }
315
+ this.db.exec("CREATE INDEX IF NOT EXISTS idx_versions_hash ON prompt_versions(content_hash)");
316
+ this.db.exec(`
317
+ CREATE INDEX IF NOT EXISTS idx_versions_parent ON prompt_versions(parent_version_id);
318
+ CREATE INDEX IF NOT EXISTS idx_versions_lineage ON prompt_versions(prompt_id, parent_version_id);
319
+ CREATE INDEX IF NOT EXISTS idx_versions_mutation_type ON prompt_versions(mutation_type);
320
+ CREATE INDEX IF NOT EXISTS idx_versions_performance ON prompt_versions(performance_score DESC);
321
+ `);
322
+ this.db.exec(`
323
+ CREATE TABLE IF NOT EXISTS prompt_performance (
324
+ prompt_id TEXT NOT NULL,
325
+ version_id TEXT NOT NULL,
326
+ variant TEXT,
327
+ total_executions INTEGER DEFAULT 0,
328
+ successful_executions INTEGER DEFAULT 0,
329
+ failed_executions INTEGER DEFAULT 0,
330
+ success_rate REAL DEFAULT 0,
331
+ avg_completeness REAL DEFAULT 0,
332
+ avg_code_delivery_rate REAL DEFAULT 0,
333
+ avg_duration REAL DEFAULT 0,
334
+ min_completeness REAL DEFAULT 0,
335
+ max_completeness REAL DEFAULT 0,
336
+ std_dev_completeness REAL DEFAULT 0,
337
+ sample_size INTEGER DEFAULT 0,
338
+ first_execution_at TEXT,
339
+ last_execution_at TEXT,
340
+ calculated_at TEXT NOT NULL,
341
+ PRIMARY KEY (prompt_id, version_id, variant),
342
+ FOREIGN KEY (prompt_id, version_id) REFERENCES prompt_versions(prompt_id, id) ON DELETE CASCADE
343
+ );
344
+
345
+ CREATE INDEX IF NOT EXISTS idx_performance_version ON prompt_performance(version_id);
346
+ CREATE INDEX IF NOT EXISTS idx_performance_variant ON prompt_performance(variant);
347
+ CREATE INDEX IF NOT EXISTS idx_performance_success_rate ON prompt_performance(success_rate DESC);
348
+ `);
349
+ this.db.exec(`
350
+ CREATE TABLE IF NOT EXISTS prompt_variants (
351
+ id TEXT PRIMARY KEY,
352
+ prompt_id TEXT NOT NULL,
353
+ base_version_id TEXT NOT NULL,
354
+ mutation_strategies TEXT NOT NULL,
355
+ success_rate REAL,
356
+ completeness REAL,
357
+ duration_ms INTEGER,
358
+ confidence REAL,
359
+ expected_improvement REAL,
360
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP,
361
+ FOREIGN KEY (prompt_id) REFERENCES prompts(id) ON DELETE CASCADE,
362
+ FOREIGN KEY (prompt_id, base_version_id) REFERENCES prompt_versions(prompt_id, id) ON DELETE CASCADE
363
+ );
364
+
365
+ CREATE INDEX IF NOT EXISTS idx_variants_prompt ON prompt_variants(prompt_id, created_at DESC);
366
+ CREATE INDEX IF NOT EXISTS idx_variants_base_version ON prompt_variants(base_version_id);
367
+ CREATE INDEX IF NOT EXISTS idx_variants_performance ON prompt_variants(success_rate DESC, completeness DESC);
368
+ CREATE INDEX IF NOT EXISTS idx_variants_strategies ON prompt_variants(mutation_strategies);
369
+ CREATE INDEX IF NOT EXISTS idx_variants_confidence ON prompt_variants(confidence DESC);
370
+ `);
371
+ this.db.exec(`
372
+ CREATE TABLE IF NOT EXISTS activation_history (
373
+ id TEXT PRIMARY KEY,
374
+ prompt_id TEXT NOT NULL,
375
+ version_id TEXT NOT NULL,
376
+ activated_at TEXT DEFAULT CURRENT_TIMESTAMP,
377
+ activated_by TEXT,
378
+ reason TEXT,
379
+ FOREIGN KEY (prompt_id) REFERENCES prompts(id) ON DELETE CASCADE
380
+ );
381
+
382
+ CREATE INDEX IF NOT EXISTS idx_activation_prompt_timeline ON activation_history(prompt_id, activated_at DESC);
383
+ CREATE INDEX IF NOT EXISTS idx_activation_version ON activation_history(version_id, activated_at DESC);
384
+ CREATE INDEX IF NOT EXISTS idx_activation_by ON activation_history(activated_by, activated_at DESC);
385
+ CREATE INDEX IF NOT EXISTS idx_activation_recent ON activation_history(activated_at DESC);
386
+ `);
387
+ }
388
+ promptVersionsHasColumn(columnName) {
389
+ const columns = this.db.prepare("PRAGMA table_info(prompt_versions)").all();
390
+ return columns.some((column) => column.name === columnName);
391
+ }
392
+ nextLegacyVersionNumber(promptId) {
393
+ const row = this.db.prepare("SELECT MAX(version_number) as maxVersion FROM prompt_versions WHERE prompt_id = ?").get(promptId);
394
+ return (row?.maxVersion ?? 0) + 1;
395
+ }
396
+ createPrompt(inputOrId, name, description, category, variant, tags = []) {
397
+ const now = (/* @__PURE__ */ new Date()).toISOString();
398
+ const data = typeof inputOrId === "object" ? {
399
+ id: inputOrId.id,
400
+ name: inputOrId.name,
401
+ description: inputOrId.description,
402
+ category: inputOrId.category,
403
+ status: inputOrId.status ?? "active",
404
+ variant: inputOrId.variant,
405
+ tags: inputOrId.tags ?? [],
406
+ currentVersion: inputOrId.currentVersion ?? "",
407
+ autoOptimize: inputOrId.autoOptimize ?? false
408
+ } : {
409
+ id: inputOrId,
410
+ name: name ?? "",
411
+ description: description ?? "",
412
+ category,
413
+ status: "active",
414
+ variant,
415
+ tags,
416
+ currentVersion: "",
417
+ autoOptimize: false
418
+ };
419
+ if (!data.id || !data.name || typeof data.description !== "string" || !data.category) {
420
+ throw new Error("createPrompt requires id, name, description, and category");
421
+ }
422
+ if (!PROMPT_ID_PATTERN.test(data.id)) {
423
+ throw new Error("Prompt ID must be a valid slug (lowercase, numbers, hyphens only)");
424
+ }
425
+ const existing = this.getPrompt(data.id);
426
+ if (existing) {
427
+ throw new Error(`Prompt with ID "${data.id}" already exists`);
428
+ }
429
+ const promptDirBase = data.status === "archived" ? this.archivedDir : this.activeDir;
430
+ const promptDir = path.join(promptDirBase, data.id);
431
+ if (!fs.existsSync(promptDir)) {
432
+ fs.mkdirSync(promptDir, { recursive: true });
433
+ }
434
+ const stmt = this.db.prepare(`
435
+ INSERT INTO prompts (
436
+ id, name, description, category, status, variant, tags,
437
+ auto_opt_in, current_version, created_at, updated_at, archived_at
438
+ )
439
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
440
+ `);
441
+ stmt.run(
442
+ data.id,
443
+ data.name,
444
+ data.description,
445
+ data.category,
446
+ data.status,
447
+ data.variant || null,
448
+ JSON.stringify(data.tags),
449
+ data.autoOptimize ? 1 : 0,
450
+ data.currentVersion,
451
+ now,
452
+ now,
453
+ data.status === "archived" ? now : null
454
+ );
455
+ return this.getPrompt(data.id);
456
+ }
457
+ /**
458
+ * Get a prompt by ID
459
+ */
460
+ getPrompt(id) {
461
+ const stmt = this.db.prepare("SELECT * FROM prompts WHERE id = ?");
462
+ const row = stmt.get(id);
463
+ if (!row) {
464
+ return null;
465
+ }
466
+ return this.rowToPrompt(row);
467
+ }
468
+ /**
469
+ * Update a prompt
470
+ */
471
+ updatePrompt(id, updates) {
472
+ const existing = this.getPrompt(id);
473
+ if (!existing) {
474
+ return null;
475
+ }
476
+ const now = (/* @__PURE__ */ new Date()).toISOString();
477
+ const setClauses = [];
478
+ const values = [];
479
+ if (updates.name !== void 0) {
480
+ setClauses.push("name = ?");
481
+ values.push(updates.name);
482
+ }
483
+ if (updates.description !== void 0) {
484
+ setClauses.push("description = ?");
485
+ values.push(updates.description);
486
+ }
487
+ if (updates.status !== void 0) {
488
+ setClauses.push("status = ?");
489
+ values.push(updates.status);
490
+ if (updates.status !== void 0 && updates.status !== "archived" && updates.status !== "active") {
491
+ }
492
+ if (updates.status === "archived" && existing.status !== "archived") {
493
+ setClauses.push("archived_at = ?");
494
+ values.push(now);
495
+ } else if (updates.status !== "archived" && existing.status === "archived") {
496
+ setClauses.push("archived_at = ?");
497
+ values.push(null);
498
+ }
499
+ }
500
+ if (updates.variant !== void 0) {
501
+ setClauses.push("variant = ?");
502
+ values.push(updates.variant || null);
503
+ }
504
+ if (updates.category !== void 0) {
505
+ setClauses.push("category = ?");
506
+ values.push(updates.category);
507
+ }
508
+ if (updates.tags !== void 0) {
509
+ setClauses.push("tags = ?");
510
+ values.push(JSON.stringify(updates.tags));
511
+ }
512
+ if (updates.autoOptimize !== void 0) {
513
+ setClauses.push("auto_opt_in = ?");
514
+ values.push(updates.autoOptimize ? 1 : 0);
515
+ }
516
+ setClauses.push("updated_at = ?");
517
+ values.push(now);
518
+ values.push(id);
519
+ const stmt = this.db.prepare(`
520
+ UPDATE prompts
521
+ SET ${setClauses.join(", ")}
522
+ WHERE id = ?
523
+ `);
524
+ stmt.run(...values);
525
+ if (updates.status !== void 0) {
526
+ try {
527
+ if (updates.status === "archived" && existing.status !== "archived") {
528
+ this.movePromptFiles(id, "active", "archived");
529
+ } else if (updates.status !== "archived" && existing.status === "archived") {
530
+ this.movePromptFiles(id, "archived", "active");
531
+ }
532
+ } catch (moveErr) {
533
+ try {
534
+ const revertStmt = this.db.prepare(
535
+ "UPDATE prompts SET status = ?, archived_at = ?, updated_at = ? WHERE id = ?"
536
+ );
537
+ revertStmt.run(
538
+ existing.status,
539
+ existing.status === "archived" ? existing.archivedAt ?? now : null,
540
+ now,
541
+ id
542
+ );
543
+ } catch {
544
+ }
545
+ throw moveErr;
546
+ }
547
+ }
548
+ return this.getPrompt(id);
549
+ }
550
+ /**
551
+ * Delete a prompt and all its versions
552
+ */
553
+ deletePrompt(id) {
554
+ const prompt = this.getPrompt(id);
555
+ if (!prompt) {
556
+ return false;
557
+ }
558
+ try {
559
+ const versions = this.listVersions(id);
560
+ const stmt = this.db.prepare("DELETE FROM prompts WHERE id = ?");
561
+ const result = stmt.run(id);
562
+ for (const version of versions) {
563
+ const contentPath = this.getVersionContentPath(id, version.id, prompt.status);
564
+ if (fs.existsSync(contentPath)) {
565
+ fs.unlinkSync(contentPath);
566
+ }
567
+ }
568
+ return result.changes > 0;
569
+ } catch (error) {
570
+ console.error(`Error deleting prompt ${id}:`, error);
571
+ throw error;
572
+ }
573
+ }
574
+ /**
575
+ * List prompts with optional filtering and pagination
576
+ */
577
+ listPrompts(criteria = {}) {
578
+ let query = "SELECT * FROM prompts WHERE 1=1";
579
+ const params = [];
580
+ if (criteria.category) {
581
+ query += " AND category = ?";
582
+ params.push(criteria.category);
583
+ }
584
+ if (criteria.status) {
585
+ query += " AND status = ?";
586
+ params.push(criteria.status);
587
+ }
588
+ if (criteria.variant) {
589
+ query += " AND variant = ?";
590
+ params.push(criteria.variant);
591
+ }
592
+ if (criteria.minUsageCount !== void 0) {
593
+ query += " AND usage_count >= ?";
594
+ params.push(criteria.minUsageCount);
595
+ }
596
+ if (criteria.tags && criteria.tags.length > 0) {
597
+ const normalizedTags = criteria.tags.map((tag) => typeof tag === "string" ? tag.trim() : "").filter((tag) => tag.length > 0);
598
+ normalizedTags.forEach((tag) => {
599
+ query += " AND tags LIKE ? ESCAPE '\\'";
600
+ params.push(`%"${escapeLikePattern(tag)}"%`);
601
+ });
602
+ }
603
+ if (criteria.autoOptimize !== void 0) {
604
+ query += " AND auto_opt_in = ?";
605
+ params.push(criteria.autoOptimize ? 1 : 0);
606
+ }
607
+ if (criteria.query) {
608
+ query += " AND (name LIKE ? ESCAPE '\\' OR description LIKE ? ESCAPE '\\')";
609
+ const searchPattern = `%${escapeLikePattern(criteria.query)}%`;
610
+ params.push(searchPattern, searchPattern);
611
+ }
612
+ const sortBy = criteria.sortBy || "updatedAt";
613
+ const sortOrder = (criteria.sortOrder || "desc").toLowerCase();
614
+ const sortColumn = {
615
+ name: "name",
616
+ createdAt: "created_at",
617
+ updatedAt: "updated_at",
618
+ usageCount: "usage_count",
619
+ successRate: "usage_count",
620
+ avgCompleteness: "usage_count"
621
+ }[sortBy] || "updated_at";
622
+ const sortDirection = sortOrder === "asc" ? "ASC" : "DESC";
623
+ query += ` ORDER BY ${sortColumn} ${sortDirection}`;
624
+ if (sortColumn !== "updated_at") {
625
+ query += ", updated_at DESC";
626
+ }
627
+ query += `, id ${sortDirection}`;
628
+ const hasLimit = typeof criteria.limit === "number";
629
+ const hasOffset = typeof criteria.offset === "number";
630
+ if (hasLimit) {
631
+ query += " LIMIT ?";
632
+ params.push(criteria.limit);
633
+ }
634
+ if (!hasLimit && hasOffset) {
635
+ query += " LIMIT -1";
636
+ }
637
+ if (hasOffset) {
638
+ query += " OFFSET ?";
639
+ params.push(criteria.offset);
640
+ }
641
+ const stmt = this.db.prepare(query);
642
+ const rows = stmt.all(...params);
643
+ return rows.map((row) => this.rowToPrompt(row));
644
+ }
645
+ createVersion(inputOrPromptId, versionId, content, options = {}) {
646
+ const data = typeof inputOrPromptId === "object" ? {
647
+ promptId: inputOrPromptId.promptId,
648
+ versionId: inputOrPromptId.id,
649
+ content: inputOrPromptId.content,
650
+ changelog: inputOrPromptId.changelog,
651
+ author: inputOrPromptId.author,
652
+ isGenerated: inputOrPromptId.isGenerated,
653
+ generationModel: inputOrPromptId.generationModel,
654
+ generationPrompt: inputOrPromptId.generationPrompt,
655
+ activate: inputOrPromptId.activate ?? inputOrPromptId.isActive ?? false
656
+ } : {
657
+ promptId: inputOrPromptId,
658
+ versionId: versionId ?? "",
659
+ content: content ?? "",
660
+ changelog: options.changelog,
661
+ author: options.author,
662
+ isGenerated: options.isGenerated,
663
+ generationModel: options.generationModel,
664
+ generationPrompt: options.generationPrompt,
665
+ activate: options.activate ?? false
666
+ };
667
+ if (!data.promptId || !data.versionId || data.content === void 0) {
668
+ throw new Error("createVersion requires promptId, versionId, and content");
669
+ }
670
+ const prompt = this.getPrompt(data.promptId);
671
+ if (!prompt) {
672
+ throw new Error(`Prompt with ID "${data.promptId}" not found`);
673
+ }
674
+ const now = (/* @__PURE__ */ new Date()).toISOString();
675
+ const contentHash = this.hashContent(data.content);
676
+ const duplicateStmt = this.db.prepare(
677
+ "SELECT id FROM prompt_versions WHERE prompt_id = ? AND content_hash = ?"
678
+ );
679
+ const duplicate = duplicateStmt.get(data.promptId, contentHash);
680
+ if (duplicate) {
681
+ throw new Error("A version with identical content already exists");
682
+ }
683
+ if (!this.db.transaction) {
684
+ throw new Error("Database transaction not available");
685
+ }
686
+ const transaction = this.db.transaction(() => {
687
+ const versionColumns = [
688
+ "id",
689
+ "prompt_id",
690
+ "content_hash",
691
+ "changelog",
692
+ "author",
693
+ "is_active",
694
+ "is_generated",
695
+ "generation_model",
696
+ "generation_prompt",
697
+ "created_at",
698
+ "activated_at"
699
+ ];
700
+ const versionValues = [
701
+ data.versionId,
702
+ data.promptId,
703
+ contentHash,
704
+ data.changelog || null,
705
+ data.author || null,
706
+ 0,
707
+ data.isGenerated ? 1 : 0,
708
+ data.generationModel || null,
709
+ data.generationPrompt || null,
710
+ now,
711
+ null
712
+ ];
713
+ if (this.promptVersionsHasColumn("version_number")) {
714
+ versionColumns.splice(2, 0, "version_number");
715
+ versionValues.splice(2, 0, this.nextLegacyVersionNumber(data.promptId));
716
+ }
717
+ if (this.promptVersionsHasColumn("content")) {
718
+ versionColumns.push("content");
719
+ versionValues.push(data.content);
720
+ }
721
+ if (this.promptVersionsHasColumn("created_by")) {
722
+ versionColumns.push("created_by");
723
+ versionValues.push(data.author || "unknown");
724
+ }
725
+ const placeholders = versionColumns.map(() => "?").join(", ");
726
+ const stmt = this.db.prepare(`
727
+ INSERT INTO prompt_versions (${versionColumns.join(", ")})
728
+ VALUES (${placeholders})
729
+ `);
730
+ stmt.run(...versionValues);
731
+ try {
732
+ this.saveVersionContent(data.promptId, data.versionId, data.content, prompt.status);
733
+ if (data.activate) {
734
+ performActivation(this.db, {
735
+ promptId: data.promptId,
736
+ versionId: data.versionId,
737
+ now
738
+ });
739
+ }
740
+ } catch (error) {
741
+ try {
742
+ this.deleteVersionContent(data.promptId, data.versionId, prompt.status);
743
+ } catch {
744
+ }
745
+ throw error;
746
+ }
747
+ });
748
+ transaction();
749
+ return this.getVersion(data.promptId, data.versionId);
750
+ }
751
+ getVersion(idOrPromptId, versionId) {
752
+ if (typeof versionId === "string") {
753
+ const stmt2 = this.db.prepare("SELECT * FROM prompt_versions WHERE prompt_id = ? AND id = ?");
754
+ const row = stmt2.get(idOrPromptId, versionId);
755
+ if (!row) return null;
756
+ return this.rowToVersion(row);
757
+ }
758
+ const stmt = this.db.prepare("SELECT * FROM prompt_versions WHERE id = ?");
759
+ const rows = stmt.all(idOrPromptId);
760
+ if (rows.length === 0) return null;
761
+ if (rows.length > 1) {
762
+ throw new Error(
763
+ `Version ID "${idOrPromptId}" is ambiguous (matches ${rows.length} prompts); pass promptId explicitly`
764
+ );
765
+ }
766
+ return this.rowToVersion(rows[0]);
767
+ }
768
+ /**
769
+ * Get active version for a prompt
770
+ */
771
+ getActiveVersion(promptId) {
772
+ const stmt = this.db.prepare(
773
+ "SELECT * FROM prompt_versions WHERE prompt_id = ? AND is_active = 1"
774
+ );
775
+ const row = stmt.get(promptId);
776
+ if (!row) {
777
+ return null;
778
+ }
779
+ return this.rowToVersion(row);
780
+ }
781
+ /**
782
+ * List all versions for a prompt
783
+ */
784
+ listVersions(promptId) {
785
+ const stmt = this.db.prepare(
786
+ "SELECT * FROM prompt_versions WHERE prompt_id = ? ORDER BY created_at DESC"
787
+ );
788
+ const rows = stmt.all(promptId);
789
+ return rows.map((row) => this.rowToVersion(row));
790
+ }
791
+ /** List versions, newest first, without reading any version's content. */
792
+ listVersionMetadata(promptId) {
793
+ const stmt = this.db.prepare(
794
+ "SELECT * FROM prompt_versions WHERE prompt_id = ? ORDER BY created_at DESC"
795
+ );
796
+ return stmt.all(promptId).map((row) => this.rowToVersionMetadata(row));
797
+ }
798
+ /**
799
+ * Activate a version
800
+ */
801
+ activateVersion(promptId, versionId, reason) {
802
+ const version = this.getVersion(promptId, versionId);
803
+ if (!version) {
804
+ throw new Error(`Version "${versionId}" not found for prompt "${promptId}"`);
805
+ }
806
+ if (!this.db.transaction) {
807
+ throw new Error("Database transaction not available");
808
+ }
809
+ performActivation(this.db, { promptId, versionId });
810
+ this.recordActivationHistory(promptId, versionId, reason || "manual:activate");
811
+ }
812
+ /**
813
+ * Sync helper that writes one row into activation_history. Best-effort:
814
+ * the primary activation has already been performed by the caller, so a
815
+ * history-write failure must not abort it. Failures are surfaced via a
816
+ * console warning so test runs and ops surfaces still see them.
817
+ */
818
+ recordActivationHistory(promptId, versionId, reason) {
819
+ try {
820
+ const now = (/* @__PURE__ */ new Date()).toISOString();
821
+ const recordId = `activation-${promptId}-${versionId}-${Date.now()}`;
822
+ const stmt = this.db.prepare(`
823
+ INSERT INTO activation_history (
824
+ id, prompt_id, version_id, activated_at, activated_by, reason
825
+ )
826
+ VALUES (?, ?, ?, ?, ?, ?)
827
+ `);
828
+ stmt.run(recordId, promptId, versionId, now, "system:version-activation", reason);
829
+ } catch (error) {
830
+ console.warn(
831
+ `[prompts] activation_history insert failed for ${promptId}/${versionId}: ${error.message}`
832
+ );
833
+ }
834
+ }
835
+ /**
836
+ * Get performance metrics for a version
837
+ */
838
+ getPerformanceMetrics(versionId, variant) {
839
+ let query = "SELECT * FROM prompt_performance WHERE version_id = ?";
840
+ const params = [versionId];
841
+ if (variant) {
842
+ query += " AND variant = ?";
843
+ params.push(variant);
844
+ }
845
+ const stmt = this.db.prepare(query);
846
+ const row = stmt.get(...params);
847
+ if (!row) {
848
+ return null;
849
+ }
850
+ return this.rowToPerformance(row);
851
+ }
852
+ /**
853
+ * Get version content from its side file, falling back to the legacy inline column
854
+ */
855
+ getVersionContent(promptId, versionId, status = "active") {
856
+ const contentPath = this.getVersionContentPath(promptId, versionId, status);
857
+ if (!fs.existsSync(contentPath)) {
858
+ const inline = readInlineVersionContent(this.db, promptId, versionId);
859
+ if (inline !== void 0) return inline;
860
+ throw new Error(`Content file not found for version ${versionId}`);
861
+ }
862
+ return fs.readFileSync(contentPath, "utf8");
863
+ }
864
+ /** Version ids in creation order; display numbers (`v1`, `v2`) derive from it. */
865
+ listVersionOrder(promptId) {
866
+ return readVersionOrder(this.db, promptId);
867
+ }
868
+ /**
869
+ * Creates a new version of an existing prompt with content
870
+ *
871
+ * Tracks parent version for lineage and validates prompt exists.
872
+ *
873
+ * @param promptId - ID of the prompt to version
874
+ * @param content - New version content
875
+ * @param options - Optional metadata (changelog, author, activation reason)
876
+ * @returns New version ID
877
+ * @throws Error if prompt not found
878
+ *
879
+ * @example
880
+ * const versionId = await store.createVersionAsync('user-auth', 'New prompt text', {
881
+ * changelog: 'Improved clarity',
882
+ * author: 'user:alice',
883
+ * reason: 'Manual refinement'
884
+ * });
885
+ */
886
+ createVersionAsync(promptId, content, options) {
887
+ return new Promise((resolve, reject) => {
888
+ try {
889
+ const prompt = this.getPrompt(promptId);
890
+ if (!prompt) {
891
+ reject(new Error(`Prompt with ID "${promptId}" not found`));
892
+ return;
893
+ }
894
+ const versionId = crypto.randomBytes(8).toString("hex");
895
+ const now = (/* @__PURE__ */ new Date()).toISOString();
896
+ const contentHash = this.hashContent(content);
897
+ const duplicateStmt = this.db.prepare(
898
+ "SELECT id FROM prompt_versions WHERE prompt_id = ? AND content_hash = ?"
899
+ );
900
+ const duplicate = duplicateStmt.get(promptId, contentHash);
901
+ if (duplicate) {
902
+ reject(new Error("A version with identical content already exists"));
903
+ return;
904
+ }
905
+ const currentActiveStmt = this.db.prepare(
906
+ "SELECT id FROM prompt_versions WHERE prompt_id = ? AND is_active = 1"
907
+ );
908
+ const currentActive = currentActiveStmt.get(promptId);
909
+ const parentVersionId = currentActive?.id || null;
910
+ this.saveVersionContent(promptId, versionId, content, prompt.status);
911
+ const versionColumns = [
912
+ "id",
913
+ "prompt_id",
914
+ "content_hash",
915
+ "changelog",
916
+ "author",
917
+ "is_active",
918
+ "is_generated",
919
+ "generation_model",
920
+ "generation_prompt",
921
+ "created_at",
922
+ "parent_version_id"
923
+ ];
924
+ const versionValues = [
925
+ versionId,
926
+ promptId,
927
+ contentHash,
928
+ options?.changelog || null,
929
+ options?.author || null,
930
+ 0,
931
+ // not active by default
932
+ options?.isGenerated ? 1 : 0,
933
+ options?.generationModel || null,
934
+ options?.generationPrompt || null,
935
+ now,
936
+ parentVersionId
937
+ ];
938
+ if (this.promptVersionsHasColumn("version_number")) {
939
+ versionColumns.splice(2, 0, "version_number");
940
+ versionValues.splice(2, 0, this.nextLegacyVersionNumber(promptId));
941
+ }
942
+ if (this.promptVersionsHasColumn("content")) {
943
+ versionColumns.push("content");
944
+ versionValues.push(content);
945
+ }
946
+ if (this.promptVersionsHasColumn("created_by")) {
947
+ versionColumns.push("created_by");
948
+ versionValues.push(options?.author || "unknown");
949
+ }
950
+ const placeholders = versionColumns.map(() => "?").join(", ");
951
+ const stmt = this.db.prepare(`
952
+ INSERT INTO prompt_versions (${versionColumns.join(", ")})
953
+ VALUES (${placeholders})
954
+ `);
955
+ stmt.run(...versionValues);
956
+ resolve(versionId);
957
+ } catch (error) {
958
+ reject(error);
959
+ }
960
+ });
961
+ }
962
+ /**
963
+ * Close database connection
964
+ */
965
+ close() {
966
+ this.db.close();
967
+ }
968
+ // Private helper methods
969
+ rowToPrompt(row) {
970
+ return {
971
+ id: row.id,
972
+ name: row.name,
973
+ description: row.description,
974
+ category: row.category,
975
+ status: row.status,
976
+ variant: row.variant ?? void 0,
977
+ tags: parseJsonWithContext(row.tags, "PromptStore.tags") ?? [],
978
+ autoOptimize: row.auto_opt_in === 1,
979
+ currentVersion: row.current_version || row.active_version_id || "",
980
+ createdAt: row.created_at,
981
+ updatedAt: row.updated_at,
982
+ archivedAt: row.archived_at || void 0,
983
+ usageCount: row.usage_count,
984
+ lastUsedAt: row.last_used_at || void 0
985
+ };
986
+ }
987
+ rowToVersion(row) {
988
+ const prompt = this.getPrompt(row.prompt_id);
989
+ if (!prompt) {
990
+ throw new Error(`Prompt "${row.prompt_id}" not found while resolving version "${row.id}"`);
991
+ }
992
+ const content = this.getVersionContent(row.prompt_id, row.id, prompt.status);
993
+ return { ...this.rowToVersionMetadata(row), content };
994
+ }
995
+ rowToVersionMetadata(row) {
996
+ return {
997
+ id: row.id,
998
+ promptId: row.prompt_id,
999
+ contentHash: row.content_hash,
1000
+ changelog: row.changelog || void 0,
1001
+ author: row.author || row.created_by || void 0,
1002
+ isActive: row.is_active === 1,
1003
+ isGenerated: row.is_generated === 1,
1004
+ generationModel: row.generation_model || void 0,
1005
+ generationPrompt: row.generation_prompt || void 0,
1006
+ parentVersionId: row.parent_version_id || void 0,
1007
+ createdAt: row.created_at,
1008
+ activatedAt: row.activated_at || void 0,
1009
+ deactivatedAt: row.deactivated_at || void 0
1010
+ };
1011
+ }
1012
+ rowToPerformance(row) {
1013
+ return {
1014
+ promptId: row.prompt_id,
1015
+ versionId: row.version_id,
1016
+ variant: row.variant ?? null,
1017
+ totalExecutions: row.total_executions,
1018
+ successfulExecutions: row.successful_executions,
1019
+ failedExecutions: row.failed_executions,
1020
+ successRate: row.success_rate,
1021
+ avgCompleteness: row.avg_completeness,
1022
+ avgCodeDeliveryRate: row.avg_code_delivery_rate,
1023
+ avgDuration: row.avg_duration,
1024
+ minCompleteness: row.min_completeness,
1025
+ maxCompleteness: row.max_completeness,
1026
+ stdDevCompleteness: row.std_dev_completeness,
1027
+ sampleSize: row.sample_size,
1028
+ firstExecutionAt: row.first_execution_at,
1029
+ lastExecutionAt: row.last_execution_at,
1030
+ calculatedAt: row.calculated_at
1031
+ };
1032
+ }
1033
+ /** The content hash the store keys duplicate-content checks on. */
1034
+ hashContent(content) {
1035
+ return crypto.createHash("sha256").update(content).digest("hex");
1036
+ }
1037
+ saveVersionContent(promptId, versionId, content, status) {
1038
+ const contentPath = this.getVersionContentPath(promptId, versionId, status);
1039
+ atomicWriteTextSync(contentPath, content);
1040
+ }
1041
+ deleteVersionContent(promptId, versionId, status) {
1042
+ const contentPath = this.getVersionContentPath(promptId, versionId, status);
1043
+ try {
1044
+ fs.unlinkSync(contentPath);
1045
+ } catch (err) {
1046
+ const code = err.code;
1047
+ if (code !== "ENOENT") {
1048
+ throw err;
1049
+ }
1050
+ }
1051
+ }
1052
+ movePromptFiles(id, from, to) {
1053
+ const fromDir = from === "archived" ? this.archivedDir : this.activeDir;
1054
+ const toDir = to === "archived" ? this.archivedDir : this.activeDir;
1055
+ this.ensureSafePromptId(id);
1056
+ const versionRows = this.db.prepare("SELECT id FROM prompt_versions WHERE prompt_id = ?").all(id);
1057
+ for (const row of versionRows) {
1058
+ this.ensureSafeVersionId(row.id);
1059
+ const srcPath = path.join(fromDir, `${id}-${row.id}.txt`);
1060
+ const destPath = path.join(toDir, `${id}-${row.id}.txt`);
1061
+ if (fs.existsSync(srcPath)) {
1062
+ fs.renameSync(srcPath, destPath);
1063
+ }
1064
+ }
1065
+ }
1066
+ ensureSafePromptId(promptId) {
1067
+ assertSafePromptId(promptId);
1068
+ }
1069
+ ensureSafeVersionId(versionId) {
1070
+ assertSafeVersionId(versionId);
1071
+ }
1072
+ getVersionContentPath(promptId, versionId, status = "active") {
1073
+ this.ensureSafePromptId(promptId);
1074
+ this.ensureSafeVersionId(versionId);
1075
+ const baseDir = status === "archived" ? this.archivedDir : this.activeDir;
1076
+ return path.join(baseDir, `${promptId}-${versionId}.txt`);
1077
+ }
1078
+ };
1079
+
1080
+ export {
1081
+ PROMPT_VERSION_INDEXES_SQL,
1082
+ readInlineVersionContent,
1083
+ assertSafePromptId,
1084
+ assertSafeVersionId,
1085
+ PromptStore
1086
+ };
1087
+ //# sourceMappingURL=chunk-GAB6UW52.js.map