agentic-qe 3.9.36 → 3.10.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.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +75 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-WTE6UVGP.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-L6D36M77.js → agent-booster-wasm-5UDM2PWG.js} +2 -2
- package/dist/cli/chunks/{agent-handler-3JNKP4OI.js → agent-handler-JSYER5YC.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-QBRBX7O4.js → agent-memory-branch-T2SAHI4F.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-LCLEBU7D.js +2 -0
- package/dist/cli/chunks/{audit-M4W43TXQ.js → audit-HIBRVGXG.js} +2 -2
- package/dist/cli/chunks/base-73I73HBF.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-NN6GB2YD.js → better-sqlite3-Y6GX6CGB.js} +2 -2
- package/dist/cli/chunks/{brain-handler-WQN7C55Z.js → brain-handler-N6AWIMXG.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-BOTGLI7M.js → branch-enumerator-VYQGBVEJ.js} +2 -2
- package/dist/cli/chunks/{browser-ZFZCR7LP.js → browser-2X4WKZPT.js} +2 -2
- package/dist/cli/chunks/browser-workflow-2NSV5O6W.js +2 -0
- package/dist/cli/chunks/{chunk-FSDUNGYM.js → chunk-27ACATRH.js} +2 -2
- package/dist/cli/chunks/{chunk-SJ3SHZUC.js → chunk-2GL4GH52.js} +4 -4
- package/dist/cli/chunks/{chunk-F5IVWV2P.js → chunk-2POXDKUB.js} +1 -1
- package/dist/cli/chunks/chunk-3BO7EKGO.js +12 -0
- package/dist/cli/chunks/{chunk-BUVY7IGM.js → chunk-3OSCWD7Z.js} +1 -1
- package/dist/cli/chunks/{chunk-GW7HWFWQ.js → chunk-3QULDB7K.js} +1 -1
- package/dist/cli/chunks/{chunk-PYCYZYIL.js → chunk-3U77XX6J.js} +4 -4
- package/dist/cli/chunks/{chunk-EXBJCDFM.js → chunk-4NQ6KANC.js} +2 -2
- package/dist/cli/chunks/{chunk-6M44C43I.js → chunk-4UUDFWOP.js} +2 -2
- package/dist/cli/chunks/{chunk-FYJE4QLL.js → chunk-4WYGUTSF.js} +2 -2
- package/dist/cli/chunks/{chunk-SCBWRKPE.js → chunk-55JPAF56.js} +1 -1
- package/dist/cli/chunks/{chunk-TU2PSEDW.js → chunk-5QJDH4Z5.js} +2 -2
- package/dist/cli/chunks/{chunk-YMB4YVFX.js → chunk-5RQT7EJP.js} +3 -3
- package/dist/cli/chunks/{chunk-X6UGFKHW.js → chunk-5UOV7T36.js} +2 -2
- package/dist/cli/chunks/{chunk-KI6RXKP4.js → chunk-66GIKUI2.js} +2 -2
- package/dist/cli/chunks/{chunk-BI54GWTK.js → chunk-6F3WJOU2.js} +2 -2
- package/dist/cli/chunks/{chunk-OO2JHVMS.js → chunk-6H5MRVJS.js} +3 -3
- package/dist/cli/chunks/{chunk-O5JNHH2D.js → chunk-6HCHW5TS.js} +2 -2
- package/dist/cli/chunks/{chunk-JD3VV2BD.js → chunk-6MONUYQ5.js} +2 -2
- package/dist/cli/chunks/{chunk-RDXIRE2I.js → chunk-7Y54QZKF.js} +2 -2
- package/dist/cli/chunks/{chunk-P7IOH7L4.js → chunk-7ZIRDBXH.js} +1 -1
- package/dist/cli/chunks/{chunk-AWC7G2D3.js → chunk-AFFYJSW2.js} +2 -2
- package/dist/cli/chunks/{chunk-I7BXATQ6.js → chunk-ALCQRJDY.js} +2 -2
- package/dist/cli/chunks/{chunk-VENEJ3UI.js → chunk-BQT4J3BD.js} +2 -2
- package/dist/cli/chunks/{chunk-5OAAJUGO.js → chunk-BQX5QDU5.js} +1 -1
- package/dist/cli/chunks/{chunk-CJQT3MYN.js → chunk-BTIVIWIG.js} +1 -1
- package/dist/cli/chunks/{chunk-6M2POFDF.js → chunk-BXCS55GB.js} +1 -1
- package/dist/cli/chunks/{chunk-MJJAHA2T.js → chunk-C5QESAYA.js} +1 -1
- package/dist/cli/chunks/{chunk-NYU4YD5V.js → chunk-CU4IUJ2K.js} +2 -2
- package/dist/cli/chunks/{chunk-LPVRFVSC.js → chunk-DQJJS4AX.js} +2 -2
- package/dist/cli/chunks/{chunk-GFMSAL5Y.js → chunk-DQLEZBWV.js} +2 -2
- package/dist/cli/chunks/{chunk-5SYH5QMQ.js → chunk-DXV6NRG3.js} +2 -2
- package/dist/cli/chunks/{chunk-EAMKH35X.js → chunk-DY7IRNE2.js} +1 -1
- package/dist/cli/chunks/{chunk-4R3WXD4U.js → chunk-F363JJUI.js} +1 -1
- package/dist/cli/chunks/{chunk-JFDNNXIX.js → chunk-FCSJ7GIZ.js} +2 -2
- package/dist/cli/chunks/{chunk-QMUTKI34.js → chunk-FEBXP74Y.js} +1 -1
- package/dist/cli/chunks/{chunk-EXUT2LCP.js → chunk-FQ5FT7IE.js} +1 -1
- package/dist/cli/chunks/{chunk-MEQ4OPSL.js → chunk-FX4SYT6Y.js} +3 -3
- package/dist/cli/chunks/{chunk-ZK6GXL5J.js → chunk-G2HA2O3R.js} +2 -2
- package/dist/cli/chunks/{chunk-TCDGJYM2.js → chunk-GPKZ4MMH.js} +1 -1
- package/dist/cli/chunks/{chunk-66636UWH.js → chunk-GXCD7GNH.js} +2 -2
- package/dist/cli/chunks/{chunk-CAGRQR2U.js → chunk-HD5NQDOL.js} +2 -2
- package/dist/cli/chunks/{chunk-5ZTY5JJX.js → chunk-HD6CZBZV.js} +2 -2
- package/dist/cli/chunks/{chunk-JA7YARLP.js → chunk-HIWBW4IQ.js} +1 -1
- package/dist/cli/chunks/{chunk-YUFUGGXY.js → chunk-HZPXOAFW.js} +2 -2
- package/dist/cli/chunks/{chunk-3CIQ6CQ4.js → chunk-I4E6CLC4.js} +2 -2
- package/dist/cli/chunks/{chunk-FK4B2HIW.js → chunk-I4T4JPR2.js} +1 -1
- package/dist/cli/chunks/{chunk-X6IEQVSF.js → chunk-IBXNBLGM.js} +2 -2
- package/dist/cli/chunks/{chunk-GLI5EN6O.js → chunk-IQNR662U.js} +2 -2
- package/dist/cli/chunks/{chunk-YKZ3ZJWT.js → chunk-J5RJYFRM.js} +2 -2
- package/dist/cli/chunks/{chunk-27FNROZ2.js → chunk-JCKX2LEJ.js} +9 -9
- package/dist/cli/chunks/{chunk-IMP43AXO.js → chunk-JKVNZASH.js} +2 -2
- package/dist/cli/chunks/{chunk-Z5A2ENBC.js → chunk-JUICZG3T.js} +2 -2
- package/dist/cli/chunks/{chunk-MFPVS2KP.js → chunk-KCHFF4IE.js} +9 -9
- package/dist/cli/chunks/{chunk-TG44VKO3.js → chunk-KDFW7MVM.js} +2 -2
- package/dist/cli/chunks/{chunk-O4C3JEOR.js → chunk-KNL3QWVA.js} +2 -2
- package/dist/cli/chunks/{chunk-ZBY4HSHR.js → chunk-KOSKGZK4.js} +2 -2
- package/dist/cli/chunks/{chunk-G7YDYXQH.js → chunk-KYLJERZ3.js} +2 -2
- package/dist/cli/chunks/{chunk-7ZCDG3IM.js → chunk-L2AIES7X.js} +1 -1
- package/dist/cli/chunks/{chunk-6DACR7QY.js → chunk-L3IFZ4IX.js} +2 -2
- package/dist/cli/chunks/{chunk-2AANIKDG.js → chunk-L4N6PTIC.js} +2 -2
- package/dist/cli/chunks/{chunk-BNFW4LMD.js → chunk-LDMG4372.js} +2 -2
- package/dist/cli/chunks/{chunk-QH7K2UPP.js → chunk-LQ3TA22E.js} +2 -2
- package/dist/cli/chunks/{chunk-EDG4NEET.js → chunk-LRISVDVO.js} +1 -1
- package/dist/cli/chunks/{chunk-XNXFEMWT.js → chunk-LXHA55EB.js} +1 -1
- package/dist/cli/chunks/{chunk-AJ2VFSLX.js → chunk-LYVFC7C7.js} +2 -2
- package/dist/cli/chunks/{chunk-U6QAKKNB.js → chunk-M3M7HXDH.js} +2 -2
- package/dist/cli/chunks/{chunk-PY4B37U3.js → chunk-M4HDBRVJ.js} +1 -1
- package/dist/cli/chunks/{chunk-6BHUKCLI.js → chunk-M73IL7FA.js} +2 -2
- package/dist/cli/chunks/{chunk-F57OUXHJ.js → chunk-MF3XRML3.js} +2 -2
- package/dist/cli/chunks/{chunk-NKA3X6VT.js → chunk-MJBXQXSX.js} +1 -1
- package/dist/cli/chunks/{chunk-D5CLABLM.js → chunk-NLCUQMUR.js} +2 -2
- package/dist/cli/chunks/{chunk-IF4ZZ2HD.js → chunk-NT4PI5HI.js} +2 -2
- package/dist/cli/chunks/{chunk-74DA4P5K.js → chunk-NWHSEXHA.js} +1 -1
- package/dist/cli/chunks/{chunk-Y4ERDIPP.js → chunk-O3NAUNFC.js} +2 -2
- package/dist/cli/chunks/{chunk-AH3UC4IV.js → chunk-OGT45MZN.js} +2 -2
- package/dist/cli/chunks/{chunk-HOZNVDFF.js → chunk-OKGK7DBT.js} +2 -2
- package/dist/cli/chunks/{chunk-U7B4WCBY.js → chunk-OUJJ34JH.js} +1 -1
- package/dist/cli/chunks/{chunk-P4VQTIJE.js → chunk-OWMGD7FO.js} +3 -3
- package/dist/cli/chunks/{chunk-PGRDHDEJ.js → chunk-P6XYFDXN.js} +1 -1
- package/dist/cli/chunks/{chunk-NMHULQAV.js → chunk-PNDO4W4L.js} +2 -2
- package/dist/cli/chunks/{chunk-MAHLTWGV.js → chunk-QL3U5VSM.js} +2 -2
- package/dist/cli/chunks/{chunk-RCU5L7FF.js → chunk-QU54GUEA.js} +2 -2
- package/dist/cli/chunks/{chunk-OLBYILKU.js → chunk-QWBO76AU.js} +2 -2
- package/dist/cli/chunks/{chunk-QYUWWTE3.js → chunk-RARSTEUO.js} +1 -1
- package/dist/cli/chunks/{chunk-PUZAIRMY.js → chunk-RF6QKV7M.js} +2 -2
- package/dist/cli/chunks/{chunk-7TO7NTLT.js → chunk-RGONSQ44.js} +8 -8
- package/dist/cli/chunks/{chunk-A3TOJ4KN.js → chunk-RH3PHCJT.js} +2 -2
- package/dist/cli/chunks/{chunk-5M63H6RY.js → chunk-S33246T4.js} +1 -1
- package/dist/cli/chunks/{chunk-ESIE3MT5.js → chunk-S4CNA6Z5.js} +3 -3
- package/dist/cli/chunks/{chunk-GWLLNJ64.js → chunk-SCYF5CQA.js} +1 -1
- package/dist/cli/chunks/{chunk-DTJHO3WI.js → chunk-SGONA5GS.js} +2 -2
- package/dist/cli/chunks/{chunk-CLATNP57.js → chunk-T7DLX3LS.js} +3 -3
- package/dist/cli/chunks/{chunk-QAGAEAKM.js → chunk-TEJPHJMW.js} +2 -2
- package/dist/cli/chunks/{chunk-W2DF6FNE.js → chunk-TR7BZLB6.js} +1 -1
- package/dist/cli/chunks/{chunk-L3JJ52N6.js → chunk-U56TIYGP.js} +2 -2
- package/dist/cli/chunks/{chunk-TOZ6WUAB.js → chunk-UCIJCRPB.js} +2 -2
- package/dist/cli/chunks/{chunk-AH3TKDVW.js → chunk-UCXQQCIP.js} +2 -2
- package/dist/cli/chunks/{chunk-5MSZREOD.js → chunk-UE3XXKLN.js} +2 -2
- package/dist/cli/chunks/{chunk-556GYKN5.js → chunk-UGX4EHT5.js} +2 -2
- package/dist/cli/chunks/{chunk-2EWOYVH3.js → chunk-URVDWF2Y.js} +2 -2
- package/dist/cli/chunks/{chunk-DCXFHBHS.js → chunk-V5TRAL57.js} +2 -2
- package/dist/cli/chunks/{chunk-LIE24NRL.js → chunk-VEOQH4W6.js} +2 -2
- package/dist/cli/chunks/{chunk-AY2LLGZN.js → chunk-VMJXNTJT.js} +4 -4
- package/dist/cli/chunks/{chunk-FZA674BT.js → chunk-VTIXFHZR.js} +2 -2
- package/dist/cli/chunks/{chunk-GAC4MD6S.js → chunk-VTO5O7DA.js} +1 -1
- package/dist/cli/chunks/{chunk-G6Q66YLG.js → chunk-W6U7SIIK.js} +3 -3
- package/dist/cli/chunks/{chunk-CSDGFQKW.js → chunk-WC6KZDPM.js} +2 -2
- package/dist/cli/chunks/{chunk-2KMCRASK.js → chunk-WG6I7YF3.js} +1 -1
- package/dist/cli/chunks/{chunk-TK7TGVVQ.js → chunk-WLLE54TA.js} +1 -1
- package/dist/cli/chunks/{chunk-HHGZ4LXC.js → chunk-WVCIZIKH.js} +1 -1
- package/dist/cli/chunks/{chunk-NKBCAW27.js → chunk-X4U5NYB6.js} +1 -1
- package/dist/cli/chunks/chunk-X73CRYF4.js +2 -0
- package/dist/cli/chunks/{chunk-5ECOD4O6.js → chunk-XFMSHTXG.js} +1 -1
- package/dist/cli/chunks/{chunk-LUFY3GGI.js → chunk-XFUU2RCA.js} +2 -2
- package/dist/cli/chunks/{chunk-QXM3PRVR.js → chunk-Y4I5JBOL.js} +2 -2
- package/dist/cli/chunks/{chunk-C2JK5O55.js → chunk-YHNEBCYQ.js} +2 -2
- package/dist/cli/chunks/{chunk-5RPHV7Y3.js → chunk-YYDHTBHE.js} +1 -1
- package/dist/cli/chunks/{chunk-DKBBMZWB.js → chunk-Z2SCTEZD.js} +2 -2
- package/dist/cli/chunks/{chunk-CK5TGFII.js → chunk-Z6JLPPAY.js} +1 -1
- package/dist/cli/chunks/{chunk-TXSVZYFA.js → chunk-ZCNVFULO.js} +2 -2
- package/dist/cli/chunks/{chunk-YE42UTLT.js → chunk-ZFBMBCKN.js} +2 -2
- package/dist/cli/chunks/{chunk-BGD65PL4.js → chunk-ZYZWBNKT.js} +1 -1
- package/dist/cli/chunks/{ci-YA6SQ3PU.js → ci-7TR4NQ5I.js} +2 -2
- package/dist/cli/chunks/{ci-output-KKHXCQI4.js → ci-output-SLTICF3O.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-RTBCXGKA.js → circuit-breaker-7GVVTMBY.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-CRV3Y6LO.js → claude-flow-setup-TYCWYEMM.js} +2 -2
- package/dist/cli/chunks/client-7GB4WWUD.js +2 -0
- package/dist/cli/chunks/{cline-installer-IS2VLXQS.js → cline-installer-ESIAJOLK.js} +2 -2
- package/dist/cli/chunks/{code-3CSNTK5O.js → code-I42JGOVI.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-P2YXEJGV.js → code-index-extractor-2CCXPCQW.js} +2 -2
- package/dist/cli/chunks/{codex-installer-QGDV2CAQ.js → codex-installer-HEZRDNUT.js} +2 -2
- package/dist/cli/chunks/{completions-TYECEYHY.js → completions-44HLIZGI.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-GA5KSFF2.js → complexity-analyzer-SOCSFDVO.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-NW5Y4ZMI.js → continuedev-installer-Q7O4HLIM.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-E5BIBYG6.js → copilot-installer-GIWCVLCS.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-JLSEY4ID.js → cost-tracker-G7BONKEV.js} +2 -2
- package/dist/cli/chunks/{coverage-4TH275AN.js → coverage-5TWVP7KY.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-7HQ74TLE.js +2 -0
- package/dist/cli/chunks/{cursor-installer-4SXSE5YT.js → cursor-installer-43EQZSB5.js} +2 -2
- package/dist/cli/chunks/{daemon-U6MP4P6S.js → daemon-QQZE4BU2.js} +4 -4
- package/dist/cli/chunks/{daemon-7T4RZQH6.js → daemon-ZXHFRDKG.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-DT2V46XR.js → dag-attention-scheduler-GOZAVAZQ.js} +2 -2
- package/dist/cli/chunks/{detect-WHSTB4QT.js → detect-X777GVJ4.js} +2 -2
- package/dist/cli/chunks/{dist-node-4LC2RJXW.js → dist-node-EZZK46TB.js} +2 -2
- package/dist/cli/chunks/{domain-handler-A2LOOU7Y.js → domain-handler-ZT32DKYY.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-4RJTMB3Y.js → domain-transfer-LHQVSLJW.js} +2 -2
- package/dist/cli/chunks/dream-G5SEFHI4.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-PR3KTT24.js → embed-and-insert-pattern-XFYPPWG7.js} +2 -2
- package/dist/cli/chunks/{eval-2HRBMOOB.js → eval-V4NYJZUZ.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-X46IYOSD.js → experience-capture-middleware-HXX2W4GL.js} +3 -3
- package/dist/cli/chunks/{fast-paths-LYYYU362.js → fast-paths-RBPWQSFJ.js} +2 -2
- package/dist/cli/chunks/{feature-flags-TKDXIHOH.js → feature-flags-INJJZBMN.js} +2 -2
- package/dist/cli/chunks/{feature-flags-RNAMQPUN.js → feature-flags-NX5EXRO3.js} +2 -2
- package/dist/cli/chunks/{file-discovery-MKGGMDIW.js → file-discovery-SNFSG6NK.js} +2 -2
- package/dist/cli/chunks/{fleet-OY4IBCZG.js → fleet-6SDN4UWE.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-G5OGHVAQ.js → gnn-wrapper-2JDRTDDK.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-N7IUATSD.js → heartbeat-handler-QLK6E7KA.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-NG7BY3FR.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-TDSLUI7K.js +2 -0
- package/dist/cli/chunks/hnsw-index-OWLQSOQH.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-TMCMZDVF.js → hnsw-legacy-bridge-Q2ZEZQKB.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-SPABZYYQ.js → hnswlib-node-TA4DZV62.js} +2 -2
- package/dist/cli/chunks/{hooks-5QDXEZ25.js → hooks-D4YENHO2.js} +10 -10
- package/dist/cli/chunks/{hybrid-router-IY62NN7G.js → hybrid-router-URU2XLBD.js} +2 -2
- package/dist/cli/chunks/{hypergraph-engine-QQYKS2F3.js → hypergraph-engine-G72U446M.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-YXFNXMRF.js → hypergraph-handler-TRZ5FDRH.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-NMTN75KA.js +2 -0
- package/dist/cli/chunks/{init-handler-SFFSDGEF.js → init-handler-3ZD4GCT4.js} +6 -6
- package/dist/cli/chunks/init-wizard-SHBFYGBV.js +2 -0
- package/dist/cli/chunks/kernel-7KVY2JGO.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-QFRYXQYY.js → kilocode-installer-AXSIW3XW.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-7L2EYEOR.js → kiro-installer-JQGIFWBK.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-V4G5J5B7.js +2 -0
- package/dist/cli/chunks/{learning-7TVVL5UH.js → learning-SPO7TGWX.js} +3 -3
- package/dist/cli/chunks/{llm-router-S3HHVPH4.js → llm-router-G6N2OKDA.js} +4 -4
- package/dist/cli/chunks/{load-Y46RO7BF.js → load-XIDDK64U.js} +2 -2
- package/dist/cli/chunks/load-test-N4RNPLG4.js +2 -0
- package/dist/cli/chunks/{mcp-PYNP2S5O.js → mcp-3JXRGXO4.js} +2 -2
- package/dist/cli/chunks/{memory-DAVXW5OP.js → memory-A66KRS2P.js} +5 -5
- package/dist/cli/chunks/memory-backend-HPGJ5YDQ.js +2 -0
- package/dist/cli/chunks/{memory-handlers-6COHVON7.js → memory-handlers-K33YVCVQ.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-7ECJRCM3.js → multi-model-executor-XCDGUVCE.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-H7QOONUC.js → opencode-installer-GELXWLF2.js} +2 -2
- package/dist/cli/chunks/{orchestrator-TSJ2F3MG.js → orchestrator-CCS3K6NH.js} +5 -5
- package/dist/cli/chunks/{pipeline-SXR4MRY7.js → pipeline-Z5C72H5S.js} +2 -2
- package/dist/cli/chunks/{platform-7NOS56VD.js → platform-4AK7XJ3Y.js} +2 -2
- package/dist/cli/chunks/{plugin-VLSWBGJN.js → plugin-7RYBIZI7.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-7ZHSOP7H.js → prime-radiant-advanced-wasm-E5PARKRX.js} +2 -2
- package/dist/cli/chunks/protocol-executor-GNVWUJUP.js +2 -0
- package/dist/cli/chunks/{protocol-handler-LWNYDM4D.js → protocol-handler-R6QJQFNL.js} +2 -2
- package/dist/cli/chunks/{prove-JYFW3OBB.js → prove-7ESQ2YAL.js} +2 -2
- package/dist/cli/chunks/{provider-manager-VPS4W7KG.js → provider-manager-HV55NIIO.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-DDSBHO6D.js +2 -0
- package/dist/cli/chunks/{quality-FCAOFXZ2.js → quality-4UE345QA.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-BQJ5O63C.js +2 -0
- package/dist/cli/chunks/real-embeddings-TYIVN3N5.js +2 -0
- package/dist/cli/chunks/{roocode-installer-ZVGJSAWD.js → roocode-installer-2KOANC47.js} +2 -2
- package/dist/cli/chunks/router-C2RKWB7J.js +2 -0
- package/dist/cli/chunks/routing-feedback-RHATTSJ6.js +2 -0
- package/dist/cli/chunks/{routing-handler-AGDHK3A2.js → routing-handler-JFEYTN7T.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-UGZINDCN.js → ruvector-commands-KSLSZRJX.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-PW7H6G4V.js → rvf-dual-writer-EPBL226J.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-ZKOTVCHJ.js → rvf-migration-adapter-25KSI6SF.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-SCBEMOP3.js → rvf-migration-coordinator-2XBYHPZP.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-QG4CXHLL.js +2 -0
- package/dist/cli/chunks/safe-db-A4KQ2IDB.js +2 -0
- package/dist/cli/chunks/schedule-O7MLASQT.js +2 -0
- package/dist/cli/chunks/scheduler-HT7RNYQ2.js +2 -0
- package/dist/cli/chunks/{security-H7QX46VA.js → security-4XWYKI4O.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-LWYHWJIA.js → shared-rvf-adapter-WRZ3HGDQ.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-P2U424FB.js → shared-rvf-dual-writer-DX2N5STR.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-4NNKJ6CQ.js +2 -0
- package/dist/cli/chunks/{status-handler-UNX3RA3S.js → status-handler-V75OSXMQ.js} +2 -2
- package/dist/cli/chunks/{structural-health-65YV3M5E.js → structural-health-TLX3JHZ6.js} +2 -2
- package/dist/cli/chunks/{sync-OZ7CHYYO.js → sync-DXZFMVZQ.js} +2 -2
- package/dist/cli/chunks/{sync-B4O3NDJ6.js → sync-KGBEXUF7.js} +2 -2
- package/dist/cli/chunks/{task-handler-NIG3USPG.js → task-handler-T3OJ6R7H.js} +2 -2
- package/dist/cli/chunks/{task-handlers-Z2PI7BTO.js → task-handlers-NJYR54AS.js} +3 -3
- package/dist/cli/chunks/{test-MNLYS3WS.js → test-KMVDNNQA.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-VCL6D6T7.js → test-scheduling-R5EQ2XGV.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-DGMEU3W4.js → token-bootstrap-PFKVV3RO.js} +2 -2
- package/dist/cli/chunks/{token-usage-IXTYAV5K.js → token-usage-ZLOGA6LR.js} +2 -2
- package/dist/cli/chunks/{transformers-5CWLXT2M.js → transformers-TNPSPQI3.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-W3FKJLJG.js → tree-sitter-wasm-parser-A2EEB5BF.js} +2 -2
- package/dist/cli/chunks/{types-NVOCAZCQ.js → types-DIXPI4NR.js} +2 -2
- package/dist/cli/chunks/unified-memory-CMNJVHOJ.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-JQLU2KI6.js +2 -0
- package/dist/cli/chunks/unified-persistence-I25TEDIU.js +2 -0
- package/dist/cli/chunks/{upgrade-VJYD4U4X.js → upgrade-LX5KP6VO.js} +2 -2
- package/dist/cli/chunks/{validate-CAKTCZ3T.js → validate-3L6F7M36.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-H24JHUTN.js → validate-swarm-FD42ZKAQ.js} +2 -2
- package/dist/cli/chunks/{vibium-247XN6V3.js → vibium-GSBSJR53.js} +2 -2
- package/dist/cli/chunks/visual-security-AJJIEV5V.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-3DOMHLRH.js → web-tree-sitter-TXHMO4BW.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-S2MOA5TQ.js → windsurf-installer-3EUZ6RD3.js} +2 -2
- package/dist/cli/chunks/witness-chain-762QQBTN.js +2 -0
- package/dist/cli/chunks/{witness-chain-CKLVPFLG.js → witness-chain-ONAUEJ4M.js} +2 -2
- package/dist/cli/chunks/{workflow-GU3IV2OD.js → workflow-E7A6BV4C.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-ZGPYISKY.js +2 -0
- package/dist/cli/chunks/{wrappers-74Y4EKW3.js → wrappers-AHHAQJM3.js} +2 -2
- package/dist/learning/embedder-endpoint-client.d.ts +133 -0
- package/dist/learning/embedder-endpoint-client.js +426 -0
- package/dist/learning/embedder-identity-store.d.ts +30 -0
- package/dist/learning/embedder-identity-store.js +136 -0
- package/dist/learning/qe-reasoning-bank.js +11 -3
- package/dist/learning/real-embeddings.d.ts +28 -0
- package/dist/learning/real-embeddings.js +130 -19
- package/dist/learning/sqlite-persistence.js +16 -3
- package/dist/mcp/bundle.js +399 -389
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-MISKG4JY.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-NDLBNM6C.js +0 -2
- package/dist/cli/chunks/base-OMDJAHGF.js +0 -2
- package/dist/cli/chunks/browser-workflow-XUG5Z5CJ.js +0 -2
- package/dist/cli/chunks/chunk-USLHYNYG.js +0 -2
- package/dist/cli/chunks/chunk-ZYPSXPQ5.js +0 -2
- package/dist/cli/chunks/client-VXJRAW3W.js +0 -2
- package/dist/cli/chunks/cross-domain-router-AKHC7TFO.js +0 -2
- package/dist/cli/chunks/dream-FPWIC7KF.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-WHGMTRT7.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-IA2M5KDH.js +0 -2
- package/dist/cli/chunks/hnsw-index-UBXTXXLQ.js +0 -2
- package/dist/cli/chunks/impact-analyzer-6PVCOS33.js +0 -2
- package/dist/cli/chunks/init-wizard-XHP5C6RD.js +0 -2
- package/dist/cli/chunks/kernel-YM5PY5SS.js +0 -2
- package/dist/cli/chunks/knowledge-graph-LTUOUHO7.js +0 -2
- package/dist/cli/chunks/load-test-CYCAQI3F.js +0 -2
- package/dist/cli/chunks/memory-backend-RW2OPAJU.js +0 -2
- package/dist/cli/chunks/protocol-executor-CREUYOBZ.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-J4DLHRJY.js +0 -2
- package/dist/cli/chunks/queen-coordinator-MGLNSTPY.js +0 -2
- package/dist/cli/chunks/real-embeddings-LE6YXNPZ.js +0 -2
- package/dist/cli/chunks/router-CXGPFUT2.js +0 -2
- package/dist/cli/chunks/routing-feedback-MZ73LFBP.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-T6JBPHTE.js +0 -2
- package/dist/cli/chunks/safe-db-DS4SKPYB.js +0 -2
- package/dist/cli/chunks/schedule-H2Q7XWAK.js +0 -2
- package/dist/cli/chunks/scheduler-PMZMKQIF.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-ONKEAMTQ.js +0 -2
- package/dist/cli/chunks/unified-memory-PNHI6I3R.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-CDV3UMBD.js +0 -2
- package/dist/cli/chunks/unified-persistence-FMCHCEZV.js +0 -2
- package/dist/cli/chunks/visual-security-3WRJQDUY.js +0 -2
- package/dist/cli/chunks/witness-chain-5ZKCKNRJ.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-OBSFY7YK.js +0 -2
|
@@ -8,21 +8,50 @@
|
|
|
8
8
|
// Re-export cosineSimilarity from shared utility for backward compatibility
|
|
9
9
|
export { cosineSimilarity } from '../shared/utils/vector-math.js';
|
|
10
10
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
11
|
+
import { EmbedderEndpointClient, redactEndpoint, } from './embedder-endpoint-client.js';
|
|
12
|
+
import { loadEmbedderIdentity, resetEmbedderIdentityStore, saveEmbedderIdentity, } from './embedder-identity-store.js';
|
|
11
13
|
// Lazy-loaded transformer pipeline
|
|
12
14
|
let pipeline = null;
|
|
13
15
|
let embeddingModel = null;
|
|
14
16
|
let initPromise = null;
|
|
15
17
|
let initializationFailed = false;
|
|
16
18
|
let failureReason = '';
|
|
19
|
+
/**
|
|
20
|
+
* Set when ADR-097 endpoint path is active. Tracked separately so callers
|
|
21
|
+
* (tests, observability) can verify endpoint vs in-process unambiguously.
|
|
22
|
+
*/
|
|
23
|
+
let endpointClient = null;
|
|
24
|
+
let endpointIdentity = null;
|
|
17
25
|
export const DEFAULT_EMBEDDING_CONFIG = {
|
|
18
26
|
modelName: 'Xenova/all-MiniLM-L6-v2',
|
|
19
27
|
quantized: true,
|
|
20
28
|
enableCache: true,
|
|
21
29
|
maxCacheSize: 10000,
|
|
30
|
+
endpoint: process.env.AQE_EMBEDDER_ENDPOINT,
|
|
31
|
+
endpointToken: process.env.AQE_EMBEDDER_TOKEN,
|
|
22
32
|
};
|
|
23
|
-
// Embedding cache (LRU)
|
|
33
|
+
// Embedding cache (LRU). Keys are namespaced by embedding mode to prevent
|
|
34
|
+
// cross-mode collisions (e.g. flipping endpoint on/off mid-process must not
|
|
35
|
+
// return a vector computed under the other mode). See `cacheKey()`.
|
|
24
36
|
const embeddingCache = new Map();
|
|
25
37
|
const CACHE_TTL_MS = 3600000; // 1 hour
|
|
38
|
+
/**
|
|
39
|
+
* Build the cache key for a given text under the current embedding mode.
|
|
40
|
+
* Endpoint mode: `endpoint:<fingerprint>:<text>` — different fingerprints
|
|
41
|
+
* (e.g. after a model swap) get separate cache entries.
|
|
42
|
+
* In-process mode: `inproc:<text>`.
|
|
43
|
+
*
|
|
44
|
+
* Until the endpoint probe completes, calls land under `inproc:` — these get
|
|
45
|
+
* evicted naturally by TTL/LRU after init. Callers should not interleave
|
|
46
|
+
* endpoint-enabled and endpoint-disabled `computeRealEmbedding` against the
|
|
47
|
+
* same text within the cache TTL.
|
|
48
|
+
*/
|
|
49
|
+
function cacheKey(text) {
|
|
50
|
+
if (endpointIdentity) {
|
|
51
|
+
return `endpoint:${endpointIdentity.fingerprint}:${text}`;
|
|
52
|
+
}
|
|
53
|
+
return `inproc:${text}`;
|
|
54
|
+
}
|
|
26
55
|
/**
|
|
27
56
|
* Detect if text is a JSON metrics/internal data string that shouldn't be embedded.
|
|
28
57
|
* These strings have no semantic value for vector search and waste compute.
|
|
@@ -57,7 +86,45 @@ async function initializeModel(config = {}) {
|
|
|
57
86
|
const fullConfig = { ...DEFAULT_EMBEDDING_CONFIG, ...config };
|
|
58
87
|
initPromise = (async () => {
|
|
59
88
|
try {
|
|
60
|
-
//
|
|
89
|
+
// ADR-097: Endpoint branch — when an external embedder endpoint is configured,
|
|
90
|
+
// we MUST NOT import @huggingface/transformers in this process. The cold-load
|
|
91
|
+
// elimination depends on the dynamic import being inside the else branch only.
|
|
92
|
+
if (fullConfig.endpoint) {
|
|
93
|
+
const safeUrl = redactEndpoint(fullConfig.endpoint);
|
|
94
|
+
console.log(`[RealEmbeddings] Using external embedder endpoint: ${safeUrl}`);
|
|
95
|
+
endpointClient = new EmbedderEndpointClient({
|
|
96
|
+
endpoint: fullConfig.endpoint,
|
|
97
|
+
token: fullConfig.endpointToken,
|
|
98
|
+
model: fullConfig.modelName,
|
|
99
|
+
expectedDim: getEmbeddingDimension(),
|
|
100
|
+
});
|
|
101
|
+
// Probe + identity fingerprint. Fails loud on dim mismatch.
|
|
102
|
+
endpointIdentity = await endpointClient.probe();
|
|
103
|
+
console.log(`[RealEmbeddings] Endpoint identity: dim=${endpointIdentity.dim} fingerprint=${endpointIdentity.fingerprint}`);
|
|
104
|
+
// Cross-run drift detection: compare against the last-known identity
|
|
105
|
+
// for this endpoint (memory.db kv_store, namespace _system). If the
|
|
106
|
+
// fingerprint changed since last run, log a loud warning — the operator
|
|
107
|
+
// either intentionally swapped models (fine, but should know) or the
|
|
108
|
+
// remote silently changed (poisoning risk for the existing index).
|
|
109
|
+
try {
|
|
110
|
+
const previous = loadEmbedderIdentity(endpointIdentity.endpoint);
|
|
111
|
+
if (previous && previous.fingerprint !== endpointIdentity.fingerprint) {
|
|
112
|
+
console.warn(`[RealEmbeddings] WARNING: endpoint identity changed since last run. ` +
|
|
113
|
+
`Previous fingerprint=${previous.fingerprint} dim=${previous.dim}, ` +
|
|
114
|
+
`current fingerprint=${endpointIdentity.fingerprint} dim=${endpointIdentity.dim}. ` +
|
|
115
|
+
`Vectors written before this change may no longer be comparable.`);
|
|
116
|
+
}
|
|
117
|
+
saveEmbedderIdentity(endpointIdentity);
|
|
118
|
+
}
|
|
119
|
+
catch (persistErr) {
|
|
120
|
+
// Persistence failure is non-fatal — we still have the in-memory identity
|
|
121
|
+
// for this run. Log so operators see it.
|
|
122
|
+
console.warn(`[RealEmbeddings] Could not persist endpoint identity: ${toErrorMessage(persistErr)}`);
|
|
123
|
+
}
|
|
124
|
+
embeddingModel = createEndpointPipeline(endpointClient);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// In-process branch — only here do we import the transformers package.
|
|
61
128
|
const transformers = await import('@huggingface/transformers');
|
|
62
129
|
pipeline = transformers.pipeline;
|
|
63
130
|
console.log(`[RealEmbeddings] Loading model: ${fullConfig.modelName}`);
|
|
@@ -77,6 +144,27 @@ async function initializeModel(config = {}) {
|
|
|
77
144
|
})();
|
|
78
145
|
return initPromise;
|
|
79
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Build a FeatureExtractionPipeline-shaped wrapper around the endpoint client.
|
|
149
|
+
* The shape matches `pipeline('feature-extraction', ...)` so the rest of
|
|
150
|
+
* computeRealEmbedding / computeBatchEmbeddings remains unchanged.
|
|
151
|
+
*
|
|
152
|
+
* The endpoint already returns L2-normalized vectors (and we re-normalize on
|
|
153
|
+
* receive inside the client), so the `pooling` / `normalize` options from
|
|
154
|
+
* upstream callers are no-ops here — that's the OpenAI contract.
|
|
155
|
+
*/
|
|
156
|
+
function createEndpointPipeline(client) {
|
|
157
|
+
return async (input) => {
|
|
158
|
+
const texts = Array.isArray(input) ? input : [input];
|
|
159
|
+
const vectors = await client.embed(texts);
|
|
160
|
+
const dim = vectors[0]?.length ?? getEmbeddingDimension();
|
|
161
|
+
const data = new Float32Array(texts.length * dim);
|
|
162
|
+
for (let i = 0; i < vectors.length; i++) {
|
|
163
|
+
data.set(vectors[i], i * dim);
|
|
164
|
+
}
|
|
165
|
+
return { data, dims: [texts.length, dim] };
|
|
166
|
+
};
|
|
167
|
+
}
|
|
80
168
|
/**
|
|
81
169
|
* Compute real embedding using transformer model
|
|
82
170
|
*
|
|
@@ -90,20 +178,21 @@ export async function computeRealEmbedding(text, config = {}) {
|
|
|
90
178
|
if (isNonSemanticText(text)) {
|
|
91
179
|
return new Array(getEmbeddingDimension()).fill(0);
|
|
92
180
|
}
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
const cached = embeddingCache.get(text);
|
|
96
|
-
if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
|
|
97
|
-
return cached.embedding;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
// Ensure model is initialized
|
|
181
|
+
// Ensure model is initialized BEFORE checking cache so the cache key
|
|
182
|
+
// namespace (which depends on endpoint identity) is stable.
|
|
101
183
|
if (!embeddingModel) {
|
|
102
184
|
await initializeModel(config);
|
|
103
185
|
}
|
|
104
186
|
if (!embeddingModel) {
|
|
105
187
|
throw new Error('Embedding model failed to initialize');
|
|
106
188
|
}
|
|
189
|
+
const key = cacheKey(text);
|
|
190
|
+
if (fullConfig.enableCache) {
|
|
191
|
+
const cached = embeddingCache.get(key);
|
|
192
|
+
if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
|
|
193
|
+
return cached.embedding;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
107
196
|
// Compute embedding
|
|
108
197
|
const startTime = performance.now();
|
|
109
198
|
const output = await embeddingModel(text, { pooling: 'mean', normalize: true });
|
|
@@ -121,7 +210,7 @@ export async function computeRealEmbedding(text, config = {}) {
|
|
|
121
210
|
if (oldestKey)
|
|
122
211
|
embeddingCache.delete(oldestKey);
|
|
123
212
|
}
|
|
124
|
-
embeddingCache.set(
|
|
213
|
+
embeddingCache.set(key, { embedding, timestamp: Date.now() });
|
|
125
214
|
}
|
|
126
215
|
return embedding;
|
|
127
216
|
}
|
|
@@ -134,9 +223,16 @@ export async function computeBatchEmbeddings(texts, config = {}) {
|
|
|
134
223
|
const uncachedTexts = [];
|
|
135
224
|
const uncachedIndices = [];
|
|
136
225
|
const results = new Array(texts.length).fill(null);
|
|
226
|
+
// Init BEFORE cache lookup so the cache key namespace is stable.
|
|
227
|
+
if (!embeddingModel) {
|
|
228
|
+
await initializeModel(config);
|
|
229
|
+
}
|
|
230
|
+
if (!embeddingModel) {
|
|
231
|
+
throw new Error('Embedding model failed to initialize');
|
|
232
|
+
}
|
|
137
233
|
if (fullConfig.enableCache) {
|
|
138
234
|
for (let i = 0; i < texts.length; i++) {
|
|
139
|
-
const cached = embeddingCache.get(texts[i]);
|
|
235
|
+
const cached = embeddingCache.get(cacheKey(texts[i]));
|
|
140
236
|
if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
|
|
141
237
|
results[i] = cached.embedding;
|
|
142
238
|
}
|
|
@@ -154,12 +250,6 @@ export async function computeBatchEmbeddings(texts, config = {}) {
|
|
|
154
250
|
}
|
|
155
251
|
// Compute uncached embeddings
|
|
156
252
|
if (uncachedTexts.length > 0) {
|
|
157
|
-
if (!embeddingModel) {
|
|
158
|
-
await initializeModel(config);
|
|
159
|
-
}
|
|
160
|
-
if (!embeddingModel) {
|
|
161
|
-
throw new Error('Embedding model failed to initialize');
|
|
162
|
-
}
|
|
163
253
|
const startTime = performance.now();
|
|
164
254
|
// Process in batches of 32 for memory efficiency
|
|
165
255
|
const BATCH_SIZE = 32;
|
|
@@ -184,7 +274,7 @@ export async function computeBatchEmbeddings(texts, config = {}) {
|
|
|
184
274
|
if (oldestKey)
|
|
185
275
|
embeddingCache.delete(oldestKey);
|
|
186
276
|
}
|
|
187
|
-
embeddingCache.set(uncachedTexts[textIndex], { embedding, timestamp: Date.now() });
|
|
277
|
+
embeddingCache.set(cacheKey(uncachedTexts[textIndex]), { embedding, timestamp: Date.now() });
|
|
188
278
|
}
|
|
189
279
|
}
|
|
190
280
|
}
|
|
@@ -231,5 +321,26 @@ export function resetInitialization() {
|
|
|
231
321
|
initializationFailed = false;
|
|
232
322
|
failureReason = '';
|
|
233
323
|
embeddingCache.clear();
|
|
324
|
+
if (endpointClient) {
|
|
325
|
+
endpointClient.close();
|
|
326
|
+
}
|
|
327
|
+
endpointClient = null;
|
|
328
|
+
endpointIdentity = null;
|
|
329
|
+
// Drop the identity-store's cached DB connection so tests that flip cwd or
|
|
330
|
+
// AQE_MEMORY_PATH between runs don't write into a stale handle.
|
|
331
|
+
resetEmbedderIdentityStore();
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* ADR-097: Returns true when the embedding pipeline is the external endpoint path,
|
|
335
|
+
* false when it's the in-process transformer (or uninitialized).
|
|
336
|
+
*/
|
|
337
|
+
export function isUsingEndpoint() {
|
|
338
|
+
return endpointClient !== null;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* ADR-097: Returns the endpoint identity fingerprint, or null when not using an endpoint.
|
|
342
|
+
*/
|
|
343
|
+
export function getEndpointIdentity() {
|
|
344
|
+
return endpointIdentity;
|
|
234
345
|
}
|
|
235
346
|
//# sourceMappingURL=real-embeddings.js.map
|
|
@@ -16,7 +16,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
16
16
|
import { safeJsonParse } from '../shared/safe-json.js';
|
|
17
17
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
18
18
|
import { getUnifiedMemory } from '../kernel/unified-memory.js';
|
|
19
|
-
import { computeBatchEmbeddings, getEmbeddingDimension } from './real-embeddings.js';
|
|
19
|
+
import { computeBatchEmbeddings, getEmbeddingDimension, isUsingEndpoint, } from './real-embeddings.js';
|
|
20
20
|
import { recordPatternUsage } from './pattern-usage-recorder.js';
|
|
21
21
|
export const DEFAULT_SQLITE_CONFIG = {
|
|
22
22
|
// LEGACY: Ignored when useUnified=true (the default). All data goes to memory.db
|
|
@@ -975,13 +975,26 @@ export class SQLitePatternStore {
|
|
|
975
975
|
}
|
|
976
976
|
if (textsWithIds.length === 0)
|
|
977
977
|
continue;
|
|
978
|
-
// Compute real embeddings via all-MiniLM-L6-v2 (async ONNX inference)
|
|
978
|
+
// Compute real embeddings via all-MiniLM-L6-v2 (async ONNX inference) or
|
|
979
|
+
// the ADR-097 endpoint. We MUST NOT silently fall back to hash embeddings
|
|
980
|
+
// when the endpoint is configured — mixing hash and transformer vectors in
|
|
981
|
+
// the same HNSW index poisons it (vectors are not comparable). When the
|
|
982
|
+
// endpoint is active we propagate the failure: a future backfill will
|
|
983
|
+
// retry; the existing hash-fallback path is preserved only for the
|
|
984
|
+
// in-process transformer-load failure case.
|
|
979
985
|
let embeddings;
|
|
980
986
|
try {
|
|
981
987
|
embeddings = await computeBatchEmbeddings(textsWithIds.map(t => t.text));
|
|
982
988
|
}
|
|
983
989
|
catch (e) {
|
|
984
|
-
|
|
990
|
+
if (isUsingEndpoint()) {
|
|
991
|
+
// Endpoint failed (or breaker open). Skip this batch entirely — do NOT
|
|
992
|
+
// poison the index. Re-throw so caller knows the run was incomplete.
|
|
993
|
+
throw new Error(`[SQLitePatternStore] external embedder endpoint failed during backfill; ` +
|
|
994
|
+
`aborting to protect HNSW index. Original error: ${toErrorMessage(e)}`);
|
|
995
|
+
}
|
|
996
|
+
// In-process transformer path: hash fallback is acceptable because the
|
|
997
|
+
// entire index in this mode is hash-based anyway.
|
|
985
998
|
console.warn(`[SQLitePatternStore] Transformer unavailable, falling back to hash embeddings: ${toErrorMessage(e)}`);
|
|
986
999
|
method = 'hash-fallback';
|
|
987
1000
|
embeddings = textsWithIds.map(t => hashEmbedding(t.text, dimension));
|