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
@@ -75,12 +75,16 @@ export async function handleMemoryStore(params) {
75
75
  }
76
76
  catch {
77
77
  // Non-critical — KV store succeeded, vector indexing is best-effort
78
- console.warn('[MemoryHandler] VECTOR_INDEX_UNAVAILABLE: Semantic vector indexing is unavailable for this entry.');
78
+ const vectorUnavailableMessage = 'Semantic vector indexing is unavailable for this entry. Configure AQE_EMBEDDER_ENDPOINT ' +
79
+ 'for the recommended remote backend. The compatible local @huggingface/transformers@4.2.0 ' +
80
+ 'dependency chain currently has unresolved HIGH advisories ' +
81
+ 'GHSA-xcpc-8h2w-3j85 and GHSA-f88m-g3jw-g9cj.';
82
+ console.warn(`[MemoryHandler] VECTOR_INDEX_UNAVAILABLE: ${vectorUnavailableMessage}`);
79
83
  vectorIndex = {
80
84
  status: 'failed',
81
85
  error: {
82
86
  code: 'VECTOR_INDEX_UNAVAILABLE',
83
- message: 'Semantic vector indexing is unavailable for this entry.',
87
+ message: vectorUnavailableMessage,
84
88
  },
85
89
  };
86
90
  }
@@ -0,0 +1,7 @@
1
+ import type { Database as DatabaseType } from 'better-sqlite3';
2
+ export declare const MIGRATION_VERSION = "20260830_add_learning_evidence_tables";
3
+ export declare const LEARNING_EVIDENCE_SCHEMA = "\n CREATE TABLE IF NOT EXISTS learning_evidence_manifests (\n id TEXT PRIMARY KEY,\n trajectory_id TEXT,\n trajectory_hash TEXT,\n manifest_hash TEXT NOT NULL UNIQUE,\n task_family TEXT NOT NULL,\n task_identity TEXT,\n run_identity TEXT,\n correlation_group TEXT,\n dedupe_fingerprint TEXT,\n revision TEXT,\n environment TEXT,\n outcome TEXT NOT NULL CHECK (outcome IN ('verified-success','verified-failure','unknown')),\n oracle_refs_json TEXT NOT NULL DEFAULT '[]',\n source_kind TEXT NOT NULL CHECK (source_kind IN ('executed','static','human-reviewed','inferred')),\n process_signals_json TEXT NOT NULL DEFAULT '{}',\n manifest_version INTEGER NOT NULL DEFAULT 1,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n );\n\n CREATE TABLE IF NOT EXISTS learning_evidence_segments (\n id TEXT NOT NULL,\n manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,\n segment_order INTEGER NOT NULL,\n kind TEXT NOT NULL CHECK (kind IN ('observe','decide','act','verify','recover','other')),\n contribution TEXT NOT NULL CHECK (contribution IN ('causal','supporting','irrelevant','harmful','unknown')),\n evidence_refs_json TEXT NOT NULL DEFAULT '[]',\n admit_for_learning INTEGER NOT NULL CHECK (admit_for_learning IN (0,1)),\n reasons_json TEXT NOT NULL DEFAULT '[]',\n content_hash TEXT,\n PRIMARY KEY (manifest_id, id),\n UNIQUE (manifest_id, segment_order)\n );\n\n CREATE TABLE IF NOT EXISTS learning_segment_edges (\n manifest_id TEXT NOT NULL,\n parent_segment_id TEXT NOT NULL,\n child_segment_id TEXT NOT NULL,\n edge_kind TEXT NOT NULL DEFAULT 'depends-on',\n PRIMARY KEY (manifest_id, parent_segment_id, child_segment_id, edge_kind),\n FOREIGN KEY (manifest_id, parent_segment_id)\n REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT,\n FOREIGN KEY (manifest_id, child_segment_id)\n REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT,\n CHECK (parent_segment_id <> child_segment_id)\n );\n\n CREATE TABLE IF NOT EXISTS learning_evidence_admissions (\n id TEXT PRIMARY KEY,\n manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,\n decision_seq INTEGER NOT NULL CHECK (decision_seq > 0),\n disposition TEXT NOT NULL CHECK (disposition IN ('admitted','rejected','review-required','legacy-unknown')),\n reason_codes_json TEXT NOT NULL DEFAULT '[]',\n assessor_kind TEXT NOT NULL CHECK (assessor_kind IN ('executed','static','human-reviewed','inferred')),\n evidence_class TEXT NOT NULL CHECK (evidence_class IN ('EXECUTED','STATIC','INFERRED','CONJECTURE')),\n policy_version TEXT,\n policy_hash TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n UNIQUE (manifest_id, decision_seq)\n );\n\n CREATE TABLE IF NOT EXISTS pattern_manifest_lineage (\n pattern_id TEXT NOT NULL REFERENCES qe_patterns(id) ON DELETE RESTRICT,\n manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,\n pattern_version_id TEXT,\n use_kind TEXT NOT NULL CHECK (use_kind IN ('candidate-source','promotion-support','rejection','rollback','legacy-context')),\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n PRIMARY KEY (pattern_id, manifest_id, use_kind)\n );\n\n CREATE TABLE IF NOT EXISTS pattern_segment_lineage (\n pattern_id TEXT NOT NULL REFERENCES qe_patterns(id) ON DELETE RESTRICT,\n manifest_id TEXT NOT NULL,\n segment_id TEXT NOT NULL,\n pattern_version_id TEXT,\n use_kind TEXT NOT NULL CHECK (use_kind IN ('candidate-source','promotion-support','rejection','rollback')),\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n PRIMARY KEY (pattern_id, manifest_id, segment_id, use_kind),\n FOREIGN KEY (manifest_id, segment_id)\n REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT\n );\n\n CREATE INDEX IF NOT EXISTS idx_learning_manifest_trajectory ON learning_evidence_manifests(trajectory_id);\n CREATE INDEX IF NOT EXISTS idx_learning_manifest_task ON learning_evidence_manifests(task_family);\n CREATE INDEX IF NOT EXISTS idx_learning_manifest_dedupe ON learning_evidence_manifests(dedupe_fingerprint);\n CREATE INDEX IF NOT EXISTS idx_learning_manifest_correlation ON learning_evidence_manifests(correlation_group);\n CREATE INDEX IF NOT EXISTS idx_learning_manifest_outcome ON learning_evidence_manifests(outcome, source_kind);\n CREATE INDEX IF NOT EXISTS idx_learning_admission_manifest ON learning_evidence_admissions(manifest_id, decision_seq DESC);\n CREATE INDEX IF NOT EXISTS idx_pattern_manifest_lineage_manifest ON pattern_manifest_lineage(manifest_id);\n CREATE INDEX IF NOT EXISTS idx_pattern_segment_lineage_manifest ON pattern_segment_lineage(manifest_id, segment_id);\n\n CREATE TRIGGER IF NOT EXISTS learning_manifests_no_update BEFORE UPDATE ON learning_evidence_manifests\n BEGIN SELECT RAISE(ABORT, 'learning evidence manifests are append-only'); END;\n CREATE TRIGGER IF NOT EXISTS learning_manifests_no_delete BEFORE DELETE ON learning_evidence_manifests\n BEGIN SELECT RAISE(ABORT, 'learning evidence manifests are append-only'); END;\n CREATE TRIGGER IF NOT EXISTS learning_segments_no_update BEFORE UPDATE ON learning_evidence_segments\n BEGIN SELECT RAISE(ABORT, 'learning evidence segments are append-only'); END;\n CREATE TRIGGER IF NOT EXISTS learning_segments_no_delete BEFORE DELETE ON learning_evidence_segments\n BEGIN SELECT RAISE(ABORT, 'learning evidence segments are append-only'); END;\n CREATE TRIGGER IF NOT EXISTS learning_edges_no_update BEFORE UPDATE ON learning_segment_edges\n BEGIN SELECT RAISE(ABORT, 'learning evidence edges are append-only'); END;\n CREATE TRIGGER IF NOT EXISTS learning_edges_no_delete BEFORE DELETE ON learning_segment_edges\n BEGIN SELECT RAISE(ABORT, 'learning evidence edges are append-only'); END;\n CREATE TRIGGER IF NOT EXISTS learning_admissions_no_update BEFORE UPDATE ON learning_evidence_admissions\n BEGIN SELECT RAISE(ABORT, 'learning evidence admissions are append-only'); END;\n CREATE TRIGGER IF NOT EXISTS learning_admissions_no_delete BEFORE DELETE ON learning_evidence_admissions\n BEGIN SELECT RAISE(ABORT, 'learning evidence admissions are append-only'); END;\n";
4
+ export declare function applyMigration(db: DatabaseType): void;
5
+ export declare function isMigrationApplied(db: DatabaseType): boolean;
6
+ export declare function rollbackMigration(db: DatabaseType): void;
7
+ //# sourceMappingURL=20260830_add_learning_evidence_tables.d.ts.map
@@ -0,0 +1,173 @@
1
+ export const MIGRATION_VERSION = '20260830_add_learning_evidence_tables';
2
+ export const LEARNING_EVIDENCE_SCHEMA = `
3
+ CREATE TABLE IF NOT EXISTS learning_evidence_manifests (
4
+ id TEXT PRIMARY KEY,
5
+ trajectory_id TEXT,
6
+ trajectory_hash TEXT,
7
+ manifest_hash TEXT NOT NULL UNIQUE,
8
+ task_family TEXT NOT NULL,
9
+ task_identity TEXT,
10
+ run_identity TEXT,
11
+ correlation_group TEXT,
12
+ dedupe_fingerprint TEXT,
13
+ revision TEXT,
14
+ environment TEXT,
15
+ outcome TEXT NOT NULL CHECK (outcome IN ('verified-success','verified-failure','unknown')),
16
+ oracle_refs_json TEXT NOT NULL DEFAULT '[]',
17
+ source_kind TEXT NOT NULL CHECK (source_kind IN ('executed','static','human-reviewed','inferred')),
18
+ process_signals_json TEXT NOT NULL DEFAULT '{}',
19
+ manifest_version INTEGER NOT NULL DEFAULT 1,
20
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
21
+ );
22
+
23
+ CREATE TABLE IF NOT EXISTS learning_evidence_segments (
24
+ id TEXT NOT NULL,
25
+ manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,
26
+ segment_order INTEGER NOT NULL,
27
+ kind TEXT NOT NULL CHECK (kind IN ('observe','decide','act','verify','recover','other')),
28
+ contribution TEXT NOT NULL CHECK (contribution IN ('causal','supporting','irrelevant','harmful','unknown')),
29
+ evidence_refs_json TEXT NOT NULL DEFAULT '[]',
30
+ admit_for_learning INTEGER NOT NULL CHECK (admit_for_learning IN (0,1)),
31
+ reasons_json TEXT NOT NULL DEFAULT '[]',
32
+ content_hash TEXT,
33
+ PRIMARY KEY (manifest_id, id),
34
+ UNIQUE (manifest_id, segment_order)
35
+ );
36
+
37
+ CREATE TABLE IF NOT EXISTS learning_segment_edges (
38
+ manifest_id TEXT NOT NULL,
39
+ parent_segment_id TEXT NOT NULL,
40
+ child_segment_id TEXT NOT NULL,
41
+ edge_kind TEXT NOT NULL DEFAULT 'depends-on',
42
+ PRIMARY KEY (manifest_id, parent_segment_id, child_segment_id, edge_kind),
43
+ FOREIGN KEY (manifest_id, parent_segment_id)
44
+ REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT,
45
+ FOREIGN KEY (manifest_id, child_segment_id)
46
+ REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT,
47
+ CHECK (parent_segment_id <> child_segment_id)
48
+ );
49
+
50
+ CREATE TABLE IF NOT EXISTS learning_evidence_admissions (
51
+ id TEXT PRIMARY KEY,
52
+ manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,
53
+ decision_seq INTEGER NOT NULL CHECK (decision_seq > 0),
54
+ disposition TEXT NOT NULL CHECK (disposition IN ('admitted','rejected','review-required','legacy-unknown')),
55
+ reason_codes_json TEXT NOT NULL DEFAULT '[]',
56
+ assessor_kind TEXT NOT NULL CHECK (assessor_kind IN ('executed','static','human-reviewed','inferred')),
57
+ evidence_class TEXT NOT NULL CHECK (evidence_class IN ('EXECUTED','STATIC','INFERRED','CONJECTURE')),
58
+ policy_version TEXT,
59
+ policy_hash TEXT,
60
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
61
+ UNIQUE (manifest_id, decision_seq)
62
+ );
63
+
64
+ CREATE TABLE IF NOT EXISTS pattern_manifest_lineage (
65
+ pattern_id TEXT NOT NULL REFERENCES qe_patterns(id) ON DELETE RESTRICT,
66
+ manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,
67
+ pattern_version_id TEXT,
68
+ use_kind TEXT NOT NULL CHECK (use_kind IN ('candidate-source','promotion-support','rejection','rollback','legacy-context')),
69
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
70
+ PRIMARY KEY (pattern_id, manifest_id, use_kind)
71
+ );
72
+
73
+ CREATE TABLE IF NOT EXISTS pattern_segment_lineage (
74
+ pattern_id TEXT NOT NULL REFERENCES qe_patterns(id) ON DELETE RESTRICT,
75
+ manifest_id TEXT NOT NULL,
76
+ segment_id TEXT NOT NULL,
77
+ pattern_version_id TEXT,
78
+ use_kind TEXT NOT NULL CHECK (use_kind IN ('candidate-source','promotion-support','rejection','rollback')),
79
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
80
+ PRIMARY KEY (pattern_id, manifest_id, segment_id, use_kind),
81
+ FOREIGN KEY (manifest_id, segment_id)
82
+ REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT
83
+ );
84
+
85
+ CREATE INDEX IF NOT EXISTS idx_learning_manifest_trajectory ON learning_evidence_manifests(trajectory_id);
86
+ CREATE INDEX IF NOT EXISTS idx_learning_manifest_task ON learning_evidence_manifests(task_family);
87
+ CREATE INDEX IF NOT EXISTS idx_learning_manifest_dedupe ON learning_evidence_manifests(dedupe_fingerprint);
88
+ CREATE INDEX IF NOT EXISTS idx_learning_manifest_correlation ON learning_evidence_manifests(correlation_group);
89
+ CREATE INDEX IF NOT EXISTS idx_learning_manifest_outcome ON learning_evidence_manifests(outcome, source_kind);
90
+ CREATE INDEX IF NOT EXISTS idx_learning_admission_manifest ON learning_evidence_admissions(manifest_id, decision_seq DESC);
91
+ CREATE INDEX IF NOT EXISTS idx_pattern_manifest_lineage_manifest ON pattern_manifest_lineage(manifest_id);
92
+ CREATE INDEX IF NOT EXISTS idx_pattern_segment_lineage_manifest ON pattern_segment_lineage(manifest_id, segment_id);
93
+
94
+ CREATE TRIGGER IF NOT EXISTS learning_manifests_no_update BEFORE UPDATE ON learning_evidence_manifests
95
+ BEGIN SELECT RAISE(ABORT, 'learning evidence manifests are append-only'); END;
96
+ CREATE TRIGGER IF NOT EXISTS learning_manifests_no_delete BEFORE DELETE ON learning_evidence_manifests
97
+ BEGIN SELECT RAISE(ABORT, 'learning evidence manifests are append-only'); END;
98
+ CREATE TRIGGER IF NOT EXISTS learning_segments_no_update BEFORE UPDATE ON learning_evidence_segments
99
+ BEGIN SELECT RAISE(ABORT, 'learning evidence segments are append-only'); END;
100
+ CREATE TRIGGER IF NOT EXISTS learning_segments_no_delete BEFORE DELETE ON learning_evidence_segments
101
+ BEGIN SELECT RAISE(ABORT, 'learning evidence segments are append-only'); END;
102
+ CREATE TRIGGER IF NOT EXISTS learning_edges_no_update BEFORE UPDATE ON learning_segment_edges
103
+ BEGIN SELECT RAISE(ABORT, 'learning evidence edges are append-only'); END;
104
+ CREATE TRIGGER IF NOT EXISTS learning_edges_no_delete BEFORE DELETE ON learning_segment_edges
105
+ BEGIN SELECT RAISE(ABORT, 'learning evidence edges are append-only'); END;
106
+ CREATE TRIGGER IF NOT EXISTS learning_admissions_no_update BEFORE UPDATE ON learning_evidence_admissions
107
+ BEGIN SELECT RAISE(ABORT, 'learning evidence admissions are append-only'); END;
108
+ CREATE TRIGGER IF NOT EXISTS learning_admissions_no_delete BEFORE DELETE ON learning_evidence_admissions
109
+ BEGIN SELECT RAISE(ABORT, 'learning evidence admissions are append-only'); END;
110
+ `;
111
+ export function applyMigration(db) {
112
+ db.exec(LEARNING_EVIDENCE_SCHEMA);
113
+ db.exec(`
114
+ INSERT OR IGNORE INTO learning_evidence_manifests (
115
+ id, trajectory_id, trajectory_hash, manifest_hash, task_family,
116
+ outcome, oracle_refs_json, source_kind, process_signals_json
117
+ )
118
+ SELECT
119
+ 'legacy-pattern:' || id, NULL, NULL, 'legacy-pattern:' || id,
120
+ COALESCE(NULLIF(qe_domain, ''), NULLIF(domain, ''), 'unknown'),
121
+ 'unknown', '[]', 'inferred', '{"legacy":true,"unassessed":true}'
122
+ FROM qe_patterns;
123
+
124
+ INSERT OR IGNORE INTO learning_evidence_admissions (
125
+ id, manifest_id, decision_seq, disposition, reason_codes_json,
126
+ assessor_kind, evidence_class
127
+ )
128
+ SELECT
129
+ 'legacy-admission:' || id, 'legacy-pattern:' || id, 1, 'legacy-unknown',
130
+ '["legacy-pattern-without-qualified-trajectory"]', 'inferred', 'INFERRED'
131
+ FROM qe_patterns;
132
+
133
+ INSERT OR IGNORE INTO pattern_manifest_lineage (
134
+ pattern_id, manifest_id, use_kind
135
+ )
136
+ SELECT id, 'legacy-pattern:' || id, 'legacy-context' FROM qe_patterns;
137
+ `);
138
+ }
139
+ export function isMigrationApplied(db) {
140
+ const required = [
141
+ 'learning_evidence_manifests', 'learning_evidence_segments',
142
+ 'learning_segment_edges', 'learning_evidence_admissions',
143
+ 'pattern_manifest_lineage', 'pattern_segment_lineage',
144
+ ];
145
+ const rows = db.prepare(`
146
+ SELECT name FROM sqlite_master WHERE type = 'table' AND name IN (${required.map(() => '?').join(',')})
147
+ `).all(...required);
148
+ return rows.length === required.length;
149
+ }
150
+ export function rollbackMigration(db) {
151
+ const tables = [
152
+ 'learning_evidence_manifests', 'learning_evidence_segments',
153
+ 'learning_segment_edges', 'learning_evidence_admissions',
154
+ 'pattern_manifest_lineage', 'pattern_segment_lineage',
155
+ ];
156
+ for (const table of tables) {
157
+ const exists = db.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name=?").get(table);
158
+ if (!exists)
159
+ continue;
160
+ const count = db.prepare(`SELECT COUNT(*) AS count FROM ${table}`).get().count;
161
+ if (count > 0)
162
+ throw new Error(`REFUSING rollback: ${table} contains ${count} learning evidence row(s)`);
163
+ }
164
+ db.exec(`
165
+ DROP TABLE IF EXISTS pattern_segment_lineage;
166
+ DROP TABLE IF EXISTS pattern_manifest_lineage;
167
+ DROP TABLE IF EXISTS learning_evidence_admissions;
168
+ DROP TABLE IF EXISTS learning_segment_edges;
169
+ DROP TABLE IF EXISTS learning_evidence_segments;
170
+ DROP TABLE IF EXISTS learning_evidence_manifests;
171
+ `);
172
+ }
173
+ //# sourceMappingURL=20260830_add_learning_evidence_tables.js.map
@@ -26,6 +26,8 @@ export interface MigrationAdapterConfig {
26
26
  dimensions: number;
27
27
  /** Enable fallback on RVF read failure in stage 3+ */
28
28
  enableFallback: boolean;
29
+ /** Runtime provenance for injected embedding pipelines. */
30
+ embeddingSpaceId?: string;
29
31
  }
30
32
  export interface WriteResult {
31
33
  sqliteSuccess: boolean;
@@ -14,6 +14,7 @@
14
14
  *
15
15
  * @module persistence/rvf-migration-adapter
16
16
  */
17
+ import { getActiveEmbeddingSpaceIdentity } from '../learning/real-embeddings.js';
17
18
  export const STAGE_NAMES = {
18
19
  0: 'sqlite-only',
19
20
  1: 'hybrid',
@@ -80,6 +81,12 @@ export class RvfMigrationAdapter {
80
81
  stage: this.config.stage,
81
82
  fallbackUsed: false,
82
83
  };
84
+ const hasSpaceContract = this.db
85
+ ? this.db.prepare("PRAGMA table_info('qe_pattern_embeddings')").all().some((row) => row.name === 'space_id')
86
+ : false;
87
+ const spaceId = getActiveEmbeddingSpaceIdentity()?.spaceId ?? this.config.embeddingSpaceId;
88
+ if (!hasSpaceContract || !spaceId)
89
+ return result;
83
90
  const shouldWriteSqlite = this.config.stage < 4;
84
91
  const shouldWriteRvf = this.config.stage >= 2;
85
92
  // Write to SQLite
@@ -87,12 +94,23 @@ export class RvfMigrationAdapter {
87
94
  const start = performance.now();
88
95
  try {
89
96
  const blob = Buffer.from(vector instanceof Float32Array ? vector.buffer : new Float32Array(vector).buffer);
90
- this.db.prepare(`
91
- INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, created_at)
92
- VALUES (?, ?, ?, 'all-MiniLM-L6-v2', datetime('now'))
93
- ON CONFLICT(pattern_id) DO UPDATE SET
94
- embedding = excluded.embedding, dimension = excluded.dimension, created_at = datetime('now')
95
- `).run(id, blob, vector.length);
97
+ if (hasSpaceContract) {
98
+ this.db.prepare(`
99
+ INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, space_id, created_at)
100
+ VALUES (?, ?, ?, 'all-MiniLM-L6-v2', ?, datetime('now'))
101
+ ON CONFLICT(pattern_id) DO UPDATE SET
102
+ embedding = excluded.embedding, dimension = excluded.dimension,
103
+ space_id = excluded.space_id, created_at = datetime('now')
104
+ `).run(id, blob, vector.length, spaceId);
105
+ }
106
+ else {
107
+ this.db.prepare(`
108
+ INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, created_at)
109
+ VALUES (?, ?, ?, 'all-MiniLM-L6-v2', datetime('now'))
110
+ ON CONFLICT(pattern_id) DO UPDATE SET
111
+ embedding = excluded.embedding, dimension = excluded.dimension, created_at = datetime('now')
112
+ `).run(id, blob, vector.length);
113
+ }
96
114
  result.sqliteSuccess = true;
97
115
  this.sqliteWriteLatencies.push(performance.now() - start);
98
116
  }
@@ -120,12 +138,23 @@ export class RvfMigrationAdapter {
120
138
  if (this.config.stage === 4 && !result.rvfSuccess && this.config.enableFallback && this.db) {
121
139
  try {
122
140
  const blob = Buffer.from(vector instanceof Float32Array ? vector.buffer : new Float32Array(vector).buffer);
123
- this.db.prepare(`
124
- INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, created_at)
125
- VALUES (?, ?, ?, 'all-MiniLM-L6-v2', datetime('now'))
126
- ON CONFLICT(pattern_id) DO UPDATE SET
127
- embedding = excluded.embedding, dimension = excluded.dimension, created_at = datetime('now')
128
- `).run(id, blob, vector.length);
141
+ if (hasSpaceContract) {
142
+ this.db.prepare(`
143
+ INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, space_id, created_at)
144
+ VALUES (?, ?, ?, 'all-MiniLM-L6-v2', ?, datetime('now'))
145
+ ON CONFLICT(pattern_id) DO UPDATE SET
146
+ embedding = excluded.embedding, dimension = excluded.dimension,
147
+ space_id = excluded.space_id, created_at = datetime('now')
148
+ `).run(id, blob, vector.length, spaceId);
149
+ }
150
+ else {
151
+ this.db.prepare(`
152
+ INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, created_at)
153
+ VALUES (?, ?, ?, 'all-MiniLM-L6-v2', datetime('now'))
154
+ ON CONFLICT(pattern_id) DO UPDATE SET
155
+ embedding = excluded.embedding, dimension = excluded.dimension, created_at = datetime('now')
156
+ `).run(id, blob, vector.length);
157
+ }
129
158
  result.sqliteSuccess = true;
130
159
  result.fallbackUsed = true;
131
160
  this.fallbacksUsed++;
@@ -177,6 +206,21 @@ export class RvfMigrationAdapter {
177
206
  search(query, k) {
178
207
  this.totalReads++;
179
208
  const useRvf = this.config.stage >= 3;
209
+ if (this.db) {
210
+ const hasSpaceContract = this.db.prepare("PRAGMA table_info('qe_pattern_embeddings')").all().some((row) => row.name === 'space_id');
211
+ if (!hasSpaceContract) {
212
+ return { data: null, source: useRvf ? 'rvf' : 'sqlite', latencyMs: 0, stage: this.config.stage };
213
+ }
214
+ {
215
+ const spaceId = getActiveEmbeddingSpaceIdentity()?.spaceId ?? this.config.embeddingSpaceId;
216
+ const incompatible = spaceId
217
+ ? this.db.prepare('SELECT COUNT(*) AS count FROM qe_pattern_embeddings WHERE space_id IS NULL OR space_id <> ?').get(spaceId).count
218
+ : 1;
219
+ if (incompatible > 0) {
220
+ return { data: null, source: useRvf ? 'rvf' : 'sqlite', latencyMs: 0, stage: this.config.stage };
221
+ }
222
+ }
223
+ }
180
224
  if (useRvf && this.rvfStore) {
181
225
  const start = performance.now();
182
226
  try {
@@ -11,6 +11,11 @@ import type { BillingMode, LLMProvider, LLMProviderType } from './interfaces';
11
11
  * Resolve a provider's billing mode: the instance's own `billingMode` wins,
12
12
  * else the per-type default, else `metered-api` (the safe, cap-requiring
13
13
  * assumption for an unknown provider).
14
+ *
15
+ * ADR-127: an external provider is expected to declare `billingMode` on the
16
+ * instance, which is why the instance's own value is consulted first. When it
17
+ * declares nothing it lands on `metered-api` and therefore requires a budget,
18
+ * rather than being silently treated as free.
14
19
  */
15
20
  export declare function resolveBillingMode(provider: Pick<LLMProvider, 'type' | 'billingMode'>): BillingMode;
16
21
  /** Resolve a billing mode from a bare provider type. */
@@ -6,7 +6,19 @@
6
6
  * kernel, `aqe health`) can resolve a billing mode without constructing a
7
7
  * provider, and so a provider that doesn't set `billingMode` still resolves.
8
8
  */
9
- /** Default billing mode per provider type. */
9
+ import { isBuiltinProviderType } from './interfaces.js';
10
+ import { registeredBillingDeclaration } from './provider-registry.js';
11
+ /**
12
+ * Default billing mode per built-in provider type.
13
+ *
14
+ * ADR-127: keyed on `BuiltinProviderType`, not `LLMProviderType`, for two
15
+ * reasons: adding a built-in provider must still fail the build until this map
16
+ * is updated, and a lookup by an open `LLMProviderType` must type as
17
+ * `BillingMode | undefined` so the `?? 'metered-api'` fallback below is
18
+ * actually forced rather than merely present. An external provider registered
19
+ * per ADR-127 has no entry here and therefore falls through to `metered-api` —
20
+ * the conservative, cap-requiring assumption.
21
+ */
10
22
  const BILLING_MODE_BY_TYPE = {
11
23
  claude: 'metered-api',
12
24
  'claude-code': 'subscription',
@@ -19,17 +31,29 @@ const BILLING_MODE_BY_TYPE = {
19
31
  cognitum: 'metered-capped',
20
32
  ollama: 'local',
21
33
  };
34
+ /**
35
+ * Look up the built-in default for a provider type, or `undefined` when the
36
+ * type is not one AQE ships (ADR-127: an externally registered provider).
37
+ */
38
+ function builtinBillingMode(type) {
39
+ return isBuiltinProviderType(type) ? BILLING_MODE_BY_TYPE[type] : undefined;
40
+ }
22
41
  /**
23
42
  * Resolve a provider's billing mode: the instance's own `billingMode` wins,
24
43
  * else the per-type default, else `metered-api` (the safe, cap-requiring
25
44
  * assumption for an unknown provider).
45
+ *
46
+ * ADR-127: an external provider is expected to declare `billingMode` on the
47
+ * instance, which is why the instance's own value is consulted first. When it
48
+ * declares nothing it lands on `metered-api` and therefore requires a budget,
49
+ * rather than being silently treated as free.
26
50
  */
27
51
  export function resolveBillingMode(provider) {
28
- return provider.billingMode ?? BILLING_MODE_BY_TYPE[provider.type] ?? 'metered-api';
52
+ return provider.billingMode ?? builtinBillingMode(provider.type) ?? 'metered-api';
29
53
  }
30
54
  /** Resolve a billing mode from a bare provider type. */
31
55
  export function billingModeForType(type) {
32
- return BILLING_MODE_BY_TYPE[type] ?? 'metered-api';
56
+ return builtinBillingMode(type) ?? 'metered-api';
33
57
  }
34
58
  /**
35
59
  * One-line notice shown at startup / in `aqe health` describing how the
@@ -47,6 +71,21 @@ export function billingNotice(provider, mode) {
47
71
  return (`ℹ️ LLM provider "${provider}" bills per-token but enforces a server-side ` +
48
72
  `hard spend cap; it will pause at the cap rather than overspend.`);
49
73
  case 'subscription': {
74
+ // ADR-127: only a built-in may be named as drawing on a specific
75
+ // vendor's plan. An external provider that declares `subscription` is
76
+ // asserting something AQE cannot verify, and naming Claude Code or
77
+ // ChatGPT here would attribute the spend to a vendor that is not
78
+ // serving the work — the exact misrepresentation issue #628 refused to
79
+ // perform. Say what was declared, and say who declared it.
80
+ const declaration = registeredBillingDeclaration(provider);
81
+ if (declaration) {
82
+ const by = declaration.detail
83
+ ? `declared by ${declaration.detail}`
84
+ : `declared by ${declaration.source === 'config' ? 'config' : 'the registering caller'}`;
85
+ return (`ℹ️ LLM provider "${provider}" is an external provider that reports ` +
86
+ `subscription billing (${by}) — AQE does not verify this. It draws on ` +
87
+ `that host's own plan, not on your Claude Code or ChatGPT subscription.`);
88
+ }
50
89
  const sub = provider === 'codex' ? 'ChatGPT' : 'Claude Code';
51
90
  return (`ℹ️ LLM provider "${provider}" runs on your ${sub} subscription ` +
52
91
  `(shared plan usage). Worst case is hitting your plan's rate limit and pausing — ` +
@@ -41,11 +41,14 @@
41
41
  * const costs = manager.getCostSummary('day');
42
42
  * ```
43
43
  */
44
- export { type LLMProviderType, type MessageRole, type Message, type TokenUsage, type CostInfo, type LLMResponse, type EmbeddingResponse, type CompletionResponse, type LLMConfig, type ClaudeConfig, type OpenAIConfig, type OllamaConfig, type OpenRouterConfig, type GeminiConfig, type AzureOpenAIConfig, type BedrockConfig, type ProviderManagerConfig, type GenerateOptions, type EmbedOptions, type CompleteOptions, type LLMProvider, type HealthCheckResult, type CircuitBreakerState, type CircuitBreakerConfig, type CircuitBreakerStats, type CostPeriod, type CostSummary, type CostAlert, type CacheEntry, type LLMCacheConfig, type LLMCacheStats, type ProviderSelection, type ProviderMetrics, type LLMErrorCode, type LLMError, createLLMError, isLLMError, } from './interfaces';
44
+ export { type LLMProviderType, type MessageRole, type Message, type TokenUsage, type CostInfo, type LLMResponse, type EmbeddingResponse, type CompletionResponse, type LLMConfig, type ClaudeConfig, type OpenAIConfig, type OllamaConfig, type OpenRouterConfig, type GeminiConfig, type AzureOpenAIConfig, type BedrockConfig, type ProviderManagerConfig, type GenerateOptions, type EmbedOptions, type CompleteOptions, type BuiltinProviderType, BUILTIN_PROVIDER_TYPES, isBuiltinProviderType, type LLMProvider, type HealthCheckResult, type CircuitBreakerState, type CircuitBreakerConfig, type CircuitBreakerStats, type CostPeriod, type CostSummary, type CostAlert, type CacheEntry, type LLMCacheConfig, type LLMCacheStats, type ProviderSelection, type ProviderMetrics, type LLMErrorCode, type LLMError, createLLMError, isLLMError, } from './interfaces';
45
45
  export { ClaudeProvider, DEFAULT_CLAUDE_CONFIG, OpenAIProvider, DEFAULT_OPENAI_CONFIG, OllamaProvider, DEFAULT_OLLAMA_CONFIG, OpenRouterProvider, DEFAULT_OPENROUTER_CONFIG, GeminiProvider, DEFAULT_GEMINI_CONFIG, AzureOpenAIProvider, DEFAULT_AZURE_OPENAI_CONFIG, BedrockProvider, DEFAULT_BEDROCK_CONFIG, } from './providers';
46
46
  export { CircuitBreaker, CircuitBreakerManager, DEFAULT_CIRCUIT_BREAKER_CONFIG, } from './circuit-breaker';
47
47
  export { LLMCache, LLMResponseCache, DEFAULT_CACHE_CONFIG, type CacheableResponse, } from './cache';
48
48
  export { CostTracker, MODEL_PRICING, getGlobalCostTracker, resetGlobalCostTracker, } from './cost-tracker';
49
+ export { registerProvider, tryRegisterProvider, unregisterProvider, resetProviderRegistry, isRegisteredProvider, getRegisteredProvider, listRegisteredProviders, registeredProviderTypes, createRegisteredProvider, registeredBillingDeclaration, validateProviderType, validateProviderInstance, type ProviderFactory, type ProviderRegistrationOptions, type ProviderRegistrationSource, type RegisteredProvider, } from './provider-registry';
50
+ export { ExternalCliProvider, validateExternalCliConfig, resolvesOnPath, DEFAULT_EXTERNAL_CLI_TIMEOUT_MS, DEFAULT_EXTERNAL_CLI_CONCURRENCY, EXTERNAL_CLI_DEFAULT_MODEL, type ExternalCliProviderConfig, } from './providers/external-cli';
51
+ export { registerExternalProviders, sanitizeExternalProviders, type ExternalProviderRegistrationResult, } from './router/external-provider-config';
49
52
  export { ProviderManager, createProviderManager, createQEProviderManager, DEFAULT_PROVIDER_MANAGER_CONFIG, } from './provider-manager';
50
53
  export { mapModelId, normalizeModelId, getCanonicalName, getModelFamily, getModelTier, isModelAvailableOnProvider, getSupportedProviders, listCanonicalModels, listModelsByProvider, listModelsByFamily, listModelsByTier, getModelMapping, MODEL_MAPPINGS, type ProviderType, type ModelMapping, } from './model-mapping';
51
54
  export { getModelCapabilities, getModelCost, getModelInfo, listModels, findModelsByCapability, findModelsByCost, findCheapestModel, findBestModelInBudget, getRecommendedModels, getDeprecationStatus, estimateRequestCost, compareModels, MODEL_REGISTRY, type ModelCapabilities, type ModelCostInfo, type ModelInfo, } from './model-registry';
@@ -42,7 +42,7 @@
42
42
  * ```
43
43
  */
44
44
  // Core interfaces
45
- export { createLLMError, isLLMError, } from './interfaces.js';
45
+ export { BUILTIN_PROVIDER_TYPES, isBuiltinProviderType, createLLMError, isLLMError, } from './interfaces.js';
46
46
  // Providers (ADR-043: All 7 provider types)
47
47
  export { ClaudeProvider, DEFAULT_CLAUDE_CONFIG, OpenAIProvider, DEFAULT_OPENAI_CONFIG, OllamaProvider, DEFAULT_OLLAMA_CONFIG,
48
48
  // ADR-043 New Providers
@@ -53,6 +53,10 @@ export { CircuitBreaker, CircuitBreakerManager, DEFAULT_CIRCUIT_BREAKER_CONFIG,
53
53
  export { LLMCache, LLMResponseCache, DEFAULT_CACHE_CONFIG, } from './cache.js';
54
54
  // Cost tracker
55
55
  export { CostTracker, MODEL_PRICING, getGlobalCostTracker, resetGlobalCostTracker, } from './cost-tracker.js';
56
+ // External provider registration (ADR-127 / issue #628)
57
+ export { registerProvider, tryRegisterProvider, unregisterProvider, resetProviderRegistry, isRegisteredProvider, getRegisteredProvider, listRegisteredProviders, registeredProviderTypes, createRegisteredProvider, registeredBillingDeclaration, validateProviderType, validateProviderInstance, } from './provider-registry.js';
58
+ export { ExternalCliProvider, validateExternalCliConfig, resolvesOnPath, DEFAULT_EXTERNAL_CLI_TIMEOUT_MS, DEFAULT_EXTERNAL_CLI_CONCURRENCY, EXTERNAL_CLI_DEFAULT_MODEL, } from './providers/external-cli.js';
59
+ export { registerExternalProviders, sanitizeExternalProviders, } from './router/external-provider-config.js';
56
60
  // Provider manager
57
61
  export { ProviderManager, createProviderManager, createQEProviderManager, DEFAULT_PROVIDER_MANAGER_CONFIG, } from './provider-manager.js';
58
62
  // Model mapping (ADR-043)
@@ -9,9 +9,32 @@
9
9
  * - Response caching
10
10
  */
11
11
  /**
12
- * Supported LLM provider types
12
+ * Provider types AQE ships built in. Exhaustive — safe to key a `Record` on.
13
+ *
14
+ * ADR-127: this is the closed half of the provider identity space. Anything
15
+ * that must be exhaustively handled (billing defaults, env-key maps, prompt
16
+ * translation strategies) keys on THIS type, not on `LLMProviderType`.
13
17
  */
14
- export type LLMProviderType = 'claude' | 'claude-code' | 'codex' | 'openai' | 'ollama' | 'openrouter' | 'bedrock' | 'azure-openai' | 'gemini' | 'cognitum';
18
+ export type BuiltinProviderType = 'claude' | 'claude-code' | 'codex' | 'openai' | 'ollama' | 'openrouter' | 'bedrock' | 'azure-openai' | 'gemini' | 'cognitum';
19
+ /**
20
+ * Supported LLM provider types.
21
+ *
22
+ * ADR-127: open. A downstream integrator may register an additional provider
23
+ * identity (via `registerProvider()` or an `externalProviders` entry in
24
+ * `.agentic-qe/llm-config.json`) so `AQE_LLM_PROVIDER=<their-host>` resolves to
25
+ * a provider they supply, instead of forking this union or misrepresenting
26
+ * their host as an unrelated vendor (issue #628).
27
+ *
28
+ * The `(string & {})` arm keeps editor autocomplete on the built-ins while
29
+ * admitting registered identities. Because this type is no longer exhaustive,
30
+ * a `Record` keyed on it can no longer be checked by the compiler — use
31
+ * `BuiltinProviderType` for those and read through a fallback.
32
+ */
33
+ export type LLMProviderType = BuiltinProviderType | (string & {});
34
+ /** The built-in provider types, as a runtime array. ADR-127. */
35
+ export declare const BUILTIN_PROVIDER_TYPES: readonly BuiltinProviderType[];
36
+ /** Type guard: is this one of the provider types AQE ships? */
37
+ export declare function isBuiltinProviderType(type: string): type is BuiltinProviderType;
15
38
  /**
16
39
  * Message role in a conversation
17
40
  */
@@ -629,7 +652,15 @@ export interface ProviderMetrics {
629
652
  /**
630
653
  * LLM-specific error codes
631
654
  */
632
- export type LLMErrorCode = 'API_KEY_INVALID' | 'API_KEY_MISSING' | 'RATE_LIMITED' | 'CONTEXT_LENGTH_EXCEEDED' | 'CONTENT_FILTERED' | 'MODEL_NOT_FOUND' | 'PROVIDER_UNAVAILABLE' | 'CIRCUIT_OPEN' | 'TIMEOUT' | 'NETWORK_ERROR' | 'COST_LIMIT_EXCEEDED' | 'UNKNOWN';
655
+ export type LLMErrorCode = 'API_KEY_INVALID' | 'API_KEY_MISSING' | 'RATE_LIMITED' | 'CONTEXT_LENGTH_EXCEEDED' | 'CONTENT_FILTERED' | 'MODEL_NOT_FOUND' | 'PROVIDER_UNAVAILABLE' | 'CIRCUIT_OPEN' | 'TIMEOUT' | 'NETWORK_ERROR' | 'COST_LIMIT_EXCEEDED'
656
+ /** ADR-127: a provider registration or its produced instance was malformed. */
657
+ | 'INVALID_REGISTRATION'
658
+ /**
659
+ * ADR-127: this provider has no embeddings endpoint. Distinct from a
660
+ * failure — the caller should fall back to another provider rather than
661
+ * retry, and must never receive a fabricated vector.
662
+ */
663
+ | 'EMBEDDING_UNSUPPORTED' | 'UNKNOWN';
633
664
  /**
634
665
  * LLM error with rich context
635
666
  */
@@ -8,6 +8,23 @@
8
8
  * - Circuit breaker support for resilience
9
9
  * - Response caching
10
10
  */
11
+ /** The built-in provider types, as a runtime array. ADR-127. */
12
+ export const BUILTIN_PROVIDER_TYPES = [
13
+ 'claude',
14
+ 'claude-code',
15
+ 'codex',
16
+ 'openai',
17
+ 'ollama',
18
+ 'openrouter',
19
+ 'bedrock',
20
+ 'azure-openai',
21
+ 'gemini',
22
+ 'cognitum',
23
+ ];
24
+ /** Type guard: is this one of the provider types AQE ships? */
25
+ export function isBuiltinProviderType(type) {
26
+ return BUILTIN_PROVIDER_TYPES.includes(type);
27
+ }
11
28
  /**
12
29
  * Create an LLM error
13
30
  */
@@ -22,6 +22,7 @@
22
22
  import { ProviderManager } from './provider-manager.js';
23
23
  import { HybridRouter } from './router/hybrid-router.js';
24
24
  import type { RouterConfig, ExtendedProviderType } from './router/types.js';
25
+ import type { ProviderManagerConfig } from './interfaces.js';
25
26
  /**
26
27
  * Options accepted by createLLMRouterService(). All optional — defaults
27
28
  * produce a router suitable for kernel boot when at least one provider
@@ -39,6 +40,8 @@ export interface LLMRouterServiceOptions {
39
40
  * When supplied, config loading and provider construction is skipped.
40
41
  */
41
42
  providerManager?: ProviderManager;
43
+ /** Ignore project-controlled network endpoints before attaching ambient credentials. */
44
+ allowProjectProviderEndpoints?: boolean;
42
45
  }
43
46
  /**
44
47
  * Result of building a router. Carries the router plus the resolved
@@ -74,4 +77,9 @@ export declare function pickPrimaryAndFallbacks(config: RouterConfig, enabled: E
74
77
  primary: ExtendedProviderType;
75
78
  fallbacks: ExtendedProviderType[];
76
79
  };
80
+ /**
81
+ * Extract only the provider configs for the enabled set, so
82
+ * ProviderManager doesn't try to construct providers we don't need.
83
+ */
84
+ export declare function extractProviderConfigs(config: RouterConfig, enabled: ExtendedProviderType[], allowProjectProviderEndpoints?: boolean): ProviderManagerConfig['providers'];
77
85
  //# sourceMappingURL=llm-router-service.d.ts.map
@@ -21,6 +21,7 @@
21
21
  */
22
22
  import { ProviderManager } from './provider-manager.js';
23
23
  import { HybridRouter } from './router/hybrid-router.js';
24
+ import { ALL_PROVIDER_TYPES } from './router/types.js';
24
25
  import { loadRouterConfig, shouldEnableRouter, detectAvailableProvidersFromEnv, } from './router/config-store.js';
25
26
  import { setAgentProviderOverrides, createOverrideRoutingRules, } from './router/agent-router-config.js';
26
27
  import { DEFAULT_QE_ROUTING_RULES } from './router/routing-rules.js';
@@ -131,7 +132,7 @@ export async function createLLMRouterService(options = {}) {
131
132
  const providerManagerConfig = {
132
133
  primary: primary,
133
134
  fallbacks: fallbacks,
134
- providers: extractProviderConfigs(config, enabled),
135
+ providers: extractProviderConfigs(config, enabled, options.allowProjectProviderEndpoints ?? true),
135
136
  loadBalancing: 'round-robin',
136
137
  global: { enableCostTracking: true, enableMetrics: true },
137
138
  };
@@ -175,6 +176,14 @@ export function pickEnabledProviders(config, env = process.env) {
175
176
  for (const p of FALLBACK_PRIORITY) {
176
177
  consider(p);
177
178
  }
179
+ // Finally, every AQE-shipped provider. The fixed priority list is an ordering
180
+ // policy, not an allowlist: treating it as one made enabled subscription
181
+ // hosts (`codex`, `claude-code`) unreachable unless repeated in fallbackChain.
182
+ // Do not implicitly activate project-declared external commands here: a
183
+ // checkout must not gain code execution merely through `enabled: true`.
184
+ for (const p of ALL_PROVIDER_TYPES) {
185
+ consider(p);
186
+ }
178
187
  return result;
179
188
  }
180
189
  /**
@@ -208,12 +217,21 @@ export function pickPrimaryAndFallbacks(config, enabled) {
208
217
  * Extract only the provider configs for the enabled set, so
209
218
  * ProviderManager doesn't try to construct providers we don't need.
210
219
  */
211
- function extractProviderConfigs(config, enabled) {
220
+ export function extractProviderConfigs(config, enabled, allowProjectProviderEndpoints = true) {
212
221
  const out = {};
213
222
  for (const p of enabled) {
214
223
  const cfg = config.providers?.[p];
215
224
  if (cfg) {
216
- out[p] = cfg;
225
+ // The kernel reads project-local config. Never let a checkout replace a
226
+ // trusted subscription CLI with an arbitrary executable. Callers that
227
+ // intentionally need a custom binary can still construct ProviderManager
228
+ // directly with an explicit config.
229
+ const sanitized = { ...cfg };
230
+ if (p === 'codex' || p === 'claude-code')
231
+ delete sanitized.binaryPath;
232
+ if (!allowProjectProviderEndpoints)
233
+ delete sanitized.baseUrl;
234
+ out[p] = sanitized;
217
235
  }
218
236
  }
219
237
  return out;
@@ -27,6 +27,7 @@ import { GeminiProvider } from './providers/gemini.js';
27
27
  import { AzureOpenAIProvider } from './providers/azure-openai.js';
28
28
  import { BedrockProvider } from './providers/bedrock.js';
29
29
  import { toError } from '../error-utils.js';
30
+ import { createRegisteredProvider } from './provider-registry.js';
30
31
  /**
31
32
  * Default provider manager configuration
32
33
  */
@@ -441,7 +442,13 @@ export class ProviderManager {
441
442
  case 'bedrock':
442
443
  return new BedrockProvider(this.config.providers.bedrock);
443
444
  default:
444
- throw new Error(`Unknown provider type: ${type}`);
445
+ // ADR-127: not a built-in. Fall through to the external provider
446
+ // registry, which throws PROVIDER_UNAVAILABLE when nothing is
447
+ // registered under this type — preserving the previous behavior for a
448
+ // genuinely unknown type while letting a downstream integrator supply
449
+ // one. Built-in cases are matched first, so a registration can never
450
+ // shadow a provider AQE ships.
451
+ return createRegisteredProvider(type);
445
452
  }
446
453
  }
447
454
  /**