agentic-qe 3.13.11 → 3.14.0

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 (438) hide show
  1. package/.claude/helpers/.helpers-version +1 -1
  2. package/.claude/helpers/helpers.manifest.json +2 -2
  3. package/.claude/helpers/statusline.cjs +89 -40
  4. package/.claude/skills/qe-court/SKILL.md +4 -4
  5. package/.claude/skills/qe-court/config-schema.json +38 -0
  6. package/.claude/skills/qe-court/evals/qe-court.yaml +8 -8
  7. package/.claude/skills/skills-manifest.json +1 -1
  8. package/CHANGELOG.md +93 -0
  9. package/assets/skills/qe-court/SKILL.md +4 -4
  10. package/assets/skills/qe-court/config-schema.json +38 -0
  11. package/assets/skills/qe-court/evals/qe-court.yaml +8 -8
  12. package/assets/skills/skills-manifest.json +1 -1
  13. package/dist/cli/brain-commands.d.ts +1 -0
  14. package/dist/cli/brain-commands.js +1 -0
  15. package/dist/cli/bundle.js +5 -5
  16. package/dist/cli/chunks/adapter-3VBXL7DO.js +2 -0
  17. package/dist/cli/chunks/{agent-booster-wasm-5ARDZYNO.js → agent-booster-wasm-JZO6VUW4.js} +2 -2
  18. package/dist/cli/chunks/{agent-handler-SVKEPF7B.js → agent-handler-534KFGEJ.js} +2 -2
  19. package/dist/cli/chunks/{agent-memory-branch-QDL7OVHC.js → agent-memory-branch-B7KWLWY4.js} +2 -2
  20. package/dist/cli/chunks/aqe-learning-engine-NXRNKJNA.js +2 -0
  21. package/dist/cli/chunks/{arena-7OCKBN6O.js → arena-7CCD3S3I.js} +2 -2
  22. package/dist/cli/chunks/{arena-HQLSNQZ3.js → arena-OW5MELJX.js} +4 -4
  23. package/dist/cli/chunks/{audit-2EQJW5UE.js → audit-BHVKN4E2.js} +3 -3
  24. package/dist/cli/chunks/base-F6GMOKU2.js +2 -0
  25. package/dist/cli/chunks/{better-sqlite3-OBFNNE4T.js → better-sqlite3-P5FA6WFK.js} +2 -2
  26. package/dist/cli/chunks/brain-handler-WNW5LOV7.js +90 -0
  27. package/dist/cli/chunks/{branch-enumerator-6B4L5O3D.js → branch-enumerator-TVZ2ODKH.js} +2 -2
  28. package/dist/cli/chunks/{browser-VDMGBWNK.js → browser-TCEB2W2F.js} +2 -2
  29. package/dist/cli/chunks/browser-workflow-QRDC46LR.js +2 -0
  30. package/dist/cli/chunks/{chunk-M3MRFZKD.js → chunk-2D7UBX5S.js} +1 -1
  31. package/dist/cli/chunks/{chunk-IZF3VLNW.js → chunk-2HYVOX6N.js} +1 -1
  32. package/dist/cli/chunks/{chunk-U6G6RUFI.js → chunk-2NO4H35K.js} +1 -1
  33. package/dist/cli/chunks/{chunk-4TJJU5Y2.js → chunk-2O4DDPEA.js} +19 -19
  34. package/dist/cli/chunks/{chunk-24XW7KUX.js → chunk-3EM2MK3Z.js} +2 -2
  35. package/dist/cli/chunks/chunk-3GUO4ERR.js +24 -0
  36. package/dist/cli/chunks/{chunk-YRCNWQBO.js → chunk-3JIJBR4V.js} +2 -2
  37. package/dist/cli/chunks/{chunk-2E2QCIGR.js → chunk-3QT6S3A3.js} +3 -3
  38. package/dist/cli/chunks/{chunk-W2T36CS5.js → chunk-3RYTAYR6.js} +1 -1
  39. package/dist/cli/chunks/chunk-43GPSYAL.js +14 -0
  40. package/dist/cli/chunks/{chunk-YYAJEPRD.js → chunk-4FEJEVG7.js} +1 -1
  41. package/dist/cli/chunks/{chunk-4DTBGQWA.js → chunk-4MK2G6TK.js} +2 -2
  42. package/dist/cli/chunks/{chunk-CK7ZLMD2.js → chunk-4XTHRAUV.js} +1 -1
  43. package/dist/cli/chunks/{chunk-LM727BVL.js → chunk-4ZVGSVHV.js} +4 -4
  44. package/dist/cli/chunks/{chunk-DPZ4AU6W.js → chunk-52DFCV57.js} +2 -2
  45. package/dist/cli/chunks/{chunk-PADCR4LY.js → chunk-5LEAGKX5.js} +2 -2
  46. package/dist/cli/chunks/{chunk-P736OKQN.js → chunk-5MZF4N4Q.js} +1 -1
  47. package/dist/cli/chunks/{chunk-XZI4QXJJ.js → chunk-5VDVYTO5.js} +2 -2
  48. package/dist/cli/chunks/chunk-5XGVSQS2.js +11 -0
  49. package/dist/cli/chunks/{chunk-AAPJG3WI.js → chunk-6AOZU3UN.js} +2 -2
  50. package/dist/cli/chunks/{chunk-NC7HTDH5.js → chunk-6AYO3IR2.js} +2 -2
  51. package/dist/cli/chunks/{chunk-TJ67B7S7.js → chunk-6DPAMYLU.js} +2 -2
  52. package/dist/cli/chunks/{chunk-PZHAPI47.js → chunk-6IJMD2ZL.js} +3 -3
  53. package/dist/cli/chunks/{chunk-RGUKQXKL.js → chunk-6IZQSLYZ.js} +2 -2
  54. package/dist/cli/chunks/{chunk-2E3PRDEX.js → chunk-6W42XWLL.js} +2 -2
  55. package/dist/cli/chunks/{chunk-ATRUE6CT.js → chunk-7BOPFN3Y.js} +2 -2
  56. package/dist/cli/chunks/{chunk-LIGDJP6H.js → chunk-7OUMJCJT.js} +1 -1
  57. package/dist/cli/chunks/{chunk-2Y3PW5EJ.js → chunk-7RAB2BZY.js} +160 -26
  58. package/dist/cli/chunks/{chunk-XEUUWOSS.js → chunk-7RVAHJQZ.js} +3 -3
  59. package/dist/cli/chunks/{chunk-HHEWINDL.js → chunk-A2WZEMWT.js} +1 -1
  60. package/dist/cli/chunks/{chunk-36ONUM43.js → chunk-A7SKM6JL.js} +1 -1
  61. package/dist/cli/chunks/chunk-AFGT26NR.js +2 -0
  62. package/dist/cli/chunks/{chunk-23E37MDA.js → chunk-AR6SATU3.js} +2 -2
  63. package/dist/cli/chunks/{chunk-IYMV4CU5.js → chunk-AVLA5PBJ.js} +2 -2
  64. package/dist/cli/chunks/{chunk-OLPJGYO5.js → chunk-B3H4K7CY.js} +2 -2
  65. package/dist/cli/chunks/{chunk-JWT675RM.js → chunk-BQCTO7UB.js} +2 -2
  66. package/dist/cli/chunks/{chunk-JKP2BUF5.js → chunk-BZ4QVFP2.js} +2 -2
  67. package/dist/cli/chunks/{chunk-WINYWMQP.js → chunk-CIUOC5F3.js} +1 -1
  68. package/dist/cli/chunks/{chunk-SJJFU7KK.js → chunk-CIZ6LSNV.js} +2 -2
  69. package/dist/cli/chunks/{chunk-2D7SBOZ4.js → chunk-DDPJUAXQ.js} +2 -2
  70. package/dist/cli/chunks/{chunk-H7QWOJF2.js → chunk-DJITEQYS.js} +2 -2
  71. package/dist/cli/chunks/{chunk-DMHQ4ZUZ.js → chunk-DOWCOZDO.js} +2 -2
  72. package/dist/cli/chunks/{chunk-PBJ5I2NS.js → chunk-E4NU4BJA.js} +2 -2
  73. package/dist/cli/chunks/{chunk-E54QUKAD.js → chunk-E722WNWC.js} +2 -2
  74. package/dist/cli/chunks/chunk-ECTPFCON.js +2 -0
  75. package/dist/cli/chunks/{chunk-MUAW4AJ6.js → chunk-EJ6IP7DE.js} +5 -5
  76. package/dist/cli/chunks/{chunk-NHL37QAZ.js → chunk-ENGKLFLY.js} +2 -2
  77. package/dist/cli/chunks/{chunk-VU3ARH4S.js → chunk-FF43SRP6.js} +1 -1
  78. package/dist/cli/chunks/{chunk-PJNIDDER.js → chunk-FOHYBR3O.js} +1 -1
  79. package/dist/cli/chunks/{chunk-LREIHR2A.js → chunk-FRL3X2QA.js} +2 -2
  80. package/dist/cli/chunks/{chunk-WYQM7GXW.js → chunk-GKNDP5VK.js} +2 -2
  81. package/dist/cli/chunks/{chunk-JK6ENS3J.js → chunk-GVEJP5T7.js} +2 -2
  82. package/dist/cli/chunks/{chunk-H3BHOIT6.js → chunk-H3YDDKBW.js} +3 -3
  83. package/dist/cli/chunks/{chunk-3SPYI7TS.js → chunk-H6NFDOMK.js} +1 -1
  84. package/dist/cli/chunks/{chunk-AZVV7POX.js → chunk-H76TV4UU.js} +3 -3
  85. package/dist/cli/chunks/{chunk-2HT5HRAA.js → chunk-HJIAVR6P.js} +2 -2
  86. package/dist/cli/chunks/{chunk-UZ7OWJ75.js → chunk-HLNQDRHA.js} +1 -1
  87. package/dist/cli/chunks/{chunk-IGW5L7YM.js → chunk-HNKPLVYS.js} +1 -1
  88. package/dist/cli/chunks/{chunk-Y2S6SS7M.js → chunk-HQ7243G3.js} +2 -2
  89. package/dist/cli/chunks/{chunk-TZA45FI7.js → chunk-HQHLHSJO.js} +2 -2
  90. package/dist/cli/chunks/{chunk-YEPJS4AM.js → chunk-I3VHXA2W.js} +2 -2
  91. package/dist/cli/chunks/{chunk-W2NQDAJZ.js → chunk-IE5LC7MB.js} +2 -2
  92. package/dist/cli/chunks/{chunk-TU4BYSXR.js → chunk-IL4AEB3J.js} +27 -25
  93. package/dist/cli/chunks/{chunk-JTQSXU6V.js → chunk-IL6QRXRP.js} +6 -6
  94. package/dist/cli/chunks/{chunk-UX5SM2PW.js → chunk-IQ3JFHZN.js} +1 -1
  95. package/dist/cli/chunks/{chunk-RAV2NJNX.js → chunk-IQLRA4FV.js} +1 -1
  96. package/dist/cli/chunks/{chunk-S3FNAHNC.js → chunk-J3XSHJGK.js} +2 -2
  97. package/dist/cli/chunks/{chunk-AHG2O5HT.js → chunk-JAK5UUWH.js} +2 -2
  98. package/dist/cli/chunks/{chunk-XDK2TPI5.js → chunk-JGROLJ33.js} +1 -1
  99. package/dist/cli/chunks/{chunk-MWTFFGU3.js → chunk-JMKMDSXG.js} +2 -2
  100. package/dist/cli/chunks/{chunk-BVKFBJX6.js → chunk-JRKEBESE.js} +2 -2
  101. package/dist/cli/chunks/{chunk-76NSSNB3.js → chunk-JTWJR2KY.js} +2 -2
  102. package/dist/cli/chunks/{chunk-QYHRDBKI.js → chunk-JY4VZ6BN.js} +2 -2
  103. package/dist/cli/chunks/{chunk-DLL3AJH7.js → chunk-K6CGQR5R.js} +1 -1
  104. package/dist/cli/chunks/{chunk-7HTYM6XY.js → chunk-KDIZQHG5.js} +2 -2
  105. package/dist/cli/chunks/{chunk-B646CE3C.js → chunk-KTSCZ7AW.js} +2 -2
  106. package/dist/cli/chunks/{chunk-LLP3UW62.js → chunk-L4C42WYI.js} +2 -2
  107. package/dist/cli/chunks/{chunk-H3AKF2HS.js → chunk-LCSVROU7.js} +10 -10
  108. package/dist/cli/chunks/{chunk-HZR4G6I3.js → chunk-LKR7T3OZ.js} +1 -1
  109. package/dist/cli/chunks/{chunk-Z5ARI4XT.js → chunk-LZHTCUCO.js} +2 -2
  110. package/dist/cli/chunks/{chunk-YDEYB6Z2.js → chunk-M3HUZD2I.js} +1 -1
  111. package/dist/cli/chunks/{chunk-GWTGBQ6X.js → chunk-MO7EITJK.js} +2 -2
  112. package/dist/cli/chunks/{chunk-5364DBZG.js → chunk-N2YAUDAV.js} +2 -2
  113. package/dist/cli/chunks/{chunk-XVFSZLRS.js → chunk-NDPQ2WPU.js} +1 -1
  114. package/dist/cli/chunks/{chunk-CTS545BF.js → chunk-NKWO2X3T.js} +1 -1
  115. package/dist/cli/chunks/{chunk-GPJDZFFV.js → chunk-NOPVFBQM.js} +2 -2
  116. package/dist/cli/chunks/{chunk-VNVGCJCS.js → chunk-NYARYONH.js} +1 -1
  117. package/dist/cli/chunks/{chunk-WRZ5WZG3.js → chunk-O2MZZL54.js} +2 -2
  118. package/dist/cli/chunks/{chunk-EKFKQGIT.js → chunk-OIYUSWHX.js} +1 -1
  119. package/dist/cli/chunks/{chunk-ZNGFSR5M.js → chunk-OONCRNFA.js} +2 -2
  120. package/dist/cli/chunks/{chunk-LUAXQB57.js → chunk-PEW6FZ47.js} +1 -1
  121. package/dist/cli/chunks/{chunk-W7BB4XLP.js → chunk-Q73RRTLE.js} +2 -2
  122. package/dist/cli/chunks/{chunk-JKPMV5VB.js → chunk-QKQZ4IJF.js} +5 -5
  123. package/dist/cli/chunks/{chunk-EHZQIXH6.js → chunk-QMMDN4WX.js} +3 -3
  124. package/dist/cli/chunks/chunk-QQCENKCX.js +2 -0
  125. package/dist/cli/chunks/{chunk-7YL7P5XG.js → chunk-QSPRQPEL.js} +2 -2
  126. package/dist/cli/chunks/{chunk-DXQMVATY.js → chunk-QZPFUFZG.js} +2 -2
  127. package/dist/cli/chunks/chunk-R2B6EE45.js +2 -0
  128. package/dist/cli/chunks/{chunk-VLW63UA2.js → chunk-R6WJF4D5.js} +2 -2
  129. package/dist/cli/chunks/{chunk-EWH7PFV6.js → chunk-RGVD6ZUX.js} +1 -1
  130. package/dist/cli/chunks/{chunk-UGFHEVG4.js → chunk-RKUYVVGJ.js} +2 -2
  131. package/dist/cli/chunks/{chunk-V7QZMOG3.js → chunk-S5YVLPXU.js} +2 -2
  132. package/dist/cli/chunks/{chunk-UDFTDQ6C.js → chunk-SROZXIMT.js} +37 -37
  133. package/dist/cli/chunks/{chunk-AFXMTSO3.js → chunk-SSV6KSFT.js} +1 -1
  134. package/dist/cli/chunks/{chunk-HGPMS6JL.js → chunk-SUSMHSXT.js} +2 -2
  135. package/dist/cli/chunks/{chunk-BL5BHBXR.js → chunk-T3BZAFLP.js} +1 -1
  136. package/dist/cli/chunks/{chunk-K652SCBA.js → chunk-TGOGCA74.js} +2 -2
  137. package/dist/cli/chunks/{chunk-VHNAN7E2.js → chunk-TKYEP7OR.js} +1 -1
  138. package/dist/cli/chunks/{chunk-OJUI65TR.js → chunk-TQJE7DNL.js} +2 -2
  139. package/dist/cli/chunks/{chunk-MS5CAEPA.js → chunk-TRDEULS7.js} +2 -2
  140. package/dist/cli/chunks/{chunk-YRV45WDT.js → chunk-U4GZWPKM.js} +2 -2
  141. package/dist/cli/chunks/{chunk-2BDTZYQN.js → chunk-UI6WSPEK.js} +3 -3
  142. package/dist/cli/chunks/{chunk-TMY2Y7SC.js → chunk-UUJ5VQJM.js} +1 -1
  143. package/dist/cli/chunks/{chunk-4CTKRLRX.js → chunk-VESOYP6A.js} +2 -2
  144. package/dist/cli/chunks/{chunk-UPMQHCC2.js → chunk-VOSISOFD.js} +1 -1
  145. package/dist/cli/chunks/{chunk-IZOWGVTU.js → chunk-VPVZHJSU.js} +2 -2
  146. package/dist/cli/chunks/{chunk-TBO64O56.js → chunk-VRRG66XB.js} +1 -1
  147. package/dist/cli/chunks/{chunk-WJB6YYMJ.js → chunk-VXU53F7Z.js} +2 -2
  148. package/dist/cli/chunks/{chunk-4TUGQESL.js → chunk-VYENTZ45.js} +2 -2
  149. package/dist/cli/chunks/chunk-WJXHE52V.js +65 -0
  150. package/dist/cli/chunks/{chunk-EN36AFRJ.js → chunk-WKNWRDA5.js} +1 -1
  151. package/dist/cli/chunks/{chunk-4X4GTEQY.js → chunk-WTHAVFIC.js} +1 -1
  152. package/dist/cli/chunks/{chunk-LPDT27EC.js → chunk-WWWX76QB.js} +2 -2
  153. package/dist/cli/chunks/{chunk-TCVEXQLL.js → chunk-XITTURP2.js} +2 -2
  154. package/dist/cli/chunks/{chunk-HV6LJ57R.js → chunk-XXFKN7LB.js} +1 -1
  155. package/dist/cli/chunks/{chunk-UJ2NRIAS.js → chunk-YEAC3DC6.js} +2 -2
  156. package/dist/cli/chunks/{chunk-FBASWZ7G.js → chunk-YKWMKRYB.js} +1 -1
  157. package/dist/cli/chunks/chunk-YKZV7O65.js +2 -0
  158. package/dist/cli/chunks/{chunk-PT6U3IIK.js → chunk-YW4RNZWT.js} +2 -2
  159. package/dist/cli/chunks/{chunk-H5DS7S4B.js → chunk-ZAAYOENS.js} +2 -2
  160. package/dist/cli/chunks/chunk-ZBKGX72B.js +13 -0
  161. package/dist/cli/chunks/{chunk-WVNLNXXI.js → chunk-ZBOWR4XT.js} +2 -2
  162. package/dist/cli/chunks/{chunk-FPX4JSFH.js → chunk-ZCVJCCQQ.js} +2 -2
  163. package/dist/cli/chunks/{chunk-OQWG7GOD.js → chunk-ZI3UO7QR.js} +8 -7
  164. package/dist/cli/chunks/{chunk-BPPEN7SS.js → chunk-ZNSMVQCG.js} +2 -2
  165. package/dist/cli/chunks/{chunk-EI4KYBNI.js → chunk-ZQSXG7FA.js} +2 -2
  166. package/dist/cli/chunks/{ci-M6WYL2XY.js → ci-B432UH6N.js} +2 -2
  167. package/dist/cli/chunks/{ci-output-JFC3WOHX.js → ci-output-GTHH7WYG.js} +2 -2
  168. package/dist/cli/chunks/{circuit-breaker-IMVBU6WP.js → circuit-breaker-VW75DLME.js} +2 -2
  169. package/dist/cli/chunks/{claude-flow-setup-M5T5ZUXX.js → claude-flow-setup-RE3IVT7U.js} +2 -2
  170. package/dist/cli/chunks/client-HNBZUEVV.js +2 -0
  171. package/dist/cli/chunks/{cline-installer-LSFAUHXC.js → cline-installer-NUBZZ55N.js} +2 -2
  172. package/dist/cli/chunks/{code-N3SWJ3XL.js → code-K6JCWKNW.js} +2 -2
  173. package/dist/cli/chunks/{code-index-extractor-WPGRG36B.js → code-index-extractor-I4ILB5JN.js} +2 -2
  174. package/dist/cli/chunks/{codex-installer-LKRCSDU5.js → codex-installer-AKQ5BCHU.js} +2 -2
  175. package/dist/cli/chunks/{completions-E5TBZ5AB.js → completions-V3KJVJF4.js} +2 -2
  176. package/dist/cli/chunks/{complexity-analyzer-3FOSOELK.js → complexity-analyzer-HRG7OOY3.js} +2 -2
  177. package/dist/cli/chunks/{continuedev-installer-ZSVFWMQB.js → continuedev-installer-CNTDONWG.js} +2 -2
  178. package/dist/cli/chunks/{copilot-installer-POSKHPZM.js → copilot-installer-XPWWIWYA.js} +2 -2
  179. package/dist/cli/chunks/core-handlers-TB7NLYXL.js +2 -0
  180. package/dist/cli/chunks/{cost-tracker-3UWDCNGC.js → cost-tracker-MFNLQ56K.js} +2 -2
  181. package/dist/cli/chunks/{coverage-HPBO67JF.js → coverage-KOIK654V.js} +3 -3
  182. package/dist/cli/chunks/cross-domain-router-MDSI553U.js +2 -0
  183. package/dist/cli/chunks/{cursor-installer-DSW3L62X.js → cursor-installer-S5MKLRQQ.js} +2 -2
  184. package/dist/cli/chunks/{daemon-2622ZCMJ.js → daemon-DUS6JYW6.js} +3 -3
  185. package/dist/cli/chunks/{daemon-33KTKDUM.js → daemon-Z7VPGWHY.js} +4 -4
  186. package/dist/cli/chunks/{dag-attention-scheduler-YFT5JMM6.js → dag-attention-scheduler-7CQ3ARNI.js} +2 -2
  187. package/dist/cli/chunks/{detect-COR3Q6BE.js → detect-WORBCAYF.js} +2 -2
  188. package/dist/cli/chunks/{dist-node-5TRNTNWI.js → dist-node-KRNI6OYW.js} +2 -2
  189. package/dist/cli/chunks/{domain-handler-TZC4GCF6.js → domain-handler-KRUR2VQG.js} +2 -2
  190. package/dist/cli/chunks/{domain-transfer-D2TENM3Y.js → domain-transfer-VEOVLV54.js} +2 -2
  191. package/dist/cli/chunks/dream-X7ISHFEE.js +2 -0
  192. package/dist/cli/chunks/embed-and-insert-pattern-QU3NQVA5.js +3 -0
  193. package/dist/cli/chunks/{eval-5ID5D77H.js → eval-AYQ7BSUP.js} +2 -2
  194. package/dist/cli/chunks/{experience-capture-middleware-MT4Z74TD.js → experience-capture-middleware-AWQBL6LT.js} +3 -3
  195. package/dist/cli/chunks/{fast-paths-MACRZGSE.js → fast-paths-V5EL4BYJ.js} +2 -2
  196. package/dist/cli/chunks/{feature-flags-LFNL6BHS.js → feature-flags-BXX7BP22.js} +2 -2
  197. package/dist/cli/chunks/{feature-flags-JZX6ZBUX.js → feature-flags-P34BPRWU.js} +2 -2
  198. package/dist/cli/chunks/{file-discovery-DA5BEAO2.js → file-discovery-MS6BKQ2U.js} +2 -2
  199. package/dist/cli/chunks/{fleet-35I4F7D2.js → fleet-7WVVPA4W.js} +3 -3
  200. package/dist/cli/chunks/{gnn-wrapper-2W3HM3ZI.js → gnn-wrapper-7WQ3LEPG.js} +2 -2
  201. package/dist/cli/chunks/{heartbeat-handler-6O2D2FU2.js → heartbeat-handler-P7QD3BZH.js} +4 -4
  202. package/dist/cli/chunks/heartbeat-scheduler-2C5XGFQT.js +2 -0
  203. package/dist/cli/chunks/hnsw-adapter-KCVMXLUL.js +2 -0
  204. package/dist/cli/chunks/hnsw-index-OGWZS6MP.js +2 -0
  205. package/dist/cli/chunks/{hnsw-legacy-bridge-GWBXEMQR.js → hnsw-legacy-bridge-Y3GAR3UP.js} +2 -2
  206. package/dist/cli/chunks/{hnswlib-node-TZ4VLARU.js → hnswlib-node-5QUXZQWQ.js} +2 -2
  207. package/dist/cli/chunks/{hooks-723GPTQ4.js → hooks-2D64KPRY.js} +10 -10
  208. package/dist/cli/chunks/{hypergraph-engine-ILRYFJM5.js → hypergraph-engine-5INXEZDP.js} +2 -2
  209. package/dist/cli/chunks/{hypergraph-handler-523TSK4P.js → hypergraph-handler-YJJJ3ESZ.js} +3 -3
  210. package/dist/cli/chunks/impact-analyzer-IBJ43GQL.js +2 -0
  211. package/dist/cli/chunks/{init-handler-RBDYIXNV.js → init-handler-QSFYJN5Q.js} +6 -6
  212. package/dist/cli/chunks/init-wizard-6XMFD5LP.js +2 -0
  213. package/dist/cli/chunks/kernel-UDUMUPB3.js +2 -0
  214. package/dist/cli/chunks/{kilocode-installer-E2QSX7Z7.js → kilocode-installer-3N3QGTJU.js} +2 -2
  215. package/dist/cli/chunks/{kiro-installer-EZZLT2R5.js → kiro-installer-GIWVTFZQ.js} +2 -2
  216. package/dist/cli/chunks/knowledge-graph-JRYTUG3W.js +2 -0
  217. package/dist/cli/chunks/learning-SGO2DQ5Q.js +122 -0
  218. package/dist/cli/chunks/llm-router-HBBULO65.js +37 -0
  219. package/dist/cli/chunks/llm-router-service-KF5ZALUQ.js +2 -0
  220. package/dist/cli/chunks/{load-QFQ3YOBQ.js → load-B5OFYB4H.js} +2 -2
  221. package/dist/cli/chunks/load-test-LHMBCNCH.js +2 -0
  222. package/dist/cli/chunks/{mcp-FPBBJJFY.js → mcp-FG3LNQR4.js} +2 -2
  223. package/dist/cli/chunks/{memory-RKN6KV75.js → memory-SPS7ZWLC.js} +5 -5
  224. package/dist/cli/chunks/memory-backend-WZHKHBZK.js +2 -0
  225. package/dist/cli/chunks/memory-handlers-P7FTPWP3.js +2 -0
  226. package/dist/cli/chunks/{multi-model-executor-OUNW3JM5.js → multi-model-executor-PUB7E6KH.js} +2 -2
  227. package/dist/cli/chunks/{opencode-installer-FXETYGGY.js → opencode-installer-TGCSGVG2.js} +2 -2
  228. package/dist/cli/chunks/{orchestrator-35UTVXSP.js → orchestrator-S5FTJFGB.js} +10 -13
  229. package/dist/cli/chunks/pattern-null-store-UZSHCRL2.js +2 -0
  230. package/dist/cli/chunks/{pattern-usage-recorder-YEQDS7DN.js → pattern-usage-recorder-LCXXGRAB.js} +2 -2
  231. package/dist/cli/chunks/{pipeline-YDJMWCAR.js → pipeline-ENOSRHKW.js} +2 -2
  232. package/dist/cli/chunks/{platform-L3LPNVKT.js → platform-WCRBO3Z7.js} +2 -2
  233. package/dist/cli/chunks/{plugin-55EYFJH5.js → plugin-JZ5ODJSU.js} +2 -2
  234. package/dist/cli/chunks/{prime-radiant-advanced-wasm-SUZT6RTM.js → prime-radiant-advanced-wasm-DPJUPNCG.js} +2 -2
  235. package/dist/cli/chunks/protocol-executor-42NLVDTC.js +2 -0
  236. package/dist/cli/chunks/{protocol-handler-QNBFRJNY.js → protocol-handler-IP4NLVY3.js} +2 -2
  237. package/dist/cli/chunks/{prove-3X5NQP4L.js → prove-P6FM4RU7.js} +2 -2
  238. package/dist/cli/chunks/qe-reasoning-bank-W74RSMMU.js +2 -0
  239. package/dist/cli/chunks/{quality-5ZONTNA6.js → quality-UHP4XO26.js} +2 -2
  240. package/dist/cli/chunks/{quality-gate-JPNREEVR.js → quality-gate-63DDBSGM.js} +3 -3
  241. package/dist/cli/chunks/queen-coordinator-XELKSRMS.js +2 -0
  242. package/dist/cli/chunks/real-embeddings-6SO5MFRQ.js +2 -0
  243. package/dist/cli/chunks/{roocode-installer-ZK73O2GD.js → roocode-installer-WTWUOFCH.js} +2 -2
  244. package/dist/cli/chunks/router-GTW2EQZV.js +2 -0
  245. package/dist/cli/chunks/routing-feedback-NVOBWEMK.js +2 -0
  246. package/dist/cli/chunks/{routing-handler-2UN5GRHJ.js → routing-handler-IK7HYERQ.js} +2 -2
  247. package/dist/cli/chunks/{ruvector-commands-EQQUEVWN.js → ruvector-commands-THLB4NIM.js} +2 -2
  248. package/dist/cli/chunks/rvf-dual-writer-5OPVMXNL.js +2 -0
  249. package/dist/cli/chunks/rvf-migration-adapter-5S4YFTX4.js +2 -0
  250. package/dist/cli/chunks/rvf-migration-coordinator-BUKCSHBD.js +2 -0
  251. package/dist/cli/chunks/rvf-native-adapter-LYSJHEVX.js +2 -0
  252. package/dist/cli/chunks/{rvf-store-integrity-66FEC3MD.js → rvf-store-integrity-ECTADZIN.js} +2 -2
  253. package/dist/cli/chunks/safe-db-AEB3JMLD.js +2 -0
  254. package/dist/cli/chunks/schedule-4QNPCQNT.js +2 -0
  255. package/dist/cli/chunks/scheduler-S3DFHX6A.js +2 -0
  256. package/dist/cli/chunks/{security-H7PEUUCV.js → security-HN4UXFXX.js} +3 -3
  257. package/dist/cli/chunks/{shared-rvf-adapter-XETNK4ID.js → shared-rvf-adapter-XJCPX5SN.js} +2 -2
  258. package/dist/cli/chunks/{shared-rvf-dual-writer-PXD54BWJ.js → shared-rvf-dual-writer-23X5PNY5.js} +2 -2
  259. package/dist/cli/chunks/sqlite-persistence-L2KISU2H.js +2 -0
  260. package/dist/cli/chunks/status-handler-ZXANTHKT.js +47 -0
  261. package/dist/cli/chunks/{structural-health-EIFBDCRI.js → structural-health-LR6WI3AH.js} +2 -2
  262. package/dist/cli/chunks/{sync-PECWQ64K.js → sync-4OEI3BC2.js} +2 -2
  263. package/dist/cli/chunks/{sync-3SU4H6R3.js → sync-I5IUJF33.js} +2 -2
  264. package/dist/cli/chunks/{task-handler-ZTUAT6YF.js → task-handler-R3ATJKU5.js} +2 -2
  265. package/dist/cli/chunks/{task-handlers-4RIO7LJJ.js → task-handlers-4X357AEW.js} +3 -3
  266. package/dist/cli/chunks/{test-EV7BSUTI.js → test-PR2B5H2F.js} +4 -4
  267. package/dist/cli/chunks/{test-scheduling-4WVI5DLE.js → test-scheduling-ZNOSQVLD.js} +3 -3
  268. package/dist/cli/chunks/token-bootstrap-LYXOI72S.js +2 -0
  269. package/dist/cli/chunks/{token-usage-FR3JOWYB.js → token-usage-R6EQZBX2.js} +2 -2
  270. package/dist/cli/chunks/{transformers-FENO33LA.js → transformers-COQWK27J.js} +2 -2
  271. package/dist/cli/chunks/{tree-sitter-wasm-parser-YFGJLSMB.js → tree-sitter-wasm-parser-LLIW2X3M.js} +2 -2
  272. package/dist/cli/chunks/{types-N3Y565RZ.js → types-MEYTZITK.js} +2 -2
  273. package/dist/cli/chunks/unified-memory-5KQMA7FV.js +2 -0
  274. package/dist/cli/chunks/unified-memory-hnsw-PQRPTYOD.js +2 -0
  275. package/dist/cli/chunks/unified-persistence-YDONVPJB.js +2 -0
  276. package/dist/cli/chunks/{upgrade-33ZVVZFW.js → upgrade-DVIJ456A.js} +2 -2
  277. package/dist/cli/chunks/{validate-CS5PXGDF.js → validate-UYTSMJ5X.js} +2 -2
  278. package/dist/cli/chunks/{validate-swarm-GRZPWYNM.js → validate-swarm-P32WCJR6.js} +2 -2
  279. package/dist/cli/chunks/{vibium-IO7N4VEE.js → vibium-JGVOLM6X.js} +2 -2
  280. package/dist/cli/chunks/visual-security-RJ7RTNGJ.js +2 -0
  281. package/dist/cli/chunks/{web-tree-sitter-UQXR5HHR.js → web-tree-sitter-5ZGNCTPN.js} +2 -2
  282. package/dist/cli/chunks/{windsurf-installer-BCKLSLZT.js → windsurf-installer-IILSSQAE.js} +2 -2
  283. package/dist/cli/chunks/{witness-chain-R3V26QWL.js → witness-chain-JZMXCG3B.js} +2 -2
  284. package/dist/cli/chunks/witness-chain-YXXXNGAM.js +2 -0
  285. package/dist/cli/chunks/{witness-key-manager-Y36HMPEM.js → witness-key-manager-UUTLNUIH.js} +2 -2
  286. package/dist/cli/chunks/{workflow-4TCIUUFQ.js → workflow-NS7HXVHZ.js} +4 -4
  287. package/dist/cli/chunks/workflow-orchestrator-5KUAVSTH.js +2 -0
  288. package/dist/cli/chunks/{wrappers-MD4JRHJH.js → wrappers-XKEDSV5W.js} +2 -2
  289. package/dist/cli/commands/learning.js +44 -0
  290. package/dist/cli/commands/llm-router.js +62 -27
  291. package/dist/cli/handlers/brain-handler.js +2 -0
  292. package/dist/cli/handlers/status-handler.js +18 -2
  293. package/dist/context/compaction/index.d.ts +1 -0
  294. package/dist/context/compaction/index.js +3 -0
  295. package/dist/context/compaction/instruction-provenance.d.ts +20 -0
  296. package/dist/context/compaction/instruction-provenance.js +18 -0
  297. package/dist/context/compaction/tier2-session-summary.d.ts +8 -0
  298. package/dist/context/compaction/tier2-session-summary.js +20 -0
  299. package/dist/context/compaction/tier3-llm-compact.d.ts +4 -0
  300. package/dist/context/compaction/tier3-llm-compact.js +32 -4
  301. package/dist/init/phases/07-hooks.js +0 -3
  302. package/dist/integrations/embeddings/base/EmbeddingGenerator.js +4 -2
  303. package/dist/integrations/ruvector/brain-exporter.d.ts +1 -1
  304. package/dist/integrations/ruvector/brain-exporter.js +15 -3
  305. package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +4 -0
  306. package/dist/integrations/ruvector/brain-rvf-exporter.js +118 -37
  307. package/dist/integrations/ruvector/brain-search.d.ts +1 -1
  308. package/dist/integrations/ruvector/brain-search.js +1 -1
  309. package/dist/integrations/ruvector/brain-shared.d.ts +4 -2
  310. package/dist/integrations/ruvector/brain-shared.js +11 -4
  311. package/dist/integrations/ruvector/brain-table-ddl.d.ts +2 -2
  312. package/dist/integrations/ruvector/brain-table-ddl.js +20 -8
  313. package/dist/integrations/ruvector/cognitive-container.js +1 -1
  314. package/dist/integrations/ruvector/rvf-dual-writer.d.ts +4 -0
  315. package/dist/integrations/ruvector/rvf-dual-writer.js +57 -9
  316. package/dist/integrations/ruvector/rvf-store-integrity.js +1 -1
  317. package/dist/kernel/unified-memory-schemas.d.ts +4 -3
  318. package/dist/kernel/unified-memory-schemas.js +19 -9
  319. package/dist/kernel/unified-memory.d.ts +2 -0
  320. package/dist/kernel/unified-memory.js +19 -0
  321. package/dist/learning/embed-and-insert-pattern.js +6 -3
  322. package/dist/learning/embedding-space.d.ts +50 -0
  323. package/dist/learning/embedding-space.js +128 -0
  324. package/dist/learning/evidence-admission-store.d.ts +15 -0
  325. package/dist/learning/evidence-admission-store.js +68 -0
  326. package/dist/learning/index.d.ts +4 -0
  327. package/dist/learning/index.js +2 -0
  328. package/dist/learning/learning-evidence-admission.d.ts +44 -0
  329. package/dist/learning/learning-evidence-admission.js +97 -0
  330. package/dist/learning/pattern-store.d.ts +5 -0
  331. package/dist/learning/pattern-store.js +36 -7
  332. package/dist/learning/qe-flywheel/coupled-anchor.d.ts +8 -0
  333. package/dist/learning/qe-flywheel/coupled-anchor.js +46 -3
  334. package/dist/learning/qe-reasoning-bank.js +4 -0
  335. package/dist/learning/real-embeddings.d.ts +3 -0
  336. package/dist/learning/real-embeddings.js +40 -3
  337. package/dist/learning/real-qe-reasoning-bank.js +7 -3
  338. package/dist/learning/rvf-pattern-migration.d.ts +2 -0
  339. package/dist/learning/rvf-pattern-migration.js +5 -3
  340. package/dist/learning/rvf-pattern-store.d.ts +3 -0
  341. package/dist/learning/rvf-pattern-store.js +21 -1
  342. package/dist/learning/sqlite-persistence.d.ts +7 -2
  343. package/dist/learning/sqlite-persistence.js +58 -21
  344. package/dist/mcp/bundle.js +607 -443
  345. package/dist/mcp/handlers/memory-handlers.js +6 -2
  346. package/dist/migrations/20260830_add_learning_evidence_tables.d.ts +7 -0
  347. package/dist/migrations/20260830_add_learning_evidence_tables.js +173 -0
  348. package/dist/persistence/rvf-migration-adapter.d.ts +2 -0
  349. package/dist/persistence/rvf-migration-adapter.js +56 -12
  350. package/dist/shared/llm/billing-modes.d.ts +5 -0
  351. package/dist/shared/llm/billing-modes.js +42 -3
  352. package/dist/shared/llm/index.d.ts +4 -1
  353. package/dist/shared/llm/index.js +5 -1
  354. package/dist/shared/llm/interfaces.d.ts +34 -3
  355. package/dist/shared/llm/interfaces.js +17 -0
  356. package/dist/shared/llm/llm-router-service.d.ts +8 -0
  357. package/dist/shared/llm/llm-router-service.js +21 -3
  358. package/dist/shared/llm/provider-manager.js +8 -1
  359. package/dist/shared/llm/provider-registry.d.ts +135 -0
  360. package/dist/shared/llm/provider-registry.js +227 -0
  361. package/dist/shared/llm/providers/external-cli.d.ts +129 -0
  362. package/dist/shared/llm/providers/external-cli.js +385 -0
  363. package/dist/shared/llm/router/config-store.d.ts +14 -0
  364. package/dist/shared/llm/router/config-store.js +102 -14
  365. package/dist/shared/llm/router/external-provider-config.d.ts +47 -0
  366. package/dist/shared/llm/router/external-provider-config.js +105 -0
  367. package/dist/shared/llm/router/types.d.ts +50 -4
  368. package/dist/shared/llm/router/types.js +10 -0
  369. package/dist/shared/llm/translation/message-formatter.js +7 -1
  370. package/dist/shared/sql-safety.js +4 -0
  371. package/dist/skills/qe-court/cli.d.ts +3 -0
  372. package/dist/skills/qe-court/cli.js +54 -0
  373. package/dist/verification/adversarial-verify/calibrate.d.ts +46 -2
  374. package/dist/verification/adversarial-verify/calibrate.js +104 -2
  375. package/dist/verification/adversarial-verify/index.d.ts +1 -1
  376. package/dist/verification/adversarial-verify/index.js +1 -1
  377. package/package.json +12 -3
  378. package/dist/cli/chunks/adapter-YBSKQFQ4.js +0 -2
  379. package/dist/cli/chunks/aqe-learning-engine-3H7DRDD4.js +0 -2
  380. package/dist/cli/chunks/base-ZTD6PFD7.js +0 -2
  381. package/dist/cli/chunks/brain-handler-FV2AJZ4A.js +0 -89
  382. package/dist/cli/chunks/browser-workflow-GKWDM25H.js +0 -2
  383. package/dist/cli/chunks/chunk-2CBEQV6R.js +0 -2
  384. package/dist/cli/chunks/chunk-4ZQOJ7Q2.js +0 -2
  385. package/dist/cli/chunks/chunk-CYQRZ645.js +0 -2
  386. package/dist/cli/chunks/chunk-FXKOHZBN.js +0 -2
  387. package/dist/cli/chunks/chunk-GJTGHVAX.js +0 -65
  388. package/dist/cli/chunks/chunk-GP5QBJVO.js +0 -3
  389. package/dist/cli/chunks/chunk-JGXP67BP.js +0 -2
  390. package/dist/cli/chunks/chunk-SW56PB22.js +0 -2
  391. package/dist/cli/chunks/chunk-T5M4TZRB.js +0 -12
  392. package/dist/cli/chunks/chunk-UDSNWQQI.js +0 -2
  393. package/dist/cli/chunks/chunk-VC77SDNH.js +0 -9
  394. package/dist/cli/chunks/chunk-WRMJWQUI.js +0 -12
  395. package/dist/cli/chunks/chunk-YXUFGDGS.js +0 -2
  396. package/dist/cli/chunks/client-4Q5JE7RY.js +0 -2
  397. package/dist/cli/chunks/core-handlers-4GKEYGPS.js +0 -2
  398. package/dist/cli/chunks/cross-domain-router-PBJ2ZGPJ.js +0 -2
  399. package/dist/cli/chunks/dream-4EXVFHUJ.js +0 -2
  400. package/dist/cli/chunks/embed-and-insert-pattern-COAZZGS6.js +0 -3
  401. package/dist/cli/chunks/heartbeat-scheduler-UNEYR3WR.js +0 -2
  402. package/dist/cli/chunks/hnsw-adapter-JQG66H4L.js +0 -2
  403. package/dist/cli/chunks/hnsw-index-2NOROILM.js +0 -2
  404. package/dist/cli/chunks/hybrid-router-FXTAJATE.js +0 -2
  405. package/dist/cli/chunks/impact-analyzer-VHZSBWMT.js +0 -2
  406. package/dist/cli/chunks/init-wizard-EML4OET2.js +0 -2
  407. package/dist/cli/chunks/kernel-TMRJOEO2.js +0 -2
  408. package/dist/cli/chunks/knowledge-graph-FMKVCMJQ.js +0 -2
  409. package/dist/cli/chunks/learning-II2U3EV2.js +0 -119
  410. package/dist/cli/chunks/llm-router-WC66OXZH.js +0 -36
  411. package/dist/cli/chunks/llm-router-service-GOSVGMKM.js +0 -2
  412. package/dist/cli/chunks/load-test-WIRGDZIA.js +0 -2
  413. package/dist/cli/chunks/memory-backend-XBBIXDZU.js +0 -2
  414. package/dist/cli/chunks/memory-handlers-SQHNK3DK.js +0 -2
  415. package/dist/cli/chunks/pattern-null-store-PFLKHRVU.js +0 -2
  416. package/dist/cli/chunks/protocol-executor-GAMNY2JB.js +0 -2
  417. package/dist/cli/chunks/provider-manager-VTIG5AKU.js +0 -2
  418. package/dist/cli/chunks/qe-reasoning-bank-KAX63PXV.js +0 -2
  419. package/dist/cli/chunks/queen-coordinator-UYW2MDKI.js +0 -2
  420. package/dist/cli/chunks/real-embeddings-HHR75AR5.js +0 -2
  421. package/dist/cli/chunks/router-NVDU7IIA.js +0 -2
  422. package/dist/cli/chunks/routing-feedback-KHR3J2J3.js +0 -2
  423. package/dist/cli/chunks/rvf-dual-writer-43L75WLF.js +0 -2
  424. package/dist/cli/chunks/rvf-migration-adapter-Y5OVCYTO.js +0 -2
  425. package/dist/cli/chunks/rvf-migration-coordinator-NEPDFB3N.js +0 -2
  426. package/dist/cli/chunks/rvf-native-adapter-PQ4IOTZU.js +0 -2
  427. package/dist/cli/chunks/safe-db-QHSFV63M.js +0 -2
  428. package/dist/cli/chunks/schedule-JGZFHJGM.js +0 -2
  429. package/dist/cli/chunks/scheduler-NGCDQIW5.js +0 -2
  430. package/dist/cli/chunks/sqlite-persistence-3JSNWL6I.js +0 -2
  431. package/dist/cli/chunks/status-handler-CTXOH3FX.js +0 -47
  432. package/dist/cli/chunks/token-bootstrap-3P22AYZ4.js +0 -2
  433. package/dist/cli/chunks/unified-memory-4VO5KSHP.js +0 -2
  434. package/dist/cli/chunks/unified-memory-hnsw-ZR2FZXOB.js +0 -2
  435. package/dist/cli/chunks/unified-persistence-VFPW5MFM.js +0 -2
  436. package/dist/cli/chunks/visual-security-SNADRUPR.js +0 -2
  437. package/dist/cli/chunks/witness-chain-2TXUTEJE.js +0 -2
  438. package/dist/cli/chunks/workflow-orchestrator-ON6UYRVE.js +0 -2
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Agentic QE v3 — External provider registry
3
+ * ADR-127: External provider registration (issue #628)
4
+ *
5
+ * The sanctioned extension point for provider identity. A downstream
6
+ * integrator can register an additional provider type so
7
+ * `AQE_LLM_PROVIDER=<their-host>` resolves to a provider they supply, instead
8
+ * of forking `BuiltinProviderType` or projecting their host onto an unrelated
9
+ * vendor identity (which would make `aqe health` misreport who served the work).
10
+ *
11
+ * Two entry points feed this registry:
12
+ * 1. `registerProvider()` — for a consumer that embeds AQE in-process.
13
+ * 2. The `externalProviders` block in `.agentic-qe/llm-config.json` — for the
14
+ * subprocess case (the `aqe` CLI and MCP server are separate bundles, so
15
+ * an in-process call cannot reach them). See `external-provider-config.ts`.
16
+ *
17
+ * State is process-global module state, matching ADR-125's
18
+ * `agent-router-config.ts`. Tests must call `resetProviderRegistry()`.
19
+ */
20
+ import { type BillingMode, type LLMProvider, type LLMProviderType } from './interfaces';
21
+ /**
22
+ * Builds a provider instance. Receives whatever config the caller registered
23
+ * the provider with (an `externalProviders` entry, or the `config` passed to
24
+ * `registerProvider`). Must return an object satisfying `LLMProvider`.
25
+ */
26
+ export type ProviderFactory = (config?: unknown) => LLMProvider;
27
+ /** Where a registration came from — surfaced by `aqe health` (ADR-127). */
28
+ export type ProviderRegistrationSource = 'api' | 'config';
29
+ export interface ProviderRegistrationOptions {
30
+ /**
31
+ * How this provider bills. ADR-123/ADR-127: this is an *assertion by the
32
+ * registrant*, not something AQE can verify, so it is recorded with its
33
+ * source and surfaced as "declared by". Omitting it resolves to
34
+ * `metered-api` — the conservative, cap-requiring assumption.
35
+ */
36
+ readonly billingMode?: BillingMode;
37
+ /** Human-facing name for CLI output. Defaults to the type string. */
38
+ readonly displayName?: string;
39
+ /** Models this provider accepts. Informational; used by CLI listings. */
40
+ readonly models?: readonly string[];
41
+ /** Opaque config handed back to the factory on each construction. */
42
+ readonly config?: unknown;
43
+ /** Provenance. Defaults to `'api'`. */
44
+ readonly source?: ProviderRegistrationSource;
45
+ /** For `source: 'config'`, the file the declaration came from. */
46
+ readonly sourceDetail?: string;
47
+ }
48
+ export interface RegisteredProvider extends ProviderRegistrationOptions {
49
+ readonly type: string;
50
+ readonly factory: ProviderFactory;
51
+ readonly source: ProviderRegistrationSource;
52
+ }
53
+ /**
54
+ * Validate a candidate provider type. Returns an error message, or `undefined`
55
+ * when the type is acceptable.
56
+ *
57
+ * Exported so config-driven registration can report per-entry problems without
58
+ * throwing (a bad line in a config file must never be fatal — ADR-125's
59
+ * drop-individually discipline).
60
+ */
61
+ export declare function validateProviderType(type: string): string | undefined;
62
+ /**
63
+ * Register an additional provider type (ADR-127).
64
+ *
65
+ * Throws on an invalid or colliding type — an in-process caller passing a bad
66
+ * type has a bug, and silently ignoring it would strand `AQE_LLM_PROVIDER`
67
+ * pointing at nothing. Config-driven registration uses
68
+ * `tryRegisterProvider()` instead, which reports rather than throws.
69
+ *
70
+ * Re-registering the same type replaces the previous entry.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * import { registerProvider } from 'agentic-qe/shared/llm';
75
+ *
76
+ * registerProvider('my-host', () => new MyHostProvider(), {
77
+ * billingMode: 'subscription',
78
+ * displayName: 'My Host (subscription)',
79
+ * });
80
+ * // now AQE_LLM_PROVIDER=my-host resolves
81
+ * ```
82
+ */
83
+ export declare function registerProvider(type: string, factory: ProviderFactory, options?: ProviderRegistrationOptions): void;
84
+ /**
85
+ * Config-driven registration. Returns an error message instead of throwing, so
86
+ * one malformed `externalProviders` entry drops itself rather than failing
87
+ * router construction for the whole project.
88
+ */
89
+ export declare function tryRegisterProvider(type: string, factory: ProviderFactory, options?: ProviderRegistrationOptions): string | undefined;
90
+ /** Remove a registration. Returns true if something was removed. */
91
+ export declare function unregisterProvider(type: string): boolean;
92
+ /**
93
+ * Clear all registrations. Tests must call this between cases — the registry
94
+ * is module-global (ADR-125 precedent: `resetAgentProviderOverrides()`).
95
+ */
96
+ export declare function resetProviderRegistry(): void;
97
+ /** Is this type registered as an external provider? */
98
+ export declare function isRegisteredProvider(type: string): boolean;
99
+ /** Get a registration, or `undefined`. */
100
+ export declare function getRegisteredProvider(type: string): RegisteredProvider | undefined;
101
+ /** All registrations, in registration order. */
102
+ export declare function listRegisteredProviders(): readonly RegisteredProvider[];
103
+ /** Just the registered type strings. */
104
+ export declare function registeredProviderTypes(): readonly string[];
105
+ /**
106
+ * Validate that a factory actually produced something the manager can drive.
107
+ * Returns an error message, or `undefined` when the instance conforms.
108
+ *
109
+ * This runs at construction rather than registration because the product is
110
+ * what must conform, and calling a factory eagerly at registration time would
111
+ * be an unwanted side effect (a provider constructor may spawn processes or
112
+ * open handles).
113
+ */
114
+ export declare function validateProviderInstance(type: string, instance: unknown): string | undefined;
115
+ /**
116
+ * Build an instance of a registered provider.
117
+ *
118
+ * Throws `PROVIDER_UNAVAILABLE` when the type is not registered, and
119
+ * `INVALID_REQUEST` when the factory produced something that is not a usable
120
+ * `LLMProvider`. `ProviderManager.createProvider()` calls this from the
121
+ * `default` arm of its built-in `switch`, so built-ins always win and a
122
+ * registration can never shadow one.
123
+ */
124
+ export declare function createRegisteredProvider(type: LLMProviderType): LLMProvider;
125
+ /**
126
+ * The billing mode a registered provider declared, with its provenance, for
127
+ * `aqe health` to render as "external — <mode> (declared by <source>)".
128
+ * Returns `undefined` for a type that is not registered.
129
+ */
130
+ export declare function registeredBillingDeclaration(type: LLMProviderType): {
131
+ mode: BillingMode;
132
+ source: ProviderRegistrationSource;
133
+ detail?: string;
134
+ } | undefined;
135
+ //# sourceMappingURL=provider-registry.d.ts.map
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Agentic QE v3 — External provider registry
3
+ * ADR-127: External provider registration (issue #628)
4
+ *
5
+ * The sanctioned extension point for provider identity. A downstream
6
+ * integrator can register an additional provider type so
7
+ * `AQE_LLM_PROVIDER=<their-host>` resolves to a provider they supply, instead
8
+ * of forking `BuiltinProviderType` or projecting their host onto an unrelated
9
+ * vendor identity (which would make `aqe health` misreport who served the work).
10
+ *
11
+ * Two entry points feed this registry:
12
+ * 1. `registerProvider()` — for a consumer that embeds AQE in-process.
13
+ * 2. The `externalProviders` block in `.agentic-qe/llm-config.json` — for the
14
+ * subprocess case (the `aqe` CLI and MCP server are separate bundles, so
15
+ * an in-process call cannot reach them). See `external-provider-config.ts`.
16
+ *
17
+ * State is process-global module state, matching ADR-125's
18
+ * `agent-router-config.ts`. Tests must call `resetProviderRegistry()`.
19
+ */
20
+ import { isBuiltinProviderType, createLLMError, } from './interfaces.js';
21
+ // ============================================================================
22
+ // Registry state
23
+ // ============================================================================
24
+ const registry = new Map();
25
+ /**
26
+ * Reserved identifiers that must never be claimed by an external provider.
27
+ * `anthropic` is normalized to `claude` by `resolveProviderOverrideFromEnv`,
28
+ * so registering it would create a type whose env selector is unreachable.
29
+ */
30
+ const RESERVED_TYPES = new Set(['anthropic']);
31
+ /** A provider type must be a URL/env-safe slug — this is an env var value. */
32
+ const VALID_TYPE = /^[a-z0-9][a-z0-9-]{0,62}$/;
33
+ // ============================================================================
34
+ // Registration
35
+ // ============================================================================
36
+ /**
37
+ * Validate a candidate provider type. Returns an error message, or `undefined`
38
+ * when the type is acceptable.
39
+ *
40
+ * Exported so config-driven registration can report per-entry problems without
41
+ * throwing (a bad line in a config file must never be fatal — ADR-125's
42
+ * drop-individually discipline).
43
+ */
44
+ export function validateProviderType(type) {
45
+ if (typeof type !== 'string' || type.trim().length === 0) {
46
+ return 'provider type must be a non-empty string';
47
+ }
48
+ if (type !== type.toLowerCase()) {
49
+ return `provider type "${type}" must be lowercase (AQE_LLM_PROVIDER is matched case-insensitively)`;
50
+ }
51
+ if (!VALID_TYPE.test(type)) {
52
+ return `provider type "${type}" must match ${VALID_TYPE.source} (lowercase alphanumeric and dashes)`;
53
+ }
54
+ if (isBuiltinProviderType(type)) {
55
+ return `provider type "${type}" is built in and cannot be overridden`;
56
+ }
57
+ if (RESERVED_TYPES.has(type)) {
58
+ return `provider type "${type}" is reserved`;
59
+ }
60
+ return undefined;
61
+ }
62
+ /**
63
+ * Register an additional provider type (ADR-127).
64
+ *
65
+ * Throws on an invalid or colliding type — an in-process caller passing a bad
66
+ * type has a bug, and silently ignoring it would strand `AQE_LLM_PROVIDER`
67
+ * pointing at nothing. Config-driven registration uses
68
+ * `tryRegisterProvider()` instead, which reports rather than throws.
69
+ *
70
+ * Re-registering the same type replaces the previous entry.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * import { registerProvider } from 'agentic-qe/shared/llm';
75
+ *
76
+ * registerProvider('my-host', () => new MyHostProvider(), {
77
+ * billingMode: 'subscription',
78
+ * displayName: 'My Host (subscription)',
79
+ * });
80
+ * // now AQE_LLM_PROVIDER=my-host resolves
81
+ * ```
82
+ */
83
+ export function registerProvider(type, factory, options = {}) {
84
+ const problem = validateProviderType(type);
85
+ if (problem) {
86
+ throw createLLMError(problem, 'INVALID_REGISTRATION', { retryable: false });
87
+ }
88
+ if (typeof factory !== 'function') {
89
+ throw createLLMError(`provider "${type}" must be registered with a factory function`, 'INVALID_REGISTRATION', { retryable: false });
90
+ }
91
+ registry.set(type, {
92
+ ...options,
93
+ type,
94
+ factory,
95
+ source: options.source ?? 'api',
96
+ });
97
+ }
98
+ /**
99
+ * Config-driven registration. Returns an error message instead of throwing, so
100
+ * one malformed `externalProviders` entry drops itself rather than failing
101
+ * router construction for the whole project.
102
+ */
103
+ export function tryRegisterProvider(type, factory, options = {}) {
104
+ try {
105
+ registerProvider(type, factory, options);
106
+ return undefined;
107
+ }
108
+ catch (error) {
109
+ return error instanceof Error ? error.message : String(error);
110
+ }
111
+ }
112
+ /** Remove a registration. Returns true if something was removed. */
113
+ export function unregisterProvider(type) {
114
+ return registry.delete(type);
115
+ }
116
+ /**
117
+ * Clear all registrations. Tests must call this between cases — the registry
118
+ * is module-global (ADR-125 precedent: `resetAgentProviderOverrides()`).
119
+ */
120
+ export function resetProviderRegistry() {
121
+ registry.clear();
122
+ }
123
+ // ============================================================================
124
+ // Lookup
125
+ // ============================================================================
126
+ /** Is this type registered as an external provider? */
127
+ export function isRegisteredProvider(type) {
128
+ return registry.has(type);
129
+ }
130
+ /** Get a registration, or `undefined`. */
131
+ export function getRegisteredProvider(type) {
132
+ return registry.get(type);
133
+ }
134
+ /** All registrations, in registration order. */
135
+ export function listRegisteredProviders() {
136
+ return [...registry.values()];
137
+ }
138
+ /** Just the registered type strings. */
139
+ export function registeredProviderTypes() {
140
+ return [...registry.keys()];
141
+ }
142
+ // ============================================================================
143
+ // Construction
144
+ // ============================================================================
145
+ /**
146
+ * The subset of `LLMProvider` a registered provider must actually implement
147
+ * for the manager and router to drive it. `embed` is deliberately excluded —
148
+ * a CLI-shaped host cannot generally offer an embeddings endpoint, and
149
+ * `ExternalCliProvider` throws `EMBEDDING_UNSUPPORTED` so the caller falls
150
+ * back rather than receiving a fabricated vector.
151
+ */
152
+ const REQUIRED_PROVIDER_METHODS = [
153
+ 'isAvailable',
154
+ 'healthCheck',
155
+ 'generate',
156
+ 'complete',
157
+ 'getConfig',
158
+ 'getSupportedModels',
159
+ 'getCostPerToken',
160
+ 'dispose',
161
+ ];
162
+ /**
163
+ * Validate that a factory actually produced something the manager can drive.
164
+ * Returns an error message, or `undefined` when the instance conforms.
165
+ *
166
+ * This runs at construction rather than registration because the product is
167
+ * what must conform, and calling a factory eagerly at registration time would
168
+ * be an unwanted side effect (a provider constructor may spawn processes or
169
+ * open handles).
170
+ */
171
+ export function validateProviderInstance(type, instance) {
172
+ if (!instance || typeof instance !== 'object') {
173
+ return `provider "${type}" factory returned ${instance === null ? 'null' : typeof instance}, expected an LLMProvider`;
174
+ }
175
+ const candidate = instance;
176
+ const missing = REQUIRED_PROVIDER_METHODS.filter((method) => typeof candidate[method] !== 'function');
177
+ if (missing.length > 0) {
178
+ return `provider "${type}" is missing required LLMProvider method(s): ${missing.join(', ')}`;
179
+ }
180
+ if (typeof candidate.type !== 'string' || candidate.type.length === 0) {
181
+ return `provider "${type}" must expose a non-empty \`type\``;
182
+ }
183
+ if (candidate.type !== type) {
184
+ return `provider "${type}" reports type "${candidate.type}" — a provider must not claim an identity other than the one it was registered under`;
185
+ }
186
+ return undefined;
187
+ }
188
+ /**
189
+ * Build an instance of a registered provider.
190
+ *
191
+ * Throws `PROVIDER_UNAVAILABLE` when the type is not registered, and
192
+ * `INVALID_REQUEST` when the factory produced something that is not a usable
193
+ * `LLMProvider`. `ProviderManager.createProvider()` calls this from the
194
+ * `default` arm of its built-in `switch`, so built-ins always win and a
195
+ * registration can never shadow one.
196
+ */
197
+ export function createRegisteredProvider(type) {
198
+ const registration = registry.get(type);
199
+ if (!registration) {
200
+ throw createLLMError(`Unknown provider type: ${type}`, 'PROVIDER_UNAVAILABLE', {
201
+ retryable: false,
202
+ });
203
+ }
204
+ const instance = registration.factory(registration.config);
205
+ const problem = validateProviderInstance(type, instance);
206
+ if (problem) {
207
+ throw createLLMError(problem, 'INVALID_REGISTRATION', { retryable: false });
208
+ }
209
+ return instance;
210
+ }
211
+ /**
212
+ * The billing mode a registered provider declared, with its provenance, for
213
+ * `aqe health` to render as "external — <mode> (declared by <source>)".
214
+ * Returns `undefined` for a type that is not registered.
215
+ */
216
+ export function registeredBillingDeclaration(type) {
217
+ const registration = registry.get(type);
218
+ if (!registration)
219
+ return undefined;
220
+ return {
221
+ // Absent declaration → metered-api: assume it costs money and needs a cap.
222
+ mode: registration.billingMode ?? 'metered-api',
223
+ source: registration.source,
224
+ detail: registration.sourceDetail,
225
+ };
226
+ }
227
+ //# sourceMappingURL=provider-registry.js.map
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Agentic QE v3 — Generic external CLI provider (ADR-127 / issue #628)
3
+ *
4
+ * A provider built from a *declaration* rather than from code. It generalizes
5
+ * the shape AQE has already shipped twice — `providers/codex.ts` and
6
+ * `providers/claude-code.ts` — into something a downstream integrator can
7
+ * obtain by writing JSON:
8
+ *
9
+ * spawn a host CLI → feed it a prompt on stdin → read the completion from
10
+ * stdout → attribute the usage honestly.
11
+ *
12
+ * WHY DECLARATIVE: the requester (agentic-kit) drives AQE as spawned
13
+ * subprocesses — the `aqe` CLI bundle and the MCP server bundle are separate
14
+ * esbuild artifacts — so an in-process `registerProvider()` call cannot reach
15
+ * them. A declaration in `.agentic-qe/llm-config.json` reaches both, and does
16
+ * so without AQE ever importing third-party code. See ADR-127 for why the
17
+ * dynamic-`import()` plugin design was rejected.
18
+ *
19
+ * LOAD-BEARING: `stripEnv` removes named variables from the child environment.
20
+ * A host that bills against a subscription must be able to guarantee an API
21
+ * key is not silently present to flip it back to metered billing — the same
22
+ * discipline `codex.ts` enforces for OPENAI_API_KEY / CODEX_API_KEY.
23
+ */
24
+ import { type BillingMode, type CompleteOptions, type CompletionResponse, type EmbedOptions, type EmbeddingResponse, type GenerateOptions, type HealthCheckResult, type LLMConfig, type LLMProvider, type LLMResponse, type Message } from '../interfaces';
25
+ /**
26
+ * A declared external CLI provider. This is the on-disk contract — see ADR-127
27
+ * §Schema. Everything except `kind` and `command` is optional.
28
+ */
29
+ export interface ExternalCliProviderConfig {
30
+ /** Discriminator. Only `'cli'` exists today; `'http'` is a follow-up. */
31
+ readonly kind: 'cli';
32
+ /** argv. Not shell-interpreted — `command[0]` is the binary. */
33
+ readonly command: readonly string[];
34
+ /** How this host bills. Unverified assertion; defaults to `metered-api`. */
35
+ readonly billingMode?: BillingMode;
36
+ /** Models this host accepts. Defaults to `['default']`. */
37
+ readonly models?: readonly string[];
38
+ /** Model used when the caller does not name one. Defaults to `models[0]`. */
39
+ readonly defaultModel?: string;
40
+ /** Flag used to pass the model, e.g. `--model`. Omitted = never passed. */
41
+ readonly modelFlag?: string;
42
+ /** Hard timeout per invocation. Defaults to 180000. */
43
+ readonly timeoutMs?: number;
44
+ /** Max concurrent subprocesses. Defaults to 2. */
45
+ readonly maxConcurrency?: number;
46
+ /** Env vars removed from the child process before spawning. */
47
+ readonly stripEnv?: readonly string[];
48
+ /** Human-facing name for CLI output. Defaults to the type string. */
49
+ readonly displayName?: string;
50
+ }
51
+ export declare const DEFAULT_EXTERNAL_CLI_TIMEOUT_MS = 180000;
52
+ export declare const DEFAULT_EXTERNAL_CLI_CONCURRENCY = 2;
53
+ export declare const EXTERNAL_CLI_DEFAULT_MODEL = "default";
54
+ /**
55
+ * Validate a declaration. Returns an error message, or `undefined` when the
56
+ * declaration is usable.
57
+ *
58
+ * Deliberately does NOT check that the binary exists — that is a runtime
59
+ * availability question answered by `isAvailable()`. A declaration for a host
60
+ * that is not installed yet is valid-but-unavailable, not malformed, so a
61
+ * config file stays portable across machines.
62
+ */
63
+ export declare function validateExternalCliConfig(type: string, config: unknown): string | undefined;
64
+ export declare class ExternalCliProvider implements LLMProvider {
65
+ readonly type: string;
66
+ readonly name: string;
67
+ readonly billingMode: BillingMode;
68
+ private readonly config;
69
+ private requestCounter;
70
+ private availabilityCache?;
71
+ private active;
72
+ private readonly queue;
73
+ constructor(type: string, config: ExternalCliProviderConfig);
74
+ /**
75
+ * Is the host's binary present and executable?
76
+ *
77
+ * Deliberately does NOT run it. AQE cannot know what invoking an arbitrary
78
+ * host costs — a declared host has no `--version` contract it agreed to, and
79
+ * spawning it with an empty prompt could burn a real request against the
80
+ * user's plan just to answer "are you installed?". Resolving the binary on
81
+ * PATH answers the question for free.
82
+ */
83
+ isAvailable(): Promise<boolean>;
84
+ healthCheck(): Promise<HealthCheckResult>;
85
+ generate(input: string | Message[], options?: GenerateOptions): Promise<LLMResponse>;
86
+ /**
87
+ * ADR-127: a generic CLI contract cannot promise an embeddings endpoint.
88
+ * Throws `EMBEDDING_UNSUPPORTED` — a distinct, non-retryable signal so the
89
+ * caller falls back to a provider that has one, and never receives a
90
+ * fabricated vector.
91
+ */
92
+ embed(_text: string, _options?: EmbedOptions): Promise<EmbeddingResponse>;
93
+ complete(prompt: string, options?: CompleteOptions): Promise<CompletionResponse>;
94
+ getConfig(): LLMConfig;
95
+ getSupportedModels(): string[];
96
+ /**
97
+ * Unknown. A declared host does not tell AQE its per-token price, and
98
+ * inventing one would feed fabricated numbers into cost reporting.
99
+ */
100
+ getCostPerToken(): {
101
+ input: number;
102
+ output: number;
103
+ };
104
+ dispose(): Promise<void>;
105
+ private defaultModel;
106
+ /**
107
+ * Child env with the declared keys removed (LOAD-BEARING — see file header).
108
+ * Static so tests can assert the strip without spawning anything.
109
+ */
110
+ static childEnv(stripEnv?: readonly string[], base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
111
+ private classifyError;
112
+ private spawnHost;
113
+ /** Semaphore so we never spawn unbounded host subprocesses. */
114
+ private withConcurrency;
115
+ }
116
+ /**
117
+ * Does this binary resolve to something executable, without running it?
118
+ * An absolute or explicitly-relative path is checked directly; a bare name is
119
+ * looked up across PATH the way the shell would.
120
+ */
121
+ export declare function resolvesOnPath(binary: string, env?: NodeJS.ProcessEnv): boolean;
122
+ /**
123
+ * Flatten messages into a single prompt. A generic CLI has no role protocol,
124
+ * so system content is hoisted into a preamble — the same strategy
125
+ * `codex.ts` uses and the reason `message-formatter` falls back to
126
+ * `'first-message'` for unknown providers.
127
+ */
128
+ export declare function flattenPrompt(input: string | Message[], systemPrompt?: string): string;
129
+ //# sourceMappingURL=external-cli.d.ts.map