agentic-qe 3.9.12 → 3.9.14

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 (400) hide show
  1. package/.claude/agents/v3/qe-coverage-specialist.md +1 -1
  2. package/.claude/agents/v3/qe-fleet-commander.md +1 -1
  3. package/.claude/agents/v3/qe-pentest-validator.md +4 -2
  4. package/.claude/agents/v3/qe-queen-coordinator.md +1 -1
  5. package/.claude/agents/v3/qe-risk-assessor.md +1 -1
  6. package/.claude/agents/v3/qe-root-cause-analyzer.md +1 -1
  7. package/.claude/agents/v3/qe-security-auditor.md +4 -2
  8. package/.claude/agents/v3/qe-security-scanner.md +3 -1
  9. package/.claude/agents/v3/qe-test-architect.md +1 -1
  10. package/.claude/commands/aqe-costs.md +6 -6
  11. package/.claude/skills/.validation/schemas/skill-eval.schema.json +3 -0
  12. package/.claude/skills/.validation/test-data/sample-output.json +1 -1
  13. package/.claude/skills/a11y-ally/SKILL.md +1 -1
  14. package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +1 -1
  15. package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +2 -2
  16. package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +1 -1
  17. package/.claude/skills/contract-testing/evals/contract-testing.yaml +2 -2
  18. package/.claude/skills/database-testing/evals/database-testing.yaml +2 -2
  19. package/.claude/skills/localization-testing/evals/localization-testing.yaml +1 -1
  20. package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +1 -1
  21. package/.claude/skills/performance-testing/evals/performance-testing.yaml +1 -1
  22. package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +1 -1
  23. package/.claude/skills/skills-manifest.json +1 -1
  24. package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +2 -2
  25. package/CHANGELOG.md +45 -0
  26. package/assets/agents/v3/qe-coverage-specialist.md +1 -1
  27. package/assets/agents/v3/qe-fleet-commander.md +1 -1
  28. package/assets/agents/v3/qe-pentest-validator.md +4 -2
  29. package/assets/agents/v3/qe-queen-coordinator.md +1 -1
  30. package/assets/agents/v3/qe-risk-assessor.md +1 -1
  31. package/assets/agents/v3/qe-root-cause-analyzer.md +1 -1
  32. package/assets/agents/v3/qe-security-auditor.md +4 -2
  33. package/assets/agents/v3/qe-security-scanner.md +3 -1
  34. package/assets/agents/v3/qe-test-architect.md +1 -1
  35. package/assets/skills/.validation/schemas/skill-eval.schema.json +3 -0
  36. package/assets/skills/.validation/test-data/sample-output.json +1 -1
  37. package/assets/skills/a11y-ally/SKILL.md +1 -1
  38. package/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +1 -1
  39. package/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +2 -2
  40. package/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +1 -1
  41. package/assets/skills/contract-testing/evals/contract-testing.yaml +2 -2
  42. package/assets/skills/database-testing/evals/database-testing.yaml +2 -2
  43. package/assets/skills/localization-testing/evals/localization-testing.yaml +1 -1
  44. package/assets/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +1 -1
  45. package/assets/skills/performance-testing/evals/performance-testing.yaml +1 -1
  46. package/assets/skills/quality-metrics/evals/quality-metrics.yaml +1 -1
  47. package/assets/skills/skills-manifest.json +1 -1
  48. package/assets/skills/testability-scoring/evals/testability-scoring.yaml +2 -2
  49. package/dist/cli/bundle.js +5 -5
  50. package/dist/cli/chunks/adapter-W2EM7ZQ7.js +2 -0
  51. package/dist/cli/chunks/{agent-booster-wasm-LB7XIYUI.js → agent-booster-wasm-O6EXMPMF.js} +2 -2
  52. package/dist/cli/chunks/{agent-handler-VVLNITPB.js → agent-handler-4LPJVTJU.js} +2 -2
  53. package/dist/cli/chunks/{agent-memory-branch-QAJOHQYI.js → agent-memory-branch-PRR323JZ.js} +2 -2
  54. package/dist/cli/chunks/aqe-learning-engine-JQMPNHQU.js +2 -0
  55. package/dist/cli/chunks/{audit-BJIGY6LA.js → audit-YCKXQOXD.js} +2 -2
  56. package/dist/cli/chunks/base-EOPYE6JR.js +2 -0
  57. package/dist/cli/chunks/{better-sqlite3-X6P6KJS6.js → better-sqlite3-44RIH62G.js} +2 -2
  58. package/dist/cli/chunks/{brain-handler-7FGHAVL5.js → brain-handler-IAYJBAFL.js} +3 -3
  59. package/dist/cli/chunks/{branch-enumerator-YXYZMQ4P.js → branch-enumerator-RVVS2UYR.js} +2 -2
  60. package/dist/cli/chunks/{browser-WC2JTT32.js → browser-L6IKC4PR.js} +2 -2
  61. package/dist/cli/chunks/browser-workflow-CSARLAJD.js +2 -0
  62. package/dist/cli/chunks/chunk-2L3BCZ2F.js +2 -0
  63. package/dist/cli/chunks/{chunk-RLVQDFZ2.js → chunk-36YZ2UF7.js} +2 -2
  64. package/dist/cli/chunks/{chunk-B5OL6C4A.js → chunk-3GIZRGX6.js} +2 -2
  65. package/dist/cli/chunks/{chunk-SVEC7C63.js → chunk-3NUMJB3U.js} +10 -10
  66. package/dist/cli/chunks/{chunk-6ZTKAP4X.js → chunk-3PZ2QLLR.js} +4 -4
  67. package/dist/cli/chunks/{chunk-W26THOMZ.js → chunk-3ZKTPPIC.js} +1 -1
  68. package/dist/cli/chunks/{chunk-XQHTGKXD.js → chunk-4EQWK6P6.js} +2 -2
  69. package/dist/cli/chunks/{chunk-WNM64IA6.js → chunk-4JYLXYAH.js} +1 -1
  70. package/dist/cli/chunks/{chunk-Q2JAC625.js → chunk-4RDTR2OF.js} +2 -2
  71. package/dist/cli/chunks/chunk-53KLVMAT.js +18 -0
  72. package/dist/cli/chunks/{chunk-I6J7AYIL.js → chunk-5DWTU2PN.js} +1 -1
  73. package/dist/cli/chunks/{chunk-LNHOWUSG.js → chunk-5HUAD4UU.js} +2 -2
  74. package/dist/cli/chunks/{chunk-SILMLIWR.js → chunk-5MWNXDQW.js} +2 -2
  75. package/dist/cli/chunks/{chunk-FHNDCWXZ.js → chunk-5U6M4XCP.js} +3 -3
  76. package/dist/cli/chunks/{chunk-FYVNVHMI.js → chunk-6BK2S2WE.js} +2 -2
  77. package/dist/cli/chunks/chunk-6EZY2QVM.js +3021 -0
  78. package/dist/cli/chunks/{chunk-YNHB6NGD.js → chunk-6GKXC6DE.js} +2 -2
  79. package/dist/cli/chunks/{chunk-CBD772DQ.js → chunk-6J6GXRHX.js} +5 -5
  80. package/dist/cli/chunks/chunk-7732TLNA.js +5 -0
  81. package/dist/cli/chunks/{chunk-AZCTNUUN.js → chunk-7IJBZGZY.js} +1 -1
  82. package/dist/cli/chunks/{chunk-52GDG6LU.js → chunk-A2TK52B2.js} +2 -2
  83. package/dist/cli/chunks/chunk-AEQMQVDJ.js +2 -0
  84. package/dist/cli/chunks/chunk-AHVUILGE.js +2 -0
  85. package/dist/cli/chunks/{chunk-PBZLLYB3.js → chunk-AOYN6XYJ.js} +1 -1
  86. package/dist/cli/chunks/{chunk-MJY6FD6N.js → chunk-BFCMOMOF.js} +1 -1
  87. package/dist/cli/chunks/{chunk-WJGATF2P.js → chunk-BNPJMPM3.js} +2 -2
  88. package/dist/cli/chunks/{chunk-4LEYR7AH.js → chunk-BOMJHE4I.js} +2 -2
  89. package/dist/cli/chunks/{chunk-WZYG4SKQ.js → chunk-CGC63MGF.js} +5 -5
  90. package/dist/cli/chunks/{chunk-ZZ2E6WS6.js → chunk-D6APBW66.js} +1 -1
  91. package/dist/cli/chunks/chunk-DD4T7ZUM.js +3 -0
  92. package/dist/cli/chunks/{chunk-FT3BXL44.js → chunk-DGUAAG3T.js} +1 -1
  93. package/dist/cli/chunks/{chunk-AXJTWYCF.js → chunk-DJLRRCR6.js} +2 -2
  94. package/dist/cli/chunks/{chunk-WEMOVPQS.js → chunk-DMZ2XOEW.js} +2 -2
  95. package/dist/cli/chunks/{chunk-IQAEANMY.js → chunk-DNFDSDKE.js} +2 -2
  96. package/dist/cli/chunks/{chunk-PMRJHQIW.js → chunk-ERMIIRYN.js} +1 -1
  97. package/dist/cli/chunks/{chunk-K2UQR3NX.js → chunk-FFACJODG.js} +2 -2
  98. package/dist/cli/chunks/{chunk-OSGQFRT2.js → chunk-FNKKENLS.js} +2 -2
  99. package/dist/cli/chunks/{chunk-ESYALM4A.js → chunk-FWI7PK4X.js} +1 -1
  100. package/dist/cli/chunks/{chunk-QANDN6CW.js → chunk-FYBTGEOV.js} +1 -1
  101. package/dist/cli/chunks/{chunk-WMVMFBMH.js → chunk-G2KQUEGY.js} +2 -2
  102. package/dist/cli/chunks/{chunk-CX5TTKTB.js → chunk-G7L5Y47C.js} +1 -1
  103. package/dist/cli/chunks/{chunk-VC4X36JJ.js → chunk-GALNZTYE.js} +2 -2
  104. package/dist/cli/chunks/chunk-GIUAY4KY.js +12 -0
  105. package/dist/cli/chunks/chunk-GM5LIYLQ.js +2 -0
  106. package/dist/cli/chunks/{chunk-JTE3QBBI.js → chunk-GOTVYSX5.js} +3 -3
  107. package/dist/cli/chunks/{chunk-XTGVTVLN.js → chunk-GUEK5DOK.js} +2 -2
  108. package/dist/cli/chunks/{chunk-ZLDOPUZY.js → chunk-HEQ23HBE.js} +2 -2
  109. package/dist/cli/chunks/{chunk-E7WWAJK5.js → chunk-HJJTLOWZ.js} +2 -2
  110. package/dist/cli/chunks/{chunk-QRP7WPSO.js → chunk-I3P5RZX7.js} +4 -4
  111. package/dist/cli/chunks/{chunk-FE2R7DOJ.js → chunk-I5U64MHU.js} +2 -2
  112. package/dist/cli/chunks/chunk-IH4OOAEP.js +2 -0
  113. package/dist/cli/chunks/{chunk-BC6LRNKU.js → chunk-IL3ESNHA.js} +2 -2
  114. package/dist/cli/chunks/{chunk-PVYTP7CC.js → chunk-IOHDE27P.js} +2 -2
  115. package/dist/cli/chunks/{chunk-T5WF5HBA.js → chunk-J3XLOHWB.js} +2 -2
  116. package/dist/cli/chunks/{chunk-MT4ZZUPF.js → chunk-J5YOXLBD.js} +1 -1
  117. package/dist/cli/chunks/{chunk-Q3BVPPHB.js → chunk-JLBUS4PR.js} +2 -2
  118. package/dist/cli/chunks/{chunk-PGKGFKSS.js → chunk-JN7MSUGK.js} +2 -2
  119. package/dist/cli/chunks/{chunk-R7RGOZ3H.js → chunk-JNLKLC7G.js} +2 -2
  120. package/dist/cli/chunks/chunk-JOGKQTCU.js +24 -0
  121. package/dist/cli/chunks/{chunk-LURKOKOG.js → chunk-JWR3NNFA.js} +1 -1
  122. package/dist/cli/chunks/chunk-KFAN5FZM.js +2 -0
  123. package/dist/cli/chunks/{chunk-PJENW5A2.js → chunk-KHUFPJE4.js} +3 -3
  124. package/dist/cli/chunks/{chunk-UOD76Y2C.js → chunk-KJB6JJXT.js} +1 -1
  125. package/dist/cli/chunks/{chunk-TKV2X6EP.js → chunk-KVN4FTPT.js} +2 -2
  126. package/dist/cli/chunks/{chunk-6DDT5OHC.js → chunk-L4IWZXSC.js} +1 -1
  127. package/dist/cli/chunks/chunk-LJ3WQIBN.js +2 -0
  128. package/dist/cli/chunks/{chunk-OAWDBVKN.js → chunk-LKGLKX2A.js} +2 -2
  129. package/dist/cli/chunks/{chunk-V7LIKEGA.js → chunk-LWHM5BWD.js} +2 -2
  130. package/dist/cli/chunks/{chunk-4HTPZ67G.js → chunk-M2RO34V7.js} +4 -4
  131. package/dist/cli/chunks/{chunk-2BDTKGEH.js → chunk-ME4LVBTT.js} +2 -2
  132. package/dist/cli/chunks/chunk-MFGYMNNY.js +2 -0
  133. package/dist/cli/chunks/{chunk-OOV2W3PM.js → chunk-MXIFVOYA.js} +2 -2
  134. package/dist/cli/chunks/{chunk-CGXLVTVK.js → chunk-NWGIQCCO.js} +1 -1
  135. package/dist/cli/chunks/chunk-NWZYULZE.js +65 -0
  136. package/dist/cli/chunks/{chunk-XZYW2RNI.js → chunk-OGLS6HB4.js} +1 -1
  137. package/dist/cli/chunks/{chunk-FCUJTBDG.js → chunk-ORHCO2I7.js} +2 -2
  138. package/dist/cli/chunks/{chunk-GK4QGLN6.js → chunk-OZBTC26R.js} +2 -2
  139. package/dist/cli/chunks/chunk-P5YSBYZV.js +2 -0
  140. package/dist/cli/chunks/{chunk-ONF657XE.js → chunk-PFSSI3YR.js} +2 -2
  141. package/dist/cli/chunks/{chunk-M7QYRRRS.js → chunk-PZF5ISGS.js} +1 -1
  142. package/dist/cli/chunks/{chunk-MBISKOYR.js → chunk-Q4DAYLH4.js} +2 -2
  143. package/dist/cli/chunks/{chunk-E6MBYXCI.js → chunk-QLWP7ZIT.js} +2 -2
  144. package/dist/cli/chunks/{chunk-H6T57HMP.js → chunk-QUK34CSU.js} +2 -2
  145. package/dist/cli/chunks/chunk-RQFC7Q33.js +2 -0
  146. package/dist/cli/chunks/{chunk-DQ3ZEAMM.js → chunk-S2KGZJHS.js} +1 -1
  147. package/dist/cli/chunks/{chunk-JAVMUPY3.js → chunk-S6SM7LJK.js} +2 -2
  148. package/dist/cli/chunks/chunk-STYNOKOM.js +2 -0
  149. package/dist/cli/chunks/{chunk-NXZDG2ED.js → chunk-SUXUCW5I.js} +2 -2
  150. package/dist/cli/chunks/chunk-SY74WSBN.js +2 -0
  151. package/dist/cli/chunks/{chunk-OZNBJZTT.js → chunk-TJOZPPZR.js} +2 -2
  152. package/dist/cli/chunks/chunk-TOSFK4VG.js +2 -0
  153. package/dist/cli/chunks/{chunk-FGE33JCO.js → chunk-UAAJ3BSW.js} +2 -2
  154. package/dist/cli/chunks/{chunk-XD7W2BE6.js → chunk-UG2J5MTY.js} +1 -1
  155. package/dist/cli/chunks/{chunk-LJTRN6ZE.js → chunk-UIYK4Y7K.js} +2 -2
  156. package/dist/cli/chunks/{chunk-NWL7UQPY.js → chunk-UUVTLYUK.js} +2 -2
  157. package/dist/cli/chunks/{chunk-R2E73QTH.js → chunk-VDGWDDBC.js} +2 -2
  158. package/dist/cli/chunks/{chunk-4UIACR5V.js → chunk-VEAVDXXT.js} +2 -2
  159. package/dist/cli/chunks/{chunk-ZYAIIW3U.js → chunk-VQB5SLXZ.js} +2 -2
  160. package/dist/cli/chunks/{chunk-ZXLAY3BL.js → chunk-VU4QET3C.js} +2 -2
  161. package/dist/cli/chunks/{chunk-JDUJCNS5.js → chunk-VUS4VRPQ.js} +2 -2
  162. package/dist/cli/chunks/{chunk-STRHCEUL.js → chunk-VVKENR4I.js} +1 -1
  163. package/dist/cli/chunks/{chunk-GB4LEEYS.js → chunk-WE7KIXR6.js} +2 -2
  164. package/dist/cli/chunks/{chunk-C2ICHYJH.js → chunk-WELNFHDN.js} +1 -1
  165. package/dist/cli/chunks/{chunk-45SNY726.js → chunk-WSZVSDD5.js} +2 -2
  166. package/dist/cli/chunks/{chunk-DDNFBXJJ.js → chunk-WUYJYRBY.js} +1 -1
  167. package/dist/cli/chunks/{chunk-KYO7ME7T.js → chunk-WVN4YJSF.js} +2 -2
  168. package/dist/cli/chunks/{chunk-FZY2AFLS.js → chunk-XH774Q6Z.js} +1 -1
  169. package/dist/cli/chunks/{chunk-WKORFEXG.js → chunk-XNXOW7BQ.js} +2 -2
  170. package/dist/cli/chunks/{chunk-AUWWCPVO.js → chunk-Y3X5OS5F.js} +2 -2
  171. package/dist/cli/chunks/chunk-YPMBD44A.js +2 -0
  172. package/dist/cli/chunks/{chunk-RUD4F7IT.js → chunk-YZBY4ZRF.js} +2 -2
  173. package/dist/cli/chunks/{chunk-ALW3NHF2.js → chunk-Z3PSKGBO.js} +2 -2
  174. package/dist/cli/chunks/{chunk-FYJSJLTP.js → chunk-ZCRLZINE.js} +2 -2
  175. package/dist/cli/chunks/{chunk-I4JO4LD3.js → chunk-ZFZX2NA3.js} +2 -2
  176. package/dist/cli/chunks/{chunk-7WP5HEJQ.js → chunk-ZU5VHW6P.js} +2 -2
  177. package/dist/cli/chunks/{ci-44MZEXKJ.js → ci-QQ4F5TYO.js} +2 -2
  178. package/dist/cli/chunks/{ci-output-GZOZ3VUQ.js → ci-output-QC4WRENA.js} +2 -2
  179. package/dist/cli/chunks/{circuit-breaker-5BOXU65J.js → circuit-breaker-HFQUNYTK.js} +2 -2
  180. package/dist/cli/chunks/{claude-flow-setup-T5R4BHVO.js → claude-flow-setup-XNSCWIUN.js} +2 -2
  181. package/dist/cli/chunks/client-3GECKJWB.js +2 -0
  182. package/dist/cli/chunks/{cline-installer-LLROFJKC.js → cline-installer-S3CECBYL.js} +2 -2
  183. package/dist/cli/chunks/{code-ATTTFE44.js → code-QHUELDUH.js} +2 -2
  184. package/dist/cli/chunks/{code-index-extractor-S4DRQYVK.js → code-index-extractor-QLA5EQTE.js} +2 -2
  185. package/dist/cli/chunks/{codex-installer-WRPU4ITG.js → codex-installer-CQ7JNNOA.js} +2 -2
  186. package/dist/cli/chunks/{completions-EVEFMAIP.js → completions-S33U3KIT.js} +2 -2
  187. package/dist/cli/chunks/{complexity-analyzer-3RXGDVMX.js → complexity-analyzer-J7IEW3EM.js} +2 -2
  188. package/dist/cli/chunks/{continuedev-installer-TLMVH7VM.js → continuedev-installer-DVU24D37.js} +2 -2
  189. package/dist/cli/chunks/{copilot-installer-JOYO6JND.js → copilot-installer-DYISOPBC.js} +2 -2
  190. package/dist/cli/chunks/{cost-tracker-FJJO7V73.js → cost-tracker-URJADKKS.js} +2 -2
  191. package/dist/cli/chunks/{coverage-MBFLUTS3.js → coverage-NGMKJNW6.js} +3 -3
  192. package/dist/cli/chunks/cross-domain-router-UYONX76U.js +2 -0
  193. package/dist/cli/chunks/{cursor-installer-RUUOVPGH.js → cursor-installer-DFBJRDSY.js} +2 -2
  194. package/dist/cli/chunks/daemon-JSKKVVCV.js +19 -0
  195. package/dist/cli/chunks/{dag-attention-scheduler-AFCFHXDN.js → dag-attention-scheduler-YITFS6MR.js} +2 -2
  196. package/dist/cli/chunks/{detect-CUWUBG5C.js → detect-5APZP2D3.js} +2 -2
  197. package/dist/cli/chunks/{domain-handler-WHXJUWWW.js → domain-handler-WHH6XPSZ.js} +2 -2
  198. package/dist/cli/chunks/{domain-transfer-K6EVN3AJ.js → domain-transfer-SERX53SS.js} +2 -2
  199. package/dist/cli/chunks/dream-Z5QDQJSM.js +2 -0
  200. package/dist/cli/chunks/esm-node-FOI5Y3O2.js +2 -0
  201. package/dist/cli/chunks/{eval-YZDW7GLA.js → eval-FM3BLVFO.js} +2 -2
  202. package/dist/cli/chunks/{fast-paths-M4MXWH5P.js → fast-paths-4MSOOJVK.js} +2 -2
  203. package/dist/cli/chunks/{feature-flags-5CRUDVES.js → feature-flags-564YFR65.js} +2 -2
  204. package/dist/cli/chunks/{feature-flags-3YMEIR7B.js → feature-flags-WJT57IEJ.js} +2 -2
  205. package/dist/cli/chunks/{file-discovery-YBAUSWQ6.js → file-discovery-5QVG65WF.js} +2 -2
  206. package/dist/cli/chunks/{fleet-KZ7U5HH5.js → fleet-CF5JRK5B.js} +3 -3
  207. package/dist/cli/chunks/{gnn-wrapper-YPOKBUR3.js → gnn-wrapper-NYQ77563.js} +2 -2
  208. package/dist/cli/chunks/{heartbeat-handler-47WVNCNY.js → heartbeat-handler-42QJPKHE.js} +4 -4
  209. package/dist/cli/chunks/heartbeat-scheduler-7XEAV74Y.js +2 -0
  210. package/dist/cli/chunks/hnsw-adapter-NOAQ76QF.js +2 -0
  211. package/dist/cli/chunks/hnsw-index-KDIZQRSB.js +2 -0
  212. package/dist/cli/chunks/{hnsw-legacy-bridge-SZ6SXZ7G.js → hnsw-legacy-bridge-ZRR6PGWN.js} +2 -2
  213. package/dist/cli/chunks/{hnswlib-node-XVNGLWIG.js → hnswlib-node-DY7NOW76.js} +2 -2
  214. package/dist/cli/chunks/{hooks-WVVVJ2CC.js → hooks-IRRHEJLR.js} +6 -6
  215. package/dist/cli/chunks/hybrid-router-S4JXJLUY.js +2 -0
  216. package/dist/cli/chunks/{hypergraph-engine-EYTJMSNY.js → hypergraph-engine-WFHZJMP2.js} +2 -2
  217. package/dist/cli/chunks/{hypergraph-handler-JUCJMSBU.js → hypergraph-handler-LHUKR7PT.js} +3 -3
  218. package/dist/cli/chunks/impact-analyzer-VDXJBWFG.js +2 -0
  219. package/dist/cli/chunks/{init-handler-5COQTBSZ.js → init-handler-ZBIW7PSB.js} +6 -6
  220. package/dist/cli/chunks/init-wizard-Q6DEACKX.js +2 -0
  221. package/dist/cli/chunks/kernel-YNQOGTM5.js +2 -0
  222. package/dist/cli/chunks/{kilocode-installer-G54YKSIL.js → kilocode-installer-JYHA4NW7.js} +2 -2
  223. package/dist/cli/chunks/{kiro-installer-ZEKZVKTM.js → kiro-installer-OBXTRK77.js} +4 -4
  224. package/dist/cli/chunks/knowledge-graph-GOZG3YOM.js +2 -0
  225. package/dist/cli/chunks/learning-OAEJHEJD.js +107 -0
  226. package/dist/cli/chunks/{llm-router-RCOTEVVC.js → llm-router-NNEOZAVB.js} +5 -5
  227. package/dist/cli/chunks/{load-3Y35Y6FL.js → load-WIKLBESW.js} +2 -2
  228. package/dist/cli/chunks/load-test-UJLTMPXW.js +2 -0
  229. package/dist/cli/chunks/{mcp-NOHRCC4E.js → mcp-KR43GFGP.js} +2 -2
  230. package/dist/cli/chunks/{memory-GC5OPOO6.js → memory-KQIYKAYU.js} +5 -5
  231. package/dist/cli/chunks/memory-backend-WJH6XER3.js +2 -0
  232. package/dist/cli/chunks/{memory-handlers-MLQAERRE.js → memory-handlers-LAI4AO4O.js} +2 -2
  233. package/dist/cli/chunks/multi-model-executor-NPS3VOAR.js +14 -0
  234. package/dist/cli/chunks/{opencode-installer-POKAOPXI.js → opencode-installer-FE475WME.js} +2 -2
  235. package/dist/cli/chunks/{orchestrator-N2T3CYEB.js → orchestrator-MW4MZ3RW.js} +6 -6
  236. package/dist/cli/chunks/{pipeline-KAVKGC5V.js → pipeline-R2TGZSUA.js} +2 -2
  237. package/dist/cli/chunks/{platform-DJPEA24D.js → platform-N2GZBCBP.js} +2 -2
  238. package/dist/cli/chunks/{plugin-RHZZP3OH.js → plugin-V2AQF23V.js} +2 -2
  239. package/dist/cli/chunks/{prime-radiant-advanced-wasm-6A57VDNI.js → prime-radiant-advanced-wasm-ZQSYRLRS.js} +2 -2
  240. package/dist/cli/chunks/protocol-executor-LYYYHXAX.js +2 -0
  241. package/dist/cli/chunks/{protocol-handler-FBR254XL.js → protocol-handler-V3U724F2.js} +2 -2
  242. package/dist/cli/chunks/{prove-YZXY34P6.js → prove-NCH56HZB.js} +2 -2
  243. package/dist/cli/chunks/provider-manager-7NUHS3T5.js +24 -0
  244. package/dist/cli/chunks/qe-reasoning-bank-JK4UKLYY.js +2 -0
  245. package/dist/cli/chunks/{quality-MICFT3VU.js → quality-J3IVPPPW.js} +2 -2
  246. package/dist/cli/chunks/queen-coordinator-6OKLSCHV.js +2 -0
  247. package/dist/cli/chunks/{real-embeddings-HJCRBDOM.js → real-embeddings-VURZXAEY.js} +2 -2
  248. package/dist/cli/chunks/{roocode-installer-K5LIUYDR.js → roocode-installer-STWFJGMR.js} +2 -2
  249. package/dist/cli/chunks/router-DDZHCGUD.js +2 -0
  250. package/dist/cli/chunks/routing-feedback-BA66F37P.js +2 -0
  251. package/dist/cli/chunks/{routing-handler-2KIQHWUQ.js → routing-handler-6GZT7EXM.js} +2 -2
  252. package/dist/cli/chunks/{ruvector-commands-DYGX7PI6.js → ruvector-commands-LCPAH6WH.js} +2 -2
  253. package/dist/cli/chunks/{rvf-dual-writer-UTKSIJBG.js → rvf-dual-writer-76LWFT5X.js} +2 -2
  254. package/dist/cli/chunks/{rvf-migration-adapter-KVJLHJO7.js → rvf-migration-adapter-G7KFWJKY.js} +2 -2
  255. package/dist/cli/chunks/{rvf-migration-coordinator-CRIV4YVR.js → rvf-migration-coordinator-3DXOUPWF.js} +2 -2
  256. package/dist/cli/chunks/rvf-native-adapter-TXTRJNPW.js +2 -0
  257. package/dist/cli/chunks/safe-db-IFBVWIGF.js +2 -0
  258. package/dist/cli/chunks/schedule-WMZLOPCW.js +2 -0
  259. package/dist/cli/chunks/scheduler-WBORWJD5.js +2 -0
  260. package/dist/cli/chunks/{security-KSEP56UL.js → security-XDBPYA5T.js} +3 -3
  261. package/dist/cli/chunks/shared-rvf-adapter-SQQ27EEI.js +2 -0
  262. package/dist/cli/chunks/{shared-rvf-dual-writer-HD5QOOJD.js → shared-rvf-dual-writer-UGXTS2XI.js} +2 -2
  263. package/dist/cli/chunks/sqlite-persistence-XH47B3BG.js +2 -0
  264. package/dist/cli/chunks/{status-handler-AMKMMUNW.js → status-handler-ZLXES3QL.js} +2 -2
  265. package/dist/cli/chunks/{structural-health-GUTWSPBY.js → structural-health-4PFCOQ7T.js} +2 -2
  266. package/dist/cli/chunks/{sync-OSJF3J4K.js → sync-3DROIEZN.js} +2 -2
  267. package/dist/cli/chunks/{task-handler-4V4WMTJE.js → task-handler-4UGZ5VIE.js} +2 -2
  268. package/dist/cli/chunks/{task-handlers-EAORRI7E.js → task-handlers-I5VVBTWI.js} +2 -2
  269. package/dist/cli/chunks/{test-EGW6L6ZI.js → test-Z2MM7O5A.js} +4 -4
  270. package/dist/cli/chunks/{test-scheduling-UK2GVD67.js → test-scheduling-AP76GKN5.js} +4 -4
  271. package/dist/cli/chunks/{token-bootstrap-DT2FQWIK.js → token-bootstrap-P54N6PZV.js} +2 -2
  272. package/dist/cli/chunks/{token-usage-HQVOD3I3.js → token-usage-AXAZTPA6.js} +2 -2
  273. package/dist/cli/chunks/{transformers-TDZOMLEQ.js → transformers-VOZ2Z7FS.js} +2 -2
  274. package/dist/cli/chunks/{tree-sitter-wasm-parser-XT3A32J7.js → tree-sitter-wasm-parser-IYKLBTXB.js} +2 -2
  275. package/dist/cli/chunks/{types-QOT5P6RH.js → types-TKDH5EBW.js} +2 -2
  276. package/dist/cli/chunks/unified-memory-NHJHPLIC.js +2 -0
  277. package/dist/cli/chunks/unified-memory-hnsw-IMMCI2XK.js +2 -0
  278. package/dist/cli/chunks/unified-persistence-JS6CEV35.js +2 -0
  279. package/dist/cli/chunks/{validate-SXCT3APL.js → validate-ZGF5FVZE.js} +2 -2
  280. package/dist/cli/chunks/{validate-swarm-WGJUWWJ6.js → validate-swarm-OPWWUWYA.js} +2 -2
  281. package/dist/cli/chunks/{vibium-ONK73HYI.js → vibium-HEQUGRKJ.js} +2 -2
  282. package/dist/cli/chunks/visual-security-XLO5JBVP.js +2 -0
  283. package/dist/cli/chunks/{web-tree-sitter-Q5TXI2BE.js → web-tree-sitter-JZ7JCJJR.js} +2 -2
  284. package/dist/cli/chunks/{windsurf-installer-HTJT3VIM.js → windsurf-installer-2SGRCS6C.js} +2 -2
  285. package/dist/cli/chunks/{witness-chain-7TPWQZ2P.js → witness-chain-LJUYOCB5.js} +2 -2
  286. package/dist/cli/chunks/witness-chain-PPWPHYTY.js +2 -0
  287. package/dist/cli/chunks/{workflow-LTC4J62A.js → workflow-QORI3KO7.js} +4 -4
  288. package/dist/cli/chunks/workflow-orchestrator-H4DKRHVP.js +2 -0
  289. package/dist/cli/chunks/{wrappers-TWCCXU2M.js → wrappers-3NR7LNB5.js} +2 -2
  290. package/dist/cli/commands/learning.js +28 -8
  291. package/dist/cli/commands/llm-router.js +3 -3
  292. package/dist/coordination/consensus/providers/claude-provider.d.ts +3 -3
  293. package/dist/coordination/consensus/providers/claude-provider.js +6 -3
  294. package/dist/coordination/task-executor.js +5 -5
  295. package/dist/domains/chaos-resilience/services/chaos-engineer.js +4 -4
  296. package/dist/domains/code-intelligence/services/knowledge-graph.js +5 -5
  297. package/dist/domains/constants.d.ts +4 -4
  298. package/dist/domains/constants.js +4 -4
  299. package/dist/domains/contract-testing/services/contract-validator.js +4 -4
  300. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +5 -5
  301. package/dist/domains/coverage-analysis/services/gap-detector.js +5 -5
  302. package/dist/domains/defect-intelligence/services/defect-predictor.js +5 -5
  303. package/dist/domains/defect-intelligence/services/root-cause-analyzer.js +5 -5
  304. package/dist/domains/learning-optimization/services/learning-coordinator.js +4 -4
  305. package/dist/domains/quality-assessment/services/deployment-advisor.js +5 -5
  306. package/dist/domains/quality-assessment/services/quality-analyzer.js +5 -5
  307. package/dist/domains/requirements-validation/services/requirements-validator.js +5 -5
  308. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +5 -5
  309. package/dist/domains/test-execution/services/test-executor.js +4 -4
  310. package/dist/domains/test-generation/services/test-data-generator.d.ts +1 -0
  311. package/dist/domains/test-generation/services/test-data-generator.js +17 -3
  312. package/dist/domains/test-generation/services/test-generator.js +5 -5
  313. package/dist/domains/visual-accessibility/services/visual-tester.js +4 -4
  314. package/dist/init/init-wizard-steps.js +1 -1
  315. package/dist/init/kiro-installer.js +8 -8
  316. package/dist/init/phases/12-verification.js +1 -1
  317. package/dist/integrations/agentic-flow/model-router/types.js +8 -8
  318. package/dist/mcp/bundle.js +1782 -1790
  319. package/dist/mcp/protocol-server.js +20 -10
  320. package/dist/mcp/security/sampling-server.js +1 -1
  321. package/dist/routing/advisor/multi-model-executor.d.ts +6 -2
  322. package/dist/routing/advisor/multi-model-executor.js +19 -3
  323. package/dist/routing/security/cyber-pin.d.ts +58 -0
  324. package/dist/routing/security/cyber-pin.js +75 -0
  325. package/dist/shared/llm/cost-tracker.js +5 -0
  326. package/dist/shared/llm/effort-resolver.d.ts +79 -0
  327. package/dist/shared/llm/effort-resolver.js +128 -0
  328. package/dist/shared/llm/interfaces.d.ts +11 -1
  329. package/dist/shared/llm/metrics/cost-metrics.js +1 -1
  330. package/dist/shared/llm/model-mapping.js +31 -0
  331. package/dist/shared/llm/model-registry.d.ts +40 -0
  332. package/dist/shared/llm/model-registry.js +126 -2
  333. package/dist/shared/llm/provider-manager.js +1 -1
  334. package/dist/shared/llm/providers/bedrock.js +9 -7
  335. package/dist/shared/llm/providers/claude.js +31 -4
  336. package/dist/shared/llm/router/agent-router-config.js +16 -16
  337. package/dist/shared/llm/router/hybrid-router.js +18 -1
  338. package/dist/shared/llm/router/routing-rules.js +9 -9
  339. package/dist/shared/llm/router/types.js +29 -29
  340. package/dist/shared/llm/translation/message-formatter.js +3 -3
  341. package/package.json +7 -5
  342. package/dist/cli/chunks/adapter-EOD4AG2T.js +0 -2
  343. package/dist/cli/chunks/aqe-learning-engine-6REY3BZB.js +0 -2
  344. package/dist/cli/chunks/base-HFVYEJKR.js +0 -2
  345. package/dist/cli/chunks/browser-workflow-GPR3IS36.js +0 -2
  346. package/dist/cli/chunks/chunk-2FW56URL.js +0 -65
  347. package/dist/cli/chunks/chunk-4GGDA6PF.js +0 -2
  348. package/dist/cli/chunks/chunk-5F2CEYZG.js +0 -3029
  349. package/dist/cli/chunks/chunk-6Q7F4HBV.js +0 -12
  350. package/dist/cli/chunks/chunk-7IJIOZHW.js +0 -5
  351. package/dist/cli/chunks/chunk-A3YIGC75.js +0 -18
  352. package/dist/cli/chunks/chunk-AAHBVTUJ.js +0 -2
  353. package/dist/cli/chunks/chunk-E6HTC3I2.js +0 -2
  354. package/dist/cli/chunks/chunk-FJZQH4JB.js +0 -2
  355. package/dist/cli/chunks/chunk-GIWDEW4K.js +0 -2
  356. package/dist/cli/chunks/chunk-HBQRFR7Q.js +0 -2
  357. package/dist/cli/chunks/chunk-HJL4CRV6.js +0 -3
  358. package/dist/cli/chunks/chunk-K5TK4HNR.js +0 -2
  359. package/dist/cli/chunks/chunk-LVCBXFHT.js +0 -2
  360. package/dist/cli/chunks/chunk-NVMJS347.js +0 -2
  361. package/dist/cli/chunks/chunk-UGCPQGQV.js +0 -2
  362. package/dist/cli/chunks/chunk-UZX62Z2K.js +0 -2
  363. package/dist/cli/chunks/chunk-X7IRGKAM.js +0 -2
  364. package/dist/cli/chunks/chunk-XEHMWICD.js +0 -24
  365. package/dist/cli/chunks/chunk-Z7E27V5F.js +0 -2
  366. package/dist/cli/chunks/client-NGAZ5BMU.js +0 -2
  367. package/dist/cli/chunks/cross-domain-router-ORAWSROD.js +0 -2
  368. package/dist/cli/chunks/daemon-LGFCMQVV.js +0 -19
  369. package/dist/cli/chunks/dream-N72NDTWM.js +0 -2
  370. package/dist/cli/chunks/esm-node-OUE76NVS.js +0 -2
  371. package/dist/cli/chunks/heartbeat-scheduler-4CKQSIHQ.js +0 -2
  372. package/dist/cli/chunks/hnsw-adapter-DO7CQXCP.js +0 -2
  373. package/dist/cli/chunks/hnsw-index-B6FEXSZX.js +0 -2
  374. package/dist/cli/chunks/hybrid-router-236O2EMV.js +0 -2
  375. package/dist/cli/chunks/impact-analyzer-E2DVJTE7.js +0 -2
  376. package/dist/cli/chunks/init-wizard-KQCWXEDA.js +0 -2
  377. package/dist/cli/chunks/kernel-KBING4CP.js +0 -2
  378. package/dist/cli/chunks/knowledge-graph-AF6OAAJ5.js +0 -2
  379. package/dist/cli/chunks/learning-JE7PDBQV.js +0 -107
  380. package/dist/cli/chunks/load-test-LKIZ376E.js +0 -2
  381. package/dist/cli/chunks/memory-backend-HHGGHQYM.js +0 -2
  382. package/dist/cli/chunks/multi-model-executor-YE4JOCN5.js +0 -14
  383. package/dist/cli/chunks/protocol-executor-RNXGXAZC.js +0 -2
  384. package/dist/cli/chunks/provider-manager-H7QVBYXM.js +0 -24
  385. package/dist/cli/chunks/qe-reasoning-bank-ZMDU5MUW.js +0 -2
  386. package/dist/cli/chunks/queen-coordinator-4XWCCVIY.js +0 -2
  387. package/dist/cli/chunks/router-JYGSCGGM.js +0 -2
  388. package/dist/cli/chunks/routing-feedback-DO5FLA62.js +0 -2
  389. package/dist/cli/chunks/rvf-native-adapter-SS6KKXJM.js +0 -2
  390. package/dist/cli/chunks/safe-db-A66XXHI7.js +0 -2
  391. package/dist/cli/chunks/schedule-DQRJD5H5.js +0 -2
  392. package/dist/cli/chunks/scheduler-PLSXEVV7.js +0 -2
  393. package/dist/cli/chunks/shared-rvf-adapter-DE2OVTUI.js +0 -2
  394. package/dist/cli/chunks/sqlite-persistence-R4IDAV5X.js +0 -2
  395. package/dist/cli/chunks/unified-memory-3MDWRNDW.js +0 -2
  396. package/dist/cli/chunks/unified-memory-hnsw-TEJXRLAS.js +0 -2
  397. package/dist/cli/chunks/unified-persistence-ALHQN2LG.js +0 -2
  398. package/dist/cli/chunks/visual-security-WFWC5N2E.js +0 -2
  399. package/dist/cli/chunks/witness-chain-T34QYEFI.js +0 -2
  400. package/dist/cli/chunks/workflow-orchestrator-UIVPDA7M.js +0 -2
@@ -1,19 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a as N}from"./chunk-ESYALM4A.js";import"./chunk-FT3BXL44.js";import{Command as ae}from"commander";import s from"chalk";import{cpus as ne,freemem as ie,totalmem as re,loadavg as se}from"os";var f=class{queues={now:[],next:[],later:[]};_maxSize;constructor(e=1e3){this._maxSize=e}enqueue(e){return this.size>=this._maxSize?!1:(this.queues[e.priority].push(e),!0)}dequeue(){let e=Date.now();for(let t of["now","next","later"]){let o=this.queues[t];for(;o.length>0;){let n=o.shift();if(!(n.ttlMs&&e-n.createdAt>n.ttlMs))return n}}}peek(){let e=Date.now();for(let t of["now","next","later"]){let o=this.queues[t];for(let n of o)if(!n.ttlMs||e-n.createdAt<=n.ttlMs)return n}}drainPriority(e){let t=this.queues[e].splice(0),o=Date.now();return t.filter(n=>!n.ttlMs||o-n.createdAt<=n.ttlMs)}pruneExpired(){let e=0,t=Date.now();for(let o of["now","next","later"]){let n=this.queues[o].length;this.queues[o]=this.queues[o].filter(i=>!i.ttlMs||t-i.createdAt<=i.ttlMs),e+=n-this.queues[o].length}return e}get size(){return this.queues.now.length+this.queues.next.length+this.queues.later.length}get depths(){return{now:this.queues.now.length,next:this.queues.next.length,later:this.queues.later.length}}get isEmpty(){return this.size===0}clear(){this.queues.now=[],this.queues.next=[],this.queues.later=[]}};import{watch as E}from"fs";import{execFile as L}from"child_process";import{promisify as U}from"util";import{resolve as W,join as z}from"path";import{existsSync as j,readFileSync as B}from"fs";var M=U(L),J={repoRoot:process.cwd(),debounceMs:500,maxChangedFiles:200,pollIntervalMs:5e3},y=class{constructor(e,t){this.queue=e;this.options={...J,...t}}watcher;pollTimer;options;lastKnownHeads=new Map;debounceTimer;_running=!1;_polling=!1;get running(){return this._running}async start(){if(this._running)return;let e=W(this.options.repoRoot,".git","refs","heads");if(!j(e))throw new Error(`Git refs directory not found: ${e}`);await this.snapshotHeads(),process.platform==="darwin"||process.platform==="win32"?this.watcher=E(e,{recursive:!0},(o,n)=>{n&&this.handleRefChange(n)}):this.pollTimer=setInterval(()=>{this.poll().catch(o=>{console.debug("[GitWatcher] Poll error:",o)})},this.options.pollIntervalMs),this._running=!0}stop(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=void 0),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=void 0),this.watcher&&(this.watcher.close(),this.watcher=void 0),this._running=!1}async poll(){if(this._polling)return[];this._polling=!0;let e=[];try{let{stdout:t}=await M("git",["for-each-ref","--format=%(refname:short) %(objectname:short)","refs/heads/"],{cwd:this.options.repoRoot});for(let o of t.trim().split(`
3
- `)){if(!o)continue;let[n,i]=o.split(" "),r=this.lastKnownHeads.get(n);r&&r!==i&&(e.push(n),await this.enqueueCommitAnalysis(n,i)),this.lastKnownHeads.set(n,i)}}catch{}finally{this._polling=!1}return e}handleRefChange(e){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.processRefChange(e).catch(t=>{console.debug("[GitWatcher] Error processing ref change:",t)})},this.options.debounceMs)}async processRefChange(e){let t=e.replace(/\\/g,"/"),o=W(this.options.repoRoot,".git","refs","heads"),n=z(o,e),i;try{i=B(n,"utf-8").trim()}catch{return}this.lastKnownHeads.get(t)!==i&&(this.lastKnownHeads.set(t,i),await this.enqueueCommitAnalysis(t,i))}async enqueueCommitAnalysis(e,t){let o=[];try{let{stdout:r}=await M("git",["diff-tree","--no-commit-id","--name-only","-r",t],{cwd:this.options.repoRoot});o=r.trim().split(`
4
- `).filter(Boolean).slice(0,this.options.maxChangedFiles)}catch{}let n={type:"git_commit",branch:e,commitHash:t,changedFiles:o},i={id:`git-${t}-${Date.now()}`,priority:"next",payload:n,createdAt:Date.now(),source:"git-watcher",ttlMs:300*1e3};this.queue.enqueue(i)}async snapshotHeads(){try{let{stdout:e}=await M("git",["for-each-ref","--format=%(refname:short) %(objectname:short)","refs/heads/"],{cwd:this.options.repoRoot});for(let t of e.trim().split(`
5
- `)){if(!t)continue;let[o,n]=t.split(" ");this.lastKnownHeads.set(o,n)}}catch{}}};var V={regressionThreshold:2,gapThreshold:60,memoryPrefix:"quality-daemon:coverage"},v=class{constructor(e,t){this.queue=e;this.options={...V,...t}}options;async analyze(e,t,o){let n=await t.get(`${this.options.memoryPrefix}:snapshot`);if(await t.set(`${this.options.memoryPrefix}:snapshot`,e),!n)return{regressionDetected:!1,overallDelta:{line:0,branch:0,function:0,statement:0},affectedFiles:[],newGaps:[]};let i=n,r={line:e.overall.line-i.overall.line,branch:e.overall.branch-i.overall.branch,function:e.overall.function-i.overall.function,statement:e.overall.statement-i.overall.statement},a=r.line<-this.options.regressionThreshold||r.branch<-this.options.regressionThreshold,c=o??Object.keys(e.files),d=[],h=[];for(let g of c){let m=e.files[g],p=i.files[g];if(!m)continue;let R=p?m.line-p.line:0,$=p?m.branch-p.branch:0,I=p?m.uncoveredLines.filter(_=>!p.uncoveredLines.includes(_)):m.uncoveredLines;if((R!==0||$!==0||I.length>0)&&d.push({file:g,lineDelta:R,branchDelta:$,newUncoveredLines:I}),m.line<this.options.gapThreshold){let _=this.computeRiskScore(m,I.length);h.push({file:g,uncoveredLines:m.uncoveredLines,currentCoverage:m.line,riskScore:_})}}return(a||h.length>0)&&this.enqueueTestSuggestion(e,i,h),await t.set(`${this.options.memoryPrefix}:delta`,{timestamp:Date.now(),overallDelta:r,regressionDetected:a,affectedFileCount:d.length,gapCount:h.length}),{regressionDetected:a,overallDelta:r,affectedFiles:d,newGaps:h}}async buildSnapshot(e){let t=await e.get("coverage:latest");if(t)return{timestamp:Date.now(),overall:{line:t.line,branch:t.branch,function:t.function,statement:t.statement},files:t.files??{}}}computeRiskScore(e,t){let n=1-Math.min(100,Math.max(0,e.line))/100,i=Math.min(t/50,1);return Math.min(1,n*.6+i*.4)}enqueueTestSuggestion(e,t,o){let n={type:"coverage_delta",previousSnapshot:`snapshot-${t.timestamp}`,currentSnapshot:`snapshot-${e.timestamp}`},i={id:`coverage-delta-${Date.now()}`,priority:o.some(r=>r.riskScore>.8)?"now":"next",payload:n,createdAt:Date.now(),source:"coverage-delta",ttlMs:600*1e3};this.queue.enqueue(i)}};import{execFile as K}from"child_process";import{promisify as Y}from"util";var X=Y(K),Z={runsPerWorkflow:10,flakyThreshold:3,repo:""},w=class{constructor(e,t){this.queue=e;this.options={...Z,...t}}options;async check(){let e=await this.fetchRecentRuns(),t=this.groupByWorkflow(e),o=[],n=[],i=0;for(let[a,c]of Object.entries(t)){let d=c.filter(p=>p.conclusion==="failure").length,h=c.length>0?(c.length-d)/c.length*100:100,g=this.countConsecutiveFailures(c),m=c[0]?.conclusion??"unknown";m==="failure"&&i++,g>=this.options.flakyThreshold&&(n.push(a),this.enqueueFailureAlert(a,c[0])),o.push({name:a,recentRuns:c.length,failedRuns:d,successRate:Math.round(h*10)/10,lastConclusion:m,consecutiveFailures:g})}let r=this.calculateHealthScore(o);return{timestamp:Date.now(),workflows:o,failingWorkflows:i,flakyWorkflows:n,healthScore:r}}async fetchRecentRuns(){try{let e=["run","list","--limit",String(this.options.runsPerWorkflow*5),"--json","name,status,conclusion,headBranch,number,databaseId,createdAt"];this.options.repo&&e.push("--repo",this.options.repo);let{stdout:t}=await X("gh",e,{timeout:15e3});return JSON.parse(t).map(n=>({name:n.name,status:n.status,conclusion:n.conclusion??"pending",headBranch:n.headBranch,runNumber:n.number,databaseId:n.databaseId,createdAt:n.createdAt}))}catch{return[]}}groupByWorkflow(e){let t={};for(let o of e)t[o.name]||(t[o.name]=[]),t[o.name].push(o);for(let o of Object.keys(t))t[o]=t[o].slice(0,this.options.runsPerWorkflow);return t}countConsecutiveFailures(e){let t=0;for(let o of e)if(o.conclusion==="failure")t++;else break;return t}calculateHealthScore(e){if(e.length===0)return 100;let t=e.reduce((o,n)=>o+n.successRate,0)/e.length;return Math.round(t)}enqueueFailureAlert(e,t){let o={type:"ci_failure",workflowName:e,runId:t.databaseId,conclusion:t.conclusion},n={id:`ci-failure-${e}-${Date.now()}`,priority:"now",payload:o,createdAt:Date.now(),source:"ci-monitor",ttlMs:1800*1e3};this.queue.enqueue(n)}};var ee={memoryPrefix:"quality-daemon:suggestions",maxSuggestions:100,minRiskScore:.3},b=class{options;constructor(e){this.options={...ee,...e}}async suggest(e,t,o){let n=[],i=e.filter(a=>a.riskScore>=this.options.minRiskScore);for(let a of i){let c=t.includes(a.file),d=this.determinePriority(a,c),h=this.determineTestType(a.file),g=this.estimateEffort(a);n.push({id:`suggestion-${Date.now()}-${n.length}`,file:a.file,uncoveredLines:a.uncoveredLines.slice(0,50),suggestedTestType:h,description:this.generateDescription(a,h),priority:d,estimatedEffort:g,createdAt:Date.now(),status:"pending"})}n.sort((a,c)=>{let d={high:0,medium:1,low:2};return d[a.priority]-d[c.priority]});let r=n.slice(0,this.options.maxSuggestions);return await this.storeSuggestions(r,o),r}async getPending(e){return(await e.get(`${this.options.memoryPrefix}:list`)??[]).filter(o=>o.status==="pending")}async updateStatus(e,t,o){let n=await o.get(`${this.options.memoryPrefix}:list`);if(!n)return!1;let i=n.findIndex(a=>a.id===e);if(i===-1)return!1;let r=n.map((a,c)=>c===i?{...a,status:t}:a);return await o.set(`${this.options.memoryPrefix}:list`,r),!0}determinePriority(e,t){return e.riskScore>.8?"high":t||e.riskScore>.5?"medium":"low"}determineTestType(e){return e.includes("/api/")||e.includes("/routes/")||e.includes("/handlers/")?"integration":e.includes("/e2e/")||e.includes("/pages/")||e.includes("/views/")?"e2e":"unit"}estimateEffort(e){return e.uncoveredLines.length<=10?"small":e.uncoveredLines.length<=50?"medium":"large"}generateDescription(e,t){let o=e.uncoveredLines.length,n=Math.round(e.currentCoverage);return`Add ${t} tests for ${e.file} (${o} uncovered lines, ${n}% coverage, risk ${(e.riskScore*100).toFixed(0)}%)`}async storeSuggestions(e,t){let i=[...(await t.get(`${this.options.memoryPrefix}:list`)??[]).filter(r=>r.status!=="pending"),...e].slice(-this.options.maxSuggestions);await t.set(`${this.options.memoryPrefix}:list`,i),await t.set(`${this.options.memoryPrefix}:count`,{pending:e.length,total:i.length,lastUpdated:Date.now()})}};var te={memoryPrefix:"quality-daemon:nightly",maxEntryAge:6048e5,nightlyHour:2},k=class{constructor(e,t){this.queue=e;this.options={...te,...t}}options;lastRunDate;shouldRun(){let e=new Date,t=e.toISOString().split("T")[0];return this.lastRunDate===t?!1:e.getHours()>=this.options.nightlyHour}scheduleIfDue(){if(!this.shouldRun())return!1;let e={type:"nightly",tasks:["consolidate_patterns","prune_expired","generate_report"]},t={id:`nightly-${Date.now()}`,priority:"later",payload:e,createdAt:Date.now(),source:"nightly-consolidation",ttlMs:720*60*1e3};return this.queue.enqueue(t)}async execute(e,t){let o=Date.now(),n=new Date().toISOString().split("T")[0],i=await this.consolidatePatterns(e),r=await this.pruneExpired(e),a=this.generateReport(n,t);await e.set(`${this.options.memoryPrefix}:report:${n}`,a),this.lastRunDate=n;let c={timestamp:Date.now(),patternsConsolidated:i,entriesPruned:r,reportGenerated:!0,durationMs:Date.now()-o};return await e.set(`${this.options.memoryPrefix}:last-result`,c),c}async getLastResult(e){return e.get(`${this.options.memoryPrefix}:last-result`)}async consolidatePatterns(e){let t=await e.search("quality-daemon:*"),o=0;return await e.get("quality-daemon:suggestions:count")&&o++,await e.get("quality-daemon:coverage:delta")&&o++,o}async pruneExpired(e){let t=await e.search("quality-daemon:*"),o=0,n=Date.now();for(let i of t){if(i.endsWith(":snapshot")||i.endsWith(":list"))continue;let r=await e.get(i);r&&typeof r.timestamp=="number"&&n-r.timestamp>this.options.maxEntryAge&&(await e.set(i,{pruned:!0,prunedAt:n}),o++)}return o}generateReport(e,t){return{date:e,coverageHealth:t.coverageHealth??0,ciHealth:t.ciHealth??0,commitsAnalyzed:t.commitsAnalyzed??0,suggestionsGenerated:t.suggestionsGenerated??0,notificationsSent:t.notificationsSent??0,queueDepthAvg:t.queueDepthAvg??0,daemonUptime:t.uptimeSeconds??0}}};import{writeFileSync as A,mkdirSync as Q,readdirSync as P,readFileSync as F,unlinkSync as G}from"fs";import{join as C,resolve as oe}from"path";var O={notificationsDir:oe(process.cwd(),".agentic-qe","notifications"),maxNotifications:200},S=class{notificationsDir;maxNotifications;webhookUrl;urlValidator;_sentCount=0;constructor(e){this.notificationsDir=e?.notificationsDir??O.notificationsDir,this.maxNotifications=e?.maxNotifications??O.maxNotifications,this.webhookUrl=e?.webhookUrl,this.urlValidator=e?.urlValidator}get sentCount(){return this._sentCount}initialize(){Q(this.notificationsDir,{recursive:!0})}async send(e){let t={...e,id:`notif-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:Date.now(),read:!1};return this.writeToFile(t),this.webhookUrl&&await this.sendWebhook(t),this._sentCount++,this.pruneOldNotifications(),t}list(e){let t=e?.limit??50;try{let o=P(this.notificationsDir).filter(i=>i.endsWith(".json")).sort().reverse(),n=[];for(let i of o){if(n.length>=t)break;try{let r=F(C(this.notificationsDir,i),"utf-8"),a=JSON.parse(r);if(e?.unreadOnly&&a.read||e?.type&&a.type!==e.type)continue;n.push(a)}catch{}}return n}catch{return[]}}markRead(e){try{let t=P(this.notificationsDir).filter(r=>r.endsWith(`-${e}.json`));if(t.length===0)return!1;let o=C(this.notificationsDir,t[0]),i={...JSON.parse(F(o,"utf-8")),read:!0};return A(o,JSON.stringify(i,null,2)),!0}catch{return!1}}clear(){try{let e=P(this.notificationsDir).filter(t=>t.endsWith(".json"));for(let t of e)G(C(this.notificationsDir,t));return e.length}catch{return 0}}writeToFile(e){try{Q(this.notificationsDir,{recursive:!0});let t=`${e.timestamp}-${e.id}.json`,o=C(this.notificationsDir,t);A(o,JSON.stringify(e,null,2))}catch(t){console.debug("[NotificationService] Failed to write notification:",t)}}async sendWebhook(e){if(this.webhookUrl){if(this.urlValidator&&!this.urlValidator(this.webhookUrl)){console.warn("[NotificationService] Webhook URL blocked by SSRF guard:",this.webhookUrl);return}try{let t=await fetch(this.webhookUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:AbortSignal.timeout(5e3)});t.ok||console.debug(`[NotificationService] Webhook returned ${t.status}`)}catch(t){console.debug("[NotificationService] Webhook delivery failed:",t)}}}pruneOldNotifications(){try{let e=P(this.notificationsDir).filter(o=>o.endsWith(".json")).sort();if(e.length<=this.maxNotifications)return;let t=e.slice(0,e.length-this.maxNotifications);for(let o of t)G(C(this.notificationsDir,o))}catch{}}};var q="quality-daemon",D=class{constructor(e){this.backend=e}async get(e){return this.backend.kvGet(e,q)}async set(e,t){await this.backend.kvSet(e,t,q)}async search(e){return this.backend.kvSearch(e,q)}};var T={tickIntervalMs:3e4,ciPollIntervalMs:5*6e4,coverageCheckIntervalMs:2*6e4,cpuThreshold:.7,memoryThreshold:.8},x=class{queue;gitWatcher;coverageDelta;ciMonitor;testSuggester;nightlyConsolidation;notificationService;tickTimer;_running=!1;_startedAt=0;_tickCount=0;_lastTickAt;_throttled=!1;_commitsAnalyzed=0;_suggestionsGenerated=0;_ciHealth=100;_coverageHealth=100;_lastCICheck;_lastCoverageCheck;_memory;config;constructor(e){this.config={tickIntervalMs:e?.tickIntervalMs??T.tickIntervalMs,ciPollIntervalMs:e?.ciPollIntervalMs??T.ciPollIntervalMs,coverageCheckIntervalMs:e?.coverageCheckIntervalMs??T.coverageCheckIntervalMs,cpuThreshold:e?.cpuThreshold??T.cpuThreshold,memoryThreshold:e?.memoryThreshold??T.memoryThreshold},this.queue=new f,this.gitWatcher=new y(this.queue,e?.git),this.coverageDelta=new v(this.queue,e?.coverage),this.ciMonitor=new w(this.queue,e?.ci),this.testSuggester=new b(e?.suggestions),this.nightlyConsolidation=new k(this.queue,e?.nightly),this.notificationService=new S(e?.notifications)}get running(){return this._running}async start(e){this._running||(this._memory=e,this._running=!0,this._startedAt=Date.now(),this.notificationService.initialize(),await this.gitWatcher.start().catch(t=>{console.debug("[QualityDaemon] Git watcher failed to start:",t)}),this.scheduleTick())}async stop(){this._running&&(this._running=!1,this.tickTimer&&(clearTimeout(this.tickTimer),this.tickTimer=void 0),this.gitWatcher.stop(),this._memory&&await this._memory.set("quality-daemon:state",{stoppedAt:Date.now(),tickCount:this._tickCount,commitsAnalyzed:this._commitsAnalyzed,suggestionsGenerated:this._suggestionsGenerated}))}getStatus(){return{running:this._running,uptimeSeconds:this._running?Math.floor((Date.now()-this._startedAt)/1e3):0,tickCount:this._tickCount,queueDepth:this.queue.depths,lastTickAt:this._lastTickAt,throttled:this._throttled,commitsAnalyzed:this._commitsAnalyzed,suggestionsGenerated:this._suggestionsGenerated,notificationsSent:this.notificationService.sentCount,ciHealth:this._ciHealth,coverageHealth:this._coverageHealth,lastCICheck:this._lastCICheck,lastCoverageCheck:this._lastCoverageCheck}}scheduleTick(){this._running&&(this.tickTimer=setTimeout(()=>this.tick(),this.config.tickIntervalMs))}async tick(){if(!(!this._running||!this._memory)){if(this._tickCount++,this._lastTickAt=Date.now(),this._throttled=this.isResourceConstrained(),this._throttled){await this.processNowItems(this._memory),this.scheduleTick();return}await this.processQueue(this._memory),await this.runPeriodicChecks(this._memory),this.nightlyConsolidation.scheduleIfDue(),this.queue.pruneExpired(),this.scheduleTick()}}async processQueue(e){let t=0,o=10;for(;t<o&&!this.queue.isEmpty;){let n=this.queue.dequeue();if(!n)break;await this.handleQueueItem(n,e),t++}}async processNowItems(e){let t=this.queue.drainPriority("now");for(let o of t)await this.handleQueueItem(o,e)}async handleQueueItem(e,t){let o=e.payload;switch(o.type){case"git_commit":this._commitsAnalyzed++;let n=await this.coverageDelta.buildSnapshot(t);if(n){let i=await this.coverageDelta.analyze(n,t,o.changedFiles);if(i.regressionDetected&&await this.notificationService.send({type:"coverage_drop",title:"Coverage Regression Detected",message:`Line coverage delta: ${i.overallDelta.line.toFixed(1)}% (${i.affectedFiles.length} files affected)`,severity:"high",metadata:{delta:i.overallDelta,commit:o.commitHash}}),i.newGaps.length>0){let r=await this.testSuggester.suggest(i.newGaps,o.changedFiles,t);this._suggestionsGenerated+=r.length,r.length>0&&await this.notificationService.send({type:"suggestion_available",title:"New Test Suggestions Available",message:`${r.length} test suggestions generated for uncovered code`,severity:"info",metadata:{count:r.length}})}}break;case"coverage_delta":{let i=await this.testSuggester.getPending(t);i.length>0&&await this.notificationService.send({type:"suggestion_available",title:"Test Suggestions Pending",message:`${i.length} test suggestions awaiting review`,severity:"info",metadata:{count:i.length}});break}case"gate_failure":await this.notificationService.send({type:"gate_failure",title:`Quality Gate Failed: ${o.gateName}`,message:`Score ${o.score} below threshold ${o.threshold}`,severity:"critical",metadata:{gate:o.gateName,score:o.score,threshold:o.threshold}});break;case"ci_failure":await this.notificationService.send({type:"ci_failure",title:`CI Failure: ${o.workflowName}`,message:`Workflow ${o.workflowName} run #${o.runId} concluded: ${o.conclusion}`,severity:"high",metadata:{workflow:o.workflowName,runId:o.runId}});break;case"nightly":{let i={coverageHealth:this._coverageHealth,ciHealth:this._ciHealth,commitsAnalyzed:this._commitsAnalyzed,suggestionsGenerated:this._suggestionsGenerated,notificationsSent:this.notificationService.sentCount,queueDepthAvg:this.queue.size,uptimeSeconds:Math.floor((Date.now()-this._startedAt)/1e3)};await this.nightlyConsolidation.execute(t,i);break}default:console.warn("[QualityDaemon] Unhandled payload type:",o.type)}}async runPeriodicChecks(e){let t=Date.now();if(!this._lastCICheck||t-this._lastCICheck>=this.config.ciPollIntervalMs)try{let o=await this.ciMonitor.check();this._ciHealth=o.healthScore,this._lastCICheck=t,o.flakyWorkflows.length>0&&await this.notificationService.send({type:"flaky_detected",title:"Flaky Workflows Detected",message:`${o.flakyWorkflows.length} workflows showing repeated failures: ${o.flakyWorkflows.join(", ")}`,severity:"medium",metadata:{workflows:o.flakyWorkflows}})}catch{}if(!this._lastCoverageCheck||t-this._lastCoverageCheck>=this.config.coverageCheckIntervalMs)try{let o=await this.coverageDelta.buildSnapshot(e);o&&(this._coverageHealth=Math.round((o.overall.line+o.overall.branch+o.overall.function+o.overall.statement)/4),this._lastCoverageCheck=t)}catch{}}isResourceConstrained(){if(1-ie()/re()>this.config.memoryThreshold)return!0;let t=ne().length;return(t>0?se()[0]/t:0)>this.config.cpuThreshold}};var u;function Ke(){let l=new ae("daemon").description("Manage the QE Quality Daemon").addHelpText("after",`
6
- Examples:
7
- aqe daemon start Start daemon in foreground
8
- aqe daemon stop Stop running daemon
9
- aqe daemon status Show daemon health and queue depth
10
- aqe daemon notifications List recent notifications
11
- aqe daemon clear-notifications Clear all notifications
12
- `);return l.command("start").description("Start the QE Quality Daemon").option("--tick-interval <ms>","Tick interval in milliseconds","30000").option("--ci-interval <ms>","CI poll interval in milliseconds","300000").action(async e=>{if(u?.running){console.log(s.yellow("Daemon is already running"));let r=u.getStatus();console.log(s.gray(` Uptime: ${r.uptimeSeconds}s, Ticks: ${r.tickCount}`));return}let t={tickIntervalMs:parseInt(e.tickInterval,10),ciPollIntervalMs:parseInt(e.ciInterval,10),notifications:{urlValidator:r=>{try{let c=new URL(r).hostname.replace(/^\[|\]$/g,"");return!N(c)}catch{return!1}}}};u=new x(t);let o;try{let{UnifiedMemoryManager:r}=await import("./unified-memory-3MDWRNDW.js"),a=await r.getInstanceAsync();o=new D(a),console.log(s.gray(" Storage: SQLite (persistent)"))}catch{let r=new Map;o={async get(a){return r.get(a)},async set(a,c){r.set(a,c)},async search(a){let c=a.replace(/[.+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(c.replace(/\*/g,".*"));return Array.from(r.keys()).filter(h=>d.test(h))}},console.log(s.yellow(" Storage: in-memory (no SQLite available, state will not persist)"))}console.log(s.green("Starting QE Quality Daemon...")),await u.start(o),console.log(s.green("QE Quality Daemon started")),console.log(s.gray(` Tick interval: ${t.tickIntervalMs}ms`)),console.log(s.gray(` CI poll interval: ${t.ciPollIntervalMs}ms`)),console.log(s.gray(` PID: ${process.pid}`)),console.log(s.gray(`
13
- Press Ctrl+C to stop`));let n=setInterval(()=>{u?.running||clearInterval(n)},5e3),i=async()=>{console.log(s.yellow(`
14
- Stopping QE Quality Daemon...`)),await u?.stop(),clearInterval(n),console.log(s.green("Daemon stopped")),process.exit(0)};process.once("SIGINT",i),process.once("SIGTERM",i)}),l.command("stop").description("Stop the QE Quality Daemon").action(async()=>{if(!u?.running){console.log(s.yellow("No running daemon found"));return}await u.stop(),console.log(s.green("Daemon stopped")),u=void 0}),l.command("status").description("Show daemon health and queue status").action(()=>{if(!u){console.log(s.yellow("No daemon instance (start with: aqe daemon start)"));return}let e=u.getStatus();console.log(s.bold(`
15
- QE Quality Daemon Status`)),console.log(s.gray("\u2500".repeat(40))),console.log(` Running: ${e.running?s.green("yes"):s.red("no")}`),console.log(` Uptime: ${le(e.uptimeSeconds)}`),console.log(` Ticks: ${e.tickCount}`),console.log(` Throttled: ${e.throttled?s.yellow("yes"):s.green("no")}`),console.log(s.bold(`
16
- Queue Depth`)),console.log(` Now: ${e.queueDepth.now}`),console.log(` Next: ${e.queueDepth.next}`),console.log(` Later: ${e.queueDepth.later}`),console.log(s.bold(`
17
- Health`)),console.log(` CI: ${H(e.ciHealth)}${e.ciHealth}%${s.reset("")}`),console.log(` Coverage: ${H(e.coverageHealth)}${e.coverageHealth}%${s.reset("")}`),console.log(s.bold(`
18
- Activity`)),console.log(` Commits: ${e.commitsAnalyzed}`),console.log(` Suggestions: ${e.suggestionsGenerated}`),console.log(` Notifications: ${e.notificationsSent}`),console.log()}),l.command("notifications").description("List recent notifications").option("--unread","Show only unread notifications").option("--limit <n>","Maximum notifications to show","20").option("--type <type>","Filter by type (gate_failure, coverage_drop, flaky_detected, etc.)").action(e=>{if(!u){console.log(s.yellow("No daemon instance"));return}let t=u.notificationService.list({unreadOnly:e.unread,limit:parseInt(e.limit,10),type:e.type});if(t.length===0){console.log(s.gray("No notifications"));return}console.log(s.bold(`
19
- Notifications (${t.length})`)),console.log(s.gray("\u2500".repeat(60)));for(let o of t){let n=ce(o.severity),i=new Date(o.timestamp).toLocaleString(),r=o.read?s.gray("\u2713"):s.yellow("\u25CF");console.log(`${r} ${n} ${s.bold(o.title)}`),console.log(` ${o.message}`),console.log(s.gray(` ${i} [${o.type}]`)),console.log()}}),l.command("clear-notifications").description("Clear all notifications").action(()=>{if(!u){console.log(s.yellow("No daemon instance"));return}let e=u.notificationService.clear();console.log(s.green(`Cleared ${e} notifications`))}),l}function le(l){if(l<60)return`${l}s`;if(l<3600)return`${Math.floor(l/60)}m ${l%60}s`;let e=Math.floor(l/3600),t=Math.floor(l%3600/60);return`${e}h ${t}m`}function H(l){return l>=80?s.green(""):l>=60?s.yellow(""):s.red("")}function ce(l){switch(l){case"critical":return s.red("!!");case"high":return s.red("!");case"medium":return s.yellow("~");case"low":return s.blue("-");case"info":return s.gray("i");default:return" "}}export{Ke as createDaemonCommand};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u}from"./chunk-4HTPZ67G.js";import"./chunk-E7WWAJK5.js";import"./chunk-XEHMWICD.js";import"./chunk-7IJIOZHW.js";import"./chunk-6ZTKAP4X.js";import"./chunk-2FW56URL.js";import"./chunk-UOD76Y2C.js";import"./chunk-DQ3ZEAMM.js";import"./chunk-CGXLVTVK.js";import"./chunk-FGE33JCO.js";import"./chunk-FYJSJLTP.js";import"./chunk-OZNBJZTT.js";import"./chunk-XQHTGKXD.js";import"./chunk-AUWWCPVO.js";import"./chunk-45SNY726.js";import"./chunk-TKV2X6EP.js";import"./chunk-I4JO4LD3.js";import"./chunk-NWL7UQPY.js";import"./chunk-Z7E27V5F.js";import"./chunk-XTGVTVLN.js";import"./chunk-WEMOVPQS.js";import"./chunk-M7QYRRRS.js";import"./chunk-LJTRN6ZE.js";import"./chunk-CX5TTKTB.js";import"./chunk-V7LIKEGA.js";import"./chunk-T5WF5HBA.js";import"./chunk-PGKGFKSS.js";import"./chunk-R7RGOZ3H.js";import"./chunk-GB4LEEYS.js";import"./chunk-WKORFEXG.js";import"./chunk-Q3BVPPHB.js";import"./chunk-AXJTWYCF.js";import"./chunk-LNHOWUSG.js";import"./chunk-FT3BXL44.js";export{t as BUILT_IN_STRATEGIES,b as ConceptGraph,g as DEFAULT_ACTIVATION_CONFIG,a as DEFAULT_CONCEPT_GRAPH_CONFIG,m as DEFAULT_DREAM_CONFIG,q as DEFAULT_DREAM_SCHEDULER_CONFIG,i as DEFAULT_INSIGHT_CONFIG,k as DEFAULT_VALIDATION_THRESHOLDS,n as DreamEngine,r as DreamScheduler,f as HISTORY_TRIM_TARGET_RATIO,j as InsightGenerator,d as MAX_ACTIVATION_HISTORY_ENTRIES,e as MAX_COACTIVATION_ENTRIES,l as RVCOWBranchManager,u as SpeculativeDreamer,h as SpreadingActivation,c as createConceptGraph,o as createDreamEngine,s as createDreamScheduler,p as default};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a,b,c,d,e,f,g,h,i}from"./chunk-CX5TTKTB.js";import"./chunk-FT3BXL44.js";export{h as NIL,d as parse,b as stringify,c as v1,e as v3,f as v4,g as v5,a as validate,i as version};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a as v,b as k}from"./chunk-JDUJCNS5.js";import"./chunk-DDNFBXJJ.js";import"./chunk-CGXLVTVK.js";import{k as g,o as P}from"./chunk-I4JO4LD3.js";import"./chunk-NWL7UQPY.js";import"./chunk-Z7E27V5F.js";import"./chunk-XTGVTVLN.js";import"./chunk-WEMOVPQS.js";import{a as d,b as y,c as R}from"./chunk-LJTRN6ZE.js";import"./chunk-V7LIKEGA.js";import"./chunk-T5WF5HBA.js";import"./chunk-PGKGFKSS.js";import"./chunk-R7RGOZ3H.js";import"./chunk-GB4LEEYS.js";import"./chunk-WKORFEXG.js";import"./chunk-Q3BVPPHB.js";import"./chunk-AXJTWYCF.js";import"./chunk-LNHOWUSG.js";import"./chunk-FT3BXL44.js";R();import{randomUUID as M}from"crypto";var p=class{constructor(e){this.config=e}_status="idle";_lastResult;_lastRunAt;_nextRunAt;_totalExecutions=0;_successfulExecutions=0;_failedExecutions=0;_executionDurations=[];_recentResults=[];get status(){return this._status}get lastResult(){return this._lastResult}get lastRunAt(){return this._lastRunAt}get nextRunAt(){return this._nextRunAt}async initialize(){this._status="idle",this._nextRunAt=new Date(Date.now()+this.config.intervalMs)}async execute(e){let r=Date.now();this._status="running",this._lastRunAt=new Date,this._totalExecutions++;let n,t;for(let a=0;a<=this.config.retryCount;a++)try{if(e.signal.aborted)throw new Error("Worker execution aborted");t=await this.executeWithTimeout(()=>this.doExecute(e),this.config.timeoutMs,e.signal);break}catch(u){n=y(u),e.logger.warn(`Worker ${this.config.id} attempt ${a+1} failed: ${n.message}`),a<this.config.retryCount&&await this.delay(this.config.retryDelayMs)}let o=Date.now()-r;return t?(this._successfulExecutions++,this._lastResult=t):(this._failedExecutions++,t=this.createErrorResult(n,o),this._lastResult=t),this._executionDurations.push(o),this._executionDurations.length>100&&this._executionDurations.shift(),this._recentResults.push({timestamp:new Date,success:t.success,durationMs:o}),this._recentResults.length>5&&this._recentResults.shift(),this._nextRunAt=new Date(Date.now()+this.config.intervalMs),this._status=t.success?"idle":"error",await e.eventBus.publish({type:"worker.executed",workerId:this.config.id,timestamp:new Date,payload:{success:t.success,durationMs:o,findingsCount:t.findings.length,healthScore:t.metrics.healthScore}}),t}pause(){this._status!=="stopped"&&(this._status="paused")}resume(){this._status==="paused"&&(this._status="idle")}async stop(){this._status="stopped"}getHealth(){let e=this._executionDurations.length>0?this._executionDurations.reduce((n,t)=>n+t,0)/this._executionDurations.length:0,r=this._totalExecutions>0?this._successfulExecutions/this._totalExecutions:1;return{status:this._status,healthScore:Math.round(r*100),totalExecutions:this._totalExecutions,successfulExecutions:this._successfulExecutions,failedExecutions:this._failedExecutions,avgDurationMs:Math.round(e),recentResults:[...this._recentResults]}}async executeWithTimeout(e,r,n){return new Promise((t,o)=>{let a=setTimeout(()=>{o(new Error(`Worker execution timed out after ${r}ms`))},r),u=()=>{clearTimeout(a),o(new Error("Worker execution aborted"))};n.addEventListener("abort",u,{once:!0}),e().then(c=>{clearTimeout(a),n.removeEventListener("abort",u),t(c)}).catch(c=>{clearTimeout(a),n.removeEventListener("abort",u),o(c)})})}createErrorResult(e,r){return{workerId:this.config.id,timestamp:new Date,durationMs:r,success:!1,error:e.message,metrics:{itemsAnalyzed:0,issuesFound:0,healthScore:0,trend:"degrading",domainMetrics:{}},findings:[],recommendations:[]}}createResult(e,r,n,t){return{workerId:this.config.id,timestamp:new Date,durationMs:e,success:!0,metrics:r,findings:n,recommendations:t}}delay(e){return new Promise(r=>setTimeout(r,e))}generateId(){return`${Date.now()}-${M().slice(0,9)}`}};P();R();var W={id:"heartbeat-scheduler",name:"Heartbeat Scheduler",description:"Token-free maintenance: pattern promotion, stale detection, experience buffer monitoring",intervalMs:1800*1e3,priority:"normal",targetDomains:["learning-optimization"],enabled:!0,timeoutMs:6e4,retryCount:1,retryDelayMs:5e3},b=class extends p{lifecycleManager=null;dailyLogger;lastRunTimestamp=0;constructor(){super(W),this.dailyLogger=new k}async getLifecycleManager(){if(this.lifecycleManager)return this.lifecycleManager;try{let e=g();await e.initialize();let r=e.getDatabase();return this.lifecycleManager=v(r,{promotionRewardThreshold:.7,promotionMinOccurrences:2,promotionMinSuccessRate:.7,deprecationFailureThreshold:3,staleDaysThreshold:30,confidenceDecayRate:.01,minActiveConfidence:.3}),this.lifecycleManager}catch{return null}}getPendingExperienceCount(){try{return g().getDatabase().prepare("SELECT COUNT(*) as pending FROM qe_pattern_usage WHERE created_at > datetime('now', '-1 day')").get()?.pending??0}catch{return 0}}async doExecute(e){let r=Date.now();e.logger.info("Heartbeat scheduler running (token-free maintenance)");let n=[],t=[],o=await this.getLifecycleManager();if(!o)return e.logger.warn("Unified memory unavailable \u2014 returning zero-metric heartbeat"),this.createResult(Date.now()-r,{itemsAnalyzed:0,issuesFound:0,healthScore:50,trend:"stable",domainMetrics:{promoted:0,deprecated:0,decayed:0,stalePatterns:0,pendingExperiences:0,avgConfidence:0,avgSuccessRate:0}},[],[]);let a=0,u=0;try{let s=o.promoteEligiblePatterns();a=s.promoted,u=s.checked,a>0&&n.push({type:"heartbeat-promotion",severity:"info",domain:"learning-optimization",title:"Patterns Promoted",description:`${a} of ${u} short-term patterns promoted to long-term`})}catch(s){e.logger.warn("Pattern promotion failed",{error:d(s)})}let c=0,h=0;try{let s=o.deprecateStalePatterns();c=s.deprecated,h=s.checked,c>0&&n.push({type:"heartbeat-deprecation",severity:"low",domain:"learning-optimization",title:"Stale Patterns Deprecated",description:`${c} of ${h} patterns deprecated (stale, failed, or low confidence)`})}catch(s){e.logger.warn("Stale pattern detection failed",{error:d(s)})}let l=0;try{let s=this.lastRunTimestamp>0?(Date.now()-this.lastRunTimestamp)/864e5:1;l=o.applyConfidenceDecay(Math.min(s,7)).decayed}catch(s){e.logger.warn("Confidence decay failed",{error:d(s)})}let m=this.getPendingExperienceCount(),i={totalPatterns:0,activePatterns:0,deprecatedPatterns:0,promotedPatterns:0,shortTermPatterns:0,longTermPatterns:0,avgConfidence:0,avgSuccessRate:0,patternsNearDeprecation:0};try{i=o.getStats()}catch(s){e.logger.warn("Stats retrieval failed",{error:d(s)})}try{this.dailyLogger.log({timestamp:new Date,type:"pattern-promoted",summary:`Heartbeat: ${a} promoted, ${c} deprecated, ${l} decayed, ${m} pending exp, ${i.activePatterns} active patterns (avg conf: ${i.avgConfidence.toFixed(2)})`,details:{promoted:a,deprecated:c,decayed:l,pendingExperiences:m,totalPatterns:i.totalPatterns,activePatterns:i.activePatterns,avgConfidence:i.avgConfidence,avgSuccessRate:i.avgSuccessRate}}),this.dailyLogger.flush()}catch(s){e.logger.warn("Daily log write failed",{error:d(s)})}this.lastRunTimestamp=Date.now(),i.activePatterns>0&&i.patternsNearDeprecation/i.activePatterns>.5&&t.push({priority:"p2",domain:"learning-optimization",action:"Review At-Risk Patterns",description:`${i.patternsNearDeprecation} of ${i.activePatterns} active patterns are near deprecation. Manual review recommended.`,estimatedImpact:"medium",effort:"low",autoFixable:!1});let f=this.calculateHealthScore(i,a,c),D=this.determineTrend(a,c,i.activePatterns),_=Math.max(u,h),x=a+c+i.patternsNearDeprecation;return e.logger.info("Heartbeat complete",{promoted:a,deprecated:c,decayed:l,pendingExperiences:m,healthScore:f}),this.createResult(Date.now()-r,{itemsAnalyzed:_,issuesFound:x,healthScore:f,trend:D,domainMetrics:{promoted:a,deprecated:c,decayed:l,stalePatterns:i.patternsNearDeprecation,pendingExperiences:m,avgConfidence:Number(i.avgConfidence.toFixed(3)),avgSuccessRate:Number(i.avgSuccessRate.toFixed(3))}},n,t)}calculateHealthScore(e,r,n){let t=70;if(t+=Math.min(15,r*5),e.avgConfidence>0&&(t+=Math.round((e.avgConfidence-.5)*30)),e.activePatterns>0){let o=n/e.activePatterns;t-=Math.round(o*20)}return e.activePatterns>0&&e.patternsNearDeprecation/e.activePatterns>.5&&(t-=10),Math.max(0,Math.min(100,Math.round(t)))}determineTrend(e,r,n){return n===0?"stable":e>r?"improving":r>e&&r/n>.1?"degrading":"stable"}};export{b as HeartbeatSchedulerWorker};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a,c as b}from"./chunk-Q3BVPPHB.js";import"./chunk-AXJTWYCF.js";import"./chunk-LNHOWUSG.js";import"./chunk-FT3BXL44.js";b();export{a as HnswAdapter};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a,b,c,d}from"./chunk-HBQRFR7Q.js";import"./chunk-Z7E27V5F.js";import"./chunk-XTGVTVLN.js";import"./chunk-R7RGOZ3H.js";import"./chunk-Q3BVPPHB.js";import"./chunk-AXJTWYCF.js";import"./chunk-LNHOWUSG.js";import"./chunk-FT3BXL44.js";export{a as DEFAULT_HNSW_CONFIG,b as HNSWIndex,d as benchmarkHNSW,c as createHNSWIndex};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a as k,b as O}from"./chunk-UZX62Z2K.js";import{a as h,b as z}from"./chunk-LVCBXFHT.js";import{a as P}from"./chunk-GIWDEW4K.js";import{b as S,c as F}from"./chunk-LJTRN6ZE.js";import{f as I}from"./chunk-CX5TTKTB.js";import"./chunk-FT3BXL44.js";var g={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"}},G={security:g.heavyweight,"test-generation":g.standard,"code-analysis":g.standard,learning:g.standard,performance:{...g.lightweight,costSensitivity:"high"},coordination:g.lightweight,general:{...g.lightweight,requiresJsonMode:!1,latencySensitivity:"medium"},documentation:{...g.minimal,minContextSize:16e3},simple:g.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}},x=[{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-5-20251101",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-20250514",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-5-20251101",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-20250514",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-20250514",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-20250514",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-20250514",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-3-5-haiku-20241022",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-3-5-haiku-20241022",temperature:.3},enabled:!0,priority:30}];import{randomUUID as _}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()}-${_().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),c=o.outputTokens??i-n,a={timestamp:new Date,provider:e,model:t,latencyMs:r,inputTokens:n,outputTokens:c,totalTokens:i,success:o.success??!0,cost:o.cost,agentType:o.agentType};this.providerCalls.push(a),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),c=this.calculateAgentMetrics(r,i),a=r.map(u=>u.decisionTimeMs),s=r.length,l=this.countByMode(r),d=r.filter(u=>u.wasFallback).length,m=r.filter(u=>u.ruleId).length;return{byProvider:Object.fromEntries(n),byAgentType:c,totalDecisions:s,decisionsByMode:l,avgDecisionTimeMs:this.average(a),p95DecisionTimeMs:this.percentile(a,95),p99DecisionTimeMs:this.percentile(a,99),fallbackRate:s>0?d/s:0,ruleMatchRate:s>0?m/s:0,estimatedCostSavings:this.calculateCostSavings(r),ruleStats:{totalEvaluated:r.reduce((u,y)=>u+1,0),matched:m,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(a=>a.provider===e),r=this.providerCalls.filter(a=>a.provider===e),i=r.map(a=>a.latencyMs),o=t.map(a=>a.decisionTimeMs),n=r.filter(a=>a.success),c=r.filter(a=>!a.success);return{provider:e,selectionCount:t.length,ruleMatchCount:t.filter(a=>a.ruleId).length,fallbackCount:t.filter(a=>a.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((a,s)=>a+(s.cost??0),0),totalTokens:r.reduce((a,s)=>a+s.totalTokens,0),totalInputTokens:r.reduce((a,s)=>a+s.inputTokens,0),totalOutputTokens:r.reduce((a,s)=>a+s.outputTokens,0),circuitState:"closed",latencyHistogram:i.slice(-100),decisionTimeHistogram:o.slice(-100),errorCount:c.length,lastError:c.length>0?c[c.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),c=t.filter(s=>s.wasFallback).length,a=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?c/t.length:0,successRate:t.length>0?a/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 c=n.map(l=>l.latencyMs),a=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(a),successRate:n.length>0?s.length/n.length:1,avgLatencyMs:this.average(c),p95LatencyMs:this.percentile(c,95),p99LatencyMs:this.percentile(c,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 w(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),c={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(c),this.trimRecords(),this.checkAlerts(),c}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 c=n.reduce((s,l)=>s+l.totalCost,0),a=n.reduce((s,l)=>s+l.inputTokens+l.outputTokens,0);i.set(o,{totalCost:c,totalTokens:a,totalRequests:n.length,avgCostPerRequest:c/n.length,avgCostPerToken:a>0?c/a:0})}return i}getCostByAgentType(e="all"){let t=this.getPeriodStart(e),r=this.filterByTime(t),i=new Set;r.forEach(c=>c.agentType&&i.add(c.agentType));let o=new Map;for(let c of i){let a=r.filter(d=>d.agentType===c),s=a.reduce((d,m)=>d+m.totalCost,0),l=a.reduce((d,m)=>d+m.inputTokens+m.outputTokens,0);o.set(c,{totalCost:s,totalTokens:l,totalRequests:a.length,avgCostPerRequest:a.length>0?s/a.length:0,avgCostPerToken:l>0?s/l:0})}let n=r.filter(c=>!c.agentType);if(n.length>0){let c=n.reduce((s,l)=>s+l.totalCost,0),a=n.reduce((s,l)=>s+l.inputTokens+l.outputTokens,0);o.set("unknown",{totalCost:c,totalTokens:a,totalRequests:n.length,avgCostPerRequest:c/n.length,avgCostPerToken:a>0?c/a: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 c=r.filter(l=>l.model===n),a=c.reduce((l,d)=>l+d.totalCost,0),s=c.reduce((l,d)=>l+d.inputTokens+d.outputTokens,0);o.set(n,{totalCost:a,totalTokens:s,totalRequests:c.length,avgCostPerRequest:c.length>0?a/c.length:0,avgCostPerToken:s>0?a/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 c=new Date(t.getTime()-n*i),a=new Date(c.getTime()-i),s=this.records.filter(l=>l.timestamp>=a&&l.timestamp<c);r.push({timestamp:c,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,c]of t)P[n]&&c.totalCost>1&&(n.includes("opus")&&e.push({type:"model-switch",description:"Consider using Sonnet instead of Opus for non-critical tasks",estimatedSavings:c.totalCost*.5,currentCost:c.totalCost,suggestedModel:"claude-sonnet-4-20250514"}),n==="gpt-4o"&&e.push({type:"model-switch",description:"Consider using GPT-4o-mini for simpler tasks",estimatedSavings:c.totalCost*.7,currentCost:c.totalCost,suggestedModel:"gpt-4o-mini"}));let r=this.getCostByProvider("24h"),i=[...r.values()].reduce((n,c)=>n+c.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,c)=>n+c.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=P[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,c)=>n+c.inputTokens+c.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 A(p){return new C(p)}F();var D={"claude-sonnet-4-5":{canonical:"Claude Sonnet 4.5",family:"claude",tier:"standard",providers:{anthropic:"claude-sonnet-4-5-20250929",openrouter:"anthropic/claude-sonnet-4.5",bedrock:"anthropic.claude-sonnet-4-5-v2:0"}},"claude-opus-4":{canonical:"Claude Opus 4",family:"claude",tier:"flagship",providers:{anthropic:"claude-opus-4-20250514",openrouter:"anthropic/claude-opus-4",bedrock:"anthropic.claude-opus-4-v1:0"}},"claude-opus-4-5":{canonical:"Claude Opus 4.5",family:"claude",tier:"flagship",providers:{anthropic:"claude-opus-4-5-20251101",openrouter:"anthropic/claude-opus-4.5",bedrock:"anthropic.claude-opus-4-5-v1:0"}},"claude-haiku-3-5":{canonical:"Claude Haiku 3.5",family:"claude",tier:"economy",providers:{anthropic:"claude-3-5-haiku-20241022",openrouter:"anthropic/claude-3.5-haiku",bedrock:"anthropic.claude-3-5-haiku-v1:0"}},"claude-sonnet-4":{canonical:"Claude Sonnet 4",family:"claude",tier:"standard",providers:{anthropic:"claude-sonnet-4-20250514",openrouter:"anthropic/claude-sonnet-4",bedrock:"anthropic.claude-sonnet-4-v1:0"}},"gpt-4o":{canonical:"GPT-4o",family:"gpt",tier:"standard",providers:{openai:"gpt-4o",azure:"gpt-4o",openrouter:"openai/gpt-4o"}},"gpt-4o-mini":{canonical:"GPT-4o Mini",family:"gpt",tier:"economy",providers:{openai:"gpt-4o-mini",azure:"gpt-4o-mini",openrouter:"openai/gpt-4o-mini"}},"gpt-4-turbo":{canonical:"GPT-4 Turbo",family:"gpt",tier:"premium",providers:{openai:"gpt-4-turbo",azure:"gpt-4-turbo",openrouter:"openai/gpt-4-turbo"}},"gpt-4":{canonical:"GPT-4",family:"gpt",tier:"premium",providers:{openai:"gpt-4",azure:"gpt-4",openrouter:"openai/gpt-4"}},o1:{canonical:"OpenAI o1",family:"gpt",tier:"flagship",providers:{openai:"o1",azure:"o1",openrouter:"openai/o1"}},"o1-mini":{canonical:"OpenAI o1 Mini",family:"gpt",tier:"standard",providers:{openai:"o1-mini",azure:"o1-mini",openrouter:"openai/o1-mini"}},"gemini-pro":{canonical:"Gemini Pro",family:"gemini",tier:"standard",providers:{gemini:"gemini-pro",openrouter:"google/gemini-pro"}},"gemini-pro-1.5":{canonical:"Gemini Pro 1.5",family:"gemini",tier:"standard",providers:{gemini:"gemini-1.5-pro",openrouter:"google/gemini-pro-1.5"}},"gemini-flash-1.5":{canonical:"Gemini Flash 1.5",family:"gemini",tier:"economy",providers:{gemini:"gemini-1.5-flash",openrouter:"google/gemini-flash-1.5"}},"gemini-ultra":{canonical:"Gemini Ultra",family:"gemini",tier:"flagship",providers:{gemini:"gemini-ultra",openrouter:"google/gemini-ultra"}},llama3:{canonical:"Llama 3",family:"llama",tier:"economy",providers:{ollama:"llama3",openrouter:"meta-llama/llama-3-8b-instruct"}},"llama3.1":{canonical:"Llama 3.1",family:"llama",tier:"economy",providers:{ollama:"llama3.1",openrouter:"meta-llama/llama-3.1-8b-instruct"}},codellama:{canonical:"CodeLlama",family:"llama",tier:"economy",providers:{ollama:"codellama",openrouter:"meta-llama/codellama-34b-instruct"}},mistral:{canonical:"Mistral",family:"mistral",tier:"economy",providers:{ollama:"mistral",openrouter:"mistralai/mistral-7b-instruct"}},mixtral:{canonical:"Mixtral",family:"mistral",tier:"standard",providers:{ollama:"mixtral",openrouter:"mistralai/mixtral-8x7b-instruct"}},phi3:{canonical:"Phi-3",family:"phi",tier:"economy",providers:{ollama:"phi3",azure:"phi-3-mini-128k-instruct"}},qwen2:{canonical:"Qwen 2",family:"qwen",tier:"economy",providers:{ollama:"qwen2",openrouter:"qwen/qwen-2-7b-instruct"}}};function U(){let p=new Map;for(let[e,t]of Object.entries(D)){p.set(e,e),p.set(e.toLowerCase(),e);for(let[r,i]of Object.entries(t.providers))i&&(p.set(i,e),p.set(i.toLowerCase(),e),p.set(`${r}/${i}`,e),p.set(`${r}/${i}`.toLowerCase(),e))}return p}var M=U();function E(p,e){let t=T(p),r=D[t];if(!r)throw new Error(`Unknown model: ${p}`);let i=r.providers[e];if(!i)throw new Error(`Model '${t}' (${r.canonical}) is not available on provider '${e}'`);return i}function T(p){let e=M.get(p);if(e||(e=M.get(p.toLowerCase()),e))return e;let t=[/^anthropic\//i,/^openai\//i,/^google\//i,/^meta-llama\//i,/^mistralai\//i,/^qwen\//i];for(let r of t){let i=p.replace(r,"");if(e=M.get(i),e||(e=M.get(i.toLowerCase()),e))return e}throw new Error(`Unknown model ID: ${p}`)}function B(p){try{let e=T(p);return D[e]}catch{return}}var b=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}}},R=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:x;this.ruleEngine=new v(r),this.decisionCache=new b(100,this.config.decisionCacheTtlMs),this.metrics=new q,this.routerMetrics=w(),this.costMetrics=A()}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 b(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);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,c=o.action.provider,a=this.providerManager.getProvider(c);if(a){let s=this.createDecision(a,c,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 c of t){let a=this.providerManager.getProvider(c);if(!a)continue;let{input:s,output:l}=a.getCostPerToken(),d=this.estimateCostValue(e,s,l);n.push({provider:c,model:a.getConfig().model,reason:`Estimated cost: $${d.toFixed(6)}`,estimatedCost:d,excluded:!1}),d<r&&(r=d,i=c,o=a)}if(o){let c=o.getConfig(),a=this.createDecision(o,i,c.model,"cost-optimization");return a.metadata.estimatedCost=this.createCostEstimate(e,o),a.metadata.alternativesConsidered=n,a}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,c=[];for(let a of t){let s=this.providerManager.getProvider(a);if(!s)continue;let d=r[a]?.avgLatencyMs??1/0;c.push({provider:a,model:s.getConfig().model,reason:`Avg latency: ${d}ms`,estimatedLatencyMs:d,excluded:!1}),d<i&&(i=d,o=a,n=s)}if(n){let a=n.getConfig(),s=this.createDecision(n,o,a.model,"performance-optimization");return s.metadata.estimatedLatencyMs=i,s.metadata.alternativesConsidered=c,s}return this.createFallbackDecision(e,"performance-optimized")}async executeWithFallback(e,t,r){let{fallbackChain:i,fallbackBehavior:o}=this.config,n,c=0,a=[{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)a.push({provider:s.provider,model:d});for(let{provider:s,model:l}of a){if(c>=o.maxAttempts)break;let d=this.providerManager.getProvider(s);if(!d)continue;c++;let m=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()-m;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()-m;if(this.metrics.recordFailure(s),this.routerMetrics.recordProviderCall(s,l,y,0,{success:!1,agentType:e.agentType}),c<a.length){let L=a[c];L&&this.routerMetrics.recordFallback(s,L.provider,n.message,e.agentType)}if(O(u)&&!u.retryable)throw u;c<o.maxAttempts&&await this.delay(o.delayMs)}}throw k(`All providers failed after ${c} attempts: ${n?.message??"Unknown error"}`,"PROVIDER_UNAVAILABLE",{retryable:!1,cause:n})}createDecision(e,t,r,i,o){let{canonicalModel:n,providerModelId:c}=this.resolveModelIds(r,t);return{provider:e,providerType:t,model:n,providerModelId:c,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=T(e),n=E(o,i);return{canonicalModel:o,providerModelId:n}}catch{try{if(B(e)){let n=E(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 k(`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 a of e.messages)o+=Math.ceil(a.content.length/4);let n=e.maxTokens??1e3,c=o*r+n*i;return{inputTokens:o,outputTokens:n,totalCostUsd:c,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 Ye(p,e){return new R(p,e)}function Je(p){return new R(p,{mode:"rule-based",rules:x,defaultProvider:"claude",defaultModel:"claude-sonnet-4-20250514",enableMetrics:!0,cacheDecisions:!0})}export{R as HybridRouter,Ye as createHybridRouter,Je as createQERouter};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a}from"./chunk-NVMJS347.js";import"./chunk-JTE3QBBI.js";import"./chunk-Z7E27V5F.js";import"./chunk-XTGVTVLN.js";import"./chunk-WEMOVPQS.js";import"./chunk-M7QYRRRS.js";import"./chunk-LJTRN6ZE.js";import"./chunk-CX5TTKTB.js";import"./chunk-FT3BXL44.js";export{a as ImpactAnalyzerService};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a,b,c,d}from"./chunk-WZYG4SKQ.js";import"./chunk-ZLDOPUZY.js";import"./chunk-MJY6FD6N.js";import"./chunk-FZY2AFLS.js";import"./chunk-6DDT5OHC.js";import"./chunk-WEMOVPQS.js";import"./chunk-LJTRN6ZE.js";import"./chunk-V7LIKEGA.js";import"./chunk-T5WF5HBA.js";import"./chunk-FT3BXL44.js";export{a as InitOrchestrator,b as createInitOrchestrator,d as formatInitResult,c as quickInit};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{v as a,w as b}from"./chunk-5F2CEYZG.js";import"./chunk-LURKOKOG.js";import"./chunk-MT4ZZUPF.js";import"./chunk-QRP7WPSO.js";import"./chunk-XD7W2BE6.js";import"./chunk-WMVMFBMH.js";import"./chunk-PJENW5A2.js";import"./chunk-I6J7AYIL.js";import"./chunk-RLVQDFZ2.js";import"./chunk-R2E73QTH.js";import"./chunk-ZZ2E6WS6.js";import"./chunk-OSGQFRT2.js";import"./chunk-K5TK4HNR.js";import"./chunk-6Q7F4HBV.js";import"./chunk-4HTPZ67G.js";import"./chunk-E7WWAJK5.js";import"./chunk-XEHMWICD.js";import"./chunk-7IJIOZHW.js";import"./chunk-6ZTKAP4X.js";import"./chunk-2FW56URL.js";import"./chunk-UOD76Y2C.js";import"./chunk-DQ3ZEAMM.js";import"./chunk-CGXLVTVK.js";import"./chunk-FGE33JCO.js";import"./chunk-FYJSJLTP.js";import"./chunk-NXZDG2ED.js";import"./chunk-OZNBJZTT.js";import"./chunk-ZYAIIW3U.js";import"./chunk-FYVNVHMI.js";import"./chunk-2BDTKGEH.js";import"./chunk-SILMLIWR.js";import"./chunk-HBQRFR7Q.js";import"./chunk-XQHTGKXD.js";import"./chunk-NVMJS347.js";import"./chunk-JTE3QBBI.js";import"./chunk-7WP5HEJQ.js";import"./chunk-UGCPQGQV.js";import"./chunk-AUWWCPVO.js";import"./chunk-45SNY726.js";import"./chunk-TKV2X6EP.js";import"./chunk-I4JO4LD3.js";import"./chunk-NWL7UQPY.js";import"./chunk-Q2JAC625.js";import"./chunk-Z7E27V5F.js";import"./chunk-XTGVTVLN.js";import"./chunk-ZXLAY3BL.js";import"./chunk-WEMOVPQS.js";import"./chunk-M7QYRRRS.js";import"./chunk-LJTRN6ZE.js";import"./chunk-CX5TTKTB.js";import"./chunk-52GDG6LU.js";import"./chunk-V7LIKEGA.js";import"./chunk-T5WF5HBA.js";import"./chunk-PGKGFKSS.js";import"./chunk-R7RGOZ3H.js";import"./chunk-GB4LEEYS.js";import"./chunk-WKORFEXG.js";import"./chunk-Q3BVPPHB.js";import"./chunk-AXJTWYCF.js";import"./chunk-LNHOWUSG.js";import"./chunk-FT3BXL44.js";export{a as QEKernelImpl,b as createKernel};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{g as a}from"./chunk-JTE3QBBI.js";import"./chunk-Z7E27V5F.js";import"./chunk-XTGVTVLN.js";import"./chunk-WEMOVPQS.js";import"./chunk-M7QYRRRS.js";import"./chunk-LJTRN6ZE.js";import"./chunk-FT3BXL44.js";export{a as KnowledgeGraphService};
@@ -1,107 +0,0 @@
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.12");process.exit(0)}
3
- import{a as Y}from"./chunk-VC4X36JJ.js";import{b as K}from"./chunk-E7WWAJK5.js";import{g as J}from"./chunk-6ZTKAP4X.js";import"./chunk-2FW56URL.js";import"./chunk-UOD76Y2C.js";import"./chunk-DQ3ZEAMM.js";import{i as N}from"./chunk-CGXLVTVK.js";import"./chunk-FGE33JCO.js";import"./chunk-OZNBJZTT.js";import{a as W}from"./chunk-ZYAIIW3U.js";import"./chunk-XQHTGKXD.js";import"./chunk-AUWWCPVO.js";import"./chunk-45SNY726.js";import{f as O,o as H}from"./chunk-I4JO4LD3.js";import"./chunk-NWL7UQPY.js";import"./chunk-Z7E27V5F.js";import"./chunk-XTGVTVLN.js";import{b as B,d as de}from"./chunk-WEMOVPQS.js";import"./chunk-M7QYRRRS.js";import"./chunk-LJTRN6ZE.js";import"./chunk-CX5TTKTB.js";import{a as x,b as V}from"./chunk-V7LIKEGA.js";import"./chunk-T5WF5HBA.js";import"./chunk-PGKGFKSS.js";import"./chunk-R7RGOZ3H.js";import"./chunk-GB4LEEYS.js";import"./chunk-WKORFEXG.js";import"./chunk-Q3BVPPHB.js";import"./chunk-AXJTWYCF.js";import"./chunk-LNHOWUSG.js";import"./chunk-FT3BXL44.js";H();de();import{Command as fe}from"commander";import o from"chalk";import b from"node:path";import{existsSync as w,writeFileSync as re,readFileSync as Q,mkdirSync as se,copyFileSync as F,renameSync as ae}from"node:fs";import{stat as q,unlink as R}from"node:fs/promises";V();H();import E from"chalk";import M from"node:path";import{createReadStream as X,createWriteStream as Z}from"node:fs";import{createGzip as ge,createGunzip as pe}from"node:zlib";import{pipeline as ee}from"node:stream/promises";V();var P={reasoningBank:null,initialized:!1};async function D(){if(P.initialized&&P.reasoningBank)return P.reasoningBank;let s=O(),t=M.join(s,".agentic-qe"),e=new W({sqlite:{path:M.join(t,"memory.db"),walMode:!0,poolSize:3,busyTimeout:5e3},enableFallback:!0,defaultNamespace:"qe-patterns"});await e.initialize(),P.reasoningBank=J(e,void 0,{enableLearning:!0,enableGuidance:!0,enableRouting:!0,embeddingDimension:384,useONNXEmbeddings:!0}),await P.reasoningBank.initialize();try{let{getSharedRvfDualWriter:n}=await import("./shared-rvf-dual-writer-HD5QOOJD.js"),d=await n();d&&P.reasoningBank.setRvfDualWriter(d)}catch(n){process.env.DEBUG&&console.debug("[learning] RVF wiring skipped:",n instanceof Error?n.message:n)}return P.initialized=!0,P.reasoningBank}function S(s){console.log(JSON.stringify(s,null,2))}function C(s){console.log(E.green("\u2713"),s)}function v(s){console.error(E.red("\u2717"),s)}function T(s){console.log(E.blue("\u2139"),s)}function te(s){let{current:t,topDomains:e}=s,n={tl:"\u250C",tr:"\u2510",bl:"\u2514",br:"\u2518",h:"\u2500",v:"\u2502",ml:"\u251C",mr:"\u2524"},d=55,c=n.h.repeat(d-2);console.log(""),console.log(`${n.tl}${c}${n.tr}`),console.log(`${n.v}${me("AQE LEARNING DASHBOARD",d-2)}${n.v}`),console.log(`${n.ml}${c}${n.mr}`);let m=t.patternsCreatedToday>0?E.green(` (+${t.patternsCreatedToday} today)`):"";console.log(`${n.v} Patterns: ${k(String(t.totalPatterns)+m,32)}${n.v}`);let p=t.experiencesToday>0?E.green(` (+${t.experiencesToday} today)`):"";console.log(`${n.v} Experiences: ${k(String(t.totalExperiences)+p,32)}${n.v}`),console.log(`${n.v} Q-Values: ${k(String(t.totalQValues),32)}${n.v}`);let i=t.avgReward.toFixed(2),l=t.avgRewardDelta>=0?E.green(`(\u2191 ${Math.abs(t.avgRewardDelta).toFixed(2)} from last week)`):E.red(`(\u2193 ${Math.abs(t.avgRewardDelta).toFixed(2)} from last week)`);console.log(`${n.v} Avg Reward: ${k(`${i} ${l}`,32)}${n.v}`);let r=(t.successRate*100).toFixed(1);if(console.log(`${n.v} Success Rate: ${k(`${r}%`,32)}${n.v}`),console.log(`${n.v} Short-term: ${k(String(t.shortTermPatterns),32)}${n.v}`),console.log(`${n.v} Long-term: ${k(String(t.longTermPatterns),32)}${n.v}`),console.log(`${n.v}${" ".repeat(d-2)}${n.v}`),console.log(`${n.v} ${E.bold("Domain Coverage:")}${" ".repeat(d-19)}${n.v}`),e.length===0)console.log(`${n.v} ${E.dim("No patterns yet")}${" ".repeat(d-19)}${n.v}`);else{let g=Math.max(...e.map(u=>u.count),1),f=14;for(let{domain:u,count:y}of e){let $=Math.round(y/g*f),j=f-$,ie=E.green("\u2588".repeat($))+E.dim("\u2591".repeat(j)),ce=k(u,20),le=ue(String(y),3);console.log(`${n.v} ${ce} ${ie} ${le} patterns ${n.v}`)}let a=new Set(e.map(u=>u.domain)),h=N.filter(u=>!a.has(u)).slice(0,3);for(let u of h){let y=E.dim("\u2591".repeat(f)),$=k(u,20);console.log(`${n.v} ${$} ${y} 0 patterns ${n.v}`)}}console.log(`${n.bl}${c}${n.br}`),console.log("")}function me(s,t){let e=L(s),n=Math.max(0,t-e.length),d=Math.floor(n/2),c=n-d;return" ".repeat(d)+s+" ".repeat(c)}function k(s,t){let e=L(s),n=Math.max(0,t-e.length);return s+" ".repeat(n)}function ue(s,t){let e=L(s),n=Math.max(0,t-e.length);return" ".repeat(n)+s}function L(s){return s.replace(/\x1b\[[0-9;]*m/g,"")}function A(){let s=O();return M.join(s,".agentic-qe","memory.db")}async function z(s,t){let e=t||`${s}.gz`;return await ee(X(s),ge(),Z(e)),e}async function U(s,t){await ee(X(s),pe(),Z(t))}async function I(s){try{let t=x(s,{readonly:!0}),e=t.prepare("PRAGMA integrity_check").get();return t.close(),e.integrity_check==="ok"?{valid:!0,message:"Database integrity verified"}:{valid:!1,message:`Integrity check failed: ${e.integrity_check}`}}catch(t){return{valid:!1,message:`Failed to verify: ${t instanceof Error?t.message:"unknown error"}`}}}async function _(s){try{let t=x(s,{readonly:!0});if(!t.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_version'").get())return t.close(),0;let n=t.prepare("SELECT version FROM schema_version WHERE id = 1").get();return t.close(),n?.version??0}catch{return 0}}var G="3.1.0",ne={generate:"test-generation","test-generation":"test-generation",analyze:"coverage-analysis",coverage:"coverage-analysis","coverage-analysis":"coverage-analysis",run:"test-execution","test-execution":"test-execution",report:"quality-assessment",quality:"quality-assessment","quality-analysis":"quality-assessment",security:"security-compliance",sast:"security-compliance",owasp:"security-compliance",secrets:"security-compliance",audit:"security-compliance",recommend:"defect-intelligence",predict:"defect-intelligence","complexity-analysis":"code-intelligence","code-analysis":"code-intelligence",stabilize:"chaos-resilience",flaky:"chaos-resilience",quarantine:"chaos-resilience",retry:"chaos-resilience",stress:"chaos-resilience",load:"chaos-resilience",endurance:"chaos-resilience",baseline:"chaos-resilience"},oe={generate:"test-template","test-generation":"test-template",analyze:"coverage-strategy",coverage:"coverage-strategy","coverage-analysis":"coverage-strategy",run:"test-template","test-execution":"test-template",report:"assertion-pattern",quality:"assertion-pattern","quality-analysis":"assertion-pattern",security:"assertion-pattern",sast:"assertion-pattern",owasp:"assertion-pattern",secrets:"assertion-pattern",audit:"assertion-pattern",recommend:"assertion-pattern",predict:"assertion-pattern","complexity-analysis":"assertion-pattern","code-analysis":"assertion-pattern",stabilize:"flaky-fix",flaky:"flaky-fix",quarantine:"flaky-fix",retry:"flaky-fix",stress:"perf-benchmark",load:"perf-benchmark",endurance:"perf-benchmark",baseline:"perf-benchmark",mock:"mock-pattern",dependency:"mock-pattern"};function at(){let s=new fe("learning").description("AQE self-learning system management (standalone, no claude-flow required)").addHelpText("after",`
4
- Examples:
5
- # Check learning system status
6
- aqe learning stats
7
-
8
- # Consolidate patterns (promote successful patterns to long-term memory)
9
- aqe learning consolidate
10
-
11
- # Export learned patterns for sharing
12
- aqe learning export --output patterns.json
13
-
14
- # Import patterns from another project
15
- aqe learning import --input patterns.json
16
-
17
- # Run background learning consolidation
18
- aqe learning daemon --interval 3600
19
- `);return ye(s),he(s),we(s),$e(s),be(s),Se(s),ve(s),Re(s),Ee(s),ke(s),xe(s),De(s),Ce(s),Oe(s),Pe(s),Ae(s),s}function ye(s){s.command("stats").description("Display learning system statistics").option("--json","Output as JSON").option("--detailed","Show detailed breakdown").action(async t=>{try{let n=await(await D()).getStats();if(t.json)S(n);else{console.log(o.bold(`
20
- \u{1F4CA} AQE Learning System Statistics
21
- `)),console.log(o.bold("Patterns:")),console.log(` Total: ${o.cyan(n.totalPatterns)}`),console.log(` Short-term: ${n.patternStoreStats.byTier.shortTerm}`),console.log(` Long-term: ${n.patternStoreStats.byTier.longTerm}`),console.log(` Avg Confidence: ${(n.patternStoreStats.avgConfidence*100).toFixed(1)}%`),console.log(` Avg Quality: ${(n.patternStoreStats.avgQualityScore*100).toFixed(1)}%`),console.log(o.bold(`
22
- By Domain:`));let d=Object.entries(n.byDomain).filter(([m,p])=>p>0).sort((m,p)=>p[1]-m[1]);if(d.length===0)console.log(o.dim(" No patterns yet"));else for(let[m,p]of d)console.log(` ${m}: ${p}`);console.log(o.bold(`
23
- Learning:`)),console.log(` Routing Requests: ${n.routingRequests}`),console.log(` Avg Routing Confidence: ${(n.avgRoutingConfidence*100).toFixed(1)}%`),console.log(` Learning Outcomes: ${n.learningOutcomes}`),console.log(` Pattern Success Rate: ${(n.patternSuccessRate*100).toFixed(1)}%`),console.log(o.bold(`
24
- Search Performance:`)),console.log(` Operations: ${n.patternStoreStats.searchOperations}`),console.log(` Avg Latency: ${n.patternStoreStats.avgSearchLatencyMs.toFixed(2)}ms`),console.log(` HNSW Native: ${n.patternStoreStats.hnswStats.nativeAvailable?o.green("\u2713"):o.dim("\u25CB")}`),console.log(` Vector Count: ${n.patternStoreStats.hnswStats.vectorCount}`);let c=n.asymmetricLearning;if(c&&(console.log(o.bold(`
25
- Asymmetric Learning (ADR-061):`)),console.log(` Failure Penalty Ratio: ${c.failurePenaltyRatio||"10:1"}`),console.log(` Quarantined Patterns: ${c.quarantinedPatterns||0}`),console.log(` Rehabilitated: ${c.rehabilitatedPatterns||0}`),console.log(` Avg Confidence Delta: ${((c.avgConfidenceDelta||0)*100).toFixed(1)}%`)),t.detailed){console.log(o.bold(`
26
- By Pattern Type:`));for(let[m,p]of Object.entries(n.patternStoreStats.byType))p>0&&console.log(` ${m}: ${p}`)}console.log("")}return}catch(e){throw v(`stats failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function he(s){s.command("consolidate").description("Consolidate patterns - promote successful patterns to long-term memory").option("--dry-run","Show what would be promoted without making changes").option("--threshold <n>","Minimum successful uses for promotion","3").option("--success-rate <n>","Minimum success rate for promotion (0-1)","0.7").option("--json","Output as JSON").action(async t=>{try{let e=await D(),n=parseInt(t.threshold,10),d=parseFloat(t.successRate),c=[],m=await e.searchPatterns("*",{limit:1e3});if(m.success)for(let p of m.value){let i=p.pattern;i.tier==="short-term"&&i.successfulUses>=n&&i.successRate>=d&&c.push({id:i.id,name:i.name,domain:i.qeDomain,successfulUses:i.successfulUses,successRate:i.successRate,currentTier:i.tier})}if(t.json)S({dryRun:t.dryRun||!1,eligibleCount:c.length,threshold:n,successRateMin:d,patterns:c});else{if(console.log(o.bold(`
27
- \u{1F504} Pattern Consolidation
28
- `)),console.log(` Promotion threshold: ${n} successful uses`),console.log(` Minimum success rate: ${(d*100).toFixed(0)}%`),console.log(` Eligible patterns: ${c.length}
29
- `),c.length===0)console.log(o.dim(" No patterns eligible for promotion yet."));else{console.log(o.bold(" Patterns to promote:"));for(let p of c)console.log(` ${o.cyan(p.name)}`),console.log(o.dim(` Domain: ${p.domain}, Uses: ${p.successfulUses}, Rate: ${(p.successRate*100).toFixed(0)}%`));t.dryRun?console.log(o.yellow(`
30
- Dry run - no changes made`)):console.log(o.yellow(`
31
- Promotion would happen here (not yet implemented)`))}console.log("")}return}catch(e){throw v(`consolidate failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function we(s){s.command("export").description("Export learned patterns for sharing").option("-o, --output <file>","Output file path","aqe-patterns.json").option("-d, --domain <domain>","Filter by domain").option("--long-term-only","Only export long-term patterns").option("--json","Output as JSON (to stdout)").action(async t=>{try{let n=await(await D()).searchPatterns("*",{limit:1e4,domain:t.domain});if(!n.success)throw new Error(n.error.message);let d=n.value.map(m=>m.pattern).filter(m=>!t.longTermOnly||m.tier==="long-term"),c={version:"3.0.0",exportedAt:new Date().toISOString(),source:process.cwd(),patternCount:d.length,patterns:d.map(m=>({id:m.id,name:m.name,description:m.description,patternType:m.patternType,qeDomain:m.qeDomain,tier:m.tier,confidence:m.confidence,successRate:m.successRate,successfulUses:m.successfulUses,qualityScore:m.qualityScore,template:m.template,context:m.context}))};if(t.json)S(c);else{let m=b.resolve(t.output);re(m,JSON.stringify(c,null,2),"utf-8"),C(`Exported ${d.length} patterns to ${m}`)}return}catch(e){throw v(`export failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function $e(s){s.command("import").description("Import patterns from file").requiredOption("-i, --input <file>","Input file path").option("--dry-run","Show what would be imported without making changes").option("--json","Output as JSON").action(async t=>{try{let e=b.resolve(t.input);if(!w(e))throw new Error(`File not found: ${e}`);let n=Q(e,"utf-8"),d=B(n);if(!d.patterns||!Array.isArray(d.patterns))throw new Error("Invalid pattern file format");let c=await D(),m=0,p=0,i=[];if(!t.dryRun)for(let l of d.patterns)try{let r=await c.storePattern({patternType:l.patternType,name:l.name,description:l.description,template:l.template,context:l.context});r.success?m++:(p++,i.push(`${l.name}: ${r.error.message}`))}catch(r){p++,i.push(`${l.name}: ${r instanceof Error?r.message:"unknown"}`)}t.json?S({dryRun:t.dryRun||!1,totalPatterns:d.patterns.length,imported:m,skipped:p,errors:i}):(console.log(o.bold(`
32
- \u{1F4E5} Pattern Import
33
- `)),console.log(` Source: ${e}`),console.log(` Total patterns: ${d.patterns.length}`),t.dryRun?(console.log(o.yellow(`
34
- Dry run - no changes made`)),console.log(` Would import: ${d.patterns.length} patterns`)):(console.log(o.green(`
35
- Imported: ${m}`)),p>0&&console.log(o.yellow(` Skipped: ${p}`))),console.log(""));return}catch(e){throw v(`import failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function be(s){s.command("reset").description("Reset learning data (patterns and metrics)").option("--confirm","Confirm reset without prompting").option("--patterns-only","Only reset patterns, keep metrics").action(async t=>{try{if(!t.confirm){console.log(o.yellow(`
36
- \u26A0\uFE0F This will reset your learning data.`)),console.log(o.gray(` Use --confirm to proceed
37
- `));return}let e=O(),n=b.join(e,".agentic-qe"),d=[b.join(n,"data","patterns"),b.join(n,"data","hnsw")];t.patternsOnly||d.push(b.join(n,"data","learning-config.json")),console.log(o.bold(`
38
- \u{1F5D1}\uFE0F Resetting Learning Data
39
- `));for(let c of d)w(c)&&console.log(o.dim(` Removing: ${b.relative(e,c)}`));C(`Learning data reset. Run "aqe init --auto" to reinitialize.
40
- `);return}catch(e){throw v(`reset failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function Se(s){s.command("extract").description("Extract QE patterns from existing learning experiences").option("--min-reward <n>","Minimum reward threshold for pattern extraction","0.7").option("--min-count <n>","Minimum occurrences to form a pattern","3").option("--dry-run","Show what would be extracted without saving").option("--json","Output as JSON").action(async t=>{try{let e=O(),n=b.join(e,".agentic-qe","memory.db");if(!w(n))throw new Error('No memory database found. Run "aqe init --auto" first.');let d=parseFloat(t.minReward),c=parseInt(t.minCount,10);console.log(o.bold(`
41
- \u{1F52C} Pattern Extraction from Learning Experiences
42
- `)),console.log(` Min reward threshold: ${d}`),console.log(` Min occurrences: ${c}
43
- `);let m=x(n,{readonly:!0}),p=m.prepare(`
44
- SELECT domain as task_type, COUNT(*) as count, AVG(quality) as avg_reward, MAX(quality) as max_reward,
45
- MIN(quality) as min_reward, GROUP_CONCAT(DISTINCT agent) as actions
46
- FROM captured_experiences WHERE quality >= ? AND agent != 'cli-hook' GROUP BY domain HAVING COUNT(*) >= ? ORDER BY avg_reward DESC
47
- `).all(d,c),i=[];try{i=m.prepare(`
48
- SELECT substr(key, 1, 40) as key_prefix, COUNT(*) as count
49
- FROM memory_entries WHERE key LIKE 'phase2/learning/%'
50
- GROUP BY substr(key, 1, 40) HAVING COUNT(*) >= ? ORDER BY COUNT(*) DESC LIMIT 20
51
- `).all(c)}catch{}m.close();let l=[];for(let r of p){let g=ne[r.task_type]||"code-intelligence",f=oe[r.task_type]||"test-template",a=r.actions?r.actions.split(",").slice(0,5):[];l.push({name:`${r.task_type}-success-pattern`,domain:g,patternType:f,confidence:Math.min(.95,r.avg_reward/2),sourceCount:r.count,avgReward:r.avg_reward,actions:a})}if(t.json)S({minReward:d,minCount:c,dryRun:t.dryRun||!1,experienceGroups:p.length,memoryPatterns:i.length,extractedPatterns:l});else{if(console.log(o.bold("Learning Experience Groups:")),p.length===0)console.log(o.dim(" No qualifying experience groups found"));else for(let r of p){let g=r.avg_reward>=1?o.green:r.avg_reward>=.5?o.yellow:o.red;console.log(` ${o.cyan(r.task_type)}`),console.log(` Count: ${r.count}, Avg Reward: ${g(r.avg_reward.toFixed(2))}`)}console.log(o.bold(`
52
- Memory Pattern Sources:`));for(let r of i.slice(0,10))console.log(` ${r.key_prefix}... (${r.count})`);if(console.log(o.bold(`
53
- Extracted Patterns:`)),l.length===0)console.log(o.dim(" No patterns extracted"));else for(let r of l)console.log(` ${o.green("+")} ${o.cyan(r.name)}`),console.log(o.dim(` Domain: ${r.domain}, Type: ${r.patternType}`)),console.log(o.dim(` Confidence: ${(r.confidence*100).toFixed(0)}%, Sources: ${r.sourceCount}`));if(!t.dryRun&&l.length>0){let r=await D(),g=0,f=[];for(let a of l)try{let h=a.actions.length>0?`// ${a.name}
54
- // Steps: ${a.actions.join(" -> ")}
55
-
56
- {{implementation}}`:`// ${a.name}
57
- // Extracted pattern with ${a.sourceCount} successful uses
58
-
59
- {{implementation}}`,u=await r.storePattern({patternType:a.patternType,name:a.name,description:`Extracted from ${a.sourceCount} learning experiences with avg reward ${a.avgReward.toFixed(2)}`,template:{type:"code",content:h,variables:[{name:"implementation",type:"code",required:!0,description:"Implementation code for this pattern"}]},context:{tags:[a.domain,a.patternType,`sources:${a.sourceCount}`,`reward:${a.avgReward.toFixed(2)}`]}});u.success?g++:f.push(`${a.name}: ${u.error.message}`)}catch(h){f.push(`${a.name}: ${h instanceof Error?h.message:"unknown"}`)}console.log(o.green(`
60
- \u2713 Stored ${g} new patterns`)),f.length>0&&f.length<=5&&console.log(o.yellow(` Errors: ${f.slice(0,3).join(", ")}${f.length>3?"...":""}`))}else t.dryRun&&console.log(o.yellow(`
61
- Dry run - no patterns stored`));console.log("")}return}catch(e){throw v(`extract failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function ve(s){s.command("dashboard").description("Display learning system dashboard with metrics and trends").option("--json","Output as JSON").option("--save-snapshot","Save a daily metrics snapshot").action(async t=>{try{let e=O(),n=K(e);await n.initialize(),t.saveSnapshot&&(await n.saveSnapshot(),C("Daily snapshot saved"));let d=await n.getDashboardData();n.close(),t.json?S(d):te(d);return}catch(e){throw v(`dashboard failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function Re(s){s.command("info").description("Show learning system configuration and paths").action(async()=>{try{let t=O(),e=b.join(t,".agentic-qe");console.log(o.bold(`
62
- \u{1F4CB} AQE Learning System Info
63
- `)),console.log(o.bold("Paths:")),console.log(` Data directory: ${e}`),console.log(` Memory database: ${b.join(e,"memory.db")}`),console.log(` HNSW index: ${b.join(e,"data","hnsw")}`),console.log(` Patterns: ${b.join(e,"data","patterns")}`),console.log(o.bold(`
64
- Configuration:`)),console.log(` Learning enabled: ${process.env.AQE_LEARNING_ENABLED!=="false"?o.green("yes"):o.red("no")}`),console.log(` V3 mode: ${process.env.AQE_V3_MODE==="true"?o.green("yes"):o.dim("no")}`),console.log(` Promotion threshold: ${process.env.AQE_V3_PATTERN_PROMOTION_THRESHOLD||"3"} uses`),console.log(` Success rate threshold: ${process.env.AQE_V3_SUCCESS_RATE_THRESHOLD||"0.7"}`),console.log(o.bold(`
65
- Domains:`)),console.log(` ${N.join(", ")}`),console.log(o.bold(`
66
- Hooks:`)),console.log(" Configure in .claude/settings.json"),console.log(` Events: pre-edit, post-edit, pre-task, post-task, route
67
- `);return}catch(t){throw v(`info failed: ${t instanceof Error?t.message:"unknown"}`),t}})}function Ee(s){s.command("backup").description("Backup learning database to a file").option("-o, --output <path>","Output file path").option("--compress","Compress backup with gzip").option("--verify","Verify backup integrity after creation").option("--json","Output as JSON").action(async t=>{try{let e=A();if(!w(e))throw new Error(`No learning database found at: ${e}`);let n=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=b.join(process.cwd(),"backups",`learning-${n}.db`),c=t.output?b.resolve(t.output):d,m=b.dirname(c);w(m)||se(m,{recursive:!0});let p=await q(e),i=(p.size/1024).toFixed(2);F(e,c);let l=`${e}-wal`;w(l)&&F(l,`${c}-wal`);let r=c;t.compress&&(r=await z(c),await R(c),w(`${c}-wal`)&&await R(`${c}-wal`));let g=await q(r),f=(g.size/1024).toFixed(2),a;t.verify&&!t.compress&&(a=await I(c));let h=await _(e);if(t.json)S({success:!0,sourcePath:e,backupPath:r,sourceSizeKB:parseFloat(i),backupSizeKB:parseFloat(f),compressed:t.compress||!1,schemaVersion:h,verification:a,timestamp:new Date().toISOString()});else{if(console.log(o.bold(`
68
- \u{1F4BE} Learning Database Backup
69
- `)),console.log(` Source: ${e}`),console.log(` Source size: ${i} KB`),console.log(` Backup: ${r}`),console.log(` Backup size: ${f} KB`),console.log(` Schema version: ${h}`),t.compress){let u=((1-g.size/p.size)*100).toFixed(1);console.log(` Compression: ${u}% reduction`)}a&&console.log(a.valid?o.green(` Verification: ${a.message}`):o.red(` Verification: ${a.message}`)),C(`Backup saved to: ${r}
70
- `)}return}catch(e){throw v(`backup failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function ke(s){s.command("restore").description("Restore learning database from backup").requiredOption("-i, --input <path>","Backup file path to restore from").option("--verify","Verify backup integrity before restore").option("--force","Overwrite existing database without confirmation").option("--json","Output as JSON").action(async t=>{try{let e=b.resolve(t.input),n=A();if(!w(e))throw new Error(`Backup file not found: ${e}`);let d=e.endsWith(".gz"),c=e;if(d){let l=e.replace(".gz",".tmp");await U(e,l),c=l}if(t.verify){let l=await I(c);if(!l.valid)throw d&&w(c)&&await R(c),new Error(`Backup verification failed: ${l.message}`)}if(w(n)&&!t.force)throw d&&w(c)&&await R(c),new Error(`Database already exists at: ${n}. Use --force to overwrite`);let m=b.dirname(n);w(m)||se(m,{recursive:!0}),w(n)&&await R(n),w(`${n}-wal`)&&await R(`${n}-wal`),w(`${n}-shm`)&&await R(`${n}-shm`),F(c,n),d&&w(c)&&await R(c);let p=await q(n),i=await _(n);t.json?S({success:!0,backupPath:e,restoredPath:n,sizeKB:parseFloat((p.size/1024).toFixed(2)),schemaVersion:i,wasCompressed:d,timestamp:new Date().toISOString()}):(console.log(o.bold(`
71
- \u{1F504} Learning Database Restore
72
- `)),console.log(` Backup: ${e}`),console.log(` Restored to: ${n}`),console.log(` Size: ${(p.size/1024).toFixed(2)} KB`),console.log(` Schema version: ${i}`),C(`Database restored successfully
73
- `));return}catch(e){throw v(`restore failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function xe(s){s.command("verify").description("Verify learning database integrity").option("-f, --file <path>","Database file to verify (defaults to current)").option("--json","Output as JSON").action(async t=>{try{let e=t.file?b.resolve(t.file):A();if(!w(e))throw new Error(`Database file not found: ${e}`);let n=await I(e),d=await _(e),c=await q(e),m={};try{let p=x(e,{readonly:!0});for(let i of["qe_patterns","qe_trajectories","captured_experiences","kv_store","vectors"])try{let l=p.prepare(`SELECT COUNT(*) as count FROM ${i}`).get();m[i]=l.count}catch{}p.close()}catch{}if(t.json)S({valid:n.valid,message:n.message,path:e,sizeKB:parseFloat((c.size/1024).toFixed(2)),schemaVersion:d,tableCounts:m,timestamp:new Date().toISOString()});else{if(console.log(o.bold(`
74
- \u{1F50D} Database Verification
75
- `)),console.log(` Path: ${e}`),console.log(` Size: ${(c.size/1024).toFixed(2)} KB`),console.log(` Schema version: ${d}`),console.log(n.valid?o.green(` Status: ${n.message}`):o.red(` Status: ${n.message}`)),Object.keys(m).length>0){console.log(o.bold(`
76
- Table Counts:`));for(let[p,i]of Object.entries(m))console.log(` ${p}: ${i}`)}console.log("")}if(!n.valid)throw new Error(`Database verification failed: ${n.message}`);return}catch(e){throw v(`verify failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function De(s){s.command("export-full").description("Export all learning data including patterns, trajectories, and experiences").option("-o, --output <file>","Output file path","aqe-learning-export.json").option("--compress","Compress output with gzip").option("--include-trajectories","Include learning trajectories").option("--include-experiences","Include learning experiences").option("--json","Output as JSON (to stdout)").action(async t=>{try{let e=A();if(!w(e))throw new Error('No learning database found. Run "aqe init --auto" first.');let n=await D(),d=await _(e),c=await n.searchPatterns("*",{limit:1e4});if(!c.success)throw new Error(c.error.message);let m=c.value.map(i=>({id:i.pattern.id,name:i.pattern.name,description:i.pattern.description,patternType:i.pattern.patternType,qeDomain:i.pattern.qeDomain,tier:i.pattern.tier,confidence:i.pattern.confidence,successRate:i.pattern.successRate,successfulUses:i.pattern.successfulUses,qualityScore:i.pattern.qualityScore,template:i.pattern.template,context:i.pattern.context,createdAt:i.pattern.createdAt instanceof Date?i.pattern.createdAt.toISOString():i.pattern.createdAt||void 0,lastUsedAt:i.pattern.lastUsedAt instanceof Date?i.pattern.lastUsedAt.toISOString():i.pattern.lastUsedAt||void 0})),p={version:G,exportedAt:new Date().toISOString(),source:process.cwd(),schemaVersion:d,patternCount:m.length,patterns:m};if(t.includeTrajectories)try{let i=x(e,{readonly:!0}),l=i.prepare("SELECT id, task, agent, domain, success, steps_json FROM qe_trajectories ORDER BY started_at DESC LIMIT 1000").all();p.trajectories=l.map(r=>({id:r.id,task:r.task,agent:r.agent,domain:r.domain,success:r.success,stepsJson:r.steps_json})),i.close()}catch{}if(t.includeExperiences)try{let i=x(e,{readonly:!0}),l=i.prepare("SELECT domain as task_type, agent as action, AVG(quality) as avg_reward, COUNT(*) as count FROM captured_experiences WHERE agent != 'cli-hook' GROUP BY domain, agent ORDER BY count DESC LIMIT 500").all();p.experiences=l.map(g=>({taskType:g.task_type,action:g.action,reward:g.avg_reward,count:g.count}));let r=i.prepare("SELECT COUNT(*) as total, AVG(quality) as avg_reward FROM captured_experiences WHERE agent != 'cli-hook'").get();p.metadata={totalExperiences:r.total,avgReward:r.avg_reward},i.close()}catch{}if(t.json)S(p);else{let i=b.resolve(t.output);if(re(i,JSON.stringify(p,null,2),"utf-8"),t.compress){let l=await z(i);await R(i),i=l}console.log(o.bold(`
77
- \u{1F4E4} Learning Data Export
78
- `)),console.log(` Patterns: ${m.length}`),p.trajectories&&console.log(` Trajectories: ${p.trajectories.length}`),p.experiences&&console.log(` Experience groups: ${p.experiences.length}`),console.log(` Schema version: ${d}`),console.log(` Export format: ${G}`),C(`Exported to: ${i}
79
- `)}return}catch(e){throw v(`export-full failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function Ce(s){s.command("import-merge").description("Import and merge patterns from export file (preserves existing data)").requiredOption("-i, --input <file>","Input file path").option("--skip-duplicates","Skip patterns with matching names (default: update)").option("--dry-run","Show what would be imported without making changes").option("--json","Output as JSON").action(async t=>{try{let e=b.resolve(t.input);if(!w(e))throw new Error(`File not found: ${e}`);let n;if(e.endsWith(".gz")){let u=e.replace(".gz",".tmp.json");await U(e,u),n=Q(u,"utf-8"),await R(u)}else n=Q(e,"utf-8");let d=B(n);if(!d.patterns||!Array.isArray(d.patterns))throw new Error("Invalid import file format: missing patterns array");let c=await D(),m=await c.searchPatterns("*",{limit:1e4}),p=new Set;if(m.success)for(let u of m.value)p.add(u.pattern.name);let i=0,l=0,r=0,g=[];if(!t.dryRun)for(let u of d.patterns){let y=p.has(u.name);if(y&&t.skipDuplicates){l++;continue}try{let $=await c.storePattern({patternType:u.patternType,name:u.name,description:u.description,template:u.template,context:u.context});$.success?y?r++:i++:(l++,g.push(`${u.name}: ${$.error.message}`))}catch($){l++,g.push(`${u.name}: ${$ instanceof Error?$.message:"unknown"}`)}}let f=0,a=0,h=0;if(t.dryRun)for(let u of d.patterns){let y=p.has(u.name);y&&t.skipDuplicates?a++:y?h++:f++}t.json?S({dryRun:t.dryRun||!1,importVersion:d.version,totalPatterns:d.patterns.length,imported:t.dryRun?f:i,updated:t.dryRun?h:r,skipped:t.dryRun?a:l,errors:g.slice(0,10)}):(console.log(o.bold(`
80
- \u{1F4E5} Learning Data Import (Merge)
81
- `)),console.log(` Source: ${e}`),console.log(` Export version: ${d.version||"unknown"}`),console.log(` Total patterns: ${d.patterns.length}`),console.log(` Existing patterns: ${p.size}`),t.dryRun?(console.log(o.yellow(`
82
- Dry run - no changes made`)),console.log(` Would import: ${f}
83
- Would update: ${h}
84
- Would skip: ${a}`)):(console.log(o.green(`
85
- Imported: ${i}`)),console.log(o.blue(` Updated: ${r}`)),l>0&&console.log(o.yellow(` Skipped: ${l}`)),g.length>0&&console.log(o.red(` Errors: ${g.length}`))),console.log(""));return}catch(e){throw v(`import-merge failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function Oe(s){s.command("dream").description("Run dream cycles for pattern discovery via spreading activation").option("--duration <ms>","Duration of dream cycle in milliseconds","30000").option("--quick","Run a quick 5-second dream cycle").option("--full","Run a full 30-second dream cycle").option("--status","Show dream system status").option("--history","Show past dream cycles").option("--insights","Show pending insights from previous cycles").option("--apply <id>","Apply a specific insight by ID").option("--limit <n>","Maximum results for history/insights","20").option("--min-patterns <n>","Minimum patterns required to dream","10").option("--json","Output as JSON").action(async t=>{try{let{createDreamEngine:e}=await import("./dream-N72NDTWM.js");if(t.status){let r=e();await r.initialize();let g=r.isDreaming(),f=await r.getDreamHistory(100),a=await r.getPendingInsights(100),h=f.reduce((y,$)=>y+$.insightsGenerated,0),u=f[0];if(t.json)S({isDreaming:g,totalCycles:f.length,totalInsights:h,pendingInsights:a.length,lastDreamTime:u?.startTime.toISOString()||null});else{if(console.log(o.bold(`
86
- \u{1F319} Dream System Status
87
- `)),console.log(` Currently dreaming: ${g?o.green("Yes"):o.dim("No")}`),console.log(` Total dream cycles: ${f.length}`),console.log(` Total insights generated: ${h}`),console.log(` Pending insights: ${a.length}`),console.log(` Last dream: ${u?u.startTime.toISOString():o.dim("never")}`),f.length>0){console.log(o.bold(`
88
- Recent cycles:`));for(let y of f.slice(0,3)){let $=y.status==="completed"?o.green(y.status):o.yellow(y.status);console.log(` ${y.id.slice(0,8)} | ${$} | ${y.durationMs||0}ms | ${y.insightsGenerated} insights`)}}console.log("")}await r.close();return}if(t.history){let r=parseInt(t.limit,10),g=e();await g.initialize();let f=await g.getDreamHistory(r);if(t.json)S(f.map(a=>({id:a.id,startTime:a.startTime.toISOString(),endTime:a.endTime?.toISOString(),durationMs:a.durationMs,status:a.status,conceptsProcessed:a.conceptsProcessed,associationsFound:a.associationsFound,insightsGenerated:a.insightsGenerated})));else{if(console.log(o.bold(`
89
- \u{1F319} Dream Cycle History (${f.length} cycles)
90
- `)),f.length===0)console.log(o.dim(" No dream cycles found. Run: aqe learning dream"));else for(let a of f){let h=a.status==="completed"?o.green("\u2713"):a.status==="failed"?o.red("\u2717"):o.yellow("\u22EF");console.log(` ${h} ${a.id.slice(0,8)} | ${a.startTime.toISOString()}`),console.log(o.dim(` Duration: ${a.durationMs||0}ms | Concepts: ${a.conceptsProcessed} | Associations: ${a.associationsFound} | Insights: ${a.insightsGenerated}`))}console.log("")}await g.close();return}if(t.insights){let r=parseInt(t.limit,10),g=e();await g.initialize();let f=await g.getPendingInsights(r);if(t.json)S(f.map(a=>({id:a.id,type:a.type,description:a.description,noveltyScore:a.noveltyScore,confidenceScore:a.confidenceScore,actionable:a.actionable,applied:a.applied||!1,suggestedAction:a.suggestedAction,createdAt:a.createdAt?.toISOString()})));else{if(console.log(o.bold(`
91
- \u{1F4A1} Pending Dream Insights (${f.length})
92
- `)),f.length===0)console.log(o.dim(" No pending insights. Run a dream cycle first: aqe learning dream"));else for(let a of f){let h=a.noveltyScore>=.7?o.green(`${(a.noveltyScore*100).toFixed(0)}%`):o.yellow(`${(a.noveltyScore*100).toFixed(0)}%`),u=a.confidenceScore>=.7?o.green(`${(a.confidenceScore*100).toFixed(0)}%`):o.yellow(`${(a.confidenceScore*100).toFixed(0)}%`);console.log(` ${o.cyan(a.id.slice(0,8))} [${a.type}] ${a.actionable?"\u26A1":" "}`),console.log(` ${a.description}`),console.log(o.dim(` Novelty: ${h} | Confidence: ${u}`)),a.suggestedAction&&console.log(o.dim(` Action: ${a.suggestedAction}`))}console.log("")}await g.close();return}if(t.apply){let r=t.apply,g=e();await g.initialize();let a=(await g.getPendingInsights(100)).find($=>$.id===r||$.id.startsWith(r));if(!a)throw await g.close(),new Error(`Insight not found: ${r}`);if(!a.actionable)throw await g.close(),new Error(`Insight ${r} is not actionable`);let h=await g.applyInsight(a.id),y=await(await D()).storePattern({patternType:"test-template",name:`Dream Insight: ${a.type}`,description:`${a.description} (confidence: ${a.confidenceScore.toFixed(2)})`,template:{type:"workflow",content:a.suggestedAction||a.description,variables:[]},context:{tags:["dream-generated",a.type,...a.sourceConcepts.slice(0,3)],complexity:"medium"}});if(t.json?S({insightId:a.id,applied:h.success,patternId:y.success?y.value.id:null,error:h.error||(y.success?null:y.error?.message)}):h.success?(C(`Applied insight ${a.id.slice(0,8)}`),y.success&&C(`Created pattern ${y.value.id} in ReasoningBank`)):v(`Failed to apply insight: ${h.error}`),await g.close(),!h.success)throw new Error(`Failed to apply insight: ${h.error}`);return}let n=parseInt(t.duration,10);t.quick&&(n=5e3),t.full&&(n=3e4),n=Math.min(n,6e4);let d=parseInt(t.minPatterns,10);T(`Starting dream cycle (${n}ms, min ${d} patterns)...`);let c=e({maxDurationMs:n,minConceptsRequired:d});await c.initialize();let p=await(await D()).searchPatterns("",{limit:100,minConfidence:.3}),i=0;if(p.success&&p.value.length>0){let r=p.value.map(g=>({id:g.pattern.id,name:g.pattern.name,description:g.pattern.description||`${g.pattern.patternType} pattern`,domain:g.pattern.qeDomain||"learning-optimization",patternType:g.pattern.patternType,confidence:g.pattern.confidence,successRate:g.pattern.successRate||.5}));i=await c.loadPatternsAsConcepts(r),T(`Loaded ${i} patterns from ReasoningBank as concepts`)}else T("No patterns found in ReasoningBank \u2014 dreaming with existing concepts");let l=await c.dream(n);if(t.json)S({cycleId:l.cycle.id,status:l.cycle.status,durationMs:l.cycle.durationMs||0,conceptsProcessed:l.cycle.conceptsProcessed,associationsFound:l.cycle.associationsFound,insightsGenerated:l.cycle.insightsGenerated,activationStats:l.activationStats,patternsCreated:l.patternsCreated,insights:l.insights.map(r=>({id:r.id,type:r.type,description:r.description,noveltyScore:r.noveltyScore,confidenceScore:r.confidenceScore,actionable:r.actionable}))});else{if(console.log(o.bold(`
93
- \u{1F319} Dream Cycle Complete
94
- `)),console.log(` Cycle ID: ${l.cycle.id.slice(0,8)}`),console.log(` Status: ${l.cycle.status==="completed"?o.green("completed"):o.yellow(l.cycle.status)}`),console.log(` Duration: ${l.cycle.durationMs||0}ms`),console.log(` Concepts: ${l.cycle.conceptsProcessed}`),console.log(` Associations: ${l.cycle.associationsFound}`),console.log(` Insights: ${l.cycle.insightsGenerated}`),l.activationStats&&(console.log(o.bold(`
95
- Activation Stats:`)),console.log(` Iterations: ${l.activationStats.totalIterations}`),console.log(` Peak level: ${l.activationStats.peakActivation.toFixed(3)}`),console.log(` Nodes active: ${l.activationStats.nodesActivated}`)),l.insights.length>0){console.log(o.bold(`
96
- Generated Insights:`));for(let r of l.insights){let g=r.noveltyScore>=.7?o.green(`${(r.noveltyScore*100).toFixed(0)}%`):o.yellow(`${(r.noveltyScore*100).toFixed(0)}%`);console.log(` ${o.cyan(r.id.slice(0,8))} [${r.type}] ${r.actionable?"\u26A1 actionable":""}`),console.log(` ${r.description}`),console.log(o.dim(` Novelty: ${g} | Confidence: ${(r.confidenceScore*100).toFixed(0)}%`))}console.log(o.dim(`
97
- Apply insights with: aqe learning dream --apply <insight-id>`))}else console.log(o.dim(`
98
- No insights generated this cycle.`)),console.log(o.dim(" Try loading more patterns or running a longer cycle."));console.log("")}await c.close();return}catch(e){throw v(`dream failed: ${e instanceof Error?e.message:"unknown"}`),e instanceof Error&&e.stack&&console.error(o.dim(e.stack)),e}})}function Pe(s){s.command("repair").description("Repair a corrupted learning database (dump + reimport to rebuild indexes)").option("-f, --file <path>","Database file to repair (defaults to current project)").option("--dry-run","Show what would be done without modifying files").option("--json","Output as JSON").action(async t=>{try{let e=t.file?b.resolve(t.file):A();if(!w(e))throw new Error(`Database file not found: ${e}`);let n=await I(e);if(n.valid){t.json?S({status:"healthy",message:"Database is already healthy, no repair needed",path:e}):C("Database integrity check passed \u2014 no repair needed.");return}T(`Corruption detected: ${n.message}`);let d={};try{let u=x(e,{readonly:!0}),y=u.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'").all();for(let $ of y)try{let j=u.prepare(`SELECT COUNT(*) as count FROM "${$.name}"`).get();d[$.name]=j.count}catch{}u.close()}catch{}let c=Object.values(d).reduce((u,y)=>u+y,0);if(T(`Found ${Object.keys(d).length} tables, ~${c} total rows`),t.dryRun){t.json?S({status:"dry-run",corruptionDetected:!0,message:n.message,tables:d,totalRows:c}):(console.log(o.bold(`
99
- Dry run \u2014 would perform these steps:`)),console.log(" 1. Backup corrupted DB"),console.log(" 2. Dump all data via .dump"),console.log(" 3. Reimport into fresh DB (rebuilds all indexes)"),console.log(" 4. Verify integrity of repaired DB"),console.log(" 5. Verify row counts match"),console.log(" 6. Swap repaired DB into place"),console.log(""));return}let m=`${e}.bak-${Date.now()}`;F(e,m),T(`Backup created: ${m}`);for(let u of["-wal","-shm"]){let y=e+u;w(y)&&await R(y)}let{execSync:p}=await import("node:child_process"),i=`${e}.repaired`,l=`${e}.dump.sql`;try{p(`sqlite3 "${e}" ".dump" > "${l}"`,{stdio:"pipe",timeout:12e4}),p(`sqlite3 "${i}" < "${l}"`,{stdio:"pipe",timeout:12e4}),p(`sqlite3 "${i}" "PRAGMA journal_mode=WAL;"`,{stdio:"pipe"})}catch(u){throw w(i)&&await R(i),w(l)&&await R(l),new Error(`sqlite3 dump/reimport failed: ${u instanceof Error?u.message:"unknown"}. Is sqlite3 installed?`)}let r=await I(i);if(!r.valid)throw w(l)&&await R(l),new Error(`Repaired DB still has integrity issues: ${r.message}. Backup preserved at ${m}`);let g={},f=x(i,{readonly:!0}),a=f.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'").all();for(let u of a)try{let y=f.prepare(`SELECT COUNT(*) as count FROM "${u.name}"`).get();g[u.name]=y.count}catch{}f.close();let h=Object.values(g).reduce((u,y)=>u+y,0);ae(e,`${e}.pre-repair`),ae(i,e),w(l)&&await R(l),t.json?S({status:"repaired",backupPath:m,rowsBefore:c,rowsAfter:h,tablesRepaired:Object.keys(g).length,rowCounts:g}):(C("Database repaired successfully!"),console.log(` Backup: ${m}`),console.log(` Rows before: ${c}`),console.log(` Rows after: ${h}`),h<c&&console.log(o.yellow(` Warning: ${c-h} rows may have been lost due to data page corruption`)),console.log(` Tables: ${Object.keys(g).length}`),console.log(` Integrity: ${o.green("OK")}`),console.log(""));return}catch(e){throw v(`repair failed: ${e instanceof Error?e.message:"unknown"}`),e}})}function Te(s){switch(s){case"sublinear":return{arrow:"\u25B2",label:"Sublinear (learning)",color:o.green};case"linear":return{arrow:"\u2192",label:"Linear (stagnating)",color:o.yellow};case"superlinear":return{arrow:"\u25BC",label:"Superlinear (degrading)",color:o.red};default:return{arrow:"?",label:"Insufficient data",color:o.dim}}}function Ae(s){s.command("health").description("Display per-domain learning health based on regret tracking").option("--json","Output as JSON").option("--domain <domain>","Filter to a specific domain").action(async t=>{try{let e=O(),n=b.join(e,".agentic-qe","memory.db");if(!w(n))throw new Error('Database not found. Run "aqe init --auto" first.');let d=Y(),c=x(n,{readonly:!0});if(c.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='captured_experiences'").get()){let g=t.domain?"AND domain = ?":"",f=[];t.domain&&f.push(t.domain);let a=c.prepare(`
100
- SELECT domain, quality, success, started_at
101
- FROM captured_experiences
102
- WHERE agent != 'cli-hook'
103
- AND domain IS NOT NULL
104
- AND domain != ''
105
- ${g}
106
- ORDER BY started_at ASC
107
- `).all(...f);for(let h of a){let u=h.quality??(h.success?1:0);d.recordDecision(h.domain,u,1)}}c.close();let p=d.getHealthSummary();if(t.json){S(p);return}if(console.log(""),console.log(o.bold("Learning Health Dashboard:")),p.length===0){console.log(o.dim(" No domain data available. Run some QE tasks to generate learning data.")),console.log("");return}let i=Math.max(...p.map(g=>g.domain.length),20);for(let g of p){let{arrow:f,label:a,color:h}=Te(g.growthRate),u=k(g.domain+":",i+1),y=h(`${f} ${k(a,26)}`),$=`regret: ${g.cumulativeRegret.toFixed(1)}`,j=`decisions: ${g.totalDecisions}`;console.log(` ${u} ${y} ${$} ${j}`)}let l=p.filter(g=>g.stagnating);l.length>0&&(console.log(""),console.log(o.yellow(` Warning: ${l.length} domain(s) showing stagnation: ${l.map(g=>g.domain).join(", ")}`)));let r=p.filter(g=>g.growthRate==="sublinear");r.length>0&&console.log(o.green(` ${r.length} domain(s) actively learning`)),console.log("");return}catch(e){throw v(`health check failed: ${e instanceof Error?e.message:"unknown"}`),e}})}export{at as createLearningCommand,D as initializeLearningSystem};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a}from"./chunk-OAWDBVKN.js";import"./chunk-WJGATF2P.js";import"./chunk-ZYAIIW3U.js";import"./chunk-I4JO4LD3.js";import"./chunk-NWL7UQPY.js";import"./chunk-Z7E27V5F.js";import"./chunk-XTGVTVLN.js";import"./chunk-WEMOVPQS.js";import"./chunk-LJTRN6ZE.js";import"./chunk-CX5TTKTB.js";import"./chunk-V7LIKEGA.js";import"./chunk-T5WF5HBA.js";import"./chunk-PGKGFKSS.js";import"./chunk-R7RGOZ3H.js";import"./chunk-GB4LEEYS.js";import"./chunk-WKORFEXG.js";import"./chunk-Q3BVPPHB.js";import"./chunk-AXJTWYCF.js";import"./chunk-LNHOWUSG.js";import"./chunk-FT3BXL44.js";export{a as LoadTestTool};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a}from"./chunk-52GDG6LU.js";import"./chunk-GB4LEEYS.js";import"./chunk-WKORFEXG.js";import"./chunk-FT3BXL44.js";export{a as InMemoryBackend};
@@ -1,14 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a as k}from"./chunk-KYO7ME7T.js";import{a as g}from"./chunk-FT3BXL44.js";import{createHash as M}from"crypto";var w=[{category:"aws_key",regex:/\b(AKIA[0-9A-Z]{16})\b/g,replacement:"<REDACTED:aws_key>",modes:["strict","balanced"]},{category:"env_value",regex:/^([A-Z][A-Z0-9_]{2,})=(.+)$/gm,replacement:"$1=<REDACTED:env_value>",modes:["strict","balanced"]},{category:"api_key_header",regex:/(Authorization:\s*Bearer\s+)\S+/gi,replacement:"$1<REDACTED:api_key>",modes:["strict","balanced"]},{category:"api_key_header",regex:/(x-api-key:\s*)\S+/gi,replacement:"$1<REDACTED:api_key>",modes:["strict","balanced"]},{category:"private_key",regex:/-----BEGIN\s[\w\s]*PRIVATE KEY-----[\s\S]*?-----END\s[\w\s]*PRIVATE KEY-----/g,replacement:"<REDACTED:private_key>",modes:["strict","balanced"]},{category:"jwt",regex:/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,replacement:"<REDACTED:jwt>",modes:["strict","balanced"]},{category:"github_token",regex:/\b(ghp_|gho_|ghs_|ghr_|github_pat_)[A-Za-z0-9_]{16,}\b/g,replacement:"<REDACTED:github_token>",modes:["strict","balanced"]},{category:"gitlab_token",regex:/\b(glpat-)[A-Za-z0-9_-]{20,}\b/g,replacement:"<REDACTED:gitlab_token>",modes:["strict","balanced"]},{category:"slack_token",regex:/\b(xoxb-|xoxp-|xoxs-|xoxa-)[A-Za-z0-9-]{10,}\b/g,replacement:"<REDACTED:slack_token>",modes:["strict","balanced"]},{category:"stripe_key",regex:/\b(sk_live_|pk_live_|sk_test_|pk_test_|rk_live_|rk_test_)[A-Za-z0-9]{10,}\b/g,replacement:"<REDACTED:stripe_key>",modes:["strict","balanced"]},{category:"google_api_key",regex:/\bAIzaSy[A-Za-z0-9_-]{33}\b/g,replacement:"<REDACTED:google_api_key>",modes:["strict","balanced"]},{category:"aws_session_token",regex:/\bASIA[0-9A-Z]{16}\b/g,replacement:"<REDACTED:aws_session_token>",modes:["strict","balanced"]},{category:"connection_string",regex:/\b(mongodb(\+srv)?|postgres(ql)?|mysql|redis|amqp):\/\/[^\s"']+/gi,replacement:"<REDACTED:connection_string>",modes:["strict","balanced"]},{category:"generic_secret",regex:/\b(password|secret|token|apikey|api_key|access_key|secret_key)\s*[:=]\s*['"]?(?!ghp_|gho_|ghs_|ghr_|github_pat_|glpat-|xoxb-|xoxp-|xoxs-|xoxa-|sk_live_|pk_live_|sk_test_|pk_test_|rk_live_|rk_test_|AIzaSy|AKIA|ASIA|<REDACTED:)[^\s'"]{8,}['"]?/gi,replacement:"<REDACTED:generic_secret>",modes:["strict","balanced"]},{category:"email",regex:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,replacement:"<REDACTED:pii_email>",modes:["strict"]},{category:"phone",regex:/\b(\+?1?[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b/g,replacement:"<REDACTED:pii_phone>",modes:["strict"]},{category:"ssn",regex:/\b\d{3}-\d{2}-\d{4}\b/g,replacement:"<REDACTED:pii_ssn>",modes:["strict"]}],R=new Set(["ollama"]),E=new Set(["claude","ollama"]);function u(o){return R.has(o)}function I(o){return E.has(o)}function P(o){return/^qe-security|^qe-pentest/.test(o)}function b(o,t="strict"){if(t==="off")return{text:o,redactions:[],replacementCount:0};let e=o,r=new Set,a=0;for(let s of w){if(!s.modes.includes(t))continue;let c=new RegExp(s.regex.source,s.regex.flags),n=e.match(c);n&&n.length>0&&(r.add(s.category),a+=n.length,e=e.replace(c,s.replacement))}return{text:e,redactions:Array.from(r).sort(),replacementCount:a}}function f(o,t,e){if(P(o)&&!I(t))throw new p(`Security agent "${o}" may only use providers: ${[...E].join(", ")}. Got: "${t}". OpenRouter is excluded (third-party proxy risk).`,6);if(e==="off"&&!u(t))throw new p(`Redaction mode "off" is only allowed for self-hosted providers (${[...R].join(", ")}). Got: "${t}".`,6)}var p=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="AdvisorRedactionError"}};var O="openrouter",z="anthropic/claude-opus-4",Z=100,$=`You are the advisor in an executor/advisor pattern. The executor has forwarded its full conversation transcript to you and is waiting for brief strategic guidance.
3
-
4
- You see the task, every tool call the executor has made, every result it has seen.
5
-
6
- Respond with a brief plan or correction in under 100 words. Use enumerated steps. No prose explanations. No pleasantries. Do not restate the task \u2014 the executor already knows the task. Focus on the next 1-3 concrete actions the executor should take, in order, with one-line reasons.
7
-
8
- If you see the executor about to commit to a wrong approach, say so in step 1. If you see the executor is on track, say so in one line and name the specific next action. If the transcript lacks enough information to give useful advice, say "INSUFFICIENT CONTEXT" and name the missing piece.`,m=class{constructor(t,e){this.router=t;this.circuitBreaker=new k(e)}circuitBreaker;getCircuitBreakerState(t){return this.circuitBreaker.getState(t)}resetCircuitBreaker(t){this.circuitBreaker.reset(t)}async consult(t,e={}){let r=e.provider??O,a=e.model??z,s=e.maxWords??Z,c=e.agentName??"unknown",n=e.triggerReason??"manual",d=e.sessionId??"default",y=e.redact??"strict";f(c,r,y);let v=this.circuitBreaker.acquire(d),_=[],l=this.serializeTranscript(t,s);if(!u(r)){let A=b(l,y);l=A.text,_=A.redactions}let D=[{role:"user",content:l}],T=e.advisorSystemPrompt??$,C={messages:D,systemPrompt:T,agentType:c,preferredProvider:r,model:a,maxTokens:Math.max(300,Math.ceil(s*1.6)),temperature:.2,metadata:{advisorCall:!0,triggerReason:n,adrRef:"ADR-092"}},i=await this.router.chat(C),h=i.content.trim(),S=M("sha256").update(h).digest("hex"),x={advice:h,model:i.model,provider:i.provider,tokensIn:i.usage?.promptTokens??0,tokensOut:i.usage?.completionTokens??0,latencyMs:i.latencyMs,costUsd:i.cost?.totalCost??0,adviceHash:S,triggerReason:n,cacheHit:i.cached??!1,redactionsApplied:_,circuitBreakerRemaining:v.remaining};return this.persistConsultation(d,x),x}persistConsultation(t,e){try{let{writeFileSync:r,mkdirSync:a}=g("fs"),{join:s}=g("path"),{homedir:c}=g("os"),n=s(c(),".agentic-qe","advisor","consultations");a(n,{recursive:!0});let d=s(n,`${t}.json`);r(d,JSON.stringify({model:e.model,provider:e.provider,tokensIn:e.tokensIn,tokensOut:e.tokensOut,latencyMs:e.latencyMs,costUsd:e.costUsd,adviceHash:e.adviceHash,triggerReason:e.triggerReason,redactionsApplied:e.redactionsApplied,timestamp:new Date().toISOString()},null,2))}catch{}}serializeTranscript(t,e){let r=[];t.systemPrompt&&r.push(`# Executor System Prompt
9
- ${t.systemPrompt}`),t.taskDescription&&r.push(`# Task
10
- ${t.taskDescription}`),r.push("# Conversation so far");for(let a of t.messages){let s=a.role.toUpperCase();r.push(`[${s}] ${a.content}`)}return r.push(`
11
- # Your job
12
- Respond with brief strategic guidance in under ${e} words. Use enumerated steps. No prose.`),r.join(`
13
-
14
- `)}};function U(o){return new m(o)}export{z as DEFAULT_ADVISOR_MODEL,O as DEFAULT_ADVISOR_PROVIDER,Z as DEFAULT_MAX_WORDS,m as MultiModelExecutor,U as createMultiModelExecutor};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.12");process.exit(0)}
2
- import{a,b}from"./chunk-4GGDA6PF.js";import"./chunk-I6J7AYIL.js";import"./chunk-RLVQDFZ2.js";import"./chunk-M7QYRRRS.js";import"./chunk-LJTRN6ZE.js";import"./chunk-CX5TTKTB.js";import"./chunk-FT3BXL44.js";export{a as DefaultProtocolExecutor,b as createProtocolExecutor};