agentic-qe 3.9.14 → 3.9.16

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 (313) hide show
  1. package/.claude/skills/accessibility-testing/SKILL.md +18 -0
  2. package/.claude/skills/enterprise-integration-testing/SKILL.md +1 -1
  3. package/.claude/skills/pentest-validation/SKILL.md +1 -1
  4. package/.claude/skills/qe-browser/evals/qe-browser.yaml +46 -63
  5. package/.claude/skills/qe-browser/scripts/smoke-test.sh +16 -4
  6. package/.claude/skills/skills-manifest.json +1 -1
  7. package/CHANGELOG.md +52 -0
  8. package/assets/skills/accessibility-testing/SKILL.md +18 -0
  9. package/assets/skills/qe-browser/evals/qe-browser.yaml +46 -63
  10. package/assets/skills/qe-browser/scripts/smoke-test.sh +16 -4
  11. package/assets/skills/skills-manifest.json +1 -1
  12. package/dist/cli/brain-commands.d.ts +14 -0
  13. package/dist/cli/brain-commands.js +24 -0
  14. package/dist/cli/bundle.js +7 -7
  15. package/dist/cli/chunks/adapter-XFJIW42U.js +2 -0
  16. package/dist/cli/chunks/{agent-booster-wasm-O6EXMPMF.js → agent-booster-wasm-IECTFMRK.js} +2 -2
  17. package/dist/cli/chunks/{agent-handler-4LPJVTJU.js → agent-handler-HLLTKZ5G.js} +2 -2
  18. package/dist/cli/chunks/{agent-memory-branch-PRR323JZ.js → agent-memory-branch-WJUD3DS4.js} +2 -2
  19. package/dist/cli/chunks/aqe-learning-engine-UD4SXENM.js +2 -0
  20. package/dist/cli/chunks/{audit-YCKXQOXD.js → audit-3DLZNWHO.js} +2 -2
  21. package/dist/cli/chunks/base-ETEN7L2V.js +2 -0
  22. package/dist/cli/chunks/{better-sqlite3-44RIH62G.js → better-sqlite3-Q356NEQ6.js} +2 -2
  23. package/dist/cli/chunks/brain-handler-MX2HP7LO.js +89 -0
  24. package/dist/cli/chunks/{branch-enumerator-RVVS2UYR.js → branch-enumerator-Z3TF3HVO.js} +2 -2
  25. package/dist/cli/chunks/{browser-L6IKC4PR.js → browser-Z6PQ7FTO.js} +2 -2
  26. package/dist/cli/chunks/browser-workflow-KVHPOIBA.js +2 -0
  27. package/dist/cli/chunks/{chunk-JOGKQTCU.js → chunk-2KCMS4UW.js} +3 -3
  28. package/dist/cli/chunks/{chunk-VUS4VRPQ.js → chunk-2MJEAEOW.js} +2 -2
  29. package/dist/cli/chunks/{chunk-FNKKENLS.js → chunk-3ADFXSO2.js} +2 -2
  30. package/dist/cli/chunks/{chunk-JN7MSUGK.js → chunk-3CAPNE2H.js} +2 -2
  31. package/dist/cli/chunks/{chunk-MFGYMNNY.js → chunk-3EUA73H6.js} +2 -2
  32. package/dist/cli/chunks/{chunk-ORHCO2I7.js → chunk-3H657FNU.js} +2 -2
  33. package/dist/cli/chunks/{chunk-OZBTC26R.js → chunk-3K4IX7L4.js} +2 -2
  34. package/dist/cli/chunks/{chunk-GIUAY4KY.js → chunk-3SLFWPRE.js} +3 -3
  35. package/dist/cli/chunks/{chunk-P5YSBYZV.js → chunk-3ZGYB23S.js} +1 -1
  36. package/dist/cli/chunks/{chunk-6BK2S2WE.js → chunk-46K7ALFU.js} +2 -2
  37. package/dist/cli/chunks/{chunk-I3P5RZX7.js → chunk-4CFQZHUC.js} +3 -3
  38. package/dist/cli/chunks/{chunk-DMZ2XOEW.js → chunk-4PFHQH4B.js} +2 -2
  39. package/dist/cli/chunks/{chunk-TOSFK4VG.js → chunk-4ZN4GM7W.js} +1 -1
  40. package/dist/cli/chunks/{chunk-MXIFVOYA.js → chunk-5A5XANSD.js} +2 -2
  41. package/dist/cli/chunks/{chunk-UG2J5MTY.js → chunk-5E7FVOOG.js} +1 -1
  42. package/dist/cli/chunks/chunk-5LDXAVDC.js +2 -0
  43. package/dist/cli/chunks/{chunk-KFAN5FZM.js → chunk-666L7MC2.js} +2 -2
  44. package/dist/cli/chunks/{chunk-ZCRLZINE.js → chunk-66BUIFFH.js} +2 -2
  45. package/dist/cli/chunks/{chunk-6EZY2QVM.js → chunk-6V5P2VMQ.js} +8 -8
  46. package/dist/cli/chunks/{chunk-YPMBD44A.js → chunk-6XKZ62O7.js} +2 -2
  47. package/dist/cli/chunks/{chunk-JNLKLC7G.js → chunk-77OVXVN2.js} +2 -2
  48. package/dist/cli/chunks/{chunk-I5U64MHU.js → chunk-7DP2IQ6F.js} +2 -2
  49. package/dist/cli/chunks/{chunk-FFACJODG.js → chunk-7IF4LRX2.js} +2 -2
  50. package/dist/cli/chunks/{chunk-36YZ2UF7.js → chunk-7JFSMXIA.js} +2 -2
  51. package/dist/cli/chunks/{chunk-VU4QET3C.js → chunk-7MF6LVLH.js} +2 -2
  52. package/dist/cli/chunks/{chunk-WELNFHDN.js → chunk-7NMLIJHL.js} +1 -1
  53. package/dist/cli/chunks/{chunk-IOHDE27P.js → chunk-7PHYOV2X.js} +2 -2
  54. package/dist/cli/chunks/{chunk-YZBY4ZRF.js → chunk-7V2Z3PUJ.js} +2 -2
  55. package/dist/cli/chunks/{chunk-GM5LIYLQ.js → chunk-AA6IUBCM.js} +2 -2
  56. package/dist/cli/chunks/{chunk-TJOZPPZR.js → chunk-AFLQFUXA.js} +2 -2
  57. package/dist/cli/chunks/{chunk-KJB6JJXT.js → chunk-BCT26J7X.js} +1 -1
  58. package/dist/cli/chunks/{chunk-D6APBW66.js → chunk-BEE5KXQT.js} +1 -1
  59. package/dist/cli/chunks/{chunk-A2TK52B2.js → chunk-BNDK7JRW.js} +2 -2
  60. package/dist/cli/chunks/{chunk-4EQWK6P6.js → chunk-CR7LLS26.js} +2 -2
  61. package/dist/cli/chunks/{chunk-S2KGZJHS.js → chunk-DBCN7R63.js} +1 -1
  62. package/dist/cli/chunks/{chunk-BNPJMPM3.js → chunk-DF3DZP7H.js} +2 -2
  63. package/dist/cli/chunks/{chunk-OGLS6HB4.js → chunk-DJPS7H2M.js} +1 -1
  64. package/dist/cli/chunks/{chunk-G7L5Y47C.js → chunk-ED5OUSYZ.js} +1 -1
  65. package/dist/cli/chunks/{chunk-PZF5ISGS.js → chunk-EFTK4ZVP.js} +1 -1
  66. package/dist/cli/chunks/chunk-FEQ5RDQL.js +18 -0
  67. package/dist/cli/chunks/{chunk-VDGWDDBC.js → chunk-FKQV52TC.js} +2 -2
  68. package/dist/cli/chunks/{chunk-DD4T7ZUM.js → chunk-FLWIEPAT.js} +1 -1
  69. package/dist/cli/chunks/{chunk-5DWTU2PN.js → chunk-FQTUUZVK.js} +1 -1
  70. package/dist/cli/chunks/{chunk-4JYLXYAH.js → chunk-G5DMEEQQ.js} +1 -1
  71. package/dist/cli/chunks/{chunk-JLBUS4PR.js → chunk-GB6D3SSY.js} +2 -2
  72. package/dist/cli/chunks/{chunk-HEQ23HBE.js → chunk-GP7IXB3E.js} +2 -2
  73. package/dist/cli/chunks/{chunk-3NUMJB3U.js → chunk-H3JEGAFC.js} +9 -9
  74. package/dist/cli/chunks/{chunk-ZFZX2NA3.js → chunk-H4BZJVKU.js} +2 -2
  75. package/dist/cli/chunks/{chunk-AOYN6XYJ.js → chunk-HFGCLV56.js} +1 -1
  76. package/dist/cli/chunks/{chunk-XNXOW7BQ.js → chunk-HJUC2DE6.js} +2 -2
  77. package/dist/cli/chunks/{chunk-NWZYULZE.js → chunk-HN6GVQ4Q.js} +4 -4
  78. package/dist/cli/chunks/{chunk-RQFC7Q33.js → chunk-HON4X4Z3.js} +2 -2
  79. package/dist/cli/chunks/{chunk-AEQMQVDJ.js → chunk-HVAW64YW.js} +2 -2
  80. package/dist/cli/chunks/{chunk-5MWNXDQW.js → chunk-HXF4FUPY.js} +2 -2
  81. package/dist/cli/chunks/{chunk-HJJTLOWZ.js → chunk-IUQ6HE2J.js} +2 -2
  82. package/dist/cli/chunks/{chunk-IH4OOAEP.js → chunk-J2ERTUDX.js} +1 -1
  83. package/dist/cli/chunks/{chunk-DNFDSDKE.js → chunk-JCQ5PXVM.js} +2 -2
  84. package/dist/cli/chunks/{chunk-XH774Q6Z.js → chunk-JNXIYHLI.js} +1 -1
  85. package/dist/cli/chunks/{chunk-ERMIIRYN.js → chunk-JUKCBZCZ.js} +1 -1
  86. package/dist/cli/chunks/{chunk-AHVUILGE.js → chunk-JZOMOYHZ.js} +1 -1
  87. package/dist/cli/chunks/{chunk-UAAJ3BSW.js → chunk-KLVS6FT2.js} +2 -2
  88. package/dist/cli/chunks/{chunk-GUEK5DOK.js → chunk-KR7S4IZZ.js} +2 -2
  89. package/dist/cli/chunks/{chunk-VQB5SLXZ.js → chunk-L2GANTQN.js} +2 -2
  90. package/dist/cli/chunks/{chunk-GALNZTYE.js → chunk-LJINNQNN.js} +2 -2
  91. package/dist/cli/chunks/{chunk-IL3ESNHA.js → chunk-LSA4XGSE.js} +3 -3
  92. package/dist/cli/chunks/{chunk-M2RO34V7.js → chunk-LVA53A5R.js} +4 -4
  93. package/dist/cli/chunks/{chunk-LJ3WQIBN.js → chunk-LVK2PDUW.js} +1 -1
  94. package/dist/cli/chunks/{chunk-3ZKTPPIC.js → chunk-LWG7LKOK.js} +1 -1
  95. package/dist/cli/chunks/{chunk-PFSSI3YR.js → chunk-MECDNFOJ.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FWI7PK4X.js → chunk-MFRC267A.js} +1 -1
  97. package/dist/cli/chunks/{chunk-WE7KIXR6.js → chunk-MJKFU6A6.js} +2 -2
  98. package/dist/cli/chunks/{chunk-5U6M4XCP.js → chunk-MQHP65QB.js} +3 -3
  99. package/dist/cli/chunks/{chunk-7732TLNA.js → chunk-MTF6ABUH.js} +2 -2
  100. package/dist/cli/chunks/{chunk-ME4LVBTT.js → chunk-N5ZTPAX7.js} +2 -2
  101. package/dist/cli/chunks/{chunk-NWGIQCCO.js → chunk-NCXXXZGL.js} +1 -1
  102. package/dist/cli/chunks/{chunk-DJLRRCR6.js → chunk-NIXMFJJC.js} +2 -2
  103. package/dist/cli/chunks/{chunk-JWR3NNFA.js → chunk-NLU4XJBN.js} +1 -1
  104. package/dist/cli/chunks/{chunk-DGUAAG3T.js → chunk-NOJVROCD.js} +1 -1
  105. package/dist/cli/chunks/{chunk-Z3PSKGBO.js → chunk-OE7SGIX2.js} +2 -2
  106. package/dist/cli/chunks/{chunk-KHUFPJE4.js → chunk-OP7X434R.js} +2 -2
  107. package/dist/cli/chunks/{chunk-WUYJYRBY.js → chunk-P4IYRPCB.js} +1 -1
  108. package/dist/cli/chunks/{chunk-GOTVYSX5.js → chunk-PNZADZSI.js} +3 -3
  109. package/dist/cli/chunks/{chunk-3PZ2QLLR.js → chunk-PPUEXTH2.js} +3 -3
  110. package/dist/cli/chunks/{chunk-6J6GXRHX.js → chunk-PQLT3X6X.js} +3 -3
  111. package/dist/cli/chunks/{chunk-VVKENR4I.js → chunk-QEKZA2NJ.js} +1 -1
  112. package/dist/cli/chunks/{chunk-S6SM7LJK.js → chunk-QKQAQPXY.js} +2 -2
  113. package/dist/cli/chunks/{chunk-LWHM5BWD.js → chunk-RFLSJ7OL.js} +2 -2
  114. package/dist/cli/chunks/{chunk-WSZVSDD5.js → chunk-RVQXMMRO.js} +2 -2
  115. package/dist/cli/chunks/{chunk-Q4DAYLH4.js → chunk-RYCAVZSD.js} +2 -2
  116. package/dist/cli/chunks/{chunk-VEAVDXXT.js → chunk-SMNOZEM7.js} +2 -2
  117. package/dist/cli/chunks/{chunk-4RDTR2OF.js → chunk-T36IXY5W.js} +2 -2
  118. package/dist/cli/chunks/{chunk-J3XLOHWB.js → chunk-T7VIUEKI.js} +2 -2
  119. package/dist/cli/chunks/{chunk-J5YOXLBD.js → chunk-TFBEX7ED.js} +1 -1
  120. package/dist/cli/chunks/{chunk-Y3X5OS5F.js → chunk-TPRYLARW.js} +2 -2
  121. package/dist/cli/chunks/{chunk-SY74WSBN.js → chunk-TR4NPMRW.js} +2 -2
  122. package/dist/cli/chunks/{chunk-WVN4YJSF.js → chunk-TUPFBZKO.js} +1 -1
  123. package/dist/cli/chunks/{chunk-UUVTLYUK.js → chunk-TWEBJWJI.js} +2 -2
  124. package/dist/cli/chunks/{chunk-QUK34CSU.js → chunk-UH7TV6BY.js} +1 -1
  125. package/dist/cli/chunks/{chunk-QLWP7ZIT.js → chunk-UT4CXF6C.js} +2 -2
  126. package/dist/cli/chunks/{chunk-UIYK4Y7K.js → chunk-V2ELGHLG.js} +2 -2
  127. package/dist/cli/chunks/{chunk-ZU5VHW6P.js → chunk-VK2GKQYI.js} +2 -2
  128. package/dist/cli/chunks/{chunk-FYBTGEOV.js → chunk-VNAAXZGF.js} +1 -1
  129. package/dist/cli/chunks/{chunk-G2KQUEGY.js → chunk-VOAECU7B.js} +2 -2
  130. package/dist/cli/chunks/{chunk-3GIZRGX6.js → chunk-W4ZV6LAJ.js} +2 -2
  131. package/dist/cli/chunks/{chunk-5HUAD4UU.js → chunk-W6TMZY5R.js} +2 -2
  132. package/dist/cli/chunks/{chunk-KVN4FTPT.js → chunk-WKLSXJD4.js} +2 -2
  133. package/dist/cli/chunks/{chunk-BOMJHE4I.js → chunk-WSKASZYC.js} +2 -2
  134. package/dist/cli/chunks/{chunk-6GKXC6DE.js → chunk-WVFLNGOK.js} +2 -2
  135. package/dist/cli/chunks/{chunk-SUXUCW5I.js → chunk-WVHH3OQ4.js} +2 -2
  136. package/dist/cli/chunks/{chunk-CGC63MGF.js → chunk-XAULPLOC.js} +4 -4
  137. package/dist/cli/chunks/{chunk-L4IWZXSC.js → chunk-XKMMFQSJ.js} +1 -1
  138. package/dist/cli/chunks/{chunk-7IJBZGZY.js → chunk-XQ6WIPDC.js} +1 -1
  139. package/dist/cli/chunks/{chunk-LKGLKX2A.js → chunk-ZCE6JNRI.js} +2 -2
  140. package/dist/cli/chunks/{chunk-BFCMOMOF.js → chunk-ZCZJYM42.js} +1 -1
  141. package/dist/cli/chunks/{chunk-2L3BCZ2F.js → chunk-ZXLF3IKT.js} +1 -1
  142. package/dist/cli/chunks/{ci-QQ4F5TYO.js → ci-TTP5HJSW.js} +2 -2
  143. package/dist/cli/chunks/{ci-output-QC4WRENA.js → ci-output-TKESU45X.js} +2 -2
  144. package/dist/cli/chunks/{circuit-breaker-HFQUNYTK.js → circuit-breaker-GFRV5R7E.js} +2 -2
  145. package/dist/cli/chunks/{claude-flow-setup-XNSCWIUN.js → claude-flow-setup-LY6MADFA.js} +2 -2
  146. package/dist/cli/chunks/client-ZDVM5WFL.js +2 -0
  147. package/dist/cli/chunks/{cline-installer-S3CECBYL.js → cline-installer-OSAILLDH.js} +2 -2
  148. package/dist/cli/chunks/{code-QHUELDUH.js → code-ASRSOGYH.js} +2 -2
  149. package/dist/cli/chunks/{code-index-extractor-QLA5EQTE.js → code-index-extractor-AMLGVHB7.js} +2 -2
  150. package/dist/cli/chunks/{codex-installer-CQ7JNNOA.js → codex-installer-3CKH3WV4.js} +2 -2
  151. package/dist/cli/chunks/{completions-S33U3KIT.js → completions-MXNPWLOE.js} +91 -10
  152. package/dist/cli/chunks/{complexity-analyzer-J7IEW3EM.js → complexity-analyzer-2Z347PXF.js} +2 -2
  153. package/dist/cli/chunks/{continuedev-installer-DVU24D37.js → continuedev-installer-LE7K745N.js} +2 -2
  154. package/dist/cli/chunks/{copilot-installer-DYISOPBC.js → copilot-installer-CHJL3275.js} +2 -2
  155. package/dist/cli/chunks/{cost-tracker-URJADKKS.js → cost-tracker-C3ZWNNSV.js} +2 -2
  156. package/dist/cli/chunks/{coverage-NGMKJNW6.js → coverage-6JOXBVDL.js} +3 -3
  157. package/dist/cli/chunks/cross-domain-router-J5VK276J.js +2 -0
  158. package/dist/cli/chunks/{cursor-installer-DFBJRDSY.js → cursor-installer-RKCNWO42.js} +2 -2
  159. package/dist/cli/chunks/{daemon-JSKKVVCV.js → daemon-XXWOT6TM.js} +3 -3
  160. package/dist/cli/chunks/{dag-attention-scheduler-YITFS6MR.js → dag-attention-scheduler-37MG6XR4.js} +2 -2
  161. package/dist/cli/chunks/{detect-5APZP2D3.js → detect-QOTL36CE.js} +2 -2
  162. package/dist/cli/chunks/{domain-handler-WHH6XPSZ.js → domain-handler-TJNLNJ7Z.js} +2 -2
  163. package/dist/cli/chunks/{domain-transfer-SERX53SS.js → domain-transfer-FDHC2MGH.js} +2 -2
  164. package/dist/cli/chunks/dream-VCLN6RM4.js +2 -0
  165. package/dist/cli/chunks/esm-node-YZSRCH6T.js +2 -0
  166. package/dist/cli/chunks/eval-JP7CLUTD.js +15 -0
  167. package/dist/cli/chunks/{fast-paths-4MSOOJVK.js → fast-paths-CWTVLIIC.js} +2 -2
  168. package/dist/cli/chunks/{feature-flags-564YFR65.js → feature-flags-H2UU53L4.js} +2 -2
  169. package/dist/cli/chunks/{feature-flags-WJT57IEJ.js → feature-flags-SKFBAHR3.js} +2 -2
  170. package/dist/cli/chunks/{file-discovery-5QVG65WF.js → file-discovery-RWVGKIDB.js} +2 -2
  171. package/dist/cli/chunks/{fleet-CF5JRK5B.js → fleet-JOSUYRTZ.js} +3 -3
  172. package/dist/cli/chunks/{gnn-wrapper-NYQ77563.js → gnn-wrapper-WNOZFTDD.js} +2 -2
  173. package/dist/cli/chunks/{heartbeat-handler-42QJPKHE.js → heartbeat-handler-73YSR6K7.js} +4 -4
  174. package/dist/cli/chunks/{heartbeat-scheduler-7XEAV74Y.js → heartbeat-scheduler-EN52JZUX.js} +2 -2
  175. package/dist/cli/chunks/hnsw-adapter-Y5HVTNJW.js +2 -0
  176. package/dist/cli/chunks/hnsw-index-NZTCPZA5.js +2 -0
  177. package/dist/cli/chunks/{hnsw-legacy-bridge-ZRR6PGWN.js → hnsw-legacy-bridge-PWD6DXS4.js} +2 -2
  178. package/dist/cli/chunks/{hnswlib-node-DY7NOW76.js → hnswlib-node-VAZOCNY7.js} +2 -2
  179. package/dist/cli/chunks/{hooks-IRRHEJLR.js → hooks-K7XGDF2Y.js} +6 -6
  180. package/dist/cli/chunks/{hybrid-router-S4JXJLUY.js → hybrid-router-6W323WKW.js} +2 -2
  181. package/dist/cli/chunks/{hypergraph-engine-WFHZJMP2.js → hypergraph-engine-R2N4C24I.js} +2 -2
  182. package/dist/cli/chunks/{hypergraph-handler-LHUKR7PT.js → hypergraph-handler-AY4YZDOG.js} +3 -3
  183. package/dist/cli/chunks/impact-analyzer-ROWLIS6H.js +2 -0
  184. package/dist/cli/chunks/{init-handler-ZBIW7PSB.js → init-handler-UDBW4P3Z.js} +6 -6
  185. package/dist/cli/chunks/init-wizard-MI76CUL5.js +2 -0
  186. package/dist/cli/chunks/kernel-5WVAV5RX.js +2 -0
  187. package/dist/cli/chunks/{kilocode-installer-JYHA4NW7.js → kilocode-installer-J2NZUDEQ.js} +2 -2
  188. package/dist/cli/chunks/{kiro-installer-OBXTRK77.js → kiro-installer-AHOOKFQH.js} +2 -2
  189. package/dist/cli/chunks/knowledge-graph-QXL3AWPV.js +2 -0
  190. package/dist/cli/chunks/{learning-OAEJHEJD.js → learning-VC7X2HKA.js} +3 -3
  191. package/dist/cli/chunks/{llm-router-NNEOZAVB.js → llm-router-3PU7CH5P.js} +4 -4
  192. package/dist/cli/chunks/{load-WIKLBESW.js → load-WB4JD6X7.js} +2 -2
  193. package/dist/cli/chunks/load-test-2JOY7YH6.js +2 -0
  194. package/dist/cli/chunks/{mcp-KR43GFGP.js → mcp-QUU2DYYK.js} +2 -2
  195. package/dist/cli/chunks/{memory-KQIYKAYU.js → memory-UAEWPG34.js} +5 -5
  196. package/dist/cli/chunks/memory-backend-ZKGLAWQZ.js +2 -0
  197. package/dist/cli/chunks/{memory-handlers-LAI4AO4O.js → memory-handlers-3FBXIZG4.js} +2 -2
  198. package/dist/cli/chunks/{multi-model-executor-NPS3VOAR.js → multi-model-executor-CIUHXR43.js} +2 -2
  199. package/dist/cli/chunks/{opencode-installer-FE475WME.js → opencode-installer-VV6RIHNR.js} +2 -2
  200. package/dist/cli/chunks/{orchestrator-MW4MZ3RW.js → orchestrator-WV27PZZM.js} +20 -20
  201. package/dist/cli/chunks/{pipeline-R2TGZSUA.js → pipeline-JRBCX2U3.js} +2 -2
  202. package/dist/cli/chunks/{platform-N2GZBCBP.js → platform-TUPMH4ND.js} +2 -2
  203. package/dist/cli/chunks/{plugin-V2AQF23V.js → plugin-H757CYQK.js} +2 -2
  204. package/dist/cli/chunks/{prime-radiant-advanced-wasm-ZQSYRLRS.js → prime-radiant-advanced-wasm-5BWO25RA.js} +2 -2
  205. package/dist/cli/chunks/protocol-executor-3Q4QY7G6.js +2 -0
  206. package/dist/cli/chunks/{protocol-handler-V3U724F2.js → protocol-handler-Z6DCNTUU.js} +2 -2
  207. package/dist/cli/chunks/{prove-NCH56HZB.js → prove-4OGWFOUM.js} +2 -2
  208. package/dist/cli/chunks/{provider-manager-7NUHS3T5.js → provider-manager-K736L6LN.js} +2 -2
  209. package/dist/cli/chunks/qe-reasoning-bank-SAMJF3NF.js +2 -0
  210. package/dist/cli/chunks/{quality-J3IVPPPW.js → quality-YFLEATGZ.js} +2 -2
  211. package/dist/cli/chunks/queen-coordinator-OFRH67Y2.js +2 -0
  212. package/dist/cli/chunks/{real-embeddings-VURZXAEY.js → real-embeddings-5QUSL7J4.js} +2 -2
  213. package/dist/cli/chunks/{roocode-installer-STWFJGMR.js → roocode-installer-HDWE5XW3.js} +2 -2
  214. package/dist/cli/chunks/router-UDHEENEY.js +2 -0
  215. package/dist/cli/chunks/routing-feedback-PBZRVFVL.js +2 -0
  216. package/dist/cli/chunks/{routing-handler-6GZT7EXM.js → routing-handler-P6PP3FYW.js} +2 -2
  217. package/dist/cli/chunks/{ruvector-commands-LCPAH6WH.js → ruvector-commands-VNMTRQML.js} +2 -2
  218. package/dist/cli/chunks/{rvf-dual-writer-76LWFT5X.js → rvf-dual-writer-A7VW5CAT.js} +2 -2
  219. package/dist/cli/chunks/{rvf-migration-adapter-G7KFWJKY.js → rvf-migration-adapter-QIPSNASM.js} +2 -2
  220. package/dist/cli/chunks/{rvf-migration-coordinator-3DXOUPWF.js → rvf-migration-coordinator-XT4XDLRZ.js} +2 -2
  221. package/dist/cli/chunks/rvf-native-adapter-CJFEDG74.js +2 -0
  222. package/dist/cli/chunks/safe-db-YMSZFHWP.js +2 -0
  223. package/dist/cli/chunks/schedule-B43N6CVB.js +2 -0
  224. package/dist/cli/chunks/scheduler-ITZH5YQM.js +2 -0
  225. package/dist/cli/chunks/{security-XDBPYA5T.js → security-E2XCP5CG.js} +3 -3
  226. package/dist/cli/chunks/shared-rvf-adapter-PV5ZBJ25.js +2 -0
  227. package/dist/cli/chunks/{shared-rvf-dual-writer-UGXTS2XI.js → shared-rvf-dual-writer-NPWTXHUI.js} +2 -2
  228. package/dist/cli/chunks/sqlite-persistence-RK5CKPHB.js +2 -0
  229. package/dist/cli/chunks/{status-handler-ZLXES3QL.js → status-handler-MWVNDZSZ.js} +2 -2
  230. package/dist/cli/chunks/{structural-health-4PFCOQ7T.js → structural-health-2KZO43IF.js} +2 -2
  231. package/dist/cli/chunks/{sync-3DROIEZN.js → sync-C5BOK3WU.js} +2 -2
  232. package/dist/cli/chunks/{task-handler-4UGZ5VIE.js → task-handler-KRVSHJGJ.js} +2 -2
  233. package/dist/cli/chunks/{task-handlers-I5VVBTWI.js → task-handlers-CKOHD633.js} +2 -2
  234. package/dist/cli/chunks/{test-Z2MM7O5A.js → test-3B7FK6MJ.js} +4 -4
  235. package/dist/cli/chunks/{test-scheduling-AP76GKN5.js → test-scheduling-HZIMSTAX.js} +3 -3
  236. package/dist/cli/chunks/{token-bootstrap-P54N6PZV.js → token-bootstrap-JJCANIHJ.js} +2 -2
  237. package/dist/cli/chunks/{token-usage-AXAZTPA6.js → token-usage-5VCMBZU7.js} +2 -2
  238. package/dist/cli/chunks/{transformers-VOZ2Z7FS.js → transformers-ETUTMOTF.js} +2 -2
  239. package/dist/cli/chunks/{tree-sitter-wasm-parser-IYKLBTXB.js → tree-sitter-wasm-parser-TMR44BKP.js} +2 -2
  240. package/dist/cli/chunks/{types-TKDH5EBW.js → types-GYT6373C.js} +2 -2
  241. package/dist/cli/chunks/unified-memory-LIKELZVA.js +2 -0
  242. package/dist/cli/chunks/unified-memory-hnsw-VTN3MUB4.js +2 -0
  243. package/dist/cli/chunks/unified-persistence-MQVUY5WN.js +2 -0
  244. package/dist/cli/chunks/upgrade-534QLY7P.js +5 -0
  245. package/dist/cli/chunks/{validate-ZGF5FVZE.js → validate-UBVF3CSS.js} +2 -2
  246. package/dist/cli/chunks/{validate-swarm-OPWWUWYA.js → validate-swarm-2XD45EVM.js} +2 -2
  247. package/dist/cli/chunks/{vibium-HEQUGRKJ.js → vibium-NMT6AQ4S.js} +2 -2
  248. package/dist/cli/chunks/visual-security-HVJWGY7T.js +2 -0
  249. package/dist/cli/chunks/{web-tree-sitter-JZ7JCJJR.js → web-tree-sitter-RNG6NRDD.js} +2 -2
  250. package/dist/cli/chunks/{windsurf-installer-2SGRCS6C.js → windsurf-installer-RVCDSJT3.js} +2 -2
  251. package/dist/cli/chunks/witness-chain-5R322YYF.js +2 -0
  252. package/dist/cli/chunks/{witness-chain-LJUYOCB5.js → witness-chain-YDFB22MT.js} +2 -2
  253. package/dist/cli/chunks/{workflow-QORI3KO7.js → workflow-MHW4KHNK.js} +4 -4
  254. package/dist/cli/chunks/workflow-orchestrator-637BCZI4.js +2 -0
  255. package/dist/cli/chunks/{wrappers-3NR7LNB5.js → wrappers-SAZY3C2S.js} +2 -2
  256. package/dist/cli/commands/eval.js +86 -0
  257. package/dist/cli/commands/upgrade.d.ts +96 -0
  258. package/dist/cli/commands/upgrade.js +342 -0
  259. package/dist/cli/completions/index.d.ts +27 -0
  260. package/dist/cli/completions/index.js +112 -14
  261. package/dist/cli/handlers/brain-handler.d.ts +2 -0
  262. package/dist/cli/handlers/brain-handler.js +221 -1
  263. package/dist/cli/index.js +5 -1
  264. package/dist/init/browser-engine-installer.d.ts +60 -1
  265. package/dist/init/browser-engine-installer.js +73 -3
  266. package/dist/init/phases/09-assets.js +9 -2
  267. package/dist/integrations/ruvector/brain-diff.d.ts +93 -0
  268. package/dist/integrations/ruvector/brain-diff.js +281 -0
  269. package/dist/integrations/ruvector/brain-search.d.ts +78 -0
  270. package/dist/integrations/ruvector/brain-search.js +154 -0
  271. package/dist/mcp/bundle.js +1 -1
  272. package/dist/validation/command-eval-runner.d.ts +154 -0
  273. package/dist/validation/command-eval-runner.js +293 -0
  274. package/dist/validation/index.d.ts +2 -0
  275. package/dist/validation/index.js +4 -0
  276. package/package.json +1 -1
  277. package/dist/cli/chunks/adapter-W2EM7ZQ7.js +0 -2
  278. package/dist/cli/chunks/aqe-learning-engine-JQMPNHQU.js +0 -2
  279. package/dist/cli/chunks/base-EOPYE6JR.js +0 -2
  280. package/dist/cli/chunks/brain-handler-IAYJBAFL.js +0 -68
  281. package/dist/cli/chunks/browser-workflow-CSARLAJD.js +0 -2
  282. package/dist/cli/chunks/chunk-53KLVMAT.js +0 -18
  283. package/dist/cli/chunks/chunk-STYNOKOM.js +0 -2
  284. package/dist/cli/chunks/client-3GECKJWB.js +0 -2
  285. package/dist/cli/chunks/cross-domain-router-UYONX76U.js +0 -2
  286. package/dist/cli/chunks/dream-Z5QDQJSM.js +0 -2
  287. package/dist/cli/chunks/esm-node-FOI5Y3O2.js +0 -2
  288. package/dist/cli/chunks/eval-FM3BLVFO.js +0 -15
  289. package/dist/cli/chunks/hnsw-adapter-NOAQ76QF.js +0 -2
  290. package/dist/cli/chunks/hnsw-index-KDIZQRSB.js +0 -2
  291. package/dist/cli/chunks/impact-analyzer-VDXJBWFG.js +0 -2
  292. package/dist/cli/chunks/init-wizard-Q6DEACKX.js +0 -2
  293. package/dist/cli/chunks/kernel-YNQOGTM5.js +0 -2
  294. package/dist/cli/chunks/knowledge-graph-GOZG3YOM.js +0 -2
  295. package/dist/cli/chunks/load-test-UJLTMPXW.js +0 -2
  296. package/dist/cli/chunks/memory-backend-WJH6XER3.js +0 -2
  297. package/dist/cli/chunks/protocol-executor-LYYYHXAX.js +0 -2
  298. package/dist/cli/chunks/qe-reasoning-bank-JK4UKLYY.js +0 -2
  299. package/dist/cli/chunks/queen-coordinator-6OKLSCHV.js +0 -2
  300. package/dist/cli/chunks/router-DDZHCGUD.js +0 -2
  301. package/dist/cli/chunks/routing-feedback-BA66F37P.js +0 -2
  302. package/dist/cli/chunks/rvf-native-adapter-TXTRJNPW.js +0 -2
  303. package/dist/cli/chunks/safe-db-IFBVWIGF.js +0 -2
  304. package/dist/cli/chunks/schedule-WMZLOPCW.js +0 -2
  305. package/dist/cli/chunks/scheduler-WBORWJD5.js +0 -2
  306. package/dist/cli/chunks/shared-rvf-adapter-SQQ27EEI.js +0 -2
  307. package/dist/cli/chunks/sqlite-persistence-XH47B3BG.js +0 -2
  308. package/dist/cli/chunks/unified-memory-NHJHPLIC.js +0 -2
  309. package/dist/cli/chunks/unified-memory-hnsw-IMMCI2XK.js +0 -2
  310. package/dist/cli/chunks/unified-persistence-JS6CEV35.js +0 -2
  311. package/dist/cli/chunks/visual-security-XLO5JBVP.js +0 -2
  312. package/dist/cli/chunks/witness-chain-PPWPHYTY.js +0 -2
  313. package/dist/cli/chunks/workflow-orchestrator-H4DKRHVP.js +0 -2
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Command Eval Runner — shell-command-based eval suite execution.
3
+ *
4
+ * Sibling to {@link ParallelEvalRunner} (which evaluates LLM prompts against
5
+ * keyword-match patterns). This runner is for skills whose eval suite is a
6
+ * set of shell commands that produce JSON envelopes — e.g. qe-browser, whose
7
+ * five primitives (assert, batch, visual-diff, check-injection, intent-score)
8
+ * are Node scripts that exit 0/1 with structured stdout.
9
+ *
10
+ * Detection is by suite shape, not by an explicit type tag: if the first test
11
+ * case has `input.command`, we treat the suite as command-mode.
12
+ *
13
+ * Supported assertions per test case:
14
+ * - `exit_code`: strict equality against the process exit code
15
+ * - `json_fields`: a map of dotted JSONPath -> expected value, evaluated
16
+ * against parsed stdout JSON
17
+ * - `severity_at_least`: ordered comparison against
18
+ * `.output.checkInjection.severity` in the range
19
+ * `none < low < medium < high < critical`
20
+ * - `candidate_count_at_least`: numeric lower bound on
21
+ * `.output.intentScore.candidateCount`
22
+ *
23
+ * Setup steps in `input.setup[]` run sequentially before the main command;
24
+ * any non-zero setup exit short-circuits the test case as failed.
25
+ */
26
+ declare const SEVERITY_ORDER: readonly ["none", "low", "medium", "high", "critical"];
27
+ export type Severity = (typeof SEVERITY_ORDER)[number];
28
+ /**
29
+ * Return true iff `actual` is at or above `threshold` on the severity scale.
30
+ * Unknown severities return false (conservative — we never silently pass).
31
+ */
32
+ export declare function severityAtLeast(actual: unknown, threshold: Severity): boolean;
33
+ /**
34
+ * Evaluate a simple dotted JSONPath like `.output.assert.passed` against an
35
+ * already-parsed JSON value. Returns `undefined` if any segment is missing.
36
+ *
37
+ * We intentionally support only dotted paths (no `[idx]`, no filters) because
38
+ * that's the full surface area used by qe-browser's output schemas.
39
+ */
40
+ export declare function evalJsonPath(obj: unknown, jsonPath: string): unknown;
41
+ export type TestCasePriority = 'critical' | 'high' | 'medium' | 'low';
42
+ export interface CommandEvalExpected {
43
+ exit_code?: number;
44
+ /** Dotted JSONPath → expected JSON value (deep equality). */
45
+ json_fields?: Record<string, unknown>;
46
+ severity_at_least?: Severity;
47
+ candidate_count_at_least?: number;
48
+ }
49
+ export interface CommandEvalTestCase {
50
+ id: string;
51
+ description?: string;
52
+ category?: string;
53
+ priority?: TestCasePriority;
54
+ input: {
55
+ setup?: string[];
56
+ command: string;
57
+ };
58
+ expected: CommandEvalExpected;
59
+ }
60
+ export interface CommandEvalSuite {
61
+ skill: string;
62
+ version?: string;
63
+ status?: 'design-spec' | 'active' | 'deprecated';
64
+ description?: string;
65
+ test_cases: CommandEvalTestCase[];
66
+ validation?: {
67
+ required_pass_rate?: number;
68
+ critical_must_pass?: boolean;
69
+ };
70
+ }
71
+ export interface CommandEvalTestResult {
72
+ testId: string;
73
+ passed: boolean;
74
+ category?: string;
75
+ priority?: TestCasePriority;
76
+ exitCode: number | null;
77
+ stdoutSnippet: string;
78
+ stderrSnippet: string;
79
+ /** Assertion failures — empty when passed. */
80
+ failures: string[];
81
+ durationMs: number;
82
+ /** Set when a setup step failed before the main command ran. */
83
+ setupFailure?: string;
84
+ }
85
+ export interface CommandEvalResult {
86
+ skill: string;
87
+ passed: boolean;
88
+ totalTests: number;
89
+ passedTests: number;
90
+ failedTests: number;
91
+ passRate: number;
92
+ /** True iff every test with priority=critical passed. */
93
+ criticalPassed: boolean;
94
+ testResults: CommandEvalTestResult[];
95
+ totalDurationMs: number;
96
+ timestamp: Date;
97
+ }
98
+ /** Injectable runner so tests don't spawn real processes. */
99
+ export type CommandRunner = (cmd: string, options: {
100
+ timeoutMs: number;
101
+ cwd: string;
102
+ }) => {
103
+ status: number | null;
104
+ stdout: string;
105
+ stderr: string;
106
+ error?: Error;
107
+ };
108
+ /**
109
+ * A suite is command-eval mode when the first test case has `input.command`.
110
+ * We use this to dispatch from the shared `aqe eval` CLI without requiring a
111
+ * new explicit type tag in every existing LLM-style yaml.
112
+ */
113
+ export declare function isCommandEvalSuite(raw: unknown): raw is CommandEvalSuite;
114
+ /**
115
+ * Validate a single test-case result against its expected block.
116
+ * Returns the list of failures (empty == passed).
117
+ *
118
+ * Parses stdout as JSON only if at least one assertion needs it, so commands
119
+ * that only care about `exit_code` don't require JSON output.
120
+ */
121
+ export declare function validateCommandResult(tc: CommandEvalTestCase, exitCode: number | null, stdout: string): {
122
+ passed: boolean;
123
+ failures: string[];
124
+ };
125
+ export interface CommandEvalRunnerOptions {
126
+ /** Directory containing skill directories (default: `.claude/skills`). */
127
+ skillsDir?: string;
128
+ /** Per-command timeout in milliseconds (default: 60s). */
129
+ timeoutMs?: number;
130
+ /** Working directory for commands (default: `process.cwd()`). */
131
+ cwd?: string;
132
+ /** Injected runner for tests. */
133
+ runner?: CommandRunner;
134
+ }
135
+ export declare class CommandEvalRunner {
136
+ private readonly skillsDir;
137
+ private readonly timeoutMs;
138
+ private readonly cwd;
139
+ private readonly runner;
140
+ constructor(options?: CommandEvalRunnerOptions);
141
+ /**
142
+ * Load `${skill}/evals/${skill}.yaml` and return it iff it's a command-mode
143
+ * suite. Returns null if missing, unparseable, or not command-mode.
144
+ */
145
+ loadSuite(skill: string): CommandEvalSuite | null;
146
+ run(skill: string): Promise<CommandEvalResult>;
147
+ private executeCase;
148
+ }
149
+ /**
150
+ * Convenience factory.
151
+ */
152
+ export declare function createCommandEvalRunner(options?: CommandEvalRunnerOptions): CommandEvalRunner;
153
+ export {};
154
+ //# sourceMappingURL=command-eval-runner.d.ts.map
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Command Eval Runner — shell-command-based eval suite execution.
3
+ *
4
+ * Sibling to {@link ParallelEvalRunner} (which evaluates LLM prompts against
5
+ * keyword-match patterns). This runner is for skills whose eval suite is a
6
+ * set of shell commands that produce JSON envelopes — e.g. qe-browser, whose
7
+ * five primitives (assert, batch, visual-diff, check-injection, intent-score)
8
+ * are Node scripts that exit 0/1 with structured stdout.
9
+ *
10
+ * Detection is by suite shape, not by an explicit type tag: if the first test
11
+ * case has `input.command`, we treat the suite as command-mode.
12
+ *
13
+ * Supported assertions per test case:
14
+ * - `exit_code`: strict equality against the process exit code
15
+ * - `json_fields`: a map of dotted JSONPath -> expected value, evaluated
16
+ * against parsed stdout JSON
17
+ * - `severity_at_least`: ordered comparison against
18
+ * `.output.checkInjection.severity` in the range
19
+ * `none < low < medium < high < critical`
20
+ * - `candidate_count_at_least`: numeric lower bound on
21
+ * `.output.intentScore.candidateCount`
22
+ *
23
+ * Setup steps in `input.setup[]` run sequentially before the main command;
24
+ * any non-zero setup exit short-circuits the test case as failed.
25
+ */
26
+ import * as fs from 'node:fs';
27
+ import * as path from 'node:path';
28
+ import * as yaml from 'yaml';
29
+ import { spawnSync as realSpawnSync } from 'node:child_process';
30
+ import { toErrorMessage } from '../shared/error-utils.js';
31
+ // ============================================================================
32
+ // Severity ordering
33
+ // ============================================================================
34
+ const SEVERITY_ORDER = ['none', 'low', 'medium', 'high', 'critical'];
35
+ /**
36
+ * Return true iff `actual` is at or above `threshold` on the severity scale.
37
+ * Unknown severities return false (conservative — we never silently pass).
38
+ */
39
+ export function severityAtLeast(actual, threshold) {
40
+ if (typeof actual !== 'string')
41
+ return false;
42
+ const a = SEVERITY_ORDER.indexOf(actual);
43
+ const t = SEVERITY_ORDER.indexOf(threshold);
44
+ return a >= 0 && t >= 0 && a >= t;
45
+ }
46
+ // ============================================================================
47
+ // JSON path evaluation
48
+ // ============================================================================
49
+ /**
50
+ * Evaluate a simple dotted JSONPath like `.output.assert.passed` against an
51
+ * already-parsed JSON value. Returns `undefined` if any segment is missing.
52
+ *
53
+ * We intentionally support only dotted paths (no `[idx]`, no filters) because
54
+ * that's the full surface area used by qe-browser's output schemas.
55
+ */
56
+ export function evalJsonPath(obj, jsonPath) {
57
+ if (typeof jsonPath !== 'string' || !jsonPath.startsWith('.'))
58
+ return undefined;
59
+ const parts = jsonPath === '.' ? [] : jsonPath.slice(1).split('.');
60
+ let cur = obj;
61
+ for (const part of parts) {
62
+ if (cur == null || typeof cur !== 'object')
63
+ return undefined;
64
+ cur = cur[part];
65
+ }
66
+ return cur;
67
+ }
68
+ const defaultCommandRunner = (cmd, opts) => {
69
+ const result = realSpawnSync('bash', ['-c', cmd], {
70
+ timeout: opts.timeoutMs,
71
+ cwd: opts.cwd,
72
+ encoding: 'utf8',
73
+ maxBuffer: 16 * 1024 * 1024,
74
+ });
75
+ return {
76
+ status: result.status,
77
+ stdout: typeof result.stdout === 'string' ? result.stdout : '',
78
+ stderr: typeof result.stderr === 'string' ? result.stderr : '',
79
+ error: result.error,
80
+ };
81
+ };
82
+ // ============================================================================
83
+ // Suite detection
84
+ // ============================================================================
85
+ /**
86
+ * A suite is command-eval mode when the first test case has `input.command`.
87
+ * We use this to dispatch from the shared `aqe eval` CLI without requiring a
88
+ * new explicit type tag in every existing LLM-style yaml.
89
+ */
90
+ export function isCommandEvalSuite(raw) {
91
+ if (!raw || typeof raw !== 'object')
92
+ return false;
93
+ const obj = raw;
94
+ if (!Array.isArray(obj.test_cases) || obj.test_cases.length === 0)
95
+ return false;
96
+ const first = obj.test_cases[0];
97
+ return typeof first?.input?.command === 'string';
98
+ }
99
+ // ============================================================================
100
+ // Result validation
101
+ // ============================================================================
102
+ /**
103
+ * Validate a single test-case result against its expected block.
104
+ * Returns the list of failures (empty == passed).
105
+ *
106
+ * Parses stdout as JSON only if at least one assertion needs it, so commands
107
+ * that only care about `exit_code` don't require JSON output.
108
+ */
109
+ export function validateCommandResult(tc, exitCode, stdout) {
110
+ const failures = [];
111
+ const expected = tc.expected || {};
112
+ if (expected.exit_code !== undefined && exitCode !== expected.exit_code) {
113
+ failures.push(`exit_code: expected ${expected.exit_code}, got ${exitCode}`);
114
+ }
115
+ const needsJson = !!expected.json_fields ||
116
+ expected.severity_at_least !== undefined ||
117
+ expected.candidate_count_at_least !== undefined;
118
+ let parsed = null;
119
+ if (needsJson) {
120
+ try {
121
+ parsed = JSON.parse(stdout);
122
+ }
123
+ catch (e) {
124
+ failures.push(`stdout is not valid JSON: ${toErrorMessage(e)}`);
125
+ return { passed: false, failures };
126
+ }
127
+ }
128
+ if (expected.json_fields) {
129
+ for (const [jsonPath, want] of Object.entries(expected.json_fields)) {
130
+ const got = evalJsonPath(parsed, jsonPath);
131
+ if (!deepEqual(got, want)) {
132
+ failures.push(`json_fields ${jsonPath}: expected ${JSON.stringify(want)}, got ${JSON.stringify(got)}`);
133
+ }
134
+ }
135
+ }
136
+ if (expected.severity_at_least !== undefined) {
137
+ const sev = evalJsonPath(parsed, '.output.checkInjection.severity');
138
+ if (!severityAtLeast(sev, expected.severity_at_least)) {
139
+ failures.push(`severity_at_least: expected >= ${expected.severity_at_least}, got ${JSON.stringify(sev)}`);
140
+ }
141
+ }
142
+ if (expected.candidate_count_at_least !== undefined) {
143
+ const count = evalJsonPath(parsed, '.output.intentScore.candidateCount');
144
+ const countNum = typeof count === 'number' ? count : Number.NaN;
145
+ if (!(countNum >= expected.candidate_count_at_least)) {
146
+ failures.push(`candidate_count_at_least: expected >= ${expected.candidate_count_at_least}, got ${JSON.stringify(count)}`);
147
+ }
148
+ }
149
+ return { passed: failures.length === 0, failures };
150
+ }
151
+ /**
152
+ * Strict structural equality for JSON values — used to compare
153
+ * `json_fields` expected values against extracted paths. Avoids the pitfalls
154
+ * of `JSON.stringify` comparison (e.g. key order variance on objects) by
155
+ * walking both sides.
156
+ */
157
+ function deepEqual(a, b) {
158
+ if (a === b)
159
+ return true;
160
+ if (a == null || b == null)
161
+ return a === b;
162
+ if (typeof a !== typeof b)
163
+ return false;
164
+ if (Array.isArray(a)) {
165
+ if (!Array.isArray(b) || a.length !== b.length)
166
+ return false;
167
+ return a.every((v, i) => deepEqual(v, b[i]));
168
+ }
169
+ if (typeof a === 'object') {
170
+ if (typeof b !== 'object' || Array.isArray(b))
171
+ return false;
172
+ const ao = a;
173
+ const bo = b;
174
+ const ak = Object.keys(ao);
175
+ const bk = Object.keys(bo);
176
+ if (ak.length !== bk.length)
177
+ return false;
178
+ return ak.every((k) => deepEqual(ao[k], bo[k]));
179
+ }
180
+ return false;
181
+ }
182
+ export class CommandEvalRunner {
183
+ skillsDir;
184
+ timeoutMs;
185
+ cwd;
186
+ runner;
187
+ constructor(options = {}) {
188
+ this.skillsDir = options.skillsDir ?? '.claude/skills';
189
+ this.timeoutMs = options.timeoutMs ?? 60_000;
190
+ this.cwd = options.cwd ?? process.cwd();
191
+ this.runner = options.runner ?? defaultCommandRunner;
192
+ }
193
+ /**
194
+ * Load `${skill}/evals/${skill}.yaml` and return it iff it's a command-mode
195
+ * suite. Returns null if missing, unparseable, or not command-mode.
196
+ */
197
+ loadSuite(skill) {
198
+ const baseDir = path.isAbsolute(this.skillsDir)
199
+ ? this.skillsDir
200
+ : path.join(this.cwd, this.skillsDir);
201
+ const evalPath = path.join(baseDir, skill, 'evals', `${skill}.yaml`);
202
+ if (!fs.existsSync(evalPath))
203
+ return null;
204
+ try {
205
+ const raw = yaml.parse(fs.readFileSync(evalPath, 'utf-8'));
206
+ if (!isCommandEvalSuite(raw))
207
+ return null;
208
+ return raw;
209
+ }
210
+ catch {
211
+ return null;
212
+ }
213
+ }
214
+ async run(skill) {
215
+ const start = Date.now();
216
+ const suite = this.loadSuite(skill);
217
+ if (!suite) {
218
+ throw new Error(`Command-eval suite not found or not command-mode at ${this.skillsDir}/${skill}/evals/${skill}.yaml`);
219
+ }
220
+ const results = [];
221
+ // Sequential by design: setup steps (e.g. `vibium go <url>`) mutate
222
+ // shared browser state, so interleaving test cases would be racy.
223
+ for (const tc of suite.test_cases) {
224
+ results.push(this.executeCase(tc));
225
+ }
226
+ const passedTests = results.filter((r) => r.passed).length;
227
+ const failedTests = results.length - passedTests;
228
+ const passRate = results.length > 0 ? passedTests / results.length : 0;
229
+ const requiredPassRate = suite.validation?.required_pass_rate ?? 0.9;
230
+ const criticalMustPass = suite.validation?.critical_must_pass ?? true;
231
+ const criticalResults = results.filter((r) => r.priority === 'critical');
232
+ const criticalPassed = criticalResults.every((r) => r.passed);
233
+ const passed = passRate >= requiredPassRate && (!criticalMustPass || criticalPassed);
234
+ return {
235
+ skill,
236
+ passed,
237
+ totalTests: results.length,
238
+ passedTests,
239
+ failedTests,
240
+ passRate,
241
+ criticalPassed,
242
+ testResults: results,
243
+ totalDurationMs: Date.now() - start,
244
+ timestamp: new Date(),
245
+ };
246
+ }
247
+ executeCase(tc) {
248
+ const start = Date.now();
249
+ const setup = tc.input?.setup ?? [];
250
+ for (const step of setup) {
251
+ const r = this.runner(step, { timeoutMs: this.timeoutMs, cwd: this.cwd });
252
+ if (r.status !== 0) {
253
+ return {
254
+ testId: tc.id,
255
+ passed: false,
256
+ category: tc.category,
257
+ priority: tc.priority,
258
+ exitCode: r.status,
259
+ stdoutSnippet: truncate(r.stdout),
260
+ stderrSnippet: truncate(r.stderr),
261
+ failures: [],
262
+ setupFailure: `setup step failed (exit ${r.status}): ${step}`,
263
+ durationMs: Date.now() - start,
264
+ };
265
+ }
266
+ }
267
+ const r = this.runner(tc.input.command, { timeoutMs: this.timeoutMs, cwd: this.cwd });
268
+ const v = validateCommandResult(tc, r.status, r.stdout);
269
+ return {
270
+ testId: tc.id,
271
+ passed: v.passed,
272
+ category: tc.category,
273
+ priority: tc.priority,
274
+ exitCode: r.status,
275
+ stdoutSnippet: truncate(r.stdout),
276
+ stderrSnippet: truncate(r.stderr),
277
+ failures: v.failures,
278
+ durationMs: Date.now() - start,
279
+ };
280
+ }
281
+ }
282
+ function truncate(s, max = 500) {
283
+ if (s.length <= max)
284
+ return s;
285
+ return `${s.slice(0, max)}…[truncated ${s.length - max}b]`;
286
+ }
287
+ /**
288
+ * Convenience factory.
289
+ */
290
+ export function createCommandEvalRunner(options = {}) {
291
+ return new CommandEvalRunner(options);
292
+ }
293
+ //# sourceMappingURL=command-eval-runner.js.map
@@ -14,6 +14,8 @@ export { SwarmSkillValidator, createSwarmSkillValidator, DEFAULT_SWARM_VALIDATIO
14
14
  export type { SwarmValidationConfig, SwarmTopology, SwarmValidationResult, SwarmValidationSummary, SkillValidatorFn, } from './swarm-skill-validator.js';
15
15
  export { ParallelEvalRunner, createParallelEvalRunner, DEFAULT_PARALLEL_EVAL_CONFIG, MockLLMExecutor, } from './parallel-eval-runner.js';
16
16
  export type { ParallelEvalConfig, EvalTestCase, EvalTestCaseInput, EvalTestCaseExpectedOutput, EvalTestCaseValidation, EvalSuite, TestCaseTask, ParallelEvalResult, WorkerMessage, WorkerProgress, EvalProgress, LLMExecutor, } from './parallel-eval-runner.js';
17
+ export { CommandEvalRunner, createCommandEvalRunner, evalJsonPath, severityAtLeast, isCommandEvalSuite, validateCommandResult, } from './command-eval-runner.js';
18
+ export type { CommandEvalSuite, CommandEvalTestCase, CommandEvalExpected, CommandEvalResult, CommandEvalTestResult, CommandEvalRunnerOptions, CommandRunner, Severity, TestCasePriority, } from './command-eval-runner.js';
17
19
  export { ValidationResultAggregator, createValidationResultAggregator, } from './validation-result-aggregator.js';
18
20
  export type { AggregatedValidationReport, AggregatorConfig, CrossModelReport, IssueSeverity, ModelAnomaly, ParallelValidationRunResult, RegressionReport, SkillValidationSummary, ValidationIssue, } from './validation-result-aggregator.js';
19
21
  export { TriggerOptimizer, createTriggerOptimizer, parseSkillFrontmatter, } from './trigger-optimizer.js';
@@ -25,6 +25,10 @@ P0_SKILLS, DEFAULT_VALIDATION_MODELS, } from './swarm-skill-validator.js';
25
25
  // ============================================================================
26
26
  export { ParallelEvalRunner, createParallelEvalRunner, DEFAULT_PARALLEL_EVAL_CONFIG, MockLLMExecutor, } from './parallel-eval-runner.js';
27
27
  // ============================================================================
28
+ // Command Eval Runner (ADR-091: qe-browser and other shell-based skills)
29
+ // ============================================================================
30
+ export { CommandEvalRunner, createCommandEvalRunner, evalJsonPath, severityAtLeast, isCommandEvalSuite, validateCommandResult, } from './command-eval-runner.js';
31
+ // ============================================================================
28
32
  // Validation Result Aggregator (ADR-056 Phase 5)
29
33
  // ============================================================================
30
34
  export { ValidationResultAggregator, createValidationResultAggregator, } from './validation-result-aggregator.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-qe",
3
- "version": "3.9.14",
3
+ "version": "3.9.16",
4
4
  "description": "Agentic Quality Engineering V3 - Domain-Driven Design Architecture with 13 Bounded Contexts, O(log n) coverage analysis, ReasoningBank learning, 60 specialized QE agents, mathematical Coherence verification, deep Claude Flow integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.14");process.exit(0)}
2
- import{a,b,c}from"./chunk-5U6M4XCP.js";import"./chunk-AEQMQVDJ.js";import"./chunk-QUK34CSU.js";import"./chunk-DMZ2XOEW.js";import"./chunk-UIYK4Y7K.js";import"./chunk-DGUAAG3T.js";export{a as AgentBoosterAdapter,b as createAgentBoosterAdapter,c as createAgentBoosterAdapterSync};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.14");process.exit(0)}
2
- import{a,b,c,d,e,f}from"./chunk-JOGKQTCU.js";import"./chunk-7732TLNA.js";import"./chunk-3PZ2QLLR.js";import"./chunk-NWZYULZE.js";import"./chunk-KJB6JJXT.js";import"./chunk-S2KGZJHS.js";import"./chunk-NWGIQCCO.js";import"./chunk-UAAJ3BSW.js";import"./chunk-ZCRLZINE.js";import"./chunk-TJOZPPZR.js";import"./chunk-4EQWK6P6.js";import"./chunk-Y3X5OS5F.js";import"./chunk-WSZVSDD5.js";import"./chunk-ZFZX2NA3.js";import"./chunk-UUVTLYUK.js";import"./chunk-STYNOKOM.js";import"./chunk-GUEK5DOK.js";import"./chunk-DMZ2XOEW.js";import"./chunk-PZF5ISGS.js";import"./chunk-UIYK4Y7K.js";import"./chunk-G7L5Y47C.js";import"./chunk-LWHM5BWD.js";import"./chunk-J3XLOHWB.js";import"./chunk-JN7MSUGK.js";import"./chunk-JNLKLC7G.js";import"./chunk-WE7KIXR6.js";import"./chunk-XNXOW7BQ.js";import"./chunk-JLBUS4PR.js";import"./chunk-DJLRRCR6.js";import"./chunk-5HUAD4UU.js";import"./chunk-DGUAAG3T.js";export{b as AQELearningEngine,a as DEFAULT_ENGINE_CONFIG,c as DEFAULT_META_LEARNING_CONFIG,d as MetaLearningEngine,e as createAQELearningEngine,f as createDefaultLearningEngine};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.14");process.exit(0)}
2
- import{a,b,c,d,e,f}from"./chunk-BNPJMPM3.js";import"./chunk-VQB5SLXZ.js";import"./chunk-ZFZX2NA3.js";import"./chunk-UUVTLYUK.js";import"./chunk-STYNOKOM.js";import"./chunk-GUEK5DOK.js";import"./chunk-DMZ2XOEW.js";import"./chunk-UIYK4Y7K.js";import"./chunk-G7L5Y47C.js";import"./chunk-LWHM5BWD.js";import"./chunk-J3XLOHWB.js";import"./chunk-JN7MSUGK.js";import"./chunk-JNLKLC7G.js";import"./chunk-WE7KIXR6.js";import"./chunk-XNXOW7BQ.js";import"./chunk-JLBUS4PR.js";import"./chunk-DJLRRCR6.js";import"./chunk-5HUAD4UU.js";import"./chunk-DGUAAG3T.js";export{f as MCPToolBase,e as defaultToolLogger,d as getMemoryBackend,b as getSharedMemoryBackend,a as registerRvfResetFn,c as resetSharedMemoryBackend};
@@ -1,68 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.14");process.exit(0)}
2
- import{a as $,b as M,c as L,d as v,e as H,f as k,g as F,h as _,i as P,j as G,k as V,l as ce,m as q,n as Q,o as de,p as Y,q as j,r as W,s as U}from"./chunk-G2KQUEGY.js";import{h as ae}from"./chunk-4EQWK6P6.js";import{a as se,b as ie,c as le,d as O,f as Ne}from"./chunk-Y3X5OS5F.js";import"./chunk-ZFZX2NA3.js";import"./chunk-UUVTLYUK.js";import"./chunk-STYNOKOM.js";import"./chunk-GUEK5DOK.js";import{b as N,d as Be}from"./chunk-DMZ2XOEW.js";import"./chunk-UIYK4Y7K.js";import{a as S,b as Ie}from"./chunk-LWHM5BWD.js";import"./chunk-J3XLOHWB.js";import"./chunk-JN7MSUGK.js";import"./chunk-JNLKLC7G.js";import"./chunk-WE7KIXR6.js";import"./chunk-XNXOW7BQ.js";import"./chunk-JLBUS4PR.js";import"./chunk-DJLRRCR6.js";import"./chunk-5HUAD4UU.js";import"./chunk-DGUAAG3T.js";import T from"path";import r from"chalk";Ie();Be();import{existsSync as z,mkdirSync as Oe,writeFileSync as ke,readFileSync as X}from"fs";import{join as E,resolve as Z}from"path";var qe={rl_q_values:"includeQValues",dream_insights:"includeDreamInsights",dream_cycles:"includeDreamInsights",witness_chain:"includeWitnessChain",vectors:"includeVectors"};function Te(n,t){let o=qe[n.tableName];return!(o&&t[o]===!1)}var Ae=1e4;function De(n,t,o,e){if(!Te(t,o))return Q(E(e,t.fileName),[]),{count:0,rows:[]};let[s,i]=t.domainColumn?q(o.domains,t.domainColumn):[void 0,[]];if(G(n,t.tableName,s,i)>=Ae){let d=t.blobColumns,f=d&&d.length>0?p=>k(p,d):void 0;return{count:de(E(e,t.fileName),ce(n,t.tableName,s,i),f)}}let a=V(n,t.tableName,s,i);return t.blobColumns&&t.blobColumns.length>0&&(a=a.map(d=>k(d,t.blobColumns))),Q(E(e,t.fileName),a),{count:a.length,rows:a}}function me(n){let t=[];for(let o of v){let e=E(n,o.fileName);z(e)?t.push(_(X(e,"utf-8"))):t.push(_(""))}return _(t.join(":"))}function fe(n,t,o="memory.db"){let e=Z(t.outputPath);z(e)||Oe(e,{recursive:!0});let s=0,i={},c=new Set;for(let u of v){let p=De(n,u,t,e);if(i[u.tableName]=p.count,s+=p.count,u.tableName==="qe_patterns"){if(p.rows)for(let l of p.rows)l.qe_domain&&c.add(l.qe_domain);else if(p.count>0){let[l,h]=u.domainColumn?q(t.domains,u.domainColumn):[void 0,[]],b=`SELECT DISTINCT qe_domain FROM qe_patterns ${l?`WHERE ${l} AND qe_domain IS NOT NULL`:"WHERE qe_domain IS NOT NULL"}`;try{let y=n.prepare(b).all(...h||[]);for(let R of y)c.add(R.qe_domain)}catch{}}}}let a=t.includeVectors!==!1?G(n,"vectors"):0,d=me(e),f={version:"3.0",exportedAt:new Date().toISOString(),sourceDb:o,stats:{patternCount:i.qe_patterns||0,vectorCount:a,qValueCount:i.rl_q_values||0,dreamInsightCount:i.dream_insights||0,witnessChainLength:i.witness_chain||0,totalRecords:s},domains:[...c].sort(),checksum:d,tableRecordCounts:i};return ke(E(e,"manifest.json"),JSON.stringify(f,null,2),"utf-8"),f}var $e=new Set(["qe_patterns","rl_q_values","dream_insights","witness_chain"]);function Me(n){return n==="1.0"?v.filter(t=>$e.has(t.tableName)):n==="3.0"?v:(console.warn(`[brain-import] Unknown manifest version '${n}'. Attempting full import \u2014 some files may be missing.`),v)}function ue(n,t,o){let e=Z(t),s=E(e,"manifest.json");if(!z(s))throw new Error(`Manifest not found at ${s}`);let i=N(X(s,"utf-8")),c=me(e);if(c!==i.checksum)throw new Error(`Checksum mismatch: expected ${i.checksum}, got ${c}. The export may have been tampered with or corrupted.`);let a=Me(i.version);if(o.dryRun){let l=0;for(let h of a){let m=Y(E(e,h.fileName),N);l+=m.length}return{imported:l,skipped:0,conflicts:0}}U(n);let d=0,f=0,u=0;return n.transaction(()=>{for(let l of a){let h=E(e,l.fileName),m=Y(h,N);l.blobColumns&&l.blobColumns.length>0&&(m=m.map(b=>F(b,l.blobColumns)));for(let b of m){let y;if(l.dedupColumns&&l.dedupColumns.length>0)y=W(n,l.tableName,b,l.dedupColumns);else{let R=$[l.tableName]||"id",C=L[l.tableName],x=M[l.tableName];y=j(n,l.tableName,b,R,o.mergeStrategy,C,x)}d+=y.imported,f+=y.skipped,u+=y.conflicts}}})(),{imported:d,skipped:f,conflicts:u}}function pe(n){let t=Z(n),o=E(t,"manifest.json");if(!z(o))throw new Error(`Manifest not found at ${o}`);return N(X(o,"utf-8"))}Ne();import{existsSync as K,statSync as Le,unlinkSync as ge,writeFileSync as Fe}from"fs";import{resolve as ee}from"path";function be(n,t,o="memory.db"){if(!O())throw new Error("@ruvector/rvf-node is not available. Install it or use --format jsonl instead.");let e=ee(t.outputPath),s=t.dimension??384;K(e)&&ge(e);let i=`${e}.idmap.json`;K(i)&&ge(i);let c=se(e,s);try{let a={},d=new Set,f=0;for(let w of v){let[g,oe]=w.domainColumn?q(t.domains,w.domainColumn):[void 0,[]],B=V(n,w.tableName,g,oe);if(w.tableName==="qe_patterns")for(let D of B)D.qe_domain&&d.add(D.qe_domain);let J=H[w.tableName];J&&J.length>0&&(B=B.map(D=>k(D,J))),a[w.tableName]=B,f+=B.length}let u=0,p=[];if(P(n,"qe_pattern_embeddings")){let w=n.prepare("SELECT pattern_id, embedding, dimension FROM qe_pattern_embeddings").all();for(let g of w)g.embedding&&g.dimension===s&&p.push({id:`pe:${g.pattern_id}`,vector:new Float32Array(g.embedding.buffer,g.embedding.byteOffset,s),metadata:{tableName:"qe_pattern_embeddings"}})}if(P(n,"captured_experiences")){let w=n.prepare("SELECT id, embedding, embedding_dimension, domain, quality FROM captured_experiences WHERE embedding IS NOT NULL").all();for(let g of w)g.embedding_dimension===s&&p.push({id:`exp:${g.id}`,vector:new Float32Array(g.embedding.buffer,g.embedding.byteOffset,s),metadata:{tableName:"captured_experiences",domain:g.domain,confidence:g.quality}})}if(P(n,"sona_patterns")){let w=n.prepare("SELECT id, state_embedding, domain, confidence FROM sona_patterns WHERE state_embedding IS NOT NULL").all();for(let g of w)g.state_embedding.byteLength/4===s&&p.push({id:`sona:${g.id}`,vector:new Float32Array(g.state_embedding.buffer,g.state_embedding.byteOffset,s),metadata:{tableName:"sona_patterns",domain:g.domain,confidence:g.confidence}})}p.length>0&&(u=c.ingest(p).accepted);let l={version:"3.0",format:"rvf",exportedAt:new Date().toISOString(),sourceDb:o,domains:[...d].sort(),tables:a},h=JSON.stringify(l),m=_(h),b=Buffer.from(h);c.embedKernel(b);let y=t.sign?c.sign(b)??void 0:void 0,R=y?t.signerKeyId??"default":void 0,C=c.fileId(),x=C?{fileId:C,parentId:c.parentId(),lineageDepth:c.lineageDepth()}:void 0,I=c.status(),A={version:"3.0",format:"rvf",exportedAt:l.exportedAt,sourceDb:o,stats:{patternCount:(a.qe_patterns||[]).length,embeddingCount:u,qValueCount:(a.rl_q_values||[]).length,dreamInsightCount:(a.dream_insights||[]).length,witnessChainLength:(a.witness_chain||[]).length,totalRecords:f},domains:l.domains,checksum:m,rvfStatus:{totalVectors:I.totalVectors,totalSegments:I.totalSegments,fileSizeBytes:I.fileSizeBytes},...y?{signature:y,signerKeyId:R}:{},...x?{lineage:x}:{}};if(y)try{c.freeze()}catch{}let Se=`${e}.manifest.json`;return Fe(Se,JSON.stringify(A,null,2),"utf-8"),A}finally{c.close()}}var Pe={patterns:"qe_patterns",qValues:"rl_q_values",dreamInsights:"dream_insights",witnessChain:"witness_chain"};function ye(n,t,o){if(!O())throw new Error("@ruvector/rvf-node is not available. Install it or use JSONL format.");let e=ee(t);if(!K(e))throw new Error(`RVF file not found: ${e}`);let s=ie(e);try{let i=s.verifyWitness();if(!i.valid&&(i.totalEntries>0||i.errors.length>0)){let m=i.errors.length>0?i.errors.join("; "):"unknown integrity error";throw new Error(`RVF witness verification failed: ${m}`)}let c=s.extractKernel();if(!c||!c.image)throw new Error("No brain data found in RVF file (missing kernel segment)");let a;try{a=JSON.parse(c.image.toString("utf-8"))}catch(m){throw new Error(`Failed to parse brain kernel data as JSON: ${m instanceof Error?m.message:m}`)}if(o.dryRun){let m=0;if(a.tables)for(let b of Object.values(a.tables))m+=b?.length??0;else m=(a.patterns?.length??0)+(a.qValues?.length??0)+(a.dreamInsights?.length??0)+(a.witnessChain?.length??0);return{imported:m,skipped:0,conflicts:0,embeddingsRestored:0}}U(n);let d=0,f=0,u=0,p=0,l={};if(a.tables)Object.assign(l,a.tables);else for(let[m,b]of Object.entries(Pe)){let y=a[m];Array.isArray(y)&&(l[b]=y)}if(n.transaction(()=>{for(let m of v){let b=l[m.tableName];if(!b||!Array.isArray(b))continue;let y=H[m.tableName];if(y&&y.length>0){b=b.map(R=>F(R,y));for(let R of b)for(let C of y)R[C]instanceof Buffer&&p++}for(let R of b){let C;if(m.dedupColumns&&m.dedupColumns.length>0)C=W(n,m.tableName,R,m.dedupColumns);else{let x=$[m.tableName]||"id",I=L[m.tableName],A=M[m.tableName];C=j(n,m.tableName,R,x,o.mergeStrategy,I,A)}d+=C.imported,f+=C.skipped,u+=C.conflicts}}})(),u>0)try{s.compact()}catch{}return{imported:d,skipped:f,conflicts:u,embeddingsRestored:p}}finally{s.close()}}function he(n){if(!O())throw new Error("@ruvector/rvf-node is not available.");let t=ee(n);if(!K(t))throw new Error(`RVF file not found: ${t}`);let o=le(t);try{let e=o.extractKernel();if(!e||!e.image)throw new Error("No brain data found in RVF file");let s=e.image.toString("utf-8"),i;try{i=JSON.parse(s)}catch(h){throw new Error(`Failed to parse brain kernel data as JSON: ${h instanceof Error?h.message:h}`)}let c=o.status(),a=Le(t).size,d=i.tables,f=d?d.qe_patterns?.length??0:i.patterns?.length??0,u=d?d.rl_q_values?.length??0:i.qValues?.length??0,p=d?d.dream_insights?.length??0:i.dreamInsights?.length??0,l=d?d.witness_chain?.length??0:i.witnessChain?.length??0;return{version:"3.0",format:"rvf",exportedAt:i.exportedAt??"unknown",sourceDb:i.sourceDb??"unknown",stats:{patternCount:f,embeddingCount:c.totalVectors,qValueCount:u,dreamInsightCount:p,witnessChainLength:l},domains:i.domains??[],checksum:_(s),rvfStatus:{totalVectors:c.totalVectors,totalSegments:c.totalSegments,fileSizeBytes:a}}}finally{o.close()}}function te(){return O()}function we(n,t){if(!n.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='qe_patterns'").get())return{created:0,skipped:0};n.exec(`
3
- CREATE TEMP TABLE IF NOT EXISTS _covered_patterns (
4
- pattern_id TEXT PRIMARY KEY
5
- )
6
- `),n.exec("DELETE FROM _covered_patterns"),n.exec(`
7
- INSERT INTO _covered_patterns (pattern_id)
8
- SELECT DISTINCT json_extract(action_data, '$.patternId')
9
- FROM witness_chain
10
- WHERE action_type = 'PATTERN_CREATE'
11
- AND json_extract(action_data, '$.patternId') IS NOT NULL
12
- `),n.exec(`
13
- INSERT OR IGNORE INTO _covered_patterns (pattern_id)
14
- SELECT DISTINCT json_extract(action_data, '$.pattern_id')
15
- FROM witness_chain
16
- WHERE action_type = 'PATTERN_CREATE'
17
- AND json_extract(action_data, '$.pattern_id') IS NOT NULL
18
- `);let e=n.prepare(`SELECT p.id, p.pattern_type, p.qe_domain, p.name, p.created_at
19
- FROM qe_patterns p
20
- LEFT JOIN _covered_patterns c ON p.id = c.pattern_id
21
- WHERE c.pattern_id IS NULL
22
- ORDER BY p.created_at ASC`).all(),i=n.prepare("SELECT COUNT(*) as count FROM qe_patterns").get().count-e.length,c=0;for(let a of e)t.append("PATTERN_CREATE",{patternId:a.id,patternType:a.pattern_type,qeDomain:a.qe_domain,name:a.name,originalCreatedAt:a.created_at,backfilled:!0},"system:backfill"),c++;return n.exec("DROP TABLE IF EXISTS _covered_patterns"),{created:c,skipped:i}}async function Re(n,t){if(Ve(t.format)==="rvf"){let s=S(n,{readonly:!0});try{return be(s,{outputPath:t.outputPath,domains:t.domains},n)}finally{s.close()}}let e=S(n,{readonly:!0});try{return fe(e,t,n)}finally{e.close()}}async function Ce(n,t,o){if(_e(t,o.format)==="rvf"){let i=S(n);try{return ye(i,t,{mergeStrategy:o.mergeStrategy,dryRun:o.dryRun})}finally{i.close()}}let s=S(n);try{return ue(s,t,o)}finally{s.close()}}async function ve(n,t){return _e(n,t)==="rvf"?he(n):pe(n)}async function Ee(n){let t=S(n);try{let o=ae(t);return await o.initialize(),we(t,o)}finally{t.close()}}function Ve(n){if(n==="jsonl")return"jsonl";if(n==="rvf"){if(!te())throw new Error("RVF format requested but @ruvector/rvf-node is not available on this platform. Use --format jsonl instead.");return"rvf"}return te()?"rvf":"jsonl"}function _e(n,t){return t==="rvf"?"rvf":t==="jsonl"?"jsonl":n.endsWith(".rvf")?"rvf":"jsonl"}var re=class{name="brain";description="Export, import, and inspect QE brain state";cleanupAndExit;ensureInitialized;constructor(t,o){this.cleanupAndExit=t,this.ensureInitialized=o}register(t,o){let e=t.command("brain").description(this.description);e.command("export").description("Export brain state to a portable directory").requiredOption("-o, --output <path>","Output directory path").option("--format <format>","Export format: rvf (default) or jsonl","rvf").option("--db <path>","Source database path").action(async s=>{await this.executeExport(s)}),e.command("import").description("Import brain state from an export directory").requiredOption("-i, --input <path>","Path to brain export directory").option("--strategy <strategy>","Merge strategy","skip-conflicts").option("--dry-run","Preview import without writing",!1).option("--db <path>","Target database path").action(async s=>{await this.executeImport(s)}),e.command("info").description("Show manifest info for a brain export").requiredOption("-i, --input <path>","Path to brain export directory").action(async s=>{await this.executeInfo(s)}),e.command("witness-backfill").description("Create witness chain entries for patterns that predate the witness chain").option("--db <path>","Database path").action(async s=>{await this.executeWitnessBackfill(s)})}async executeExport(t){try{console.log(r.blue(`
23
- Exporting brain state (format: ${t.format})...
24
- `));let o=await ne(t.db),e=await Re(o,{outputPath:T.resolve(t.output),format:t.format});if(console.log(r.green(" Export complete.")),console.log(` Format: ${r.cyan("format"in e?e.format??"jsonl":"jsonl")}`),console.log(` Patterns: ${r.cyan(e.stats.patternCount)}`),"embeddingCount"in e.stats?console.log(` Vectors: ${r.cyan(e.stats.embeddingCount)}`):"vectorCount"in e.stats&&console.log(` Vectors: ${r.cyan(e.stats.vectorCount)}`),"rvfStatus"in e){let s=e.rvfStatus;console.log(` RVF Size: ${r.cyan(xe(s.fileSizeBytes))}`),console.log(` Segments: ${r.cyan(s.totalSegments)}`)}console.log(` Checksum: ${r.gray(e.checksum)}`),console.log(` Output: ${r.cyan(T.resolve(t.output))}`),console.log(""),await this.cleanupAndExit(0)}catch(o){console.error(r.red(`
25
- Brain export failed:`),o),await this.cleanupAndExit(1)}}async executeImport(t){try{t.dryRun?console.log(r.yellow(`
26
- Dry-run mode \u2014 no data will be written.
27
- `)):console.log(r.blue(`
28
- Importing brain state...
29
- `));let o=await ne(t.db),e=await Ce(o,T.resolve(t.input),{mergeStrategy:t.strategy,dryRun:t.dryRun});console.log(r.green(" Import complete.")),console.log(` Imported: ${r.cyan(e.imported)}`),console.log(` Skipped: ${r.yellow(e.skipped)}`),console.log(` Conflicts: ${r.red(e.conflicts)}`),"embeddingsRestored"in e&&console.log(` Embeddings: ${r.cyan(e.embeddingsRestored)}`),console.log(""),await this.cleanupAndExit(0)}catch(o){console.error(r.red(`
30
- Brain import failed:`),o),await this.cleanupAndExit(1)}}async executeInfo(t){try{console.log(r.blue(`
31
- Brain Export Info
32
- `));let o=T.resolve(t.input),e=await ve(o),s="format"in e?e.format??"jsonl":"jsonl";if(console.log(` Version: ${r.cyan(e.version)}`),console.log(` Format: ${r.cyan(s)}`),console.log(` Exported: ${r.cyan(e.exportedAt)}`),console.log(` Source DB: ${r.cyan(e.sourceDb)}`),console.log(r.blue(`
33
- Learning Data:`)),console.log(` Patterns: ${r.cyan(e.stats.patternCount)}`),"qValueCount"in e.stats&&console.log(` Q-Values: ${r.cyan(e.stats.qValueCount)}`),"dreamInsightCount"in e.stats){let a=e.stats.dreamInsightCount,f=("tableRecordCounts"in e?e.tableRecordCounts:void 0)?.dream_cycles,u=f!==void 0?` (${f} cycles)`:"";console.log(` Dream Insights: ${r.cyan(a)}${r.gray(u)}`)}"witnessChainLength"in e.stats&&console.log(` Witness Chain: ${r.cyan(e.stats.witnessChainLength)} entries`),"embeddingCount"in e.stats?console.log(` Embeddings: ${r.cyan(e.stats.embeddingCount)}`):"vectorCount"in e.stats&&console.log(` Vectors: ${r.cyan(e.stats.vectorCount)}`);let i="tableRecordCounts"in e?e.tableRecordCounts:void 0;if(i){let a=Object.entries(i).filter(([d,f])=>f>0&&!["qe_patterns","rl_q_values","dream_insights","dream_cycles","witness_chain","vectors","qe_pattern_embeddings"].includes(d));if(a.length>0)for(let[d,f]of a){let p=`${d.replace(/_/g," ").replace(/\b\w/g,l=>l.toUpperCase())}:`.padEnd(15);console.log(` ${p}${r.cyan(f)}`)}}let c="totalRecords"in e.stats?e.stats.totalRecords:void 0;if(c!==void 0&&(console.log(r.blue(`
34
- Summary:`)),console.log(` Total Records: ${r.cyan(c)}`)),"domains"in e&&Array.isArray(e.domains)&&e.domains.length>0&&(c||console.log(r.blue(`
35
- Summary:`)),console.log(` Domains: ${r.cyan(e.domains.join(", "))}`)),"rvfStatus"in e){let a=e.rvfStatus;console.log(r.blue(`
36
- RVF Details:`)),console.log(` File Size: ${r.cyan(xe(a.fileSizeBytes))}`),console.log(` Vectors: ${r.cyan(a.totalVectors)}`),console.log(` Segments: ${r.cyan(a.totalSegments)}`)}if("lineage"in e){let a=e.lineage;a&&(console.log(r.blue(`
37
- Lineage:`)),console.log(` File ID: ${r.cyan(a.fileId)}`),console.log(` Parent ID: ${r.cyan(a.parentId??"none (root)")}`),console.log(` Depth: ${r.cyan(a.lineageDepth)}`))}if("signature"in e){let a=e.signature,d=e.signerKeyId;console.log(r.blue(`
38
- Signature:`)),a?(console.log(` Status: ${r.green("Signed")}`),console.log(` Key ID: ${r.cyan(d??"unknown")}`),console.log(` Signature: ${r.gray(a.slice(0,32)+"...")}`)):console.log(` Status: ${r.yellow("Unsigned")}`)}console.log(`
39
- Checksum: ${r.gray(e.checksum)}`),console.log(""),await this.cleanupAndExit(0)}catch(o){console.error(r.red(`
40
- Failed to read brain info:`),o),await this.cleanupAndExit(1)}}async executeWitnessBackfill(t){try{console.log(r.blue(`
41
- Running witness chain backfill...
42
- `));let o=await ne(t.db),e=await Ee(o);console.log(r.green(" Backfill complete.")),console.log(` Created: ${r.cyan(e.created)} new witness entries`),console.log(` Skipped: ${r.cyan(e.skipped)} (already witnessed)`),console.log(""),await this.cleanupAndExit(0)}catch(o){console.error(r.red(`
43
- Witness backfill failed:`),o),await this.cleanupAndExit(1)}}getHelp(){return`
44
- Export, import, and inspect QE brain state.
45
-
46
- Formats:
47
- rvf \u2014 Single portable .rvf file (default, requires @ruvector/rvf-node)
48
- jsonl \u2014 JSONL directory format (fallback when native not available)
49
-
50
- Usage:
51
- aqe brain export -o brain.rvf [--format rvf] [--db <path>]
52
- aqe brain export -o ./brain-dir --format jsonl [--db <path>]
53
- aqe brain import -i brain.rvf [--strategy skip-conflicts] [--dry-run] [--db <path>]
54
- aqe brain info -i brain.rvf
55
-
56
- Subcommands:
57
- export Export brain state to a portable .rvf file or JSONL directory
58
- import Import a brain export into the local database
59
- info Show manifest metadata for an existing brain export
60
-
61
- Examples:
62
- aqe brain export -o .agentic-qe/brain.rvf
63
- aqe brain export -o .agentic-qe/brain.rvf --format rvf
64
- aqe brain export -o ./brain-export --format jsonl
65
- aqe brain import -i .agentic-qe/brain.rvf --strategy latest-wins
66
- aqe brain import -i .agentic-qe/brain.rvf --dry-run
67
- aqe brain info -i .agentic-qe/brain.rvf
68
- `}};async function ne(n){if(n)return n;let{findProjectRoot:t}=await import("./unified-memory-NHJHPLIC.js");return T.join(t(),".agentic-qe","memory.db")}function xe(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function lt(n,t){return new re(n,t)}export{re as BrainHandler,lt as createBrainHandler};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.14");process.exit(0)}
2
- import{a}from"./chunk-FFACJODG.js";import"./chunk-BNPJMPM3.js";import"./chunk-VQB5SLXZ.js";import"./chunk-ZFZX2NA3.js";import"./chunk-UUVTLYUK.js";import"./chunk-STYNOKOM.js";import"./chunk-GUEK5DOK.js";import"./chunk-DMZ2XOEW.js";import"./chunk-UIYK4Y7K.js";import"./chunk-G7L5Y47C.js";import"./chunk-LWHM5BWD.js";import"./chunk-J3XLOHWB.js";import"./chunk-JN7MSUGK.js";import"./chunk-JNLKLC7G.js";import"./chunk-WE7KIXR6.js";import"./chunk-XNXOW7BQ.js";import"./chunk-JLBUS4PR.js";import"./chunk-DJLRRCR6.js";import"./chunk-5HUAD4UU.js";import"./chunk-DGUAAG3T.js";export{a as BrowserWorkflowTool};
@@ -1,18 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.14");process.exit(0)}
2
- import{a as x,c as N}from"./chunk-UIYK4Y7K.js";import{b as w,c as P,d as O}from"./chunk-JNLKLC7G.js";N();O();import*as k from"fs";import*as T from"path";import*as L from"yaml";var D=5,F=4,U=3e4,W=".claude/skills",G=5e3,$=500,A=100,V=1e3,I=500,H=.8,Q=.2,K=.1,v=.1,q=.1,B=.1,z=.1,X=200,j=500,Y=300,J=1,Z=.9,M={maxWorkers:D,batchSize:F,retryFailedTests:!0,timeout:U,skillsDir:W,progressIntervalMs:G},R=class{async execute(e,s,t){let r=P(A,$+A);return await new Promise(i=>setTimeout(i,r)),{output:this.generateMockResponse(e),tokensUsed:w(I,V+I),durationMs:r}}generateMockResponse(e){let s=[];return e.includes("alt")&&s.push("alt","1.1.1","perceivable"),e.includes("contrast")&&s.push("contrast","1.4.3","4.5:1"),e.includes("keyboard")&&s.push("keyboard","2.1.1","operable","button"),e.includes("label")&&s.push("label","3.3.2","understandable"),e.includes("ARIA")&&s.push("ARIA","4.1.2","robust"),e.includes("focus")&&s.push("focus","2.4.7","outline"),e.includes("lang")&&s.push("lang","3.1.1","language"),e.includes("caption")&&s.push("caption","1.2.2","track"),e.includes("accessible")&&s.push("accessible","compliant"),s.length===0&&s.push("accessibility","WCAG","finding"),`Analysis complete. Found issues related to: ${s.join(", ")}.
3
- Recommendations: Implement proper ${s[0]} attributes for better accessibility.
4
- Severity: ${e.includes("critical")?"critical":"serious"}`}},y=class{constructor(e,s,t){this.executor=s;this.config=t;this.id=e}executor;config;id;status="idle";tasksCompleted=0;tasksFailed=0;lastHeartbeat=Date.now();async executeBatch(e){this.status="running";let s=[];for(let t of e){this.lastHeartbeat=Date.now();try{let r=await this.executeTestCase(t);if(s.push(r),r.passed)this.tasksCompleted++;else if(this.tasksFailed++,this.config.retryFailedTests&&!r.passed){let a=await this.executeTestCase(t,!0);a.passed&&(s[s.length-1]=a,this.tasksCompleted++,this.tasksFailed--)}}catch(r){this.tasksFailed++,s.push({testId:t.testCaseId,passed:!1,expectedPatterns:t.testCase.expected_output.must_contain||[],actualPatterns:[],reasoningQuality:0,category:t.testCase.category,priority:t.testCase.priority,error:x(r)})}}return this.status="idle",s}async executeTestCase(e,s=!1){let t=Date.now(),r=this.buildPrompt(e),a=await this.executor.execute(r,e.model,{timeout:this.config.timeout}),i=this.validateResponse(a.output,e.testCase.expected_output,e.testCase.validation);return{testId:e.testCaseId,passed:i.passed,expectedPatterns:e.testCase.expected_output.must_contain||[],actualPatterns:i.foundPatterns,reasoningQuality:i.reasoningQuality,executionTimeMs:Date.now()-t,category:e.testCase.category,priority:e.testCase.priority,error:i.error}}buildPrompt(e){let{testCase:s}=e,t=s.input.context;return`Analyze the following ${t.language||"HTML"} code for accessibility issues.
5
- Context: ${t.description||s.description}
6
- WCAG Level: ${t.wcagLevel||"AA"}
7
-
8
- Code:
9
- \`\`\`${t.language||"html"}
10
- ${s.input.code}
11
- \`\`\`
12
-
13
- Provide a detailed analysis including:
14
- 1. All accessibility issues found
15
- 2. WCAG success criteria violated
16
- 3. Severity classification (critical/serious/moderate/minor)
17
- 4. Remediation recommendations with code examples`}validateResponse(e,s,t){let r=[],a=[],i=s.must_contain||[],o=0;for(let u of i)new RegExp(u,"i").test(e)&&(r.push(u),o++);let n=s.must_not_contain||[];for(let u of n)new RegExp(u,"i").test(e)&&a.push(`Output should not contain: ${u}`);let d=s.must_match_regex||[];for(let u of d)new RegExp(u,"i").test(e)||a.push(`Output should match regex: ${u}`);let p=i.length>0?o/i.length:1,g=t?.keyword_match_threshold??H,h=p>=g,l=this.calculateReasoningQuality(e,t),m=t?.reasoning_quality_min??0,_=l>=m;return{passed:h&&_&&a.length===0,foundPatterns:r,reasoningQuality:l,error:a.length>0?a.join("; "):void 0}}calculateReasoningQuality(e,s){let t=0;if(e.length>X&&(t+=Q),e.length>j&&(t+=K),e.includes(`
18
- `)&&(t+=v),(e.includes("1.")||e.includes("-"))&&(t+=v),e.includes("```")&&(t+=v),e.includes("WCAG")&&(t+=q),(e.includes("remediation")||e.includes("recommendation"))&&(t+=B),(e.includes("severity")||e.includes("critical"))&&(t+=z),s?.grading_rubric){let r=s.grading_rubric,a=0;r.completeness&&e.length>Y&&(a+=r.completeness),r.accuracy&&e.includes("WCAG")&&(a+=r.accuracy),r.actionability&&(e.includes("fix")||e.includes("change"))&&(a+=r.actionability),t=Math.max(t,a)}return Math.min(t,1)}getProgress(e){return{workerId:this.id,tasksCompleted:this.tasksCompleted,tasksTotal:e,elapsedMs:Date.now()-this.lastHeartbeat}}},S=class{constructor(e=M,s,t=new R){this.config=e;this.skillValidationLearner=s;this.executor=t;for(let r=0;r<e.maxWorkers;r++)this.workers.push(new y(r,t,e))}config;skillValidationLearner;executor;workers=[];progressCallback;onProgress(e){this.progressCallback=e}async runEvalParallel(e,s){let t=Date.now(),r=this.loadEvalSuite(e);if(!r)throw new Error(`Failed to load eval suite for skill: ${e}`);let a=this.createTasks(r,s),i=this.partitionTestCases(a,this.config.batchSize),o=a.length*(this.config.timeout/2),n=[],d=[];for(let c=0;c<i.length;c++){let b=this.workers[c%this.workers.length];d.push(b.executeBatch(i[c]))}let p=this.startProgressReporting(e,s,a.length,t);try{let c=await Promise.all(d);for(let b of c)n.push(...b)}finally{p&&clearInterval(p)}let g=Date.now()-t,h=n.filter(c=>c.passed).length,l=n.filter(c=>!c.passed).length,m=a.length-n.length,_=n.length>0?h/n.length:0,C=n.length>0?n.reduce((c,b)=>c+b.reasoningQuality,0)/n.length:0,u=g>0?o/g:1,f=_>=r.success_criteria.pass_rate&&C>=(r.success_criteria.avg_reasoning_quality??0);return await this.recordOutcome({skillName:e,trustTier:this.determineTrustTier(r),validationLevel:"eval",model:s,passed:f,score:_,testCaseResults:n,timestamp:new Date,runId:`${e}-${s}-${Date.now()}`,metadata:{duration:g,parallelSpeedup:u,workersUsed:this.config.maxWorkers,version:r.version}}),{skill:e,model:s,totalTests:a.length,passedTests:h,failedTests:l,skippedTests:m,passRate:_,testResults:n,totalDurationMs:g,parallelSpeedup:u,avgReasoningQuality:C,passed:f,workersUsed:this.config.maxWorkers,timestamp:new Date}}async runMultipleEvalsParallel(e,s){let t=new Map,r=[];for(let o of e){t.set(o,[]);for(let n of s)r.push({skill:o,model:n})}let a=r.map(async({skill:o,model:n})=>{let d=await this.runEvalParallel(o,n);return{skill:o,result:d}}),i=await Promise.all(a);for(let{skill:o,result:n}of i)t.get(o).push(n);return t}loadEvalSuite(e){let s=T.isAbsolute(this.config.skillsDir)?this.config.skillsDir:T.join(process.cwd(),this.config.skillsDir),t=T.join(s,e,"evals",`${e}.yaml`);if(!k.existsSync(t))return console.error(`Eval suite not found: ${t}`),null;try{let r=k.readFileSync(t,"utf-8");return L.parse(r)}catch(r){return console.error(`Failed to parse eval suite: ${r instanceof Error?r.message:r}`),null}}createTasks(e,s){return e.test_cases.map((t,r)=>({skillName:e.skill,testCaseId:t.id,testCase:t,model:s,batchId:Math.floor(r/this.config.batchSize),indexInBatch:r%this.config.batchSize}))}partitionTestCases(e,s){let t=[];for(let r=0;r<e.length;r+=s)t.push(e.slice(r,r+s));return t}determineTrustTier(e){let s=e.mcp_integration?.enabled??!1,t=e.learning?.cross_model_comparison??!1,r=e.success_criteria.critical_pass_rate??0;return s&&t&&r>=J?3:s||r>=Z?2:1}startProgressReporting(e,s,t,r){return this.progressCallback?setInterval(()=>{let a=Date.now()-r,i=this.workers.reduce((l,m)=>l+m.tasksCompleted,0),o=this.workers.reduce((l,m)=>l+m.tasksFailed,0),n=this.workers.filter(l=>l.status==="running").length,d=a>0?i/a:0,p=t-i,g=d>0?p/d:0,h={skill:e,model:s,totalTasks:t,completedTasks:i,failedTasks:o,activeWorkers:n,elapsedMs:a,estimatedRemainingMs:g,workerProgress:this.workers.map(l=>l.getProgress(t))};this.progressCallback(h)},this.config.progressIntervalMs):null}async recordOutcome(e){await this.skillValidationLearner.recordValidationOutcome(e)}getWorkerStatus(){return this.workers.map(e=>({id:e.id,status:e.status,tasksCompleted:e.tasksCompleted,tasksFailed:e.tasksFailed}))}resetWorkers(){for(let e of this.workers)e.tasksCompleted=0,e.tasksFailed=0,e.status="idle"}};function re(E,e={},s){let t={...M,...e};return new S(t,E,s)}export{M as a,re as b};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.14");process.exit(0)}
2
- import{a as e,b as g,e as r}from"./chunk-GUEK5DOK.js";import{c as o}from"./chunk-DGUAAG3T.js";var L=o(()=>{"use strict";e();g();r()});export{L as a};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.14");process.exit(0)}
2
- import{c as a,d as b,e as c}from"./chunk-GIUAY4KY.js";import"./chunk-ME4LVBTT.js";import"./chunk-UIYK4Y7K.js";import"./chunk-DGUAAG3T.js";c();export{a as VibiumClientImpl,b as VibiumClientProvider};