agentic-qe 3.15.10 → 3.15.11
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 +114 -0
- package/README.md +8 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2a/agent-cards/generator.js +6 -3
- package/dist/adapters/a2a/tasks/task-router.js +3 -1
- package/dist/adapters/trajectory-adapter.js +1 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
- package/dist/agents/overlay-loader.js +26 -21
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-TIDSQ3ZK.js} +2 -2
- package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-G3EPBVA7.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-ARC5C7GW.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
- package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-36DTATJV.js} +4 -4
- package/dist/cli/chunks/{arena-EKOOFVST.js → arena-K4I4QDXB.js} +2 -2
- package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-WQSJSJZF.js} +3 -3
- package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BB4K67MT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-CU3GOIU3.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-NJQX7ZNB.js} +2 -2
- package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-6YJF4FQW.js} +2 -2
- package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
- package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-25P77WA5.js} +1 -1
- package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-2CW7VRPH.js} +8 -8
- package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
- package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-2KFFEKSI.js} +2 -2
- package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-2VLYUF7U.js} +2 -2
- package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-325QCVDI.js} +2 -2
- package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-35M2X3C5.js} +2 -2
- package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-3RHOPP7A.js} +1 -1
- package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-4HJKQIX5.js} +2 -2
- package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
- package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-4RAQ7PJA.js} +2 -2
- package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4RH5I24Q.js} +2 -2
- package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-4UBVAJFO.js} +3 -3
- package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-4UX35V7P.js} +2 -2
- package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-4X4MWMHB.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-55CH76ZO.js} +3 -3
- package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-57LNKSW7.js} +2 -2
- package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
- package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-5HQP4SLM.js} +2 -2
- package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-5MNASJOH.js} +2 -2
- package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-5MTWCCZJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-5N25I53C.js} +2 -2
- package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-5WYZHDIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-5YLOLACR.js} +2 -2
- package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-672XOJDG.js} +1 -1
- package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-6NA3KZZT.js} +3 -3
- package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
- package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-76SNL7GU.js} +2 -2
- package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-7HEMJHPP.js} +2 -2
- package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7R5HC56U.js} +1 -1
- package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-AFFN6E6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-AMZKAJLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-AP3ADWDK.js} +2 -2
- package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-APPZATXA.js} +2 -2
- package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-AUUJBXWX.js} +2 -2
- package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-BTVWA35P.js} +2 -2
- package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-BZPE3LDO.js} +2 -2
- package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-CFWGGRE7.js} +1 -1
- package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-CIAL4YRY.js} +2 -2
- package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-CO3DX2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-DDEOZPWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-DOBZPSKE.js} +1 -1
- package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-DOFREOPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-E44NNCEU.js} +2 -2
- package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-E6PF35JZ.js} +2 -2
- package/dist/cli/chunks/{chunk-4SJYIX54.js → chunk-EBPJY4DI.js} +2 -2
- package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-EH2S6AOR.js} +2 -2
- package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-EIDJNT5C.js} +1 -1
- package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-EJPK7OTR.js} +2 -2
- package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-EK5GMOSO.js} +1 -1
- package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-ERN43HOX.js} +151 -149
- package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-ETVAYGCB.js} +11 -11
- package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-EWPUQCN4.js} +2 -2
- package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-FL32MTKT.js} +2 -2
- package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
- package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-FUYOOKTH.js} +5 -5
- package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FWSGPE3V.js} +3 -3
- package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-FZHSG75I.js} +2 -2
- package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-G2IJFNZS.js} +2 -2
- package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-G4CKPWF6.js} +1 -1
- package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-G4FAPO57.js} +2 -2
- package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-G77MLBDF.js} +2 -2
- package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-GBFUANTC.js} +1 -1
- package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-GVKVJJQX.js} +2 -2
- package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-GWJWSLDA.js} +2 -2
- package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-H43AFUKL.js} +2 -2
- package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
- package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-HDJUYAZG.js} +1 -1
- package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-HDNWSKHA.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-HFFPYC4G.js} +2 -2
- package/dist/cli/chunks/{chunk-WSF24I3D.js → chunk-HJ3XNTTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-HYXUN7BW.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-I36CRDHF.js} +2 -2
- package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-I4K2HTQU.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-IENZSO3K.js} +2 -2
- package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
- package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-IOZRKXR5.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-ITL3IN2E.js} +2 -2
- package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-ITPGWGQS.js} +14 -14
- package/dist/cli/chunks/{chunk-NSHU347M.js → chunk-IW6WDGHM.js} +1 -1
- package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-J4JMCZVA.js} +2 -2
- package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-JFLU7L3W.js} +2 -2
- package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-JGJXXAS6.js} +4 -4
- package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-JUMICXM6.js} +2 -2
- package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-K2HBNYAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-K7V2WZNF.js} +1 -1
- package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-KDI5JOYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-KJCIMNHS.js} +1 -1
- package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-KKYO2NKV.js} +2 -2
- package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-KSE5TDM5.js} +2 -2
- package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-KSLLHFVY.js} +1 -1
- package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-KXS3Y2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-LBX7M4LW.js} +2 -2
- package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-LCVEEII4.js} +2 -2
- package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-LD5CFK53.js} +32 -32
- package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-LPU6PAJE.js} +2 -2
- package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-LQ4NUC6Q.js} +2 -2
- package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
- package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-LXQ3B4RY.js} +2 -2
- package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-M5RQ6U3G.js} +2 -2
- package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-M5XYIQYZ.js} +2 -2
- package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
- package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-MIK4RBEH.js} +1 -1
- package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-NC6K7SCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-NKTWKYHB.js} +2 -2
- package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-NPZOBSAN.js} +2 -2
- package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-NQZNMCZU.js} +2 -2
- package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-NT7JRHMH.js} +1 -1
- package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-NTB342NJ.js} +1 -1
- package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-O4JAKWWM.js} +13 -13
- package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-OD5D4LSZ.js} +2 -2
- package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-OH5V5EJW.js} +2 -2
- package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-OHR7C777.js} +2 -2
- package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-OURITHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-OV5RPLKV.js} +2 -2
- package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-OYJC3YON.js} +2 -2
- package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-QDESWOZP.js} +2 -2
- package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
- package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-R5LGV6GZ.js} +2 -2
- package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-RBZCA7SD.js} +2 -2
- package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
- package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
- package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-RTY7VSZB.js} +2 -2
- package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-S6IYEBAI.js} +2 -2
- package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-SMVVAVN2.js} +2 -2
- package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-T5KHJ3J7.js} +5 -5
- package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-TCYSBC7Y.js} +1 -1
- package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-TFW7CCKS.js} +1 -1
- package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
- package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-U3LJNNVJ.js} +5 -5
- package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-UKKYMW3S.js} +2 -2
- package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-UMVSWQNB.js} +2 -2
- package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-UTTSH4NH.js} +3 -3
- package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-V5AADCBC.js} +1 -1
- package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-V7DA4HAK.js} +1 -1
- package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-VBK2YAYY.js} +2 -2
- package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-VEEYL2CZ.js} +2 -2
- package/dist/cli/chunks/{chunk-PPSAMXYN.js → chunk-VLD7Z2ED.js} +3 -3
- package/dist/cli/chunks/{chunk-N6PIIK6G.js → chunk-VO3DRK4P.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-VWUZSNVC.js} +1 -1
- package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-VYTILW4R.js} +2 -2
- package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-WCAVIJ64.js} +1 -1
- package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-WCVCOT4E.js} +2 -2
- package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-WM3SRRA6.js} +2 -2
- package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-X3PZCXWG.js} +1 -1
- package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-X4J73KP3.js} +1 -1
- package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-XDI5X3FR.js} +1 -1
- package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-XGBU3KEM.js} +2 -2
- package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-XGPTZUKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-XJKZ7FTR.js} +2 -2
- package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-XNLIWQYE.js} +2 -2
- package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-XS2XF3YG.js} +6 -5
- package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
- package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-YBBT3YYG.js} +1 -1
- package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-YNOCQ2SL.js} +1 -1
- package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-YOCULVHR.js} +1 -1
- package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-YPX2TV3M.js} +1 -1
- package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-Z2EA7A4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-ZMC543GI.js} +2 -2
- package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
- package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-ZP75ASUU.js} +1 -1
- package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-ZQHDA4O7.js} +1 -1
- package/dist/cli/chunks/{ci-MSKMVH5X.js → ci-6GUFAZMJ.js} +2 -2
- package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-J665XNOX.js} +2 -2
- package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-PEQQQWVD.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-HHB2JSKH.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-JKUJRWPN.js} +2 -2
- package/dist/cli/chunks/client-HL2COSFM.js +2 -0
- package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-Y77BWTAN.js} +2 -2
- package/dist/cli/chunks/{code-ZDJRIL3S.js → code-LV2HAGJY.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-4GKKSETB.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-WMKBYE5Y.js} +2 -2
- package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-SBGFAOIJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-AQHFIJXC.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-26AYFS2E.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4UD3DK55.js} +2 -2
- package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-TP4NZCG4.js} +2 -2
- package/dist/cli/chunks/{coverage-B7MCGNTE.js → coverage-B2KIXHAI.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
- package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-AVZEQZ4W.js} +2 -2
- package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-P574WWBW.js} +4 -4
- package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-XM2A7LQU.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
- package/dist/cli/chunks/{detect-56SKAGWX.js → detect-TYR7HT23.js} +2 -2
- package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-2DGVQGLS.js} +2 -2
- package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-RRA4ZOMF.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-IVZEZ5RB.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-DOBI67K6.js} +2 -2
- package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
- package/dist/cli/chunks/{eval-GNB574IM.js → eval-QV4LVPUF.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-DAPKT763.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-WVRFPHX7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-DEFTUIYT.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-O7ZXDDCD.js} +2 -2
- package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
- package/dist/cli/chunks/{fleet-2Y3ZE6CE.js → fleet-FVAUMKUT.js} +22 -22
- package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-LS4LZJDR.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-RFTERD4K.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +2 -0
- package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-PHL3F2PR.js} +2 -2
- package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-GYJ6D4QM.js} +30 -30
- package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-ZIMM647V.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
- package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-VOMBXJXG.js} +2 -2
- package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-PSMUBWK5.js} +26 -25
- package/dist/cli/chunks/init-wizard-FUC7KDVX.js +2 -0
- package/dist/cli/chunks/kernel-ZCPMCVMW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-2YNTFBWJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-XHJDPVAZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
- package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-GNSIDRNG.js} +3 -3
- package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-LQDM7IU2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
- package/dist/cli/chunks/{load-HPHKDGGL.js → load-YATHI72E.js} +2 -2
- package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
- package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-4Y6GDLYK.js} +2 -2
- package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-OUW3L7H2.js} +5 -5
- package/dist/cli/chunks/memory-backend-AAMQG6WH.js +2 -0
- package/dist/cli/chunks/memory-handlers-G3LFF53U.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-UBZJXAD2.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-AMMNWVH5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-Y44WDOER.js} +19 -19
- package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-ESR42RME.js} +2 -2
- package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-EDTS6OSC.js} +2 -2
- package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-5WONJSUX.js} +2 -2
- package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-IJXPCLD4.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-5ECKGZK6.js} +2 -2
- package/dist/cli/chunks/project-root-7QL4KP5C.js +2 -0
- package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-DRD3GVNW.js} +2 -2
- package/dist/cli/chunks/{prove-H52QGC6B.js → prove-KTGW2HMJ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
- package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-DV2WPRRS.js} +2 -2
- package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-HFUAFVZC.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
- package/dist/cli/chunks/{real-embeddings-RWGOVOXO.js → real-embeddings-RQRVOKVM.js} +2 -2
- package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-QWSKS5OY.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-RBAYRCHX.js} +2 -2
- package/dist/cli/chunks/router-LQB5SWAF.js +2 -0
- package/dist/cli/chunks/routing-feedback-OEEXA55N.js +2 -0
- package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-FMPP3XKO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-KZZT4HWF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-7CHEV35N.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-Q2TH52SN.js} +2 -2
- package/dist/cli/chunks/safe-db-PE6G3L55.js +2 -0
- package/dist/cli/chunks/schedule-OLKQ6QYW.js +2 -0
- package/dist/cli/chunks/scheduler-LSGBDFAT.js +2 -0
- package/dist/cli/chunks/{security-VSPNKCDS.js → security-CUEA3UIM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-DBNABOP7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +2 -0
- package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-IAHA3M6B.js} +2 -2
- package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-AFUCASTX.js} +2 -2
- package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-AQRV6JJ6.js} +2 -2
- package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-GX7FMJHL.js} +2 -2
- package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-XW5TLZ7M.js} +2 -2
- package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-TFKVUTNF.js} +2 -2
- package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
- package/dist/cli/chunks/{test-UWA377D4.js → test-D2XDJNDX.js} +11 -11
- package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
- package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-TS6I2PR7.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-HBBLPCZ3.js} +2 -2
- package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-3MBUX4PR.js} +2 -2
- package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-ZWMQO3L2.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
- package/dist/cli/chunks/{types-PJS2FGPF.js → types-5YEMGPSQ.js} +2 -2
- package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +2 -0
- package/dist/cli/chunks/unified-persistence-UCV7YETW.js +2 -0
- package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-2TPBKIHI.js} +2 -2
- package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XRAXXFW6.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-IYSCS3BZ.js} +2 -2
- package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-U6XWFRVT.js} +2 -2
- package/dist/cli/chunks/witness-chain-CVIWYTD2.js +2 -0
- package/dist/cli/chunks/witness-chain-VBKORKOX.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-K7YX2AO6.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-YBNKMOP6.js} +2 -2
- package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-UAJUILFQ.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
- package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-AVZ3GPAL.js} +2 -2
- package/dist/cli/commands/fleet.js +4 -1
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/test.js +5 -2
- package/dist/cli/handlers/init-handler.d.ts +12 -0
- package/dist/cli/handlers/init-handler.js +27 -12
- package/dist/cli/utils/ci-output.d.ts +2 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
- package/dist/coordination/handlers/coverage-collection.js +3 -1
- package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
- package/dist/coordination/handlers/coverage-runner.js +6 -22
- package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
- package/dist/coordination/handlers/coverage-stderr.js +39 -0
- package/dist/coordination/handlers/coverage-target.js +6 -3
- package/dist/coordination/handlers/handler-utils.js +3 -1
- package/dist/coordination/handlers/requirements-handlers.js +3 -2
- package/dist/coordination/handlers/security-handlers.js +34 -20
- package/dist/coordination/queen-coordinator.js +8 -3
- package/dist/coordination/task-executability.d.ts +12 -0
- package/dist/coordination/task-executability.js +27 -0
- package/dist/coordination/workflow-orchestrator.d.ts +6 -0
- package/dist/coordination/workflow-orchestrator.js +22 -8
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
- package/dist/domains/learning-optimization/services/production-intel.js +3 -1
- package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
- package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
- package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor.js +3 -2
- package/dist/domains/test-execution/coordinator.d.ts +2 -1
- package/dist/domains/test-execution/coordinator.js +5 -14
- package/dist/domains/test-execution/interfaces.d.ts +11 -1
- package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
- package/dist/domains/test-execution/services/retry-outcome.js +53 -0
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +3 -1
- package/dist/init/init-wizard-steps.js +5 -1
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/12-verification.js +14 -4
- package/dist/init/settings-merge.js +7 -4
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +7 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +31 -2
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +3 -1
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +5 -0
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/memory-auditor.js +3 -1
- package/dist/learning/qe-patterns.js +2 -1
- package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
- package/dist/learning/real-qe-reasoning-bank.js +70 -38
- package/dist/mcp/bundle.js +486 -481
- package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
- package/dist/mcp/handlers/domain-handler-configs.js +8 -2
- package/dist/mcp/handlers/task-handlers.d.ts +13 -0
- package/dist/mcp/handlers/task-handlers.js +42 -16
- package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
- package/dist/mcp/protocol-server.js +8 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/services/reasoning-bank-service.d.ts +3 -1
- package/dist/mcp/services/reasoning-bank-service.js +4 -0
- package/dist/mcp/tool-annotations.js +4 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +7 -0
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
- package/dist/mcp/tools/security-compliance/scan.js +4 -2
- package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
- package/dist/mcp/tools/test-execution/execute.js +3 -2
- package/dist/memory/crdt/crdt-store.js +5 -0
- package/dist/memory/crdt/lww-register.js +12 -2
- package/dist/optimization/early-exit-token-optimizer.js +3 -1
- package/dist/planning/goap-planner.js +5 -0
- package/dist/planning/plan-executor.js +5 -0
- package/dist/shared/io/confined-read.d.ts +74 -0
- package/dist/shared/io/confined-read.js +256 -0
- package/dist/shared/io/file-reader.d.ts +6 -6
- package/dist/shared/io/file-reader.js +16 -42
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/native-module-errors.d.ts +51 -0
- package/dist/shared/native-module-errors.js +129 -0
- package/dist/shared/safe-db.js +14 -4
- package/dist/shared/security/osv-client.js +4 -1
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/sync/readers/json-reader.js +2 -1
- package/dist/validation/anchor-set.d.ts +6 -0
- package/dist/validation/anchor-set.js +9 -1
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
- package/dist/cli/chunks/base-GTB6POYE.js +0 -2
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
- package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
- package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
- package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
- package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
- package/dist/cli/chunks/chunk-DURHK377.js +0 -742
- package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
- package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
- package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
- package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
- package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
- package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
- package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
- package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
- package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
- package/dist/cli/chunks/client-POSVREVS.js +0 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
- package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
- package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
- package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
|
@@ -13,6 +13,8 @@ import { BasePhase, } from './phase-interface.js';
|
|
|
13
13
|
import { openDatabase } from '../../shared/safe-db.js';
|
|
14
14
|
/** The `# <ISO timestamp>` header line written by configToYAML(). */
|
|
15
15
|
const CONFIG_TIMESTAMP_LINE = /^# \d{4}-\d{2}-\d{2}T[\d:.]+Z$/;
|
|
16
|
+
/** #1157: config keys that would reach Object.prototype through a plain object. */
|
|
17
|
+
const UNSAFE_YAML_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
16
18
|
/**
|
|
17
19
|
* Verification phase - verifies installation and writes markers
|
|
18
20
|
*/
|
|
@@ -173,8 +175,12 @@ export class VerificationPhase extends BasePhase {
|
|
|
173
175
|
// Top-level key (no indentation)
|
|
174
176
|
const topMatch = line.match(/^(\w+):\s*(.*)$/);
|
|
175
177
|
if (topMatch) {
|
|
176
|
-
|
|
178
|
+
// #1157: keys come from config.yaml; a `__proto__` section (and
|
|
179
|
+
// everything under it) is skipped instead of re-prototyping result.
|
|
180
|
+
currentSection = UNSAFE_YAML_KEYS.has(topMatch[1]) ? '' : topMatch[1];
|
|
177
181
|
currentSubSection = '';
|
|
182
|
+
if (!currentSection)
|
|
183
|
+
continue;
|
|
178
184
|
const value = topMatch[2].trim();
|
|
179
185
|
if (value && !value.startsWith('"')) {
|
|
180
186
|
// Simple value
|
|
@@ -191,9 +197,11 @@ export class VerificationPhase extends BasePhase {
|
|
|
191
197
|
// Second-level key (2-space indent)
|
|
192
198
|
const subMatch = line.match(/^ {2}(\w+):\s*(.*)$/);
|
|
193
199
|
if (subMatch && currentSection) {
|
|
194
|
-
currentSubSection = subMatch[1];
|
|
200
|
+
currentSubSection = UNSAFE_YAML_KEYS.has(subMatch[1]) ? '' : subMatch[1];
|
|
201
|
+
if (!currentSubSection)
|
|
202
|
+
continue;
|
|
195
203
|
const value = subMatch[2].trim();
|
|
196
|
-
if (!result[currentSection]) {
|
|
204
|
+
if (!Object.hasOwn(result, currentSection) || !result[currentSection]) {
|
|
197
205
|
result[currentSection] = {};
|
|
198
206
|
}
|
|
199
207
|
if (value) {
|
|
@@ -210,8 +218,10 @@ export class VerificationPhase extends BasePhase {
|
|
|
210
218
|
if (thirdMatch && currentSection && currentSubSection) {
|
|
211
219
|
const key = thirdMatch[1];
|
|
212
220
|
const value = thirdMatch[2].trim();
|
|
221
|
+
if (UNSAFE_YAML_KEYS.has(key))
|
|
222
|
+
continue;
|
|
213
223
|
const section = result[currentSection];
|
|
214
|
-
if (!section[currentSubSection]) {
|
|
224
|
+
if (!Object.hasOwn(section, currentSubSection) || !section[currentSubSection]) {
|
|
215
225
|
section[currentSubSection] = {};
|
|
216
226
|
}
|
|
217
227
|
if (typeof section[currentSubSection] === 'object' && !Array.isArray(section[currentSubSection])) {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - Generates full env vars and v3 settings sections
|
|
9
9
|
*/
|
|
10
10
|
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
11
|
+
import { getOwn, setOwn } from '../shared/utils/safe-record.js';
|
|
11
12
|
/**
|
|
12
13
|
* Create a one-time `.backup` of an existing settings.json before AQE modifies
|
|
13
14
|
* it — mirroring the CLAUDE.md backup convention.
|
|
@@ -75,22 +76,24 @@ export function isAqeHookEntry(entry) {
|
|
|
75
76
|
* 3. Preserve any hook types not in the new config
|
|
76
77
|
*/
|
|
77
78
|
export function mergeHooksSmart(existingHooks, newAqeHooks) {
|
|
79
|
+
// #1157: hook types come from the user's settings.json; read and write own
|
|
80
|
+
// entries only, so a type named `constructor` or `__proto__` is kept as-is.
|
|
78
81
|
const merged = {};
|
|
79
82
|
// Process hook types that have new AQE entries
|
|
80
83
|
for (const [hookType, newEntries] of Object.entries(newAqeHooks)) {
|
|
81
|
-
const existing = existingHooks
|
|
84
|
+
const existing = getOwn(existingHooks, hookType) || [];
|
|
82
85
|
// Keep only non-AQE entries from existing config
|
|
83
86
|
const userEntries = Array.isArray(existing)
|
|
84
87
|
? existing.filter((entry) => !isAqeHookEntry(entry))
|
|
85
88
|
: [];
|
|
86
89
|
// New AQE hooks go after user hooks (except PreToolUse guard which should be first)
|
|
87
|
-
merged
|
|
90
|
+
setOwn(merged, hookType, [...newEntries, ...userEntries]);
|
|
88
91
|
}
|
|
89
92
|
// Preserve hook types that are not in our new config (user's custom hook types)
|
|
90
93
|
for (const [hookType, hookArray] of Object.entries(existingHooks)) {
|
|
91
|
-
if (!merged
|
|
94
|
+
if (!Object.hasOwn(merged, hookType)) {
|
|
92
95
|
// This hook type isn't one we manage — keep it as-is
|
|
93
|
-
merged
|
|
96
|
+
setOwn(merged, hookType, hookArray);
|
|
94
97
|
}
|
|
95
98
|
}
|
|
96
99
|
return merged;
|
|
@@ -113,6 +113,7 @@ export declare class ExperienceReplay {
|
|
|
113
113
|
private prepared;
|
|
114
114
|
private initialized;
|
|
115
115
|
private initializationPromise;
|
|
116
|
+
private embedderUnavailableLogged;
|
|
116
117
|
private hnswIndex;
|
|
117
118
|
private idToExperienceId;
|
|
118
119
|
private experienceIdToHnswId;
|
|
@@ -150,6 +151,12 @@ export declare class ExperienceReplay {
|
|
|
150
151
|
* @returns The stored experience
|
|
151
152
|
*/
|
|
152
153
|
storeExperience(trajectory: Trajectory, strategy: string, tags?: string[]): Promise<Experience | null>;
|
|
154
|
+
/**
|
|
155
|
+
* #1022: embed text, or return null when no embedding runtime is available.
|
|
156
|
+
* The experience is then stored without a vector (backfilled at a later
|
|
157
|
+
* start that has an embedder) and similarity search finds no matches.
|
|
158
|
+
*/
|
|
159
|
+
private embedOrNull;
|
|
153
160
|
/**
|
|
154
161
|
* Get guidance for a new task based on similar experiences
|
|
155
162
|
*
|
|
@@ -60,6 +60,7 @@ export class ExperienceReplay {
|
|
|
60
60
|
prepared = new Map();
|
|
61
61
|
initialized = false;
|
|
62
62
|
initializationPromise = null;
|
|
63
|
+
embedderUnavailableLogged = false;
|
|
63
64
|
// Real HNSW index for O(log n) similarity search (150x-12,500x faster than linear scan)
|
|
64
65
|
hnswIndex;
|
|
65
66
|
// Mapping from HNSW numeric IDs to experience string IDs
|
|
@@ -399,7 +400,7 @@ export class ExperienceReplay {
|
|
|
399
400
|
.map(s => scrubReasoningBlocks(s.action));
|
|
400
401
|
// Generate embedding for similarity search
|
|
401
402
|
const embeddingText = `${task} ${strategy} ${keyActions.join(' ')}`;
|
|
402
|
-
const embedding = await
|
|
403
|
+
const embedding = (await this.embedOrNull(embeddingText)) ?? undefined;
|
|
403
404
|
const id = uuidv4();
|
|
404
405
|
const domain = trajectory.domain || 'test-generation';
|
|
405
406
|
const experience = {
|
|
@@ -456,6 +457,24 @@ export class ExperienceReplay {
|
|
|
456
457
|
}
|
|
457
458
|
return experience;
|
|
458
459
|
}
|
|
460
|
+
/**
|
|
461
|
+
* #1022: embed text, or return null when no embedding runtime is available.
|
|
462
|
+
* The experience is then stored without a vector (backfilled at a later
|
|
463
|
+
* start that has an embedder) and similarity search finds no matches.
|
|
464
|
+
*/
|
|
465
|
+
async embedOrNull(text) {
|
|
466
|
+
try {
|
|
467
|
+
return await computeRealEmbedding(text, this.config.embedding);
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
if (!this.embedderUnavailableLogged) {
|
|
471
|
+
this.embedderUnavailableLogged = true;
|
|
472
|
+
console.warn('[ExperienceReplay] No embedding runtime; experiences are stored without vectors ' +
|
|
473
|
+
'and similar-experience guidance is unavailable:', error instanceof Error ? error.message : error);
|
|
474
|
+
}
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
459
478
|
/**
|
|
460
479
|
* Get guidance for a new task based on similar experiences
|
|
461
480
|
*
|
|
@@ -465,6 +484,13 @@ export class ExperienceReplay {
|
|
|
465
484
|
*/
|
|
466
485
|
async getGuidance(task, domain) {
|
|
467
486
|
this.ensureInitialized();
|
|
487
|
+
// #1022: the reservoir blend below picks experiences without looking at
|
|
488
|
+
// the query and gives them a coherence-derived similarity. Without an
|
|
489
|
+
// embedding of the query nothing measures relevance, so return no guidance
|
|
490
|
+
// rather than query-independent picks with a made-up similarity.
|
|
491
|
+
if (!(await this.embedOrNull(scrubReasoningBlocks(task)))) {
|
|
492
|
+
return null;
|
|
493
|
+
}
|
|
468
494
|
// Find similar experiences via HNSW
|
|
469
495
|
const similar = await this.findSimilarExperiences(task, domain);
|
|
470
496
|
// Blend in high-coherence experiences from reservoir buffer (R10, ADR-087)
|
|
@@ -546,7 +572,10 @@ export class ExperienceReplay {
|
|
|
546
572
|
// Generate embedding for the task
|
|
547
573
|
// ADR-099: scrub so query embeddings match the scrubbed stored embeddings
|
|
548
574
|
task = scrubReasoningBlocks(task);
|
|
549
|
-
const taskEmbedding = await
|
|
575
|
+
const taskEmbedding = await this.embedOrNull(task);
|
|
576
|
+
if (!taskEmbedding) {
|
|
577
|
+
return [];
|
|
578
|
+
}
|
|
550
579
|
// Create query embedding for HNSW search
|
|
551
580
|
const queryEmbedding = {
|
|
552
581
|
vector: taskEmbedding,
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* - Automatic strategy recommendations
|
|
16
16
|
* - Pattern quality improvement over time
|
|
17
17
|
*/
|
|
18
|
-
import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQEPatternSearchResult, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
|
|
18
|
+
import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQEPatternSearchResult, type PatternSearchStatus, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
|
|
19
19
|
import { TrajectoryTracker, type Trajectory, type TrajectoryStep, type TrajectoryOptions, type TrajectoryTrackerConfig } from './trajectory-tracker.js';
|
|
20
20
|
import { ExperienceReplay, type ExperienceGuidance, type ExperienceReplayConfig } from './experience-replay.js';
|
|
21
21
|
import { PatternEvolution, type PatternVersion, type DriftDetectionResult, type MergeCandidate, type PatternEvolutionConfig } from './pattern-evolution.js';
|
|
@@ -183,6 +183,8 @@ export declare class EnhancedReasoningBankAdapter {
|
|
|
183
183
|
domain?: QEDomain;
|
|
184
184
|
minSimilarity?: number;
|
|
185
185
|
}): Promise<Result<RealQEPatternSearchResult[]>>;
|
|
186
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
187
|
+
getPatternSearchStatus(): PatternSearchStatus;
|
|
186
188
|
/**
|
|
187
189
|
* Record a pattern outcome with evolution tracking
|
|
188
190
|
*/
|
|
@@ -297,6 +297,11 @@ export class EnhancedReasoningBankAdapter {
|
|
|
297
297
|
this.ensureInitialized();
|
|
298
298
|
return this.reasoningBank.searchQEPatterns(query, options);
|
|
299
299
|
}
|
|
300
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
301
|
+
getPatternSearchStatus() {
|
|
302
|
+
this.ensureInitialized();
|
|
303
|
+
return this.reasoningBank.getPatternSearchStatus();
|
|
304
|
+
}
|
|
300
305
|
/**
|
|
301
306
|
* Record a pattern outcome with evolution tracking
|
|
302
307
|
*/
|
|
@@ -69,7 +69,8 @@ function resolveField(result, fieldPath) {
|
|
|
69
69
|
for (const part of parts) {
|
|
70
70
|
if (current === null || current === undefined)
|
|
71
71
|
break;
|
|
72
|
-
|
|
72
|
+
// #1157: an inherited member such as `toString` is not a field.
|
|
73
|
+
if (typeof current === 'object' && Object.hasOwn(current, part)) {
|
|
73
74
|
current = current[part];
|
|
74
75
|
}
|
|
75
76
|
else {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* @module learning/dream/insight-generator
|
|
15
15
|
*/
|
|
16
16
|
import { randomUUID } from 'crypto';
|
|
17
|
+
import { getOwn, setOwn } from '../../shared/utils/safe-record.js';
|
|
17
18
|
/**
|
|
18
19
|
* Default insight configuration
|
|
19
20
|
*/
|
|
@@ -320,10 +321,10 @@ export class InsightGenerator {
|
|
|
320
321
|
};
|
|
321
322
|
for (const node of activeNodes) {
|
|
322
323
|
const typeKey = node.conceptType ?? 'pattern';
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
324
|
+
// #1157: concept types come from stored nodes; own buckets only.
|
|
325
|
+
const bucket = getOwn(byType, typeKey) ?? [];
|
|
326
|
+
setOwn(byType, typeKey, bucket);
|
|
327
|
+
bucket.push(node);
|
|
327
328
|
}
|
|
328
329
|
// Gap: Error without resolution
|
|
329
330
|
for (const errorNode of byType.error ?? []) {
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
import { randomUUID } from 'crypto';
|
|
60
60
|
import { LoggerFactory } from '../logging/index.js';
|
|
61
61
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
62
|
+
import { createSafeRecord } from '../shared/utils/safe-record.js';
|
|
62
63
|
const logger = LoggerFactory.create('MemoryAuditor');
|
|
63
64
|
/**
|
|
64
65
|
* Default auditor configuration
|
|
@@ -319,7 +320,8 @@ export class MemoryCoherenceAuditor {
|
|
|
319
320
|
* Group patterns by domain
|
|
320
321
|
*/
|
|
321
322
|
groupByDomain(patterns) {
|
|
322
|
-
|
|
323
|
+
// #1157: domains come from stored pattern rows.
|
|
324
|
+
const groups = createSafeRecord();
|
|
323
325
|
for (const pattern of patterns) {
|
|
324
326
|
const domain = pattern.qeDomain;
|
|
325
327
|
if (!groups[domain]) {
|
|
@@ -163,7 +163,8 @@ export function validateQEPattern(pattern) {
|
|
|
163
163
|
export function applyPatternTemplate(template, variables) {
|
|
164
164
|
let content = template.content;
|
|
165
165
|
for (const variable of template.variables) {
|
|
166
|
-
|
|
166
|
+
// #1157: the variable name comes from a stored pattern; read own values only.
|
|
167
|
+
const value = (Object.hasOwn(variables, variable.name) ? variables[variable.name] : undefined) ?? variable.defaultValue;
|
|
167
168
|
if (variable.required && value === undefined) {
|
|
168
169
|
throw new Error(`Required variable ${variable.name} not provided`);
|
|
169
170
|
}
|
|
@@ -38,6 +38,17 @@ export interface RealQEPatternSearchResult {
|
|
|
38
38
|
matchType: 'vector' | 'lexical';
|
|
39
39
|
canReuse: boolean;
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* #1022: how pattern search works in this process. Without an embedding
|
|
43
|
+
* runtime the bank stores patterns text-only (vectors pending, filled later by
|
|
44
|
+
* `aqe learning backfill-embeddings`) and searches by SQLite FTS text matching
|
|
45
|
+
* only. No similarity score is computed in that mode.
|
|
46
|
+
*/
|
|
47
|
+
export interface PatternSearchStatus {
|
|
48
|
+
mode: 'vector' | 'lexical-only';
|
|
49
|
+
/** Why vector search is unavailable (only for 'lexical-only'). */
|
|
50
|
+
reason?: string;
|
|
51
|
+
}
|
|
41
52
|
export interface RealQERoutingRequest {
|
|
42
53
|
task: string;
|
|
43
54
|
taskType?: 'test-generation' | 'analysis' | 'debugging' | 'optimization';
|
|
@@ -94,6 +105,8 @@ export interface RealQEReasoningBankStats {
|
|
|
94
105
|
transformerAvailable: boolean;
|
|
95
106
|
embeddingDimension: number;
|
|
96
107
|
sqliteDbPath: string;
|
|
108
|
+
/** #1022: whether pattern search uses vectors, or text matching only */
|
|
109
|
+
patternSearch: PatternSearchStatus;
|
|
97
110
|
/** ADR-061: Asymmetric learning metrics */
|
|
98
111
|
asymmetricLearning?: {
|
|
99
112
|
failurePenaltyRatio: string;
|
|
@@ -119,6 +132,8 @@ export declare class RealQEReasoningBank {
|
|
|
119
132
|
private hnswIndex;
|
|
120
133
|
private patternIdMap;
|
|
121
134
|
private initialized;
|
|
135
|
+
/** #1022: set when no embedding runtime is available; null when vectors work. */
|
|
136
|
+
private embedderUnavailableReason;
|
|
122
137
|
private stats;
|
|
123
138
|
private routingLatencies;
|
|
124
139
|
private readonly asymmetricEngine;
|
|
@@ -128,6 +143,8 @@ export declare class RealQEReasoningBank {
|
|
|
128
143
|
* Initialize the QE ReasoningBank
|
|
129
144
|
*/
|
|
130
145
|
initialize(): Promise<void>;
|
|
146
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
147
|
+
getPatternSearchStatus(): PatternSearchStatus;
|
|
131
148
|
/**
|
|
132
149
|
* Initialize HNSW index for fast similarity search
|
|
133
150
|
*/
|
|
@@ -153,6 +170,8 @@ export declare class RealQEReasoningBank {
|
|
|
153
170
|
domain?: QEDomain;
|
|
154
171
|
minSimilarity?: number;
|
|
155
172
|
}): Promise<Result<RealQEPatternSearchResult[]>>;
|
|
173
|
+
/** Append HNSW vector matches for `query` to `patterns`. */
|
|
174
|
+
private collectVectorMatches;
|
|
156
175
|
/**
|
|
157
176
|
* Route a task to optimal agent
|
|
158
177
|
*/
|
|
@@ -80,6 +80,8 @@ export class RealQEReasoningBank {
|
|
|
80
80
|
hnswIndex = null;
|
|
81
81
|
patternIdMap = new Map();
|
|
82
82
|
initialized = false;
|
|
83
|
+
/** #1022: set when no embedding runtime is available; null when vectors work. */
|
|
84
|
+
embedderUnavailableReason = null;
|
|
83
85
|
// Statistics tracking - using CircularBuffer for O(1) operations (ADR memory leak fix)
|
|
84
86
|
stats = {
|
|
85
87
|
routingRequests: 0,
|
|
@@ -167,12 +169,24 @@ export class RealQEReasoningBank {
|
|
|
167
169
|
await this.sqliteStore.initialize();
|
|
168
170
|
logger.info('SQLite persistence initialized');
|
|
169
171
|
// Establish executable provenance before any persisted vectors enter ANN.
|
|
170
|
-
|
|
171
|
-
//
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
// #1022: without an embedding runtime (no @huggingface/transformers and no
|
|
173
|
+
// AQE_EMBEDDER_ENDPOINT) run text-only instead of failing: no vector is
|
|
174
|
+
// computed, stored or searched (ADR-097: no hash-embedding fallback).
|
|
175
|
+
try {
|
|
176
|
+
await computeRealEmbedding(EMBEDDING_SPACE_CANARY, this.qeConfig.embeddings);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
this.embedderUnavailableReason = toErrorMessage(error);
|
|
180
|
+
logger.warn('No embedding runtime: patterns are stored without vectors (pending ' +
|
|
181
|
+
'`aqe learning backfill-embeddings`) and searched by text matching only', { reason: this.embedderUnavailableReason });
|
|
182
|
+
}
|
|
183
|
+
if (this.embedderUnavailableReason === null) {
|
|
184
|
+
// Initialize HNSW index
|
|
185
|
+
await this.initializeHNSW();
|
|
186
|
+
logger.info('HNSW index initialized');
|
|
187
|
+
// Load existing patterns into HNSW
|
|
188
|
+
await this.loadPatternsIntoHNSW();
|
|
189
|
+
}
|
|
176
190
|
// Load foundational patterns ONLY if this is a brand-new database (no tables or genuinely empty).
|
|
177
191
|
// CRITICAL: Do NOT overwrite existing data. If patterns were unexpectedly wiped,
|
|
178
192
|
// loading 22 seed patterns would mask the data loss. Log a warning instead.
|
|
@@ -193,6 +207,12 @@ export class RealQEReasoningBank {
|
|
|
193
207
|
const initTime = performance.now() - startTime;
|
|
194
208
|
logger.info('Fully initialized', { durationMs: Math.round(initTime) });
|
|
195
209
|
}
|
|
210
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
211
|
+
getPatternSearchStatus() {
|
|
212
|
+
return this.embedderUnavailableReason === null
|
|
213
|
+
? { mode: 'vector' }
|
|
214
|
+
: { mode: 'lexical-only', reason: this.embedderUnavailableReason };
|
|
215
|
+
}
|
|
196
216
|
/**
|
|
197
217
|
* Initialize HNSW index for fast similarity search
|
|
198
218
|
*/
|
|
@@ -311,9 +331,12 @@ export class RealQEReasoningBank {
|
|
|
311
331
|
async storeQEPattern(options) {
|
|
312
332
|
// Require explicit initialization - don't auto-initialize to avoid memory issues
|
|
313
333
|
try {
|
|
314
|
-
// Generate REAL embedding using transformer model
|
|
334
|
+
// Generate REAL embedding using transformer model. #1022: without an
|
|
335
|
+
// embedding runtime the pattern is stored text-only (vector pending).
|
|
315
336
|
const textToEmbed = `${options.name} ${options.description || ''} ${options.context?.tags?.join(' ') || ''}`;
|
|
316
|
-
const embedding =
|
|
337
|
+
const embedding = this.embedderUnavailableReason === null
|
|
338
|
+
? await computeRealEmbedding(textToEmbed, this.qeConfig.embeddings)
|
|
339
|
+
: undefined;
|
|
317
340
|
// Detect QE domain
|
|
318
341
|
const qeDomain = detectQEDomain(textToEmbed) || 'test-generation';
|
|
319
342
|
// ADR-058: Check MemoryWriteGate for contradictions before storing
|
|
@@ -374,7 +397,7 @@ export class RealQEReasoningBank {
|
|
|
374
397
|
// Store in SQLite
|
|
375
398
|
this.sqliteStore.storePattern(pattern, embedding);
|
|
376
399
|
// Add to HNSW index
|
|
377
|
-
if (this.hnswIndex) {
|
|
400
|
+
if (this.hnswIndex && embedding) {
|
|
378
401
|
const index = this.hnswIndex.getCurrentCount();
|
|
379
402
|
this.hnswIndex.addPoint(embedding, index);
|
|
380
403
|
this.patternIdMap.set(index, patternId);
|
|
@@ -410,38 +433,15 @@ export class RealQEReasoningBank {
|
|
|
410
433
|
// Require explicit initialization - don't auto-initialize to avoid memory issues
|
|
411
434
|
const startTime = performance.now();
|
|
412
435
|
try {
|
|
413
|
-
if (!this.hnswIndex) {
|
|
414
|
-
return err(new Error('HNSW index not available'));
|
|
415
|
-
}
|
|
416
|
-
// Generate REAL embedding for query
|
|
417
|
-
const queryEmbedding = await computeRealEmbedding(query, this.qeConfig.embeddings);
|
|
418
|
-
// Search HNSW index
|
|
419
436
|
const limit = options.limit || 10;
|
|
420
|
-
const results = this.hnswIndex.searchKnn(queryEmbedding, limit * 2); // Get extra for filtering
|
|
421
437
|
const patterns = [];
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
continue;
|
|
428
|
-
}
|
|
429
|
-
const patternId = this.patternIdMap.get(hnswIndex);
|
|
430
|
-
if (!patternId)
|
|
431
|
-
continue;
|
|
432
|
-
const pattern = this.sqliteStore.getPattern(patternId);
|
|
433
|
-
if (!pattern)
|
|
434
|
-
continue;
|
|
435
|
-
// Filter by domain if specified
|
|
436
|
-
if (options.domain && pattern.qeDomain !== options.domain) {
|
|
437
|
-
continue;
|
|
438
|
+
// #1022: without an embedding runtime only the lexical (FTS) branch
|
|
439
|
+
// below runs; its hits are labelled matchType 'lexical'.
|
|
440
|
+
if (this.embedderUnavailableReason === null) {
|
|
441
|
+
if (!this.hnswIndex) {
|
|
442
|
+
return err(new Error('HNSW index not available'));
|
|
438
443
|
}
|
|
439
|
-
|
|
440
|
-
const ageDays = (Date.now() - new Date(pattern.lastUsedAt).getTime()) / 86_400_000;
|
|
441
|
-
patterns.push({ pattern, similarity, score: similarity, matchType: 'vector',
|
|
442
|
-
canReuse: Boolean(pattern.reusable && similarity >= reuse.minSimilarityForReuse
|
|
443
|
-
&& pattern.successRate >= reuse.minSuccessRateForReuse && ageDays <= reuse.maxAgeForReuse),
|
|
444
|
-
});
|
|
444
|
+
await this.collectVectorMatches(query, limit, options, patterns);
|
|
445
445
|
}
|
|
446
446
|
const existing = new Map(patterns.map(hit => [hit.pattern.id, hit]));
|
|
447
447
|
for (const lexical of this.sqliteStore.searchFTS(query, limit * 2)) {
|
|
@@ -471,6 +471,37 @@ export class RealQEReasoningBank {
|
|
|
471
471
|
return err(toError(error));
|
|
472
472
|
}
|
|
473
473
|
}
|
|
474
|
+
/** Append HNSW vector matches for `query` to `patterns`. */
|
|
475
|
+
async collectVectorMatches(query, limit, options, patterns) {
|
|
476
|
+
// Generate REAL embedding for query
|
|
477
|
+
const queryEmbedding = await computeRealEmbedding(query, this.qeConfig.embeddings);
|
|
478
|
+
// Search HNSW index
|
|
479
|
+
const results = this.hnswIndex.searchKnn(queryEmbedding, limit * 2); // Get extra for filtering
|
|
480
|
+
for (let i = 0; i < results.neighbors.length; i++) {
|
|
481
|
+
const hnswIndex = results.neighbors[i];
|
|
482
|
+
const distance = results.distances[i];
|
|
483
|
+
const similarity = 1 - distance; // Convert distance to similarity
|
|
484
|
+
if (options.minSimilarity !== undefined && similarity < options.minSimilarity) {
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
487
|
+
const patternId = this.patternIdMap.get(hnswIndex);
|
|
488
|
+
if (!patternId)
|
|
489
|
+
continue;
|
|
490
|
+
const pattern = this.sqliteStore.getPattern(patternId);
|
|
491
|
+
if (!pattern)
|
|
492
|
+
continue;
|
|
493
|
+
// Filter by domain if specified
|
|
494
|
+
if (options.domain && pattern.qeDomain !== options.domain) {
|
|
495
|
+
continue;
|
|
496
|
+
}
|
|
497
|
+
const reuse = DEFAULT_PATTERN_STORE_CONFIG.reuseOptimization;
|
|
498
|
+
const ageDays = (Date.now() - new Date(pattern.lastUsedAt).getTime()) / 86_400_000;
|
|
499
|
+
patterns.push({ pattern, similarity, score: similarity, matchType: 'vector',
|
|
500
|
+
canReuse: Boolean(pattern.reusable && similarity >= reuse.minSimilarityForReuse
|
|
501
|
+
&& pattern.successRate >= reuse.minSuccessRateForReuse && ageDays <= reuse.maxAgeForReuse),
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
}
|
|
474
505
|
/**
|
|
475
506
|
* Route a task to optimal agent
|
|
476
507
|
*/
|
|
@@ -701,6 +732,7 @@ export class RealQEReasoningBank {
|
|
|
701
732
|
: 0,
|
|
702
733
|
embeddingCacheSize: 0, // Would need to track this in real-embeddings
|
|
703
734
|
transformerAvailable: isTransformerAvailable(),
|
|
735
|
+
patternSearch: this.getPatternSearchStatus(),
|
|
704
736
|
embeddingDimension: getEmbeddingDimension(),
|
|
705
737
|
sqliteDbPath: this.qeConfig.sqlite.dbPath || '.agentic-qe/memory.db',
|
|
706
738
|
// ADR-061: Asymmetric learning stats
|