agentic-qe 3.9.17 → 3.9.19
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/helpers/statusline-v3.cjs +1 -1
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +56 -0
- package/README.md +65 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-5NI3IO42.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-JN7W7O5X.js → agent-booster-wasm-HVBKHNIS.js} +2 -2
- package/dist/cli/chunks/{agent-handler-F6Q75SJQ.js → agent-handler-XNBDYRSJ.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-3GGTDVR4.js → agent-memory-branch-YCVTQEMJ.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-JOUK5HMO.js +2 -0
- package/dist/cli/chunks/{audit-R7KN45HM.js → audit-6C2PE7OY.js} +2 -2
- package/dist/cli/chunks/base-DCAB7AHK.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-2LTGEMYR.js → better-sqlite3-HZPCHUQU.js} +2 -2
- package/dist/cli/chunks/{brain-handler-PML5L6WQ.js → brain-handler-OV75Q2NM.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-OKUPS2XC.js → branch-enumerator-QW6D42HJ.js} +2 -2
- package/dist/cli/chunks/{browser-KOQOTSAT.js → browser-5BA7Q7OR.js} +2 -2
- package/dist/cli/chunks/browser-workflow-A4UV73SZ.js +2 -0
- package/dist/cli/chunks/{chunk-ZLOMFM25.js → chunk-255CWHTF.js} +2 -2
- package/dist/cli/chunks/{chunk-QW554DTP.js → chunk-2SIQ742L.js} +1 -1
- package/dist/cli/chunks/{chunk-XMMKAV5R.js → chunk-2SSDY6OE.js} +2 -2
- package/dist/cli/chunks/{chunk-HMT6LKHH.js → chunk-2WJLEZKP.js} +2 -2
- package/dist/cli/chunks/{chunk-VX6XHAG2.js → chunk-2WM4NYM5.js} +2 -2
- package/dist/cli/chunks/{chunk-6PRIY3HT.js → chunk-2XATUQIG.js} +2 -2
- package/dist/cli/chunks/{chunk-BCBC3DVN.js → chunk-3546SG2L.js} +2 -2
- package/dist/cli/chunks/{chunk-ORNWQXEX.js → chunk-37DTXQ6P.js} +2 -2
- package/dist/cli/chunks/{chunk-3GYAIW2P.js → chunk-3HQ4AZDH.js} +2 -2
- package/dist/cli/chunks/{chunk-YUCMGFHE.js → chunk-3X3QQZ7Q.js} +2 -2
- package/dist/cli/chunks/{chunk-ZQKNVZPD.js → chunk-44SPMVML.js} +2 -2
- package/dist/cli/chunks/{chunk-65Z6HMDA.js → chunk-5KGFDNYI.js} +2 -2
- package/dist/cli/chunks/{chunk-OUSQ4KQN.js → chunk-5LXWEAEJ.js} +2 -2
- package/dist/cli/chunks/{chunk-DJXYFFGA.js → chunk-5MGRZ4YD.js} +2 -2
- package/dist/cli/chunks/{chunk-6YFEWIL5.js → chunk-5R2DUR3A.js} +2 -2
- package/dist/cli/chunks/{chunk-QMVGGG4B.js → chunk-5X2AUPK2.js} +1 -1
- package/dist/cli/chunks/{chunk-QYDBV5MD.js → chunk-6BRUQTC7.js} +1 -1
- package/dist/cli/chunks/{chunk-RP2RHB7H.js → chunk-7IV2RK5M.js} +2 -2
- package/dist/cli/chunks/{chunk-A3WC5KTG.js → chunk-7WMHLBNZ.js} +1 -1
- package/dist/cli/chunks/{chunk-VYCFMW64.js → chunk-AEET2WOI.js} +68 -67
- package/dist/cli/chunks/{chunk-V4DMYY6P.js → chunk-AG7J7DTM.js} +2 -2
- package/dist/cli/chunks/{chunk-JT2KLBDB.js → chunk-ALYUJEYA.js} +2 -2
- package/dist/cli/chunks/{chunk-L6ZJSFAA.js → chunk-AOASQYOO.js} +1 -1
- package/dist/cli/chunks/{chunk-6YCZDIGF.js → chunk-AZKVGH5I.js} +2 -2
- package/dist/cli/chunks/{chunk-3UGV2XWF.js → chunk-B2EHSFUW.js} +2 -2
- package/dist/cli/chunks/{chunk-TATCL3AK.js → chunk-B65GTWF3.js} +2 -2
- package/dist/cli/chunks/{chunk-PMH52K5J.js → chunk-BB3KUX6C.js} +1 -1
- package/dist/cli/chunks/{chunk-EGBRCXYT.js → chunk-BFBR2ZZJ.js} +2 -2
- package/dist/cli/chunks/{chunk-LD4OYOX2.js → chunk-BGTYOZRK.js} +2 -2
- package/dist/cli/chunks/{chunk-KUEG6K4A.js → chunk-BOUCIIUI.js} +1 -1
- package/dist/cli/chunks/{chunk-AZWCJFT6.js → chunk-C5YFCM2H.js} +2 -2
- package/dist/cli/chunks/{chunk-F5X3U57Y.js → chunk-CYLQTVIA.js} +2 -2
- package/dist/cli/chunks/{chunk-G3G5QEHL.js → chunk-D2EHD2KF.js} +1 -1
- package/dist/cli/chunks/{chunk-AFLTMVMT.js → chunk-D74RGYKI.js} +1 -1
- package/dist/cli/chunks/{chunk-QVJQXRHU.js → chunk-DAPBSAVT.js} +2 -2
- package/dist/cli/chunks/{chunk-BGY4CHZA.js → chunk-DZS7XQ2Z.js} +2 -2
- package/dist/cli/chunks/{chunk-RYATPB5L.js → chunk-EW5TQQBR.js} +2 -2
- package/dist/cli/chunks/{chunk-L5JZIORJ.js → chunk-EZZJ5XD6.js} +2 -2
- package/dist/cli/chunks/{chunk-MNSF47HC.js → chunk-FJJLNCSL.js} +3 -3
- package/dist/cli/chunks/{chunk-6F6BNLVP.js → chunk-FL2DMHOQ.js} +1 -1
- package/dist/cli/chunks/{chunk-EVQYUUQ3.js → chunk-FNVA7U7X.js} +2 -2
- package/dist/cli/chunks/{chunk-I3NUJ6KJ.js → chunk-FPVXXQVX.js} +3 -3
- package/dist/cli/chunks/{chunk-K4FG3CRS.js → chunk-FT3MAIRW.js} +3 -3
- package/dist/cli/chunks/{chunk-CZXV3JAF.js → chunk-G2V4GMPR.js} +3 -3
- package/dist/cli/chunks/chunk-GJ5FON37.js +15 -0
- package/dist/cli/chunks/{chunk-6PCGUJCG.js → chunk-GL742O2V.js} +4 -4
- package/dist/cli/chunks/{chunk-X66N7E7D.js → chunk-GVDLCJC5.js} +1 -1
- package/dist/cli/chunks/{chunk-3KIUCAVI.js → chunk-GYDE5TCN.js} +1 -1
- package/dist/cli/chunks/{chunk-2K7GRX5U.js → chunk-GYESQBDU.js} +2 -2
- package/dist/cli/chunks/{chunk-63ERVKIO.js → chunk-H4QM37XS.js} +1 -1
- package/dist/cli/chunks/{chunk-VI2I5R6C.js → chunk-HCSTXZYE.js} +2 -2
- package/dist/cli/chunks/{chunk-6HGRJPD6.js → chunk-HJ7CRPZY.js} +1 -1
- package/dist/cli/chunks/{chunk-G5DEPXD4.js → chunk-HQFREZRX.js} +2 -2
- package/dist/cli/chunks/{chunk-7VGZDTY4.js → chunk-HVNW3TZS.js} +1 -1
- package/dist/cli/chunks/{chunk-W5HTZ3VZ.js → chunk-I3JRRFVT.js} +2 -2
- package/dist/cli/chunks/{chunk-Y47U7ICT.js → chunk-IG2RCBHJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4TDIA2EN.js → chunk-IPLQPBJA.js} +2 -2
- package/dist/cli/chunks/{chunk-ARN2KDLJ.js → chunk-IV74GAZN.js} +2 -2
- package/dist/cli/chunks/{chunk-I64R2D4U.js → chunk-J7F65KKG.js} +4 -4
- package/dist/cli/chunks/{chunk-A67FRRPJ.js → chunk-JCPJG2KU.js} +3 -3
- package/dist/cli/chunks/{chunk-HQXRCW7Z.js → chunk-JLX35EPX.js} +2 -2
- package/dist/cli/chunks/{chunk-42TUEMH7.js → chunk-JYHZK44T.js} +1 -1
- package/dist/cli/chunks/{chunk-63V33NAB.js → chunk-K554X3T4.js} +2 -2
- package/dist/cli/chunks/{chunk-P2V5ZG3Q.js → chunk-KTDGHN2J.js} +1 -1
- package/dist/cli/chunks/{chunk-FVVZWNLV.js → chunk-KU7OXAFY.js} +1 -1
- package/dist/cli/chunks/{chunk-5J444NJR.js → chunk-LDBHCOM3.js} +2 -2
- package/dist/cli/chunks/{chunk-PGTMLW5K.js → chunk-LTE3CDOY.js} +2 -2
- package/dist/cli/chunks/{chunk-WP55YBB2.js → chunk-M6EP724N.js} +1 -1
- package/dist/cli/chunks/{chunk-Z5R46W6Q.js → chunk-MIQAFOFO.js} +1 -1
- package/dist/cli/chunks/{chunk-OSBJWQZL.js → chunk-MMVSIESL.js} +2 -2
- package/dist/cli/chunks/{chunk-WGEJ646F.js → chunk-MN4366PQ.js} +2 -2
- package/dist/cli/chunks/{chunk-7PWW2OXP.js → chunk-MTHO6A3V.js} +1 -1
- package/dist/cli/chunks/{chunk-UTO2M76W.js → chunk-N2PLNYEV.js} +1 -1
- package/dist/cli/chunks/{chunk-BCIEQ4IP.js → chunk-NBBIA3QA.js} +2 -2
- package/dist/cli/chunks/{chunk-2LXXYKAP.js → chunk-NMYZSZHW.js} +2 -2
- package/dist/cli/chunks/{chunk-V3VJNWOF.js → chunk-NPSWRGNT.js} +2 -2
- package/dist/cli/chunks/{chunk-PEHHOJE6.js → chunk-NXO7CT5K.js} +2 -2
- package/dist/cli/chunks/{chunk-42HSEBOH.js → chunk-O5ZP3CBF.js} +2 -2
- package/dist/cli/chunks/{chunk-DR6SJ6P3.js → chunk-O6UMETOH.js} +2 -2
- package/dist/cli/chunks/{chunk-CPZUNBSQ.js → chunk-OEQCZBBM.js} +2 -2
- package/dist/cli/chunks/{chunk-PJZHNAUT.js → chunk-P6EYD4V3.js} +2 -2
- package/dist/cli/chunks/{chunk-DDJUVCKF.js → chunk-PS72GF4R.js} +3 -3
- package/dist/cli/chunks/{chunk-LA565BGJ.js → chunk-PUUTYV32.js} +2 -2
- package/dist/cli/chunks/{chunk-AZQ476BM.js → chunk-QOK4TIE4.js} +2 -2
- package/dist/cli/chunks/chunk-R5IL3XD5.js +69 -0
- package/dist/cli/chunks/{chunk-BUWZOMC7.js → chunk-RL5CBCBV.js} +1 -1
- package/dist/cli/chunks/{chunk-FYNDV2NZ.js → chunk-SKDDAPBV.js} +1 -1
- package/dist/cli/chunks/{chunk-K44EQV74.js → chunk-SKNHAGYP.js} +2 -2
- package/dist/cli/chunks/{chunk-CQSU7NTG.js → chunk-SLDYG7LC.js} +2 -2
- package/dist/cli/chunks/{chunk-PV6WBC2D.js → chunk-SRKBR4DU.js} +2 -2
- package/dist/cli/chunks/{chunk-XZOJWFLH.js → chunk-TCUIYIZ4.js} +1 -1
- package/dist/cli/chunks/{chunk-JVDYHVF2.js → chunk-TMAIHTE3.js} +4 -4
- package/dist/cli/chunks/{chunk-B36RPXAQ.js → chunk-TXCOK5DC.js} +2 -2
- package/dist/cli/chunks/{chunk-KTUSZRS3.js → chunk-U257SS7D.js} +2 -2
- package/dist/cli/chunks/{chunk-32FWC6G3.js → chunk-U2WMCNNR.js} +2 -2
- package/dist/cli/chunks/{chunk-I5BLJ2QQ.js → chunk-UIASVDYG.js} +2 -2
- package/dist/cli/chunks/{chunk-CY73RJJJ.js → chunk-V7ZPTEP7.js} +1 -1
- package/dist/cli/chunks/{chunk-YE5AYBHX.js → chunk-VHG67L7O.js} +2 -2
- package/dist/cli/chunks/{chunk-FCWB2FJG.js → chunk-VLQYU7ZQ.js} +1 -1
- package/dist/cli/chunks/{chunk-R3COBKOP.js → chunk-VPDZTMMB.js} +3 -3
- package/dist/cli/chunks/{chunk-QFFSQWXP.js → chunk-VRGXYOIN.js} +1 -1
- package/dist/cli/chunks/{chunk-PMNZN4K7.js → chunk-VSI45JCP.js} +1 -1
- package/dist/cli/chunks/{chunk-DVEQOD74.js → chunk-VWWLJBRA.js} +45 -44
- package/dist/cli/chunks/{chunk-6MRUG5G2.js → chunk-VXUIIZNG.js} +1 -1
- package/dist/cli/chunks/{chunk-QXOAFWWK.js → chunk-W3IO4FQ5.js} +2 -2
- package/dist/cli/chunks/{chunk-XB4JRJU4.js → chunk-WULMXLNN.js} +1 -1
- package/dist/cli/chunks/{chunk-MER7IHAZ.js → chunk-WZUQT2BE.js} +2 -2
- package/dist/cli/chunks/{chunk-USORP6QK.js → chunk-XF32XZMY.js} +2 -2
- package/dist/cli/chunks/{chunk-ZI3UBCIN.js → chunk-XKD6AFY5.js} +1 -1
- package/dist/cli/chunks/{chunk-Z77BVREU.js → chunk-XP4T7CZY.js} +2 -2
- package/dist/cli/chunks/{chunk-APWO3FI3.js → chunk-XQZ63XSL.js} +1 -1
- package/dist/cli/chunks/{chunk-MPEQXXXR.js → chunk-XXHJKAE6.js} +2 -2
- package/dist/cli/chunks/{chunk-N64PBOR5.js → chunk-Y3GX66VZ.js} +2 -2
- package/dist/cli/chunks/{chunk-B3M3JEFD.js → chunk-YXLQJ226.js} +2 -2
- package/dist/cli/chunks/chunk-Z2E5DTKX.js +2 -0
- package/dist/cli/chunks/{ci-TRWQ33L2.js → ci-FTZE4PD3.js} +2 -2
- package/dist/cli/chunks/{ci-output-TCFNHOTU.js → ci-output-C3ORCIHU.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-GO2TIL7E.js → circuit-breaker-GS5OTOJZ.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-U77JVSVU.js → claude-flow-setup-RWOFP5L2.js} +2 -2
- package/dist/cli/chunks/client-UTNF2C5K.js +2 -0
- package/dist/cli/chunks/{cline-installer-XFD3SMGS.js → cline-installer-D7RGRAUH.js} +2 -2
- package/dist/cli/chunks/{code-V3VE2TMW.js → code-HBDMMYHY.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-C6DHOOWA.js → code-index-extractor-B2KUPAEH.js} +2 -2
- package/dist/cli/chunks/{codex-installer-IUR7MVE6.js → codex-installer-MPXV4AOD.js} +2 -2
- package/dist/cli/chunks/{completions-R7FZHNJJ.js → completions-QJS6QOZQ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-EP4QF5CS.js → complexity-analyzer-YQQXWZIL.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-6DW2SBMQ.js → continuedev-installer-Z6PBKYMB.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-U3UOX7D5.js → copilot-installer-RWVD44CV.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-5QZ5A46I.js → cost-tracker-DFPBFYWL.js} +2 -2
- package/dist/cli/chunks/{coverage-QOOOITLD.js → coverage-DYST26FK.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-FCM34JOR.js +2 -0
- package/dist/cli/chunks/{cursor-installer-SY3TRE2I.js → cursor-installer-LL6UWKTZ.js} +2 -2
- package/dist/cli/chunks/{daemon-HBSBIPUZ.js → daemon-6PIHFZNR.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-ZNLUW2HL.js → dag-attention-scheduler-WS3HJW4F.js} +2 -2
- package/dist/cli/chunks/{detect-DMUJPGNC.js → detect-J4OITSUD.js} +2 -2
- package/dist/cli/chunks/{dist-node-4RPPRXUH.js → dist-node-QSLD5K6K.js} +2 -2
- package/dist/cli/chunks/{domain-handler-XJFDML77.js → domain-handler-BD53QZ4Q.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-MXPKJ2A2.js → domain-transfer-VZBWINQL.js} +2 -2
- package/dist/cli/chunks/dream-6KCS7EWS.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-5UAFXNDX.js +3 -0
- package/dist/cli/chunks/{eval-DHBZ74RL.js → eval-GBKU6VTD.js} +2 -2
- package/dist/cli/chunks/{fast-paths-WTNFCV2I.js → fast-paths-MYZ6GITZ.js} +2 -2
- package/dist/cli/chunks/{feature-flags-VC7BQNHU.js → feature-flags-2WVV66AO.js} +2 -2
- package/dist/cli/chunks/{feature-flags-264QUQ3E.js → feature-flags-6ALWBTHS.js} +2 -2
- package/dist/cli/chunks/{file-discovery-LXQPIRKG.js → file-discovery-FOYCPGD6.js} +2 -2
- package/dist/cli/chunks/{fleet-4OAZWNXG.js → fleet-JROEDHAT.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-MAXAOMTP.js → gnn-wrapper-KAXTFFEE.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ZTUI75EB.js → heartbeat-handler-PG24CBMQ.js} +4 -4
- package/dist/cli/chunks/{heartbeat-scheduler-VWPA7XKA.js → heartbeat-scheduler-LSS3RD6E.js} +2 -2
- package/dist/cli/chunks/hnsw-adapter-PG6O67CQ.js +2 -0
- package/dist/cli/chunks/hnsw-index-AHYZHLNZ.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-EQDYPKGL.js → hnsw-legacy-bridge-HYH4AJAO.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-G4QGTGIB.js → hnswlib-node-WTTST5LC.js} +2 -2
- package/dist/cli/chunks/hooks-RDZSAFQG.js +214 -0
- package/dist/cli/chunks/{hybrid-router-XODWORQ3.js → hybrid-router-HNPS6EFL.js} +2 -2
- package/dist/cli/chunks/{hypergraph-engine-T73DH7N6.js → hypergraph-engine-JUFXRXCC.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-OZJJJW5B.js → hypergraph-handler-YFRF53TF.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-USAJVJY5.js +2 -0
- package/dist/cli/chunks/{init-handler-YXXNCXM4.js → init-handler-P4W5F57S.js} +6 -6
- package/dist/cli/chunks/init-wizard-GL7LAZID.js +2 -0
- package/dist/cli/chunks/kernel-2YAIESTR.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-3RCK2JPW.js → kilocode-installer-5VWY4DMH.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-LKC42QRS.js → kiro-installer-PZC3BQII.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-QSIYZRAG.js +2 -0
- package/dist/cli/chunks/{learning-BIBRKCYL.js → learning-4OH4ZG25.js} +3 -3
- package/dist/cli/chunks/{llm-router-Z6Z7TTBI.js → llm-router-LZBR6SZQ.js} +4 -4
- package/dist/cli/chunks/{load-T2QUB663.js → load-SPWP6VB3.js} +2 -2
- package/dist/cli/chunks/load-test-UEHSHLVN.js +2 -0
- package/dist/cli/chunks/{mcp-QBOL6TK4.js → mcp-QYPQMM7L.js} +2 -2
- package/dist/cli/chunks/{memory-7RQ2SF36.js → memory-54ILJMWQ.js} +5 -5
- package/dist/cli/chunks/memory-backend-4NE4ADPG.js +2 -0
- package/dist/cli/chunks/{memory-handlers-5OHDUBJS.js → memory-handlers-YK7H5UCX.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-PGSNT3NO.js → multi-model-executor-XAOAVPPI.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-AEOXTTFG.js → opencode-installer-CNS4XMUF.js} +2 -2
- package/dist/cli/chunks/{orchestrator-6K2L36JA.js → orchestrator-SSEMSKUI.js} +6 -6
- package/dist/cli/chunks/{pipeline-MFQCW7JD.js → pipeline-DS3AENTB.js} +2 -2
- package/dist/cli/chunks/{platform-DM6RQ3FM.js → platform-BL6LH5NF.js} +2 -2
- package/dist/cli/chunks/{plugin-CCTGDC55.js → plugin-FNXPEQ2C.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-J4FXB63L.js → prime-radiant-advanced-wasm-E6S6BGNA.js} +2 -2
- package/dist/cli/chunks/protocol-executor-YI4HNXND.js +2 -0
- package/dist/cli/chunks/{protocol-handler-7UOBNLET.js → protocol-handler-D4WIUU3W.js} +2 -2
- package/dist/cli/chunks/{prove-VAPGITFF.js → prove-OLB3PKW6.js} +2 -2
- package/dist/cli/chunks/{provider-manager-F6TLUJFW.js → provider-manager-GKTQ75DT.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-ANBAXQXC.js +2 -0
- package/dist/cli/chunks/{quality-7LJQI3SB.js → quality-ZYJVYTUL.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-MYYUSWVX.js +2 -0
- package/dist/cli/chunks/{real-embeddings-NHWAUSV3.js → real-embeddings-SKJRHLCS.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-HQFQJJPU.js → roocode-installer-WZGKOLWE.js} +2 -2
- package/dist/cli/chunks/router-RYCLZ7A4.js +2 -0
- package/dist/cli/chunks/routing-feedback-5KSRG2UI.js +2 -0
- package/dist/cli/chunks/{routing-handler-VH66WSPU.js → routing-handler-4GIMINCI.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-IPUWLJFU.js → ruvector-commands-YZONXZ2W.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-KRFEM6JH.js → rvf-dual-writer-WSS5GF54.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-SVCZ72IU.js → rvf-migration-adapter-WS4HHVEU.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-FYBIF3SX.js → rvf-migration-coordinator-6BY5GI47.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-NEIOLJRF.js +2 -0
- package/dist/cli/chunks/safe-db-3JQP4EPU.js +2 -0
- package/dist/cli/chunks/schedule-2QKCL64E.js +2 -0
- package/dist/cli/chunks/scheduler-FMOP45FC.js +2 -0
- package/dist/cli/chunks/{security-C2I6CG7B.js → security-HCNOL2K3.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-BMFIVWMJ.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-BPIFGN7I.js → shared-rvf-dual-writer-QRNLSDS7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-I5RYLFOE.js +2 -0
- package/dist/cli/chunks/{status-handler-57UA6GNR.js → status-handler-QXZ442MY.js} +2 -2
- package/dist/cli/chunks/{structural-health-KMHBG6FO.js → structural-health-OFYZ3Z4A.js} +2 -2
- package/dist/cli/chunks/{sync-53YM6U4S.js → sync-J4BG65NF.js} +2 -2
- package/dist/cli/chunks/{task-handler-W2XPS5WW.js → task-handler-UBSFCKK3.js} +2 -2
- package/dist/cli/chunks/{task-handlers-BG4IAMBJ.js → task-handlers-JFUT2FQ7.js} +2 -2
- package/dist/cli/chunks/{test-QJBBVPL2.js → test-WTNAHJHH.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-Y4J6EY2K.js → test-scheduling-QREBYRGW.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-3TKR3UIE.js → token-bootstrap-HE5H77OL.js} +2 -2
- package/dist/cli/chunks/{token-usage-5FUNHHVZ.js → token-usage-V5B6K3JL.js} +2 -2
- package/dist/cli/chunks/{transformers-KVPA35SR.js → transformers-HIVMQP4O.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-LTBBLY5U.js → tree-sitter-wasm-parser-WP2SF2M5.js} +2 -2
- package/dist/cli/chunks/{types-Y2BHPD6B.js → types-7ZBTAO5Z.js} +2 -2
- package/dist/cli/chunks/unified-memory-2ETCY22B.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-OALJW537.js +2 -0
- package/dist/cli/chunks/unified-persistence-SQMP7A3O.js +2 -0
- package/dist/cli/chunks/{upgrade-E4VAQZQR.js → upgrade-WIFAJDBG.js} +2 -2
- package/dist/cli/chunks/{validate-4ICDQCKJ.js → validate-W63V36GA.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-AIEOQOUF.js → validate-swarm-CK5BM3YY.js} +2 -2
- package/dist/cli/chunks/{vibium-AF2K6YXR.js → vibium-MJCCO36E.js} +2 -2
- package/dist/cli/chunks/visual-security-JUJPF2QO.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-PM67K5SP.js → web-tree-sitter-ESERXLPK.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-4MKUQ2KT.js → windsurf-installer-FDWQ5BWI.js} +2 -2
- package/dist/cli/chunks/{witness-chain-FLPF7CS6.js → witness-chain-L5KSYE2S.js} +2 -2
- package/dist/cli/chunks/witness-chain-QJVKAAZT.js +2 -0
- package/dist/cli/chunks/{workflow-DHTCI6QD.js → workflow-34GYJDFW.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-WXB2RVVW.js +2 -0
- package/dist/cli/chunks/{wrappers-5K6UGI3T.js → wrappers-VGKEBQLW.js} +2 -2
- package/dist/cli/commands/hooks-handlers/command-hooks.js +104 -11
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.d.ts +98 -0
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +285 -1
- package/dist/cli/commands/hooks-handlers/hooks-shared.d.ts +20 -1
- package/dist/cli/commands/hooks-handlers/hooks-shared.js +35 -3
- package/dist/cli/commands/hooks-handlers/routing-hooks.js +15 -5
- package/dist/cli/commands/hooks-handlers/task-hooks.js +216 -5
- package/dist/coordination/handlers/test-execution-handlers.d.ts +18 -0
- package/dist/coordination/handlers/test-execution-handlers.js +77 -9
- package/dist/coordination/task-executor.js +11 -2
- package/dist/domains/test-generation/generators/jest-vitest-generator.js +13 -3
- package/dist/domains/test-generation/interfaces.d.ts +12 -0
- package/dist/domains/test-generation/services/test-generator.js +5 -1
- package/dist/governance/continue-gate-integration.d.ts +13 -0
- package/dist/governance/continue-gate-integration.js +31 -8
- package/dist/init/phases/07-hooks.js +2 -2
- package/dist/integrations/ruvector/hypergraph-engine.js +63 -4
- package/dist/integrations/ruvector/hypergraph-schema.d.ts +6 -2
- package/dist/learning/embed-and-insert-pattern.d.ts +36 -0
- package/dist/learning/embed-and-insert-pattern.js +52 -0
- package/dist/learning/pattern-store.d.ts +8 -0
- package/dist/learning/pattern-store.js +66 -43
- package/dist/mcp/bundle.js +400 -392
- package/dist/mcp/entry.js +21 -1
- package/dist/mcp/protocol-server.js +6 -1
- package/dist/mcp/tools/coverage-analysis/index.js +11 -2
- package/dist/workers/workers/learning-consolidation.js +6 -1
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-2BIT6BGH.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-B5G3RG4W.js +0 -2
- package/dist/cli/chunks/base-A3ZRMSIZ.js +0 -2
- package/dist/cli/chunks/browser-workflow-C6Z53ZH6.js +0 -2
- package/dist/cli/chunks/chunk-2ARCG4XJ.js +0 -2
- package/dist/cli/chunks/chunk-JC4O47QG.js +0 -66
- package/dist/cli/chunks/chunk-KTJWRVFR.js +0 -15
- package/dist/cli/chunks/client-B3QSCZSJ.js +0 -2
- package/dist/cli/chunks/cross-domain-router-OYBTXKCV.js +0 -2
- package/dist/cli/chunks/dream-R2F6L47W.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-TQPQE4OJ.js +0 -2
- package/dist/cli/chunks/hnsw-index-2X3NMTDU.js +0 -2
- package/dist/cli/chunks/hooks-RBVHAPBL.js +0 -101
- package/dist/cli/chunks/impact-analyzer-B7GBDSA3.js +0 -2
- package/dist/cli/chunks/init-wizard-7N6MCER4.js +0 -2
- package/dist/cli/chunks/kernel-6CJ4FP5Z.js +0 -2
- package/dist/cli/chunks/knowledge-graph-4XYLO6ZW.js +0 -2
- package/dist/cli/chunks/load-test-UODCPBYF.js +0 -2
- package/dist/cli/chunks/memory-backend-PUPAE4QQ.js +0 -2
- package/dist/cli/chunks/protocol-executor-X3EYJINP.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-3RDWPSYG.js +0 -2
- package/dist/cli/chunks/queen-coordinator-XIQZIYAZ.js +0 -2
- package/dist/cli/chunks/router-AFEFPU2A.js +0 -2
- package/dist/cli/chunks/routing-feedback-AGYMQFMV.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-AFOWXCZH.js +0 -2
- package/dist/cli/chunks/safe-db-NNF5DE5T.js +0 -2
- package/dist/cli/chunks/schedule-HJUZSHEA.js +0 -2
- package/dist/cli/chunks/scheduler-DZ53RPJQ.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-5UQSTUSR.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-27ESC5DX.js +0 -2
- package/dist/cli/chunks/unified-memory-O7GFUSD3.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-XBLROJEN.js +0 -2
- package/dist/cli/chunks/unified-persistence-YBHEAL2S.js +0 -2
- package/dist/cli/chunks/visual-security-4F7VYCAU.js +0 -2
- package/dist/cli/chunks/witness-chain-AXJ44BGW.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UAFUPHD3.js +0 -2
|
@@ -439,7 +439,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
439
439
|
},
|
|
440
440
|
// Task routing
|
|
441
441
|
{
|
|
442
|
-
matcher: '^Task$',
|
|
442
|
+
matcher: '^(Task|Agent)$',
|
|
443
443
|
hooks: [
|
|
444
444
|
{
|
|
445
445
|
type: 'command',
|
|
@@ -474,7 +474,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
474
474
|
],
|
|
475
475
|
},
|
|
476
476
|
{
|
|
477
|
-
matcher: '^Task$',
|
|
477
|
+
matcher: '^(Task|Agent)$',
|
|
478
478
|
hooks: [
|
|
479
479
|
{
|
|
480
480
|
type: 'command',
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @see /docs/plans/GOAP-V3-RUVECTOR-NEURAL-BACKBONE.md
|
|
15
15
|
*/
|
|
16
|
+
import * as nodePath from 'node:path';
|
|
16
17
|
import { v4 as uuidv4 } from 'uuid';
|
|
17
18
|
import { HypergraphSchemaManager, nodeToRow, rowToNode, edgeToRow, rowToEdge, generateEdgeId, } from './hypergraph-schema.js';
|
|
18
19
|
import { toErrorMessage } from '../../shared/error-utils.js';
|
|
@@ -515,8 +516,13 @@ export class HypergraphEngine {
|
|
|
515
516
|
});
|
|
516
517
|
}
|
|
517
518
|
}
|
|
518
|
-
// Phase 2: Create entity nodes
|
|
519
|
+
// Phase 2: Create entity nodes + a `contains` edge from the file node
|
|
520
|
+
// to each entity node. Without the contains edge, hypergraph_edges only
|
|
521
|
+
// ever held import edges from Phase 3 — `findUntestedFunctions`,
|
|
522
|
+
// `findImpactedTests`, and `findCoverageGaps` all returned empty
|
|
523
|
+
// regardless of indexing activity.
|
|
519
524
|
for (const file of indexResult.files) {
|
|
525
|
+
const fileNodeId = `file:${file.path}`;
|
|
520
526
|
for (const entity of file.entities) {
|
|
521
527
|
try {
|
|
522
528
|
const entityId = `${entity.type}:${file.path}:${entity.name}`;
|
|
@@ -540,6 +546,21 @@ export class HypergraphEngine {
|
|
|
540
546
|
`).run(entityId, nodeType, entity.name, file.path, entity.lineStart, entity.lineEnd, entity.complexity, entity.coverage);
|
|
541
547
|
nodesCreated++;
|
|
542
548
|
}
|
|
549
|
+
// file → entity contains edge (idempotent via INSERT OR REPLACE)
|
|
550
|
+
try {
|
|
551
|
+
const containsEdgeId = generateEdgeId(fileNodeId, entityId, 'contains');
|
|
552
|
+
this.config.db.prepare(`
|
|
553
|
+
INSERT OR REPLACE INTO hypergraph_edges (id, source_id, target_id, type, weight)
|
|
554
|
+
VALUES (?, ?, ?, 'contains', 1.0)
|
|
555
|
+
`).run(containsEdgeId, fileNodeId, entityId);
|
|
556
|
+
edgesCreated++;
|
|
557
|
+
}
|
|
558
|
+
catch (edgeError) {
|
|
559
|
+
errors.push({
|
|
560
|
+
entity: `contains:${entity.type}:${entity.name}`,
|
|
561
|
+
error: toErrorMessage(edgeError),
|
|
562
|
+
});
|
|
563
|
+
}
|
|
543
564
|
}
|
|
544
565
|
catch (entityError) {
|
|
545
566
|
errors.push({
|
|
@@ -550,13 +571,50 @@ export class HypergraphEngine {
|
|
|
550
571
|
}
|
|
551
572
|
}
|
|
552
573
|
// Phase 3: Create import edges (now all file nodes exist)
|
|
574
|
+
// Resolves relative paths against the source file's directory and probes
|
|
575
|
+
// common TS/JS/Python extensions (and `/index.ext` for directory imports)
|
|
576
|
+
// so internal imports map to existing hypergraph_nodes. Without this
|
|
577
|
+
// resolver, relative imports never matched any node and 0 edges were
|
|
578
|
+
// ever persisted from intra-repo imports.
|
|
579
|
+
const RESOLVE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.py', '.mjs', '.cjs'];
|
|
580
|
+
const RESOLVE_INDEX_FILES = [
|
|
581
|
+
'/index.ts', '/index.tsx', '/index.js', '/index.jsx', '/index.py',
|
|
582
|
+
];
|
|
553
583
|
for (const file of indexResult.files) {
|
|
554
584
|
const fileId = `file:${file.path}`;
|
|
555
585
|
for (const importPath of file.imports) {
|
|
556
586
|
try {
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
587
|
+
// Resolve relative imports against the source file's directory
|
|
588
|
+
let resolvedPath = importPath;
|
|
589
|
+
if (importPath.startsWith('./') || importPath.startsWith('../')) {
|
|
590
|
+
resolvedPath = nodePath.resolve(nodePath.dirname(file.path), importPath);
|
|
591
|
+
}
|
|
592
|
+
let targetId = `file:${resolvedPath}`;
|
|
593
|
+
// Check if target node exists; probe extensions and /index.ext
|
|
594
|
+
const lookup = this.config.db.prepare('SELECT id FROM hypergraph_nodes WHERE id = ?');
|
|
595
|
+
let targetExists = lookup.get(targetId);
|
|
596
|
+
if (!targetExists) {
|
|
597
|
+
for (const ext of RESOLVE_EXTENSIONS) {
|
|
598
|
+
const candidate = targetId + ext;
|
|
599
|
+
const hit = lookup.get(candidate);
|
|
600
|
+
if (hit) {
|
|
601
|
+
targetId = candidate;
|
|
602
|
+
targetExists = hit;
|
|
603
|
+
break;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
if (!targetExists) {
|
|
608
|
+
for (const idxFile of RESOLVE_INDEX_FILES) {
|
|
609
|
+
const candidate = targetId + idxFile;
|
|
610
|
+
const hit = lookup.get(candidate);
|
|
611
|
+
if (hit) {
|
|
612
|
+
targetId = candidate;
|
|
613
|
+
targetExists = hit;
|
|
614
|
+
break;
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
560
618
|
if (targetExists) {
|
|
561
619
|
const edgeId = generateEdgeId(fileId, targetId, 'imports');
|
|
562
620
|
this.config.db.prepare(`
|
|
@@ -665,6 +723,7 @@ export class HypergraphEngine {
|
|
|
665
723
|
tests: 0,
|
|
666
724
|
depends_on: 0,
|
|
667
725
|
covers: 0,
|
|
726
|
+
contains: 0,
|
|
668
727
|
};
|
|
669
728
|
for (const row of edgesByTypeRows) {
|
|
670
729
|
if (row.type in edgesByType) {
|
|
@@ -17,9 +17,13 @@ import type { Database as DatabaseType } from 'better-sqlite3';
|
|
|
17
17
|
*/
|
|
18
18
|
export type NodeType = 'function' | 'module' | 'test' | 'file' | 'class';
|
|
19
19
|
/**
|
|
20
|
-
* Valid edge types in the hypergraph
|
|
20
|
+
* Valid edge types in the hypergraph.
|
|
21
|
+
*
|
|
22
|
+
* - `contains`: file → entity (function/class/etc) containment edge.
|
|
23
|
+
* Without this, `findUntestedFunctions`, `findImpactedTests`, and
|
|
24
|
+
* `findCoverageGaps` return empty regardless of indexing activity.
|
|
21
25
|
*/
|
|
22
|
-
export type EdgeType = 'calls' | 'imports' | 'tests' | 'depends_on' | 'covers';
|
|
26
|
+
export type EdgeType = 'calls' | 'imports' | 'tests' | 'depends_on' | 'covers' | 'contains';
|
|
23
27
|
/**
|
|
24
28
|
* Represents a node in the hypergraph (code entity)
|
|
25
29
|
*/
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern embedding helper — unifies the 3 memory.db `qe_patterns` writers
|
|
3
|
+
* per ADR-058 (embedding-locality).
|
|
4
|
+
*
|
|
5
|
+
* Three live writers in our codebase write to `qe_patterns`:
|
|
6
|
+
*
|
|
7
|
+
* 1. learning/sqlite-persistence.ts:497 SQLitePatternStore.storePattern (canonical)
|
|
8
|
+
* 2. cli/commands/hooks-handlers/hooks-dream-learning.ts (consolidateAgentPatterns)
|
|
9
|
+
* 3. workers/workers/learning-consolidation.ts (createPatternsFromCandidates)
|
|
10
|
+
*
|
|
11
|
+
* Only the canonical writer pairs the row with a `qe_pattern_embeddings` row
|
|
12
|
+
* via `computeRealEmbedding(text, qeConfig.embeddings)`. Writers 2 & 3
|
|
13
|
+
* historically bypassed embedding generation, producing "ghost" patterns that
|
|
14
|
+
* loaded with no vectors and stayed invisible to HNSW pattern recall.
|
|
15
|
+
*
|
|
16
|
+
* This helper provides the embedding side so any caller can compute and persist
|
|
17
|
+
* the embedding adjacent to its existing INSERT INTO qe_patterns. It is
|
|
18
|
+
* fail-soft (errors are logged at debug level and swallowed) — pattern row
|
|
19
|
+
* persistence must not regress when embedding computation fails.
|
|
20
|
+
*/
|
|
21
|
+
import type Database from 'better-sqlite3';
|
|
22
|
+
import { type EmbeddingConfig } from './real-embeddings.js';
|
|
23
|
+
/**
|
|
24
|
+
* Compute an embedding for a pattern (`name + description + tags`) and persist
|
|
25
|
+
* it to `qe_pattern_embeddings`. Caller is responsible for the matching
|
|
26
|
+
* `qe_patterns` row.
|
|
27
|
+
*
|
|
28
|
+
* @param db - better-sqlite3 database handle (typically from UnifiedMemoryManager.getDatabase())
|
|
29
|
+
* @param patternId - id of the pattern row this embedding belongs to
|
|
30
|
+
* @param name - pattern name (the most semantic component)
|
|
31
|
+
* @param description - pattern description (optional)
|
|
32
|
+
* @param tags - pattern tags (optional)
|
|
33
|
+
* @param config - override embedding model/cache config (defaults to Xenova/all-MiniLM-L6-v2)
|
|
34
|
+
*/
|
|
35
|
+
export declare function ensurePatternEmbedding(db: Database.Database, patternId: string, name: string, description: string | undefined | null, tags: string[] | undefined | null, config?: Partial<EmbeddingConfig>): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=embed-and-insert-pattern.d.ts.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern embedding helper — unifies the 3 memory.db `qe_patterns` writers
|
|
3
|
+
* per ADR-058 (embedding-locality).
|
|
4
|
+
*
|
|
5
|
+
* Three live writers in our codebase write to `qe_patterns`:
|
|
6
|
+
*
|
|
7
|
+
* 1. learning/sqlite-persistence.ts:497 SQLitePatternStore.storePattern (canonical)
|
|
8
|
+
* 2. cli/commands/hooks-handlers/hooks-dream-learning.ts (consolidateAgentPatterns)
|
|
9
|
+
* 3. workers/workers/learning-consolidation.ts (createPatternsFromCandidates)
|
|
10
|
+
*
|
|
11
|
+
* Only the canonical writer pairs the row with a `qe_pattern_embeddings` row
|
|
12
|
+
* via `computeRealEmbedding(text, qeConfig.embeddings)`. Writers 2 & 3
|
|
13
|
+
* historically bypassed embedding generation, producing "ghost" patterns that
|
|
14
|
+
* loaded with no vectors and stayed invisible to HNSW pattern recall.
|
|
15
|
+
*
|
|
16
|
+
* This helper provides the embedding side so any caller can compute and persist
|
|
17
|
+
* the embedding adjacent to its existing INSERT INTO qe_patterns. It is
|
|
18
|
+
* fail-soft (errors are logged at debug level and swallowed) — pattern row
|
|
19
|
+
* persistence must not regress when embedding computation fails.
|
|
20
|
+
*/
|
|
21
|
+
import { computeRealEmbedding, DEFAULT_EMBEDDING_CONFIG, } from './real-embeddings.js';
|
|
22
|
+
/**
|
|
23
|
+
* Compute an embedding for a pattern (`name + description + tags`) and persist
|
|
24
|
+
* it to `qe_pattern_embeddings`. Caller is responsible for the matching
|
|
25
|
+
* `qe_patterns` row.
|
|
26
|
+
*
|
|
27
|
+
* @param db - better-sqlite3 database handle (typically from UnifiedMemoryManager.getDatabase())
|
|
28
|
+
* @param patternId - id of the pattern row this embedding belongs to
|
|
29
|
+
* @param name - pattern name (the most semantic component)
|
|
30
|
+
* @param description - pattern description (optional)
|
|
31
|
+
* @param tags - pattern tags (optional)
|
|
32
|
+
* @param config - override embedding model/cache config (defaults to Xenova/all-MiniLM-L6-v2)
|
|
33
|
+
*/
|
|
34
|
+
export async function ensurePatternEmbedding(db, patternId, name, description, tags, config = {}) {
|
|
35
|
+
try {
|
|
36
|
+
const text = `${name ?? ''} ${description ?? ''} ${(tags ?? []).join(' ')}`.trim();
|
|
37
|
+
if (!text)
|
|
38
|
+
return;
|
|
39
|
+
const embedding = await computeRealEmbedding(text, config);
|
|
40
|
+
if (!embedding || embedding.length === 0)
|
|
41
|
+
return;
|
|
42
|
+
const buffer = Buffer.from(new Float32Array(embedding).buffer);
|
|
43
|
+
const fullConfig = { ...DEFAULT_EMBEDDING_CONFIG, ...config };
|
|
44
|
+
db.prepare(`INSERT OR REPLACE INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model)
|
|
45
|
+
VALUES (?, ?, ?, ?)`).run(patternId, buffer, embedding.length, fullConfig.modelName);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
// Non-fatal: pattern row already persisted; embedding can be backfilled later.
|
|
49
|
+
console.debug('[ensurePatternEmbedding] non-fatal:', error instanceof Error ? error.message : String(error));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=embed-and-insert-pattern.js.map
|
|
@@ -238,6 +238,14 @@ export declare class PatternStore implements IPatternStore {
|
|
|
238
238
|
* Internal HNSW initialization with timeout protection
|
|
239
239
|
*/
|
|
240
240
|
private initializeHNSWInternal;
|
|
241
|
+
/**
|
|
242
|
+
* Load existing qe_pattern_embeddings into the active HNSW index.
|
|
243
|
+
*
|
|
244
|
+
* Shared between the unified-HNSW path (ADR-071) and the legacy fallback
|
|
245
|
+
* so both report a populated `vectorCount` after first init. Capped to
|
|
246
|
+
* `maxElements` to prevent boot timeout on large pattern stores.
|
|
247
|
+
*/
|
|
248
|
+
private loadEmbeddingsIntoHNSW;
|
|
241
249
|
/**
|
|
242
250
|
* Lazily initialize the VectorDeltaTracker for embedding version history.
|
|
243
251
|
* Returns null when the useDeltaEventSourcing feature flag is disabled.
|
|
@@ -238,6 +238,10 @@ export class PatternStore {
|
|
|
238
238
|
this.hnswIndex = new HnswLegacyBridge(adapter);
|
|
239
239
|
this.hnswAvailable = true;
|
|
240
240
|
console.log('[PatternStore] Using unified HNSW via HnswLegacyBridge (ADR-071)');
|
|
241
|
+
// Load existing qe_pattern_embeddings into the unified bridge on
|
|
242
|
+
// first init. Without this the unified path starts empty and
|
|
243
|
+
// routing falls back to context-only matches.
|
|
244
|
+
await this.loadEmbeddingsIntoHNSW();
|
|
241
245
|
return;
|
|
242
246
|
}
|
|
243
247
|
catch (bridgeError) {
|
|
@@ -262,46 +266,7 @@ export class PatternStore {
|
|
|
262
266
|
await Promise.race([initPromise, timeoutPromise]);
|
|
263
267
|
this.hnswAvailable = this.hnswIndex.isNativeAvailable();
|
|
264
268
|
// Load existing embeddings from SQLite into HNSW index (capped to prevent timeout)
|
|
265
|
-
|
|
266
|
-
try {
|
|
267
|
-
const embeddings = this.sqliteStore.getAllEmbeddings();
|
|
268
|
-
const maxBootstrap = this.config.hnsw.maxElements;
|
|
269
|
-
let loaded = 0;
|
|
270
|
-
for (const { patternId, embedding } of embeddings) {
|
|
271
|
-
if (loaded >= maxBootstrap)
|
|
272
|
-
break;
|
|
273
|
-
if (!embedding || embedding.length !== this.config.embeddingDimension)
|
|
274
|
-
continue;
|
|
275
|
-
const pattern = this.patternCache.get(patternId);
|
|
276
|
-
if (!pattern)
|
|
277
|
-
continue;
|
|
278
|
-
try {
|
|
279
|
-
await this.hnswIndex.insert(patternId, embedding, {
|
|
280
|
-
filePath: pattern.patternType,
|
|
281
|
-
lineCoverage: pattern.confidence * 100,
|
|
282
|
-
branchCoverage: pattern.qualityScore * 100,
|
|
283
|
-
functionCoverage: 0,
|
|
284
|
-
statementCoverage: 0,
|
|
285
|
-
uncoveredLineCount: 0,
|
|
286
|
-
uncoveredBranchCount: 0,
|
|
287
|
-
riskScore: 1 - pattern.confidence,
|
|
288
|
-
lastUpdated: Date.now(),
|
|
289
|
-
totalLines: 0,
|
|
290
|
-
});
|
|
291
|
-
loaded++;
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
// Duplicate or invalid — skip
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
if (loaded > 0) {
|
|
298
|
-
console.log(`[PatternStore] Loaded ${loaded} embeddings from SQLite into HNSW`);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
catch (error) {
|
|
302
|
-
console.warn('[PatternStore] Failed to load SQLite embeddings into HNSW:', toErrorMessage(error));
|
|
303
|
-
}
|
|
304
|
-
}
|
|
269
|
+
await this.loadEmbeddingsIntoHNSW();
|
|
305
270
|
console.log(`[PatternStore] HNSW lazy-initialized (native: ${this.hnswAvailable})`);
|
|
306
271
|
}
|
|
307
272
|
catch (error) {
|
|
@@ -310,6 +275,61 @@ export class PatternStore {
|
|
|
310
275
|
this.hnswAvailable = false;
|
|
311
276
|
}
|
|
312
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* Load existing qe_pattern_embeddings into the active HNSW index.
|
|
280
|
+
*
|
|
281
|
+
* Shared between the unified-HNSW path (ADR-071) and the legacy fallback
|
|
282
|
+
* so both report a populated `vectorCount` after first init. Capped to
|
|
283
|
+
* `maxElements` to prevent boot timeout on large pattern stores.
|
|
284
|
+
*/
|
|
285
|
+
async loadEmbeddingsIntoHNSW() {
|
|
286
|
+
if (!this.hnswIndex || !this.sqliteStore)
|
|
287
|
+
return;
|
|
288
|
+
try {
|
|
289
|
+
const embeddings = this.sqliteStore.getAllEmbeddings();
|
|
290
|
+
const maxBootstrap = this.config.hnsw.maxElements;
|
|
291
|
+
let loaded = 0;
|
|
292
|
+
let skipped = 0;
|
|
293
|
+
for (const { patternId, embedding } of embeddings) {
|
|
294
|
+
if (loaded >= maxBootstrap)
|
|
295
|
+
break;
|
|
296
|
+
if (!embedding || embedding.length !== this.config.embeddingDimension) {
|
|
297
|
+
skipped++;
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
const pattern = this.patternCache.get(patternId);
|
|
301
|
+
if (!pattern) {
|
|
302
|
+
skipped++;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
try {
|
|
306
|
+
await this.hnswIndex.insert(patternId, embedding, {
|
|
307
|
+
filePath: pattern.patternType,
|
|
308
|
+
lineCoverage: pattern.confidence * 100,
|
|
309
|
+
branchCoverage: pattern.qualityScore * 100,
|
|
310
|
+
functionCoverage: 0,
|
|
311
|
+
statementCoverage: 0,
|
|
312
|
+
uncoveredLineCount: 0,
|
|
313
|
+
uncoveredBranchCount: 0,
|
|
314
|
+
riskScore: 1 - pattern.confidence,
|
|
315
|
+
lastUpdated: Date.now(),
|
|
316
|
+
totalLines: 0,
|
|
317
|
+
});
|
|
318
|
+
loaded++;
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
// Duplicate or invalid — skip
|
|
322
|
+
skipped++;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
if (loaded > 0) {
|
|
326
|
+
console.log(`[PatternStore] Loaded ${loaded} embeddings into HNSW (skipped ${skipped})`);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
console.warn('[PatternStore] Failed to load SQLite embeddings into HNSW:', toErrorMessage(error));
|
|
331
|
+
}
|
|
332
|
+
}
|
|
313
333
|
/**
|
|
314
334
|
* Lazily initialize the VectorDeltaTracker for embedding version history.
|
|
315
335
|
* Returns null when the useDeltaEventSourcing feature flag is disabled.
|
|
@@ -1103,9 +1123,12 @@ export class PatternStore {
|
|
|
1103
1123
|
totalSuccess += pattern.successRate;
|
|
1104
1124
|
count++;
|
|
1105
1125
|
}
|
|
1106
|
-
//
|
|
1107
|
-
|
|
1108
|
-
|
|
1126
|
+
// Lazy-init HNSW for stats so `aqe hooks stats --json` reflects actual
|
|
1127
|
+
// vectorCount instead of pre-init zeros. Cost is bounded by ensureHNSW's
|
|
1128
|
+
// 5s timeout plus the load-loop cap.
|
|
1129
|
+
const hnsw = await this.ensureHNSW();
|
|
1130
|
+
const hnswStats = hnsw !== null
|
|
1131
|
+
? await hnsw.getStats()
|
|
1109
1132
|
: { nativeHNSW: false, vectorCount: 0, indexSizeBytes: 0, lazyLoaded: true };
|
|
1110
1133
|
return {
|
|
1111
1134
|
totalPatterns: this.patternCache.size,
|