@poetic-ai/poetic 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (782) hide show
  1. package/.github/SECURITY.md +47 -0
  2. package/.nvmrc +1 -0
  3. package/.poetic/README.md +37 -0
  4. package/.poetic/providers/catalog.json +12051 -0
  5. package/.poetic/providers/pricing.json +1272 -0
  6. package/.poetic/providers/registry.json +3369 -0
  7. package/CHANGELOG.md +552 -0
  8. package/CODE_OF_CONDUCT.md +40 -0
  9. package/CONTRIBUTING.md +23 -0
  10. package/INSTALL.md +454 -0
  11. package/LICENSE +21 -0
  12. package/README.md +474 -0
  13. package/dist/BasicOptimizationCompetitionRunner-5H5TBYO4.js +153 -0
  14. package/dist/ExecutionTracker-UVONC4C6.js +16 -0
  15. package/dist/OptimizationConfig-7DFY2TST.js +17 -0
  16. package/dist/OptimizationEngine-JIMGP3LY.js +1597 -0
  17. package/dist/PromptStore-U6ZD3ZMQ.js +18 -0
  18. package/dist/actions-LUJPINLJ.js +322 -0
  19. package/dist/agent-ingest-3DJUJ7FU.js +53 -0
  20. package/dist/aggregator-DNCBINFO.js +12 -0
  21. package/dist/ai-judge-5QT5QJVU.js +156 -0
  22. package/dist/allowlist-grounding-RO6HKUFI.js +16 -0
  23. package/dist/allowlist-utils-23V7TJ3G.js +28 -0
  24. package/dist/anchored-turn-service-JULUCUIK.js +489 -0
  25. package/dist/api-transport-4TYTNLTJ.js +1087 -0
  26. package/dist/apply-completion-mode-AW2MOS3R.js +89 -0
  27. package/dist/artifact-migrator-23L45ISD.js +267 -0
  28. package/dist/ask-HWVV6QFR.js +135 -0
  29. package/dist/auth-5KEDKAPP.js +67 -0
  30. package/dist/auth-7TT3JINV.js +78 -0
  31. package/dist/auth-E6XUNZ5M.js +68 -0
  32. package/dist/auth-H3XDZE22.js +134 -0
  33. package/dist/auth-OC4E6633.js +71 -0
  34. package/dist/auth-S4CTX4GQ.js +44 -0
  35. package/dist/auth-YLH3S7EY.js +69 -0
  36. package/dist/auth-liveness-TDDEZY3T.js +46 -0
  37. package/dist/auto-optimizer-VPRWOWGU.js +80 -0
  38. package/dist/autoloop-cleanup-JOGKTLWA.js +109 -0
  39. package/dist/autoloop-evidence-gates-PCDALGVJ.js +38 -0
  40. package/dist/autoloop-gate-policy-Z7FVJVXV.js +175 -0
  41. package/dist/autoloop-helpers-2KTK43GL.js +22 -0
  42. package/dist/autoloop-ledger-W7QO62PX.js +96 -0
  43. package/dist/autoloop-ledger-subscriber-Z5RW5EIE.js +162 -0
  44. package/dist/autoloop-run-defaults-FERGRZGP.js +19 -0
  45. package/dist/autoloop-run-lock-CT2NWSV3.js +197 -0
  46. package/dist/autoloop-success-J2VKKBXQ.js +85 -0
  47. package/dist/autoloop-termination-summary-RN75F422.js +58 -0
  48. package/dist/autoloop-trajectory-XFIEXP5Z.js +282 -0
  49. package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
  50. package/dist/autonomous-loop-controller-PW4XVFGQ.js +4120 -0
  51. package/dist/backend-P3DAYRP7.js +29 -0
  52. package/dist/background-executor-CBN552V4.js +257 -0
  53. package/dist/backlog-execution-intent-U4XYPTV6.js +15 -0
  54. package/dist/backup-active-store-5WXG6SXT.js +17 -0
  55. package/dist/backup-telemetry-db-XGLXAA3N.js +254 -0
  56. package/dist/basic-competition-master-VCSBJVRN.js +344 -0
  57. package/dist/branch-archive-manager-RP6FP3ZC.js +254 -0
  58. package/dist/branch-cleanup-manager-RSHAI7YR.js +20 -0
  59. package/dist/build-gate-YHGRB4QB.js +71 -0
  60. package/dist/change-summary-WY7J5TOX.js +33 -0
  61. package/dist/chunk-23A26CSN.js +123 -0
  62. package/dist/chunk-27UTJD3M.js +265 -0
  63. package/dist/chunk-2A5CILN3.js +310 -0
  64. package/dist/chunk-2AQUWJPW.js +225 -0
  65. package/dist/chunk-2BZ53J6J.js +2344 -0
  66. package/dist/chunk-2DY5KNVM.js +276 -0
  67. package/dist/chunk-2EIA4RBE.js +659 -0
  68. package/dist/chunk-2IUXIGQD.js +1064 -0
  69. package/dist/chunk-2N42MS2Z.js +2193 -0
  70. package/dist/chunk-2QJ3H3L7.js +42 -0
  71. package/dist/chunk-2QLYTVYX.js +791 -0
  72. package/dist/chunk-2VSQMRCB.js +18 -0
  73. package/dist/chunk-2XQXYBM2.js +130 -0
  74. package/dist/chunk-2YFUIER7.js +426 -0
  75. package/dist/chunk-34CNP2HB.js +148 -0
  76. package/dist/chunk-35P3W3JX.js +456 -0
  77. package/dist/chunk-36PEBZAF.js +18 -0
  78. package/dist/chunk-3AOKYKA7.js +22 -0
  79. package/dist/chunk-3BCUNHKF.js +475 -0
  80. package/dist/chunk-3FLXLLB7.js +26 -0
  81. package/dist/chunk-3FOZ2VHV.js +100 -0
  82. package/dist/chunk-3G6FZCRF.js +106 -0
  83. package/dist/chunk-3M57DADF.js +44 -0
  84. package/dist/chunk-3S62LLWJ.js +543 -0
  85. package/dist/chunk-3ZPQLGV7.js +2904 -0
  86. package/dist/chunk-44N5WZZH.js +45 -0
  87. package/dist/chunk-45FPSA3B.js +125 -0
  88. package/dist/chunk-4BJ3O4RQ.js +929 -0
  89. package/dist/chunk-4BOP7T6L.js +2321 -0
  90. package/dist/chunk-4BTDUT2S.js +42 -0
  91. package/dist/chunk-4CSS7WVI.js +143 -0
  92. package/dist/chunk-4CUY7AFY.js +247 -0
  93. package/dist/chunk-4GSN5O5J.js +62 -0
  94. package/dist/chunk-4HN6DF7V.js +1027 -0
  95. package/dist/chunk-4IAPOG5V.js +415 -0
  96. package/dist/chunk-4IYIZQWV.js +48 -0
  97. package/dist/chunk-4NXPXE62.js +84 -0
  98. package/dist/chunk-4RCCF5BR.js +712 -0
  99. package/dist/chunk-4V7NAQ4R.js +19527 -0
  100. package/dist/chunk-4VJITV4P.js +445 -0
  101. package/dist/chunk-4YX7J6QL.js +1859 -0
  102. package/dist/chunk-527OBWQB.js +338 -0
  103. package/dist/chunk-5D4A7E3D.js +448 -0
  104. package/dist/chunk-5DLKYTQX.js +4003 -0
  105. package/dist/chunk-5EERLVZB.js +139 -0
  106. package/dist/chunk-5H72XE4H.js +256 -0
  107. package/dist/chunk-5HDP7XZG.js +91 -0
  108. package/dist/chunk-5LAMRH4X.js +969 -0
  109. package/dist/chunk-5LTN43AS.js +1972 -0
  110. package/dist/chunk-5RBHQYDB.js +2206 -0
  111. package/dist/chunk-5WCQRDRB.js +588 -0
  112. package/dist/chunk-5WRLK5KW.js +700 -0
  113. package/dist/chunk-5ZCXC23G.js +595 -0
  114. package/dist/chunk-6BM72ZMG.js +31 -0
  115. package/dist/chunk-6EDAJH2I.js +68 -0
  116. package/dist/chunk-6EQKFDBH.js +457 -0
  117. package/dist/chunk-6MFRHTRI.js +115 -0
  118. package/dist/chunk-6TZJRKNW.js +321 -0
  119. package/dist/chunk-6V7HGQFZ.js +20 -0
  120. package/dist/chunk-6VWVO2TU.js +3746 -0
  121. package/dist/chunk-6Y5TWI7H.js +146 -0
  122. package/dist/chunk-6Y5U7UFY.js +91 -0
  123. package/dist/chunk-6ZLAK3XG.js +14 -0
  124. package/dist/chunk-72XCRQED.js +34 -0
  125. package/dist/chunk-72YTZMAM.js +589 -0
  126. package/dist/chunk-73BBJOKA.js +263 -0
  127. package/dist/chunk-73NCTWKL.js +188 -0
  128. package/dist/chunk-77I6G4CO.js +1 -0
  129. package/dist/chunk-7DHRDWFS.js +3104 -0
  130. package/dist/chunk-7DNSNKJV.js +78 -0
  131. package/dist/chunk-7FMJVYBS.js +307 -0
  132. package/dist/chunk-7GDRQBQC.js +419 -0
  133. package/dist/chunk-7GPCEFUV.js +270 -0
  134. package/dist/chunk-7IL4A2PP.js +948 -0
  135. package/dist/chunk-7MMLMXO6.js +3679 -0
  136. package/dist/chunk-7QCZSLBH.js +1 -0
  137. package/dist/chunk-7R2WLDOS.js +62 -0
  138. package/dist/chunk-7T7RUJI7.js +949 -0
  139. package/dist/chunk-A2WKSVX7.js +43 -0
  140. package/dist/chunk-A3YGID55.js +133 -0
  141. package/dist/chunk-A722DEVA.js +14 -0
  142. package/dist/chunk-ACDIT7OP.js +1376 -0
  143. package/dist/chunk-ACKIPAOJ.js +302 -0
  144. package/dist/chunk-APPNGGN7.js +365 -0
  145. package/dist/chunk-APV6MK5E.js +137 -0
  146. package/dist/chunk-ASEP3M2W.js +968 -0
  147. package/dist/chunk-AT4TNPWW.js +2931 -0
  148. package/dist/chunk-ATVKCSGT.js +250 -0
  149. package/dist/chunk-AURFMVCD.js +899 -0
  150. package/dist/chunk-AX6GWE7V.js +47 -0
  151. package/dist/chunk-AY5EWJPF.js +385 -0
  152. package/dist/chunk-BAV2HJXS.js +194 -0
  153. package/dist/chunk-BBHRN366.js +89 -0
  154. package/dist/chunk-BBPSTTPA.js +1004 -0
  155. package/dist/chunk-BDATUDDJ.js +992 -0
  156. package/dist/chunk-BKE5PG5L.js +20414 -0
  157. package/dist/chunk-BLPHWMDK.js +797 -0
  158. package/dist/chunk-BSE4R6XD.js +322 -0
  159. package/dist/chunk-BXGMAU4A.js +396 -0
  160. package/dist/chunk-BXI4NXL3.js +507 -0
  161. package/dist/chunk-BZU2O43F.js +1125 -0
  162. package/dist/chunk-C3L6YQ7P.js +147 -0
  163. package/dist/chunk-C57KJOUQ.js +121 -0
  164. package/dist/chunk-CCV7BPSY.js +118 -0
  165. package/dist/chunk-CD7ISXA4.js +826 -0
  166. package/dist/chunk-CE5OZBYY.js +21 -0
  167. package/dist/chunk-CFBIG37O.js +154 -0
  168. package/dist/chunk-CJC6GZ46.js +457 -0
  169. package/dist/chunk-CKCDGXIV.js +408 -0
  170. package/dist/chunk-CKNX3TTP.js +10338 -0
  171. package/dist/chunk-CLKSETWE.js +10 -0
  172. package/dist/chunk-CP7H3HSP.js +1552 -0
  173. package/dist/chunk-CPLEWXNZ.js +66 -0
  174. package/dist/chunk-CQM3A35X.js +844 -0
  175. package/dist/chunk-CS6P76D3.js +103 -0
  176. package/dist/chunk-CTLUBNCW.js +622 -0
  177. package/dist/chunk-CUSRN6RJ.js +632 -0
  178. package/dist/chunk-D5EP5D2W.js +26 -0
  179. package/dist/chunk-D5RYINO7.js +412 -0
  180. package/dist/chunk-DBFS4HMH.js +751 -0
  181. package/dist/chunk-DC4ZYMXJ.js +115 -0
  182. package/dist/chunk-DCBZP442.js +9243 -0
  183. package/dist/chunk-DCYF7EKG.js +26 -0
  184. package/dist/chunk-DDMAFNUK.js +5351 -0
  185. package/dist/chunk-DF5SLDE4.js +966 -0
  186. package/dist/chunk-DJFW7SMX.js +348 -0
  187. package/dist/chunk-DQFLLBJW.js +121 -0
  188. package/dist/chunk-DSFM56OA.js +1203 -0
  189. package/dist/chunk-DTY4APYV.js +218 -0
  190. package/dist/chunk-DXH5JBRS.js +437 -0
  191. package/dist/chunk-E3NTPHEO.js +194 -0
  192. package/dist/chunk-E74LUIID.js +302 -0
  193. package/dist/chunk-EI57M5BI.js +194 -0
  194. package/dist/chunk-EJ4ZAWLV.js +305 -0
  195. package/dist/chunk-EJGCZGUF.js +1483 -0
  196. package/dist/chunk-EK2U3YEG.js +486 -0
  197. package/dist/chunk-ELMFYNV7.js +109 -0
  198. package/dist/chunk-ENRGKNR5.js +25 -0
  199. package/dist/chunk-ETYDXCK7.js +679 -0
  200. package/dist/chunk-EYRH3W74.js +239 -0
  201. package/dist/chunk-F23DIWNN.js +1024 -0
  202. package/dist/chunk-F5JO7HAS.js +94 -0
  203. package/dist/chunk-F7ER6ANO.js +174 -0
  204. package/dist/chunk-FATUVIIN.js +374 -0
  205. package/dist/chunk-FC23CTXV.js +322 -0
  206. package/dist/chunk-FD4ERYEG.js +22 -0
  207. package/dist/chunk-FH7WOJAE.js +79 -0
  208. package/dist/chunk-FHOWVDF5.js +1342 -0
  209. package/dist/chunk-FKAUPHMR.js +96 -0
  210. package/dist/chunk-FONNFJXA.js +137 -0
  211. package/dist/chunk-FQ7FSZRW.js +75 -0
  212. package/dist/chunk-FRG57FPM.js +240 -0
  213. package/dist/chunk-FUVP64ER.js +31 -0
  214. package/dist/chunk-FYOILAN5.js +6818 -0
  215. package/dist/chunk-G35UYQ6Z.js +69 -0
  216. package/dist/chunk-G36W2T2S.js +1143 -0
  217. package/dist/chunk-G3L2L5XZ.js +49 -0
  218. package/dist/chunk-G4THLFV3.js +148 -0
  219. package/dist/chunk-GAFJEYLK.js +29 -0
  220. package/dist/chunk-GFGYB2ZU.js +1689 -0
  221. package/dist/chunk-GG6KJYW6.js +85 -0
  222. package/dist/chunk-GHHFDU2U.js +55 -0
  223. package/dist/chunk-GHTZSQB7.js +57 -0
  224. package/dist/chunk-GK37ILCX.js +1231 -0
  225. package/dist/chunk-GKN3HMN4.js +2809 -0
  226. package/dist/chunk-GNVDBVJP.js +156 -0
  227. package/dist/chunk-GPEL3FBM.js +924 -0
  228. package/dist/chunk-GPSNGPZS.js +1604 -0
  229. package/dist/chunk-GSGD5E4C.js +30 -0
  230. package/dist/chunk-GSUQJJXQ.js +331 -0
  231. package/dist/chunk-GSV226X6.js +110 -0
  232. package/dist/chunk-H2AYQIHW.js +224 -0
  233. package/dist/chunk-H66DXFS5.js +1374 -0
  234. package/dist/chunk-H6G7QRMQ.js +35 -0
  235. package/dist/chunk-H7JAGHZT.js +59 -0
  236. package/dist/chunk-H7ZEFECA.js +316 -0
  237. package/dist/chunk-HAC6EHZZ.js +79 -0
  238. package/dist/chunk-HIO33P3G.js +19 -0
  239. package/dist/chunk-HMVQIPH3.js +547 -0
  240. package/dist/chunk-HOYBYAOA.js +257 -0
  241. package/dist/chunk-HX5P3CSP.js +1784 -0
  242. package/dist/chunk-I46EG2XQ.js +65 -0
  243. package/dist/chunk-I4NPDSCB.js +279 -0
  244. package/dist/chunk-I5WRT7ZR.js +514 -0
  245. package/dist/chunk-IC7I6YIJ.js +301 -0
  246. package/dist/chunk-IDCSOZVN.js +78 -0
  247. package/dist/chunk-IFCBYECK.js +112 -0
  248. package/dist/chunk-IFZCPEY2.js +66 -0
  249. package/dist/chunk-IKFP2KUR.js +48 -0
  250. package/dist/chunk-IRFBN336.js +878 -0
  251. package/dist/chunk-IUXNGKA6.js +152 -0
  252. package/dist/chunk-IV2RVAN7.js +1356 -0
  253. package/dist/chunk-IZYIQQ7X.js +53 -0
  254. package/dist/chunk-J3UUR7DE.js +210 -0
  255. package/dist/chunk-J54VUAY2.js +566 -0
  256. package/dist/chunk-J62KPGII.js +464 -0
  257. package/dist/chunk-J6P3FWWW.js +130 -0
  258. package/dist/chunk-JKBHJQMT.js +434 -0
  259. package/dist/chunk-JLS65NUQ.js +14 -0
  260. package/dist/chunk-JOSYEJKY.js +141 -0
  261. package/dist/chunk-JPKSXKNB.js +94 -0
  262. package/dist/chunk-JQNJB2BB.js +2440 -0
  263. package/dist/chunk-JRVNSWSQ.js +2626 -0
  264. package/dist/chunk-JSWMRQYG.js +28 -0
  265. package/dist/chunk-JZKNBBIB.js +152 -0
  266. package/dist/chunk-K54Y7MLK.js +160 -0
  267. package/dist/chunk-K65546RE.js +183 -0
  268. package/dist/chunk-KM3F7SYE.js +702 -0
  269. package/dist/chunk-KNDYMVWN.js +102 -0
  270. package/dist/chunk-KNT72VR6.js +132 -0
  271. package/dist/chunk-KP6YILMU.js +482 -0
  272. package/dist/chunk-KQEBSK3T.js +274 -0
  273. package/dist/chunk-KT6VHSPF.js +84 -0
  274. package/dist/chunk-KTMW65UX.js +14 -0
  275. package/dist/chunk-KZ5CJVBP.js +1813 -0
  276. package/dist/chunk-L4427KOE.js +26 -0
  277. package/dist/chunk-L6OM4A22.js +189 -0
  278. package/dist/chunk-L7E6XCRA.js +1042 -0
  279. package/dist/chunk-L7JZLXQL.js +173 -0
  280. package/dist/chunk-LAMKBTXX.js +40 -0
  281. package/dist/chunk-LDCF2MKN.js +132 -0
  282. package/dist/chunk-LEIIWPWQ.js +78 -0
  283. package/dist/chunk-LFTQVYBB.js +31 -0
  284. package/dist/chunk-LG3PDRTR.js +2872 -0
  285. package/dist/chunk-LGHII5ET.js +23 -0
  286. package/dist/chunk-LH5QY22X.js +1205 -0
  287. package/dist/chunk-LIVJ6266.js +438 -0
  288. package/dist/chunk-LKRAR3IH.js +276 -0
  289. package/dist/chunk-LO23NABI.js +3063 -0
  290. package/dist/chunk-LO3X5NLS.js +326 -0
  291. package/dist/chunk-LPITVM7M.js +339 -0
  292. package/dist/chunk-LR5IJIGV.js +810 -0
  293. package/dist/chunk-LRGMHROI.js +79 -0
  294. package/dist/chunk-LUVKFFWR.js +315 -0
  295. package/dist/chunk-LWCBNGH6.js +35 -0
  296. package/dist/chunk-LWTN3WRV.js +260 -0
  297. package/dist/chunk-M3HQYKQX.js +308 -0
  298. package/dist/chunk-M6GVSPEH.js +1016 -0
  299. package/dist/chunk-MF5HP6XV.js +221 -0
  300. package/dist/chunk-MHLCBZJB.js +328 -0
  301. package/dist/chunk-MN6PL4AN.js +120 -0
  302. package/dist/chunk-MOEY65Z6.js +5678 -0
  303. package/dist/chunk-MQ4WA34C.js +206 -0
  304. package/dist/chunk-MWHF5V7U.js +223 -0
  305. package/dist/chunk-MWHLBPNU.js +211 -0
  306. package/dist/chunk-MWK5UZQ3.js +1068 -0
  307. package/dist/chunk-MYLH2S4G.js +64 -0
  308. package/dist/chunk-MZ5WYKNA.js +28 -0
  309. package/dist/chunk-N4VTRA7K.js +131 -0
  310. package/dist/chunk-N5DX4JAK.js +12 -0
  311. package/dist/chunk-N65O4XTH.js +5011 -0
  312. package/dist/chunk-NEQUQHOX.js +223 -0
  313. package/dist/chunk-NGK6PEOG.js +25 -0
  314. package/dist/chunk-NJVD4PWE.js +1033 -0
  315. package/dist/chunk-NM6PMYY4.js +768 -0
  316. package/dist/chunk-NN4PJDHP.js +708 -0
  317. package/dist/chunk-NP2V3L7K.js +226 -0
  318. package/dist/chunk-NRLY536M.js +260 -0
  319. package/dist/chunk-NRNE225N.js +1270 -0
  320. package/dist/chunk-NS2K2GTP.js +605 -0
  321. package/dist/chunk-NS33V3IM.js +51 -0
  322. package/dist/chunk-NSHASMZZ.js +71 -0
  323. package/dist/chunk-NWOYOA6H.js +378 -0
  324. package/dist/chunk-NWRUSEXG.js +322 -0
  325. package/dist/chunk-NZGDAWIP.js +1905 -0
  326. package/dist/chunk-O47UOKU3.js +395 -0
  327. package/dist/chunk-O4G2W3ST.js +9831 -0
  328. package/dist/chunk-O6V4PNLO.js +63 -0
  329. package/dist/chunk-OA4GPILI.js +624 -0
  330. package/dist/chunk-OGMSYL6J.js +227 -0
  331. package/dist/chunk-OIS7J26S.js +319 -0
  332. package/dist/chunk-OMX5VL43.js +79 -0
  333. package/dist/chunk-ON3G73BU.js +264 -0
  334. package/dist/chunk-OPYFYTWQ.js +220 -0
  335. package/dist/chunk-OQ6K46CK.js +1734 -0
  336. package/dist/chunk-OYZYO7TV.js +47 -0
  337. package/dist/chunk-OZ4REHIN.js +4386 -0
  338. package/dist/chunk-P47VN5F4.js +282 -0
  339. package/dist/chunk-P5I4X7A7.js +353 -0
  340. package/dist/chunk-P6VQROCO.js +594 -0
  341. package/dist/chunk-P7CQGPLS.js +30 -0
  342. package/dist/chunk-PCAGC5MR.js +1763 -0
  343. package/dist/chunk-PFTQBXS6.js +5181 -0
  344. package/dist/chunk-PGSPX4SU.js +15 -0
  345. package/dist/chunk-PIKLF7BM.js +432 -0
  346. package/dist/chunk-PJWJ3SAV.js +22 -0
  347. package/dist/chunk-PKIFMV72.js +100 -0
  348. package/dist/chunk-PL37JDNA.js +189 -0
  349. package/dist/chunk-PTH5E5XO.js +195 -0
  350. package/dist/chunk-PW6AXLQC.js +4128 -0
  351. package/dist/chunk-PYITM4N2.js +79 -0
  352. package/dist/chunk-PZ5AY32C.js +10 -0
  353. package/dist/chunk-Q3RO7N35.js +45 -0
  354. package/dist/chunk-Q3WIC6GQ.js +2670 -0
  355. package/dist/chunk-Q5XIXSHX.js +271 -0
  356. package/dist/chunk-QGJDMEOV.js +34 -0
  357. package/dist/chunk-QNOB37UH.js +58 -0
  358. package/dist/chunk-QOCOVLUH.js +462 -0
  359. package/dist/chunk-QTCJ5CC5.js +172 -0
  360. package/dist/chunk-QVFV5IP2.js +232 -0
  361. package/dist/chunk-QVZMFDYG.js +29 -0
  362. package/dist/chunk-R35PEUKH.js +511 -0
  363. package/dist/chunk-R4UWBC35.js +200 -0
  364. package/dist/chunk-R6MLCREW.js +44 -0
  365. package/dist/chunk-R6W23LKN.js +254 -0
  366. package/dist/chunk-R7XDDX2A.js +4007 -0
  367. package/dist/chunk-RDFRCT64.js +168 -0
  368. package/dist/chunk-RE5VZDFQ.js +58 -0
  369. package/dist/chunk-RGROYC2G.js +638 -0
  370. package/dist/chunk-RGWHUI5E.js +68 -0
  371. package/dist/chunk-RHVG6UNL.js +205 -0
  372. package/dist/chunk-RI4EX2QE.js +18 -0
  373. package/dist/chunk-RJAAKDRX.js +17 -0
  374. package/dist/chunk-ROMHOSMQ.js +185 -0
  375. package/dist/chunk-RWREC3KJ.js +517 -0
  376. package/dist/chunk-RYNETRDJ.js +118 -0
  377. package/dist/chunk-RZY7RKM5.js +500 -0
  378. package/dist/chunk-S2MNWFAG.js +52 -0
  379. package/dist/chunk-S2VQCZO4.js +22 -0
  380. package/dist/chunk-S54MKU6V.js +117 -0
  381. package/dist/chunk-S5OIDFRM.js +302 -0
  382. package/dist/chunk-SCW4ZF6R.js +150 -0
  383. package/dist/chunk-SLS2N4PH.js +2213 -0
  384. package/dist/chunk-SNLBO4BF.js +247 -0
  385. package/dist/chunk-SP3LFU6B.js +60 -0
  386. package/dist/chunk-SQQTDDQA.js +537 -0
  387. package/dist/chunk-STV6LYYE.js +45 -0
  388. package/dist/chunk-SURZ2WFE.js +326 -0
  389. package/dist/chunk-SZ7DL357.js +1047 -0
  390. package/dist/chunk-T5E4NQCM.js +5742 -0
  391. package/dist/chunk-TAJPCXSB.js +13 -0
  392. package/dist/chunk-TAOOYK3P.js +358 -0
  393. package/dist/chunk-TDSEX5CF.js +24 -0
  394. package/dist/chunk-TFTGP7Z7.js +174 -0
  395. package/dist/chunk-TGON4N4O.js +197 -0
  396. package/dist/chunk-TGQZHDY2.js +2373 -0
  397. package/dist/chunk-TJJZ2OKV.js +6783 -0
  398. package/dist/chunk-TRSVUPCX.js +25 -0
  399. package/dist/chunk-TSXGRLPR.js +107 -0
  400. package/dist/chunk-U2S3YEX3.js +224 -0
  401. package/dist/chunk-U45RTRGY.js +818 -0
  402. package/dist/chunk-U6C3VVWS.js +13 -0
  403. package/dist/chunk-UDMS5AD3.js +307 -0
  404. package/dist/chunk-UGX7GI37.js +94 -0
  405. package/dist/chunk-UH3JJSHK.js +1 -0
  406. package/dist/chunk-UHRBTZYY.js +208 -0
  407. package/dist/chunk-UHT2KRG5.js +193 -0
  408. package/dist/chunk-UI2F6DJ5.js +118 -0
  409. package/dist/chunk-UMAKSB4Z.js +284 -0
  410. package/dist/chunk-UR2IBGIM.js +521 -0
  411. package/dist/chunk-UUH2RVKS.js +585 -0
  412. package/dist/chunk-UVJ4PJDK.js +4533 -0
  413. package/dist/chunk-V53UG2OT.js +9924 -0
  414. package/dist/chunk-V72RMBM4.js +48 -0
  415. package/dist/chunk-VBNCKCCI.js +16 -0
  416. package/dist/chunk-VNSYKC25.js +24 -0
  417. package/dist/chunk-VPHVFK4A.js +1984 -0
  418. package/dist/chunk-VTLNJQ44.js +133 -0
  419. package/dist/chunk-VTW7HP3R.js +100 -0
  420. package/dist/chunk-VVGEPBPS.js +218 -0
  421. package/dist/chunk-VVLLL7I4.js +166 -0
  422. package/dist/chunk-VX3UMWB7.js +483 -0
  423. package/dist/chunk-VXF4Q3FW.js +20 -0
  424. package/dist/chunk-W3JMT2YY.js +712 -0
  425. package/dist/chunk-WDUORIHF.js +877 -0
  426. package/dist/chunk-WDVTY4U6.js +148 -0
  427. package/dist/chunk-WIFZCHEG.js +12566 -0
  428. package/dist/chunk-WIRN3F75.js +736 -0
  429. package/dist/chunk-WMPU2UOV.js +82 -0
  430. package/dist/chunk-WTOKKE2V.js +784 -0
  431. package/dist/chunk-WX5IRLF6.js +740 -0
  432. package/dist/chunk-WZ6U3O7I.js +1581 -0
  433. package/dist/chunk-XAONGNST.js +57 -0
  434. package/dist/chunk-XB5YLCLB.js +13 -0
  435. package/dist/chunk-XEP5NQ5Y.js +688 -0
  436. package/dist/chunk-XGYF2QMZ.js +351 -0
  437. package/dist/chunk-XHEKQENB.js +255 -0
  438. package/dist/chunk-XNO4FM6X.js +1124 -0
  439. package/dist/chunk-XPHKYHO4.js +878 -0
  440. package/dist/chunk-XPK2I4NC.js +405 -0
  441. package/dist/chunk-XPU2XADL.js +2175 -0
  442. package/dist/chunk-XQD2B6BB.js +507 -0
  443. package/dist/chunk-XT2ZQVTC.js +558 -0
  444. package/dist/chunk-XTXJGGUV.js +351 -0
  445. package/dist/chunk-XUXVDPSZ.js +50 -0
  446. package/dist/chunk-XV7NZL4B.js +57 -0
  447. package/dist/chunk-XZE4XARH.js +563 -0
  448. package/dist/chunk-XZYR5EDO.js +152 -0
  449. package/dist/chunk-Y3J4JMTU.js +61 -0
  450. package/dist/chunk-Y55LZN5U.js +52 -0
  451. package/dist/chunk-Y5VN7DMP.js +112 -0
  452. package/dist/chunk-Y67VAHN4.js +459 -0
  453. package/dist/chunk-YAXSKEUH.js +3544 -0
  454. package/dist/chunk-YB3JD4E6.js +975 -0
  455. package/dist/chunk-YESZJFK6.js +220 -0
  456. package/dist/chunk-YGXKOBQQ.js +292 -0
  457. package/dist/chunk-YMX76IOS.js +31 -0
  458. package/dist/chunk-YOTXESEH.js +257 -0
  459. package/dist/chunk-YTYIEZQY.js +119 -0
  460. package/dist/chunk-YVORHQ2S.js +579 -0
  461. package/dist/chunk-Z2CUQDAR.js +3429 -0
  462. package/dist/chunk-Z2KYOFHS.js +7000 -0
  463. package/dist/chunk-Z6PC7QX6.js +161 -0
  464. package/dist/chunk-ZDTGECTN.js +235 -0
  465. package/dist/chunk-ZIPWI2LY.js +151 -0
  466. package/dist/chunk-ZSKKMTQJ.js +554 -0
  467. package/dist/chunk-ZTT5IVPY.js +1160 -0
  468. package/dist/chunk-ZX65UI5W.js +78 -0
  469. package/dist/chunk-ZYG7GGKO.js +218 -0
  470. package/dist/chunk-ZZZUL4OF.js +38 -0
  471. package/dist/cli-utils-IXL26KJT.js +40 -0
  472. package/dist/cli-validation-WLXWLUJL.js +111 -0
  473. package/dist/commit-utils-P7CRJF5N.js +202 -0
  474. package/dist/compete-config-resolver-R5ULXMYH.js +76 -0
  475. package/dist/compete-request-62JESVET.js +364 -0
  476. package/dist/compete-results-QEPG6FZX.js +208 -0
  477. package/dist/competition-outcome-tracker-R32OOZ43.js +38 -0
  478. package/dist/config-JCOKXOQT.js +166 -0
  479. package/dist/config-audit-EL3GHXS7.js +360 -0
  480. package/dist/config-explain-TNILDEVJ.js +12 -0
  481. package/dist/config-loader-VPFPFO4B.js +38 -0
  482. package/dist/config-manager-7T4E2BQO.js +67 -0
  483. package/dist/config-validator-KKOHOW7O.js +72 -0
  484. package/dist/cost-YC42XUF3.js +53 -0
  485. package/dist/coverage-orchestrator-CISNKJC2.js +772 -0
  486. package/dist/coverage-scanner-YVD62MLH.js +12 -0
  487. package/dist/createCompetitionRunner-LJG6ZQSO.js +46 -0
  488. package/dist/data-migration-state-VJK64DLT.js +31 -0
  489. package/dist/db-migrator-XSEIOGWY.js +34 -0
  490. package/dist/discovery-JGYGDD25.js +25 -0
  491. package/dist/doctor-GJOYE7AE.js +186 -0
  492. package/dist/domain-analyzer-AWF3RP6E.js +29 -0
  493. package/dist/ensure-initialized-744DIZEZ.js +52 -0
  494. package/dist/entry.js +940 -0
  495. package/dist/environment-YS45U5ZI.js +81 -0
  496. package/dist/error-parser-core-PPZ36A4S.js +50 -0
  497. package/dist/escalation-ladder-MKTCEGSA.js +130 -0
  498. package/dist/evaluation-context-KV4GZNN7.js +35 -0
  499. package/dist/evidence-plan-resolver-GBSYSAPX.js +85 -0
  500. package/dist/execution-data-writer-3ODTBDLH.js +53 -0
  501. package/dist/execution-policy-applier-ZHD3DCF3.js +31 -0
  502. package/dist/execution-preflight-Z4Y64V3I.js +209 -0
  503. package/dist/execution-roles-R3DPPMD3.js +66 -0
  504. package/dist/exit-code-error-Z4SW2DVK.js +14 -0
  505. package/dist/external-temp-cleanup-N2RZH4QP.js +311 -0
  506. package/dist/factory-XBN7DFIM.js +149 -0
  507. package/dist/file-utils-XIVR2ZMA.js +47 -0
  508. package/dist/flywheel-autoloop-executor-UILGOFFK.js +249 -0
  509. package/dist/flywheel-competition-executor-JOBEXTRB.js +259 -0
  510. package/dist/flywheel-executor-6JFLA6J5.js +369 -0
  511. package/dist/flywheel-git-isolation-UC5NIEVU.js +48 -0
  512. package/dist/flywheel-manifest-5UC4VBMA.js +108 -0
  513. package/dist/flywheel-model-defaults-7CVKP53V.js +27 -0
  514. package/dist/flywheel-preflight-XEY5SHM6.js +104 -0
  515. package/dist/flywheel-resume-7HELH7QS.js +23 -0
  516. package/dist/flywheel-safety-7U7DPOAP.js +28 -0
  517. package/dist/flywheel-scope-decision-ZHKF6ZIN.js +11 -0
  518. package/dist/get-telemetry-logger-DPVWWIYY.js +73 -0
  519. package/dist/git-worktree-IY6V6DUO.js +18 -0
  520. package/dist/github-pr-manager-4LXEKJTA.js +211 -0
  521. package/dist/guidance-profile-config-E7XJL2VP.js +117 -0
  522. package/dist/guidance-profile-renderer-QK2YMAAP.js +21 -0
  523. package/dist/index-query-4JEUKA44.js +31 -0
  524. package/dist/index.js +108661 -0
  525. package/dist/instructions-6BURLQJC.js +64 -0
  526. package/dist/invoke-provider-auth-GRUYP44M.js +223 -0
  527. package/dist/judge-scoring.json +80 -0
  528. package/dist/judge-test.js +555 -0
  529. package/dist/lab-mode-OTWVHN63.js +39 -0
  530. package/dist/lab-utils-BJRFLGK4.js +23 -0
  531. package/dist/linux-host-class-UY4KVLFD.js +29 -0
  532. package/dist/llm-judge-executor-F7Z3HO77.js +133 -0
  533. package/dist/local-executor-CEHWE2PL.js +223 -0
  534. package/dist/logger-33TR6EE5.js +72 -0
  535. package/dist/loop-spec-XTLQAVZ7.js +191 -0
  536. package/dist/manager-2HJG5CLT.js +25 -0
  537. package/dist/matrix-prompt-builder-6UDN5X3F.js +497 -0
  538. package/dist/matrix-result-parser-7W35EUOV.js +15 -0
  539. package/dist/metadata-HQ43NDEK.js +22 -0
  540. package/dist/model-invocations-db-QBO4Y7WZ.js +38 -0
  541. package/dist/monitor-XGYBG2DW.js +72 -0
  542. package/dist/next-PB5ZXZKB.js +90 -0
  543. package/dist/next-ZBDK725T.js +69 -0
  544. package/dist/optimization-config-resolver-O6WKR47U.js +75 -0
  545. package/dist/package-3YCWIQQ5.js +10 -0
  546. package/dist/parallel-orchestrator-NL7YJJU2.js +297 -0
  547. package/dist/parallel-worker.js +279 -0
  548. package/dist/parse-git-status-PIAF3OTP.js +10 -0
  549. package/dist/path-security-ETTH6TZL.js +39 -0
  550. package/dist/pattern-bank-UNJR5ADV.js +15 -0
  551. package/dist/plan-backlog-list-fast-VAGYBV3J.js +270 -0
  552. package/dist/plan-backlog-show-fast-SG2CZPW3.js +406 -0
  553. package/dist/plan-sprint-list-fast-LURAX47V.js +162 -0
  554. package/dist/plan-sprint-status-fast-FJAODCHD.js +208 -0
  555. package/dist/plan-task-status-fast-HNYBMQI4.js +349 -0
  556. package/dist/plan-to-flywheel-Z4U3GWPN.js +456 -0
  557. package/dist/planning-backlog-3CQ5QQBQ.js +319 -0
  558. package/dist/poetic-root-V5DNXEAE.js +17 -0
  559. package/dist/preflight-OPANWMME.js +12 -0
  560. package/dist/process-registry-PDZJPTAS.js +27 -0
  561. package/dist/process-scanner-C22SYXYD.js +22 -0
  562. package/dist/processes-KMQUD7HY.js +29 -0
  563. package/dist/processes-json-fast-IBDXZ6WW.js +135 -0
  564. package/dist/profile-SE5EVXAP.js +149 -0
  565. package/dist/prompts-WZZPGWBX.js +168 -0
  566. package/dist/protected-branches-RNTEX7ET.js +57 -0
  567. package/dist/provider-aware-resource-manager-QBTZJMNP.js +18 -0
  568. package/dist/provider-matrix-N5X57V3Y.js +154 -0
  569. package/dist/provider-matrix-renderer-MZDWKKID.js +139 -0
  570. package/dist/provider-output-forwarding-DERID3TP.js +30 -0
  571. package/dist/provider-registry-J5NRBJKI.js +128 -0
  572. package/dist/provider-temp-cleanup-KYGLF6YU.js +14 -0
  573. package/dist/prune-engine-Q6E2DXBN.js +451 -0
  574. package/dist/quality-gate-YRHMQAEI.js +70 -0
  575. package/dist/quickstart-FIRLKGJI.js +62 -0
  576. package/dist/readiness-VZTMSG6J.js +96 -0
  577. package/dist/registry-YODFY77A.js +153 -0
  578. package/dist/repair-helpers-TTV5FEF4.js +117 -0
  579. package/dist/repo-root-2IGD4H7X.js +22 -0
  580. package/dist/resolution-engine-D6TX6FRG.js +127 -0
  581. package/dist/resolve-provider-cli-O2P6XZBZ.js +35 -0
  582. package/dist/restore-telemetry-db-BQL6DTQF.js +360 -0
  583. package/dist/result-streamer-WEHW476R.js +19 -0
  584. package/dist/routing-events-DHPUZDDF.js +27 -0
  585. package/dist/routing-history-store-UWCEXAP3.js +46 -0
  586. package/dist/routing-planner-F5WQEUOM.js +160 -0
  587. package/dist/run-poetic-tui-J6LWRJUP.js +13517 -0
  588. package/dist/run-simulation.js +376 -0
  589. package/dist/runner-CS2TNGHA.js +1092 -0
  590. package/dist/runner-HHH7ZN2Z.js +1571 -0
  591. package/dist/safety-OCC4KJJR.js +64 -0
  592. package/dist/safety-stanza-7SV3HGG3.js +60 -0
  593. package/dist/sandbox-32QXJEMV.js +81 -0
  594. package/dist/sandbox-RSO7VP6V.js +94 -0
  595. package/dist/schema-extensions.sql +234 -0
  596. package/dist/security-2KI5XNDG.js +17 -0
  597. package/dist/setup-bb-plugin-QAQWZCV5.js +738 -0
  598. package/dist/setup-claude-code-P7BTTSPO.js +317 -0
  599. package/dist/setup-temp-cleanup-GASCWZ2I.js +20 -0
  600. package/dist/shared-utils-D6U6UREP.js +37 -0
  601. package/dist/simple-artifact-goal-OTXNGZY6.js +25 -0
  602. package/dist/sprint-UIXPYOXQ.js +338 -0
  603. package/dist/sprint-bridge-4BHMSC3M.js +68 -0
  604. package/dist/sprint-execution-service-2B7WHL5L.js +311 -0
  605. package/dist/sprint-manager-IDQUDNQI.js +91 -0
  606. package/dist/sqlite-wrapper-UDWCTNLJ.js +17 -0
  607. package/dist/stale-cleanup-orchestrator-XWXV7KCZ.js +62 -0
  608. package/dist/storage-access-F6ALDN4S.js +22 -0
  609. package/dist/synthesis-XD6EDVHF.js +185 -0
  610. package/dist/task-classifier-LNLXSHOM.js +494 -0
  611. package/dist/task-list-fast-PTMA4LUC.js +147 -0
  612. package/dist/task-manager-XAT7GOWB.js +93 -0
  613. package/dist/task-splitter-U7DJ7W6A.js +79 -0
  614. package/dist/task-type-detector-OLVOMXZO.js +21 -0
  615. package/dist/task-type-resolver-KKNQYSB4.js +42 -0
  616. package/dist/telemetry-5HWBBXLX.js +131 -0
  617. package/dist/telemetry-health-tracker-DMSSGBZ2.js +11 -0
  618. package/dist/telemetry-path-resolver-7ICSG276.js +28 -0
  619. package/dist/telemetry-reliability-XUOZNZZ6.js +125 -0
  620. package/dist/token-estimator-MEQUL3EJ.js +37 -0
  621. package/dist/transports-KNSSV2V4.js +255 -0
  622. package/dist/unified-cost-tracker-4TFRBVPR.js +35 -0
  623. package/dist/unified-state-cleanup-LJPF2BOW.js +276 -0
  624. package/dist/universal-cost-calculator-BAJV35GA.js +42 -0
  625. package/dist/user-agents-GHUGCSKN.js +22 -0
  626. package/dist/variant-delivery-state-KLRNG6XA.js +33 -0
  627. package/dist/variant-state-cleanup-MZGGLQAJ.js +280 -0
  628. package/dist/variant-success-PJXWE3ZV.js +12 -0
  629. package/dist/variant-worker-KUWKBLAH.js +4196 -0
  630. package/dist/variant-worker.js +24 -0
  631. package/dist/variants-JE2FSAQS.js +233 -0
  632. package/dist/verification-toolchains-V24UHW6Q.js +28 -0
  633. package/dist/verify-commands-H3DTCSGI.js +37 -0
  634. package/dist/warning-EGQGUUIO.js +12 -0
  635. package/dist/work-edge-RWEDWJZF.js +49 -0
  636. package/dist/work-item-writer-WHAVZXAY.js +19 -0
  637. package/dist/worker-7SA2VS2Y.js +1435 -0
  638. package/dist/worker.js +19 -0
  639. package/dist/worktree-metrics-3DFUYVYE.js +26 -0
  640. package/dist/writeback-VZKHYHSN.js +44 -0
  641. package/docs/CLI_REFERENCE.md +7042 -0
  642. package/docs/PROVIDER_SETUP.md +1570 -0
  643. package/docs/README.md +96 -0
  644. package/docs/TROUBLESHOOTING.md +2232 -0
  645. package/docs/getting-started/QUICK_START.md +294 -0
  646. package/docs/getting-started/README.md +188 -0
  647. package/docs/getting-started/SETUP.md +52 -0
  648. package/docs/reference/AGENT_CONTEXT.md +38 -0
  649. package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
  650. package/docs/reference/README.md +381 -0
  651. package/docs/reference/SECURITY.md +262 -0
  652. package/integrations/bb-plugin-poetic/README.md +362 -0
  653. package/integrations/bb-plugin-poetic/app.css +341 -0
  654. package/integrations/bb-plugin-poetic/app.tsx +5059 -0
  655. package/integrations/bb-plugin-poetic/package.json +45 -0
  656. package/integrations/bb-plugin-poetic/server.ts +444 -0
  657. package/integrations/bb-plugin-poetic/src/adapter.ts +3312 -0
  658. package/integrations/bb-plugin-poetic/src/backlog-authoring-model.ts +150 -0
  659. package/integrations/bb-plugin-poetic/src/backlog-authoring-schema.ts +355 -0
  660. package/integrations/bb-plugin-poetic/src/backlog-authoring-service.ts +419 -0
  661. package/integrations/bb-plugin-poetic/src/backlog-authoring-view.ts +1026 -0
  662. package/integrations/bb-plugin-poetic/src/competition-defaults-schema.ts +122 -0
  663. package/integrations/bb-plugin-poetic/src/competition-defaults-service.ts +105 -0
  664. package/integrations/bb-plugin-poetic/src/competition-defaults-view.ts +138 -0
  665. package/integrations/bb-plugin-poetic/src/contract.ts +615 -0
  666. package/integrations/bb-plugin-poetic/src/finalize-model.ts +205 -0
  667. package/integrations/bb-plugin-poetic/src/finalize-schema.ts +158 -0
  668. package/integrations/bb-plugin-poetic/src/finalize-service.ts +382 -0
  669. package/integrations/bb-plugin-poetic/src/finalize-view.ts +159 -0
  670. package/integrations/bb-plugin-poetic/src/judge-operations-readback.ts +303 -0
  671. package/integrations/bb-plugin-poetic/src/judge-operations-schema.ts +33 -0
  672. package/integrations/bb-plugin-poetic/src/judge-operations-view.ts +459 -0
  673. package/integrations/bb-plugin-poetic/src/model.ts +1302 -0
  674. package/integrations/bb-plugin-poetic/src/monitor-service.ts +233 -0
  675. package/integrations/bb-plugin-poetic/src/panel-read-ux.ts +97 -0
  676. package/integrations/bb-plugin-poetic/src/patch-preview-schema.ts +166 -0
  677. package/integrations/bb-plugin-poetic/src/patch-preview-service.ts +480 -0
  678. package/integrations/bb-plugin-poetic/src/patch-preview-view.ts +109 -0
  679. package/integrations/bb-plugin-poetic/src/planning-readback.ts +204 -0
  680. package/integrations/bb-plugin-poetic/src/planning-service.ts +594 -0
  681. package/integrations/bb-plugin-poetic/src/planning-workspace-schema.ts +95 -0
  682. package/integrations/bb-plugin-poetic/src/planning-workspace.ts +323 -0
  683. package/integrations/bb-plugin-poetic/src/poll-handoff.ts +136 -0
  684. package/integrations/bb-plugin-poetic/src/project-target-server.ts +21 -0
  685. package/integrations/bb-plugin-poetic/src/project-target.ts +45 -0
  686. package/integrations/bb-plugin-poetic/src/reference-index.ts +192 -0
  687. package/integrations/bb-plugin-poetic/src/repository-schema.ts +30 -0
  688. package/integrations/bb-plugin-poetic/src/result-explorer-view.ts +597 -0
  689. package/integrations/bb-plugin-poetic/src/result-readback-model.ts +163 -0
  690. package/integrations/bb-plugin-poetic/src/result-readback-schema.ts +319 -0
  691. package/integrations/bb-plugin-poetic/src/result-readback-service.ts +333 -0
  692. package/integrations/bb-plugin-poetic/src/run-page-view.ts +177 -0
  693. package/integrations/bb-plugin-poetic/src/setup-config-schema.ts +291 -0
  694. package/integrations/bb-plugin-poetic/src/setup-config-service.ts +590 -0
  695. package/integrations/bb-plugin-poetic/src/setup-config-view.ts +413 -0
  696. package/integrations/bb-plugin-poetic/src/sprint-close-model.ts +150 -0
  697. package/integrations/bb-plugin-poetic/src/sprint-close-schema.ts +136 -0
  698. package/integrations/bb-plugin-poetic/src/sprint-close-service.ts +341 -0
  699. package/integrations/bb-plugin-poetic/src/sprint-close-view.ts +116 -0
  700. package/integrations/bb-plugin-poetic/src/sprint-composition-model.ts +714 -0
  701. package/integrations/bb-plugin-poetic/src/sprint-composition-readback.ts +231 -0
  702. package/integrations/bb-plugin-poetic/src/sprint-composition-schema.ts +601 -0
  703. package/integrations/bb-plugin-poetic/src/sprint-composition-service.ts +775 -0
  704. package/integrations/bb-plugin-poetic/src/sprint-composition-view.ts +1221 -0
  705. package/integrations/bb-plugin-poetic/src/task-authoring-model.ts +567 -0
  706. package/integrations/bb-plugin-poetic/src/task-authoring-schema.ts +635 -0
  707. package/integrations/bb-plugin-poetic/src/task-authoring-service.ts +842 -0
  708. package/integrations/bb-plugin-poetic/src/task-authoring-view.ts +1227 -0
  709. package/integrations/bb-plugin-poetic/src/task-detail-readback.ts +56 -0
  710. package/integrations/bb-plugin-poetic/src/task-detail-schema.ts +144 -0
  711. package/integrations/bb-plugin-poetic/src/task-navigation.ts +446 -0
  712. package/integrations/bb-plugin-poetic/src/workbench-route.ts +74 -0
  713. package/integrations/bb-plugin-poetic/tests/host-contract.test.ts +773 -0
  714. package/integrations/bb-plugin-poetic/tsconfig.json +18 -0
  715. package/integrations/bb-plugin-poetic/types/PROVENANCE.json +52 -0
  716. package/integrations/bb-plugin-poetic/types/bb-plugin-sdk-app.d.ts +1444 -0
  717. package/integrations/bb-plugin-poetic/types/bb-plugin-sdk.d.ts +13030 -0
  718. package/integrations/bb-plugin-poetic/vitest.host.config.ts +71 -0
  719. package/npm-shrinkwrap.json +4950 -0
  720. package/package.json +331 -0
  721. package/schemas/README.md +80 -0
  722. package/schemas/config-v1.schema.json +136 -0
  723. package/schemas/execution-config.schema.json +47 -0
  724. package/schemas/judge-scoring.schema.json +370 -0
  725. package/schemas/poetic.config.schema.json +2214 -0
  726. package/schemas/provider-config.schema.json +203 -0
  727. package/schemas/telemetry-config.schema.json +79 -0
  728. package/schemas/user-preferences.schema.json +141 -0
  729. package/scripts/assert-node-runtime.mjs +140 -0
  730. package/scripts/preflight-native.mjs +49 -0
  731. package/scripts/preinstall-node-check.mjs +78 -0
  732. package/scripts/setup-git-hooks.mjs +24 -0
  733. package/scripts/sync.sh +2722 -0
  734. package/scripts/write-node-launcher.sh +108 -0
  735. package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
  736. package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
  737. package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
  738. package/templates/.poetic/README.md +37 -0
  739. package/templates/.poetic/agents/README.md +296 -0
  740. package/templates/.poetic/agents/api-documenter.md +147 -0
  741. package/templates/.poetic/agents/backend-architect.md +31 -0
  742. package/templates/.poetic/agents/code-reviewer.md +157 -0
  743. package/templates/.poetic/agents/data-scientist.md +179 -0
  744. package/templates/.poetic/agents/database-optimizer.md +145 -0
  745. package/templates/.poetic/agents/debugger.md +31 -0
  746. package/templates/.poetic/agents/deployment-engineer.md +164 -0
  747. package/templates/.poetic/agents/devops-troubleshooter.md +139 -0
  748. package/templates/.poetic/agents/frontend-developer.md +150 -0
  749. package/templates/.poetic/agents/javascript-pro.md +36 -0
  750. package/templates/.poetic/agents/performance-engineer.md +151 -0
  751. package/templates/.poetic/agents/python-pro.md +137 -0
  752. package/templates/.poetic/agents/test-automator.md +147 -0
  753. package/templates/.poetic/agents/typescript-pro.md +34 -0
  754. package/templates/.poetic/config/poetic.config.jsonc +69 -0
  755. package/templates/.poetic/config/project-context.template.json +6 -0
  756. package/templates/.poetic/config/task-type-aliases.presets/kanban.yaml +14 -0
  757. package/templates/.poetic/config/task-type-aliases.presets/scrum.yaml +17 -0
  758. package/templates/.poetic/config/task-type-aliases.presets/xp.yaml +12 -0
  759. package/templates/.poetic/config/task-type-aliases.yaml +28 -0
  760. package/templates/.poetic/gitignore.template +55 -0
  761. package/templates/.poetic/task-types/analysis.yaml +40 -0
  762. package/templates/.poetic/task-types/architecture.yaml +38 -0
  763. package/templates/.poetic/task-types/doc.yaml +35 -0
  764. package/templates/.poetic/task-types/feature.yaml +23 -0
  765. package/templates/.poetic/task-types/general.yaml +6 -0
  766. package/templates/.poetic/task-types/security.yaml +39 -0
  767. package/templates/AGENTS.template.md +99 -0
  768. package/templates/CLAUDE.template.md +1 -0
  769. package/templates/GEMINI.template.md +1 -0
  770. package/templates/builtin-workflows/code-review.yaml +73 -0
  771. package/templates/builtin-workflows/compete-streak.yaml +78 -0
  772. package/templates/builtin-workflows/hello-verify.yaml +10 -0
  773. package/templates/builtin-workflows/judge-regression.yaml +114 -0
  774. package/templates/builtin-workflows/skills/code-review/SKILL.md +60 -0
  775. package/templates/builtin-workflows/skills/hello-verify/SKILL.md +6 -0
  776. package/templates/guard-kit/GUARD_SETUP.md.template +255 -0
  777. package/templates/guard-kit/check.mjs.template +777 -0
  778. package/templates/guard-kit/config.json.template +6 -0
  779. package/templates/guard-kit/poetic-guard.yml.template +189 -0
  780. package/templates/profiles/README.md +56 -0
  781. package/templates/profiles/frontier-claude.json +27 -0
  782. package/templates/profiles/frontier-codex.json +26 -0
@@ -0,0 +1,1027 @@
1
+ import {
2
+ getArtifactDir
3
+ } from "./chunk-CQM3A35X.js";
4
+ import {
5
+ resolveContainedPath
6
+ } from "./chunk-WMPU2UOV.js";
7
+ import {
8
+ atomicWriteJson,
9
+ atomicWriteText
10
+ } from "./chunk-A3YGID55.js";
11
+ import {
12
+ emitCustomWarning
13
+ } from "./chunk-EJGCZGUF.js";
14
+ import {
15
+ PROVIDER_SECRET_PATTERNS
16
+ } from "./chunk-LPITVM7M.js";
17
+
18
+ // src/automation/flywheel-security.ts
19
+ var PROVIDER_REPLACEMENT_BY_ID = {
20
+ "anthropic-api-key": "[REDACTED_API_KEY]",
21
+ "openai-project-api-key": "[REDACTED_API_KEY]",
22
+ "openai-service-account-key": "[REDACTED_API_KEY]",
23
+ "openai-admin-api-key": "[REDACTED_API_KEY]",
24
+ "openrouter-api-key": "[REDACTED_API_KEY]",
25
+ "google-api-key": "[REDACTED_API_KEY]",
26
+ "xai-api-key": "[REDACTED_API_KEY]",
27
+ "slack-token": "[REDACTED_SLACK_TOKEN]"
28
+ };
29
+ var REDACTION_RULES = [
30
+ // Shared F1–F5 provider-prefix inventory (same sources/min lengths as error-sanitizer).
31
+ ...PROVIDER_SECRET_PATTERNS.map((pattern) => ({
32
+ source: pattern.source,
33
+ replacement: PROVIDER_REPLACEMENT_BY_ID[pattern.id],
34
+ name: pattern.id
35
+ })),
36
+ // Broader / flywheel-local API key forms (not part of the shared inventory).
37
+ {
38
+ source: "sk-[a-zA-Z0-9]{32,}",
39
+ replacement: "[REDACTED_API_KEY]",
40
+ name: "openai-api-key"
41
+ },
42
+ {
43
+ source: "ya29\\.[a-zA-Z0-9._-]+",
44
+ replacement: "[REDACTED_OAUTH_TOKEN]",
45
+ name: "google-oauth-token"
46
+ },
47
+ {
48
+ source: "ghp_[a-zA-Z0-9]{36}",
49
+ replacement: "[REDACTED_GITHUB_TOKEN]",
50
+ name: "github-pat"
51
+ },
52
+ {
53
+ source: "gho_[a-zA-Z0-9]{36}",
54
+ replacement: "[REDACTED_GITHUB_TOKEN]",
55
+ name: "github-oauth"
56
+ },
57
+ {
58
+ source: "AKIA[0-9A-Z]{16}",
59
+ replacement: "[REDACTED_AWS_KEY]",
60
+ name: "aws-access-key"
61
+ },
62
+ // Credentials in assignments/configurations
63
+ // Use negative lookahead (?!\[) to avoid matching our own [REDACTED] placeholders
64
+ {
65
+ source: 'password["\\s:=]+(?!\\[)[^\\s"]+',
66
+ replacement: "password=[REDACTED]",
67
+ name: "password"
68
+ },
69
+ {
70
+ source: 'token["\\s:=]+(?!\\[)[^\\s"]+',
71
+ replacement: "token=[REDACTED]",
72
+ name: "token"
73
+ },
74
+ {
75
+ source: 'secret["\\s:=]+(?!\\[)[^\\s"]+',
76
+ replacement: "secret=[REDACTED]",
77
+ name: "secret"
78
+ },
79
+ {
80
+ source: 'api[_-]?key["\\s:=]+(?!\\[)[^\\s"]+',
81
+ replacement: "api_key=[REDACTED]",
82
+ name: "api-key"
83
+ },
84
+ // Authorization headers
85
+ {
86
+ source: "Bearer\\s+[a-zA-Z0-9\\-._~+/]+=*",
87
+ replacement: "Bearer [REDACTED]",
88
+ name: "bearer-token"
89
+ },
90
+ {
91
+ source: "Authorization:\\s*[^\\n]+",
92
+ replacement: "Authorization: [REDACTED]",
93
+ name: "auth-header"
94
+ },
95
+ // PII patterns
96
+ {
97
+ source: "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b",
98
+ replacement: "[REDACTED_EMAIL]",
99
+ name: "email"
100
+ },
101
+ {
102
+ source: "\\b\\d{3}-\\d{2}-\\d{4}\\b",
103
+ replacement: "[REDACTED_SSN]",
104
+ name: "ssn"
105
+ },
106
+ {
107
+ source: "\\b\\d{4}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{4}\\b",
108
+ replacement: "[REDACTED_CARD]",
109
+ name: "credit-card"
110
+ },
111
+ // Database connection strings
112
+ {
113
+ source: 'postgres:\\/\\/[^@]+@[^\\s"]+',
114
+ replacement: "postgres://[REDACTED]@[REDACTED]",
115
+ name: "postgres-url"
116
+ },
117
+ {
118
+ source: 'mongodb(\\+srv)?:\\/\\/[^@]+@[^\\s"]+',
119
+ replacement: "mongodb://[REDACTED]",
120
+ name: "mongo-url"
121
+ },
122
+ {
123
+ source: 'mysql:\\/\\/[^@]+@[^\\s"]+',
124
+ replacement: "mysql://[REDACTED]",
125
+ name: "mysql-url"
126
+ },
127
+ // Private keys (PEM format)
128
+ {
129
+ source: "-----BEGIN [A-Z ]+-----[\\s\\S]*?-----END [A-Z ]+-----",
130
+ replacement: "[REDACTED_PRIVATE_KEY]",
131
+ name: "private-key"
132
+ },
133
+ // JWT tokens
134
+ {
135
+ source: "eyJ[a-zA-Z0-9_-]{10,}\\.eyJ[a-zA-Z0-9_-]{10,}\\.[a-zA-Z0-9_-]{10,}",
136
+ replacement: "[REDACTED_JWT]",
137
+ name: "jwt-token"
138
+ },
139
+ // Azure patterns
140
+ {
141
+ source: "AccountKey=[a-zA-Z0-9+/=]{32,}",
142
+ replacement: "AccountKey=[REDACTED]",
143
+ name: "azure-account-key"
144
+ },
145
+ // IP addresses — note: this pattern also matches 4-segment version strings (e.g. "1.2.3.4").
146
+ // A boundary-only fix risks masking real IPs that appear in version-like contexts, so the
147
+ // tradeoff is accepted: redact conservatively and let callers strip [REDACTED_IP] from
148
+ // non-sensitive outputs if needed.
149
+ {
150
+ source: "\\b(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d+)?\\b",
151
+ replacement: "[REDACTED_IP]",
152
+ name: "ip-address"
153
+ }
154
+ ];
155
+ function emitRedactionDiagnostic(ruleName, count) {
156
+ emitCustomWarning(
157
+ "INFO" /* INFO */,
158
+ "validation" /* VALIDATION */,
159
+ "Sensitive content was redacted before prompt use",
160
+ { subsystem: "flywheel-security", executionPhase: "validation" },
161
+ {
162
+ metadata: { ruleName, count },
163
+ skipConsole: true
164
+ }
165
+ );
166
+ }
167
+ function emitHighSensitiveContentDiagnostic(entry) {
168
+ emitCustomWarning(
169
+ "WARN" /* WARN */,
170
+ "validation" /* VALIDATION */,
171
+ "High sensitive content volume detected during prompt sanitization",
172
+ {
173
+ subsystem: "flywheel-security",
174
+ executionPhase: "validation"
175
+ },
176
+ {
177
+ metadata: {
178
+ workflowId: entry.workflowId,
179
+ source: entry.source,
180
+ stageId: entry.stageId,
181
+ patternsFound: entry.patternsFound
182
+ },
183
+ skipConsole: true
184
+ }
185
+ );
186
+ }
187
+ var Redactor = class {
188
+ lastRedactionCount = 0;
189
+ lastRedactedPatterns = [];
190
+ /**
191
+ * Redact sensitive patterns from text
192
+ *
193
+ * @param text - Text to redact
194
+ * @returns Redacted text
195
+ */
196
+ redactSensitive(text) {
197
+ let redacted = text;
198
+ this.lastRedactionCount = 0;
199
+ this.lastRedactedPatterns = [];
200
+ for (const rule of REDACTION_RULES) {
201
+ const pattern = new RegExp(rule.source, "gi");
202
+ const matches = redacted.match(pattern);
203
+ if (matches) {
204
+ this.lastRedactionCount += matches.length;
205
+ this.lastRedactedPatterns.push(rule.name);
206
+ emitRedactionDiagnostic(rule.name, matches.length);
207
+ }
208
+ redacted = redacted.replace(pattern, rule.replacement);
209
+ }
210
+ return redacted;
211
+ }
212
+ /**
213
+ * Check if text contains sensitive patterns
214
+ *
215
+ * Excludes already-redacted placeholders from detection to avoid
216
+ * false positives after redaction has been applied.
217
+ *
218
+ * @param text - Text to check
219
+ * @returns True if sensitive patterns found (excluding redacted placeholders)
220
+ */
221
+ containsSensitivePatterns(text) {
222
+ const textWithoutPlaceholders = text.replace(/\[REDACTED(?:_[A-Z_]+)?\]/gi, "");
223
+ for (const rule of REDACTION_RULES) {
224
+ const pattern = new RegExp(rule.source, "gi");
225
+ if (pattern.test(textWithoutPlaceholders)) {
226
+ return true;
227
+ }
228
+ }
229
+ return false;
230
+ }
231
+ /**
232
+ * Get count of patterns redacted in last call
233
+ */
234
+ getLastRedactionCount() {
235
+ return this.lastRedactionCount;
236
+ }
237
+ /**
238
+ * Get names of patterns redacted in last call
239
+ */
240
+ getLastRedactedPatterns() {
241
+ return [...this.lastRedactedPatterns];
242
+ }
243
+ };
244
+ var SecurityBoundary = class {
245
+ redactor;
246
+ auditLog = [];
247
+ workflowId;
248
+ constructor(workflowId) {
249
+ this.redactor = new Redactor();
250
+ this.workflowId = workflowId;
251
+ }
252
+ /**
253
+ * Sanitize text before prompt injection
254
+ *
255
+ * **CRITICAL**: This MUST be called for ALL text entering prompts,
256
+ * regardless of source. Even "already processed" text must be re-redacted
257
+ * because it might have been modified or contain reflected secrets.
258
+ *
259
+ * @param text - Text to sanitize
260
+ * @param source - Where the text came from (for audit)
261
+ * @param stageId - Current stage ID (for audit)
262
+ * @returns Sanitized text
263
+ * @throws Error if redaction fails (text still contains sensitive patterns)
264
+ */
265
+ async sanitizeForPromptInjection(text, source, stageId) {
266
+ const redacted = this.redactor.redactSensitive(text);
267
+ const entry = {
268
+ timestamp: /* @__PURE__ */ new Date(),
269
+ source,
270
+ originalLength: text.length,
271
+ redactedLength: redacted.length,
272
+ patternsFound: this.redactor.getLastRedactionCount(),
273
+ workflowId: this.workflowId,
274
+ stageId
275
+ };
276
+ this.auditLog.push(entry);
277
+ if (entry.patternsFound > 5) {
278
+ emitHighSensitiveContentDiagnostic(entry);
279
+ }
280
+ if (this.redactor.containsSensitivePatterns(redacted)) {
281
+ throw new Error(
282
+ `Redaction verification failed for ${source}: sensitive content remains after redaction`
283
+ );
284
+ }
285
+ return redacted;
286
+ }
287
+ /**
288
+ * Build retry prompt with mandatory re-redaction
289
+ *
290
+ * Constructs a retry prompt that includes judge feedback and context,
291
+ * with all components sanitized through the security boundary.
292
+ *
293
+ * @param stage - Stage configuration
294
+ * @param failure - Validation failure details
295
+ * @param context - Additional context to include
296
+ * @returns Sanitized retry prompt
297
+ */
298
+ async buildRetryPrompt(stage, failure, context) {
299
+ const safeJudgeFeedback = await this.sanitizeForPromptInjection(
300
+ failure.judgeFeedback,
301
+ "judge-feedback",
302
+ stage.id
303
+ );
304
+ let safeContext = "";
305
+ if (context) {
306
+ safeContext = await this.sanitizeForPromptInjection(context, "context-retrieval", stage.id);
307
+ }
308
+ const parts = [
309
+ stage.prompt ?? "",
310
+ "",
311
+ `Previous attempt scored ${failure.score}% (threshold: ${failure.threshold}%).`,
312
+ "",
313
+ "Issues to address:",
314
+ safeJudgeFeedback
315
+ ];
316
+ if (safeContext) {
317
+ parts.push("", "Relevant context:", safeContext);
318
+ }
319
+ const retryPrompt = parts.join("\n").trim();
320
+ return this.sanitizeForPromptInjection(retryPrompt, "retry-prompt", stage.id);
321
+ }
322
+ /**
323
+ * Sanitize stage output before storing or forwarding
324
+ *
325
+ * @param output - Stage output content
326
+ * @param stageId - Stage that produced the output
327
+ * @returns Sanitized output
328
+ */
329
+ async sanitizeStageOutput(output, stageId) {
330
+ return this.sanitizeForPromptInjection(output, "stage-output", stageId);
331
+ }
332
+ /**
333
+ * Sanitize template variable before interpolation
334
+ *
335
+ * @param value - Variable value
336
+ * @param stageId - Stage using the variable
337
+ * @returns Sanitized value
338
+ */
339
+ async sanitizeTemplateVariable(value, stageId) {
340
+ return this.sanitizeForPromptInjection(value, "template-variable", stageId);
341
+ }
342
+ /**
343
+ * Get audit log for security review
344
+ */
345
+ getAuditLog() {
346
+ return [...this.auditLog];
347
+ }
348
+ /**
349
+ * Get summary statistics from audit log
350
+ */
351
+ getAuditSummary() {
352
+ const bySource = {
353
+ "user-input": 0,
354
+ "judge-feedback": 0,
355
+ "context-retrieval": 0,
356
+ "stage-output": 0,
357
+ "template-variable": 0,
358
+ "retry-prompt": 0
359
+ };
360
+ let totalRedactions = 0;
361
+ let highRiskEvents = 0;
362
+ for (const entry of this.auditLog) {
363
+ totalRedactions += entry.patternsFound;
364
+ bySource[entry.source] += entry.patternsFound;
365
+ if (entry.patternsFound > 5) {
366
+ highRiskEvents++;
367
+ }
368
+ }
369
+ return {
370
+ totalRedactions,
371
+ bySource,
372
+ highRiskEvents
373
+ };
374
+ }
375
+ /**
376
+ * Clear audit log (for testing or after review)
377
+ */
378
+ clearAuditLog() {
379
+ this.auditLog = [];
380
+ }
381
+ };
382
+ function createSecurityBoundary(workflowId) {
383
+ return new SecurityBoundary(workflowId);
384
+ }
385
+
386
+ // src/automation/flywheel-artifact-store.ts
387
+ import * as fs from "fs/promises";
388
+ import * as path from "path";
389
+ import lockfile from "proper-lockfile";
390
+ var ArtifactNotFoundError = class extends Error {
391
+ constructor(ref, stageId, reason) {
392
+ super(
393
+ `Stage '${stageId}' references missing artifact '${ref}'. ${reason}
394
+ Hint: Ensure the dependency stage completed successfully and produced the expected output.`
395
+ );
396
+ this.ref = ref;
397
+ this.stageId = stageId;
398
+ this.reason = reason;
399
+ this.name = "ArtifactNotFoundError";
400
+ }
401
+ ref;
402
+ stageId;
403
+ reason;
404
+ };
405
+ var ArtifactValidationError = class extends Error {
406
+ constructor(ref, reason) {
407
+ super(`Invalid artifact '${ref}': ${reason}`);
408
+ this.ref = ref;
409
+ this.reason = reason;
410
+ this.name = "ArtifactValidationError";
411
+ }
412
+ ref;
413
+ reason;
414
+ };
415
+ var ArtifactPathEscapeError = class extends Error {
416
+ constructor(stageId, outputName, reason) {
417
+ super(
418
+ `Refusing to write artifact '${stageId}.${outputName}': ${reason}. Stage ids and output names must match ^[A-Za-z0-9_-]+$ and resolve inside the artifact store.`
419
+ );
420
+ this.stageId = stageId;
421
+ this.outputName = outputName;
422
+ this.name = "ArtifactPathEscapeError";
423
+ }
424
+ stageId;
425
+ outputName;
426
+ };
427
+ var ARTIFACT_EXTENSIONS = {
428
+ text: "txt",
429
+ json: "json",
430
+ diff: "diff",
431
+ files: "txt",
432
+ // List of files as text
433
+ testResults: "json"
434
+ // Test results as structured JSON
435
+ };
436
+ var VALID_ARTIFACT_TYPES = new Set(Object.keys(ARTIFACT_EXTENSIONS));
437
+ function isStageOutputType(value) {
438
+ return typeof value === "string" && VALID_ARTIFACT_TYPES.has(value);
439
+ }
440
+ function parseStoredTimestamp(value) {
441
+ if (value instanceof Date) {
442
+ return Number.isNaN(value.getTime()) ? void 0 : value;
443
+ }
444
+ if (typeof value !== "string" && typeof value !== "number") {
445
+ return void 0;
446
+ }
447
+ const parsed = new Date(value);
448
+ return Number.isNaN(parsed.getTime()) ? void 0 : parsed;
449
+ }
450
+ var METADATA_LOCK_DISABLE_ENV = "POETIC_FLYWHEEL_ARTIFACT_METADATA_LOCK_DISABLE";
451
+ function isMetadataFileLockDisabled() {
452
+ const raw = process.env[METADATA_LOCK_DISABLE_ENV]?.trim().toLowerCase() ?? "";
453
+ return raw === "1" || raw === "true" || raw === "yes" || raw === "on";
454
+ }
455
+ async function writeFileWithParentRetry(filePath, content) {
456
+ await atomicWriteText(filePath, content, { ensureDir: true });
457
+ }
458
+ function findPathComponentViolation(value) {
459
+ if (value.length === 0) return "component is empty";
460
+ if (value.includes("\0")) return "component contains a null byte";
461
+ if (value.includes("/") || value.includes("\\")) {
462
+ return "component contains a path separator";
463
+ }
464
+ if (value === "." || value === "..") return "component is a relative path segment";
465
+ if (path.isAbsolute(value)) return "component is an absolute path";
466
+ if (path.basename(value) !== value) return "component is not a single path component";
467
+ return void 0;
468
+ }
469
+ function resolveArtifactWritePath(basePath, stageId, name, filename) {
470
+ const stageIdViolation = findPathComponentViolation(stageId);
471
+ if (stageIdViolation) {
472
+ throw new ArtifactPathEscapeError(stageId, name, `stage id ${stageIdViolation}`);
473
+ }
474
+ const nameViolation = findPathComponentViolation(name);
475
+ if (nameViolation) {
476
+ throw new ArtifactPathEscapeError(stageId, name, `output name ${nameViolation}`);
477
+ }
478
+ const stageDir = path.join(basePath, stageId);
479
+ const artifactPath = path.join(stageDir, filename);
480
+ const contained = resolveContainedPath(basePath, containmentCandidate(basePath, artifactPath));
481
+ if (!contained.contained) {
482
+ throw new ArtifactPathEscapeError(
483
+ stageId,
484
+ name,
485
+ `resolved path escapes the artifact store (${contained.reason})`
486
+ );
487
+ }
488
+ return { stageDir, artifactPath };
489
+ }
490
+ function validateArtifactIdentity(entry) {
491
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) return void 0;
492
+ const { stageId, name, type, size, createdAt } = entry;
493
+ if (typeof stageId !== "string" || findPathComponentViolation(stageId)) return void 0;
494
+ if (typeof name !== "string" || findPathComponentViolation(name)) return void 0;
495
+ if (!isStageOutputType(type)) return void 0;
496
+ if (typeof size !== "number" || !Number.isFinite(size) || size < 0) return void 0;
497
+ const created = parseStoredTimestamp(createdAt);
498
+ if (!created) return void 0;
499
+ return { stageId, name, type, size, createdAt: created };
500
+ }
501
+ function parsePersistedMetadata(content, basePath) {
502
+ const parsed = JSON.parse(content);
503
+ if (!Array.isArray(parsed)) {
504
+ throw new Error("artifact metadata is not an array");
505
+ }
506
+ const entries = /* @__PURE__ */ new Map();
507
+ let malformed = 0;
508
+ let uncontained = 0;
509
+ for (const raw of parsed) {
510
+ const identity = validateArtifactIdentity(raw);
511
+ if (!identity) {
512
+ malformed += 1;
513
+ continue;
514
+ }
515
+ let artifactPath;
516
+ try {
517
+ artifactPath = resolveArtifactWritePath(
518
+ basePath,
519
+ identity.stageId,
520
+ identity.name,
521
+ `${identity.name}.${ARTIFACT_EXTENSIONS[identity.type]}`
522
+ ).artifactPath;
523
+ } catch {
524
+ uncontained += 1;
525
+ continue;
526
+ }
527
+ entries.set(`${identity.stageId}.${identity.name}`, {
528
+ stageId: identity.stageId,
529
+ name: identity.name,
530
+ type: identity.type,
531
+ path: artifactPath,
532
+ size: identity.size,
533
+ createdAt: identity.createdAt
534
+ });
535
+ }
536
+ return { entries, malformed, uncontained };
537
+ }
538
+ function containmentCandidate(root, candidate) {
539
+ const relative2 = path.relative(root, candidate);
540
+ if (relative2 === "" || relative2.startsWith("..") || path.isAbsolute(relative2)) {
541
+ return candidate;
542
+ }
543
+ return relative2;
544
+ }
545
+ async function acquireMetadataFileLock(lockTargetPath) {
546
+ if (isMetadataFileLockDisabled()) {
547
+ return async () => {
548
+ };
549
+ }
550
+ await fs.mkdir(path.dirname(lockTargetPath), { recursive: true });
551
+ try {
552
+ const handle = await fs.open(lockTargetPath, "a");
553
+ await handle.close();
554
+ } catch {
555
+ }
556
+ return lockfile.lock(lockTargetPath, {
557
+ stale: 3e4,
558
+ realpath: false,
559
+ retries: { retries: 200, minTimeout: 25, maxTimeout: 250, factor: 1.5 }
560
+ });
561
+ }
562
+ function parseArtifactRef(ref) {
563
+ const dotIndex = ref.indexOf(".");
564
+ if (dotIndex === -1 || dotIndex === 0 || dotIndex === ref.length - 1) {
565
+ throw new Error(
566
+ `Invalid artifact reference format: '${ref}'. Expected 'stageId.outputName' (e.g., 'p1-scan.assignment')`
567
+ );
568
+ }
569
+ return {
570
+ stageId: ref.slice(0, dotIndex),
571
+ outputName: ref.slice(dotIndex + 1)
572
+ };
573
+ }
574
+ var ArtifactStore = class {
575
+ workflowId;
576
+ basePath;
577
+ metadataPath;
578
+ metadata = /* @__PURE__ */ new Map();
579
+ initialized = false;
580
+ /**
581
+ * In-process promise-chain lock. Serialises concurrent save() calls on this
582
+ * instance so they do not race inside saveMetadata().
583
+ */
584
+ metadataWriteLock = Promise.resolve();
585
+ constructor(workflowId) {
586
+ this.workflowId = workflowId;
587
+ this.basePath = path.join(getArtifactDir(workflowId), "artifacts");
588
+ this.metadataPath = path.join(this.basePath, "_metadata.json");
589
+ }
590
+ /**
591
+ * Initialize the artifact store
592
+ *
593
+ * Creates the artifacts directory and loads existing metadata if present.
594
+ * Must be called before any save/load operations.
595
+ *
596
+ * Persisted metadata is treated as untrusted input: each entry's shape is
597
+ * validated and its filesystem path is re-derived from `stageId`/`name`/`type`
598
+ * against this store's current base path. A `path` field written into
599
+ * `_metadata.json` by anything other than this store is ignored, so it cannot
600
+ * redirect a later `load()` at a file outside the workflow. Entries whose
601
+ * re-derived file no longer exists simply fail `load()` through the existing
602
+ * ArtifactNotFoundError path.
603
+ */
604
+ async initialize() {
605
+ if (this.initialized) return;
606
+ await fs.mkdir(this.basePath, { recursive: true });
607
+ try {
608
+ const metadataContent = await fs.readFile(this.metadataPath, "utf-8");
609
+ const { entries, malformed, uncontained } = parsePersistedMetadata(
610
+ metadataContent,
611
+ this.basePath
612
+ );
613
+ for (const [key, artifact] of entries) {
614
+ this.metadata.set(key, artifact);
615
+ }
616
+ if (malformed > 0) {
617
+ console.warn(`Warning: Skipped ${malformed} malformed artifact metadata entries`);
618
+ }
619
+ if (uncontained > 0) {
620
+ console.warn(
621
+ `Warning: Skipped ${uncontained} artifact metadata entries that resolve outside the artifact store`
622
+ );
623
+ }
624
+ } catch (error) {
625
+ if (error.code !== "ENOENT") {
626
+ console.warn(`Warning: Failed to load artifact metadata: ${error}`);
627
+ }
628
+ }
629
+ this.initialized = true;
630
+ }
631
+ /**
632
+ * Save an artifact to the store
633
+ *
634
+ * @param stageId - ID of the stage producing the artifact
635
+ * @param name - Output name (from stage.outputs configuration)
636
+ * @param type - Artifact type (determines file extension and validation)
637
+ * @param content - Artifact content (string or object for JSON types)
638
+ * @returns Stored artifact metadata
639
+ */
640
+ async save(stageId, name, type, content) {
641
+ this.ensureInitialized();
642
+ const extension = ARTIFACT_EXTENSIONS[type];
643
+ const filename = `${name}.${extension}`;
644
+ const { stageDir, artifactPath } = resolveArtifactWritePath(
645
+ this.basePath,
646
+ stageId,
647
+ name,
648
+ filename
649
+ );
650
+ await fs.mkdir(stageDir, { recursive: true });
651
+ let serializedContent;
652
+ if (type === "json" || type === "testResults") {
653
+ serializedContent = typeof content === "string" ? content : JSON.stringify(content, null, 2);
654
+ try {
655
+ JSON.parse(serializedContent);
656
+ } catch {
657
+ throw new ArtifactValidationError(
658
+ `${stageId}.${name}`,
659
+ `Content is not valid JSON: ${serializedContent.slice(0, 100)}...`
660
+ );
661
+ }
662
+ } else {
663
+ serializedContent = typeof content === "string" ? content : JSON.stringify(content);
664
+ }
665
+ await writeFileWithParentRetry(artifactPath, serializedContent);
666
+ const artifact = {
667
+ stageId,
668
+ name,
669
+ type,
670
+ path: artifactPath,
671
+ size: Buffer.byteLength(serializedContent, "utf-8"),
672
+ createdAt: /* @__PURE__ */ new Date()
673
+ };
674
+ const key = `${stageId}.${name}`;
675
+ this.metadata.set(key, artifact);
676
+ await this.saveMetadata(key, artifact);
677
+ return artifact;
678
+ }
679
+ /**
680
+ * Load an artifact from the store
681
+ *
682
+ * @param ref - Artifact reference in format 'stageId.outputName'
683
+ * @param requestingStageId - ID of the stage requesting the artifact (for error messages)
684
+ * @returns Artifact content as string
685
+ * @throws ArtifactNotFoundError if artifact doesn't exist or escapes the store root
686
+ */
687
+ async load(ref, requestingStageId) {
688
+ this.ensureInitialized();
689
+ const { stageId, outputName } = parseArtifactRef(ref);
690
+ const key = `${stageId}.${outputName}`;
691
+ const artifact = this.metadata.get(key);
692
+ if (!artifact) {
693
+ throw new ArtifactNotFoundError(
694
+ ref,
695
+ requestingStageId ?? "unknown",
696
+ `No artifact found for reference '${ref}'. Available artifacts: [${Array.from(this.metadata.keys()).join(", ") || "none"}]`
697
+ );
698
+ }
699
+ const containment = resolveContainedPath(
700
+ this.basePath,
701
+ containmentCandidate(this.basePath, artifact.path)
702
+ );
703
+ if (!containment.contained) {
704
+ throw new ArtifactNotFoundError(
705
+ ref,
706
+ requestingStageId ?? "unknown",
707
+ `Artifact path escapes the workflow artifact directory (${containment.reason}).`
708
+ );
709
+ }
710
+ try {
711
+ return await fs.readFile(containment.canonicalPath, "utf-8");
712
+ } catch (_error) {
713
+ throw new ArtifactNotFoundError(
714
+ ref,
715
+ requestingStageId ?? "unknown",
716
+ `Artifact file not found at '${artifact.path}'. The file may have been deleted.`
717
+ );
718
+ }
719
+ }
720
+ /**
721
+ * Load an artifact and parse as JSON
722
+ *
723
+ * @param ref - Artifact reference
724
+ * @param requestingStageId - ID of the stage requesting the artifact
725
+ * @returns Parsed JSON content
726
+ */
727
+ async loadJson(ref, requestingStageId) {
728
+ const content = await this.load(ref, requestingStageId);
729
+ try {
730
+ return JSON.parse(content);
731
+ } catch {
732
+ throw new ArtifactValidationError(ref, "Artifact content is not valid JSON");
733
+ }
734
+ }
735
+ /**
736
+ * Check if an artifact exists
737
+ *
738
+ * @param ref - Artifact reference
739
+ * @returns true if artifact exists
740
+ */
741
+ has(ref) {
742
+ this.ensureInitialized();
743
+ const { stageId, outputName } = parseArtifactRef(ref);
744
+ return this.metadata.has(`${stageId}.${outputName}`);
745
+ }
746
+ /**
747
+ * Get metadata for an artifact
748
+ *
749
+ * @param ref - Artifact reference
750
+ * @returns Artifact metadata or undefined if not found
751
+ */
752
+ getMetadata(ref) {
753
+ this.ensureInitialized();
754
+ const { stageId, outputName } = parseArtifactRef(ref);
755
+ return this.metadata.get(`${stageId}.${outputName}`);
756
+ }
757
+ /**
758
+ * List all artifacts in the store
759
+ *
760
+ * @returns Array of all stored artifact metadata
761
+ */
762
+ list() {
763
+ this.ensureInitialized();
764
+ return Array.from(this.metadata.values());
765
+ }
766
+ /**
767
+ * List artifacts for a specific stage
768
+ *
769
+ * @param stageId - Stage ID to filter by
770
+ * @returns Array of artifacts from the specified stage
771
+ */
772
+ listByStage(stageId) {
773
+ this.ensureInitialized();
774
+ return Array.from(this.metadata.values()).filter((a) => a.stageId === stageId);
775
+ }
776
+ /**
777
+ * Resolve multiple artifact inputs and format for prompt injection
778
+ *
779
+ * @param inputs - Array of artifact references
780
+ * @param requestingStageId - ID of the stage requesting the artifacts
781
+ * @returns Formatted string with all artifact contents
782
+ */
783
+ async resolveInputs(inputs, requestingStageId) {
784
+ if (!inputs || inputs.length === 0) {
785
+ return "";
786
+ }
787
+ const resolvedArtifacts = [];
788
+ for (const ref of inputs) {
789
+ const content = await this.load(ref, requestingStageId);
790
+ const metadata = this.getMetadata(ref);
791
+ const header = `--- Artifact: ${ref} (${metadata?.type ?? "unknown"}) ---`;
792
+ resolvedArtifacts.push(`${header}
793
+ ${content}
794
+ `);
795
+ }
796
+ return resolvedArtifacts.join("\n");
797
+ }
798
+ /**
799
+ * Get the base path for this store
800
+ */
801
+ getBasePath() {
802
+ return this.basePath;
803
+ }
804
+ /**
805
+ * Get the workflow ID
806
+ */
807
+ getWorkflowId() {
808
+ return this.workflowId;
809
+ }
810
+ /**
811
+ * Ensure store is initialized
812
+ */
813
+ ensureInitialized() {
814
+ if (!this.initialized) {
815
+ throw new Error("ArtifactStore not initialized. Call initialize() before using the store.");
816
+ }
817
+ }
818
+ /**
819
+ * Persist a single new or updated artifact entry to _metadata.json.
820
+ *
821
+ * Correctness guarantees:
822
+ * 1. In-process serialisation: chained onto metadataWriteLock so rapid
823
+ * concurrent save() calls on this instance are sequenced.
824
+ * 2. Cross-process serialisation: acquires a proper-lockfile exclusive lock
825
+ * on the metadata file before performing the read-merge-write cycle so
826
+ * concurrent saves from parallel stages in the same or separate processes
827
+ * cannot overwrite each other's entries.
828
+ * 3. Read-merge-write under lock: re-reads _metadata.json from disk while
829
+ * holding the lock, merges the new entry into the on-disk state, then
830
+ * writes back. This prevents the snapshot-then-write problem where a
831
+ * concurrent writer's entries are clobbered by an older in-memory snapshot.
832
+ * 4. Crash safety: uses atomicWriteJson (temp + rename) so a mid-write crash
833
+ * cannot leave a partially-written metadata file.
834
+ *
835
+ * @param newKey - The metadata map key for the entry just written (stageId.name)
836
+ * @param newArtifact - The artifact metadata to persist
837
+ */
838
+ saveMetadata(newKey, newArtifact) {
839
+ this.metadataWriteLock = this.metadataWriteLock.catch(() => {
840
+ }).then(async () => {
841
+ let releaseFileLock;
842
+ try {
843
+ releaseFileLock = await acquireMetadataFileLock(this.metadataPath);
844
+ let onDisk = /* @__PURE__ */ new Map();
845
+ try {
846
+ const raw = await fs.readFile(this.metadataPath, "utf-8");
847
+ onDisk = parsePersistedMetadata(raw, this.basePath).entries;
848
+ } catch (err) {
849
+ if (err.code !== "ENOENT") {
850
+ }
851
+ }
852
+ const merged = new Map(onDisk);
853
+ for (const [k, v] of this.metadata) {
854
+ merged.set(k, v);
855
+ }
856
+ merged.set(newKey, newArtifact);
857
+ for (const [k, v] of merged) {
858
+ this.metadata.set(k, v);
859
+ }
860
+ await atomicWriteJson(this.metadataPath, Array.from(merged.values()));
861
+ } finally {
862
+ if (releaseFileLock) {
863
+ try {
864
+ await releaseFileLock();
865
+ } catch {
866
+ }
867
+ }
868
+ }
869
+ });
870
+ return this.metadataWriteLock;
871
+ }
872
+ };
873
+ async function resolvePromptArtifacts(prompt, inputs, store, stageId, securityBoundary) {
874
+ const boundary = securityBoundary ?? createSecurityBoundary(store.getWorkflowId());
875
+ let resolvedPrompt = prompt;
876
+ const placeholderPattern = /\{\{artifact:([^}]+)\}\}/g;
877
+ const matches = [...prompt.matchAll(placeholderPattern)];
878
+ for (const match of matches) {
879
+ const ref = match[1] ?? "";
880
+ let content = await store.load(ref, stageId);
881
+ content = await boundary.sanitizeForPromptInjection(content, "stage-output", stageId);
882
+ resolvedPrompt = resolvedPrompt.split(match[0]).join(content);
883
+ }
884
+ if (inputs && inputs.length > 0) {
885
+ let inputsContext = await store.resolveInputs(inputs, stageId);
886
+ if (inputsContext) {
887
+ inputsContext = await boundary.sanitizeForPromptInjection(
888
+ inputsContext,
889
+ "stage-output",
890
+ stageId
891
+ );
892
+ }
893
+ if (inputsContext) {
894
+ resolvedPrompt = `## Input Artifacts
895
+
896
+ ${inputsContext}
897
+
898
+ ## Task
899
+
900
+ ${resolvedPrompt}`;
901
+ }
902
+ }
903
+ return resolvedPrompt;
904
+ }
905
+
906
+ // src/automation/flywheel-types.ts
907
+ function normalizeWorkflowJudgeTypeToken(token) {
908
+ const normalized = token.trim().toLowerCase();
909
+ if (normalized === "ai") return "ai";
910
+ if (normalized === "multi-lens" || normalized === "hybrid") return "multi-lens";
911
+ if (normalized === "multi-agent" || normalized === "agentic") return "multi-agent";
912
+ return null;
913
+ }
914
+ function deriveAiJudgeInvocationArgs(judgeConfig) {
915
+ if (judgeConfig?.judgeRun !== void 0) {
916
+ const runSet = dedupeWorkflowJudgeRunSet(judgeConfig.judgeRun);
917
+ const aiJudgePrimary2 = judgeConfig.judgePrimary ? normalizeWorkflowJudgeTypeToken(judgeConfig.judgePrimary) ?? runSet[0] ?? "ai" : runSet[0] ?? "ai";
918
+ const aiJudgeRun2 = runSet.join(",");
919
+ return { aiJudgeRun: aiJudgeRun2, aiJudgePrimary: aiJudgePrimary2, judgeRunRequested: runSet };
920
+ }
921
+ const judgeType = judgeConfig?.type ?? "ai";
922
+ const runComparison = judgeConfig?.runComparison === true;
923
+ const aiJudgeRun = runComparison ? judgeType === "ai" ? "ai,multi-lens" : "multi-lens" : void 0;
924
+ const aiJudgePrimary = !runComparison ? judgeType : judgeType === "multi-lens" ? "multi-lens" : "ai";
925
+ const judgeRunRequested = aiJudgeRun ? aiJudgeRun.split(",") : void 0;
926
+ return { aiJudgeRun, aiJudgePrimary, judgeRunRequested };
927
+ }
928
+ function dedupeWorkflowJudgeRunSet(judgeRun) {
929
+ const seen = /* @__PURE__ */ new Set();
930
+ const result = [];
931
+ for (const entry of judgeRun) {
932
+ const normalized = normalizeWorkflowJudgeTypeToken(entry);
933
+ if (normalized && !seen.has(normalized)) {
934
+ seen.add(normalized);
935
+ result.push(normalized);
936
+ }
937
+ }
938
+ return result;
939
+ }
940
+ function validateCompetitionJudgeConfig(stageId, judgeConfig) {
941
+ if (!judgeConfig) {
942
+ return { valid: true };
943
+ }
944
+ const errors = [];
945
+ if (judgeConfig.matrixAuthority !== void 0) {
946
+ if (judgeConfig.matrixAuthority !== "automatic" && judgeConfig.matrixAuthority !== "off" && judgeConfig.matrixAuthority !== "advisory") {
947
+ errors.push(
948
+ `Stage '${stageId}' competition.judgeConfig.matrixAuthority must be 'automatic', 'off', or 'advisory' (got '${String(judgeConfig.matrixAuthority)}')`
949
+ );
950
+ }
951
+ }
952
+ if (judgeConfig.judgeRun !== void 0) {
953
+ if (!Array.isArray(judgeConfig.judgeRun) || judgeConfig.judgeRun.length === 0) {
954
+ errors.push(
955
+ `Stage '${stageId}' competition.judgeConfig.judgeRun must be a non-empty string[]`
956
+ );
957
+ } else {
958
+ for (const [idx, entry] of judgeConfig.judgeRun.entries()) {
959
+ if (typeof entry !== "string" || entry.trim().length === 0) {
960
+ errors.push(
961
+ `Stage '${stageId}' competition.judgeConfig.judgeRun[${idx}] must be a non-empty string`
962
+ );
963
+ continue;
964
+ }
965
+ if (normalizeWorkflowJudgeTypeToken(entry) === null) {
966
+ errors.push(
967
+ `Stage '${stageId}' competition.judgeConfig.judgeRun[${idx}] has unknown judge id '${entry}'. Valid ids: ai, multi-lens, multi-agent (aliases: hybrid, agentic)`
968
+ );
969
+ }
970
+ }
971
+ }
972
+ if (judgeConfig.runComparison !== void 0) {
973
+ errors.push(
974
+ `Stage '${stageId}' competition.judgeConfig cannot set both judgeRun and runComparison; remove runComparison when judgeRun is present`
975
+ );
976
+ }
977
+ const normalizedRunSet = dedupeWorkflowJudgeRunSet(judgeConfig.judgeRun ?? []);
978
+ if (judgeConfig.judgePrimary !== void 0) {
979
+ if (typeof judgeConfig.judgePrimary !== "string" || judgeConfig.judgePrimary.trim().length === 0) {
980
+ errors.push(
981
+ `Stage '${stageId}' competition.judgeConfig.judgePrimary must be a non-empty string when provided`
982
+ );
983
+ } else if (normalizeWorkflowJudgeTypeToken(judgeConfig.judgePrimary) === null) {
984
+ errors.push(
985
+ `Stage '${stageId}' competition.judgeConfig.judgePrimary has unknown judge id '${judgeConfig.judgePrimary}'. Valid ids: ai, multi-lens, multi-agent (aliases: hybrid, agentic)`
986
+ );
987
+ } else {
988
+ const normalizedPrimary = normalizeWorkflowJudgeTypeToken(judgeConfig.judgePrimary);
989
+ if (!normalizedRunSet.includes(normalizedPrimary)) {
990
+ errors.push(
991
+ `Stage '${stageId}' competition.judgeConfig.judgePrimary '${judgeConfig.judgePrimary}' must be a member of judgeRun [${normalizedRunSet.join(", ")}]`
992
+ );
993
+ }
994
+ }
995
+ }
996
+ } else if (judgeConfig.judgePrimary !== void 0) {
997
+ errors.push(
998
+ `Stage '${stageId}' competition.judgeConfig.judgePrimary requires judgeRun to be set`
999
+ );
1000
+ }
1001
+ if (errors.length > 0) {
1002
+ return { valid: false, error: errors.join("; ") };
1003
+ }
1004
+ return { valid: true };
1005
+ }
1006
+ function hasStageType(result, stageType) {
1007
+ return result.stageType === stageType;
1008
+ }
1009
+ function isVerifyStageResult(result) {
1010
+ return hasStageType(result, "verify");
1011
+ }
1012
+ function isCompetitionStageResult(result) {
1013
+ return hasStageType(result, "competition");
1014
+ }
1015
+
1016
+ export {
1017
+ createSecurityBoundary,
1018
+ ArtifactNotFoundError,
1019
+ parseArtifactRef,
1020
+ ArtifactStore,
1021
+ resolvePromptArtifacts,
1022
+ deriveAiJudgeInvocationArgs,
1023
+ validateCompetitionJudgeConfig,
1024
+ isVerifyStageResult,
1025
+ isCompetitionStageResult
1026
+ };
1027
+ //# sourceMappingURL=chunk-4HN6DF7V.js.map