@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,2321 @@
1
+ import {
2
+ AutomaticPromptOptimizer,
3
+ PromptEvaluator,
4
+ PromptOptimizer
5
+ } from "./chunk-7MMLMXO6.js";
6
+ import {
7
+ PromptManager
8
+ } from "./chunk-Q3WIC6GQ.js";
9
+ import {
10
+ PromptStore
11
+ } from "./chunk-OQ6K46CK.js";
12
+ import {
13
+ registry
14
+ } from "./chunk-Z2KYOFHS.js";
15
+ import {
16
+ BUILT_IN_VARIANT_STRATEGIES
17
+ } from "./chunk-VXF4Q3FW.js";
18
+ import {
19
+ getTelemetryLogger
20
+ } from "./chunk-U6C3VVWS.js";
21
+ import {
22
+ GEMINI_MODELS
23
+ } from "./chunk-V53UG2OT.js";
24
+ import {
25
+ resolveDefaultProvider
26
+ } from "./chunk-XPU2XADL.js";
27
+ import {
28
+ CODEX_MODELS
29
+ } from "./chunk-4NXPXE62.js";
30
+ import {
31
+ CLAUDE_MODELS
32
+ } from "./chunk-MWHLBPNU.js";
33
+ import {
34
+ BooleanFlagSchema,
35
+ ExistingFilePathSchema,
36
+ PromptCategorySchema,
37
+ PromptContentSchema,
38
+ PromptIdSchema,
39
+ PromptNameSchema,
40
+ validateCommandOptions
41
+ } from "./chunk-QOCOVLUH.js";
42
+ import {
43
+ ProviderRegistry
44
+ } from "./chunk-AT4TNPWW.js";
45
+
46
+ // src/cli/commands/prompts.ts
47
+ import * as fs from "fs";
48
+ import chalk from "chalk";
49
+ import { Command } from "commander";
50
+ import { z } from "zod";
51
+
52
+ // src/core/providers/copilot/config.ts
53
+ var COPILOT_MODELS = {
54
+ // Current models
55
+ CLAUDE_SONNET_4_6: "claude-sonnet-4.6",
56
+ CLAUDE_SONNET_4_5: "claude-sonnet-4.5",
57
+ CLAUDE_SONNET_4: "claude-sonnet-4",
58
+ CLAUDE_HAIKU_4_5: "claude-haiku-4.5",
59
+ CLAUDE_OPUS_4_6: "claude-opus-4.6",
60
+ CLAUDE_OPUS_4_5: "claude-opus-4.5",
61
+ CLAUDE_OPUS_4_1: "claude-opus-4.1",
62
+ GPT_5: "gpt-5",
63
+ GPT_5_MINI: "gpt-5-mini",
64
+ GPT_5_1_CODEX_MINI: "gpt-5.1-codex-mini",
65
+ GPT_5_2: "gpt-5.2",
66
+ GEMINI_2_5_PRO: "gemini-2.5-pro",
67
+ GEMINI_3_FLASH: "gemini-3-flash",
68
+ GEMINI_3_PRO: "gemini-3-pro",
69
+ // Legacy models
70
+ GPT_4_1: "gpt-4.1"
71
+ };
72
+ var DEFAULT_TIMEOUT = ProviderRegistry.getTimeout("copilot");
73
+
74
+ // src/orchestrator/model-tier-config.ts
75
+ var TIER_PREFERENCE_AVAILABILITY_KEYS = ["anthropic", "openai", "google", "opencode"];
76
+ function resolveTierPreferenceOrder() {
77
+ const eligible = new Set(TIER_PREFERENCE_AVAILABILITY_KEYS);
78
+ try {
79
+ const ordered = [];
80
+ const seen = /* @__PURE__ */ new Set();
81
+ for (const provider of ProviderRegistry.getEnabledProviders()) {
82
+ const availabilityKey = normalizeProviderForModelAvailability(provider.id);
83
+ if (!eligible.has(availabilityKey) || seen.has(availabilityKey)) continue;
84
+ seen.add(availabilityKey);
85
+ ordered.push(availabilityKey);
86
+ }
87
+ for (const key of TIER_PREFERENCE_AVAILABILITY_KEYS) {
88
+ if (!seen.has(key)) {
89
+ seen.add(key);
90
+ ordered.push(key);
91
+ }
92
+ }
93
+ return ordered;
94
+ } catch {
95
+ return [...TIER_PREFERENCE_AVAILABILITY_KEYS];
96
+ }
97
+ }
98
+ var MODEL_AVAILABILITY_PROVIDER_BY_ALIAS = {
99
+ anthropic: "anthropic",
100
+ claude: "anthropic",
101
+ openai: "openai",
102
+ codex: "openai",
103
+ google: "google",
104
+ gemini: "google",
105
+ opencode: "opencode"
106
+ };
107
+ var REGISTRY_PROVIDER_BY_MODEL_AVAILABILITY_PROVIDER = {
108
+ anthropic: "claude",
109
+ openai: "codex",
110
+ google: "gemini",
111
+ cursor: "cursor",
112
+ copilot: "copilot",
113
+ opencode: "opencode"
114
+ };
115
+ var FALLBACK_PROVIDER_BY_ALIAS = {
116
+ anthropic: "claude",
117
+ claude: "claude",
118
+ openai: "codex",
119
+ codex: "codex",
120
+ google: "gemini",
121
+ gemini: "gemini"
122
+ };
123
+ var STATIC_MODEL_AVAILABILITY_FALLBACK = {
124
+ basicModels: {
125
+ openai: [CODEX_MODELS.GPT_5_4_MINI],
126
+ codex: [CODEX_MODELS.GPT_5_4_MINI],
127
+ anthropic: [CLAUDE_MODELS.CLAUDE_HAIKU_4_5],
128
+ claude: [CLAUDE_MODELS.CLAUDE_HAIKU_4_5],
129
+ google: [GEMINI_MODELS.FLASH_2_5_LITE],
130
+ gemini: [GEMINI_MODELS.FLASH_2_5_LITE],
131
+ cursor: ["auto"],
132
+ copilot: [COPILOT_MODELS.GPT_5_MINI],
133
+ opencode: ["auto"]
134
+ },
135
+ standardModels: {
136
+ openai: [CODEX_MODELS.GPT_5_5],
137
+ codex: [CODEX_MODELS.GPT_5_5],
138
+ anthropic: [CLAUDE_MODELS.CLAUDE_SONNET_4_6],
139
+ claude: [CLAUDE_MODELS.CLAUDE_SONNET_4_6],
140
+ google: [GEMINI_MODELS.FLASH_2_5],
141
+ gemini: [GEMINI_MODELS.FLASH_2_5],
142
+ cursor: ["auto"],
143
+ copilot: [COPILOT_MODELS.GPT_5_MINI],
144
+ opencode: ["auto"]
145
+ },
146
+ advancedModels: {
147
+ openai: [CODEX_MODELS.GPT_5_5],
148
+ codex: [CODEX_MODELS.GPT_5_5],
149
+ anthropic: [CLAUDE_MODELS.CLAUDE_OPUS_4_6],
150
+ claude: [CLAUDE_MODELS.CLAUDE_OPUS_4_6],
151
+ google: [GEMINI_MODELS.PRO_3_PREVIEW],
152
+ gemini: [GEMINI_MODELS.PRO_3_PREVIEW],
153
+ cursor: ["auto"],
154
+ copilot: [COPILOT_MODELS.GPT_5_MINI],
155
+ opencode: ["auto"]
156
+ }
157
+ };
158
+ var ROLE_PRIORITY_BY_TIER = {
159
+ basic: ["fast", "default"],
160
+ standard: ["default"],
161
+ advanced: ["quality", "reasoning", "default"]
162
+ };
163
+ function normalizeProviderForModelAvailability(provider) {
164
+ const normalized = (provider || "").toLowerCase().trim();
165
+ if (!normalized) return normalized;
166
+ return MODEL_AVAILABILITY_PROVIDER_BY_ALIAS[normalized] ?? normalized;
167
+ }
168
+ function getRegistryProviderForModelAvailability(provider) {
169
+ const normalized = normalizeProviderForModelAvailability(provider);
170
+ return REGISTRY_PROVIDER_BY_MODEL_AVAILABILITY_PROVIDER[normalized];
171
+ }
172
+ function cloneModelAvailability(availability) {
173
+ return {
174
+ basicModels: Object.fromEntries(
175
+ Object.entries(availability.basicModels).map(([provider, models]) => [provider, [...models]])
176
+ ),
177
+ standardModels: Object.fromEntries(
178
+ Object.entries(availability.standardModels).map(([provider, models]) => [
179
+ provider,
180
+ [...models]
181
+ ])
182
+ ),
183
+ advancedModels: Object.fromEntries(
184
+ Object.entries(availability.advancedModels).map(([provider, models]) => [
185
+ provider,
186
+ [...models]
187
+ ])
188
+ )
189
+ };
190
+ }
191
+ function uniqueModels(models) {
192
+ return Array.from(new Set(models.filter((model) => Boolean(model?.trim()))));
193
+ }
194
+ function resolveRegistryModel(providerId, role) {
195
+ try {
196
+ if (role === "default") {
197
+ return ProviderRegistry.getDefaultModel(providerId);
198
+ }
199
+ return ProviderRegistry.getModelForRole(providerId, role);
200
+ } catch (_error) {
201
+ return void 0;
202
+ }
203
+ }
204
+ function buildRegistryBackedAvailability() {
205
+ const availability = cloneModelAvailability(STATIC_MODEL_AVAILABILITY_FALLBACK);
206
+ const providerKeys = /* @__PURE__ */ new Set([
207
+ ...Object.keys(STATIC_MODEL_AVAILABILITY_FALLBACK.basicModels),
208
+ ...Object.keys(STATIC_MODEL_AVAILABILITY_FALLBACK.standardModels),
209
+ ...Object.keys(STATIC_MODEL_AVAILABILITY_FALLBACK.advancedModels)
210
+ ]);
211
+ for (const availabilityProvider of providerKeys) {
212
+ const registryProvider = getRegistryProviderForModelAvailability(availabilityProvider);
213
+ if (!registryProvider) continue;
214
+ for (const tier of ["basic", "standard", "advanced"]) {
215
+ const roles = ROLE_PRIORITY_BY_TIER[tier];
216
+ let resolved;
217
+ for (const role of roles) {
218
+ resolved = resolveRegistryModel(registryProvider, role);
219
+ if (resolved) break;
220
+ }
221
+ if (!resolved) continue;
222
+ getAvailabilityForTier(tier, availability)[availabilityProvider] = [resolved];
223
+ }
224
+ }
225
+ return availability;
226
+ }
227
+ var DEFAULT_MODEL_AVAILABILITY = buildRegistryBackedAvailability();
228
+ function getAvailabilityForTier(tier, availability = DEFAULT_MODEL_AVAILABILITY) {
229
+ if (tier === "basic") return availability.basicModels;
230
+ if (tier === "standard") return availability.standardModels;
231
+ return availability.advancedModels;
232
+ }
233
+ function hasRawModelAvailabilityForProvider(provider, availability = DEFAULT_MODEL_AVAILABILITY) {
234
+ const providerKey = normalizeProviderForModelAvailability(provider);
235
+ return (availability.basicModels[providerKey]?.length ?? 0) > 0 || (availability.standardModels[providerKey]?.length ?? 0) > 0 || (availability.advancedModels[providerKey]?.length ?? 0) > 0;
236
+ }
237
+ function getProvidersWithRouteModelAvailability(availability = DEFAULT_MODEL_AVAILABILITY) {
238
+ const providers = [];
239
+ const seen = /* @__PURE__ */ new Set();
240
+ const addIfRoutable = (providerId) => {
241
+ if (!hasRawModelAvailabilityForProvider(providerId, availability)) return;
242
+ const providerKey = normalizeProviderForModelAvailability(providerId);
243
+ const userFacingProvider = getRegistryProviderForModelAvailability(providerKey) ?? providerKey;
244
+ if (seen.has(userFacingProvider)) return;
245
+ seen.add(userFacingProvider);
246
+ providers.push(userFacingProvider);
247
+ };
248
+ try {
249
+ for (const provider of ProviderRegistry.getEnabledProviders()) {
250
+ addIfRoutable(provider.id);
251
+ }
252
+ } catch {
253
+ for (const providerId of /* @__PURE__ */ new Set([
254
+ ...Object.keys(availability.basicModels),
255
+ ...Object.keys(availability.standardModels),
256
+ ...Object.keys(availability.advancedModels)
257
+ ])) {
258
+ addIfRoutable(providerId);
259
+ }
260
+ }
261
+ return providers;
262
+ }
263
+ function hasProviderRouteModelAvailability(provider, availability = DEFAULT_MODEL_AVAILABILITY) {
264
+ return getProvidersWithRouteModelAvailability(availability).includes(
265
+ getRegistryProviderForModelAvailability(normalizeProviderForModelAvailability(provider)) ?? normalizeProviderForModelAvailability(provider)
266
+ );
267
+ }
268
+ function buildTierPreference(tier) {
269
+ const availability = getAvailabilityForTier(tier);
270
+ const entries = [];
271
+ for (const provider of resolveTierPreferenceOrder()) {
272
+ const models = availability[provider] || [];
273
+ entries.push(...models);
274
+ }
275
+ return uniqueModels(entries);
276
+ }
277
+ var TIER_MODEL_PREFERENCE = {
278
+ basic: buildTierPreference("basic"),
279
+ standard: buildTierPreference("standard"),
280
+ advanced: buildTierPreference("advanced")
281
+ };
282
+ function getModelsForTierByProvider(tier, provider) {
283
+ const availability = getAvailabilityForTier(tier);
284
+ const providerKey = normalizeProviderForModelAvailability(provider);
285
+ const scoped = availability[providerKey] || [];
286
+ if (scoped.length > 0) {
287
+ return [...scoped];
288
+ }
289
+ return [];
290
+ }
291
+ var MERGED_PROVIDER_MODEL_FALLBACK = {
292
+ claude: {
293
+ fast: CLAUDE_MODELS.CLAUDE_HAIKU_4_5,
294
+ default: CLAUDE_MODELS.CLAUDE_SONNET_4_6,
295
+ advanced: CLAUDE_MODELS.CLAUDE_OPUS_4_6
296
+ },
297
+ codex: {
298
+ fast: CODEX_MODELS.GPT_5_4_MINI,
299
+ default: CODEX_MODELS.GPT_5_5,
300
+ advanced: CODEX_MODELS.GPT_5_5
301
+ },
302
+ gemini: {
303
+ fast: GEMINI_MODELS.FLASH_2_5_LITE,
304
+ default: GEMINI_MODELS.FLASH_2_5,
305
+ advanced: GEMINI_MODELS.PRO_3_PREVIEW
306
+ },
307
+ cursor: {
308
+ // Cursor's model should come from repo config (typically `auto`).
309
+ },
310
+ copilot: {
311
+ // Dot notation required by the GitHub Copilot CLI — do not normalize.
312
+ fast: COPILOT_MODELS.GPT_5_MINI,
313
+ default: COPILOT_MODELS.CLAUDE_SONNET_4_6,
314
+ advanced: COPILOT_MODELS.CLAUDE_OPUS_4_6
315
+ },
316
+ opencode: {
317
+ fast: "auto",
318
+ default: "auto",
319
+ advanced: "auto"
320
+ }
321
+ };
322
+ function getModelFromFallback(provider, tier) {
323
+ const normalized = (provider || "").toLowerCase().trim();
324
+ const fallbackProvider = FALLBACK_PROVIDER_BY_ALIAS[normalized] ?? normalized;
325
+ return MERGED_PROVIDER_MODEL_FALLBACK[fallbackProvider]?.[tier];
326
+ }
327
+
328
+ // src/prompts/generator.ts
329
+ function resolveDefaultGeneratorProvider() {
330
+ try {
331
+ return resolveDefaultProvider().value;
332
+ } catch {
333
+ return "";
334
+ }
335
+ }
336
+ var DEFAULT_PROMPT_GENERATOR_MODEL = (() => {
337
+ const defaultProvider = resolveDefaultGeneratorProvider();
338
+ if (!defaultProvider) {
339
+ return "";
340
+ }
341
+ return ProviderRegistry.getDefaultModel(defaultProvider) ?? getModelFromFallback(defaultProvider, "default") ?? "";
342
+ })();
343
+ var BUILT_IN_TEMPLATES = {
344
+ "strategy-conservative": {
345
+ id: "strategy-conservative",
346
+ name: "Conservative Strategy Template",
347
+ description: "Template for conservative approach prompts",
348
+ category: "strategy",
349
+ template: `CONSERVATIVE APPROACH
350
+ {{goal}}
351
+
352
+ You are a coding agent (conservative style).
353
+
354
+ FILE TARGETS:
355
+ {{context}}
356
+
357
+ Guidance:
358
+ - Follow existing patterns in the codebase.
359
+ - Keep changes small, focused, and backwards-compatible.
360
+ - Write defensive code with error handling at boundaries.
361
+ - Avoid unrelated refactors.
362
+ - Write the code now; no plan-only output.
363
+
364
+ {{constraints}}
365
+
366
+ Requirements:
367
+ {{requirements}}
368
+
369
+ Expected Outcomes:
370
+ {{outcomes}}
371
+
372
+ FILE TARGET RULES:
373
+ - (create) = permission to create; do not ask
374
+ - (modify) = must exist; do not create; if missing, find correct file and note substitution; ask only if blocked
375
+ - No marker = treat as (modify) if exists, else ask
376
+
377
+ Edit the listed files. Done.`,
378
+ placeholders: [
379
+ {
380
+ key: "goal",
381
+ description: "The main goal or task description",
382
+ required: true
383
+ },
384
+ {
385
+ key: "context",
386
+ description: "Additional context about the task",
387
+ required: false,
388
+ defaultValue: ""
389
+ },
390
+ {
391
+ key: "constraints",
392
+ description: "Any constraints or limitations",
393
+ required: false,
394
+ defaultValue: ""
395
+ },
396
+ {
397
+ key: "requirements",
398
+ description: "Specific requirements (bullet points)",
399
+ required: true
400
+ },
401
+ {
402
+ key: "outcomes",
403
+ description: "Expected outcomes or deliverables",
404
+ required: true
405
+ }
406
+ ]
407
+ },
408
+ "strategy-innovative": {
409
+ id: "strategy-innovative",
410
+ name: "Innovative Strategy Template",
411
+ description: "Template for innovative approach prompts",
412
+ category: "strategy",
413
+ template: `INNOVATIVE APPROACH
414
+ {{goal}}
415
+
416
+ You are a coding agent (innovative style).
417
+
418
+ FILE TARGETS:
419
+ {{context}}
420
+
421
+ Guidance:
422
+ - Explore modern patterns that improve performance, UX, or developer experience.
423
+ - Be bold and creative; implement novel solutions directly.
424
+ - Prioritize code elegance and efficiency over strict convention.
425
+ - Keep changes coherent and testable; avoid gratuitous complexity.
426
+ - Write the code now; no plan-only output.
427
+
428
+ {{constraints}}
429
+
430
+ Requirements:
431
+ {{requirements}}
432
+
433
+ Expected Outcomes:
434
+ {{outcomes}}
435
+
436
+ FILE TARGET RULES:
437
+ - (create) = permission to create; do not ask
438
+ - (modify) = must exist; do not create; if missing, find correct file and note substitution; ask only if blocked
439
+ - No marker = treat as (modify) if exists, else ask
440
+
441
+ Edit the listed files. Done.`,
442
+ placeholders: [
443
+ {
444
+ key: "goal",
445
+ description: "The main goal or task description",
446
+ required: true
447
+ },
448
+ {
449
+ key: "context",
450
+ description: "Additional context about the task",
451
+ required: false,
452
+ defaultValue: ""
453
+ },
454
+ {
455
+ key: "constraints",
456
+ description: "Any constraints or limitations",
457
+ required: false,
458
+ defaultValue: ""
459
+ },
460
+ {
461
+ key: "requirements",
462
+ description: "Specific requirements (bullet points)",
463
+ required: true
464
+ },
465
+ {
466
+ key: "outcomes",
467
+ description: "Expected outcomes or deliverables",
468
+ required: true
469
+ }
470
+ ]
471
+ },
472
+ "strategy-hybrid": {
473
+ id: "strategy-hybrid",
474
+ name: "Hybrid Strategy Template",
475
+ description: "Template for hybrid approach prompts",
476
+ category: "strategy",
477
+ template: `HYBRID APPROACH
478
+ {{goal}}
479
+
480
+ You are a coding agent (hybrid style).
481
+
482
+ FILE TARGETS:
483
+ {{context}}
484
+
485
+ Guidance:
486
+ - Blend proven patterns with targeted innovations where they clearly reduce risk.
487
+ - Stabilize existing behavior first; add safety nets at modified surfaces.
488
+ - Apply modern patterns only where they clearly reduce risk or complexity.
489
+ - Preserve backwards compatibility unless explicitly allowed to break it.
490
+ - Keep diffs tight and focused; avoid unrelated refactors.
491
+ - Write the code now; no plan-only output.
492
+
493
+ {{constraints}}
494
+
495
+ Requirements:
496
+ {{requirements}}
497
+
498
+ Expected Outcomes:
499
+ {{outcomes}}
500
+
501
+ FILE TARGET RULES:
502
+ - (create) = permission to create; do not ask
503
+ - (modify) = must exist; do not create; if missing, find correct file and note substitution; ask only if blocked
504
+ - No marker = treat as (modify) if exists, else ask
505
+
506
+ Edit the listed files. Done.`,
507
+ placeholders: [
508
+ {
509
+ key: "goal",
510
+ description: "The main goal or task description",
511
+ required: true
512
+ },
513
+ {
514
+ key: "context",
515
+ description: "Additional context about the task",
516
+ required: false,
517
+ defaultValue: ""
518
+ },
519
+ {
520
+ key: "constraints",
521
+ description: "Any constraints or limitations",
522
+ required: false,
523
+ defaultValue: ""
524
+ },
525
+ {
526
+ key: "requirements",
527
+ description: "Specific requirements (bullet points)",
528
+ required: true
529
+ },
530
+ {
531
+ key: "outcomes",
532
+ description: "Expected outcomes or deliverables",
533
+ required: true
534
+ }
535
+ ]
536
+ },
537
+ "domain-feature": {
538
+ id: "domain-feature",
539
+ name: "Feature Implementation Template",
540
+ description: "Template for implementing new features",
541
+ category: "domain",
542
+ template: `Implement {{feature_name}} feature for {{project_context}}.
543
+
544
+ Description:
545
+ {{description}}
546
+
547
+ Technical Requirements:
548
+ {{tech_requirements}}
549
+
550
+ Acceptance Criteria:
551
+ {{acceptance_criteria}}
552
+
553
+ Implementation Notes:
554
+ - Follow existing patterns in {{codebase_pattern}}
555
+ - Ensure backwards compatibility
556
+ - Add comprehensive tests (unit + integration)
557
+ - Update documentation
558
+ - Consider edge cases and error handling
559
+
560
+ {{additional_notes}}`,
561
+ placeholders: [
562
+ {
563
+ key: "feature_name",
564
+ description: "Name of the feature",
565
+ required: true
566
+ },
567
+ {
568
+ key: "project_context",
569
+ description: "Project or module context",
570
+ required: true
571
+ },
572
+ {
573
+ key: "description",
574
+ description: "Detailed feature description",
575
+ required: true
576
+ },
577
+ {
578
+ key: "tech_requirements",
579
+ description: "Technical requirements",
580
+ required: true
581
+ },
582
+ {
583
+ key: "acceptance_criteria",
584
+ description: "Acceptance criteria",
585
+ required: true
586
+ },
587
+ {
588
+ key: "codebase_pattern",
589
+ description: "Existing codebase pattern to follow",
590
+ required: false,
591
+ defaultValue: "the existing codebase"
592
+ },
593
+ {
594
+ key: "additional_notes",
595
+ description: "Any additional notes or considerations",
596
+ required: false,
597
+ defaultValue: ""
598
+ }
599
+ ]
600
+ },
601
+ "workflow-refactor": {
602
+ id: "workflow-refactor",
603
+ name: "Refactoring Template",
604
+ description: "Template for code refactoring tasks",
605
+ category: "workflow",
606
+ template: `Refactor {{target}} in {{module}}.
607
+
608
+ Current State:
609
+ {{current_state}}
610
+
611
+ Issues:
612
+ {{issues}}
613
+
614
+ Desired State:
615
+ {{desired_state}}
616
+
617
+ Refactoring Strategy:
618
+ - Identify and extract common patterns
619
+ - Improve code organization and readability
620
+ - Reduce duplication and complexity
621
+ - Maintain existing functionality (no behavior changes)
622
+ - Ensure all tests pass after refactoring
623
+ - Update documentation if needed
624
+
625
+ Constraints:
626
+ {{constraints}}
627
+
628
+ Success Criteria:
629
+ {{success_criteria}}`,
630
+ placeholders: [
631
+ {
632
+ key: "target",
633
+ description: "What to refactor (function, class, module)",
634
+ required: true
635
+ },
636
+ {
637
+ key: "module",
638
+ description: "Module or file location",
639
+ required: true
640
+ },
641
+ {
642
+ key: "current_state",
643
+ description: "Description of current state",
644
+ required: true
645
+ },
646
+ {
647
+ key: "issues",
648
+ description: "Problems or issues to address",
649
+ required: true
650
+ },
651
+ {
652
+ key: "desired_state",
653
+ description: "Desired outcome after refactoring",
654
+ required: true
655
+ },
656
+ {
657
+ key: "constraints",
658
+ description: "Any constraints (e.g., no API changes)",
659
+ required: false,
660
+ defaultValue: "No breaking changes to public APIs"
661
+ },
662
+ {
663
+ key: "success_criteria",
664
+ description: "How to measure success",
665
+ required: false,
666
+ defaultValue: "All tests pass, code is more maintainable"
667
+ }
668
+ ]
669
+ }
670
+ };
671
+ var PromptGenerator = class {
672
+ store;
673
+ manager;
674
+ templates;
675
+ engine;
676
+ defaultModel;
677
+ profile;
678
+ workingDir;
679
+ constructor(options = {}) {
680
+ this.store = new PromptStore(options);
681
+ this.manager = new PromptManager(options);
682
+ this.templates = /* @__PURE__ */ new Map();
683
+ this.engine = options.engine;
684
+ this.defaultModel = options.defaultModel || DEFAULT_PROMPT_GENERATOR_MODEL;
685
+ this.profile = options.profile || "default";
686
+ this.workingDir = options.workingDir || process.cwd();
687
+ Object.entries(BUILT_IN_TEMPLATES).forEach(([id, template]) => {
688
+ this.templates.set(id, template);
689
+ });
690
+ }
691
+ /**
692
+ * Generate a prompt from a request using AI engine or templates
693
+ */
694
+ async generate(request) {
695
+ try {
696
+ if (this.engine) {
697
+ return await this.generateWithAI(request);
698
+ }
699
+ return await this.generateFromTemplates(request);
700
+ } catch (error) {
701
+ return {
702
+ success: false,
703
+ error: error.message,
704
+ model: this.engine ? request.model || this.defaultModel : "template-based",
705
+ duration: 0,
706
+ confidence: 0,
707
+ suggestedReview: []
708
+ };
709
+ }
710
+ }
711
+ /**
712
+ * Generate using AI engine
713
+ */
714
+ async generateWithAI(request) {
715
+ if (!this.engine) {
716
+ return {
717
+ success: false,
718
+ error: "No AI engine configured",
719
+ model: "none",
720
+ duration: 0,
721
+ confidence: 0,
722
+ suggestedReview: []
723
+ };
724
+ }
725
+ const startTime = Date.now();
726
+ const model = request.model || this.defaultModel;
727
+ try {
728
+ const generationPrompt = this.buildGenerationPrompt(request);
729
+ const result = await this.engine.run({
730
+ profile: this.profile,
731
+ prompt: generationPrompt,
732
+ workingDir: this.workingDir,
733
+ model,
734
+ // Prompt generation only parses stdout. engine.run is called directly
735
+ // here, so it does not inherit runProviderNative's read-only derivation.
736
+ executionIntent: "analysis",
737
+ readOnlyWorkingDir: true
738
+ });
739
+ if (result.exitCode !== 0) {
740
+ return {
741
+ success: false,
742
+ error: "AI generation failed",
743
+ model,
744
+ duration: Date.now() - startTime,
745
+ confidence: 0,
746
+ suggestedReview: []
747
+ };
748
+ }
749
+ const content = this.parseGeneratedContent(result.stdout);
750
+ if (!content || content.trim().length === 0) {
751
+ return {
752
+ success: false,
753
+ error: "Failed to parse generated content",
754
+ model,
755
+ duration: Date.now() - startTime,
756
+ confidence: 0,
757
+ suggestedReview: []
758
+ };
759
+ }
760
+ const confidence = this.calculateAIConfidence(content);
761
+ const suggestedReview = this.generateReviewChecklist(request, content);
762
+ const promptId = this.createPromptId(request.name);
763
+ return {
764
+ success: true,
765
+ prompt: {
766
+ id: promptId,
767
+ name: request.name,
768
+ description: request.description,
769
+ category: request.category,
770
+ status: "active",
771
+ variant: request.variant,
772
+ tags: request.tags || [],
773
+ autoOptimize: request.autoOptimize ?? false,
774
+ currentVersion: "v1.0.0",
775
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
776
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
777
+ usageCount: 0
778
+ },
779
+ version: {
780
+ id: "v1.0.0",
781
+ promptId,
782
+ content,
783
+ contentHash: "",
784
+ isActive: true,
785
+ isGenerated: true,
786
+ generationModel: model,
787
+ generationPrompt,
788
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
789
+ },
790
+ model,
791
+ duration: Date.now() - startTime,
792
+ confidence,
793
+ suggestedReview
794
+ };
795
+ } catch (error) {
796
+ return {
797
+ success: false,
798
+ error: error.message,
799
+ model,
800
+ duration: Date.now() - startTime,
801
+ confidence: 0,
802
+ suggestedReview: []
803
+ };
804
+ }
805
+ }
806
+ /**
807
+ * Generate using templates (fallback)
808
+ */
809
+ async generateFromTemplates(request) {
810
+ try {
811
+ const template = this.selectTemplate(request);
812
+ if (!template) {
813
+ return {
814
+ success: false,
815
+ error: "No suitable template found for request",
816
+ model: "template-based",
817
+ duration: 0,
818
+ confidence: 0,
819
+ suggestedReview: []
820
+ };
821
+ }
822
+ const startTime = Date.now();
823
+ const content = this.buildFromTemplate(template, request);
824
+ const confidence = this.calculateTemplateConfidence(template, request);
825
+ const suggestedReview = this.generateReviewChecklist(request, content);
826
+ const promptId = this.createPromptId(request.name);
827
+ const duration = Date.now() - startTime;
828
+ return {
829
+ success: true,
830
+ prompt: {
831
+ id: promptId,
832
+ name: request.name,
833
+ description: request.description,
834
+ category: request.category,
835
+ status: "active",
836
+ variant: request.variant,
837
+ tags: request.tags || [],
838
+ autoOptimize: request.autoOptimize ?? false,
839
+ currentVersion: "v1.0.0",
840
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
841
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
842
+ usageCount: 0
843
+ },
844
+ version: {
845
+ id: "v1.0.0",
846
+ promptId,
847
+ content,
848
+ contentHash: "",
849
+ isActive: true,
850
+ isGenerated: true,
851
+ generationModel: "template-based",
852
+ generationPrompt: JSON.stringify(request),
853
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
854
+ },
855
+ model: "template-based",
856
+ duration,
857
+ confidence,
858
+ suggestedReview
859
+ };
860
+ } catch (error) {
861
+ return {
862
+ success: false,
863
+ error: error.message,
864
+ model: "template-based",
865
+ duration: 0,
866
+ confidence: 0,
867
+ suggestedReview: []
868
+ };
869
+ }
870
+ }
871
+ /**
872
+ * Generate prompt from a template with provided values
873
+ */
874
+ generateFromTemplate(templateId, values) {
875
+ const template = this.templates.get(templateId);
876
+ if (!template) {
877
+ throw new Error(`Template "${templateId}" not found`);
878
+ }
879
+ return this.buildFromTemplate(template, values);
880
+ }
881
+ /**
882
+ * Get all available templates
883
+ */
884
+ getTemplates(category) {
885
+ const templates = Array.from(this.templates.values());
886
+ if (category) {
887
+ return templates.filter((t) => t.category === category);
888
+ }
889
+ return templates;
890
+ }
891
+ /**
892
+ * Get a specific template
893
+ */
894
+ getTemplate(id) {
895
+ return this.templates.get(id) || null;
896
+ }
897
+ /**
898
+ * Register a custom template
899
+ */
900
+ registerTemplate(template) {
901
+ this.templates.set(template.id, template);
902
+ }
903
+ /**
904
+ * Generate multiple variants with different strategies
905
+ */
906
+ async generateVariants(baseRequest, strategies) {
907
+ const results = [];
908
+ for (const strategy of strategies) {
909
+ const variantRequest = {
910
+ ...baseRequest,
911
+ name: `${baseRequest.name} (${strategy})`,
912
+ variant: strategy,
913
+ goal: `${baseRequest.goal} (${strategy} approach)`
914
+ };
915
+ const result = await this.generate(variantRequest);
916
+ results.push(result);
917
+ }
918
+ return results;
919
+ }
920
+ /**
921
+ * Refine an existing prompt with improvements
922
+ */
923
+ async refine(promptId, refinementGoals) {
924
+ try {
925
+ const existingPrompt = this.manager.get(promptId);
926
+ if (!existingPrompt) {
927
+ return {
928
+ success: false,
929
+ error: `Prompt "${promptId}" not found`,
930
+ model: this.defaultModel,
931
+ duration: 0,
932
+ confidence: 0,
933
+ suggestedReview: []
934
+ };
935
+ }
936
+ const currentVersion = this.manager.getVersion(promptId, existingPrompt.currentVersion);
937
+ if (!currentVersion) {
938
+ return {
939
+ success: false,
940
+ error: `Current version not found for prompt "${promptId}"`,
941
+ model: this.defaultModel,
942
+ duration: 0,
943
+ confidence: 0,
944
+ suggestedReview: []
945
+ };
946
+ }
947
+ if (!this.engine) {
948
+ return {
949
+ success: false,
950
+ error: "No AI engine configured for refinement",
951
+ model: "none",
952
+ duration: 0,
953
+ confidence: 0,
954
+ suggestedReview: []
955
+ };
956
+ }
957
+ const startTime = Date.now();
958
+ const refinementPrompt = `You are an expert prompt engineer. Refine the following prompt based on these goals:
959
+
960
+ Current Prompt:
961
+ ${currentVersion.content}
962
+
963
+ Refinement Goals:
964
+ ${refinementGoals.map((goal, i) => `${i + 1}. ${goal}`).join("\n")}
965
+
966
+ Generate an improved version of the prompt that addresses these refinement goals while maintaining its core purpose.
967
+
968
+ Output the refined prompt after the marker "GENERATED PROMPT:" on a new line.`;
969
+ const result = await this.engine.run({
970
+ profile: this.profile,
971
+ prompt: refinementPrompt,
972
+ workingDir: this.workingDir,
973
+ model: this.defaultModel,
974
+ // Refinement only parses stdout; same direct-engine.run caveat as above.
975
+ executionIntent: "analysis",
976
+ readOnlyWorkingDir: true
977
+ });
978
+ if (result.exitCode !== 0) {
979
+ return {
980
+ success: false,
981
+ error: "Refinement generation failed",
982
+ model: this.defaultModel,
983
+ duration: Date.now() - startTime,
984
+ confidence: 0,
985
+ suggestedReview: []
986
+ };
987
+ }
988
+ const content = this.parseGeneratedContent(result.stdout);
989
+ if (!content || content.trim().length === 0) {
990
+ return {
991
+ success: false,
992
+ error: "Failed to parse refined content",
993
+ model: this.defaultModel,
994
+ duration: Date.now() - startTime,
995
+ confidence: 0,
996
+ suggestedReview: []
997
+ };
998
+ }
999
+ const confidence = this.calculateAIConfidence(content);
1000
+ const versionId = `v${Date.now()}`;
1001
+ await this.manager.createVersion({
1002
+ promptId,
1003
+ content,
1004
+ version: versionId,
1005
+ changelog: `Refined: ${refinementGoals.join(", ")}`,
1006
+ isGenerated: true,
1007
+ generationModel: this.defaultModel,
1008
+ generationPrompt: refinementPrompt
1009
+ });
1010
+ return {
1011
+ success: true,
1012
+ prompt: existingPrompt,
1013
+ version: {
1014
+ id: versionId,
1015
+ promptId,
1016
+ content,
1017
+ contentHash: "",
1018
+ isActive: true,
1019
+ isGenerated: true,
1020
+ generationModel: this.defaultModel,
1021
+ generationPrompt: refinementPrompt,
1022
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
1023
+ },
1024
+ model: this.defaultModel,
1025
+ duration: Date.now() - startTime,
1026
+ confidence,
1027
+ suggestedReview: this.generateReviewChecklist(
1028
+ {
1029
+ name: existingPrompt.name,
1030
+ description: existingPrompt.description,
1031
+ category: existingPrompt.category,
1032
+ goal: refinementGoals.join(", ")
1033
+ },
1034
+ content
1035
+ )
1036
+ };
1037
+ } catch (error) {
1038
+ return {
1039
+ success: false,
1040
+ error: error.message,
1041
+ model: this.defaultModel,
1042
+ duration: 0,
1043
+ confidence: 0,
1044
+ suggestedReview: []
1045
+ };
1046
+ }
1047
+ }
1048
+ /**
1049
+ * Close store and manager connections
1050
+ */
1051
+ close() {
1052
+ this.store.close();
1053
+ this.manager.close();
1054
+ }
1055
+ // Private helper methods
1056
+ /**
1057
+ * Build generation prompt for AI
1058
+ */
1059
+ buildGenerationPrompt(request) {
1060
+ const parts = [
1061
+ "You are an expert prompt engineer. Generate a high-quality prompt based on these requirements:",
1062
+ "",
1063
+ `Name: ${request.name}`,
1064
+ `Description: ${request.description}`,
1065
+ `Category: ${request.category}`
1066
+ ];
1067
+ if (request.variant) {
1068
+ parts.push(`Strategy: ${request.variant}`);
1069
+ }
1070
+ if (request.goal) {
1071
+ parts.push(`Goal: ${request.goal}`);
1072
+ }
1073
+ if (request.context) {
1074
+ parts.push(`Context: ${request.context}`);
1075
+ }
1076
+ if (request.constraints && request.constraints.length > 0) {
1077
+ parts.push(`Constraints: ${request.constraints.join(", ")}`);
1078
+ }
1079
+ if (request.examples && request.examples.length > 0) {
1080
+ parts.push(`Examples: ${request.examples.join(", ")}`);
1081
+ }
1082
+ if (request.tags && request.tags.length > 0) {
1083
+ parts.push(`Tags: ${request.tags.join(", ")}`);
1084
+ }
1085
+ if (request.basedOn && request.basedOn.length > 0) {
1086
+ parts.push(`Based on templates: ${request.basedOn.join(", ")}`);
1087
+ }
1088
+ parts.push(
1089
+ "",
1090
+ "Requirements:",
1091
+ "1. Create a clear, specific, and actionable prompt",
1092
+ "2. Include explicit instructions and expectations",
1093
+ "3. Specify measurable success criteria",
1094
+ "4. Consider edge cases and error scenarios",
1095
+ "5. Make the prompt self-contained and complete",
1096
+ "",
1097
+ 'Output the generated prompt after the marker "GENERATED PROMPT:" on a new line.'
1098
+ );
1099
+ return parts.join("\n");
1100
+ }
1101
+ /**
1102
+ * Parse generated content from AI output
1103
+ */
1104
+ parseGeneratedContent(output) {
1105
+ const markerIndex = output.indexOf("GENERATED PROMPT:");
1106
+ if (markerIndex !== -1) {
1107
+ const afterMarker = output.substring(markerIndex + "GENERATED PROMPT:".length).trim();
1108
+ return afterMarker;
1109
+ }
1110
+ return output.trim();
1111
+ }
1112
+ /**
1113
+ * Calculate confidence for AI-generated content
1114
+ */
1115
+ calculateAIConfidence(content) {
1116
+ let confidence = 0.5;
1117
+ const wordCount = content.split(/\s+/).length;
1118
+ if (wordCount > 200) {
1119
+ confidence += 0.2;
1120
+ } else if (wordCount > 100) {
1121
+ confidence += 0.1;
1122
+ } else if (wordCount < 50) {
1123
+ confidence -= 0.1;
1124
+ }
1125
+ const vagueWords = ["maybe", "perhaps", "possibly", "might", "could", "any", "some"];
1126
+ const vagueCount = vagueWords.filter((word) => content.toLowerCase().includes(word)).length;
1127
+ confidence -= vagueCount * 0.05;
1128
+ const actionableVerbs = [
1129
+ "create",
1130
+ "build",
1131
+ "implement",
1132
+ "generate",
1133
+ "test",
1134
+ "validate",
1135
+ "optimize",
1136
+ "refactor",
1137
+ "design",
1138
+ "analyze"
1139
+ ];
1140
+ const actionCount = actionableVerbs.filter(
1141
+ (verb) => content.toLowerCase().includes(verb)
1142
+ ).length;
1143
+ confidence += Math.min(actionCount * 0.05, 0.2);
1144
+ if (content.includes("-") || content.includes("*")) {
1145
+ confidence += 0.05;
1146
+ }
1147
+ if (/\d+\./.test(content)) {
1148
+ confidence += 0.05;
1149
+ }
1150
+ return Math.max(0, Math.min(1, confidence));
1151
+ }
1152
+ /**
1153
+ * Create prompt ID from name
1154
+ */
1155
+ createPromptId(name) {
1156
+ return name.toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
1157
+ }
1158
+ /**
1159
+ * Select the most appropriate template for a request
1160
+ */
1161
+ selectTemplate(request) {
1162
+ if (request.variant) {
1163
+ const templateId = `strategy-${request.variant}`;
1164
+ const template = this.templates.get(templateId);
1165
+ if (template) {
1166
+ return template;
1167
+ }
1168
+ }
1169
+ const categoryTemplates = Array.from(this.templates.values()).filter(
1170
+ (t) => t.category === request.category
1171
+ );
1172
+ if (categoryTemplates.length > 0) {
1173
+ return categoryTemplates[0] ?? null;
1174
+ }
1175
+ return this.templates.get("strategy-conservative") ?? null;
1176
+ }
1177
+ /**
1178
+ * Build prompt content from template and request
1179
+ */
1180
+ buildFromTemplate(template, request) {
1181
+ let content = template.template;
1182
+ for (const placeholder of template.placeholders) {
1183
+ const requestValue = request[placeholder.key];
1184
+ const value = (typeof requestValue === "string" ? requestValue : void 0) || placeholder.defaultValue || (placeholder.required ? `[${placeholder.key.toUpperCase()}]` : "");
1185
+ const pattern = new RegExp(`{{${placeholder.key}}}`, "g");
1186
+ content = content.replace(pattern, () => value);
1187
+ }
1188
+ if (request.goal && !template.placeholders.find((p) => p.key === "goal")) {
1189
+ content = `${request.goal}
1190
+
1191
+ ${content}`;
1192
+ }
1193
+ if (request.context && content.includes("{{context}}")) {
1194
+ const ctx = `Context:
1195
+ ${request.context}`;
1196
+ content = content.replace(/{{context}}/g, () => ctx);
1197
+ }
1198
+ if (request.constraints && Array.isArray(request.constraints) && request.constraints.length > 0) {
1199
+ const constraintsText = `Constraints:
1200
+ ${request.constraints.map((c) => `- ${c}`).join("\n")}`;
1201
+ if (content.includes("{{constraints}}")) {
1202
+ content = content.replace(/{{constraints}}/g, constraintsText);
1203
+ } else {
1204
+ content += `
1205
+
1206
+ ${constraintsText}`;
1207
+ }
1208
+ }
1209
+ if (request.examples && Array.isArray(request.examples) && request.examples.length > 0) {
1210
+ const examplesText = `
1211
+
1212
+ Examples:
1213
+ ${request.examples.map((ex, i) => `${i + 1}. ${ex}`).join("\n")}`;
1214
+ content += examplesText;
1215
+ }
1216
+ content = content.replace(/{{[^}]+}}/g, "");
1217
+ content = content.replace(/\n\n\n+/g, "\n\n").trim();
1218
+ return content;
1219
+ }
1220
+ /**
1221
+ * Calculate confidence score for template-based generation
1222
+ */
1223
+ calculateTemplateConfidence(template, request) {
1224
+ let confidence = 0.7;
1225
+ const requiredPlaceholders = template.placeholders.filter((p) => p.required);
1226
+ const providedValues = requiredPlaceholders.filter(
1227
+ (p) => request[p.key]
1228
+ );
1229
+ const completenessScore = providedValues.length / requiredPlaceholders.length * 0.2;
1230
+ confidence += completenessScore;
1231
+ if (request.context && request.context.length > 50) {
1232
+ confidence += 0.03;
1233
+ }
1234
+ if (request.constraints && request.constraints.length > 0) {
1235
+ confidence += 0.03;
1236
+ }
1237
+ if (request.examples && request.examples.length > 0) {
1238
+ confidence += 0.04;
1239
+ }
1240
+ return Math.min(1, confidence);
1241
+ }
1242
+ /**
1243
+ * Generate review checklist for prompt
1244
+ */
1245
+ generateReviewChecklist(request, content) {
1246
+ const checklist = [
1247
+ "Verify that the goal is clearly stated",
1248
+ "Check that all requirements are specific and measurable",
1249
+ "Ensure acceptance criteria are well-defined",
1250
+ "Review for potential ambiguities or unclear terms",
1251
+ "Confirm that constraints are reasonable"
1252
+ ];
1253
+ if (request.variant) {
1254
+ checklist.push(`Verify that the prompt follows ${request.variant} strategy principles`);
1255
+ }
1256
+ if (!request.examples || request.examples.length === 0) {
1257
+ checklist.push("Consider adding examples for clarity");
1258
+ }
1259
+ if (!request.context) {
1260
+ checklist.push("Consider adding more context if available");
1261
+ }
1262
+ if (content) {
1263
+ const wordCount = content.split(/\s+/).length;
1264
+ if (wordCount < 50) {
1265
+ checklist.push("Content seems short - consider adding more detail");
1266
+ }
1267
+ if (wordCount > 500) {
1268
+ checklist.push("Content is long - consider if it could be more concise");
1269
+ }
1270
+ const vagueWords = ["maybe", "perhaps", "possibly", "might", "could"];
1271
+ const hasVague = vagueWords.some((word) => content.toLowerCase().includes(word));
1272
+ if (hasVague) {
1273
+ checklist.push("Content contains vague language - consider making it more specific");
1274
+ }
1275
+ }
1276
+ return checklist;
1277
+ }
1278
+ };
1279
+
1280
+ // src/cli/commands/prompts.ts
1281
+ var manager = null;
1282
+ var telemetry = null;
1283
+ var evaluator = null;
1284
+ var optimizer = null;
1285
+ function getManager() {
1286
+ if (!manager) {
1287
+ manager = new PromptManager();
1288
+ }
1289
+ return manager;
1290
+ }
1291
+ function getTelemetry() {
1292
+ if (!telemetry) {
1293
+ telemetry = getTelemetryLogger();
1294
+ }
1295
+ return telemetry;
1296
+ }
1297
+ function getEvaluator() {
1298
+ if (!evaluator) {
1299
+ evaluator = new PromptEvaluator({ telemetryLogger: getTelemetry() });
1300
+ }
1301
+ return evaluator;
1302
+ }
1303
+ function getOptimizer() {
1304
+ if (!optimizer) {
1305
+ optimizer = new PromptOptimizer({ telemetryLogger: getTelemetry() });
1306
+ }
1307
+ return optimizer;
1308
+ }
1309
+ var createAutoOptimizer = (options = {}) => new AutomaticPromptOptimizer({
1310
+ telemetryLogger: getTelemetry(),
1311
+ promptManager: getManager(),
1312
+ ...options
1313
+ });
1314
+ async function analyzeSinglePrompt(promptId, versionId) {
1315
+ const prompt = getManager().getOrThrow(promptId);
1316
+ let version;
1317
+ if (versionId) {
1318
+ version = getManager().getVersion(versionId);
1319
+ if (!version) {
1320
+ throw new Error(`Version not found: ${versionId}`);
1321
+ }
1322
+ if (version.promptId !== promptId) {
1323
+ throw new Error(`Version ${versionId} does not belong to prompt ${promptId}`);
1324
+ }
1325
+ } else {
1326
+ version = getManager().getActiveVersion(promptId);
1327
+ if (!version) {
1328
+ throw new Error(`No active version found for prompt "${promptId}"`);
1329
+ }
1330
+ }
1331
+ const analysis = await getOptimizer().analyze(version.id);
1332
+ return { prompt, version, analysis };
1333
+ }
1334
+ async function collectActiveAnalyses(promptIds) {
1335
+ const entries = [];
1336
+ const promptsToAnalyze = promptIds ? promptIds.map((id) => getManager().getOrThrow(id)) : getManager().list({ status: "active" });
1337
+ for (const prompt of promptsToAnalyze) {
1338
+ try {
1339
+ const version = getManager().getActiveVersion(prompt.id);
1340
+ if (!version) {
1341
+ console.log(chalk.yellow(` Warning: No active version for ${prompt.name}`));
1342
+ continue;
1343
+ }
1344
+ const analysis = await getOptimizer().analyze(version.id);
1345
+ entries.push({ prompt, version, analysis });
1346
+ } catch (error) {
1347
+ console.log(
1348
+ chalk.yellow(` Warning: Could not analyze ${prompt.name}: ${error.message}`)
1349
+ );
1350
+ }
1351
+ }
1352
+ return entries;
1353
+ }
1354
+ async function runCreatePromptAction(options) {
1355
+ try {
1356
+ const CreateOptionsSchema = z.object({
1357
+ name: PromptNameSchema,
1358
+ description: z.string().min(1).max(500),
1359
+ category: z.enum(["system", "strategy", "domain", "workflow", "custom"]),
1360
+ file: ExistingFilePathSchema.optional(),
1361
+ text: PromptContentSchema.optional(),
1362
+ variant: z.enum(BUILT_IN_VARIANT_STRATEGIES).optional(),
1363
+ tags: z.string().optional(),
1364
+ author: z.string().min(1).max(100).optional()
1365
+ });
1366
+ const validatedOptions = validateCommandOptions(CreateOptionsSchema, options);
1367
+ let content = validatedOptions.text;
1368
+ if (validatedOptions.file) {
1369
+ content = fs.readFileSync(validatedOptions.file, "utf8");
1370
+ }
1371
+ if (!content) {
1372
+ console.error(chalk.red("Error: Must provide either --file or --text flag"));
1373
+ console.error(
1374
+ chalk.yellow(
1375
+ 'Tip: Use --file <path> to read from a file, or --text "content" to provide content directly'
1376
+ )
1377
+ );
1378
+ process.exit(1);
1379
+ }
1380
+ const id = validatedOptions.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
1381
+ const { prompt, version } = await getManager().create({
1382
+ id,
1383
+ name: validatedOptions.name,
1384
+ description: validatedOptions.description,
1385
+ category: validatedOptions.category,
1386
+ initialContent: content,
1387
+ variant: validatedOptions.variant,
1388
+ tags: validatedOptions.tags ? validatedOptions.tags.split(",").map((t) => t.trim()) : [],
1389
+ author: validatedOptions.author
1390
+ });
1391
+ console.log(chalk.green(`OK Created prompt: ${prompt.name}`));
1392
+ console.log(chalk.gray(` ID: ${prompt.id}`));
1393
+ console.log(chalk.gray(` Version: ${version?.id || "unknown"}`));
1394
+ console.log(chalk.gray(` Category: ${prompt.category}`));
1395
+ } catch (error) {
1396
+ console.error(chalk.red(`Error: ${error.message}`));
1397
+ process.exit(1);
1398
+ }
1399
+ }
1400
+ async function runEditPromptAction(idOrName, options) {
1401
+ try {
1402
+ const EditOptionsSchema = z.object({
1403
+ file: ExistingFilePathSchema.optional(),
1404
+ text: PromptContentSchema.optional(),
1405
+ changelog: z.string().max(500).optional(),
1406
+ author: z.string().min(1).max(100).optional(),
1407
+ activate: BooleanFlagSchema.optional()
1408
+ });
1409
+ const validatedOptions = validateCommandOptions(EditOptionsSchema, options);
1410
+ let content = validatedOptions.text;
1411
+ if (validatedOptions.file) {
1412
+ content = fs.readFileSync(validatedOptions.file, "utf8");
1413
+ }
1414
+ if (!content) {
1415
+ console.error(chalk.red("Error: Must provide either --file or --text flag"));
1416
+ console.error(
1417
+ chalk.yellow(
1418
+ 'Tip: Use --file <path> to read from a file, or --text "content" to provide content directly'
1419
+ )
1420
+ );
1421
+ process.exit(1);
1422
+ }
1423
+ const resolved = resolvePromptIdOrName(idOrName);
1424
+ if (!resolved) {
1425
+ console.error(chalk.red(`Error: Prompt not found: ${idOrName}`));
1426
+ process.exit(1);
1427
+ }
1428
+ const version = await getManager().createVersion({
1429
+ promptId: resolved.id,
1430
+ content,
1431
+ changelog: validatedOptions.changelog,
1432
+ author: validatedOptions.author,
1433
+ activate: validatedOptions.activate
1434
+ });
1435
+ console.log(chalk.green(`OK Created new version: ${version.id}`));
1436
+ if (validatedOptions.activate) {
1437
+ console.log(chalk.green(" Activated as current version"));
1438
+ }
1439
+ } catch (error) {
1440
+ console.error(chalk.red(`Error: ${error.message}`));
1441
+ process.exit(1);
1442
+ }
1443
+ }
1444
+ async function runArchivePromptAction(idOrName) {
1445
+ try {
1446
+ const resolved = resolvePromptIdOrName(idOrName);
1447
+ if (!resolved) {
1448
+ console.error(chalk.red(`Error: Prompt not found: ${idOrName}`));
1449
+ process.exit(1);
1450
+ }
1451
+ const updated = await getManager().archive(resolved.id);
1452
+ console.log(chalk.green(`OK Archived prompt: ${updated.name}`));
1453
+ } catch (error) {
1454
+ console.error(chalk.red(`Error: ${error.message}`));
1455
+ process.exit(1);
1456
+ }
1457
+ }
1458
+ async function runRestorePromptAction(idOrName) {
1459
+ try {
1460
+ const resolved = resolvePromptIdOrName(idOrName);
1461
+ if (!resolved) {
1462
+ console.error(chalk.red(`Error: Prompt not found: ${idOrName}`));
1463
+ process.exit(1);
1464
+ }
1465
+ const updated = await getManager().restore(resolved.id);
1466
+ console.log(chalk.green(`OK Restored prompt: ${updated.name}`));
1467
+ } catch (error) {
1468
+ console.error(chalk.red(`Error: ${error.message}`));
1469
+ process.exit(1);
1470
+ }
1471
+ }
1472
+ async function runEvaluatePromptAction(idOrName, options) {
1473
+ try {
1474
+ if (idOrName) {
1475
+ const resolved = resolvePromptIdOrName(idOrName);
1476
+ if (!resolved) {
1477
+ console.error(chalk.red(`Prompt not found: ${idOrName}`));
1478
+ process.exit(1);
1479
+ }
1480
+ const version = getManager().getActiveVersion(resolved.id);
1481
+ if (!version) {
1482
+ console.error(chalk.red("No active version found"));
1483
+ process.exit(1);
1484
+ }
1485
+ const result = await getEvaluator().evaluate(version.id, {}, resolved.variant);
1486
+ console.log(chalk.bold.cyan(`
1487
+ Performance: ${resolved.name}
1488
+ `));
1489
+ console.log(
1490
+ chalk.gray(
1491
+ `Success Rate: ${(result.performance.successRate * 100).toFixed(1)}% (${result.performance.successfulExecutions}/${result.performance.totalExecutions})`
1492
+ )
1493
+ );
1494
+ console.log(chalk.gray(`Avg Completeness: ${result.performance.avgCompleteness.toFixed(1)}`));
1495
+ console.log(chalk.gray(`Avg Duration: ${result.performance.avgDuration.toFixed(1)}s`));
1496
+ console.log(chalk.gray(`Sample Size: ${result.performance.sampleSize}`));
1497
+ console.log(chalk.gray(`
1498
+ Recommendation: ${result.recommendation}`));
1499
+ console.log(chalk.gray(`Rationale: ${result.rationale}`));
1500
+ return;
1501
+ }
1502
+ if (options.all) {
1503
+ console.log(chalk.cyan("Evaluating all prompts...\n"));
1504
+ const promptList = getManager().list({ status: "active" });
1505
+ let evaluated = 0;
1506
+ for (const p of promptList) {
1507
+ const version = getManager().getActiveVersion(p.id);
1508
+ if (!version) continue;
1509
+ try {
1510
+ const result = await getEvaluator().evaluate(version.id, {}, p.variant);
1511
+ console.log(chalk.bold(p.name) + chalk.gray(` (${version.id})`));
1512
+ console.log(
1513
+ chalk.gray(
1514
+ ` Success: ${(result.performance.successRate * 100).toFixed(1)}% | Completeness: ${result.performance.avgCompleteness.toFixed(1)} | Recommendation: ${result.recommendation}`
1515
+ )
1516
+ );
1517
+ evaluated++;
1518
+ } catch (error) {
1519
+ console.log(
1520
+ chalk.yellow(` Warning: Could not evaluate ${p.name}: ${error.message}`)
1521
+ );
1522
+ }
1523
+ }
1524
+ console.log(chalk.green(`
1525
+ OK Evaluated ${evaluated} prompts`));
1526
+ return;
1527
+ }
1528
+ console.error(chalk.red("Error: Must provide --id or --all flag"));
1529
+ console.error(
1530
+ chalk.yellow(
1531
+ "Tip: Use --id <prompt-id> to evaluate a specific prompt, or --all to evaluate all prompts"
1532
+ )
1533
+ );
1534
+ process.exit(1);
1535
+ } catch (error) {
1536
+ console.error(chalk.red(`Error: ${error.message}`));
1537
+ process.exit(1);
1538
+ }
1539
+ }
1540
+ function resolvePromptIdOrName(idOrName) {
1541
+ const direct = getManager().get(idOrName);
1542
+ if (direct) return direct;
1543
+ return getManager().list().find((p) => p.name === idOrName) ?? null;
1544
+ }
1545
+ function getUnderperformanceIssues(entry) {
1546
+ const issues = [];
1547
+ const performance = entry.analysis.performance;
1548
+ if (performance.sampleSize < 5) {
1549
+ issues.push(`Insufficient data (sample size ${performance.sampleSize}/5)`);
1550
+ }
1551
+ if (performance.successRate < 0.7) {
1552
+ issues.push(`Success rate ${(performance.successRate * 100).toFixed(1)}% below 70% target`);
1553
+ }
1554
+ if (performance.avgCompleteness < 70) {
1555
+ issues.push(`Completeness ${performance.avgCompleteness.toFixed(1)} below 70 target`);
1556
+ }
1557
+ if (performance.avgDuration > 300) {
1558
+ issues.push(`Average duration ${performance.avgDuration.toFixed(0)}s exceeds 300s budget`);
1559
+ }
1560
+ if (entry.analysis.overallScore < 70) {
1561
+ issues.push(`Overall score ${entry.analysis.overallScore.toFixed(1)} below 70`);
1562
+ }
1563
+ return issues;
1564
+ }
1565
+ function formatPerformanceSummary(analysis) {
1566
+ const performance = analysis.performance;
1567
+ return `Success ${(performance.successRate * 100).toFixed(1)}% | Completeness ${performance.avgCompleteness.toFixed(1)} | Duration ${performance.avgDuration.toFixed(1)}s | Sample ${performance.sampleSize}`;
1568
+ }
1569
+ function createPromptsCommand() {
1570
+ const prompts = new Command("prompts").description(
1571
+ 'Manage prompts, versions, and optimization\n\nExamples:\n poetic prompts list\n poetic prompts create --name "My Prompt" --description "..." --category system\n poetic prompts analyze-suggestions --id prompt-123'
1572
+ ).alias("p");
1573
+ prompts.command("list").alias("ls").description(
1574
+ "List all prompts\n\nExamples:\n poetic prompts list\n poetic prompts list --category system --status active\n poetic prompts list --limit 100"
1575
+ ).option(
1576
+ "-c, --category <category>",
1577
+ "(OPTIONAL) Filter by category\n Example: --category system"
1578
+ ).option(
1579
+ "-s, --status <status>",
1580
+ "(OPTIONAL) Filter by status (active|archived|template)\n Example: --status active",
1581
+ "active"
1582
+ ).option(
1583
+ "-v, --variant <variant>",
1584
+ "(OPTIONAL) Filter by variant\n Example: --variant conservative"
1585
+ ).option("--limit <number>", "(OPTIONAL) Limit results\n Example: --limit 100", "50").action(async (options) => {
1586
+ try {
1587
+ const ListOptionsSchema = z.object({
1588
+ category: PromptCategorySchema.optional(),
1589
+ status: z.enum(["active", "archived", "template"]).default("active"),
1590
+ variant: z.string().optional(),
1591
+ limit: z.coerce.number().int().positive().max(1e3).default(50)
1592
+ });
1593
+ const validatedOptions = validateCommandOptions(ListOptionsSchema, options);
1594
+ const prompts2 = getManager().list({
1595
+ category: validatedOptions.category,
1596
+ status: validatedOptions.status,
1597
+ variant: validatedOptions.variant,
1598
+ limit: validatedOptions.limit
1599
+ });
1600
+ if (prompts2.length === 0) {
1601
+ console.log(chalk.yellow("No prompts found"));
1602
+ return;
1603
+ }
1604
+ console.log(chalk.bold.cyan(`
1605
+ Prompts (${prompts2.length})
1606
+ `));
1607
+ for (const prompt of prompts2) {
1608
+ const statusIcon = prompt.status === "active" ? "OK" : "";
1609
+ console.log(chalk.bold(`${statusIcon} ${prompt.name}`) + chalk.gray(` (${prompt.id})`));
1610
+ console.log(chalk.gray(` ${prompt.description}`));
1611
+ console.log(
1612
+ chalk.gray(
1613
+ ` Category: ${prompt.category} | Status: ${prompt.status} | Version: ${prompt.currentVersion}`
1614
+ )
1615
+ );
1616
+ if (prompt.variant) {
1617
+ console.log(chalk.gray(` Variant: ${prompt.variant}`));
1618
+ }
1619
+ if (prompt.tags.length > 0) {
1620
+ console.log(chalk.gray(` Tags: ${prompt.tags.join(", ")}`));
1621
+ }
1622
+ console.log(chalk.gray(` Used: ${prompt.usageCount} times`));
1623
+ console.log("");
1624
+ }
1625
+ } catch (error) {
1626
+ console.error(chalk.red(`Error: ${error.message}`));
1627
+ process.exit(1);
1628
+ }
1629
+ });
1630
+ prompts.command("create").description(
1631
+ 'Create a new prompt\n\nExamples:\n poetic prompts create --name "My Prompt" --description "..." --category system --text "Prompt content"\n poetic prompts create --name "My Prompt" --description "..." --category system --file prompt.txt'
1632
+ ).requiredOption("-n, --name <name>", '(REQUIRED) Prompt name\n Example: --name "My Prompt"').requiredOption(
1633
+ "-d, --description <description>",
1634
+ '(REQUIRED) Prompt description\n Example: --description "Description text"'
1635
+ ).requiredOption(
1636
+ "-c, --category <category>",
1637
+ "(REQUIRED) Category (system|strategy|domain|workflow|custom)\n Example: --category system"
1638
+ ).option(
1639
+ "-f, --file <file>",
1640
+ "(OPTIONAL) Read prompt content from file\n Example: --file prompt.txt"
1641
+ ).option(
1642
+ "-t, --text <text>",
1643
+ '(OPTIONAL) Prompt content as text\n Example: --text "Prompt content here"'
1644
+ ).option(
1645
+ "-v, --variant <variant>",
1646
+ "(OPTIONAL) Variant strategy (conservative|innovative|hybrid|fast)\n Example: --variant conservative"
1647
+ ).option("--tags <tags>", "(OPTIONAL) Comma-separated tags\n Example: --tags auth,security").option("-a, --author <author>", '(OPTIONAL) Author name\n Example: --author "John Doe"').action(async (options) => {
1648
+ try {
1649
+ const CreateOptionsSchema = z.object({
1650
+ name: PromptNameSchema,
1651
+ description: z.string().min(1).max(500),
1652
+ category: z.enum(["system", "strategy", "domain", "workflow", "custom"]),
1653
+ file: ExistingFilePathSchema.optional(),
1654
+ text: PromptContentSchema.optional(),
1655
+ variant: z.enum(BUILT_IN_VARIANT_STRATEGIES).optional(),
1656
+ tags: z.string().optional(),
1657
+ author: z.string().min(1).max(100).optional()
1658
+ });
1659
+ const validatedOptions = validateCommandOptions(CreateOptionsSchema, options);
1660
+ let content = validatedOptions.text;
1661
+ if (validatedOptions.file) {
1662
+ content = fs.readFileSync(validatedOptions.file, "utf8");
1663
+ }
1664
+ if (!content) {
1665
+ console.error(chalk.red("Error: Must provide either --file or --text flag"));
1666
+ console.error(
1667
+ chalk.yellow(
1668
+ 'Tip: Use --file <path> to read from a file, or --text "content" to provide content directly'
1669
+ )
1670
+ );
1671
+ process.exit(1);
1672
+ }
1673
+ const id = validatedOptions.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
1674
+ const { prompt, version } = await getManager().create({
1675
+ id,
1676
+ name: validatedOptions.name,
1677
+ description: validatedOptions.description,
1678
+ category: validatedOptions.category,
1679
+ initialContent: content,
1680
+ variant: validatedOptions.variant,
1681
+ tags: validatedOptions.tags ? validatedOptions.tags.split(",").map((t) => t.trim()) : [],
1682
+ author: validatedOptions.author
1683
+ });
1684
+ console.log(chalk.green(`OK Created prompt: ${prompt.name}`));
1685
+ console.log(chalk.gray(` ID: ${prompt.id}`));
1686
+ console.log(chalk.gray(` Version: ${version?.id || "unknown"}`));
1687
+ console.log(chalk.gray(` Category: ${prompt.category}`));
1688
+ } catch (error) {
1689
+ console.error(chalk.red(`Error: ${error.message}`));
1690
+ process.exit(1);
1691
+ }
1692
+ });
1693
+ prompts.command("show <id>").description(
1694
+ "Show prompt details and content\n\nExamples:\n poetic prompts show prompt-123\n poetic prompts show prompt-123 --version version-456 --metrics"
1695
+ ).option(
1696
+ "-v, --version <version>",
1697
+ "(OPTIONAL) Show specific version\n Example: --version version-456"
1698
+ ).option("--metrics", "(OPTIONAL) Show performance metrics").action(async (id, options) => {
1699
+ try {
1700
+ const validatedId = validateCommandOptions(PromptIdSchema, id);
1701
+ const ShowOptionsSchema = z.object({
1702
+ version: z.string().optional(),
1703
+ metrics: BooleanFlagSchema.optional()
1704
+ });
1705
+ const validatedOptions = validateCommandOptions(ShowOptionsSchema, options);
1706
+ const prompt = getManager().get(validatedId);
1707
+ if (!prompt) {
1708
+ console.error(chalk.red(`Prompt not found: ${id}`));
1709
+ process.exit(1);
1710
+ }
1711
+ const version = validatedOptions.version ? getManager().getVersion(validatedOptions.version) : getManager().getActiveVersion(validatedId);
1712
+ if (!version) {
1713
+ console.error(chalk.red("Version not found"));
1714
+ process.exit(1);
1715
+ }
1716
+ console.log(chalk.bold.cyan(`
1717
+ ${prompt.name}
1718
+ `));
1719
+ console.log(chalk.gray(`ID: ${prompt.id}`));
1720
+ console.log(chalk.gray(`Description: ${prompt.description}`));
1721
+ console.log(chalk.gray(`Category: ${prompt.category}`));
1722
+ console.log(chalk.gray(`Status: ${prompt.status}`));
1723
+ if (prompt.variant) {
1724
+ console.log(chalk.gray(`Variant: ${prompt.variant}`));
1725
+ }
1726
+ if (prompt.tags.length > 0) {
1727
+ console.log(chalk.gray(`Tags: ${prompt.tags.join(", ")}`));
1728
+ }
1729
+ console.log(chalk.gray(`Current Version: ${prompt.currentVersion}`));
1730
+ console.log(chalk.gray(`Usage Count: ${prompt.usageCount}`));
1731
+ console.log("");
1732
+ console.log(chalk.bold("Content:"));
1733
+ console.log(chalk.white(version.content));
1734
+ console.log("");
1735
+ if (options.metrics) {
1736
+ const result = await getEvaluator().evaluate(version.id, {}, prompt.variant);
1737
+ if (result.performance.sampleSize > 0) {
1738
+ console.log(chalk.bold.cyan("Performance Metrics:\n"));
1739
+ console.log(
1740
+ chalk.gray(
1741
+ `Success Rate: ${(result.performance.successRate * 100).toFixed(1)}% (${result.performance.successfulExecutions}/${result.performance.totalExecutions})`
1742
+ )
1743
+ );
1744
+ console.log(
1745
+ chalk.gray(`Avg Completeness: ${result.performance.avgCompleteness.toFixed(1)}`)
1746
+ );
1747
+ console.log(chalk.gray(`Avg Duration: ${result.performance.avgDuration.toFixed(1)}s`));
1748
+ console.log(chalk.gray(`Sample Size: ${result.performance.sampleSize}`));
1749
+ console.log(chalk.gray(`
1750
+ Recommendation: ${result.recommendation}`));
1751
+ console.log(chalk.gray(`Rationale: ${result.rationale}`));
1752
+ } else {
1753
+ console.log(chalk.yellow("No performance data available"));
1754
+ }
1755
+ }
1756
+ } catch (error) {
1757
+ console.error(chalk.red(`Error: ${error.message}`));
1758
+ process.exit(1);
1759
+ }
1760
+ });
1761
+ prompts.command("edit <id>").description(
1762
+ 'Create a new version of a prompt\n\nExamples:\n poetic prompts edit prompt-123 --text "New content"\n poetic prompts edit prompt-123 --file new-content.txt --activate'
1763
+ ).option(
1764
+ "-f, --file <file>",
1765
+ "(OPTIONAL) Read new content from file\n Example: --file new-content.txt"
1766
+ ).option(
1767
+ "-t, --text <text>",
1768
+ '(OPTIONAL) New content as text\n Example: --text "New content here"'
1769
+ ).option(
1770
+ "--changelog <changelog>",
1771
+ '(OPTIONAL) Changelog message\n Example: --changelog "Improved clarity"'
1772
+ ).option("-a, --author <author>", '(OPTIONAL) Author name\n Example: --author "John Doe"').option("--activate", "(OPTIONAL) Activate this version immediately").action(async (id, options) => {
1773
+ try {
1774
+ const validatedId = validateCommandOptions(PromptIdSchema, id);
1775
+ const EditOptionsSchema = z.object({
1776
+ file: ExistingFilePathSchema.optional(),
1777
+ text: PromptContentSchema.optional(),
1778
+ changelog: z.string().max(500).optional(),
1779
+ author: z.string().min(1).max(100).optional(),
1780
+ activate: BooleanFlagSchema.optional()
1781
+ });
1782
+ const validatedOptions = validateCommandOptions(EditOptionsSchema, options);
1783
+ let content = validatedOptions.text;
1784
+ if (validatedOptions.file) {
1785
+ content = fs.readFileSync(validatedOptions.file, "utf8");
1786
+ }
1787
+ if (!content) {
1788
+ console.error(chalk.red("Error: Must provide either --file or --text flag"));
1789
+ console.error(
1790
+ chalk.yellow(
1791
+ 'Tip: Use --file <path> to read from a file, or --text "content" to provide content directly'
1792
+ )
1793
+ );
1794
+ process.exit(1);
1795
+ }
1796
+ const version = await getManager().createVersion({
1797
+ promptId: validatedId,
1798
+ content,
1799
+ changelog: validatedOptions.changelog,
1800
+ author: validatedOptions.author,
1801
+ activate: validatedOptions.activate
1802
+ });
1803
+ console.log(chalk.green(`OK Created new version: ${version.id}`));
1804
+ if (validatedOptions.activate) {
1805
+ console.log(chalk.green(" Activated as current version"));
1806
+ }
1807
+ } catch (error) {
1808
+ console.error(chalk.red(`Error: ${error.message}`));
1809
+ process.exit(1);
1810
+ }
1811
+ });
1812
+ prompts.command("archive <id>").description("Archive a prompt\n\nExamples:\n poetic prompts archive prompt-123").action(async (id) => {
1813
+ try {
1814
+ const validatedId = validateCommandOptions(PromptIdSchema, id);
1815
+ const updated = await getManager().archive(validatedId);
1816
+ console.log(chalk.green(`OK Archived prompt: ${updated.name}`));
1817
+ } catch (error) {
1818
+ console.error(chalk.red(`Error: ${error.message}`));
1819
+ process.exit(1);
1820
+ }
1821
+ });
1822
+ prompts.command("restore <id>").description("Restore an archived prompt\n\nExamples:\n poetic prompts restore prompt-123").action(async (id) => {
1823
+ try {
1824
+ const validatedId = validateCommandOptions(PromptIdSchema, id);
1825
+ const updated = await getManager().restore(validatedId);
1826
+ console.log(chalk.green(`OK Restored prompt: ${updated.name}`));
1827
+ } catch (error) {
1828
+ console.error(chalk.red(`Error: ${error.message}`));
1829
+ process.exit(1);
1830
+ }
1831
+ });
1832
+ prompts.command("evaluate").alias("eval").description(
1833
+ "Evaluate prompt performance from telemetry\n\nExamples:\n poetic prompts evaluate --id prompt-123\n poetic prompts evaluate --all"
1834
+ ).option("-i, --id <id>", "(OPTIONAL) Evaluate specific prompt\n Example: --id prompt-123").option("--all", "(OPTIONAL) Evaluate all prompts").action(async (options) => {
1835
+ try {
1836
+ if (options.id) {
1837
+ const prompt = getManager().get(options.id);
1838
+ if (!prompt) {
1839
+ console.error(chalk.red(`Prompt not found: ${options.id}`));
1840
+ process.exit(1);
1841
+ }
1842
+ const version = getManager().getActiveVersion(options.id);
1843
+ if (!version) {
1844
+ console.error(chalk.red("No active version found"));
1845
+ process.exit(1);
1846
+ }
1847
+ const result = await getEvaluator().evaluate(version.id, {}, prompt.variant);
1848
+ console.log(chalk.bold.cyan(`
1849
+ Performance: ${prompt.name}
1850
+ `));
1851
+ console.log(
1852
+ chalk.gray(
1853
+ `Success Rate: ${(result.performance.successRate * 100).toFixed(1)}% (${result.performance.successfulExecutions}/${result.performance.totalExecutions})`
1854
+ )
1855
+ );
1856
+ console.log(
1857
+ chalk.gray(`Avg Completeness: ${result.performance.avgCompleteness.toFixed(1)}`)
1858
+ );
1859
+ console.log(chalk.gray(`Avg Duration: ${result.performance.avgDuration.toFixed(1)}s`));
1860
+ console.log(chalk.gray(`Sample Size: ${result.performance.sampleSize}`));
1861
+ console.log(chalk.gray(`
1862
+ Recommendation: ${result.recommendation}`));
1863
+ console.log(chalk.gray(`Rationale: ${result.rationale}`));
1864
+ } else if (options.all) {
1865
+ console.log(chalk.cyan("Evaluating all prompts...\n"));
1866
+ const prompts2 = getManager().list({ status: "active" });
1867
+ let evaluated = 0;
1868
+ for (const prompt of prompts2) {
1869
+ const version = getManager().getActiveVersion(prompt.id);
1870
+ if (version) {
1871
+ try {
1872
+ const result = await getEvaluator().evaluate(version.id, {}, prompt.variant);
1873
+ console.log(chalk.bold(prompt.name) + chalk.gray(` (${version.id})`));
1874
+ console.log(
1875
+ chalk.gray(
1876
+ ` Success: ${(result.performance.successRate * 100).toFixed(1)}% | Completeness: ${result.performance.avgCompleteness.toFixed(1)} | Recommendation: ${result.recommendation}`
1877
+ )
1878
+ );
1879
+ evaluated++;
1880
+ } catch (error) {
1881
+ console.log(
1882
+ chalk.yellow(
1883
+ ` Warning: Could not evaluate ${prompt.name}: ${error.message}`
1884
+ )
1885
+ );
1886
+ }
1887
+ }
1888
+ }
1889
+ console.log(chalk.green(`
1890
+ OK Evaluated ${evaluated} prompts`));
1891
+ } else {
1892
+ console.error(chalk.red("Error: Must provide --id or --all flag"));
1893
+ console.error(
1894
+ chalk.yellow(
1895
+ "Tip: Use --id <prompt-id> to evaluate a specific prompt, or --all to evaluate all prompts"
1896
+ )
1897
+ );
1898
+ process.exit(1);
1899
+ }
1900
+ } catch (error) {
1901
+ console.error(chalk.red(`Error: ${error.message}`));
1902
+ process.exit(1);
1903
+ }
1904
+ });
1905
+ const analyzeSuggestionsAction = async (options) => {
1906
+ try {
1907
+ const topN = parseInt(options.top ?? "10", 10);
1908
+ if (Number.isNaN(topN) || topN <= 0) {
1909
+ console.error(chalk.red("Error: --top flag must be a positive integer"));
1910
+ console.error(chalk.yellow("Tip: Use --top 5 to show the top 5 performers"));
1911
+ process.exit(1);
1912
+ }
1913
+ if (options.id) {
1914
+ if (options.all || options.underperforming) {
1915
+ console.error(
1916
+ chalk.red("Error: --id flag cannot be combined with --all or --underperforming flags")
1917
+ );
1918
+ console.error(
1919
+ chalk.yellow("Tip: Use --id alone, or use --all/--underperforming without --id")
1920
+ );
1921
+ process.exit(1);
1922
+ }
1923
+ const entry = await analyzeSinglePrompt(options.id, options.version);
1924
+ console.log(
1925
+ chalk.bold.cyan(`
1926
+ Optimization Analysis: ${entry.prompt.name} (${entry.version.id})
1927
+ `)
1928
+ );
1929
+ console.log(chalk.gray(`Performance: ${formatPerformanceSummary(entry.analysis)}`));
1930
+ console.log(chalk.gray(`Overall Score: ${entry.analysis.overallScore.toFixed(1)}`));
1931
+ console.log("");
1932
+ if (entry.analysis.suggestions.length === 0) {
1933
+ console.log(chalk.green("No optimization suggestions - prompt looks good!"));
1934
+ return;
1935
+ }
1936
+ for (const suggestion of entry.analysis.suggestions) {
1937
+ const priorityColor = suggestion.priority === "critical" || suggestion.priority === "high" ? chalk.red : suggestion.priority === "medium" ? chalk.yellow : chalk.gray;
1938
+ console.log(
1939
+ priorityColor(`[${suggestion.priority.toUpperCase()}] ${suggestion.description}`)
1940
+ );
1941
+ console.log(chalk.gray(` Rationale: ${suggestion.rationale}`));
1942
+ console.log(chalk.gray(` Expected: ${suggestion.expectedImprovement}`));
1943
+ console.log(chalk.gray(` Effort: ${suggestion.estimatedEffort}`));
1944
+ console.log("");
1945
+ }
1946
+ return;
1947
+ }
1948
+ const analyses = await collectActiveAnalyses();
1949
+ if (options.all) {
1950
+ if (analyses.length === 0) {
1951
+ console.log(chalk.yellow("No active prompts available for analysis."));
1952
+ return;
1953
+ }
1954
+ console.log(chalk.bold.cyan("\nOptimization Report\n"));
1955
+ for (const entry of analyses) {
1956
+ const highPriority = entry.analysis.suggestions.filter(
1957
+ (s) => s.priority === "critical" || s.priority === "high"
1958
+ );
1959
+ console.log(
1960
+ chalk.bold(entry.prompt.name) + chalk.gray(` (${entry.prompt.id}) - ${entry.version.id}`)
1961
+ );
1962
+ console.log(chalk.gray(` ${formatPerformanceSummary(entry.analysis)}`));
1963
+ console.log(chalk.gray(` Suggestions: ${entry.analysis.suggestions.length}`));
1964
+ if (highPriority.length > 0) {
1965
+ console.log(chalk.red(` Warning: ${highPriority.length} high-priority issues`));
1966
+ }
1967
+ console.log("");
1968
+ }
1969
+ console.log(chalk.green(`OK Analyzed ${analyses.length} prompts`));
1970
+ return;
1971
+ }
1972
+ if (options.underperforming) {
1973
+ if (analyses.length === 0) {
1974
+ console.log(chalk.yellow("No active prompts available for analysis."));
1975
+ return;
1976
+ }
1977
+ const underperforming = analyses.map((entry) => ({
1978
+ entry,
1979
+ issues: getUnderperformanceIssues(entry)
1980
+ })).filter((item) => item.issues.length > 0);
1981
+ if (underperforming.length === 0) {
1982
+ console.log(chalk.green("No underperforming prompts detected."));
1983
+ return;
1984
+ }
1985
+ console.log(chalk.bold.cyan("\nWarning: Underperforming Prompts\n"));
1986
+ for (const { entry, issues } of underperforming) {
1987
+ console.log(
1988
+ chalk.bold(entry.prompt.name) + chalk.gray(` (${entry.prompt.id}) - ${entry.version.id}`)
1989
+ );
1990
+ console.log(chalk.gray(` ${formatPerformanceSummary(entry.analysis)}`));
1991
+ issues.forEach((issue) => {
1992
+ console.log(chalk.yellow(` - ${issue}`));
1993
+ });
1994
+ console.log("");
1995
+ }
1996
+ console.log(chalk.yellow(`Found ${underperforming.length} prompts needing attention`));
1997
+ return;
1998
+ }
1999
+ if (analyses.length === 0) {
2000
+ console.log(chalk.yellow("No active prompts available for analysis."));
2001
+ return;
2002
+ }
2003
+ const eligible = analyses.filter((entry) => entry.analysis.performance.sampleSize >= 5);
2004
+ if (eligible.length === 0) {
2005
+ console.log(
2006
+ chalk.yellow("No prompts have sufficient data (sample size >= 5) for ranking.")
2007
+ );
2008
+ return;
2009
+ }
2010
+ eligible.sort((a, b) => b.analysis.overallScore - a.analysis.overallScore);
2011
+ const topPerformers = eligible.slice(0, topN);
2012
+ console.log(chalk.bold.cyan(`
2013
+ Top ${topPerformers.length} Performing Prompts
2014
+ `));
2015
+ topPerformers.forEach((entry, index) => {
2016
+ console.log(
2017
+ chalk.bold(`${index + 1}. ${entry.prompt.name}`) + chalk.gray(
2018
+ ` (${entry.prompt.id}) - ${entry.version.id} | Score ${entry.analysis.overallScore.toFixed(1)}`
2019
+ )
2020
+ );
2021
+ console.log(chalk.gray(` ${formatPerformanceSummary(entry.analysis)}`));
2022
+ });
2023
+ } catch (error) {
2024
+ console.error(chalk.red(`Error: ${error.message}`));
2025
+ process.exit(1);
2026
+ }
2027
+ };
2028
+ const attachAnalyzeSuggestionsOptions = (cmd) => cmd.option("-i, --id <id>", "(OPTIONAL) Analyze specific prompt\n Example: --id prompt-123").option(
2029
+ "--version <version>",
2030
+ "(OPTIONAL) Analyze specific prompt version (defaults to active)\n Example: --version version-456"
2031
+ ).option("--all", "(OPTIONAL) Analyze all prompts").option("--underperforming", "(OPTIONAL) Find underperforming prompts").option("--top <n>", "(OPTIONAL) Show top N performers\n Example: --top 5", "10");
2032
+ attachAnalyzeSuggestionsOptions(
2033
+ prompts.command("analyze-suggestions").description(
2034
+ "Analyze active prompts and emit heuristic suggestions (no provider calls)\n\nExamples:\n poetic prompts analyze-suggestions --id prompt-123\n poetic prompts analyze-suggestions --all\n poetic prompts analyze-suggestions --underperforming --top 5"
2035
+ )
2036
+ ).action(analyzeSuggestionsAction);
2037
+ prompts.command("auto-optimize").description(
2038
+ "Run automatic prompt optimization using telemetry insights\n\nExamples:\n poetic prompts auto-optimize --id prompt-123\n poetic prompts auto-optimize --all --auto-activate\n poetic prompts auto-optimize --id prompt-123 --dry-run"
2039
+ ).option("-i, --id <id>", "(OPTIONAL) Optimize a specific prompt\n Example: --id prompt-123").option("--all", "(OPTIONAL) Optimize all prompts that need attention").option(
2040
+ "--min-sample-size <n>",
2041
+ "(OPTIONAL) Minimum executions before considering optimization\n Example: --min-sample-size 20",
2042
+ "10"
2043
+ ).option(
2044
+ "--improvement-threshold <percent>",
2045
+ "(OPTIONAL) Minimum improvement percentage required for activation\n Example: --improvement-threshold 10",
2046
+ "5"
2047
+ ).option(
2048
+ "--max-variants <n>",
2049
+ "(OPTIONAL) Maximum variants to generate per prompt\n Example: --max-variants 5",
2050
+ "3"
2051
+ ).option("--auto-activate", "(OPTIONAL) Automatically activate the best variant when safe").option("--enable-auto-tuning", "(OPTIONAL) Enable auto-tuning safety checks before activation").option("--dry-run", "(OPTIONAL) Analyze only without generating new versions").action(async (options) => {
2052
+ try {
2053
+ if (!options.id && !options.all) {
2054
+ console.error(chalk.red("Error: Provide --id or --all flag for auto-optimize"));
2055
+ console.error(
2056
+ chalk.yellow(
2057
+ "Tip: Use --id <prompt-id> to optimize a specific prompt, or --all to optimize all prompts"
2058
+ )
2059
+ );
2060
+ process.exit(1);
2061
+ }
2062
+ const minSampleSize = parseInt(options.minSampleSize, 10);
2063
+ const improvementThreshold = parseFloat(options.improvementThreshold);
2064
+ const maxVariants = parseInt(options.maxVariants, 10);
2065
+ if (Number.isNaN(minSampleSize) || minSampleSize <= 0) {
2066
+ console.error(chalk.red("Error: --min-sample-size flag must be a positive integer"));
2067
+ console.error(
2068
+ chalk.yellow("Tip: Use --min-sample-size 20 to require at least 20 executions")
2069
+ );
2070
+ process.exit(1);
2071
+ }
2072
+ if (Number.isNaN(improvementThreshold)) {
2073
+ console.error(chalk.red("Error: --improvement-threshold flag must be a number"));
2074
+ console.error(
2075
+ chalk.yellow("Tip: Use --improvement-threshold 10 to require 10% improvement")
2076
+ );
2077
+ process.exit(1);
2078
+ }
2079
+ if (Number.isNaN(maxVariants) || maxVariants <= 0) {
2080
+ console.error(chalk.red("Error: --max-variants flag must be a positive integer"));
2081
+ console.error(chalk.yellow("Tip: Use --max-variants 5 to generate up to 5 variants"));
2082
+ process.exit(1);
2083
+ }
2084
+ const autoOptimizer = createAutoOptimizer({
2085
+ minSampleSize,
2086
+ improvementThreshold,
2087
+ maxVariantsPerOptimization: maxVariants,
2088
+ autoActivateBestVariant: Boolean(options.autoActivate),
2089
+ enableAutoTuning: Boolean(options.enableAutoTuning),
2090
+ requireManualReview: !options.autoActivate
2091
+ });
2092
+ if (options.id) {
2093
+ if (options.all) {
2094
+ console.error(chalk.red("Error: --id and --all flags cannot be combined"));
2095
+ console.error(chalk.yellow("Tip: Use either --id <prompt-id> or --all, but not both"));
2096
+ process.exit(1);
2097
+ }
2098
+ if (options.dryRun) {
2099
+ const recommendation = await autoOptimizer.analyzePrompt(options.id);
2100
+ console.log(
2101
+ chalk.bold.cyan(
2102
+ `
2103
+ Auto-Optimizer Analysis: ${recommendation.promptId} (${recommendation.currentVersionId})
2104
+ `
2105
+ )
2106
+ );
2107
+ console.log(
2108
+ chalk.gray(
2109
+ `Action: ${recommendation.action.replace("_", " ")} | Confidence ${(recommendation.confidence * 100).toFixed(1)}%`
2110
+ )
2111
+ );
2112
+ console.log(chalk.gray(`Rationale: ${recommendation.rationale}`));
2113
+ console.log(
2114
+ chalk.gray(
2115
+ `Performance: Success ${(recommendation.currentPerformance.successRate * 100).toFixed(1)}% | Completeness ${recommendation.currentPerformance.avgCompleteness.toFixed(1)} | Sample ${recommendation.currentPerformance.sampleSize}`
2116
+ )
2117
+ );
2118
+ if (recommendation.suggestions.length > 0) {
2119
+ console.log(chalk.bold("\nSuggestions:"));
2120
+ recommendation.suggestions.slice(0, 5).forEach((suggestion) => {
2121
+ console.log(
2122
+ `- [${suggestion.priority.toUpperCase()}] ${suggestion.description} (${suggestion.expectedImprovement})`
2123
+ );
2124
+ });
2125
+ }
2126
+ if (recommendation.proposedVariants.length > 0) {
2127
+ console.log(chalk.bold("\nSuggested Prompt Revisions:"));
2128
+ recommendation.proposedVariants.forEach((variant) => {
2129
+ console.log(
2130
+ `- ${variant.variantId}: ${variant.description} (${variant.expectedImprovement})`
2131
+ );
2132
+ });
2133
+ }
2134
+ return;
2135
+ }
2136
+ const result = await autoOptimizer.optimizePrompt(options.id);
2137
+ console.log(
2138
+ chalk.bold.cyan(`
2139
+ Auto-Optimizer Result: ${result.promptId} (${result.executedAt})
2140
+ `)
2141
+ );
2142
+ console.log(chalk.gray(`Success: ${result.success ? "yes" : "no"}`));
2143
+ console.log(
2144
+ chalk.gray(
2145
+ `Suggested prompt revisions: ${result.suggestedPromptRevisions.length} | Activated: ${result.variantsActivated}`
2146
+ )
2147
+ );
2148
+ if (result.improvements.length > 0) {
2149
+ console.log(chalk.green("\nImprovements:"));
2150
+ result.improvements.forEach((item) => {
2151
+ console.log(` \u2022 ${item}`);
2152
+ });
2153
+ }
2154
+ if (result.warnings.length > 0) {
2155
+ console.log(chalk.yellow("\nWarnings:"));
2156
+ result.warnings.forEach((item) => {
2157
+ console.log(` \u2022 ${item}`);
2158
+ });
2159
+ }
2160
+ if (result.errors.length > 0) {
2161
+ console.log(chalk.red("\nErrors:"));
2162
+ result.errors.forEach((item) => {
2163
+ console.log(` \u2022 ${item}`);
2164
+ });
2165
+ }
2166
+ return;
2167
+ }
2168
+ const promptsToProcess = getManager().list({ status: "active" });
2169
+ if (promptsToProcess.length === 0) {
2170
+ console.log(chalk.yellow("No active prompts available for optimization."));
2171
+ return;
2172
+ }
2173
+ if (options.dryRun) {
2174
+ console.log(chalk.bold.cyan("\nAuto-Optimizer Dry Run\n"));
2175
+ for (const prompt of promptsToProcess) {
2176
+ const recommendation = await autoOptimizer.analyzePrompt(prompt.id);
2177
+ console.log(
2178
+ chalk.bold(prompt.name) + chalk.gray(
2179
+ ` (${prompt.id}) \u2014 ${recommendation.currentVersionId} | Action: ${recommendation.action.replace("_", " ")}`
2180
+ )
2181
+ );
2182
+ console.log(chalk.gray(` Rationale: ${recommendation.rationale}`));
2183
+ console.log(
2184
+ chalk.gray(
2185
+ ` Performance: Success ${(recommendation.currentPerformance.successRate * 100).toFixed(1)}% | Completeness ${recommendation.currentPerformance.avgCompleteness.toFixed(1)} | Sample ${recommendation.currentPerformance.sampleSize}`
2186
+ )
2187
+ );
2188
+ }
2189
+ return;
2190
+ }
2191
+ const batchResult = await autoOptimizer.optimizeAllPrompts();
2192
+ console.log(chalk.bold.cyan("\nAuto-Optimizer Batch Report\n"));
2193
+ console.log(
2194
+ chalk.gray(
2195
+ `Analyzed ${batchResult.analyzed} prompt(s) | Optimized ${batchResult.optimized} prompt(s)`
2196
+ )
2197
+ );
2198
+ for (const result of batchResult.results) {
2199
+ console.log(
2200
+ chalk.bold(result.promptId) + chalk.gray(
2201
+ ` \u2014 Success: ${result.success ? "yes" : "no"} | Suggested prompt revisions: ${result.suggestedPromptRevisions.length} | Activated: ${result.variantsActivated}`
2202
+ )
2203
+ );
2204
+ if (result.improvements.length > 0) {
2205
+ result.improvements.forEach((item) => {
2206
+ console.log(chalk.green(` \u2022 ${item}`));
2207
+ });
2208
+ }
2209
+ if (result.warnings.length > 0) {
2210
+ result.warnings.forEach((item) => {
2211
+ console.log(chalk.yellow(` \u2022 ${item}`));
2212
+ });
2213
+ }
2214
+ if (result.errors.length > 0) {
2215
+ result.errors.forEach((item) => {
2216
+ console.log(chalk.red(` \u2022 ${item}`));
2217
+ });
2218
+ }
2219
+ }
2220
+ if (batchResult.errors.length > 0) {
2221
+ console.log(chalk.red("\nErrors:"));
2222
+ batchResult.errors.forEach((error) => {
2223
+ console.log(` \u2022 ${error.promptId}: ${error._error}`);
2224
+ });
2225
+ }
2226
+ } catch (error) {
2227
+ console.error(chalk.red(`Error: ${error.message}`));
2228
+ process.exit(1);
2229
+ }
2230
+ });
2231
+ const attachAuthorOptions = (cmd) => cmd.requiredOption(
2232
+ "-n, --name <name>",
2233
+ '(REQUIRED) Prompt name\n Example: --name "My Prompt"'
2234
+ ).requiredOption(
2235
+ "-g, --goal <goal>",
2236
+ '(REQUIRED) What should this prompt achieve?\n Example: --goal "Generate authentication code"'
2237
+ ).requiredOption(
2238
+ "-c, --category <category>",
2239
+ "(REQUIRED) Category (system|strategy|domain|workflow|custom)\n Example: --category system"
2240
+ ).option(
2241
+ "-d, --description <description>",
2242
+ '(OPTIONAL) Prompt description\n Example: --description "Description text"'
2243
+ ).option(
2244
+ "--context <context>",
2245
+ '(OPTIONAL) Additional context\n Example: --context "Additional context here"'
2246
+ ).option("--engine <engine>", "(OPTIONAL) AI engine to use\n Example: --engine claude").option("--model <model>", "(OPTIONAL) Model to use\n Example: --model auto").option(
2247
+ "-v, --variant <variant>",
2248
+ "(OPTIONAL) Variant strategy\n Example: --variant conservative"
2249
+ ).option(
2250
+ "--tags <tags>",
2251
+ "(OPTIONAL) Comma-separated tags\n Example: --tags auth,security"
2252
+ );
2253
+ attachAuthorOptions(
2254
+ prompts.command("author").description(
2255
+ 'Author a new prompt with AI (canonical authoring entry).\n\nExamples:\n poetic prompts author --name "My Prompt" --goal "..." --category system'
2256
+ )
2257
+ ).action(async (options) => {
2258
+ await runAuthorPromptAction(options);
2259
+ });
2260
+ return prompts;
2261
+ }
2262
+ async function runAuthorPromptAction(options) {
2263
+ try {
2264
+ const engineId = options.engine ?? resolveDefaultProvider(void 0, process.cwd()).value;
2265
+ const engine = registry.get(engineId);
2266
+ if (!engine) {
2267
+ console.error(chalk.red(`Engine not found: ${engineId}`));
2268
+ process.exit(1);
2269
+ }
2270
+ const generator = new PromptGenerator({});
2271
+ const request = {
2272
+ name: options.name,
2273
+ description: options.description || options.goal,
2274
+ category: options.category,
2275
+ goal: options.goal,
2276
+ context: options.context,
2277
+ variant: options.variant,
2278
+ tags: options.tags ? options.tags.split(",").map((t) => t.trim()) : [],
2279
+ model: options.model
2280
+ };
2281
+ console.log(chalk.cyan("Generating prompt with AI...\n"));
2282
+ const result = await generator.generate(request);
2283
+ if (!result.success) {
2284
+ console.error(chalk.red(`Generation failed: ${result.error}`));
2285
+ process.exit(1);
2286
+ }
2287
+ console.log(chalk.green(`OK Generated prompt: ${result.prompt?.name || "Unknown"}`));
2288
+ console.log(chalk.gray(` ID: ${result.prompt?.id || "Unknown"}`));
2289
+ console.log(chalk.gray(` Version: ${result.version?.id || "Unknown"}`));
2290
+ console.log(chalk.gray(` Confidence: ${(result.confidence * 100).toFixed(1)}%`));
2291
+ console.log("");
2292
+ console.log(chalk.bold("Review Checklist:"));
2293
+ result.suggestedReview.forEach((item) => {
2294
+ console.log(chalk.gray(` ${item}`));
2295
+ });
2296
+ console.log("");
2297
+ console.log(chalk.bold("Generated Content:"));
2298
+ console.log(chalk.white(result.version?.content || "No content generated"));
2299
+ } catch (error) {
2300
+ console.error(chalk.red(`Error: ${error.message}`));
2301
+ process.exit(1);
2302
+ }
2303
+ }
2304
+
2305
+ export {
2306
+ normalizeProviderForModelAvailability,
2307
+ getRegistryProviderForModelAvailability,
2308
+ DEFAULT_MODEL_AVAILABILITY,
2309
+ getProvidersWithRouteModelAvailability,
2310
+ hasProviderRouteModelAvailability,
2311
+ getModelsForTierByProvider,
2312
+ getModelFromFallback,
2313
+ runCreatePromptAction,
2314
+ runEditPromptAction,
2315
+ runArchivePromptAction,
2316
+ runRestorePromptAction,
2317
+ runEvaluatePromptAction,
2318
+ createPromptsCommand,
2319
+ runAuthorPromptAction
2320
+ };
2321
+ //# sourceMappingURL=chunk-4BOP7T6L.js.map