agentic-qe 3.15.15 → 3.15.17

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 (526) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +168 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/audit/witness-chain.d.ts +7 -0
  5. package/dist/audit/witness-chain.js +10 -0
  6. package/dist/cli/bundle.js +6 -6
  7. package/dist/cli/chunks/adapter-OMILP6KH.js +2 -0
  8. package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-6BUOFQZA.js} +2 -2
  9. package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-HPDK3JI3.js} +2 -2
  10. package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-5QKUTWK5.js} +2 -2
  11. package/dist/cli/chunks/aqe-learning-engine-OXH5CCOS.js +2 -0
  12. package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-7OKPMNHD.js} +2 -2
  13. package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-HZ35LESR.js} +4 -4
  14. package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-XI575SVK.js} +3 -3
  15. package/dist/cli/chunks/base-MAK2BLTG.js +2 -0
  16. package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-YO5X7ZJS.js} +2 -2
  17. package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-GCQZFZGQ.js} +3 -3
  18. package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-N6G44UU2.js} +2 -2
  19. package/dist/cli/chunks/{browser-6LACARWE.js → browser-EVKPTLOI.js} +2 -2
  20. package/dist/cli/chunks/browser-workflow-IR3VF2TL.js +2 -0
  21. package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-2EQK7B5L.js} +2 -2
  22. package/dist/cli/chunks/chunk-2PCEMDIX.js +757 -0
  23. package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-2UUZCQSD.js} +7 -7
  24. package/dist/cli/chunks/chunk-2YWYW7NU.js +21 -0
  25. package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-45223KK6.js} +6 -6
  26. package/dist/cli/chunks/chunk-4EJLHNER.js +12 -0
  27. package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-4L6WX5KC.js} +1 -1
  28. package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-4NKZU2JZ.js} +2 -2
  29. package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-4UKTIQDT.js} +2 -2
  30. package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-4YM45Z5B.js} +1 -1
  31. package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-5FSPELOG.js} +2 -2
  32. package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-5WATBVU6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-5WYZVSL2.js} +1 -1
  34. package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-6LSZCEW2.js} +1 -1
  35. package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-6V6BD6PH.js} +1 -1
  36. package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-74MDUIAZ.js} +1 -1
  37. package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-776K4ZLE.js} +2 -2
  38. package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-7BSOO3CY.js} +2 -2
  39. package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-7SNSI4VY.js} +1 -1
  40. package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-A4BVDYIL.js} +1 -1
  41. package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-AGCS5GSO.js} +2 -2
  42. package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-AVHYJ3XP.js} +2 -2
  43. package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-BE7ZHM34.js} +2 -2
  44. package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-BHQ2DLJU.js} +1 -1
  45. package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-BKHEQIRZ.js} +2 -2
  46. package/dist/cli/chunks/{chunk-G242G224.js → chunk-BSIWI4ES.js} +2 -2
  47. package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-C7QLLMYI.js} +1 -1
  48. package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-CMN7PU2H.js} +2 -2
  49. package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-COTQ44YO.js} +2 -2
  50. package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-CQER6IJ5.js} +1 -1
  51. package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-CVPXHDQU.js} +1 -1
  52. package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-CVYPMGUM.js} +2 -2
  53. package/dist/cli/chunks/chunk-CXCMATZ6.js +3 -0
  54. package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-D75GLKEL.js} +2 -2
  55. package/dist/cli/chunks/chunk-DCDSN67A.js +2 -0
  56. package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-DHKSPOUQ.js} +2 -2
  57. package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-DJDVD6RM.js} +2 -2
  58. package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-DNVRTJKB.js} +2 -2
  59. package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-DS5IFRY6.js} +2 -2
  60. package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-E7XIMOKW.js} +2 -2
  61. package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-ECKHDHR2.js} +2 -2
  62. package/dist/cli/chunks/chunk-EPVPXHL7.js +2 -0
  63. package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-ERYADKMZ.js} +4 -4
  64. package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-EUWG2JG4.js} +2 -2
  65. package/dist/cli/chunks/chunk-FAQ24UHB.js +29 -0
  66. package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-FBBPRVNF.js} +2 -2
  67. package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-FBSBXCZS.js} +2 -2
  68. package/dist/cli/chunks/chunk-G2X3OLMN.js +153 -0
  69. package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-GG7PMTHD.js} +1 -1
  70. package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-GN6OE3JT.js} +1 -1
  71. package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-GPPTRKEM.js} +2 -2
  72. package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-H2LHWZRE.js} +2 -2
  73. package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-HAQJFUAQ.js} +2 -2
  74. package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-HD6W6PHV.js} +2 -2
  75. package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-HFZD5KLR.js} +1 -1
  76. package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-HRUHHHVR.js} +2 -2
  77. package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-HVT7RMGV.js} +1 -1
  78. package/dist/cli/chunks/chunk-HWQPMUSN.js +2 -0
  79. package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-HZ5O7G2P.js} +1 -1
  80. package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-IHQGNDMX.js} +2 -2
  81. package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-IJSROBM6.js} +18 -18
  82. package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-IJZFJPHS.js} +2 -2
  83. package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-IKB3M7OF.js} +1 -1
  84. package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-INI3Q4CN.js} +1 -1
  85. package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-IOWEBPXJ.js} +2 -2
  86. package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-IQL6XRF5.js} +2 -2
  87. package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-IRHXGCQR.js} +2 -2
  88. package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-J3QFJI2Y.js} +6 -6
  89. package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-J6QRNQJF.js} +11 -11
  90. package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-J7Q5TXFZ.js} +2 -2
  91. package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-JHKKIJT2.js} +2 -2
  92. package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-JI33PMPZ.js} +1 -1
  93. package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-JRIJM4LE.js} +3 -3
  94. package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-JVWZAE2H.js} +2 -2
  95. package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-K7WAI662.js} +1 -1
  96. package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-KB34MTFZ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-KPIPVSIP.js} +2 -2
  98. package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-KR2TAAF6.js} +1 -1
  99. package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-KT2QCXO6.js} +2 -2
  100. package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-KTORRIX3.js} +2 -2
  101. package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-LCWEQRZI.js} +2 -2
  102. package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-LG5PPJT7.js} +1 -1
  103. package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-LIF6UWHV.js} +2 -2
  104. package/dist/cli/chunks/chunk-LN7NKE3N.js +27 -0
  105. package/dist/cli/chunks/chunk-LOLSZG5J.js +2 -0
  106. package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-LOMT4UC2.js} +2 -2
  107. package/dist/cli/chunks/chunk-LRKLATSH.js +2 -0
  108. package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-LRY6UIRI.js} +2 -2
  109. package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-LV7UIK4Q.js} +2 -2
  110. package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-M2YI5YUR.js} +2 -2
  111. package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-MCXW3DKE.js} +2 -2
  112. package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-MGZ6XZHU.js} +1 -1
  113. package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-MLMD3I75.js} +1 -1
  114. package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-MVVVGQJ6.js} +2 -2
  115. package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-ND72UDVH.js} +2 -2
  116. package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-NE3LRUNC.js} +4 -4
  117. package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-NKUHMA4T.js} +2 -2
  118. package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-NQFDJ6BT.js} +1 -1
  119. package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-NZJVDOUN.js} +31 -31
  120. package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-O7VJ3VKD.js} +2 -2
  121. package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-OJIUIEI4.js} +1 -1
  122. package/dist/cli/chunks/chunk-OO2M2QUV.js +12 -0
  123. package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-ORQ2YBRR.js} +2 -2
  124. package/dist/cli/chunks/chunk-OWIQR6N2.js +4 -0
  125. package/dist/cli/chunks/chunk-OWIZBZLN.js +14 -0
  126. package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-P3D7SEHW.js} +1 -1
  127. package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-P4OB6WDJ.js} +1 -1
  128. package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PCL5JRKN.js} +2 -2
  129. package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-PIWGKGWP.js} +2 -2
  130. package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-PK34KJH7.js} +2 -2
  131. package/dist/cli/chunks/chunk-POPSZDI2.js +65 -0
  132. package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-Q6F3DYZN.js} +2 -2
  133. package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-QJSSUBO3.js} +2 -2
  134. package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-QN7HP2UW.js} +235 -173
  135. package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-QSQNXBD2.js} +2 -2
  136. package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-QTQDX4TZ.js} +33 -33
  137. package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-R3KBOQ3O.js} +2 -2
  138. package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-REY52O7J.js} +1 -1
  139. package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-RKCN4B26.js} +2 -2
  140. package/dist/cli/chunks/chunk-S3DT5TPR.js +14 -0
  141. package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-S3TBOKAZ.js} +22 -22
  142. package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-SAEECT23.js} +2 -2
  143. package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-SAZ4PJBR.js} +2 -2
  144. package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-SFITYZLV.js} +2 -2
  145. package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-SRBCBVSI.js} +2 -2
  146. package/dist/cli/chunks/chunk-SUAZ5Z47.js +63 -0
  147. package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-TDZ6N43D.js} +2 -2
  148. package/dist/cli/chunks/chunk-TIVKDIF7.js +2 -0
  149. package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-TM75GAXG.js} +2 -2
  150. package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-TWBZONKT.js} +2 -2
  151. package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-U4S74IIZ.js} +1 -1
  152. package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-U5SMBJ6F.js} +2 -2
  153. package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-UHJVZEQA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-UOVCTK5L.js} +2 -2
  155. package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-VDEKVIP5.js} +2 -2
  156. package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-VITV7AEC.js} +2 -2
  157. package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-VKREKVFI.js} +2 -2
  158. package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-VLTDW7XJ.js} +2 -2
  159. package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-VQFV2IPV.js} +1 -1
  160. package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-VYPVU3JF.js} +2 -2
  161. package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-WAOEQA3W.js} +2 -2
  162. package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-WBDWHHKP.js} +2 -2
  163. package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-WX4PO65Q.js} +2 -2
  164. package/dist/cli/chunks/chunk-X2DWHGCC.js +6 -0
  165. package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-X5QD76IU.js} +2 -2
  166. package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-XBTGEYED.js} +2 -2
  167. package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-XEMCHGAJ.js} +2 -2
  168. package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-XEYFZLIT.js} +1 -1
  169. package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-XFTX3KLE.js} +1 -1
  170. package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-XPTCQKVE.js} +1 -1
  171. package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-YAJOBZE5.js} +2 -2
  172. package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-YCVLKU6H.js} +2 -2
  173. package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-YD2C6EPN.js} +2 -2
  174. package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-YKRLUTK7.js} +2 -2
  175. package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-YMUY3TES.js} +6 -6
  176. package/dist/cli/chunks/chunk-YR5QBUHZ.js +6 -0
  177. package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-Z7SKUC6P.js} +1 -1
  178. package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-ZAQMRFBB.js} +2 -2
  179. package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-ZC3KDNJW.js} +3 -3
  180. package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-ZGV7L4MW.js} +1 -1
  181. package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-ZN35XSKF.js} +2 -2
  182. package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-ZNXM6WVL.js} +2 -2
  183. package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-ZP5AWQRO.js} +2 -2
  184. package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-ZTP3DQ5M.js} +1 -1
  185. package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-ZVMSSCTH.js} +2 -2
  186. package/dist/cli/chunks/chunk-ZWUF27P4.js +2 -0
  187. package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-3RTTTS2D.js} +2 -2
  188. package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-XRUR3I4K.js} +2 -2
  189. package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-E5IAMU2U.js} +2 -2
  190. package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-SHR2P44P.js} +2 -2
  191. package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-ZDDILFMF.js} +2 -2
  192. package/dist/cli/chunks/client-NO5FOWT4.js +2 -0
  193. package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-BGYVUM6G.js} +2 -2
  194. package/dist/cli/chunks/{code-WY3GJXHX.js → code-PJ4MC3MC.js} +4 -3
  195. package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-IW2P22YG.js} +2 -2
  196. package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-A7WZ6OGL.js} +2 -2
  197. package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-KS23WD5J.js} +2 -2
  198. package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-Q7GLSR2E.js} +2 -2
  199. package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-SK55BFW2.js} +2 -2
  200. package/dist/cli/chunks/copilot-installer-3N5J3WTM.js +3 -0
  201. package/dist/cli/chunks/core-handlers-JNAZPXE2.js +2 -0
  202. package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-NENVSO4A.js} +2 -2
  203. package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-5L7UQWDH.js} +3 -3
  204. package/dist/cli/chunks/cross-domain-router-HEBM767Z.js +2 -0
  205. package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-XXBO2ZE6.js} +2 -2
  206. package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-CDCQU3LR.js} +3 -3
  207. package/dist/cli/chunks/daemon-JEBJGEUK.js +18 -0
  208. package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-HOMMF7FA.js} +2 -2
  209. package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-FXCOUG6X.js} +2 -2
  210. package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-GXQ7FMTY.js} +2 -2
  211. package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-TI3JBAPC.js} +2 -2
  212. package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-R7LTUM32.js} +2 -2
  213. package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-LBIAFHIQ.js} +2 -2
  214. package/dist/cli/chunks/dream-GQDCEJMS.js +2 -0
  215. package/dist/cli/chunks/embed-and-insert-pattern-33KLHDD5.js +3 -0
  216. package/dist/cli/chunks/embedding-space-HHLWTBF5.js +2 -0
  217. package/dist/cli/chunks/{eval-OQELIWJK.js → eval-KDOZMAXJ.js} +2 -2
  218. package/dist/cli/chunks/experience-capture-middleware-X45PECQN.js +40 -0
  219. package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-462V6UUB.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-G66OT3AS.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-NIRQ4YDM.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-33USPLB5.js +2 -0
  223. package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-PXWGB7CU.js} +3 -3
  224. package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-7MUW3M5M.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-5237PB35.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-LIXLC5IH.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-62D5UH27.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-GSGUMQQC.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-OSQPW7JP.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-GX6WG2GB.js} +2 -2
  231. package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-GUWHL7VC.js} +23 -22
  232. package/dist/cli/chunks/hybrid-backend-FRWP4BOY.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-SRWLLCU3.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-AVOPRHHO.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-7KF3AQXV.js +2 -0
  236. package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-P4N6EVZS.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-LRGWOJMD.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-XWWAXY25.js +2 -0
  239. package/dist/cli/chunks/kernel-ZEJPNDBW.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-7R2EPOQ6.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-QNM7DPOB.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-RRZQS7KY.js +2 -0
  243. package/dist/cli/chunks/{learning-FZTD72CF.js → learning-7OIZBPXZ.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-SIDXES23.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-3OSW67LC.js +2 -0
  246. package/dist/cli/chunks/{load-YKTPOYBE.js → load-EI2E2C3S.js} +2 -2
  247. package/dist/cli/chunks/load-test-7TRIH2WJ.js +2 -0
  248. package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-IOE5WOCS.js} +2 -2
  249. package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DLYGJAP7.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-G7ZW6Q2B.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-TPF3KCO5.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-WHH4YCHM.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-63FDZAMS.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-3LA776KK.js} +5 -5
  255. package/dist/cli/chunks/pattern-null-store-OU3ZC3NR.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-NW54QUGI.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-P3TYX6J6.js} +2 -2
  258. package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-FNA2WLI6.js} +2 -2
  259. package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-NJS7BC2S.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-NIAVL2OT.js} +2 -2
  261. package/dist/cli/chunks/project-root-GMOFJEKD.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-AD345XRO.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-JU5C4JHY.js} +2 -2
  264. package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-35VOSLYP.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-NLTP26RC.js +2 -0
  266. package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-ET74X7HN.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-FEDQISNB.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-2TB4FWS6.js +2 -0
  269. package/dist/cli/chunks/real-embeddings-II6CXTCI.js +2 -0
  270. package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-DTBPYCEB.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-LYQEMR4J.js} +2 -2
  272. package/dist/cli/chunks/router-PLM3MWME.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-I7VOX2HU.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-DJOJFPII.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-VXYGJDPW.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-GQZHFWO2.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-3TVKBCAM.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-coordinator-XUHKLMT6.js +2 -0
  279. package/dist/cli/chunks/rvf-native-adapter-5GUTYOWS.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-GA2ZYOEG.js} +2 -2
  281. package/dist/cli/chunks/safe-db-RZPQGLGQ.js +2 -0
  282. package/dist/cli/chunks/schedule-G7JMQDUX.js +2 -0
  283. package/dist/cli/chunks/scheduler-4SEGPCKD.js +2 -0
  284. package/dist/cli/chunks/{security-A3IMVLFM.js → security-MM6YOECX.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-6AHPA3V5.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-EYAVY2GZ.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-IVE4SQXR.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-A3PLB4CZ.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-OSSFAP4Z.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-PGY5XUNO.js} +2 -2
  291. package/dist/cli/chunks/{sync-NTUR53PI.js → sync-CWEHYGNN.js} +2 -2
  292. package/dist/cli/chunks/sync-PM6D7EQF.js +2 -0
  293. package/dist/cli/chunks/task-handler-LHMQ75W4.js +64 -0
  294. package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-S2TX5FTR.js} +4 -4
  295. package/dist/cli/chunks/test-4EGZZ6NJ.js +34 -0
  296. package/dist/cli/chunks/test-runner-process-72YACW6M.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-YJQHH3XE.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-DJNETMVW.js +2 -0
  299. package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-WPNOJR6H.js} +2 -2
  300. package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-4MRPXCPU.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-UVWSDXFR.js +2 -0
  302. package/dist/cli/chunks/{types-4AOKZYOX.js → types-6P5FB4EB.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-2VMGSGQL.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-3KULVD3N.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-QCSLU2SV.js +2 -0
  306. package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-4ICTN63Y.js} +2 -2
  307. package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-HQF5GZ7L.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-45JYG7VW.js} +2 -2
  309. package/dist/cli/chunks/visual-security-ZYP2KPH7.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-UOTWZLNH.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-WDWSBXGN.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-5QRT7EMX.js +2 -0
  313. package/dist/cli/chunks/witness-chain-DOYMNPC7.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-CUF2AFQB.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-JB42X62J.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-LXXO6L2G.js} +2 -2
  317. package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-6ARK47NF.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-RYDDWIXN.js +2 -0
  319. package/dist/cli/chunks/wrappers-CYQBOMPL.js +2 -0
  320. package/dist/cli/commands/code.js +4 -0
  321. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  322. package/dist/cli/commands/test.js +26 -4
  323. package/dist/cli/handlers/task-handler.d.ts +5 -0
  324. package/dist/cli/handlers/task-handler.js +21 -1
  325. package/dist/cli/utils/task-result.d.ts +11 -0
  326. package/dist/cli/utils/task-result.js +39 -0
  327. package/dist/coordination/handlers/test-execution-handlers.js +137 -59
  328. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  329. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  330. package/dist/domains/code-intelligence/coordinator.js +46 -13
  331. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  332. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +37 -7
  333. package/dist/domains/code-intelligence/services/semantic-analyzer.js +135 -62
  334. package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
  335. package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
  336. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  337. package/dist/domains/quality-assessment/coordinator.js +2 -1
  338. package/dist/domains/test-execution/coordinator.d.ts +3 -1
  339. package/dist/domains/test-execution/coordinator.js +21 -7
  340. package/dist/domains/test-execution/interfaces.d.ts +17 -0
  341. package/dist/domains/test-execution/plugin.js +8 -2
  342. package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
  343. package/dist/domains/test-execution/services/flaky-detector.js +26 -8
  344. package/dist/domains/test-execution/services/retry-handler.d.ts +9 -1
  345. package/dist/domains/test-execution/services/retry-handler.js +56 -12
  346. package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
  347. package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
  348. package/dist/domains/test-execution/services/test-executor.d.ts +6 -1
  349. package/dist/domains/test-execution/services/test-executor.js +97 -14
  350. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  351. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  352. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  353. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  354. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  355. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  356. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  357. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  358. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  359. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  360. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  361. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  362. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  363. package/dist/feedback/coverage-learner.js +13 -9
  364. package/dist/feedback/test-outcome-tracker.js +13 -9
  365. package/dist/governance/witness-chain.d.ts +5 -0
  366. package/dist/governance/witness-chain.js +22 -6
  367. package/dist/init/copilot-installer.d.ts +6 -0
  368. package/dist/init/copilot-installer.js +37 -17
  369. package/dist/init/platform-config-generator.d.ts +10 -0
  370. package/dist/init/platform-config-generator.js +26 -1
  371. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  372. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  373. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  374. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  375. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  376. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  377. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  378. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  379. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  380. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  381. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  382. package/dist/kernel/unified-memory.d.ts +32 -0
  383. package/dist/kernel/unified-memory.js +76 -8
  384. package/dist/learning/aqe-learning-engine.js +1 -1
  385. package/dist/learning/embed-and-insert-pattern.js +4 -2
  386. package/dist/learning/embedder-endpoint-client.d.ts +76 -0
  387. package/dist/learning/embedder-endpoint-client.js +201 -13
  388. package/dist/learning/embedding-space-registry.d.ts +75 -0
  389. package/dist/learning/embedding-space-registry.js +142 -0
  390. package/dist/learning/embedding-space.d.ts +12 -0
  391. package/dist/learning/embedding-space.js +17 -0
  392. package/dist/learning/experience-capture-middleware.js +25 -13
  393. package/dist/learning/experience-capture.js +1 -1
  394. package/dist/learning/experience-consolidation.d.ts +18 -0
  395. package/dist/learning/experience-consolidation.js +55 -8
  396. package/dist/learning/experience-space-verification.d.ts +71 -0
  397. package/dist/learning/experience-space-verification.js +147 -0
  398. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  399. package/dist/learning/pattern-lifecycle.js +153 -76
  400. package/dist/learning/pattern-null-store.d.ts +5 -0
  401. package/dist/learning/pattern-null-store.js +8 -0
  402. package/dist/learning/pattern-promotion.js +6 -3
  403. package/dist/learning/pattern-store.d.ts +6 -0
  404. package/dist/learning/pattern-store.js +19 -6
  405. package/dist/learning/qe-reasoning-bank.js +2 -2
  406. package/dist/learning/real-embeddings.d.ts +3 -0
  407. package/dist/learning/real-embeddings.js +52 -12
  408. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  409. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  410. package/dist/learning/rvf-pattern-store.js +6 -2
  411. package/dist/learning/sqlite-persistence.d.ts +6 -0
  412. package/dist/learning/sqlite-persistence.js +10 -0
  413. package/dist/mcp/bundle.js +699 -619
  414. package/dist/mcp/entry.js +4 -0
  415. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  416. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  417. package/dist/mcp/protocol-server.js +1 -0
  418. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  419. package/dist/mcp/types.d.ts +6 -0
  420. package/dist/optimization/session-cache.d.ts +17 -1
  421. package/dist/optimization/session-cache.js +40 -36
  422. package/dist/planning/goap-planner.d.ts +6 -0
  423. package/dist/planning/goap-planner.js +35 -19
  424. package/dist/planning/plan-executor.js +24 -15
  425. package/dist/routing/co-execution-repository.js +12 -9
  426. package/dist/routing/routing-feedback.d.ts +8 -0
  427. package/dist/routing/routing-feedback.js +46 -24
  428. package/dist/routing/routing-outcomes-migration.js +7 -2
  429. package/dist/shared/embeddings/index.d.ts +2 -2
  430. package/dist/shared/embeddings/index.js +1 -1
  431. package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
  432. package/dist/shared/embeddings/nomic-embedder.js +19 -11
  433. package/dist/shared/embeddings/ollama-client.d.ts +28 -2
  434. package/dist/shared/embeddings/ollama-client.js +84 -22
  435. package/dist/shared/embeddings/types.d.ts +15 -0
  436. package/dist/shared/embeddings/types.js +4 -0
  437. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  438. package/dist/shared/llm/spend-ledger.js +64 -39
  439. package/dist/shared/pytest-junit-report.d.ts +93 -0
  440. package/dist/shared/pytest-junit-report.js +241 -0
  441. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  442. package/dist/shared/sqlite-lock-wait.js +37 -0
  443. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  444. package/dist/shared/sqlite-write-queue.js +38 -0
  445. package/dist/shared/test-runner-project.d.ts +119 -0
  446. package/dist/shared/test-runner-project.js +301 -0
  447. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  448. package/dist/skills/security-visual-testing/index.js +49 -35
  449. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  450. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  451. package/dist/workers/workers/learning-consolidation.js +8 -7
  452. package/package.json +1 -1
  453. package/dist/cli/chunks/adapter-QU6INSKP.js +0 -2
  454. package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +0 -2
  455. package/dist/cli/chunks/base-OTGSN6IC.js +0 -2
  456. package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +0 -2
  457. package/dist/cli/chunks/chunk-2LUTPMBO.js +0 -21
  458. package/dist/cli/chunks/chunk-3HVFIITW.js +0 -2
  459. package/dist/cli/chunks/chunk-4D4CWP72.js +0 -2
  460. package/dist/cli/chunks/chunk-5KA5TVPR.js +0 -6
  461. package/dist/cli/chunks/chunk-6NBRMD25.js +0 -13
  462. package/dist/cli/chunks/chunk-7O45RQHF.js +0 -153
  463. package/dist/cli/chunks/chunk-EMSZVUYA.js +0 -29
  464. package/dist/cli/chunks/chunk-G6RDCCFV.js +0 -4
  465. package/dist/cli/chunks/chunk-HH4ED4F7.js +0 -744
  466. package/dist/cli/chunks/chunk-Q6I4SIUU.js +0 -65
  467. package/dist/cli/chunks/chunk-QGBGSQ2E.js +0 -14
  468. package/dist/cli/chunks/chunk-QRKTBSZT.js +0 -27
  469. package/dist/cli/chunks/chunk-SHRI7TKJ.js +0 -62
  470. package/dist/cli/chunks/chunk-TX2CHQD7.js +0 -2
  471. package/dist/cli/chunks/chunk-UGYM4U44.js +0 -2
  472. package/dist/cli/chunks/chunk-VY4U6DPO.js +0 -12
  473. package/dist/cli/chunks/chunk-WNTA4YKE.js +0 -14
  474. package/dist/cli/chunks/chunk-XHLYGXYE.js +0 -2
  475. package/dist/cli/chunks/client-KKRNPX4F.js +0 -2
  476. package/dist/cli/chunks/copilot-installer-BHPDSELY.js +0 -3
  477. package/dist/cli/chunks/core-handlers-47MPMED7.js +0 -2
  478. package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +0 -2
  479. package/dist/cli/chunks/daemon-AXLVPKVO.js +0 -18
  480. package/dist/cli/chunks/dream-76L6EEN7.js +0 -2
  481. package/dist/cli/chunks/embed-and-insert-pattern-B6MNHICW.js +0 -3
  482. package/dist/cli/chunks/experience-capture-middleware-SUFILYPW.js +0 -40
  483. package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +0 -2
  484. package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +0 -2
  485. package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +0 -2
  486. package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +0 -2
  487. package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +0 -2
  488. package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +0 -2
  489. package/dist/cli/chunks/init-wizard-JCKNGIGT.js +0 -2
  490. package/dist/cli/chunks/kernel-F7ILJTYD.js +0 -2
  491. package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +0 -2
  492. package/dist/cli/chunks/llm-router-service-TNOWQINA.js +0 -2
  493. package/dist/cli/chunks/load-test-FPVBK2EV.js +0 -2
  494. package/dist/cli/chunks/memory-backend-2QE7O67A.js +0 -2
  495. package/dist/cli/chunks/memory-handlers-X4CMVBXB.js +0 -2
  496. package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +0 -2
  497. package/dist/cli/chunks/project-root-S7WDFTMU.js +0 -2
  498. package/dist/cli/chunks/protocol-executor-OPANXQVB.js +0 -2
  499. package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +0 -2
  500. package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +0 -2
  501. package/dist/cli/chunks/real-embeddings-DYIOLKQ3.js +0 -2
  502. package/dist/cli/chunks/router-DBBW4NC2.js +0 -2
  503. package/dist/cli/chunks/routing-feedback-W35QHCL4.js +0 -2
  504. package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +0 -2
  505. package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +0 -2
  506. package/dist/cli/chunks/rvf-migration-coordinator-4ATTHGHD.js +0 -2
  507. package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +0 -2
  508. package/dist/cli/chunks/safe-db-ZS2QKANY.js +0 -2
  509. package/dist/cli/chunks/schedule-ZH6VNA32.js +0 -2
  510. package/dist/cli/chunks/scheduler-T6CD74B6.js +0 -2
  511. package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +0 -2
  512. package/dist/cli/chunks/sync-3MUV6S5E.js +0 -2
  513. package/dist/cli/chunks/task-handler-74MZN2EO.js +0 -62
  514. package/dist/cli/chunks/test-O6FK3FVF.js +0 -34
  515. package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +0 -2
  516. package/dist/cli/chunks/token-bootstrap-TTRCECLP.js +0 -2
  517. package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +0 -2
  518. package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +0 -2
  519. package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +0 -2
  520. package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +0 -2
  521. package/dist/cli/chunks/visual-security-GXGSFBVA.js +0 -2
  522. package/dist/cli/chunks/witness-chain-MRJKVCOW.js +0 -2
  523. package/dist/cli/chunks/witness-chain-WWHJKITG.js +0 -2
  524. package/dist/cli/chunks/witness-chain-repair-5SAXPETG.js +0 -2
  525. package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +0 -2
  526. package/dist/cli/chunks/wrappers-5QFMCKXL.js +0 -2
@@ -18,6 +18,7 @@
18
18
  * cross-process pattern.
19
19
  */
20
20
  import { createSafeRecord } from '../utils/safe-record.js';
21
+ import { writeWhenUnlockedOn } from '../sqlite-write-queue.js';
21
22
  /** Bucket used for charges recorded without an agent context. */
22
23
  export const UNATTRIBUTED_AGENT = '(unattributed)';
23
24
  const CREATE_TABLE_SQL = `
@@ -49,6 +50,14 @@ export class SqliteSpendLedger {
49
50
  * drop ALL spend — bypassing the budget cap (the #557 class).
50
51
  */
51
52
  hasAgentColumn = false;
53
+ /**
54
+ * Charges queued but not yet in the table (#1283). record() queues its
55
+ * INSERT so a locked memory.db does not freeze the MCP server; until the row
56
+ * lands, the spend reads below count it from here, so the ADR-123 budget cap
57
+ * never under-counts. Each entry leaves this set in the same synchronous
58
+ * step that inserts its row, so a charge is never counted twice.
59
+ */
60
+ pending = new Set();
52
61
  constructor(db) {
53
62
  this.db = db;
54
63
  // Additive schema only — CREATE TABLE/INDEX IF NOT EXISTS never drops data.
@@ -70,45 +79,52 @@ export class SqliteSpendLedger {
70
79
  }
71
80
  }
72
81
  record(entry) {
73
- try {
74
- if (this.hasAgentColumn) {
75
- this.db
76
- .prepare(`INSERT INTO llm_spend
77
- (ts, provider, model, cost_usd, cost_source, prompt_tokens, completion_tokens, request_id, agent_type)
78
- VALUES (@ts, @provider, @model, @cost_usd, @cost_source, @prompt_tokens, @completion_tokens, @request_id, @agent_type)`)
79
- .run({
80
- ts: Date.now(),
81
- provider: entry.provider,
82
- model: entry.model,
83
- cost_usd: entry.costUsd,
84
- cost_source: entry.costSource,
85
- prompt_tokens: entry.promptTokens,
86
- completion_tokens: entry.completionTokens,
87
- request_id: entry.requestId,
88
- agent_type: entry.agent ?? null,
89
- });
90
- }
91
- else {
92
- // Column absent (migration couldn't run) — still record spend so the
93
- // budget cap holds; just without per-agent attribution.
94
- this.db
95
- .prepare(`INSERT INTO llm_spend
96
- (ts, provider, model, cost_usd, cost_source, prompt_tokens, completion_tokens, request_id)
97
- VALUES (@ts, @provider, @model, @cost_usd, @cost_source, @prompt_tokens, @completion_tokens, @request_id)`)
98
- .run({
99
- ts: Date.now(),
100
- provider: entry.provider,
101
- model: entry.model,
102
- cost_usd: entry.costUsd,
103
- cost_source: entry.costSource,
104
- prompt_tokens: entry.promptTokens,
105
- completion_tokens: entry.completionTokens,
106
- request_id: entry.requestId,
107
- });
108
- }
109
- }
110
- catch {
82
+ const ts = Date.now();
83
+ const charge = { ts, costUsd: entry.costUsd, agent: entry.agent ?? UNATTRIBUTED_AGENT };
84
+ this.pending.add(charge);
85
+ writeWhenUnlockedOn(this.db, () => {
86
+ this.insert(entry, ts);
87
+ this.pending.delete(charge);
88
+ }).catch(() => {
111
89
  // A ledger write must never break a generation call.
90
+ this.pending.delete(charge);
91
+ });
92
+ }
93
+ insert(entry, ts) {
94
+ if (this.hasAgentColumn) {
95
+ this.db
96
+ .prepare(`INSERT INTO llm_spend
97
+ (ts, provider, model, cost_usd, cost_source, prompt_tokens, completion_tokens, request_id, agent_type)
98
+ VALUES (@ts, @provider, @model, @cost_usd, @cost_source, @prompt_tokens, @completion_tokens, @request_id, @agent_type)`)
99
+ .run({
100
+ ts,
101
+ provider: entry.provider,
102
+ model: entry.model,
103
+ cost_usd: entry.costUsd,
104
+ cost_source: entry.costSource,
105
+ prompt_tokens: entry.promptTokens,
106
+ completion_tokens: entry.completionTokens,
107
+ request_id: entry.requestId,
108
+ agent_type: entry.agent ?? null,
109
+ });
110
+ }
111
+ else {
112
+ // Column absent (migration couldn't run) — still record spend so the
113
+ // budget cap holds; just without per-agent attribution.
114
+ this.db
115
+ .prepare(`INSERT INTO llm_spend
116
+ (ts, provider, model, cost_usd, cost_source, prompt_tokens, completion_tokens, request_id)
117
+ VALUES (@ts, @provider, @model, @cost_usd, @cost_source, @prompt_tokens, @completion_tokens, @request_id)`)
118
+ .run({
119
+ ts,
120
+ provider: entry.provider,
121
+ model: entry.model,
122
+ cost_usd: entry.costUsd,
123
+ cost_source: entry.costSource,
124
+ prompt_tokens: entry.promptTokens,
125
+ completion_tokens: entry.completionTokens,
126
+ request_id: entry.requestId,
127
+ });
112
128
  }
113
129
  }
114
130
  spentSince(windowMs, nowMs = Date.now()) {
@@ -116,7 +132,12 @@ export class SqliteSpendLedger {
116
132
  const row = this.db
117
133
  .prepare(`SELECT COALESCE(SUM(cost_usd), 0) AS total FROM llm_spend WHERE ts >= ?`)
118
134
  .get(nowMs - windowMs);
119
- return row?.total ?? 0;
135
+ let total = row?.total ?? 0;
136
+ for (const charge of this.pending) {
137
+ if (charge.ts >= nowMs - windowMs)
138
+ total += charge.costUsd;
139
+ }
140
+ return total;
120
141
  }
121
142
  catch {
122
143
  return 0;
@@ -131,6 +152,10 @@ export class SqliteSpendLedger {
131
152
  const out = createSafeRecord();
132
153
  for (const r of rows)
133
154
  out[r.agent] = r.total;
155
+ for (const charge of this.pending) {
156
+ if (charge.ts >= nowMs - windowMs)
157
+ out[charge.agent] = (out[charge.agent] ?? 0) + charge.costUsd;
158
+ }
134
159
  return out;
135
160
  }
136
161
  catch {
@@ -0,0 +1,93 @@
1
+ /**
2
+ * #1248: running pytest and reading its JUnit XML report.
3
+ *
4
+ * pytest is started as `<python> -m pytest <files> --junitxml=<file>`, with
5
+ * the report in a temporary directory owned by the run, so the result never
6
+ * depends on the console summary. The interpreter is `AQE_PYTHON` when set,
7
+ * otherwise `python` when it is on PATH, otherwise `python3`.
8
+ *
9
+ * The report is read with a small parser for the XML pytest writes (one or
10
+ * more `<testsuite>` elements holding `<testcase>` elements, each with an
11
+ * optional `<failure>`, `<error>` or `<skipped>` child). Counts come from the
12
+ * test cases themselves, so they always match the per-test list. An expected
13
+ * failure (xfail) is reported by pytest as skipped and counted as skipped.
14
+ *
15
+ * A run is only a result when pytest finished its tests: exit code 5 (no
16
+ * tests collected), 2 (interrupted, for example by a collection error),
17
+ * 3 (internal error) and 4 (usage error), or a missing report (pytest not
18
+ * installed for the interpreter), are runner errors, never a pass.
19
+ */
20
+ import { TestRunnerExecutionError } from './test-runner-verdict.js';
21
+ import { Result } from './types';
22
+ /** True for a Python test file, which only pytest can run. */
23
+ export declare function isPythonTestFile(file: string): boolean;
24
+ /** The Python interpreter that runs pytest. */
25
+ export declare function resolvePythonCommand(env?: NodeJS.ProcessEnv): string;
26
+ /** Environment for a pytest process: no ANSI colour in its output or report. */
27
+ export declare const PYTEST_ENV: Readonly<Record<string, string>>;
28
+ /** Command and arguments that run `targets` (paths or node ids) with pytest. */
29
+ export declare function pytestCommand(targets: readonly string[], reportPath: string, env?: NodeJS.ProcessEnv): {
30
+ command: string;
31
+ args: string[];
32
+ };
33
+ /** A per-run JUnit report location, read back after pytest exits. */
34
+ export interface PytestJunitReport {
35
+ /** Absolute path pytest writes the report to. */
36
+ readonly path: string;
37
+ /** Arguments that point pytest at the report (already in pytestCommand). */
38
+ readonly args: readonly string[];
39
+ /** The report text; undefined when pytest wrote none. Malformed reports throw. */
40
+ read(stdout?: string): string | undefined;
41
+ /** Remove the temporary report directory. Safe to call more than once. */
42
+ cleanup(): void;
43
+ }
44
+ export declare function createPytestJunitReport(): PytestJunitReport;
45
+ export type PytestCaseStatus = 'passed' | 'failed' | 'error' | 'skipped';
46
+ /** One `<testcase>` of a pytest JUnit report. */
47
+ export interface PytestJunitCase {
48
+ classname: string;
49
+ name: string;
50
+ status: PytestCaseStatus;
51
+ /** Duration in milliseconds, when reported. */
52
+ duration?: number;
53
+ /** The failure, error or skip message attribute. */
54
+ message?: string;
55
+ /** The failure or error body (traceback). */
56
+ details?: string;
57
+ }
58
+ /** The test cases of a pytest JUnit XML report, in report order. */
59
+ export declare function parsePytestJunitXml(xml: string): PytestJunitCase[];
60
+ /**
61
+ * The run file a test case belongs to, and its name inside that file
62
+ * (`TestClass::test_name[param]`, the node id without the file). The class
63
+ * name is the module's dotted path relative to pytest's rootdir followed by
64
+ * any classes, so the file is the one whose path ends with the longest
65
+ * leading part of it.
66
+ */
67
+ export declare function locatePytestCase(testCase: Pick<PytestJunitCase, 'classname' | 'name'>, files: readonly string[]): {
68
+ file: string;
69
+ name: string;
70
+ };
71
+ /** One test of a finished pytest run. */
72
+ export interface PytestTest {
73
+ name: string;
74
+ file: string;
75
+ status: 'passed' | 'failed' | 'skipped';
76
+ duration?: number;
77
+ /** Failure or error text for a failed test. */
78
+ failureMessage?: string;
79
+ }
80
+ export interface PytestRun {
81
+ total: number;
82
+ passed: number;
83
+ failed: number;
84
+ skipped: number;
85
+ tests: PytestTest[];
86
+ }
87
+ /**
88
+ * The result of a finished pytest run, or the runner error that kept it from
89
+ * being one. `report` is the JUnit XML text, undefined when pytest wrote none.
90
+ * A test case that errored (in a fixture, say) counts as a failed test.
91
+ */
92
+ export declare function pytestRunFromReport(report: string | undefined, files: readonly string[], exitCode: number | null, output: string, python?: string): Result<PytestRun, TestRunnerExecutionError>;
93
+ //# sourceMappingURL=pytest-junit-report.d.ts.map
@@ -0,0 +1,241 @@
1
+ /**
2
+ * #1248: running pytest and reading its JUnit XML report.
3
+ *
4
+ * pytest is started as `<python> -m pytest <files> --junitxml=<file>`, with
5
+ * the report in a temporary directory owned by the run, so the result never
6
+ * depends on the console summary. The interpreter is `AQE_PYTHON` when set,
7
+ * otherwise `python` when it is on PATH, otherwise `python3`.
8
+ *
9
+ * The report is read with a small parser for the XML pytest writes (one or
10
+ * more `<testsuite>` elements holding `<testcase>` elements, each with an
11
+ * optional `<failure>`, `<error>` or `<skipped>` child). Counts come from the
12
+ * test cases themselves, so they always match the per-test list. An expected
13
+ * failure (xfail) is reported by pytest as skipped and counted as skipped.
14
+ *
15
+ * A run is only a result when pytest finished its tests: exit code 5 (no
16
+ * tests collected), 2 (interrupted, for example by a collection error),
17
+ * 3 (internal error) and 4 (usage error), or a missing report (pytest not
18
+ * installed for the interpreter), are runner errors, never a pass.
19
+ */
20
+ import { existsSync, mkdtempSync, readFileSync, rmSync, statSync } from 'node:fs';
21
+ import { tmpdir } from 'node:os';
22
+ import * as path from 'node:path';
23
+ import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from './test-runner-verdict.js';
24
+ import { ok, err } from './types/index.js';
25
+ /** True for a Python test file, which only pytest can run. */
26
+ export function isPythonTestFile(file) {
27
+ return /\.py$/i.test(file);
28
+ }
29
+ function onPath(command, env) {
30
+ const names = process.platform === 'win32' ? [`${command}.exe`, `${command}.cmd`, command] : [command];
31
+ for (const dir of (env.PATH ?? env.Path ?? '').split(path.delimiter)) {
32
+ if (!dir)
33
+ continue;
34
+ for (const name of names) {
35
+ try {
36
+ if (statSync(path.join(dir, name)).isFile())
37
+ return true;
38
+ }
39
+ catch {
40
+ // Not in this directory.
41
+ }
42
+ }
43
+ }
44
+ return false;
45
+ }
46
+ /** The Python interpreter that runs pytest. */
47
+ export function resolvePythonCommand(env = process.env) {
48
+ const configured = env.AQE_PYTHON?.trim();
49
+ if (configured)
50
+ return configured;
51
+ if (onPath('python', env))
52
+ return 'python';
53
+ return onPath('python3', env) ? 'python3' : 'python';
54
+ }
55
+ /** Environment for a pytest process: no ANSI colour in its output or report. */
56
+ export const PYTEST_ENV = { PY_COLORS: '0' };
57
+ /** Command and arguments that run `targets` (paths or node ids) with pytest. */
58
+ export function pytestCommand(targets, reportPath, env = process.env) {
59
+ return {
60
+ command: resolvePythonCommand(env),
61
+ // No colour: runners are started with FORCE_COLOR set, which pytest reads
62
+ // as "force colour" (even in its report). PY_COLORS=0 (PYTEST_ENV) wins
63
+ // over FORCE_COLOR; --color=no covers the console output.
64
+ args: ['-m', 'pytest', ...targets, `--junitxml=${reportPath}`, '--color=no'],
65
+ };
66
+ }
67
+ export function createPytestJunitReport() {
68
+ const dir = mkdtempSync(path.join(tmpdir(), 'aqe-pytest-report-'));
69
+ const reportPath = path.join(dir, 'junit.xml');
70
+ let cleaned = false;
71
+ return {
72
+ path: reportPath,
73
+ args: [],
74
+ read: () => {
75
+ if (!existsSync(reportPath))
76
+ return undefined;
77
+ const text = readFileSync(reportPath, 'utf-8');
78
+ if (!/<testsuite\b/.test(text))
79
+ throw new TestRunnerExecutionError('The current pytest JUnit report is malformed.');
80
+ return text;
81
+ },
82
+ cleanup: () => {
83
+ if (cleaned)
84
+ return;
85
+ cleaned = true;
86
+ try {
87
+ rmSync(dir, { recursive: true, force: true });
88
+ }
89
+ catch {
90
+ // Best effort: a leftover temp dir is not worth failing a test run over.
91
+ }
92
+ },
93
+ };
94
+ }
95
+ function unescapeXml(text) {
96
+ return text.replace(/&(#x[0-9a-f]+|#\d+|lt|gt|amp|quot|apos);/gi, (_, entity) => {
97
+ const lower = entity.toLowerCase();
98
+ if (lower === 'lt')
99
+ return '<';
100
+ if (lower === 'gt')
101
+ return '>';
102
+ if (lower === 'amp')
103
+ return '&';
104
+ if (lower === 'quot')
105
+ return '"';
106
+ if (lower === 'apos')
107
+ return '\'';
108
+ const code = lower.startsWith('#x') ? parseInt(lower.slice(2), 16) : parseInt(lower.slice(1), 10);
109
+ return Number.isFinite(code) && code >= 0 && code <= 0x10ffff ? String.fromCodePoint(code) : '';
110
+ });
111
+ }
112
+ function attributes(text) {
113
+ const attrs = {};
114
+ for (const match of text.matchAll(/([\w:.-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g)) {
115
+ attrs[match[1]] = unescapeXml(match[2] ?? match[3] ?? '');
116
+ }
117
+ return attrs;
118
+ }
119
+ /** The test cases of a pytest JUnit XML report, in report order. */
120
+ export function parsePytestJunitXml(xml) {
121
+ if (!/<testsuite\b/.test(xml))
122
+ throw new Error('Not a JUnit XML report: no <testsuite> element.');
123
+ const cases = [];
124
+ const testcase = /<testcase\b((?:[^>"']|"[^"]*"|'[^']*')*?)(?:\/>|>([\s\S]*?)<\/testcase>)/g;
125
+ for (const match of xml.matchAll(testcase)) {
126
+ const attrs = attributes(match[1]);
127
+ const body = match[2] ?? '';
128
+ // An error (setup/teardown) outranks a failure in the same test case.
129
+ const child = (tag) => body.match(new RegExp(`<${tag}\\b((?:[^>"']|"[^"]*"|'[^']*')*?)(?:\\/>|>([\\s\\S]*?)<\\/${tag}>)`));
130
+ const error = child('error');
131
+ const failure = child('failure');
132
+ const skipped = child('skipped');
133
+ const outcome = error ?? failure ?? skipped;
134
+ const status = error ? 'error' : failure ? 'failed' : skipped ? 'skipped' : 'passed';
135
+ const seconds = Number.parseFloat(attrs.time ?? '');
136
+ const message = outcome ? attributes(outcome[1]).message : undefined;
137
+ const details = outcome?.[2] !== undefined ? unescapeXml(outcome[2]).trim() : undefined;
138
+ cases.push({
139
+ classname: attrs.classname ?? '',
140
+ name: attrs.name ?? '',
141
+ status,
142
+ ...(Number.isFinite(seconds) ? { duration: Math.round(seconds * 1000) } : {}),
143
+ ...(message ? { message } : {}),
144
+ ...(details ? { details } : {}),
145
+ });
146
+ }
147
+ return cases;
148
+ }
149
+ /** A collection error is reported as an error case with no class name. */
150
+ function isCollectionError(testCase) {
151
+ return testCase.status === 'error' && (testCase.classname === '' || testCase.message === 'collection failure');
152
+ }
153
+ function pathSegments(file) {
154
+ return file.replace(/\.py$/i, '').split(/[\\/]+/).filter(Boolean);
155
+ }
156
+ /**
157
+ * The run file a test case belongs to, and its name inside that file
158
+ * (`TestClass::test_name[param]`, the node id without the file). The class
159
+ * name is the module's dotted path relative to pytest's rootdir followed by
160
+ * any classes, so the file is the one whose path ends with the longest
161
+ * leading part of it.
162
+ */
163
+ export function locatePytestCase(testCase, files) {
164
+ const dotted = testCase.classname ? testCase.classname.split('.') : [];
165
+ let best;
166
+ for (const file of files) {
167
+ const segments = pathSegments(file);
168
+ for (let length = Math.min(dotted.length, segments.length); length > 0; length--) {
169
+ const tail = segments.slice(segments.length - length);
170
+ if (tail.every((segment, index) => segment === dotted[index])) {
171
+ if (!best || length > best.matched)
172
+ best = { file, matched: length };
173
+ break;
174
+ }
175
+ }
176
+ }
177
+ if (!best) {
178
+ return {
179
+ file: files.length === 1 ? files[0] : files.join(', '),
180
+ name: testCase.classname ? `${testCase.classname}::${testCase.name}` : testCase.name,
181
+ };
182
+ }
183
+ return { file: best.file, name: [...dotted.slice(best.matched), testCase.name].join('::') };
184
+ }
185
+ const PYTEST_EXIT_REASONS = {
186
+ 2: 'was interrupted (for example by a collection error)',
187
+ 3: 'hit an internal error',
188
+ 4: 'rejected its command line',
189
+ 5: 'collected no tests',
190
+ };
191
+ /**
192
+ * The result of a finished pytest run, or the runner error that kept it from
193
+ * being one. `report` is the JUnit XML text, undefined when pytest wrote none.
194
+ * A test case that errored (in a fixture, say) counts as a failed test.
195
+ */
196
+ export function pytestRunFromReport(report, files, exitCode, output, python = resolvePythonCommand()) {
197
+ const label = files.join(', ');
198
+ if (report === undefined) {
199
+ const notInstalled = /No module named pytest/.test(output);
200
+ return err(new TestRunnerExecutionError(`pytest wrote no JUnit report for ${label} (exit code ${exitCode ?? 'unknown'}).` +
201
+ (notInstalled
202
+ ? ` pytest is not installed for '${python}'; install it, or set AQE_PYTHON to an interpreter that has it.`
203
+ : ` Check that '${python} -m pytest' runs; set AQE_PYTHON to choose the interpreter.`) +
204
+ (output.trim() ? `\n${capDiagnostics(output.trim())}` : '')));
205
+ }
206
+ let cases;
207
+ try {
208
+ cases = parsePytestJunitXml(report);
209
+ }
210
+ catch (error) {
211
+ return err(new TestRunnerExecutionError(`Could not read the pytest JUnit report for ${label}: ${error instanceof Error ? error.message : String(error)}`));
212
+ }
213
+ const collectionErrors = cases.filter(isCollectionError);
214
+ const exitReason = exitCode !== null ? PYTEST_EXIT_REASONS[exitCode] : undefined;
215
+ if (exitReason || collectionErrors.length > 0) {
216
+ const reasons = collectionErrors.map(c => `${c.name}: ${c.details ?? c.message ?? 'collection failure'}`);
217
+ return err(new TestRunnerExecutionError(`pytest ${exitReason ?? 'reported a collection error'} for ${label} (exit code ${exitCode ?? 'unknown'}).` +
218
+ `\n${capDiagnostics([...reasons, output.trim()].filter(Boolean).join('\n'))}`));
219
+ }
220
+ const tests = cases.map(testCase => {
221
+ const { file, name } = locatePytestCase(testCase, files);
222
+ const failed = testCase.status === 'failed' || testCase.status === 'error';
223
+ const failureMessage = failed
224
+ ? [testCase.message, testCase.details].filter(Boolean).join('\n') || 'Test failed'
225
+ : undefined;
226
+ return {
227
+ name, file,
228
+ status: failed ? 'failed' : testCase.status === 'skipped' ? 'skipped' : 'passed',
229
+ ...(testCase.duration !== undefined ? { duration: testCase.duration } : {}),
230
+ ...(failureMessage ? { failureMessage } : {}),
231
+ };
232
+ });
233
+ const passed = tests.filter(t => t.status === 'passed').length;
234
+ const failed = tests.filter(t => t.status === 'failed').length;
235
+ const skipped = tests.filter(t => t.status === 'skipped').length;
236
+ const executionError = getTestRunnerExecutionError('pytest', label, exitCode, { passed, failed, skipped }, output);
237
+ if (executionError)
238
+ return err(executionError);
239
+ return ok({ total: tests.length, passed, failed, skipped, tests });
240
+ }
241
+ //# sourceMappingURL=pytest-junit-report.js.map
@@ -0,0 +1,27 @@
1
+ /**
2
+ * How long one attempt of an asynchronously retried write may wait for a
3
+ * SQLite lock (#1263).
4
+ *
5
+ * better-sqlite3 waits for a locked database synchronously, inside the call,
6
+ * for up to the connection's busy_timeout (5 s by default). In a one-shot CLI
7
+ * command that is the patience we want. In the MCP server it freezes the event
8
+ * loop: while another process held memory.db's write lock, background writes
9
+ * blocked for 5 s each, back to back, and stopped all tool calls for 10-15 s.
10
+ *
11
+ * The MCP server sets this cap. Writes routed through
12
+ * UnifiedMemoryManager.writeWhenUnlocked then wait at most the cap per
13
+ * attempt and retry asynchronously until the connection's busy_timeout has
14
+ * passed. Connections keep their busy_timeout, so writes not routed that way
15
+ * keep their full (blocking) patience.
16
+ *
17
+ * Dependency-free so any module can read it.
18
+ */
19
+ /** Longest one retried write attempt blocks the MCP server's event loop on a locked database. */
20
+ export declare const INTERACTIVE_LOCK_WAIT_MS = 200;
21
+ /** Set the per-attempt wait for asynchronously retried writes (null: no cap). */
22
+ export declare function setLockWaitCap(ms: number | null): void;
23
+ /** The current cap, or null when retried writes wait the full busy_timeout per attempt. */
24
+ export declare function getLockWaitCap(): number | null;
25
+ /** The per-attempt wait for a requested busy_timeout, honouring the process cap. */
26
+ export declare function capBusyTimeout(requestedMs: number): number;
27
+ //# sourceMappingURL=sqlite-lock-wait.d.ts.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * How long one attempt of an asynchronously retried write may wait for a
3
+ * SQLite lock (#1263).
4
+ *
5
+ * better-sqlite3 waits for a locked database synchronously, inside the call,
6
+ * for up to the connection's busy_timeout (5 s by default). In a one-shot CLI
7
+ * command that is the patience we want. In the MCP server it freezes the event
8
+ * loop: while another process held memory.db's write lock, background writes
9
+ * blocked for 5 s each, back to back, and stopped all tool calls for 10-15 s.
10
+ *
11
+ * The MCP server sets this cap. Writes routed through
12
+ * UnifiedMemoryManager.writeWhenUnlocked then wait at most the cap per
13
+ * attempt and retry asynchronously until the connection's busy_timeout has
14
+ * passed. Connections keep their busy_timeout, so writes not routed that way
15
+ * keep their full (blocking) patience.
16
+ *
17
+ * Dependency-free so any module can read it.
18
+ */
19
+ /** Longest one retried write attempt blocks the MCP server's event loop on a locked database. */
20
+ export const INTERACTIVE_LOCK_WAIT_MS = 200;
21
+ let lockWaitCapMs = null;
22
+ /** Set the per-attempt wait for asynchronously retried writes (null: no cap). */
23
+ export function setLockWaitCap(ms) {
24
+ if (ms !== null && (!Number.isFinite(ms) || ms < 0)) {
25
+ throw new RangeError(`Lock wait cap must be a non-negative number of ms, got ${ms}`);
26
+ }
27
+ lockWaitCapMs = ms === null ? null : Math.floor(ms);
28
+ }
29
+ /** The current cap, or null when retried writes wait the full busy_timeout per attempt. */
30
+ export function getLockWaitCap() {
31
+ return lockWaitCapMs;
32
+ }
33
+ /** The per-attempt wait for a requested busy_timeout, honouring the process cap. */
34
+ export function capBusyTimeout(requestedMs) {
35
+ return lockWaitCapMs === null ? requestedMs : Math.min(requestedMs, lockWaitCapMs);
36
+ }
37
+ //# sourceMappingURL=sqlite-lock-wait.js.map
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Which SQLite connections have a write queue (#1283).
3
+ *
4
+ * UnifiedMemoryManager registers its shared memory.db connection here while it
5
+ * is open, with its writeWhenUnlocked queue. Modules that hold only the raw
6
+ * connection route writes through `writeWhenUnlockedOn` without importing
7
+ * unified-memory's sqlite graph: on a registered connection the write is
8
+ * queued (FIFO, retried asynchronously under the MCP server's lock wait cap,
9
+ * full busy_timeout budget), so a locked memory.db does not freeze the event
10
+ * loop. A write on any other connection runs now, as it always did.
11
+ *
12
+ * Dependency-free so any module can import it.
13
+ */
14
+ /** A connection's FIFO write queue: runs `fn` when the database is unlocked. */
15
+ export type WriteQueue = <T>(fn: () => T) => Promise<T>;
16
+ /** Route writes on `db` through `queue` until unregistered. */
17
+ export declare function registerWriteQueue(db: object, queue: WriteQueue): void;
18
+ /** Stop routing writes on `db` (the connection is closing). */
19
+ export declare function unregisterWriteQueue(db: object): void;
20
+ /** True when writes on `db` are queued. */
21
+ export declare function hasWriteQueue(db: object | null | undefined): boolean;
22
+ /**
23
+ * Run a write on `db`: queued when `db` has a write queue, otherwise at once.
24
+ * With the queue empty and the database unlocked a queued write also runs at
25
+ * once, so callers see the same result as a direct write.
26
+ */
27
+ export declare function writeWhenUnlockedOn<T>(db: object | null | undefined, fn: () => T): Promise<T>;
28
+ //# sourceMappingURL=sqlite-write-queue.d.ts.map
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Which SQLite connections have a write queue (#1283).
3
+ *
4
+ * UnifiedMemoryManager registers its shared memory.db connection here while it
5
+ * is open, with its writeWhenUnlocked queue. Modules that hold only the raw
6
+ * connection route writes through `writeWhenUnlockedOn` without importing
7
+ * unified-memory's sqlite graph: on a registered connection the write is
8
+ * queued (FIFO, retried asynchronously under the MCP server's lock wait cap,
9
+ * full busy_timeout budget), so a locked memory.db does not freeze the event
10
+ * loop. A write on any other connection runs now, as it always did.
11
+ *
12
+ * Dependency-free so any module can import it.
13
+ */
14
+ const queues = new WeakMap();
15
+ /** Route writes on `db` through `queue` until unregistered. */
16
+ export function registerWriteQueue(db, queue) {
17
+ queues.set(db, queue);
18
+ }
19
+ /** Stop routing writes on `db` (the connection is closing). */
20
+ export function unregisterWriteQueue(db) {
21
+ queues.delete(db);
22
+ }
23
+ /** True when writes on `db` are queued. */
24
+ export function hasWriteQueue(db) {
25
+ return db != null && queues.has(db);
26
+ }
27
+ /**
28
+ * Run a write on `db`: queued when `db` has a write queue, otherwise at once.
29
+ * With the queue empty and the database unlocked a queued write also runs at
30
+ * once, so callers see the same result as a direct write.
31
+ */
32
+ export function writeWhenUnlockedOn(db, fn) {
33
+ const queue = db != null ? queues.get(db) : undefined;
34
+ if (queue)
35
+ return queue(fn);
36
+ return new Promise((resolve) => resolve(fn()));
37
+ }
38
+ //# sourceMappingURL=sqlite-write-queue.js.map