agentic-qe 3.15.15 → 3.15.17

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 (526) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +168 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/audit/witness-chain.d.ts +7 -0
  5. package/dist/audit/witness-chain.js +10 -0
  6. package/dist/cli/bundle.js +6 -6
  7. package/dist/cli/chunks/adapter-OMILP6KH.js +2 -0
  8. package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-6BUOFQZA.js} +2 -2
  9. package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-HPDK3JI3.js} +2 -2
  10. package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-5QKUTWK5.js} +2 -2
  11. package/dist/cli/chunks/aqe-learning-engine-OXH5CCOS.js +2 -0
  12. package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-7OKPMNHD.js} +2 -2
  13. package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-HZ35LESR.js} +4 -4
  14. package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-XI575SVK.js} +3 -3
  15. package/dist/cli/chunks/base-MAK2BLTG.js +2 -0
  16. package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-YO5X7ZJS.js} +2 -2
  17. package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-GCQZFZGQ.js} +3 -3
  18. package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-N6G44UU2.js} +2 -2
  19. package/dist/cli/chunks/{browser-6LACARWE.js → browser-EVKPTLOI.js} +2 -2
  20. package/dist/cli/chunks/browser-workflow-IR3VF2TL.js +2 -0
  21. package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-2EQK7B5L.js} +2 -2
  22. package/dist/cli/chunks/chunk-2PCEMDIX.js +757 -0
  23. package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-2UUZCQSD.js} +7 -7
  24. package/dist/cli/chunks/chunk-2YWYW7NU.js +21 -0
  25. package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-45223KK6.js} +6 -6
  26. package/dist/cli/chunks/chunk-4EJLHNER.js +12 -0
  27. package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-4L6WX5KC.js} +1 -1
  28. package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-4NKZU2JZ.js} +2 -2
  29. package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-4UKTIQDT.js} +2 -2
  30. package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-4YM45Z5B.js} +1 -1
  31. package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-5FSPELOG.js} +2 -2
  32. package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-5WATBVU6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-5WYZVSL2.js} +1 -1
  34. package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-6LSZCEW2.js} +1 -1
  35. package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-6V6BD6PH.js} +1 -1
  36. package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-74MDUIAZ.js} +1 -1
  37. package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-776K4ZLE.js} +2 -2
  38. package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-7BSOO3CY.js} +2 -2
  39. package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-7SNSI4VY.js} +1 -1
  40. package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-A4BVDYIL.js} +1 -1
  41. package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-AGCS5GSO.js} +2 -2
  42. package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-AVHYJ3XP.js} +2 -2
  43. package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-BE7ZHM34.js} +2 -2
  44. package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-BHQ2DLJU.js} +1 -1
  45. package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-BKHEQIRZ.js} +2 -2
  46. package/dist/cli/chunks/{chunk-G242G224.js → chunk-BSIWI4ES.js} +2 -2
  47. package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-C7QLLMYI.js} +1 -1
  48. package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-CMN7PU2H.js} +2 -2
  49. package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-COTQ44YO.js} +2 -2
  50. package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-CQER6IJ5.js} +1 -1
  51. package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-CVPXHDQU.js} +1 -1
  52. package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-CVYPMGUM.js} +2 -2
  53. package/dist/cli/chunks/chunk-CXCMATZ6.js +3 -0
  54. package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-D75GLKEL.js} +2 -2
  55. package/dist/cli/chunks/chunk-DCDSN67A.js +2 -0
  56. package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-DHKSPOUQ.js} +2 -2
  57. package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-DJDVD6RM.js} +2 -2
  58. package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-DNVRTJKB.js} +2 -2
  59. package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-DS5IFRY6.js} +2 -2
  60. package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-E7XIMOKW.js} +2 -2
  61. package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-ECKHDHR2.js} +2 -2
  62. package/dist/cli/chunks/chunk-EPVPXHL7.js +2 -0
  63. package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-ERYADKMZ.js} +4 -4
  64. package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-EUWG2JG4.js} +2 -2
  65. package/dist/cli/chunks/chunk-FAQ24UHB.js +29 -0
  66. package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-FBBPRVNF.js} +2 -2
  67. package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-FBSBXCZS.js} +2 -2
  68. package/dist/cli/chunks/chunk-G2X3OLMN.js +153 -0
  69. package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-GG7PMTHD.js} +1 -1
  70. package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-GN6OE3JT.js} +1 -1
  71. package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-GPPTRKEM.js} +2 -2
  72. package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-H2LHWZRE.js} +2 -2
  73. package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-HAQJFUAQ.js} +2 -2
  74. package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-HD6W6PHV.js} +2 -2
  75. package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-HFZD5KLR.js} +1 -1
  76. package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-HRUHHHVR.js} +2 -2
  77. package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-HVT7RMGV.js} +1 -1
  78. package/dist/cli/chunks/chunk-HWQPMUSN.js +2 -0
  79. package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-HZ5O7G2P.js} +1 -1
  80. package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-IHQGNDMX.js} +2 -2
  81. package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-IJSROBM6.js} +18 -18
  82. package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-IJZFJPHS.js} +2 -2
  83. package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-IKB3M7OF.js} +1 -1
  84. package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-INI3Q4CN.js} +1 -1
  85. package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-IOWEBPXJ.js} +2 -2
  86. package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-IQL6XRF5.js} +2 -2
  87. package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-IRHXGCQR.js} +2 -2
  88. package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-J3QFJI2Y.js} +6 -6
  89. package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-J6QRNQJF.js} +11 -11
  90. package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-J7Q5TXFZ.js} +2 -2
  91. package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-JHKKIJT2.js} +2 -2
  92. package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-JI33PMPZ.js} +1 -1
  93. package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-JRIJM4LE.js} +3 -3
  94. package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-JVWZAE2H.js} +2 -2
  95. package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-K7WAI662.js} +1 -1
  96. package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-KB34MTFZ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-KPIPVSIP.js} +2 -2
  98. package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-KR2TAAF6.js} +1 -1
  99. package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-KT2QCXO6.js} +2 -2
  100. package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-KTORRIX3.js} +2 -2
  101. package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-LCWEQRZI.js} +2 -2
  102. package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-LG5PPJT7.js} +1 -1
  103. package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-LIF6UWHV.js} +2 -2
  104. package/dist/cli/chunks/chunk-LN7NKE3N.js +27 -0
  105. package/dist/cli/chunks/chunk-LOLSZG5J.js +2 -0
  106. package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-LOMT4UC2.js} +2 -2
  107. package/dist/cli/chunks/chunk-LRKLATSH.js +2 -0
  108. package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-LRY6UIRI.js} +2 -2
  109. package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-LV7UIK4Q.js} +2 -2
  110. package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-M2YI5YUR.js} +2 -2
  111. package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-MCXW3DKE.js} +2 -2
  112. package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-MGZ6XZHU.js} +1 -1
  113. package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-MLMD3I75.js} +1 -1
  114. package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-MVVVGQJ6.js} +2 -2
  115. package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-ND72UDVH.js} +2 -2
  116. package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-NE3LRUNC.js} +4 -4
  117. package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-NKUHMA4T.js} +2 -2
  118. package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-NQFDJ6BT.js} +1 -1
  119. package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-NZJVDOUN.js} +31 -31
  120. package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-O7VJ3VKD.js} +2 -2
  121. package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-OJIUIEI4.js} +1 -1
  122. package/dist/cli/chunks/chunk-OO2M2QUV.js +12 -0
  123. package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-ORQ2YBRR.js} +2 -2
  124. package/dist/cli/chunks/chunk-OWIQR6N2.js +4 -0
  125. package/dist/cli/chunks/chunk-OWIZBZLN.js +14 -0
  126. package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-P3D7SEHW.js} +1 -1
  127. package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-P4OB6WDJ.js} +1 -1
  128. package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PCL5JRKN.js} +2 -2
  129. package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-PIWGKGWP.js} +2 -2
  130. package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-PK34KJH7.js} +2 -2
  131. package/dist/cli/chunks/chunk-POPSZDI2.js +65 -0
  132. package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-Q6F3DYZN.js} +2 -2
  133. package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-QJSSUBO3.js} +2 -2
  134. package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-QN7HP2UW.js} +235 -173
  135. package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-QSQNXBD2.js} +2 -2
  136. package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-QTQDX4TZ.js} +33 -33
  137. package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-R3KBOQ3O.js} +2 -2
  138. package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-REY52O7J.js} +1 -1
  139. package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-RKCN4B26.js} +2 -2
  140. package/dist/cli/chunks/chunk-S3DT5TPR.js +14 -0
  141. package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-S3TBOKAZ.js} +22 -22
  142. package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-SAEECT23.js} +2 -2
  143. package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-SAZ4PJBR.js} +2 -2
  144. package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-SFITYZLV.js} +2 -2
  145. package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-SRBCBVSI.js} +2 -2
  146. package/dist/cli/chunks/chunk-SUAZ5Z47.js +63 -0
  147. package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-TDZ6N43D.js} +2 -2
  148. package/dist/cli/chunks/chunk-TIVKDIF7.js +2 -0
  149. package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-TM75GAXG.js} +2 -2
  150. package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-TWBZONKT.js} +2 -2
  151. package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-U4S74IIZ.js} +1 -1
  152. package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-U5SMBJ6F.js} +2 -2
  153. package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-UHJVZEQA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-UOVCTK5L.js} +2 -2
  155. package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-VDEKVIP5.js} +2 -2
  156. package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-VITV7AEC.js} +2 -2
  157. package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-VKREKVFI.js} +2 -2
  158. package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-VLTDW7XJ.js} +2 -2
  159. package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-VQFV2IPV.js} +1 -1
  160. package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-VYPVU3JF.js} +2 -2
  161. package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-WAOEQA3W.js} +2 -2
  162. package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-WBDWHHKP.js} +2 -2
  163. package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-WX4PO65Q.js} +2 -2
  164. package/dist/cli/chunks/chunk-X2DWHGCC.js +6 -0
  165. package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-X5QD76IU.js} +2 -2
  166. package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-XBTGEYED.js} +2 -2
  167. package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-XEMCHGAJ.js} +2 -2
  168. package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-XEYFZLIT.js} +1 -1
  169. package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-XFTX3KLE.js} +1 -1
  170. package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-XPTCQKVE.js} +1 -1
  171. package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-YAJOBZE5.js} +2 -2
  172. package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-YCVLKU6H.js} +2 -2
  173. package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-YD2C6EPN.js} +2 -2
  174. package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-YKRLUTK7.js} +2 -2
  175. package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-YMUY3TES.js} +6 -6
  176. package/dist/cli/chunks/chunk-YR5QBUHZ.js +6 -0
  177. package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-Z7SKUC6P.js} +1 -1
  178. package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-ZAQMRFBB.js} +2 -2
  179. package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-ZC3KDNJW.js} +3 -3
  180. package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-ZGV7L4MW.js} +1 -1
  181. package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-ZN35XSKF.js} +2 -2
  182. package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-ZNXM6WVL.js} +2 -2
  183. package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-ZP5AWQRO.js} +2 -2
  184. package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-ZTP3DQ5M.js} +1 -1
  185. package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-ZVMSSCTH.js} +2 -2
  186. package/dist/cli/chunks/chunk-ZWUF27P4.js +2 -0
  187. package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-3RTTTS2D.js} +2 -2
  188. package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-XRUR3I4K.js} +2 -2
  189. package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-E5IAMU2U.js} +2 -2
  190. package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-SHR2P44P.js} +2 -2
  191. package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-ZDDILFMF.js} +2 -2
  192. package/dist/cli/chunks/client-NO5FOWT4.js +2 -0
  193. package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-BGYVUM6G.js} +2 -2
  194. package/dist/cli/chunks/{code-WY3GJXHX.js → code-PJ4MC3MC.js} +4 -3
  195. package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-IW2P22YG.js} +2 -2
  196. package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-A7WZ6OGL.js} +2 -2
  197. package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-KS23WD5J.js} +2 -2
  198. package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-Q7GLSR2E.js} +2 -2
  199. package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-SK55BFW2.js} +2 -2
  200. package/dist/cli/chunks/copilot-installer-3N5J3WTM.js +3 -0
  201. package/dist/cli/chunks/core-handlers-JNAZPXE2.js +2 -0
  202. package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-NENVSO4A.js} +2 -2
  203. package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-5L7UQWDH.js} +3 -3
  204. package/dist/cli/chunks/cross-domain-router-HEBM767Z.js +2 -0
  205. package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-XXBO2ZE6.js} +2 -2
  206. package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-CDCQU3LR.js} +3 -3
  207. package/dist/cli/chunks/daemon-JEBJGEUK.js +18 -0
  208. package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-HOMMF7FA.js} +2 -2
  209. package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-FXCOUG6X.js} +2 -2
  210. package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-GXQ7FMTY.js} +2 -2
  211. package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-TI3JBAPC.js} +2 -2
  212. package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-R7LTUM32.js} +2 -2
  213. package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-LBIAFHIQ.js} +2 -2
  214. package/dist/cli/chunks/dream-GQDCEJMS.js +2 -0
  215. package/dist/cli/chunks/embed-and-insert-pattern-33KLHDD5.js +3 -0
  216. package/dist/cli/chunks/embedding-space-HHLWTBF5.js +2 -0
  217. package/dist/cli/chunks/{eval-OQELIWJK.js → eval-KDOZMAXJ.js} +2 -2
  218. package/dist/cli/chunks/experience-capture-middleware-X45PECQN.js +40 -0
  219. package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-462V6UUB.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-G66OT3AS.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-NIRQ4YDM.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-33USPLB5.js +2 -0
  223. package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-PXWGB7CU.js} +3 -3
  224. package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-7MUW3M5M.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-5237PB35.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-LIXLC5IH.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-62D5UH27.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-GSGUMQQC.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-OSQPW7JP.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-GX6WG2GB.js} +2 -2
  231. package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-GUWHL7VC.js} +23 -22
  232. package/dist/cli/chunks/hybrid-backend-FRWP4BOY.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-SRWLLCU3.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-AVOPRHHO.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-7KF3AQXV.js +2 -0
  236. package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-P4N6EVZS.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-LRGWOJMD.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-XWWAXY25.js +2 -0
  239. package/dist/cli/chunks/kernel-ZEJPNDBW.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-7R2EPOQ6.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-QNM7DPOB.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-RRZQS7KY.js +2 -0
  243. package/dist/cli/chunks/{learning-FZTD72CF.js → learning-7OIZBPXZ.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-SIDXES23.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-3OSW67LC.js +2 -0
  246. package/dist/cli/chunks/{load-YKTPOYBE.js → load-EI2E2C3S.js} +2 -2
  247. package/dist/cli/chunks/load-test-7TRIH2WJ.js +2 -0
  248. package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-IOE5WOCS.js} +2 -2
  249. package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DLYGJAP7.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-G7ZW6Q2B.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-TPF3KCO5.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-WHH4YCHM.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-63FDZAMS.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-3LA776KK.js} +5 -5
  255. package/dist/cli/chunks/pattern-null-store-OU3ZC3NR.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-NW54QUGI.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-P3TYX6J6.js} +2 -2
  258. package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-FNA2WLI6.js} +2 -2
  259. package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-NJS7BC2S.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-NIAVL2OT.js} +2 -2
  261. package/dist/cli/chunks/project-root-GMOFJEKD.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-AD345XRO.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-JU5C4JHY.js} +2 -2
  264. package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-35VOSLYP.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-NLTP26RC.js +2 -0
  266. package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-ET74X7HN.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-FEDQISNB.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-2TB4FWS6.js +2 -0
  269. package/dist/cli/chunks/real-embeddings-II6CXTCI.js +2 -0
  270. package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-DTBPYCEB.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-LYQEMR4J.js} +2 -2
  272. package/dist/cli/chunks/router-PLM3MWME.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-I7VOX2HU.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-DJOJFPII.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-VXYGJDPW.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-GQZHFWO2.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-3TVKBCAM.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-coordinator-XUHKLMT6.js +2 -0
  279. package/dist/cli/chunks/rvf-native-adapter-5GUTYOWS.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-GA2ZYOEG.js} +2 -2
  281. package/dist/cli/chunks/safe-db-RZPQGLGQ.js +2 -0
  282. package/dist/cli/chunks/schedule-G7JMQDUX.js +2 -0
  283. package/dist/cli/chunks/scheduler-4SEGPCKD.js +2 -0
  284. package/dist/cli/chunks/{security-A3IMVLFM.js → security-MM6YOECX.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-6AHPA3V5.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-EYAVY2GZ.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-IVE4SQXR.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-A3PLB4CZ.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-OSSFAP4Z.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-PGY5XUNO.js} +2 -2
  291. package/dist/cli/chunks/{sync-NTUR53PI.js → sync-CWEHYGNN.js} +2 -2
  292. package/dist/cli/chunks/sync-PM6D7EQF.js +2 -0
  293. package/dist/cli/chunks/task-handler-LHMQ75W4.js +64 -0
  294. package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-S2TX5FTR.js} +4 -4
  295. package/dist/cli/chunks/test-4EGZZ6NJ.js +34 -0
  296. package/dist/cli/chunks/test-runner-process-72YACW6M.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-YJQHH3XE.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-DJNETMVW.js +2 -0
  299. package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-WPNOJR6H.js} +2 -2
  300. package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-4MRPXCPU.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-UVWSDXFR.js +2 -0
  302. package/dist/cli/chunks/{types-4AOKZYOX.js → types-6P5FB4EB.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-2VMGSGQL.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-3KULVD3N.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-QCSLU2SV.js +2 -0
  306. package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-4ICTN63Y.js} +2 -2
  307. package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-HQF5GZ7L.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-45JYG7VW.js} +2 -2
  309. package/dist/cli/chunks/visual-security-ZYP2KPH7.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-UOTWZLNH.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-WDWSBXGN.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-5QRT7EMX.js +2 -0
  313. package/dist/cli/chunks/witness-chain-DOYMNPC7.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-CUF2AFQB.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-JB42X62J.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-LXXO6L2G.js} +2 -2
  317. package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-6ARK47NF.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-RYDDWIXN.js +2 -0
  319. package/dist/cli/chunks/wrappers-CYQBOMPL.js +2 -0
  320. package/dist/cli/commands/code.js +4 -0
  321. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  322. package/dist/cli/commands/test.js +26 -4
  323. package/dist/cli/handlers/task-handler.d.ts +5 -0
  324. package/dist/cli/handlers/task-handler.js +21 -1
  325. package/dist/cli/utils/task-result.d.ts +11 -0
  326. package/dist/cli/utils/task-result.js +39 -0
  327. package/dist/coordination/handlers/test-execution-handlers.js +137 -59
  328. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  329. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  330. package/dist/domains/code-intelligence/coordinator.js +46 -13
  331. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  332. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +37 -7
  333. package/dist/domains/code-intelligence/services/semantic-analyzer.js +135 -62
  334. package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
  335. package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
  336. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  337. package/dist/domains/quality-assessment/coordinator.js +2 -1
  338. package/dist/domains/test-execution/coordinator.d.ts +3 -1
  339. package/dist/domains/test-execution/coordinator.js +21 -7
  340. package/dist/domains/test-execution/interfaces.d.ts +17 -0
  341. package/dist/domains/test-execution/plugin.js +8 -2
  342. package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
  343. package/dist/domains/test-execution/services/flaky-detector.js +26 -8
  344. package/dist/domains/test-execution/services/retry-handler.d.ts +9 -1
  345. package/dist/domains/test-execution/services/retry-handler.js +56 -12
  346. package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
  347. package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
  348. package/dist/domains/test-execution/services/test-executor.d.ts +6 -1
  349. package/dist/domains/test-execution/services/test-executor.js +97 -14
  350. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  351. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  352. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  353. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  354. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  355. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  356. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  357. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  358. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  359. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  360. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  361. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  362. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  363. package/dist/feedback/coverage-learner.js +13 -9
  364. package/dist/feedback/test-outcome-tracker.js +13 -9
  365. package/dist/governance/witness-chain.d.ts +5 -0
  366. package/dist/governance/witness-chain.js +22 -6
  367. package/dist/init/copilot-installer.d.ts +6 -0
  368. package/dist/init/copilot-installer.js +37 -17
  369. package/dist/init/platform-config-generator.d.ts +10 -0
  370. package/dist/init/platform-config-generator.js +26 -1
  371. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  372. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  373. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  374. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  375. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  376. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  377. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  378. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  379. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  380. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  381. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  382. package/dist/kernel/unified-memory.d.ts +32 -0
  383. package/dist/kernel/unified-memory.js +76 -8
  384. package/dist/learning/aqe-learning-engine.js +1 -1
  385. package/dist/learning/embed-and-insert-pattern.js +4 -2
  386. package/dist/learning/embedder-endpoint-client.d.ts +76 -0
  387. package/dist/learning/embedder-endpoint-client.js +201 -13
  388. package/dist/learning/embedding-space-registry.d.ts +75 -0
  389. package/dist/learning/embedding-space-registry.js +142 -0
  390. package/dist/learning/embedding-space.d.ts +12 -0
  391. package/dist/learning/embedding-space.js +17 -0
  392. package/dist/learning/experience-capture-middleware.js +25 -13
  393. package/dist/learning/experience-capture.js +1 -1
  394. package/dist/learning/experience-consolidation.d.ts +18 -0
  395. package/dist/learning/experience-consolidation.js +55 -8
  396. package/dist/learning/experience-space-verification.d.ts +71 -0
  397. package/dist/learning/experience-space-verification.js +147 -0
  398. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  399. package/dist/learning/pattern-lifecycle.js +153 -76
  400. package/dist/learning/pattern-null-store.d.ts +5 -0
  401. package/dist/learning/pattern-null-store.js +8 -0
  402. package/dist/learning/pattern-promotion.js +6 -3
  403. package/dist/learning/pattern-store.d.ts +6 -0
  404. package/dist/learning/pattern-store.js +19 -6
  405. package/dist/learning/qe-reasoning-bank.js +2 -2
  406. package/dist/learning/real-embeddings.d.ts +3 -0
  407. package/dist/learning/real-embeddings.js +52 -12
  408. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  409. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  410. package/dist/learning/rvf-pattern-store.js +6 -2
  411. package/dist/learning/sqlite-persistence.d.ts +6 -0
  412. package/dist/learning/sqlite-persistence.js +10 -0
  413. package/dist/mcp/bundle.js +699 -619
  414. package/dist/mcp/entry.js +4 -0
  415. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  416. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  417. package/dist/mcp/protocol-server.js +1 -0
  418. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  419. package/dist/mcp/types.d.ts +6 -0
  420. package/dist/optimization/session-cache.d.ts +17 -1
  421. package/dist/optimization/session-cache.js +40 -36
  422. package/dist/planning/goap-planner.d.ts +6 -0
  423. package/dist/planning/goap-planner.js +35 -19
  424. package/dist/planning/plan-executor.js +24 -15
  425. package/dist/routing/co-execution-repository.js +12 -9
  426. package/dist/routing/routing-feedback.d.ts +8 -0
  427. package/dist/routing/routing-feedback.js +46 -24
  428. package/dist/routing/routing-outcomes-migration.js +7 -2
  429. package/dist/shared/embeddings/index.d.ts +2 -2
  430. package/dist/shared/embeddings/index.js +1 -1
  431. package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
  432. package/dist/shared/embeddings/nomic-embedder.js +19 -11
  433. package/dist/shared/embeddings/ollama-client.d.ts +28 -2
  434. package/dist/shared/embeddings/ollama-client.js +84 -22
  435. package/dist/shared/embeddings/types.d.ts +15 -0
  436. package/dist/shared/embeddings/types.js +4 -0
  437. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  438. package/dist/shared/llm/spend-ledger.js +64 -39
  439. package/dist/shared/pytest-junit-report.d.ts +93 -0
  440. package/dist/shared/pytest-junit-report.js +241 -0
  441. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  442. package/dist/shared/sqlite-lock-wait.js +37 -0
  443. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  444. package/dist/shared/sqlite-write-queue.js +38 -0
  445. package/dist/shared/test-runner-project.d.ts +119 -0
  446. package/dist/shared/test-runner-project.js +301 -0
  447. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  448. package/dist/skills/security-visual-testing/index.js +49 -35
  449. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  450. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  451. package/dist/workers/workers/learning-consolidation.js +8 -7
  452. package/package.json +1 -1
  453. package/dist/cli/chunks/adapter-QU6INSKP.js +0 -2
  454. package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +0 -2
  455. package/dist/cli/chunks/base-OTGSN6IC.js +0 -2
  456. package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +0 -2
  457. package/dist/cli/chunks/chunk-2LUTPMBO.js +0 -21
  458. package/dist/cli/chunks/chunk-3HVFIITW.js +0 -2
  459. package/dist/cli/chunks/chunk-4D4CWP72.js +0 -2
  460. package/dist/cli/chunks/chunk-5KA5TVPR.js +0 -6
  461. package/dist/cli/chunks/chunk-6NBRMD25.js +0 -13
  462. package/dist/cli/chunks/chunk-7O45RQHF.js +0 -153
  463. package/dist/cli/chunks/chunk-EMSZVUYA.js +0 -29
  464. package/dist/cli/chunks/chunk-G6RDCCFV.js +0 -4
  465. package/dist/cli/chunks/chunk-HH4ED4F7.js +0 -744
  466. package/dist/cli/chunks/chunk-Q6I4SIUU.js +0 -65
  467. package/dist/cli/chunks/chunk-QGBGSQ2E.js +0 -14
  468. package/dist/cli/chunks/chunk-QRKTBSZT.js +0 -27
  469. package/dist/cli/chunks/chunk-SHRI7TKJ.js +0 -62
  470. package/dist/cli/chunks/chunk-TX2CHQD7.js +0 -2
  471. package/dist/cli/chunks/chunk-UGYM4U44.js +0 -2
  472. package/dist/cli/chunks/chunk-VY4U6DPO.js +0 -12
  473. package/dist/cli/chunks/chunk-WNTA4YKE.js +0 -14
  474. package/dist/cli/chunks/chunk-XHLYGXYE.js +0 -2
  475. package/dist/cli/chunks/client-KKRNPX4F.js +0 -2
  476. package/dist/cli/chunks/copilot-installer-BHPDSELY.js +0 -3
  477. package/dist/cli/chunks/core-handlers-47MPMED7.js +0 -2
  478. package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +0 -2
  479. package/dist/cli/chunks/daemon-AXLVPKVO.js +0 -18
  480. package/dist/cli/chunks/dream-76L6EEN7.js +0 -2
  481. package/dist/cli/chunks/embed-and-insert-pattern-B6MNHICW.js +0 -3
  482. package/dist/cli/chunks/experience-capture-middleware-SUFILYPW.js +0 -40
  483. package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +0 -2
  484. package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +0 -2
  485. package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +0 -2
  486. package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +0 -2
  487. package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +0 -2
  488. package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +0 -2
  489. package/dist/cli/chunks/init-wizard-JCKNGIGT.js +0 -2
  490. package/dist/cli/chunks/kernel-F7ILJTYD.js +0 -2
  491. package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +0 -2
  492. package/dist/cli/chunks/llm-router-service-TNOWQINA.js +0 -2
  493. package/dist/cli/chunks/load-test-FPVBK2EV.js +0 -2
  494. package/dist/cli/chunks/memory-backend-2QE7O67A.js +0 -2
  495. package/dist/cli/chunks/memory-handlers-X4CMVBXB.js +0 -2
  496. package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +0 -2
  497. package/dist/cli/chunks/project-root-S7WDFTMU.js +0 -2
  498. package/dist/cli/chunks/protocol-executor-OPANXQVB.js +0 -2
  499. package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +0 -2
  500. package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +0 -2
  501. package/dist/cli/chunks/real-embeddings-DYIOLKQ3.js +0 -2
  502. package/dist/cli/chunks/router-DBBW4NC2.js +0 -2
  503. package/dist/cli/chunks/routing-feedback-W35QHCL4.js +0 -2
  504. package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +0 -2
  505. package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +0 -2
  506. package/dist/cli/chunks/rvf-migration-coordinator-4ATTHGHD.js +0 -2
  507. package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +0 -2
  508. package/dist/cli/chunks/safe-db-ZS2QKANY.js +0 -2
  509. package/dist/cli/chunks/schedule-ZH6VNA32.js +0 -2
  510. package/dist/cli/chunks/scheduler-T6CD74B6.js +0 -2
  511. package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +0 -2
  512. package/dist/cli/chunks/sync-3MUV6S5E.js +0 -2
  513. package/dist/cli/chunks/task-handler-74MZN2EO.js +0 -62
  514. package/dist/cli/chunks/test-O6FK3FVF.js +0 -34
  515. package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +0 -2
  516. package/dist/cli/chunks/token-bootstrap-TTRCECLP.js +0 -2
  517. package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +0 -2
  518. package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +0 -2
  519. package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +0 -2
  520. package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +0 -2
  521. package/dist/cli/chunks/visual-security-GXGSFBVA.js +0 -2
  522. package/dist/cli/chunks/witness-chain-MRJKVCOW.js +0 -2
  523. package/dist/cli/chunks/witness-chain-WWHJKITG.js +0 -2
  524. package/dist/cli/chunks/witness-chain-repair-5SAXPETG.js +0 -2
  525. package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +0 -2
  526. package/dist/cli/chunks/wrappers-5QFMCKXL.js +0 -2
@@ -15,6 +15,8 @@
15
15
  * - Bearer auth from env only; URL userinfo stripped + warned on construct.
16
16
  * - Probe + identity fingerprint required before `embed()`; breaker recovery
17
17
  * invalidates identity so re-probe runs against a fresh endpoint.
18
+ * - The first identity is bound for the client's lifetime: a re-probe that
19
+ * finds another model is refused, never adopted (#1282).
18
20
  * - True TCP connect timeout via socket-level setTimeout (not req.setTimeout).
19
21
  * - TLS knobs (ca / cert / key / rejectUnauthorized / servername) for self-hosted.
20
22
  */
@@ -22,7 +24,8 @@ import * as http from 'node:http';
22
24
  import * as https from 'node:https';
23
25
  import { createHash } from 'node:crypto';
24
26
  import { URL } from 'node:url';
25
- import { normalize as l2Normalize } from '../shared/utils/vector-math.js';
27
+ import { cosineSimilarity, normalize as l2Normalize } from '../shared/utils/vector-math.js';
28
+ import { EMBEDDING_ROUND_TRIP_MIN_COSINE } from './embedding-space.js';
26
29
  const DEFAULT_OPTIONS = {
27
30
  model: 'Xenova/all-MiniLM-L6-v2',
28
31
  expectedDim: 384,
@@ -31,7 +34,9 @@ const DEFAULT_OPTIONS = {
31
34
  failureThreshold: 3,
32
35
  failureWindowMs: 60_000,
33
36
  };
34
- const CANARY_TEXT = 'AQE embedder endpoint identity canary v1';
37
+ /** The text every probe embeds; its vector is the endpoint's identity evidence. */
38
+ export const ENDPOINT_IDENTITY_CANARY = 'AQE embedder endpoint identity canary v1';
39
+ const CANARY_TEXT = ENDPOINT_IDENTITY_CANARY;
35
40
  const EMBEDDINGS_PATH = '/v1/embeddings';
36
41
  /**
37
42
  * Strip user:password@ from a URL for safe logging.
@@ -82,35 +87,79 @@ export function parseEndpoint(endpoint) {
82
87
  safeUrl: url.toString().replace(/\/$/, ''),
83
88
  };
84
89
  }
90
+ /**
91
+ * #1216: a connect or request timeout. The host did not answer within the
92
+ * budget, so the breaker opens on the first one instead of counting it as one
93
+ * failure of `failureThreshold`.
94
+ */
95
+ export class EmbedderEndpointTimeoutError extends Error {
96
+ phase;
97
+ limitMs;
98
+ constructor(phase, limitMs) {
99
+ super(`[EmbedderEndpointClient] ${phase} timeout after ${limitMs}ms`);
100
+ this.phase = phase;
101
+ this.limitMs = limitMs;
102
+ this.name = 'EmbedderEndpointTimeoutError';
103
+ }
104
+ }
105
+ /**
106
+ * #1282: a probe found a different endpoint identity than the one the client
107
+ * bound to. Vectors from the new identity are not comparable with stored ones,
108
+ * so the client refuses to embed until the endpoint serves the bound identity
109
+ * again or the process restarts.
110
+ */
111
+ export class EmbedderEndpointIdentityChangedError extends Error {
112
+ bound;
113
+ current;
114
+ constructor(bound, current) {
115
+ super(`[EmbedderEndpointClient] endpoint identity changed since this process bound to it ` +
116
+ `(fingerprint ${bound.fingerprint} -> ${current.fingerprint}, ` +
117
+ `dim ${bound.dim} -> ${current.dim}) at ${current.endpoint}; ` +
118
+ `restart to use the new embedding space`);
119
+ this.bound = bound;
120
+ this.current = current;
121
+ this.name = 'EmbedderEndpointIdentityChangedError';
122
+ }
123
+ }
85
124
  /**
86
125
  * Circuit breaker state.
87
126
  *
88
- * Tracks failure timestamps within `windowMs`. Opens when count reaches `threshold`.
127
+ * Tracks failure timestamps within `windowMs`. Opens when count reaches `threshold`,
128
+ * or at once on a timeout (#1216): timeouts arrive one timeout apart, so with a
129
+ * 30 s request timeout and a 60 s window they would never add up to three.
89
130
  * While open, every request fast-fails until the window expires. On recovery
90
131
  * (window elapses), the breaker calls `onRecover` so the client can invalidate
91
132
  * cached endpoint identity — endpoint restarts often coincide with model swaps.
133
+ * Whenever it opens, it calls `onTrip` so the client can abandon requests
134
+ * still waiting on the host.
92
135
  */
93
136
  class CircuitBreaker {
94
137
  threshold;
95
138
  windowMs;
96
139
  onRecover;
140
+ onTrip;
97
141
  failures = [];
98
142
  trippedAt = null;
99
- constructor(threshold, windowMs, onRecover = () => { }) {
143
+ constructor(threshold, windowMs, onRecover = () => { }, onTrip = () => { }) {
100
144
  this.threshold = threshold;
101
145
  this.windowMs = windowMs;
102
146
  this.onRecover = onRecover;
147
+ this.onTrip = onTrip;
103
148
  }
104
149
  recordSuccess() {
105
150
  this.failures = [];
106
151
  this.trippedAt = null;
107
152
  }
108
- recordFailure() {
153
+ recordFailure(tripNow = false) {
154
+ // Requests abandoned when the breaker opened fail too; they must not
155
+ // extend the window.
156
+ if (this.trippedAt !== null)
157
+ return;
109
158
  const now = Date.now();
110
159
  this.failures = this.failures.filter((t) => now - t < this.windowMs);
111
160
  this.failures.push(now);
112
- if (this.failures.length >= this.threshold) {
113
- this.trippedAt = now;
161
+ if (tripNow || this.failures.length >= this.threshold) {
162
+ this.trip();
114
163
  }
115
164
  }
116
165
  isOpen() {
@@ -128,12 +177,16 @@ class CircuitBreaker {
128
177
  /** #1204: open (or re-open) the breaker for a full window from now. */
129
178
  trip() {
130
179
  this.trippedAt = Date.now();
180
+ this.onTrip();
131
181
  }
132
182
  /** For tests / observability */
133
183
  getState() {
134
184
  return { open: this.isOpen(), failures: this.failures.length, trippedAt: this.trippedAt };
135
185
  }
136
186
  }
187
+ function sameIdentity(a, b) {
188
+ return a.fingerprint === b.fingerprint && a.dim === b.dim;
189
+ }
137
190
  /**
138
191
  * OpenAI-compatible embeddings client with keep-alive, circuit breaker, and identity probe.
139
192
  */
@@ -143,8 +196,25 @@ export class EmbedderEndpointClient {
143
196
  breaker;
144
197
  opts;
145
198
  cachedIdentity = null;
199
+ /**
200
+ * #1282: the first identity a probe found. Every embedding this client
201
+ * returns belongs to it; later probes must find it again.
202
+ */
203
+ boundIdentity = null;
204
+ /** #1282: the canary vector behind `boundIdentity`. */
205
+ boundCanary = null;
206
+ /** #1282: set while the endpoint serves an identity other than the bound one. */
207
+ identityChange = null;
146
208
  /** True while a probe is in flight — prevents the embed() lazy-probe race. */
147
209
  probeInFlight = null;
210
+ /**
211
+ * #1216: set when the breaker window elapsed and no probe has succeeded
212
+ * since. The next probe is the breaker's half-open trial; it runs in the
213
+ * background so no caller waits on a host that may still not answer.
214
+ */
215
+ trialPending = false;
216
+ /** #1216: requests waiting on the host, abandoned when the breaker opens. */
217
+ inFlight = new Set();
148
218
  constructor(options) {
149
219
  this.opts = {
150
220
  endpoint: options.endpoint,
@@ -177,6 +247,35 @@ export class EmbedderEndpointClient {
177
247
  // On breaker recovery, drop identity so the next embed() re-probes.
178
248
  // Endpoint restarts (the common cause of recovery) often change models.
179
249
  this.cachedIdentity = null;
250
+ this.trialPending = true;
251
+ }, () => this.abandonInFlight());
252
+ }
253
+ /**
254
+ * #1216: the breaker opened, so the host is treated as down. Requests that
255
+ * are still waiting on it fail now rather than each waiting out its own
256
+ * timeout.
257
+ */
258
+ abandonInFlight() {
259
+ if (this.inFlight.size === 0)
260
+ return;
261
+ const err = new Error(`[EmbedderEndpointClient] circuit breaker opened for ${this.parsed.safeUrl} — request abandoned`);
262
+ for (const reject of [...this.inFlight])
263
+ reject(err);
264
+ }
265
+ /**
266
+ * #1216: true while the endpoint is not known to work: the breaker is open,
267
+ * or its window elapsed and the trial probe has not succeeded yet.
268
+ */
269
+ needsTrial() {
270
+ return this.breaker.isOpen() || this.trialPending;
271
+ }
272
+ /** Start the half-open trial probe in the background (one at a time). */
273
+ startTrialProbe() {
274
+ if (this.probeInFlight)
275
+ return;
276
+ this.probe().catch(() => {
277
+ // Still failing: keep fast-failing for another full window.
278
+ this.breaker.trip();
180
279
  });
181
280
  }
182
281
  /** Public, redacted endpoint URL for logs/metrics. */
@@ -197,10 +296,21 @@ export class EmbedderEndpointClient {
197
296
  if (texts.length === 0)
198
297
  return [];
199
298
  if (this.breaker.isOpen()) {
299
+ // #1282: say why the breaker is open when the cause is a changed model.
300
+ if (this.identityChange)
301
+ throw this.identityChange;
200
302
  throw new Error(`[EmbedderEndpointClient] circuit breaker open for ${this.parsed.safeUrl} — fast-failing`);
201
303
  }
202
304
  // Identity gate: every embed call must have a verified identity behind it.
203
305
  if (this.cachedIdentity === null) {
306
+ if (this.trialPending) {
307
+ // #1216: half-open. The endpoint failed until a window ago and may
308
+ // still not answer. Probe it in the background as the single trial
309
+ // and fail fast here; callers after a successful trial embed again.
310
+ this.startTrialProbe();
311
+ throw new Error(`[EmbedderEndpointClient] circuit breaker half-open for ${this.parsed.safeUrl} — ` +
312
+ `trial probe running, fast-failing`);
313
+ }
204
314
  await this.ensureProbed();
205
315
  }
206
316
  try {
@@ -210,7 +320,7 @@ export class EmbedderEndpointClient {
210
320
  return vectors;
211
321
  }
212
322
  catch (err) {
213
- this.breaker.recordFailure();
323
+ this.breaker.recordFailure(err instanceof EmbedderEndpointTimeoutError);
214
324
  throw err;
215
325
  }
216
326
  }
@@ -242,7 +352,7 @@ export class EmbedderEndpointClient {
242
352
  this.breaker.recordSuccess();
243
353
  }
244
354
  catch (err) {
245
- this.breaker.recordFailure();
355
+ this.breaker.recordFailure(err instanceof EmbedderEndpointTimeoutError);
246
356
  throw err;
247
357
  }
248
358
  if (!vec || vec.length !== this.opts.expectedDim) {
@@ -257,16 +367,73 @@ export class EmbedderEndpointClient {
257
367
  buf.writeInt16LE(q, i * 2);
258
368
  }
259
369
  const fingerprint = createHash('sha256').update(buf).digest('hex').slice(0, 16);
260
- this.cachedIdentity = {
370
+ const identity = {
261
371
  dim: vec.length,
262
372
  fingerprint,
263
373
  endpoint: this.parsed.safeUrl,
264
374
  };
375
+ if (this.boundIdentity && this.boundCanary) {
376
+ if (!this.isBoundModel(identity, vec))
377
+ this.refuseIdentityChange(identity);
378
+ }
379
+ else {
380
+ this.boundIdentity = identity;
381
+ this.boundCanary = vec;
382
+ }
383
+ this.identityChange = null;
384
+ // The bound identity stays the one callers see, also when fp noise moved
385
+ // the hash: the embedding space did not change.
386
+ this.cachedIdentity = this.boundIdentity;
387
+ this.trialPending = false;
265
388
  return this.cachedIdentity;
266
389
  }
390
+ /**
391
+ * #1282: true when a re-probe found the bound model. The int16 fingerprint
392
+ * flips on noise of about 3e-5 per component, which the same model restarted
393
+ * on other hardware or kernels can produce, so a changed hash alone is not a
394
+ * changed model: the canary must also have moved below the ADR-097
395
+ * round-trip cosine.
396
+ */
397
+ isBoundModel(identity, canary) {
398
+ const bound = this.boundIdentity;
399
+ if (identity.dim !== bound.dim)
400
+ return false;
401
+ if (identity.fingerprint === bound.fingerprint)
402
+ return true;
403
+ return (cosineSimilarity(this.boundCanary, canary) >= EMBEDDING_ROUND_TRIP_MIN_COSINE);
404
+ }
405
+ /**
406
+ * #1282: the endpoint answers, but as a different model than the one this
407
+ * client bound to (an endpoint restarted with another model of the same
408
+ * dimension, typically seen when the breaker recovers). Treat it as down:
409
+ * open the breaker so every caller fast-fails with this error, and retry
410
+ * as a half-open trial after each window, in case the bound model returns.
411
+ * Reported once per new identity.
412
+ */
413
+ refuseIdentityChange(current) {
414
+ const bound = this.boundIdentity;
415
+ const previous = this.identityChange;
416
+ const change = new EmbedderEndpointIdentityChangedError(bound, current);
417
+ this.identityChange = change;
418
+ this.cachedIdentity = null;
419
+ this.trialPending = true;
420
+ this.breaker.trip();
421
+ if (!previous || !sameIdentity(previous.current, current)) {
422
+ console.warn(`${change.message}. Embedding requests are refused.`);
423
+ }
424
+ throw change;
425
+ }
267
426
  getCachedIdentity() {
268
427
  return this.cachedIdentity;
269
428
  }
429
+ /** #1282: the identity every vector from this client belongs to. */
430
+ getBoundIdentity() {
431
+ return this.boundIdentity;
432
+ }
433
+ /** #1298: the canary vector behind the bound identity (ENDPOINT_IDENTITY_CANARY). */
434
+ getBoundCanary() {
435
+ return this.boundCanary;
436
+ }
270
437
  getBreakerState() {
271
438
  return this.breaker.getState();
272
439
  }
@@ -374,18 +541,30 @@ export class EmbedderEndpointClient {
374
541
  const requestTimeoutMs = this.opts.requestTimeoutMs;
375
542
  return new Promise((resolve, reject) => {
376
543
  let settled = false;
544
+ // #1285: removes this request's listeners from its socket. Keep-alive
545
+ // sockets serve many requests; listeners left behind pile up and a
546
+ // finished request's timeout handler would fire for a later request.
547
+ let detachFromSocket = () => { };
377
548
  const safeResolve = (val) => {
378
549
  if (settled)
379
550
  return;
380
551
  settled = true;
552
+ detachFromSocket();
553
+ this.inFlight.delete(abandon);
381
554
  resolve(val);
382
555
  };
383
556
  const safeReject = (err) => {
384
557
  if (settled)
385
558
  return;
386
559
  settled = true;
560
+ detachFromSocket();
561
+ this.inFlight.delete(abandon);
387
562
  reject(err);
388
563
  };
564
+ const abandon = (err) => {
565
+ safeReject(err);
566
+ req.destroy(err);
567
+ };
389
568
  const req = requestFn(reqOptions, (res) => {
390
569
  const chunks = [];
391
570
  res.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
@@ -426,18 +605,27 @@ export class EmbedderEndpointClient {
426
605
  else {
427
606
  onConnect();
428
607
  }
429
- socket.on('timeout', () => {
608
+ const onTimeout = () => {
430
609
  // Distinguish phase for the error message.
431
610
  const phase = socket.connecting ? 'connect' : 'request';
432
611
  const limit = socket.connecting ? connectTimeoutMs : requestTimeoutMs;
433
- const err = new Error(`[EmbedderEndpointClient] ${phase} timeout after ${limit}ms`);
612
+ const err = new EmbedderEndpointTimeoutError(phase, limit);
434
613
  // Reject FIRST, then destroy. If we destroy first, the 'error' event
435
614
  // races us and we might lose the timeout-specific message.
436
615
  safeReject(err);
437
616
  req.destroy(err);
438
- });
617
+ };
618
+ socket.on('timeout', onTimeout);
619
+ detachFromSocket = () => {
620
+ socket.removeListener('timeout', onTimeout);
621
+ socket.removeListener('connect', onConnect);
622
+ };
623
+ // Settled before the socket was assigned: nothing of ours may stay on it.
624
+ if (settled)
625
+ detachFromSocket();
439
626
  });
440
627
  req.on('error', (err) => safeReject(err));
628
+ this.inFlight.add(abandon);
441
629
  req.write(body);
442
630
  req.end();
443
631
  });
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Embedding-space registry (#1298).
3
+ *
4
+ * A space id is a hash of the runtime configuration plus an exact fingerprint
5
+ * of a canary vector, rounded to int16 (steps of about 3e-5). The same model
6
+ * restarted on other hardware or kernels can move the canary by more than
7
+ * that, which would mint a new space id for vectors that are still
8
+ * comparable. So each space minted here also stores its canary vector, as the
9
+ * space's reference. At the next start, a runtime with the same configuration
10
+ * whose canary is within EMBEDDING_ROUND_TRIP_MIN_COSINE of a reference is
11
+ * that space: it keeps the stored identity and id instead of minting one.
12
+ *
13
+ * Entries live in memory.db kv_store (namespace _system) and are only ever
14
+ * added: a reference is never updated, so slow drift cannot walk a space
15
+ * away, and no stored id, vector or manifest is ever rewritten. Without a
16
+ * database, or when it cannot be read, derivation is what it was before.
17
+ */
18
+ import { type EmbeddingSpaceIdentity } from './embedding-space.js';
19
+ /** The raw memory.db connection the registry reads and writes. */
20
+ export interface EmbeddingSpaceRegistryDb {
21
+ prepare(sql: string): {
22
+ all(...params: unknown[]): unknown[];
23
+ run(...params: unknown[]): unknown;
24
+ };
25
+ }
26
+ /** A space and the canary vector it was minted with. */
27
+ export interface RegisteredEmbeddingSpace {
28
+ identity: EmbeddingSpaceIdentity;
29
+ /** The text the canary vector embeds; only like canaries are compared. */
30
+ canaryText: string;
31
+ canary: number[];
32
+ }
33
+ export type EmbeddingSpaceResolution =
34
+ /** A registered space with the same fingerprint. */
35
+ 'matched-exact'
36
+ /** A registered space whose canary is within the round-trip cosine. */
37
+ | 'matched-cosine'
38
+ /** No registered space matched: the derived space was registered. */
39
+ | 'registered'
40
+ /** No usable registry: the derived space is used as before. */
41
+ | 'unavailable';
42
+ export interface ResolvedEmbeddingSpace {
43
+ identity: EmbeddingSpaceIdentity;
44
+ resolution: EmbeddingSpaceResolution;
45
+ /** Same-configuration spaces that did not match (for the drift warning). */
46
+ otherSpaces: number;
47
+ /** Settles when the registration write has run (or failed, logged). */
48
+ registration: Promise<void>;
49
+ }
50
+ /** Same configuration: everything but the runtime fingerprint. */
51
+ export declare function sameEmbeddingSpaceConfig(a: EmbeddingSpaceIdentity, b: EmbeddingSpaceIdentity): boolean;
52
+ /**
53
+ * The registered space a runtime belongs to, or null. Candidates share the
54
+ * runtime's configuration and canary text; an equal fingerprint wins, then
55
+ * the highest canary cosine at or above the round-trip threshold.
56
+ */
57
+ export declare function matchRegisteredSpace(derived: EmbeddingSpaceIdentity, canaryText: string, canary: readonly number[], entries: readonly RegisteredEmbeddingSpace[]): {
58
+ entry: RegisteredEmbeddingSpace;
59
+ exact: boolean;
60
+ } | null;
61
+ /** Read every registered space. Malformed entries are skipped. Throws on a DB error. */
62
+ export declare function loadRegisteredSpaces(db: EmbeddingSpaceRegistryDb): RegisteredEmbeddingSpace[];
63
+ /**
64
+ * Add a space to the registry. Never replaces an entry. The write goes
65
+ * through the connection's write queue (#1283) when it has one, so a locked
66
+ * memory.db does not block the event loop.
67
+ */
68
+ export declare function registerEmbeddingSpace(db: EmbeddingSpaceRegistryDb, space: RegisteredEmbeddingSpace): Promise<void>;
69
+ /**
70
+ * Choose the space for a freshly derived runtime identity: a registered space
71
+ * it matches, or the derived space, which is then registered. Never throws:
72
+ * when the registry cannot be read the derived space is used, as before.
73
+ */
74
+ export declare function resolveEmbeddingSpace(db: EmbeddingSpaceRegistryDb | null, derived: EmbeddingSpaceIdentity, canaryText: string, canary: readonly number[]): ResolvedEmbeddingSpace;
75
+ //# sourceMappingURL=embedding-space-registry.d.ts.map
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Embedding-space registry (#1298).
3
+ *
4
+ * A space id is a hash of the runtime configuration plus an exact fingerprint
5
+ * of a canary vector, rounded to int16 (steps of about 3e-5). The same model
6
+ * restarted on other hardware or kernels can move the canary by more than
7
+ * that, which would mint a new space id for vectors that are still
8
+ * comparable. So each space minted here also stores its canary vector, as the
9
+ * space's reference. At the next start, a runtime with the same configuration
10
+ * whose canary is within EMBEDDING_ROUND_TRIP_MIN_COSINE of a reference is
11
+ * that space: it keeps the stored identity and id instead of minting one.
12
+ *
13
+ * Entries live in memory.db kv_store (namespace _system) and are only ever
14
+ * added: a reference is never updated, so slow drift cannot walk a space
15
+ * away, and no stored id, vector or manifest is ever rewritten. Without a
16
+ * database, or when it cannot be read, derivation is what it was before.
17
+ */
18
+ import { cosineSimilarity } from '../shared/utils/vector-math.js';
19
+ import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
20
+ import { toErrorMessage } from '../shared/error-utils.js';
21
+ import { EMBEDDING_ROUND_TRIP_MIN_COSINE, } from './embedding-space.js';
22
+ const NAMESPACE = '_system';
23
+ const KEY_PREFIX = 'embedding_space:';
24
+ /** Same configuration: everything but the runtime fingerprint. */
25
+ export function sameEmbeddingSpaceConfig(a, b) {
26
+ return (a.provider === b.provider &&
27
+ a.model === b.model &&
28
+ a.dimensions === b.dimensions &&
29
+ (a.pooling ?? null) === (b.pooling ?? null) &&
30
+ a.normalized === b.normalized &&
31
+ (a.preprocessingVersion ?? null) === (b.preprocessingVersion ?? null) &&
32
+ (a.implementation ?? null) === (b.implementation ?? null));
33
+ }
34
+ /**
35
+ * The registered space a runtime belongs to, or null. Candidates share the
36
+ * runtime's configuration and canary text; an equal fingerprint wins, then
37
+ * the highest canary cosine at or above the round-trip threshold.
38
+ */
39
+ export function matchRegisteredSpace(derived, canaryText, canary, entries) {
40
+ const candidates = entries.filter((entry) => entry.canaryText === canaryText &&
41
+ entry.canary.length === canary.length &&
42
+ sameEmbeddingSpaceConfig(entry.identity, derived));
43
+ const exact = candidates.find((entry) => entry.identity.runtimeFingerprint === derived.runtimeFingerprint);
44
+ if (exact)
45
+ return { entry: exact, exact: true };
46
+ let best = null;
47
+ for (const entry of candidates) {
48
+ const cosine = cosineSimilarity(entry.canary, canary);
49
+ if (cosine >= EMBEDDING_ROUND_TRIP_MIN_COSINE && (!best || cosine > best.cosine)) {
50
+ best = { entry, cosine };
51
+ }
52
+ }
53
+ return best ? { entry: best.entry, exact: false } : null;
54
+ }
55
+ /** Read every registered space. Malformed entries are skipped. Throws on a DB error. */
56
+ export function loadRegisteredSpaces(db) {
57
+ const rows = db
58
+ .prepare('SELECT value FROM kv_store WHERE namespace = ? AND key LIKE ?')
59
+ .all(NAMESPACE, `${KEY_PREFIX}%`);
60
+ const entries = [];
61
+ for (const row of rows) {
62
+ const entry = parseEntry(row.value);
63
+ if (entry)
64
+ entries.push(entry);
65
+ }
66
+ return entries;
67
+ }
68
+ function parseEntry(value) {
69
+ let parsed;
70
+ try {
71
+ parsed = JSON.parse(value);
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ const { identity, canaryText, canary } = parsed;
77
+ if (parsed.version !== 1 ||
78
+ !identity ||
79
+ typeof identity.spaceId !== 'string' ||
80
+ typeof identity.runtimeFingerprint !== 'string' ||
81
+ typeof identity.dimensions !== 'number' ||
82
+ typeof canaryText !== 'string' ||
83
+ !Array.isArray(canary) ||
84
+ canary.length !== identity.dimensions ||
85
+ !canary.every((x) => typeof x === 'number' && Number.isFinite(x))) {
86
+ return null;
87
+ }
88
+ return { identity, canaryText, canary };
89
+ }
90
+ /**
91
+ * Add a space to the registry. Never replaces an entry. The write goes
92
+ * through the connection's write queue (#1283) when it has one, so a locked
93
+ * memory.db does not block the event loop.
94
+ */
95
+ export function registerEmbeddingSpace(db, space) {
96
+ const entry = { version: 1, createdAt: Date.now(), ...space };
97
+ return writeWhenUnlockedOn(db, () => {
98
+ db.prepare('INSERT OR IGNORE INTO kv_store (key, namespace, value) VALUES (?, ?, ?)').run(KEY_PREFIX + space.identity.spaceId, NAMESPACE, JSON.stringify(entry));
99
+ });
100
+ }
101
+ /**
102
+ * Choose the space for a freshly derived runtime identity: a registered space
103
+ * it matches, or the derived space, which is then registered. Never throws:
104
+ * when the registry cannot be read the derived space is used, as before.
105
+ */
106
+ export function resolveEmbeddingSpace(db, derived, canaryText, canary) {
107
+ const unavailable = () => ({
108
+ identity: derived,
109
+ resolution: 'unavailable',
110
+ otherSpaces: 0,
111
+ registration: Promise.resolve(),
112
+ });
113
+ if (!db)
114
+ return unavailable();
115
+ let entries;
116
+ try {
117
+ entries = loadRegisteredSpaces(db);
118
+ }
119
+ catch (error) {
120
+ console.warn(`[EmbeddingSpaceRegistry] could not read registered embedding spaces ` +
121
+ `(${toErrorMessage(error)}); using the derived space id`);
122
+ return unavailable();
123
+ }
124
+ const match = matchRegisteredSpace(derived, canaryText, canary, entries);
125
+ if (match) {
126
+ return {
127
+ identity: match.entry.identity,
128
+ resolution: match.exact ? 'matched-exact' : 'matched-cosine',
129
+ otherSpaces: 0,
130
+ registration: Promise.resolve(),
131
+ };
132
+ }
133
+ const otherSpaces = entries.filter((entry) => entry.canaryText === canaryText && sameEmbeddingSpaceConfig(entry.identity, derived)).length;
134
+ const registration = Promise.resolve()
135
+ .then(() => registerEmbeddingSpace(db, { identity: derived, canaryText, canary: [...canary] }))
136
+ .catch((error) => {
137
+ console.warn(`[EmbeddingSpaceRegistry] could not register embedding space ${derived.spaceId.slice(0, 12)} ` +
138
+ `(${toErrorMessage(error)}); it is registered at a later start`);
139
+ });
140
+ return { identity: derived, resolution: 'registered', otherSpaces, registration };
141
+ }
142
+ //# sourceMappingURL=embedding-space-registry.js.map
@@ -57,6 +57,18 @@ export declare const EMBEDDING_RUNTIME_UNAVAILABLE_CAUSE: string;
57
57
  export declare function reportEmbeddingRuntimeUnavailable(): void;
58
58
  /** @internal test-only seam */
59
59
  export declare function __resetEmbeddingRuntimeNoticeForTests(): void;
60
+ /**
61
+ * #1217: record the embedding space of a vector stored on a
62
+ * captured_experiences row. ExperienceReplay compares only vectors of the
63
+ * active space. On a table without the column (it is added by
64
+ * ExperienceReplay's schema) the vector stays without provenance: it is never
65
+ * compared, and ExperienceReplay re-embeds it at its next start.
66
+ */
67
+ export declare function recordExperienceEmbeddingSpace(db: {
68
+ prepare(sql: string): {
69
+ run(...params: unknown[]): unknown;
70
+ };
71
+ }, experienceId: string, spaceId: string | undefined): void;
60
72
  /** Sidecar path used to bind a persistent ANN index to one embedding space. */
61
73
  export declare function embeddingSpaceManifestPath(indexPath: string): string;
62
74
  /**
@@ -120,6 +120,23 @@ export function reportEmbeddingRuntimeUnavailable() {
120
120
  export function __resetEmbeddingRuntimeNoticeForTests() {
121
121
  embeddingRuntimeNoticeShown = false;
122
122
  }
123
+ /**
124
+ * #1217: record the embedding space of a vector stored on a
125
+ * captured_experiences row. ExperienceReplay compares only vectors of the
126
+ * active space. On a table without the column (it is added by
127
+ * ExperienceReplay's schema) the vector stays without provenance: it is never
128
+ * compared, and ExperienceReplay re-embeds it at its next start.
129
+ */
130
+ export function recordExperienceEmbeddingSpace(db, experienceId, spaceId) {
131
+ if (!spaceId)
132
+ return;
133
+ try {
134
+ db.prepare('UPDATE captured_experiences SET embedding_space_id = ? WHERE id = ?').run(spaceId, experienceId);
135
+ }
136
+ catch {
137
+ // Older table without the column; see above.
138
+ }
139
+ }
123
140
  /** Sidecar path used to bind a persistent ANN index to one embedding space. */
124
141
  export function embeddingSpaceManifestPath(indexPath) {
125
142
  return `${indexPath}.space.json`;