agentic-qe 3.13.4 → 3.13.6
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/.helpers-version +1 -1
- package/.claude/helpers/auto-memory-hook.mjs +430 -430
- package/.claude/helpers/helpers.manifest.json +6 -6
- package/.claude/helpers/hook-handler.cjs +565 -565
- package/.claude/helpers/intelligence.cjs +1058 -1058
- package/.claude/helpers/statusline.cjs +1022 -968
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +89 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-7XXMDGFO.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-PR3RQWXF.js → agent-booster-wasm-TMON22NL.js} +2 -2
- package/dist/cli/chunks/{agent-handler-J5EPFBSZ.js → agent-handler-JOX6O26U.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-CCHI6QAA.js → agent-memory-branch-AMIJIDCM.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-2KGMCBJG.js +2 -0
- package/dist/cli/chunks/{arena-KMKBGSMY.js → arena-N6SO2CCQ.js} +2 -2
- package/dist/cli/chunks/{arena-SI7IPVZ3.js → arena-RKLFXDMO.js} +4 -4
- package/dist/cli/chunks/{audit-ZDKR3HT6.js → audit-ZJE3DUH6.js} +3 -3
- package/dist/cli/chunks/base-4M3VL4XK.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-BP5CZGMD.js → better-sqlite3-5G6AR6LX.js} +2 -2
- package/dist/cli/chunks/{brain-handler-MSYMTM5B.js → brain-handler-QD4DZ574.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-FRAHCBTO.js → branch-enumerator-PG3OUYE6.js} +2 -2
- package/dist/cli/chunks/{browser-4KHKVNYC.js → browser-Y2DJG7HQ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-DHIPXEGO.js +2 -0
- package/dist/cli/chunks/{chunk-Q4VZXT6X.js → chunk-2BUDKFIE.js} +1 -1
- package/dist/cli/chunks/{chunk-NQVF4M7L.js → chunk-2FTAMEOB.js} +1 -1
- package/dist/cli/chunks/{chunk-AROPZPNG.js → chunk-2ILX73JG.js} +1 -1
- package/dist/cli/chunks/{chunk-6GNVVQW3.js → chunk-2SVDR5KB.js} +2 -2
- package/dist/cli/chunks/{chunk-HN2DD2DQ.js → chunk-2VUXU22M.js} +2 -2
- package/dist/cli/chunks/{chunk-U52IQFMP.js → chunk-3OUHOJBN.js} +1 -1
- package/dist/cli/chunks/{chunk-BQRCNRTJ.js → chunk-3QJH5W55.js} +2 -2
- package/dist/cli/chunks/{chunk-OU2YHXJY.js → chunk-3TC4ZPGR.js} +2 -2
- package/dist/cli/chunks/{chunk-ISGKDLZ7.js → chunk-463VBHHH.js} +2 -2
- package/dist/cli/chunks/{chunk-IN5KRJSE.js → chunk-4VWB64OH.js} +1 -1
- package/dist/cli/chunks/{chunk-WSQE3VZB.js → chunk-4YFBAXRD.js} +1 -1
- package/dist/cli/chunks/{chunk-N7LIYK7Z.js → chunk-523XPMTU.js} +1 -1
- package/dist/cli/chunks/{chunk-QXF6EQFP.js → chunk-5CMZDVUR.js} +2 -2
- package/dist/cli/chunks/{chunk-VOAXVNO5.js → chunk-5VGQABM3.js} +4 -4
- package/dist/cli/chunks/{chunk-UOO7P2AK.js → chunk-5VV5MOED.js} +2 -2
- package/dist/cli/chunks/{chunk-5IVXM3TE.js → chunk-6FICUNAV.js} +1 -1
- package/dist/cli/chunks/{chunk-LASZCR5G.js → chunk-6ITWOYET.js} +2 -2
- package/dist/cli/chunks/{chunk-7EL5QEMJ.js → chunk-6QZSF6RL.js} +2 -2
- package/dist/cli/chunks/{chunk-KDICUKYX.js → chunk-6UPQD42K.js} +2 -2
- package/dist/cli/chunks/{chunk-LJSHQU2P.js → chunk-6VUEUYFL.js} +5 -5
- package/dist/cli/chunks/{chunk-75CFWCQV.js → chunk-7225UNNY.js} +2 -2
- package/dist/cli/chunks/{chunk-L3UTZEVW.js → chunk-75QKZ6VX.js} +2 -2
- package/dist/cli/chunks/{chunk-GRMKN44A.js → chunk-7GTB7LVJ.js} +3 -3
- package/dist/cli/chunks/{chunk-EUIUWZF4.js → chunk-7KRZ2Q6B.js} +3 -3
- package/dist/cli/chunks/{chunk-ERKYIV25.js → chunk-7NYCYSGW.js} +2 -2
- package/dist/cli/chunks/{chunk-7YAHECC5.js → chunk-7TON6JSG.js} +2 -2
- package/dist/cli/chunks/chunk-ACHMNMEJ.js +2 -0
- package/dist/cli/chunks/{chunk-27FWRWOB.js → chunk-ADYY2GKC.js} +2 -2
- package/dist/cli/chunks/{chunk-NAZFAGJ5.js → chunk-AOUULKKT.js} +2 -2
- package/dist/cli/chunks/{chunk-XBSBVPSM.js → chunk-AU3APBY2.js} +2 -2
- package/dist/cli/chunks/{chunk-C3AF5Z55.js → chunk-BAOKXLIV.js} +2 -2
- package/dist/cli/chunks/{chunk-RO4BYINM.js → chunk-BDVZF46F.js} +2 -2
- package/dist/cli/chunks/{chunk-LIMFWEUI.js → chunk-BGLSIA4U.js} +2 -2
- package/dist/cli/chunks/{chunk-UNMWI4QU.js → chunk-BI6UU3Z3.js} +1 -1
- package/dist/cli/chunks/{chunk-SFRYDGLF.js → chunk-BOM5NGCR.js} +1 -1
- package/dist/cli/chunks/{chunk-QENUKXPP.js → chunk-CBXJ4AQS.js} +2 -2
- package/dist/cli/chunks/{chunk-6XCULO27.js → chunk-CKYRZ3TA.js} +2 -2
- package/dist/cli/chunks/{chunk-RLZZTFEN.js → chunk-CTILSLXF.js} +2 -2
- package/dist/cli/chunks/chunk-CVXEOTIK.js +2 -0
- package/dist/cli/chunks/{chunk-3RSF7POD.js → chunk-D777E2MT.js} +2 -2
- package/dist/cli/chunks/{chunk-FZ4MUDHZ.js → chunk-DKGDBKBJ.js} +1 -1
- package/dist/cli/chunks/{chunk-KO3UQYGY.js → chunk-DLBJ7IZT.js} +75 -75
- package/dist/cli/chunks/{chunk-56QR72EB.js → chunk-DR2M2SI2.js} +2 -2
- package/dist/cli/chunks/{chunk-MP3RCZ75.js → chunk-DS53MJCN.js} +1 -1
- package/dist/cli/chunks/{chunk-KE656E6T.js → chunk-DSIS6WQD.js} +3 -3
- package/dist/cli/chunks/{chunk-CQP6BDSF.js → chunk-DSTQ2OWI.js} +1 -1
- package/dist/cli/chunks/{chunk-WUXCL65V.js → chunk-DXM7IN2W.js} +2 -2
- package/dist/cli/chunks/{chunk-O74V7MB4.js → chunk-E3OKRZCH.js} +2 -2
- package/dist/cli/chunks/{chunk-TO7FTPRV.js → chunk-E7MD5LHC.js} +2 -2
- package/dist/cli/chunks/{chunk-A2G26WU4.js → chunk-EKWEJOV7.js} +1 -1
- package/dist/cli/chunks/chunk-EP4ORDFE.js +2 -0
- package/dist/cli/chunks/{chunk-5RVWL2U3.js → chunk-EVJSK56E.js} +3 -3
- package/dist/cli/chunks/chunk-EY44JDUL.js +12 -0
- package/dist/cli/chunks/{chunk-JDADACZZ.js → chunk-EYHRYIBX.js} +1 -1
- package/dist/cli/chunks/{chunk-FJSL7TWU.js → chunk-EYWR4Y3J.js} +1 -1
- package/dist/cli/chunks/{chunk-E7FCVH32.js → chunk-F66FYZQF.js} +2 -2
- package/dist/cli/chunks/{chunk-GNFKG2LX.js → chunk-FGQH5LOG.js} +2 -2
- package/dist/cli/chunks/{chunk-ZAT65V6I.js → chunk-FH6H4KOZ.js} +17 -17
- package/dist/cli/chunks/{chunk-OU3SYEYJ.js → chunk-FV47SYXK.js} +1 -1
- package/dist/cli/chunks/chunk-GA7PUAMT.js +2 -0
- package/dist/cli/chunks/{chunk-IVZA5XTW.js → chunk-GEH3S5DI.js} +2 -2
- package/dist/cli/chunks/{chunk-44SYMJ4T.js → chunk-GQCYO54W.js} +2 -2
- package/dist/cli/chunks/{chunk-4HVVVVUF.js → chunk-GSZL3WST.js} +2 -2
- package/dist/cli/chunks/{chunk-XTHRSBMJ.js → chunk-GV3C224P.js} +2 -2
- package/dist/cli/chunks/{chunk-JBHGMLN7.js → chunk-HBNMEYJS.js} +182 -201
- package/dist/cli/chunks/{chunk-LUAYTM77.js → chunk-HPRX5S74.js} +1 -1
- package/dist/cli/chunks/{chunk-PFQLB4XP.js → chunk-HWWMINXV.js} +2 -2
- package/dist/cli/chunks/{chunk-UQFMQOZB.js → chunk-IHUAEQZN.js} +1 -1
- package/dist/cli/chunks/{chunk-GGZB2ZBB.js → chunk-ISOTSVI7.js} +1 -1
- package/dist/cli/chunks/{chunk-RCRKCMN5.js → chunk-JDADNBWS.js} +1 -1
- package/dist/cli/chunks/{chunk-ITQCSIYG.js → chunk-JGQZ7ECC.js} +1 -1
- package/dist/cli/chunks/{chunk-5R26MAMK.js → chunk-JH6KUV74.js} +2 -2
- package/dist/cli/chunks/{chunk-6CZUQA4G.js → chunk-JPJSOS4H.js} +1 -1
- package/dist/cli/chunks/{chunk-NW4YPUPN.js → chunk-JQXAWTS5.js} +3 -3
- package/dist/cli/chunks/{chunk-II2RP3MY.js → chunk-K7ZFBGLE.js} +2 -2
- package/dist/cli/chunks/chunk-KBHSID6C.js +62 -0
- package/dist/cli/chunks/{chunk-KZAVYHH7.js → chunk-KHDE4KT5.js} +4 -4
- package/dist/cli/chunks/{chunk-LEIG3KIG.js → chunk-KMCI3RGD.js} +2 -2
- package/dist/cli/chunks/{chunk-KB4S7MGB.js → chunk-LGP26FTM.js} +2 -2
- package/dist/cli/chunks/{chunk-55E62F4T.js → chunk-LLVXOXAK.js} +1 -1
- package/dist/cli/chunks/{chunk-PIYDPOW6.js → chunk-LQYAJ7RR.js} +2 -2
- package/dist/cli/chunks/{chunk-KQLJILCZ.js → chunk-LVLGRUUJ.js} +1 -1
- package/dist/cli/chunks/{chunk-PRHLV6FS.js → chunk-LYGHX4II.js} +1 -1
- package/dist/cli/chunks/{chunk-RKNKFLCQ.js → chunk-MOIKR7RU.js} +2 -2
- package/dist/cli/chunks/chunk-MSA6MD5C.js +2 -0
- package/dist/cli/chunks/{chunk-MWWTYPFL.js → chunk-MTEEFP6V.js} +2 -2
- package/dist/cli/chunks/{chunk-OR2RC7ZH.js → chunk-N6QUDQ5H.js} +2 -2
- package/dist/cli/chunks/{chunk-Z7FVGJYC.js → chunk-N7JRGAJF.js} +2 -2
- package/dist/cli/chunks/{chunk-WCUXA3NV.js → chunk-NNIAUDHF.js} +1 -1
- package/dist/cli/chunks/{chunk-SQCACQUM.js → chunk-NUCVMWDJ.js} +2 -2
- package/dist/cli/chunks/{chunk-N57M7UPQ.js → chunk-NUDDFJYU.js} +2 -2
- package/dist/cli/chunks/{chunk-GIU26D5G.js → chunk-NX6FOAS4.js} +1 -1
- package/dist/cli/chunks/{chunk-ZYCPTARG.js → chunk-O34674VM.js} +2 -2
- package/dist/cli/chunks/{chunk-PJFQGNRW.js → chunk-OIGWREK7.js} +1 -1
- package/dist/cli/chunks/{chunk-DQ247474.js → chunk-OS56PKRO.js} +2 -2
- package/dist/cli/chunks/{chunk-OF7674H5.js → chunk-P4CHYYJN.js} +2 -2
- package/dist/cli/chunks/{chunk-VLELNETG.js → chunk-P6A35LKJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GOFP47XU.js → chunk-PA6SUNDD.js} +1 -1
- package/dist/cli/chunks/{chunk-O45CEMVF.js → chunk-PGDDPZ7W.js} +1 -1
- package/dist/cli/chunks/{chunk-ESMSH7HG.js → chunk-PLYGIUFO.js} +2 -2
- package/dist/cli/chunks/{chunk-EEHEMDNV.js → chunk-POZ3S4UO.js} +2 -2
- package/dist/cli/chunks/{chunk-NQJLUY2K.js → chunk-PSAXLKDZ.js} +2 -2
- package/dist/cli/chunks/{chunk-HGY62IYZ.js → chunk-PTBW2QXE.js} +2 -2
- package/dist/cli/chunks/{chunk-PI55PHUL.js → chunk-PW3JLQGH.js} +2 -2
- package/dist/cli/chunks/{chunk-GOHWEQEP.js → chunk-PX7MVV6F.js} +2 -2
- package/dist/cli/chunks/{chunk-SJ26ZR75.js → chunk-Q4RU4XG6.js} +2 -2
- package/dist/cli/chunks/{chunk-XF4F5ZXO.js → chunk-QQA4N3YT.js} +4 -4
- package/dist/cli/chunks/chunk-QSO5RFJ4.js +15 -0
- package/dist/cli/chunks/{chunk-Z6FK7T7J.js → chunk-R2GHZ2QG.js} +2 -2
- package/dist/cli/chunks/{chunk-VDPQ7NVG.js → chunk-R5FSKAS3.js} +1 -1
- package/dist/cli/chunks/{chunk-5DESO7E4.js → chunk-R5LDNZVB.js} +2 -2
- package/dist/cli/chunks/{chunk-X5JMTHXC.js → chunk-RBNSZFVL.js} +3 -3
- package/dist/cli/chunks/{chunk-TM6LLT4G.js → chunk-RDSO3R2R.js} +3 -3
- package/dist/cli/chunks/{chunk-27REOPQK.js → chunk-SZO6JIFM.js} +2 -2
- package/dist/cli/chunks/{chunk-IU5SILCS.js → chunk-TGSL4OOT.js} +2 -2
- package/dist/cli/chunks/{chunk-4FP4PJ45.js → chunk-THW6LF5I.js} +2 -2
- package/dist/cli/chunks/{chunk-FBXWU37F.js → chunk-TMM5NKPI.js} +1 -1
- package/dist/cli/chunks/{chunk-VZO4V4R4.js → chunk-TWNXZOJY.js} +2 -2
- package/dist/cli/chunks/{chunk-X67O2KUE.js → chunk-U63JEFF5.js} +7 -7
- package/dist/cli/chunks/{chunk-IUFNB6I6.js → chunk-UHQA6EH6.js} +2 -2
- package/dist/cli/chunks/{chunk-XLP44YGX.js → chunk-UN2MXDJT.js} +2 -2
- package/dist/cli/chunks/{chunk-CTNDSP2M.js → chunk-UNLH7NPY.js} +1 -1
- package/dist/cli/chunks/{chunk-EPSF2ERW.js → chunk-V4QQTPZF.js} +2 -2
- package/dist/cli/chunks/{chunk-UAEP2ZUQ.js → chunk-V5MS6XNT.js} +2 -2
- package/dist/cli/chunks/{chunk-XEI5LLHX.js → chunk-VK5I4JSN.js} +2 -2
- package/dist/cli/chunks/{chunk-W37WY3OL.js → chunk-VSP2IB5N.js} +2 -2
- package/dist/cli/chunks/{chunk-PD2ZSCEH.js → chunk-WA553ALQ.js} +1 -1
- package/dist/cli/chunks/{chunk-TFFEB7XD.js → chunk-X3CHYV7G.js} +2 -2
- package/dist/cli/chunks/{chunk-MPVOZKUP.js → chunk-X75OYPS6.js} +1 -1
- package/dist/cli/chunks/{chunk-C75V5PTW.js → chunk-XF2TKGSC.js} +1 -1
- package/dist/cli/chunks/{chunk-Y7VWCP35.js → chunk-XLDEWLP4.js} +1 -1
- package/dist/cli/chunks/{chunk-26SNR2EK.js → chunk-XRH2D6JV.js} +3 -3
- package/dist/cli/chunks/{chunk-MANWLRAW.js → chunk-XZPAKAFJ.js} +1 -1
- package/dist/cli/chunks/{chunk-6XVP6BGM.js → chunk-Y2QZK46R.js} +2 -2
- package/dist/cli/chunks/{chunk-6BHRSGR7.js → chunk-YL7CAOQG.js} +3 -3
- package/dist/cli/chunks/{chunk-SPTCNM45.js → chunk-YOVQBSTW.js} +2 -2
- package/dist/cli/chunks/{chunk-2Q73TQUQ.js → chunk-YQUZGPUQ.js} +1 -1
- package/dist/cli/chunks/{chunk-YZGA4ELM.js → chunk-YRRYKR7U.js} +2 -2
- package/dist/cli/chunks/{chunk-NAAPL2HK.js → chunk-Z6SAS2NU.js} +1 -1
- package/dist/cli/chunks/{ci-DK4FGREO.js → ci-MWQVCZ2W.js} +2 -2
- package/dist/cli/chunks/{ci-output-HQBBQQES.js → ci-output-ZCH4IZ7H.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-MJCS46DN.js → circuit-breaker-N3VSQM5X.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-IIQT52H4.js → claude-flow-setup-TSJFOGXN.js} +2 -2
- package/dist/cli/chunks/client-IEN43WBH.js +2 -0
- package/dist/cli/chunks/{cline-installer-7SPKUNNZ.js → cline-installer-OHKWAB4I.js} +2 -2
- package/dist/cli/chunks/{code-V2B4FP3X.js → code-3UTIL3QR.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-IRGAI76Y.js → code-index-extractor-TVG2V2NY.js} +2 -2
- package/dist/cli/chunks/{codex-installer-PDFCYRU6.js → codex-installer-L6ZOTOO2.js} +2 -2
- package/dist/cli/chunks/{completions-TAJ6N7YZ.js → completions-SFRB664X.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-JHQKQKBG.js → complexity-analyzer-HDZKVO6D.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-DESZXCLC.js → continuedev-installer-HKLZR3UO.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-OQPXBLWS.js → copilot-installer-5P3LX3C5.js} +2 -2
- package/dist/cli/chunks/core-handlers-PBITKHVP.js +2 -0
- package/dist/cli/chunks/{cost-tracker-KHDFSCAJ.js → cost-tracker-MZR5RB6E.js} +2 -2
- package/dist/cli/chunks/{coverage-T7EENIDE.js → coverage-L6V6NFIM.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-JGCWQ7BO.js +2 -0
- package/dist/cli/chunks/{cursor-installer-X6BFU5QU.js → cursor-installer-FD6DT23Y.js} +2 -2
- package/dist/cli/chunks/{daemon-UTPP4JCG.js → daemon-HTSRODRG.js} +4 -4
- package/dist/cli/chunks/{daemon-22NOG5XI.js → daemon-I5ESGZGX.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-XI6DG3FW.js → dag-attention-scheduler-JPTHWB2Q.js} +2 -2
- package/dist/cli/chunks/{detect-7IMQGJ5I.js → detect-RTUZDBEZ.js} +2 -2
- package/dist/cli/chunks/{dist-node-YMLM4K7J.js → dist-node-5HLWHNYA.js} +2 -2
- package/dist/cli/chunks/{domain-handler-LRTJGTEH.js → domain-handler-R7IPUX54.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-HZJ3WUCT.js → domain-transfer-E3I2LMCB.js} +2 -2
- package/dist/cli/chunks/dream-52MPUF5Q.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-QSRN7Z5Q.js → embed-and-insert-pattern-BXUWG73R.js} +2 -2
- package/dist/cli/chunks/{eval-JVVVQVV6.js → eval-3ZFM75YA.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-ORZN3ROJ.js → experience-capture-middleware-NJ3BT657.js} +3 -3
- package/dist/cli/chunks/{fast-paths-LUFARZR5.js → fast-paths-Q3V5C5IM.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZHQESXIP.js → feature-flags-D3JGPHXY.js} +2 -2
- package/dist/cli/chunks/{feature-flags-2XC4ECLW.js → feature-flags-XZGJNPZ7.js} +2 -2
- package/dist/cli/chunks/file-discovery-MZOYXIOS.js +2 -0
- package/dist/cli/chunks/{fleet-FUQ6G4SB.js → fleet-FG3EBA75.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-A4E6OKGD.js → gnn-wrapper-PKZLZHL2.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-3JKQORXA.js → heartbeat-handler-YZTRVH75.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-LMAEJQYQ.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-DGGDYJEL.js +2 -0
- package/dist/cli/chunks/hnsw-index-KA7WDTHX.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-AHKFKM2J.js → hnsw-legacy-bridge-WONHB63F.js} +2 -2
- package/dist/cli/chunks/hnswlib-node-Q4VPSJJM.js +2 -0
- package/dist/cli/chunks/{hooks-JNW5ZB2E.js → hooks-RWX5ZZCE.js} +47 -47
- package/dist/cli/chunks/hybrid-router-Q6JQTV55.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-3DTAMNSJ.js → hypergraph-engine-G6N24L5G.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-ZV4AZRGF.js → hypergraph-handler-4RGOLL6F.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-7LFSGIQP.js +2 -0
- package/dist/cli/chunks/{init-handler-NPOUX47N.js → init-handler-L7DZAHXO.js} +12 -12
- package/dist/cli/chunks/init-wizard-T4K44J6D.js +2 -0
- package/dist/cli/chunks/kernel-TGHK6X7F.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-D35TR6LG.js → kilocode-installer-G7PUCUDZ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-OHHTQENO.js → kiro-installer-H6234HEB.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-MV3OSGCB.js +2 -0
- package/dist/cli/chunks/learning-346CA4DH.js +119 -0
- package/dist/cli/chunks/{llm-router-XLTE52H5.js → llm-router-ATNRDTEM.js} +4 -4
- package/dist/cli/chunks/llm-router-service-OOCNAPJO.js +2 -0
- package/dist/cli/chunks/{load-BHMK4FIL.js → load-3L2CK4ML.js} +2 -2
- package/dist/cli/chunks/load-test-4OZPYWL4.js +2 -0
- package/dist/cli/chunks/{mcp-V4MAYT7C.js → mcp-JJ4ZDUJB.js} +2 -2
- package/dist/cli/chunks/{memory-PDA7MQ7E.js → memory-U3K2Y777.js} +5 -5
- package/dist/cli/chunks/memory-backend-LMRIHJQY.js +2 -0
- package/dist/cli/chunks/memory-handlers-J6CVQ5DS.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-KECHOXKD.js → multi-model-executor-DPCU4CSM.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-LWSCQOOZ.js → opencode-installer-KNUCUSRG.js} +2 -2
- package/dist/cli/chunks/{orchestrator-ENEBTEUW.js → orchestrator-DJV2NUWD.js} +11 -11
- package/dist/cli/chunks/pattern-null-store-AQWPHLRW.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-XIHGXYZZ.js → pattern-usage-recorder-TQ7KECBB.js} +2 -2
- package/dist/cli/chunks/{pipeline-GQOJM3LU.js → pipeline-JG57VFOB.js} +2 -2
- package/dist/cli/chunks/{platform-L56TGXGZ.js → platform-L7LOBG4E.js} +2 -2
- package/dist/cli/chunks/{plugin-SZ6PZKYX.js → plugin-ATBPEU2K.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-SID5FQFW.js → prime-radiant-advanced-wasm-XCX7CNVW.js} +2 -2
- package/dist/cli/chunks/protocol-executor-FWUT6L6K.js +2 -0
- package/dist/cli/chunks/{protocol-handler-5MMNVVPX.js → protocol-handler-DOFLSB4N.js} +2 -2
- package/dist/cli/chunks/{prove-DJ6BQ2AK.js → prove-CDBMRPBD.js} +2 -2
- package/dist/cli/chunks/provider-manager-4PY7IR3V.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-M4XVWRPY.js +2 -0
- package/dist/cli/chunks/quality-5CMQBYP3.js +7 -0
- package/dist/cli/chunks/{quality-gate-CVHVSORK.js → quality-gate-LU66IWRT.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-KSRI42QZ.js +2 -0
- package/dist/cli/chunks/{real-embeddings-DN2MEJVM.js → real-embeddings-3B7AXYOP.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-LTAQJWIH.js → roocode-installer-GF4YJW7E.js} +2 -2
- package/dist/cli/chunks/router-F2TCXNSG.js +2 -0
- package/dist/cli/chunks/routing-feedback-VHOWXUY7.js +2 -0
- package/dist/cli/chunks/{routing-handler-PSWR2UCT.js → routing-handler-PWQMWFND.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-VTP6Y7PN.js → ruvector-commands-SMD6KSBD.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-EBUMXPRO.js → rvf-dual-writer-M5TEJ56X.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-5N7GHMD3.js → rvf-migration-adapter-EHLWMZYI.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-GQKDBNRR.js → rvf-migration-coordinator-GMVLX3FX.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-XG3LFOYW.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-LR3SYGQK.js → rvf-store-integrity-PDADEHAZ.js} +2 -2
- package/dist/cli/chunks/safe-db-CTHJ3SXC.js +2 -0
- package/dist/cli/chunks/schedule-LLYADLGL.js +2 -0
- package/dist/cli/chunks/scheduler-72YIGDIX.js +2 -0
- package/dist/cli/chunks/{security-YDWLYXYD.js → security-PSMBTUSM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-I3HQY7DE.js → shared-rvf-adapter-DP2Z4YLV.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-2UADEA5N.js → shared-rvf-dual-writer-UOU6ORBJ.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-N7OO3ZOE.js +2 -0
- package/dist/cli/chunks/{status-handler-QRHI3F4V.js → status-handler-T565F47D.js} +2 -2
- package/dist/cli/chunks/{structural-health-FWKE63CM.js → structural-health-54WNSZ7Y.js} +2 -2
- package/dist/cli/chunks/{sync-2QRCT5MT.js → sync-5ZGYF7JF.js} +2 -2
- package/dist/cli/chunks/{sync-E32MBAOF.js → sync-EXADT5IZ.js} +2 -2
- package/dist/cli/chunks/{task-handler-C7BKMOCL.js → task-handler-JXWQZDEX.js} +2 -2
- package/dist/cli/chunks/{task-handlers-PADWLLDO.js → task-handlers-UKHRILMM.js} +3 -3
- package/dist/cli/chunks/test-3SU56PMM.js +33 -0
- package/dist/cli/chunks/{test-scheduling-5WKIWH4H.js → test-scheduling-CZZ4KKWM.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-6SKOJM3U.js → token-bootstrap-RSIAPUIV.js} +2 -2
- package/dist/cli/chunks/{token-usage-V6JW55RV.js → token-usage-7HW43ORO.js} +2 -2
- package/dist/cli/chunks/{transformers-3UPFBYSB.js → transformers-A5REG7OI.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-UCY4S2DU.js → tree-sitter-wasm-parser-F43MC7E5.js} +2 -2
- package/dist/cli/chunks/{types-XNMNQGET.js → types-DEOHTTJ3.js} +2 -2
- package/dist/cli/chunks/unified-memory-Q55MJWAM.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-4BEKV2K5.js +2 -0
- package/dist/cli/chunks/unified-persistence-IIB5MR67.js +2 -0
- package/dist/cli/chunks/{upgrade-MVTMTOPL.js → upgrade-7NKNCL2I.js} +2 -2
- package/dist/cli/chunks/{validate-OJWR2AGZ.js → validate-SN2UY7CT.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-2RGSF2K2.js → validate-swarm-YITFMCXY.js} +2 -2
- package/dist/cli/chunks/{vibium-O3ZLAEEZ.js → vibium-AZNIG6O7.js} +2 -2
- package/dist/cli/chunks/visual-security-F4FUP6KV.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-6VPASTI4.js → web-tree-sitter-DY4YXPMR.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-CINHOW3N.js → windsurf-installer-HXD4BK7N.js} +2 -2
- package/dist/cli/chunks/witness-chain-SQ5LCKUQ.js +2 -0
- package/dist/cli/chunks/{witness-chain-2NXW7FT7.js → witness-chain-UV7BOO6T.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-ODW4DJWT.js → witness-key-manager-BCNW3SZH.js} +2 -2
- package/dist/cli/chunks/{workflow-BFGS2GAU.js → workflow-R3SSSWA5.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-Z4PZXWVY.js +2 -0
- package/dist/cli/chunks/{wrappers-VEVVSVMS.js → wrappers-6JUXYAML.js} +2 -2
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +16 -27
- package/dist/cli/commands/learning.js +66 -0
- package/dist/cli/commands/quality.d.ts +12 -0
- package/dist/cli/commands/quality.js +50 -74
- package/dist/cli/commands/test.js +33 -4
- package/dist/cli/handlers/init-handler.d.ts +2 -0
- package/dist/cli/handlers/init-handler.js +4 -1
- package/dist/cli/utils/file-discovery.d.ts +1 -0
- package/dist/cli/utils/file-discovery.js +13 -1
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +5 -0
- package/dist/domains/quality-assessment/index.d.ts +1 -0
- package/dist/domains/quality-assessment/index.js +1 -0
- package/dist/domains/quality-assessment/quality-evidence.d.ts +41 -0
- package/dist/domains/quality-assessment/quality-evidence.js +115 -0
- package/dist/domains/test-execution/coordinator.d.ts +1 -0
- package/dist/domains/test-execution/coordinator.js +11 -4
- package/dist/domains/test-execution/interfaces.d.ts +2 -0
- package/dist/domains/test-execution/services/retry-handler.js +3 -3
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
- package/dist/domains/test-execution/services/test-executor.js +93 -30
- package/dist/domains/test-generation/gates/test-quality-gate.d.ts +8 -2
- package/dist/domains/test-generation/gates/test-quality-gate.js +93 -4
- package/dist/domains/test-generation/generators/base-test-generator.js +0 -15
- package/dist/domains/test-generation/generators/jest-vitest-generator.js +17 -26
- package/dist/domains/test-generation/services/test-generator.js +7 -2
- package/dist/init/orchestrator.js +1 -0
- package/dist/init/phases/07-hooks.js +3 -1
- package/dist/init/phases/phase-interface.d.ts +2 -0
- package/dist/init/settings-merge.d.ts +3 -1
- package/dist/init/settings-merge.js +9 -3
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +2 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +14 -0
- package/dist/integrations/embeddings/index/HNSWIndex.js +2 -0
- package/dist/kernel/hybrid-backend.d.ts +1 -1
- package/dist/kernel/hybrid-backend.js +2 -2
- package/dist/kernel/interfaces.d.ts +2 -2
- package/dist/kernel/memory-backend.d.ts +1 -1
- package/dist/kernel/memory-backend.js +3 -1
- package/dist/kernel/unified-memory.d.ts +1 -1
- package/dist/kernel/unified-memory.js +19 -4
- package/dist/learning/real-embeddings.js +20 -4
- package/dist/learning/sqlite-persistence.d.ts +3 -2
- package/dist/learning/sqlite-persistence.js +7 -8
- package/dist/mcp/bundle.js +453 -472
- package/dist/mcp/handlers/memory-handlers.js +2 -5
- package/dist/mcp/tools/quality-assessment/evaluate.d.ts +7 -0
- package/dist/mcp/tools/quality-assessment/evaluate.js +72 -20
- package/dist/mcp/tools/security-compliance/scan.js +8 -1
- package/package.json +2 -2
- package/dist/cli/chunks/adapter-JISQ35YY.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-TVTNP76S.js +0 -2
- package/dist/cli/chunks/base-WBCYKM45.js +0 -2
- package/dist/cli/chunks/better-sqlite3-FXJFG2WH.js +0 -2
- package/dist/cli/chunks/browser-workflow-4JM3IWCS.js +0 -2
- package/dist/cli/chunks/chunk-344CLTV7.js +0 -62
- package/dist/cli/chunks/chunk-6VNUASTQ.js +0 -15
- package/dist/cli/chunks/chunk-CW7LDLJ2.js +0 -2
- package/dist/cli/chunks/chunk-HGBVGEUE.js +0 -2
- package/dist/cli/chunks/chunk-JJ5YIKTJ.js +0 -12
- package/dist/cli/chunks/chunk-QGH54HTH.js +0 -2
- package/dist/cli/chunks/chunk-TCYSMSBO.js +0 -2
- package/dist/cli/chunks/chunk-YQI6SOUO.js +0 -2
- package/dist/cli/chunks/client-FNDZB4TY.js +0 -2
- package/dist/cli/chunks/core-handlers-S37RHLKP.js +0 -2
- package/dist/cli/chunks/cross-domain-router-7ZHDB2V3.js +0 -2
- package/dist/cli/chunks/dream-BEVYNIOO.js +0 -2
- package/dist/cli/chunks/file-discovery-UHXZQ7GS.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-K4YLB3X4.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-PPR3LTMA.js +0 -2
- package/dist/cli/chunks/hnsw-index-ZSKFT4LZ.js +0 -2
- package/dist/cli/chunks/hybrid-router-4SXBHTOY.js +0 -2
- package/dist/cli/chunks/impact-analyzer-55GE7EQD.js +0 -2
- package/dist/cli/chunks/init-wizard-EUQLSGI6.js +0 -2
- package/dist/cli/chunks/kernel-BSGSVYPM.js +0 -2
- package/dist/cli/chunks/knowledge-graph-OITIVT5J.js +0 -2
- package/dist/cli/chunks/learning-24PCHLWU.js +0 -117
- package/dist/cli/chunks/llm-router-service-RUPU52AR.js +0 -2
- package/dist/cli/chunks/load-test-ZV3C55ZE.js +0 -2
- package/dist/cli/chunks/memory-backend-S3KCPHCF.js +0 -2
- package/dist/cli/chunks/memory-handlers-X5BLXOSH.js +0 -2
- package/dist/cli/chunks/pattern-null-store-ILVDKSCX.js +0 -2
- package/dist/cli/chunks/protocol-executor-GDRHCW3Q.js +0 -2
- package/dist/cli/chunks/provider-manager-BS4MVCSH.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-P3ARGHDN.js +0 -2
- package/dist/cli/chunks/quality-WKC4JCB3.js +0 -7
- package/dist/cli/chunks/queen-coordinator-GI7GNVDM.js +0 -2
- package/dist/cli/chunks/router-YU6MLJBV.js +0 -2
- package/dist/cli/chunks/routing-feedback-D6B2SK5V.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-M7ZVRN5Z.js +0 -2
- package/dist/cli/chunks/safe-db-3OHTLXG7.js +0 -2
- package/dist/cli/chunks/schedule-H43ADREQ.js +0 -2
- package/dist/cli/chunks/scheduler-CGSXNEPJ.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-V6U5FKVK.js +0 -2
- package/dist/cli/chunks/test-KX4UKHSX.js +0 -33
- package/dist/cli/chunks/unified-memory-H2J5BHPY.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-LFGIWMTS.js +0 -2
- package/dist/cli/chunks/unified-persistence-F6W7EXU5.js +0 -2
- package/dist/cli/chunks/visual-security-EHVU32UE.js +0 -2
- package/dist/cli/chunks/witness-chain-BIICGRHC.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-PVTYPYY4.js +0 -2
|
@@ -214,16 +214,6 @@ ${importStatement}
|
|
|
214
214
|
code += ` expect(() => instance.${method.name}(${paramsWithUndefined})).toThrow();\n`;
|
|
215
215
|
code += ` });\n`;
|
|
216
216
|
}
|
|
217
|
-
else {
|
|
218
|
-
// Use try-catch to handle both throwing (TypeError from property access) and non-throwing
|
|
219
|
-
code += `\n it('should handle undefined ${param.name}', ${asyncPrefix}() => {\n`;
|
|
220
|
-
code += ` try {\n`;
|
|
221
|
-
code += ` ${method.isAsync ? 'await ' : ''}instance.${method.name}(${paramsWithUndefined});\n`;
|
|
222
|
-
code += ` } catch (e) {\n`;
|
|
223
|
-
code += ` expect(e).toBeInstanceOf(Error);\n`;
|
|
224
|
-
code += ` }\n`;
|
|
225
|
-
code += ` });\n`;
|
|
226
|
-
}
|
|
227
217
|
}
|
|
228
218
|
}
|
|
229
219
|
code += ` });\n\n`;
|
|
@@ -235,9 +225,10 @@ ${importStatement}
|
|
|
235
225
|
generateStubTests(context) {
|
|
236
226
|
const { moduleName, importPath, testType, patterns, dependencies, similarCode } = context;
|
|
237
227
|
const patternComment = this.generatePatternComment(patterns);
|
|
238
|
-
const
|
|
239
|
-
const
|
|
240
|
-
const
|
|
228
|
+
const moduleIdentifier = 'moduleUnderTest';
|
|
229
|
+
const basicOpsTest = this.generateBasicOpsTest(moduleIdentifier, patterns);
|
|
230
|
+
const edgeCaseTest = this.generateEdgeCaseTest(moduleIdentifier, patterns);
|
|
231
|
+
const errorHandlingTest = this.generateErrorHandlingTest(moduleIdentifier, patterns);
|
|
241
232
|
// KG: Generate mock declarations for external (non-relative) dependencies only
|
|
242
233
|
let mockDeclarations = '';
|
|
243
234
|
if (dependencies && dependencies.imports.length > 0) {
|
|
@@ -264,9 +255,9 @@ ${importStatement}
|
|
|
264
255
|
if (dependencies && dependencies.imports.length > 0) {
|
|
265
256
|
depTest += `\n it('should interact with dependencies correctly', () => {\n`;
|
|
266
257
|
depTest += ` // KG-informed: module depends on ${dependencies.imports.length} imports\n`;
|
|
267
|
-
depTest += ` const instance = typeof ${
|
|
268
|
-
depTest += ` ? new ${
|
|
269
|
-
depTest += ` : ${
|
|
258
|
+
depTest += ` const instance = typeof ${moduleIdentifier} === 'function'\n`;
|
|
259
|
+
depTest += ` ? new ${moduleIdentifier}()\n`;
|
|
260
|
+
depTest += ` : ${moduleIdentifier};\n`;
|
|
270
261
|
depTest += ` expect(instance).toBeDefined();\n`;
|
|
271
262
|
depTest += ` });\n`;
|
|
272
263
|
}
|
|
@@ -275,21 +266,21 @@ ${importStatement}
|
|
|
275
266
|
if (dependencies && dependencies.importedBy.length > 0) {
|
|
276
267
|
callerTest += `\n it('should expose stable API for ${dependencies.importedBy.length} consumers', () => {\n`;
|
|
277
268
|
callerTest += ` // KG-informed: used by ${dependencies.importedBy.slice(0, 3).join(', ')}\n`;
|
|
278
|
-
callerTest += ` const publicKeys = Object.keys(typeof ${
|
|
279
|
-
callerTest += ` ? ${
|
|
280
|
-
callerTest += ` : ${
|
|
269
|
+
callerTest += ` const publicKeys = Object.keys(typeof ${moduleIdentifier} === 'function'\n`;
|
|
270
|
+
callerTest += ` ? ${moduleIdentifier}.prototype || {}\n`;
|
|
271
|
+
callerTest += ` : ${moduleIdentifier});\n`;
|
|
281
272
|
callerTest += ` expect(publicKeys.length).toBeGreaterThan(0);\n`;
|
|
282
273
|
callerTest += ` });\n`;
|
|
283
274
|
}
|
|
284
275
|
const stubImportSource = this.framework === 'vitest' ? 'vitest' : '@jest/globals';
|
|
285
276
|
const stubMockImport = this.framework === 'vitest' ? ', vi' : ', jest';
|
|
286
|
-
return `${patternComment}import { describe, it, expect, beforeEach${stubMockImport} } from '${stubImportSource}';
|
|
287
|
-
import
|
|
288
|
-
${mockDeclarations}
|
|
289
|
-
describe('${moduleName}', () => {
|
|
290
|
-
${similarityComment} describe('${testType} tests', () => {
|
|
291
|
-
it('should be defined', () => {
|
|
292
|
-
expect(${
|
|
277
|
+
return `${patternComment}import { describe, it, expect, beforeEach${stubMockImport} } from '${stubImportSource}';
|
|
278
|
+
import * as ${moduleIdentifier} from '${importPath}';
|
|
279
|
+
${mockDeclarations}
|
|
280
|
+
describe('${moduleName}', () => {
|
|
281
|
+
${similarityComment} describe('${testType} tests', () => {
|
|
282
|
+
it('should be defined', () => {
|
|
283
|
+
expect(${moduleIdentifier}).toBeDefined();
|
|
293
284
|
});
|
|
294
285
|
|
|
295
286
|
${basicOpsTest}
|
|
@@ -20,6 +20,7 @@ import { TestDataGeneratorService } from './test-data-generator';
|
|
|
20
20
|
import { toError } from '../../../shared/error-utils.js';
|
|
21
21
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
22
22
|
import { TestQualityGate } from '../gates/index.js';
|
|
23
|
+
import { getGeneratedTestSyntaxIssues } from '../gates/test-quality-gate.js';
|
|
23
24
|
import { EdgeCaseInjector } from '../pattern-injection/index.js';
|
|
24
25
|
import { treeSitterRegistry } from '../../../shared/parsers/multi-language-parser.js';
|
|
25
26
|
import { getLanguageFromExtension } from '../../../shared/types/test-frameworks.js';
|
|
@@ -127,7 +128,7 @@ export class TestGeneratorService {
|
|
|
127
128
|
* Enhance generated test code using LLM
|
|
128
129
|
* Adds edge cases, improves assertions, and adds documentation
|
|
129
130
|
*/
|
|
130
|
-
async enhanceTestWithLLM(testCode, sourceCode, analysis, context) {
|
|
131
|
+
async enhanceTestWithLLM(testCode, sourceCode, analysis, sourceFilePath, context) {
|
|
131
132
|
if (!this.llmRouter)
|
|
132
133
|
return { code: testCode, enhanced: false };
|
|
133
134
|
try {
|
|
@@ -202,6 +203,10 @@ Return ONLY the enhanced test code, no explanations.`,
|
|
|
202
203
|
if (codeMatch) {
|
|
203
204
|
enhancedCode = codeMatch[1].trim();
|
|
204
205
|
}
|
|
206
|
+
if (getGeneratedTestSyntaxIssues(enhancedCode, sourceFilePath).length > 0) {
|
|
207
|
+
logger.warn('LLM enhancement produced invalid syntax, using deterministic template');
|
|
208
|
+
return { code: testCode, enhanced: false };
|
|
209
|
+
}
|
|
205
210
|
// #567: only claim enhancement when the model actually returned code.
|
|
206
211
|
// An empty/unusable response falls back to the template, and the caller
|
|
207
212
|
// must be told that is what happened.
|
|
@@ -465,7 +470,7 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
465
470
|
// report AI-enhanced output it did not produce.
|
|
466
471
|
let llmEnhanced = false;
|
|
467
472
|
if (this.isLLMEnhancementAvailable() && sourceContent) {
|
|
468
|
-
const result = await this.enhanceTestWithLLM(testCode, sourceContent, codeAnalysis, context);
|
|
473
|
+
const result = await this.enhanceTestWithLLM(testCode, sourceContent, codeAnalysis, sourceFile, context);
|
|
469
474
|
testCode = result.code;
|
|
470
475
|
llmEnhanced = result.enhanced;
|
|
471
476
|
}
|
|
@@ -85,7 +85,9 @@ export class HooksPhase extends BasePhase {
|
|
|
85
85
|
// - statusLine / includeCoAuthoredBy preserved when user-set (#362 follow-up)
|
|
86
86
|
// - AQE-owned sections deep-merged so user additions survive
|
|
87
87
|
const v3Sections = generateV3SettingsSections(config, projectRoot);
|
|
88
|
-
applyV3Sections(settings, v3Sections
|
|
88
|
+
applyV3Sections(settings, v3Sections, {
|
|
89
|
+
statusLine: !context.options.noStatusLine,
|
|
90
|
+
});
|
|
89
91
|
// Enable MCP servers (deduplicate, replace old 'aqe' with 'agentic-qe')
|
|
90
92
|
let existingMcp = settings.enabledMcpjsonServers || [];
|
|
91
93
|
// Remove legacy 'aqe' entry if present (renamed to 'agentic-qe')
|
|
@@ -139,6 +139,8 @@ export interface InitOptions {
|
|
|
139
139
|
* unchanged. Pairs naturally with `--no-database`.
|
|
140
140
|
*/
|
|
141
141
|
noClaude?: boolean;
|
|
142
|
+
/** Skip AQE's Claude Code status line and remove a previously AQE-owned one. */
|
|
143
|
+
noStatusLine?: boolean;
|
|
142
144
|
/** @deprecated Use default behavior instead — MCP is now enabled by default */
|
|
143
145
|
withMcp?: boolean;
|
|
144
146
|
/**
|
|
@@ -70,7 +70,9 @@ export declare function isAqeStatusLine(statusLine: unknown): boolean;
|
|
|
70
70
|
*
|
|
71
71
|
* Mutates and returns `settings`.
|
|
72
72
|
*/
|
|
73
|
-
export declare function applyV3Sections(settings: Record<string, unknown>, sections: Record<string, unknown
|
|
73
|
+
export declare function applyV3Sections(settings: Record<string, unknown>, sections: Record<string, unknown>, options?: {
|
|
74
|
+
statusLine?: boolean;
|
|
75
|
+
}): Record<string, unknown>;
|
|
74
76
|
/**
|
|
75
77
|
* Generate v3-specific settings sections for settings.json.
|
|
76
78
|
* These sections enable the self-learning system, status line, and permissions.
|
|
@@ -173,7 +173,7 @@ function isPlainObject(value) {
|
|
|
173
173
|
*
|
|
174
174
|
* Mutates and returns `settings`.
|
|
175
175
|
*/
|
|
176
|
-
export function applyV3Sections(settings, sections) {
|
|
176
|
+
export function applyV3Sections(settings, sections, options = {}) {
|
|
177
177
|
for (const [key, value] of Object.entries(sections)) {
|
|
178
178
|
if (key === '_aqePermissions') {
|
|
179
179
|
const existingPerms = settings.permissions || {};
|
|
@@ -182,6 +182,14 @@ export function applyV3Sections(settings, sections) {
|
|
|
182
182
|
settings.permissions = { ...existingPerms, allow: merged };
|
|
183
183
|
}
|
|
184
184
|
else if (key === 'statusLine') {
|
|
185
|
+
if (options.statusLine === false) {
|
|
186
|
+
// Opting out removes only AQE-owned configuration. A status line from
|
|
187
|
+
// the user or another tool remains outside AQE's ownership boundary.
|
|
188
|
+
if (isAqeStatusLine(settings.statusLine)) {
|
|
189
|
+
delete settings.statusLine;
|
|
190
|
+
}
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
185
193
|
// Preserve a user's (or another tool's) custom status line.
|
|
186
194
|
if (settings.statusLine === undefined || isAqeStatusLine(settings.statusLine)) {
|
|
187
195
|
settings.statusLine = value;
|
|
@@ -215,8 +223,6 @@ export function generateV3SettingsSections(config, projectRoot) {
|
|
|
215
223
|
statusLine: {
|
|
216
224
|
type: 'command',
|
|
217
225
|
command: 'sh -c \'node "${CLAUDE_PROJECT_DIR:-.}/.claude/helpers/statusline-v3.cjs" 2>/dev/null || echo "▊ Agentic QE v3"\'',
|
|
218
|
-
refreshMs: 5000,
|
|
219
|
-
enabled: true,
|
|
220
226
|
},
|
|
221
227
|
// permissions are union-merged in 07-hooks.ts — not set here to avoid overwriting user entries (#362)
|
|
222
228
|
_aqePermissions: [
|
|
@@ -112,6 +112,7 @@ export declare class ExperienceReplay {
|
|
|
112
112
|
private db;
|
|
113
113
|
private prepared;
|
|
114
114
|
private initialized;
|
|
115
|
+
private initializationPromise;
|
|
115
116
|
private hnswIndex;
|
|
116
117
|
private idToExperienceId;
|
|
117
118
|
private experienceIdToHnswId;
|
|
@@ -124,6 +125,7 @@ export declare class ExperienceReplay {
|
|
|
124
125
|
* Initialize with SQLite persistence
|
|
125
126
|
*/
|
|
126
127
|
initialize(): Promise<void>;
|
|
128
|
+
private initializeOnce;
|
|
127
129
|
/**
|
|
128
130
|
* Ensure required schema exists.
|
|
129
131
|
* Uses captured_experiences as the canonical table (written by experience-capture-middleware).
|
|
@@ -59,6 +59,7 @@ export class ExperienceReplay {
|
|
|
59
59
|
db = null;
|
|
60
60
|
prepared = new Map();
|
|
61
61
|
initialized = false;
|
|
62
|
+
initializationPromise = null;
|
|
62
63
|
// Real HNSW index for O(log n) similarity search (150x-12,500x faster than linear scan)
|
|
63
64
|
hnswIndex;
|
|
64
65
|
// Mapping from HNSW numeric IDs to experience string IDs
|
|
@@ -95,6 +96,19 @@ export class ExperienceReplay {
|
|
|
95
96
|
async initialize() {
|
|
96
97
|
if (this.initialized)
|
|
97
98
|
return;
|
|
99
|
+
if (this.initializationPromise)
|
|
100
|
+
return this.initializationPromise;
|
|
101
|
+
this.initializationPromise = this.initializeOnce();
|
|
102
|
+
try {
|
|
103
|
+
await this.initializationPromise;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
// Allow a later caller to retry after a failed initialization.
|
|
107
|
+
this.initializationPromise = null;
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async initializeOnce() {
|
|
98
112
|
this.unifiedMemory = getUnifiedMemory();
|
|
99
113
|
await this.unifiedMemory.initialize();
|
|
100
114
|
this.db = this.unifiedMemory.getDatabase();
|
|
@@ -123,7 +123,7 @@ export declare class HybridMemoryBackend implements MemoryBackend {
|
|
|
123
123
|
* Vector similarity search
|
|
124
124
|
* Now uses unified memory's persistent vector storage
|
|
125
125
|
*/
|
|
126
|
-
vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
|
|
126
|
+
vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
|
|
127
127
|
/**
|
|
128
128
|
* Store vector embedding
|
|
129
129
|
* Now persists to unified memory.db
|
|
@@ -154,9 +154,9 @@ export class HybridMemoryBackend {
|
|
|
154
154
|
* Vector similarity search
|
|
155
155
|
* Now uses unified memory's persistent vector storage
|
|
156
156
|
*/
|
|
157
|
-
async vectorSearch(embedding, k) {
|
|
157
|
+
async vectorSearch(embedding, k, keyPrefix) {
|
|
158
158
|
this.ensureInitialized();
|
|
159
|
-
const results = await this.unifiedMemory.vectorSearch(embedding, k);
|
|
159
|
+
const results = await this.unifiedMemory.vectorSearch(embedding, k, undefined, keyPrefix);
|
|
160
160
|
// Convert to VectorSearchResult format
|
|
161
161
|
return results.map(r => ({
|
|
162
162
|
key: r.id,
|
|
@@ -215,8 +215,8 @@ export interface MemoryBackend extends Initializable, Disposable {
|
|
|
215
215
|
has(key: string, options?: RetrieveOptions): Promise<boolean>;
|
|
216
216
|
/** Search by pattern (`options.namespace` mirrors `get`). */
|
|
217
217
|
search(pattern: string, limit?: number, options?: RetrieveOptions): Promise<string[]>;
|
|
218
|
-
/** Vector similarity search (HNSW) */
|
|
219
|
-
vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
|
|
218
|
+
/** Vector similarity search (HNSW), optionally scoped by logical key prefix. */
|
|
219
|
+
vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
|
|
220
220
|
/** Store vector embedding */
|
|
221
221
|
storeVector(key: string, embedding: number[], metadata?: unknown): Promise<void>;
|
|
222
222
|
/**
|
|
@@ -14,7 +14,7 @@ export declare class InMemoryBackend implements MemoryBackend {
|
|
|
14
14
|
delete(key: string, options?: RetrieveOptions): Promise<boolean>;
|
|
15
15
|
has(key: string, options?: RetrieveOptions): Promise<boolean>;
|
|
16
16
|
search(pattern: string, limit?: number, options?: RetrieveOptions): Promise<string[]>;
|
|
17
|
-
vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
|
|
17
|
+
vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
|
|
18
18
|
storeVector(key: string, embedding: number[], metadata?: unknown): Promise<void>;
|
|
19
19
|
private buildKey;
|
|
20
20
|
private cleanup;
|
|
@@ -76,9 +76,11 @@ export class InMemoryBackend {
|
|
|
76
76
|
}
|
|
77
77
|
return results;
|
|
78
78
|
}
|
|
79
|
-
async vectorSearch(embedding, k) {
|
|
79
|
+
async vectorSearch(embedding, k, keyPrefix) {
|
|
80
80
|
const results = [];
|
|
81
81
|
for (const [key, entry] of this.vectors.entries()) {
|
|
82
|
+
if (keyPrefix && !key.startsWith(keyPrefix))
|
|
83
|
+
continue;
|
|
82
84
|
const score = cosineSimilarity(embedding, entry.embedding);
|
|
83
85
|
results.push({ key, score, metadata: entry.metadata });
|
|
84
86
|
}
|
|
@@ -157,7 +157,7 @@ export declare class UnifiedMemoryManager {
|
|
|
157
157
|
metadata?: unknown;
|
|
158
158
|
} | undefined>;
|
|
159
159
|
vectorDelete(id: string): Promise<boolean>;
|
|
160
|
-
vectorSearch(query: number[], k?: number, namespace?: string): Promise<Array<{
|
|
160
|
+
vectorSearch(query: number[], k?: number, namespace?: string, keyPrefix?: string): Promise<Array<{
|
|
161
161
|
id: string;
|
|
162
162
|
score: number;
|
|
163
163
|
metadata?: unknown;
|
|
@@ -733,12 +733,24 @@ export class UnifiedMemoryManager {
|
|
|
733
733
|
this.vectorIndex.remove(id);
|
|
734
734
|
return result.changes > 0;
|
|
735
735
|
}
|
|
736
|
-
async vectorSearch(query, k = 10, namespace) {
|
|
736
|
+
async vectorSearch(query, k = 10, namespace, keyPrefix) {
|
|
737
737
|
this.ensureInitialized();
|
|
738
738
|
if (!this.vectorsLoaded) {
|
|
739
739
|
await this.loadVectorIndex();
|
|
740
740
|
}
|
|
741
|
-
|
|
741
|
+
// Logical namespaces are encoded in vector ids (`namespace:key`), while
|
|
742
|
+
// the vectors table namespace identifies the physical backend. Widen the
|
|
743
|
+
// ANN query until enough logical matches are found so global top-K results
|
|
744
|
+
// cannot hide a valid namespaced hit.
|
|
745
|
+
const indexSize = this.vectorIndex.size();
|
|
746
|
+
let candidateCount = Math.min(indexSize, Math.max(k * 2, 1));
|
|
747
|
+
let results = this.vectorIndex.search(query, candidateCount);
|
|
748
|
+
while (keyPrefix &&
|
|
749
|
+
results.filter(result => result.id.startsWith(keyPrefix)).length < k &&
|
|
750
|
+
candidateCount < indexSize) {
|
|
751
|
+
candidateCount = Math.min(indexSize, candidateCount * 2);
|
|
752
|
+
results = this.vectorIndex.search(query, candidateCount);
|
|
753
|
+
}
|
|
742
754
|
if (results.length === 0)
|
|
743
755
|
return [];
|
|
744
756
|
const ids = results.map(r => r.id);
|
|
@@ -749,7 +761,7 @@ export class UnifiedMemoryManager {
|
|
|
749
761
|
const filteredResults = [];
|
|
750
762
|
for (const result of results) {
|
|
751
763
|
const row = metadataMap.get(result.id);
|
|
752
|
-
if (row && row.namespace === namespace) {
|
|
764
|
+
if (row && row.namespace === namespace && (!keyPrefix || result.id.startsWith(keyPrefix))) {
|
|
753
765
|
filteredResults.push({
|
|
754
766
|
id: result.id, score: result.score,
|
|
755
767
|
metadata: row.metadata ? safeJsonParse(row.metadata) : undefined,
|
|
@@ -760,7 +772,10 @@ export class UnifiedMemoryManager {
|
|
|
760
772
|
}
|
|
761
773
|
return filteredResults;
|
|
762
774
|
}
|
|
763
|
-
|
|
775
|
+
const scopedResults = keyPrefix
|
|
776
|
+
? results.filter(result => result.id.startsWith(keyPrefix)).slice(0, k)
|
|
777
|
+
: results.slice(0, k);
|
|
778
|
+
return scopedResults.map(result => {
|
|
764
779
|
const row = metadataMap.get(result.id);
|
|
765
780
|
return {
|
|
766
781
|
id: result.id, score: result.score,
|
|
@@ -137,7 +137,7 @@ async function initializeModel(config = {}) {
|
|
|
137
137
|
catch {
|
|
138
138
|
throw new Error('In-process embeddings require the optional package "@huggingface/transformers", ' +
|
|
139
139
|
'which is not installed. Either run `npm install @huggingface/transformers`, or ' +
|
|
140
|
-
'configure an embedding endpoint (EmbeddingConfig.endpoint /
|
|
140
|
+
'configure an embedding endpoint (EmbeddingConfig.endpoint / AQE_EMBEDDER_ENDPOINT) ' +
|
|
141
141
|
'so no local model is loaded.');
|
|
142
142
|
}
|
|
143
143
|
pipeline = transformers.pipeline;
|
|
@@ -237,6 +237,22 @@ export async function computeBatchEmbeddings(texts, config = {}) {
|
|
|
237
237
|
const uncachedTexts = [];
|
|
238
238
|
const uncachedIndices = [];
|
|
239
239
|
const results = new Array(texts.length).fill(null);
|
|
240
|
+
// Match computeRealEmbedding(): non-semantic inputs are represented by a
|
|
241
|
+
// zero vector and must never reach the model or its cache (#585).
|
|
242
|
+
const semanticIndices = [];
|
|
243
|
+
for (let i = 0; i < texts.length; i++) {
|
|
244
|
+
if (isNonSemanticText(texts[i])) {
|
|
245
|
+
results[i] = new Array(getEmbeddingDimension()).fill(0);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
semanticIndices.push(i);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Preserve the single-item API's no-initialization behavior when every
|
|
252
|
+
// input is non-semantic.
|
|
253
|
+
if (semanticIndices.length === 0) {
|
|
254
|
+
return results;
|
|
255
|
+
}
|
|
240
256
|
// Init BEFORE cache lookup so the cache key namespace is stable.
|
|
241
257
|
if (!embeddingModel) {
|
|
242
258
|
await initializeModel(config);
|
|
@@ -245,7 +261,7 @@ export async function computeBatchEmbeddings(texts, config = {}) {
|
|
|
245
261
|
throw new Error('Embedding model failed to initialize');
|
|
246
262
|
}
|
|
247
263
|
if (fullConfig.enableCache) {
|
|
248
|
-
for (
|
|
264
|
+
for (const i of semanticIndices) {
|
|
249
265
|
const cached = embeddingCache.get(cacheKey(texts[i]));
|
|
250
266
|
if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
|
|
251
267
|
results[i] = cached.embedding;
|
|
@@ -257,8 +273,8 @@ export async function computeBatchEmbeddings(texts, config = {}) {
|
|
|
257
273
|
}
|
|
258
274
|
}
|
|
259
275
|
else {
|
|
260
|
-
|
|
261
|
-
|
|
276
|
+
for (const i of semanticIndices) {
|
|
277
|
+
uncachedTexts.push(texts[i]);
|
|
262
278
|
uncachedIndices.push(i);
|
|
263
279
|
}
|
|
264
280
|
}
|
|
@@ -224,8 +224,9 @@ export declare class SQLitePatternStore {
|
|
|
224
224
|
};
|
|
225
225
|
/**
|
|
226
226
|
* Backfill embeddings for patterns that don't have them.
|
|
227
|
-
* Uses real all-MiniLM-L6-v2 transformer embeddings via @
|
|
228
|
-
*
|
|
227
|
+
* Uses real all-MiniLM-L6-v2 transformer embeddings via @huggingface/transformers
|
|
228
|
+
* or the configured external endpoint. Refuses hash proxies because mixing
|
|
229
|
+
* embedding spaces makes semantic retrieval results invalid.
|
|
229
230
|
* Skips bench/test patterns (id LIKE 'bench-%').
|
|
230
231
|
*
|
|
231
232
|
* @param batchSize - Patterns per inference batch (default: 32, matches model batch size)
|
|
@@ -923,8 +923,9 @@ export class SQLitePatternStore {
|
|
|
923
923
|
}
|
|
924
924
|
/**
|
|
925
925
|
* Backfill embeddings for patterns that don't have them.
|
|
926
|
-
* Uses real all-MiniLM-L6-v2 transformer embeddings via @
|
|
927
|
-
*
|
|
926
|
+
* Uses real all-MiniLM-L6-v2 transformer embeddings via @huggingface/transformers
|
|
927
|
+
* or the configured external endpoint. Refuses hash proxies because mixing
|
|
928
|
+
* embedding spaces makes semantic retrieval results invalid.
|
|
928
929
|
* Skips bench/test patterns (id LIKE 'bench-%').
|
|
929
930
|
*
|
|
930
931
|
* @param batchSize - Patterns per inference batch (default: 32, matches model batch size)
|
|
@@ -957,7 +958,7 @@ export class SQLitePatternStore {
|
|
|
957
958
|
let processed = 0;
|
|
958
959
|
let skipped = 0;
|
|
959
960
|
let errors = 0;
|
|
960
|
-
|
|
961
|
+
const method = 'transformer';
|
|
961
962
|
// Process in batches: compute embeddings async, then insert in sync transaction
|
|
962
963
|
for (let i = 0; i < patternsWithout.length; i += batchSize) {
|
|
963
964
|
const batch = patternsWithout.slice(i, i + batchSize);
|
|
@@ -996,11 +997,9 @@ export class SQLitePatternStore {
|
|
|
996
997
|
throw new Error(`[SQLitePatternStore] external embedder endpoint failed during backfill; ` +
|
|
997
998
|
`aborting to protect HNSW index. Original error: ${toErrorMessage(e)}`);
|
|
998
999
|
}
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
method = 'hash-fallback';
|
|
1003
|
-
embeddings = textsWithIds.map(t => hashEmbedding(t.text, dimension));
|
|
1000
|
+
throw new Error(`[SQLitePatternStore] semantic embedding unavailable; refusing to write hash proxies. ` +
|
|
1001
|
+
`Install @huggingface/transformers or configure AQE_EMBEDDER_ENDPOINT. ` +
|
|
1002
|
+
`Original error: ${toErrorMessage(e)}`);
|
|
1004
1003
|
}
|
|
1005
1004
|
// Insert computed embeddings in a sync transaction
|
|
1006
1005
|
const embeddingTag = method === 'transformer' ? 'transformer-backfill' : 'hash-backfill';
|