@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,878 @@
1
+ import {
2
+ logDebug
3
+ } from "./chunk-V72RMBM4.js";
4
+ import {
5
+ parseJsonWithContext
6
+ } from "./chunk-QVZMFDYG.js";
7
+ import {
8
+ getStateDir
9
+ } from "./chunk-UUH2RVKS.js";
10
+
11
+ // src/core/process-registry.ts
12
+ import { execFileSync } from "child_process";
13
+ import fs from "fs";
14
+ import path from "path";
15
+ import { promisify } from "util";
16
+
17
+ // src/core/process-command-matcher.ts
18
+ var CLI_COMMANDS = /* @__PURE__ */ new Set([
19
+ "backlog",
20
+ "cleanup",
21
+ "codex",
22
+ "compete",
23
+ "config",
24
+ "flywheel",
25
+ "doctor",
26
+ "monitor",
27
+ "next",
28
+ "plan",
29
+ "processes",
30
+ "run",
31
+ "sprint",
32
+ "status",
33
+ "task",
34
+ "worktree"
35
+ ]);
36
+ var GLOBAL_OPTIONS_WITH_VALUE = /* @__PURE__ */ new Set(["--config", "--cwd", "--profile"]);
37
+ function tokenizeCommand(command) {
38
+ return (command.match(/"[^"]*"|'[^']*'|\S+/g) ?? []).map((token) => token.replace(/^['"]|['"]$/g, "")).filter(Boolean);
39
+ }
40
+ function isEntryPointToken(token) {
41
+ const basename = token.split("/").at(-1);
42
+ return basename === "poetic" || token.endsWith("/dist/entry.js") || token.endsWith("/src/cli/entry.ts");
43
+ }
44
+ function findPoeticCommandToken(tokens, startIndex) {
45
+ for (let index = startIndex; index < Math.min(tokens.length, startIndex + 8); index++) {
46
+ const token = tokens[index];
47
+ if (!token) continue;
48
+ if (token === "--") continue;
49
+ if (GLOBAL_OPTIONS_WITH_VALUE.has(token)) {
50
+ index++;
51
+ continue;
52
+ }
53
+ if (token.startsWith("--")) {
54
+ continue;
55
+ }
56
+ return token;
57
+ }
58
+ return void 0;
59
+ }
60
+ function isPoeticCliInvocation(command) {
61
+ const tokens = tokenizeCommand(command);
62
+ for (let index = 0; index < Math.min(tokens.length, 8); index++) {
63
+ const token = tokens[index];
64
+ if (token?.includes("{")) break;
65
+ if (!token || !isEntryPointToken(token)) continue;
66
+ const commandToken = findPoeticCommandToken(tokens, index + 1);
67
+ if (commandToken && CLI_COMMANDS.has(commandToken)) return true;
68
+ }
69
+ return false;
70
+ }
71
+ function isVitestWorkerInvocation(command) {
72
+ return command.includes("vitest/dist/workers/forks.js");
73
+ }
74
+
75
+ // src/core/process-registry.ts
76
+ var mkdir = promisify(fs.mkdir);
77
+ var readFile = promisify(fs.readFile);
78
+ var writeFile = promisify(fs.writeFile);
79
+ var unlink = promisify(fs.unlink);
80
+ var rename = promisify(fs.rename);
81
+ function mergeScannerObservation(existing, observed) {
82
+ const scannerOwned = existing.source === "scanner" && existing.type === "detected";
83
+ return {
84
+ ...existing,
85
+ command: observed.command || existing.command,
86
+ parentPid: observed.parentPid ?? existing.parentPid,
87
+ lastSeenAt: scannerOwned ? observed.lastSeenAt : existing.lastSeenAt,
88
+ health: scannerOwned ? observed.health : existing.health
89
+ };
90
+ }
91
+ function isIntentionallyDetachedProcess(entry) {
92
+ return entry.category === "worker" && entry.metadata?.detached === true;
93
+ }
94
+ function secondsSince(timestamp, now) {
95
+ const observedAt = new Date(timestamp).getTime();
96
+ const age = (now - observedAt) / 1e3;
97
+ return Number.isFinite(age) ? age : void 0;
98
+ }
99
+ function isStaleByRegistryPolicy(entry, maxAge, now = Date.now()) {
100
+ const lastSeenAge = secondsSince(entry.lastSeenAt, now);
101
+ if (lastSeenAge === void 0) return false;
102
+ if (isIntentionallyDetachedProcess(entry)) {
103
+ return entry.ttl !== void 0 && lastSeenAge > entry.ttl;
104
+ }
105
+ if (lastSeenAge > maxAge) {
106
+ return true;
107
+ }
108
+ if (entry.ttl !== void 0) {
109
+ const runtime = secondsSince(entry.startedAt, now);
110
+ return runtime !== void 0 && runtime > entry.ttl;
111
+ }
112
+ return false;
113
+ }
114
+ function normalizeCommandForIdentity(command) {
115
+ return (command ?? "").replace(/\s+/g, " ").trim();
116
+ }
117
+ function tokenizeCommandForIdentity(command) {
118
+ const tokens = command.match(/"[^"]*"|'[^']*'|\S+/g) ?? [];
119
+ const identityTokens = [];
120
+ let skippingAnnotation = false;
121
+ for (const rawToken of tokens) {
122
+ const token = rawToken.replace(/^['"]|['"]$/g, "");
123
+ if (token.startsWith("(")) {
124
+ skippingAnnotation = !token.endsWith(")");
125
+ continue;
126
+ }
127
+ if (skippingAnnotation) {
128
+ skippingAnnotation = !token.endsWith(")");
129
+ continue;
130
+ }
131
+ identityTokens.push(token);
132
+ }
133
+ return identityTokens;
134
+ }
135
+ function commandTokenMatches(liveToken, expectedToken) {
136
+ if (liveToken === expectedToken) return true;
137
+ const liveBase = path.basename(liveToken);
138
+ const expectedBase = path.basename(expectedToken);
139
+ return liveBase === expectedBase && liveBase.length > 0 && expectedBase.length > 0;
140
+ }
141
+ var BACKGROUND_WORKER_DISPLAY_LABEL = "poetic compete (background worker)";
142
+ function isBackgroundWorkerDisplayLabel(command) {
143
+ return normalizeCommandForIdentity(command) === BACKGROUND_WORKER_DISPLAY_LABEL;
144
+ }
145
+ function isNodeWorkerJsCommand(command) {
146
+ const tokens = tokenizeCommandForIdentity(normalizeCommandForIdentity(command));
147
+ const hasNode = tokens.some((token) => {
148
+ const base = path.basename(token);
149
+ return base === "node" || base === "node.exe";
150
+ });
151
+ const hasWorkerJs = tokens.some((token) => path.basename(token) === "worker.js");
152
+ return hasNode && hasWorkerJs;
153
+ }
154
+ function hasOrderedCommandTokenMatch(liveTokens, expectedTokens) {
155
+ if (expectedTokens.length === 0 || expectedTokens.length > liveTokens.length) {
156
+ return false;
157
+ }
158
+ for (let start = 0; start <= liveTokens.length - expectedTokens.length; start++) {
159
+ const matches = expectedTokens.every(
160
+ (token, offset) => commandTokenMatches(liveTokens[start + offset], token)
161
+ );
162
+ if (matches) return true;
163
+ }
164
+ return false;
165
+ }
166
+ function commandMatchesRegistryEntry(liveCommand, expectedCommand) {
167
+ const live = normalizeCommandForIdentity(liveCommand);
168
+ const expected = normalizeCommandForIdentity(expectedCommand);
169
+ if (!expected || !live) return false;
170
+ if (live === expected) return true;
171
+ if (isBackgroundWorkerDisplayLabel(expected) && isNodeWorkerJsCommand(live) || isBackgroundWorkerDisplayLabel(live) && isNodeWorkerJsCommand(expected)) {
172
+ return true;
173
+ }
174
+ return hasOrderedCommandTokenMatch(
175
+ tokenizeCommandForIdentity(live),
176
+ tokenizeCommandForIdentity(expected)
177
+ );
178
+ }
179
+ var RegistryStateAccessError = class extends Error {
180
+ operation;
181
+ stateDir;
182
+ registryPath;
183
+ code;
184
+ remediation;
185
+ constructor(params) {
186
+ const causeMessage = params.cause instanceof Error ? params.cause.message : String(params.cause);
187
+ const remediation = params.remediation ?? buildRegistryStateRemediation(params.code, params.stateDir);
188
+ const message = [
189
+ `Cannot ${params.operation} process registry state at ${params.stateDir}`,
190
+ `(${params.code}: ${causeMessage}).`,
191
+ remediation.join(" ")
192
+ ].join(" ");
193
+ super(message);
194
+ this.name = "RegistryStateAccessError";
195
+ this.operation = params.operation;
196
+ this.stateDir = params.stateDir;
197
+ this.registryPath = params.registryPath;
198
+ this.code = params.code;
199
+ this.remediation = remediation;
200
+ }
201
+ };
202
+ function buildRegistryStateRemediation(code, stateDir) {
203
+ const lockPath = path.join(stateDir, "processes.json.lock");
204
+ switch (code) {
205
+ case "EPERM":
206
+ case "EACCES":
207
+ return [
208
+ "The registry directory is not writable from this process (permission denied or sandbox lock).",
209
+ `Verify ownership and mode: ls -la ${stateDir}`,
210
+ "If running inside a sandboxed agent shell, export XDG_STATE_HOME to a writable temp directory."
211
+ ];
212
+ case "LOCK_TIMEOUT":
213
+ return [
214
+ "Another poetic process may be updating the shared process registry.",
215
+ `If no other \`poetic\` command is running, remove a stale lock: rm ${lockPath}`
216
+ ];
217
+ default:
218
+ return [`Registry files live under ${stateDir}.`];
219
+ }
220
+ }
221
+ function asErrnoException(error) {
222
+ return typeof error === "object" && error !== null ? error : void 0;
223
+ }
224
+ function throwRegistryStateAccessError(operation, stateDir, registryPath, error) {
225
+ const err = asErrnoException(error);
226
+ throw new RegistryStateAccessError({
227
+ operation,
228
+ stateDir,
229
+ registryPath,
230
+ code: err?.code ?? "UNKNOWN",
231
+ cause: error
232
+ });
233
+ }
234
+ function throwLockAcquisitionFailed(stateDir, registryPath) {
235
+ throw new RegistryStateAccessError({
236
+ operation: "acquire registry lock",
237
+ stateDir,
238
+ registryPath,
239
+ code: "LOCK_TIMEOUT",
240
+ cause: new Error(`Timed out waiting for ${path.basename(registryPath)}.lock`),
241
+ remediation: buildRegistryStateRemediation("LOCK_TIMEOUT", stateDir)
242
+ });
243
+ }
244
+ function getProcessRegistryStateDirectory() {
245
+ return getStateDir();
246
+ }
247
+ var registryPathMutexTails = /* @__PURE__ */ new Map();
248
+ function __testOnlyGetRegistryPathMutexCount() {
249
+ return registryPathMutexTails.size;
250
+ }
251
+ async function runExclusiveOnRegistryPath(key, fn) {
252
+ const previous = registryPathMutexTails.get(key) ?? Promise.resolve();
253
+ let release;
254
+ const current = new Promise((resolve) => {
255
+ release = resolve;
256
+ });
257
+ const tail = previous.then(() => current);
258
+ registryPathMutexTails.set(key, tail);
259
+ await previous;
260
+ try {
261
+ return await fn();
262
+ } finally {
263
+ release();
264
+ if (registryPathMutexTails.get(key) === tail) {
265
+ registryPathMutexTails.delete(key);
266
+ }
267
+ }
268
+ }
269
+ var FileLock = class {
270
+ lockPath;
271
+ lockAcquired = false;
272
+ maxRetries = 10;
273
+ retryDelay = 50;
274
+ // ms
275
+ constructor(filePath) {
276
+ this.lockPath = `${filePath}.lock`;
277
+ }
278
+ isPidAlive(pid) {
279
+ if (!Number.isFinite(pid) || pid <= 0) return false;
280
+ if (pid === process.pid) return true;
281
+ try {
282
+ process.kill(pid, 0);
283
+ return true;
284
+ } catch (error) {
285
+ const err = error;
286
+ return err?.code === "EPERM";
287
+ }
288
+ }
289
+ async acquire() {
290
+ await mkdir(path.dirname(this.lockPath), { recursive: true, mode: 448 });
291
+ for (let i = 0; i < this.maxRetries; i++) {
292
+ try {
293
+ await writeFile(this.lockPath, `${process.pid}`, { flag: "wx" });
294
+ this.lockAcquired = true;
295
+ return true;
296
+ } catch (error) {
297
+ const err = error;
298
+ if (err.code !== "EEXIST") {
299
+ throw error;
300
+ }
301
+ try {
302
+ const stats = await fs.promises.stat(this.lockPath);
303
+ const age = Date.now() - stats.mtimeMs;
304
+ if (age > 1e3) {
305
+ const lockPid = await readFile(this.lockPath, "utf8").then((value) => Number.parseInt(value.trim(), 10)).catch(() => Number.NaN);
306
+ if (Number.isFinite(lockPid) && this.isPidAlive(lockPid)) {
307
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelay));
308
+ continue;
309
+ }
310
+ const stalePath = `${this.lockPath}.stale.${Date.now()}.${process.pid}`;
311
+ try {
312
+ await fs.promises.rename(this.lockPath, stalePath);
313
+ await fs.promises.unlink(stalePath);
314
+ continue;
315
+ } catch (renameError) {
316
+ const renameErr = renameError;
317
+ if (renameErr.code === "ENOENT") {
318
+ continue;
319
+ }
320
+ }
321
+ }
322
+ } catch (statError) {
323
+ const statErr = statError;
324
+ if (statErr.code === "ENOENT") {
325
+ continue;
326
+ }
327
+ }
328
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelay));
329
+ }
330
+ }
331
+ return false;
332
+ }
333
+ async release() {
334
+ if (this.lockAcquired) {
335
+ await unlink(this.lockPath).catch(() => {
336
+ });
337
+ this.lockAcquired = false;
338
+ }
339
+ }
340
+ };
341
+ var ProcessRegistry = class {
342
+ verbose;
343
+ constructor(options = {}) {
344
+ this.verbose = options.verbose ?? false;
345
+ }
346
+ /**
347
+ * Resolved per access rather than captured in the constructor. The exported
348
+ * singleton below is constructed at module load, so a frozen path would ignore
349
+ * any state root resolved after import and write to a root nothing else reads.
350
+ * This is the same defect the machine-id resolver had before #2556.
351
+ */
352
+ get stateDir() {
353
+ return getProcessRegistryStateDirectory();
354
+ }
355
+ get registryPath() {
356
+ return path.join(this.stateDir, "processes.json");
357
+ }
358
+ /**
359
+ * Initialize registry (create directory if needed)
360
+ */
361
+ async init() {
362
+ try {
363
+ await mkdir(this.stateDir, { recursive: true, mode: 448 });
364
+ } catch (error) {
365
+ throwRegistryStateAccessError("initialize", this.stateDir, this.registryPath, error);
366
+ }
367
+ }
368
+ /**
369
+ * Register a process in the shared registry
370
+ */
371
+ async register(entry) {
372
+ await runExclusiveOnRegistryPath(this.registryPath, async () => {
373
+ const lock = new FileLock(this.registryPath);
374
+ try {
375
+ if (!await lock.acquire()) {
376
+ throwLockAcquisitionFailed(this.stateDir, this.registryPath);
377
+ }
378
+ const registry = await this.read();
379
+ const fullEntry = {
380
+ ...entry,
381
+ lastSeenAt: (/* @__PURE__ */ new Date()).toISOString()
382
+ };
383
+ const index = registry.findIndex((e) => e.pid === entry.pid);
384
+ if (index >= 0) {
385
+ const existing = registry[index];
386
+ registry.splice(
387
+ index,
388
+ 1,
389
+ entry.source === "scanner" ? mergeScannerObservation(existing, fullEntry) : fullEntry
390
+ );
391
+ } else {
392
+ registry.push(fullEntry);
393
+ }
394
+ await this.write(registry);
395
+ if (this.verbose) {
396
+ logDebug("Registry", `Registered PID ${entry.pid} (${entry.category})`);
397
+ }
398
+ } finally {
399
+ await lock.release();
400
+ }
401
+ });
402
+ }
403
+ /**
404
+ * Unregister a process
405
+ */
406
+ async unregister(pid, expectedStartedAt) {
407
+ await runExclusiveOnRegistryPath(this.registryPath, async () => {
408
+ const lock = new FileLock(this.registryPath);
409
+ try {
410
+ if (!await lock.acquire()) {
411
+ throwLockAcquisitionFailed(this.stateDir, this.registryPath);
412
+ }
413
+ const registry = await this.read();
414
+ const index = registry.findIndex((e) => e.pid === pid);
415
+ if (index >= 0) {
416
+ const existing = registry[index];
417
+ if (expectedStartedAt !== void 0 && existing.startedAt !== expectedStartedAt) {
418
+ if (this.verbose) {
419
+ logDebug("Registry", `Skipped unregister for PID ${pid}: start identity changed`);
420
+ }
421
+ return;
422
+ }
423
+ registry.splice(index, 1);
424
+ await this.write(registry);
425
+ if (this.verbose) {
426
+ logDebug("Registry", `Unregistered PID ${pid}`);
427
+ }
428
+ }
429
+ } finally {
430
+ await lock.release();
431
+ }
432
+ });
433
+ }
434
+ /**
435
+ * Get all registered processes
436
+ */
437
+ async getAll() {
438
+ return this.read();
439
+ }
440
+ /**
441
+ * Get processes by task ID
442
+ */
443
+ async getByTaskId(taskId) {
444
+ const registry = await this.read();
445
+ return registry.filter((e) => e.taskId === taskId);
446
+ }
447
+ /**
448
+ * Get orphaned processes (PPID=1 or parent doesn't exist)
449
+ */
450
+ async getOrphaned() {
451
+ const registry = await this.read();
452
+ return registry.filter(
453
+ (e) => !isIntentionallyDetachedProcess(e) && (e.health === "orphaned" || this.isOrphaned(e.pid))
454
+ );
455
+ }
456
+ /**
457
+ * Get stale processes (not updated for maxAge seconds)
458
+ */
459
+ async getStale(maxAge) {
460
+ const registry = await this.read();
461
+ const now = Date.now();
462
+ return registry.filter((e) => isStaleByRegistryPolicy(e, maxAge, now));
463
+ }
464
+ /**
465
+ * Scan registry and update health status for all entries
466
+ */
467
+ async scan() {
468
+ return runExclusiveOnRegistryPath(this.registryPath, async () => {
469
+ const lock = new FileLock(this.registryPath);
470
+ try {
471
+ if (!await lock.acquire()) {
472
+ throwLockAcquisitionFailed(this.stateDir, this.registryPath);
473
+ }
474
+ const registry = (await this.read()).filter(
475
+ (entry) => this.shouldKeepEntryDuringScan(entry)
476
+ );
477
+ const result = {
478
+ totalProcesses: registry.length,
479
+ healthyCount: 0,
480
+ orphanedCount: 0,
481
+ staleCount: 0,
482
+ zombieCount: 0,
483
+ orphanedPids: []
484
+ };
485
+ for (const entry of registry) {
486
+ entry.health = this.checkHealth(entry);
487
+ switch (entry.health) {
488
+ case "healthy":
489
+ result.healthyCount++;
490
+ break;
491
+ case "orphaned":
492
+ result.orphanedCount++;
493
+ result.orphanedPids.push(entry.pid);
494
+ break;
495
+ case "stale":
496
+ result.staleCount++;
497
+ break;
498
+ case "zombie":
499
+ result.zombieCount++;
500
+ break;
501
+ }
502
+ }
503
+ await this.write(registry);
504
+ return result;
505
+ } finally {
506
+ await lock.release();
507
+ }
508
+ });
509
+ }
510
+ /**
511
+ * Cleanup processes matching criteria
512
+ */
513
+ async cleanup(options = {}) {
514
+ const registry = await this.read();
515
+ const result = {
516
+ attempted: 0,
517
+ killed: 0,
518
+ failed: 0,
519
+ pids: [],
520
+ errors: []
521
+ };
522
+ let targets = registry;
523
+ const { category, health, olderThan, pids, type } = options;
524
+ if (health) {
525
+ targets = targets.filter((e) => health.includes(e.health));
526
+ }
527
+ if (pids) {
528
+ const targetPids = new Set(pids);
529
+ targets = targets.filter((e) => targetPids.has(e.pid));
530
+ }
531
+ if (type) {
532
+ targets = targets.filter((e) => type.includes(e.type));
533
+ }
534
+ if (category) {
535
+ targets = targets.filter((e) => category.includes(e.category));
536
+ }
537
+ if (olderThan) {
538
+ const cutoff = Date.now() - olderThan * 1e3;
539
+ targets = targets.filter((e) => {
540
+ const started = new Date(e.startedAt).getTime();
541
+ return started < cutoff;
542
+ });
543
+ }
544
+ result.attempted = targets.length;
545
+ if (options.dryRun) {
546
+ result.pids = targets.map((e) => e.pid);
547
+ return result;
548
+ }
549
+ const termSent = /* @__PURE__ */ new Set();
550
+ for (const entry of targets) {
551
+ try {
552
+ if (!this.processIdentityMatches(entry)) {
553
+ result.failed++;
554
+ result.errors.push({
555
+ pid: entry.pid,
556
+ error: "Live process identity no longer matches registry entry; skipping kill"
557
+ });
558
+ continue;
559
+ }
560
+ process.kill(entry.pid, "SIGTERM");
561
+ termSent.add(entry.pid);
562
+ result.killed++;
563
+ result.pids.push(entry.pid);
564
+ if (this.verbose) {
565
+ logDebug("Registry", `Killed PID ${entry.pid} (${entry.category})`);
566
+ }
567
+ } catch (error) {
568
+ result.failed++;
569
+ const errorMessage = error instanceof Error ? error.message : String(error);
570
+ result.errors.push({
571
+ pid: entry.pid,
572
+ error: errorMessage
573
+ });
574
+ }
575
+ }
576
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
577
+ for (const entry of targets) {
578
+ if (!termSent.has(entry.pid)) continue;
579
+ if (!this.isRunning(entry.pid)) continue;
580
+ if (!this.processIdentityMatches(entry)) continue;
581
+ try {
582
+ process.kill(entry.pid, "SIGKILL");
583
+ if (this.verbose) {
584
+ console.log(`[Registry] Force killed PID ${entry.pid}`);
585
+ }
586
+ } catch (_error) {
587
+ }
588
+ }
589
+ await this.prune();
590
+ return result;
591
+ }
592
+ /**
593
+ * Remove entries for processes that no longer exist
594
+ */
595
+ async prune() {
596
+ await runExclusiveOnRegistryPath(this.registryPath, async () => {
597
+ const lock = new FileLock(this.registryPath);
598
+ try {
599
+ if (!await lock.acquire()) {
600
+ throwLockAcquisitionFailed(this.stateDir, this.registryPath);
601
+ }
602
+ const registry = await this.read();
603
+ const alive = registry.filter((entry) => this.shouldRetainLiveEntry(entry));
604
+ if (alive.length !== registry.length) {
605
+ await this.write(alive);
606
+ if (this.verbose) {
607
+ logDebug("Registry", `Pruned ${registry.length - alive.length} dead processes`);
608
+ }
609
+ }
610
+ } finally {
611
+ await lock.release();
612
+ }
613
+ });
614
+ }
615
+ /**
616
+ * Check if process is still running
617
+ */
618
+ isRunning(pid) {
619
+ if (!Number.isSafeInteger(pid) || pid <= 0) {
620
+ return false;
621
+ }
622
+ try {
623
+ process.kill(pid, 0);
624
+ return true;
625
+ } catch {
626
+ return false;
627
+ }
628
+ }
629
+ getLiveCommand(pid) {
630
+ if (!Number.isSafeInteger(pid) || pid <= 0) {
631
+ return void 0;
632
+ }
633
+ try {
634
+ if (process.platform === "win32") {
635
+ const commandLine = execFileSync(
636
+ "powershell",
637
+ [
638
+ "-NoProfile",
639
+ "-Command",
640
+ `(Get-CimInstance Win32_Process -Filter "ProcessId = ${pid}").CommandLine`
641
+ ],
642
+ {
643
+ timeout: 3e4,
644
+ stdio: ["pipe", "pipe", "ignore"],
645
+ encoding: "utf-8"
646
+ }
647
+ ).trim();
648
+ return commandLine || void 0;
649
+ }
650
+ const command = execFileSync("ps", ["-o", "command=", "-p", String(pid)], {
651
+ timeout: 3e4,
652
+ stdio: ["pipe", "pipe", "ignore"],
653
+ encoding: "utf-8"
654
+ }).trim();
655
+ return command || void 0;
656
+ } catch {
657
+ return void 0;
658
+ }
659
+ }
660
+ processIdentityStatus(entry) {
661
+ const liveCommand = this.getLiveCommand(entry.pid);
662
+ if (liveCommand === void 0) {
663
+ return "unknown";
664
+ }
665
+ return commandMatchesRegistryEntry(liveCommand, entry.command) ? "match" : "mismatch";
666
+ }
667
+ processIdentityMatches(entry) {
668
+ return this.processIdentityStatus(entry) === "match";
669
+ }
670
+ shouldRetainLiveEntry(entry) {
671
+ return this.isRunning(entry.pid) && this.processIdentityStatus(entry) !== "mismatch";
672
+ }
673
+ getWindowsParentPid(pid) {
674
+ if (!Number.isSafeInteger(pid) || pid <= 0) {
675
+ return null;
676
+ }
677
+ const ppidStr = execFileSync(
678
+ "powershell",
679
+ [
680
+ "-NoProfile",
681
+ "-Command",
682
+ `(Get-CimInstance Win32_Process -Filter "ProcessId = ${pid}").ParentProcessId`
683
+ ],
684
+ {
685
+ timeout: 3e4,
686
+ stdio: ["pipe", "pipe", "ignore"],
687
+ encoding: "utf-8"
688
+ }
689
+ ).trim();
690
+ if (!ppidStr) {
691
+ return null;
692
+ }
693
+ const parentPid = Number.parseInt(ppidStr, 10);
694
+ return Number.isFinite(parentPid) ? parentPid : null;
695
+ }
696
+ /**
697
+ * Check if process is orphaned (PPID=1)
698
+ * Uses platform-specific detection:
699
+ * - macOS/Linux: ps command to check PPID
700
+ * - Windows: PowerShell/CIM query for ParentProcessId
701
+ */
702
+ isOrphaned(pid) {
703
+ try {
704
+ if (!Number.isSafeInteger(pid) || pid <= 0) {
705
+ return false;
706
+ }
707
+ const platform = process.platform;
708
+ if (platform === "win32") {
709
+ const parentPid = this.getWindowsParentPid(pid);
710
+ if (!parentPid || parentPid <= 0) {
711
+ return false;
712
+ }
713
+ return !this.isRunning(parentPid);
714
+ }
715
+ const ppidStr = execFileSync("ps", ["-o", "ppid=", "-p", String(pid)], {
716
+ timeout: 3e4,
717
+ stdio: ["pipe", "pipe", "ignore"],
718
+ // Suppress stderr
719
+ encoding: "utf-8"
720
+ }).trim();
721
+ const ppid = Number.parseInt(ppidStr, 10);
722
+ return ppid === 1;
723
+ } catch {
724
+ return false;
725
+ }
726
+ }
727
+ /**
728
+ * Determine health status of a process
729
+ */
730
+ checkHealth(entry) {
731
+ if (!this.isRunning(entry.pid)) {
732
+ return "zombie";
733
+ }
734
+ if (this.processIdentityStatus(entry) === "mismatch") {
735
+ return "zombie";
736
+ }
737
+ if (isIntentionallyDetachedProcess(entry)) {
738
+ if (isStaleByRegistryPolicy(entry, 3600)) {
739
+ return "stale";
740
+ }
741
+ return "healthy";
742
+ }
743
+ if (isStaleByRegistryPolicy(entry, 3600)) {
744
+ return "stale";
745
+ }
746
+ if (this.isOrphaned(entry.pid)) {
747
+ return "orphaned";
748
+ }
749
+ return "healthy";
750
+ }
751
+ isStillDetectable(entry) {
752
+ if (entry.source !== "scanner" || entry.type !== "detected") {
753
+ return true;
754
+ }
755
+ if (entry.category === "cli") {
756
+ return isPoeticCliInvocation(entry.command);
757
+ }
758
+ if (entry.category === "test") {
759
+ return isVitestWorkerInvocation(entry.command);
760
+ }
761
+ return true;
762
+ }
763
+ shouldKeepEntryDuringScan(entry) {
764
+ if (!this.isStillDetectable(entry)) {
765
+ return false;
766
+ }
767
+ if (entry.source === "scanner" && entry.type === "detected") {
768
+ return this.shouldRetainLiveEntry(entry);
769
+ }
770
+ return true;
771
+ }
772
+ /**
773
+ * Read registry from disk
774
+ */
775
+ async read() {
776
+ try {
777
+ const data = await readFile(this.registryPath, "utf-8");
778
+ return parseJsonWithContext(data, "process registry from disk");
779
+ } catch (error) {
780
+ const err = error;
781
+ if (err.code === "ENOENT") {
782
+ return [];
783
+ }
784
+ const errorMessage = error instanceof Error ? error.message : String(error);
785
+ if (err.code === "EPERM" || err.code === "EACCES") {
786
+ throwRegistryStateAccessError("read", this.stateDir, this.registryPath, error);
787
+ }
788
+ if (error instanceof SyntaxError || errorMessage.includes("JSON") || errorMessage.includes("Unexpected token")) {
789
+ if (this.verbose) {
790
+ console.warn(`Process registry corrupted, resetting: ${errorMessage}`);
791
+ }
792
+ return [];
793
+ }
794
+ throw error;
795
+ }
796
+ }
797
+ /**
798
+ * Write registry to disk
799
+ */
800
+ async write(registry) {
801
+ try {
802
+ await mkdir(this.stateDir, { recursive: true, mode: 448 });
803
+ } catch (error) {
804
+ throwRegistryStateAccessError("write", this.stateDir, this.registryPath, error);
805
+ }
806
+ const data = JSON.stringify(registry, null, 2);
807
+ const tmpPath = `${this.registryPath}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2, 8)}`;
808
+ let tmpFileCreated = false;
809
+ try {
810
+ await writeFile(tmpPath, data, { mode: 384 });
811
+ tmpFileCreated = true;
812
+ try {
813
+ await rename(tmpPath, this.registryPath);
814
+ tmpFileCreated = false;
815
+ } catch (error) {
816
+ const err = error;
817
+ if (err?.code === "ENOENT") {
818
+ tmpFileCreated = false;
819
+ try {
820
+ const retryTmpPath = `${this.registryPath}.tmp.${process.pid}.${Date.now()}.retry`;
821
+ await writeFile(retryTmpPath, data, { mode: 384 });
822
+ try {
823
+ await rename(retryTmpPath, this.registryPath);
824
+ } finally {
825
+ await unlink(retryTmpPath).catch(() => {
826
+ });
827
+ }
828
+ return;
829
+ } catch (_retryError) {
830
+ throw error;
831
+ }
832
+ }
833
+ if (err?.code === "EPERM" || err?.code === "EACCES") {
834
+ if (process.platform === "win32") {
835
+ await unlink(this.registryPath).catch(() => {
836
+ });
837
+ try {
838
+ await rename(tmpPath, this.registryPath);
839
+ tmpFileCreated = false;
840
+ return;
841
+ } catch {
842
+ await writeFile(this.registryPath, data, { mode: 384 });
843
+ tmpFileCreated = false;
844
+ return;
845
+ }
846
+ }
847
+ throwRegistryStateAccessError("write", this.stateDir, this.registryPath, error);
848
+ }
849
+ throw error;
850
+ }
851
+ } catch (error) {
852
+ const err = asErrnoException(error);
853
+ if (err?.code === "EPERM" || err?.code === "EACCES") {
854
+ throwRegistryStateAccessError("write", this.stateDir, this.registryPath, error);
855
+ }
856
+ throw error;
857
+ } finally {
858
+ if (tmpFileCreated) {
859
+ await unlink(tmpPath).catch(() => {
860
+ });
861
+ }
862
+ }
863
+ }
864
+ };
865
+ var processRegistry = new ProcessRegistry({
866
+ verbose: process.env.POETIC_PROCESS_REGISTRY_VERBOSE === "1"
867
+ });
868
+
869
+ export {
870
+ isPoeticCliInvocation,
871
+ isVitestWorkerInvocation,
872
+ RegistryStateAccessError,
873
+ getProcessRegistryStateDirectory,
874
+ __testOnlyGetRegistryPathMutexCount,
875
+ ProcessRegistry,
876
+ processRegistry
877
+ };
878
+ //# sourceMappingURL=chunk-XPHKYHO4.js.map