@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,1597 @@
1
+ import {
2
+ OptimizationConfigManager
3
+ } from "./chunk-7FMJVYBS.js";
4
+ import {
5
+ PromptVersionStore
6
+ } from "./chunk-LR5IJIGV.js";
7
+ import {
8
+ ExecutionTracker
9
+ } from "./chunk-U45RTRGY.js";
10
+ import {
11
+ AutoTuningEngine,
12
+ AutomaticPromptOptimizer,
13
+ ProviderTracker,
14
+ TunerActivationAuthority
15
+ } from "./chunk-7MMLMXO6.js";
16
+ import {
17
+ VariantGenerator
18
+ } from "./chunk-Q3WIC6GQ.js";
19
+ import "./chunk-OQ6K46CK.js";
20
+ import "./chunk-6BM72ZMG.js";
21
+ import "./chunk-3AOKYKA7.js";
22
+ import "./chunk-7QCZSLBH.js";
23
+ import "./chunk-VXF4Q3FW.js";
24
+ import "./chunk-6Y5TWI7H.js";
25
+ import {
26
+ resolveDefaultProvider
27
+ } from "./chunk-XPU2XADL.js";
28
+ import "./chunk-AURFMVCD.js";
29
+ import "./chunk-VBNCKCCI.js";
30
+ import "./chunk-SZ7DL357.js";
31
+ import "./chunk-4VJITV4P.js";
32
+ import "./chunk-SURZ2WFE.js";
33
+ import "./chunk-SP3LFU6B.js";
34
+ import "./chunk-R4UWBC35.js";
35
+ import {
36
+ TelemetryLogger
37
+ } from "./chunk-CKNX3TTP.js";
38
+ import "./chunk-FYOILAN5.js";
39
+ import "./chunk-J62KPGII.js";
40
+ import "./chunk-XAONGNST.js";
41
+ import "./chunk-GAFJEYLK.js";
42
+ import "./chunk-H6G7QRMQ.js";
43
+ import "./chunk-J6P3FWWW.js";
44
+ import "./chunk-CP7H3HSP.js";
45
+ import "./chunk-ETYDXCK7.js";
46
+ import "./chunk-BSE4R6XD.js";
47
+ import "./chunk-UR2IBGIM.js";
48
+ import "./chunk-JSWMRQYG.js";
49
+ import "./chunk-XGYF2QMZ.js";
50
+ import "./chunk-72YTZMAM.js";
51
+ import "./chunk-S2VQCZO4.js";
52
+ import "./chunk-WMPU2UOV.js";
53
+ import "./chunk-VX3UMWB7.js";
54
+ import "./chunk-XT2ZQVTC.js";
55
+ import "./chunk-YGXKOBQQ.js";
56
+ import "./chunk-V72RMBM4.js";
57
+ import "./chunk-ZDTGECTN.js";
58
+ import "./chunk-G36W2T2S.js";
59
+ import "./chunk-GKN3HMN4.js";
60
+ import "./chunk-QVZMFDYG.js";
61
+ import "./chunk-S54MKU6V.js";
62
+ import "./chunk-3S62LLWJ.js";
63
+ import "./chunk-45FPSA3B.js";
64
+ import "./chunk-YMX76IOS.js";
65
+ import "./chunk-6Y5U7UFY.js";
66
+ import "./chunk-XV7NZL4B.js";
67
+ import "./chunk-CD7ISXA4.js";
68
+ import "./chunk-QGJDMEOV.js";
69
+ import "./chunk-5WCQRDRB.js";
70
+ import "./chunk-C57KJOUQ.js";
71
+ import "./chunk-DF5SLDE4.js";
72
+ import "./chunk-TGON4N4O.js";
73
+ import "./chunk-I5WRT7ZR.js";
74
+ import "./chunk-A3YGID55.js";
75
+ import "./chunk-5EERLVZB.js";
76
+ import "./chunk-XQD2B6BB.js";
77
+ import "./chunk-34CNP2HB.js";
78
+ import "./chunk-KNDYMVWN.js";
79
+ import "./chunk-RWREC3KJ.js";
80
+ import "./chunk-LAMKBTXX.js";
81
+ import "./chunk-FD4ERYEG.js";
82
+ import "./chunk-KTMW65UX.js";
83
+ import "./chunk-FHOWVDF5.js";
84
+ import "./chunk-UDMS5AD3.js";
85
+ import "./chunk-MWHLBPNU.js";
86
+ import "./chunk-JLS65NUQ.js";
87
+ import "./chunk-TRSVUPCX.js";
88
+ import "./chunk-FKAUPHMR.js";
89
+ import "./chunk-TSXGRLPR.js";
90
+ import "./chunk-LUVKFFWR.js";
91
+ import "./chunk-ENRGKNR5.js";
92
+ import "./chunk-XB5YLCLB.js";
93
+ import "./chunk-QOCOVLUH.js";
94
+ import "./chunk-2VSQMRCB.js";
95
+ import "./chunk-ON3G73BU.js";
96
+ import "./chunk-3G6FZCRF.js";
97
+ import "./chunk-N5DX4JAK.js";
98
+ import "./chunk-2QLYTVYX.js";
99
+ import "./chunk-7GDRQBQC.js";
100
+ import "./chunk-PGSPX4SU.js";
101
+ import "./chunk-AT4TNPWW.js";
102
+ import "./chunk-GSGD5E4C.js";
103
+ import {
104
+ resolvePoeticDirFromContext
105
+ } from "./chunk-UI2F6DJ5.js";
106
+ import "./chunk-4BTDUT2S.js";
107
+ import "./chunk-L6OM4A22.js";
108
+ import "./chunk-G4THLFV3.js";
109
+ import "./chunk-RGWHUI5E.js";
110
+ import "./chunk-UUH2RVKS.js";
111
+ import "./chunk-LEIIWPWQ.js";
112
+ import "./chunk-L7JZLXQL.js";
113
+ import "./chunk-IZYIQQ7X.js";
114
+ import "./chunk-JPKSXKNB.js";
115
+ import "./chunk-TAJPCXSB.js";
116
+ import "./chunk-XZE4XARH.js";
117
+ import {
118
+ emitWarning
119
+ } from "./chunk-EJGCZGUF.js";
120
+ import "./chunk-LPITVM7M.js";
121
+ import "./chunk-5DLKYTQX.js";
122
+ import "./chunk-PZ5AY32C.js";
123
+
124
+ // src/core/optimization/OptimizationEngine.ts
125
+ import crypto from "crypto";
126
+ import * as fs from "fs";
127
+ import * as path from "path";
128
+
129
+ // src/core/optimization/CompetitionRunner.ts
130
+ var NoopCompetitionRunner = class {
131
+ async run(context) {
132
+ return {
133
+ status: "deferred",
134
+ candidatesAttempted: context.candidates.length,
135
+ candidatesCompleted: 0,
136
+ errors: [],
137
+ warnings: []
138
+ };
139
+ }
140
+ };
141
+
142
+ // src/core/optimization/OptimizationRecommendationAdapter.ts
143
+ var OptimizationRecommendationAdapter = class {
144
+ constructor(promptStore, executionTracker, autoOptimizer) {
145
+ this.promptStore = promptStore;
146
+ this.executionTracker = executionTracker;
147
+ this.autoOptimizer = autoOptimizer;
148
+ }
149
+ promptStore;
150
+ executionTracker;
151
+ autoOptimizer;
152
+ /**
153
+ * Check if prompt is ready for optimization
154
+ *
155
+ * @param promptId - Prompt to check
156
+ * @param versionId - Version to check
157
+ * @returns Readiness status with recommendation
158
+ */
159
+ async isReadyForOptimization(promptId, versionId) {
160
+ const metrics = this.executionTracker.getMetrics(promptId, versionId);
161
+ const MIN_EXECUTIONS = 10;
162
+ if (!metrics || metrics.totalExecutions < MIN_EXECUTIONS) {
163
+ return {
164
+ ready: false,
165
+ reason: `Need ${MIN_EXECUTIONS - (metrics?.totalExecutions || 0)} more executions`,
166
+ recommendation: "wait_for_data",
167
+ executionCount: metrics?.totalExecutions || 0,
168
+ avgQuality: metrics?.avgCompleteness || 0,
169
+ confidence: 0
170
+ };
171
+ }
172
+ try {
173
+ const recommendation = await this.autoOptimizer.analyzePrompt(promptId);
174
+ return {
175
+ ready: recommendation.action === "generate_variants" || recommendation.action === "activate_existing",
176
+ reason: recommendation.rationale,
177
+ recommendation: this.mapAction(recommendation.action),
178
+ executionCount: metrics.totalExecutions,
179
+ avgQuality: recommendation.currentPerformance.avgCompleteness,
180
+ confidence: recommendation.confidence
181
+ };
182
+ } catch (error) {
183
+ emitWarning(
184
+ "PR-001",
185
+ {
186
+ taskId: promptId,
187
+ subsystem: "optimization",
188
+ executionPhase: "execution"
189
+ },
190
+ {
191
+ severity: "ERROR" /* ERROR */,
192
+ metadata: {
193
+ error: error.message,
194
+ versionId,
195
+ operation: "autoOptimizerAnalysis"
196
+ }
197
+ }
198
+ );
199
+ return {
200
+ ready: false,
201
+ reason: `Analysis failed: ${error.message}`,
202
+ recommendation: "no_action",
203
+ executionCount: metrics.totalExecutions,
204
+ avgQuality: metrics.avgCompleteness,
205
+ confidence: 0
206
+ };
207
+ }
208
+ }
209
+ /**
210
+ * Analyze prompt and get optimization recommendations
211
+ *
212
+ * @param promptId - Prompt to analyze
213
+ * @returns Full optimization recommendation
214
+ * @throws Error if prompt not found
215
+ * @throws Error if insufficient data
216
+ */
217
+ async analyze(promptId) {
218
+ const prompt = await this.promptStore.getPrompt(promptId);
219
+ if (!prompt) {
220
+ throw new Error(`Prompt ${promptId} not found`);
221
+ }
222
+ try {
223
+ return await this.autoOptimizer.analyzePrompt(promptId);
224
+ } catch (error) {
225
+ throw new Error(`Failed to analyze prompt: ${error.message}`);
226
+ }
227
+ }
228
+ /**
229
+ * Get the best performing version for a prompt
230
+ *
231
+ * @param promptId - Prompt to analyze
232
+ * @returns Best version ID with rationale
233
+ * @throws Error if no versions with sufficient data
234
+ */
235
+ async recommendBestVersion(promptId) {
236
+ try {
237
+ const recommendation = await this.analyze(promptId);
238
+ if (recommendation.action === "activate_existing") {
239
+ const bestVariant = recommendation.proposedVariants[0];
240
+ if (bestVariant) {
241
+ return {
242
+ recommendedVersion: bestVariant.variantId,
243
+ rationale: `Better performing version found: ${bestVariant.description}`,
244
+ confidence: recommendation.confidence,
245
+ improvementPercentage: recommendation.estimatedImpact.completenessImprovement
246
+ };
247
+ }
248
+ }
249
+ return {
250
+ recommendedVersion: recommendation.currentVersionId,
251
+ rationale: "Current version performs optimally",
252
+ confidence: recommendation.confidence
253
+ };
254
+ } catch (error) {
255
+ throw new Error(`Failed to recommend best version: ${error.message}`);
256
+ }
257
+ }
258
+ /**
259
+ * Get optimization recommendation for a prompt
260
+ *
261
+ * Returns null if prompt has insufficient data. Throws on unexpected errors.
262
+ * Used by OptimizationEngine.analyze() for read-only analysis.
263
+ *
264
+ * @param promptId - Prompt to get recommendation for
265
+ * @returns Optimization recommendation or null if insufficient data
266
+ * @throws Error on unexpected failures (not data insufficiency)
267
+ */
268
+ async getRecommendation(promptId) {
269
+ try {
270
+ return await this.analyze(promptId);
271
+ } catch (error) {
272
+ const message = error.message || "";
273
+ const normalized = message.toLowerCase();
274
+ const isExpectedError = normalized.includes("insufficient") || normalized.includes("no execution metrics") || normalized.includes("more executions") || normalized.includes("no performance data") || normalized.includes("prompt") && normalized.includes("not found");
275
+ if (isExpectedError) {
276
+ return null;
277
+ }
278
+ throw error;
279
+ }
280
+ }
281
+ /**
282
+ * Get optimization suggestions without full analysis
283
+ *
284
+ * Lighter-weight than full analyze()
285
+ */
286
+ async getSuggestions(promptId) {
287
+ try {
288
+ const recommendation = await this.analyze(promptId);
289
+ return recommendation.suggestions.map((s) => s.description);
290
+ } catch (error) {
291
+ emitWarning(
292
+ "PR-001",
293
+ {
294
+ taskId: promptId,
295
+ subsystem: "optimization",
296
+ executionPhase: "execution"
297
+ },
298
+ {
299
+ severity: "WARN" /* WARN */,
300
+ metadata: {
301
+ error: error.message,
302
+ operation: "getSuggestions"
303
+ }
304
+ }
305
+ );
306
+ return [];
307
+ }
308
+ }
309
+ /**
310
+ * Map AutoOptimizer action to our recommendation type
311
+ */
312
+ mapAction(action) {
313
+ switch (action) {
314
+ case "generate_variants":
315
+ case "activate_existing":
316
+ return "optimize_now";
317
+ case "needs_more_data":
318
+ return "wait_for_data";
319
+ case "no_action":
320
+ return "no_action";
321
+ }
322
+ }
323
+ /**
324
+ * Close resources
325
+ */
326
+ close() {
327
+ this.autoOptimizer.close();
328
+ }
329
+ };
330
+
331
+ // src/core/optimization/PromptVariantGenerator.ts
332
+ var PromptVariantGenerator = class {
333
+ constructor(promptStore, variantGenerator) {
334
+ this.promptStore = promptStore;
335
+ this.variantGenerator = variantGenerator;
336
+ }
337
+ promptStore;
338
+ variantGenerator;
339
+ /**
340
+ * Generate candidate variants for optimization
341
+ *
342
+ * Creates new PromptVersion records for each variant with lineage tracking.
343
+ *
344
+ * @param promptId - Prompt to optimize
345
+ * @param versionId - Source version to mutate
346
+ * @param options - Generation options
347
+ * @returns Array of new PromptVersion objects saved to database
348
+ * @throws Error if source version not found
349
+ * @throws Error if all variant creations fail
350
+ */
351
+ async generateCandidates(promptId, versionId, options = {}) {
352
+ const sourceVersion = await this.promptStore.getVersion(versionId);
353
+ if (!sourceVersion) {
354
+ throw new Error(`Source version ${versionId} not found`);
355
+ }
356
+ if (sourceVersion.promptId !== promptId) {
357
+ throw new Error(`Version ${versionId} does not belong to prompt ${promptId}`);
358
+ }
359
+ if (options.count !== void 0 && options.count <= 0) {
360
+ throw new Error("Variant count must be at least 1");
361
+ }
362
+ const count = options.count || 3;
363
+ const adaptedVersion = {
364
+ id: sourceVersion.id,
365
+ promptId: sourceVersion.promptId,
366
+ content: sourceVersion.content,
367
+ contentHash: "",
368
+ // Not used by variant generator
369
+ changelog: "",
370
+ // Not used
371
+ author: sourceVersion.createdBy,
372
+ isActive: sourceVersion.isActive,
373
+ isGenerated: false,
374
+ createdAt: sourceVersion.createdAt
375
+ };
376
+ const generatedVariants = await this.variantGenerator.generateVariants(adaptedVersion, count, {
377
+ strategies: options.strategies,
378
+ targetMetric: options.targetMetric || "balanced"
379
+ });
380
+ if (generatedVariants.length === 0) {
381
+ throw new Error("VariantGenerator produced no variants");
382
+ }
383
+ const candidates = [];
384
+ const errors = [];
385
+ for (let i = 0; i < generatedVariants.length; i++) {
386
+ const variant = generatedVariants[i];
387
+ if (!variant) continue;
388
+ try {
389
+ const goalMap = {
390
+ success_rate: "quality",
391
+ completeness: "quality",
392
+ duration: "speed",
393
+ balanced: "balanced"
394
+ };
395
+ const goal = goalMap[options.targetMetric || "balanced"] || "balanced";
396
+ const version = await this.promptStore.createVersion({
397
+ promptId,
398
+ content: variant.content,
399
+ createdBy: "variant-generator",
400
+ parentVersionId: versionId,
401
+ optimizationMetadata: {
402
+ strategy: variant.mutations[0]?.strategy || "hybrid",
403
+ goal,
404
+ mutations: variant.mutations.map((m) => m.description),
405
+ expectedImprovements: {
406
+ confidence: Number(variant.confidence) || 0
407
+ }
408
+ }
409
+ });
410
+ candidates.push(version);
411
+ } catch (error) {
412
+ const errorMsg = `Failed to create variant ${i + 1}: ${error.message}`;
413
+ errors.push(errorMsg);
414
+ emitWarning(
415
+ "PR-001",
416
+ {
417
+ taskId: promptId,
418
+ subsystem: "optimization",
419
+ executionPhase: "execution"
420
+ },
421
+ {
422
+ severity: "WARN" /* WARN */,
423
+ metadata: {
424
+ variantIndex: i + 1,
425
+ error: error.message,
426
+ operation: "createVariant"
427
+ }
428
+ }
429
+ );
430
+ }
431
+ }
432
+ if (candidates.length === 0) {
433
+ const errorSummary = errors.join("; ");
434
+ throw new Error(`Failed to create any candidate versions: ${errorSummary}`);
435
+ }
436
+ if (errors.length > 0) {
437
+ emitWarning(
438
+ "PR-001",
439
+ {
440
+ taskId: promptId,
441
+ subsystem: "optimization",
442
+ executionPhase: "execution"
443
+ },
444
+ {
445
+ severity: "WARN" /* WARN */,
446
+ metadata: {
447
+ successCount: candidates.length,
448
+ totalCount: generatedVariants.length,
449
+ failures: errors.join("; "),
450
+ operation: "generateCandidates"
451
+ }
452
+ }
453
+ );
454
+ }
455
+ return {
456
+ candidates,
457
+ generatedVariants
458
+ };
459
+ }
460
+ /**
461
+ * Get mutation details for a version
462
+ *
463
+ * Retrieves the mutations that created this version from optimizationMetadata.
464
+ */
465
+ getMutations(version) {
466
+ if (!version.optimizationMetadata?.mutations) {
467
+ return [];
468
+ }
469
+ const mutations = version.optimizationMetadata.mutations;
470
+ return Array.isArray(mutations) ? mutations : [];
471
+ }
472
+ /**
473
+ * Get generation strategy for a version
474
+ */
475
+ getStrategy(version) {
476
+ return version.optimizationMetadata?.strategy;
477
+ }
478
+ /**
479
+ * Get generation hypothesis for a version
480
+ */
481
+ getHypothesis(version) {
482
+ const metadata = version.optimizationMetadata?.expectedImprovements;
483
+ if (typeof metadata === "object" && metadata !== null) {
484
+ return metadata.hypothesis;
485
+ }
486
+ return void 0;
487
+ }
488
+ /**
489
+ * Get expected improvement for a version
490
+ */
491
+ getExpectedImprovement(version) {
492
+ const metadata = version.optimizationMetadata?.expectedImprovements;
493
+ if (typeof metadata === "object" && metadata !== null) {
494
+ return metadata.expectedImprovement;
495
+ }
496
+ return void 0;
497
+ }
498
+ /**
499
+ * Get confidence score for a version
500
+ */
501
+ getConfidence(version) {
502
+ const metadata = version.optimizationMetadata?.expectedImprovements;
503
+ if (typeof metadata === "object" && metadata !== null) {
504
+ const confidence = metadata.confidence;
505
+ return typeof confidence === "number" ? confidence : 0;
506
+ }
507
+ return 0;
508
+ }
509
+ /**
510
+ * Close resources
511
+ */
512
+ close() {
513
+ this.variantGenerator.close();
514
+ }
515
+ };
516
+
517
+ // src/core/optimization/ProviderInsights.ts
518
+ var ProviderInsights = class {
519
+ constructor(providerTracker, executionTracker) {
520
+ this.providerTracker = providerTracker;
521
+ this.executionTracker = executionTracker;
522
+ }
523
+ providerTracker;
524
+ executionTracker;
525
+ /**
526
+ * Track all variants from optimization cycle
527
+ *
528
+ * Feeds execution data into ProviderTracker for analytics.
529
+ *
530
+ * @param promptId - Prompt being optimized
531
+ * @param candidateVersionIds - Versions tested in cycle
532
+ */
533
+ async trackOptimizationCycle(promptId, candidateVersionIds) {
534
+ for (const versionId of candidateVersionIds) {
535
+ try {
536
+ const executions = this.executionTracker.getExecutions(promptId, versionId);
537
+ for (const execution of executions) {
538
+ const variants = this.executionTracker.getVariants(execution.id);
539
+ for (const variant of variants) {
540
+ try {
541
+ await this.trackVariant(promptId, versionId, variant, execution.taskComplexity);
542
+ } catch (error) {
543
+ emitWarning(
544
+ "PR-001",
545
+ {
546
+ taskId: promptId,
547
+ subsystem: "optimization",
548
+ provider: variant.provider,
549
+ executionPhase: "execution"
550
+ },
551
+ {
552
+ severity: "WARN" /* WARN */,
553
+ metadata: {
554
+ operation: "trackVariant",
555
+ versionId,
556
+ provider: variant.provider,
557
+ error: error.message,
558
+ reason: "Failed to track provider variant"
559
+ }
560
+ }
561
+ );
562
+ }
563
+ }
564
+ }
565
+ } catch (error) {
566
+ emitWarning(
567
+ "PR-001",
568
+ {
569
+ taskId: promptId,
570
+ subsystem: "optimization",
571
+ executionPhase: "execution"
572
+ },
573
+ {
574
+ severity: "ERROR" /* ERROR */,
575
+ metadata: {
576
+ operation: "trackOptimizationCycle",
577
+ versionId,
578
+ error: error.message,
579
+ reason: "Failed to track version"
580
+ }
581
+ }
582
+ );
583
+ }
584
+ }
585
+ }
586
+ /**
587
+ * Analyze results and recommend best provider
588
+ *
589
+ * @param promptId - Prompt to analyze
590
+ * @returns Provider recommendations ranked by performance
591
+ */
592
+ async analyzeResults(promptId) {
593
+ try {
594
+ const recommendations = await this.providerTracker.getProviderRecommendations(promptId);
595
+ const insights = [];
596
+ for (const rec of recommendations.slice(0, 3)) {
597
+ try {
598
+ const providerInsights = await this.providerTracker.getProviderOptimizationInsights(
599
+ rec.provider,
600
+ promptId
601
+ );
602
+ insights.push(...providerInsights);
603
+ } catch (error) {
604
+ emitWarning(
605
+ "PR-001",
606
+ {
607
+ taskId: promptId,
608
+ subsystem: "optimization",
609
+ provider: rec.provider,
610
+ executionPhase: "execution"
611
+ },
612
+ {
613
+ severity: "WARN" /* WARN */,
614
+ metadata: {
615
+ operation: "getProviderOptimizationInsights",
616
+ provider: rec.provider,
617
+ error: error.message,
618
+ reason: "Failed to get provider insights"
619
+ }
620
+ }
621
+ );
622
+ }
623
+ }
624
+ return {
625
+ bestProvider: recommendations[0]?.provider ?? resolveDefaultProvider().value,
626
+ providerRecommendations: recommendations,
627
+ insights
628
+ };
629
+ } catch (error) {
630
+ emitWarning(
631
+ "PR-001",
632
+ {
633
+ taskId: promptId,
634
+ subsystem: "optimization",
635
+ executionPhase: "execution"
636
+ },
637
+ {
638
+ severity: "ERROR" /* ERROR */,
639
+ metadata: {
640
+ operation: "analyzeResults",
641
+ error: error.message,
642
+ reason: "Failed to analyze provider results"
643
+ }
644
+ }
645
+ );
646
+ return {
647
+ bestProvider: resolveDefaultProvider().value,
648
+ providerRecommendations: [],
649
+ insights: []
650
+ };
651
+ }
652
+ }
653
+ /**
654
+ * Get optimization insights for specific provider
655
+ *
656
+ * SWOT analysis (Strengths, Weaknesses, Opportunities, Threats)
657
+ */
658
+ async getProviderOptimizationInsights(provider, promptId) {
659
+ try {
660
+ return await this.providerTracker.getProviderOptimizationInsights(
661
+ provider,
662
+ promptId
663
+ );
664
+ } catch (error) {
665
+ emitWarning(
666
+ "PR-001",
667
+ {
668
+ taskId: promptId,
669
+ subsystem: "optimization",
670
+ provider,
671
+ executionPhase: "execution"
672
+ },
673
+ {
674
+ severity: "WARN" /* WARN */,
675
+ metadata: {
676
+ operation: "getProviderOptimizationInsights",
677
+ provider,
678
+ error: error.message,
679
+ reason: "Failed to get optimization insights for provider"
680
+ }
681
+ }
682
+ );
683
+ return [];
684
+ }
685
+ }
686
+ /**
687
+ * Get provider recommendations for a prompt
688
+ */
689
+ async getProviderRecommendations(promptId) {
690
+ try {
691
+ return await this.providerTracker.getProviderRecommendations(promptId);
692
+ } catch (error) {
693
+ emitWarning(
694
+ "PR-001",
695
+ {
696
+ taskId: promptId,
697
+ subsystem: "optimization",
698
+ executionPhase: "execution"
699
+ },
700
+ {
701
+ severity: "WARN" /* WARN */,
702
+ metadata: {
703
+ operation: "getProviderRecommendations",
704
+ error: error.message,
705
+ reason: "Failed to get provider recommendations"
706
+ }
707
+ }
708
+ );
709
+ return [];
710
+ }
711
+ }
712
+ // Private helpers
713
+ /**
714
+ * Track a single variant execution
715
+ */
716
+ async trackVariant(promptId, versionId, variant, taskComplexity) {
717
+ await this.providerTracker.trackProviderExecution({
718
+ provider: variant.provider,
719
+ promptId,
720
+ versionId,
721
+ variant: variant.variantName || void 0,
722
+ success: variant.success,
723
+ completeness: variant.completeness || 0,
724
+ duration: variant.durationSeconds || 0,
725
+ tokensUsed: variant.tokensUsed,
726
+ codeDelivered: variant.codeDelivered || false,
727
+ errorCount: variant.errorCount || 0,
728
+ warningCount: variant.warningCount || 0,
729
+ testsPassed: variant.testResults ? variant.testResults.passed : void 0,
730
+ testsFailed: variant.testResults ? variant.testResults.failed : void 0,
731
+ taskComplexity: taskComplexity || "medium",
732
+ timestamp: variant.createdAt
733
+ });
734
+ }
735
+ /**
736
+ * Close resources
737
+ */
738
+ close() {
739
+ this.providerTracker.close();
740
+ }
741
+ };
742
+
743
+ // src/core/optimization/OptimizationEngine.ts
744
+ var OptimizationEngine = class {
745
+ poeticDir;
746
+ promptStore;
747
+ executionTracker;
748
+ configManager;
749
+ telemetry;
750
+ // Wrappers
751
+ variantGenerator;
752
+ optimizer;
753
+ providerInsights;
754
+ competitionRunner;
755
+ activationAuthority;
756
+ // Locks
757
+ activeLocks = /* @__PURE__ */ new Map();
758
+ lockDirs = /* @__PURE__ */ new Map();
759
+ constructor(options = {}) {
760
+ const poeticDir = resolvePoeticDirFromContext(options.poeticDir);
761
+ this.poeticDir = poeticDir;
762
+ this.promptStore = options.promptStore || new PromptVersionStore({ poeticDir });
763
+ this.executionTracker = options.executionTracker || new ExecutionTracker({ poeticDir });
764
+ this.configManager = new OptimizationConfigManager(poeticDir);
765
+ this.telemetry = options.telemetryLogger || TelemetryLogger.getInstance({ poeticDir });
766
+ const variantGen = new VariantGenerator();
767
+ const autoOptimizer = new AutomaticPromptOptimizer({ poeticDir });
768
+ const providerTracker = new ProviderTracker({ poeticDir });
769
+ this.variantGenerator = new PromptVariantGenerator(this.promptStore, variantGen);
770
+ this.optimizer = new OptimizationRecommendationAdapter(
771
+ this.promptStore,
772
+ this.executionTracker,
773
+ autoOptimizer
774
+ );
775
+ this.providerInsights = new ProviderInsights(providerTracker, this.executionTracker);
776
+ this.competitionRunner = options.competitionRunner ?? new NoopCompetitionRunner();
777
+ this.activationAuthority = options.activationAuthority ?? new TunerActivationAuthority(
778
+ new AutoTuningEngine({ poeticDir, enableAutoActivation: true }),
779
+ this.telemetry
780
+ );
781
+ }
782
+ /**
783
+ * Run complete optimization cycle
784
+ *
785
+ * Executes all 6 steps of the optimization loop.
786
+ *
787
+ * @param promptId - Prompt to optimize (name or ID)
788
+ * @param options - Optimization options
789
+ * @returns Optimization result
790
+ * @throws Error if lock acquisition fails
791
+ * @throws Error if prompt not found
792
+ * @throws Error if insufficient execution data
793
+ */
794
+ async optimize(promptId, options = {}) {
795
+ const startTime = Date.now();
796
+ const cycleId = options.cycleId || this.generateCycleId();
797
+ let lockKey = null;
798
+ try {
799
+ this.telemetry.logCostEvent("prompt:optimize:started", {
800
+ promptId,
801
+ cycleId,
802
+ variantCount: options.variantCount ?? null,
803
+ improvementThreshold: options.improvementThreshold ?? null,
804
+ costBudget: options.costBudget ?? null,
805
+ providerStrategy: options.providerStrategy ?? null,
806
+ mutationStrategies: options.mutationStrategies ?? null,
807
+ providers: options.providers ?? null,
808
+ autoActivate: options.autoActivate ?? null
809
+ });
810
+ const resolvedPrompt = await this.resolvePrompt(promptId);
811
+ if (!resolvedPrompt) {
812
+ throw new Error(`Prompt ${promptId} not found`);
813
+ }
814
+ lockKey = resolvedPrompt.id;
815
+ await this.acquireLock(lockKey, cycleId);
816
+ const { prompt, activeVersion, metrics } = await this.loadActiveVersion(resolvedPrompt.id);
817
+ const config = this.configManager.getConfig(prompt.name, {
818
+ variantCount: options.variantCount,
819
+ improvementThreshold: options.improvementThreshold,
820
+ maxCostIncrease: options.costBudget,
821
+ providerStrategy: options.providerStrategy,
822
+ providersToTest: options.providers,
823
+ autoActivate: options.autoActivate,
824
+ mutationStrategies: options.mutationStrategies
825
+ });
826
+ const cycle = await this.createCycle(
827
+ prompt.id,
828
+ activeVersion.id,
829
+ cycleId,
830
+ config,
831
+ options.triggerReason
832
+ );
833
+ try {
834
+ const { candidates } = await this.variantGenerator.generateCandidates(
835
+ prompt.id,
836
+ activeVersion.id,
837
+ {
838
+ count: config.variantCount,
839
+ strategies: config.mutationStrategies,
840
+ targetMetric: config.targetMetric,
841
+ cycleId
842
+ }
843
+ );
844
+ cycle.candidateVersionIds = candidates.map((c) => c.id);
845
+ const competitionResult = await this.runCompetition(
846
+ prompt.id,
847
+ activeVersion,
848
+ candidates,
849
+ config,
850
+ cycleId
851
+ );
852
+ if (competitionResult.status === "failed") {
853
+ throw new Error(
854
+ `Competition runner failed: ${competitionResult.errors[0] || "unknown runner error"}`
855
+ );
856
+ }
857
+ await this.providerInsights.trackOptimizationCycle(prompt.id, cycle.candidateVersionIds);
858
+ const analysis = await this.analyzeCandidates(
859
+ prompt.id,
860
+ activeVersion.id,
861
+ candidates,
862
+ config
863
+ );
864
+ const bestCandidate = analysis[0];
865
+ if (!bestCandidate) {
866
+ return {
867
+ cycleId,
868
+ promptId: prompt.id,
869
+ success: true,
870
+ candidatesGenerated: candidates.length,
871
+ candidatesTested: 0,
872
+ decision: "deferred",
873
+ improvementFound: false,
874
+ safetyChecksPassed: false,
875
+ messages: ["No execution metrics available for candidate evaluation"],
876
+ warnings: [],
877
+ errors: [],
878
+ durationSeconds: (Date.now() - startTime) / 1e3,
879
+ completedAt: (/* @__PURE__ */ new Date()).toISOString()
880
+ };
881
+ }
882
+ const safetyChecks = this.runSafetyChecks(bestCandidate, metrics, config);
883
+ const decision = await this.makeActivationDecision(
884
+ prompt.id,
885
+ activeVersion.id,
886
+ bestCandidate,
887
+ safetyChecks,
888
+ config,
889
+ options
890
+ );
891
+ const result = await this.completeCycle(
892
+ cycle,
893
+ candidates,
894
+ analysis,
895
+ bestCandidate,
896
+ safetyChecks,
897
+ decision,
898
+ startTime
899
+ );
900
+ this.telemetry.logCostEvent("prompt:optimize:completed", {
901
+ promptId,
902
+ cycleId,
903
+ success: true,
904
+ improvementPercentage: result.improvementPercentage ?? null,
905
+ activated: result.decision === "activated"
906
+ });
907
+ return result;
908
+ } catch (error) {
909
+ this.telemetry.logCostEvent("prompt:optimize:failed", {
910
+ promptId,
911
+ cycleId,
912
+ error: error.message
913
+ });
914
+ cycle.status = "failed";
915
+ cycle.completedAt = (/* @__PURE__ */ new Date()).toISOString();
916
+ throw error;
917
+ } finally {
918
+ if (lockKey) {
919
+ this.releaseLock(lockKey);
920
+ }
921
+ }
922
+ } catch (error) {
923
+ const durationSeconds = (Date.now() - startTime) / 1e3;
924
+ return {
925
+ cycleId,
926
+ promptId,
927
+ success: false,
928
+ candidatesGenerated: 0,
929
+ candidatesTested: 0,
930
+ decision: "failed",
931
+ improvementFound: false,
932
+ safetyChecksPassed: false,
933
+ messages: [],
934
+ warnings: [],
935
+ errors: [error.message],
936
+ durationSeconds,
937
+ completedAt: (/* @__PURE__ */ new Date()).toISOString()
938
+ };
939
+ }
940
+ }
941
+ // Private methods
942
+ /**
943
+ * Resolve prompt by ID or name
944
+ *
945
+ * Supports both CLI usage (passes name) and scheduled optimization (passes ID).
946
+ * Tries name lookup first, then falls back to ID lookup.
947
+ */
948
+ async resolvePrompt(promptIdOrName) {
949
+ let prompt = await this.promptStore.getPrompt(promptIdOrName);
950
+ if (!prompt) {
951
+ prompt = await this.promptStore.getPromptById(promptIdOrName);
952
+ }
953
+ return prompt;
954
+ }
955
+ /**
956
+ * Step 1: Load active version with validation
957
+ */
958
+ async loadActiveVersion(promptIdOrName) {
959
+ const prompt = await this.resolvePrompt(promptIdOrName);
960
+ if (!prompt) {
961
+ throw new Error(`Prompt ${promptIdOrName} not found`);
962
+ }
963
+ if (!prompt.activeVersionId) {
964
+ throw new Error(`Prompt ${promptIdOrName} has no active version`);
965
+ }
966
+ const activeVersion = await this.promptStore.getVersion(prompt.activeVersionId);
967
+ if (!activeVersion) {
968
+ throw new Error(`Active version ${prompt.activeVersionId} not found`);
969
+ }
970
+ const metrics = this.executionTracker.getMetrics(prompt.id, activeVersion.id);
971
+ if (!metrics) {
972
+ throw new Error(`No execution metrics found for ${promptIdOrName}`);
973
+ }
974
+ const config = this.configManager.getConfig(prompt.name);
975
+ if (metrics.totalExecutions < config.minSampleSize) {
976
+ throw new Error(
977
+ `Insufficient execution data: ${metrics.totalExecutions}/${config.minSampleSize} executions`
978
+ );
979
+ }
980
+ return { prompt, activeVersion, metrics };
981
+ }
982
+ /**
983
+ * Step 2: Acquire optimization lock
984
+ */
985
+ async acquireLock(promptId, cycleId) {
986
+ const SIX_HOURS = 6 * 60 * 60 * 1e3;
987
+ const owner = {
988
+ promptId,
989
+ cycleId,
990
+ pid: process.pid,
991
+ startedAt: (/* @__PURE__ */ new Date()).toISOString()
992
+ };
993
+ if (this.activeLocks.has(promptId)) {
994
+ const existingLock = this.activeLocks.get(promptId);
995
+ const lockAge = Date.now() - new Date(existingLock.startedAt).getTime();
996
+ if (lockAge < SIX_HOURS) {
997
+ throw new Error(
998
+ `Optimization already running for ${promptId} (started ${(lockAge / 1e3 / 60).toFixed(0)} minutes ago)`
999
+ );
1000
+ }
1001
+ this.activeLocks.delete(promptId);
1002
+ }
1003
+ const lockDir = this.getLockDir(promptId);
1004
+ try {
1005
+ fs.mkdirSync(path.dirname(lockDir), { recursive: true });
1006
+ fs.mkdirSync(lockDir);
1007
+ fs.writeFileSync(path.join(lockDir, "owner.json"), JSON.stringify(owner, null, 2));
1008
+ this.lockDirs.set(promptId, lockDir);
1009
+ } catch (error) {
1010
+ const nodeError = error;
1011
+ if (nodeError.code !== "EEXIST") {
1012
+ fs.rmSync(lockDir, { recursive: true, force: true });
1013
+ throw error;
1014
+ }
1015
+ const metadata = this.readLockMetadata(lockDir);
1016
+ const startedAt = metadata?.startedAt ? Date.parse(metadata.startedAt) : NaN;
1017
+ const lockAge = Number.isFinite(startedAt) ? Date.now() - startedAt : 0;
1018
+ if (lockAge < SIX_HOURS) {
1019
+ throw new Error(
1020
+ `Optimization already running for ${promptId} (started ${(lockAge / 1e3 / 60).toFixed(0)} minutes ago)`
1021
+ );
1022
+ }
1023
+ const staleLockDir = `${lockDir}.stale-${process.pid}-${Date.now()}-${crypto.randomBytes(3).toString("hex")}`;
1024
+ try {
1025
+ fs.renameSync(lockDir, staleLockDir);
1026
+ } catch {
1027
+ throw new Error(
1028
+ `Optimization already running for ${promptId}; stale lock was recovered by another process`
1029
+ );
1030
+ }
1031
+ try {
1032
+ fs.rmSync(staleLockDir, { recursive: true, force: true });
1033
+ fs.mkdirSync(lockDir);
1034
+ fs.writeFileSync(
1035
+ path.join(lockDir, "owner.json"),
1036
+ JSON.stringify(
1037
+ {
1038
+ ...owner,
1039
+ recoveredExpiredLock: true
1040
+ },
1041
+ null,
1042
+ 2
1043
+ )
1044
+ );
1045
+ this.lockDirs.set(promptId, lockDir);
1046
+ } catch (recoveryError) {
1047
+ fs.rmSync(lockDir, { recursive: true, force: true });
1048
+ throw recoveryError;
1049
+ }
1050
+ }
1051
+ const lock = {
1052
+ id: cycleId,
1053
+ promptId,
1054
+ sourceVersionId: "",
1055
+ candidateVersionIds: [],
1056
+ cycleType: "manual",
1057
+ config: this.configManager.getDefaults(),
1058
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
1059
+ status: "running",
1060
+ activated: false,
1061
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1062
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1063
+ };
1064
+ this.activeLocks.set(promptId, lock);
1065
+ }
1066
+ /**
1067
+ * Step 3: Release optimization lock
1068
+ */
1069
+ releaseLock(promptId) {
1070
+ const activeLock = this.activeLocks.get(promptId);
1071
+ const lockDir = this.lockDirs.get(promptId);
1072
+ if (lockDir) {
1073
+ const metadata = this.readLockMetadata(lockDir);
1074
+ if (metadata?.cycleId === activeLock?.id && metadata?.pid === process.pid) {
1075
+ fs.rmSync(lockDir, { recursive: true, force: true });
1076
+ }
1077
+ this.lockDirs.delete(promptId);
1078
+ }
1079
+ this.activeLocks.delete(promptId);
1080
+ }
1081
+ /**
1082
+ * Step 4: Create cycle record
1083
+ */
1084
+ async createCycle(promptId, sourceVersionId, cycleId, config, triggerReason) {
1085
+ const cycle = {
1086
+ id: cycleId,
1087
+ promptId,
1088
+ sourceVersionId,
1089
+ candidateVersionIds: [],
1090
+ cycleType: "manual",
1091
+ triggerReason,
1092
+ config,
1093
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
1094
+ status: "running",
1095
+ activated: false,
1096
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1097
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1098
+ };
1099
+ this.activeLocks.set(promptId, cycle);
1100
+ return cycle;
1101
+ }
1102
+ /**
1103
+ * Step 5: Run competition for candidates.
1104
+ *
1105
+ * Delegates to the injected `OptimizationCompetitionRunner`. The default
1106
+ * runner (`NoopCompetitionRunner`) is intentionally a no-op so that
1107
+ * freshly-generated candidates carry no `ExecutionTracker` metrics; the
1108
+ * downstream `analyzeCandidates()` step then returns an empty array and
1109
+ * `optimize()` resolves to a `deferred` no-change result with the message
1110
+ * "No execution metrics available for candidate evaluation".
1111
+ *
1112
+ * To enable real competition, pass a non-default `competitionRunner` via
1113
+ * the engine constructor. The runner records per-candidate executions
1114
+ * through `ExecutionTracker`; analysis reads them back via
1115
+ * `getMetrics(promptId, candidate.versionId)`.
1116
+ *
1117
+ * Pinned by `competition-stub.test.ts` (default behavior) and
1118
+ * `competition-runner.test.ts` (injection seam).
1119
+ */
1120
+ async runCompetition(promptId, sourceVersion, candidates, config, cycleId) {
1121
+ return this.competitionRunner.run({
1122
+ promptId,
1123
+ sourceVersion,
1124
+ candidates,
1125
+ config,
1126
+ cycleId,
1127
+ executionTracker: this.executionTracker,
1128
+ promptStore: this.promptStore
1129
+ });
1130
+ }
1131
+ /**
1132
+ * Step 6: Analyze candidates
1133
+ */
1134
+ async analyzeCandidates(promptId, sourceVersionId, candidates, config) {
1135
+ const sourceMetrics = this.executionTracker.getMetrics(promptId, sourceVersionId);
1136
+ const analyses = [];
1137
+ for (const candidate of candidates) {
1138
+ const metrics = this.executionTracker.getMetrics(promptId, candidate.id);
1139
+ if (!metrics) continue;
1140
+ const score = metrics.avgSuccessRate * 0.35 + metrics.avgCompleteness / 100 * 0.35 + (1 - Math.min(metrics.avgDuration, 300) / 300) * 0.15 + 0.15;
1141
+ const baseScore = sourceMetrics.avgSuccessRate * 0.35 + sourceMetrics.avgCompleteness / 100 * 0.35 + (1 - Math.min(sourceMetrics.avgDuration, 300) / 300) * 0.15 + 0.15;
1142
+ const improvement = (score - baseScore) / baseScore * 100;
1143
+ const confidenceInterval = this.calculateBayesianCI(
1144
+ metrics.avgSuccessRate,
1145
+ metrics.totalExecutions,
1146
+ config.confidenceLevel
1147
+ );
1148
+ const analysis = {
1149
+ versionId: candidate.id,
1150
+ version: candidate,
1151
+ totalExecutions: metrics.totalExecutions,
1152
+ avgSuccessRate: metrics.avgSuccessRate,
1153
+ avgCompleteness: metrics.avgCompleteness,
1154
+ avgDuration: metrics.avgDuration,
1155
+ compositeScore: score,
1156
+ improvementPercentage: improvement,
1157
+ confidenceInterval,
1158
+ confidence: config.confidenceLevel,
1159
+ safetyChecks: [],
1160
+ safetyScore: 0,
1161
+ riskScore: 0
1162
+ };
1163
+ if (metrics.totalCostStatus === "complete" && metrics.totalCost !== void 0) {
1164
+ analysis.totalCost = metrics.totalCost;
1165
+ }
1166
+ analyses.push(analysis);
1167
+ }
1168
+ analyses.sort((a, b) => b.improvementPercentage - a.improvementPercentage);
1169
+ return analyses;
1170
+ }
1171
+ /**
1172
+ * Step 7: Run safety checks
1173
+ */
1174
+ runSafetyChecks(candidate, currentMetrics, config) {
1175
+ const checks = [];
1176
+ checks.push({
1177
+ check: "sample_size",
1178
+ passed: candidate.totalExecutions >= config.minSampleSize,
1179
+ severity: "critical",
1180
+ message: `${candidate.totalExecutions}/${config.minSampleSize} executions`,
1181
+ value: candidate.totalExecutions,
1182
+ threshold: config.minSampleSize
1183
+ });
1184
+ checks.push({
1185
+ check: "improvement_threshold",
1186
+ passed: candidate.improvementPercentage >= config.improvementThreshold,
1187
+ severity: "high",
1188
+ message: `${candidate.improvementPercentage.toFixed(1)}% improvement`,
1189
+ value: candidate.improvementPercentage,
1190
+ threshold: config.improvementThreshold
1191
+ });
1192
+ const successDelta = (candidate.avgSuccessRate - currentMetrics.avgSuccessRate) * 100;
1193
+ checks.push({
1194
+ check: "success_rate_regression",
1195
+ passed: successDelta >= config.allowSuccessRateDrop,
1196
+ severity: "high",
1197
+ message: `${successDelta > 0 ? "+" : ""}${successDelta.toFixed(1)}% change`,
1198
+ value: successDelta,
1199
+ threshold: config.allowSuccessRateDrop
1200
+ });
1201
+ const currentCost = currentMetrics.totalCost;
1202
+ const candidateCost = candidate.totalCost;
1203
+ if (currentCost === void 0 || candidateCost === void 0 || !Number.isFinite(currentCost) || !Number.isFinite(candidateCost)) {
1204
+ checks.push({
1205
+ check: "cost_spike",
1206
+ passed: false,
1207
+ severity: "medium",
1208
+ message: "cost unavailable"
1209
+ });
1210
+ } else if (currentCost === 0 && candidateCost === 0) {
1211
+ checks.push({
1212
+ check: "cost_spike",
1213
+ passed: true,
1214
+ severity: "medium",
1215
+ message: "0% of current cost",
1216
+ value: 0,
1217
+ threshold: config.maxCostIncrease
1218
+ });
1219
+ } else if (currentCost === 0 && candidateCost > 0) {
1220
+ checks.push({
1221
+ check: "cost_spike",
1222
+ passed: false,
1223
+ severity: "medium",
1224
+ message: "positive cost from zero baseline exceeds max cost increase",
1225
+ threshold: config.maxCostIncrease
1226
+ });
1227
+ } else {
1228
+ const costRatio = candidateCost / currentCost;
1229
+ checks.push({
1230
+ check: "cost_spike",
1231
+ passed: costRatio <= config.maxCostIncrease,
1232
+ severity: "medium",
1233
+ message: `${(costRatio * 100).toFixed(0)}% of current cost`,
1234
+ value: costRatio,
1235
+ threshold: config.maxCostIncrease
1236
+ });
1237
+ }
1238
+ return checks;
1239
+ }
1240
+ /**
1241
+ * Step 8: Make activation decision
1242
+ */
1243
+ async makeActivationDecision(promptId, sourceVersionId, bestCandidate, safetyChecks, config, options) {
1244
+ const shouldAutoActivate = options.autoActivate !== void 0 ? options.autoActivate : config.activationMode === "auto" || config.autoActivate;
1245
+ if (!shouldAutoActivate) {
1246
+ return {
1247
+ activated: false,
1248
+ kind: "disabled",
1249
+ reason: "Auto-activation disabled - manual review required"
1250
+ };
1251
+ }
1252
+ const allPassed = safetyChecks.every((c) => c.passed);
1253
+ if (!allPassed && !options.skipSafetyChecks) {
1254
+ const failed = safetyChecks.filter((c) => !c.passed).map((c) => c.check);
1255
+ return {
1256
+ activated: false,
1257
+ kind: "safety_failed",
1258
+ reason: `Safety checks failed: ${failed.join(", ")}`
1259
+ };
1260
+ }
1261
+ const reason = `Activated v${bestCandidate.version.versionNumber} (+${bestCandidate.improvementPercentage.toFixed(1)}%)`;
1262
+ try {
1263
+ const result = await this.activationAuthority.activate({
1264
+ promptId,
1265
+ candidateVersionId: bestCandidate.versionId,
1266
+ sourceVersionId,
1267
+ improvementPercentage: bestCandidate.improvementPercentage,
1268
+ confidence: bestCandidate.confidence,
1269
+ skipSafetyChecks: options.skipSafetyChecks,
1270
+ reason,
1271
+ // Tranche B: forward engine-side safety result so the authority
1272
+ // emits `prompt:activate:auto` with the same payload the engine
1273
+ // used to emit. The engine no longer emits this event directly.
1274
+ safetyChecksPassed: allPassed
1275
+ });
1276
+ if (!result.activated) {
1277
+ return {
1278
+ activated: false,
1279
+ kind: "declined",
1280
+ reason: result.reason || "Activation authority declined activation"
1281
+ };
1282
+ }
1283
+ const recordId = result.record?.id;
1284
+ if (recordId && this.activationAuthority.scheduleMonitoring) {
1285
+ this.activationAuthority.scheduleMonitoring(recordId);
1286
+ }
1287
+ return {
1288
+ activated: true,
1289
+ kind: "activated",
1290
+ record: result.record ?? void 0,
1291
+ reason
1292
+ };
1293
+ } catch (error) {
1294
+ return {
1295
+ activated: false,
1296
+ kind: "failed",
1297
+ reason: `Activation failed: ${error.message}`
1298
+ };
1299
+ }
1300
+ }
1301
+ /**
1302
+ * Step 9: Complete cycle and return result
1303
+ */
1304
+ async completeCycle(cycle, candidates, analysis, bestCandidate, safetyChecks, decision, startTime) {
1305
+ const durationSeconds = (Date.now() - startTime) / 1e3;
1306
+ const providerAnalysis = await this.providerInsights.analyzeResults(cycle.promptId);
1307
+ const activationFailure = decision.kind === "failed";
1308
+ const result = {
1309
+ cycleId: cycle.id,
1310
+ promptId: cycle.promptId,
1311
+ success: !activationFailure,
1312
+ candidatesGenerated: candidates.length,
1313
+ candidatesTested: analysis.length,
1314
+ bestCandidate,
1315
+ decision: decision.activated ? "activated" : activationFailure ? "failed" : "deferred",
1316
+ activatedVersionId: decision.activated ? bestCandidate.versionId : void 0,
1317
+ activationRecord: decision.activated ? decision.record : void 0,
1318
+ providerInsights: {
1319
+ bestProvider: providerAnalysis.bestProvider,
1320
+ recommendations: providerAnalysis.providerRecommendations,
1321
+ insights: providerAnalysis.insights
1322
+ },
1323
+ improvementFound: bestCandidate.improvementPercentage > 0,
1324
+ improvementPercentage: bestCandidate.improvementPercentage,
1325
+ safetyChecksPassed: safetyChecks.every((c) => c.passed),
1326
+ messages: [decision.reason],
1327
+ warnings: [],
1328
+ errors: activationFailure ? [decision.reason] : [],
1329
+ durationSeconds,
1330
+ completedAt: (/* @__PURE__ */ new Date()).toISOString()
1331
+ };
1332
+ if (bestCandidate.totalCost !== void 0 && Number.isFinite(bestCandidate.totalCost)) {
1333
+ result.costUsd = bestCandidate.totalCost;
1334
+ }
1335
+ cycle.status = activationFailure ? "failed" : "completed";
1336
+ cycle.completedAt = (/* @__PURE__ */ new Date()).toISOString();
1337
+ cycle.durationSeconds = durationSeconds;
1338
+ cycle.bestCandidateId = bestCandidate.versionId;
1339
+ cycle.improvementScore = bestCandidate.improvementPercentage;
1340
+ cycle.activated = decision.activated;
1341
+ cycle.safetyCheckResults = safetyChecks;
1342
+ if (bestCandidate.totalCost !== void 0 && Number.isFinite(bestCandidate.totalCost)) {
1343
+ cycle.totalCostUsd = bestCandidate.totalCost;
1344
+ }
1345
+ return result;
1346
+ }
1347
+ // Utility methods
1348
+ generateCycleId() {
1349
+ return `cycle_${Date.now()}_${crypto.randomBytes(4).toString("hex")}`;
1350
+ }
1351
+ getLockDir(promptId) {
1352
+ const digest = crypto.createHash("sha256").update(promptId).digest("hex").slice(0, 24);
1353
+ return path.join(this.poeticDir, "tmp", "optimization-locks", digest);
1354
+ }
1355
+ readLockMetadata(lockDir) {
1356
+ try {
1357
+ const raw = fs.readFileSync(path.join(lockDir, "owner.json"), "utf8");
1358
+ const parsed = JSON.parse(raw);
1359
+ return parsed && typeof parsed === "object" ? parsed : null;
1360
+ } catch {
1361
+ return null;
1362
+ }
1363
+ }
1364
+ calculateBayesianCI(successRate, sampleSize, confidenceLevel) {
1365
+ const z = confidenceLevel === 0.95 ? 1.96 : 1.645;
1366
+ const phat = successRate;
1367
+ const n = sampleSize;
1368
+ const denominator = 1 + z * z / n;
1369
+ const center = (phat + z * z / (2 * n)) / denominator;
1370
+ const margin = z * Math.sqrt(phat * (1 - phat) / n + z * z / (4 * n * n)) / denominator;
1371
+ return [Math.max(0, center - margin), Math.min(1, center + margin)];
1372
+ }
1373
+ // ============================================================================
1374
+ // SCHEDULED OPTIMIZATION API
1375
+ // ============================================================================
1376
+ /**
1377
+ * Run scheduled optimization for opted-in prompts
1378
+ *
1379
+ * This method is called by the scheduler (thin timing wrapper) to:
1380
+ * 1. Select all prompts opted into auto-optimization
1381
+ * 2. Apply unified policy from config
1382
+ * 3. Run optimization for eligible prompts
1383
+ * 4. Handle telemetry and logging
1384
+ *
1385
+ * @returns Summary of scheduled optimization run
1386
+ */
1387
+ async runScheduledOptimization() {
1388
+ const startTime = Date.now();
1389
+ const results = [];
1390
+ const skipped = [];
1391
+ const errors = [];
1392
+ try {
1393
+ const optedInPrompts = await this.getOptedInPrompts();
1394
+ if (optedInPrompts.length === 0) {
1395
+ this.telemetry.logCostEvent("optimization:scheduled:empty", {
1396
+ message: "No prompts opted into auto-optimization"
1397
+ });
1398
+ return {
1399
+ success: true,
1400
+ totalPrompts: 0,
1401
+ optimized: 0,
1402
+ skipped: 0,
1403
+ failed: 0,
1404
+ results: [],
1405
+ skippedPrompts: [],
1406
+ errors: [],
1407
+ durationSeconds: (Date.now() - startTime) / 1e3,
1408
+ completedAt: (/* @__PURE__ */ new Date()).toISOString()
1409
+ };
1410
+ }
1411
+ this.telemetry.logCostEvent("optimization:scheduled:started", {
1412
+ promptCount: optedInPrompts.length,
1413
+ promptIds: optedInPrompts.map((p) => p.id)
1414
+ });
1415
+ for (const prompt of optedInPrompts) {
1416
+ try {
1417
+ const eligibility = await this.checkOptimizationEligibility(prompt.id);
1418
+ if (!eligibility.eligible) {
1419
+ skipped.push({
1420
+ promptId: prompt.id,
1421
+ reason: eligibility.reason
1422
+ });
1423
+ continue;
1424
+ }
1425
+ const config = this.configManager.getConfig(prompt.name);
1426
+ const shouldAutoActivate = config.activationMode === "auto" || config.autoActivate;
1427
+ const result = await this.optimize(prompt.id, {
1428
+ triggerReason: "scheduled",
1429
+ autoActivate: shouldAutoActivate
1430
+ });
1431
+ results.push(result);
1432
+ } catch (error) {
1433
+ errors.push({
1434
+ promptId: prompt.id,
1435
+ error: error.message
1436
+ });
1437
+ this.telemetry.logCostEvent("optimization:scheduled:prompt-error", {
1438
+ promptId: prompt.id,
1439
+ error: error.message
1440
+ });
1441
+ }
1442
+ }
1443
+ const durationSeconds = (Date.now() - startTime) / 1e3;
1444
+ this.telemetry.logCostEvent("optimization:scheduled:completed", {
1445
+ totalPrompts: optedInPrompts.length,
1446
+ optimized: results.filter((r) => r.success).length,
1447
+ skipped: skipped.length,
1448
+ failed: errors.length,
1449
+ durationSeconds
1450
+ });
1451
+ return {
1452
+ success: true,
1453
+ totalPrompts: optedInPrompts.length,
1454
+ optimized: results.filter((r) => r.success).length,
1455
+ skipped: skipped.length,
1456
+ failed: errors.length,
1457
+ results,
1458
+ skippedPrompts: skipped,
1459
+ errors,
1460
+ durationSeconds,
1461
+ completedAt: (/* @__PURE__ */ new Date()).toISOString()
1462
+ };
1463
+ } catch (error) {
1464
+ const durationSeconds = (Date.now() - startTime) / 1e3;
1465
+ this.telemetry.logCostEvent("optimization:scheduled:failed", {
1466
+ error: error.message
1467
+ });
1468
+ return {
1469
+ success: false,
1470
+ totalPrompts: 0,
1471
+ optimized: 0,
1472
+ skipped: 0,
1473
+ failed: 1,
1474
+ results: [],
1475
+ skippedPrompts: [],
1476
+ errors: [{ promptId: "unknown", error: error.message }],
1477
+ durationSeconds,
1478
+ completedAt: (/* @__PURE__ */ new Date()).toISOString()
1479
+ };
1480
+ }
1481
+ }
1482
+ /**
1483
+ * Get prompts opted into auto-optimization
1484
+ *
1485
+ * Checks multiple sources for opt-in (in priority order):
1486
+ * 1. Prompt-specific config: activationMode: 'auto'
1487
+ * 2. Prompt entity flag: prompt.autoOptimize (legacy)
1488
+ * 3. Global config: activationMode: 'auto' (applies to all prompts)
1489
+ * 4. Legacy flags: autoActivate: true && requireManualReview: false
1490
+ */
1491
+ async getOptedInPrompts() {
1492
+ const allPrompts = await this.promptStore.listPrompts();
1493
+ const globalConfig = this.configManager.getConfig(void 0);
1494
+ const globalOptIn = globalConfig.activationMode === "auto";
1495
+ const optedIn = [];
1496
+ for (const prompt of allPrompts) {
1497
+ const promptConfig = this.configManager.getPromptConfig(prompt.name);
1498
+ const hasPromptAutoMode = promptConfig?.activationMode === "auto";
1499
+ const hasPromptAutoOptimize = prompt.autoOptimize === true;
1500
+ const hasGlobalAutoMode = globalOptIn && promptConfig?.activationMode !== "manual";
1501
+ const fullConfig = this.configManager.getConfig(prompt.name);
1502
+ const hasLegacyAutoActivate = fullConfig.autoActivate === true && fullConfig.requireManualReview === false;
1503
+ const isOptedIn = hasPromptAutoMode || hasPromptAutoOptimize || hasGlobalAutoMode || hasLegacyAutoActivate;
1504
+ if (isOptedIn) {
1505
+ optedIn.push({ id: prompt.id, name: prompt.name });
1506
+ }
1507
+ }
1508
+ return optedIn;
1509
+ }
1510
+ /**
1511
+ * Check if a prompt is eligible for optimization
1512
+ *
1513
+ * @param promptIdOrName - Prompt ID or name (supports both for CLI and scheduled use)
1514
+ */
1515
+ async checkOptimizationEligibility(promptIdOrName) {
1516
+ const prompt = await this.resolvePrompt(promptIdOrName);
1517
+ if (!prompt) {
1518
+ return { eligible: false, reason: "Prompt not found" };
1519
+ }
1520
+ if (!prompt.activeVersionId) {
1521
+ return { eligible: false, reason: "No active version" };
1522
+ }
1523
+ const metrics = this.executionTracker.getMetrics(prompt.id, prompt.activeVersionId);
1524
+ if (!metrics) {
1525
+ return { eligible: false, reason: "No execution metrics available" };
1526
+ }
1527
+ const config = this.configManager.getConfig(prompt.name);
1528
+ if (metrics.totalExecutions < config.minSampleSize) {
1529
+ return {
1530
+ eligible: false,
1531
+ reason: `Insufficient data: ${metrics.totalExecutions}/${config.minSampleSize} executions`
1532
+ };
1533
+ }
1534
+ if (this.activeLocks.has(prompt.id)) {
1535
+ return { eligible: false, reason: "Optimization already in progress" };
1536
+ }
1537
+ return { eligible: true, reason: "Eligible for optimization" };
1538
+ }
1539
+ /**
1540
+ * Analyze a prompt for potential optimization (dry-run)
1541
+ *
1542
+ * Returns analysis without generating variants or activating.
1543
+ * Does NOT hard-fail on missing metrics - returns eligible: false instead.
1544
+ * Useful for CLI `poetic prompt analyze` command.
1545
+ *
1546
+ * @param promptIdOrName - Prompt ID or name (supports both for CLI and scheduled use)
1547
+ */
1548
+ async analyze(promptIdOrName) {
1549
+ const prompt = await this.resolvePrompt(promptIdOrName);
1550
+ if (!prompt) {
1551
+ throw new Error(`Prompt ${promptIdOrName} not found`);
1552
+ }
1553
+ if (!prompt.activeVersionId) {
1554
+ throw new Error(`Prompt ${promptIdOrName} has no active version`);
1555
+ }
1556
+ const activeVersion = await this.promptStore.getVersion(prompt.activeVersionId);
1557
+ if (!activeVersion) {
1558
+ throw new Error(`Active version ${prompt.activeVersionId} not found`);
1559
+ }
1560
+ const config = this.configManager.getConfig(prompt.name);
1561
+ const metrics = this.executionTracker.getMetrics(prompt.id, activeVersion.id);
1562
+ const recommendation = await this.optimizer.getRecommendation(prompt.name);
1563
+ const eligibility = await this.checkOptimizationEligibility(prompt.id);
1564
+ const costComplete = metrics?.totalCostStatus === "complete" && metrics.totalCost !== void 0;
1565
+ return {
1566
+ promptId: prompt.id,
1567
+ promptName: prompt.name,
1568
+ activeVersionId: activeVersion.id,
1569
+ currentPerformance: {
1570
+ totalExecutions: metrics?.totalExecutions ?? 0,
1571
+ avgSuccessRate: metrics?.avgSuccessRate ?? 0,
1572
+ avgCompleteness: metrics?.avgCompleteness ?? 0,
1573
+ avgDuration: metrics?.avgDuration ?? 0,
1574
+ // Do not recreate zero from missing/incomplete cost.
1575
+ ...costComplete ? { totalCost: metrics.totalCost } : {},
1576
+ totalCostStatus: metrics?.totalCostStatus
1577
+ },
1578
+ eligibility,
1579
+ recommendation,
1580
+ config,
1581
+ analyzedAt: (/* @__PURE__ */ new Date()).toISOString()
1582
+ };
1583
+ }
1584
+ /**
1585
+ * Close resources
1586
+ */
1587
+ close() {
1588
+ this.variantGenerator.close();
1589
+ this.optimizer.close();
1590
+ this.providerInsights.close();
1591
+ this.promptStore.close();
1592
+ }
1593
+ };
1594
+ export {
1595
+ OptimizationEngine
1596
+ };
1597
+ //# sourceMappingURL=OptimizationEngine-JIMGP3LY.js.map