@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.
- package/.github/SECURITY.md +47 -0
- package/.nvmrc +1 -0
- package/.poetic/README.md +37 -0
- package/.poetic/providers/catalog.json +12051 -0
- package/.poetic/providers/pricing.json +1272 -0
- package/.poetic/providers/registry.json +3369 -0
- package/CHANGELOG.md +552 -0
- package/CODE_OF_CONDUCT.md +40 -0
- package/CONTRIBUTING.md +23 -0
- package/INSTALL.md +454 -0
- package/LICENSE +21 -0
- package/README.md +474 -0
- package/dist/BasicOptimizationCompetitionRunner-5H5TBYO4.js +153 -0
- package/dist/ExecutionTracker-UVONC4C6.js +16 -0
- package/dist/OptimizationConfig-7DFY2TST.js +17 -0
- package/dist/OptimizationEngine-JIMGP3LY.js +1597 -0
- package/dist/PromptStore-U6ZD3ZMQ.js +18 -0
- package/dist/actions-LUJPINLJ.js +322 -0
- package/dist/agent-ingest-3DJUJ7FU.js +53 -0
- package/dist/aggregator-DNCBINFO.js +12 -0
- package/dist/ai-judge-5QT5QJVU.js +156 -0
- package/dist/allowlist-grounding-RO6HKUFI.js +16 -0
- package/dist/allowlist-utils-23V7TJ3G.js +28 -0
- package/dist/anchored-turn-service-JULUCUIK.js +489 -0
- package/dist/api-transport-4TYTNLTJ.js +1087 -0
- package/dist/apply-completion-mode-AW2MOS3R.js +89 -0
- package/dist/artifact-migrator-23L45ISD.js +267 -0
- package/dist/ask-HWVV6QFR.js +135 -0
- package/dist/auth-5KEDKAPP.js +67 -0
- package/dist/auth-7TT3JINV.js +78 -0
- package/dist/auth-E6XUNZ5M.js +68 -0
- package/dist/auth-H3XDZE22.js +134 -0
- package/dist/auth-OC4E6633.js +71 -0
- package/dist/auth-S4CTX4GQ.js +44 -0
- package/dist/auth-YLH3S7EY.js +69 -0
- package/dist/auth-liveness-TDDEZY3T.js +46 -0
- package/dist/auto-optimizer-VPRWOWGU.js +80 -0
- package/dist/autoloop-cleanup-JOGKTLWA.js +109 -0
- package/dist/autoloop-evidence-gates-PCDALGVJ.js +38 -0
- package/dist/autoloop-gate-policy-Z7FVJVXV.js +175 -0
- package/dist/autoloop-helpers-2KTK43GL.js +22 -0
- package/dist/autoloop-ledger-W7QO62PX.js +96 -0
- package/dist/autoloop-ledger-subscriber-Z5RW5EIE.js +162 -0
- package/dist/autoloop-run-defaults-FERGRZGP.js +19 -0
- package/dist/autoloop-run-lock-CT2NWSV3.js +197 -0
- package/dist/autoloop-success-J2VKKBXQ.js +85 -0
- package/dist/autoloop-termination-summary-RN75F422.js +58 -0
- package/dist/autoloop-trajectory-XFIEXP5Z.js +282 -0
- package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
- package/dist/autonomous-loop-controller-PW4XVFGQ.js +4120 -0
- package/dist/backend-P3DAYRP7.js +29 -0
- package/dist/background-executor-CBN552V4.js +257 -0
- package/dist/backlog-execution-intent-U4XYPTV6.js +15 -0
- package/dist/backup-active-store-5WXG6SXT.js +17 -0
- package/dist/backup-telemetry-db-XGLXAA3N.js +254 -0
- package/dist/basic-competition-master-VCSBJVRN.js +344 -0
- package/dist/branch-archive-manager-RP6FP3ZC.js +254 -0
- package/dist/branch-cleanup-manager-RSHAI7YR.js +20 -0
- package/dist/build-gate-YHGRB4QB.js +71 -0
- package/dist/change-summary-WY7J5TOX.js +33 -0
- package/dist/chunk-23A26CSN.js +123 -0
- package/dist/chunk-27UTJD3M.js +265 -0
- package/dist/chunk-2A5CILN3.js +310 -0
- package/dist/chunk-2AQUWJPW.js +225 -0
- package/dist/chunk-2BZ53J6J.js +2344 -0
- package/dist/chunk-2DY5KNVM.js +276 -0
- package/dist/chunk-2EIA4RBE.js +659 -0
- package/dist/chunk-2IUXIGQD.js +1064 -0
- package/dist/chunk-2N42MS2Z.js +2193 -0
- package/dist/chunk-2QJ3H3L7.js +42 -0
- package/dist/chunk-2QLYTVYX.js +791 -0
- package/dist/chunk-2VSQMRCB.js +18 -0
- package/dist/chunk-2XQXYBM2.js +130 -0
- package/dist/chunk-2YFUIER7.js +426 -0
- package/dist/chunk-34CNP2HB.js +148 -0
- package/dist/chunk-35P3W3JX.js +456 -0
- package/dist/chunk-36PEBZAF.js +18 -0
- package/dist/chunk-3AOKYKA7.js +22 -0
- package/dist/chunk-3BCUNHKF.js +475 -0
- package/dist/chunk-3FLXLLB7.js +26 -0
- package/dist/chunk-3FOZ2VHV.js +100 -0
- package/dist/chunk-3G6FZCRF.js +106 -0
- package/dist/chunk-3M57DADF.js +44 -0
- package/dist/chunk-3S62LLWJ.js +543 -0
- package/dist/chunk-3ZPQLGV7.js +2904 -0
- package/dist/chunk-44N5WZZH.js +45 -0
- package/dist/chunk-45FPSA3B.js +125 -0
- package/dist/chunk-4BJ3O4RQ.js +929 -0
- package/dist/chunk-4BOP7T6L.js +2321 -0
- package/dist/chunk-4BTDUT2S.js +42 -0
- package/dist/chunk-4CSS7WVI.js +143 -0
- package/dist/chunk-4CUY7AFY.js +247 -0
- package/dist/chunk-4GSN5O5J.js +62 -0
- package/dist/chunk-4HN6DF7V.js +1027 -0
- package/dist/chunk-4IAPOG5V.js +415 -0
- package/dist/chunk-4IYIZQWV.js +48 -0
- package/dist/chunk-4NXPXE62.js +84 -0
- package/dist/chunk-4RCCF5BR.js +712 -0
- package/dist/chunk-4V7NAQ4R.js +19527 -0
- package/dist/chunk-4VJITV4P.js +445 -0
- package/dist/chunk-4YX7J6QL.js +1859 -0
- package/dist/chunk-527OBWQB.js +338 -0
- package/dist/chunk-5D4A7E3D.js +448 -0
- package/dist/chunk-5DLKYTQX.js +4003 -0
- package/dist/chunk-5EERLVZB.js +139 -0
- package/dist/chunk-5H72XE4H.js +256 -0
- package/dist/chunk-5HDP7XZG.js +91 -0
- package/dist/chunk-5LAMRH4X.js +969 -0
- package/dist/chunk-5LTN43AS.js +1972 -0
- package/dist/chunk-5RBHQYDB.js +2206 -0
- package/dist/chunk-5WCQRDRB.js +588 -0
- package/dist/chunk-5WRLK5KW.js +700 -0
- package/dist/chunk-5ZCXC23G.js +595 -0
- package/dist/chunk-6BM72ZMG.js +31 -0
- package/dist/chunk-6EDAJH2I.js +68 -0
- package/dist/chunk-6EQKFDBH.js +457 -0
- package/dist/chunk-6MFRHTRI.js +115 -0
- package/dist/chunk-6TZJRKNW.js +321 -0
- package/dist/chunk-6V7HGQFZ.js +20 -0
- package/dist/chunk-6VWVO2TU.js +3746 -0
- package/dist/chunk-6Y5TWI7H.js +146 -0
- package/dist/chunk-6Y5U7UFY.js +91 -0
- package/dist/chunk-6ZLAK3XG.js +14 -0
- package/dist/chunk-72XCRQED.js +34 -0
- package/dist/chunk-72YTZMAM.js +589 -0
- package/dist/chunk-73BBJOKA.js +263 -0
- package/dist/chunk-73NCTWKL.js +188 -0
- package/dist/chunk-77I6G4CO.js +1 -0
- package/dist/chunk-7DHRDWFS.js +3104 -0
- package/dist/chunk-7DNSNKJV.js +78 -0
- package/dist/chunk-7FMJVYBS.js +307 -0
- package/dist/chunk-7GDRQBQC.js +419 -0
- package/dist/chunk-7GPCEFUV.js +270 -0
- package/dist/chunk-7IL4A2PP.js +948 -0
- package/dist/chunk-7MMLMXO6.js +3679 -0
- package/dist/chunk-7QCZSLBH.js +1 -0
- package/dist/chunk-7R2WLDOS.js +62 -0
- package/dist/chunk-7T7RUJI7.js +949 -0
- package/dist/chunk-A2WKSVX7.js +43 -0
- package/dist/chunk-A3YGID55.js +133 -0
- package/dist/chunk-A722DEVA.js +14 -0
- package/dist/chunk-ACDIT7OP.js +1376 -0
- package/dist/chunk-ACKIPAOJ.js +302 -0
- package/dist/chunk-APPNGGN7.js +365 -0
- package/dist/chunk-APV6MK5E.js +137 -0
- package/dist/chunk-ASEP3M2W.js +968 -0
- package/dist/chunk-AT4TNPWW.js +2931 -0
- package/dist/chunk-ATVKCSGT.js +250 -0
- package/dist/chunk-AURFMVCD.js +899 -0
- package/dist/chunk-AX6GWE7V.js +47 -0
- package/dist/chunk-AY5EWJPF.js +385 -0
- package/dist/chunk-BAV2HJXS.js +194 -0
- package/dist/chunk-BBHRN366.js +89 -0
- package/dist/chunk-BBPSTTPA.js +1004 -0
- package/dist/chunk-BDATUDDJ.js +992 -0
- package/dist/chunk-BKE5PG5L.js +20414 -0
- package/dist/chunk-BLPHWMDK.js +797 -0
- package/dist/chunk-BSE4R6XD.js +322 -0
- package/dist/chunk-BXGMAU4A.js +396 -0
- package/dist/chunk-BXI4NXL3.js +507 -0
- package/dist/chunk-BZU2O43F.js +1125 -0
- package/dist/chunk-C3L6YQ7P.js +147 -0
- package/dist/chunk-C57KJOUQ.js +121 -0
- package/dist/chunk-CCV7BPSY.js +118 -0
- package/dist/chunk-CD7ISXA4.js +826 -0
- package/dist/chunk-CE5OZBYY.js +21 -0
- package/dist/chunk-CFBIG37O.js +154 -0
- package/dist/chunk-CJC6GZ46.js +457 -0
- package/dist/chunk-CKCDGXIV.js +408 -0
- package/dist/chunk-CKNX3TTP.js +10338 -0
- package/dist/chunk-CLKSETWE.js +10 -0
- package/dist/chunk-CP7H3HSP.js +1552 -0
- package/dist/chunk-CPLEWXNZ.js +66 -0
- package/dist/chunk-CQM3A35X.js +844 -0
- package/dist/chunk-CS6P76D3.js +103 -0
- package/dist/chunk-CTLUBNCW.js +622 -0
- package/dist/chunk-CUSRN6RJ.js +632 -0
- package/dist/chunk-D5EP5D2W.js +26 -0
- package/dist/chunk-D5RYINO7.js +412 -0
- package/dist/chunk-DBFS4HMH.js +751 -0
- package/dist/chunk-DC4ZYMXJ.js +115 -0
- package/dist/chunk-DCBZP442.js +9243 -0
- package/dist/chunk-DCYF7EKG.js +26 -0
- package/dist/chunk-DDMAFNUK.js +5351 -0
- package/dist/chunk-DF5SLDE4.js +966 -0
- package/dist/chunk-DJFW7SMX.js +348 -0
- package/dist/chunk-DQFLLBJW.js +121 -0
- package/dist/chunk-DSFM56OA.js +1203 -0
- package/dist/chunk-DTY4APYV.js +218 -0
- package/dist/chunk-DXH5JBRS.js +437 -0
- package/dist/chunk-E3NTPHEO.js +194 -0
- package/dist/chunk-E74LUIID.js +302 -0
- package/dist/chunk-EI57M5BI.js +194 -0
- package/dist/chunk-EJ4ZAWLV.js +305 -0
- package/dist/chunk-EJGCZGUF.js +1483 -0
- package/dist/chunk-EK2U3YEG.js +486 -0
- package/dist/chunk-ELMFYNV7.js +109 -0
- package/dist/chunk-ENRGKNR5.js +25 -0
- package/dist/chunk-ETYDXCK7.js +679 -0
- package/dist/chunk-EYRH3W74.js +239 -0
- package/dist/chunk-F23DIWNN.js +1024 -0
- package/dist/chunk-F5JO7HAS.js +94 -0
- package/dist/chunk-F7ER6ANO.js +174 -0
- package/dist/chunk-FATUVIIN.js +374 -0
- package/dist/chunk-FC23CTXV.js +322 -0
- package/dist/chunk-FD4ERYEG.js +22 -0
- package/dist/chunk-FH7WOJAE.js +79 -0
- package/dist/chunk-FHOWVDF5.js +1342 -0
- package/dist/chunk-FKAUPHMR.js +96 -0
- package/dist/chunk-FONNFJXA.js +137 -0
- package/dist/chunk-FQ7FSZRW.js +75 -0
- package/dist/chunk-FRG57FPM.js +240 -0
- package/dist/chunk-FUVP64ER.js +31 -0
- package/dist/chunk-FYOILAN5.js +6818 -0
- package/dist/chunk-G35UYQ6Z.js +69 -0
- package/dist/chunk-G36W2T2S.js +1143 -0
- package/dist/chunk-G3L2L5XZ.js +49 -0
- package/dist/chunk-G4THLFV3.js +148 -0
- package/dist/chunk-GAFJEYLK.js +29 -0
- package/dist/chunk-GFGYB2ZU.js +1689 -0
- package/dist/chunk-GG6KJYW6.js +85 -0
- package/dist/chunk-GHHFDU2U.js +55 -0
- package/dist/chunk-GHTZSQB7.js +57 -0
- package/dist/chunk-GK37ILCX.js +1231 -0
- package/dist/chunk-GKN3HMN4.js +2809 -0
- package/dist/chunk-GNVDBVJP.js +156 -0
- package/dist/chunk-GPEL3FBM.js +924 -0
- package/dist/chunk-GPSNGPZS.js +1604 -0
- package/dist/chunk-GSGD5E4C.js +30 -0
- package/dist/chunk-GSUQJJXQ.js +331 -0
- package/dist/chunk-GSV226X6.js +110 -0
- package/dist/chunk-H2AYQIHW.js +224 -0
- package/dist/chunk-H66DXFS5.js +1374 -0
- package/dist/chunk-H6G7QRMQ.js +35 -0
- package/dist/chunk-H7JAGHZT.js +59 -0
- package/dist/chunk-H7ZEFECA.js +316 -0
- package/dist/chunk-HAC6EHZZ.js +79 -0
- package/dist/chunk-HIO33P3G.js +19 -0
- package/dist/chunk-HMVQIPH3.js +547 -0
- package/dist/chunk-HOYBYAOA.js +257 -0
- package/dist/chunk-HX5P3CSP.js +1784 -0
- package/dist/chunk-I46EG2XQ.js +65 -0
- package/dist/chunk-I4NPDSCB.js +279 -0
- package/dist/chunk-I5WRT7ZR.js +514 -0
- package/dist/chunk-IC7I6YIJ.js +301 -0
- package/dist/chunk-IDCSOZVN.js +78 -0
- package/dist/chunk-IFCBYECK.js +112 -0
- package/dist/chunk-IFZCPEY2.js +66 -0
- package/dist/chunk-IKFP2KUR.js +48 -0
- package/dist/chunk-IRFBN336.js +878 -0
- package/dist/chunk-IUXNGKA6.js +152 -0
- package/dist/chunk-IV2RVAN7.js +1356 -0
- package/dist/chunk-IZYIQQ7X.js +53 -0
- package/dist/chunk-J3UUR7DE.js +210 -0
- package/dist/chunk-J54VUAY2.js +566 -0
- package/dist/chunk-J62KPGII.js +464 -0
- package/dist/chunk-J6P3FWWW.js +130 -0
- package/dist/chunk-JKBHJQMT.js +434 -0
- package/dist/chunk-JLS65NUQ.js +14 -0
- package/dist/chunk-JOSYEJKY.js +141 -0
- package/dist/chunk-JPKSXKNB.js +94 -0
- package/dist/chunk-JQNJB2BB.js +2440 -0
- package/dist/chunk-JRVNSWSQ.js +2626 -0
- package/dist/chunk-JSWMRQYG.js +28 -0
- package/dist/chunk-JZKNBBIB.js +152 -0
- package/dist/chunk-K54Y7MLK.js +160 -0
- package/dist/chunk-K65546RE.js +183 -0
- package/dist/chunk-KM3F7SYE.js +702 -0
- package/dist/chunk-KNDYMVWN.js +102 -0
- package/dist/chunk-KNT72VR6.js +132 -0
- package/dist/chunk-KP6YILMU.js +482 -0
- package/dist/chunk-KQEBSK3T.js +274 -0
- package/dist/chunk-KT6VHSPF.js +84 -0
- package/dist/chunk-KTMW65UX.js +14 -0
- package/dist/chunk-KZ5CJVBP.js +1813 -0
- package/dist/chunk-L4427KOE.js +26 -0
- package/dist/chunk-L6OM4A22.js +189 -0
- package/dist/chunk-L7E6XCRA.js +1042 -0
- package/dist/chunk-L7JZLXQL.js +173 -0
- package/dist/chunk-LAMKBTXX.js +40 -0
- package/dist/chunk-LDCF2MKN.js +132 -0
- package/dist/chunk-LEIIWPWQ.js +78 -0
- package/dist/chunk-LFTQVYBB.js +31 -0
- package/dist/chunk-LG3PDRTR.js +2872 -0
- package/dist/chunk-LGHII5ET.js +23 -0
- package/dist/chunk-LH5QY22X.js +1205 -0
- package/dist/chunk-LIVJ6266.js +438 -0
- package/dist/chunk-LKRAR3IH.js +276 -0
- package/dist/chunk-LO23NABI.js +3063 -0
- package/dist/chunk-LO3X5NLS.js +326 -0
- package/dist/chunk-LPITVM7M.js +339 -0
- package/dist/chunk-LR5IJIGV.js +810 -0
- package/dist/chunk-LRGMHROI.js +79 -0
- package/dist/chunk-LUVKFFWR.js +315 -0
- package/dist/chunk-LWCBNGH6.js +35 -0
- package/dist/chunk-LWTN3WRV.js +260 -0
- package/dist/chunk-M3HQYKQX.js +308 -0
- package/dist/chunk-M6GVSPEH.js +1016 -0
- package/dist/chunk-MF5HP6XV.js +221 -0
- package/dist/chunk-MHLCBZJB.js +328 -0
- package/dist/chunk-MN6PL4AN.js +120 -0
- package/dist/chunk-MOEY65Z6.js +5678 -0
- package/dist/chunk-MQ4WA34C.js +206 -0
- package/dist/chunk-MWHF5V7U.js +223 -0
- package/dist/chunk-MWHLBPNU.js +211 -0
- package/dist/chunk-MWK5UZQ3.js +1068 -0
- package/dist/chunk-MYLH2S4G.js +64 -0
- package/dist/chunk-MZ5WYKNA.js +28 -0
- package/dist/chunk-N4VTRA7K.js +131 -0
- package/dist/chunk-N5DX4JAK.js +12 -0
- package/dist/chunk-N65O4XTH.js +5011 -0
- package/dist/chunk-NEQUQHOX.js +223 -0
- package/dist/chunk-NGK6PEOG.js +25 -0
- package/dist/chunk-NJVD4PWE.js +1033 -0
- package/dist/chunk-NM6PMYY4.js +768 -0
- package/dist/chunk-NN4PJDHP.js +708 -0
- package/dist/chunk-NP2V3L7K.js +226 -0
- package/dist/chunk-NRLY536M.js +260 -0
- package/dist/chunk-NRNE225N.js +1270 -0
- package/dist/chunk-NS2K2GTP.js +605 -0
- package/dist/chunk-NS33V3IM.js +51 -0
- package/dist/chunk-NSHASMZZ.js +71 -0
- package/dist/chunk-NWOYOA6H.js +378 -0
- package/dist/chunk-NWRUSEXG.js +322 -0
- package/dist/chunk-NZGDAWIP.js +1905 -0
- package/dist/chunk-O47UOKU3.js +395 -0
- package/dist/chunk-O4G2W3ST.js +9831 -0
- package/dist/chunk-O6V4PNLO.js +63 -0
- package/dist/chunk-OA4GPILI.js +624 -0
- package/dist/chunk-OGMSYL6J.js +227 -0
- package/dist/chunk-OIS7J26S.js +319 -0
- package/dist/chunk-OMX5VL43.js +79 -0
- package/dist/chunk-ON3G73BU.js +264 -0
- package/dist/chunk-OPYFYTWQ.js +220 -0
- package/dist/chunk-OQ6K46CK.js +1734 -0
- package/dist/chunk-OYZYO7TV.js +47 -0
- package/dist/chunk-OZ4REHIN.js +4386 -0
- package/dist/chunk-P47VN5F4.js +282 -0
- package/dist/chunk-P5I4X7A7.js +353 -0
- package/dist/chunk-P6VQROCO.js +594 -0
- package/dist/chunk-P7CQGPLS.js +30 -0
- package/dist/chunk-PCAGC5MR.js +1763 -0
- package/dist/chunk-PFTQBXS6.js +5181 -0
- package/dist/chunk-PGSPX4SU.js +15 -0
- package/dist/chunk-PIKLF7BM.js +432 -0
- package/dist/chunk-PJWJ3SAV.js +22 -0
- package/dist/chunk-PKIFMV72.js +100 -0
- package/dist/chunk-PL37JDNA.js +189 -0
- package/dist/chunk-PTH5E5XO.js +195 -0
- package/dist/chunk-PW6AXLQC.js +4128 -0
- package/dist/chunk-PYITM4N2.js +79 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-Q3RO7N35.js +45 -0
- package/dist/chunk-Q3WIC6GQ.js +2670 -0
- package/dist/chunk-Q5XIXSHX.js +271 -0
- package/dist/chunk-QGJDMEOV.js +34 -0
- package/dist/chunk-QNOB37UH.js +58 -0
- package/dist/chunk-QOCOVLUH.js +462 -0
- package/dist/chunk-QTCJ5CC5.js +172 -0
- package/dist/chunk-QVFV5IP2.js +232 -0
- package/dist/chunk-QVZMFDYG.js +29 -0
- package/dist/chunk-R35PEUKH.js +511 -0
- package/dist/chunk-R4UWBC35.js +200 -0
- package/dist/chunk-R6MLCREW.js +44 -0
- package/dist/chunk-R6W23LKN.js +254 -0
- package/dist/chunk-R7XDDX2A.js +4007 -0
- package/dist/chunk-RDFRCT64.js +168 -0
- package/dist/chunk-RE5VZDFQ.js +58 -0
- package/dist/chunk-RGROYC2G.js +638 -0
- package/dist/chunk-RGWHUI5E.js +68 -0
- package/dist/chunk-RHVG6UNL.js +205 -0
- package/dist/chunk-RI4EX2QE.js +18 -0
- package/dist/chunk-RJAAKDRX.js +17 -0
- package/dist/chunk-ROMHOSMQ.js +185 -0
- package/dist/chunk-RWREC3KJ.js +517 -0
- package/dist/chunk-RYNETRDJ.js +118 -0
- package/dist/chunk-RZY7RKM5.js +500 -0
- package/dist/chunk-S2MNWFAG.js +52 -0
- package/dist/chunk-S2VQCZO4.js +22 -0
- package/dist/chunk-S54MKU6V.js +117 -0
- package/dist/chunk-S5OIDFRM.js +302 -0
- package/dist/chunk-SCW4ZF6R.js +150 -0
- package/dist/chunk-SLS2N4PH.js +2213 -0
- package/dist/chunk-SNLBO4BF.js +247 -0
- package/dist/chunk-SP3LFU6B.js +60 -0
- package/dist/chunk-SQQTDDQA.js +537 -0
- package/dist/chunk-STV6LYYE.js +45 -0
- package/dist/chunk-SURZ2WFE.js +326 -0
- package/dist/chunk-SZ7DL357.js +1047 -0
- package/dist/chunk-T5E4NQCM.js +5742 -0
- package/dist/chunk-TAJPCXSB.js +13 -0
- package/dist/chunk-TAOOYK3P.js +358 -0
- package/dist/chunk-TDSEX5CF.js +24 -0
- package/dist/chunk-TFTGP7Z7.js +174 -0
- package/dist/chunk-TGON4N4O.js +197 -0
- package/dist/chunk-TGQZHDY2.js +2373 -0
- package/dist/chunk-TJJZ2OKV.js +6783 -0
- package/dist/chunk-TRSVUPCX.js +25 -0
- package/dist/chunk-TSXGRLPR.js +107 -0
- package/dist/chunk-U2S3YEX3.js +224 -0
- package/dist/chunk-U45RTRGY.js +818 -0
- package/dist/chunk-U6C3VVWS.js +13 -0
- package/dist/chunk-UDMS5AD3.js +307 -0
- package/dist/chunk-UGX7GI37.js +94 -0
- package/dist/chunk-UH3JJSHK.js +1 -0
- package/dist/chunk-UHRBTZYY.js +208 -0
- package/dist/chunk-UHT2KRG5.js +193 -0
- package/dist/chunk-UI2F6DJ5.js +118 -0
- package/dist/chunk-UMAKSB4Z.js +284 -0
- package/dist/chunk-UR2IBGIM.js +521 -0
- package/dist/chunk-UUH2RVKS.js +585 -0
- package/dist/chunk-UVJ4PJDK.js +4533 -0
- package/dist/chunk-V53UG2OT.js +9924 -0
- package/dist/chunk-V72RMBM4.js +48 -0
- package/dist/chunk-VBNCKCCI.js +16 -0
- package/dist/chunk-VNSYKC25.js +24 -0
- package/dist/chunk-VPHVFK4A.js +1984 -0
- package/dist/chunk-VTLNJQ44.js +133 -0
- package/dist/chunk-VTW7HP3R.js +100 -0
- package/dist/chunk-VVGEPBPS.js +218 -0
- package/dist/chunk-VVLLL7I4.js +166 -0
- package/dist/chunk-VX3UMWB7.js +483 -0
- package/dist/chunk-VXF4Q3FW.js +20 -0
- package/dist/chunk-W3JMT2YY.js +712 -0
- package/dist/chunk-WDUORIHF.js +877 -0
- package/dist/chunk-WDVTY4U6.js +148 -0
- package/dist/chunk-WIFZCHEG.js +12566 -0
- package/dist/chunk-WIRN3F75.js +736 -0
- package/dist/chunk-WMPU2UOV.js +82 -0
- package/dist/chunk-WTOKKE2V.js +784 -0
- package/dist/chunk-WX5IRLF6.js +740 -0
- package/dist/chunk-WZ6U3O7I.js +1581 -0
- package/dist/chunk-XAONGNST.js +57 -0
- package/dist/chunk-XB5YLCLB.js +13 -0
- package/dist/chunk-XEP5NQ5Y.js +688 -0
- package/dist/chunk-XGYF2QMZ.js +351 -0
- package/dist/chunk-XHEKQENB.js +255 -0
- package/dist/chunk-XNO4FM6X.js +1124 -0
- package/dist/chunk-XPHKYHO4.js +878 -0
- package/dist/chunk-XPK2I4NC.js +405 -0
- package/dist/chunk-XPU2XADL.js +2175 -0
- package/dist/chunk-XQD2B6BB.js +507 -0
- package/dist/chunk-XT2ZQVTC.js +558 -0
- package/dist/chunk-XTXJGGUV.js +351 -0
- package/dist/chunk-XUXVDPSZ.js +50 -0
- package/dist/chunk-XV7NZL4B.js +57 -0
- package/dist/chunk-XZE4XARH.js +563 -0
- package/dist/chunk-XZYR5EDO.js +152 -0
- package/dist/chunk-Y3J4JMTU.js +61 -0
- package/dist/chunk-Y55LZN5U.js +52 -0
- package/dist/chunk-Y5VN7DMP.js +112 -0
- package/dist/chunk-Y67VAHN4.js +459 -0
- package/dist/chunk-YAXSKEUH.js +3544 -0
- package/dist/chunk-YB3JD4E6.js +975 -0
- package/dist/chunk-YESZJFK6.js +220 -0
- package/dist/chunk-YGXKOBQQ.js +292 -0
- package/dist/chunk-YMX76IOS.js +31 -0
- package/dist/chunk-YOTXESEH.js +257 -0
- package/dist/chunk-YTYIEZQY.js +119 -0
- package/dist/chunk-YVORHQ2S.js +579 -0
- package/dist/chunk-Z2CUQDAR.js +3429 -0
- package/dist/chunk-Z2KYOFHS.js +7000 -0
- package/dist/chunk-Z6PC7QX6.js +161 -0
- package/dist/chunk-ZDTGECTN.js +235 -0
- package/dist/chunk-ZIPWI2LY.js +151 -0
- package/dist/chunk-ZSKKMTQJ.js +554 -0
- package/dist/chunk-ZTT5IVPY.js +1160 -0
- package/dist/chunk-ZX65UI5W.js +78 -0
- package/dist/chunk-ZYG7GGKO.js +218 -0
- package/dist/chunk-ZZZUL4OF.js +38 -0
- package/dist/cli-utils-IXL26KJT.js +40 -0
- package/dist/cli-validation-WLXWLUJL.js +111 -0
- package/dist/commit-utils-P7CRJF5N.js +202 -0
- package/dist/compete-config-resolver-R5ULXMYH.js +76 -0
- package/dist/compete-request-62JESVET.js +364 -0
- package/dist/compete-results-QEPG6FZX.js +208 -0
- package/dist/competition-outcome-tracker-R32OOZ43.js +38 -0
- package/dist/config-JCOKXOQT.js +166 -0
- package/dist/config-audit-EL3GHXS7.js +360 -0
- package/dist/config-explain-TNILDEVJ.js +12 -0
- package/dist/config-loader-VPFPFO4B.js +38 -0
- package/dist/config-manager-7T4E2BQO.js +67 -0
- package/dist/config-validator-KKOHOW7O.js +72 -0
- package/dist/cost-YC42XUF3.js +53 -0
- package/dist/coverage-orchestrator-CISNKJC2.js +772 -0
- package/dist/coverage-scanner-YVD62MLH.js +12 -0
- package/dist/createCompetitionRunner-LJG6ZQSO.js +46 -0
- package/dist/data-migration-state-VJK64DLT.js +31 -0
- package/dist/db-migrator-XSEIOGWY.js +34 -0
- package/dist/discovery-JGYGDD25.js +25 -0
- package/dist/doctor-GJOYE7AE.js +186 -0
- package/dist/domain-analyzer-AWF3RP6E.js +29 -0
- package/dist/ensure-initialized-744DIZEZ.js +52 -0
- package/dist/entry.js +940 -0
- package/dist/environment-YS45U5ZI.js +81 -0
- package/dist/error-parser-core-PPZ36A4S.js +50 -0
- package/dist/escalation-ladder-MKTCEGSA.js +130 -0
- package/dist/evaluation-context-KV4GZNN7.js +35 -0
- package/dist/evidence-plan-resolver-GBSYSAPX.js +85 -0
- package/dist/execution-data-writer-3ODTBDLH.js +53 -0
- package/dist/execution-policy-applier-ZHD3DCF3.js +31 -0
- package/dist/execution-preflight-Z4Y64V3I.js +209 -0
- package/dist/execution-roles-R3DPPMD3.js +66 -0
- package/dist/exit-code-error-Z4SW2DVK.js +14 -0
- package/dist/external-temp-cleanup-N2RZH4QP.js +311 -0
- package/dist/factory-XBN7DFIM.js +149 -0
- package/dist/file-utils-XIVR2ZMA.js +47 -0
- package/dist/flywheel-autoloop-executor-UILGOFFK.js +249 -0
- package/dist/flywheel-competition-executor-JOBEXTRB.js +259 -0
- package/dist/flywheel-executor-6JFLA6J5.js +369 -0
- package/dist/flywheel-git-isolation-UC5NIEVU.js +48 -0
- package/dist/flywheel-manifest-5UC4VBMA.js +108 -0
- package/dist/flywheel-model-defaults-7CVKP53V.js +27 -0
- package/dist/flywheel-preflight-XEY5SHM6.js +104 -0
- package/dist/flywheel-resume-7HELH7QS.js +23 -0
- package/dist/flywheel-safety-7U7DPOAP.js +28 -0
- package/dist/flywheel-scope-decision-ZHKF6ZIN.js +11 -0
- package/dist/get-telemetry-logger-DPVWWIYY.js +73 -0
- package/dist/git-worktree-IY6V6DUO.js +18 -0
- package/dist/github-pr-manager-4LXEKJTA.js +211 -0
- package/dist/guidance-profile-config-E7XJL2VP.js +117 -0
- package/dist/guidance-profile-renderer-QK2YMAAP.js +21 -0
- package/dist/index-query-4JEUKA44.js +31 -0
- package/dist/index.js +108661 -0
- package/dist/instructions-6BURLQJC.js +64 -0
- package/dist/invoke-provider-auth-GRUYP44M.js +223 -0
- package/dist/judge-scoring.json +80 -0
- package/dist/judge-test.js +555 -0
- package/dist/lab-mode-OTWVHN63.js +39 -0
- package/dist/lab-utils-BJRFLGK4.js +23 -0
- package/dist/linux-host-class-UY4KVLFD.js +29 -0
- package/dist/llm-judge-executor-F7Z3HO77.js +133 -0
- package/dist/local-executor-CEHWE2PL.js +223 -0
- package/dist/logger-33TR6EE5.js +72 -0
- package/dist/loop-spec-XTLQAVZ7.js +191 -0
- package/dist/manager-2HJG5CLT.js +25 -0
- package/dist/matrix-prompt-builder-6UDN5X3F.js +497 -0
- package/dist/matrix-result-parser-7W35EUOV.js +15 -0
- package/dist/metadata-HQ43NDEK.js +22 -0
- package/dist/model-invocations-db-QBO4Y7WZ.js +38 -0
- package/dist/monitor-XGYBG2DW.js +72 -0
- package/dist/next-PB5ZXZKB.js +90 -0
- package/dist/next-ZBDK725T.js +69 -0
- package/dist/optimization-config-resolver-O6WKR47U.js +75 -0
- package/dist/package-3YCWIQQ5.js +10 -0
- package/dist/parallel-orchestrator-NL7YJJU2.js +297 -0
- package/dist/parallel-worker.js +279 -0
- package/dist/parse-git-status-PIAF3OTP.js +10 -0
- package/dist/path-security-ETTH6TZL.js +39 -0
- package/dist/pattern-bank-UNJR5ADV.js +15 -0
- package/dist/plan-backlog-list-fast-VAGYBV3J.js +270 -0
- package/dist/plan-backlog-show-fast-SG2CZPW3.js +406 -0
- package/dist/plan-sprint-list-fast-LURAX47V.js +162 -0
- package/dist/plan-sprint-status-fast-FJAODCHD.js +208 -0
- package/dist/plan-task-status-fast-HNYBMQI4.js +349 -0
- package/dist/plan-to-flywheel-Z4U3GWPN.js +456 -0
- package/dist/planning-backlog-3CQ5QQBQ.js +319 -0
- package/dist/poetic-root-V5DNXEAE.js +17 -0
- package/dist/preflight-OPANWMME.js +12 -0
- package/dist/process-registry-PDZJPTAS.js +27 -0
- package/dist/process-scanner-C22SYXYD.js +22 -0
- package/dist/processes-KMQUD7HY.js +29 -0
- package/dist/processes-json-fast-IBDXZ6WW.js +135 -0
- package/dist/profile-SE5EVXAP.js +149 -0
- package/dist/prompts-WZZPGWBX.js +168 -0
- package/dist/protected-branches-RNTEX7ET.js +57 -0
- package/dist/provider-aware-resource-manager-QBTZJMNP.js +18 -0
- package/dist/provider-matrix-N5X57V3Y.js +154 -0
- package/dist/provider-matrix-renderer-MZDWKKID.js +139 -0
- package/dist/provider-output-forwarding-DERID3TP.js +30 -0
- package/dist/provider-registry-J5NRBJKI.js +128 -0
- package/dist/provider-temp-cleanup-KYGLF6YU.js +14 -0
- package/dist/prune-engine-Q6E2DXBN.js +451 -0
- package/dist/quality-gate-YRHMQAEI.js +70 -0
- package/dist/quickstart-FIRLKGJI.js +62 -0
- package/dist/readiness-VZTMSG6J.js +96 -0
- package/dist/registry-YODFY77A.js +153 -0
- package/dist/repair-helpers-TTV5FEF4.js +117 -0
- package/dist/repo-root-2IGD4H7X.js +22 -0
- package/dist/resolution-engine-D6TX6FRG.js +127 -0
- package/dist/resolve-provider-cli-O2P6XZBZ.js +35 -0
- package/dist/restore-telemetry-db-BQL6DTQF.js +360 -0
- package/dist/result-streamer-WEHW476R.js +19 -0
- package/dist/routing-events-DHPUZDDF.js +27 -0
- package/dist/routing-history-store-UWCEXAP3.js +46 -0
- package/dist/routing-planner-F5WQEUOM.js +160 -0
- package/dist/run-poetic-tui-J6LWRJUP.js +13517 -0
- package/dist/run-simulation.js +376 -0
- package/dist/runner-CS2TNGHA.js +1092 -0
- package/dist/runner-HHH7ZN2Z.js +1571 -0
- package/dist/safety-OCC4KJJR.js +64 -0
- package/dist/safety-stanza-7SV3HGG3.js +60 -0
- package/dist/sandbox-32QXJEMV.js +81 -0
- package/dist/sandbox-RSO7VP6V.js +94 -0
- package/dist/schema-extensions.sql +234 -0
- package/dist/security-2KI5XNDG.js +17 -0
- package/dist/setup-bb-plugin-QAQWZCV5.js +738 -0
- package/dist/setup-claude-code-P7BTTSPO.js +317 -0
- package/dist/setup-temp-cleanup-GASCWZ2I.js +20 -0
- package/dist/shared-utils-D6U6UREP.js +37 -0
- package/dist/simple-artifact-goal-OTXNGZY6.js +25 -0
- package/dist/sprint-UIXPYOXQ.js +338 -0
- package/dist/sprint-bridge-4BHMSC3M.js +68 -0
- package/dist/sprint-execution-service-2B7WHL5L.js +311 -0
- package/dist/sprint-manager-IDQUDNQI.js +91 -0
- package/dist/sqlite-wrapper-UDWCTNLJ.js +17 -0
- package/dist/stale-cleanup-orchestrator-XWXV7KCZ.js +62 -0
- package/dist/storage-access-F6ALDN4S.js +22 -0
- package/dist/synthesis-XD6EDVHF.js +185 -0
- package/dist/task-classifier-LNLXSHOM.js +494 -0
- package/dist/task-list-fast-PTMA4LUC.js +147 -0
- package/dist/task-manager-XAT7GOWB.js +93 -0
- package/dist/task-splitter-U7DJ7W6A.js +79 -0
- package/dist/task-type-detector-OLVOMXZO.js +21 -0
- package/dist/task-type-resolver-KKNQYSB4.js +42 -0
- package/dist/telemetry-5HWBBXLX.js +131 -0
- package/dist/telemetry-health-tracker-DMSSGBZ2.js +11 -0
- package/dist/telemetry-path-resolver-7ICSG276.js +28 -0
- package/dist/telemetry-reliability-XUOZNZZ6.js +125 -0
- package/dist/token-estimator-MEQUL3EJ.js +37 -0
- package/dist/transports-KNSSV2V4.js +255 -0
- package/dist/unified-cost-tracker-4TFRBVPR.js +35 -0
- package/dist/unified-state-cleanup-LJPF2BOW.js +276 -0
- package/dist/universal-cost-calculator-BAJV35GA.js +42 -0
- package/dist/user-agents-GHUGCSKN.js +22 -0
- package/dist/variant-delivery-state-KLRNG6XA.js +33 -0
- package/dist/variant-state-cleanup-MZGGLQAJ.js +280 -0
- package/dist/variant-success-PJXWE3ZV.js +12 -0
- package/dist/variant-worker-KUWKBLAH.js +4196 -0
- package/dist/variant-worker.js +24 -0
- package/dist/variants-JE2FSAQS.js +233 -0
- package/dist/verification-toolchains-V24UHW6Q.js +28 -0
- package/dist/verify-commands-H3DTCSGI.js +37 -0
- package/dist/warning-EGQGUUIO.js +12 -0
- package/dist/work-edge-RWEDWJZF.js +49 -0
- package/dist/work-item-writer-WHAVZXAY.js +19 -0
- package/dist/worker-7SA2VS2Y.js +1435 -0
- package/dist/worker.js +19 -0
- package/dist/worktree-metrics-3DFUYVYE.js +26 -0
- package/dist/writeback-VZKHYHSN.js +44 -0
- package/docs/CLI_REFERENCE.md +7042 -0
- package/docs/PROVIDER_SETUP.md +1570 -0
- package/docs/README.md +96 -0
- package/docs/TROUBLESHOOTING.md +2232 -0
- package/docs/getting-started/QUICK_START.md +294 -0
- package/docs/getting-started/README.md +188 -0
- package/docs/getting-started/SETUP.md +52 -0
- package/docs/reference/AGENT_CONTEXT.md +38 -0
- package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
- package/docs/reference/README.md +381 -0
- package/docs/reference/SECURITY.md +262 -0
- package/integrations/bb-plugin-poetic/README.md +362 -0
- package/integrations/bb-plugin-poetic/app.css +341 -0
- package/integrations/bb-plugin-poetic/app.tsx +5059 -0
- package/integrations/bb-plugin-poetic/package.json +45 -0
- package/integrations/bb-plugin-poetic/server.ts +444 -0
- package/integrations/bb-plugin-poetic/src/adapter.ts +3312 -0
- package/integrations/bb-plugin-poetic/src/backlog-authoring-model.ts +150 -0
- package/integrations/bb-plugin-poetic/src/backlog-authoring-schema.ts +355 -0
- package/integrations/bb-plugin-poetic/src/backlog-authoring-service.ts +419 -0
- package/integrations/bb-plugin-poetic/src/backlog-authoring-view.ts +1026 -0
- package/integrations/bb-plugin-poetic/src/competition-defaults-schema.ts +122 -0
- package/integrations/bb-plugin-poetic/src/competition-defaults-service.ts +105 -0
- package/integrations/bb-plugin-poetic/src/competition-defaults-view.ts +138 -0
- package/integrations/bb-plugin-poetic/src/contract.ts +615 -0
- package/integrations/bb-plugin-poetic/src/finalize-model.ts +205 -0
- package/integrations/bb-plugin-poetic/src/finalize-schema.ts +158 -0
- package/integrations/bb-plugin-poetic/src/finalize-service.ts +382 -0
- package/integrations/bb-plugin-poetic/src/finalize-view.ts +159 -0
- package/integrations/bb-plugin-poetic/src/judge-operations-readback.ts +303 -0
- package/integrations/bb-plugin-poetic/src/judge-operations-schema.ts +33 -0
- package/integrations/bb-plugin-poetic/src/judge-operations-view.ts +459 -0
- package/integrations/bb-plugin-poetic/src/model.ts +1302 -0
- package/integrations/bb-plugin-poetic/src/monitor-service.ts +233 -0
- package/integrations/bb-plugin-poetic/src/panel-read-ux.ts +97 -0
- package/integrations/bb-plugin-poetic/src/patch-preview-schema.ts +166 -0
- package/integrations/bb-plugin-poetic/src/patch-preview-service.ts +480 -0
- package/integrations/bb-plugin-poetic/src/patch-preview-view.ts +109 -0
- package/integrations/bb-plugin-poetic/src/planning-readback.ts +204 -0
- package/integrations/bb-plugin-poetic/src/planning-service.ts +594 -0
- package/integrations/bb-plugin-poetic/src/planning-workspace-schema.ts +95 -0
- package/integrations/bb-plugin-poetic/src/planning-workspace.ts +323 -0
- package/integrations/bb-plugin-poetic/src/poll-handoff.ts +136 -0
- package/integrations/bb-plugin-poetic/src/project-target-server.ts +21 -0
- package/integrations/bb-plugin-poetic/src/project-target.ts +45 -0
- package/integrations/bb-plugin-poetic/src/reference-index.ts +192 -0
- package/integrations/bb-plugin-poetic/src/repository-schema.ts +30 -0
- package/integrations/bb-plugin-poetic/src/result-explorer-view.ts +597 -0
- package/integrations/bb-plugin-poetic/src/result-readback-model.ts +163 -0
- package/integrations/bb-plugin-poetic/src/result-readback-schema.ts +319 -0
- package/integrations/bb-plugin-poetic/src/result-readback-service.ts +333 -0
- package/integrations/bb-plugin-poetic/src/run-page-view.ts +177 -0
- package/integrations/bb-plugin-poetic/src/setup-config-schema.ts +291 -0
- package/integrations/bb-plugin-poetic/src/setup-config-service.ts +590 -0
- package/integrations/bb-plugin-poetic/src/setup-config-view.ts +413 -0
- package/integrations/bb-plugin-poetic/src/sprint-close-model.ts +150 -0
- package/integrations/bb-plugin-poetic/src/sprint-close-schema.ts +136 -0
- package/integrations/bb-plugin-poetic/src/sprint-close-service.ts +341 -0
- package/integrations/bb-plugin-poetic/src/sprint-close-view.ts +116 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-model.ts +714 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-readback.ts +231 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-schema.ts +601 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-service.ts +775 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-view.ts +1221 -0
- package/integrations/bb-plugin-poetic/src/task-authoring-model.ts +567 -0
- package/integrations/bb-plugin-poetic/src/task-authoring-schema.ts +635 -0
- package/integrations/bb-plugin-poetic/src/task-authoring-service.ts +842 -0
- package/integrations/bb-plugin-poetic/src/task-authoring-view.ts +1227 -0
- package/integrations/bb-plugin-poetic/src/task-detail-readback.ts +56 -0
- package/integrations/bb-plugin-poetic/src/task-detail-schema.ts +144 -0
- package/integrations/bb-plugin-poetic/src/task-navigation.ts +446 -0
- package/integrations/bb-plugin-poetic/src/workbench-route.ts +74 -0
- package/integrations/bb-plugin-poetic/tests/host-contract.test.ts +773 -0
- package/integrations/bb-plugin-poetic/tsconfig.json +18 -0
- package/integrations/bb-plugin-poetic/types/PROVENANCE.json +52 -0
- package/integrations/bb-plugin-poetic/types/bb-plugin-sdk-app.d.ts +1444 -0
- package/integrations/bb-plugin-poetic/types/bb-plugin-sdk.d.ts +13030 -0
- package/integrations/bb-plugin-poetic/vitest.host.config.ts +71 -0
- package/npm-shrinkwrap.json +4950 -0
- package/package.json +331 -0
- package/schemas/README.md +80 -0
- package/schemas/config-v1.schema.json +136 -0
- package/schemas/execution-config.schema.json +47 -0
- package/schemas/judge-scoring.schema.json +370 -0
- package/schemas/poetic.config.schema.json +2214 -0
- package/schemas/provider-config.schema.json +203 -0
- package/schemas/telemetry-config.schema.json +79 -0
- package/schemas/user-preferences.schema.json +141 -0
- package/scripts/assert-node-runtime.mjs +140 -0
- package/scripts/preflight-native.mjs +49 -0
- package/scripts/preinstall-node-check.mjs +78 -0
- package/scripts/setup-git-hooks.mjs +24 -0
- package/scripts/sync.sh +2722 -0
- package/scripts/write-node-launcher.sh +108 -0
- package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
- package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
- package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
- package/templates/.poetic/README.md +37 -0
- package/templates/.poetic/agents/README.md +296 -0
- package/templates/.poetic/agents/api-documenter.md +147 -0
- package/templates/.poetic/agents/backend-architect.md +31 -0
- package/templates/.poetic/agents/code-reviewer.md +157 -0
- package/templates/.poetic/agents/data-scientist.md +179 -0
- package/templates/.poetic/agents/database-optimizer.md +145 -0
- package/templates/.poetic/agents/debugger.md +31 -0
- package/templates/.poetic/agents/deployment-engineer.md +164 -0
- package/templates/.poetic/agents/devops-troubleshooter.md +139 -0
- package/templates/.poetic/agents/frontend-developer.md +150 -0
- package/templates/.poetic/agents/javascript-pro.md +36 -0
- package/templates/.poetic/agents/performance-engineer.md +151 -0
- package/templates/.poetic/agents/python-pro.md +137 -0
- package/templates/.poetic/agents/test-automator.md +147 -0
- package/templates/.poetic/agents/typescript-pro.md +34 -0
- package/templates/.poetic/config/poetic.config.jsonc +69 -0
- package/templates/.poetic/config/project-context.template.json +6 -0
- package/templates/.poetic/config/task-type-aliases.presets/kanban.yaml +14 -0
- package/templates/.poetic/config/task-type-aliases.presets/scrum.yaml +17 -0
- package/templates/.poetic/config/task-type-aliases.presets/xp.yaml +12 -0
- package/templates/.poetic/config/task-type-aliases.yaml +28 -0
- package/templates/.poetic/gitignore.template +55 -0
- package/templates/.poetic/task-types/analysis.yaml +40 -0
- package/templates/.poetic/task-types/architecture.yaml +38 -0
- package/templates/.poetic/task-types/doc.yaml +35 -0
- package/templates/.poetic/task-types/feature.yaml +23 -0
- package/templates/.poetic/task-types/general.yaml +6 -0
- package/templates/.poetic/task-types/security.yaml +39 -0
- package/templates/AGENTS.template.md +99 -0
- package/templates/CLAUDE.template.md +1 -0
- package/templates/GEMINI.template.md +1 -0
- package/templates/builtin-workflows/code-review.yaml +73 -0
- package/templates/builtin-workflows/compete-streak.yaml +78 -0
- package/templates/builtin-workflows/hello-verify.yaml +10 -0
- package/templates/builtin-workflows/judge-regression.yaml +114 -0
- package/templates/builtin-workflows/skills/code-review/SKILL.md +60 -0
- package/templates/builtin-workflows/skills/hello-verify/SKILL.md +6 -0
- package/templates/guard-kit/GUARD_SETUP.md.template +255 -0
- package/templates/guard-kit/check.mjs.template +777 -0
- package/templates/guard-kit/config.json.template +6 -0
- package/templates/guard-kit/poetic-guard.yml.template +189 -0
- package/templates/profiles/README.md +56 -0
- package/templates/profiles/frontier-claude.json +27 -0
- package/templates/profiles/frontier-codex.json +26 -0
|
@@ -0,0 +1,810 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExecutionTracker,
|
|
3
|
+
ensurePromptExecutionViews,
|
|
4
|
+
ensurePromptExecutionsCompositeForeignKey
|
|
5
|
+
} from "./chunk-U45RTRGY.js";
|
|
6
|
+
import {
|
|
7
|
+
performActivation
|
|
8
|
+
} from "./chunk-6BM72ZMG.js";
|
|
9
|
+
import {
|
|
10
|
+
parseJsonWithContext
|
|
11
|
+
} from "./chunk-QVZMFDYG.js";
|
|
12
|
+
import {
|
|
13
|
+
resolvePoeticDirFromContext
|
|
14
|
+
} from "./chunk-UI2F6DJ5.js";
|
|
15
|
+
|
|
16
|
+
// src/core/storage/PromptStore.ts
|
|
17
|
+
import crypto from "crypto";
|
|
18
|
+
import fs from "fs";
|
|
19
|
+
import path from "path";
|
|
20
|
+
import { fileURLToPath } from "url";
|
|
21
|
+
import Database from "better-sqlite3";
|
|
22
|
+
var __filename = fileURLToPath(import.meta.url);
|
|
23
|
+
var __dirname = path.dirname(__filename);
|
|
24
|
+
var PromptVersionStore = class {
|
|
25
|
+
poeticDir;
|
|
26
|
+
dbPath;
|
|
27
|
+
db;
|
|
28
|
+
executionTracker;
|
|
29
|
+
ownsDb;
|
|
30
|
+
// Live schema flags. The canonical writer (src/prompts/store.ts) uses a
|
|
31
|
+
// hash-and-file schema with no inline content / version_number columns.
|
|
32
|
+
// Older databases created by this class used inline-content columns.
|
|
33
|
+
// We detect which shape the DB is in and adapt reads/writes accordingly.
|
|
34
|
+
hasInlineContent = false;
|
|
35
|
+
hasVersionNumberColumn = false;
|
|
36
|
+
hasOptimizationMetadataColumn = false;
|
|
37
|
+
activeContentDir;
|
|
38
|
+
archivedContentDir;
|
|
39
|
+
// Safety thresholds
|
|
40
|
+
MIN_EXECUTIONS = 3;
|
|
41
|
+
MIN_SUCCESS_RATE = 0.5;
|
|
42
|
+
MAX_QUALITY_REGRESSION = 10;
|
|
43
|
+
// percent
|
|
44
|
+
MAX_COST_MULTIPLIER = 2;
|
|
45
|
+
constructor(options = {}) {
|
|
46
|
+
this.poeticDir = resolvePoeticDirFromContext(options.poeticDir);
|
|
47
|
+
const dbDir = path.join(this.poeticDir, "prompts", "db");
|
|
48
|
+
this.activeContentDir = path.join(this.poeticDir, "prompts", "active");
|
|
49
|
+
this.archivedContentDir = path.join(this.poeticDir, "prompts", "archived");
|
|
50
|
+
if (options.db) {
|
|
51
|
+
this.db = options.db;
|
|
52
|
+
this.dbPath = this.db.name;
|
|
53
|
+
this.ownsDb = false;
|
|
54
|
+
} else {
|
|
55
|
+
if (!fs.existsSync(dbDir)) {
|
|
56
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
57
|
+
}
|
|
58
|
+
this.dbPath = path.join(dbDir, "prompts.db");
|
|
59
|
+
this.db = new Database(this.dbPath);
|
|
60
|
+
this.ownsDb = true;
|
|
61
|
+
}
|
|
62
|
+
this.executionTracker = new ExecutionTracker({
|
|
63
|
+
poeticDir: this.poeticDir,
|
|
64
|
+
autoApplySchema: false,
|
|
65
|
+
// We'll apply schema ourselves
|
|
66
|
+
db: this.db
|
|
67
|
+
// Share the database connection
|
|
68
|
+
});
|
|
69
|
+
if (options.autoApplySchema !== false) {
|
|
70
|
+
this.applySchema();
|
|
71
|
+
}
|
|
72
|
+
this.detectSchemaShape();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Detect whether the prompt_versions table has inline content or hash-and-file shape.
|
|
76
|
+
* The canonical writer is src/prompts/store.ts (hash-and-file). This class historically
|
|
77
|
+
* created the inline-content shape; new installs must read whatever's actually on disk.
|
|
78
|
+
*/
|
|
79
|
+
detectSchemaShape() {
|
|
80
|
+
try {
|
|
81
|
+
const cols = this.db.prepare("PRAGMA table_info(prompt_versions)").all();
|
|
82
|
+
const names = new Set(cols.map((c) => c.name));
|
|
83
|
+
this.hasInlineContent = names.has("content");
|
|
84
|
+
this.hasVersionNumberColumn = names.has("version_number");
|
|
85
|
+
this.hasOptimizationMetadataColumn = names.has("optimization_metadata");
|
|
86
|
+
} catch {
|
|
87
|
+
this.hasInlineContent = false;
|
|
88
|
+
this.hasVersionNumberColumn = false;
|
|
89
|
+
this.hasOptimizationMetadataColumn = false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Hydrate version content from disk when the DB schema doesn't carry it inline.
|
|
94
|
+
* Mirrors src/prompts/store.ts:getVersionContentPath naming: <promptId>-<versionId>.txt.
|
|
95
|
+
* Returns empty string if the side file is missing - callers must validate.
|
|
96
|
+
*/
|
|
97
|
+
hydrateContentFromFile(promptId, versionId) {
|
|
98
|
+
const candidates = [
|
|
99
|
+
path.join(this.activeContentDir, `${promptId}-${versionId}.txt`),
|
|
100
|
+
path.join(this.archivedContentDir, `${promptId}-${versionId}.txt`)
|
|
101
|
+
];
|
|
102
|
+
for (const p of candidates) {
|
|
103
|
+
if (fs.existsSync(p)) {
|
|
104
|
+
try {
|
|
105
|
+
return fs.readFileSync(p, "utf8");
|
|
106
|
+
} catch {
|
|
107
|
+
return "";
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return "";
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Apply schema.
|
|
115
|
+
*
|
|
116
|
+
* This class previously created divergent prompts/prompt_versions tables (inline content,
|
|
117
|
+
* `version_number INTEGER NOT NULL`) that did not match the canonical writer
|
|
118
|
+
* src/prompts/store.ts (hash-and-file). On databases the canonical writer touched first,
|
|
119
|
+
* the IF NOT EXISTS made the divergent CREATE a silent no-op and `rowToVersion` then read
|
|
120
|
+
* a column that wasn't there.
|
|
121
|
+
*
|
|
122
|
+
* Now we declare the canonical hash-and-file shape so fresh databases match the canonical
|
|
123
|
+
* writer's expectations, and the legacy inline-content shape is read transparently when
|
|
124
|
+
* detected via PRAGMA in detectSchemaShape.
|
|
125
|
+
*
|
|
126
|
+
* The execution-tracking tables are owned exclusively here via schema-extensions.sql.
|
|
127
|
+
*/
|
|
128
|
+
applySchema() {
|
|
129
|
+
this.db.pragma("foreign_keys = ON");
|
|
130
|
+
this.db.exec(`
|
|
131
|
+
CREATE TABLE IF NOT EXISTS prompts (
|
|
132
|
+
id TEXT PRIMARY KEY,
|
|
133
|
+
name TEXT NOT NULL,
|
|
134
|
+
description TEXT NOT NULL DEFAULT '',
|
|
135
|
+
category TEXT NOT NULL DEFAULT 'adhoc',
|
|
136
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
137
|
+
variant TEXT,
|
|
138
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
139
|
+
auto_opt_in INTEGER DEFAULT 0,
|
|
140
|
+
current_version TEXT NOT NULL,
|
|
141
|
+
active_version_id TEXT,
|
|
142
|
+
created_at TEXT NOT NULL,
|
|
143
|
+
updated_at TEXT NOT NULL,
|
|
144
|
+
archived_at TEXT,
|
|
145
|
+
usage_count INTEGER DEFAULT 0,
|
|
146
|
+
last_used_at TEXT,
|
|
147
|
+
UNIQUE(name, category)
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
CREATE INDEX IF NOT EXISTS idx_prompts_name ON prompts(name);
|
|
151
|
+
CREATE INDEX IF NOT EXISTS idx_prompts_category ON prompts(category);
|
|
152
|
+
CREATE INDEX IF NOT EXISTS idx_prompts_active_version ON prompts(active_version_id);
|
|
153
|
+
|
|
154
|
+
CREATE TABLE IF NOT EXISTS prompt_versions (
|
|
155
|
+
id TEXT NOT NULL,
|
|
156
|
+
prompt_id TEXT NOT NULL,
|
|
157
|
+
content_hash TEXT NOT NULL,
|
|
158
|
+
changelog TEXT,
|
|
159
|
+
author TEXT,
|
|
160
|
+
is_active INTEGER DEFAULT 0,
|
|
161
|
+
is_generated INTEGER DEFAULT 0,
|
|
162
|
+
generation_model TEXT,
|
|
163
|
+
generation_prompt TEXT,
|
|
164
|
+
created_at TEXT NOT NULL,
|
|
165
|
+
activated_at TEXT,
|
|
166
|
+
deactivated_at TEXT,
|
|
167
|
+
parent_version_id TEXT,
|
|
168
|
+
mutation_type TEXT,
|
|
169
|
+
optimization_metadata TEXT,
|
|
170
|
+
generated_by TEXT,
|
|
171
|
+
activated_by TEXT,
|
|
172
|
+
performance_score REAL,
|
|
173
|
+
PRIMARY KEY (prompt_id, id),
|
|
174
|
+
FOREIGN KEY (prompt_id) REFERENCES prompts(id) ON DELETE CASCADE
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
CREATE INDEX IF NOT EXISTS idx_versions_prompt ON prompt_versions(prompt_id);
|
|
178
|
+
CREATE INDEX IF NOT EXISTS idx_versions_active ON prompt_versions(prompt_id, is_active);
|
|
179
|
+
`);
|
|
180
|
+
this.ensureActivationColumns();
|
|
181
|
+
const schemaPath = path.join(__dirname, "schema-extensions.sql");
|
|
182
|
+
if (fs.existsSync(schemaPath)) {
|
|
183
|
+
const schema = fs.readFileSync(schemaPath, "utf8");
|
|
184
|
+
this.db.exec(schema);
|
|
185
|
+
ensurePromptExecutionsCompositeForeignKey(this.db);
|
|
186
|
+
ensurePromptExecutionViews(this.db);
|
|
187
|
+
} else {
|
|
188
|
+
ensurePromptExecutionsCompositeForeignKey(this.db);
|
|
189
|
+
ensurePromptExecutionViews(this.db);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
ensureActivationColumns() {
|
|
193
|
+
const promptColumns = this.db.prepare("PRAGMA table_info(prompts)").all();
|
|
194
|
+
const promptColumnNames = new Set(promptColumns.map((col) => col.name));
|
|
195
|
+
if (!promptColumnNames.has("active_version_id")) {
|
|
196
|
+
this.db.exec("ALTER TABLE prompts ADD COLUMN active_version_id TEXT");
|
|
197
|
+
}
|
|
198
|
+
if (!promptColumnNames.has("current_version")) {
|
|
199
|
+
this.db.exec("ALTER TABLE prompts ADD COLUMN current_version TEXT");
|
|
200
|
+
this.db.exec(
|
|
201
|
+
"UPDATE prompts SET current_version = active_version_id WHERE current_version IS NULL"
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
if (!promptColumnNames.has("tags")) {
|
|
205
|
+
this.db.exec("ALTER TABLE prompts ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'");
|
|
206
|
+
}
|
|
207
|
+
if (!promptColumnNames.has("archived_at")) {
|
|
208
|
+
this.db.exec("ALTER TABLE prompts ADD COLUMN archived_at TEXT");
|
|
209
|
+
}
|
|
210
|
+
if (!promptColumnNames.has("usage_count")) {
|
|
211
|
+
this.db.exec("ALTER TABLE prompts ADD COLUMN usage_count INTEGER DEFAULT 0");
|
|
212
|
+
}
|
|
213
|
+
if (!promptColumnNames.has("last_used_at")) {
|
|
214
|
+
this.db.exec("ALTER TABLE prompts ADD COLUMN last_used_at TEXT");
|
|
215
|
+
}
|
|
216
|
+
const versionColumns = this.db.prepare("PRAGMA table_info(prompt_versions)").all();
|
|
217
|
+
const versionColumnNames = new Set(versionColumns.map((col) => col.name));
|
|
218
|
+
if (!versionColumnNames.has("activated_at")) {
|
|
219
|
+
this.db.exec("ALTER TABLE prompt_versions ADD COLUMN activated_at TEXT");
|
|
220
|
+
}
|
|
221
|
+
if (!versionColumnNames.has("deactivated_at")) {
|
|
222
|
+
this.db.exec("ALTER TABLE prompt_versions ADD COLUMN deactivated_at TEXT");
|
|
223
|
+
}
|
|
224
|
+
if (!versionColumnNames.has("optimization_metadata")) {
|
|
225
|
+
this.db.exec("ALTER TABLE prompt_versions ADD COLUMN optimization_metadata TEXT");
|
|
226
|
+
}
|
|
227
|
+
if (versionColumnNames.has("content_hash")) {
|
|
228
|
+
this.db.exec("CREATE INDEX IF NOT EXISTS idx_versions_hash ON prompt_versions(content_hash)");
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// CRUD Operations
|
|
233
|
+
// ============================================================================
|
|
234
|
+
/**
|
|
235
|
+
* Create a new prompt with initial version
|
|
236
|
+
*/
|
|
237
|
+
async createPrompt(input) {
|
|
238
|
+
const MAX_NAME_LENGTH = 255;
|
|
239
|
+
const MAX_DESCRIPTION_LENGTH = 1e3;
|
|
240
|
+
const MAX_CONTENT_SIZE = 10 * 1024 * 1024;
|
|
241
|
+
if (!input.name || input.name.trim().length === 0) {
|
|
242
|
+
throw new Error("Prompt name cannot be empty");
|
|
243
|
+
}
|
|
244
|
+
if (input.name.length > MAX_NAME_LENGTH) {
|
|
245
|
+
throw new Error(`Prompt name too long (max ${MAX_NAME_LENGTH} characters)`);
|
|
246
|
+
}
|
|
247
|
+
if (input.description && input.description.length > MAX_DESCRIPTION_LENGTH) {
|
|
248
|
+
throw new Error(`Description too long (max ${MAX_DESCRIPTION_LENGTH} characters)`);
|
|
249
|
+
}
|
|
250
|
+
if (input.initialContent.length > MAX_CONTENT_SIZE) {
|
|
251
|
+
throw new Error(
|
|
252
|
+
`Content too large (max ${MAX_CONTENT_SIZE / 1024 / 1024}MB, got ${(input.initialContent.length / 1024 / 1024).toFixed(2)}MB)`
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
const promptId = this.generateId("prompt");
|
|
256
|
+
const versionId = this.generateId("version");
|
|
257
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
258
|
+
const contentHash = crypto.createHash("sha256").update(input.initialContent).digest("hex");
|
|
259
|
+
if (!this.hasInlineContent) {
|
|
260
|
+
this.writeSideFile(promptId, versionId, input.initialContent);
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
this.db.transaction(() => {
|
|
264
|
+
if (this.hasInlineContent) {
|
|
265
|
+
this.db.prepare(
|
|
266
|
+
`INSERT INTO prompts (id, name, description, category, active_version_id, created_at, updated_at)
|
|
267
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`
|
|
268
|
+
).run(
|
|
269
|
+
promptId,
|
|
270
|
+
input.name,
|
|
271
|
+
input.description || null,
|
|
272
|
+
input.category || null,
|
|
273
|
+
versionId,
|
|
274
|
+
now,
|
|
275
|
+
now
|
|
276
|
+
);
|
|
277
|
+
this.db.prepare(
|
|
278
|
+
`INSERT INTO prompt_versions (id, prompt_id, version_number, content, created_by, is_active, created_at)
|
|
279
|
+
VALUES (?, ?, 1, ?, ?, 1, ?)`
|
|
280
|
+
).run(versionId, promptId, input.initialContent, input.createdBy || "user", now);
|
|
281
|
+
} else {
|
|
282
|
+
this.db.prepare(
|
|
283
|
+
`INSERT INTO prompts
|
|
284
|
+
(id, name, description, category, status, tags, current_version, active_version_id,
|
|
285
|
+
created_at, updated_at)
|
|
286
|
+
VALUES (?, ?, ?, ?, 'active', '[]', ?, ?, ?, ?)`
|
|
287
|
+
).run(
|
|
288
|
+
promptId,
|
|
289
|
+
input.name,
|
|
290
|
+
input.description || "",
|
|
291
|
+
input.category || "adhoc",
|
|
292
|
+
versionId,
|
|
293
|
+
versionId,
|
|
294
|
+
now,
|
|
295
|
+
now
|
|
296
|
+
);
|
|
297
|
+
this.db.prepare(
|
|
298
|
+
`INSERT INTO prompt_versions
|
|
299
|
+
(id, prompt_id, content_hash, author, generated_by, is_active, created_at, activated_at)
|
|
300
|
+
VALUES (?, ?, ?, ?, ?, 1, ?, ?)`
|
|
301
|
+
).run(
|
|
302
|
+
versionId,
|
|
303
|
+
promptId,
|
|
304
|
+
contentHash,
|
|
305
|
+
input.createdBy || "user",
|
|
306
|
+
input.createdBy || "user",
|
|
307
|
+
now,
|
|
308
|
+
now
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
})();
|
|
312
|
+
} catch (err) {
|
|
313
|
+
if (!this.hasInlineContent) {
|
|
314
|
+
this.removeSideFile(promptId, versionId);
|
|
315
|
+
}
|
|
316
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
317
|
+
if (message.includes("UNIQUE constraint failed: prompts.name") || message.includes("UNIQUE constraint failed: prompts.name, prompts.category")) {
|
|
318
|
+
throw new Error(`Prompt "${input.name}" already exists`);
|
|
319
|
+
}
|
|
320
|
+
throw err;
|
|
321
|
+
}
|
|
322
|
+
const prompt = await this.getPromptById(promptId);
|
|
323
|
+
const version = await this.getVersion(versionId);
|
|
324
|
+
return { prompt, version };
|
|
325
|
+
}
|
|
326
|
+
writeSideFile(promptId, versionId, content) {
|
|
327
|
+
if (!fs.existsSync(this.activeContentDir)) {
|
|
328
|
+
fs.mkdirSync(this.activeContentDir, { recursive: true });
|
|
329
|
+
}
|
|
330
|
+
const target = path.join(this.activeContentDir, `${promptId}-${versionId}.txt`);
|
|
331
|
+
fs.writeFileSync(target, content, "utf8");
|
|
332
|
+
}
|
|
333
|
+
removeSideFile(promptId, versionId) {
|
|
334
|
+
for (const directory of [this.activeContentDir, this.archivedContentDir]) {
|
|
335
|
+
try {
|
|
336
|
+
const target = path.join(directory, `${promptId}-${versionId}.txt`);
|
|
337
|
+
if (fs.existsSync(target)) fs.unlinkSync(target);
|
|
338
|
+
} catch {
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Get prompt by name
|
|
344
|
+
*/
|
|
345
|
+
async getPrompt(name) {
|
|
346
|
+
const stmt = this.db.prepare("SELECT * FROM prompts WHERE name = ?");
|
|
347
|
+
const row = stmt.get(name);
|
|
348
|
+
if (!row) {
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
return this.rowToPrompt(row);
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Get or create an adhoc prompt (e.g. `adhoc-<hash>`) with a real prompt + active version row.
|
|
355
|
+
*
|
|
356
|
+
* This is used to ensure ExecutionTracker can record prompt executions without FK violations
|
|
357
|
+
* when `poetic compete` is run without `--prompt`/`--save-as`.
|
|
358
|
+
*/
|
|
359
|
+
async getOrCreateAdhoc(adhocId, opts) {
|
|
360
|
+
const existing = await this.getPrompt(adhocId);
|
|
361
|
+
if (existing) {
|
|
362
|
+
const active = await this.getActiveVersion(existing.id);
|
|
363
|
+
if (active) {
|
|
364
|
+
return { promptId: existing.id, versionId: active.id };
|
|
365
|
+
}
|
|
366
|
+
const newVersion = await this.createVersion({
|
|
367
|
+
promptId: existing.id,
|
|
368
|
+
content: opts.content,
|
|
369
|
+
createdBy: "user"
|
|
370
|
+
});
|
|
371
|
+
await this.activateVersion(existing.id, newVersion.id, { skipSafetyChecks: true });
|
|
372
|
+
return { promptId: existing.id, versionId: newVersion.id };
|
|
373
|
+
}
|
|
374
|
+
try {
|
|
375
|
+
const { prompt, version } = await this.createPrompt({
|
|
376
|
+
name: adhocId,
|
|
377
|
+
initialContent: opts.content,
|
|
378
|
+
category: opts.category || "adhoc",
|
|
379
|
+
description: "Adhoc prompt from compete execution",
|
|
380
|
+
createdBy: "user"
|
|
381
|
+
});
|
|
382
|
+
return { promptId: prompt.id, versionId: version.id };
|
|
383
|
+
} catch (err) {
|
|
384
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
385
|
+
if (!message.includes("already exists")) {
|
|
386
|
+
throw err;
|
|
387
|
+
}
|
|
388
|
+
const winner = await this.getPrompt(adhocId);
|
|
389
|
+
if (!winner) {
|
|
390
|
+
throw err;
|
|
391
|
+
}
|
|
392
|
+
const active = await this.getActiveVersion(winner.id);
|
|
393
|
+
if (!active) {
|
|
394
|
+
throw new Error(`Adhoc prompt ${adhocId} exists but has no active version`);
|
|
395
|
+
}
|
|
396
|
+
return { promptId: winner.id, versionId: active.id };
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Get prompt by ID
|
|
401
|
+
*/
|
|
402
|
+
async getPromptById(id) {
|
|
403
|
+
const stmt = this.db.prepare("SELECT * FROM prompts WHERE id = ?");
|
|
404
|
+
const row = stmt.get(id);
|
|
405
|
+
if (!row) {
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
return this.rowToPrompt(row);
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* List all prompts with optional filters
|
|
412
|
+
*/
|
|
413
|
+
async listPrompts(filters) {
|
|
414
|
+
let query = "SELECT * FROM prompts";
|
|
415
|
+
const params = [];
|
|
416
|
+
if (filters?.category) {
|
|
417
|
+
query += " WHERE category = ?";
|
|
418
|
+
params.push(filters.category);
|
|
419
|
+
}
|
|
420
|
+
query += " ORDER BY updated_at DESC";
|
|
421
|
+
const stmt = this.db.prepare(query);
|
|
422
|
+
const rows = stmt.all(...params);
|
|
423
|
+
return rows.map((row) => this.rowToPrompt(row));
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Delete prompt and all versions
|
|
427
|
+
*/
|
|
428
|
+
async deletePrompt(id) {
|
|
429
|
+
const versions = this.hasInlineContent ? [] : this.db.prepare("SELECT id FROM prompt_versions WHERE prompt_id = ?").all(id);
|
|
430
|
+
const stmt = this.db.prepare("DELETE FROM prompts WHERE id = ?");
|
|
431
|
+
const result = stmt.run(id);
|
|
432
|
+
if (result.changes === 0) {
|
|
433
|
+
throw new Error(`Prompt ${id} not found`);
|
|
434
|
+
}
|
|
435
|
+
for (const version of versions) {
|
|
436
|
+
this.removeSideFile(id, version.id);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
// ============================================================================
|
|
440
|
+
// Version Management
|
|
441
|
+
// ============================================================================
|
|
442
|
+
/**
|
|
443
|
+
* Create a new version of a prompt
|
|
444
|
+
*/
|
|
445
|
+
async createVersion(input) {
|
|
446
|
+
const MAX_CONTENT_SIZE = 10 * 1024 * 1024;
|
|
447
|
+
if (input.content.length > MAX_CONTENT_SIZE) {
|
|
448
|
+
throw new Error(
|
|
449
|
+
`Content too large (max ${MAX_CONTENT_SIZE / 1024 / 1024}MB, got ${(input.content.length / 1024 / 1024).toFixed(2)}MB)`
|
|
450
|
+
);
|
|
451
|
+
}
|
|
452
|
+
const versionId = this.generateId("version");
|
|
453
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
454
|
+
const contentHash = crypto.createHash("sha256").update(input.content).digest("hex");
|
|
455
|
+
if (input.parentVersionId) {
|
|
456
|
+
const parentRow = this.db.prepare("SELECT prompt_id FROM prompt_versions WHERE id = ?").get(input.parentVersionId);
|
|
457
|
+
if (parentRow && parentRow.prompt_id !== input.promptId) {
|
|
458
|
+
throw new Error(`parentVersionId "${input.parentVersionId}" belongs to a different prompt`);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
if (!this.hasInlineContent) {
|
|
462
|
+
this.writeSideFile(input.promptId, versionId, input.content);
|
|
463
|
+
}
|
|
464
|
+
try {
|
|
465
|
+
if (this.hasInlineContent) {
|
|
466
|
+
const maxRow = this.db.prepare(
|
|
467
|
+
"SELECT MAX(version_number) as max_version FROM prompt_versions WHERE prompt_id = ?"
|
|
468
|
+
).get(input.promptId);
|
|
469
|
+
const versionNumber = (maxRow?.max_version ?? 0) + 1;
|
|
470
|
+
this.db.prepare(
|
|
471
|
+
`INSERT INTO prompt_versions (
|
|
472
|
+
id, prompt_id, version_number, content, created_by, parent_version_id,
|
|
473
|
+
optimization_metadata, is_active, created_at
|
|
474
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, 0, ?)`
|
|
475
|
+
).run(
|
|
476
|
+
versionId,
|
|
477
|
+
input.promptId,
|
|
478
|
+
versionNumber,
|
|
479
|
+
input.content,
|
|
480
|
+
input.createdBy,
|
|
481
|
+
input.parentVersionId || null,
|
|
482
|
+
input.optimizationMetadata ? JSON.stringify(input.optimizationMetadata) : null,
|
|
483
|
+
now
|
|
484
|
+
);
|
|
485
|
+
} else {
|
|
486
|
+
if (this.hasOptimizationMetadataColumn) {
|
|
487
|
+
this.db.prepare(
|
|
488
|
+
`INSERT INTO prompt_versions (
|
|
489
|
+
id, prompt_id, content_hash, author, generated_by, parent_version_id,
|
|
490
|
+
optimization_metadata, is_active, created_at
|
|
491
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, 0, ?)`
|
|
492
|
+
).run(
|
|
493
|
+
versionId,
|
|
494
|
+
input.promptId,
|
|
495
|
+
contentHash,
|
|
496
|
+
input.createdBy,
|
|
497
|
+
input.createdBy,
|
|
498
|
+
input.parentVersionId || null,
|
|
499
|
+
input.optimizationMetadata ? JSON.stringify(input.optimizationMetadata) : null,
|
|
500
|
+
now
|
|
501
|
+
);
|
|
502
|
+
} else {
|
|
503
|
+
this.db.prepare(
|
|
504
|
+
`INSERT INTO prompt_versions (
|
|
505
|
+
id, prompt_id, content_hash, author, generated_by, parent_version_id,
|
|
506
|
+
is_active, created_at
|
|
507
|
+
) VALUES (?, ?, ?, ?, ?, ?, 0, ?)`
|
|
508
|
+
).run(
|
|
509
|
+
versionId,
|
|
510
|
+
input.promptId,
|
|
511
|
+
contentHash,
|
|
512
|
+
input.createdBy,
|
|
513
|
+
input.createdBy,
|
|
514
|
+
input.parentVersionId || null,
|
|
515
|
+
now
|
|
516
|
+
);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
} catch (err) {
|
|
520
|
+
if (!this.hasInlineContent) this.removeSideFile(input.promptId, versionId);
|
|
521
|
+
throw err;
|
|
522
|
+
}
|
|
523
|
+
return await this.getVersion(versionId);
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Get version by ID
|
|
527
|
+
*/
|
|
528
|
+
async getVersion(versionId) {
|
|
529
|
+
const stmt = this.db.prepare("SELECT rowid AS rowid, * FROM prompt_versions WHERE id = ?");
|
|
530
|
+
const row = stmt.get(versionId);
|
|
531
|
+
if (!row) {
|
|
532
|
+
return null;
|
|
533
|
+
}
|
|
534
|
+
return this.rowToVersion(row);
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Get all versions for a prompt, ordered newest-first.
|
|
538
|
+
*
|
|
539
|
+
* Uses version_number when available (legacy inline schema), otherwise falls back to SQLite
|
|
540
|
+
* insertion order, which matches the order rowToVersion uses to synthesize numbers.
|
|
541
|
+
*/
|
|
542
|
+
async getVersionHistory(promptId) {
|
|
543
|
+
const orderClause = this.hasVersionNumberColumn ? "ORDER BY version_number DESC" : "ORDER BY rowid DESC";
|
|
544
|
+
const stmt = this.db.prepare(
|
|
545
|
+
`SELECT rowid AS rowid, * FROM prompt_versions WHERE prompt_id = ? ${orderClause}`
|
|
546
|
+
);
|
|
547
|
+
const rows = stmt.all(promptId);
|
|
548
|
+
if (this.hasVersionNumberColumn) {
|
|
549
|
+
return rows.map((row) => this.rowToVersion(row));
|
|
550
|
+
}
|
|
551
|
+
const versionNumbers = new Map(
|
|
552
|
+
[...rows].sort((left, right) => {
|
|
553
|
+
const leftRowId = left.rowid ?? 0;
|
|
554
|
+
const rightRowId = right.rowid ?? 0;
|
|
555
|
+
return leftRowId - rightRowId;
|
|
556
|
+
}).map((row, index) => [row.id, index + 1])
|
|
557
|
+
);
|
|
558
|
+
return [...rows].map((row) => this.rowToVersion(row, versionNumbers.get(row.id))).sort((left, right) => right.versionNumber - left.versionNumber);
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Resolve a durable version ID or a legacy numeric display selector.
|
|
562
|
+
*
|
|
563
|
+
* String IDs are the stable public identity. Numeric selectors (`2`/`v2`) remain a
|
|
564
|
+
* compatibility convenience and are deliberately resolved only within the prompt.
|
|
565
|
+
*/
|
|
566
|
+
async resolveVersionSelector(promptId, selector) {
|
|
567
|
+
const normalized = String(selector).trim();
|
|
568
|
+
if (!normalized) return null;
|
|
569
|
+
const scopedRow = this.db.prepare("SELECT rowid AS rowid, * FROM prompt_versions WHERE prompt_id = ? AND id = ?").get(promptId, normalized);
|
|
570
|
+
if (scopedRow) {
|
|
571
|
+
return this.rowToVersion(scopedRow);
|
|
572
|
+
}
|
|
573
|
+
const numericMatch = /^v?([1-9]\d*)$/.exec(normalized);
|
|
574
|
+
if (!numericMatch) return null;
|
|
575
|
+
const versionNumber = Number.parseInt(numericMatch[1], 10);
|
|
576
|
+
const versions = await this.getVersionHistory(promptId);
|
|
577
|
+
return versions.find((version) => version.versionNumber === versionNumber) ?? null;
|
|
578
|
+
}
|
|
579
|
+
/**
|
|
580
|
+
* Get version lineage (parent chain)
|
|
581
|
+
*/
|
|
582
|
+
async getVersionLineage(versionId) {
|
|
583
|
+
const lineage = [];
|
|
584
|
+
let currentId = versionId;
|
|
585
|
+
while (currentId) {
|
|
586
|
+
const version = await this.getVersion(currentId);
|
|
587
|
+
if (!version) break;
|
|
588
|
+
lineage.push(version);
|
|
589
|
+
currentId = version.parentVersionId;
|
|
590
|
+
}
|
|
591
|
+
return lineage;
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Get active version for a prompt
|
|
595
|
+
*/
|
|
596
|
+
async getActiveVersion(promptId) {
|
|
597
|
+
const stmt = this.db.prepare(
|
|
598
|
+
"SELECT rowid AS rowid, * FROM prompt_versions WHERE prompt_id = ? AND is_active = 1"
|
|
599
|
+
);
|
|
600
|
+
const row = stmt.get(promptId);
|
|
601
|
+
if (!row) {
|
|
602
|
+
return null;
|
|
603
|
+
}
|
|
604
|
+
return this.rowToVersion(row);
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Get the version that immediately precedes the active one in creation order.
|
|
608
|
+
*
|
|
609
|
+
* Walks getVersionHistory (newest-first) instead of looking up a specific version_number,
|
|
610
|
+
* which the canonical hash-and-file schema does not store.
|
|
611
|
+
*/
|
|
612
|
+
async getPreviousVersion(promptId) {
|
|
613
|
+
const active = await this.getActiveVersion(promptId);
|
|
614
|
+
if (!active) {
|
|
615
|
+
return null;
|
|
616
|
+
}
|
|
617
|
+
if (active.parentVersionId) {
|
|
618
|
+
const parent = await this.getVersion(active.parentVersionId);
|
|
619
|
+
if (parent) {
|
|
620
|
+
return parent;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
const history = await this.getVersionHistory(promptId);
|
|
624
|
+
const activeIndex = history.findIndex((v) => v.isActive);
|
|
625
|
+
if (activeIndex < 0 || activeIndex >= history.length - 1) {
|
|
626
|
+
return null;
|
|
627
|
+
}
|
|
628
|
+
return history[activeIndex + 1] ?? null;
|
|
629
|
+
}
|
|
630
|
+
// ============================================================================
|
|
631
|
+
// Activation & Safety
|
|
632
|
+
// ============================================================================
|
|
633
|
+
/**
|
|
634
|
+
* Activate a version with safety checks
|
|
635
|
+
*/
|
|
636
|
+
async activateVersion(promptId, versionId, options) {
|
|
637
|
+
this.db.transaction(() => {
|
|
638
|
+
const versionStmt = this.db.prepare("SELECT * FROM prompt_versions WHERE id = ?");
|
|
639
|
+
const versionRow = versionStmt.get(versionId);
|
|
640
|
+
if (!versionRow) {
|
|
641
|
+
throw new Error(`Version ${versionId} not found`);
|
|
642
|
+
}
|
|
643
|
+
if (versionRow.prompt_id !== promptId) {
|
|
644
|
+
throw new Error(`Version ${versionId} does not belong to prompt ${promptId}`);
|
|
645
|
+
}
|
|
646
|
+
if (!options?.skipSafetyChecks) {
|
|
647
|
+
const candidateMetrics = this.executionTracker.getMetrics(promptId, versionId);
|
|
648
|
+
if (!candidateMetrics || candidateMetrics.completedExecutions < this.MIN_EXECUTIONS) {
|
|
649
|
+
const execCount = candidateMetrics?.completedExecutions || 0;
|
|
650
|
+
throw new Error(
|
|
651
|
+
`Activation blocked: Need at least ${this.MIN_EXECUTIONS} executions (have ${execCount})`
|
|
652
|
+
);
|
|
653
|
+
}
|
|
654
|
+
if (candidateMetrics.avgSuccessRate < this.MIN_SUCCESS_RATE) {
|
|
655
|
+
throw new Error(
|
|
656
|
+
`Activation blocked: Success rate ${(candidateMetrics.avgSuccessRate * 100).toFixed(1)}% below threshold ${(this.MIN_SUCCESS_RATE * 100).toFixed(0)}%`
|
|
657
|
+
);
|
|
658
|
+
}
|
|
659
|
+
const promptStmt = this.db.prepare("SELECT active_version_id FROM prompts WHERE id = ?");
|
|
660
|
+
const promptRow = promptStmt.get(promptId);
|
|
661
|
+
if (promptRow?.active_version_id) {
|
|
662
|
+
const currentMetrics = this.executionTracker.getMetrics(
|
|
663
|
+
promptId,
|
|
664
|
+
promptRow.active_version_id
|
|
665
|
+
);
|
|
666
|
+
if (currentMetrics) {
|
|
667
|
+
const qualityDelta = candidateMetrics.avgCompleteness - currentMetrics.avgCompleteness;
|
|
668
|
+
if (qualityDelta < -this.MAX_QUALITY_REGRESSION) {
|
|
669
|
+
throw new Error(
|
|
670
|
+
`Activation blocked: Quality regression ${qualityDelta.toFixed(1)}% drop in completeness`
|
|
671
|
+
);
|
|
672
|
+
}
|
|
673
|
+
if (currentMetrics.totalCostStatus === "complete" && candidateMetrics.totalCostStatus === "complete" && currentMetrics.totalCost !== void 0 && candidateMetrics.totalCost !== void 0) {
|
|
674
|
+
const currentAvgCost = currentMetrics.totalCost / Math.max(1, currentMetrics.completedExecutions);
|
|
675
|
+
const candidateAvgCost = candidateMetrics.totalCost / Math.max(1, candidateMetrics.completedExecutions);
|
|
676
|
+
if (currentAvgCost > 0) {
|
|
677
|
+
const costMultiplier = candidateAvgCost / currentAvgCost;
|
|
678
|
+
if (costMultiplier > this.MAX_COST_MULTIPLIER) {
|
|
679
|
+
throw new Error(
|
|
680
|
+
`Activation blocked: Cost increase ${costMultiplier.toFixed(1)}x exceeds ${this.MAX_COST_MULTIPLIER}x threshold`
|
|
681
|
+
);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
performActivation(this.db, { promptId, versionId });
|
|
689
|
+
})();
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Rollback to a specific version
|
|
693
|
+
*/
|
|
694
|
+
async rollbackToVersion(promptId, targetVersionId) {
|
|
695
|
+
await this.activateVersion(promptId, targetVersionId, { skipSafetyChecks: true });
|
|
696
|
+
}
|
|
697
|
+
// ============================================================================
|
|
698
|
+
// Metrics Integration
|
|
699
|
+
// ============================================================================
|
|
700
|
+
/**
|
|
701
|
+
* Record execution for a prompt version
|
|
702
|
+
* (Delegates to ExecutionTracker)
|
|
703
|
+
*/
|
|
704
|
+
async recordExecution(input) {
|
|
705
|
+
return this.executionTracker.startExecution(input);
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Get execution metrics for a prompt version
|
|
709
|
+
* (Delegates to ExecutionTracker)
|
|
710
|
+
*/
|
|
711
|
+
getExecutionMetrics(promptId, versionId) {
|
|
712
|
+
return this.executionTracker.getMetrics(promptId, versionId);
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* Get all executions for a prompt version
|
|
716
|
+
*/
|
|
717
|
+
getExecutions(promptId, versionId) {
|
|
718
|
+
return this.executionTracker.getExecutions(promptId, versionId);
|
|
719
|
+
}
|
|
720
|
+
// ============================================================================
|
|
721
|
+
// Lifecycle
|
|
722
|
+
// ============================================================================
|
|
723
|
+
/**
|
|
724
|
+
* Close database connection (only if owned)
|
|
725
|
+
*/
|
|
726
|
+
close() {
|
|
727
|
+
this.executionTracker.close();
|
|
728
|
+
if (this.ownsDb) {
|
|
729
|
+
this.db.close();
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
/**
|
|
733
|
+
* Get database path (for testing)
|
|
734
|
+
*/
|
|
735
|
+
getDatabasePath() {
|
|
736
|
+
return this.dbPath;
|
|
737
|
+
}
|
|
738
|
+
// ============================================================================
|
|
739
|
+
// Private Helpers
|
|
740
|
+
// ============================================================================
|
|
741
|
+
generateId(prefix) {
|
|
742
|
+
return `${prefix}-${Date.now()}-${crypto.randomBytes(4).toString("hex")}`;
|
|
743
|
+
}
|
|
744
|
+
rowToPrompt(row) {
|
|
745
|
+
return {
|
|
746
|
+
id: row.id,
|
|
747
|
+
name: row.name,
|
|
748
|
+
description: row.description || void 0,
|
|
749
|
+
category: row.category || void 0,
|
|
750
|
+
activeVersionId: row.active_version_id || void 0,
|
|
751
|
+
createdAt: row.created_at,
|
|
752
|
+
updatedAt: row.updated_at
|
|
753
|
+
};
|
|
754
|
+
}
|
|
755
|
+
rowToVersion(row, versionNumberOverride) {
|
|
756
|
+
const createdByRaw = row.created_by ?? row.generated_by ?? row.author ?? "user";
|
|
757
|
+
const createdBy = createdByRaw === "auto-optimizer" || createdByRaw === "variant-generator" ? createdByRaw : "user";
|
|
758
|
+
let content = row.content;
|
|
759
|
+
if (content === void 0 || content === null) {
|
|
760
|
+
content = this.hydrateContentFromFile(row.prompt_id, row.id);
|
|
761
|
+
}
|
|
762
|
+
let versionNumber = versionNumberOverride ?? row.version_number;
|
|
763
|
+
if (typeof versionNumber !== "number") {
|
|
764
|
+
versionNumber = this.computeVersionNumber(row.prompt_id, row.id);
|
|
765
|
+
}
|
|
766
|
+
return {
|
|
767
|
+
id: row.id,
|
|
768
|
+
promptId: row.prompt_id,
|
|
769
|
+
versionNumber,
|
|
770
|
+
content,
|
|
771
|
+
createdBy,
|
|
772
|
+
parentVersionId: row.parent_version_id || void 0,
|
|
773
|
+
optimizationMetadata: row.optimization_metadata ? parseJsonWithContext(
|
|
774
|
+
row.optimization_metadata,
|
|
775
|
+
"PromptVersionStore.optimizationMetadata"
|
|
776
|
+
) : void 0,
|
|
777
|
+
isActive: row.is_active === 1,
|
|
778
|
+
createdAt: row.created_at
|
|
779
|
+
};
|
|
780
|
+
}
|
|
781
|
+
/**
|
|
782
|
+
* Compute a 1-based version number by ordering all versions of a prompt by insertion order.
|
|
783
|
+
* Used as a fallback when the live schema has no version_number column.
|
|
784
|
+
*/
|
|
785
|
+
computeVersionNumber(promptId, versionId) {
|
|
786
|
+
try {
|
|
787
|
+
const rows = this.db.prepare("SELECT id FROM prompt_versions WHERE prompt_id = ? ORDER BY rowid ASC").all(promptId);
|
|
788
|
+
const idx = rows.findIndex((r) => r.id === versionId);
|
|
789
|
+
return idx >= 0 ? idx + 1 : 1;
|
|
790
|
+
} catch {
|
|
791
|
+
return 1;
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
/**
|
|
795
|
+
* Resolve a prompt by either its id or its name. Prefers id (exact PK match), falls back to name.
|
|
796
|
+
*
|
|
797
|
+
* The CLI's prompt list output exposes `id`, but compete --prompt previously only resolved by
|
|
798
|
+
* name. This unifies both paths so users can pass either identifier.
|
|
799
|
+
*/
|
|
800
|
+
async getPromptByIdOrName(idOrName) {
|
|
801
|
+
const byId = await this.getPromptById(idOrName);
|
|
802
|
+
if (byId) return byId;
|
|
803
|
+
return this.getPrompt(idOrName);
|
|
804
|
+
}
|
|
805
|
+
};
|
|
806
|
+
|
|
807
|
+
export {
|
|
808
|
+
PromptVersionStore
|
|
809
|
+
};
|
|
810
|
+
//# sourceMappingURL=chunk-LR5IJIGV.js.map
|