@ebrindley/build 0.0.0-stage → 1.42.1-rc28

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 (878) hide show
  1. package/.build-project/providers/catalog.json +13951 -0
  2. package/.build-project/providers/pricing.json +1978 -0
  3. package/.build-project/providers/registry.json +4103 -0
  4. package/.github/SECURITY.md +75 -0
  5. package/.nvmrc +1 -0
  6. package/CHANGELOG.md +661 -0
  7. package/CODE_OF_CONDUCT.md +44 -0
  8. package/CONTRIBUTING.md +24 -0
  9. package/INSTALL.md +623 -0
  10. package/LICENSE +21 -0
  11. package/README.md +118 -2
  12. package/THIRD_PARTY_NOTICES.txt +26 -0
  13. package/dist/ai-judge-UE5UOYOO.js +191 -0
  14. package/dist/allowlist-grounding-KPLN6NC5.js +16 -0
  15. package/dist/allowlist-utils-MZZKKXRD.js +31 -0
  16. package/dist/apply-completion-mode-EM37UZHB.js +110 -0
  17. package/dist/artifact-migrator-WPACNSEP.js +276 -0
  18. package/dist/ask-2OZ4JFQR.js +176 -0
  19. package/dist/auth-6UKBTJUQ.js +185 -0
  20. package/dist/auth-H5KJL6HL.js +165 -0
  21. package/dist/auth-LVJRJDMU.js +12 -0
  22. package/dist/auth-NHZOCNRR.js +94 -0
  23. package/dist/auth-PBXHWXGW.js +95 -0
  24. package/dist/auth-T7Y5DCAH.js +91 -0
  25. package/dist/auth-TVVKCHQW.js +13 -0
  26. package/dist/auth-UHB2UCSS.js +97 -0
  27. package/dist/auth-VACA3VUL.js +98 -0
  28. package/dist/auth-VVLC77S3.js +44 -0
  29. package/dist/auth-liveness-XO4AGDDD.js +53 -0
  30. package/dist/autoloop-cleanup-SI3VGAAR.js +106 -0
  31. package/dist/autoloop-evidence-gates-J5GG5YQB.js +39 -0
  32. package/dist/autoloop-gate-policy-SUNAEP6Q.js +169 -0
  33. package/dist/autoloop-helpers-VQGQNTT6.js +52 -0
  34. package/dist/autoloop-ledger-P6TIDP7C.js +96 -0
  35. package/dist/autoloop-ledger-subscriber-HFAGOZXH.js +161 -0
  36. package/dist/autoloop-run-defaults-GWGZBNT7.js +27 -0
  37. package/dist/autoloop-run-lock-GBWRM5A2.js +197 -0
  38. package/dist/autoloop-success-C32QVWOP.js +93 -0
  39. package/dist/autoloop-termination-summary-GI6IBQWD.js +58 -0
  40. package/dist/autoloop-trajectory-AMKSQISD.js +70 -0
  41. package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
  42. package/dist/automatic-branch-cleanup-R62X2C5O.js +49 -0
  43. package/dist/autonomous-loop-controller-2WL363LW.js +4386 -0
  44. package/dist/backend-YUTFDZXZ.js +30 -0
  45. package/dist/background-executor-Z3ODTMD7.js +260 -0
  46. package/dist/backlog-75QPEAMW.js +403 -0
  47. package/dist/backlog-execution-intent-GWUV5TUK.js +19 -0
  48. package/dist/backup-active-store-XHWLN34M.js +16 -0
  49. package/dist/backup-machine-stores-UI4LTJOY.js +251 -0
  50. package/dist/backup-telemetry-db-Z4ICYCNW.js +26 -0
  51. package/dist/branch-archive-manager-FMSQ7YJF.js +18 -0
  52. package/dist/branch-cleanup-manager-ST6FJGND.js +35 -0
  53. package/dist/build-gate-7NKWPY62.js +68 -0
  54. package/dist/build-root-S7DINODY.js +18 -0
  55. package/dist/change-summary-R6CB6VXJ.js +50 -0
  56. package/dist/chunk-24MNKKOM.js +173 -0
  57. package/dist/chunk-2H6VZFIO.js +235 -0
  58. package/dist/chunk-2JIX3EKV.js +39 -0
  59. package/dist/chunk-2KO7HVZM.js +106 -0
  60. package/dist/chunk-2L36U25O.js +100 -0
  61. package/dist/chunk-2NMNFUQA.js +475 -0
  62. package/dist/chunk-2OUAEH67.js +83 -0
  63. package/dist/chunk-2VLJUXJU.js +115 -0
  64. package/dist/chunk-2VUEDIUM.js +77 -0
  65. package/dist/chunk-2Y2IIHPI.js +430 -0
  66. package/dist/chunk-2YRG3LHZ.js +220 -0
  67. package/dist/chunk-2Z5Q3SUY.js +65 -0
  68. package/dist/chunk-32IYXIE5.js +873 -0
  69. package/dist/chunk-33IGPPUI.js +292 -0
  70. package/dist/chunk-352PCJLK.js +283 -0
  71. package/dist/chunk-35J4NE6S.js +226 -0
  72. package/dist/chunk-3C7WBIVK.js +1016 -0
  73. package/dist/chunk-3H3EY6U7.js +1225 -0
  74. package/dist/chunk-3H4MWYIC.js +198 -0
  75. package/dist/chunk-3HHWQR3N.js +2479 -0
  76. package/dist/chunk-3JKNRYEE.js +14 -0
  77. package/dist/chunk-3LECCYZY.js +128 -0
  78. package/dist/chunk-3LOY6YZI.js +852 -0
  79. package/dist/chunk-3M57DADF.js +44 -0
  80. package/dist/chunk-3NOTLVLG.js +3803 -0
  81. package/dist/chunk-3OPP2OZB.js +1480 -0
  82. package/dist/chunk-3P5IN5E7.js +9 -0
  83. package/dist/chunk-3PL22IYZ.js +20 -0
  84. package/dist/chunk-3REDAJUJ.js +14 -0
  85. package/dist/chunk-3S2R4XJI.js +203 -0
  86. package/dist/chunk-3UBZI5DW.js +61 -0
  87. package/dist/chunk-3VV5OBGG.js +308 -0
  88. package/dist/chunk-3WY5TU2O.js +823 -0
  89. package/dist/chunk-43OKHTW4.js +82 -0
  90. package/dist/chunk-45KUJBDI.js +112 -0
  91. package/dist/chunk-47X5LM7B.js +224 -0
  92. package/dist/chunk-4B6FQJ77.js +268 -0
  93. package/dist/chunk-4BTDUT2S.js +42 -0
  94. package/dist/chunk-4DJL2VXA.js +24 -0
  95. package/dist/chunk-4EBSXZ73.js +48 -0
  96. package/dist/chunk-4QKP6I4C.js +294 -0
  97. package/dist/chunk-4U6XK2DG.js +300 -0
  98. package/dist/chunk-4UMRUFBD.js +132 -0
  99. package/dist/chunk-4US4SYJ4.js +569 -0
  100. package/dist/chunk-4ZPLWEZO.js +154 -0
  101. package/dist/chunk-56WPYDJH.js +624 -0
  102. package/dist/chunk-57WRCJJW.js +50 -0
  103. package/dist/chunk-5AW4RMNG.js +24 -0
  104. package/dist/chunk-5EQN56OZ.js +155 -0
  105. package/dist/chunk-5F43TUIN.js +38 -0
  106. package/dist/chunk-5FKHIKTS.js +115 -0
  107. package/dist/chunk-5HDP7XZG.js +91 -0
  108. package/dist/chunk-5KQETTNS.js +152 -0
  109. package/dist/chunk-5PDVN2KO.js +498 -0
  110. package/dist/chunk-5UBIFVRD.js +509 -0
  111. package/dist/chunk-5YDE3Q62.js +46 -0
  112. package/dist/chunk-626AJVMU.js +302 -0
  113. package/dist/chunk-633XZ7UF.js +3583 -0
  114. package/dist/chunk-63DHNHGA.js +236 -0
  115. package/dist/chunk-666656AR.js +568 -0
  116. package/dist/chunk-67YRJPJO.js +19 -0
  117. package/dist/chunk-6CAU7VBA.js +20 -0
  118. package/dist/chunk-6CB3KJRY.js +21 -0
  119. package/dist/chunk-6DBMALXL.js +29 -0
  120. package/dist/chunk-6E25C4IA.js +269 -0
  121. package/dist/chunk-6FIBNIQU.js +73 -0
  122. package/dist/chunk-6G57FYBV.js +189 -0
  123. package/dist/chunk-6KZKRTG3.js +4885 -0
  124. package/dist/chunk-6LAH2UV2.js +525 -0
  125. package/dist/chunk-6PZY2TTU.js +921 -0
  126. package/dist/chunk-6T6NHXK4.js +230 -0
  127. package/dist/chunk-6TBEX4R4.js +432 -0
  128. package/dist/chunk-6TRD7TEE.js +911 -0
  129. package/dist/chunk-6XCP2RAI.js +47 -0
  130. package/dist/chunk-726G6WDL.js +351 -0
  131. package/dist/chunk-75EMT7BF.js +616 -0
  132. package/dist/chunk-762ACDZJ.js +4696 -0
  133. package/dist/chunk-77I6G4CO.js +1 -0
  134. package/dist/chunk-7DJ6SQH3.js +510 -0
  135. package/dist/chunk-7HPCIOMA.js +1383 -0
  136. package/dist/chunk-7HYBSRPZ.js +17503 -0
  137. package/dist/chunk-7KBEOPVB.js +73 -0
  138. package/dist/chunk-7LHJDJB3.js +2222 -0
  139. package/dist/chunk-7NVJMH52.js +306 -0
  140. package/dist/chunk-7RMARDVH.js +33 -0
  141. package/dist/chunk-7SEWU4QG.js +36 -0
  142. package/dist/chunk-7TUTZTI2.js +911 -0
  143. package/dist/chunk-7VBDFPUM.js +340 -0
  144. package/dist/chunk-7VRJHTGZ.js +6406 -0
  145. package/dist/chunk-7YAOUUKK.js +493 -0
  146. package/dist/chunk-AAAODV76.js +860 -0
  147. package/dist/chunk-AB4HUJVQ.js +339 -0
  148. package/dist/chunk-AEQWV746.js +611 -0
  149. package/dist/chunk-AHU3FKPA.js +11639 -0
  150. package/dist/chunk-AISTV5XU.js +226 -0
  151. package/dist/chunk-AJBTKGJZ.js +48 -0
  152. package/dist/chunk-AJJNW7XT.js +248 -0
  153. package/dist/chunk-AJN5Y5YZ.js +160 -0
  154. package/dist/chunk-ALDTFNZ3.js +150 -0
  155. package/dist/chunk-ARARVIZK.js +281 -0
  156. package/dist/chunk-ATBM6AW5.js +53 -0
  157. package/dist/chunk-ATKEKM3E.js +206 -0
  158. package/dist/chunk-AUJLW6JZ.js +92 -0
  159. package/dist/chunk-AY3MHEFM.js +24 -0
  160. package/dist/chunk-B7PYTV72.js +236 -0
  161. package/dist/chunk-B7YRSULE.js +1423 -0
  162. package/dist/chunk-BAWJNMWF.js +339 -0
  163. package/dist/chunk-BBPIILO2.js +88 -0
  164. package/dist/chunk-BD3PGW6A.js +957 -0
  165. package/dist/chunk-BDPYFAB4.js +44 -0
  166. package/dist/chunk-BIUV23HH.js +729 -0
  167. package/dist/chunk-BQ3VAGXH.js +243 -0
  168. package/dist/chunk-BQJOGAWT.js +31 -0
  169. package/dist/chunk-BT7EG7CO.js +68 -0
  170. package/dist/chunk-BV3XQQLU.js +27 -0
  171. package/dist/chunk-BY6ODHNZ.js +78 -0
  172. package/dist/chunk-BZRLSZNV.js +79 -0
  173. package/dist/chunk-C3DH3NCY.js +2773 -0
  174. package/dist/chunk-C3KCMAJP.js +756 -0
  175. package/dist/chunk-C7AGUJ5K.js +267 -0
  176. package/dist/chunk-CBSWKQCX.js +342 -0
  177. package/dist/chunk-CE5OZBYY.js +21 -0
  178. package/dist/chunk-CFCVYHSW.js +373 -0
  179. package/dist/chunk-CHA2HDE5.js +126 -0
  180. package/dist/chunk-CIHWPGS5.js +146 -0
  181. package/dist/chunk-CJBSZX3F.js +127 -0
  182. package/dist/chunk-CLA6QIJM.js +43 -0
  183. package/dist/chunk-CPSVQR2I.js +365 -0
  184. package/dist/chunk-CRPRVNQ4.js +254 -0
  185. package/dist/chunk-CSIE4Y7C.js +1093 -0
  186. package/dist/chunk-CSOPSYDY.js +142 -0
  187. package/dist/chunk-CSXLLEGB.js +205 -0
  188. package/dist/chunk-CTDLERWU.js +293 -0
  189. package/dist/chunk-CULBXMSK.js +110 -0
  190. package/dist/chunk-D2M2Y5ID.js +21 -0
  191. package/dist/chunk-D37WY7SH.js +1060 -0
  192. package/dist/chunk-D4VJFCGZ.js +89 -0
  193. package/dist/chunk-D6WTZMZB.js +48 -0
  194. package/dist/chunk-DBHOWDUH.js +976 -0
  195. package/dist/chunk-DCACX7BV.js +19364 -0
  196. package/dist/chunk-DFHX4XYA.js +128 -0
  197. package/dist/chunk-DIKBRRKE.js +176 -0
  198. package/dist/chunk-DJG5RIOR.js +9 -0
  199. package/dist/chunk-DNIOIISW.js +616 -0
  200. package/dist/chunk-DOA5G7IA.js +315 -0
  201. package/dist/chunk-DP7FKP6W.js +855 -0
  202. package/dist/chunk-DS2JZ677.js +79 -0
  203. package/dist/chunk-DSRLVYBS.js +82 -0
  204. package/dist/chunk-EAEVKNJA.js +209 -0
  205. package/dist/chunk-EEUESN3T.js +575 -0
  206. package/dist/chunk-EJ4LUU5Y.js +73 -0
  207. package/dist/chunk-EJIWTPSZ.js +1063 -0
  208. package/dist/chunk-EJVCDTAN.js +116 -0
  209. package/dist/chunk-EKLUBDBQ.js +627 -0
  210. package/dist/chunk-EN62WLFD.js +849 -0
  211. package/dist/chunk-ENYRCL43.js +26 -0
  212. package/dist/chunk-EP22ZMFO.js +273 -0
  213. package/dist/chunk-EP4SVAVI.js +87 -0
  214. package/dist/chunk-EPAMVGI3.js +1562 -0
  215. package/dist/chunk-EPRMH6HO.js +24 -0
  216. package/dist/chunk-ES6NWJ36.js +4057 -0
  217. package/dist/chunk-ETA2K4KI.js +30 -0
  218. package/dist/chunk-ETAD4NKD.js +31 -0
  219. package/dist/chunk-EUWIIDQ7.js +93 -0
  220. package/dist/chunk-EVE3OD2W.js +141 -0
  221. package/dist/chunk-EXA26FFC.js +459 -0
  222. package/dist/chunk-EXSPAA35.js +244 -0
  223. package/dist/chunk-F55YABKV.js +258 -0
  224. package/dist/chunk-F5DNGU5W.js +27 -0
  225. package/dist/chunk-F622MJYV.js +103 -0
  226. package/dist/chunk-F6NIQD74.js +5111 -0
  227. package/dist/chunk-FAWJTC34.js +43 -0
  228. package/dist/chunk-FAZBRHGG.js +47 -0
  229. package/dist/chunk-FIEUSGNJ.js +39 -0
  230. package/dist/chunk-FKCG7K6H.js +1146 -0
  231. package/dist/chunk-FOVVXV45.js +229 -0
  232. package/dist/chunk-FRBPKBFE.js +30 -0
  233. package/dist/chunk-FSA5BPFI.js +268 -0
  234. package/dist/chunk-FSJ5TTZ3.js +29 -0
  235. package/dist/chunk-FT7SGLXT.js +193 -0
  236. package/dist/chunk-FUUVZZUB.js +62 -0
  237. package/dist/chunk-FYMRVUNZ.js +1697 -0
  238. package/dist/chunk-FYTAA5FG.js +162 -0
  239. package/dist/chunk-G3VB2UCZ.js +3892 -0
  240. package/dist/chunk-G6OIMVXH.js +405 -0
  241. package/dist/chunk-G7PQCXVH.js +228 -0
  242. package/dist/chunk-GAB6UW52.js +1087 -0
  243. package/dist/chunk-GAFJEYLK.js +29 -0
  244. package/dist/chunk-GC4CRMTS.js +642 -0
  245. package/dist/chunk-GFHSIWHL.js +5297 -0
  246. package/dist/chunk-GI5M67YA.js +735 -0
  247. package/dist/chunk-GIJWHUWF.js +191 -0
  248. package/dist/chunk-GO6DRECI.js +1 -0
  249. package/dist/chunk-GOFVBTMN.js +314 -0
  250. package/dist/chunk-GQIP72ZJ.js +13 -0
  251. package/dist/chunk-GQXLXRFA.js +28 -0
  252. package/dist/chunk-GT6HFKJB.js +48 -0
  253. package/dist/chunk-GVJGSSKM.js +174 -0
  254. package/dist/chunk-GWHGTG37.js +36 -0
  255. package/dist/chunk-GZAJHLKO.js +18 -0
  256. package/dist/chunk-GZK62I3N.js +314 -0
  257. package/dist/chunk-H3HGMISG.js +483 -0
  258. package/dist/chunk-H3ISZJMJ.js +403 -0
  259. package/dist/chunk-H4HXVWEC.js +9 -0
  260. package/dist/chunk-H6MJGKAW.js +120 -0
  261. package/dist/chunk-HBTTGVR5.js +353 -0
  262. package/dist/chunk-HBZ322WZ.js +35 -0
  263. package/dist/chunk-HEP3ILP4.js +34 -0
  264. package/dist/chunk-HGFXODKO.js +106 -0
  265. package/dist/chunk-HHWDTB6S.js +59 -0
  266. package/dist/chunk-HKO45NLZ.js +286 -0
  267. package/dist/chunk-HLVTEA6A.js +89 -0
  268. package/dist/chunk-HS3SY6HN.js +160 -0
  269. package/dist/chunk-HT5OCGKN.js +899 -0
  270. package/dist/chunk-HXIIEMGF.js +78 -0
  271. package/dist/chunk-I56TH7VM.js +46 -0
  272. package/dist/chunk-I6FN3R5D.js +352 -0
  273. package/dist/chunk-I7SCBHJN.js +655 -0
  274. package/dist/chunk-IJM4GKAT.js +529 -0
  275. package/dist/chunk-IMEYU36R.js +344 -0
  276. package/dist/chunk-INJ3SS6A.js +936 -0
  277. package/dist/chunk-IUKOPCCE.js +441 -0
  278. package/dist/chunk-IVEPZQJO.js +33 -0
  279. package/dist/chunk-IVZEONFC.js +43 -0
  280. package/dist/chunk-IWBHRSG7.js +936 -0
  281. package/dist/chunk-IYY3HQAD.js +484 -0
  282. package/dist/chunk-J2ICMYDA.js +48 -0
  283. package/dist/chunk-J2QCFLUN.js +505 -0
  284. package/dist/chunk-J5HM6V5P.js +1039 -0
  285. package/dist/chunk-J6NZX6QH.js +398 -0
  286. package/dist/chunk-JBBB2Y47.js +432 -0
  287. package/dist/chunk-JDCZQZU7.js +42 -0
  288. package/dist/chunk-JEDNXGSS.js +169 -0
  289. package/dist/chunk-JHP7OT6K.js +89 -0
  290. package/dist/chunk-JLS65NUQ.js +14 -0
  291. package/dist/chunk-JNMWYMC6.js +38 -0
  292. package/dist/chunk-JNSTWNNW.js +25 -0
  293. package/dist/chunk-JOSK6GEU.js +9564 -0
  294. package/dist/chunk-JQUMSIGC.js +100 -0
  295. package/dist/chunk-JVHGMURQ.js +1106 -0
  296. package/dist/chunk-JYXS47FQ.js +951 -0
  297. package/dist/chunk-K2ZMW2Z5.js +2147 -0
  298. package/dist/chunk-K7FAFORM.js +14 -0
  299. package/dist/chunk-KBJXX3ON.js +333 -0
  300. package/dist/chunk-KHFKVQWY.js +486 -0
  301. package/dist/chunk-KHMEI3DQ.js +173 -0
  302. package/dist/chunk-KHW3UD7B.js +69 -0
  303. package/dist/chunk-KKQKWAMF.js +365 -0
  304. package/dist/chunk-KOKXJV2U.js +455 -0
  305. package/dist/chunk-KQ4NGOJI.js +14 -0
  306. package/dist/chunk-KQYQOXMS.js +342 -0
  307. package/dist/chunk-KTMW65UX.js +14 -0
  308. package/dist/chunk-KUEWV2JH.js +593 -0
  309. package/dist/chunk-KXYDV3HP.js +1523 -0
  310. package/dist/chunk-KZ4JMGZ5.js +96 -0
  311. package/dist/chunk-KZWGBUIO.js +2659 -0
  312. package/dist/chunk-L2CBG5IX.js +1892 -0
  313. package/dist/chunk-L2S235CU.js +314 -0
  314. package/dist/chunk-L32WD57F.js +98 -0
  315. package/dist/chunk-LDJCKAJP.js +123 -0
  316. package/dist/chunk-LDWNBEN7.js +541 -0
  317. package/dist/chunk-LJVH57G2.js +241 -0
  318. package/dist/chunk-LPQ7NZEN.js +209 -0
  319. package/dist/chunk-LRGH3CCV.js +148 -0
  320. package/dist/chunk-LULOGMMM.js +1133 -0
  321. package/dist/chunk-LWGKN2GY.js +8284 -0
  322. package/dist/chunk-LX4F24ZH.js +157 -0
  323. package/dist/chunk-M4BUEXXF.js +839 -0
  324. package/dist/chunk-M6UHOC4I.js +553 -0
  325. package/dist/chunk-MCBNWZNO.js +657 -0
  326. package/dist/chunk-MEMSY6VY.js +223 -0
  327. package/dist/chunk-MHLEZQQI.js +145 -0
  328. package/dist/chunk-MJ6WNSIX.js +192 -0
  329. package/dist/chunk-MKASIKWZ.js +442 -0
  330. package/dist/chunk-MNOVBYFU.js +60 -0
  331. package/dist/chunk-MO2BYAAF.js +2896 -0
  332. package/dist/chunk-MP6P7Y2A.js +180 -0
  333. package/dist/chunk-MQ4TFJAG.js +3365 -0
  334. package/dist/chunk-MT2WAIR3.js +131 -0
  335. package/dist/chunk-MTU7VTNN.js +1122 -0
  336. package/dist/chunk-MULMXX4V.js +150 -0
  337. package/dist/chunk-MW2DWWVA.js +147 -0
  338. package/dist/chunk-MY3ZPUN4.js +151 -0
  339. package/dist/chunk-MYLH2S4G.js +64 -0
  340. package/dist/chunk-MZ5WYKNA.js +28 -0
  341. package/dist/chunk-N3Q2JNPV.js +249 -0
  342. package/dist/chunk-N5DX4JAK.js +12 -0
  343. package/dist/chunk-NAINGKHF.js +35 -0
  344. package/dist/chunk-NEQUQHOX.js +223 -0
  345. package/dist/chunk-NHNPEZS4.js +1408 -0
  346. package/dist/chunk-NHTIXJCR.js +17 -0
  347. package/dist/chunk-NKLPMBNV.js +1154 -0
  348. package/dist/chunk-NMVZ5YES.js +199 -0
  349. package/dist/chunk-NRFRY3GE.js +256 -0
  350. package/dist/chunk-NTD6CSI6.js +1266 -0
  351. package/dist/chunk-NUO7B3SH.js +318 -0
  352. package/dist/chunk-NVOHIJKG.js +1319 -0
  353. package/dist/chunk-NXH3RX7O.js +523 -0
  354. package/dist/chunk-NXZ3DURF.js +257 -0
  355. package/dist/chunk-O26L6F7F.js +209 -0
  356. package/dist/chunk-O5RRIUEP.js +124 -0
  357. package/dist/chunk-O5X6BKAO.js +10 -0
  358. package/dist/chunk-O6ZQUVTR.js +31 -0
  359. package/dist/chunk-O7FE75QZ.js +306 -0
  360. package/dist/chunk-OC7Z6AJQ.js +81 -0
  361. package/dist/chunk-OH7IEZ63.js +307 -0
  362. package/dist/chunk-OI734GRS.js +115 -0
  363. package/dist/chunk-OJBH62DK.js +684 -0
  364. package/dist/chunk-OKJLVSTJ.js +247 -0
  365. package/dist/chunk-OMX5VL43.js +79 -0
  366. package/dist/chunk-ONHAMBN6.js +12 -0
  367. package/dist/chunk-ONYPLIVE.js +753 -0
  368. package/dist/chunk-OSK7QWPD.js +637 -0
  369. package/dist/chunk-OTXLMJKP.js +438 -0
  370. package/dist/chunk-OV5PKQMA.js +213 -0
  371. package/dist/chunk-OXK5HA4B.js +31 -0
  372. package/dist/chunk-OYDWFQA4.js +272 -0
  373. package/dist/chunk-OZAUKWHB.js +22 -0
  374. package/dist/chunk-P5P2EKGH.js +94 -0
  375. package/dist/chunk-P6SSWAKY.js +29 -0
  376. package/dist/chunk-P7CQGPLS.js +30 -0
  377. package/dist/chunk-P7RVCHQV.js +197 -0
  378. package/dist/chunk-PEBWDYIW.js +726 -0
  379. package/dist/chunk-PFCXFO7A.js +9193 -0
  380. package/dist/chunk-PFLDWMX6.js +168 -0
  381. package/dist/chunk-PHZGLQSK.js +15883 -0
  382. package/dist/chunk-PNFTPNSR.js +20 -0
  383. package/dist/chunk-PPHXX4W7.js +175 -0
  384. package/dist/chunk-PPZESPJT.js +262 -0
  385. package/dist/chunk-PRDHI2L5.js +296 -0
  386. package/dist/chunk-PSTKWHHN.js +32 -0
  387. package/dist/chunk-PV53ODOT.js +555 -0
  388. package/dist/chunk-PVJBTI7P.js +24 -0
  389. package/dist/chunk-PXKERBKX.js +100 -0
  390. package/dist/chunk-PZ5AY32C.js +10 -0
  391. package/dist/chunk-Q3DHEZA5.js +85 -0
  392. package/dist/chunk-Q5RZDVQK.js +204 -0
  393. package/dist/chunk-Q64IR2Z2.js +4933 -0
  394. package/dist/chunk-Q6Z5UGPL.js +398 -0
  395. package/dist/chunk-QAMAV4DT.js +627 -0
  396. package/dist/chunk-QBWF4444.js +112 -0
  397. package/dist/chunk-QDKYT4CI.js +22805 -0
  398. package/dist/chunk-QFLBRWCJ.js +126 -0
  399. package/dist/chunk-QILAQACE.js +107 -0
  400. package/dist/chunk-QJ6OEH4K.js +3683 -0
  401. package/dist/chunk-QK3NLYTV.js +320 -0
  402. package/dist/chunk-QOFLUS24.js +535 -0
  403. package/dist/chunk-QOIASNEJ.js +98 -0
  404. package/dist/chunk-QP4UTSOV.js +3587 -0
  405. package/dist/chunk-QP5ST7RI.js +904 -0
  406. package/dist/chunk-QS5AGRZN.js +167 -0
  407. package/dist/chunk-QTAOU53N.js +107 -0
  408. package/dist/chunk-QTCLJHLZ.js +351 -0
  409. package/dist/chunk-QTOLTG4L.js +119 -0
  410. package/dist/chunk-QWDV4OSL.js +142 -0
  411. package/dist/chunk-QWMQ74KD.js +508 -0
  412. package/dist/chunk-QX6LOMMH.js +158 -0
  413. package/dist/chunk-QXBKIHY7.js +238 -0
  414. package/dist/chunk-QXBKTJT6.js +270 -0
  415. package/dist/chunk-QYQOVOLR.js +196 -0
  416. package/dist/chunk-R2CKS6WT.js +73 -0
  417. package/dist/chunk-R2TIYG7U.js +68 -0
  418. package/dist/chunk-R2W3LESH.js +465 -0
  419. package/dist/chunk-R5EXHMUN.js +100 -0
  420. package/dist/chunk-RBBTBCHX.js +289 -0
  421. package/dist/chunk-RBKLOUXA.js +121 -0
  422. package/dist/chunk-RCP2Y6DQ.js +86 -0
  423. package/dist/chunk-RCYEJSD5.js +260 -0
  424. package/dist/chunk-RFDVSI4N.js +134 -0
  425. package/dist/chunk-RGJU63FV.js +1717 -0
  426. package/dist/chunk-RI4EX2QE.js +18 -0
  427. package/dist/chunk-RIMARPCF.js +152 -0
  428. package/dist/chunk-RJ6RSNT6.js +42 -0
  429. package/dist/chunk-RNI2GUIF.js +131 -0
  430. package/dist/chunk-RPHUWJ3K.js +264 -0
  431. package/dist/chunk-RPIMAMV7.js +361 -0
  432. package/dist/chunk-RQFX6YRN.js +49 -0
  433. package/dist/chunk-RRC5BL7B.js +285 -0
  434. package/dist/chunk-RSYTSBOO.js +79 -0
  435. package/dist/chunk-RWQQIKIC.js +35 -0
  436. package/dist/chunk-RZUBOZH2.js +373 -0
  437. package/dist/chunk-S2E632FQ.js +380 -0
  438. package/dist/chunk-S2VQCZO4.js +22 -0
  439. package/dist/chunk-S2XIMQJQ.js +681 -0
  440. package/dist/chunk-S47ISY27.js +183 -0
  441. package/dist/chunk-S6I4KISU.js +142 -0
  442. package/dist/chunk-S6TAFQI5.js +2403 -0
  443. package/dist/chunk-SBBNT5ZJ.js +27 -0
  444. package/dist/chunk-SDJV2DTQ.js +491 -0
  445. package/dist/chunk-SDPIFNLD.js +33 -0
  446. package/dist/chunk-SF6YK3JI.js +835 -0
  447. package/dist/chunk-SK3ZFONO.js +976 -0
  448. package/dist/chunk-SKTFRFQ7.js +1775 -0
  449. package/dist/chunk-SNGM452K.js +2002 -0
  450. package/dist/chunk-STW7OFOA.js +581 -0
  451. package/dist/chunk-SU6UFUQY.js +1351 -0
  452. package/dist/chunk-SVJM3LJA.js +27 -0
  453. package/dist/chunk-SVUNZOPG.js +129 -0
  454. package/dist/chunk-T5XLUYV3.js +34 -0
  455. package/dist/chunk-T7E5JS6N.js +57 -0
  456. package/dist/chunk-TA3N5MMO.js +450 -0
  457. package/dist/chunk-TAJPCXSB.js +13 -0
  458. package/dist/chunk-TDEMDRN2.js +1639 -0
  459. package/dist/chunk-TDSEX5CF.js +24 -0
  460. package/dist/chunk-TGCVL74Y.js +28 -0
  461. package/dist/chunk-TGXXYDL4.js +1012 -0
  462. package/dist/chunk-TIKTYUJO.js +296 -0
  463. package/dist/chunk-TIZAJD4M.js +6029 -0
  464. package/dist/chunk-TLSEZZCG.js +5549 -0
  465. package/dist/chunk-TMBDRHAX.js +19 -0
  466. package/dist/chunk-TRURQUBP.js +1217 -0
  467. package/dist/chunk-TSQ256N5.js +152 -0
  468. package/dist/chunk-TUQMMFEQ.js +2244 -0
  469. package/dist/chunk-U424MJLC.js +81 -0
  470. package/dist/chunk-U4DRS6ZW.js +11 -0
  471. package/dist/chunk-U5KS22IN.js +204 -0
  472. package/dist/chunk-UAPHFJPN.js +673 -0
  473. package/dist/chunk-UB7LQITD.js +1040 -0
  474. package/dist/chunk-UBVRHGAZ.js +237 -0
  475. package/dist/chunk-UDNNAQN5.js +98 -0
  476. package/dist/chunk-UJP3XM54.js +342 -0
  477. package/dist/chunk-UJYDH2MW.js +305 -0
  478. package/dist/chunk-UKMPASIC.js +399 -0
  479. package/dist/chunk-UKUL3EHK.js +763 -0
  480. package/dist/chunk-UPHU64NB.js +1327 -0
  481. package/dist/chunk-URMSZXAD.js +43 -0
  482. package/dist/chunk-US3RT6CY.js +525 -0
  483. package/dist/chunk-UTDEOPKV.js +30 -0
  484. package/dist/chunk-UUUDKV7N.js +13 -0
  485. package/dist/chunk-UVKWU3SM.js +39 -0
  486. package/dist/chunk-V2TVPO3X.js +521 -0
  487. package/dist/chunk-V3KLVK7B.js +398 -0
  488. package/dist/chunk-V3YFFHDR.js +17 -0
  489. package/dist/chunk-VAG6GUBR.js +1162 -0
  490. package/dist/chunk-VBENAHDA.js +1814 -0
  491. package/dist/chunk-VBNCKCCI.js +16 -0
  492. package/dist/chunk-VCGSWN5M.js +1300 -0
  493. package/dist/chunk-VE2O2I7M.js +115 -0
  494. package/dist/chunk-VIFHYTI5.js +31 -0
  495. package/dist/chunk-VJER3FUS.js +5080 -0
  496. package/dist/chunk-VLMDM56Q.js +268 -0
  497. package/dist/chunk-VMFZEVVX.js +99 -0
  498. package/dist/chunk-VNDPQVUZ.js +1853 -0
  499. package/dist/chunk-VSPJRLGA.js +4783 -0
  500. package/dist/chunk-VSWC5ZXI.js +103 -0
  501. package/dist/chunk-VYI4DSZP.js +2017 -0
  502. package/dist/chunk-W4BAIQ6L.js +1212 -0
  503. package/dist/chunk-W7VQAL2K.js +2203 -0
  504. package/dist/chunk-WEI3ZDZH.js +33 -0
  505. package/dist/chunk-WEIUS5NT.js +26 -0
  506. package/dist/chunk-WEW7UFWE.js +546 -0
  507. package/dist/chunk-WGQAXLNA.js +384 -0
  508. package/dist/chunk-WJAL4JL3.js +206 -0
  509. package/dist/chunk-WKFOJ5ZG.js +141 -0
  510. package/dist/chunk-WMWQEFLN.js +2177 -0
  511. package/dist/chunk-WNECKKO2.js +154 -0
  512. package/dist/chunk-WPKLYOAM.js +195 -0
  513. package/dist/chunk-WSH37YQN.js +243 -0
  514. package/dist/chunk-WV3KQDPE.js +84 -0
  515. package/dist/chunk-WZFC4V4U.js +389 -0
  516. package/dist/chunk-XCOIBNET.js +13 -0
  517. package/dist/chunk-XDM65LBX.js +53 -0
  518. package/dist/chunk-XGU6PBO5.js +645 -0
  519. package/dist/chunk-XHOI4V62.js +43 -0
  520. package/dist/chunk-XIBVFMLQ.js +6858 -0
  521. package/dist/chunk-XJ2E7YEJ.js +117 -0
  522. package/dist/chunk-XON4ZCYX.js +69 -0
  523. package/dist/chunk-XQPEWJPI.js +127 -0
  524. package/dist/chunk-XSJTIFUY.js +31 -0
  525. package/dist/chunk-XT7OVWM3.js +64 -0
  526. package/dist/chunk-XTXYIISX.js +1104 -0
  527. package/dist/chunk-XV7NZL4B.js +57 -0
  528. package/dist/chunk-XWIZ6B5S.js +109 -0
  529. package/dist/chunk-XWLIKOBX.js +240 -0
  530. package/dist/chunk-XZOXEIN4.js +156 -0
  531. package/dist/chunk-XZRS7I7W.js +3673 -0
  532. package/dist/chunk-Y4ZDDHB6.js +44 -0
  533. package/dist/chunk-Y733RB7T.js +194 -0
  534. package/dist/chunk-YBHUB4XR.js +14931 -0
  535. package/dist/chunk-YKC75XK4.js +147 -0
  536. package/dist/chunk-YKMXFVK7.js +27 -0
  537. package/dist/chunk-YO5BAJ55.js +225 -0
  538. package/dist/chunk-YPDCLXNZ.js +568 -0
  539. package/dist/chunk-YSQPGVFK.js +116 -0
  540. package/dist/chunk-YTVVTIWJ.js +716 -0
  541. package/dist/chunk-YVCMDVBB.js +698 -0
  542. package/dist/chunk-YYTOA6DP.js +114 -0
  543. package/dist/chunk-Z5WGNULV.js +88 -0
  544. package/dist/chunk-Z6NGVVXG.js +66 -0
  545. package/dist/chunk-Z7CDQNH3.js +20 -0
  546. package/dist/chunk-ZH4G3FU5.js +187 -0
  547. package/dist/chunk-ZJB6SQPA.js +257 -0
  548. package/dist/chunk-ZL6E4HMY.js +42 -0
  549. package/dist/chunk-ZMLOC3DW.js +62 -0
  550. package/dist/chunk-ZORW64QH.js +101 -0
  551. package/dist/chunk-ZVVD2XGV.js +1369 -0
  552. package/dist/cli-utils-ER33ODC5.js +31 -0
  553. package/dist/cli-validation-6CHPTANV.js +146 -0
  554. package/dist/commit-utils-3STAY7C7.js +49 -0
  555. package/dist/compatibility-notice-IHNXR2JR.js +21 -0
  556. package/dist/compete-config-resolver-V3GDNJMM.js +125 -0
  557. package/dist/compete-results-XUM3PJHS.js +318 -0
  558. package/dist/competition-outcome-tracker-NWSMVUPG.js +62 -0
  559. package/dist/config-4HHE4OIK.js +238 -0
  560. package/dist/config-D6YAZASH.js +10 -0
  561. package/dist/config-MIPRDYYV.js +46 -0
  562. package/dist/config-audit-GA5DCUAI.js +371 -0
  563. package/dist/config-explain-4LMO556H.js +71 -0
  564. package/dist/config-loader-RGP634PC.js +51 -0
  565. package/dist/config-manager-J2UTO635.js +114 -0
  566. package/dist/config-merger-TVUJBZTS.js +14 -0
  567. package/dist/config-validator-H4ZVIE56.js +122 -0
  568. package/dist/cost-HSIV5U2Y.js +85 -0
  569. package/dist/data-migration-state-OAUL2WPQ.js +35 -0
  570. package/dist/db-migrator-NUOW5NKR.js +34 -0
  571. package/dist/default-paths-UILB62BN.js +49 -0
  572. package/dist/discovery-V6GYUJUC.js +53 -0
  573. package/dist/doctor-BBSMCDWE.js +271 -0
  574. package/dist/doctor-context-blocks-LPY75VZA.js +231 -0
  575. package/dist/doctor-instructions-import-JXHDDOE5.js +70 -0
  576. package/dist/doctor-purpose-6YJOXPBE.js +30 -0
  577. package/dist/domain-analyzer-S35ABUNA.js +48 -0
  578. package/dist/ensure-initialized-Q6PEU55O.js +78 -0
  579. package/dist/entry.js +922 -0
  580. package/dist/error-parser-core-MZFMFANN.js +70 -0
  581. package/dist/evaluation-context-GQBYDAEV.js +63 -0
  582. package/dist/evidence-plan-resolver-5FUAP3SA.js +111 -0
  583. package/dist/execution-data-writer-YCG5UH37.js +72 -0
  584. package/dist/execution-policy-applier-PWZM5LNA.js +63 -0
  585. package/dist/execution-preflight-DASJWWQF.js +223 -0
  586. package/dist/execution-roles-KNSNNB2D.js +112 -0
  587. package/dist/exit-code-error-QIY5DOKF.js +18 -0
  588. package/dist/external-temp-cleanup-CAW7LQ6R.js +360 -0
  589. package/dist/factory-YCYCB7AE.js +209 -0
  590. package/dist/file-utils-ZQYNBQBW.js +45 -0
  591. package/dist/flywheel-allowlist-revert-H22HA6JE.js +21 -0
  592. package/dist/flywheel-autoloop-executor-PDOASJEZ.js +316 -0
  593. package/dist/flywheel-autoloop-unverified-TOKYFCDC.js +36 -0
  594. package/dist/flywheel-competition-executor-YJUMMEJO.js +320 -0
  595. package/dist/flywheel-executor-JWU43KAY.js +437 -0
  596. package/dist/flywheel-git-isolation-FQ2TRWMB.js +56 -0
  597. package/dist/flywheel-manifest-HDPNMWWF.js +114 -0
  598. package/dist/flywheel-model-defaults-UHAKTZT3.js +110 -0
  599. package/dist/flywheel-preflight-III2C7TH.js +163 -0
  600. package/dist/flywheel-resume-2O45MS7Y.js +31 -0
  601. package/dist/flywheel-resume-execution-lease-P2BK257J.js +59 -0
  602. package/dist/flywheel-safety-AVAVFXIJ.js +19 -0
  603. package/dist/flywheel-scope-decision-ALJUUNGG.js +14 -0
  604. package/dist/get-telemetry-logger-MPDVO2JA.js +155 -0
  605. package/dist/git-message-style-KCXGMTDT.js +104 -0
  606. package/dist/guidance-profile-config-G3K5YQOO.js +113 -0
  607. package/dist/guidance-profile-renderer-TX4TNDFL.js +23 -0
  608. package/dist/identity-XLQJ4YJF.js +25 -0
  609. package/dist/index-query-6NUY4FKX.js +37 -0
  610. package/dist/index.js +85588 -0
  611. package/dist/indexer-DL54CM3K.js +44 -0
  612. package/dist/init-OUZ72344.js +245 -0
  613. package/dist/instructions-import-offer-NSYXSITC.js +363 -0
  614. package/dist/instructions-run-NBII7W36.js +114 -0
  615. package/dist/interrupted-work-E4TLKJLE.js +43 -0
  616. package/dist/invoke-provider-auth-NEWEIHCI.js +38 -0
  617. package/dist/judge-scoring.json +64 -0
  618. package/dist/lab-mode-YXQ2Y3NG.js +44 -0
  619. package/dist/lab-utils-5QAMDJR5.js +29 -0
  620. package/dist/linux-host-class-YDWQX65O.js +31 -0
  621. package/dist/llm-judge-executor-OJSNCTFJ.js +179 -0
  622. package/dist/local-ci-config-VZ4WWDT5.js +48 -0
  623. package/dist/local-executor-DCMDDRX2.js +280 -0
  624. package/dist/logger-5KNKS3O4.js +154 -0
  625. package/dist/matrix-prompt-builder-4ZBOGZSB.js +527 -0
  626. package/dist/matrix-result-parser-EZJM4YXP.js +14 -0
  627. package/dist/merge-batch-RTEEMVDB.js +313 -0
  628. package/dist/merge-batch-members-VIWGVRHP.js +24 -0
  629. package/dist/merge-queue-TIIUSOY6.js +126 -0
  630. package/dist/merge-queue-trust-DUNZ4J65.js +21 -0
  631. package/dist/metadata-UKSMWM6J.js +29 -0
  632. package/dist/model-catalog-readiness-R5KJBP5M.js +202 -0
  633. package/dist/model-invocations-db-XTUPPQ34.js +70 -0
  634. package/dist/model-resolver-JFZ2MHOJ.js +39 -0
  635. package/dist/model-resolver-SCQ57KAQ.js +217 -0
  636. package/dist/model-roles-D3OR4NAH.js +110 -0
  637. package/dist/monitor-F4SIU5G2.js +96 -0
  638. package/dist/nested-worktrees-2WUWQ75N.js +23 -0
  639. package/dist/next-S3IRLVER.js +96 -0
  640. package/dist/next-UKPFRXOO.js +148 -0
  641. package/dist/opportunistic-TL4S26VX.js +86 -0
  642. package/dist/optimization-config-resolver-NAEIYU6A.js +148 -0
  643. package/dist/package-HJR4QJT4.js +10 -0
  644. package/dist/parse-git-status-7PIYFPS2.js +21 -0
  645. package/dist/path-security-5WJSY56G.js +41 -0
  646. package/dist/paths-JUI7C4KU.js +45 -0
  647. package/dist/plan-backlog-list-fast-SSTQL5XP.js +89 -0
  648. package/dist/plan-backlog-show-fast-PFRAQ3JB.js +114 -0
  649. package/dist/plan-sprint-list-fast-HD2KBZSY.js +110 -0
  650. package/dist/plan-sprint-status-fast-YFYH7WQF.js +116 -0
  651. package/dist/plan-task-status-fast-JU5PNLUU.js +114 -0
  652. package/dist/plan-to-flywheel-PY5MSY2H.js +529 -0
  653. package/dist/preflight-PJHGTJNZ.js +12 -0
  654. package/dist/process-registry-B4ZUCN7T.js +28 -0
  655. package/dist/process-scanner-TU3QHWVB.js +23 -0
  656. package/dist/processes-6FHVGT72.js +28 -0
  657. package/dist/processes-json-fast-YWTMUWXB.js +72 -0
  658. package/dist/profile-HWTC56SG.js +209 -0
  659. package/dist/project-runtime-paths-2UQNG5Y4.js +41 -0
  660. package/dist/protected-branches-N36LDBFY.js +71 -0
  661. package/dist/provider-aware-resource-manager-YTFAHNGJ.js +40 -0
  662. package/dist/provider-matrix-2KO2V5OM.js +214 -0
  663. package/dist/provider-matrix-renderer-MEC3PER7.js +139 -0
  664. package/dist/provider-output-forwarding-2AHL7YMA.js +26 -0
  665. package/dist/provider-registry-WCZ65QHC.js +136 -0
  666. package/dist/provider-temp-cleanup-IUNPJCZF.js +14 -0
  667. package/dist/prune-engine-EOQVWEP6.js +448 -0
  668. package/dist/publication-turn-S42RZTQF.js +44 -0
  669. package/dist/quality-gate-JQMVCKOO.js +72 -0
  670. package/dist/quickstart-3O6FRCFB.js +105 -0
  671. package/dist/readiness-GW6ABRHB.js +139 -0
  672. package/dist/readiness-KFZCXDTT.js +215 -0
  673. package/dist/registry-7XG376SY.js +217 -0
  674. package/dist/repair-helpers-TTV5FEF4.js +117 -0
  675. package/dist/repo-root-YG6MQZDW.js +28 -0
  676. package/dist/resolution-engine-FFEK7HQ2.js +187 -0
  677. package/dist/resolve-provider-cli-ZEXVZKET.js +44 -0
  678. package/dist/restore-telemetry-db-E7BR5PO7.js +459 -0
  679. package/dist/routing-events-AW6SRZ6G.js +13 -0
  680. package/dist/routing-history-store-FMDDQL6W.js +39 -0
  681. package/dist/routing-planner-C6OHO3EY.js +221 -0
  682. package/dist/runner-KHDNQ5KU.js +1194 -0
  683. package/dist/runner-PIS2BW7Y.js +1801 -0
  684. package/dist/safety-E3JJVSFL.js +67 -0
  685. package/dist/safety-stanza-HE6GXP4G.js +49 -0
  686. package/dist/sandbox-7LBZC5PE.js +72 -0
  687. package/dist/sandbox-ASWCDYZL.js +80 -0
  688. package/dist/schema-extensions.sql +234 -0
  689. package/dist/security-JI22TBEB.js +17 -0
  690. package/dist/setup-bb-plugin-FQXLA76Y.js +531 -0
  691. package/dist/setup-claude-code-NF4ZSHVE.js +197 -0
  692. package/dist/setup-temp-cleanup-2APZ4HMA.js +29 -0
  693. package/dist/shared-utils-34HJZ6JX.js +40 -0
  694. package/dist/simple-artifact-goal-MQLDDMMX.js +29 -0
  695. package/dist/sprint-N7JFTEGL.js +403 -0
  696. package/dist/sprint-bridge-KJXIBNRJ.js +117 -0
  697. package/dist/sprint-completion-dependents-34SR7JVL.js +43 -0
  698. package/dist/sprint-execution-service-A6JPUBWY.js +376 -0
  699. package/dist/sprint-manager-MU2ZUWN2.js +140 -0
  700. package/dist/sqlite-timeout-config-U2CT4LKU.js +13 -0
  701. package/dist/sqlite-wrapper-FSGJ2QEW.js +19 -0
  702. package/dist/stale-cleanup-orchestrator-4X6324VF.js +71 -0
  703. package/dist/storage-access-I3V5LER7.js +31 -0
  704. package/dist/store-XVG64ZR2.js +25 -0
  705. package/dist/task-classifier-MN2DYE5R.js +558 -0
  706. package/dist/task-list-fast-7AT6LTTA.js +112 -0
  707. package/dist/task-manager-LHPBBRRE.js +136 -0
  708. package/dist/task-report-OLPAWBTK.js +64 -0
  709. package/dist/task-type-detector-6RG3YNZF.js +27 -0
  710. package/dist/task-type-resolver-EQHOUIHT.js +64 -0
  711. package/dist/telemetry-5VYSK772.js +212 -0
  712. package/dist/telemetry-health-tracker-4GFW2EMP.js +12 -0
  713. package/dist/telemetry-path-resolver-H3NFHHQY.js +34 -0
  714. package/dist/telemetry-reliability-URJDTNPZ.js +76 -0
  715. package/dist/transports-NREZQTJK.js +106 -0
  716. package/dist/unified-cost-tracker-5MTBJ2CL.js +59 -0
  717. package/dist/unified-state-cleanup-GGAXLHXF.js +292 -0
  718. package/dist/universal-cost-calculator-JTFEJVWK.js +70 -0
  719. package/dist/user-agents-QLIGPLP2.js +30 -0
  720. package/dist/variant-execution-I4ZZUAWY.js +319 -0
  721. package/dist/variant-opt-parser-JHCXKY2K.js +251 -0
  722. package/dist/variant-request-input-PL37N3AN.js +11 -0
  723. package/dist/variant-state-cleanup-KHMXRBZN.js +287 -0
  724. package/dist/variant-worker-COB5YTJX.js +4517 -0
  725. package/dist/variant-worker.js +26 -0
  726. package/dist/variants-XGDSXYG3.js +267 -0
  727. package/dist/verification-command-YSPU4VBH.js +66 -0
  728. package/dist/verify-command-timeout-DQUYH33Z.js +11 -0
  729. package/dist/verify-commands-LOHMOFKC.js +65 -0
  730. package/dist/warning-JSKSFKBT.js +13 -0
  731. package/dist/work-edge-K65NHVWY.js +50 -0
  732. package/dist/work-item-writer-KY5ZWZWW.js +30 -0
  733. package/dist/worker-JNXXEIT6.js +1504 -0
  734. package/dist/worker.js +21 -0
  735. package/dist/workspace-tree-identity-JO5PSKTW.js +52 -0
  736. package/dist/worktree-environment-WTVABAQW.js +64 -0
  737. package/dist/worktree-metrics-VZRQI26T.js +66 -0
  738. package/dist/writeback-TQFQBJNU.js +50 -0
  739. package/docs/CLI_REFERENCE.md +8287 -0
  740. package/docs/PROVIDER_SETUP.md +1737 -0
  741. package/docs/README.md +96 -0
  742. package/docs/TROUBLESHOOTING.md +2209 -0
  743. package/docs/getting-started/QUICK_START.md +260 -0
  744. package/docs/getting-started/README.md +198 -0
  745. package/docs/getting-started/SETUP.md +25 -0
  746. package/docs/reference/AGENT_CONTEXT.md +84 -0
  747. package/docs/reference/DELIVERY_ONBOARDING.md +198 -0
  748. package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
  749. package/docs/reference/SECURITY.md +291 -0
  750. package/docs/reference/TELEMETRY_PRIVACY.md +259 -0
  751. package/integrations/bb-plugin-build/README.md +391 -0
  752. package/integrations/bb-plugin-build/app.css +431 -0
  753. package/integrations/bb-plugin-build/app.tsx +6210 -0
  754. package/integrations/bb-plugin-build/package.json +45 -0
  755. package/integrations/bb-plugin-build/server.ts +488 -0
  756. package/integrations/bb-plugin-build/src/adapter.ts +3672 -0
  757. package/integrations/bb-plugin-build/src/backlog-authoring-model.ts +150 -0
  758. package/integrations/bb-plugin-build/src/backlog-authoring-schema.ts +458 -0
  759. package/integrations/bb-plugin-build/src/backlog-authoring-service.ts +467 -0
  760. package/integrations/bb-plugin-build/src/backlog-authoring-view.ts +1025 -0
  761. package/integrations/bb-plugin-build/src/command-evidence-schema.ts +13 -0
  762. package/integrations/bb-plugin-build/src/competition-defaults-schema.ts +122 -0
  763. package/integrations/bb-plugin-build/src/competition-defaults-service.ts +105 -0
  764. package/integrations/bb-plugin-build/src/competition-defaults-view.ts +138 -0
  765. package/integrations/bb-plugin-build/src/contract.ts +718 -0
  766. package/integrations/bb-plugin-build/src/execution-activity-view.ts +98 -0
  767. package/integrations/bb-plugin-build/src/finalize-model.ts +205 -0
  768. package/integrations/bb-plugin-build/src/finalize-schema.ts +150 -0
  769. package/integrations/bb-plugin-build/src/finalize-service.ts +330 -0
  770. package/integrations/bb-plugin-build/src/finalize-view.ts +159 -0
  771. package/integrations/bb-plugin-build/src/judge-operations-readback.ts +303 -0
  772. package/integrations/bb-plugin-build/src/judge-operations-schema.ts +33 -0
  773. package/integrations/bb-plugin-build/src/judge-operations-view.ts +459 -0
  774. package/integrations/bb-plugin-build/src/model.ts +1318 -0
  775. package/integrations/bb-plugin-build/src/monitor-service.ts +233 -0
  776. package/integrations/bb-plugin-build/src/panel-read-ux.ts +97 -0
  777. package/integrations/bb-plugin-build/src/patch-preview-schema.ts +166 -0
  778. package/integrations/bb-plugin-build/src/patch-preview-service.ts +480 -0
  779. package/integrations/bb-plugin-build/src/patch-preview-view.ts +109 -0
  780. package/integrations/bb-plugin-build/src/planning-readback.ts +228 -0
  781. package/integrations/bb-plugin-build/src/planning-service.ts +647 -0
  782. package/integrations/bb-plugin-build/src/planning-sync-evidence.ts +37 -0
  783. package/integrations/bb-plugin-build/src/planning-workspace-readback.ts +33 -0
  784. package/integrations/bb-plugin-build/src/planning-workspace-schema.ts +131 -0
  785. package/integrations/bb-plugin-build/src/planning-workspace.ts +333 -0
  786. package/integrations/bb-plugin-build/src/poll-handoff.ts +136 -0
  787. package/integrations/bb-plugin-build/src/project-target-server.ts +21 -0
  788. package/integrations/bb-plugin-build/src/project-target.ts +45 -0
  789. package/integrations/bb-plugin-build/src/reference-index.ts +218 -0
  790. package/integrations/bb-plugin-build/src/repository-identity.ts +17 -0
  791. package/integrations/bb-plugin-build/src/repository-schema.ts +30 -0
  792. package/integrations/bb-plugin-build/src/result-explorer-view.ts +597 -0
  793. package/integrations/bb-plugin-build/src/result-readback-model.ts +163 -0
  794. package/integrations/bb-plugin-build/src/result-readback-schema.ts +319 -0
  795. package/integrations/bb-plugin-build/src/result-readback-service.ts +333 -0
  796. package/integrations/bb-plugin-build/src/run-page-view.ts +332 -0
  797. package/integrations/bb-plugin-build/src/setup-config-schema.ts +293 -0
  798. package/integrations/bb-plugin-build/src/setup-config-service.ts +620 -0
  799. package/integrations/bb-plugin-build/src/setup-config-view.ts +388 -0
  800. package/integrations/bb-plugin-build/src/sprint-close-model.ts +150 -0
  801. package/integrations/bb-plugin-build/src/sprint-close-schema.ts +128 -0
  802. package/integrations/bb-plugin-build/src/sprint-close-service.ts +293 -0
  803. package/integrations/bb-plugin-build/src/sprint-close-view.ts +116 -0
  804. package/integrations/bb-plugin-build/src/sprint-composition-model.ts +709 -0
  805. package/integrations/bb-plugin-build/src/sprint-composition-readback.ts +231 -0
  806. package/integrations/bb-plugin-build/src/sprint-composition-schema.ts +597 -0
  807. package/integrations/bb-plugin-build/src/sprint-composition-service.ts +773 -0
  808. package/integrations/bb-plugin-build/src/sprint-composition-view.ts +1221 -0
  809. package/integrations/bb-plugin-build/src/sprint-execution-schema.ts +188 -0
  810. package/integrations/bb-plugin-build/src/sprint-execution-service.ts +289 -0
  811. package/integrations/bb-plugin-build/src/sprint-execution-view.ts +54 -0
  812. package/integrations/bb-plugin-build/src/task-authoring-model.ts +563 -0
  813. package/integrations/bb-plugin-build/src/task-authoring-schema.ts +629 -0
  814. package/integrations/bb-plugin-build/src/task-authoring-service.ts +842 -0
  815. package/integrations/bb-plugin-build/src/task-authoring-view.ts +1227 -0
  816. package/integrations/bb-plugin-build/src/task-catalog-schema.ts +46 -0
  817. package/integrations/bb-plugin-build/src/task-catalog-service.ts +44 -0
  818. package/integrations/bb-plugin-build/src/task-detail-readback.ts +56 -0
  819. package/integrations/bb-plugin-build/src/task-detail-schema.ts +171 -0
  820. package/integrations/bb-plugin-build/src/task-navigation.ts +446 -0
  821. package/integrations/bb-plugin-build/src/workbench-route.ts +74 -0
  822. package/package.json +306 -4
  823. package/schemas/README.md +80 -0
  824. package/schemas/build.config.schema.json +2110 -0
  825. package/schemas/config-v1.schema.json +136 -0
  826. package/schemas/execution-config.schema.json +47 -0
  827. package/schemas/judge-scoring.schema.json +257 -0
  828. package/schemas/provider-config.schema.json +179 -0
  829. package/schemas/telemetry-config.schema.json +79 -0
  830. package/schemas/user-preferences.schema.json +141 -0
  831. package/scripts/assert-node-runtime.mjs +146 -0
  832. package/scripts/preflight-native.mjs +49 -0
  833. package/scripts/setup-git-hooks.mjs +39 -0
  834. package/scripts/sync.sh +2871 -0
  835. package/scripts/write-node-launcher.sh +138 -0
  836. package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
  837. package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
  838. package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
  839. package/templates/.build-project/README.md +41 -0
  840. package/templates/.build-project/agents/README.md +50 -0
  841. package/templates/.build-project/agents/architect.md +10 -0
  842. package/templates/.build-project/agents/code-reviewer.md +10 -0
  843. package/templates/.build-project/agents/debugger.md +10 -0
  844. package/templates/.build-project/agents/documenter.md +10 -0
  845. package/templates/.build-project/agents/test-automator.md +10 -0
  846. package/templates/.build-project/config/build.config.jsonc +64 -0
  847. package/templates/.build-project/config/project-context.template.json +6 -0
  848. package/templates/.build-project/config/task-type-aliases.presets/kanban.yaml +14 -0
  849. package/templates/.build-project/config/task-type-aliases.presets/scrum.yaml +17 -0
  850. package/templates/.build-project/config/task-type-aliases.presets/xp.yaml +12 -0
  851. package/templates/.build-project/config/task-type-aliases.yaml +29 -0
  852. package/templates/.build-project/gitignore.template +70 -0
  853. package/templates/.build-project/task-types/analysis.yaml +38 -0
  854. package/templates/.build-project/task-types/architecture.yaml +35 -0
  855. package/templates/.build-project/task-types/doc.yaml +34 -0
  856. package/templates/.build-project/task-types/feature.yaml +22 -0
  857. package/templates/.build-project/task-types/general.yaml +4 -0
  858. package/templates/.build-project/task-types/security.yaml +38 -0
  859. package/templates/AGENTS.template.md +85 -0
  860. package/templates/CLAUDE.template.md +1 -0
  861. package/templates/GEMINI.template.md +1 -0
  862. package/templates/builtin-workflows/code-review.yaml +73 -0
  863. package/templates/builtin-workflows/skills/code-review/SKILL.md +61 -0
  864. package/templates/builtin-workflows/skills/execution-contract-analysis/SKILL.md +24 -0
  865. package/templates/builtin-workflows/skills/execution-contract-code/SKILL.md +19 -0
  866. package/templates/builtin-workflows/skills/execution-contract-structured/SKILL.md +17 -0
  867. package/templates/ci/incident-intake.mjs +787 -0
  868. package/templates/ci/incidents.yml.template +103 -0
  869. package/templates/ci/node.yml.template +17 -0
  870. package/templates/ci/python.yml.template +17 -0
  871. package/templates/guard-kit/GUARD_SETUP.md.template +258 -0
  872. package/templates/guard-kit/build-guard.yml.template +189 -0
  873. package/templates/guard-kit/check.mjs.template +932 -0
  874. package/templates/guard-kit/config.json.template +7 -0
  875. package/templates/guard-kit/policy.json.template +1 -0
  876. package/templates/profiles/README.md +57 -0
  877. package/templates/profiles/frontier-claude.json +23 -0
  878. package/templates/profiles/frontier-codex.json +23 -0
@@ -0,0 +1,1523 @@
1
+ import {
2
+ getTelemetryLogger
3
+ } from "./chunk-UUUDKV7N.js";
4
+ import {
5
+ SCHEMA_INVARIANTS,
6
+ VARIANT_EXECUTION_COLUMNS
7
+ } from "./chunk-XIBVFMLQ.js";
8
+ import {
9
+ globalScope,
10
+ projectScope
11
+ } from "./chunk-GAFJEYLK.js";
12
+ import {
13
+ TelemetryPathResolver
14
+ } from "./chunk-C3KCMAJP.js";
15
+ import {
16
+ applySqlitePragmas
17
+ } from "./chunk-HEP3ILP4.js";
18
+ import {
19
+ emitTelemetryFallbackWarning
20
+ } from "./chunk-BQJOGAWT.js";
21
+ import {
22
+ getGlobalTelemetryDir
23
+ } from "./chunk-56WPYDJH.js";
24
+ import {
25
+ emitWarning
26
+ } from "./chunk-7VRJHTGZ.js";
27
+
28
+ // src/telemetry/dashboard.ts
29
+ import fs from "fs";
30
+ import path from "path";
31
+ import Database from "better-sqlite3";
32
+
33
+ // src/telemetry/trend-direction.ts
34
+ var MIN_TASKS_FOR_TREND = 4;
35
+ function classifyTrend(taskCount, change, withinStableBand) {
36
+ if (taskCount < MIN_TASKS_FOR_TREND) return "insufficient_data";
37
+ if (withinStableBand) return "stable";
38
+ return change > 0 ? "improving" : "declining";
39
+ }
40
+
41
+ // src/telemetry/dashboard.ts
42
+ var TelemetryDashboard = class _TelemetryDashboard {
43
+ /**
44
+ * Exclude synthetic test rows from dashboard queries.
45
+ * Tests that leak into the real DB typically have NULL verdict and/or task IDs
46
+ * prefixed with common test IDs (test-* and task-*).
47
+ * Without this filter, synthetic rows appear as failures and distort success-rate metrics.
48
+ */
49
+ static REAL_DATA_FILTER = "verdict IS NOT NULL AND verdict != '' AND task_id NOT LIKE 'test-%' AND task_id NOT LIKE 'task-%'";
50
+ /** SQLite database connection for variant execution telemetry */
51
+ variantsDb;
52
+ /** SQLite database connection for validation telemetry */
53
+ validationsDb;
54
+ enabled = true;
55
+ projectScopeWhere;
56
+ projectScopeParams;
57
+ /**
58
+ * Creates a new TelemetryDashboard instance
59
+ *
60
+ * Establishes connections to SQLite telemetry databases in .build-project/telemetry/db/
61
+ *
62
+ * @param options - Configuration options
63
+ * @throws {Error} If database files cannot be accessed
64
+ */
65
+ constructor(options = {}) {
66
+ const buildDir = options.buildDir || path.join(process.cwd(), ".build-project");
67
+ const resolver = TelemetryPathResolver.getInstance();
68
+ const dbDir = resolver.resolveDbDir(buildDir);
69
+ const projectId = options.projectId?.trim() || resolver.getProjectId(buildDir, { register: false });
70
+ const isGlobalDb = path.resolve(dbDir) === path.resolve(path.join(getGlobalTelemetryDir(), "db"));
71
+ const tenancyScope = projectScope(projectId, {
72
+ includeLabs: true,
73
+ includeLegacyProjectRows: !isGlobalDb,
74
+ legacyProjectIds: [""]
75
+ });
76
+ this.projectScopeWhere = tenancyScope.where;
77
+ this.projectScopeParams = tenancyScope.params;
78
+ try {
79
+ if (!fs.existsSync(dbDir)) {
80
+ fs.mkdirSync(dbDir, { recursive: true });
81
+ }
82
+ this.variantsDb = new Database(path.join(dbDir, "variants.db"));
83
+ this.validationsDb = new Database(path.join(dbDir, "validations.db"));
84
+ try {
85
+ applySqlitePragmas(this.variantsDb);
86
+ } catch {
87
+ }
88
+ try {
89
+ applySqlitePragmas(this.validationsDb);
90
+ } catch {
91
+ }
92
+ this.enabled = true;
93
+ } catch (err) {
94
+ console.warn(
95
+ "Telemetry dashboard: directory creation failed, attempting to open DB files directly",
96
+ err
97
+ );
98
+ try {
99
+ this.variantsDb = new Database(path.join(dbDir, "variants.db"));
100
+ this.validationsDb = new Database(path.join(dbDir, "validations.db"));
101
+ try {
102
+ applySqlitePragmas(this.variantsDb);
103
+ } catch {
104
+ }
105
+ try {
106
+ applySqlitePragmas(this.validationsDb);
107
+ } catch {
108
+ }
109
+ this.enabled = true;
110
+ } catch (err2) {
111
+ emitWarning(
112
+ "CFG-002",
113
+ {
114
+ taskId: "system",
115
+ subsystem: "telemetry",
116
+ executionPhase: "setup"
117
+ },
118
+ {
119
+ severity: "ERROR" /* ERROR */,
120
+ metadata: {
121
+ operation: "dashboard_initialization",
122
+ error: err2 instanceof Error ? err2.message : String(err2),
123
+ dbDir
124
+ }
125
+ }
126
+ );
127
+ this.variantsDb = new Database(":memory:");
128
+ this.validationsDb = new Database(":memory:");
129
+ this.enabled = false;
130
+ }
131
+ }
132
+ }
133
+ /** Returns true if the dashboard has persistent DB backing (not in-memory fallback) */
134
+ isEnabled() {
135
+ return this.enabled;
136
+ }
137
+ /**
138
+ * Retrieve leaderboard data with optional advanced metrics and CI bounds.
139
+ * Returns structured rows for programmatic consumption (CLI export, UI).
140
+ */
141
+ getLeaderboardData(options = {}) {
142
+ const filters = [
143
+ this.projectScopeWhere,
144
+ "completed_at IS NOT NULL",
145
+ _TelemetryDashboard.REAL_DATA_FILTER
146
+ ];
147
+ const params = [...this.projectScopeParams];
148
+ if (options.taskId && options.taskId.trim() !== "") {
149
+ filters.push("task_id = ?");
150
+ params.push(options.taskId.trim());
151
+ }
152
+ let baseQuery = `
153
+ SELECT
154
+ variant,
155
+ COUNT(*) as total_tasks,
156
+ SUM(CASE WHEN verdict = 'success' THEN 1 ELSE 0 END) as successes,
157
+ CAST(SUM(CASE WHEN verdict = 'success' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) as success_rate,
158
+ AVG(completeness) as avg_completeness,
159
+ AVG(total_duration_sec) as avg_duration_sec,
160
+ MIN(started_at) as first_execution,
161
+ MAX(started_at) as last_execution
162
+ FROM variant_executions
163
+ WHERE ${filters.join(" AND ")}
164
+ GROUP BY variant
165
+ ORDER BY COALESCE(success_rate * 0.5 + AVG(completeness) / 200.0, success_rate) DESC, total_tasks DESC, variant
166
+ `;
167
+ const limit = typeof options.limit === "number" && Number.isFinite(options.limit) && options.limit > 0 ? Math.floor(options.limit) : void 0;
168
+ if (limit !== void 0) {
169
+ baseQuery += " LIMIT ?";
170
+ params.push(limit);
171
+ }
172
+ const stmt = this.variantsDb.prepare(baseQuery);
173
+ const rows = params.length ? stmt.all(...params) : stmt.all();
174
+ if (!rows) {
175
+ return [];
176
+ }
177
+ const result = rows.map((row) => {
178
+ const enriched = { ...row };
179
+ if (options.includeCI) {
180
+ const { lower, upper, width } = this.wilsonCI(row.success_rate, row.total_tasks);
181
+ enriched.ci_lower = lower;
182
+ enriched.ci_upper = upper;
183
+ enriched.ci_width = width;
184
+ }
185
+ return enriched;
186
+ });
187
+ if (options.includeFScore) {
188
+ const perVariantConf = this.computeConfusionByVariant();
189
+ result.forEach((row) => {
190
+ const conf = perVariantConf.get(row.variant);
191
+ const fScores = this.calculateFScores(conf);
192
+ if (!conf) {
193
+ Object.assign(row, {
194
+ ...fScores,
195
+ mcc: null,
196
+ balanced_accuracy: null
197
+ });
198
+ return;
199
+ }
200
+ const { tp, fp, tn, fn } = conf;
201
+ const tpr = tp + fn > 0 ? tp / (tp + fn) : null;
202
+ const tnr = tn + fp > 0 ? tn / (tn + fp) : null;
203
+ const balancedAccuracy = tpr !== null && tnr !== null ? (tpr + tnr) / 2 : null;
204
+ const mccDen = Math.sqrt((tp + fp) * (tp + fn) * (tn + fp) * (tn + fn));
205
+ const mcc = mccDen > 0 ? (tp * tn - fp * fn) / mccDen : null;
206
+ Object.assign(row, {
207
+ ...fScores,
208
+ mcc,
209
+ balanced_accuracy: balancedAccuracy
210
+ });
211
+ });
212
+ }
213
+ return result;
214
+ }
215
+ /**
216
+ * Retrieve prompt performance data with optional CI and F-scores.
217
+ * Grouped by prompt_version with per-variant breakdowns.
218
+ */
219
+ getPromptPerformanceData(options = {}) {
220
+ const query = `
221
+ SELECT
222
+ variant,
223
+ prompt_version,
224
+ COUNT(*) as sample_size,
225
+ CAST(SUM(CASE WHEN verdict = 'success' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) as success_rate
226
+ FROM variant_executions
227
+ WHERE ${this.projectScopeWhere}
228
+ AND completed_at IS NOT NULL AND prompt_version IS NOT NULL
229
+ AND ${_TelemetryDashboard.REAL_DATA_FILTER}
230
+ GROUP BY variant, prompt_version
231
+ ORDER BY variant, prompt_version
232
+ `;
233
+ const rows = this.variantsDb.prepare(query).all(...this.projectScopeParams);
234
+ if (rows.length === 0) return [];
235
+ const confByVariantPrompt = options.includeFScore ? this.computeConfusionByVariantPrompt() : /* @__PURE__ */ new Map();
236
+ const byPrompt = /* @__PURE__ */ new Map();
237
+ rows.forEach((r) => {
238
+ const arr = byPrompt.get(r.prompt_version) || [];
239
+ const enriched = {
240
+ variant: r.variant,
241
+ prompt_version: r.prompt_version,
242
+ total_tasks: r.sample_size,
243
+ successes: Math.round(r.success_rate * r.sample_size),
244
+ success_rate: r.success_rate,
245
+ avg_completeness: null,
246
+ // Not available in this query
247
+ sample_size: r.sample_size
248
+ };
249
+ if (options.includeCI) {
250
+ const { lower, upper } = this.wilsonCI(r.success_rate, r.sample_size);
251
+ enriched.ci_lower = lower;
252
+ enriched.ci_upper = upper;
253
+ }
254
+ if (options.includeFScore) {
255
+ const key = `${r.variant}@@${r.prompt_version}`;
256
+ const conf = confByVariantPrompt.get(key);
257
+ Object.assign(enriched, this.calculateFScores(conf));
258
+ }
259
+ arr.push(enriched);
260
+ byPrompt.set(r.prompt_version, arr);
261
+ });
262
+ const result = [];
263
+ for (const [prompt, arr] of byPrompt.entries()) {
264
+ const avgSuccessRate = arr.reduce((s, v) => s + v.success_rate, 0) / arr.length;
265
+ const totalSamples = arr.reduce((s, v) => s + v.sample_size, 0);
266
+ const mean = avgSuccessRate;
267
+ const variance = arr.reduce((s, v) => s + (v.success_rate - mean) ** 2, 0) / arr.length;
268
+ const consistencyScore = Math.max(0, 1 - Math.sqrt(variance));
269
+ const shouldPrune = avgSuccessRate < 0.5 || totalSamples < 3 || consistencyScore < 0.3;
270
+ result.push({
271
+ prompt_version: prompt,
272
+ total_samples: totalSamples,
273
+ avg_success_rate: avgSuccessRate,
274
+ consistency_score: consistencyScore,
275
+ should_prune: shouldPrune,
276
+ variants: arr.map((v) => ({
277
+ variant: String(v.variant),
278
+ sample_size: v.sample_size,
279
+ success_rate: v.success_rate,
280
+ ci_lower: v.ci_lower,
281
+ ci_upper: v.ci_upper,
282
+ precision: v.precision,
283
+ recall: v.recall,
284
+ f1: v.f1,
285
+ f05: v.f05,
286
+ f2: v.f2
287
+ }))
288
+ });
289
+ }
290
+ return result.sort(
291
+ (a, b) => b.avg_success_rate * 0.7 + b.consistency_score * 0.3 - (a.avg_success_rate * 0.7 + a.consistency_score * 0.3)
292
+ );
293
+ }
294
+ getTrendTaskGroups(limit) {
295
+ const query = `
296
+ SELECT task_id, variant, verdict, completeness, started_at, total_duration_sec
297
+ FROM variant_executions
298
+ WHERE ${this.projectScopeWhere}
299
+ AND completed_at IS NOT NULL
300
+ AND ${_TelemetryDashboard.REAL_DATA_FILTER}
301
+ ORDER BY started_at DESC
302
+ LIMIT ?
303
+ `;
304
+ const rows = this.variantsDb.prepare(query).all(...this.projectScopeParams, limit * 3);
305
+ if (rows.length === 0) return [];
306
+ const byVariant = {};
307
+ rows.forEach((row) => {
308
+ if (!byVariant[row.variant]) {
309
+ byVariant[row.variant] = [];
310
+ }
311
+ const variantArray = byVariant[row.variant];
312
+ if (variantArray) {
313
+ variantArray.push(row);
314
+ }
315
+ });
316
+ const groups = [];
317
+ for (const variant of Object.keys(byVariant)) {
318
+ const variantData = byVariant[variant];
319
+ if (!variantData) continue;
320
+ groups.push({ variant, tasks: variantData.slice(0, limit) });
321
+ }
322
+ return groups;
323
+ }
324
+ calculateTrendWindow(tasks) {
325
+ const successes = tasks.filter((task) => task.verdict === "success").length;
326
+ const successRate = tasks.length > 0 ? successes / tasks.length : 0;
327
+ const avgCompleteness = tasks.reduce((sum, task) => sum + (task.completeness || 0), 0) / (tasks.length || 1);
328
+ const recentWindow = Math.min(5, Math.floor(tasks.length / 2));
329
+ const olderWindow = Math.min(5, tasks.length - recentWindow);
330
+ const recentTasks = tasks.slice(0, recentWindow);
331
+ const olderTasks = tasks.slice(recentWindow, recentWindow + olderWindow);
332
+ const recentSuccessRate = recentTasks.length ? recentTasks.filter((task) => task.verdict === "success").length / recentTasks.length : 0;
333
+ const olderSuccessRate = olderTasks.length ? olderTasks.filter((task) => task.verdict === "success").length / olderTasks.length : recentSuccessRate;
334
+ return {
335
+ successes,
336
+ successRate,
337
+ avgCompleteness,
338
+ recentWindow,
339
+ olderWindow,
340
+ recentSuccessRate,
341
+ olderSuccessRate,
342
+ successTrend: recentSuccessRate - olderSuccessRate
343
+ };
344
+ }
345
+ /**
346
+ * Retrieve trend data with optional CI and validation fusion (warnings/errors).
347
+ */
348
+ getTrendsData(limit = 10, options = {}) {
349
+ const out = [];
350
+ for (const { variant, tasks } of this.getTrendTaskGroups(limit)) {
351
+ const { successRate, avgCompleteness, recentSuccessRate, olderSuccessRate, successTrend } = this.calculateTrendWindow(tasks);
352
+ const delta = successTrend * 100;
353
+ const entry = {
354
+ variant,
355
+ tasks: tasks.length,
356
+ success_rate: successRate,
357
+ avg_completeness: avgCompleteness,
358
+ recent_success_rate: recentSuccessRate,
359
+ older_success_rate: olderSuccessRate,
360
+ delta_pp: delta,
361
+ trend: classifyTrend(tasks.length, delta, delta >= -5 && delta <= 5)
362
+ };
363
+ if (options.includeCI) {
364
+ const { lower, upper } = this.wilsonCI(successRate, tasks.length);
365
+ entry.ci_lower = lower;
366
+ entry.ci_upper = upper;
367
+ }
368
+ if (options.includeValidationFusion) {
369
+ const taskIds = tasks.map((t) => t.task_id);
370
+ if (taskIds.length) {
371
+ const placeholders = taskIds.map(() => "?").join(",");
372
+ const validations = this.validationsDb.prepare(
373
+ `SELECT task_id, AVG(warnings_count) as avg_warn, AVG(errors_count) as avg_err
374
+ FROM validations WHERE ${this.projectScopeWhere}
375
+ AND task_id IN (${placeholders}) GROUP BY task_id`
376
+ ).all(...this.projectScopeParams, ...taskIds);
377
+ const avgWarn = validations.reduce((s, v) => s + (v.avg_warn || 0), 0) / (validations.length || 1);
378
+ const avgErr = validations.reduce((s, v) => s + (v.avg_err || 0), 0) / (validations.length || 1);
379
+ entry.avg_validation_warnings = avgWarn;
380
+ entry.avg_validation_errors = avgErr;
381
+ entry.brittle_success = successRate >= 0.8 && (avgErr > 0 || avgWarn >= 2);
382
+ }
383
+ }
384
+ out.push(entry);
385
+ }
386
+ return out;
387
+ }
388
+ /**
389
+ * Generate variant performance leaderboard
390
+ *
391
+ * Queries the variant_executions table to rank all variants by a weighted score
392
+ * combining success rate and completeness. Displays comprehensive performance
393
+ * metrics in a formatted table with insights.
394
+ *
395
+ * **SQL Query Details:**
396
+ * - **Table:** variant_executions
397
+ * - **Filters:** completed_at IS NOT NULL (excludes in-flight executions)
398
+ * - **Groups by:** variant
399
+ * - **Orders by:** Weighted score DESC
400
+ *
401
+ * **Scoring Formula:**
402
+ * ```
403
+ * score = (success_rate × 0.5) + (avg_completeness / 100 × 0.5)
404
+ * ```
405
+ *
406
+ * **Metrics Calculated:**
407
+ * - Total tasks executed
408
+ * - Success count and rate
409
+ * - Average completeness percentage
410
+ * - Average execution duration
411
+ * - First and last execution timestamps
412
+ *
413
+ * **Output Format:**
414
+ * - Table header with scoring explanation
415
+ * - Ranked rows: Rank | Variant | Score | Success Rate | Completeness | Duration | Tasks
416
+ * - Performance insights: Best performer and improvement opportunity
417
+ *
418
+ * @example
419
+ * ```typescript
420
+ * dashboard.leaderboard();
421
+ * // Output:
422
+ * //
423
+ * // Ranked by weighted score: (success_rate × 0.5) + (completeness × 0.5)
424
+ * //
425
+ * // Rank | Variant | Score | Success Rate | Completeness | Duration | Tasks
426
+ * //
427
+ * // 1 | CLAUDE | 87.3 | 85.0% | 89.5% | 45s | 20
428
+ * // 2 | CURSOR | 82.1 | 80.0% | 84.2% | 38s | 15
429
+ * // ...
430
+ * ```
431
+ *
432
+ * @returns {void} Prints formatted leaderboard to console
433
+ */
434
+ leaderboard(options = {}) {
435
+ try {
436
+ const results = this.getLeaderboardData({
437
+ includeCI: true,
438
+ includeFScore: true,
439
+ taskId: options.taskId,
440
+ limit: options.limit
441
+ });
442
+ if (results.length === 0) {
443
+ console.log("No variant execution data available.");
444
+ console.log(" Run some tasks to generate telemetry data.");
445
+ return;
446
+ }
447
+ console.log("\nVariant Performance Leaderboard");
448
+ console.log("Ranked by weighted score: (success_rate \xD7 0.5) + (completeness \xD7 0.5)");
449
+ console.log("Rank | Variant | Score | Success Rate | Completeness | Duration | Tasks");
450
+ const computeScore = (r) => r.avg_completeness != null ? r.success_rate * 0.5 + r.avg_completeness / 100 * 0.5 : r.success_rate;
451
+ results.slice().sort((a, b) => computeScore(a) < computeScore(b) ? 1 : -1).forEach((row, i) => {
452
+ const score = computeScore(row) * 100;
453
+ const successRate = (row.success_rate * 100).toFixed(1);
454
+ const completeness = row.avg_completeness != null ? row.avg_completeness.toFixed(1) : "N/A";
455
+ const duration = row.avg_duration_sec ? `${Math.round(row.avg_duration_sec)}s` : "N/A";
456
+ const variantPadded = row.variant.toUpperCase().padEnd(12);
457
+ const scorePadded = `${score.toFixed(1)}`.padStart(5);
458
+ const successPadded = `${successRate}%`.padStart(12);
459
+ const completenessPadded = `${completeness}%`.padStart(12);
460
+ const durationPadded = duration.padStart(8);
461
+ const tasksPadded = row.total_tasks.toString().padStart(5);
462
+ console.log(
463
+ `${(i + 1).toString().padStart(4)} | ${variantPadded} | ${scorePadded} | ${successPadded} | ${completenessPadded} | ${durationPadded} | ${tasksPadded}`
464
+ );
465
+ const ciLower = row.ci_lower !== void 0 ? (row.ci_lower * 100).toFixed(1) : null;
466
+ const ciUpper = row.ci_upper !== void 0 ? (row.ci_upper * 100).toFixed(1) : null;
467
+ if (ciLower !== null && ciUpper !== null) {
468
+ console.log(
469
+ ` CI95: [${ciLower}%, ${ciUpper}%] ` + (row.f1 != null ? `F1: ${(row.f1 * 100).toFixed(1)} F0.5: ${row.f05 != null ? (row.f05 * 100).toFixed(1) : "\u2014"} F2: ${row.f2 != null ? (row.f2 * 100).toFixed(1) : "\u2014"}` : "")
470
+ );
471
+ }
472
+ });
473
+ const sorted = results.slice().sort((a, b) => computeScore(a) < computeScore(b) ? 1 : -1);
474
+ const best = sorted[0];
475
+ const worst = sorted[sorted.length - 1];
476
+ if (best && worst) {
477
+ console.log(
478
+ `
479
+ Best Performer: ${best.variant.toUpperCase()} (${(computeScore(best) * 100).toFixed(1)}/100)`
480
+ );
481
+ if (computeScore(worst) < computeScore(best)) {
482
+ console.log(
483
+ `Improvement Opportunity: ${worst.variant.toUpperCase()} (${(computeScore(worst) * 100).toFixed(1)}/100)`
484
+ );
485
+ }
486
+ }
487
+ if (sorted.length >= 2) {
488
+ const a = sorted[0];
489
+ const b = sorted[1];
490
+ if (!a || !b) return;
491
+ const { lower: aL, upper: aU } = this.wilsonCI(a.success_rate, a.total_tasks);
492
+ const { lower: bL, upper: bU } = this.wilsonCI(b.success_rate, b.total_tasks);
493
+ const overlap = !(aL > bU || bL > aU);
494
+ const p = this.twoProportionPValue(
495
+ a.successes,
496
+ a.total_tasks - a.successes,
497
+ b.successes,
498
+ b.total_tasks - b.successes
499
+ );
500
+ if (!overlap && p < 0.05) {
501
+ console.log(
502
+ "Significance: Statistically higher than runner-up (p<0.05). Likely truly better."
503
+ );
504
+ } else {
505
+ console.log("Significance: Likely indistinguishable at 95% CI. Collect more data.");
506
+ }
507
+ }
508
+ } catch (error) {
509
+ console.error("Error generating leaderboard:", error.message);
510
+ console.log(" Ensure telemetry database exists and contains data.");
511
+ }
512
+ }
513
+ /**
514
+ * Analyze prompt performance across variants
515
+ *
516
+ * Queries variant_executions grouped by prompt_version to identify:
517
+ * - Reliable prompts (high success rate, low variance)
518
+ * - Unreliable prompts (low success rate, high variance)
519
+ * - Prompts that should be pruned
520
+ *
521
+ * **SQL Query Details:**
522
+ * - **Table:** variant_executions
523
+ * - **Filters:** completed_at IS NOT NULL AND prompt_version IS NOT NULL
524
+ * - **Groups by:** variant, prompt_version
525
+ * - **Orders by:** variant, prompt_version
526
+ *
527
+ * **Analysis Methodology:**
528
+ * 1. **Success Rate:** Average success across all variants for this prompt
529
+ * 2. **Consistency Score:** 1 - sqrt(variance) where variance measures success rate spread
530
+ * 3. **Overall Score:** success_rate × 0.7 + consistency_score × 0.3
531
+ * 4. **Prune Recommendations:** Flags prompts with:
532
+ * - Success rate < 50%
533
+ * - Sample size < 3
534
+ * - Consistency score < 0.3
535
+ *
536
+ * **Metrics Per Prompt:**
537
+ * - Overall success rate across all variants
538
+ * - Consistency score (0-100, higher = more consistent)
539
+ * - Total sample size (sum across variants)
540
+ * - Per-variant breakdown with success rates
541
+ * - Pruning recommendation if applicable
542
+ *
543
+ * **Status Indicators:**
544
+ * - EXCELLENT: ≥80% success rate
545
+ * - GOOD: ≥60% success rate
546
+ * - Fair: FAIR: ≥50% success rate
547
+ * - PRUNE: <50% success rate or poor consistency
548
+ *
549
+ * @example
550
+ * ```typescript
551
+ * dashboard.promptPerformance();
552
+ * // Output:
553
+ * // Prompt: v2.1.0 EXCELLENT
554
+ * //
555
+ * // Overall Success Rate: 85.0%
556
+ * // Consistency Score: 92.3%
557
+ * // Total Sample Size: 45
558
+ * // Variant Breakdown:
559
+ * // claude : 87.5% success (n=16)
560
+ * // cursor : 82.4% success (n=17)
561
+ * // codex : 75.0% success (n=12)
562
+ * // ...
563
+ * ```
564
+ *
565
+ * @returns {void} Prints formatted prompt analysis to console
566
+ */
567
+ promptPerformance() {
568
+ try {
569
+ const promptAnalysis = this.getPromptPerformanceData();
570
+ if (promptAnalysis.length === 0) {
571
+ console.log("No prompt performance data available.");
572
+ console.log(" Run tasks with different prompt versions to generate data.");
573
+ return;
574
+ }
575
+ console.log("\nPrompt Performance Analysis");
576
+ promptAnalysis.forEach((analysis) => {
577
+ const {
578
+ prompt_version: promptVersion,
579
+ variants,
580
+ avg_success_rate: avgSuccessRate,
581
+ total_samples: totalSamples,
582
+ consistency_score: consistencyScore,
583
+ should_prune: shouldPrune
584
+ } = analysis;
585
+ const status = shouldPrune ? "PRUNE" : avgSuccessRate >= 0.8 ? "EXCELLENT" : avgSuccessRate >= 0.6 ? "GOOD" : "FAIR";
586
+ console.log(`
587
+ Prompt: ${promptVersion} ${status}`);
588
+ console.log(`Overall Success Rate: ${(avgSuccessRate * 100).toFixed(1)}%`);
589
+ console.log(`Consistency Score: ${(consistencyScore * 100).toFixed(1)}%`);
590
+ console.log(`Total Sample Size: ${totalSamples}`);
591
+ console.log("Variant Breakdown:");
592
+ if (variants) {
593
+ variants.forEach((v) => {
594
+ const performance = v.success_rate >= 0.8 ? "EXCELLENT" : v.success_rate >= 0.6 ? "GOOD" : "PRUNE";
595
+ console.log(
596
+ ` ${performance} ${String(v.variant).padEnd(12)}: ${(v.success_rate * 100).toFixed(1)}% success (n=${v.sample_size})`
597
+ );
598
+ });
599
+ }
600
+ if (shouldPrune) {
601
+ console.log("\nRECOMMENDATION: Consider pruning this prompt version");
602
+ }
603
+ });
604
+ } catch (error) {
605
+ console.error("Error analyzing prompt performance:", error.message);
606
+ console.log(" Ensure telemetry database exists and contains data.");
607
+ }
608
+ }
609
+ /**
610
+ * Show historical performance trends over time
611
+ *
612
+ * Queries recent variant executions to analyze performance trends by comparing
613
+ * recent vs. older task outcomes. Useful for identifying improving or declining
614
+ * variant performance over time.
615
+ *
616
+ * **SQL Query Details:**
617
+ * - **Table:** variant_executions
618
+ * - **Filters:** completed_at IS NOT NULL
619
+ * - **Orders by:** started_at DESC (most recent first)
620
+ * - **Limit:** limit × 3 (allows showing limit tasks per variant)
621
+ *
622
+ * **Trend Analysis Methodology:**
623
+ * 1. Splits tasks into two windows per variant:
624
+ * - **Recent window:** Last N/2 tasks (up to 5 tasks)
625
+ * - **Older window:** Previous N/2 tasks (up to 5 tasks)
626
+ * 2. Compares success rates between windows
627
+ * 3. Classifies trend as:
628
+ * - **Improving:** Recent success rate >10% higher
629
+ * - **Stable:** Within ±10% change
630
+ * - **Declining:** Recent success rate >10% lower
631
+ *
632
+ * **Metrics Per Variant:**
633
+ * - Overall success rate (all tasks in window)
634
+ * - Average completeness percentage
635
+ * - Recent window success rate
636
+ * - Older window success rate
637
+ * - Percentage point change with trend indicator
638
+ *
639
+ * @param limit - Maximum number of tasks to show per variant (default: 10)
640
+ *
641
+ * @example
642
+ * ```typescript
643
+ * dashboard.trends(15);
644
+ * // Output:
645
+ * // CLAUDE
646
+ * //
647
+ * // Overall Performance (15 tasks):
648
+ * // Success Rate: 86.7% (13/15)
649
+ * // Avg Completeness: 88.3%
650
+ * //
651
+ * // Trend Analysis (improving):
652
+ * // Recent Success: 90.0% (last 5 tasks)
653
+ * // Previous Success: 75.0% (previous 5 tasks)
654
+ * // Change: +15.0 percentage points
655
+ * // ...
656
+ * ```
657
+ *
658
+ * @returns {void} Prints formatted trend analysis to console
659
+ */
660
+ trends(limit = 10) {
661
+ try {
662
+ const groups = this.getTrendTaskGroups(limit);
663
+ if (groups.length === 0) {
664
+ console.log("No historical trend data available.");
665
+ console.log(" Run some tasks to generate trend data.");
666
+ return;
667
+ }
668
+ console.log(`
669
+ Historical Trends (last ${limit} tasks per variant)`);
670
+ groups.forEach(({ variant, tasks }) => {
671
+ if (tasks.length === 0) {
672
+ return;
673
+ }
674
+ const {
675
+ successes,
676
+ successRate,
677
+ avgCompleteness,
678
+ recentWindow,
679
+ olderWindow,
680
+ recentSuccessRate,
681
+ olderSuccessRate,
682
+ successTrend
683
+ } = this.calculateTrendWindow(tasks);
684
+ const trendText = classifyTrend(
685
+ tasks.length,
686
+ successTrend,
687
+ Math.abs(successTrend) < 0.1
688
+ ).replace("_", " ");
689
+ console.log(`
690
+ ${variant.toUpperCase()} ${trendText}`);
691
+ console.log(`Overall Performance (${tasks.length} tasks):`);
692
+ console.log(
693
+ ` Success Rate: ${(successRate * 100).toFixed(1)}% (${successes}/${tasks.length})`
694
+ );
695
+ console.log(` Avg Completeness: ${avgCompleteness.toFixed(1)}%`);
696
+ console.log(`
697
+ Trend Analysis (${trendText}):`);
698
+ console.log(
699
+ ` Recent Success: ${(recentSuccessRate * 100).toFixed(1)}% (last ${recentWindow} tasks)`
700
+ );
701
+ console.log(
702
+ ` Previous Success: ${(olderSuccessRate * 100).toFixed(1)}% (previous ${olderWindow} tasks)`
703
+ );
704
+ console.log(
705
+ ` Change: ${successTrend > 0 ? "+" : ""}${(successTrend * 100).toFixed(1)} percentage points`
706
+ );
707
+ });
708
+ } catch (error) {
709
+ console.error("Error analyzing trends:", error.message);
710
+ console.log(" Ensure telemetry database exists and contains data.");
711
+ }
712
+ }
713
+ /** Compute Wilson 95% CI for success rate */
714
+ wilsonCI(p, n) {
715
+ if (!n || n <= 0) return { lower: 0, upper: 1, width: 1 };
716
+ const z = 1.96;
717
+ const denom = 1 + z * z / n;
718
+ const center = (p + z * z / (2 * n)) / denom;
719
+ const margin = z / denom * Math.sqrt(p * (1 - p) / n + z * z / (4 * n * n));
720
+ const lower = Math.max(0, center - margin);
721
+ const upper = Math.min(1, center + margin);
722
+ return { lower, upper, width: upper - lower };
723
+ }
724
+ /** Two-proportion z-test p-value (two-tailed). Inputs: successes/failures for A and B */
725
+ twoProportionPValue(aSucc, aFail, bSucc, bFail) {
726
+ const n1 = aSucc + aFail;
727
+ const n2 = bSucc + bFail;
728
+ if (n1 === 0 || n2 === 0) return 1;
729
+ const p1 = aSucc / n1;
730
+ const p2 = bSucc / n2;
731
+ const pPool = (aSucc + bSucc) / (n1 + n2);
732
+ const se = Math.sqrt(pPool * (1 - pPool) * (1 / n1 + 1 / n2));
733
+ if (se === 0) return 1;
734
+ const z = Math.abs((p1 - p2) / se);
735
+ const p = 2 * (1 - this.normalCdf(z));
736
+ return Math.max(0, Math.min(1, p));
737
+ }
738
+ /** Standard normal CDF approximation */
739
+ normalCdf(z) {
740
+ const t = 1 / (1 + 0.2316419 * z);
741
+ const d = Math.exp(-0.5 * z * z) / Math.sqrt(2 * Math.PI);
742
+ const poly = (((1.330274429 * t - 1.821255978) * t + 1.781477937) * t - 0.356563782) * t + 0.31938153;
743
+ const approx = 1 - d * poly;
744
+ return z >= 0 ? approx : 1 - approx;
745
+ }
746
+ calculateFScores(conf) {
747
+ if (!conf) return { precision: null, recall: null, f1: null, f05: null, f2: null };
748
+ const { tp, fp, fn } = conf;
749
+ const precision = tp + fp > 0 ? tp / (tp + fp) : null;
750
+ const recall = tp + fn > 0 ? tp / (tp + fn) : null;
751
+ const f1 = precision && recall && precision + recall > 0 ? 2 * precision * recall / (precision + recall) : null;
752
+ const beta05 = 0.5;
753
+ const f05 = precision && recall && beta05 * beta05 * precision + recall > 0 ? (1 + beta05 * beta05) * precision * recall / (beta05 * beta05 * precision + recall) : null;
754
+ const beta2 = 2;
755
+ const f2 = precision && recall && beta2 * beta2 * precision + recall > 0 ? (1 + beta2 * beta2) * precision * recall / (beta2 * beta2 * precision + recall) : null;
756
+ return { precision, recall, f1, f05, f2 };
757
+ }
758
+ /**
759
+ * Compute confusion-matrix aggregates by variant, using validations as predictor
760
+ * (predicted success = all validations for a task passed; conservative heuristic).
761
+ */
762
+ computeConfusionByVariant() {
763
+ return this.computeConfusion("variant");
764
+ }
765
+ /** Confusion by variant+prompt_version for prompt analytics */
766
+ computeConfusionByVariantPrompt() {
767
+ return this.computeConfusion("variantPrompt");
768
+ }
769
+ computeConfusion(grouping) {
770
+ const validations = this.validationsDb.prepare(
771
+ `SELECT task_id, MIN(passed) as all_passed, COUNT(*) as cnt
772
+ FROM validations WHERE ${this.projectScopeWhere} GROUP BY task_id`
773
+ ).all(...this.projectScopeParams);
774
+ const predMap = /* @__PURE__ */ new Map();
775
+ validations.forEach((v) => {
776
+ if (v.cnt > 0) predMap.set(v.task_id, v.all_passed);
777
+ });
778
+ const outcomeQuery = grouping === "variant" ? `SELECT task_id, variant, CASE WHEN verdict = 'success' THEN 1 ELSE 0 END as actual_success
779
+ FROM variant_executions WHERE ${this.projectScopeWhere}
780
+ AND completed_at IS NOT NULL AND ${_TelemetryDashboard.REAL_DATA_FILTER}` : `SELECT task_id, variant, prompt_version, CASE WHEN verdict = 'success' THEN 1 ELSE 0 END as actual_success
781
+ FROM variant_executions WHERE ${this.projectScopeWhere}
782
+ AND completed_at IS NOT NULL AND prompt_version IS NOT NULL
783
+ AND ${_TelemetryDashboard.REAL_DATA_FILTER}`;
784
+ const execRows = this.variantsDb.prepare(outcomeQuery).all(...this.projectScopeParams);
785
+ const confByGroup = /* @__PURE__ */ new Map();
786
+ for (const r of execRows) {
787
+ const pred = grouping === "variantPrompt" ? predMap.has(r.task_id) ? predMap.get(r.task_id) : null : predMap.get(r.task_id);
788
+ if (grouping === "variantPrompt" ? pred === null : pred === void 0) continue;
789
+ const key = grouping === "variantPrompt" ? `${r.variant}@@${r.prompt_version}` : r.variant;
790
+ let agg = confByGroup.get(key);
791
+ if (!agg) {
792
+ agg = { tp: 0, fp: 0, tn: 0, fn: 0 };
793
+ confByGroup.set(key, agg);
794
+ }
795
+ if (pred === 1 && r.actual_success === 1) agg.tp++;
796
+ else if (pred === 1 && r.actual_success === 0) agg.fp++;
797
+ else if (pred === 0 && r.actual_success === 0) agg.tn++;
798
+ else if (pred === 0 && r.actual_success === 1) agg.fn++;
799
+ }
800
+ return confByGroup;
801
+ }
802
+ /**
803
+ * Close all database connections
804
+ *
805
+ * Cleanly closes the SQLite database connections for both variants and validations
806
+ * databases. Should be called when the dashboard is no longer needed to free resources.
807
+ *
808
+ * @returns {void}
809
+ *
810
+ * @example
811
+ * ```typescript
812
+ * const dashboard = new TelemetryDashboard();
813
+ * try {
814
+ * dashboard.leaderboard();
815
+ * dashboard.trends();
816
+ * } finally {
817
+ * // Always close connections
818
+ * dashboard.close();
819
+ * }
820
+ * ```
821
+ *
822
+ * @remarks
823
+ * This method is idempotent - calling it multiple times is safe and will not
824
+ * throw errors. However, attempting to use dashboard methods after closing will
825
+ * result in database errors.
826
+ */
827
+ close() {
828
+ this.variantsDb.close();
829
+ this.validationsDb.close();
830
+ }
831
+ };
832
+
833
+ // src/telemetry/event-types.ts
834
+ function isCoreVariantEvent(event) {
835
+ return ["started", "first_commit", "completed", "failed", "evaluated"].includes(event);
836
+ }
837
+ function validateEventType(event) {
838
+ if (isCoreVariantEvent(event)) {
839
+ return event;
840
+ }
841
+ throw new Error(`Unrecognized telemetry event type: ${event}`);
842
+ }
843
+
844
+ // src/telemetry/insights.ts
845
+ import fs2 from "fs";
846
+ import path2 from "path";
847
+ import Database2 from "better-sqlite3";
848
+ var TelemetryInsightEngine = class _TelemetryInsightEngine {
849
+ static REAL_DATA_FILTER = "verdict IS NOT NULL AND verdict != '' AND task_id NOT LIKE 'test-%' AND task_id NOT LIKE 'task-%'";
850
+ buildDir;
851
+ variantsDb;
852
+ enabled = true;
853
+ enableRealTime;
854
+ calculationInterval;
855
+ intervalId;
856
+ projectId;
857
+ includeAllProjects;
858
+ tenancy;
859
+ projectScopeWhere;
860
+ projectScopeParams;
861
+ /**
862
+ * Initialize the TelemetryInsightEngine with configuration options.
863
+ *
864
+ * @param options - Configuration options for the insight engine
865
+ */
866
+ constructor(options = {}) {
867
+ this.buildDir = options.buildDir || path2.join(process.cwd(), ".build-project");
868
+ const resolver = TelemetryPathResolver.getInstance();
869
+ const dbDir = resolver.resolveDbDir(this.buildDir);
870
+ this.includeAllProjects = options.includeAllProjects === true;
871
+ this.tenancy = this.includeAllProjects ? "all-projects" : "project";
872
+ this.projectId = options.projectId?.trim() || resolver.getProjectId(this.buildDir, { register: false });
873
+ const isGlobalDb = path2.resolve(dbDir) === path2.resolve(path2.join(getGlobalTelemetryDir(), "db"));
874
+ const tenancyScope = this.includeAllProjects ? globalScope({ includeLabs: true }) : projectScope(this.projectId, {
875
+ includeLabs: true,
876
+ includeLegacyProjectRows: !isGlobalDb,
877
+ legacyProjectIds: [""]
878
+ });
879
+ this.projectScopeWhere = tenancyScope.where;
880
+ this.projectScopeParams = tenancyScope.params;
881
+ this.enableRealTime = options.enableRealTime ?? false;
882
+ this.calculationInterval = options.calculationInterval ?? 3e5;
883
+ try {
884
+ let parentDir = path2.dirname(dbDir);
885
+ while (!fs2.existsSync(parentDir) && parentDir !== path2.dirname(parentDir)) {
886
+ parentDir = path2.dirname(parentDir);
887
+ }
888
+ if (!fs2.existsSync(parentDir) || parentDir === path2.sep) {
889
+ throw new Error(`Telemetry base directory cannot be created at: ${dbDir}`);
890
+ }
891
+ const parentStats = fs2.statSync(parentDir);
892
+ if ((parentStats.mode & 146) === 0) {
893
+ throw new Error(`Telemetry parent directory is not writable: ${parentDir}`);
894
+ }
895
+ if (!fs2.existsSync(dbDir)) {
896
+ fs2.mkdirSync(dbDir, { recursive: true });
897
+ }
898
+ const stats = fs2.statSync(dbDir);
899
+ const writable = (stats.mode & 146) !== 0;
900
+ if (!writable) {
901
+ throw new Error(`Telemetry DB directory is not writable: ${dbDir}`);
902
+ }
903
+ this.variantsDb = new Database2(path2.join(dbDir, "variants.db"));
904
+ applySqlitePragmas(this.variantsDb);
905
+ this.bootstrapSchema();
906
+ this.enabled = true;
907
+ } catch (err) {
908
+ import("./warning-JSKSFKBT.js").then(({ emitTelemetryFallbackWarning: emitTelemetryFallbackWarning2 }) => {
909
+ emitTelemetryFallbackWarning2(
910
+ "could not initialize DB directory, using in-memory fallback",
911
+ err
912
+ );
913
+ }).catch(() => {
914
+ });
915
+ this.enabled = false;
916
+ this.variantsDb = new Database2(":memory:");
917
+ this.bootstrapSchema();
918
+ }
919
+ if (this.enableRealTime) {
920
+ this.startRealTimeMonitoring();
921
+ }
922
+ }
923
+ bootstrapSchema() {
924
+ const statements = [
925
+ `CREATE TABLE IF NOT EXISTS variant_executions (
926
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
927
+ project_id TEXT NOT NULL DEFAULT '',
928
+ task_id TEXT,
929
+ variant TEXT,
930
+ prompt_version TEXT,
931
+ completeness REAL,
932
+ verdict TEXT,
933
+ total_duration_sec REAL,
934
+ started_at TEXT,
935
+ completed_at TEXT,
936
+ project_language TEXT,
937
+ project_framework TEXT,
938
+ provider TEXT,
939
+ model TEXT,
940
+ task_complexity TEXT,
941
+ success_reason TEXT,
942
+ failure_reason TEXT,
943
+ code_quality_score REAL,
944
+ testing_score REAL,
945
+ documentation_score REAL,
946
+ architecture_score REAL,
947
+ anomaly_score REAL
948
+ )`,
949
+ "CREATE INDEX IF NOT EXISTS idx_variant_executions_variant ON variant_executions(variant)",
950
+ "CREATE INDEX IF NOT EXISTS idx_variant_executions_prompt_version ON variant_executions(prompt_version)",
951
+ "CREATE INDEX IF NOT EXISTS idx_variant_executions_completed_at ON variant_executions(completed_at)",
952
+ "CREATE INDEX IF NOT EXISTS idx_variant_executions_project_language ON variant_executions(project_language)",
953
+ "CREATE INDEX IF NOT EXISTS idx_variant_executions_task_id ON variant_executions(task_id)"
954
+ ];
955
+ for (const stmt of statements) {
956
+ try {
957
+ this.variantsDb.prepare(stmt).run();
958
+ } catch (error) {
959
+ emitTelemetryFallbackWarning("Schema bootstrap statement failed", error);
960
+ }
961
+ }
962
+ try {
963
+ this.variantsDb.prepare("ALTER TABLE variant_executions ADD COLUMN project_id TEXT NOT NULL DEFAULT ''").run();
964
+ } catch {
965
+ }
966
+ }
967
+ insight(partial) {
968
+ return {
969
+ ...partial,
970
+ tenancy: this.tenancy,
971
+ timestamp: partial.timestamp ?? (/* @__PURE__ */ new Date()).toISOString(),
972
+ data: {
973
+ ...partial.data,
974
+ tenancy: this.tenancy,
975
+ ...this.includeAllProjects ? {} : { projectId: this.projectId }
976
+ }
977
+ };
978
+ }
979
+ scopeDisclosure() {
980
+ return this.insight({
981
+ type: "scope",
982
+ severity: "info",
983
+ title: "Cross-project telemetry scope",
984
+ description: "These insights mix variant_executions rows from every project in the shared telemetry store. Predictive routing never uses this scope.",
985
+ data: { includeAllProjects: true },
986
+ recommendations: ["Omit --all-projects to restrict insights to the current repository"],
987
+ confidence: 1
988
+ });
989
+ }
990
+ /**
991
+ * Distinct variants visible under the current tenancy filter.
992
+ * Used by tests and as a cheap scoping check for the CLI.
993
+ */
994
+ listVisibleVariants() {
995
+ const rows = this.variantsDb.prepare(
996
+ `SELECT DISTINCT variant FROM variant_executions WHERE ${this.projectScopeWhere} ORDER BY variant`
997
+ ).all(...this.projectScopeParams);
998
+ return rows.map((row) => row.variant);
999
+ }
1000
+ /** Returns true if the insight engine successfully initialized on-disk storage */
1001
+ isEnabled() {
1002
+ return this.enabled;
1003
+ }
1004
+ /**
1005
+ * Generate comprehensive insights from telemetry data.
1006
+ *
1007
+ * Analyzes all available telemetry data to produce actionable insights
1008
+ * across multiple dimensions: performance, optimization, prediction, and anomaly detection.
1009
+ *
1010
+ * @returns Array of insight results with recommendations
1011
+ */
1012
+ async generateInsights() {
1013
+ const insights = [];
1014
+ try {
1015
+ if (this.includeAllProjects) {
1016
+ insights.push(this.scopeDisclosure());
1017
+ }
1018
+ insights.push(...this.analyzePerformanceTrends());
1019
+ insights.push(...this.generateOptimizationRecommendations());
1020
+ insights.push(...this.generatePredictiveInsights());
1021
+ insights.push(...this.detectAnomalies());
1022
+ insights.sort((a, b) => {
1023
+ const severityWeight = { critical: 3, warning: 2, info: 1 };
1024
+ const aSeverity = severityWeight[a.severity];
1025
+ const bSeverity = severityWeight[b.severity];
1026
+ if (aSeverity !== bSeverity) {
1027
+ return bSeverity - aSeverity;
1028
+ }
1029
+ return b.confidence - a.confidence;
1030
+ });
1031
+ return insights;
1032
+ } catch (error) {
1033
+ emitTelemetryFallbackWarning("Failed to generate insights", error);
1034
+ return [];
1035
+ }
1036
+ }
1037
+ /**
1038
+ * Analyze performance trends across variants and providers.
1039
+ */
1040
+ analyzePerformanceTrends() {
1041
+ const insights = [];
1042
+ const query = `
1043
+ SELECT
1044
+ variant,
1045
+ prompt_version,
1046
+ COUNT(*) as total_tasks,
1047
+ AVG(completeness) as avg_completeness,
1048
+ CAST(SUM(CASE WHEN verdict = 'success' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) as success_rate,
1049
+ AVG(total_duration_sec) as avg_duration,
1050
+ MIN(started_at) as first_execution,
1051
+ MAX(started_at) as last_execution
1052
+ FROM variant_executions
1053
+ WHERE ${this.projectScopeWhere}
1054
+ AND completed_at IS NOT NULL
1055
+ AND ${_TelemetryInsightEngine.REAL_DATA_FILTER}
1056
+ AND started_at > datetime('now', '-30 days')
1057
+ GROUP BY variant, prompt_version
1058
+ HAVING total_tasks >= 3
1059
+ ORDER BY success_rate DESC, avg_completeness DESC
1060
+ `;
1061
+ const results = this.variantsDb.prepare(query).all(...this.projectScopeParams);
1062
+ if (results.length >= 2) {
1063
+ const topPerformer = results[0];
1064
+ const worstPerformer = results[results.length - 1];
1065
+ const performanceGap = topPerformer.success_rate - worstPerformer.success_rate;
1066
+ if (performanceGap > 0.3) {
1067
+ insights.push(
1068
+ this.insight({
1069
+ type: "performance",
1070
+ severity: "warning",
1071
+ title: "Significant Performance Gap Detected",
1072
+ description: `Variant ${topPerformer.variant} (v${topPerformer.prompt_version || "unknown"}) significantly outperforms ${worstPerformer.variant} (v${worstPerformer.prompt_version || "unknown"})`,
1073
+ data: {
1074
+ topPerformer: {
1075
+ variant: topPerformer.variant,
1076
+ version: topPerformer.prompt_version || "unknown",
1077
+ successRate: topPerformer.success_rate,
1078
+ completeness: topPerformer.avg_completeness
1079
+ },
1080
+ worstPerformer: {
1081
+ variant: worstPerformer.variant,
1082
+ version: worstPerformer.prompt_version || "unknown",
1083
+ successRate: worstPerformer.success_rate,
1084
+ completeness: worstPerformer.avg_completeness
1085
+ },
1086
+ gap: performanceGap
1087
+ },
1088
+ recommendations: [
1089
+ `Consider using ${topPerformer.variant} variant for similar tasks`,
1090
+ `Review and optimize ${worstPerformer.variant} prompt strategy`,
1091
+ "Analyze successful patterns from top performer"
1092
+ ],
1093
+ confidence: 0.85
1094
+ })
1095
+ );
1096
+ }
1097
+ }
1098
+ return insights;
1099
+ }
1100
+ /**
1101
+ * Generate optimization recommendations based on performance data.
1102
+ */
1103
+ generateOptimizationRecommendations() {
1104
+ const insights = [];
1105
+ const promptQuery = `
1106
+ SELECT
1107
+ variant,
1108
+ prompt_version,
1109
+ COUNT(*) as sample_size,
1110
+ AVG(completeness) as avg_completeness,
1111
+ CAST(SUM(CASE WHEN verdict = 'success' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) as success_rate
1112
+ FROM variant_executions
1113
+ WHERE ${this.projectScopeWhere}
1114
+ AND completed_at IS NOT NULL
1115
+ AND prompt_version IS NOT NULL
1116
+ AND ${_TelemetryInsightEngine.REAL_DATA_FILTER}
1117
+ GROUP BY variant, prompt_version
1118
+ HAVING sample_size >= 5
1119
+ ORDER BY success_rate DESC
1120
+ `;
1121
+ const promptResults = this.variantsDb.prepare(promptQuery).all(...this.projectScopeParams);
1122
+ const byVariant = /* @__PURE__ */ new Map();
1123
+ promptResults.forEach((row) => {
1124
+ const entries = byVariant.get(row.variant) || [];
1125
+ entries.push(row);
1126
+ byVariant.set(row.variant, entries);
1127
+ });
1128
+ for (const [variant, versions] of Array.from(byVariant.entries())) {
1129
+ if (versions.length >= 2) {
1130
+ const best = versions[0];
1131
+ const current = versions.find(
1132
+ (v) => v.prompt_version.includes("latest") || v.prompt_version.includes("current")
1133
+ ) || versions[versions.length - 1];
1134
+ if (best.success_rate - current.success_rate > 0.15) {
1135
+ insights.push(
1136
+ this.insight({
1137
+ type: "optimization",
1138
+ severity: "warning",
1139
+ title: `Prompt Optimization Opportunity for ${variant}`,
1140
+ description: `Version ${best.prompt_version} significantly outperforms current version ${current.prompt_version}`,
1141
+ data: {
1142
+ variant,
1143
+ bestVersion: best.prompt_version,
1144
+ currentVersion: current.prompt_version,
1145
+ improvement: best.success_rate - current.success_rate,
1146
+ bestSuccessRate: best.success_rate,
1147
+ currentSuccessRate: current.success_rate
1148
+ },
1149
+ recommendations: [
1150
+ `Consider promoting version ${best.prompt_version} to current`,
1151
+ `Analyze differences between ${best.prompt_version} and ${current.prompt_version}`,
1152
+ `Apply successful patterns from ${best.prompt_version} to future prompts`
1153
+ ],
1154
+ confidence: 0.78
1155
+ })
1156
+ );
1157
+ }
1158
+ }
1159
+ }
1160
+ return insights;
1161
+ }
1162
+ /**
1163
+ * Generate predictive insights based on historical patterns.
1164
+ */
1165
+ generatePredictiveInsights() {
1166
+ const insights = [];
1167
+ const predictionQuery = `
1168
+ SELECT
1169
+ project_language,
1170
+ project_framework,
1171
+ COUNT(*) as total_tasks,
1172
+ CAST(SUM(CASE WHEN verdict = 'success' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) as success_rate,
1173
+ AVG(completeness) as avg_completeness,
1174
+ AVG(total_duration_sec) as avg_duration
1175
+ FROM variant_executions
1176
+ WHERE ${this.projectScopeWhere}
1177
+ AND completed_at IS NOT NULL
1178
+ AND project_language IS NOT NULL
1179
+ AND ${_TelemetryInsightEngine.REAL_DATA_FILTER}
1180
+ GROUP BY project_language, project_framework
1181
+ HAVING total_tasks >= 10
1182
+ ORDER BY success_rate DESC
1183
+ `;
1184
+ const predictions = this.variantsDb.prepare(predictionQuery).all(...this.projectScopeParams);
1185
+ const successfulScenarios = predictions.filter((p) => p.success_rate > 0.8);
1186
+ const challengingScenarios = predictions.filter((p) => p.success_rate < 0.5);
1187
+ if (successfulScenarios.length > 0 && challengingScenarios.length > 0) {
1188
+ insights.push(
1189
+ this.insight({
1190
+ type: "prediction",
1191
+ severity: "info",
1192
+ title: "Project Type Success Patterns Identified",
1193
+ description: `Analysis of ${predictions.length} project scenarios reveals distinct success patterns`,
1194
+ data: {
1195
+ successfulPatterns: successfulScenarios.slice(0, 3),
1196
+ challengingPatterns: challengingScenarios.slice(0, 3),
1197
+ totalAnalyzed: predictions.length
1198
+ },
1199
+ recommendations: [
1200
+ "Leverage successful patterns for similar project types",
1201
+ "Consider additional support for challenging scenarios",
1202
+ "Adjust prompt strategies based on project characteristics"
1203
+ ],
1204
+ confidence: 0.72
1205
+ })
1206
+ );
1207
+ }
1208
+ return insights;
1209
+ }
1210
+ /**
1211
+ * Detect anomalies in performance data.
1212
+ */
1213
+ detectAnomalies() {
1214
+ const insights = [];
1215
+ const durationQuery = `
1216
+ SELECT
1217
+ variant,
1218
+ task_id,
1219
+ total_duration_sec,
1220
+ verdict,
1221
+ completeness,
1222
+ started_at
1223
+ FROM variant_executions
1224
+ WHERE ${this.projectScopeWhere}
1225
+ AND completed_at IS NOT NULL
1226
+ AND total_duration_sec IS NOT NULL
1227
+ AND ${_TelemetryInsightEngine.REAL_DATA_FILTER}
1228
+ AND started_at > datetime('now', '-7 days')
1229
+ ORDER BY total_duration_sec DESC
1230
+ LIMIT 20
1231
+ `;
1232
+ const durationResults = this.variantsDb.prepare(durationQuery).all(...this.projectScopeParams);
1233
+ if (durationResults.length >= 5) {
1234
+ const durations = durationResults.map((r) => r.total_duration_sec);
1235
+ const mean = durations.reduce((a, b) => a + b, 0) / durations.length;
1236
+ const stdDev = Math.sqrt(
1237
+ durations.reduce((sq, n) => sq + (n - mean) ** 2, 0) / durations.length
1238
+ );
1239
+ const anomalies = durationResults.filter(
1240
+ (r) => Math.abs(r.total_duration_sec - mean) > 2 * stdDev
1241
+ );
1242
+ if (anomalies.length > 0) {
1243
+ insights.push(
1244
+ this.insight({
1245
+ type: "anomaly",
1246
+ severity: "warning",
1247
+ title: "Unusual Execution Duration Patterns Detected",
1248
+ description: `Found ${anomalies.length} executions with unusual duration patterns`,
1249
+ data: {
1250
+ anomalies: anomalies.map((a) => ({
1251
+ taskId: a.task_id,
1252
+ variant: a.variant,
1253
+ duration: a.total_duration_sec,
1254
+ verdict: a.verdict,
1255
+ deviation: Math.abs(a.total_duration_sec - mean) / stdDev
1256
+ })),
1257
+ averageDuration: mean,
1258
+ standardDeviation: stdDev
1259
+ },
1260
+ recommendations: [
1261
+ "Investigate unusually long or short executions",
1262
+ "Check for timeout issues or incomplete work",
1263
+ "Review task complexity estimates"
1264
+ ],
1265
+ confidence: 0.68
1266
+ })
1267
+ );
1268
+ }
1269
+ }
1270
+ return insights;
1271
+ }
1272
+ /**
1273
+ * Start real-time monitoring for continuous insight generation.
1274
+ */
1275
+ startRealTimeMonitoring() {
1276
+ this.intervalId = setInterval(async () => {
1277
+ try {
1278
+ await this.generateInsights();
1279
+ } catch (error) {
1280
+ emitTelemetryFallbackWarning("Real-time insight generation failed", error);
1281
+ }
1282
+ }, this.calculationInterval);
1283
+ }
1284
+ /**
1285
+ * Stop real-time monitoring.
1286
+ */
1287
+ stopRealTimeMonitoring() {
1288
+ if (this.intervalId) {
1289
+ clearInterval(this.intervalId);
1290
+ this.intervalId = void 0;
1291
+ }
1292
+ }
1293
+ /**
1294
+ * Get provider performance DNA analysis.
1295
+ *
1296
+ * @internal Preview / not fully implemented. Only `provider`, a coarse
1297
+ * `codeGeneration` capability, and `consistencyScore` are derived from real
1298
+ * data; `model` is reported as `'unknown'` and `optimalUseCases`,
1299
+ * `limitations`, and most adaptation fields are placeholders (empty/`null`).
1300
+ * Public CLI surfaces must label this output as a preview and must not present
1301
+ * the placeholder fields as real analytics.
1302
+ */
1303
+ async getProviderPerformanceDNA() {
1304
+ const query = `
1305
+ SELECT
1306
+ CASE WHEN INSTR(variant, ':') > 0
1307
+ THEN SUBSTR(variant, 1, INSTR(variant, ':') - 1)
1308
+ ELSE variant
1309
+ END as provider,
1310
+ COUNT(*) as total_tasks,
1311
+ CAST(SUM(CASE WHEN verdict = 'success' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) as success_rate,
1312
+ AVG(completeness) as avg_completeness,
1313
+ AVG(total_duration_sec) as avg_duration
1314
+ FROM variant_executions
1315
+ WHERE ${this.projectScopeWhere}
1316
+ AND completed_at IS NOT NULL
1317
+ GROUP BY CASE WHEN INSTR(variant, ':') > 0
1318
+ THEN SUBSTR(variant, 1, INSTR(variant, ':') - 1)
1319
+ ELSE variant
1320
+ END
1321
+ HAVING total_tasks >= 5
1322
+ `;
1323
+ const results = this.variantsDb.prepare(query).all(...this.projectScopeParams);
1324
+ return results.map((row) => ({
1325
+ provider: row.provider,
1326
+ model: "unknown",
1327
+ // Would need more detailed tracking
1328
+ capabilities: {
1329
+ codeGeneration: row.success_rate,
1330
+ debugging: null,
1331
+ refactoring: null,
1332
+ testing: null,
1333
+ documentation: null,
1334
+ architecture: null
1335
+ },
1336
+ optimalUseCases: [],
1337
+ // Would need more detailed analysis
1338
+ limitations: [],
1339
+ // Would need failure pattern analysis
1340
+ adaptationPatterns: {
1341
+ learningRate: null,
1342
+ consistencyScore: Math.min(row.success_rate / 0.8, 1),
1343
+ contextRetention: null
1344
+ }
1345
+ }));
1346
+ }
1347
+ /**
1348
+ * Analyze behavioral patterns from execution data.
1349
+ *
1350
+ * @internal Not yet implemented. Always returns an empty array; behavioral
1351
+ * telemetry collection is not wired up. Do not present as real analytics.
1352
+ */
1353
+ async analyzeBehavioralPatterns() {
1354
+ return [];
1355
+ }
1356
+ /**
1357
+ * Generate semantic task profiles.
1358
+ *
1359
+ * @internal Not yet implemented. Always returns an empty array; semantic
1360
+ * analysis is not wired up. Do not present as real analytics.
1361
+ */
1362
+ async generateSemanticProfiles() {
1363
+ return [];
1364
+ }
1365
+ /**
1366
+ * Start the telemetry insight engine
1367
+ *
1368
+ * Initializes the insight engine and prepares it for generating insights
1369
+ * from telemetry data. This method must be called before using other
1370
+ * insight engine functionality.
1371
+ *
1372
+ * @returns {void}
1373
+ *
1374
+ * @example
1375
+ * ```typescript
1376
+ * const engine = new TelemetryInsightEngine();
1377
+ * engine.start();
1378
+ * // Now the engine is ready to generate insights
1379
+ * ```
1380
+ */
1381
+ start() {
1382
+ if (!this.enabled) {
1383
+ emitTelemetryFallbackWarning("TelemetryInsightEngine is disabled - using in-memory fallback");
1384
+ return;
1385
+ }
1386
+ try {
1387
+ this.variantsDb.prepare("SELECT 1").get();
1388
+ if (this.enableRealTime) {
1389
+ this.startRealTimeMonitoring();
1390
+ }
1391
+ } catch (error) {
1392
+ emitTelemetryFallbackWarning("Failed to start TelemetryInsightEngine", error);
1393
+ throw new Error("TelemetryInsightEngine database connection is not available");
1394
+ }
1395
+ }
1396
+ /**
1397
+ * Clean up resources and stop monitoring.
1398
+ */
1399
+ close() {
1400
+ this.stopRealTimeMonitoring();
1401
+ this.variantsDb.close();
1402
+ }
1403
+ };
1404
+
1405
+ // src/telemetry/integrity-check.ts
1406
+ function getSchemaColumns(db) {
1407
+ return getTableColumns(db, "variant_executions");
1408
+ }
1409
+ function getTableColumns(db, table) {
1410
+ try {
1411
+ const rows = db.prepare(`PRAGMA table_info(${table})`).all();
1412
+ return new Set(rows.map((r) => r.name));
1413
+ } catch {
1414
+ return /* @__PURE__ */ new Set();
1415
+ }
1416
+ }
1417
+ function getWhitelistColumns() {
1418
+ return new Set(VARIANT_EXECUTION_COLUMNS);
1419
+ }
1420
+ function validateTelemetryIntegrity(db) {
1421
+ const schemaColumns = getSchemaColumns(db);
1422
+ const whitelistColumns = getWhitelistColumns();
1423
+ const excludedColumns = /* @__PURE__ */ new Set([
1424
+ "id",
1425
+ // Auto-increment primary key
1426
+ "project_id",
1427
+ // Scope dimension, always set by context-aware writers
1428
+ "lab_id",
1429
+ // Optional lab scoping dimension
1430
+ "lab_run_id",
1431
+ // Optional lab run scoping dimension
1432
+ "task_id",
1433
+ // Part of UNIQUE constraint, not dynamically updated
1434
+ "variant",
1435
+ // Part of UNIQUE constraint, not dynamically updated
1436
+ "created_at",
1437
+ // Auto-managed by DEFAULT CURRENT_TIMESTAMP
1438
+ "updated_at",
1439
+ // Auto-managed by DEFAULT CURRENT_TIMESTAMP
1440
+ "commit_sha_before",
1441
+ // Managed separately via git integration
1442
+ "commit_sha_after",
1443
+ // Managed separately via git integration
1444
+ "workspace_edit_success_rate",
1445
+ // Derived metric
1446
+ "score_breakdown_json",
1447
+ // Managed by judge evaluation system
1448
+ "strategy",
1449
+ // History only: variant strategy axis retired in schema v50, never written
1450
+ "strategy_state"
1451
+ // History only: retired with `strategy` in schema v50
1452
+ ]);
1453
+ const schemaNotInWhitelist = [];
1454
+ const whitelistNotInSchema = [];
1455
+ for (const col of schemaColumns) {
1456
+ if (!whitelistColumns.has(col) && !excludedColumns.has(col)) {
1457
+ schemaNotInWhitelist.push(col);
1458
+ }
1459
+ }
1460
+ for (const col of whitelistColumns) {
1461
+ if (!schemaColumns.has(col)) {
1462
+ whitelistNotInSchema.push(col);
1463
+ }
1464
+ }
1465
+ const tableColumnCache = /* @__PURE__ */ new Map();
1466
+ for (const inv of SCHEMA_INVARIANTS) {
1467
+ let cols = tableColumnCache.get(inv.table);
1468
+ if (!cols) {
1469
+ cols = getTableColumns(db, inv.table);
1470
+ tableColumnCache.set(inv.table, cols);
1471
+ }
1472
+ if (cols.size === 0) continue;
1473
+ if (!cols.has(inv.column)) {
1474
+ schemaNotInWhitelist.push(`${inv.table}.${inv.column}`);
1475
+ }
1476
+ }
1477
+ return {
1478
+ schemaNotInWhitelist,
1479
+ whitelistNotInSchema
1480
+ };
1481
+ }
1482
+ function formatIntegrityReport(issues) {
1483
+ const lines = [];
1484
+ if (issues.schemaNotInWhitelist.length > 0) {
1485
+ lines.push(
1486
+ `Warning: Schema columns not in whitelist: ${issues.schemaNotInWhitelist.join(", ")}`
1487
+ );
1488
+ lines.push(" These columns exist but cannot be queried safely.");
1489
+ lines.push(" Action: Add to VARIANT_EXECUTION_COLUMNS in variant-execution-columns.ts");
1490
+ }
1491
+ if (issues.whitelistNotInSchema.length > 0) {
1492
+ lines.push(
1493
+ `Warning: Whitelist columns not in schema: ${issues.whitelistNotInSchema.join(", ")}`
1494
+ );
1495
+ lines.push(" These whitelisted columns do not exist in the schema.");
1496
+ lines.push(" Action: Remove from VARIANT_EXECUTION_COLUMNS or add to schema");
1497
+ }
1498
+ if (lines.length === 0) {
1499
+ lines.push("OK: Telemetry integrity check passed");
1500
+ }
1501
+ return lines.join("\n");
1502
+ }
1503
+
1504
+ // src/telemetry/observability-metrics.ts
1505
+ function recordMetric(name, value, tags) {
1506
+ try {
1507
+ getTelemetryLogger().logEvent(`metric:${name}`, { value, ...tags ?? {} });
1508
+ } catch {
1509
+ }
1510
+ }
1511
+
1512
+ export {
1513
+ TelemetryDashboard,
1514
+ isCoreVariantEvent,
1515
+ validateEventType,
1516
+ TelemetryInsightEngine,
1517
+ getSchemaColumns,
1518
+ getWhitelistColumns,
1519
+ validateTelemetryIntegrity,
1520
+ formatIntegrityReport,
1521
+ recordMetric
1522
+ };
1523
+ //# sourceMappingURL=chunk-KXYDV3HP.js.map