agentic-qe 3.9.19 → 3.9.20

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 (296) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +28 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/adapters/claude-flow/trajectory-bridge.d.ts +12 -1
  5. package/dist/adapters/claude-flow/trajectory-bridge.js +33 -31
  6. package/dist/cli/bundle.js +5 -5
  7. package/dist/cli/chunks/adapter-UOX57IAN.js +2 -0
  8. package/dist/cli/chunks/{agent-booster-wasm-HVBKHNIS.js → agent-booster-wasm-T5JB3MOF.js} +2 -2
  9. package/dist/cli/chunks/{agent-handler-XNBDYRSJ.js → agent-handler-EASMQSQO.js} +2 -2
  10. package/dist/cli/chunks/{agent-memory-branch-YCVTQEMJ.js → agent-memory-branch-7GWN2KCG.js} +2 -2
  11. package/dist/cli/chunks/aqe-learning-engine-KZES2SKE.js +2 -0
  12. package/dist/cli/chunks/{audit-6C2PE7OY.js → audit-VHV4GXPW.js} +2 -2
  13. package/dist/cli/chunks/base-7MXMBRSW.js +2 -0
  14. package/dist/cli/chunks/{better-sqlite3-HZPCHUQU.js → better-sqlite3-GNK7MDXZ.js} +2 -2
  15. package/dist/cli/chunks/{brain-handler-OV75Q2NM.js → brain-handler-ALXZKWO4.js} +3 -3
  16. package/dist/cli/chunks/{branch-enumerator-QW6D42HJ.js → branch-enumerator-JNYLOLMM.js} +2 -2
  17. package/dist/cli/chunks/{browser-5BA7Q7OR.js → browser-FXRW6LID.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-4C5R54CZ.js +2 -0
  19. package/dist/cli/chunks/{chunk-2WJLEZKP.js → chunk-2J5OO63R.js} +2 -2
  20. package/dist/cli/chunks/{chunk-D2EHD2KF.js → chunk-35HDLA22.js} +1 -1
  21. package/dist/cli/chunks/{chunk-IG2RCBHJ.js → chunk-3BFNYFXV.js} +1 -1
  22. package/dist/cli/chunks/{chunk-NMYZSZHW.js → chunk-3CLKKAGH.js} +2 -2
  23. package/dist/cli/chunks/{chunk-VXUIIZNG.js → chunk-3GPNZPM4.js} +1 -1
  24. package/dist/cli/chunks/{chunk-AEET2WOI.js → chunk-3HQ4VKK6.js} +46 -34
  25. package/dist/cli/chunks/{chunk-3546SG2L.js → chunk-3ZHUKLU7.js} +2 -2
  26. package/dist/cli/chunks/{chunk-QOK4TIE4.js → chunk-4G6OH5LQ.js} +2 -2
  27. package/dist/cli/chunks/{chunk-U257SS7D.js → chunk-4HD7YRW7.js} +2 -2
  28. package/dist/cli/chunks/{chunk-CYLQTVIA.js → chunk-4IUNBRKQ.js} +2 -2
  29. package/dist/cli/chunks/{chunk-BB3KUX6C.js → chunk-4PNLBMKY.js} +1 -1
  30. package/dist/cli/chunks/{chunk-W3IO4FQ5.js → chunk-4SBMTHTA.js} +2 -2
  31. package/dist/cli/chunks/{chunk-HQFREZRX.js → chunk-5GA4BUQU.js} +2 -2
  32. package/dist/cli/chunks/{chunk-U2WMCNNR.js → chunk-5ILP2ZDZ.js} +2 -2
  33. package/dist/cli/chunks/{chunk-6BRUQTC7.js → chunk-5LM2W3NE.js} +1 -1
  34. package/dist/cli/chunks/{chunk-FJJLNCSL.js → chunk-6LKEFWKI.js} +3 -3
  35. package/dist/cli/chunks/{chunk-5X2AUPK2.js → chunk-6R7SJ5FS.js} +1 -1
  36. package/dist/cli/chunks/{chunk-FNVA7U7X.js → chunk-7I6ROJGF.js} +2 -2
  37. package/dist/cli/chunks/{chunk-LTE3CDOY.js → chunk-7J34I3CI.js} +2 -2
  38. package/dist/cli/chunks/{chunk-XP4T7CZY.js → chunk-7OGFOHG5.js} +2 -2
  39. package/dist/cli/chunks/{chunk-UIASVDYG.js → chunk-7Q7SCQMQ.js} +2 -2
  40. package/dist/cli/chunks/{chunk-ALYUJEYA.js → chunk-7R45TEY6.js} +2 -2
  41. package/dist/cli/chunks/{chunk-VHG67L7O.js → chunk-7WXYQDML.js} +2 -2
  42. package/dist/cli/chunks/{chunk-BOUCIIUI.js → chunk-7Y4QQ6JL.js} +1 -1
  43. package/dist/cli/chunks/{chunk-SKNHAGYP.js → chunk-AFMLL2G3.js} +2 -2
  44. package/dist/cli/chunks/{chunk-YXLQJ226.js → chunk-AVVRA6FG.js} +2 -2
  45. package/dist/cli/chunks/{chunk-B2EHSFUW.js → chunk-BIODM56C.js} +2 -2
  46. package/dist/cli/chunks/{chunk-B65GTWF3.js → chunk-BJF77EFA.js} +2 -2
  47. package/dist/cli/chunks/chunk-BKGCMWFL.js +12 -0
  48. package/dist/cli/chunks/{chunk-MN4366PQ.js → chunk-BXGAXGME.js} +2 -2
  49. package/dist/cli/chunks/{chunk-TXCOK5DC.js → chunk-CEVIRL2S.js} +2 -2
  50. package/dist/cli/chunks/{chunk-2SIQ742L.js → chunk-CPVGZYEP.js} +1 -1
  51. package/dist/cli/chunks/{chunk-R5IL3XD5.js → chunk-CQSME43Z.js} +2 -2
  52. package/dist/cli/chunks/{chunk-FT3MAIRW.js → chunk-DERQRIAR.js} +3 -3
  53. package/dist/cli/chunks/{chunk-37DTXQ6P.js → chunk-DJCLA5AG.js} +2 -2
  54. package/dist/cli/chunks/{chunk-7WMHLBNZ.js → chunk-DODH6CEQ.js} +1 -1
  55. package/dist/cli/chunks/{chunk-TCUIYIZ4.js → chunk-DSPH4GI3.js} +1 -1
  56. package/dist/cli/chunks/{chunk-HVNW3TZS.js → chunk-EJQRDMON.js} +1 -1
  57. package/dist/cli/chunks/{chunk-VWWLJBRA.js → chunk-EYSGJZ7Y.js} +9 -9
  58. package/dist/cli/chunks/chunk-F32R4LVS.js +2 -0
  59. package/dist/cli/chunks/{chunk-MTHO6A3V.js → chunk-F3PX6EJX.js} +1 -1
  60. package/dist/cli/chunks/{chunk-O6UMETOH.js → chunk-FAQPPMEC.js} +2 -2
  61. package/dist/cli/chunks/{chunk-SRKBR4DU.js → chunk-FHDYN73D.js} +2 -2
  62. package/dist/cli/chunks/{chunk-7IV2RK5M.js → chunk-FPBNTPCM.js} +2 -2
  63. package/dist/cli/chunks/{chunk-XF32XZMY.js → chunk-FUTRX4ZT.js} +2 -2
  64. package/dist/cli/chunks/{chunk-GYESQBDU.js → chunk-G7HYTJDG.js} +2 -2
  65. package/dist/cli/chunks/{chunk-3HQ4AZDH.js → chunk-GJACTPDK.js} +2 -2
  66. package/dist/cli/chunks/{chunk-J7F65KKG.js → chunk-GXO42P3X.js} +4 -4
  67. package/dist/cli/chunks/{chunk-WULMXLNN.js → chunk-H647PYXW.js} +1 -1
  68. package/dist/cli/chunks/{chunk-D74RGYKI.js → chunk-HCFRGEMK.js} +1 -1
  69. package/dist/cli/chunks/{chunk-IV74GAZN.js → chunk-HW47UOFK.js} +2 -2
  70. package/dist/cli/chunks/{chunk-FPVXXQVX.js → chunk-HXQ7GAUV.js} +3 -3
  71. package/dist/cli/chunks/{chunk-O5ZP3CBF.js → chunk-ICLWWAGZ.js} +2 -2
  72. package/dist/cli/chunks/{chunk-HJ7CRPZY.js → chunk-IHBRFVGA.js} +1 -1
  73. package/dist/cli/chunks/{chunk-WZUQT2BE.js → chunk-J7SDO52P.js} +2 -2
  74. package/dist/cli/chunks/{chunk-5R2DUR3A.js → chunk-JCPXG42O.js} +2 -2
  75. package/dist/cli/chunks/{chunk-H4QM37XS.js → chunk-K2D5L7YV.js} +1 -1
  76. package/dist/cli/chunks/{chunk-VSI45JCP.js → chunk-KMDZOVCF.js} +1 -1
  77. package/dist/cli/chunks/{chunk-P6EYD4V3.js → chunk-KNOZWD6E.js} +2 -2
  78. package/dist/cli/chunks/{chunk-RL5CBCBV.js → chunk-LATJ2LKJ.js} +1 -1
  79. package/dist/cli/chunks/{chunk-IPLQPBJA.js → chunk-LGSPAQSP.js} +2 -2
  80. package/dist/cli/chunks/{chunk-AZKVGH5I.js → chunk-LJW7BTMK.js} +2 -2
  81. package/dist/cli/chunks/{chunk-AOASQYOO.js → chunk-LSYMQG52.js} +1 -1
  82. package/dist/cli/chunks/{chunk-5KGFDNYI.js → chunk-MIST354H.js} +2 -2
  83. package/dist/cli/chunks/{chunk-AG7J7DTM.js → chunk-MXAEZHW6.js} +2 -2
  84. package/dist/cli/chunks/{chunk-5LXWEAEJ.js → chunk-MXDGMXJA.js} +2 -2
  85. package/dist/cli/chunks/{chunk-EW5TQQBR.js → chunk-MXHJUAM7.js} +2 -2
  86. package/dist/cli/chunks/{chunk-I3JRRFVT.js → chunk-NGWGOMOP.js} +2 -2
  87. package/dist/cli/chunks/{chunk-5MGRZ4YD.js → chunk-NN6VRHNL.js} +2 -2
  88. package/dist/cli/chunks/{chunk-MIQAFOFO.js → chunk-NQIOXSHW.js} +1 -1
  89. package/dist/cli/chunks/{chunk-SKDDAPBV.js → chunk-NWYYWFUO.js} +1 -1
  90. package/dist/cli/chunks/{chunk-NBBIA3QA.js → chunk-O3PLWCCD.js} +2 -2
  91. package/dist/cli/chunks/{chunk-VRGXYOIN.js → chunk-OD5SVOVP.js} +1 -1
  92. package/dist/cli/chunks/{chunk-JYHZK44T.js → chunk-P2ABIGYB.js} +1 -1
  93. package/dist/cli/chunks/{chunk-255CWHTF.js → chunk-Q4OITFDX.js} +2 -2
  94. package/dist/cli/chunks/{chunk-OEQCZBBM.js → chunk-QAZYSC3T.js} +2 -2
  95. package/dist/cli/chunks/{chunk-LDBHCOM3.js → chunk-QCLEA3CM.js} +2 -2
  96. package/dist/cli/chunks/{chunk-BFBR2ZZJ.js → chunk-QKOPJ5CZ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-KTDGHN2J.js → chunk-QLZPCEVI.js} +1 -1
  98. package/dist/cli/chunks/{chunk-Y3GX66VZ.js → chunk-QMGXALN3.js} +2 -2
  99. package/dist/cli/chunks/{chunk-JCPJG2KU.js → chunk-QMUZMIV7.js} +3 -3
  100. package/dist/cli/chunks/{chunk-NPSWRGNT.js → chunk-QQMHE4RT.js} +2 -2
  101. package/dist/cli/chunks/{chunk-VLQYU7ZQ.js → chunk-RCPFDAOC.js} +1 -1
  102. package/dist/cli/chunks/{chunk-MMVSIESL.js → chunk-RVWGW7TI.js} +2 -2
  103. package/dist/cli/chunks/{chunk-C5YFCM2H.js → chunk-RXXKU3VP.js} +2 -2
  104. package/dist/cli/chunks/{chunk-GYDE5TCN.js → chunk-RYBFRFKY.js} +1 -1
  105. package/dist/cli/chunks/{chunk-DAPBSAVT.js → chunk-S6SRHNJV.js} +2 -2
  106. package/dist/cli/chunks/{chunk-NXO7CT5K.js → chunk-SGGY4QYU.js} +2 -2
  107. package/dist/cli/chunks/{chunk-SLDYG7LC.js → chunk-SH2UPGO7.js} +2 -2
  108. package/dist/cli/chunks/{chunk-3X3QQZ7Q.js → chunk-SL7WTN5Z.js} +2 -2
  109. package/dist/cli/chunks/{chunk-XKD6AFY5.js → chunk-SMQ5OARZ.js} +1 -1
  110. package/dist/cli/chunks/{chunk-EZZJ5XD6.js → chunk-SYXPLFK7.js} +2 -2
  111. package/dist/cli/chunks/{chunk-GVDLCJC5.js → chunk-T3TEQH2H.js} +1 -1
  112. package/dist/cli/chunks/{chunk-2XATUQIG.js → chunk-T5MMSSSF.js} +2 -2
  113. package/dist/cli/chunks/{chunk-TMAIHTE3.js → chunk-TG6P44UT.js} +4 -4
  114. package/dist/cli/chunks/{chunk-N2PLNYEV.js → chunk-TV5OVFKK.js} +1 -1
  115. package/dist/cli/chunks/{chunk-XXHJKAE6.js → chunk-U7RTH6F4.js} +2 -2
  116. package/dist/cli/chunks/{chunk-2SSDY6OE.js → chunk-UABC2Z3S.js} +2 -2
  117. package/dist/cli/chunks/{chunk-DZS7XQ2Z.js → chunk-UAE37LHP.js} +2 -2
  118. package/dist/cli/chunks/{chunk-XQZ63XSL.js → chunk-UHWRRJBH.js} +1 -1
  119. package/dist/cli/chunks/{chunk-G2V4GMPR.js → chunk-UNAVOVD7.js} +3 -3
  120. package/dist/cli/chunks/{chunk-GJ5FON37.js → chunk-V5UB75TQ.js} +2 -2
  121. package/dist/cli/chunks/{chunk-KU7OXAFY.js → chunk-VQI6JQQP.js} +1 -1
  122. package/dist/cli/chunks/{chunk-GL742O2V.js → chunk-WALYYW6B.js} +4 -4
  123. package/dist/cli/chunks/{chunk-PUUTYV32.js → chunk-WF6MKBRI.js} +2 -2
  124. package/dist/cli/chunks/{chunk-K554X3T4.js → chunk-X3NADG4S.js} +2 -2
  125. package/dist/cli/chunks/{chunk-BGTYOZRK.js → chunk-XJRXB5Z5.js} +2 -2
  126. package/dist/cli/chunks/{chunk-M6EP724N.js → chunk-Y6U4CCPP.js} +1 -1
  127. package/dist/cli/chunks/{chunk-V7ZPTEP7.js → chunk-YPUDYGIU.js} +1 -1
  128. package/dist/cli/chunks/{chunk-HCSTXZYE.js → chunk-YPVPWDKL.js} +2 -2
  129. package/dist/cli/chunks/{chunk-FL2DMHOQ.js → chunk-Z5MG54R4.js} +1 -1
  130. package/dist/cli/chunks/{chunk-PS72GF4R.js → chunk-Z65DB2Z7.js} +3 -3
  131. package/dist/cli/chunks/{chunk-JLX35EPX.js → chunk-ZBBHJGPI.js} +2 -2
  132. package/dist/cli/chunks/{chunk-44SPMVML.js → chunk-ZCH5MNST.js} +2 -2
  133. package/dist/cli/chunks/{chunk-2WM4NYM5.js → chunk-ZTWHRDUY.js} +2 -2
  134. package/dist/cli/chunks/{ci-FTZE4PD3.js → ci-TE3744OR.js} +2 -2
  135. package/dist/cli/chunks/{ci-output-C3ORCIHU.js → ci-output-GSNS52SY.js} +2 -2
  136. package/dist/cli/chunks/{circuit-breaker-GS5OTOJZ.js → circuit-breaker-7ROW7QBW.js} +2 -2
  137. package/dist/cli/chunks/{claude-flow-setup-RWOFP5L2.js → claude-flow-setup-Z5GPMILN.js} +2 -2
  138. package/dist/cli/chunks/client-S5TFLKHN.js +2 -0
  139. package/dist/cli/chunks/{cline-installer-D7RGRAUH.js → cline-installer-6D4SAAM4.js} +2 -2
  140. package/dist/cli/chunks/{code-HBDMMYHY.js → code-JZKH7FRS.js} +2 -2
  141. package/dist/cli/chunks/{code-index-extractor-B2KUPAEH.js → code-index-extractor-JJFTZLOK.js} +2 -2
  142. package/dist/cli/chunks/{codex-installer-MPXV4AOD.js → codex-installer-O5KIPN3Z.js} +2 -2
  143. package/dist/cli/chunks/{completions-QJS6QOZQ.js → completions-QNMAUYKK.js} +2 -2
  144. package/dist/cli/chunks/{complexity-analyzer-YQQXWZIL.js → complexity-analyzer-JYJ7TLYE.js} +2 -2
  145. package/dist/cli/chunks/{continuedev-installer-Z6PBKYMB.js → continuedev-installer-JYMVLG6S.js} +2 -2
  146. package/dist/cli/chunks/{copilot-installer-RWVD44CV.js → copilot-installer-SSV6GF5G.js} +2 -2
  147. package/dist/cli/chunks/{cost-tracker-DFPBFYWL.js → cost-tracker-2VZ3IMJZ.js} +2 -2
  148. package/dist/cli/chunks/{coverage-DYST26FK.js → coverage-KW4V5D5L.js} +3 -3
  149. package/dist/cli/chunks/cross-domain-router-GZG5GU7Q.js +2 -0
  150. package/dist/cli/chunks/{cursor-installer-LL6UWKTZ.js → cursor-installer-QVGDAHOI.js} +2 -2
  151. package/dist/cli/chunks/{daemon-6PIHFZNR.js → daemon-JKMFDYK2.js} +3 -3
  152. package/dist/cli/chunks/{dag-attention-scheduler-WS3HJW4F.js → dag-attention-scheduler-WKRV7DFE.js} +2 -2
  153. package/dist/cli/chunks/{detect-J4OITSUD.js → detect-ROCCKX63.js} +2 -2
  154. package/dist/cli/chunks/{dist-node-QSLD5K6K.js → dist-node-QGU7TJTW.js} +2 -2
  155. package/dist/cli/chunks/{domain-handler-BD53QZ4Q.js → domain-handler-3UJHQPOR.js} +2 -2
  156. package/dist/cli/chunks/{domain-transfer-VZBWINQL.js → domain-transfer-R47ISVU5.js} +2 -2
  157. package/dist/cli/chunks/dream-PGYTIOQS.js +2 -0
  158. package/dist/cli/chunks/{embed-and-insert-pattern-5UAFXNDX.js → embed-and-insert-pattern-ZVK7WSY2.js} +2 -2
  159. package/dist/cli/chunks/{eval-GBKU6VTD.js → eval-WNZWXFOW.js} +2 -2
  160. package/dist/cli/chunks/{fast-paths-MYZ6GITZ.js → fast-paths-QPF47RZJ.js} +2 -2
  161. package/dist/cli/chunks/{feature-flags-2WVV66AO.js → feature-flags-2MAHHM66.js} +2 -2
  162. package/dist/cli/chunks/{feature-flags-6ALWBTHS.js → feature-flags-PGIG2W3G.js} +2 -2
  163. package/dist/cli/chunks/{file-discovery-FOYCPGD6.js → file-discovery-JL6FCXRB.js} +2 -2
  164. package/dist/cli/chunks/{fleet-JROEDHAT.js → fleet-LMBZU2GU.js} +3 -3
  165. package/dist/cli/chunks/{gnn-wrapper-KAXTFFEE.js → gnn-wrapper-GFNFVEER.js} +2 -2
  166. package/dist/cli/chunks/{heartbeat-handler-PG24CBMQ.js → heartbeat-handler-YN7ES3AX.js} +4 -4
  167. package/dist/cli/chunks/{heartbeat-scheduler-LSS3RD6E.js → heartbeat-scheduler-SII2KJSQ.js} +2 -2
  168. package/dist/cli/chunks/hnsw-adapter-ANJKCXK6.js +2 -0
  169. package/dist/cli/chunks/hnsw-index-D4CJEP7L.js +2 -0
  170. package/dist/cli/chunks/{hnsw-legacy-bridge-HYH4AJAO.js → hnsw-legacy-bridge-CPMBYE7C.js} +2 -2
  171. package/dist/cli/chunks/{hnswlib-node-WTTST5LC.js → hnswlib-node-NWNBNU3W.js} +2 -2
  172. package/dist/cli/chunks/{hooks-RDZSAFQG.js → hooks-EYSB7XDW.js} +58 -47
  173. package/dist/cli/chunks/{hybrid-router-HNPS6EFL.js → hybrid-router-BR7O6WT2.js} +2 -2
  174. package/dist/cli/chunks/{hypergraph-engine-JUFXRXCC.js → hypergraph-engine-HAKGWDYX.js} +2 -2
  175. package/dist/cli/chunks/{hypergraph-handler-YFRF53TF.js → hypergraph-handler-UCI3LXUF.js} +3 -3
  176. package/dist/cli/chunks/impact-analyzer-55JW3OK6.js +2 -0
  177. package/dist/cli/chunks/{init-handler-P4W5F57S.js → init-handler-7RYGU3W5.js} +6 -6
  178. package/dist/cli/chunks/init-wizard-MWKJNVB2.js +2 -0
  179. package/dist/cli/chunks/kernel-5MKKDS4J.js +2 -0
  180. package/dist/cli/chunks/{kilocode-installer-5VWY4DMH.js → kilocode-installer-W6ITMEFA.js} +2 -2
  181. package/dist/cli/chunks/{kiro-installer-PZC3BQII.js → kiro-installer-2BO34D3O.js} +2 -2
  182. package/dist/cli/chunks/knowledge-graph-2A7AE7L7.js +2 -0
  183. package/dist/cli/chunks/{learning-4OH4ZG25.js → learning-GEXYG72Z.js} +3 -3
  184. package/dist/cli/chunks/{llm-router-LZBR6SZQ.js → llm-router-EGHA5YOC.js} +4 -4
  185. package/dist/cli/chunks/{load-SPWP6VB3.js → load-VU2OOAEF.js} +2 -2
  186. package/dist/cli/chunks/load-test-UD4ZXCGG.js +2 -0
  187. package/dist/cli/chunks/{mcp-QYPQMM7L.js → mcp-NVQFFQ2R.js} +2 -2
  188. package/dist/cli/chunks/{memory-54ILJMWQ.js → memory-JNXMKTZQ.js} +5 -5
  189. package/dist/cli/chunks/memory-backend-X3Z4IAYG.js +2 -0
  190. package/dist/cli/chunks/{memory-handlers-YK7H5UCX.js → memory-handlers-NLGQ5I7K.js} +2 -2
  191. package/dist/cli/chunks/{multi-model-executor-XAOAVPPI.js → multi-model-executor-SG6OME2A.js} +2 -2
  192. package/dist/cli/chunks/{opencode-installer-CNS4XMUF.js → opencode-installer-AY4JCZIM.js} +2 -2
  193. package/dist/cli/chunks/{orchestrator-SSEMSKUI.js → orchestrator-GWI7HQG6.js} +5 -5
  194. package/dist/cli/chunks/{pipeline-DS3AENTB.js → pipeline-7T6IAMC7.js} +2 -2
  195. package/dist/cli/chunks/{platform-BL6LH5NF.js → platform-IXUST66M.js} +2 -2
  196. package/dist/cli/chunks/{plugin-FNXPEQ2C.js → plugin-PW7F6MVH.js} +2 -2
  197. package/dist/cli/chunks/{prime-radiant-advanced-wasm-E6S6BGNA.js → prime-radiant-advanced-wasm-BUAZHZCM.js} +2 -2
  198. package/dist/cli/chunks/protocol-executor-AB6KPFK5.js +2 -0
  199. package/dist/cli/chunks/{protocol-handler-D4WIUU3W.js → protocol-handler-6746OC4P.js} +2 -2
  200. package/dist/cli/chunks/{prove-OLB3PKW6.js → prove-VYV5DQGC.js} +2 -2
  201. package/dist/cli/chunks/{provider-manager-GKTQ75DT.js → provider-manager-GEO3CUOO.js} +3 -3
  202. package/dist/cli/chunks/qe-reasoning-bank-Y4IDDIYA.js +2 -0
  203. package/dist/cli/chunks/{quality-ZYJVYTUL.js → quality-4XXENNNW.js} +2 -2
  204. package/dist/cli/chunks/queen-coordinator-GBSTXGA2.js +2 -0
  205. package/dist/cli/chunks/{real-embeddings-SKJRHLCS.js → real-embeddings-ZVEZVXVT.js} +2 -2
  206. package/dist/cli/chunks/{roocode-installer-WZGKOLWE.js → roocode-installer-ZRNDOIDL.js} +2 -2
  207. package/dist/cli/chunks/router-JA2X4MF6.js +2 -0
  208. package/dist/cli/chunks/routing-feedback-YCVJIWFM.js +2 -0
  209. package/dist/cli/chunks/{routing-handler-4GIMINCI.js → routing-handler-MPSJ7DDI.js} +2 -2
  210. package/dist/cli/chunks/{ruvector-commands-YZONXZ2W.js → ruvector-commands-V4BVCY2U.js} +2 -2
  211. package/dist/cli/chunks/{rvf-dual-writer-WSS5GF54.js → rvf-dual-writer-X4VNU5KH.js} +2 -2
  212. package/dist/cli/chunks/{rvf-migration-adapter-WS4HHVEU.js → rvf-migration-adapter-KOYYJSNH.js} +2 -2
  213. package/dist/cli/chunks/{rvf-migration-coordinator-6BY5GI47.js → rvf-migration-coordinator-SF5IBKTK.js} +2 -2
  214. package/dist/cli/chunks/rvf-native-adapter-5YN7EEB5.js +2 -0
  215. package/dist/cli/chunks/safe-db-S46Y7IC5.js +2 -0
  216. package/dist/cli/chunks/schedule-KSDHFWSY.js +2 -0
  217. package/dist/cli/chunks/scheduler-PLFJHU54.js +2 -0
  218. package/dist/cli/chunks/{security-HCNOL2K3.js → security-AA5GBNNU.js} +3 -3
  219. package/dist/cli/chunks/shared-rvf-adapter-MLXVW4N6.js +2 -0
  220. package/dist/cli/chunks/{shared-rvf-dual-writer-QRNLSDS7.js → shared-rvf-dual-writer-EGP3BYIY.js} +2 -2
  221. package/dist/cli/chunks/sqlite-persistence-RK3JWKB4.js +2 -0
  222. package/dist/cli/chunks/{status-handler-QXZ442MY.js → status-handler-ARHPRXJ4.js} +2 -2
  223. package/dist/cli/chunks/{structural-health-OFYZ3Z4A.js → structural-health-IDV4RBZV.js} +2 -2
  224. package/dist/cli/chunks/{sync-J4BG65NF.js → sync-7BRLSLDG.js} +2 -2
  225. package/dist/cli/chunks/{task-handler-UBSFCKK3.js → task-handler-XY42QA3K.js} +2 -2
  226. package/dist/cli/chunks/task-handlers-QEHOKEJC.js +9 -0
  227. package/dist/cli/chunks/{test-WTNAHJHH.js → test-TQIHDBEX.js} +4 -4
  228. package/dist/cli/chunks/{test-scheduling-QREBYRGW.js → test-scheduling-BBVOLGFT.js} +3 -3
  229. package/dist/cli/chunks/{token-bootstrap-HE5H77OL.js → token-bootstrap-BUHTWVEF.js} +2 -2
  230. package/dist/cli/chunks/{token-usage-V5B6K3JL.js → token-usage-MRVQ7G3H.js} +2 -2
  231. package/dist/cli/chunks/{transformers-HIVMQP4O.js → transformers-3PFLFSWR.js} +2 -2
  232. package/dist/cli/chunks/{tree-sitter-wasm-parser-WP2SF2M5.js → tree-sitter-wasm-parser-6GDZQNFV.js} +2 -2
  233. package/dist/cli/chunks/{types-7ZBTAO5Z.js → types-F2LWFMRI.js} +2 -2
  234. package/dist/cli/chunks/unified-memory-JVZZMZRE.js +2 -0
  235. package/dist/cli/chunks/unified-memory-hnsw-EJJHCMFR.js +2 -0
  236. package/dist/cli/chunks/unified-persistence-IEKOYCBL.js +2 -0
  237. package/dist/cli/chunks/{upgrade-WIFAJDBG.js → upgrade-N676MSDA.js} +2 -2
  238. package/dist/cli/chunks/{validate-W63V36GA.js → validate-56AA6YYM.js} +2 -2
  239. package/dist/cli/chunks/{validate-swarm-CK5BM3YY.js → validate-swarm-YPHV7MMC.js} +2 -2
  240. package/dist/cli/chunks/{vibium-MJCCO36E.js → vibium-ABPFT3DX.js} +2 -2
  241. package/dist/cli/chunks/visual-security-APS7K3TZ.js +2 -0
  242. package/dist/cli/chunks/{web-tree-sitter-ESERXLPK.js → web-tree-sitter-KN4PWKMV.js} +2 -2
  243. package/dist/cli/chunks/{windsurf-installer-FDWQ5BWI.js → windsurf-installer-IZOJBDNN.js} +2 -2
  244. package/dist/cli/chunks/witness-chain-DMHO7R75.js +2 -0
  245. package/dist/cli/chunks/{witness-chain-L5KSYE2S.js → witness-chain-H2DM5WMB.js} +2 -2
  246. package/dist/cli/chunks/{workflow-34GYJDFW.js → workflow-R42PK45F.js} +4 -4
  247. package/dist/cli/chunks/workflow-orchestrator-BDHRNVOG.js +2 -0
  248. package/dist/cli/chunks/{wrappers-VGKEBQLW.js → wrappers-6TIJNWN4.js} +2 -2
  249. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +54 -0
  250. package/dist/cli/commands/init.js +3 -1
  251. package/dist/coordination/consensus/providers/claude-provider.js +1 -1
  252. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +82 -0
  253. package/dist/learning/dream/dream-engine.js +8 -0
  254. package/dist/mcp/bundle.js +347 -338
  255. package/dist/mcp/entry.js +15 -0
  256. package/dist/mcp/handlers/core-handlers.js +2 -2
  257. package/dist/mcp/handlers/task-handlers.js +45 -0
  258. package/dist/mcp/handlers/trajectory-judge.d.ts +13 -0
  259. package/dist/mcp/handlers/trajectory-judge.js +100 -0
  260. package/dist/shared/llm/providers/claude.js +1 -1
  261. package/package.json +1 -1
  262. package/dist/cli/chunks/adapter-5NI3IO42.js +0 -2
  263. package/dist/cli/chunks/aqe-learning-engine-JOUK5HMO.js +0 -2
  264. package/dist/cli/chunks/base-DCAB7AHK.js +0 -2
  265. package/dist/cli/chunks/browser-workflow-A4UV73SZ.js +0 -2
  266. package/dist/cli/chunks/chunk-VPDZTMMB.js +0 -24
  267. package/dist/cli/chunks/chunk-Z2E5DTKX.js +0 -2
  268. package/dist/cli/chunks/client-UTNF2C5K.js +0 -2
  269. package/dist/cli/chunks/cross-domain-router-FCM34JOR.js +0 -2
  270. package/dist/cli/chunks/dream-6KCS7EWS.js +0 -2
  271. package/dist/cli/chunks/hnsw-adapter-PG6O67CQ.js +0 -2
  272. package/dist/cli/chunks/hnsw-index-AHYZHLNZ.js +0 -2
  273. package/dist/cli/chunks/impact-analyzer-USAJVJY5.js +0 -2
  274. package/dist/cli/chunks/init-wizard-GL7LAZID.js +0 -2
  275. package/dist/cli/chunks/kernel-2YAIESTR.js +0 -2
  276. package/dist/cli/chunks/knowledge-graph-QSIYZRAG.js +0 -2
  277. package/dist/cli/chunks/load-test-UEHSHLVN.js +0 -2
  278. package/dist/cli/chunks/memory-backend-4NE4ADPG.js +0 -2
  279. package/dist/cli/chunks/protocol-executor-YI4HNXND.js +0 -2
  280. package/dist/cli/chunks/qe-reasoning-bank-ANBAXQXC.js +0 -2
  281. package/dist/cli/chunks/queen-coordinator-MYYUSWVX.js +0 -2
  282. package/dist/cli/chunks/router-RYCLZ7A4.js +0 -2
  283. package/dist/cli/chunks/routing-feedback-5KSRG2UI.js +0 -2
  284. package/dist/cli/chunks/rvf-native-adapter-NEIOLJRF.js +0 -2
  285. package/dist/cli/chunks/safe-db-3JQP4EPU.js +0 -2
  286. package/dist/cli/chunks/schedule-2QKCL64E.js +0 -2
  287. package/dist/cli/chunks/scheduler-FMOP45FC.js +0 -2
  288. package/dist/cli/chunks/shared-rvf-adapter-BMFIVWMJ.js +0 -2
  289. package/dist/cli/chunks/sqlite-persistence-I5RYLFOE.js +0 -2
  290. package/dist/cli/chunks/task-handlers-JFUT2FQ7.js +0 -2
  291. package/dist/cli/chunks/unified-memory-2ETCY22B.js +0 -2
  292. package/dist/cli/chunks/unified-memory-hnsw-OALJW537.js +0 -2
  293. package/dist/cli/chunks/unified-persistence-SQMP7A3O.js +0 -2
  294. package/dist/cli/chunks/visual-security-JUJPF2QO.js +0 -2
  295. package/dist/cli/chunks/witness-chain-QJVKAAZT.js +0 -2
  296. package/dist/cli/chunks/workflow-orchestrator-WXB2RVVW.js +0 -2
@@ -1,43 +1,54 @@
1
1
  #!/usr/bin/env node
2
- 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.19");process.exit(0)}
3
- import{a as T,b as Z,c as X}from"./chunk-FT3MAIRW.js";import{a as ee,b as te}from"./chunk-5LXWEAEJ.js";import{g as F}from"./chunk-JCPJG2KU.js";import"./chunk-J7F65KKG.js";import"./chunk-RL5CBCBV.js";import"./chunk-FL2DMHOQ.js";import"./chunk-6BRUQTC7.js";import"./chunk-MN4366PQ.js";import"./chunk-2WM4NYM5.js";import{a as Y}from"./chunk-JLX35EPX.js";import"./chunk-NXO7CT5K.js";import"./chunk-OEQCZBBM.js";import"./chunk-AZKVGH5I.js";import{f as _,k as U,o as q}from"./chunk-TXCOK5DC.js";import"./chunk-AG7J7DTM.js";import"./chunk-Z2E5DTKX.js";import"./chunk-5KGFDNYI.js";import{b as K,d as ye}from"./chunk-5R2DUR3A.js";import"./chunk-N2PLNYEV.js";import"./chunk-5MGRZ4YD.js";import"./chunk-MIQAFOFO.js";import"./chunk-PUUTYV32.js";import"./chunk-CYLQTVIA.js";import"./chunk-GYESQBDU.js";import"./chunk-SKNHAGYP.js";import"./chunk-WZUQT2BE.js";import"./chunk-IV74GAZN.js";import"./chunk-XF32XZMY.js";import"./chunk-YXLQJ226.js";import"./chunk-W3IO4FQ5.js";import"./chunk-WULMXLNN.js";import{Command as Me}from"commander";import N from"chalk";import re from"node:path";q();import{randomUUID as M}from"crypto";import O from"chalk";var I="dream-scheduler:hook-state",ne=36e5,oe=20,se=3e5;async function Q(n){try{let e=await n.get(I);if(!e)return{triggered:!1,reason:"no-state"};let t=Date.now(),o=e.lastDreamTime?new Date(e.lastDreamTime).getTime():0,s=t-o;if(s<se)return{triggered:!1,reason:"too-soon"};let r=s>=ne,a=e.experienceCount>=oe;if(!r&&!a)return{triggered:!1,reason:"conditions-not-met"};let c=r?"time-interval":"experience-threshold";console.log(O.dim(`[hooks] Dream trigger: ${c} (${e.experienceCount} experiences, ${Math.round(s/6e4)}min since last dream)`));let{createDreamEngine:i}=await import("./dream-6KCS7EWS.js"),{createQEReasoningBank:h}=await import("./qe-reasoning-bank-ANBAXQXC.js"),d=i({maxDurationMs:1e4,minConceptsRequired:3});await d.initialize();let p=h(n,void 0,{enableLearning:!0,enableGuidance:!1,enableRouting:!1,embeddingDimension:384,useONNXEmbeddings:!0});await p.initialize();let m=await p.searchPatterns("",{limit:100,minConfidence:.3});if(m.success&&m.value.length>0){let y=m.value.map(l=>({id:l.pattern.id,name:l.pattern.name,description:l.pattern.description||`${l.pattern.patternType} pattern`,domain:l.pattern.qeDomain||"learning-optimization",patternType:l.pattern.patternType,confidence:l.pattern.confidence,successRate:l.pattern.successRate||.5}));await d.loadPatternsAsConcepts(y)}let u=await d.dream(1e4);return e.lastDreamTime=new Date().toISOString(),e.experienceCount=0,e.totalDreamsThisSession++,await n.set(I,e),await d.close(),{triggered:!0,reason:c,insightsGenerated:u.insights.length}}catch(e){return console.error(O.dim(`[hooks] Dream trigger failed: ${e instanceof Error?e.message:"unknown"}`)),{triggered:!1,reason:"error"}}}async function A(n){try{let e=await n.get(I);return e||(e={lastDreamTime:null,experienceCount:0,sessionStartTime:new Date().toISOString(),totalDreamsThisSession:0}),e.experienceCount++,await n.set(I,e),e.experienceCount}catch{return 0}}async function L(n){try{let{getUnifiedMemory:e}=await import("./unified-memory-2ETCY22B.js"),t=e();t.isInitialized()||await t.initialize();let o=t.getDatabase();try{o.pragma("busy_timeout = 60000")}catch{}let s=`cli-${Date.now()}-${M().slice(0,8)}`,r=n.durationMs||0,a;if(n.success){let c=r>0&&r<5e3?.1:0,i=n.source.includes("post-task")?.1:n.source.includes("post-edit")?.05:0;a=Math.min(.95,.7+c+i)}else{let c=n.source.includes("post-task")?.15:n.source.includes("post-edit")?.1:0;a=Math.min(.6,.3+c)}o.prepare(`
2
+ 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.20");process.exit(0)}
3
+ import{a as R,b as te,c as ne}from"./chunk-DERQRIAR.js";import{a as oe,b as se}from"./chunk-MXDGMXJA.js";import{g as J}from"./chunk-QMUZMIV7.js";import"./chunk-GXO42P3X.js";import"./chunk-LATJ2LKJ.js";import"./chunk-Z5MG54R4.js";import"./chunk-5LM2W3NE.js";import"./chunk-BXGAXGME.js";import"./chunk-ZTWHRDUY.js";import{a as ee}from"./chunk-ZBBHJGPI.js";import"./chunk-SGGY4QYU.js";import"./chunk-QAZYSC3T.js";import"./chunk-LJW7BTMK.js";import{f as T,k as F,o as C}from"./chunk-CEVIRL2S.js";import"./chunk-MXAEZHW6.js";import"./chunk-F32R4LVS.js";import"./chunk-MIST354H.js";import{b as X,d as Ee}from"./chunk-JCPXG42O.js";import"./chunk-TV5OVFKK.js";import"./chunk-NN6VRHNL.js";import"./chunk-NQIOXSHW.js";import"./chunk-WF6MKBRI.js";import"./chunk-4IUNBRKQ.js";import"./chunk-G7HYTJDG.js";import"./chunk-AFMLL2G3.js";import"./chunk-J7SDO52P.js";import"./chunk-HW47UOFK.js";import"./chunk-FUTRX4ZT.js";import"./chunk-AVVRA6FG.js";import"./chunk-4SBMTHTA.js";import"./chunk-H647PYXW.js";import{Command as Me}from"commander";import P from"chalk";import ce from"node:path";C();import{randomUUID as q}from"crypto";import O from"chalk";var I="dream-scheduler:hook-state",re=36e5,ae=20,ie=3e5;async function G(n){try{let e=await n.get(I);if(!e)return{triggered:!1,reason:"no-state"};let t=Date.now(),o=e.lastDreamTime?new Date(e.lastDreamTime).getTime():0,s=t-o;if(s<ie)return{triggered:!1,reason:"too-soon"};let r=s>=re,a=e.experienceCount>=ae;if(!r&&!a)return{triggered:!1,reason:"conditions-not-met"};let c=r?"time-interval":"experience-threshold";console.log(O.dim(`[hooks] Dream trigger: ${c} (${e.experienceCount} experiences, ${Math.round(s/6e4)}min since last dream)`));let{createDreamEngine:i}=await import("./dream-PGYTIOQS.js"),{createQEReasoningBank:E}=await import("./qe-reasoning-bank-Y4IDDIYA.js"),d=i({maxDurationMs:1e4,minConceptsRequired:3});await d.initialize();let p=E(n,void 0,{enableLearning:!0,enableGuidance:!1,enableRouting:!1,embeddingDimension:384,useONNXEmbeddings:!0});await p.initialize();let m=await p.searchPatterns("",{limit:100,minConfidence:.3});if(m.success&&m.value.length>0){let f=m.value.map(u=>({id:u.pattern.id,name:u.pattern.name,description:u.pattern.description||`${u.pattern.patternType} pattern`,domain:u.pattern.qeDomain||"learning-optimization",patternType:u.pattern.patternType,confidence:u.pattern.confidence,successRate:u.pattern.successRate||.5}));await d.loadPatternsAsConcepts(f)}let l=await d.dream(1e4);return e.lastDreamTime=new Date().toISOString(),e.experienceCount=0,e.totalDreamsThisSession++,await n.set(I,e),await d.close(),{triggered:!0,reason:c,insightsGenerated:l.insights.length}}catch(e){return console.error(O.dim(`[hooks] Dream trigger failed: ${e instanceof Error?e.message:"unknown"}`)),{triggered:!1,reason:"error"}}}async function x(n){try{let e=await n.get(I);return e||(e={lastDreamTime:null,experienceCount:0,sessionStartTime:new Date().toISOString(),totalDreamsThisSession:0}),e.experienceCount++,await n.set(I,e),e.experienceCount}catch{return 0}}async function j(n){try{let{getUnifiedMemory:e}=await import("./unified-memory-JVZZMZRE.js"),t=e();t.isInitialized()||await t.initialize();let o=t.getDatabase();try{o.pragma("busy_timeout = 60000")}catch{}let s=`cli-${Date.now()}-${q().slice(0,8)}`,r=n.durationMs||0,a;if(n.success){let c=r>0&&r<5e3?.1:0,i=n.source.includes("post-task")?.1:n.source.includes("post-edit")?.05:0;a=Math.min(.95,.7+c+i)}else{let c=n.source.includes("post-task")?.15:n.source.includes("post-edit")?.1:0;a=Math.min(.6,.3+c)}o.prepare(`
4
4
  INSERT OR REPLACE INTO captured_experiences
5
5
  (id, task, agent, domain, success, quality, duration_ms,
6
6
  started_at, completed_at, source)
7
7
  VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'), ?)
8
- `).run(s,n.task.slice(0,500),n.agent,n.domain,n.success?1:0,a,r,n.source)}catch(e){console.error(O.dim(`[hooks] persistCommandExperience: ${e instanceof Error?e.message:"unknown"}`))}}async function J(n){let{getUnifiedMemory:e}=await import("./unified-memory-2ETCY22B.js"),t=e();t.isInitialized()||await t.initialize();let o=t.getDatabase();try{o.pragma("busy_timeout = 60000")}catch{}let s=`exp-${Date.now()}-${M().slice(0,8)}`,r=`${n.agent}:${n.taskId}`,a=n.durationMs??0,c=n.success?1:0,i=a<100?1:a<500?.8:a<2e3?.6:a<5e3?.4:a<1e4?.2:.1,h=.25*c+.325+.1*i,d=null,p=0,m=0,u=o.transaction(()=>{o.prepare(`
8
+ `).run(s,n.task.slice(0,500),n.agent,n.domain,n.success?1:0,a,r,n.source),(async()=>{try{let{computeRealEmbedding:c}=await import("./real-embeddings-ZVEZVXVT.js"),i=`${n.domain}: ${n.task}`.slice(0,512),E=await c(i);o.prepare("UPDATE captured_experiences SET embedding = ?, embedding_dimension = ? WHERE id = ?").run(Buffer.from(new Float32Array(E).buffer),E.length,s)}catch{}})()}catch(e){console.error(O.dim(`[hooks] persistCommandExperience: ${e instanceof Error?e.message:"unknown"}`))}}async function V(n){let{getUnifiedMemory:e}=await import("./unified-memory-JVZZMZRE.js"),t=e();t.isInitialized()||await t.initialize();let o=t.getDatabase();try{o.pragma("busy_timeout = 60000")}catch{}let s=`exp-${Date.now()}-${q().slice(0,8)}`,r=`${n.agent}:${n.taskId}`,a=n.durationMs??0,c=n.success?1:0,i=a<100?1:a<500?.8:a<2e3?.6:a<5e3?.4:a<1e4?.2:.1,E=.25*c+.325+.1*i,d=null,p=0,m=0,l=o.transaction(()=>{o.prepare(`
9
9
  INSERT INTO captured_experiences
10
10
  (id, task, agent, domain, success, quality, duration_ms,
11
11
  model_tier, started_at, completed_at, source)
12
12
  VALUES (?, ?, ?, ?, ?, ?, ?, NULL, datetime('now'), datetime('now'), ?)
13
- `).run(s,r.slice(0,500),n.agent,n.domain??"general",n.success?1:0,h,a,"cli-hook-post-task"),o.prepare(`
13
+ `).run(s,r.slice(0,500),n.agent,n.domain??"general",n.success?1:0,E,a,"cli-hook-post-task"),o.prepare(`
14
14
  INSERT INTO experience_applications
15
15
  (id, experience_id, task, success, tokens_saved, feedback, applied_at)
16
16
  VALUES (?, ?, ?, ?, ?, ?, datetime('now'))
17
- `).run(`app-${Date.now()}-${M().slice(0,8)}`,s,r,n.success?1:0,0,`[Patch 060] post-task outcome: ${n.success?"success":"failure"}`);try{let l=o.prepare(`
17
+ `).run(`app-${Date.now()}-${q().slice(0,8)}`,s,r,n.success?1:0,0,`[Patch 060] post-task outcome: ${n.success?"success":"failure"}`);try{let u=o.prepare(`
18
18
  SELECT key, value FROM kv_store
19
19
  WHERE namespace = 'task-bridge'
20
20
  AND (expires_at IS NULL OR expires_at > strftime('%s','now') * 1000)
21
21
  ORDER BY created_at DESC
22
22
  LIMIT 1
23
- `).get();if(l?.value)try{d=JSON.parse(l.value)}catch{d=null}if(d&&Array.isArray(d.selectedPatternIds)&&d.selectedPatternIds.length>0){let b=d.estimatedTokenSavings&&d.selectedPatternIds.length?Math.round(d.estimatedTokenSavings/d.selectedPatternIds.length):0,D=o.prepare(`
23
+ `).get();if(u?.value)try{d=JSON.parse(u.value)}catch{d=null}if(d&&Array.isArray(d.selectedPatternIds)&&d.selectedPatternIds.length>0){let S=d.estimatedTokenSavings&&d.selectedPatternIds.length?Math.round(d.estimatedTokenSavings/d.selectedPatternIds.length):0,A=o.prepare(`
24
24
  INSERT INTO experience_applications
25
25
  (id, experience_id, task, success, tokens_saved, feedback, applied_at)
26
26
  VALUES (?, ?, ?, ?, ?, ?, datetime('now'))
27
- `);for(let C of d.selectedPatternIds)D.run(`app-${Date.now()}-${M().slice(0,8)}`,s,`${r}:pattern:${C}`,n.success?1:0,b,`[Patch 160+300] task-bridge pattern_id=${C} ts=${b}`);l&&o.prepare("DELETE FROM kv_store WHERE namespace='task-bridge' AND key = ?").run(l.key)}}catch(l){console.error(O.dim(`[hooks] post-task bridge: ${l instanceof Error?l.message:"unknown"}`))}let y=`traj-${Date.now()}-${M().slice(0,8)}`;o.prepare(`
27
+ `),M=o.prepare(`
28
+ UPDATE qe_patterns SET
29
+ usage_count = usage_count + 1,
30
+ successful_uses = successful_uses + ?,
31
+ success_rate = CAST(successful_uses + ? AS REAL) / CAST(usage_count + 1 AS REAL),
32
+ quality_score = ? * 0.3
33
+ + MIN(CAST(usage_count + 1 AS REAL) / 100.0, 1.0) * 0.2
34
+ + (CAST(successful_uses + ? AS REAL) / CAST(usage_count + 1 AS REAL)) * 0.5,
35
+ last_used_at = datetime('now'),
36
+ updated_at = datetime('now')
37
+ WHERE id = ?
38
+ `),Q=o.prepare("SELECT confidence FROM qe_patterns WHERE id = ?");for(let w of d.selectedPatternIds){A.run(`app-${Date.now()}-${q().slice(0,8)}`,s,`${r}:pattern:${w}`,n.success?1:0,S,`[Patch 160+300] task-bridge pattern_id=${w} ts=${S}`);try{let U=Q.get(w);if(U){let W=n.success?1:0;M.run(W,W,U.confidence,W,w)}}catch{}}u&&o.prepare("DELETE FROM kv_store WHERE namespace='task-bridge' AND key = ?").run(u.key)}}catch(u){console.error(O.dim(`[hooks] post-task bridge: ${u instanceof Error?u.message:"unknown"}`))}let f=`traj-${Date.now()}-${q().slice(0,8)}`;o.prepare(`
28
39
  INSERT INTO qe_trajectories (id, task, agent, domain, started_at, ended_at, success, steps_json)
29
40
  VALUES (?, ?, ?, ?, datetime('now'), datetime('now'), ?, ?)
30
- `).run(y,r,n.agent,n.domain??"general",n.success?1:0,JSON.stringify([{step:1,task:n.taskId,success:n.success}]));try{let l=o.prepare(`
41
+ `).run(f,r,n.agent,n.domain??"general",n.success?1:0,JSON.stringify([{step:1,task:n.taskId,success:n.success}]));try{let u=o.prepare(`
31
42
  SELECT id, task, agent, success, started_at, completed_at
32
43
  FROM captured_experiences
33
44
  WHERE consolidated_into IS NULL
34
45
  AND task LIKE ?
35
46
  AND started_at > datetime('now', '-1 hour')
36
47
  ORDER BY started_at ASC
37
- `).all(`%:${n.taskId}`);if(l.length>=2){let b=`traj-multi-${Date.now()}-${M().slice(0,8)}`,D=JSON.stringify(l.map((x,ke)=>({step:ke+1,task:x.task,agent:x.agent,success:!!x.success,started_at:x.started_at,completed_at:x.completed_at}))),C=l.every(x=>!!x.success);o.prepare(`
48
+ `).all(`%:${n.taskId}`);if(u.length>=2){let S=`traj-multi-${Date.now()}-${q().slice(0,8)}`,A=JSON.stringify(u.map((w,U)=>({step:U+1,task:w.task,agent:w.agent,success:!!w.success,started_at:w.started_at,completed_at:w.completed_at}))),M=u.every(w=>!!w.success);o.prepare(`
38
49
  INSERT INTO qe_trajectories (id, task, agent, domain, started_at, ended_at, success, steps_json)
39
50
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
40
- `).run(b,`multi:${n.taskId}`,n.agent,n.domain??"general",l[0].started_at,l[l.length-1].completed_at,C?1:0,D);let fe=l.map(()=>"?").join(",");o.prepare(`UPDATE captured_experiences SET consolidated_into = ? WHERE id IN (${fe})`).run(b,...l.map(x=>x.id)),p=l.length}}catch(l){console.error(O.dim(`[hooks] post-task stitch: ${l instanceof Error?l.message:"unknown"}`))}if(n.success)try{m=o.prepare(`
51
+ `).run(S,`multi:${n.taskId}`,n.agent,n.domain??"general",u[0].started_at,u[u.length-1].completed_at,M?1:0,A);let Q=u.map(()=>"?").join(",");o.prepare(`UPDATE captured_experiences SET consolidated_into = ? WHERE id IN (${Q})`).run(S,...u.map(w=>w.id)),p=u.length}}catch(u){console.error(O.dim(`[hooks] post-task stitch: ${u instanceof Error?u.message:"unknown"}`))}if(n.success)try{m=o.prepare(`
41
52
  UPDATE dream_insights
42
53
  SET applied = COALESCE(applied, 0) + 1
43
54
  WHERE id IN (
@@ -46,11 +57,11 @@ import{a as T,b as Z,c as X}from"./chunk-FT3MAIRW.js";import{a as ee,b as te}fro
46
57
  ORDER BY created_at DESC
47
58
  LIMIT 3
48
59
  )
49
- `).run().changes??0}catch{}});try{u()}catch(y){console.error(O.dim(`[hooks] persistTaskOutcome txn: ${y instanceof Error?y.message:"unknown"}`))}return{experienceId:s,qualityScore:h,bridge:d,stitchedSiblings:p,insightsApplied:m}}async function W(n){try{let{getUnifiedMemory:e}=await import("./unified-memory-2ETCY22B.js"),t=e();t.isInitialized()||await t.initialize();let o=t.getDatabase();try{o.pragma("busy_timeout = 60000")}catch{}let s=`${n.taskType}|${n.priority}|${n.domain||"any"}|${n.complexityBucket}`,r=n.agent,a=`q-learning:aqe-hook-router:${s}:${r}`,c=n.success?.1:-1,i=.1,h=.9,d=o.prepare(`
60
+ `).run().changes??0}catch{}});try{l()}catch(f){console.error(O.dim(`[hooks] persistTaskOutcome txn: ${f instanceof Error?f.message:"unknown"}`))}return(async()=>{try{let{computeRealEmbedding:f}=await import("./real-embeddings-ZVEZVXVT.js"),u=`${n.domain??"general"}: ${r}`.slice(0,512),S=await f(u);o.prepare("UPDATE captured_experiences SET embedding = ?, embedding_dimension = ? WHERE id = ?").run(Buffer.from(new Float32Array(S).buffer),S.length,s)}catch{}})(),{experienceId:s,qualityScore:E,bridge:d,stitchedSiblings:p,insightsApplied:m}}async function K(n){try{let{getUnifiedMemory:e}=await import("./unified-memory-JVZZMZRE.js"),t=e();t.isInitialized()||await t.initialize();let o=t.getDatabase();try{o.pragma("busy_timeout = 60000")}catch{}let s=`${n.taskType}|${n.priority}|${n.domain||"any"}|${n.complexityBucket}`,r=n.agent,a=`q-learning:aqe-hook-router:${s}:${r}`,c=n.success?.1:-1,i=.1,E=.9,d=o.prepare(`
50
61
  SELECT q_value FROM rl_q_values WHERE id = ?
51
62
  `).get(a),p=d&&typeof d.q_value=="number"?d.q_value:0,m=o.prepare(`
52
63
  SELECT MAX(q_value) AS m FROM rl_q_values WHERE state_key = ?
53
- `).get(s),u=m&&typeof m.m=="number"?m.m:0,y=p+i*(c+h*u-p);o.prepare(`
64
+ `).get(s),l=m&&typeof m.m=="number"?m.m:0,f=p+i*(c+E*l-p);o.prepare(`
54
65
  INSERT INTO rl_q_values
55
66
  (id, algorithm, agent_id, state_key, action_key, q_value, visits, last_reward, domain, created_at, updated_at)
56
67
  VALUES (?, 'q-learning', 'aqe-hook-router', ?, ?, ?, 1, ?, ?, datetime('now'), datetime('now'))
@@ -59,7 +70,7 @@ import{a as T,b as Z,c as X}from"./chunk-FT3MAIRW.js";import{a as ee,b as te}fro
59
70
  visits = visits + 1,
60
71
  last_reward = excluded.last_reward,
61
72
  updated_at = datetime('now')
62
- `).run(a,s,r,y,c,n.domain||"any")}catch(e){console.error(O.dim(`[hooks] q-learning update: ${e instanceof Error?e.message:"unknown"}`))}}async function G(n){try{let{getUnifiedMemory:e}=await import("./unified-memory-2ETCY22B.js"),t=e();t.isInitialized()||await t.initialize();let o=t.getDatabase();try{o.pragma("busy_timeout = 60000")}catch{}o.prepare(`
73
+ `).run(a,s,r,f,c,n.domain||"any")}catch(e){console.error(O.dim(`[hooks] q-learning update: ${e instanceof Error?e.message:"unknown"}`))}}async function Y(n){try{let{getUnifiedMemory:e}=await import("./unified-memory-JVZZMZRE.js"),t=e();t.isInitialized()||await t.initialize();let o=t.getDatabase();try{o.pragma("busy_timeout = 60000")}catch{}o.prepare(`
63
74
  UPDATE routing_outcomes
64
75
  SET success = ?, quality_score = ?, duration_ms = ?
65
76
  WHERE id IN (
@@ -69,7 +80,7 @@ import{a as T,b as Z,c as X}from"./chunk-FT3MAIRW.js";import{a as ee,b as te}fro
69
80
  ORDER BY (CASE WHEN used_agent = ? THEN 0 ELSE 1 END), created_at DESC
70
81
  LIMIT 1
71
82
  )
72
- `).run(n.success?1:0,n.qualityScore,n.durationMs,n.agent)}catch(e){console.error(O.dim(`[hooks] routing UPDATE: ${e instanceof Error?e.message:"unknown"}`))}}async function V(){let{getUnifiedMemory:n}=await import("./unified-memory-2ETCY22B.js"),e=n();e.isInitialized()||await e.initialize();let t=e.getDatabase();try{t.pragma("busy_timeout = 60000")}catch{}let o=new Set(t.prepare("PRAGMA table_info(captured_experiences)").all().map(i=>i.name)),s=[["consolidated_into","TEXT DEFAULT NULL"],["consolidation_count","INTEGER DEFAULT 1"],["quality_updated_at","TEXT DEFAULT NULL"],["reuse_success_count","INTEGER DEFAULT 0"],["reuse_failure_count","INTEGER DEFAULT 0"]];for(let[i,h]of s)o.has(i)||t.exec(`ALTER TABLE captured_experiences ADD COLUMN ${i} ${h}`);let r=t.prepare(`
83
+ `).run(n.success?1:0,n.qualityScore,n.durationMs,n.agent)}catch(e){console.error(O.dim(`[hooks] routing UPDATE: ${e instanceof Error?e.message:"unknown"}`))}}async function Z(){let{getUnifiedMemory:n}=await import("./unified-memory-JVZZMZRE.js"),e=n();e.isInitialized()||await e.initialize();let t=e.getDatabase();try{t.pragma("busy_timeout = 60000")}catch{}let o=new Set(t.prepare("PRAGMA table_info(captured_experiences)").all().map(i=>i.name)),s=[["consolidated_into","TEXT DEFAULT NULL"],["consolidation_count","INTEGER DEFAULT 1"],["quality_updated_at","TEXT DEFAULT NULL"],["reuse_success_count","INTEGER DEFAULT 0"],["reuse_failure_count","INTEGER DEFAULT 0"]];for(let[i,E]of s)o.has(i)||t.exec(`ALTER TABLE captured_experiences ADD COLUMN ${i} ${E}`);let r=t.prepare(`
73
84
  SELECT
74
85
  domain,
75
86
  agent,
@@ -86,7 +97,7 @@ import{a as T,b as Z,c as X}from"./chunk-FT3MAIRW.js";import{a as ee,b as te}fro
86
97
  HAVING cnt >= 3 AND avg_quality >= 0.5 AND success_rate >= 0.6
87
98
  ORDER BY avg_quality DESC
88
99
  LIMIT 50
89
- `).all();if(r.length===0)return 0;let{v4:a}=await import("./dist-node-QSLD5K6K.js"),c=0;for(let i of r)try{let h=new Date().toISOString().slice(0,7),d=`${i.agent}-${i.domain}-${h}`,p=t.prepare(`
100
+ `).all();if(r.length===0)return 0;let{v4:a}=await import("./dist-node-QGU7TJTW.js"),c=0;for(let i of r)try{let E=new Date().toISOString().slice(0,7),d=`${i.agent}-${i.domain}-${E}`,p=t.prepare(`
90
101
  SELECT id FROM qe_patterns
91
102
  WHERE qe_domain = ? AND name = ?
92
103
  LIMIT 1
@@ -98,44 +109,44 @@ import{a as T,b as Z,c as X}from"./chunk-FT3MAIRW.js";import{a as ee,b as te}fro
98
109
  quality_score = MIN(0.99, quality_score + 0.005),
99
110
  updated_at = datetime('now')
100
111
  WHERE id = ?
101
- `).run(i.cnt,i.successes,p.id);else{let m=a(),u=Math.min(.95,i.avg_quality*.8+i.success_rate*.2),y=u*.3+Math.min(i.cnt,100)/100*.2+i.success_rate*.5,l=`Auto-consolidated from ${i.cnt} experiences. Agent: ${i.agent}, success rate: ${(i.success_rate*100).toFixed(0)}%`,b=(i.sources||"").split(",").filter(Boolean);t.prepare(`
112
+ `).run(i.cnt,i.successes,p.id);else{let m=a(),l=Math.min(.95,i.avg_quality*.8+i.success_rate*.2),f=l*.3+Math.min(i.cnt,100)/100*.2+i.success_rate*.5,u=`Auto-consolidated from ${i.cnt} experiences. Agent: ${i.agent}, success rate: ${(i.success_rate*100).toFixed(0)}%`,S=(i.sources||"").split(",").filter(Boolean);t.prepare(`
102
113
  INSERT INTO qe_patterns (
103
114
  id, pattern_type, qe_domain, domain, name, description,
104
115
  confidence, usage_count, success_rate, quality_score, tier,
105
116
  template_json, context_json, created_at, successful_uses
106
117
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), ?)
107
- `).run(m,"workflow",i.domain,i.domain,d,l,u,i.cnt,i.success_rate,y,"short-term",JSON.stringify({type:"workflow",content:`${i.agent} pattern for ${i.domain}`,variables:[]}),JSON.stringify({tags:b,sourceType:"session-consolidation",extractedAt:new Date().toISOString()}),i.successes);let{ensurePatternEmbedding:D}=await import("./embed-and-insert-pattern-5UAFXNDX.js");await D(t,m,d,l,b),c++}t.prepare(`
118
+ `).run(m,"workflow",i.domain,i.domain,d,u,l,i.cnt,i.success_rate,f,"short-term",JSON.stringify({type:"workflow",content:`${i.agent} pattern for ${i.domain}`,variables:[]}),JSON.stringify({tags:S,sourceType:"session-consolidation",extractedAt:new Date().toISOString()}),i.successes);let{ensurePatternEmbedding:A}=await import("./embed-and-insert-pattern-ZVK7WSY2.js");await A(t,m,d,u,S),c++}t.prepare(`
108
119
  UPDATE captured_experiences
109
120
  SET application_count = application_count + 1
110
121
  WHERE domain = ? AND agent = ? AND application_count = 0
111
- `).run(i.domain,i.agent)}catch{}return c}var g={reasoningBank:null,hookRegistry:null,coherenceService:null,sessionId:null,initialized:!1,initializationPromise:null};async function E(){if(g.initializationPromise&&await g.initializationPromise,g.initialized&&g.reasoningBank&&g.hookRegistry)return{reasoningBank:g.reasoningBank,hookRegistry:g.hookRegistry};if(g.initializationPromise=he(),await g.initializationPromise,g.initializationPromise=null,!g.reasoningBank||!g.hookRegistry)throw new Error("Failed to initialize hooks system");return{reasoningBank:g.reasoningBank,hookRegistry:g.hookRegistry}}async function he(){if(!g.initialized)try{let n=_(),e=re.join(n,".agentic-qe"),t=await v(e);try{g.coherenceService=await ee(te),console.log(N.dim("[hooks] CoherenceService initialized with WASM engines"))}catch(a){console.log(N.dim(`[hooks] CoherenceService WASM unavailable, using fallback: ${a instanceof Error?a.message:"unknown"}`))}g.reasoningBank=F(t,void 0,{enableLearning:!0,enableGuidance:!0,enableRouting:!0,embeddingDimension:384,useONNXEmbeddings:!0},g.coherenceService??void 0);let o=1e4,s=g.reasoningBank.initialize(),r=new Promise((a,c)=>setTimeout(()=>c(new Error("ReasoningBank init timeout")),o));await Promise.race([s,r]);try{let{getSharedRvfDualWriter:a}=await import("./shared-rvf-dual-writer-QRNLSDS7.js"),c=await a();c&&g.reasoningBank.setRvfDualWriter(c)}catch(a){process.env.DEBUG&&console.debug("[hooks] RVF wiring skipped:",a instanceof Error?a.message:a)}g.hookRegistry=X(g.reasoningBank),g.initialized=!0,console.log(N.dim("[hooks] System initialized"))}catch(n){console.warn(N.yellow(`[hooks] Using fallback mode: ${n instanceof Error?n.message:"unknown error"}`));let e=Ee();g.reasoningBank=F(e,void 0,{enableLearning:!0,enableGuidance:!0,enableRouting:!0}),g.hookRegistry=new Z,g.hookRegistry.initialize(g.reasoningBank),g.initialized=!0}}function j(n){try{n.pragma("busy_timeout = 60000")}catch{}}async function v(n){let t=new Y({sqlite:{path:re.join(n,"memory.db"),walMode:!0,poolSize:3,busyTimeout:6e4},enableFallback:!0,defaultNamespace:"qe-patterns"}),o=t.initialize(),s=new Promise((r,a)=>setTimeout(()=>a(new Error("Backend init timeout")),5e3));return await Promise.race([o,s]),t}function Ee(){let n=new Map;return{initialize:async()=>{},dispose:async()=>{n.clear()},get:async e=>{let t=n.get(e);return t?t.value:void 0},set:async(e,t,o)=>{n.set(e,{value:t})},delete:async e=>n.delete(e),has:async e=>n.has(e),search:async(e,t)=>{let o=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(o.replace(/\*/g,".*"));return Array.from(n.keys()).filter(r=>s.test(r))},vectorSearch:async(e,t)=>[],storeVector:async(e,t,o)=>{},count:async e=>{let t=0,o=`${e}:`;for(let s of n.keys())s.startsWith(o)&&t++;return t},hasCodeIntelligenceIndex:async()=>{let e="code-intelligence:kg:";for(let t of n.keys())if(t.startsWith(e))return!0;return!1}}}function f(n){console.log(JSON.stringify(n,null,2))}function $(n){console.log(N.green("\u2713"),n)}function S(n){console.error(N.red("\u2717"),n)}function z(n){if(n.length===0){console.log(N.dim(" No specific guidance"));return}n.forEach((e,t)=>{console.log(N.cyan(` ${t+1}.`),e)})}import P from"chalk";import Se from"node:path";q();function ae(n){n.command("pre-edit").description("Get context and guidance before editing a file").requiredOption("-f, --file <path>","File path to edit").option("-o, --operation <type>","Operation type: create, update, delete, refactor","update").option("--json","Output as JSON").action(async e=>{try{let{hookRegistry:t}=await E(),s=(await t.emit(T.PreTestGeneration,{targetFile:e.file,testType:"unit",operation:e.operation}))[0]||{success:!0,guidance:[],routing:null};if(e.json){let r=s.guidance||[],c=[s.routing?.recommendedAgent?`Recommended agent: ${s.routing.recommendedAgent} (${(s.routing.confidence*100).toFixed(0)}% confidence).`:"",...r.map(i=>i)].filter(Boolean).join(" ");f({hookSpecificOutput:{hookEventName:"PreToolUse",additionalContext:c||void 0},file:e.file,operation:e.operation,patterns:s.routing?.patterns?.length||0})}else console.log(P.bold(`
112
- \u{1F4DD} Pre-Edit Analysis`)),console.log(P.dim(` File: ${e.file}`)),console.log(P.dim(` Operation: ${e.operation}`)),s.routing&&(console.log(P.bold(`
113
- \u{1F3AF} Recommended Agent:`),P.cyan(s.routing.recommendedAgent)),console.log(P.dim(` Confidence: ${(s.routing.confidence*100).toFixed(1)}%`))),console.log(P.bold(`
114
- \u{1F4A1} Guidance:`)),z(s.guidance||[]);return}catch(t){throw S(`pre-edit failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("post-edit").description("Record editing outcome for pattern learning").requiredOption("-f, --file <path>","File path that was edited").option("--success","Edit was successful").option("--failure","Edit failed").option("--pattern-id <id>","Pattern ID that was applied").option("--json","Output as JSON").action(async e=>{try{let{hookRegistry:t}=await E(),o=e.success||!e.failure,s=e.file||"",r=s.split("/").pop()||"unknown",c=/\.(test|spec)\.(ts|js|tsx|jsx)$/.test(r)?"test-generation":"code-intelligence",i=e.patternId||`edit:${c}:${r}`,d=(await t.emit(T.PostTestGeneration,{targetFile:e.file,success:o,patternId:i,generatedTests:null,testCount:0}))[0]||{success:!0,patternsLearned:0};try{let{reasoningBank:m}=await E();await m.recordOutcome({patternId:i,success:o,metrics:{executionTimeMs:0},feedback:`Edit ${o?"succeeded":"failed"}: ${s}`})}catch{}try{await L({task:`edit: ${s}`,agent:"cli-hook",domain:c,success:o,source:"cli-hook-post-edit"})}catch{}let p=!1;try{let m=_(),u=Se.join(m,".agentic-qe"),y=await v(u);await A(y)}catch{}e.json?f({success:!0,file:e.file,editSuccess:o,patternsLearned:d.patternsLearned||0,dreamTriggered:p}):($(`Recorded edit outcome for ${e.file}`),d.patternsLearned&&console.log(P.green(` Patterns learned: ${d.patternsLearned}`)));return}catch(t){throw S(`post-edit failed: ${t instanceof Error?t.message:"unknown"}`),t}})}q();import{randomUUID as we}from"crypto";import R from"chalk";import be from"node:path";async function _e(n=500){return process.stdin.isTTY?"":new Promise(e=>{let t="",o=setTimeout(()=>{process.stdin.removeAllListeners(),process.stdin.pause(),e(t)},n);process.stdin.setEncoding("utf8"),process.stdin.on("data",s=>{t+=s}),process.stdin.on("end",()=>{clearTimeout(o),e(t)}),process.stdin.on("error",()=>{clearTimeout(o),e(t)}),process.stdin.resume()})}function Te(n){if(!n.trim())return"";let e;try{e=JSON.parse(n)}catch{return n.trim()}let t=[e.prompt,e.user_prompt,e.command,e.tool_input?.prompt,e.tool_input?.description,e.toolInput?.prompt,e.toolInput?.description];for(let o of t)if(typeof o=="string"&&o.trim())return o;return""}function ie(n){n.command("route").description("Route a task to the optimal QE agent").option("-t, --task <description>","Task description (falls back to stdin event JSON)").option("-d, --domain <domain>","Target QE domain hint").option("-c, --capabilities <caps...>","Required capabilities").option("--json","Output as JSON").action(async e=>{try{let t=e.task??"";if(!t.trim()){let c=await _e();t=Te(c)}if(!t.trim())throw new Error("No task provided. Pass --task <description> or pipe a Claude Code hook event JSON to stdin.");let{reasoningBank:o}=await E(),s={task:t,domain:e.domain,capabilities:e.capabilities},r=await o.routeTask(s);if(!r.success)throw new Error(r.error.message);let a=r.value;e.json?f({recommendedAgent:a.recommendedAgent,confidence:a.confidence,alternatives:a.alternatives,domains:a.domains,patternCount:a.patterns.length,guidance:a.guidance,reasoning:a.reasoning}):(console.log(R.bold(`
115
- \u{1F3AF} Task Routing Result`)),console.log(R.dim(` Task: "${t}"`)),console.log(R.bold(`
116
- \u{1F464} Recommended Agent:`),R.cyan(a.recommendedAgent)),console.log(R.dim(` Confidence: ${(a.confidence*100).toFixed(1)}%`)),a.alternatives.length>0&&(console.log(R.bold(`
117
- \u{1F504} Alternatives:`)),a.alternatives.forEach(c=>{console.log(R.dim(` - ${c.agent}: ${(c.score*100).toFixed(1)}%`))})),console.log(R.bold(`
118
- \u{1F4C2} Detected Domains:`),a.domains.join(", ")),console.log(R.bold(`
119
- \u{1F4A1} Guidance:`)),z(a.guidance),console.log(R.bold(`
120
- \u{1F4D6} Reasoning:`),R.dim(a.reasoning)));try{let{getUnifiedMemory:c}=await import("./unified-memory-2ETCY22B.js"),i=c();i.isInitialized()||await i.initialize();let h=i.getDatabase();j(h);let d=`route-${Date.now()}-${we().slice(0,8)}`,p=a.confidence<.5;h.prepare(`
122
+ `).run(i.domain,i.agent)}catch{}return c}var g={reasoningBank:null,hookRegistry:null,coherenceService:null,sessionId:null,initialized:!1,initializationPromise:null};async function h(){if(g.initializationPromise&&await g.initializationPromise,g.initialized&&g.reasoningBank&&g.hookRegistry)return{reasoningBank:g.reasoningBank,hookRegistry:g.hookRegistry};if(g.initializationPromise=he(),await g.initializationPromise,g.initializationPromise=null,!g.reasoningBank||!g.hookRegistry)throw new Error("Failed to initialize hooks system");return{reasoningBank:g.reasoningBank,hookRegistry:g.hookRegistry}}async function he(){if(!g.initialized)try{let n=T(),e=ce.join(n,".agentic-qe"),t=await $(e);try{g.coherenceService=await oe(se),console.log(P.dim("[hooks] CoherenceService initialized with WASM engines"))}catch(a){console.log(P.dim(`[hooks] CoherenceService WASM unavailable, using fallback: ${a instanceof Error?a.message:"unknown"}`))}g.reasoningBank=J(t,void 0,{enableLearning:!0,enableGuidance:!0,enableRouting:!0,embeddingDimension:384,useONNXEmbeddings:!0},g.coherenceService??void 0);let o=1e4,s=g.reasoningBank.initialize(),r=new Promise((a,c)=>setTimeout(()=>c(new Error("ReasoningBank init timeout")),o));await Promise.race([s,r]);try{let{getSharedRvfDualWriter:a}=await import("./shared-rvf-dual-writer-EGP3BYIY.js"),c=await a();c&&g.reasoningBank.setRvfDualWriter(c)}catch(a){process.env.DEBUG&&console.debug("[hooks] RVF wiring skipped:",a instanceof Error?a.message:a)}g.hookRegistry=ne(g.reasoningBank),g.initialized=!0,console.log(P.dim("[hooks] System initialized"))}catch(n){console.warn(P.yellow(`[hooks] Using fallback mode: ${n instanceof Error?n.message:"unknown error"}`));let e=Se();g.reasoningBank=J(e,void 0,{enableLearning:!0,enableGuidance:!0,enableRouting:!0}),g.hookRegistry=new te,g.hookRegistry.initialize(g.reasoningBank),g.initialized=!0}}function L(n){try{n.pragma("busy_timeout = 60000")}catch{}}async function $(n){let t=new ee({sqlite:{path:ce.join(n,"memory.db"),walMode:!0,poolSize:3,busyTimeout:6e4},enableFallback:!0,defaultNamespace:"qe-patterns"}),o=t.initialize(),s=new Promise((r,a)=>setTimeout(()=>a(new Error("Backend init timeout")),5e3));return await Promise.race([o,s]),t}function Se(){let n=new Map;return{initialize:async()=>{},dispose:async()=>{n.clear()},get:async e=>{let t=n.get(e);return t?t.value:void 0},set:async(e,t,o)=>{n.set(e,{value:t})},delete:async e=>n.delete(e),has:async e=>n.has(e),search:async(e,t)=>{let o=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(o.replace(/\*/g,".*"));return Array.from(n.keys()).filter(r=>s.test(r))},vectorSearch:async(e,t)=>[],storeVector:async(e,t,o)=>{},count:async e=>{let t=0,o=`${e}:`;for(let s of n.keys())s.startsWith(o)&&t++;return t},hasCodeIntelligenceIndex:async()=>{let e="code-intelligence:kg:";for(let t of n.keys())if(t.startsWith(e))return!0;return!1}}}function k(n){console.log(JSON.stringify(n,null,2))}function D(n){console.log(P.green("\u2713"),n)}function _(n){console.error(P.red("\u2717"),n)}function z(n){if(n.length===0){console.log(P.dim(" No specific guidance"));return}n.forEach((e,t)=>{console.log(P.cyan(` ${t+1}.`),e)})}import N from"chalk";import we from"node:path";C();function de(n){n.command("pre-edit").description("Get context and guidance before editing a file").requiredOption("-f, --file <path>","File path to edit").option("-o, --operation <type>","Operation type: create, update, delete, refactor","update").option("--json","Output as JSON").action(async e=>{try{let{hookRegistry:t}=await h(),s=(await t.emit(R.PreTestGeneration,{targetFile:e.file,testType:"unit",operation:e.operation}))[0]||{success:!0,guidance:[],routing:null};if(e.json){let r=s.guidance||[],c=[s.routing?.recommendedAgent?`Recommended agent: ${s.routing.recommendedAgent} (${(s.routing.confidence*100).toFixed(0)}% confidence).`:"",...r.map(i=>i)].filter(Boolean).join(" ");k({hookSpecificOutput:{hookEventName:"PreToolUse",additionalContext:c||void 0},file:e.file,operation:e.operation,patterns:s.routing?.patterns?.length||0})}else console.log(N.bold(`
123
+ \u{1F4DD} Pre-Edit Analysis`)),console.log(N.dim(` File: ${e.file}`)),console.log(N.dim(` Operation: ${e.operation}`)),s.routing&&(console.log(N.bold(`
124
+ \u{1F3AF} Recommended Agent:`),N.cyan(s.routing.recommendedAgent)),console.log(N.dim(` Confidence: ${(s.routing.confidence*100).toFixed(1)}%`))),console.log(N.bold(`
125
+ \u{1F4A1} Guidance:`)),z(s.guidance||[]);return}catch(t){throw _(`pre-edit failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("post-edit").description("Record editing outcome for pattern learning").requiredOption("-f, --file <path>","File path that was edited").option("--success","Edit was successful").option("--failure","Edit failed").option("--pattern-id <id>","Pattern ID that was applied").option("--json","Output as JSON").action(async e=>{try{let{hookRegistry:t}=await h(),o=e.success||!e.failure,s=e.file||"",r=s.split("/").pop()||"unknown",c=/\.(test|spec)\.(ts|js|tsx|jsx)$/.test(r)?"test-generation":"code-intelligence",i=e.patternId||`edit:${c}:${r}`,d=(await t.emit(R.PostTestGeneration,{targetFile:e.file,success:o,patternId:i,generatedTests:null,testCount:0}))[0]||{success:!0,patternsLearned:0};try{let{reasoningBank:m}=await h();await m.recordOutcome({patternId:i,success:o,metrics:{executionTimeMs:0},feedback:`Edit ${o?"succeeded":"failed"}: ${s}`})}catch{}try{await j({task:`edit: ${s}`,agent:"cli-hook",domain:c,success:o,source:"cli-hook-post-edit"})}catch{}let p=!1;try{let m=T(),l=we.join(m,".agentic-qe"),f=await $(l);await x(f)}catch{}e.json?k({success:!0,file:e.file,editSuccess:o,patternsLearned:d.patternsLearned||0,dreamTriggered:p}):(D(`Recorded edit outcome for ${e.file}`),d.patternsLearned&&console.log(N.green(` Patterns learned: ${d.patternsLearned}`)));return}catch(t){throw _(`post-edit failed: ${t instanceof Error?t.message:"unknown"}`),t}})}C();import{randomUUID as _e}from"crypto";import v from"chalk";import be from"node:path";async function Te(n=500){return process.stdin.isTTY?"":new Promise(e=>{let t="",o=setTimeout(()=>{process.stdin.removeAllListeners(),process.stdin.pause(),e(t)},n);process.stdin.setEncoding("utf8"),process.stdin.on("data",s=>{t+=s}),process.stdin.on("end",()=>{clearTimeout(o),e(t)}),process.stdin.on("error",()=>{clearTimeout(o),e(t)}),process.stdin.resume()})}function Re(n){if(!n.trim())return"";let e;try{e=JSON.parse(n)}catch{return n.trim()}let t=[e.prompt,e.user_prompt,e.command,e.tool_input?.prompt,e.tool_input?.description,e.toolInput?.prompt,e.toolInput?.description];for(let o of t)if(typeof o=="string"&&o.trim())return o;return""}function me(n){n.command("route").description("Route a task to the optimal QE agent").option("-t, --task <description>","Task description (falls back to stdin event JSON)").option("-d, --domain <domain>","Target QE domain hint").option("-c, --capabilities <caps...>","Required capabilities").option("--json","Output as JSON").action(async e=>{try{let t=e.task??"";if(!t.trim()){let c=await Te();t=Re(c)}if(!t.trim())throw new Error("No task provided. Pass --task <description> or pipe a Claude Code hook event JSON to stdin.");let{reasoningBank:o}=await h(),s={task:t,domain:e.domain,capabilities:e.capabilities},r=await o.routeTask(s);if(!r.success)throw new Error(r.error.message);let a=r.value;e.json?k({recommendedAgent:a.recommendedAgent,confidence:a.confidence,alternatives:a.alternatives,domains:a.domains,patternCount:a.patterns.length,guidance:a.guidance,reasoning:a.reasoning}):(console.log(v.bold(`
126
+ \u{1F3AF} Task Routing Result`)),console.log(v.dim(` Task: "${t}"`)),console.log(v.bold(`
127
+ \u{1F464} Recommended Agent:`),v.cyan(a.recommendedAgent)),console.log(v.dim(` Confidence: ${(a.confidence*100).toFixed(1)}%`)),a.alternatives.length>0&&(console.log(v.bold(`
128
+ \u{1F504} Alternatives:`)),a.alternatives.forEach(c=>{console.log(v.dim(` - ${c.agent}: ${(c.score*100).toFixed(1)}%`))})),console.log(v.bold(`
129
+ \u{1F4C2} Detected Domains:`),a.domains.join(", ")),console.log(v.bold(`
130
+ \u{1F4A1} Guidance:`)),z(a.guidance),console.log(v.bold(`
131
+ \u{1F4D6} Reasoning:`),v.dim(a.reasoning)));try{let{getUnifiedMemory:c}=await import("./unified-memory-JVZZMZRE.js"),i=c();i.isInitialized()||await i.initialize();let E=i.getDatabase();L(E);let d=`route-${Date.now()}-${_e().slice(0,8)}`,p=a.confidence<.5;E.prepare(`
121
132
  INSERT OR REPLACE INTO routing_outcomes (
122
133
  id, task_json, decision_json, used_agent,
123
134
  followed_recommendation, success, quality_score,
124
135
  duration_ms, error
125
136
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
126
- `).run(d,JSON.stringify({description:t,domain:e.domain}),JSON.stringify({recommended:a.recommendedAgent,confidence:a.confidence,alternatives:a.alternatives,lowConfidence:p}),a.recommendedAgent,1,0,-1,0,p?"low-confidence":null);let m=_(),u=be.join(m,".agentic-qe"),y=await v(u);await A(y)}catch(c){console.error(R.dim(`[hooks] route persist: ${c instanceof Error?c.message:"unknown"}`))}return}catch(t){throw S(`route failed: ${t instanceof Error?t.message:"unknown"}`),t}})}import k from"chalk";ye();function ce(n){n.command("stats").description("Display hooks system statistics").option("--json","Output as JSON").action(async e=>{try{let{reasoningBank:t}=await E(),o=await t.getStats();if(e.json)f(o);else{console.log(k.bold(`
137
+ `).run(d,JSON.stringify({description:t,domain:e.domain}),JSON.stringify({recommended:a.recommendedAgent,confidence:a.confidence,alternatives:a.alternatives,lowConfidence:p}),a.recommendedAgent,1,0,-1,0,p?"low-confidence":null);let m=T(),l=be.join(m,".agentic-qe"),f=await $(l);await x(f)}catch(c){console.error(v.dim(`[hooks] route persist: ${c instanceof Error?c.message:"unknown"}`))}return}catch(t){throw _(`route failed: ${t instanceof Error?t.message:"unknown"}`),t}})}import y from"chalk";Ee();function ue(n){n.command("stats").description("Display hooks system statistics").option("--json","Output as JSON").action(async e=>{try{let{reasoningBank:t}=await h(),o=await t.getStats();if(e.json)k(o);else{console.log(y.bold(`
127
138
  \u{1F4CA} Hooks System Statistics
128
- `)),console.log(k.bold("Patterns:")),console.log(` Total: ${k.cyan(o.totalPatterns)}`),console.log(` Short-term: ${o.patternStoreStats.byTier.shortTerm}`),console.log(` Long-term: ${o.patternStoreStats.byTier.longTerm}`),console.log(k.bold(`
129
- By Domain:`));for(let[s,r]of Object.entries(o.byDomain))r>0&&console.log(` ${s}: ${r}`);console.log(k.bold(`
130
- Routing:`)),console.log(` Requests: ${o.routingRequests}`),console.log(` Avg Confidence: ${(o.avgRoutingConfidence*100).toFixed(1)}%`),console.log(k.bold(`
131
- Learning:`)),console.log(` Outcomes: ${o.learningOutcomes}`),console.log(` Success Rate: ${(o.patternSuccessRate*100).toFixed(1)}%`),console.log(k.bold(`
132
- Search Performance:`)),console.log(` Operations: ${o.patternStoreStats.searchOperations}`),console.log(` Avg Latency: ${o.patternStoreStats.avgSearchLatencyMs.toFixed(2)}ms`),console.log(` HNSW Native: ${o.patternStoreStats.hnswStats.nativeAvailable?"\u2713":"\u2717"}`)}}catch(t){throw S(`stats failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("list").description("List all registered QE hook events").option("--json","Output as JSON").action(async e=>{try{let{hookRegistry:t}=await E(),o=t.getRegisteredEvents();if(e.json)f({events:o,totalEvents:Object.keys(T).length,registeredEvents:o.length});else{console.log(k.bold(`
139
+ `)),console.log(y.bold("Patterns:")),console.log(` Total: ${y.cyan(o.totalPatterns)}`),console.log(` Short-term: ${o.patternStoreStats.byTier.shortTerm}`),console.log(` Long-term: ${o.patternStoreStats.byTier.longTerm}`),console.log(y.bold(`
140
+ By Domain:`));for(let[s,r]of Object.entries(o.byDomain))r>0&&console.log(` ${s}: ${r}`);console.log(y.bold(`
141
+ Routing:`)),console.log(` Requests: ${o.routingRequests}`),console.log(` Avg Confidence: ${(o.avgRoutingConfidence*100).toFixed(1)}%`),console.log(y.bold(`
142
+ Learning:`)),console.log(` Outcomes: ${o.learningOutcomes}`),console.log(` Success Rate: ${(o.patternSuccessRate*100).toFixed(1)}%`),console.log(y.bold(`
143
+ Search Performance:`)),console.log(` Operations: ${o.patternStoreStats.searchOperations}`),console.log(` Avg Latency: ${o.patternStoreStats.avgSearchLatencyMs.toFixed(2)}ms`),console.log(` HNSW Native: ${o.patternStoreStats.hnswStats.nativeAvailable?"\u2713":"\u2717"}`)}}catch(t){throw _(`stats failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("list").description("List all registered QE hook events").option("--json","Output as JSON").action(async e=>{try{let{hookRegistry:t}=await h(),o=t.getRegisteredEvents();if(e.json)k({events:o,totalEvents:Object.keys(R).length,registeredEvents:o.length});else{console.log(y.bold(`
133
144
  \u{1F4CB} Registered QE Hook Events
134
- `)),console.log(k.bold("All Available Events:"));for(let[s,r]of Object.entries(T)){let c=o.includes(r)?k.green("\u2713"):k.dim("\u25CB");console.log(` ${c} ${s}: ${k.dim(r)}`)}console.log(k.dim(`
135
- Registered: ${o.length}/${Object.keys(T).length}`))}}catch(t){throw S(`list failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("emit").description("Emit a QE hook event").requiredOption("-e, --event <name>","Event name (e.g., qe:pattern-applied)").option("-d, --data <json>","Event data as JSON","{}").option("--json","Output as JSON").action(async e=>{try{let{hookRegistry:t}=await E(),o;try{o=K(e.data)}catch{throw new Error(`Invalid JSON data: ${e.data}`)}let s=await t.emit(e.event,o);e.json?f({event:e.event,results:s}):(console.log(k.bold(`
136
- \u{1F4E1} Hook Event Emitted`)),console.log(k.dim(` Event: ${e.event}`)),console.log(k.dim(` Handlers: ${s.length}`)),s.forEach((r,a)=>{let c=r.success?k.green("\u2713"):k.red("\u2717");console.log(` ${c} Handler ${a+1}: ${r.success?"success":r.error}`),r.patternsLearned&&console.log(k.green(` Patterns learned: ${r.patternsLearned}`))}))}catch(t){throw S(`emit failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("learn").description("Store a new pattern in the reasoning bank").requiredOption("-n, --name <name>","Pattern name").requiredOption("-d, --description <desc>","Pattern description").option("-t, --type <type>","Pattern type","test-template").option("--domain <domain>","QE domain").option("--tags <tags...>","Pattern tags").option("--json","Output as JSON").action(async e=>{try{let{reasoningBank:t}=await E(),o=await t.storePattern({patternType:e.type,name:e.name,description:e.description,template:{type:"prompt",content:e.description,variables:[]},context:{tags:e.tags||[]}});if(!o.success)throw new Error(o.error.message);let s=o.value;e.json?f({success:!0,pattern:{id:s.id,name:s.name,type:s.patternType,domain:s.qeDomain}}):($(`Pattern stored: ${s.name}`),console.log(k.dim(` ID: ${s.id}`)),console.log(k.dim(` Domain: ${s.qeDomain}`)),console.log(k.dim(` Tier: ${s.tier}`)))}catch(t){throw S(`learn failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("search").description("Search for patterns in the reasoning bank").requiredOption("-q, --query <query>","Search query").option("-l, --limit <n>","Maximum results","10").option("-d, --domain <domain>","Filter by domain").option("--json","Output as JSON").action(async e=>{try{let{reasoningBank:t}=await E(),o=await t.searchPatterns(e.query,{limit:parseInt(e.limit,10),domain:e.domain});if(!o.success)throw new Error(o.error.message);let s=o.value;e.json?f({query:e.query,total:s.length,patterns:s.map(r=>({id:r.pattern.id,name:r.pattern.name,score:r.score,domain:r.pattern.qeDomain,matchType:r.matchType}))}):(console.log(k.bold(`
145
+ `)),console.log(y.bold("All Available Events:"));for(let[s,r]of Object.entries(R)){let c=o.includes(r)?y.green("\u2713"):y.dim("\u25CB");console.log(` ${c} ${s}: ${y.dim(r)}`)}console.log(y.dim(`
146
+ Registered: ${o.length}/${Object.keys(R).length}`))}}catch(t){throw _(`list failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("emit").description("Emit a QE hook event").requiredOption("-e, --event <name>","Event name (e.g., qe:pattern-applied)").option("-d, --data <json>","Event data as JSON","{}").option("--json","Output as JSON").action(async e=>{try{let{hookRegistry:t}=await h(),o;try{o=X(e.data)}catch{throw new Error(`Invalid JSON data: ${e.data}`)}let s=await t.emit(e.event,o);e.json?k({event:e.event,results:s}):(console.log(y.bold(`
147
+ \u{1F4E1} Hook Event Emitted`)),console.log(y.dim(` Event: ${e.event}`)),console.log(y.dim(` Handlers: ${s.length}`)),s.forEach((r,a)=>{let c=r.success?y.green("\u2713"):y.red("\u2717");console.log(` ${c} Handler ${a+1}: ${r.success?"success":r.error}`),r.patternsLearned&&console.log(y.green(` Patterns learned: ${r.patternsLearned}`))}))}catch(t){throw _(`emit failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("learn").description("Store a new pattern in the reasoning bank").requiredOption("-n, --name <name>","Pattern name").requiredOption("-d, --description <desc>","Pattern description").option("-t, --type <type>","Pattern type","test-template").option("--domain <domain>","QE domain").option("--tags <tags...>","Pattern tags").option("--json","Output as JSON").action(async e=>{try{let{reasoningBank:t}=await h(),o=await t.storePattern({patternType:e.type,name:e.name,description:e.description,template:{type:"prompt",content:e.description,variables:[]},context:{tags:e.tags||[]}});if(!o.success)throw new Error(o.error.message);let s=o.value;e.json?k({success:!0,pattern:{id:s.id,name:s.name,type:s.patternType,domain:s.qeDomain}}):(D(`Pattern stored: ${s.name}`),console.log(y.dim(` ID: ${s.id}`)),console.log(y.dim(` Domain: ${s.qeDomain}`)),console.log(y.dim(` Tier: ${s.tier}`)))}catch(t){throw _(`learn failed: ${t instanceof Error?t.message:"unknown"}`),t}}),n.command("search").description("Search for patterns in the reasoning bank").requiredOption("-q, --query <query>","Search query").option("-l, --limit <n>","Maximum results","10").option("-d, --domain <domain>","Filter by domain").option("--json","Output as JSON").action(async e=>{try{let{reasoningBank:t}=await h(),o=await t.searchPatterns(e.query,{limit:parseInt(e.limit,10),domain:e.domain});if(!o.success)throw new Error(o.error.message);let s=o.value;e.json?k({query:e.query,total:s.length,patterns:s.map(r=>({id:r.pattern.id,name:r.pattern.name,score:r.score,domain:r.pattern.qeDomain,matchType:r.matchType}))}):(console.log(y.bold(`
137
148
  \u{1F50D} Search Results for "${e.query}"
138
- `)),s.length===0?console.log(k.dim(" No patterns found")):s.forEach((r,a)=>{console.log(`${k.cyan(`${a+1}.`)} ${r.pattern.name} ${k.dim(`(${(r.score*100).toFixed(1)}%)`)}`),console.log(k.dim(` Domain: ${r.pattern.qeDomain}`)),console.log(k.dim(` Match: ${r.matchType}`)),console.log(k.dim(` ID: ${r.pattern.id}`)),console.log()}),console.log(k.dim(`Found ${s.length} pattern(s)`)))}catch(t){throw S(`search failed: ${t instanceof Error?t.message:"unknown"}`),t}})}q();import B from"chalk";import Re from"node:path";function de(n){n.command("session-start").description("Initialize session state when Claude Code session starts").option("-s, --session-id <id>","Session ID").option("--json","Output as JSON").action(async e=>{try{let t=e.sessionId||`session-${Date.now()}`;g.sessionId=t;let{reasoningBank:o}=await E(),s=await o.getStats(),r=_(),a=Re.join(r,".agentic-qe"),c=await v(a),i=await c.get(I),h=!i||!i.sessionStartTime;i?(i.sessionStartTime=new Date().toISOString(),i.totalDreamsThisSession=0):i={lastDreamTime:null,experienceCount:0,sessionStartTime:new Date().toISOString(),totalDreamsThisSession:0},await c.set(I,i);let d=[];d.push(`AQE Learning: ${s.totalPatterns} patterns loaded`);let p=Object.entries(s.byDomain).filter(([,u])=>u>0).sort(([,u],[,y])=>y-u).slice(0,5);p.length>0&&d.push(`Top domains: ${p.map(([u,y])=>`${u}(${y})`).join(", ")}`),s.patternSuccessRate>0&&d.push(`Pattern success rate: ${(s.patternSuccessRate*100).toFixed(0)}%`),s.routingRequests>0&&d.push(`Routing confidence: ${(s.avgRoutingConfidence*100).toFixed(0)}% across ${s.routingRequests} requests`);let m=d.join(". ")+".";e.json?f({hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:m},sessionId:t,initialized:!0,patternsLoaded:s.totalPatterns,dreamScheduler:{enabled:!0,lastDreamTime:i.lastDreamTime,pendingExperiences:i.experienceCount}}):($(`Session started: ${t}`),console.log(B.dim(` Patterns loaded: ${s.totalPatterns}`)),console.log(B.dim(` Dream scheduler: enabled (${i.experienceCount} pending experiences)`)));return}catch(t){e.json&&f({success:!1,error:t instanceof Error?t.message:"unknown"});return}}),n.command("session-end").description("Save session state when Claude Code session ends").option("--save-state","Save learning state to disk").option("--export-metrics","Export session metrics").option("--json","Output as JSON").action(async e=>{try{let t=g.sessionId||"unknown",o=null;if(g.initialized&&g.reasoningBank)try{o=await g.reasoningBank.getStats()}catch{}let s=0;try{s=await V()}catch{}if(e.json){let r=o?`Session complete: ${o.totalPatterns} patterns, ${o.routingRequests} routings, ${(o.patternSuccessRate*100).toFixed(0)}% success rate`:"Session complete";f({continue:!0,sessionId:t,stateSaved:e.saveState||!1,metricsExported:e.exportMetrics||!1,patternsConsolidated:s,finalStats:o?{patternsLearned:o.totalPatterns,routingRequests:o.routingRequests,successRate:o.patternSuccessRate}:null})}else $(`Session ended: ${t}`),o&&(console.log(B.dim(` Patterns: ${o.totalPatterns}`)),console.log(B.dim(` Routing requests: ${o.routingRequests}`))),s>0&&console.log(B.dim(` Patterns consolidated: ${s}`));return}catch(t){e.json&&f({success:!1,error:t instanceof Error?t.message:"unknown"});return}})}import{createHash as ve,randomUUID as $e}from"node:crypto";import w from"chalk";import De from"node:path";q();var xe="task-bridge",Ae=6e5,me=.5;function Oe(n){let e=n.toLowerCase();return/\bgenerate[- ]?test|\btest[- ]?gen|\bgenerate.+spec/.test(e)?"test-generation":/\bcoverage|\banalyze.+cover/.test(e)?"coverage-analysis":/\bquality|\bassess|\baudit/.test(e)?"quality-assessment":/\bsecurity|\bvulnerab|\bcompliance/.test(e)?"security-compliance":/\bdefect|\bbug|\bdiagnos/.test(e)?"defect-intelligence":/\brequirement|\bspec\b/.test(e)?"requirements-validation":/\brefactor|\brewrite|\boptim/.test(e)?"refactoring":/\btest|\brun.+test/.test(e)?"test-execution":"unknown"}function Ie(n){return ve("sha256").update(n).digest("hex").slice(0,16)}function ue(n){n.command("pre-task").description("Get context and guidance before spawning a Task agent").option("--task-id <id>","Task identifier").option("-d, --description <desc>","Task description").option("--json","Output as JSON").action(async e=>{try{let{reasoningBank:t}=await E(),o=null;if(e.description){let d=await t.routeTask({task:e.description});d.success&&(o=d.value)}let s=(o?.patterns??[]).slice(0,5).map(d=>d?.id).filter(d=>typeof d=="string"),r=null,a=[],c=0,i=null;try{let d=U();d.isInitialized()||await d.initialize();let p=d.getDatabase();j(p);try{let m=p.prepare(`
149
+ `)),s.length===0?console.log(y.dim(" No patterns found")):s.forEach((r,a)=>{console.log(`${y.cyan(`${a+1}.`)} ${r.pattern.name} ${y.dim(`(${(r.score*100).toFixed(1)}%)`)}`),console.log(y.dim(` Domain: ${r.pattern.qeDomain}`)),console.log(y.dim(` Match: ${r.matchType}`)),console.log(y.dim(` ID: ${r.pattern.id}`)),console.log()}),console.log(y.dim(`Found ${s.length} pattern(s)`)))}catch(t){throw _(`search failed: ${t instanceof Error?t.message:"unknown"}`),t}})}C();import B from"chalk";import ve from"node:path";function le(n){n.command("session-start").description("Initialize session state when Claude Code session starts").option("-s, --session-id <id>","Session ID").option("--json","Output as JSON").action(async e=>{try{let t=e.sessionId||`session-${Date.now()}`;g.sessionId=t;let{reasoningBank:o}=await h(),s=await o.getStats(),r=T(),a=ve.join(r,".agentic-qe"),c=await $(a),i=await c.get(I),E=!i||!i.sessionStartTime;i?(i.sessionStartTime=new Date().toISOString(),i.totalDreamsThisSession=0):i={lastDreamTime:null,experienceCount:0,sessionStartTime:new Date().toISOString(),totalDreamsThisSession:0},await c.set(I,i);let d=[];d.push(`AQE Learning: ${s.totalPatterns} patterns loaded`);let p=Object.entries(s.byDomain).filter(([,l])=>l>0).sort(([,l],[,f])=>f-l).slice(0,5);p.length>0&&d.push(`Top domains: ${p.map(([l,f])=>`${l}(${f})`).join(", ")}`),s.patternSuccessRate>0&&d.push(`Pattern success rate: ${(s.patternSuccessRate*100).toFixed(0)}%`),s.routingRequests>0&&d.push(`Routing confidence: ${(s.avgRoutingConfidence*100).toFixed(0)}% across ${s.routingRequests} requests`);let m=d.join(". ")+".";e.json?k({hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:m},sessionId:t,initialized:!0,patternsLoaded:s.totalPatterns,dreamScheduler:{enabled:!0,lastDreamTime:i.lastDreamTime,pendingExperiences:i.experienceCount}}):(D(`Session started: ${t}`),console.log(B.dim(` Patterns loaded: ${s.totalPatterns}`)),console.log(B.dim(` Dream scheduler: enabled (${i.experienceCount} pending experiences)`)));return}catch(t){e.json&&k({success:!1,error:t instanceof Error?t.message:"unknown"});return}}),n.command("session-end").description("Save session state when Claude Code session ends").option("--save-state","Save learning state to disk").option("--export-metrics","Export session metrics").option("--json","Output as JSON").action(async e=>{try{let t=g.sessionId||"unknown",o=null;if(g.initialized&&g.reasoningBank)try{o=await g.reasoningBank.getStats()}catch{}let s=0;try{s=await Z()}catch{}if(e.json){let r=o?`Session complete: ${o.totalPatterns} patterns, ${o.routingRequests} routings, ${(o.patternSuccessRate*100).toFixed(0)}% success rate`:"Session complete";k({continue:!0,sessionId:t,stateSaved:e.saveState||!1,metricsExported:e.exportMetrics||!1,patternsConsolidated:s,finalStats:o?{patternsLearned:o.totalPatterns,routingRequests:o.routingRequests,successRate:o.patternSuccessRate}:null})}else D(`Session ended: ${t}`),o&&(console.log(B.dim(` Patterns: ${o.totalPatterns}`)),console.log(B.dim(` Routing requests: ${o.routingRequests}`))),s>0&&console.log(B.dim(` Patterns consolidated: ${s}`));return}catch(t){e.json&&k({success:!1,error:t instanceof Error?t.message:"unknown"});return}})}import{createHash as $e,randomUUID as De}from"node:crypto";import b from"chalk";import Ae from"node:path";C();var xe="task-bridge",Oe=6e5,ge=.5;function Ie(n){let e=n.toLowerCase();return/\bgenerate[- ]?test|\btest[- ]?gen|\bgenerate.+spec/.test(e)?"test-generation":/\bcoverage|\banalyze.+cover/.test(e)?"coverage-analysis":/\bquality|\bassess|\baudit/.test(e)?"quality-assessment":/\bsecurity|\bvulnerab|\bcompliance/.test(e)?"security-compliance":/\bdefect|\bbug|\bdiagnos/.test(e)?"defect-intelligence":/\brequirement|\bspec\b/.test(e)?"requirements-validation":/\brefactor|\brewrite|\boptim/.test(e)?"refactoring":/\btest|\brun.+test/.test(e)?"test-execution":"unknown"}function Pe(n){return $e("sha256").update(n).digest("hex").slice(0,16)}function pe(n){n.command("pre-task").description("Get context and guidance before spawning a Task agent").option("--task-id <id>","Task identifier").option("-d, --description <desc>","Task description").option("--json","Output as JSON").action(async e=>{try{let{reasoningBank:t}=await h(),o=null;if(e.description){let d=await t.routeTask({task:e.description});d.success&&(o=d.value)}let s=(o?.patterns??[]).slice(0,5).map(d=>d?.id).filter(d=>typeof d=="string"),r=null,a=[],c=0,i=null;try{let d=F();d.isInitialized()||await d.initialize();let p=d.getDatabase();L(p);try{let m=p.prepare(`
139
150
  SELECT used_agent AS agent,
140
151
  ROUND(AVG(quality_score), 3) AS avgQuality,
141
152
  COUNT(*) AS n
@@ -151,28 +162,28 @@ Registered: ${o.length}/${Object.keys(T).length}`))}}catch(t){throw S(`list fail
151
162
  AND created_at > datetime('now', '-7 days')
152
163
  ORDER BY created_at DESC
153
164
  LIMIT 3
154
- `).all().map(u=>({key:u.key,summary:String(u.value).slice(0,200)}))}catch{}if(s.length>0)try{let m=s.map(()=>"?").join(","),u=p.prepare(`
165
+ `).all().map(l=>({key:l.key,summary:String(l.value).slice(0,200)}))}catch{}if(s.length>0)try{let m=s.map(()=>"?").join(","),l=p.prepare(`
155
166
  SELECT COALESCE(SUM(average_token_savings), 0) AS sum
156
167
  FROM qe_patterns
157
168
  WHERE id IN (${m})
158
- `).get(...s);c=Math.max(0,Math.round(u?.sum??0))}catch{}if(e.description&&s.length>0)try{let m=String(e.description),u=Oe(m),y="normal",l=o?.domains?.[0]??"any",b=Math.max(0,Math.min(10,Math.round(Math.min(m.length/200,1)*10)));i=`task:${Ie(m)}`;let D=JSON.stringify({selectedPatternIds:s,agent:o?.recommendedAgent??null,description:m.slice(0,200),taskType:u,priority:y,domain:l,complexityBucket:b,estimatedTokenSavings:c,ts:Date.now()}),C=Date.now()+Ae;p.prepare(`
169
+ `).get(...s);c=Math.max(0,Math.round(l?.sum??0))}catch{}if(e.description&&s.length>0)try{let m=String(e.description),l=Ie(m),f="normal",u=o?.domains?.[0]??"any",S=Math.max(0,Math.min(10,Math.round(Math.min(m.length/200,1)*10)));i=`task:${Pe(m)}`;let A=JSON.stringify({selectedPatternIds:s,agent:o?.recommendedAgent??null,description:m.slice(0,200),taskType:l,priority:f,domain:u,complexityBucket:S,estimatedTokenSavings:c,ts:Date.now()}),M=Date.now()+Oe;p.prepare(`
159
170
  INSERT OR REPLACE INTO kv_store (key, namespace, value, expires_at, created_at)
160
171
  VALUES (?, ?, ?, ?, strftime('%s','now')*1000)
161
- `).run(i,xe,D,C)}catch(m){console.error(w.dim(`[hooks] pre-task bridge: ${m instanceof Error?m.message:"unknown"}`))}if(o?.recommendedAgent&&e.taskId)try{let m=`route-${Date.now()}-${$e().slice(0,8)}`,u=o.confidence<me;p.prepare(`
172
+ `).run(i,xe,A,M)}catch(m){console.error(b.dim(`[hooks] pre-task bridge: ${m instanceof Error?m.message:"unknown"}`))}if(o?.recommendedAgent&&e.taskId)try{let m=`route-${Date.now()}-${De().slice(0,8)}`,l=o.confidence<ge;p.prepare(`
162
173
  INSERT INTO routing_outcomes (
163
174
  id, task_json, decision_json, used_agent,
164
175
  followed_recommendation, success, quality_score,
165
176
  duration_ms, error
166
177
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
167
- `).run(m,JSON.stringify({description:e.description,taskId:e.taskId}),JSON.stringify({recommended:o.recommendedAgent,confidence:o.confidence,alternatives:o.alternatives,lowConfidence:u}),o.recommendedAgent,1,0,-1,0,u?"low-confidence":null)}catch(m){console.error(w.dim(`[hooks] pre-task sentinel: ${m instanceof Error?m.message:"unknown"}`))}}catch(d){console.error(w.dim(`[hooks] pre-task memory: ${d instanceof Error?d.message:"unknown"}`))}let h=o?o.confidence<me:!1;e.json?f({success:!0,taskId:e.taskId,description:e.description,recommendedAgent:o?.recommendedAgent,confidence:o?.confidence,guidance:o?.guidance||[],selectedPatternIds:s,historicalBest:r,priorVerdicts:a,estimatedTokenSavings:c,lowConfidence:h,bridgeKey:i}):(console.log(w.bold(`
168
- \u{1F680} Pre-Task Analysis`)),console.log(w.dim(` Task ID: ${e.taskId||"N/A"}`)),o&&(console.log(w.bold(`
169
- \u{1F3AF} Recommended:`),w.cyan(o.recommendedAgent)),console.log(w.dim(` Confidence: ${(o.confidence*100).toFixed(1)}%`)),h&&console.log(w.yellow(" \u26A0 Low confidence \u2014 consider providing more context"))));return}catch(t){e.json&&f({success:!1,error:t instanceof Error?t.message:"unknown"});return}}),n.command("post-task").description("Record task outcome for pattern learning").option("--task-id <id>","Task identifier").option("--success <bool>","Whether task succeeded","true").option("--agent <name>","Agent that executed the task").option("--duration <ms>","Task duration in milliseconds").option("--json","Output as JSON").action(async e=>{try{let t=e.success==="true"||e.success===!0,o=0,s={triggered:!1};try{let{hookRegistry:r,reasoningBank:a}=await E();if(o=(await r.emit(T.QEAgentCompletion,{taskId:e.taskId,success:t,agent:e.agent,duration:e.duration?parseInt(e.duration,10):void 0,timestamp:Date.now()})).reduce((m,u)=>m+(u.patternsLearned||0),0),e.taskId){let m=e.agent||"unknown",u=e.duration?parseInt(e.duration,10):0;await a.recordOutcome({patternId:`task:${m}:${e.taskId}`,success:t,metrics:{executionTimeMs:u},feedback:`Agent: ${m}, Task: ${e.taskId}`});let y=await J({taskId:e.taskId,agent:m,durationMs:u,success:t});await G({agent:m,success:t,durationMs:u,qualityScore:y.qualityScore}),y.bridge&&await W({taskType:y.bridge.taskType,priority:y.bridge.priority,domain:y.bridge.domain,complexityBucket:y.bridge.complexityBucket,agent:m,success:t})}let i=_(),h=De.join(i,".agentic-qe"),d=await v(h),p=await A(d);s=await Q(d)}catch(r){console.error(w.dim(`[hooks] Learning init: ${r instanceof Error?r.message:"unknown"}`))}e.json?f({success:!0,taskId:e.taskId,taskSuccess:t,patternsLearned:o,dreamTriggered:s.triggered,dreamReason:s.reason,dreamInsights:s.insightsGenerated}):($(`Task completed: ${e.taskId||"unknown"}`),console.log(w.dim(` Success: ${t}`)),o>0&&console.log(w.green(` Patterns learned: ${o}`)),s.triggered&&console.log(w.blue(` \u{1F319} Dream cycle triggered (${s.reason}): ${s.insightsGenerated} insights`)));return}catch(t){e.json&&f({success:!1,error:t instanceof Error?t.message:"unknown"});return}})}import{existsSync as Ne,readFileSync as Pe}from"node:fs";import{randomUUID as le}from"node:crypto";import H from"chalk";import ge from"node:path";q();function Ce(n){return/\bjest\b/i.test(n)?"jest":/\bvitest\b/i.test(n)?"vitest":/\bpytest\b/i.test(n)?"pytest":/\bmocha\b/i.test(n)?"mocha":null}async function qe(n){try{let e=U();e.isInitialized()||await e.initialize();let t=e.getDatabase();j(t);let o=n.framework==="pytest"?"python":"javascript",s=n.command.split(/\s+/).slice(0,3).join("-").slice(0,80);t.prepare(`
178
+ `).run(m,JSON.stringify({description:e.description,taskId:e.taskId}),JSON.stringify({recommended:o.recommendedAgent,confidence:o.confidence,alternatives:o.alternatives,lowConfidence:l}),o.recommendedAgent,1,0,-1,0,l?"low-confidence":null)}catch(m){console.error(b.dim(`[hooks] pre-task sentinel: ${m instanceof Error?m.message:"unknown"}`))}}catch(d){console.error(b.dim(`[hooks] pre-task memory: ${d instanceof Error?d.message:"unknown"}`))}let E=o?o.confidence<ge:!1;e.json?k({success:!0,taskId:e.taskId,description:e.description,recommendedAgent:o?.recommendedAgent,confidence:o?.confidence,guidance:o?.guidance||[],selectedPatternIds:s,historicalBest:r,priorVerdicts:a,estimatedTokenSavings:c,lowConfidence:E,bridgeKey:i}):(console.log(b.bold(`
179
+ \u{1F680} Pre-Task Analysis`)),console.log(b.dim(` Task ID: ${e.taskId||"N/A"}`)),o&&(console.log(b.bold(`
180
+ \u{1F3AF} Recommended:`),b.cyan(o.recommendedAgent)),console.log(b.dim(` Confidence: ${(o.confidence*100).toFixed(1)}%`)),E&&console.log(b.yellow(" \u26A0 Low confidence \u2014 consider providing more context"))));return}catch(t){e.json&&k({success:!1,error:t instanceof Error?t.message:"unknown"});return}}),n.command("post-task").description("Record task outcome for pattern learning").option("--task-id <id>","Task identifier").option("--success <bool>","Whether task succeeded","true").option("--agent <name>","Agent that executed the task").option("--duration <ms>","Task duration in milliseconds").option("--json","Output as JSON").action(async e=>{try{let t=e.success==="true"||e.success===!0,o=0,s={triggered:!1};try{let{hookRegistry:r,reasoningBank:a}=await h();if(o=(await r.emit(R.QEAgentCompletion,{taskId:e.taskId,success:t,agent:e.agent,duration:e.duration?parseInt(e.duration,10):void 0,timestamp:Date.now()})).reduce((m,l)=>m+(l.patternsLearned||0),0),e.taskId){let m=e.agent||"unknown",l=e.duration?parseInt(e.duration,10):0;await a.recordOutcome({patternId:`task:${m}:${e.taskId}`,success:t,metrics:{executionTimeMs:l},feedback:`Agent: ${m}, Task: ${e.taskId}`});let f=await V({taskId:e.taskId,agent:m,durationMs:l,success:t});await Y({agent:m,success:t,durationMs:l,qualityScore:f.qualityScore}),f.bridge&&await K({taskType:f.bridge.taskType,priority:f.bridge.priority,domain:f.bridge.domain,complexityBucket:f.bridge.complexityBucket,agent:m,success:t})}let i=T(),E=Ae.join(i,".agentic-qe"),d=await $(E),p=await x(d);s=await G(d)}catch(r){console.error(b.dim(`[hooks] Learning init: ${r instanceof Error?r.message:"unknown"}`))}e.json?k({success:!0,taskId:e.taskId,taskSuccess:t,patternsLearned:o,dreamTriggered:s.triggered,dreamReason:s.reason,dreamInsights:s.insightsGenerated}):(D(`Task completed: ${e.taskId||"unknown"}`),console.log(b.dim(` Success: ${t}`)),o>0&&console.log(b.green(` Patterns learned: ${o}`)),s.triggered&&console.log(b.blue(` \u{1F319} Dream cycle triggered (${s.reason}): ${s.insightsGenerated} insights`)));return}catch(t){e.json&&k({success:!1,error:t instanceof Error?t.message:"unknown"});return}})}import{existsSync as Ne,readFileSync as Ce}from"node:fs";import{randomUUID as fe}from"node:crypto";import H from"chalk";import ke from"node:path";C();function qe(n){return/\bjest\b/i.test(n)?"jest":/\bvitest\b/i.test(n)?"vitest":/\bpytest\b/i.test(n)?"pytest":/\bmocha\b/i.test(n)?"mocha":null}async function Le(n){try{let e=F();e.isInitialized()||await e.initialize();let t=e.getDatabase();L(t);let o=n.framework==="pytest"?"python":"javascript",s=n.command.split(/\s+/).slice(0,3).join("-").slice(0,80);t.prepare(`
170
181
  INSERT INTO test_outcomes (
171
182
  id, test_id, test_name, generated_by, framework, language, domain,
172
183
  passed, execution_time_ms, maintainability_score, created_at
173
184
  ) VALUES (?, ?, ?, 'cli-hook-post-command', ?, ?, 'test-execution',
174
185
  ?, ?, 0.5, datetime('now'))
175
- `).run(`to-${Date.now()}-${le().slice(0,8)}`,`cmd:${s}`,n.command.slice(0,200),n.framework,o,n.success?1:0,n.durationMs);try{let r=ge.join(process.cwd(),"coverage","coverage-summary.json");if(Ne(r)){let c=JSON.parse(Pe(r,"utf-8")).total??{},i=Number(c.lines?.pct??0),h=Number(c.branches?.pct??0),d=Number(c.functions?.pct??0),p=t.prepare(`
186
+ `).run(`to-${Date.now()}-${fe().slice(0,8)}`,`cmd:${s}`,n.command.slice(0,200),n.framework,o,n.success?1:0,n.durationMs);try{let r=ke.join(process.cwd(),"coverage","coverage-summary.json");if(Ne(r)){let c=JSON.parse(Ce(r,"utf-8")).total??{},i=Number(c.lines?.pct??0),E=Number(c.branches?.pct??0),d=Number(c.functions?.pct??0),p=t.prepare(`
176
187
  SELECT after_lines, after_branches, after_functions
177
188
  FROM coverage_sessions
178
189
  WHERE target_path = ?
@@ -186,8 +197,8 @@ Registered: ${o.length}/${Object.keys(T).length}`))}}catch(t){throw S(`list fail
186
197
  tests_generated, tests_passed, duration_ms,
187
198
  started_at, completed_at
188
199
  ) VALUES (?, ?, 'cli-hook-post-command', ?, ?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)
189
- `).run(`cs-${Date.now()}-${le().slice(0,8)}`,process.cwd(),n.framework,p?.after_lines??0,p?.after_branches??0,p?.after_functions??0,i,h,d,n.success?1:0,n.durationMs,m,m)}}catch(r){console.error(H.dim(`[hooks] coverage_sessions: ${r instanceof Error?r.message:"unknown"}`))}}catch(e){console.error(H.dim(`[hooks] test_outcomes: ${e instanceof Error?e.message:"unknown"}`))}}function pe(n){n.command("guard").description("File guardian - block edits to protected files").requiredOption("-f, --file <path>","File path to check").option("--json","Output as JSON (required for hook API)").action(async e=>{try{let t=e.file||"",o=t.replace(/\\/g,"/"),r=[{pattern:/^\.env($|\.)/,reason:"Environment file contains secrets"},{pattern:/\.env\.[a-zA-Z]+$/,reason:"Environment file contains secrets"},{pattern:/\.lock$/,reason:"Lock files are auto-generated"},{pattern:/(^|\/)node_modules\//,reason:"node_modules is managed by package manager"},{pattern:/(^|\/)\.agentic-qe\/memory\.db/,reason:"AQE memory database must not be directly edited"},{pattern:/(^|\/)\.agentic-qe\/memory\.db-wal$/,reason:"AQE WAL file must not be directly edited"},{pattern:/(^|\/)\.agentic-qe\/memory\.db-shm$/,reason:"AQE shared memory file must not be directly edited"}].find(a=>a.pattern.test(o));r?e.json?f({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Protected file: ${r.reason} (${t})`}}):S(`Blocked: ${r.reason} (${t})`):e.json?f({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}}):$(`Allowed: ${t}`);return}catch{e.json&&f({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}});return}}),n.command("pre-command").description("Get context before executing a Bash command").option("-c, --command <cmd>","Command to be executed").option("--json","Output as JSON").action(async e=>{try{let t=e.command||"",o=[{pattern:/rm\s+(-[a-zA-Z]*f[a-zA-Z]*\s+)?-[a-zA-Z]*r[a-zA-Z]*\s+\/(?!\w)/,reason:"Recursive delete of root filesystem"},{pattern:/rm\s+(-[a-zA-Z]*r[a-zA-Z]*\s+)?-[a-zA-Z]*f[a-zA-Z]*\s+\/(?!\w)/,reason:"Recursive delete of root filesystem"},{pattern:/rm\s+-rf\s+~/,reason:"Recursive delete of home directory"},{pattern:/DROP\s+(TABLE|DATABASE|SCHEMA)/i,reason:"Destructive SQL operation"},{pattern:/git\s+push\s+.*--force(?!-)/,reason:"Force push can overwrite remote history"},{pattern:/git\s+reset\s+--hard/,reason:"Hard reset discards uncommitted changes"},{pattern:/>\s*\/dev\/sd[a-z]/,reason:"Direct write to block device"},{pattern:/dd\s+if=.*of=\/dev\/sd/,reason:"Direct disk write via dd"},{pattern:/chmod\s+777\s/,reason:"World-writable permissions are a security risk"},{pattern:/:\(\)\s*\{\s*:\|\s*:&\s*\}\s*;?\s*:/,reason:"Fork bomb detected"},{pattern:/mkfs\./,reason:"Filesystem format operation"},{pattern:/>\s*\/dev\/null\s*2>&1\s*&\s*disown/,reason:"Stealth background process"}],s=[{pattern:/\.agentic-qe.*rm/,reason:"Deleting AQE data files"},{pattern:/rm\s+-rf\s/,reason:"Recursive force delete"},{pattern:/git\s+clean\s+-[a-zA-Z]*f/,reason:"Force cleaning untracked files"}],r=o.find(c=>c.pattern.test(t)),a=s.filter(c=>c.pattern.test(t)).map(c=>c.reason);if(r)e.json?f({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Dangerous command blocked: ${r.reason}`}}):S(`Blocked: ${r.reason}`);else if(e.json){let c={hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}};a.length>0&&(c.hookSpecificOutput.additionalContext=`Warnings: ${a.join("; ")}`),f(c)}else a.length>0&&(console.log(H.yellow(`
190
- \u26A0\uFE0F Command Warnings:`)),a.forEach(c=>console.log(H.yellow(` - ${c}`))));return}catch{e.json&&f({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}});return}}),n.command("post-command").description("Record Bash command outcome").option("-c, --command <cmd>","Command that was executed").option("--success <bool>","Whether command succeeded","true").option("--exit-code <code>","Command exit code").option("--json","Output as JSON").action(async e=>{try{let t=e.success==="true"||e.success===!0,o=e.exitCode?parseInt(e.exitCode,10):t?0:1,s=(e.command||"").substring(0,200),r=/\b(test|vitest|jest|pytest|mocha)\b/i.test(s),a=/\b(build|compile|tsc)\b/i.test(s),c=/\b(lint|eslint|prettier)\b/i.test(s),i=0,h=!1;try{let{reasoningBank:d}=await E();if(r){let{hookRegistry:D}=await E();await D.emit(T.TestExecutionResult,{runId:`cmd-${Date.now()}`,patternId:`cmd:test:${s.split(/\s+/).slice(0,3).join("-")}`,passed:t?1:0,failed:t?0:1,duration:0,flaky:!1})}let p=s.replace(/[^a-zA-Z0-9]/g,"-").slice(0,80),m=r?"test-execution":a?"code-intelligence":c?"quality-assessment":"code-intelligence";await d.recordOutcome({patternId:`cmd:${p}`,success:t,metrics:{executionTimeMs:0},feedback:`Command: ${s}, exit: ${o}`}),i=1,(r||a||c)&&(await L({task:`bash: ${s}`,agent:"cli-hook",domain:m,success:t,source:"cli-hook-post-command"}),h=!0);let u=Ce(s);u&&await qe({command:s,framework:u,success:t,durationMs:0});let y=_(),l=ge.join(y,".agentic-qe"),b=await v(l);await A(b)}catch(d){console.error(H.dim(`[hooks] post-command learning: ${d instanceof Error?d.message:"unknown"}`))}e.json&&f({success:!0,command:s.substring(0,100),commandSuccess:t,exitCode:o,patternsLearned:i,experienceRecorded:h});return}catch(t){e.json&&f({success:!1,error:t instanceof Error?t.message:"unknown"});return}})}function Ft(){let n=new Me("hooks").description("Self-learning QE hooks for pattern recognition and guidance").addHelpText("after",`
200
+ `).run(`cs-${Date.now()}-${fe().slice(0,8)}`,process.cwd(),n.framework,p?.after_lines??0,p?.after_branches??0,p?.after_functions??0,i,E,d,n.success?1:0,n.durationMs,m,m)}}catch(r){console.error(H.dim(`[hooks] coverage_sessions: ${r instanceof Error?r.message:"unknown"}`))}}catch(e){console.error(H.dim(`[hooks] test_outcomes: ${e instanceof Error?e.message:"unknown"}`))}}function ye(n){n.command("guard").description("File guardian - block edits to protected files").requiredOption("-f, --file <path>","File path to check").option("--json","Output as JSON (required for hook API)").action(async e=>{try{let t=e.file||"",o=t.replace(/\\/g,"/"),r=[{pattern:/^\.env($|\.)/,reason:"Environment file contains secrets"},{pattern:/\.env\.[a-zA-Z]+$/,reason:"Environment file contains secrets"},{pattern:/\.lock$/,reason:"Lock files are auto-generated"},{pattern:/(^|\/)node_modules\//,reason:"node_modules is managed by package manager"},{pattern:/(^|\/)\.agentic-qe\/memory\.db/,reason:"AQE memory database must not be directly edited"},{pattern:/(^|\/)\.agentic-qe\/memory\.db-wal$/,reason:"AQE WAL file must not be directly edited"},{pattern:/(^|\/)\.agentic-qe\/memory\.db-shm$/,reason:"AQE shared memory file must not be directly edited"}].find(a=>a.pattern.test(o));r?e.json?k({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Protected file: ${r.reason} (${t})`}}):_(`Blocked: ${r.reason} (${t})`):e.json?k({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}}):D(`Allowed: ${t}`);return}catch{e.json&&k({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}});return}}),n.command("pre-command").description("Get context before executing a Bash command").option("-c, --command <cmd>","Command to be executed").option("--json","Output as JSON").action(async e=>{try{let t=e.command||"",o=[{pattern:/rm\s+(-[a-zA-Z]*f[a-zA-Z]*\s+)?-[a-zA-Z]*r[a-zA-Z]*\s+\/(?!\w)/,reason:"Recursive delete of root filesystem"},{pattern:/rm\s+(-[a-zA-Z]*r[a-zA-Z]*\s+)?-[a-zA-Z]*f[a-zA-Z]*\s+\/(?!\w)/,reason:"Recursive delete of root filesystem"},{pattern:/rm\s+-rf\s+~/,reason:"Recursive delete of home directory"},{pattern:/DROP\s+(TABLE|DATABASE|SCHEMA)/i,reason:"Destructive SQL operation"},{pattern:/git\s+push\s+.*--force(?!-)/,reason:"Force push can overwrite remote history"},{pattern:/git\s+reset\s+--hard/,reason:"Hard reset discards uncommitted changes"},{pattern:/>\s*\/dev\/sd[a-z]/,reason:"Direct write to block device"},{pattern:/dd\s+if=.*of=\/dev\/sd/,reason:"Direct disk write via dd"},{pattern:/chmod\s+777\s/,reason:"World-writable permissions are a security risk"},{pattern:/:\(\)\s*\{\s*:\|\s*:&\s*\}\s*;?\s*:/,reason:"Fork bomb detected"},{pattern:/mkfs\./,reason:"Filesystem format operation"},{pattern:/>\s*\/dev\/null\s*2>&1\s*&\s*disown/,reason:"Stealth background process"}],s=[{pattern:/\.agentic-qe.*rm/,reason:"Deleting AQE data files"},{pattern:/rm\s+-rf\s/,reason:"Recursive force delete"},{pattern:/git\s+clean\s+-[a-zA-Z]*f/,reason:"Force cleaning untracked files"}],r=o.find(c=>c.pattern.test(t)),a=s.filter(c=>c.pattern.test(t)).map(c=>c.reason);if(r)e.json?k({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Dangerous command blocked: ${r.reason}`}}):_(`Blocked: ${r.reason}`);else if(e.json){let c={hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}};a.length>0&&(c.hookSpecificOutput.additionalContext=`Warnings: ${a.join("; ")}`),k(c)}else a.length>0&&(console.log(H.yellow(`
201
+ \u26A0\uFE0F Command Warnings:`)),a.forEach(c=>console.log(H.yellow(` - ${c}`))));return}catch{e.json&&k({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}});return}}),n.command("post-command").description("Record Bash command outcome").option("-c, --command <cmd>","Command that was executed").option("--success <bool>","Whether command succeeded","true").option("--exit-code <code>","Command exit code").option("--json","Output as JSON").action(async e=>{try{let t=e.success==="true"||e.success===!0,o=e.exitCode?parseInt(e.exitCode,10):t?0:1,s=(e.command||"").substring(0,200),r=/\b(test|vitest|jest|pytest|mocha)\b/i.test(s),a=/\b(build|compile|tsc)\b/i.test(s),c=/\b(lint|eslint|prettier)\b/i.test(s),i=0,E=!1;try{let{reasoningBank:d}=await h();if(r){let{hookRegistry:A}=await h();await A.emit(R.TestExecutionResult,{runId:`cmd-${Date.now()}`,patternId:`cmd:test:${s.split(/\s+/).slice(0,3).join("-")}`,passed:t?1:0,failed:t?0:1,duration:0,flaky:!1})}let p=s.replace(/[^a-zA-Z0-9]/g,"-").slice(0,80),m=r?"test-execution":a?"code-intelligence":c?"quality-assessment":"code-intelligence";await d.recordOutcome({patternId:`cmd:${p}`,success:t,metrics:{executionTimeMs:0},feedback:`Command: ${s}, exit: ${o}`}),i=1,(r||a||c)&&(await j({task:`bash: ${s}`,agent:"cli-hook",domain:m,success:t,source:"cli-hook-post-command"}),E=!0);let l=qe(s);l&&await Le({command:s,framework:l,success:t,durationMs:0});let f=T(),u=ke.join(f,".agentic-qe"),S=await $(u);await x(S)}catch(d){console.error(H.dim(`[hooks] post-command learning: ${d instanceof Error?d.message:"unknown"}`))}e.json&&k({success:!0,command:s.substring(0,100),commandSuccess:t,exitCode:o,patternsLearned:i,experienceRecorded:E});return}catch(t){e.json&&k({success:!1,error:t instanceof Error?t.message:"unknown"});return}})}function Qt(){let n=new Me("hooks").description("Self-learning QE hooks for pattern recognition and guidance").addHelpText("after",`
191
202
  Examples:
192
203
  # File editing hooks (learning from edits)
193
204
  aqe hooks pre-edit --file src/utils.ts --operation create
@@ -211,4 +222,4 @@ Examples:
211
222
  aqe hooks search --query "authentication"
212
223
  aqe hooks stats
213
224
  aqe hooks list
214
- `);return ae(n),ie(n),ce(n),de(n),ue(n),pe(n),n}export{T as QE_HOOK_EVENTS,Ft as createHooksCommand,E as getHooksSystem,g as hooksState};
225
+ `);return de(n),me(n),ue(n),le(n),pe(n),ye(n),n}export{R as QE_HOOK_EVENTS,Qt as createHooksCommand,h as getHooksSystem,g as hooksState};
@@ -1,2 +1,2 @@
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.19");process.exit(0)}
2
- import{a as h,b as z}from"./chunk-GVDLCJC5.js";import{a as b,b as B,c as P,d as O,e as F}from"./chunk-BOUCIIUI.js";import{b as k,c as x,d as _,e as w}from"./chunk-HVNW3TZS.js";import{a as M}from"./chunk-D74RGYKI.js";import{b as S,c as U}from"./chunk-5MGRZ4YD.js";import{i as I}from"./chunk-MIQAFOFO.js";import"./chunk-WULMXLNN.js";var m={heavyweight:{requiresReasoning:!0,requiresTools:!0,requiresVision:!1,requiresExtendedThinking:!0,requiresJsonMode:!0,minContextSize:1e5,costSensitivity:"low",latencySensitivity:"low"},standard:{requiresReasoning:!0,requiresTools:!0,requiresVision:!1,requiresExtendedThinking:!1,requiresJsonMode:!0,minContextSize:5e4,costSensitivity:"medium",latencySensitivity:"medium"},lightweight:{requiresReasoning:!1,requiresTools:!0,requiresVision:!1,requiresExtendedThinking:!1,requiresJsonMode:!0,minContextSize:16e3,costSensitivity:"medium",latencySensitivity:"high"},minimal:{requiresReasoning:!1,requiresTools:!1,requiresVision:!1,requiresExtendedThinking:!1,requiresJsonMode:!1,minContextSize:4e3,costSensitivity:"high",latencySensitivity:"medium"}},$={security:m.heavyweight,"test-generation":m.standard,"code-analysis":m.standard,learning:m.standard,performance:{...m.lightweight,costSensitivity:"high"},coordination:m.lightweight,general:{...m.lightweight,requiresJsonMode:!1,latencySensitivity:"medium"},documentation:{...m.minimal,minContextSize:16e3},simple:m.minimal};var v=class{rules=[];constructor(e=[]){this.setRules(e)}setRules(e){this.rules=[...e].filter(t=>t.enabled).sort((t,r)=>r.priority-t.priority)}getRules(){return[...this.rules]}addRule(e){this.rules.push(e),this.rules=this.rules.filter(t=>t.enabled).sort((t,r)=>r.priority-t.priority)}removeRule(e){let t=this.rules.findIndex(r=>r.id===e);return t>=0?(this.rules.splice(t,1),!0):!1}setRuleEnabled(e,t){let r=this.rules.find(i=>i.id===e);return r?(r.enabled=t,this.rules=this.rules.filter(i=>i.enabled).sort((i,o)=>o.priority-i.priority),!0):!1}evaluate(e){let t=0;for(let r of this.rules)if(t++,this.matchesCondition(e,r.condition))return{rule:r,rulesEvaluated:t};return null}evaluateAll(e){return this.rules.filter(t=>this.matchesCondition(e,t.condition))}matchesCondition(e,t){if(t.agentType!==void 0&&(!e.agentType||!t.agentType.includes(e.agentType))||t.requiresTools!==void 0&&!!e.requiresTools!==t.requiresTools)return!1;if(t.complexity!==void 0){let r=Array.isArray(t.complexity)?t.complexity:[t.complexity];if(!e.complexity||!r.includes(e.complexity))return!1}if(t.localOnly!==void 0&&t.localOnly){let r=["ollama","onnx"];if(e.preferredProvider&&!r.includes(e.preferredProvider))return!1}if(t.requiresReasoning!==void 0&&t.requiresReasoning&&e.complexity==="low")return!1;if(t.tokenRange!==void 0){let r=this.estimateTokens(e);if(t.tokenRange.min!==void 0&&r<t.tokenRange.min||t.tokenRange.max!==void 0&&r>t.tokenRange.max)return!1}return!(t.requiredCapabilities!==void 0&&t.requiredCapabilities.length>0&&(!e.requiredCapabilities||e.requiredCapabilities.length===0||!t.requiredCapabilities.every(i=>e.requiredCapabilities.includes(i)))||t.custom!==void 0&&!t.custom(e))}estimateTokens(e){let t=0;e.systemPrompt&&(t+=Math.ceil(e.systemPrompt.length/4));for(let r of e.messages)t+=Math.ceil(r.content.length/4);return t}},A=[{id:"security-agents-opus",name:"Security Agents to Claude Opus",description:"Route security-critical agents to Claude Opus for best security analysis",condition:{agentType:["security-auditor","security-architect","v3-qe-security-scanner"]},action:{provider:"claude",model:"claude-opus-4-7",temperature:.1},enabled:!0,priority:100},{id:"test-gen-with-tools",name:"Test Generation with Tools",description:"Route test generation requests that need tools to Claude Sonnet",condition:{agentType:["v3-qe-test-generator","tester"],requiresTools:!0},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.3},enabled:!0,priority:95},{id:"high-complexity-reasoning",name:"High Complexity Reasoning",description:"Route high complexity tasks requiring reasoning to advanced models",condition:{complexity:"high",requiresReasoning:!0},action:{provider:"claude",model:"claude-opus-4-7",temperature:.2},enabled:!0,priority:90},{id:"code-analysis-agents",name:"Code Analysis Agents",description:"Route code analysis to Claude Sonnet for balanced performance",condition:{agentType:["code-analyzer","v3-qe-code-intelligence","reviewer"]},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.2},enabled:!0,priority:85},{id:"coverage-analysis",name:"Coverage Analysis Agents",description:"Route coverage analysis to efficient models",condition:{agentType:["v3-qe-coverage-analyzer"]},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.1},enabled:!0,priority:80},{id:"defect-prediction",name:"Defect Prediction Agents",description:"Route defect prediction to capable models",condition:{agentType:["v3-qe-defect-predictor"]},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.3},enabled:!0,priority:75},{id:"medium-complexity",name:"Medium Complexity Tasks",description:"Route medium complexity to balanced Claude Sonnet",condition:{complexity:"medium"},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.3},enabled:!0,priority:60},{id:"low-complexity-haiku",name:"Low Complexity to Haiku",description:"Route low complexity tasks to Haiku for cost efficiency",condition:{complexity:"low"},action:{provider:"claude",model:"claude-haiku-4-5-20251001",temperature:.3},enabled:!0,priority:50},{id:"local-only-ollama",name:"Local Only Requests",description:"Route local-only requests to Ollama",condition:{localOnly:!0},action:{provider:"ollama",model:"llama3.1",temperature:.3},enabled:!0,priority:40},{id:"small-requests-haiku",name:"Small Token Requests",description:"Route small requests to Haiku for efficiency",condition:{tokenRange:{max:500}},action:{provider:"claude",model:"claude-haiku-4-5-20251001",temperature:.3},enabled:!0,priority:30}];import{randomUUID as H}from"crypto";var f=class{decisions=[];providerCalls=[];fallbacks=[];cacheHits=0;cacheMisses=0;startTime=new Date;maxRecords;maxCallRecords;constructor(e={}){this.maxRecords=e.maxRecords??1e4,this.maxCallRecords=e.maxCallRecords??5e3}recordRoutingDecision(e,t,r={}){let i={id:`rd-${Date.now()}-${H().slice(0,8)}`,timestamp:new Date,provider:e.providerType,model:e.model,mode:this.inferMode(e.reason),reason:e.reason,latencyMs:t,decisionTimeMs:e.metadata.decisionTimeMs,agentType:r.agentType,success:r.success??!0,tokenUsage:r.tokenUsage,cost:r.cost,wasFallback:e.reason==="fallback",ruleId:e.matchedRule?.id};this.decisions.push(i),this.trimRecords()}recordProviderCall(e,t,r,i,o={}){let n=o.inputTokens??Math.floor(i*.7),a=o.outputTokens??i-n,c={timestamp:new Date,provider:e,model:t,latencyMs:r,inputTokens:n,outputTokens:a,totalTokens:i,success:o.success??!0,cost:o.cost,agentType:o.agentType};this.providerCalls.push(c),this.trimCallRecords()}recordFallback(e,t,r,i){let o={timestamp:new Date,fromProvider:e,toProvider:t,reason:r,agentType:i};this.fallbacks.push(o),this.fallbacks.length>1e3&&(this.fallbacks=this.fallbacks.slice(-1e3))}recordCacheHit(){this.cacheHits++}recordCacheMiss(){this.cacheMisses++}getMetrics(e="all"){let t=this.getWindowStart(e),r=this.filterByTime(this.decisions,t),i=this.filterByTime(this.providerCalls,t),o=this.filterByTime(this.fallbacks,t),n=this.calculateProviderMetrics(r,i),a=this.calculateAgentMetrics(r,i),c=r.map(u=>u.decisionTimeMs),s=r.length,l=this.countByMode(r),d=r.filter(u=>u.wasFallback).length,g=r.filter(u=>u.ruleId).length;return{byProvider:Object.fromEntries(n),byAgentType:a,totalDecisions:s,decisionsByMode:l,avgDecisionTimeMs:this.average(c),p95DecisionTimeMs:this.percentile(c,95),p99DecisionTimeMs:this.percentile(c,99),fallbackRate:s>0?d/s:0,ruleMatchRate:s>0?g/s:0,estimatedCostSavings:this.calculateCostSavings(r),ruleStats:{totalEvaluated:r.reduce((u,y)=>u+1,0),matched:g,avgRulesPerDecision:1},cacheStats:{hits:this.cacheHits,misses:this.cacheMisses,hitRate:this.cacheHits+this.cacheMisses>0?this.cacheHits/(this.cacheHits+this.cacheMisses):0},period:{start:t,end:new Date},recentDecisions:r.slice(-50),fallbackStats:this.calculateFallbackStats(o)}}getMetricsByProvider(e){let t=this.decisions.filter(c=>c.provider===e),r=this.providerCalls.filter(c=>c.provider===e),i=r.map(c=>c.latencyMs),o=t.map(c=>c.decisionTimeMs),n=r.filter(c=>c.success),a=r.filter(c=>!c.success);return{provider:e,selectionCount:t.length,ruleMatchCount:t.filter(c=>c.ruleId).length,fallbackCount:t.filter(c=>c.wasFallback).length,avgDecisionTimeMs:this.average(o),successRate:r.length>0?n.length/r.length:1,avgLatencyMs:this.average(i),p95LatencyMs:this.percentile(i,95),p99LatencyMs:this.percentile(i,99),totalCost:r.reduce((c,s)=>c+(s.cost??0),0),totalTokens:r.reduce((c,s)=>c+s.totalTokens,0),totalInputTokens:r.reduce((c,s)=>c+s.inputTokens,0),totalOutputTokens:r.reduce((c,s)=>c+s.outputTokens,0),circuitState:"closed",latencyHistogram:i.slice(-100),decisionTimeHistogram:o.slice(-100),errorCount:a.length,lastError:a.length>0?a[a.length-1].timestamp:void 0,recentCalls:r.slice(-20)}}getMetricsByAgentType(e){let t=this.decisions.filter(s=>s.agentType===e),r=this.providerCalls.filter(s=>s.agentType===e),i=new Map,o=new Map;for(let s of t)i.set(s.provider,(i.get(s.provider)??0)+1),o.set(s.model,(o.get(s.model)??0)+1);let n=r.map(s=>s.latencyMs),a=t.filter(s=>s.wasFallback).length,c=t.filter(s=>s.success).length;return{agentType:e,totalDecisions:t.length,providerDistribution:i,modelDistribution:o,avgLatencyMs:this.average(n),totalCost:r.reduce((s,l)=>s+(l.cost??0),0),totalTokens:r.reduce((s,l)=>s+l.totalTokens,0),fallbackRate:t.length>0?a/t.length:0,successRate:t.length>0?c/t.length:1}}getAuditLog(e={}){let t=this.decisions;e.since&&(t=t.filter(i=>i.timestamp>=e.since)),e.provider&&(t=t.filter(i=>i.provider===e.provider)),e.agentType&&(t=t.filter(i=>i.agentType===e.agentType));let r=e.limit??100;return t.slice(-r).map(i=>({id:i.id,timestamp:i.timestamp,context:{agentType:i.agentType},decision:{providerType:i.provider,model:i.model,providerModelId:i.model,reason:i.reason,confidence:1,metadata:{decisionTimeMs:i.decisionTimeMs,timestamp:i.timestamp}},outcome:{success:i.success,latencyMs:i.latencyMs,tokenUsage:i.tokenUsage,cost:i.cost}}))}resetMetrics(){this.decisions=[],this.providerCalls=[],this.fallbacks=[],this.cacheHits=0,this.cacheMisses=0,this.startTime=new Date}inferMode(e){switch(e){case"manual":return"manual";case"rule-match":return"rule-based";case"cost-optimization":return"cost-optimized";case"performance-optimization":return"performance-optimized";default:return"rule-based"}}trimRecords(){this.decisions.length>this.maxRecords&&(this.decisions=this.decisions.slice(-this.maxRecords))}trimCallRecords(){this.providerCalls.length>this.maxCallRecords&&(this.providerCalls=this.providerCalls.slice(-this.maxCallRecords))}getWindowStart(e){let t=new Date;switch(e){case"1m":return new Date(t.getTime()-60*1e3);case"5m":return new Date(t.getTime()-300*1e3);case"15m":return new Date(t.getTime()-900*1e3);case"1h":return new Date(t.getTime()-3600*1e3);case"24h":return new Date(t.getTime()-1440*60*1e3);case"7d":return new Date(t.getTime()-10080*60*1e3);default:return this.startTime}}filterByTime(e,t){return e.filter(r=>r.timestamp>=t)}calculateProviderMetrics(e,t){let r=new Map;for(let i of h){let o=e.filter(l=>l.provider===i),n=t.filter(l=>l.provider===i);if(o.length===0&&n.length===0)continue;let a=n.map(l=>l.latencyMs),c=o.map(l=>l.decisionTimeMs),s=n.filter(l=>l.success);r.set(i,{provider:i,selectionCount:o.length,ruleMatchCount:o.filter(l=>l.ruleId).length,fallbackCount:o.filter(l=>l.wasFallback).length,avgDecisionTimeMs:this.average(c),successRate:n.length>0?s.length/n.length:1,avgLatencyMs:this.average(a),p95LatencyMs:this.percentile(a,95),p99LatencyMs:this.percentile(a,99),totalCost:n.reduce((l,d)=>l+(d.cost??0),0),totalTokens:n.reduce((l,d)=>l+d.totalTokens,0),circuitState:"closed"})}return r}calculateAgentMetrics(e,t){let r=new Set;e.forEach(o=>o.agentType&&r.add(o.agentType)),t.forEach(o=>o.agentType&&r.add(o.agentType));let i=new Map;for(let o of r)i.set(o,this.getMetricsByAgentType(o));return i}countByMode(e){let t={manual:0,"rule-based":0,"cost-optimized":0,"performance-optimized":0};for(let r of e)t[r.mode]++;return t}calculateFallbackStats(e){let t=new Map,r=new Map;for(let i of e)t.set(i.fromProvider,(t.get(i.fromProvider)??0)+1),r.set(i.reason,(r.get(i.reason)??0)+1);return{total:e.length,byProvider:t,byReason:r}}calculateCostSavings(e){return e.reduce((t,r)=>r.cost&&r.mode==="cost-optimized"?t+r.cost.totalCost*.2:t,0)}average(e){return e.length===0?0:e.reduce((t,r)=>t+r,0)/e.length}percentile(e,t){if(e.length===0)return 0;let r=[...e].sort((o,n)=>o-n),i=Math.ceil(t/100*r.length)-1;return r[Math.max(0,i)]}};function D(p){return new f(p)}var C=class{records=[];alerts=[];maxRecords;alertCheckInterval;constructor(e={}){this.maxRecords=e.maxRecords??1e4}recordCost(e,t,r,i,o={}){let n=this.calculateCost(t,r,i),a={timestamp:new Date,provider:e,model:t,inputTokens:r,outputTokens:i,inputCost:n.inputCost,outputCost:n.outputCost,totalCost:n.totalCost,agentType:o.agentType,requestId:o.requestId};return this.records.push(a),this.trimRecords(),this.checkAlerts(),a}recordCostFromInfo(e,t,r,i,o={}){let n={timestamp:new Date,provider:e,model:t,inputTokens:r.promptTokens,outputTokens:r.completionTokens,inputCost:i.inputCost,outputCost:i.outputCost,totalCost:i.totalCost,agentType:o.agentType,requestId:o.requestId};return this.records.push(n),this.trimRecords(),this.checkAlerts(),n}getCostByProvider(e="all"){let t=this.getPeriodStart(e),r=this.filterByTime(t),i=new Map;for(let o of h){let n=r.filter(s=>s.provider===o);if(n.length===0)continue;let a=n.reduce((s,l)=>s+l.totalCost,0),c=n.reduce((s,l)=>s+l.inputTokens+l.outputTokens,0);i.set(o,{totalCost:a,totalTokens:c,totalRequests:n.length,avgCostPerRequest:a/n.length,avgCostPerToken:c>0?a/c:0})}return i}getCostByAgentType(e="all"){let t=this.getPeriodStart(e),r=this.filterByTime(t),i=new Set;r.forEach(a=>a.agentType&&i.add(a.agentType));let o=new Map;for(let a of i){let c=r.filter(d=>d.agentType===a),s=c.reduce((d,g)=>d+g.totalCost,0),l=c.reduce((d,g)=>d+g.inputTokens+g.outputTokens,0);o.set(a,{totalCost:s,totalTokens:l,totalRequests:c.length,avgCostPerRequest:c.length>0?s/c.length:0,avgCostPerToken:l>0?s/l:0})}let n=r.filter(a=>!a.agentType);if(n.length>0){let a=n.reduce((s,l)=>s+l.totalCost,0),c=n.reduce((s,l)=>s+l.inputTokens+l.outputTokens,0);o.set("unknown",{totalCost:a,totalTokens:c,totalRequests:n.length,avgCostPerRequest:a/n.length,avgCostPerToken:c>0?a/c:0})}return o}getCostByModel(e="all"){let t=this.getPeriodStart(e),r=this.filterByTime(t),i=new Set;r.forEach(n=>i.add(n.model));let o=new Map;for(let n of i){let a=r.filter(l=>l.model===n),c=a.reduce((l,d)=>l+d.totalCost,0),s=a.reduce((l,d)=>l+d.inputTokens+d.outputTokens,0);o.set(n,{totalCost:c,totalTokens:s,totalRequests:a.length,avgCostPerRequest:a.length>0?c/a.length:0,avgCostPerToken:s>0?c/s:0})}return o}getTotalCost(e="all"){let t=this.getPeriodStart(e);return this.filterByTime(t).reduce((i,o)=>i+o.totalCost,0)}getCostTrend(e){let t=new Date,r=[],i,o;switch(e){case"1h":i=300*1e3,o=12;break;case"24h":i=3600*1e3,o=24;break;case"7d":i=1440*60*1e3,o=7;break}for(let n=o-1;n>=0;n--){let a=new Date(t.getTime()-n*i),c=new Date(a.getTime()-i),s=this.records.filter(l=>l.timestamp>=c&&l.timestamp<a);r.push({timestamp:a,cost:s.reduce((l,d)=>l+d.totalCost,0),tokens:s.reduce((l,d)=>l+d.inputTokens+d.outputTokens,0),requests:s.length})}return r}addBudgetAlert(e,t,r){let i={threshold:e,period:t,callback:r,active:!0};return this.alerts.push(i),this.alertCheckInterval||(this.alertCheckInterval=setInterval(()=>this.checkAlerts(),6e4)),`alert-${this.alerts.length-1}`}removeBudgetAlert(e){return e>=0&&e<this.alerts.length?(this.alerts.splice(e,1),this.alerts.length===0&&this.alertCheckInterval&&(clearInterval(this.alertCheckInterval),this.alertCheckInterval=void 0),!0):!1}getOptimizationSuggestions(){let e=[],t=this.getCostByModel("24h");for(let[n,a]of t)M[n]&&a.totalCost>1&&(n.includes("opus")&&e.push({type:"model-switch",description:"Consider using Sonnet instead of Opus for non-critical tasks",estimatedSavings:a.totalCost*.5,currentCost:a.totalCost,suggestedModel:"claude-sonnet-4-6"}),n==="gpt-4o"&&e.push({type:"model-switch",description:"Consider using GPT-4o-mini for simpler tasks",estimatedSavings:a.totalCost*.7,currentCost:a.totalCost,suggestedModel:"gpt-4o-mini"}));let r=this.getCostByProvider("24h"),i=[...r.values()].reduce((n,a)=>n+a.totalCost,0);return i>10&&!r.has("ollama")&&e.push({type:"provider-switch",description:"Consider using Ollama for development/testing workloads",estimatedSavings:i*.3,currentCost:i,suggestedProvider:"ollama"}),[...t.values()].reduce((n,a)=>n+a.totalRequests,0)>100&&e.push({type:"caching",description:"Enable response caching to reduce redundant API calls",estimatedSavings:i*.15,currentCost:i}),e}getRecords(){return[...this.records]}clear(){this.records=[]}reset(){this.records=[],this.alerts=[],this.alertCheckInterval&&(clearInterval(this.alertCheckInterval),this.alertCheckInterval=void 0)}dispose(){this.alertCheckInterval&&(clearInterval(this.alertCheckInterval),this.alertCheckInterval=void 0)}calculateCost(e,t,r){let i=M[e];if(!i)return{inputCost:0,outputCost:0,totalCost:0,currency:"USD"};let o=t/1e6*i.input,n=r/1e6*i.output;return{inputCost:o,outputCost:n,totalCost:o+n,currency:"USD"}}trimRecords(){this.records.length>this.maxRecords&&(this.records=this.records.slice(-this.maxRecords))}getPeriodStart(e){let t=new Date;switch(e){case"1h":return new Date(t.getTime()-3600*1e3);case"24h":return new Date(t.getTime()-1440*60*1e3);case"7d":return new Date(t.getTime()-10080*60*1e3);case"30d":return new Date(t.getTime()-720*60*60*1e3);default:return new Date(0)}}filterByTime(e){return this.records.filter(t=>t.timestamp>=e)}checkAlerts(){for(let e of this.alerts){if(!e.active)continue;let t=this.getTotalCost(e.period);if(t>=e.threshold){e.active=!1;let r=this.getPeriodStart(e.period),i=this.filterByTime(r),o=i.reduce((n,a)=>n+a.inputTokens+a.outputTokens,0);try{e.callback({totalCost:t,totalTokens:o,totalRequests:i.length,avgCostPerRequest:i.length>0?t/i.length:0,avgCostPerToken:o>0?t/o:0})}catch(n){console.error("Budget alert callback error:",n)}}}}};function E(p){return new C(p)}U();var R=class{cache=new Map;maxSize;ttlMs;constructor(e=100,t=6e4){this.maxSize=e,this.ttlMs=t}get(e){let t=this.cache.get(e);return t?Date.now()>t.expiresAt?(this.cache.delete(e),null):t.decision:null}set(e,t){if(this.cache.size>=this.maxSize){let r=this.cache.keys().next().value;r&&this.cache.delete(r)}this.cache.set(e,{decision:t,expiresAt:Date.now()+this.ttlMs})}clear(){this.cache.clear()}getStats(){return{hits:0,misses:0,size:this.cache.size}}},T=class{config;providerManager;ruleEngine;decisionCache;metrics;routerMetrics;costMetrics;initialized=!1;constructor(e,t){this.providerManager=e,this.config={...z,...t};let r=this.config.rules.length>0?this.config.rules:A;this.ruleEngine=new v(r),this.decisionCache=new R(100,this.config.decisionCacheTtlMs),this.metrics=new q,this.routerMetrics=D(),this.costMetrics=E()}async initialize(){this.initialized||(await this.providerManager.initialize(),this.initialized=!0)}getMode(){return this.config.mode}setMode(e){this.config.mode=e,this.decisionCache.clear()}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e},e.rules&&this.ruleEngine.setRules(e.rules),e.decisionCacheTtlMs&&(this.decisionCache=new R(100,e.decisionCacheTtlMs))}async selectProvider(e){await this.ensureInitialized();let t=Date.now();if(this.config.cacheDecisions){let i=this.generateCacheKey(e),o=this.decisionCache.get(i);if(o)return this.metrics.recordCacheHit(),this.routerMetrics.recordCacheHit(),o;this.metrics.recordCacheMiss(),this.routerMetrics.recordCacheMiss()}let r;switch(this.config.mode){case"manual":r=await this.selectManual(e);break;case"rule-based":r=await this.selectRuleBased(e);break;case"cost-optimized":r=await this.selectCostOptimized(e);break;case"performance-optimized":r=await this.selectPerformanceOptimized(e);break;default:r=await this.selectRuleBased(e)}if(r.metadata.decisionTimeMs=Date.now()-t,this.config.cacheDecisions){let i=this.generateCacheKey(e);this.decisionCache.set(i,r)}return this.metrics.recordDecision(r,this.config.mode),r}async chat(e){await this.ensureInitialized();let t=I(),r=await this.selectProvider(e),i=e.agentType??"";if(_(i)&&(x(r.model)||x(r.providerModelId))){let n=r.model,a=r.providerModelId;r.model=w(i,r.model,k),r.providerModelId=w(i,r.providerModelId,k),console.warn(`[aqe] ADR-093: ${i} pinned to ${r.model} (was ${n}/${a}); set AQE_CYBER_VERIFIED=true after Cyber Verification Program approval`)}return await this.executeWithFallback(e,r,t)}async*stream(e){await this.ensureInitialized();let t=await this.selectProvider(e),r=await this.chat(e),i=100;for(let o=0;o<r.content.length;o+=i){let n=o+i>=r.content.length;yield{type:n?"done":"content",delta:r.content.slice(o,o+i),accumulated:r.content.slice(0,o+i),done:n,tokenCount:Math.ceil((o+i)/4),model:r.model,provider:t.providerType,usage:n?r.usage:void 0}}}getMetrics(){return this.metrics.getMetrics()}getEnhancedMetrics(e){return this.routerMetrics.getMetrics(e)}getProviderMetrics(e){return this.routerMetrics.getMetricsByProvider(e)}getAgentMetrics(e){return this.routerMetrics.getMetricsByAgentType(e)}getCostByProvider(e){return this.costMetrics.getCostByProvider(e)}getCostByAgentType(e){return this.costMetrics.getCostByAgentType(e)}getCostByModel(e){return this.costMetrics.getCostByModel(e)}getTotalCost(e){return this.costMetrics.getTotalCost(e)}getCostTrend(e){return this.costMetrics.getCostTrend(e)}getAuditLog(e){return this.routerMetrics.getAuditLog(e)}getOptimizationSuggestions(){return this.costMetrics.getOptimizationSuggestions()}resetMetrics(){this.metrics.reset(),this.routerMetrics.resetMetrics(),this.costMetrics.reset()}clearCache(){this.decisionCache.clear()}async selectManual(e){let t=e.preferredProvider??this.config.defaultProvider,r=e.model??this.config.defaultModel,i=this.providerManager.getProvider(t);return i?this.createDecision(i,t,r,"manual"):this.createFallbackDecision(e,"manual")}async selectRuleBased(e){let t=this.ruleEngine.evaluate(e);if(t){let{rule:o,rulesEvaluated:n}=t,a=o.action.provider,c=this.providerManager.getProvider(a);if(c){let s=this.createDecision(c,a,o.action.model,"rule-match",o);return s.metadata.rulesEvaluated=n,s}}let r=this.config.defaultProvider,i=this.providerManager.getProvider(r);return i?this.createDecision(i,r,this.config.defaultModel,"default"):this.createFallbackDecision(e,"rule-based")}async selectCostOptimized(e){let t=this.providerManager.getAvailableProviders();if(t.length===0)return this.createFallbackDecision(e,"cost-optimized");let r=1/0,i=t[0],o,n=[];for(let a of t){let c=this.providerManager.getProvider(a);if(!c)continue;let{input:s,output:l}=c.getCostPerToken(),d=this.estimateCostValue(e,s,l);n.push({provider:a,model:c.getConfig().model,reason:`Estimated cost: $${d.toFixed(6)}`,estimatedCost:d,excluded:!1}),d<r&&(r=d,i=a,o=c)}if(o){let a=o.getConfig(),c=this.createDecision(o,i,a.model,"cost-optimization");return c.metadata.estimatedCost=this.createCostEstimate(e,o),c.metadata.alternativesConsidered=n,c}return this.createFallbackDecision(e,"cost-optimized")}async selectPerformanceOptimized(e){let t=this.providerManager.getAvailableProviders(),r=this.providerManager.getMetrics();if(t.length===0)return this.createFallbackDecision(e,"performance-optimized");let i=1/0,o=t[0],n,a=[];for(let c of t){let s=this.providerManager.getProvider(c);if(!s)continue;let d=r[c]?.avgLatencyMs??1/0;a.push({provider:c,model:s.getConfig().model,reason:`Avg latency: ${d}ms`,estimatedLatencyMs:d,excluded:!1}),d<i&&(i=d,o=c,n=s)}if(n){let c=n.getConfig(),s=this.createDecision(n,o,c.model,"performance-optimization");return s.metadata.estimatedLatencyMs=i,s.metadata.alternativesConsidered=a,s}return this.createFallbackDecision(e,"performance-optimized")}async executeWithFallback(e,t,r){let{fallbackChain:i,fallbackBehavior:o}=this.config,n,a=0,c=[{provider:t.providerType,model:t.providerModelId}];for(let s of i.entries)if(!(!s.enabled||s.provider===t.providerType||!["claude","openai","ollama"].includes(s.provider)))for(let d of s.models)c.push({provider:s.provider,model:d});for(let{provider:s,model:l}of c){if(a>=o.maxAttempts)break;let d=this.providerManager.getProvider(s);if(!d)continue;a++;let g=Date.now();try{let u=await d.generate(e.messages,{model:l,temperature:e.temperature,maxTokens:e.maxTokens,systemPrompt:e.systemPrompt,timeoutMs:e.timeoutMs,skipCache:e.skipCache,metadata:e.metadata}),y=Date.now()-g;return this.metrics.recordSuccess(s),this.routerMetrics.recordRoutingDecision(t,y,{agentType:e.agentType,success:!0,tokenUsage:u.usage,cost:u.cost}),this.routerMetrics.recordProviderCall(s,l,y,u.usage.totalTokens,{inputTokens:u.usage.promptTokens,outputTokens:u.usage.completionTokens,success:!0,cost:u.cost.totalCost,agentType:e.agentType}),this.costMetrics.recordCostFromInfo(s,l,u.usage,u.cost,{agentType:e.agentType,requestId:u.requestId}),{content:u.content,model:u.model,providerModelId:u.model,provider:u.provider,usage:u.usage,cost:u.cost,latencyMs:u.latencyMs,finishReason:u.finishReason,cached:u.cached,requestId:u.requestId,routingDecision:t}}catch(u){n=S(u);let y=Date.now()-g;if(this.metrics.recordFailure(s),this.routerMetrics.recordProviderCall(s,l,y,0,{success:!1,agentType:e.agentType}),a<c.length){let L=c[a];L&&this.routerMetrics.recordFallback(s,L.provider,n.message,e.agentType)}if(B(u)&&!u.retryable)throw u;a<o.maxAttempts&&await this.delay(o.delayMs)}}throw b(`All providers failed after ${a} attempts: ${n?.message??"Unknown error"}`,"PROVIDER_UNAVAILABLE",{retryable:!1,cause:n})}createDecision(e,t,r,i,o){let{canonicalModel:n,providerModelId:a}=this.resolveModelIds(r,t);return{provider:e,providerType:t,model:n,providerModelId:a,reason:i,matchedRule:o,confidence:i==="rule-match"?.95:.8,metadata:{decisionTimeMs:0,timestamp:new Date}}}resolveModelIds(e,t){let i={claude:"anthropic",openai:"openai",ollama:"ollama",openrouter:"openrouter",gemini:"gemini","azure-openai":"azure",bedrock:"bedrock"}[t];if(!i)return{canonicalModel:e,providerModelId:e};try{let o=O(e),n=P(o,i);return{canonicalModel:o,providerModelId:n}}catch{try{if(F(e)){let n=P(e,i);return{canonicalModel:e,providerModelId:n}}}catch{}return{canonicalModel:e,providerModelId:e}}}createFallbackDecision(e,t){for(let i of this.config.fallbackChain.entries){if(!i.enabled||!["claude","openai","ollama"].includes(i.provider))continue;let n=this.providerManager.getProvider(i.provider);if(n)return this.createDecision(n,i.provider,i.models[0],"fallback")}let r=this.providerManager.getAvailableProviders();if(r.length>0){let i=r[0],o=this.providerManager.getProvider(i);return this.createDecision(o,i,o.getConfig().model,"fallback")}throw b(`No providers available for ${t} selection`,"PROVIDER_UNAVAILABLE",{retryable:!1})}generateCacheKey(e){return[this.config.mode,e.agentType??"default",e.complexity??"medium",e.requiresTools?"tools":"no-tools",e.preferredProvider??"any"].join(":")}estimateCostValue(e,t,r){let i=0;e.systemPrompt&&(i+=Math.ceil(e.systemPrompt.length/4));for(let n of e.messages)i+=Math.ceil(n.content.length/4);let o=e.maxTokens??1e3;return i*t+o*r}createCostEstimate(e,t){let{input:r,output:i}=t.getCostPerToken(),o=0;e.systemPrompt&&(o+=Math.ceil(e.systemPrompt.length/4));for(let c of e.messages)o+=Math.ceil(c.content.length/4);let n=e.maxTokens??1e3,a=o*r+n*i;return{inputTokens:o,outputTokens:n,totalCostUsd:a,inputCostPer1M:r*1e6,outputCostPer1M:i*1e6}}delay(e){return new Promise(t=>setTimeout(t,e))}async ensureInitialized(){this.initialized||await this.initialize()}},q=class{decisions=new Map;decisionsByMode={manual:0,"rule-based":0,"cost-optimized":0,"performance-optimized":0};totalDecisions=0;cacheHits=0;cacheMisses=0;totalRulesEvaluated=0;rulesMatched=0;fallbackCount=0;startTime=new Date;recordDecision(e,t){this.totalDecisions++,this.decisionsByMode[t]++,e.metadata.rulesEvaluated&&(this.totalRulesEvaluated+=e.metadata.rulesEvaluated),e.matchedRule&&this.rulesMatched++,e.reason==="fallback"&&this.fallbackCount++;let r=this.decisions.get(e.providerType);r||(r=this.createEmptyMetrics(e.providerType),this.decisions.set(e.providerType,r)),r.selectionCount++,e.reason==="rule-match"&&r.ruleMatchCount++,e.reason==="fallback"&&r.fallbackCount++}recordSuccess(e){let t=this.decisions.get(e);if(t){let r=t.successRate*t.selectionCount;t.successRate=(r+1)/t.selectionCount}}recordFailure(e){}recordCacheHit(){this.cacheHits++}recordCacheMiss(){this.cacheMisses++}getMetrics(){let e={};for(let[r,i]of this.decisions)e[r]={...i};let t=this.totalDecisions>0?this.rulesMatched/this.totalDecisions:0;return{byProvider:e,totalDecisions:this.totalDecisions,decisionsByMode:{...this.decisionsByMode},avgDecisionTimeMs:0,p95DecisionTimeMs:0,p99DecisionTimeMs:0,fallbackRate:this.totalDecisions>0?this.fallbackCount/this.totalDecisions:0,ruleMatchRate:t,estimatedCostSavings:0,ruleStats:{totalEvaluated:this.totalRulesEvaluated,matched:this.rulesMatched,avgRulesPerDecision:this.totalDecisions>0?this.totalRulesEvaluated/this.totalDecisions:0},cacheStats:{hits:this.cacheHits,misses:this.cacheMisses,hitRate:this.cacheHits+this.cacheMisses>0?this.cacheHits/(this.cacheHits+this.cacheMisses):0},period:{start:this.startTime,end:new Date}}}reset(){this.decisions.clear(),this.decisionsByMode={manual:0,"rule-based":0,"cost-optimized":0,"performance-optimized":0},this.totalDecisions=0,this.cacheHits=0,this.cacheMisses=0,this.totalRulesEvaluated=0,this.rulesMatched=0,this.fallbackCount=0,this.startTime=new Date}createEmptyMetrics(e){return{provider:e,selectionCount:0,ruleMatchCount:0,fallbackCount:0,avgDecisionTimeMs:0,successRate:1,avgLatencyMs:0,p95LatencyMs:0,p99LatencyMs:0,totalCost:0,totalTokens:0,circuitState:"closed"}}};function Je(p,e){return new T(p,e)}function Qe(p){return new T(p,{mode:"rule-based",rules:A,defaultProvider:"claude",defaultModel:"claude-sonnet-4-6",enableMetrics:!0,cacheDecisions:!0})}export{T as HybridRouter,Je as createHybridRouter,Qe as createQERouter};
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.20");process.exit(0)}
2
+ import{a as h,b as z}from"./chunk-T3TEQH2H.js";import{a as b,b as B,c as P,d as O,e as F}from"./chunk-7Y4QQ6JL.js";import{b as k,c as x,d as _,e as w}from"./chunk-EJQRDMON.js";import{a as M}from"./chunk-HCFRGEMK.js";import{b as S,c as U}from"./chunk-NN6VRHNL.js";import{i as I}from"./chunk-NQIOXSHW.js";import"./chunk-H647PYXW.js";var m={heavyweight:{requiresReasoning:!0,requiresTools:!0,requiresVision:!1,requiresExtendedThinking:!0,requiresJsonMode:!0,minContextSize:1e5,costSensitivity:"low",latencySensitivity:"low"},standard:{requiresReasoning:!0,requiresTools:!0,requiresVision:!1,requiresExtendedThinking:!1,requiresJsonMode:!0,minContextSize:5e4,costSensitivity:"medium",latencySensitivity:"medium"},lightweight:{requiresReasoning:!1,requiresTools:!0,requiresVision:!1,requiresExtendedThinking:!1,requiresJsonMode:!0,minContextSize:16e3,costSensitivity:"medium",latencySensitivity:"high"},minimal:{requiresReasoning:!1,requiresTools:!1,requiresVision:!1,requiresExtendedThinking:!1,requiresJsonMode:!1,minContextSize:4e3,costSensitivity:"high",latencySensitivity:"medium"}},$={security:m.heavyweight,"test-generation":m.standard,"code-analysis":m.standard,learning:m.standard,performance:{...m.lightweight,costSensitivity:"high"},coordination:m.lightweight,general:{...m.lightweight,requiresJsonMode:!1,latencySensitivity:"medium"},documentation:{...m.minimal,minContextSize:16e3},simple:m.minimal};var v=class{rules=[];constructor(e=[]){this.setRules(e)}setRules(e){this.rules=[...e].filter(t=>t.enabled).sort((t,r)=>r.priority-t.priority)}getRules(){return[...this.rules]}addRule(e){this.rules.push(e),this.rules=this.rules.filter(t=>t.enabled).sort((t,r)=>r.priority-t.priority)}removeRule(e){let t=this.rules.findIndex(r=>r.id===e);return t>=0?(this.rules.splice(t,1),!0):!1}setRuleEnabled(e,t){let r=this.rules.find(i=>i.id===e);return r?(r.enabled=t,this.rules=this.rules.filter(i=>i.enabled).sort((i,o)=>o.priority-i.priority),!0):!1}evaluate(e){let t=0;for(let r of this.rules)if(t++,this.matchesCondition(e,r.condition))return{rule:r,rulesEvaluated:t};return null}evaluateAll(e){return this.rules.filter(t=>this.matchesCondition(e,t.condition))}matchesCondition(e,t){if(t.agentType!==void 0&&(!e.agentType||!t.agentType.includes(e.agentType))||t.requiresTools!==void 0&&!!e.requiresTools!==t.requiresTools)return!1;if(t.complexity!==void 0){let r=Array.isArray(t.complexity)?t.complexity:[t.complexity];if(!e.complexity||!r.includes(e.complexity))return!1}if(t.localOnly!==void 0&&t.localOnly){let r=["ollama","onnx"];if(e.preferredProvider&&!r.includes(e.preferredProvider))return!1}if(t.requiresReasoning!==void 0&&t.requiresReasoning&&e.complexity==="low")return!1;if(t.tokenRange!==void 0){let r=this.estimateTokens(e);if(t.tokenRange.min!==void 0&&r<t.tokenRange.min||t.tokenRange.max!==void 0&&r>t.tokenRange.max)return!1}return!(t.requiredCapabilities!==void 0&&t.requiredCapabilities.length>0&&(!e.requiredCapabilities||e.requiredCapabilities.length===0||!t.requiredCapabilities.every(i=>e.requiredCapabilities.includes(i)))||t.custom!==void 0&&!t.custom(e))}estimateTokens(e){let t=0;e.systemPrompt&&(t+=Math.ceil(e.systemPrompt.length/4));for(let r of e.messages)t+=Math.ceil(r.content.length/4);return t}},A=[{id:"security-agents-opus",name:"Security Agents to Claude Opus",description:"Route security-critical agents to Claude Opus for best security analysis",condition:{agentType:["security-auditor","security-architect","v3-qe-security-scanner"]},action:{provider:"claude",model:"claude-opus-4-7",temperature:.1},enabled:!0,priority:100},{id:"test-gen-with-tools",name:"Test Generation with Tools",description:"Route test generation requests that need tools to Claude Sonnet",condition:{agentType:["v3-qe-test-generator","tester"],requiresTools:!0},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.3},enabled:!0,priority:95},{id:"high-complexity-reasoning",name:"High Complexity Reasoning",description:"Route high complexity tasks requiring reasoning to advanced models",condition:{complexity:"high",requiresReasoning:!0},action:{provider:"claude",model:"claude-opus-4-7",temperature:.2},enabled:!0,priority:90},{id:"code-analysis-agents",name:"Code Analysis Agents",description:"Route code analysis to Claude Sonnet for balanced performance",condition:{agentType:["code-analyzer","v3-qe-code-intelligence","reviewer"]},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.2},enabled:!0,priority:85},{id:"coverage-analysis",name:"Coverage Analysis Agents",description:"Route coverage analysis to efficient models",condition:{agentType:["v3-qe-coverage-analyzer"]},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.1},enabled:!0,priority:80},{id:"defect-prediction",name:"Defect Prediction Agents",description:"Route defect prediction to capable models",condition:{agentType:["v3-qe-defect-predictor"]},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.3},enabled:!0,priority:75},{id:"medium-complexity",name:"Medium Complexity Tasks",description:"Route medium complexity to balanced Claude Sonnet",condition:{complexity:"medium"},action:{provider:"claude",model:"claude-sonnet-4-6",temperature:.3},enabled:!0,priority:60},{id:"low-complexity-haiku",name:"Low Complexity to Haiku",description:"Route low complexity tasks to Haiku for cost efficiency",condition:{complexity:"low"},action:{provider:"claude",model:"claude-haiku-4-5-20251001",temperature:.3},enabled:!0,priority:50},{id:"local-only-ollama",name:"Local Only Requests",description:"Route local-only requests to Ollama",condition:{localOnly:!0},action:{provider:"ollama",model:"llama3.1",temperature:.3},enabled:!0,priority:40},{id:"small-requests-haiku",name:"Small Token Requests",description:"Route small requests to Haiku for efficiency",condition:{tokenRange:{max:500}},action:{provider:"claude",model:"claude-haiku-4-5-20251001",temperature:.3},enabled:!0,priority:30}];import{randomUUID as H}from"crypto";var f=class{decisions=[];providerCalls=[];fallbacks=[];cacheHits=0;cacheMisses=0;startTime=new Date;maxRecords;maxCallRecords;constructor(e={}){this.maxRecords=e.maxRecords??1e4,this.maxCallRecords=e.maxCallRecords??5e3}recordRoutingDecision(e,t,r={}){let i={id:`rd-${Date.now()}-${H().slice(0,8)}`,timestamp:new Date,provider:e.providerType,model:e.model,mode:this.inferMode(e.reason),reason:e.reason,latencyMs:t,decisionTimeMs:e.metadata.decisionTimeMs,agentType:r.agentType,success:r.success??!0,tokenUsage:r.tokenUsage,cost:r.cost,wasFallback:e.reason==="fallback",ruleId:e.matchedRule?.id};this.decisions.push(i),this.trimRecords()}recordProviderCall(e,t,r,i,o={}){let n=o.inputTokens??Math.floor(i*.7),a=o.outputTokens??i-n,c={timestamp:new Date,provider:e,model:t,latencyMs:r,inputTokens:n,outputTokens:a,totalTokens:i,success:o.success??!0,cost:o.cost,agentType:o.agentType};this.providerCalls.push(c),this.trimCallRecords()}recordFallback(e,t,r,i){let o={timestamp:new Date,fromProvider:e,toProvider:t,reason:r,agentType:i};this.fallbacks.push(o),this.fallbacks.length>1e3&&(this.fallbacks=this.fallbacks.slice(-1e3))}recordCacheHit(){this.cacheHits++}recordCacheMiss(){this.cacheMisses++}getMetrics(e="all"){let t=this.getWindowStart(e),r=this.filterByTime(this.decisions,t),i=this.filterByTime(this.providerCalls,t),o=this.filterByTime(this.fallbacks,t),n=this.calculateProviderMetrics(r,i),a=this.calculateAgentMetrics(r,i),c=r.map(u=>u.decisionTimeMs),s=r.length,l=this.countByMode(r),d=r.filter(u=>u.wasFallback).length,g=r.filter(u=>u.ruleId).length;return{byProvider:Object.fromEntries(n),byAgentType:a,totalDecisions:s,decisionsByMode:l,avgDecisionTimeMs:this.average(c),p95DecisionTimeMs:this.percentile(c,95),p99DecisionTimeMs:this.percentile(c,99),fallbackRate:s>0?d/s:0,ruleMatchRate:s>0?g/s:0,estimatedCostSavings:this.calculateCostSavings(r),ruleStats:{totalEvaluated:r.reduce((u,y)=>u+1,0),matched:g,avgRulesPerDecision:1},cacheStats:{hits:this.cacheHits,misses:this.cacheMisses,hitRate:this.cacheHits+this.cacheMisses>0?this.cacheHits/(this.cacheHits+this.cacheMisses):0},period:{start:t,end:new Date},recentDecisions:r.slice(-50),fallbackStats:this.calculateFallbackStats(o)}}getMetricsByProvider(e){let t=this.decisions.filter(c=>c.provider===e),r=this.providerCalls.filter(c=>c.provider===e),i=r.map(c=>c.latencyMs),o=t.map(c=>c.decisionTimeMs),n=r.filter(c=>c.success),a=r.filter(c=>!c.success);return{provider:e,selectionCount:t.length,ruleMatchCount:t.filter(c=>c.ruleId).length,fallbackCount:t.filter(c=>c.wasFallback).length,avgDecisionTimeMs:this.average(o),successRate:r.length>0?n.length/r.length:1,avgLatencyMs:this.average(i),p95LatencyMs:this.percentile(i,95),p99LatencyMs:this.percentile(i,99),totalCost:r.reduce((c,s)=>c+(s.cost??0),0),totalTokens:r.reduce((c,s)=>c+s.totalTokens,0),totalInputTokens:r.reduce((c,s)=>c+s.inputTokens,0),totalOutputTokens:r.reduce((c,s)=>c+s.outputTokens,0),circuitState:"closed",latencyHistogram:i.slice(-100),decisionTimeHistogram:o.slice(-100),errorCount:a.length,lastError:a.length>0?a[a.length-1].timestamp:void 0,recentCalls:r.slice(-20)}}getMetricsByAgentType(e){let t=this.decisions.filter(s=>s.agentType===e),r=this.providerCalls.filter(s=>s.agentType===e),i=new Map,o=new Map;for(let s of t)i.set(s.provider,(i.get(s.provider)??0)+1),o.set(s.model,(o.get(s.model)??0)+1);let n=r.map(s=>s.latencyMs),a=t.filter(s=>s.wasFallback).length,c=t.filter(s=>s.success).length;return{agentType:e,totalDecisions:t.length,providerDistribution:i,modelDistribution:o,avgLatencyMs:this.average(n),totalCost:r.reduce((s,l)=>s+(l.cost??0),0),totalTokens:r.reduce((s,l)=>s+l.totalTokens,0),fallbackRate:t.length>0?a/t.length:0,successRate:t.length>0?c/t.length:1}}getAuditLog(e={}){let t=this.decisions;e.since&&(t=t.filter(i=>i.timestamp>=e.since)),e.provider&&(t=t.filter(i=>i.provider===e.provider)),e.agentType&&(t=t.filter(i=>i.agentType===e.agentType));let r=e.limit??100;return t.slice(-r).map(i=>({id:i.id,timestamp:i.timestamp,context:{agentType:i.agentType},decision:{providerType:i.provider,model:i.model,providerModelId:i.model,reason:i.reason,confidence:1,metadata:{decisionTimeMs:i.decisionTimeMs,timestamp:i.timestamp}},outcome:{success:i.success,latencyMs:i.latencyMs,tokenUsage:i.tokenUsage,cost:i.cost}}))}resetMetrics(){this.decisions=[],this.providerCalls=[],this.fallbacks=[],this.cacheHits=0,this.cacheMisses=0,this.startTime=new Date}inferMode(e){switch(e){case"manual":return"manual";case"rule-match":return"rule-based";case"cost-optimization":return"cost-optimized";case"performance-optimization":return"performance-optimized";default:return"rule-based"}}trimRecords(){this.decisions.length>this.maxRecords&&(this.decisions=this.decisions.slice(-this.maxRecords))}trimCallRecords(){this.providerCalls.length>this.maxCallRecords&&(this.providerCalls=this.providerCalls.slice(-this.maxCallRecords))}getWindowStart(e){let t=new Date;switch(e){case"1m":return new Date(t.getTime()-60*1e3);case"5m":return new Date(t.getTime()-300*1e3);case"15m":return new Date(t.getTime()-900*1e3);case"1h":return new Date(t.getTime()-3600*1e3);case"24h":return new Date(t.getTime()-1440*60*1e3);case"7d":return new Date(t.getTime()-10080*60*1e3);default:return this.startTime}}filterByTime(e,t){return e.filter(r=>r.timestamp>=t)}calculateProviderMetrics(e,t){let r=new Map;for(let i of h){let o=e.filter(l=>l.provider===i),n=t.filter(l=>l.provider===i);if(o.length===0&&n.length===0)continue;let a=n.map(l=>l.latencyMs),c=o.map(l=>l.decisionTimeMs),s=n.filter(l=>l.success);r.set(i,{provider:i,selectionCount:o.length,ruleMatchCount:o.filter(l=>l.ruleId).length,fallbackCount:o.filter(l=>l.wasFallback).length,avgDecisionTimeMs:this.average(c),successRate:n.length>0?s.length/n.length:1,avgLatencyMs:this.average(a),p95LatencyMs:this.percentile(a,95),p99LatencyMs:this.percentile(a,99),totalCost:n.reduce((l,d)=>l+(d.cost??0),0),totalTokens:n.reduce((l,d)=>l+d.totalTokens,0),circuitState:"closed"})}return r}calculateAgentMetrics(e,t){let r=new Set;e.forEach(o=>o.agentType&&r.add(o.agentType)),t.forEach(o=>o.agentType&&r.add(o.agentType));let i=new Map;for(let o of r)i.set(o,this.getMetricsByAgentType(o));return i}countByMode(e){let t={manual:0,"rule-based":0,"cost-optimized":0,"performance-optimized":0};for(let r of e)t[r.mode]++;return t}calculateFallbackStats(e){let t=new Map,r=new Map;for(let i of e)t.set(i.fromProvider,(t.get(i.fromProvider)??0)+1),r.set(i.reason,(r.get(i.reason)??0)+1);return{total:e.length,byProvider:t,byReason:r}}calculateCostSavings(e){return e.reduce((t,r)=>r.cost&&r.mode==="cost-optimized"?t+r.cost.totalCost*.2:t,0)}average(e){return e.length===0?0:e.reduce((t,r)=>t+r,0)/e.length}percentile(e,t){if(e.length===0)return 0;let r=[...e].sort((o,n)=>o-n),i=Math.ceil(t/100*r.length)-1;return r[Math.max(0,i)]}};function D(p){return new f(p)}var C=class{records=[];alerts=[];maxRecords;alertCheckInterval;constructor(e={}){this.maxRecords=e.maxRecords??1e4}recordCost(e,t,r,i,o={}){let n=this.calculateCost(t,r,i),a={timestamp:new Date,provider:e,model:t,inputTokens:r,outputTokens:i,inputCost:n.inputCost,outputCost:n.outputCost,totalCost:n.totalCost,agentType:o.agentType,requestId:o.requestId};return this.records.push(a),this.trimRecords(),this.checkAlerts(),a}recordCostFromInfo(e,t,r,i,o={}){let n={timestamp:new Date,provider:e,model:t,inputTokens:r.promptTokens,outputTokens:r.completionTokens,inputCost:i.inputCost,outputCost:i.outputCost,totalCost:i.totalCost,agentType:o.agentType,requestId:o.requestId};return this.records.push(n),this.trimRecords(),this.checkAlerts(),n}getCostByProvider(e="all"){let t=this.getPeriodStart(e),r=this.filterByTime(t),i=new Map;for(let o of h){let n=r.filter(s=>s.provider===o);if(n.length===0)continue;let a=n.reduce((s,l)=>s+l.totalCost,0),c=n.reduce((s,l)=>s+l.inputTokens+l.outputTokens,0);i.set(o,{totalCost:a,totalTokens:c,totalRequests:n.length,avgCostPerRequest:a/n.length,avgCostPerToken:c>0?a/c:0})}return i}getCostByAgentType(e="all"){let t=this.getPeriodStart(e),r=this.filterByTime(t),i=new Set;r.forEach(a=>a.agentType&&i.add(a.agentType));let o=new Map;for(let a of i){let c=r.filter(d=>d.agentType===a),s=c.reduce((d,g)=>d+g.totalCost,0),l=c.reduce((d,g)=>d+g.inputTokens+g.outputTokens,0);o.set(a,{totalCost:s,totalTokens:l,totalRequests:c.length,avgCostPerRequest:c.length>0?s/c.length:0,avgCostPerToken:l>0?s/l:0})}let n=r.filter(a=>!a.agentType);if(n.length>0){let a=n.reduce((s,l)=>s+l.totalCost,0),c=n.reduce((s,l)=>s+l.inputTokens+l.outputTokens,0);o.set("unknown",{totalCost:a,totalTokens:c,totalRequests:n.length,avgCostPerRequest:a/n.length,avgCostPerToken:c>0?a/c:0})}return o}getCostByModel(e="all"){let t=this.getPeriodStart(e),r=this.filterByTime(t),i=new Set;r.forEach(n=>i.add(n.model));let o=new Map;for(let n of i){let a=r.filter(l=>l.model===n),c=a.reduce((l,d)=>l+d.totalCost,0),s=a.reduce((l,d)=>l+d.inputTokens+d.outputTokens,0);o.set(n,{totalCost:c,totalTokens:s,totalRequests:a.length,avgCostPerRequest:a.length>0?c/a.length:0,avgCostPerToken:s>0?c/s:0})}return o}getTotalCost(e="all"){let t=this.getPeriodStart(e);return this.filterByTime(t).reduce((i,o)=>i+o.totalCost,0)}getCostTrend(e){let t=new Date,r=[],i,o;switch(e){case"1h":i=300*1e3,o=12;break;case"24h":i=3600*1e3,o=24;break;case"7d":i=1440*60*1e3,o=7;break}for(let n=o-1;n>=0;n--){let a=new Date(t.getTime()-n*i),c=new Date(a.getTime()-i),s=this.records.filter(l=>l.timestamp>=c&&l.timestamp<a);r.push({timestamp:a,cost:s.reduce((l,d)=>l+d.totalCost,0),tokens:s.reduce((l,d)=>l+d.inputTokens+d.outputTokens,0),requests:s.length})}return r}addBudgetAlert(e,t,r){let i={threshold:e,period:t,callback:r,active:!0};return this.alerts.push(i),this.alertCheckInterval||(this.alertCheckInterval=setInterval(()=>this.checkAlerts(),6e4)),`alert-${this.alerts.length-1}`}removeBudgetAlert(e){return e>=0&&e<this.alerts.length?(this.alerts.splice(e,1),this.alerts.length===0&&this.alertCheckInterval&&(clearInterval(this.alertCheckInterval),this.alertCheckInterval=void 0),!0):!1}getOptimizationSuggestions(){let e=[],t=this.getCostByModel("24h");for(let[n,a]of t)M[n]&&a.totalCost>1&&(n.includes("opus")&&e.push({type:"model-switch",description:"Consider using Sonnet instead of Opus for non-critical tasks",estimatedSavings:a.totalCost*.5,currentCost:a.totalCost,suggestedModel:"claude-sonnet-4-6"}),n==="gpt-4o"&&e.push({type:"model-switch",description:"Consider using GPT-4o-mini for simpler tasks",estimatedSavings:a.totalCost*.7,currentCost:a.totalCost,suggestedModel:"gpt-4o-mini"}));let r=this.getCostByProvider("24h"),i=[...r.values()].reduce((n,a)=>n+a.totalCost,0);return i>10&&!r.has("ollama")&&e.push({type:"provider-switch",description:"Consider using Ollama for development/testing workloads",estimatedSavings:i*.3,currentCost:i,suggestedProvider:"ollama"}),[...t.values()].reduce((n,a)=>n+a.totalRequests,0)>100&&e.push({type:"caching",description:"Enable response caching to reduce redundant API calls",estimatedSavings:i*.15,currentCost:i}),e}getRecords(){return[...this.records]}clear(){this.records=[]}reset(){this.records=[],this.alerts=[],this.alertCheckInterval&&(clearInterval(this.alertCheckInterval),this.alertCheckInterval=void 0)}dispose(){this.alertCheckInterval&&(clearInterval(this.alertCheckInterval),this.alertCheckInterval=void 0)}calculateCost(e,t,r){let i=M[e];if(!i)return{inputCost:0,outputCost:0,totalCost:0,currency:"USD"};let o=t/1e6*i.input,n=r/1e6*i.output;return{inputCost:o,outputCost:n,totalCost:o+n,currency:"USD"}}trimRecords(){this.records.length>this.maxRecords&&(this.records=this.records.slice(-this.maxRecords))}getPeriodStart(e){let t=new Date;switch(e){case"1h":return new Date(t.getTime()-3600*1e3);case"24h":return new Date(t.getTime()-1440*60*1e3);case"7d":return new Date(t.getTime()-10080*60*1e3);case"30d":return new Date(t.getTime()-720*60*60*1e3);default:return new Date(0)}}filterByTime(e){return this.records.filter(t=>t.timestamp>=e)}checkAlerts(){for(let e of this.alerts){if(!e.active)continue;let t=this.getTotalCost(e.period);if(t>=e.threshold){e.active=!1;let r=this.getPeriodStart(e.period),i=this.filterByTime(r),o=i.reduce((n,a)=>n+a.inputTokens+a.outputTokens,0);try{e.callback({totalCost:t,totalTokens:o,totalRequests:i.length,avgCostPerRequest:i.length>0?t/i.length:0,avgCostPerToken:o>0?t/o:0})}catch(n){console.error("Budget alert callback error:",n)}}}}};function E(p){return new C(p)}U();var R=class{cache=new Map;maxSize;ttlMs;constructor(e=100,t=6e4){this.maxSize=e,this.ttlMs=t}get(e){let t=this.cache.get(e);return t?Date.now()>t.expiresAt?(this.cache.delete(e),null):t.decision:null}set(e,t){if(this.cache.size>=this.maxSize){let r=this.cache.keys().next().value;r&&this.cache.delete(r)}this.cache.set(e,{decision:t,expiresAt:Date.now()+this.ttlMs})}clear(){this.cache.clear()}getStats(){return{hits:0,misses:0,size:this.cache.size}}},T=class{config;providerManager;ruleEngine;decisionCache;metrics;routerMetrics;costMetrics;initialized=!1;constructor(e,t){this.providerManager=e,this.config={...z,...t};let r=this.config.rules.length>0?this.config.rules:A;this.ruleEngine=new v(r),this.decisionCache=new R(100,this.config.decisionCacheTtlMs),this.metrics=new q,this.routerMetrics=D(),this.costMetrics=E()}async initialize(){this.initialized||(await this.providerManager.initialize(),this.initialized=!0)}getMode(){return this.config.mode}setMode(e){this.config.mode=e,this.decisionCache.clear()}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e},e.rules&&this.ruleEngine.setRules(e.rules),e.decisionCacheTtlMs&&(this.decisionCache=new R(100,e.decisionCacheTtlMs))}async selectProvider(e){await this.ensureInitialized();let t=Date.now();if(this.config.cacheDecisions){let i=this.generateCacheKey(e),o=this.decisionCache.get(i);if(o)return this.metrics.recordCacheHit(),this.routerMetrics.recordCacheHit(),o;this.metrics.recordCacheMiss(),this.routerMetrics.recordCacheMiss()}let r;switch(this.config.mode){case"manual":r=await this.selectManual(e);break;case"rule-based":r=await this.selectRuleBased(e);break;case"cost-optimized":r=await this.selectCostOptimized(e);break;case"performance-optimized":r=await this.selectPerformanceOptimized(e);break;default:r=await this.selectRuleBased(e)}if(r.metadata.decisionTimeMs=Date.now()-t,this.config.cacheDecisions){let i=this.generateCacheKey(e);this.decisionCache.set(i,r)}return this.metrics.recordDecision(r,this.config.mode),r}async chat(e){await this.ensureInitialized();let t=I(),r=await this.selectProvider(e),i=e.agentType??"";if(_(i)&&(x(r.model)||x(r.providerModelId))){let n=r.model,a=r.providerModelId;r.model=w(i,r.model,k),r.providerModelId=w(i,r.providerModelId,k),console.warn(`[aqe] ADR-093: ${i} pinned to ${r.model} (was ${n}/${a}); set AQE_CYBER_VERIFIED=true after Cyber Verification Program approval`)}return await this.executeWithFallback(e,r,t)}async*stream(e){await this.ensureInitialized();let t=await this.selectProvider(e),r=await this.chat(e),i=100;for(let o=0;o<r.content.length;o+=i){let n=o+i>=r.content.length;yield{type:n?"done":"content",delta:r.content.slice(o,o+i),accumulated:r.content.slice(0,o+i),done:n,tokenCount:Math.ceil((o+i)/4),model:r.model,provider:t.providerType,usage:n?r.usage:void 0}}}getMetrics(){return this.metrics.getMetrics()}getEnhancedMetrics(e){return this.routerMetrics.getMetrics(e)}getProviderMetrics(e){return this.routerMetrics.getMetricsByProvider(e)}getAgentMetrics(e){return this.routerMetrics.getMetricsByAgentType(e)}getCostByProvider(e){return this.costMetrics.getCostByProvider(e)}getCostByAgentType(e){return this.costMetrics.getCostByAgentType(e)}getCostByModel(e){return this.costMetrics.getCostByModel(e)}getTotalCost(e){return this.costMetrics.getTotalCost(e)}getCostTrend(e){return this.costMetrics.getCostTrend(e)}getAuditLog(e){return this.routerMetrics.getAuditLog(e)}getOptimizationSuggestions(){return this.costMetrics.getOptimizationSuggestions()}resetMetrics(){this.metrics.reset(),this.routerMetrics.resetMetrics(),this.costMetrics.reset()}clearCache(){this.decisionCache.clear()}async selectManual(e){let t=e.preferredProvider??this.config.defaultProvider,r=e.model??this.config.defaultModel,i=this.providerManager.getProvider(t);return i?this.createDecision(i,t,r,"manual"):this.createFallbackDecision(e,"manual")}async selectRuleBased(e){let t=this.ruleEngine.evaluate(e);if(t){let{rule:o,rulesEvaluated:n}=t,a=o.action.provider,c=this.providerManager.getProvider(a);if(c){let s=this.createDecision(c,a,o.action.model,"rule-match",o);return s.metadata.rulesEvaluated=n,s}}let r=this.config.defaultProvider,i=this.providerManager.getProvider(r);return i?this.createDecision(i,r,this.config.defaultModel,"default"):this.createFallbackDecision(e,"rule-based")}async selectCostOptimized(e){let t=this.providerManager.getAvailableProviders();if(t.length===0)return this.createFallbackDecision(e,"cost-optimized");let r=1/0,i=t[0],o,n=[];for(let a of t){let c=this.providerManager.getProvider(a);if(!c)continue;let{input:s,output:l}=c.getCostPerToken(),d=this.estimateCostValue(e,s,l);n.push({provider:a,model:c.getConfig().model,reason:`Estimated cost: $${d.toFixed(6)}`,estimatedCost:d,excluded:!1}),d<r&&(r=d,i=a,o=c)}if(o){let a=o.getConfig(),c=this.createDecision(o,i,a.model,"cost-optimization");return c.metadata.estimatedCost=this.createCostEstimate(e,o),c.metadata.alternativesConsidered=n,c}return this.createFallbackDecision(e,"cost-optimized")}async selectPerformanceOptimized(e){let t=this.providerManager.getAvailableProviders(),r=this.providerManager.getMetrics();if(t.length===0)return this.createFallbackDecision(e,"performance-optimized");let i=1/0,o=t[0],n,a=[];for(let c of t){let s=this.providerManager.getProvider(c);if(!s)continue;let d=r[c]?.avgLatencyMs??1/0;a.push({provider:c,model:s.getConfig().model,reason:`Avg latency: ${d}ms`,estimatedLatencyMs:d,excluded:!1}),d<i&&(i=d,o=c,n=s)}if(n){let c=n.getConfig(),s=this.createDecision(n,o,c.model,"performance-optimization");return s.metadata.estimatedLatencyMs=i,s.metadata.alternativesConsidered=a,s}return this.createFallbackDecision(e,"performance-optimized")}async executeWithFallback(e,t,r){let{fallbackChain:i,fallbackBehavior:o}=this.config,n,a=0,c=[{provider:t.providerType,model:t.providerModelId}];for(let s of i.entries)if(!(!s.enabled||s.provider===t.providerType||!["claude","openai","ollama"].includes(s.provider)))for(let d of s.models)c.push({provider:s.provider,model:d});for(let{provider:s,model:l}of c){if(a>=o.maxAttempts)break;let d=this.providerManager.getProvider(s);if(!d)continue;a++;let g=Date.now();try{let u=await d.generate(e.messages,{model:l,temperature:e.temperature,maxTokens:e.maxTokens,systemPrompt:e.systemPrompt,timeoutMs:e.timeoutMs,skipCache:e.skipCache,metadata:e.metadata}),y=Date.now()-g;return this.metrics.recordSuccess(s),this.routerMetrics.recordRoutingDecision(t,y,{agentType:e.agentType,success:!0,tokenUsage:u.usage,cost:u.cost}),this.routerMetrics.recordProviderCall(s,l,y,u.usage.totalTokens,{inputTokens:u.usage.promptTokens,outputTokens:u.usage.completionTokens,success:!0,cost:u.cost.totalCost,agentType:e.agentType}),this.costMetrics.recordCostFromInfo(s,l,u.usage,u.cost,{agentType:e.agentType,requestId:u.requestId}),{content:u.content,model:u.model,providerModelId:u.model,provider:u.provider,usage:u.usage,cost:u.cost,latencyMs:u.latencyMs,finishReason:u.finishReason,cached:u.cached,requestId:u.requestId,routingDecision:t}}catch(u){n=S(u);let y=Date.now()-g;if(this.metrics.recordFailure(s),this.routerMetrics.recordProviderCall(s,l,y,0,{success:!1,agentType:e.agentType}),a<c.length){let L=c[a];L&&this.routerMetrics.recordFallback(s,L.provider,n.message,e.agentType)}if(B(u)&&!u.retryable)throw u;a<o.maxAttempts&&await this.delay(o.delayMs)}}throw b(`All providers failed after ${a} attempts: ${n?.message??"Unknown error"}`,"PROVIDER_UNAVAILABLE",{retryable:!1,cause:n})}createDecision(e,t,r,i,o){let{canonicalModel:n,providerModelId:a}=this.resolveModelIds(r,t);return{provider:e,providerType:t,model:n,providerModelId:a,reason:i,matchedRule:o,confidence:i==="rule-match"?.95:.8,metadata:{decisionTimeMs:0,timestamp:new Date}}}resolveModelIds(e,t){let i={claude:"anthropic",openai:"openai",ollama:"ollama",openrouter:"openrouter",gemini:"gemini","azure-openai":"azure",bedrock:"bedrock"}[t];if(!i)return{canonicalModel:e,providerModelId:e};try{let o=O(e),n=P(o,i);return{canonicalModel:o,providerModelId:n}}catch{try{if(F(e)){let n=P(e,i);return{canonicalModel:e,providerModelId:n}}}catch{}return{canonicalModel:e,providerModelId:e}}}createFallbackDecision(e,t){for(let i of this.config.fallbackChain.entries){if(!i.enabled||!["claude","openai","ollama"].includes(i.provider))continue;let n=this.providerManager.getProvider(i.provider);if(n)return this.createDecision(n,i.provider,i.models[0],"fallback")}let r=this.providerManager.getAvailableProviders();if(r.length>0){let i=r[0],o=this.providerManager.getProvider(i);return this.createDecision(o,i,o.getConfig().model,"fallback")}throw b(`No providers available for ${t} selection`,"PROVIDER_UNAVAILABLE",{retryable:!1})}generateCacheKey(e){return[this.config.mode,e.agentType??"default",e.complexity??"medium",e.requiresTools?"tools":"no-tools",e.preferredProvider??"any"].join(":")}estimateCostValue(e,t,r){let i=0;e.systemPrompt&&(i+=Math.ceil(e.systemPrompt.length/4));for(let n of e.messages)i+=Math.ceil(n.content.length/4);let o=e.maxTokens??1e3;return i*t+o*r}createCostEstimate(e,t){let{input:r,output:i}=t.getCostPerToken(),o=0;e.systemPrompt&&(o+=Math.ceil(e.systemPrompt.length/4));for(let c of e.messages)o+=Math.ceil(c.content.length/4);let n=e.maxTokens??1e3,a=o*r+n*i;return{inputTokens:o,outputTokens:n,totalCostUsd:a,inputCostPer1M:r*1e6,outputCostPer1M:i*1e6}}delay(e){return new Promise(t=>setTimeout(t,e))}async ensureInitialized(){this.initialized||await this.initialize()}},q=class{decisions=new Map;decisionsByMode={manual:0,"rule-based":0,"cost-optimized":0,"performance-optimized":0};totalDecisions=0;cacheHits=0;cacheMisses=0;totalRulesEvaluated=0;rulesMatched=0;fallbackCount=0;startTime=new Date;recordDecision(e,t){this.totalDecisions++,this.decisionsByMode[t]++,e.metadata.rulesEvaluated&&(this.totalRulesEvaluated+=e.metadata.rulesEvaluated),e.matchedRule&&this.rulesMatched++,e.reason==="fallback"&&this.fallbackCount++;let r=this.decisions.get(e.providerType);r||(r=this.createEmptyMetrics(e.providerType),this.decisions.set(e.providerType,r)),r.selectionCount++,e.reason==="rule-match"&&r.ruleMatchCount++,e.reason==="fallback"&&r.fallbackCount++}recordSuccess(e){let t=this.decisions.get(e);if(t){let r=t.successRate*t.selectionCount;t.successRate=(r+1)/t.selectionCount}}recordFailure(e){}recordCacheHit(){this.cacheHits++}recordCacheMiss(){this.cacheMisses++}getMetrics(){let e={};for(let[r,i]of this.decisions)e[r]={...i};let t=this.totalDecisions>0?this.rulesMatched/this.totalDecisions:0;return{byProvider:e,totalDecisions:this.totalDecisions,decisionsByMode:{...this.decisionsByMode},avgDecisionTimeMs:0,p95DecisionTimeMs:0,p99DecisionTimeMs:0,fallbackRate:this.totalDecisions>0?this.fallbackCount/this.totalDecisions:0,ruleMatchRate:t,estimatedCostSavings:0,ruleStats:{totalEvaluated:this.totalRulesEvaluated,matched:this.rulesMatched,avgRulesPerDecision:this.totalDecisions>0?this.totalRulesEvaluated/this.totalDecisions:0},cacheStats:{hits:this.cacheHits,misses:this.cacheMisses,hitRate:this.cacheHits+this.cacheMisses>0?this.cacheHits/(this.cacheHits+this.cacheMisses):0},period:{start:this.startTime,end:new Date}}}reset(){this.decisions.clear(),this.decisionsByMode={manual:0,"rule-based":0,"cost-optimized":0,"performance-optimized":0},this.totalDecisions=0,this.cacheHits=0,this.cacheMisses=0,this.totalRulesEvaluated=0,this.rulesMatched=0,this.fallbackCount=0,this.startTime=new Date}createEmptyMetrics(e){return{provider:e,selectionCount:0,ruleMatchCount:0,fallbackCount:0,avgDecisionTimeMs:0,successRate:1,avgLatencyMs:0,p95LatencyMs:0,p99LatencyMs:0,totalCost:0,totalTokens:0,circuitState:"closed"}}};function Je(p,e){return new T(p,e)}function Qe(p){return new T(p,{mode:"rule-based",rules:A,defaultProvider:"claude",defaultModel:"claude-sonnet-4-6",enableMetrics:!0,cacheDecisions:!0})}export{T as HybridRouter,Je as createHybridRouter,Qe as createQERouter};
@@ -1,2 +1,2 @@
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.19");process.exit(0)}
2
- import{a,b,c,d,e}from"./chunk-R5IL3XD5.js";import"./chunk-AG7J7DTM.js";import"./chunk-5R2DUR3A.js";import"./chunk-5MGRZ4YD.js";import"./chunk-MIQAFOFO.js";import"./chunk-WULMXLNN.js";export{a as DEFAULT_HYPERGRAPH_ENGINE_CONFIG,b as HypergraphEngine,c as createHypergraphEngine,d as createHypergraphEngineSync,e as default};
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.20");process.exit(0)}
2
+ import{a,b,c,d,e}from"./chunk-CQSME43Z.js";import"./chunk-MXAEZHW6.js";import"./chunk-JCPXG42O.js";import"./chunk-NN6VRHNL.js";import"./chunk-NQIOXSHW.js";import"./chunk-H647PYXW.js";export{a as DEFAULT_HYPERGRAPH_ENGINE_CONFIG,b as HypergraphEngine,c as createHypergraphEngine,d as createHypergraphEngineSync,e as default};