agentic-qe 3.9.9 → 3.9.10

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 (330) hide show
  1. package/.claude/agents/_shared/executor-preamble.md +86 -0
  2. package/.claude/agents/v3/qe-coverage-specialist.md +20 -1
  3. package/.claude/agents/v3/qe-fleet-commander.md +20 -1
  4. package/.claude/agents/v3/qe-pentest-validator.md +20 -1
  5. package/.claude/agents/v3/qe-queen-coordinator.md +20 -1
  6. package/.claude/agents/v3/qe-risk-assessor.md +20 -1
  7. package/.claude/agents/v3/qe-root-cause-analyzer.md +19 -0
  8. package/.claude/agents/v3/qe-security-auditor.md +20 -1
  9. package/.claude/agents/v3/qe-test-architect.md +33 -1
  10. package/.claude/helpers/advisor-call.cjs +283 -0
  11. package/.claude/skills/skills-manifest.json +2 -2
  12. package/CHANGELOG.md +22 -0
  13. package/assets/agents/v3/helpers/advisor-call.cjs +283 -0
  14. package/assets/agents/v3/qe-coverage-specialist.md +20 -1
  15. package/assets/agents/v3/qe-fleet-commander.md +20 -1
  16. package/assets/agents/v3/qe-pentest-validator.md +20 -1
  17. package/assets/agents/v3/qe-queen-coordinator.md +20 -1
  18. package/assets/agents/v3/qe-risk-assessor.md +20 -1
  19. package/assets/agents/v3/qe-root-cause-analyzer.md +19 -0
  20. package/assets/agents/v3/qe-security-auditor.md +20 -1
  21. package/assets/agents/v3/qe-test-architect.md +33 -1
  22. package/assets/skills/skills-manifest.json +2 -2
  23. package/dist/cli/bundle.js +5 -5
  24. package/dist/cli/chunks/adapter-IKCDCMSI.js +2 -0
  25. package/dist/cli/chunks/{agent-booster-wasm-QEN7W6VC.js → agent-booster-wasm-HM4XSABF.js} +2 -2
  26. package/dist/cli/chunks/{agent-handler-F3RLG42J.js → agent-handler-UDBDLLO4.js} +2 -2
  27. package/dist/cli/chunks/{agent-memory-branch-U3PZ3CPL.js → agent-memory-branch-VIXQ3DAR.js} +2 -2
  28. package/dist/cli/chunks/aqe-learning-engine-W4WW7SQW.js +2 -0
  29. package/dist/cli/chunks/{audit-FF6SP7Q2.js → audit-FWTGLQHH.js} +2 -2
  30. package/dist/cli/chunks/base-UQKFTHOY.js +2 -0
  31. package/dist/cli/chunks/{better-sqlite3-CVXRDGQX.js → better-sqlite3-TYI3CCWU.js} +2 -2
  32. package/dist/cli/chunks/{brain-handler-AMTRZ35W.js → brain-handler-45ZGBLSB.js} +3 -3
  33. package/dist/cli/chunks/{branch-enumerator-Y4A34YFT.js → branch-enumerator-ZBXELCQA.js} +2 -2
  34. package/dist/cli/chunks/{browser-ETSF5GZR.js → browser-2KM5IKEX.js} +2 -2
  35. package/dist/cli/chunks/browser-workflow-NMOEM3HW.js +2 -0
  36. package/dist/cli/chunks/{chunk-3NU4C62D.js → chunk-226DSROQ.js} +3 -3
  37. package/dist/cli/chunks/{chunk-JK4K4EH3.js → chunk-27B575K6.js} +2 -2
  38. package/dist/cli/chunks/{chunk-J2DNMVB5.js → chunk-2IJFZW3N.js} +12 -12
  39. package/dist/cli/chunks/{chunk-BVKS3X2I.js → chunk-32OB4ZYQ.js} +1 -1
  40. package/dist/cli/chunks/{chunk-UYKIPSRX.js → chunk-335CCAOL.js} +1 -1
  41. package/dist/cli/chunks/{chunk-ECNPBD4Y.js → chunk-34WI4QNF.js} +2 -2
  42. package/dist/cli/chunks/chunk-3A4BL62O.js +2 -0
  43. package/dist/cli/chunks/{chunk-4HDG7OS4.js → chunk-3AG647MY.js} +2 -2
  44. package/dist/cli/chunks/{chunk-22HQFULR.js → chunk-3HIDCXW3.js} +1 -1
  45. package/dist/cli/chunks/{chunk-OMRZUYXN.js → chunk-4EKWEDHA.js} +9 -9
  46. package/dist/cli/chunks/{chunk-S6VT7VAO.js → chunk-4FU6YNDP.js} +2 -2
  47. package/dist/cli/chunks/{chunk-2ZHA6ORO.js → chunk-4LOJJ4VX.js} +1 -1
  48. package/dist/cli/chunks/{chunk-Q2ZBPOUX.js → chunk-4VOGUZW5.js} +1 -1
  49. package/dist/cli/chunks/{chunk-QMNAELZG.js → chunk-4ZR5G4MZ.js} +2 -2
  50. package/dist/cli/chunks/{chunk-MDTF7LE6.js → chunk-52ZHPZVX.js} +2 -2
  51. package/dist/cli/chunks/{chunk-5DU4YW2S.js → chunk-53G3OCGS.js} +2 -2
  52. package/dist/cli/chunks/{chunk-NLKJI73E.js → chunk-54TZA65H.js} +2 -2
  53. package/dist/cli/chunks/{chunk-3JCZTTFY.js → chunk-5QKTLOGO.js} +1 -1
  54. package/dist/cli/chunks/{chunk-QHATTMJC.js → chunk-5TATJQ3Z.js} +2 -2
  55. package/dist/cli/chunks/{chunk-CJQLJEO4.js → chunk-5V6DRRLO.js} +2 -2
  56. package/dist/cli/chunks/{chunk-5L3EUZJA.js → chunk-6X7WKNDF.js} +2 -2
  57. package/dist/cli/chunks/chunk-7FWZHYYE.js +2 -0
  58. package/dist/cli/chunks/{chunk-PEEN4AAK.js → chunk-A2ULGMMG.js} +1 -1
  59. package/dist/cli/chunks/{chunk-2KY5B4ON.js → chunk-A53XKLEA.js} +8 -8
  60. package/dist/cli/chunks/{chunk-QSA23PJ6.js → chunk-A5OIXFFL.js} +1 -1
  61. package/dist/cli/chunks/{chunk-VTX4NAWB.js → chunk-ACNL4NFI.js} +2 -2
  62. package/dist/cli/chunks/{chunk-2UP3DYNH.js → chunk-AE6Y5CNJ.js} +2 -2
  63. package/dist/cli/chunks/{chunk-3F666FYP.js → chunk-AO4HDN62.js} +2 -2
  64. package/dist/cli/chunks/{chunk-JIPU4YQK.js → chunk-AOA454FC.js} +2 -2
  65. package/dist/cli/chunks/{chunk-YRORPSPA.js → chunk-B2QVWL5R.js} +2 -2
  66. package/dist/cli/chunks/{chunk-AYMIF4W5.js → chunk-B3L3CT4X.js} +2 -2
  67. package/dist/cli/chunks/{chunk-MXMKHI2I.js → chunk-B4AFVIOA.js} +2 -2
  68. package/dist/cli/chunks/{chunk-R23PJGH7.js → chunk-BCSCJBYQ.js} +2 -2
  69. package/dist/cli/chunks/{chunk-CCCBGKVY.js → chunk-BIV6HWMT.js} +2 -2
  70. package/dist/cli/chunks/{chunk-A6GYFTIA.js → chunk-BNNH3KZP.js} +1 -1
  71. package/dist/cli/chunks/{chunk-74FBSJVC.js → chunk-C234RGWZ.js} +2 -2
  72. package/dist/cli/chunks/{chunk-PRJUO2OQ.js → chunk-C55GEYDA.js} +2 -2
  73. package/dist/cli/chunks/{chunk-IZC5NPHD.js → chunk-CEBZHZ4O.js} +1 -1
  74. package/dist/cli/chunks/{chunk-TTENF6AH.js → chunk-CFQHIWWH.js} +1 -1
  75. package/dist/cli/chunks/{chunk-B3DA4SCL.js → chunk-CJO2V2FB.js} +1 -1
  76. package/dist/cli/chunks/{chunk-CZYTPNUI.js → chunk-CQNXIYQW.js} +2 -2
  77. package/dist/cli/chunks/{chunk-FTF34UME.js → chunk-D2A4TGZY.js} +1 -1
  78. package/dist/cli/chunks/{chunk-MWZN4PYF.js → chunk-DG2OYKUQ.js} +2 -2
  79. package/dist/cli/chunks/{chunk-OFOFXJ3M.js → chunk-DPYCHODC.js} +2 -2
  80. package/dist/cli/chunks/{chunk-JQJHRQRX.js → chunk-E4YKNKQL.js} +2 -2
  81. package/dist/cli/chunks/{chunk-65XCVUP7.js → chunk-EEWTTYRC.js} +1 -1
  82. package/dist/cli/chunks/{chunk-KSJCMXAJ.js → chunk-EGIYLRW5.js} +2 -2
  83. package/dist/cli/chunks/{chunk-ADJGMTIW.js → chunk-EHGTNSJ2.js} +1 -1
  84. package/dist/cli/chunks/{chunk-P6YMECV2.js → chunk-EJNASXOY.js} +2 -2
  85. package/dist/cli/chunks/{chunk-AT2VD2ZP.js → chunk-F7HRGQRS.js} +2 -2
  86. package/dist/cli/chunks/{chunk-C7YD7O74.js → chunk-FF7TSDO4.js} +2 -2
  87. package/dist/cli/chunks/{chunk-MUCFC3YG.js → chunk-FIQNVPYY.js} +2 -2
  88. package/dist/cli/chunks/{chunk-RZYTJSQT.js → chunk-FJOBKT7N.js} +1 -1
  89. package/dist/cli/chunks/{chunk-YXE67VME.js → chunk-FYI52MFF.js} +2 -2
  90. package/dist/cli/chunks/{chunk-DNS7DP2O.js → chunk-GCNTU3QJ.js} +1 -1
  91. package/dist/cli/chunks/{chunk-ZEUORIH2.js → chunk-H56YBNXW.js} +2 -2
  92. package/dist/cli/chunks/{chunk-J62N66ZH.js → chunk-HJMLJNCB.js} +1 -1
  93. package/dist/cli/chunks/chunk-I3IRIJOT.js +2 -0
  94. package/dist/cli/chunks/chunk-IEQ2VYMO.js +3 -0
  95. package/dist/cli/chunks/{chunk-BVOGMK6N.js → chunk-IGRKFVFD.js} +2 -2
  96. package/dist/cli/chunks/{chunk-6LTJP3DO.js → chunk-IJPE6OGD.js} +10 -10
  97. package/dist/cli/chunks/{chunk-HDM43P7H.js → chunk-IJUL2UMO.js} +1 -1
  98. package/dist/cli/chunks/{chunk-EV2NMWJV.js → chunk-ISZJAZ2D.js} +1 -1
  99. package/dist/cli/chunks/{chunk-4CDSEZD6.js → chunk-ITDYTODU.js} +2 -2
  100. package/dist/cli/chunks/{chunk-BYJEK6LX.js → chunk-JHUEBBSX.js} +2 -2
  101. package/dist/cli/chunks/{chunk-2HFPJPQW.js → chunk-JN3CC2TX.js} +2 -2
  102. package/dist/cli/chunks/{chunk-CXWA34RL.js → chunk-JOEEGNNX.js} +2 -2
  103. package/dist/cli/chunks/{chunk-BYPBKVTC.js → chunk-JQX2DHQT.js} +1 -1
  104. package/dist/cli/chunks/{chunk-ZKXA4VBK.js → chunk-JRG4AFUR.js} +3 -3
  105. package/dist/cli/chunks/{chunk-52RZZV4M.js → chunk-JRMNQWRL.js} +3 -3
  106. package/dist/cli/chunks/{chunk-2JAYDTSE.js → chunk-JXDJMVIG.js} +2 -2
  107. package/dist/cli/chunks/{chunk-2X7LDTVD.js → chunk-JYPW22JV.js} +2 -2
  108. package/dist/cli/chunks/{chunk-XZ2JYMFT.js → chunk-KK3KVYE7.js} +2 -2
  109. package/dist/cli/chunks/{chunk-BSES27JE.js → chunk-KSRAA6ZD.js} +3 -3
  110. package/dist/cli/chunks/chunk-KUCU5ML6.js +6 -0
  111. package/dist/cli/chunks/{chunk-QTYTM7C7.js → chunk-KXXLMLMJ.js} +2 -2
  112. package/dist/cli/chunks/{chunk-DI6R2AVP.js → chunk-LKCFJC4Q.js} +1 -1
  113. package/dist/cli/chunks/{chunk-SVLO2DVL.js → chunk-LODXDV4G.js} +2 -2
  114. package/dist/cli/chunks/{chunk-AHOP227C.js → chunk-M4CYXAVP.js} +4 -4
  115. package/dist/cli/chunks/{chunk-6KQLF3ZO.js → chunk-MOLMS6MA.js} +2 -2
  116. package/dist/cli/chunks/{chunk-YISXT54V.js → chunk-NBTM2J4B.js} +2 -2
  117. package/dist/cli/chunks/{chunk-FGW5W3YK.js → chunk-NIFVFUCU.js} +2 -2
  118. package/dist/cli/chunks/{chunk-W57I57M4.js → chunk-OOHKW3UE.js} +2 -2
  119. package/dist/cli/chunks/{chunk-6PJUDLCT.js → chunk-ORA6NIXN.js} +2 -2
  120. package/dist/cli/chunks/{chunk-HOWZFW7G.js → chunk-OSD55UO7.js} +2 -2
  121. package/dist/cli/chunks/{chunk-Z7AFNZMI.js → chunk-OWQRMH3G.js} +2 -2
  122. package/dist/cli/chunks/chunk-QFUINEBN.js +2 -0
  123. package/dist/cli/chunks/{chunk-OEZA7Q2Z.js → chunk-RE2IBX7Z.js} +2 -2
  124. package/dist/cli/chunks/{chunk-5SWY75MJ.js → chunk-RMQQ5UHM.js} +2 -2
  125. package/dist/cli/chunks/{chunk-MZOYBHJ3.js → chunk-ROEMVTXC.js} +3 -3
  126. package/dist/cli/chunks/{chunk-WDWIJDQR.js → chunk-SMTAZQJ3.js} +2 -2
  127. package/dist/cli/chunks/{chunk-W4VDPHWC.js → chunk-TO4NGP3E.js} +1 -1
  128. package/dist/cli/chunks/{chunk-PYTXZMXR.js → chunk-TTXYZUTQ.js} +2 -2
  129. package/dist/cli/chunks/{chunk-WEJJWJ5M.js → chunk-U4NODKRR.js} +2 -2
  130. package/dist/cli/chunks/{chunk-RLLDZNLF.js → chunk-U635PSAW.js} +2 -2
  131. package/dist/cli/chunks/{chunk-QZMBJ67L.js → chunk-UBT7VCKQ.js} +2 -2
  132. package/dist/cli/chunks/{chunk-R5ZKFJ3H.js → chunk-UETM5XDO.js} +1 -1
  133. package/dist/cli/chunks/{chunk-MUIJVPGB.js → chunk-URXG7FMO.js} +4 -3
  134. package/dist/cli/chunks/{chunk-VIIUJRKA.js → chunk-VIWDVS24.js} +2 -2
  135. package/dist/cli/chunks/{chunk-5HM66R4W.js → chunk-VNKCUKUJ.js} +3 -3
  136. package/dist/cli/chunks/{chunk-ZTI3BATG.js → chunk-VXIXHZCN.js} +2 -2
  137. package/dist/cli/chunks/{chunk-GYNGJHYF.js → chunk-WFEXEDMC.js} +2 -2
  138. package/dist/cli/chunks/{chunk-UEKDDUGV.js → chunk-WLX57ULC.js} +2 -2
  139. package/dist/cli/chunks/{chunk-ANLFEGDG.js → chunk-WVQZGLCT.js} +2 -2
  140. package/dist/cli/chunks/{chunk-2BSVGL35.js → chunk-WW5DZ6BU.js} +1 -1
  141. package/dist/cli/chunks/{chunk-4CSINHCB.js → chunk-X364AIY6.js} +1 -1
  142. package/dist/cli/chunks/{chunk-3FAEM5M7.js → chunk-XH7D6EGE.js} +1 -1
  143. package/dist/cli/chunks/{chunk-NQ3WHTLT.js → chunk-XICRAXUR.js} +4 -4
  144. package/dist/cli/chunks/{chunk-WZR4CKR4.js → chunk-XMAV7AIC.js} +1 -1
  145. package/dist/cli/chunks/{chunk-2O3WZ6E3.js → chunk-XSUPK7FI.js} +1 -1
  146. package/dist/cli/chunks/{chunk-QQLQEQJM.js → chunk-XSWOB74I.js} +2 -2
  147. package/dist/cli/chunks/chunk-YPIZMTTA.js +14 -0
  148. package/dist/cli/chunks/{chunk-3XR7ARS6.js → chunk-YT6KBEXE.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VWHALAEO.js → chunk-ZENLP5LF.js} +1 -1
  150. package/dist/cli/chunks/{ci-4QYE6JBM.js → ci-WS32HBBS.js} +2 -2
  151. package/dist/cli/chunks/{ci-output-MV75HUK7.js → ci-output-67R5MSLL.js} +2 -2
  152. package/dist/cli/chunks/circuit-breaker-MA562FT7.js +2 -0
  153. package/dist/cli/chunks/{claude-flow-setup-CZITY7SG.js → claude-flow-setup-4QKGSRS7.js} +2 -2
  154. package/dist/cli/chunks/client-XQGZKXOB.js +2 -0
  155. package/dist/cli/chunks/{cline-installer-ZLQKCPFF.js → cline-installer-6VSROHRY.js} +2 -2
  156. package/dist/cli/chunks/{code-NYEXOJVP.js → code-FBPBHVV3.js} +2 -2
  157. package/dist/cli/chunks/{code-index-extractor-TITXUC44.js → code-index-extractor-62F622V2.js} +2 -2
  158. package/dist/cli/chunks/{codex-installer-TWT4LIL2.js → codex-installer-LSR6DVCU.js} +2 -2
  159. package/dist/cli/chunks/{completions-2KNV2MZG.js → completions-56QOICBN.js} +2 -2
  160. package/dist/cli/chunks/{complexity-analyzer-2U3OVRDX.js → complexity-analyzer-SDH4NWIS.js} +2 -2
  161. package/dist/cli/chunks/{continuedev-installer-BWQBRVTC.js → continuedev-installer-S7ZPL3VC.js} +2 -2
  162. package/dist/cli/chunks/{copilot-installer-CYN33NMG.js → copilot-installer-25GNNKNL.js} +2 -2
  163. package/dist/cli/chunks/{cost-tracker-2GUCBYLK.js → cost-tracker-73J4Y2RS.js} +2 -2
  164. package/dist/cli/chunks/{coverage-BAVD66VL.js → coverage-WEE2AZ5F.js} +3 -3
  165. package/dist/cli/chunks/cross-domain-router-C2ZFCSXJ.js +2 -0
  166. package/dist/cli/chunks/{cursor-installer-ZQAUD47B.js → cursor-installer-DHQ644T3.js} +2 -2
  167. package/dist/cli/chunks/{daemon-VY2LZPIM.js → daemon-3WUJ5E3X.js} +3 -3
  168. package/dist/cli/chunks/{dag-attention-scheduler-JNQWWXSW.js → dag-attention-scheduler-IRLAM43H.js} +2 -2
  169. package/dist/cli/chunks/{detect-Y7BBW4LI.js → detect-DTSB4T4R.js} +2 -2
  170. package/dist/cli/chunks/{domain-handler-473WNSR2.js → domain-handler-DDN2Z5XC.js} +2 -2
  171. package/dist/cli/chunks/{domain-transfer-R4VK7CRR.js → domain-transfer-3RRG4S6R.js} +2 -2
  172. package/dist/cli/chunks/dream-JSZZ67OO.js +2 -0
  173. package/dist/cli/chunks/esm-node-X4TES6NX.js +2 -0
  174. package/dist/cli/chunks/{eval-TJAZGRCM.js → eval-UXEP425X.js} +2 -2
  175. package/dist/cli/chunks/{fast-paths-LMN542IB.js → fast-paths-4XLHS2VN.js} +2 -2
  176. package/dist/cli/chunks/{feature-flags-IMFZ7KED.js → feature-flags-6C2HD76K.js} +2 -2
  177. package/dist/cli/chunks/{feature-flags-WMXIDTXL.js → feature-flags-KXXHAEYF.js} +2 -2
  178. package/dist/cli/chunks/{file-discovery-GXXWQJV3.js → file-discovery-YSDUIZO4.js} +2 -2
  179. package/dist/cli/chunks/{fleet-WIC7RHJV.js → fleet-TYDG5DWK.js} +3 -3
  180. package/dist/cli/chunks/{gnn-wrapper-PVKCXV25.js → gnn-wrapper-GJVYRPHB.js} +2 -2
  181. package/dist/cli/chunks/{heartbeat-handler-BJ6ZZP7Q.js → heartbeat-handler-X63CM35O.js} +4 -4
  182. package/dist/cli/chunks/{heartbeat-scheduler-3SQXTFYU.js → heartbeat-scheduler-NYH4CMVM.js} +2 -2
  183. package/dist/cli/chunks/hnsw-adapter-SQCVEHB5.js +2 -0
  184. package/dist/cli/chunks/hnsw-index-UGVC5IDK.js +2 -0
  185. package/dist/cli/chunks/{hnsw-legacy-bridge-23HFWIPK.js → hnsw-legacy-bridge-YDVUZTJI.js} +2 -2
  186. package/dist/cli/chunks/{hnswlib-node-4GRFMUPD.js → hnswlib-node-TLBDFWA6.js} +2 -2
  187. package/dist/cli/chunks/{hooks-IXH5454I.js → hooks-B6PVGP7D.js} +6 -6
  188. package/dist/cli/chunks/hybrid-router-YZEBKUZJ.js +2 -0
  189. package/dist/cli/chunks/{hypergraph-engine-TEQMJFJJ.js → hypergraph-engine-OQ2ZEG53.js} +2 -2
  190. package/dist/cli/chunks/{hypergraph-handler-3ECUWIG3.js → hypergraph-handler-VPD424MI.js} +3 -3
  191. package/dist/cli/chunks/impact-analyzer-ZIXSRWED.js +2 -0
  192. package/dist/cli/chunks/{init-handler-TZRKW3NZ.js → init-handler-5WYP6NJW.js} +6 -6
  193. package/dist/cli/chunks/init-wizard-MO6PCXPX.js +2 -0
  194. package/dist/cli/chunks/kernel-P54KQB2F.js +2 -0
  195. package/dist/cli/chunks/{kilocode-installer-IPH3O3ZS.js → kilocode-installer-YVY4EVMY.js} +2 -2
  196. package/dist/cli/chunks/{kiro-installer-VROMOOQO.js → kiro-installer-GNT4BN3A.js} +2 -2
  197. package/dist/cli/chunks/knowledge-graph-GU57FQAQ.js +2 -0
  198. package/dist/cli/chunks/{learning-JYQLD66S.js → learning-LD2RSBRS.js} +3 -3
  199. package/dist/cli/chunks/llm-router-ALKXFKLQ.js +36 -0
  200. package/dist/cli/chunks/{load-DMAQB4NC.js → load-XAOTGZYB.js} +2 -2
  201. package/dist/cli/chunks/load-test-5RFBTSS7.js +2 -0
  202. package/dist/cli/chunks/{mcp-K6CSUBMU.js → mcp-WDAJHGH4.js} +2 -2
  203. package/dist/cli/chunks/{memory-5BSXKHSK.js → memory-M7QD57JD.js} +5 -5
  204. package/dist/cli/chunks/memory-backend-GPOP3IR4.js +2 -0
  205. package/dist/cli/chunks/memory-handlers-2NHGZLQM.js +2 -0
  206. package/dist/cli/chunks/multi-model-executor-2XZQK2IN.js +14 -0
  207. package/dist/cli/chunks/{opencode-installer-IUWO2QV6.js → opencode-installer-ASCVY3GG.js} +2 -2
  208. package/dist/cli/chunks/{orchestrator-Z2EM76CR.js → orchestrator-GOZICWN3.js} +6 -6
  209. package/dist/cli/chunks/{pipeline-OL5SI2RI.js → pipeline-YHQRJWV3.js} +2 -2
  210. package/dist/cli/chunks/{platform-VNJIKIHZ.js → platform-4NESYFHN.js} +2 -2
  211. package/dist/cli/chunks/{plugin-SJJUE47D.js → plugin-E24I2RVB.js} +2 -2
  212. package/dist/cli/chunks/{prime-radiant-advanced-wasm-ZLVTCNSH.js → prime-radiant-advanced-wasm-CDVSLR7R.js} +2 -2
  213. package/dist/cli/chunks/protocol-executor-M5IONISJ.js +2 -0
  214. package/dist/cli/chunks/{protocol-handler-HTX44YTW.js → protocol-handler-TGTDKSZB.js} +2 -2
  215. package/dist/cli/chunks/{prove-MGFLVZNS.js → prove-WUKDAMSE.js} +2 -2
  216. package/dist/cli/chunks/provider-manager-BTKK6W7M.js +24 -0
  217. package/dist/cli/chunks/qe-reasoning-bank-WIEXCBVE.js +2 -0
  218. package/dist/cli/chunks/{quality-FMFKPICZ.js → quality-RTIOIS2K.js} +2 -2
  219. package/dist/cli/chunks/queen-coordinator-ZFK6DANW.js +2 -0
  220. package/dist/cli/chunks/{real-embeddings-2BMEEOA2.js → real-embeddings-4JJKAEMO.js} +2 -2
  221. package/dist/cli/chunks/{roocode-installer-2PA3B5JI.js → roocode-installer-XU2IXRBM.js} +2 -2
  222. package/dist/cli/chunks/router-TOFBEI2Q.js +2 -0
  223. package/dist/cli/chunks/routing-feedback-RC2VDP6W.js +2 -0
  224. package/dist/cli/chunks/{routing-handler-SNGSQ757.js → routing-handler-3KBOCIEN.js} +2 -2
  225. package/dist/cli/chunks/{ruvector-commands-54MYLF63.js → ruvector-commands-HHE2ZPX7.js} +2 -2
  226. package/dist/cli/chunks/{rvf-dual-writer-6Q44XJOJ.js → rvf-dual-writer-GAWM2BUZ.js} +2 -2
  227. package/dist/cli/chunks/{rvf-migration-adapter-JECN625C.js → rvf-migration-adapter-HQPEC4BN.js} +2 -2
  228. package/dist/cli/chunks/{rvf-migration-coordinator-MEAVIHQY.js → rvf-migration-coordinator-A4K45EFU.js} +2 -2
  229. package/dist/cli/chunks/rvf-native-adapter-ZOQDH3JY.js +2 -0
  230. package/dist/cli/chunks/safe-db-RIP3X32S.js +2 -0
  231. package/dist/cli/chunks/schedule-Q6KZRLWS.js +2 -0
  232. package/dist/cli/chunks/scheduler-SJO5QPAU.js +2 -0
  233. package/dist/cli/chunks/{security-CXLXTNIV.js → security-UIKUNOXB.js} +3 -3
  234. package/dist/cli/chunks/shared-rvf-adapter-JJCR3AWU.js +2 -0
  235. package/dist/cli/chunks/{shared-rvf-dual-writer-SOQDKE6S.js → shared-rvf-dual-writer-ZUWSLFPH.js} +2 -2
  236. package/dist/cli/chunks/sqlite-persistence-HK2S6XAI.js +2 -0
  237. package/dist/cli/chunks/{status-handler-NNEF4SQV.js → status-handler-E3VSWGA6.js} +2 -2
  238. package/dist/cli/chunks/{structural-health-FY6QIA55.js → structural-health-Y22H4BOU.js} +2 -2
  239. package/dist/cli/chunks/{sync-2QMSZ67Q.js → sync-CA4KWZFS.js} +2 -2
  240. package/dist/cli/chunks/{task-handler-GZJPE2QW.js → task-handler-3EZPIAMD.js} +2 -2
  241. package/dist/cli/chunks/task-handlers-6UVAQAGP.js +2 -0
  242. package/dist/cli/chunks/{test-JVA2S2R2.js → test-Q5DOFSJI.js} +4 -4
  243. package/dist/cli/chunks/{test-scheduling-PRMP4H6X.js → test-scheduling-BSXWCIMQ.js} +3 -3
  244. package/dist/cli/chunks/token-bootstrap-XGEZU2CS.js +2 -0
  245. package/dist/cli/chunks/{token-usage-G73L32OF.js → token-usage-BZX5TCG6.js} +2 -2
  246. package/dist/cli/chunks/{transformers-U3TSLEGO.js → transformers-7ITQPXAU.js} +2 -2
  247. package/dist/cli/chunks/{tree-sitter-wasm-parser-QXP2MNSX.js → tree-sitter-wasm-parser-ZYBBNYR3.js} +2 -2
  248. package/dist/cli/chunks/{types-BIQ7O5VR.js → types-ACZ5VVRC.js} +2 -2
  249. package/dist/cli/chunks/unified-memory-EXO6WK33.js +2 -0
  250. package/dist/cli/chunks/unified-memory-hnsw-7HPSTFVV.js +2 -0
  251. package/dist/cli/chunks/unified-persistence-WC3O4WOJ.js +2 -0
  252. package/dist/cli/chunks/{validate-CTBEA4BZ.js → validate-IQL6OVXD.js} +2 -2
  253. package/dist/cli/chunks/{validate-swarm-PHT6XW3A.js → validate-swarm-J52J2K5X.js} +2 -2
  254. package/dist/cli/chunks/{vibium-CRCYAH3V.js → vibium-XSE76PXE.js} +2 -2
  255. package/dist/cli/chunks/visual-security-COW3OCEE.js +2 -0
  256. package/dist/cli/chunks/{web-tree-sitter-2MH3G7K7.js → web-tree-sitter-YM6QXUIY.js} +2 -2
  257. package/dist/cli/chunks/{windsurf-installer-LBRNYFSI.js → windsurf-installer-M27DVL4H.js} +2 -2
  258. package/dist/cli/chunks/{witness-chain-HNFQLO7Q.js → witness-chain-NB5LP73S.js} +2 -2
  259. package/dist/cli/chunks/witness-chain-XQXF3RSP.js +2 -0
  260. package/dist/cli/chunks/{workflow-DNAF6BQ2.js → workflow-5DODQ6XS.js} +4 -4
  261. package/dist/cli/chunks/workflow-orchestrator-HSIZEKZM.js +2 -0
  262. package/dist/cli/chunks/{wrappers-U7AO6ZZN.js → wrappers-K7HHCIYD.js} +2 -2
  263. package/dist/cli/commands/llm-router.js +252 -0
  264. package/dist/coordination/queen-task-management.js +8 -1
  265. package/dist/init/init-wizard-steps.js +9 -0
  266. package/dist/init/phases/12-verification.js +8 -0
  267. package/dist/kernel/unified-memory-schemas.d.ts +1 -1
  268. package/dist/kernel/unified-memory-schemas.js +2 -1
  269. package/dist/mcp/bundle.js +47 -44
  270. package/dist/mcp/protocol-server.js +87 -0
  271. package/dist/routing/advisor/circuit-breaker.d.ts +56 -0
  272. package/dist/routing/advisor/circuit-breaker.js +128 -0
  273. package/dist/routing/advisor/domain-prompts.d.ts +14 -0
  274. package/dist/routing/advisor/domain-prompts.js +53 -0
  275. package/dist/routing/advisor/index.d.ts +10 -0
  276. package/dist/routing/advisor/index.js +9 -0
  277. package/dist/routing/advisor/multi-model-executor.d.ts +60 -0
  278. package/dist/routing/advisor/multi-model-executor.js +176 -0
  279. package/dist/routing/advisor/redaction.d.ts +40 -0
  280. package/dist/routing/advisor/redaction.js +187 -0
  281. package/dist/routing/advisor/types.d.ts +101 -0
  282. package/dist/routing/advisor/types.js +9 -0
  283. package/dist/routing/queen-integration.d.ts +3 -0
  284. package/dist/routing/queen-integration.js +7 -1
  285. package/dist/routing/routing-feedback.d.ts +7 -1
  286. package/dist/routing/routing-feedback.js +57 -11
  287. package/dist/routing/tiny-dancer-router.d.ts +35 -1
  288. package/dist/routing/tiny-dancer-router.js +33 -0
  289. package/dist/routing/types.d.ts +12 -0
  290. package/package.json +1 -1
  291. package/dist/cli/chunks/adapter-XKXEZEMM.js +0 -2
  292. package/dist/cli/chunks/aqe-learning-engine-K7XGBDMZ.js +0 -2
  293. package/dist/cli/chunks/base-NUF35LIJ.js +0 -2
  294. package/dist/cli/chunks/browser-workflow-MWPELXFA.js +0 -2
  295. package/dist/cli/chunks/chunk-ENG5UF7M.js +0 -7
  296. package/dist/cli/chunks/chunk-NVVF5ROM.js +0 -14
  297. package/dist/cli/chunks/chunk-VRH3YLO2.js +0 -2
  298. package/dist/cli/chunks/client-VXVVUQDV.js +0 -2
  299. package/dist/cli/chunks/cross-domain-router-HUJG6CFC.js +0 -2
  300. package/dist/cli/chunks/dream-QQDRI2EQ.js +0 -2
  301. package/dist/cli/chunks/esm-node-Y3HIFLTX.js +0 -2
  302. package/dist/cli/chunks/hnsw-adapter-VKS7ORL2.js +0 -2
  303. package/dist/cli/chunks/hnsw-index-GPUBY6EQ.js +0 -2
  304. package/dist/cli/chunks/impact-analyzer-D6MBGRKX.js +0 -2
  305. package/dist/cli/chunks/init-wizard-S6P2MFJF.js +0 -2
  306. package/dist/cli/chunks/kernel-EFDDMNXJ.js +0 -2
  307. package/dist/cli/chunks/knowledge-graph-4PM4DFH3.js +0 -2
  308. package/dist/cli/chunks/llm-router-CIICNICY.js +0 -30
  309. package/dist/cli/chunks/load-test-PPSWF3TO.js +0 -2
  310. package/dist/cli/chunks/memory-backend-3E6BA2JU.js +0 -2
  311. package/dist/cli/chunks/memory-handlers-APOLXPNH.js +0 -2
  312. package/dist/cli/chunks/protocol-executor-2RD52J5J.js +0 -2
  313. package/dist/cli/chunks/qe-reasoning-bank-OGKT52EN.js +0 -2
  314. package/dist/cli/chunks/queen-coordinator-B63YXNI6.js +0 -2
  315. package/dist/cli/chunks/router-NDQCJQC6.js +0 -2
  316. package/dist/cli/chunks/routing-feedback-PSN2RLDO.js +0 -2
  317. package/dist/cli/chunks/rvf-native-adapter-F56HQKLS.js +0 -2
  318. package/dist/cli/chunks/safe-db-LMRMNROL.js +0 -2
  319. package/dist/cli/chunks/schedule-OZSUYPPC.js +0 -2
  320. package/dist/cli/chunks/scheduler-GFXCQ6ZA.js +0 -2
  321. package/dist/cli/chunks/shared-rvf-adapter-RZPF4WWK.js +0 -2
  322. package/dist/cli/chunks/sqlite-persistence-VP67CJPK.js +0 -2
  323. package/dist/cli/chunks/task-handlers-AHM37D4I.js +0 -2
  324. package/dist/cli/chunks/token-bootstrap-YJEHCBV2.js +0 -2
  325. package/dist/cli/chunks/unified-memory-JB4KPMPI.js +0 -2
  326. package/dist/cli/chunks/unified-memory-hnsw-RPSZZIWP.js +0 -2
  327. package/dist/cli/chunks/unified-persistence-L23T4C5C.js +0 -2
  328. package/dist/cli/chunks/visual-security-F2I524IQ.js +0 -2
  329. package/dist/cli/chunks/witness-chain-CN6FCWRY.js +0 -2
  330. package/dist/cli/chunks/workflow-orchestrator-JJBCCNYI.js +0 -2
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Secrets / PII Redaction Pre-Flight
3
+ * ADR-092 Phase 1: mandatory before non-self-hosted advisors see the transcript
4
+ *
5
+ * Scans transcript content for credential patterns, API keys, PII, and other
6
+ * sensitive data. Replaces matches with typed redaction markers. Returns the
7
+ * list of redaction categories applied so the audit log can record them.
8
+ *
9
+ * Three modes:
10
+ * strict — redacts credentials + PII + env values (default)
11
+ * balanced — redacts credentials + env values only
12
+ * off — no redaction (rejected for non-self-hosted providers by MultiModelExecutor)
13
+ */
14
+ const PATTERNS = [
15
+ {
16
+ category: 'aws_key',
17
+ regex: /\b(AKIA[0-9A-Z]{16})\b/g,
18
+ replacement: '<REDACTED:aws_key>',
19
+ modes: ['strict', 'balanced'],
20
+ },
21
+ {
22
+ category: 'env_value',
23
+ regex: /^([A-Z][A-Z0-9_]{2,})=(.+)$/gm,
24
+ replacement: '$1=<REDACTED:env_value>',
25
+ modes: ['strict', 'balanced'],
26
+ },
27
+ {
28
+ category: 'api_key_header',
29
+ regex: /(Authorization:\s*Bearer\s+)\S+/gi,
30
+ replacement: '$1<REDACTED:api_key>',
31
+ modes: ['strict', 'balanced'],
32
+ },
33
+ {
34
+ category: 'api_key_header',
35
+ regex: /(x-api-key:\s*)\S+/gi,
36
+ replacement: '$1<REDACTED:api_key>',
37
+ modes: ['strict', 'balanced'],
38
+ },
39
+ {
40
+ category: 'private_key',
41
+ regex: /-----BEGIN\s[\w\s]*PRIVATE KEY-----[\s\S]*?-----END\s[\w\s]*PRIVATE KEY-----/g,
42
+ replacement: '<REDACTED:private_key>',
43
+ modes: ['strict', 'balanced'],
44
+ },
45
+ {
46
+ category: 'jwt',
47
+ regex: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,
48
+ replacement: '<REDACTED:jwt>',
49
+ modes: ['strict', 'balanced'],
50
+ },
51
+ {
52
+ category: 'github_token',
53
+ regex: /\b(ghp_|gho_|ghs_|ghr_|github_pat_)[A-Za-z0-9_]{16,}\b/g,
54
+ replacement: '<REDACTED:github_token>',
55
+ modes: ['strict', 'balanced'],
56
+ },
57
+ {
58
+ category: 'gitlab_token',
59
+ regex: /\b(glpat-)[A-Za-z0-9_-]{20,}\b/g,
60
+ replacement: '<REDACTED:gitlab_token>',
61
+ modes: ['strict', 'balanced'],
62
+ },
63
+ {
64
+ category: 'slack_token',
65
+ regex: /\b(xoxb-|xoxp-|xoxs-|xoxa-)[A-Za-z0-9-]{10,}\b/g,
66
+ replacement: '<REDACTED:slack_token>',
67
+ modes: ['strict', 'balanced'],
68
+ },
69
+ {
70
+ category: 'stripe_key',
71
+ regex: /\b(sk_live_|pk_live_|sk_test_|pk_test_|rk_live_|rk_test_)[A-Za-z0-9]{10,}\b/g,
72
+ replacement: '<REDACTED:stripe_key>',
73
+ modes: ['strict', 'balanced'],
74
+ },
75
+ {
76
+ category: 'google_api_key',
77
+ regex: /\bAIzaSy[A-Za-z0-9_-]{33}\b/g,
78
+ replacement: '<REDACTED:google_api_key>',
79
+ modes: ['strict', 'balanced'],
80
+ },
81
+ {
82
+ category: 'aws_session_token',
83
+ regex: /\bASIA[0-9A-Z]{16}\b/g,
84
+ replacement: '<REDACTED:aws_session_token>',
85
+ modes: ['strict', 'balanced'],
86
+ },
87
+ {
88
+ category: 'connection_string',
89
+ regex: /\b(mongodb(\+srv)?|postgres(ql)?|mysql|redis|amqp):\/\/[^\s"']+/gi,
90
+ replacement: '<REDACTED:connection_string>',
91
+ modes: ['strict', 'balanced'],
92
+ },
93
+ {
94
+ category: 'generic_secret',
95
+ 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,
96
+ replacement: '<REDACTED:generic_secret>',
97
+ modes: ['strict', 'balanced'],
98
+ },
99
+ {
100
+ category: 'email',
101
+ regex: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
102
+ replacement: '<REDACTED:pii_email>',
103
+ modes: ['strict'],
104
+ },
105
+ {
106
+ category: 'phone',
107
+ regex: /\b(\+?1?[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b/g,
108
+ replacement: '<REDACTED:pii_phone>',
109
+ modes: ['strict'],
110
+ },
111
+ {
112
+ category: 'ssn',
113
+ regex: /\b\d{3}-\d{2}-\d{4}\b/g,
114
+ replacement: '<REDACTED:pii_ssn>',
115
+ modes: ['strict'],
116
+ },
117
+ ];
118
+ /**
119
+ * Self-hosted providers that may receive unredacted transcripts.
120
+ * All other providers require redaction.
121
+ */
122
+ const SELF_HOSTED_PROVIDERS = new Set(['ollama']);
123
+ /**
124
+ * Providers allowed for security-sensitive agents.
125
+ * OpenRouter is explicitly excluded (third-party proxy).
126
+ */
127
+ const SECURITY_AGENT_ALLOWED_PROVIDERS = new Set(['claude', 'ollama']);
128
+ export function isSelfHosted(provider) {
129
+ return SELF_HOSTED_PROVIDERS.has(provider);
130
+ }
131
+ export function isSecurityAgentAllowed(provider) {
132
+ return SECURITY_AGENT_ALLOWED_PROVIDERS.has(provider);
133
+ }
134
+ export function isSecurityAgent(agentName) {
135
+ return /^qe-security|^qe-pentest/.test(agentName);
136
+ }
137
+ /**
138
+ * Redact sensitive patterns from text.
139
+ * Returns the redacted text and a list of categories found.
140
+ */
141
+ export function redact(text, mode = 'strict') {
142
+ if (mode === 'off') {
143
+ return { text, redactions: [], replacementCount: 0 };
144
+ }
145
+ let result = text;
146
+ const foundCategories = new Set();
147
+ let totalReplacements = 0;
148
+ for (const pattern of PATTERNS) {
149
+ if (!pattern.modes.includes(mode))
150
+ continue;
151
+ const regex = new RegExp(pattern.regex.source, pattern.regex.flags);
152
+ const matches = result.match(regex);
153
+ if (matches && matches.length > 0) {
154
+ foundCategories.add(pattern.category);
155
+ totalReplacements += matches.length;
156
+ result = result.replace(regex, pattern.replacement);
157
+ }
158
+ }
159
+ return {
160
+ text: result,
161
+ redactions: Array.from(foundCategories).sort(),
162
+ replacementCount: totalReplacements,
163
+ };
164
+ }
165
+ /**
166
+ * Validate that the advisor call is allowed given the agent and provider.
167
+ * Throws with a descriptive message if the combination is forbidden.
168
+ */
169
+ export function validateProviderForAgent(agentName, provider, redactionMode) {
170
+ if (isSecurityAgent(agentName) && !isSecurityAgentAllowed(provider)) {
171
+ throw new AdvisorRedactionError(`Security agent "${agentName}" may only use providers: ${[...SECURITY_AGENT_ALLOWED_PROVIDERS].join(', ')}. ` +
172
+ `Got: "${provider}". OpenRouter is excluded (third-party proxy risk).`, 6);
173
+ }
174
+ if (redactionMode === 'off' && !isSelfHosted(provider)) {
175
+ throw new AdvisorRedactionError(`Redaction mode "off" is only allowed for self-hosted providers (${[...SELF_HOSTED_PROVIDERS].join(', ')}). ` +
176
+ `Got: "${provider}".`, 6);
177
+ }
178
+ }
179
+ export class AdvisorRedactionError extends Error {
180
+ exitCode;
181
+ constructor(message, exitCode) {
182
+ super(message);
183
+ this.exitCode = exitCode;
184
+ this.name = 'AdvisorRedactionError';
185
+ }
186
+ }
187
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Advisor Strategy Types
3
+ * ADR-092: Provider-Agnostic Advisor Strategy for QE Agents
4
+ *
5
+ * Completes ADR-082's dormant `triggerMultiModel` flag by providing
6
+ * an execution layer for multi-model consultation.
7
+ */
8
+ import type { ExtendedProviderType } from '../../shared/llm/router/types.js';
9
+ /**
10
+ * Transcript slice forwarded to the advisor model.
11
+ * Minimal structure for Phase 0 — real callers pass a synthesized string.
12
+ */
13
+ export interface AdvisorTranscript {
14
+ /** Executor system prompt */
15
+ systemPrompt?: string;
16
+ /** Conversation history in role/content pairs */
17
+ messages: Array<{
18
+ role: 'user' | 'assistant' | 'system';
19
+ content: string;
20
+ }>;
21
+ /** Optional task description for context */
22
+ taskDescription?: string;
23
+ }
24
+ /**
25
+ * Options passed to `MultiModelExecutor.consult()`.
26
+ */
27
+ export interface ConsultOptions {
28
+ /** Advisor provider (default: 'openrouter' per ADR-092 Phase 0) */
29
+ provider?: ExtendedProviderType;
30
+ /** Advisor model ID (provider-specific, e.g., 'anthropic/claude-opus-4' for openrouter) */
31
+ model?: string;
32
+ /** Max advice length in words (default: 100 per Anthropic published guidance) */
33
+ maxWords?: number;
34
+ /** Agent name for feedback tracking and audit */
35
+ agentName?: string;
36
+ /** Reason the executor wants advice (for trigger attribution) */
37
+ triggerReason?: string;
38
+ /** Session ID for circuit breaker tracking (default: 'default') */
39
+ sessionId?: string;
40
+ /** Redaction mode (default: 'strict'). 'off' rejected for non-self-hosted. */
41
+ redact?: 'strict' | 'balanced' | 'off';
42
+ /** Domain-specific advisor system prompt (overrides the default generic prompt). */
43
+ advisorSystemPrompt?: string;
44
+ }
45
+ /**
46
+ * Structured advisor response returned to the caller.
47
+ * Matches the `aqe llm advise --json` stdout schema in ADR-092.
48
+ */
49
+ export interface AdvisorResult {
50
+ /** Advice text returned by the advisor model */
51
+ advice: string;
52
+ /** Canonical model ID that produced the advice */
53
+ model: string;
54
+ /** Provider that handled the request */
55
+ provider: ExtendedProviderType;
56
+ /** Tokens sent to the advisor */
57
+ tokensIn: number;
58
+ /** Tokens returned by the advisor */
59
+ tokensOut: number;
60
+ /** Sub-call latency in milliseconds */
61
+ latencyMs: number;
62
+ /** Cost in USD for the advisor sub-call */
63
+ costUsd: number;
64
+ /** sha256 of the advice text (for cache lookups and replay) */
65
+ adviceHash: string;
66
+ /** Trigger attribution (e.g., "tiny_dancer.confidence=0.71") */
67
+ triggerReason: string;
68
+ /** Whether the result came from a cache (Phase 2+) */
69
+ cacheHit: boolean;
70
+ /** Redaction categories applied before dispatch (Phase 1) */
71
+ redactionsApplied: string[];
72
+ /** Remaining advisor calls before circuit breaker trips (Phase 1) */
73
+ circuitBreakerRemaining: number;
74
+ }
75
+ /**
76
+ * Optional `RoutingOutcome.advisorConsultation` field (Phase 1+).
77
+ * Phase 0 does not yet populate this; kept here so the shape is stable.
78
+ */
79
+ export interface AdvisorConsultation {
80
+ model: string;
81
+ provider: ExtendedProviderType;
82
+ tokensIn: number;
83
+ tokensOut: number;
84
+ latencyMs: number;
85
+ costUsd: number;
86
+ adviceHash: string;
87
+ /** Did the executor act on the advice? (Phase 3+ — requires outcome feedback) */
88
+ followedAdvice?: boolean;
89
+ triggerReason: string;
90
+ /** Redaction categories applied before dispatch (Phase 1+) */
91
+ redactionsApplied?: string[];
92
+ }
93
+ /**
94
+ * The execution layer ADR-082 left unfinished.
95
+ * Consumed by `TinyDancerRouter` when `RouteResult.triggerMultiModel === true`
96
+ * AND an executor is configured on the router.
97
+ */
98
+ export interface IMultiModelExecutor {
99
+ consult(transcript: AdvisorTranscript, opts?: ConsultOptions): Promise<AdvisorResult>;
100
+ }
101
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Advisor Strategy Types
3
+ * ADR-092: Provider-Agnostic Advisor Strategy for QE Agents
4
+ *
5
+ * Completes ADR-082's dormant `triggerMultiModel` flag by providing
6
+ * an execution layer for multi-model consultation.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -7,6 +7,7 @@
7
7
  * to agent pool tiers and handles fallback scenarios.
8
8
  */
9
9
  import { type TinyDancerConfig, type RouteResult } from './tiny-dancer-router.js';
10
+ import type { AdvisorResult } from './advisor/types.js';
10
11
  import { type ClassifiableTask, type TaskComplexity, type ClaudeModel } from './task-classifier.js';
11
12
  import { type RoutingConfig, type AgentTier, type ConfidenceThresholds } from './routing-config.js';
12
13
  import type { QETask } from './types.js';
@@ -36,6 +37,8 @@ export interface QueenRouteDecision {
36
37
  readonly latencyMs: number;
37
38
  /** Original TinyDancer result */
38
39
  readonly tinyDancerResult: RouteResult;
40
+ /** Advisor consultation result if triggered (ADR-092) */
41
+ readonly advisorResult?: AdvisorResult;
39
42
  /** Timestamp */
40
43
  readonly timestamp: Date;
41
44
  }
@@ -65,8 +65,13 @@ export class QueenRouterAdapter {
65
65
  const startTime = performance.now();
66
66
  // Reset daily cost if needed
67
67
  this.checkDailyCostReset();
68
- // Use TinyDancer to classify and route
68
+ // Use TinyDancer to classify and route.
69
+ // ADR-092: triggerMultiModel is surfaced as a signal to spawned agents via
70
+ // spawn capabilities (queen-task-management.ts). Agents consume it via the
71
+ // executor preamble and call `aqe llm advise` when they have a transcript.
72
+ // The routing layer does NOT call the advisor — transcripts don't exist here.
69
73
  const tinyDancerResult = await this.tinyDancer.route(task);
74
+ const advisorResult = undefined;
70
75
  // Map complexity to agent tiers
71
76
  const tiers = mapComplexityToTier(tinyDancerResult.complexity, tinyDancerResult.classification.score, this.routingConfig);
72
77
  const primaryTier = tiers[0];
@@ -94,6 +99,7 @@ export class QueenRouterAdapter {
94
99
  reasoning,
95
100
  latencyMs,
96
101
  tinyDancerResult,
102
+ advisorResult,
97
103
  timestamp: new Date(),
98
104
  };
99
105
  // Update cost tracking
@@ -16,6 +16,7 @@ import { CostTracker } from '../shared/llm/cost-tracker.js';
16
16
  * Collects and processes routing feedback for continuous learning
17
17
  */
18
18
  export declare class RoutingFeedbackCollector {
19
+ private static schemaMigrated;
19
20
  private outcomeStore;
20
21
  private router;
21
22
  private db;
@@ -45,6 +46,11 @@ export declare class RoutingFeedbackCollector {
45
46
  * Infer model tier from agent name for analytics.
46
47
  * Maps known agent patterns to ADR-026 tiers.
47
48
  */
49
+ /**
50
+ * M1 fix: read advisor consultation sidecar file written by MultiModelExecutor.
51
+ * Uses the task ID or a recent session file as a key.
52
+ */
53
+ private loadAdvisorConsultationSidecar;
48
54
  private inferTier;
49
55
  /**
50
56
  * Delete oldest rows beyond retention limit
@@ -114,7 +120,7 @@ export declare class RoutingFeedbackCollector {
114
120
  qualityScore: number;
115
121
  durationMs: number;
116
122
  error?: string;
117
- }): RoutingOutcome;
123
+ }, advisorConsultation?: RoutingOutcome['advisorConsultation']): RoutingOutcome;
118
124
  /**
119
125
  * Get aggregated performance metrics for an agent
120
126
  */
@@ -61,6 +61,7 @@ class OutcomeStore {
61
61
  * Collects and processes routing feedback for continuous learning
62
62
  */
63
63
  export class RoutingFeedbackCollector {
64
+ static schemaMigrated = false;
64
65
  outcomeStore;
65
66
  router = null;
66
67
  db = null;
@@ -125,6 +126,9 @@ export class RoutingFeedbackCollector {
125
126
  error: row.error || undefined,
126
127
  },
127
128
  timestamp: new Date(row.created_at),
129
+ advisorConsultation: row.advisor_consultation_json
130
+ ? safeJsonParse(row.advisor_consultation_json)
131
+ : undefined,
128
132
  };
129
133
  this.outcomeStore.add(outcome);
130
134
  }
@@ -140,22 +144,32 @@ export class RoutingFeedbackCollector {
140
144
  return;
141
145
  try {
142
146
  const database = this.db.getDatabase();
143
- // Ensure model_tier column exists (for databases created before this schema addition)
144
- try {
145
- database.prepare(`ALTER TABLE routing_outcomes ADD COLUMN model_tier TEXT`).run();
146
- }
147
- catch {
148
- // Column already exists expected
147
+ // Ensure schema columns exist for databases created before ADR-092.
148
+ // Runs once per process via the flag; new databases have columns from
149
+ // unified-memory-schemas.ts CREATE TABLE.
150
+ if (!RoutingFeedbackCollector.schemaMigrated) {
151
+ for (const col of [
152
+ 'ALTER TABLE routing_outcomes ADD COLUMN model_tier TEXT',
153
+ 'ALTER TABLE routing_outcomes ADD COLUMN advisor_consultation_json TEXT',
154
+ ]) {
155
+ try {
156
+ database.prepare(col).run();
157
+ }
158
+ catch { /* column already exists */ }
159
+ }
160
+ RoutingFeedbackCollector.schemaMigrated = true;
149
161
  }
150
- // Extract tier from usedAgent name (e.g. "tier-0" → "booster", "qe-test-architect" → "sonnet")
151
162
  const modelTier = this.inferTier(outcome.usedAgent);
163
+ const advisorJson = outcome.advisorConsultation
164
+ ? JSON.stringify(outcome.advisorConsultation)
165
+ : null;
152
166
  database.prepare(`
153
167
  INSERT OR REPLACE INTO routing_outcomes (
154
168
  id, task_json, decision_json, used_agent,
155
169
  followed_recommendation, success, quality_score,
156
- duration_ms, error, model_tier
157
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
158
- `).run(outcome.id, JSON.stringify(outcome.task), JSON.stringify(outcome.decision), outcome.usedAgent, outcome.followedRecommendation ? 1 : 0, outcome.outcome.success ? 1 : 0, outcome.outcome.qualityScore, outcome.outcome.durationMs, outcome.outcome.error || null, modelTier);
170
+ duration_ms, error, model_tier, advisor_consultation_json
171
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
172
+ `).run(outcome.id, JSON.stringify(outcome.task), JSON.stringify(outcome.decision), outcome.usedAgent, outcome.followedRecommendation ? 1 : 0, outcome.outcome.success ? 1 : 0, outcome.outcome.qualityScore, outcome.outcome.durationMs, outcome.outcome.error || null, modelTier, advisorJson);
159
173
  this.persistCount++;
160
174
  if (this.persistCount % RoutingFeedbackCollector.RETENTION_CLEANUP_INTERVAL === 0) {
161
175
  this.enforceRetention(database);
@@ -169,6 +183,31 @@ export class RoutingFeedbackCollector {
169
183
  * Infer model tier from agent name for analytics.
170
184
  * Maps known agent patterns to ADR-026 tiers.
171
185
  */
186
+ /**
187
+ * M1 fix: read advisor consultation sidecar file written by MultiModelExecutor.
188
+ * Uses the task ID or a recent session file as a key.
189
+ */
190
+ loadAdvisorConsultationSidecar(task) {
191
+ try {
192
+ const { readdirSync, readFileSync } = require('fs');
193
+ const { join } = require('path');
194
+ const { homedir } = require('os');
195
+ const dir = join(homedir(), '.agentic-qe', 'advisor', 'consultations');
196
+ const files = readdirSync(dir).filter(f => f.endsWith('.json')).sort().reverse();
197
+ if (files.length === 0)
198
+ return undefined;
199
+ // Read the most recent consultation (within last 5 minutes)
200
+ const newest = files[0];
201
+ const data = JSON.parse(readFileSync(join(dir, newest), 'utf-8'));
202
+ const age = Date.now() - new Date(data.timestamp).getTime();
203
+ if (age > 5 * 60 * 1000)
204
+ return undefined;
205
+ return data;
206
+ }
207
+ catch {
208
+ return undefined;
209
+ }
210
+ }
172
211
  inferTier(agentName) {
173
212
  const lower = agentName.toLowerCase();
174
213
  if (lower.includes('booster') || lower === 'tier-0')
@@ -331,7 +370,13 @@ export class RoutingFeedbackCollector {
331
370
  /**
332
371
  * Record a routing outcome
333
372
  */
334
- recordOutcome(task, decision, usedAgent, outcome) {
373
+ recordOutcome(task, decision, usedAgent, outcome, advisorConsultation) {
374
+ // M1 fix: if no explicit advisorConsultation passed, check sidecar file
375
+ // written by MultiModelExecutor.persistConsultation()
376
+ let resolvedAdvisor = advisorConsultation;
377
+ if (!resolvedAdvisor) {
378
+ resolvedAdvisor = this.loadAdvisorConsultationSidecar(task);
379
+ }
335
380
  const routingOutcome = {
336
381
  id: `outcome-${Date.now()}-${randomUUID().slice(0, 8)}`,
337
382
  task,
@@ -340,6 +385,7 @@ export class RoutingFeedbackCollector {
340
385
  followedRecommendation: usedAgent === decision.recommended,
341
386
  outcome,
342
387
  timestamp: new Date(),
388
+ advisorConsultation: resolvedAdvisor,
343
389
  };
344
390
  // Store outcome
345
391
  this.outcomeStore.add(routingOutcome);
@@ -52,6 +52,18 @@ export interface TinyDancerConfig {
52
52
  enableLearning?: boolean;
53
53
  /** Enable verbose logging (default: false) */
54
54
  verbose?: boolean;
55
+ /**
56
+ * Optional MultiModelExecutor that consumes `triggerMultiModel=true`
57
+ * and dispatches an advisor consultation (ADR-092).
58
+ *
59
+ * When omitted, `triggerMultiModel` remains a flag-only signal as before.
60
+ * When provided, `route()` still returns synchronously, but callers can
61
+ * opt in to advisor consultation via `routeWithAdvisor()`.
62
+ *
63
+ * Phase 0: hooked via the explicit `routeWithAdvisor()` method only, to
64
+ * keep the hot-path `route()` API fully backward-compatible.
65
+ */
66
+ executor?: import('./advisor/types.js').IMultiModelExecutor;
55
67
  }
56
68
  /**
57
69
  * Routing outcome for learning
@@ -82,8 +94,10 @@ export interface RouterStats {
82
94
  readonly routesByModel: Record<ClaudeModel, number>;
83
95
  /** Routes by complexity */
84
96
  readonly routesByComplexity: Record<TaskComplexity, number>;
85
- /** Multi-model triggers */
97
+ /** Multi-model triggers (triggerMultiModel flag set) */
86
98
  readonly multiModelTriggers: number;
99
+ /** Advisor consultations actually executed (ADR-092 — requires executor wired) */
100
+ readonly advisorConsultations: number;
87
101
  /** Human review triggers */
88
102
  readonly humanReviewTriggers: number;
89
103
  /** Average confidence */
@@ -109,16 +123,36 @@ export declare class TinyDancerRouter {
109
123
  private readonly securityConfidenceThreshold;
110
124
  private readonly enableLearning;
111
125
  private readonly verbose;
126
+ private readonly executor?;
112
127
  private totalRouted;
113
128
  private routesByModel;
114
129
  private routesByComplexity;
115
130
  private multiModelTriggers;
116
131
  private humanReviewTriggers;
132
+ private advisorConsultations;
117
133
  private totalConfidence;
118
134
  private totalLatencyMs;
119
135
  private outcomes;
120
136
  private readonly maxOutcomes;
121
137
  constructor(config?: TinyDancerConfig);
138
+ /**
139
+ * Whether a MultiModelExecutor is wired (ADR-092).
140
+ * Used by callers to decide whether to call `routeWithAdvisor()`.
141
+ */
142
+ hasExecutor(): boolean;
143
+ /**
144
+ * Route a task and, when `triggerMultiModel === true` AND an executor is
145
+ * configured, consult the advisor and return both the route result and the
146
+ * advisor consultation. Backward-compatible: when no executor is configured,
147
+ * returns `{ route, advisor: undefined }` identical to calling `route()`.
148
+ *
149
+ * ADR-092: this is the execution layer for ADR-082's dormant
150
+ * `triggerMultiModel` flag.
151
+ */
152
+ routeWithAdvisor(task: QETask | ClassifiableTask, transcript?: import('./advisor/types.js').AdvisorTranscript): Promise<{
153
+ route: RouteResult;
154
+ advisor?: import('./advisor/types.js').AdvisorResult;
155
+ }>;
122
156
  /**
123
157
  * Route a task to the optimal Claude model
124
158
  *
@@ -34,6 +34,7 @@ export class TinyDancerRouter {
34
34
  securityConfidenceThreshold;
35
35
  enableLearning;
36
36
  verbose;
37
+ executor;
37
38
  // Statistics tracking
38
39
  totalRouted = 0;
39
40
  routesByModel = { haiku: 0, sonnet: 0, opus: 0 };
@@ -42,6 +43,7 @@ export class TinyDancerRouter {
42
43
  };
43
44
  multiModelTriggers = 0;
44
45
  humanReviewTriggers = 0;
46
+ advisorConsultations = 0;
45
47
  totalConfidence = 0;
46
48
  totalLatencyMs = 0;
47
49
  // Learning storage
@@ -53,6 +55,35 @@ export class TinyDancerRouter {
53
55
  this.securityConfidenceThreshold = config.securityConfidenceThreshold ?? 0.85;
54
56
  this.enableLearning = config.enableLearning ?? true;
55
57
  this.verbose = config.verbose ?? false;
58
+ this.executor = config.executor;
59
+ }
60
+ /**
61
+ * Whether a MultiModelExecutor is wired (ADR-092).
62
+ * Used by callers to decide whether to call `routeWithAdvisor()`.
63
+ */
64
+ hasExecutor() {
65
+ return this.executor !== undefined;
66
+ }
67
+ /**
68
+ * Route a task and, when `triggerMultiModel === true` AND an executor is
69
+ * configured, consult the advisor and return both the route result and the
70
+ * advisor consultation. Backward-compatible: when no executor is configured,
71
+ * returns `{ route, advisor: undefined }` identical to calling `route()`.
72
+ *
73
+ * ADR-092: this is the execution layer for ADR-082's dormant
74
+ * `triggerMultiModel` flag.
75
+ */
76
+ async routeWithAdvisor(task, transcript) {
77
+ const route = await this.route(task);
78
+ if (!route.triggerMultiModel || !this.executor || !transcript) {
79
+ return { route };
80
+ }
81
+ const advisor = await this.executor.consult(transcript, {
82
+ agentName: task.agentId ?? task.id ?? 'unknown',
83
+ triggerReason: `tiny_dancer.confidence=${route.confidence.toFixed(2)}<${this.confidenceThreshold}`,
84
+ });
85
+ this.advisorConsultations++;
86
+ return { route, advisor };
56
87
  }
57
88
  /**
58
89
  * Route a task to the optimal Claude model
@@ -259,6 +290,7 @@ export class TinyDancerRouter {
259
290
  routesByModel: { ...this.routesByModel },
260
291
  routesByComplexity: { ...this.routesByComplexity },
261
292
  multiModelTriggers: this.multiModelTriggers,
293
+ advisorConsultations: this.advisorConsultations,
262
294
  humanReviewTriggers: this.humanReviewTriggers,
263
295
  avgConfidence: this.totalRouted > 0
264
296
  ? this.totalConfidence / this.totalRouted
@@ -311,6 +343,7 @@ export class TinyDancerRouter {
311
343
  this.routesByModel = { haiku: 0, sonnet: 0, opus: 0 };
312
344
  this.routesByComplexity = { simple: 0, moderate: 0, complex: 0, critical: 0 };
313
345
  this.multiModelTriggers = 0;
346
+ this.advisorConsultations = 0;
314
347
  this.humanReviewTriggers = 0;
315
348
  this.totalConfidence = 0;
316
349
  this.totalLatencyMs = 0;
@@ -170,6 +170,18 @@ export interface RoutingOutcome {
170
170
  };
171
171
  /** Timestamp */
172
172
  readonly timestamp: Date;
173
+ /** Advisor consultation details if an advisor was consulted (ADR-092 Phase 1) */
174
+ readonly advisorConsultation?: {
175
+ model: string;
176
+ provider: string;
177
+ tokensIn: number;
178
+ tokensOut: number;
179
+ latencyMs: number;
180
+ costUsd: number;
181
+ adviceHash: string;
182
+ triggerReason: string;
183
+ redactionsApplied?: string[];
184
+ };
173
185
  }
174
186
  /**
175
187
  * Aggregated agent performance metrics
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-qe",
3
- "version": "3.9.9",
3
+ "version": "3.9.10",
4
4
  "description": "Agentic Quality Engineering V3 - Domain-Driven Design Architecture with 13 Bounded Contexts, O(log n) coverage analysis, ReasoningBank learning, 60 specialized QE agents, mathematical Coherence verification, deep Claude Flow integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.9");process.exit(0)}
2
- import{a,b,c}from"./chunk-BSES27JE.js";import"./chunk-ZTI3BATG.js";import"./chunk-DNS7DP2O.js";import"./chunk-MWZN4PYF.js";import"./chunk-BVOGMK6N.js";import"./chunk-UYKIPSRX.js";export{a as AgentBoosterAdapter,b as createAgentBoosterAdapter,c as createAgentBoosterAdapterSync};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.9");process.exit(0)}
2
- import{a,b,c,d,e,f}from"./chunk-3NU4C62D.js";import"./chunk-Z7AFNZMI.js";import"./chunk-5HM66R4W.js";import"./chunk-NQ3WHTLT.js";import"./chunk-65XCVUP7.js";import"./chunk-VWHALAEO.js";import"./chunk-3FAEM5M7.js";import"./chunk-5DU4YW2S.js";import"./chunk-4CDSEZD6.js";import"./chunk-XZ2JYMFT.js";import"./chunk-3F666FYP.js";import"./chunk-2X7LDTVD.js";import"./chunk-FGW5W3YK.js";import"./chunk-MUIJVPGB.js";import"./chunk-PYTXZMXR.js";import"./chunk-VRH3YLO2.js";import"./chunk-UEKDDUGV.js";import"./chunk-MWZN4PYF.js";import"./chunk-PEEN4AAK.js";import"./chunk-BVOGMK6N.js";import"./chunk-FTF34UME.js";import"./chunk-5SWY75MJ.js";import"./chunk-OEZA7Q2Z.js";import"./chunk-WDWIJDQR.js";import"./chunk-JIPU4YQK.js";import"./chunk-QZMBJ67L.js";import"./chunk-MXMKHI2I.js";import"./chunk-QMNAELZG.js";import"./chunk-QTYTM7C7.js";import"./chunk-NLKJI73E.js";import"./chunk-UYKIPSRX.js";export{b as AQELearningEngine,a as DEFAULT_ENGINE_CONFIG,c as DEFAULT_META_LEARNING_CONFIG,d as MetaLearningEngine,e as createAQELearningEngine,f as createDefaultLearningEngine};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.9");process.exit(0)}
2
- import{a,b,c,d,e,f}from"./chunk-ECNPBD4Y.js";import"./chunk-2HFPJPQW.js";import"./chunk-MUIJVPGB.js";import"./chunk-PYTXZMXR.js";import"./chunk-VRH3YLO2.js";import"./chunk-UEKDDUGV.js";import"./chunk-MWZN4PYF.js";import"./chunk-BVOGMK6N.js";import"./chunk-FTF34UME.js";import"./chunk-5SWY75MJ.js";import"./chunk-OEZA7Q2Z.js";import"./chunk-WDWIJDQR.js";import"./chunk-JIPU4YQK.js";import"./chunk-QZMBJ67L.js";import"./chunk-MXMKHI2I.js";import"./chunk-QMNAELZG.js";import"./chunk-QTYTM7C7.js";import"./chunk-NLKJI73E.js";import"./chunk-UYKIPSRX.js";export{f as MCPToolBase,e as defaultToolLogger,d as getMemoryBackend,b as getSharedMemoryBackend,a as registerRvfResetFn,c as resetSharedMemoryBackend};
@@ -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.9");process.exit(0)}
2
- import{a}from"./chunk-SVLO2DVL.js";import"./chunk-ECNPBD4Y.js";import"./chunk-2HFPJPQW.js";import"./chunk-MUIJVPGB.js";import"./chunk-PYTXZMXR.js";import"./chunk-VRH3YLO2.js";import"./chunk-UEKDDUGV.js";import"./chunk-MWZN4PYF.js";import"./chunk-BVOGMK6N.js";import"./chunk-FTF34UME.js";import"./chunk-5SWY75MJ.js";import"./chunk-OEZA7Q2Z.js";import"./chunk-WDWIJDQR.js";import"./chunk-JIPU4YQK.js";import"./chunk-QZMBJ67L.js";import"./chunk-MXMKHI2I.js";import"./chunk-QMNAELZG.js";import"./chunk-QTYTM7C7.js";import"./chunk-NLKJI73E.js";import"./chunk-UYKIPSRX.js";export{a as BrowserWorkflowTool};