agentic-qe 3.15.16 → 3.15.18
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/brain-checkpoint.cjs +107 -10
- package/.claude/skills/agentic-quality-engineering/SKILL.md +67 -44
- package/.claude/skills/brutal-honesty-review/SKILL.md +12 -7
- package/.claude/skills/brutal-honesty-review/evals/brutal-honesty-review.yaml +120 -0
- package/.claude/skills/brutal-honesty-review/schemas/output.json +9 -3
- package/.claude/skills/code-review-quality/SKILL.md +2 -2
- package/.claude/skills/holistic-testing-pact/SKILL.md +11 -11
- package/.claude/skills/sherlock-review/SKILL.md +4 -2
- package/.claude/skills/sherlock-review/evals/sherlock-review.yaml +124 -0
- package/.claude/skills/skills-manifest.json +1 -1
- package/.claude/skills/technical-writing/SKILL.md +12 -6
- package/.claude/skills/technical-writing/evals/technical-writing.yaml +96 -0
- package/.opencode/skills/qe-agentic-quality-engineering.yaml +2 -2
- package/.opencode/skills/qe-holistic-testing-pact.yaml +2 -2
- package/CHANGELOG.md +201 -0
- package/assets/skills/agentic-quality-engineering/SKILL.md +67 -44
- package/assets/skills/brutal-honesty-review/SKILL.md +12 -8
- package/assets/skills/brutal-honesty-review/evals/brutal-honesty-review.yaml +120 -0
- package/assets/skills/brutal-honesty-review/schemas/output.json +9 -3
- package/assets/skills/code-review-quality/SKILL.md +2 -2
- package/assets/skills/holistic-testing-pact/SKILL.md +11 -11
- package/assets/skills/sherlock-review/SKILL.md +4 -3
- package/assets/skills/sherlock-review/evals/sherlock-review.yaml +124 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/assets/skills/technical-writing/SKILL.md +12 -6
- package/assets/skills/technical-writing/evals/technical-writing.yaml +96 -0
- package/dist/cli/brain-commands.d.ts +5 -0
- package/dist/cli/brain-commands.js +4 -0
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-WRSDXLOT.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-45NWEKVS.js → agent-booster-wasm-UFNJNF3M.js} +2 -2
- package/dist/cli/chunks/{agent-handler-LVHMYFEF.js → agent-handler-EAYVRJXN.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-YDWOJFEQ.js → agent-memory-branch-M65C6WAQ.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-O6NJBCCM.js +2 -0
- package/dist/cli/chunks/{arena-ELDZH3CZ.js → arena-2GDICP6R.js} +4 -4
- package/dist/cli/chunks/{arena-CZKHXDDS.js → arena-CG3X67OE.js} +2 -2
- package/dist/cli/chunks/{audit-5MT4T47Z.js → audit-F4FSPJPL.js} +3 -3
- package/dist/cli/chunks/base-J2FXOE77.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-6TGYPC2B.js → better-sqlite3-2MCFXW4J.js} +2 -2
- package/dist/cli/chunks/brain-handler-WGTJNYNB.js +95 -0
- package/dist/cli/chunks/{branch-enumerator-WVILM4SO.js → branch-enumerator-KL7C535H.js} +2 -2
- package/dist/cli/chunks/{browser-RX5ALU3H.js → browser-SJEXDVHS.js} +2 -2
- package/dist/cli/chunks/browser-workflow-LXGER6ZD.js +2 -0
- package/dist/cli/chunks/{chunk-2H4XH6FT.js → chunk-244RKAEP.js} +2 -2
- package/dist/cli/chunks/{chunk-SI6DPU5D.js → chunk-27TUMXPD.js} +1 -1
- package/dist/cli/chunks/{chunk-YNMJEDN5.js → chunk-2MBYDPCP.js} +2 -2
- package/dist/cli/chunks/{chunk-24QHCVX6.js → chunk-2Q6DTBMT.js} +1 -1
- package/dist/cli/chunks/{chunk-XWUWX7BV.js → chunk-355MI7RV.js} +13 -13
- package/dist/cli/chunks/{chunk-NQXXI77K.js → chunk-3LX5OKBD.js} +2 -2
- package/dist/cli/chunks/{chunk-63GMRQ25.js → chunk-3RPDKJGV.js} +1 -1
- package/dist/cli/chunks/chunk-3YMIT73A.js +4 -0
- package/dist/cli/chunks/{chunk-P3EYRILV.js → chunk-43KUVBSU.js} +2 -2
- package/dist/cli/chunks/chunk-477FKXSS.js +2 -0
- package/dist/cli/chunks/{chunk-HGWXF45W.js → chunk-4BIMTRRX.js} +1 -1
- package/dist/cli/chunks/{chunk-SSUAAX3F.js → chunk-4CVNVBX5.js} +2 -2
- package/dist/cli/chunks/{chunk-5V3TI2LG.js → chunk-4HL3SD4A.js} +1 -1
- package/dist/cli/chunks/{chunk-KKU2QGSJ.js → chunk-4PEG4DU2.js} +2 -2
- package/dist/cli/chunks/{chunk-J4ELZNLY.js → chunk-4QSQKFED.js} +2 -2
- package/dist/cli/chunks/chunk-53ZBETYR.js +16 -0
- package/dist/cli/chunks/{chunk-7TE5ONQQ.js → chunk-544KDWL4.js} +1 -1
- package/dist/cli/chunks/chunk-54RCGMLB.js +8 -0
- package/dist/cli/chunks/{chunk-KU2AUFGX.js → chunk-5AGXIZQ5.js} +2 -2
- package/dist/cli/chunks/{chunk-LQLPB2T6.js → chunk-5M24X6W7.js} +2 -2
- package/dist/cli/chunks/{chunk-YU2BDRSD.js → chunk-5O5T4LEU.js} +1 -1
- package/dist/cli/chunks/{chunk-NAEWCFQT.js → chunk-5RFXX4IF.js} +2 -2
- package/dist/cli/chunks/{chunk-MD43XRX5.js → chunk-62MLAQRJ.js} +1 -1
- package/dist/cli/chunks/{chunk-PEQDY4BO.js → chunk-6D6TGL2E.js} +2 -2
- package/dist/cli/chunks/{chunk-IOYG4VFL.js → chunk-6IHZDSDL.js} +2 -2
- package/dist/cli/chunks/{chunk-C5FP5GW3.js → chunk-6P3Y45QL.js} +2 -2
- package/dist/cli/chunks/{chunk-4LQFBY5L.js → chunk-6TEVM3X3.js} +10 -10
- package/dist/cli/chunks/{chunk-YPBSUGMI.js → chunk-7XTUKKRA.js} +1 -1
- package/dist/cli/chunks/chunk-A3GDX6UF.js +2 -0
- package/dist/cli/chunks/{chunk-HLUXXCHF.js → chunk-A5YTKKNA.js} +1 -1
- package/dist/cli/chunks/{chunk-Y4PFUMOU.js → chunk-ADNGZAT2.js} +1 -1
- package/dist/cli/chunks/{chunk-KNSRL6NO.js → chunk-AWQAE3SW.js} +2 -2
- package/dist/cli/chunks/{chunk-BY5OF7OH.js → chunk-AXDBQFR4.js} +2 -2
- package/dist/cli/chunks/{chunk-525CFDUE.js → chunk-AXVD7O3F.js} +2 -2
- package/dist/cli/chunks/{chunk-JHQCRRJI.js → chunk-B52ULNYO.js} +2 -2
- package/dist/cli/chunks/chunk-B6S4FC7M.js +3 -0
- package/dist/cli/chunks/{chunk-AJMJNQMP.js → chunk-BDVFSMOQ.js} +1 -1
- package/dist/cli/chunks/{chunk-DXD6K2ZP.js → chunk-BGXXMX3Y.js} +2 -2
- package/dist/cli/chunks/{chunk-EK7OLYOZ.js → chunk-BKMQQY5T.js} +2 -2
- package/dist/cli/chunks/{chunk-VWPM27GU.js → chunk-BN2FROBQ.js} +2 -2
- package/dist/cli/chunks/{chunk-J7I6PABJ.js → chunk-BO6EQNOC.js} +2 -2
- package/dist/cli/chunks/{chunk-4D4DENG6.js → chunk-BOVAKCDC.js} +2 -2
- package/dist/cli/chunks/{chunk-ZFL436FN.js → chunk-BSXKZDKO.js} +2 -2
- package/dist/cli/chunks/{chunk-J442IZLE.js → chunk-C5QVJ5XQ.js} +1 -1
- package/dist/cli/chunks/{chunk-ZB3LEFYG.js → chunk-CFQLLF3D.js} +2 -2
- package/dist/cli/chunks/{chunk-UHEOGZLX.js → chunk-DUCVLT3F.js} +7 -7
- package/dist/cli/chunks/{chunk-TVGI32MB.js → chunk-E4RMJCGA.js} +3 -3
- package/dist/cli/chunks/{chunk-TIUKLYAI.js → chunk-EONDCWY4.js} +1 -1
- package/dist/cli/chunks/{chunk-ZJH5MU2I.js → chunk-F4AGNKL2.js} +2 -2
- package/dist/cli/chunks/{chunk-N7HL5PHH.js → chunk-F6YD3BOW.js} +1 -1
- package/dist/cli/chunks/{chunk-5VZL4UVN.js → chunk-FQRS7WVA.js} +2 -2
- package/dist/cli/chunks/{chunk-SHKOCGNK.js → chunk-FT24SSDG.js} +2 -2
- package/dist/cli/chunks/chunk-FV4YNSAJ.js +5 -0
- package/dist/cli/chunks/{chunk-KXCLACFG.js → chunk-FVDM3X42.js} +2 -2
- package/dist/cli/chunks/{chunk-32BPDLRZ.js → chunk-FVH7TXWU.js} +2 -2
- package/dist/cli/chunks/{chunk-72XSEQMW.js → chunk-FWR5QY37.js} +2 -2
- package/dist/cli/chunks/chunk-FYINK2B7.js +6 -0
- package/dist/cli/chunks/{chunk-5JZRZI4S.js → chunk-GGISVPOZ.js} +2 -2
- package/dist/cli/chunks/{chunk-5LAVKGLH.js → chunk-GPIJIZJQ.js} +2 -2
- package/dist/cli/chunks/{chunk-5QO3R3TU.js → chunk-GXEVOT5F.js} +2 -2
- package/dist/cli/chunks/{chunk-IHRXZZQM.js → chunk-GZ4VB5RI.js} +1 -1
- package/dist/cli/chunks/chunk-HBDSCYSK.js +2 -0
- package/dist/cli/chunks/{chunk-GSKMOPL7.js → chunk-HGG4HR7C.js} +2 -2
- package/dist/cli/chunks/{chunk-AR67RJPY.js → chunk-HSCKWWO2.js} +2 -2
- package/dist/cli/chunks/{chunk-6XXZDV2C.js → chunk-HSQ3GUYJ.js} +2 -2
- package/dist/cli/chunks/{chunk-AAMLQ2LF.js → chunk-HZQBW5EM.js} +3 -3
- package/dist/cli/chunks/{chunk-O5W3FIO6.js → chunk-IGIYANVT.js} +2 -2
- package/dist/cli/chunks/{chunk-C6D5AHBO.js → chunk-IPWMSXBF.js} +2 -2
- package/dist/cli/chunks/{chunk-NDJ7P2EP.js → chunk-IWVNC7VY.js} +1 -1
- package/dist/cli/chunks/{chunk-FDDC72IA.js → chunk-IZODXKZD.js} +2 -2
- package/dist/cli/chunks/{chunk-NO3IV5Q5.js → chunk-J2MT2OJV.js} +1 -1
- package/dist/cli/chunks/{chunk-GQ6TUIKY.js → chunk-JKIJVVSP.js} +1 -1
- package/dist/cli/chunks/{chunk-LE4QJREF.js → chunk-JMRDT2XK.js} +1 -1
- package/dist/cli/chunks/{chunk-2YZ4G6NW.js → chunk-JR2UMTKG.js} +1 -1
- package/dist/cli/chunks/{chunk-RJIEG3NA.js → chunk-K6CH4CFF.js} +2 -2
- package/dist/cli/chunks/{chunk-5NNNEWLS.js → chunk-K7KW5QB5.js} +81 -88
- package/dist/cli/chunks/chunk-KFCQP434.js +2 -0
- package/dist/cli/chunks/{chunk-A5GBXCP5.js → chunk-KH4T6STG.js} +2 -2
- package/dist/cli/chunks/{chunk-VMDFFTCK.js → chunk-KJBYZO57.js} +1 -1
- package/dist/cli/chunks/{chunk-GJYHWYXR.js → chunk-KP4OKOKV.js} +2 -2
- package/dist/cli/chunks/chunk-L2MBKVSE.js +2 -0
- package/dist/cli/chunks/{chunk-XIQW7EFL.js → chunk-L3IPUIT3.js} +2 -2
- package/dist/cli/chunks/{chunk-W5HQUIML.js → chunk-L7PSU2YN.js} +2 -2
- package/dist/cli/chunks/{chunk-6DPYNAOK.js → chunk-LA3JPGQA.js} +2 -2
- package/dist/cli/chunks/{chunk-5PBLPQ5T.js → chunk-LC2QRN7V.js} +14 -13
- package/dist/cli/chunks/{chunk-SSYAQZXA.js → chunk-LHY7TMTM.js} +2 -2
- package/dist/cli/chunks/{chunk-QQWBWEJS.js → chunk-LLQ2UMF6.js} +3 -3
- package/dist/cli/chunks/{chunk-DTMAS2GB.js → chunk-LOJ7OO6W.js} +2 -2
- package/dist/cli/chunks/{chunk-32GN3JKR.js → chunk-LPUSH3VF.js} +1 -1
- package/dist/cli/chunks/{chunk-SDLWKRVL.js → chunk-LSEC2BU7.js} +2 -2
- package/dist/cli/chunks/{chunk-IOKYCMTJ.js → chunk-LTGB7OIU.js} +2 -2
- package/dist/cli/chunks/{chunk-6ZBXSOX6.js → chunk-LUG7YNVZ.js} +2 -2
- package/dist/cli/chunks/{chunk-CAKMOVZ6.js → chunk-LWAFRYKE.js} +2 -2
- package/dist/cli/chunks/{chunk-FLNAW7C4.js → chunk-M24ZAZ4U.js} +2 -2
- package/dist/cli/chunks/{chunk-L2DWPVNJ.js → chunk-MKRKRXTX.js} +1 -1
- package/dist/cli/chunks/{chunk-YTHTQPWR.js → chunk-MNNLONAD.js} +1 -1
- package/dist/cli/chunks/{chunk-V5NHZV7S.js → chunk-MQM37KAR.js} +2 -2
- package/dist/cli/chunks/{chunk-PPUZWYUG.js → chunk-MSX2OHYT.js} +2 -2
- package/dist/cli/chunks/{chunk-YRAX7SFJ.js → chunk-MVYQRVLP.js} +2 -2
- package/dist/cli/chunks/{chunk-QVDCVD5D.js → chunk-MZC5WM2P.js} +2 -2
- package/dist/cli/chunks/{chunk-S75SOOZL.js → chunk-MZRBNBB3.js} +2 -2
- package/dist/cli/chunks/{chunk-FL64OUBA.js → chunk-N3KQU4UC.js} +2 -2
- package/dist/cli/chunks/{chunk-G5RHFBAY.js → chunk-NKU3FFM4.js} +2 -2
- package/dist/cli/chunks/chunk-O5EWFR76.js +2 -0
- package/dist/cli/chunks/{chunk-63ZKI4PX.js → chunk-O5RDHD5T.js} +2 -2
- package/dist/cli/chunks/chunk-O6UWIXME.js +3 -0
- package/dist/cli/chunks/{chunk-HCH4Y6XX.js → chunk-OA4EQDC4.js} +2 -2
- package/dist/cli/chunks/{chunk-QPEOLAAS.js → chunk-OBCXCRXK.js} +1 -1
- package/dist/cli/chunks/{chunk-6ICX3FEG.js → chunk-OHU5P25N.js} +22 -22
- package/dist/cli/chunks/{chunk-GFWHUQSF.js → chunk-OOSV2RIA.js} +2 -2
- package/dist/cli/chunks/{chunk-MO55CVMT.js → chunk-OW23N2Y5.js} +14 -14
- package/dist/cli/chunks/{chunk-M7WJCTG3.js → chunk-OXOO3YDL.js} +2 -2
- package/dist/cli/chunks/{chunk-KQYJ4VQ5.js → chunk-OYGKSSSI.js} +1 -1
- package/dist/cli/chunks/chunk-PGO46IIW.js +2 -0
- package/dist/cli/chunks/{chunk-NVEWF4JV.js → chunk-PZOYQHWS.js} +1 -1
- package/dist/cli/chunks/{chunk-IESR7TNB.js → chunk-Q2BZSG7Z.js} +2 -2
- package/dist/cli/chunks/{chunk-XIIQ5QTT.js → chunk-Q7V722K5.js} +2 -2
- package/dist/cli/chunks/{chunk-F742SZAX.js → chunk-QZU6M5IO.js} +2 -2
- package/dist/cli/chunks/{chunk-PINSJCM3.js → chunk-R55Y76SJ.js} +1 -1
- package/dist/cli/chunks/{chunk-5B5QPCNU.js → chunk-RMEQYJPU.js} +4 -4
- package/dist/cli/chunks/{chunk-ZQ2XW3IP.js → chunk-RTYXFXTI.js} +2 -2
- package/dist/cli/chunks/{chunk-DVYHMDFR.js → chunk-SJF3O4FX.js} +374 -371
- package/dist/cli/chunks/{chunk-AG2EWGXS.js → chunk-SOUS7Z2H.js} +2 -2
- package/dist/cli/chunks/{chunk-3HD7E6HN.js → chunk-SRVNR3R3.js} +2 -2
- package/dist/cli/chunks/{chunk-KITOPKRG.js → chunk-SU3SXMVG.js} +2 -2
- package/dist/cli/chunks/chunk-SWGPLXWW.js +32 -0
- package/dist/cli/chunks/{chunk-ZR2TKVXQ.js → chunk-TRB3EVH3.js} +2 -2
- package/dist/cli/chunks/{chunk-OCV2XEWQ.js → chunk-TVBDUMKT.js} +2 -2
- package/dist/cli/chunks/{chunk-IOQ6ZQ5W.js → chunk-TWTXPSFU.js} +1 -1
- package/dist/cli/chunks/{chunk-CJSHWQXP.js → chunk-ULYUVUL2.js} +2 -2
- package/dist/cli/chunks/{chunk-PHT5N7SC.js → chunk-UNTBVJ5X.js} +2 -2
- package/dist/cli/chunks/{chunk-LKTTUHLF.js → chunk-UQAA4PHU.js} +2 -2
- package/dist/cli/chunks/{chunk-SR52XP5F.js → chunk-UWSJVKTE.js} +1 -1
- package/dist/cli/chunks/{chunk-L6QSTQME.js → chunk-V2LJ54KP.js} +2 -2
- package/dist/cli/chunks/{chunk-FBDVGRSC.js → chunk-VCCTTKP3.js} +7 -7
- package/dist/cli/chunks/{chunk-YLMNVLDK.js → chunk-VEGUYUVS.js} +1 -1
- package/dist/cli/chunks/{chunk-ASEOFRIG.js → chunk-VUQPVWNK.js} +2 -2
- package/dist/cli/chunks/{chunk-VXFLJNCA.js → chunk-VVGUE2T2.js} +2 -2
- package/dist/cli/chunks/{chunk-4NFQLP6R.js → chunk-W5ASDHJQ.js} +1 -1
- package/dist/cli/chunks/{chunk-I7MQIM2U.js → chunk-WGXT5NWQ.js} +1 -1
- package/dist/cli/chunks/chunk-WJN3V7QB.js +7 -0
- package/dist/cli/chunks/chunk-WPCRQIIF.js +29 -0
- package/dist/cli/chunks/{chunk-SASBO5Y5.js → chunk-WQNLXUWA.js} +6 -6
- package/dist/cli/chunks/{chunk-5SPCGMBB.js → chunk-WZVRMKG2.js} +2 -2
- package/dist/cli/chunks/{chunk-MI5MFHRA.js → chunk-X27IUWTD.js} +2 -2
- package/dist/cli/chunks/{chunk-HJ6ZGVTB.js → chunk-X4B345B6.js} +2 -2
- package/dist/cli/chunks/{chunk-HVRRLYX6.js → chunk-X5I2Y4VO.js} +2 -2
- package/dist/cli/chunks/{chunk-SUDMM5SO.js → chunk-X7IQIFTS.js} +2 -2
- package/dist/cli/chunks/chunk-XJN3RKUD.js +3 -0
- package/dist/cli/chunks/{chunk-E3D4GPLP.js → chunk-XQMGXTHJ.js} +3 -3
- package/dist/cli/chunks/{chunk-67Z5R7RJ.js → chunk-XTSAMB2Q.js} +2 -2
- package/dist/cli/chunks/{chunk-KVF4NXGQ.js → chunk-XZLIF4O2.js} +2 -2
- package/dist/cli/chunks/{chunk-EA4YQVKS.js → chunk-Y4LSEOZ3.js} +1 -1
- package/dist/cli/chunks/{chunk-OAEE6JWQ.js → chunk-Y4YN2RXR.js} +2 -2
- package/dist/cli/chunks/{chunk-CEYSYSK5.js → chunk-YDI56L35.js} +2 -2
- package/dist/cli/chunks/{chunk-JDIYMZCQ.js → chunk-YFILS5D5.js} +2 -2
- package/dist/cli/chunks/{chunk-GAHNO6JJ.js → chunk-YISDX6WB.js} +2 -2
- package/dist/cli/chunks/{chunk-AGRV5B3T.js → chunk-YP2GHQSV.js} +2 -2
- package/dist/cli/chunks/{chunk-UNGBRZDK.js → chunk-YSX756AM.js} +4 -4
- package/dist/cli/chunks/{chunk-BEKDKVQT.js → chunk-YWANOASW.js} +2 -2
- package/dist/cli/chunks/{chunk-JQ3DYUMS.js → chunk-YYIJLG7S.js} +2 -2
- package/dist/cli/chunks/{chunk-CRPIYUTJ.js → chunk-Z7SD7LXM.js} +2 -2
- package/dist/cli/chunks/{chunk-U2A7NHZA.js → chunk-ZDWD73UF.js} +2 -2
- package/dist/cli/chunks/{chunk-WP4RETKG.js → chunk-ZFT3RLA4.js} +2 -2
- package/dist/cli/chunks/{chunk-VJCIEHEF.js → chunk-ZNTHX5G3.js} +1 -1
- package/dist/cli/chunks/{chunk-PF7RBAYL.js → chunk-ZS27R7VL.js} +2 -2
- package/dist/cli/chunks/{chunk-24OX5TQJ.js → chunk-ZXHHHR7K.js} +1 -1
- package/dist/cli/chunks/{ci-MFUR4CWV.js → ci-N5MOMNXH.js} +2 -2
- package/dist/cli/chunks/{ci-config-PNDLQ6XV.js → ci-config-6L2ROQCW.js} +2 -2
- package/dist/cli/chunks/{ci-output-PFZ4M7NC.js → ci-output-DSRBYEIK.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5HH6NLZN.js → circuit-breaker-VRPTNBL7.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-QCKYLGLC.js → claude-flow-setup-4YFG3FU5.js} +2 -2
- package/dist/cli/chunks/client-I3L6BKRQ.js +2 -0
- package/dist/cli/chunks/{cline-installer-EASVPFXR.js → cline-installer-7RGYJWGN.js} +2 -2
- package/dist/cli/chunks/{code-UJXDVYRK.js → code-ISC6NW2K.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-BZJ3UDP4.js → code-index-extractor-2FID75YV.js} +2 -2
- package/dist/cli/chunks/{codex-installer-XSQZUVOZ.js → codex-installer-DZ7OG6KM.js} +2 -2
- package/dist/cli/chunks/{completions-OWOOJFI2.js → completions-SM3LICWK.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-KP5TOHDT.js → complexity-analyzer-ZWD2CTAD.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-IFKQXLHM.js → continuedev-installer-AGASOA26.js} +2 -2
- package/dist/cli/chunks/copilot-installer-CLPZYTQC.js +3 -0
- package/dist/cli/chunks/core-handlers-5EFOJ37H.js +2 -0
- package/dist/cli/chunks/{cost-tracker-MMDDNKZB.js → cost-tracker-7PIGQYDV.js} +2 -2
- package/dist/cli/chunks/{coverage-LUH2B7NT.js → coverage-T2GEBTYS.js} +9 -9
- package/dist/cli/chunks/cross-domain-router-65WJAKVD.js +2 -0
- package/dist/cli/chunks/{cursor-installer-4YLM5GWM.js → cursor-installer-KXBID4MB.js} +2 -2
- package/dist/cli/chunks/daemon-43MXIVH3.js +18 -0
- package/dist/cli/chunks/{daemon-MZKVM4CJ.js → daemon-VAMJLQJ5.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-X4CYW665.js → dag-attention-scheduler-UBP4VHTA.js} +2 -2
- package/dist/cli/chunks/{detect-7BM2XINO.js → detect-QWFIQRKI.js} +2 -2
- package/dist/cli/chunks/{dist-node-Y5APLEYB.js → dist-node-I2GICS3W.js} +2 -2
- package/dist/cli/chunks/{domain-handler-X3ZRJNAH.js → domain-handler-Z66ISB2A.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-2UW5KQJB.js → domain-plugins-KHMD3FKT.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-35W4CIBV.js → domain-transfer-JWGNNA6K.js} +2 -2
- package/dist/cli/chunks/dream-VQ2PZCVR.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-F5P5B6JX.js +3 -0
- package/dist/cli/chunks/{embedding-space-SBM2MZD2.js → embedding-space-KHG6TITM.js} +2 -2
- package/dist/cli/chunks/{eval-4QA2SROK.js → eval-43OHU7EI.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-Z6BF6KYM.js → experience-capture-middleware-KXD47H6P.js} +3 -3
- package/dist/cli/chunks/{fast-paths-FIORX6GN.js → fast-paths-6D75D5KD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-6LYI2T4G.js → feature-flags-IE35Y55N.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZOO7LMIC.js → feature-flags-OYYHY7LS.js} +2 -2
- package/dist/cli/chunks/file-discovery-LGBTY3ID.js +2 -0
- package/dist/cli/chunks/{fleet-7WF53H4F.js → fleet-AGVJMFGD.js} +16 -16
- package/dist/cli/chunks/{gnn-wrapper-KJ6B7BRM.js → gnn-wrapper-5L66A7LW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-DEKKMOVW.js → heartbeat-handler-2BY6YYOT.js} +5 -5
- package/dist/cli/chunks/heartbeat-scheduler-3DU3M5AT.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-N2IMSRPV.js +2 -0
- package/dist/cli/chunks/hnsw-index-DVU7TTJE.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-L27WS27N.js → hnsw-legacy-bridge-RYMWFNAH.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-4YOQC6L4.js → hnswlib-node-GG47HP2P.js} +2 -2
- package/dist/cli/chunks/{hooks-TAOKV4EJ.js → hooks-FQNACS24.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-AS2PNHOD.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-BODRJLHL.js → hypergraph-engine-6BYNJQEP.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-RKMYJNTU.js → hypergraph-handler-CYTAXZKJ.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-Y4OONLFP.js +2 -0
- package/dist/cli/chunks/{init-guard-MXHSLSB2.js → init-guard-METTAV5O.js} +2 -2
- package/dist/cli/chunks/{init-handler-HUE57IFW.js → init-handler-GFT74U5Y.js} +6 -6
- package/dist/cli/chunks/init-wizard-HLNUBJQN.js +2 -0
- package/dist/cli/chunks/kernel-XKFWCL7Y.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-S333IKYQ.js → kilocode-installer-GZV2D3FF.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-WM5DLQWC.js → kiro-installer-Q4ZXUFC7.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-CNL77CSZ.js +2 -0
- package/dist/cli/chunks/{learning-LNHMQLH5.js → learning-WA2QEYL7.js} +35 -34
- package/dist/cli/chunks/{llm-router-EWFXYZZR.js → llm-router-GRTCHWH7.js} +4 -4
- package/dist/cli/chunks/llm-router-service-UIYTYKP6.js +2 -0
- package/dist/cli/chunks/{load-FGYGWVDK.js → load-WXN3Q7Y5.js} +2 -2
- package/dist/cli/chunks/load-test-PXLW4A5B.js +2 -0
- package/dist/cli/chunks/{mcp-2FHNAAOM.js → mcp-LIQCPSJN.js} +2 -2
- package/dist/cli/chunks/{memory-DZMQ73AB.js → memory-OP6CHRFH.js} +5 -5
- package/dist/cli/chunks/memory-backend-XYOSO73Q.js +2 -0
- package/dist/cli/chunks/memory-handlers-PQFYVNVG.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-6F2UAEUW.js → multi-model-executor-H54DEVRZ.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-XY3BGOTZ.js → opencode-installer-BSQV6UAT.js} +2 -2
- package/dist/cli/chunks/{orchestrator-B4CNKUOS.js → orchestrator-TJDPQ4VL.js} +122 -35
- package/dist/cli/chunks/pattern-null-store-BKGTQFNF.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-R4GUFNMD.js → pattern-usage-recorder-FOVS4M5L.js} +2 -2
- package/dist/cli/chunks/{pipeline-FG5RKVRO.js → pipeline-4AY2ZIC6.js} +2 -2
- package/dist/cli/chunks/{platform-3BT4KEVJ.js → platform-FCSITYMR.js} +2 -2
- package/dist/cli/chunks/{plugin-WI4RIN7O.js → plugin-E56TV5S2.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-7ECDNQFS.js → prime-radiant-advanced-wasm-ACOPC533.js} +2 -2
- package/dist/cli/chunks/project-root-MPX7CN2C.js +2 -0
- package/dist/cli/chunks/protocol-executor-CRQOCC4A.js +2 -0
- package/dist/cli/chunks/{protocol-handler-WNODKPGW.js → protocol-handler-KRVXF4LS.js} +2 -2
- package/dist/cli/chunks/{prove-5RHAEPYZ.js → prove-KMFPSKGD.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-UEGQ3O7F.js +2 -0
- package/dist/cli/chunks/{quality-WPHR7BGQ.js → quality-6DBI3HLB.js} +2 -2
- package/dist/cli/chunks/{quality-gate-4RKTEZMX.js → quality-gate-3ROZMEIL.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-32574XSG.js +2 -0
- package/dist/cli/chunks/real-embeddings-MIGZNKK3.js +2 -0
- package/dist/cli/chunks/{ref-validation-TPAWHOHH.js → ref-validation-EYIP7DHW.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-7AVHFNDI.js → roocode-installer-IGGZHR2Y.js} +2 -2
- package/dist/cli/chunks/router-CZJY5WX6.js +2 -0
- package/dist/cli/chunks/routing-feedback-RC3UBNFX.js +2 -0
- package/dist/cli/chunks/{routing-handler-YKEDVJSH.js → routing-handler-BWNHBYDC.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-JUAMM354.js → ruvector-commands-PXIHF432.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-OG7OV2AK.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-THYMW7ZO.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-3H6CLFU7.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-6JQJIKKW.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-VJDUIRTX.js → rvf-store-integrity-CVB3NMSL.js} +2 -2
- package/dist/cli/chunks/safe-db-QFKCVTIJ.js +2 -0
- package/dist/cli/chunks/schedule-6JLVMMYB.js +2 -0
- package/dist/cli/chunks/scheduler-3MPZRMJD.js +2 -0
- package/dist/cli/chunks/{security-ORDN3RD2.js → security-DCRGOTWU.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-CF4BCIO7.js → shared-rvf-adapter-GKD74QUB.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-C32UBR6D.js → shared-rvf-dual-writer-HVAAVEOH.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-LGTIKAEX.js +2 -0
- package/dist/cli/chunks/{standalone-memory-OXRJYZXN.js → standalone-memory-O7O2U5N4.js} +2 -2
- package/dist/cli/chunks/{status-handler-BCX5D4HY.js → status-handler-BQTPJJTL.js} +2 -2
- package/dist/cli/chunks/{structural-health-LFG7RUU6.js → structural-health-4H6J4OHK.js} +2 -2
- package/dist/cli/chunks/sync-DJ4TF6QX.js +2 -0
- package/dist/cli/chunks/{sync-YJEE2K2L.js → sync-WW5TAVYW.js} +2 -2
- package/dist/cli/chunks/{task-handler-6LXKPTXJ.js → task-handler-HEM4IEOW.js} +2 -2
- package/dist/cli/chunks/{task-handlers-CILP36I7.js → task-handlers-JRA3NXIR.js} +3 -3
- package/dist/cli/chunks/test-772ZXVG2.js +34 -0
- package/dist/cli/chunks/test-runner-process-XGF2U3NG.js +2 -0
- package/dist/cli/chunks/{test-scheduling-ISI2O4Q5.js → test-scheduling-4TRB7LZ7.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-CICBIJ7T.js +2 -0
- package/dist/cli/chunks/{token-usage-XOC5KG7S.js → token-usage-B7PEKE2G.js} +2 -2
- package/dist/cli/chunks/{transformers-LSLQAARK.js → transformers-V7X7BDZX.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-OXPFKFZS.js +2 -0
- package/dist/cli/chunks/{types-5BLCGLCR.js → types-AHHTUY3I.js} +2 -2
- package/dist/cli/chunks/unified-memory-GUR3IUI6.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-NJP2F2RY.js +2 -0
- package/dist/cli/chunks/unified-persistence-NILBWXDP.js +2 -0
- package/dist/cli/chunks/{upgrade-RQJYLK3J.js → upgrade-DZ4DLUQ5.js} +2 -2
- package/dist/cli/chunks/{validate-QBHWXXCK.js → validate-4DTLIDJE.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-IKXBKFB5.js → validate-swarm-A26UFVIS.js} +2 -2
- package/dist/cli/chunks/visual-security-YECYZ27X.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-ZF6FIE5R.js → web-tree-sitter-F2C7QRYT.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-HQGDZT5D.js → windsurf-installer-OOBTDA6W.js} +2 -2
- package/dist/cli/chunks/{witness-chain-DCHCAMSQ.js → witness-chain-KGFZJP32.js} +2 -2
- package/dist/cli/chunks/witness-chain-LYBXFLJB.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-CNTXOGPN.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-PX2OQ6XT.js → witness-chain-verifier-OB7ZZOI3.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-RXYQNFJB.js → witness-key-manager-YCKGKGQI.js} +2 -2
- package/dist/cli/chunks/{workflow-FBKCA4H6.js → workflow-PRERHWKY.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UIBGWCU3.js +2 -0
- package/dist/cli/chunks/wrappers-L4UY4V63.js +2 -0
- package/dist/cli/commands/coverage.js +4 -1
- package/dist/cli/commands/learning-prune.js +9 -1
- package/dist/cli/commands/test.js +26 -4
- package/dist/cli/handlers/brain-handler.js +32 -2
- package/dist/cli/handlers/heartbeat-handler.js +3 -1
- package/dist/cli/utils/coverage-data.js +5 -1
- package/dist/cli/utils/coverage-verdict.d.ts +10 -2
- package/dist/cli/utils/coverage-verdict.js +23 -8
- package/dist/cli/utils/fleet-operation.js +9 -3
- package/dist/coordination/handlers/code-intelligence-handlers.js +17 -3
- package/dist/coordination/handlers/coverage-handlers.js +22 -9
- package/dist/coordination/handlers/coverage-target.d.ts +22 -2
- package/dist/coordination/handlers/coverage-target.js +45 -9
- package/dist/coordination/handlers/handler-utils.d.ts +19 -0
- package/dist/coordination/handlers/handler-utils.js +22 -8
- package/dist/coordination/handlers/test-execution-handlers.js +64 -20
- package/dist/coordination/protocols/code-intelligence-index.js +6 -3
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +6 -3
- package/dist/coordination/protocols/learning-consolidation-archive.js +4 -3
- package/dist/coordination/workflow-builtin.js +1 -0
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +8 -3
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +39 -25
- package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
- package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
- package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
- package/dist/domains/defect-intelligence/prediction-history.d.ts +15 -1
- package/dist/domains/defect-intelligence/prediction-history.js +63 -7
- package/dist/domains/defect-intelligence/services/defect-predictor.d.ts +1 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +33 -13
- package/dist/domains/learning-optimization/coordinator.js +17 -10
- package/dist/domains/learning-optimization/domain-ranking.d.ts +26 -0
- package/dist/domains/learning-optimization/domain-ranking.js +28 -0
- package/dist/domains/learning-optimization/interfaces.d.ts +5 -0
- package/dist/domains/learning-optimization/pattern-archive.d.ts +55 -8
- package/dist/domains/learning-optimization/pattern-archive.js +90 -17
- package/dist/domains/learning-optimization/pattern-consolidation.js +18 -2
- package/dist/domains/learning-optimization/pattern-merge.d.ts +26 -0
- package/dist/domains/learning-optimization/pattern-merge.js +127 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.js +21 -35
- package/dist/domains/test-execution/coordinator.d.ts +3 -1
- package/dist/domains/test-execution/coordinator.js +13 -4
- package/dist/domains/test-execution/interfaces.d.ts +5 -0
- package/dist/domains/test-execution/plugin.js +2 -0
- package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
- package/dist/domains/test-execution/services/flaky-detector.js +26 -8
- package/dist/domains/test-execution/services/retry-handler.d.ts +7 -1
- package/dist/domains/test-execution/services/retry-handler.js +44 -5
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -1
- package/dist/domains/test-execution/services/test-executor.js +85 -17
- package/dist/init/copilot-installer.d.ts +6 -0
- package/dist/init/copilot-installer.js +37 -17
- package/dist/init/init-wizard-steps.js +3 -1
- package/dist/init/phases/07-hooks.js +97 -10
- package/dist/init/platform-config-generator.d.ts +10 -0
- package/dist/init/platform-config-generator.js +26 -1
- package/dist/integrations/embeddings/cache/EmbeddingCache.js +1 -1
- package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +16 -1
- package/dist/integrations/ruvector/brain-rvf-exporter.js +18 -32
- package/dist/integrations/ruvector/brain-rvf-richness.d.ts +75 -0
- package/dist/integrations/ruvector/brain-rvf-richness.js +127 -0
- package/dist/kernel/unified-memory-migration.js +1 -1
- package/dist/kernel/unified-memory.d.ts +8 -0
- package/dist/kernel/unified-memory.js +13 -0
- package/dist/learning/checkpoint-shrink-ack.d.ts +25 -0
- package/dist/learning/checkpoint-shrink-ack.js +57 -0
- package/dist/learning/dream/dream-engine.d.ts +44 -3
- package/dist/learning/dream/dream-engine.js +6 -2
- package/dist/learning/embedder-endpoint-client.d.ts +45 -0
- package/dist/learning/embedder-endpoint-client.js +98 -3
- package/dist/learning/embedder-identity-store.js +3 -1
- package/dist/learning/embedding-space-legacy-adoption.d.ts +53 -0
- package/dist/learning/embedding-space-legacy-adoption.js +115 -0
- package/dist/learning/embedding-space-registry.d.ts +90 -0
- package/dist/learning/embedding-space-registry.js +181 -0
- package/dist/learning/experience-capture.d.ts +3 -1
- package/dist/learning/experience-capture.js +15 -5
- package/dist/learning/experience-space-verification.d.ts +2 -0
- package/dist/learning/experience-space-verification.js +3 -2
- package/dist/learning/learning-retention.js +4 -0
- package/dist/learning/pattern-promotion.d.ts +7 -0
- package/dist/learning/pattern-promotion.js +64 -12
- package/dist/learning/real-embeddings.d.ts +3 -0
- package/dist/learning/real-embeddings.js +73 -11
- package/dist/learning/rvf-pattern-store.js +6 -1
- package/dist/mcp/bundle.js +558 -537
- package/dist/mcp/handlers/domain-handler-configs.d.ts +3 -0
- package/dist/mcp/handlers/domain-handler-configs.js +1 -0
- package/dist/mcp/handlers/heartbeat-handlers.d.ts +4 -2
- package/dist/mcp/protocol-server.js +1 -1
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +6 -1
- package/dist/mcp/tools/learning-optimization/optimize.js +20 -11
- package/dist/planning/goap-planner.js +4 -0
- package/dist/planning/plan-executor.js +6 -2
- package/dist/shared/embeddings/index.d.ts +2 -2
- package/dist/shared/embeddings/index.js +1 -1
- package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
- package/dist/shared/embeddings/nomic-embedder.js +19 -11
- package/dist/shared/embeddings/ollama-client.d.ts +28 -2
- package/dist/shared/embeddings/ollama-client.js +84 -22
- package/dist/shared/embeddings/types.d.ts +15 -0
- package/dist/shared/embeddings/types.js +4 -0
- package/dist/shared/git/git-analyzer.d.ts +30 -11
- package/dist/shared/git/git-analyzer.js +95 -48
- package/dist/shared/io/confined-read.d.ts +32 -7
- package/dist/shared/io/confined-read.js +58 -25
- package/dist/shared/io/file-reader.js +4 -1
- package/dist/shared/pytest-junit-report.d.ts +93 -0
- package/dist/shared/pytest-junit-report.js +241 -0
- package/dist/shared/safe-db.d.ts +1 -1
- package/dist/shared/safe-db.js +20 -5
- package/dist/shared/sqlite-journal-mode.d.ts +39 -0
- package/dist/shared/sqlite-journal-mode.js +53 -0
- package/dist/shared/test-runner-project.d.ts +51 -1
- package/dist/shared/test-runner-project.js +140 -25
- package/dist/sync/claude-flow-bridge.js +1 -1
- package/dist/sync/readers/sqlite-reader.js +3 -4
- package/dist/sync/writers/sqlite-writer.js +1 -1
- package/dist/workers/interfaces.d.ts +2 -2
- package/dist/workers/quality-daemon/git-watcher.d.ts +8 -0
- package/dist/workers/quality-daemon/git-watcher.js +54 -12
- package/dist/workers/quality-daemon/index.js +1 -1
- package/dist/workers/quality-daemon/priority-queue.d.ts +2 -1
- package/dist/workers/workers/defect-predictor.d.ts +9 -4
- package/dist/workers/workers/defect-predictor.js +98 -37
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-6CQ2PIP5.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +0 -2
- package/dist/cli/chunks/base-SMCMMVGP.js +0 -2
- package/dist/cli/chunks/brain-handler-HQWZFO52.js +0 -95
- package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +0 -2
- package/dist/cli/chunks/chunk-CGGUM2YJ.js +0 -3
- package/dist/cli/chunks/chunk-D6COXLYE.js +0 -8
- package/dist/cli/chunks/chunk-EGYE5UPQ.js +0 -2
- package/dist/cli/chunks/chunk-IUBJVHNB.js +0 -3
- package/dist/cli/chunks/chunk-KL7OKSU2.js +0 -4
- package/dist/cli/chunks/chunk-KPRCB5LT.js +0 -7
- package/dist/cli/chunks/chunk-LRSX2FJM.js +0 -2
- package/dist/cli/chunks/chunk-M4FRQ4TE.js +0 -12
- package/dist/cli/chunks/chunk-MAFQV4U4.js +0 -16
- package/dist/cli/chunks/chunk-NZU4ACBZ.js +0 -2
- package/dist/cli/chunks/chunk-RV74I3YO.js +0 -3
- package/dist/cli/chunks/chunk-SJ6Y4725.js +0 -5
- package/dist/cli/chunks/chunk-UE5ZOZR2.js +0 -2
- package/dist/cli/chunks/chunk-VSIKHWZ4.js +0 -29
- package/dist/cli/chunks/chunk-YAPLJR7K.js +0 -2
- package/dist/cli/chunks/client-MHQRTZM4.js +0 -2
- package/dist/cli/chunks/copilot-installer-IGJ6KGQY.js +0 -3
- package/dist/cli/chunks/core-handlers-UAK3LLJE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +0 -2
- package/dist/cli/chunks/daemon-CAVZ7OFV.js +0 -18
- package/dist/cli/chunks/dream-EJY24JN6.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +0 -3
- package/dist/cli/chunks/file-discovery-UZSFSS4V.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +0 -2
- package/dist/cli/chunks/hnsw-index-POCPMVJH.js +0 -2
- package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +0 -2
- package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +0 -2
- package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +0 -2
- package/dist/cli/chunks/kernel-CCDWT7KS.js +0 -2
- package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +0 -2
- package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +0 -2
- package/dist/cli/chunks/load-test-UNZUWY3F.js +0 -2
- package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +0 -2
- package/dist/cli/chunks/memory-handlers-MP426XRJ.js +0 -2
- package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +0 -2
- package/dist/cli/chunks/project-root-BEANNYWU.js +0 -2
- package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +0 -2
- package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +0 -2
- package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +0 -2
- package/dist/cli/chunks/router-EP34O3KB.js +0 -2
- package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +0 -2
- package/dist/cli/chunks/safe-db-TCAU4FUT.js +0 -2
- package/dist/cli/chunks/schedule-NB5KV435.js +0 -2
- package/dist/cli/chunks/scheduler-JKXGKVK6.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +0 -2
- package/dist/cli/chunks/sync-OSF7C2NL.js +0 -2
- package/dist/cli/chunks/test-SD457QJ6.js +0 -34
- package/dist/cli/chunks/test-runner-process-VKD65QQU.js +0 -2
- package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +0 -2
- package/dist/cli/chunks/unified-memory-GI76TXFV.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +0 -2
- package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +0 -2
- package/dist/cli/chunks/visual-security-GZ2MOKWB.js +0 -2
- package/dist/cli/chunks/witness-chain-P3XXXA62.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +0 -2
- package/dist/cli/chunks/wrappers-TWSKBTWD.js +0 -2
|
@@ -195,6 +195,9 @@ export interface DefectPredictResult {
|
|
|
195
195
|
scanStatus?: 'partial' | 'complete';
|
|
196
196
|
predictionMethod?: 'static-code-indicators';
|
|
197
197
|
estimated?: boolean;
|
|
198
|
+
/** #1137: the run was stored, but pruning older runs failed. */
|
|
199
|
+
retention?: 'failed';
|
|
200
|
+
retentionError?: string;
|
|
198
201
|
taskId: string;
|
|
199
202
|
status: string;
|
|
200
203
|
predictedDefects: Array<{
|
|
@@ -770,6 +770,7 @@ export const defectPredictConfig = {
|
|
|
770
770
|
filesAnalyzed: data.filesAnalyzed, filesSkipped: data.filesSkipped,
|
|
771
771
|
scanStatus: data.scanStatus,
|
|
772
772
|
} : {}),
|
|
773
|
+
...(data.retention === 'failed' ? { retention: 'failed', retentionError: String(data.retentionError ?? '') } : {}),
|
|
773
774
|
predictedDefects: data.predictedDefects || [],
|
|
774
775
|
riskScore: data.riskScore || 0,
|
|
775
776
|
recommendations: data.recommendations || [],
|
|
@@ -20,7 +20,8 @@ export interface HeartbeatStatusResult {
|
|
|
20
20
|
lastResult: {
|
|
21
21
|
success: boolean;
|
|
22
22
|
durationMs: number;
|
|
23
|
-
|
|
23
|
+
/** `null` when the run measured nothing (#1137). */
|
|
24
|
+
healthScore: number | null;
|
|
24
25
|
trend: string;
|
|
25
26
|
domainMetrics: Record<string, number | string>;
|
|
26
27
|
} | null;
|
|
@@ -32,7 +33,8 @@ export interface HeartbeatTriggerParams {
|
|
|
32
33
|
export interface HeartbeatTriggerResult {
|
|
33
34
|
success: boolean;
|
|
34
35
|
durationMs: number;
|
|
35
|
-
|
|
36
|
+
/** `null` when the run measured nothing (#1137). */
|
|
37
|
+
healthScore: number | null;
|
|
36
38
|
trend: string;
|
|
37
39
|
promoted: number;
|
|
38
40
|
deprecated: number;
|
|
@@ -897,7 +897,7 @@ export class MCPProtocolServer {
|
|
|
897
897
|
parameters: [
|
|
898
898
|
{ name: 'testFiles', type: 'array', description: 'Nonempty list of concrete test file paths (relative to the project working directory or absolute). Expand glob patterns before calling; glob patterns are rejected.', items: { type: 'string' } },
|
|
899
899
|
{ name: 'parallel', type: 'boolean', description: 'Enable parallel execution', default: true },
|
|
900
|
-
{ name: 'projectRoot', type: 'string', description: 'Optional directory inside the project to run every test file from (for example a monorepo package with its own vitest/jest config); relative testFiles are then relative to it. When omitted, each test file runs from its nearest directory with a vitest/jest config, never above the project root. Paths outside the project, including through symlinks, are rejected.' },
|
|
900
|
+
{ name: 'projectRoot', type: 'string', description: 'Optional directory inside the project to run every test file from (for example a monorepo package with its own vitest/jest config); relative testFiles are then relative to it. When omitted, each test file runs from its nearest directory with a vitest/jest config, never above the project root, even when a root config also lists that package in its projects. Either way the runner (jest or vitest) is the one the config of that directory sets up. Python test files (*.py) run with pytest (`python -m pytest`, or the interpreter in AQE_PYTHON) from their nearest pytest config (pytest.ini, pyproject.toml, setup.cfg, tox.ini). Paths outside the project, including through symlinks, are rejected.' },
|
|
901
901
|
saveResultsParameter('test_execute_parallel'),
|
|
902
902
|
],
|
|
903
903
|
},
|
|
@@ -48,6 +48,8 @@ export interface LearnResult {
|
|
|
48
48
|
experienceIdsNotFound?: number;
|
|
49
49
|
evidenceStatus?: 'insufficient-evidence';
|
|
50
50
|
patternsLearned: number;
|
|
51
|
+
/** #1147: why nothing was learned from the requested experiences. */
|
|
52
|
+
noPatternReason?: string;
|
|
51
53
|
newPatterns: LearnedPattern[];
|
|
52
54
|
/** No baseline is recorded to compare against, so improvement is not measured (#1109). */
|
|
53
55
|
improvement: number | null;
|
|
@@ -128,7 +130,10 @@ export interface DashboardResult {
|
|
|
128
130
|
assignedPatternsExcluded?: number;
|
|
129
131
|
/** #1121: untagged patterns mined before #1120 (rate selected over successes), excluded likewise. */
|
|
130
132
|
legacyPatternsExcluded?: number;
|
|
131
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* Ranked by measured success rate (#1147): domains with no measured outcome,
|
|
135
|
+
* or with 0% measured success, are left out.
|
|
136
|
+
*/
|
|
132
137
|
topPerformingDomains: DomainName[];
|
|
133
138
|
evidenceStatus?: 'insufficient-evidence';
|
|
134
139
|
unmeasured?: string[];
|
|
@@ -15,6 +15,7 @@ import { MetricsOptimizerService } from '../../../domains/learning-optimization/
|
|
|
15
15
|
import { TransferSpecialistService } from '../../../domains/learning-optimization/services/transfer-specialist.js';
|
|
16
16
|
import { toErrorMessage } from '../../../shared/error-utils.js';
|
|
17
17
|
import { partitionByRewardSource } from '../../../domains/learning-optimization/reward-source.js';
|
|
18
|
+
import { rankTopPerformingDomains } from '../../../domains/learning-optimization/domain-ranking.js';
|
|
18
19
|
// ============================================================================
|
|
19
20
|
// Tool Implementation
|
|
20
21
|
// ============================================================================
|
|
@@ -174,8 +175,21 @@ export class LearningOptimizeTool extends MCPToolBase {
|
|
|
174
175
|
if (!readResult.success)
|
|
175
176
|
throw readResult.error;
|
|
176
177
|
const read = readResult.value;
|
|
178
|
+
const requested = new Set(experienceIds).size;
|
|
177
179
|
const { measured, assignedExcluded } = partitionByRewardSource(read);
|
|
178
180
|
const learned = measured.length > 0 ? await learningCoordinator.learnPattern(read) : null;
|
|
181
|
+
// #1147: say why nothing was learned instead of returning a bare 0.
|
|
182
|
+
let noPatternReason;
|
|
183
|
+
if (read.length === 0) {
|
|
184
|
+
noPatternReason = `None of the ${requested} requested experience ID(s) were found.`;
|
|
185
|
+
}
|
|
186
|
+
else if (measured.length === 0) {
|
|
187
|
+
noPatternReason = `None of the ${read.length} experience(s) read has a measured outcome` +
|
|
188
|
+
(assignedExcluded > 0 ? ` (${assignedExcluded} with an assigned reward excluded).` : '.');
|
|
189
|
+
}
|
|
190
|
+
else if (learned && !learned.success) {
|
|
191
|
+
noPatternReason = learned.error.message;
|
|
192
|
+
}
|
|
179
193
|
const newPatterns = learned?.success
|
|
180
194
|
? [{
|
|
181
195
|
id: learned.value.id,
|
|
@@ -190,11 +204,12 @@ export class LearningOptimizeTool extends MCPToolBase {
|
|
|
190
204
|
this.markAsRealData();
|
|
191
205
|
return {
|
|
192
206
|
experiencesProcessed: read.length,
|
|
193
|
-
experienceIdsNotFound:
|
|
207
|
+
experienceIdsNotFound: requested - read.length,
|
|
194
208
|
measuredExperiences: measured.length,
|
|
195
209
|
assignedRewardsExcluded: assignedExcluded,
|
|
196
210
|
...(measured.length === 0 ? { evidenceStatus: 'insufficient-evidence' } : {}),
|
|
197
211
|
patternsLearned: newPatterns.length,
|
|
212
|
+
...(noPatternReason ? { noPatternReason } : {}),
|
|
198
213
|
newPatterns,
|
|
199
214
|
improvement: null,
|
|
200
215
|
unmeasured: ['improvement'],
|
|
@@ -464,17 +479,11 @@ export class LearningOptimizeTool extends MCPToolBase {
|
|
|
464
479
|
experiencesLast24h += mineResult.value.experienceCount;
|
|
465
480
|
assignedRewardsExcluded += mineResult.value.assignedRewardsExcluded ?? 0;
|
|
466
481
|
// #1109: only a measured success rate can rank a domain.
|
|
467
|
-
|
|
468
|
-
if (successRate !== null) {
|
|
469
|
-
domainPerformance.push({ domain, successRate });
|
|
470
|
-
}
|
|
482
|
+
domainPerformance.push({ domain, successRate: mineResult.value.successRate });
|
|
471
483
|
}
|
|
472
484
|
}
|
|
473
|
-
//
|
|
474
|
-
|
|
475
|
-
const topPerformingDomains = domainPerformance
|
|
476
|
-
.slice(0, 3)
|
|
477
|
-
.map(d => d.domain);
|
|
485
|
+
// #1147: rank by measured success; a domain at 0% is not top-performing.
|
|
486
|
+
const { topPerformingDomains, measuredDomains } = rankTopPerformingDomains(domainPerformance);
|
|
478
487
|
// Calculate overall learning rate from pattern stats
|
|
479
488
|
// getPatternStats already leaves out patterns learned from assigned rewards.
|
|
480
489
|
const totalPatterns = statsResult.success ? statsResult.value.totalPatterns : 0;
|
|
@@ -528,7 +537,7 @@ export class LearningOptimizeTool extends MCPToolBase {
|
|
|
528
537
|
const unmeasured = [];
|
|
529
538
|
if (overallLearningRate === null)
|
|
530
539
|
unmeasured.push('overallLearningRate');
|
|
531
|
-
if (
|
|
540
|
+
if (measuredDomains === 0)
|
|
532
541
|
unmeasured.push('topPerformingDomains');
|
|
533
542
|
return {
|
|
534
543
|
overallLearningRate,
|
|
@@ -656,6 +656,10 @@ export class GOAPPlanner {
|
|
|
656
656
|
}
|
|
657
657
|
// #1157: goal and condition keys can come from callers; an inherited
|
|
658
658
|
// member such as `constructor` is not part of the world state.
|
|
659
|
+
// #1186: deliberately, a key resolves only through own properties of
|
|
660
|
+
// objects. An array's own `length` resolves (`items.length`), but a
|
|
661
|
+
// primitive has no world-state members, so `name.length` on a string
|
|
662
|
+
// is undefined and a condition on it is unmet.
|
|
659
663
|
if (typeof current !== 'object' || !Object.hasOwn(current, part)) {
|
|
660
664
|
return undefined;
|
|
661
665
|
}
|
|
@@ -123,8 +123,8 @@ export class PlanExecutor {
|
|
|
123
123
|
// This allows async unified storage initialization
|
|
124
124
|
if (!this.config.useUnified) {
|
|
125
125
|
// Legacy mode: create separate database immediately
|
|
126
|
-
|
|
127
|
-
this.db
|
|
126
|
+
// #1164: openDatabase() set the journal mode (retrying contention, honouring AQE_DISABLE_WAL).
|
|
127
|
+
this.db = openDatabase(dbPath ?? ':memory:');
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
// ==========================================================================
|
|
@@ -911,6 +911,10 @@ export class PlanExecutor {
|
|
|
911
911
|
}
|
|
912
912
|
// #1157: goal and condition keys can come from callers; an inherited
|
|
913
913
|
// member such as `constructor` is not part of the world state.
|
|
914
|
+
// #1186: deliberately, a key resolves only through own properties of
|
|
915
|
+
// objects. An array's own `length` resolves (`items.length`), but a
|
|
916
|
+
// primitive has no world-state members, so `name.length` on a string
|
|
917
|
+
// is undefined and a condition on it is unmet.
|
|
914
918
|
if (typeof current !== 'object' || !Object.hasOwn(current, part)) {
|
|
915
919
|
return undefined;
|
|
916
920
|
}
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
*/
|
|
29
29
|
export { NomicEmbedder, createNomicEmbedder } from './nomic-embedder';
|
|
30
30
|
export type { NomicEmbedderConfig } from './nomic-embedder';
|
|
31
|
-
export { OllamaClient } from './ollama-client';
|
|
31
|
+
export { OllamaClient, isConfiguredOllamaModel } from './ollama-client';
|
|
32
32
|
export { EmbeddingCache } from './embedding-cache';
|
|
33
|
-
export type { CodeChunk, EmbeddingResult, EmbeddingBatchResult, OllamaEmbeddingRequest, OllamaEmbeddingResponse, OllamaHealthResponse, CacheStats, EmbeddingCacheEntry, BatchProgress, ProgressCallback, IEmbeddingProvider, } from './types';
|
|
33
|
+
export type { CodeChunk, EmbeddingResult, EmbeddingBatchResult, OllamaEmbeddingRequest, OllamaEmbeddingResponse, OllamaHealthResponse, OllamaModelStatus, CacheStats, EmbeddingCacheEntry, BatchProgress, ProgressCallback, IEmbeddingProvider, } from './types';
|
|
34
34
|
export { EMBEDDING_CONFIG } from './types';
|
|
35
35
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
29
|
export { NomicEmbedder, createNomicEmbedder } from './nomic-embedder.js';
|
|
30
|
-
export { OllamaClient } from './ollama-client.js';
|
|
30
|
+
export { OllamaClient, isConfiguredOllamaModel } from './ollama-client.js';
|
|
31
31
|
export { EmbeddingCache } from './embedding-cache.js';
|
|
32
32
|
export { EMBEDDING_CONFIG } from './types.js';
|
|
33
33
|
//# sourceMappingURL=index.js.map
|
|
@@ -11,13 +11,15 @@
|
|
|
11
11
|
* - Error handling and retries
|
|
12
12
|
*/
|
|
13
13
|
import { EmbeddingCache } from './embedding-cache';
|
|
14
|
-
import { CodeChunk, EmbeddingBatchResult, ProgressCallback, CacheStats, IEmbeddingProvider } from './types';
|
|
14
|
+
import { CodeChunk, EmbeddingBatchResult, ProgressCallback, CacheStats, IEmbeddingProvider, OllamaModelStatus } from './types';
|
|
15
15
|
/**
|
|
16
16
|
* Configuration for NomicEmbedder
|
|
17
17
|
*/
|
|
18
18
|
export interface NomicEmbedderConfig {
|
|
19
19
|
/** Ollama base URL (default: http://localhost:11434) */
|
|
20
20
|
ollamaBaseUrl?: string;
|
|
21
|
+
/** #1229: installed Ollama model to use (default: AQE_OLLAMA_EMBEDDING_MODEL, else found by name) */
|
|
22
|
+
ollamaModel?: string;
|
|
21
23
|
/** Batch size for processing (default: 100) */
|
|
22
24
|
batchSize?: number;
|
|
23
25
|
/** Maximum cache size (default: 10000) */
|
|
@@ -100,6 +102,10 @@ export declare class NomicEmbedder implements IEmbeddingProvider {
|
|
|
100
102
|
* Verify Ollama connection and model availability
|
|
101
103
|
*/
|
|
102
104
|
healthCheck(): Promise<boolean>;
|
|
105
|
+
/** #1229: the installed Ollama model, or why there is none. */
|
|
106
|
+
checkModel(): Promise<OllamaModelStatus>;
|
|
107
|
+
/** Identifies the embedding space of this embedder's vectors (ADR-097). */
|
|
108
|
+
getModelId(): string;
|
|
103
109
|
/**
|
|
104
110
|
* Get Ollama server information
|
|
105
111
|
*/
|
|
@@ -112,7 +118,7 @@ export declare class NomicEmbedder implements IEmbeddingProvider {
|
|
|
112
118
|
* Get configuration info
|
|
113
119
|
*/
|
|
114
120
|
getConfig(): {
|
|
115
|
-
model:
|
|
121
|
+
model: string;
|
|
116
122
|
dimensions: 384;
|
|
117
123
|
contextWindow: 8192;
|
|
118
124
|
batchSize: number;
|
|
@@ -17,7 +17,7 @@ import { EMBEDDING_CONFIG, } from './types.js';
|
|
|
17
17
|
const PSEUDO_EMBEDDING_MODEL = 'pseudo-embedding';
|
|
18
18
|
// Unversioned real-model entries may predate fallback provenance separation.
|
|
19
19
|
const VERIFIED_MODEL_CACHE_NAMESPACE = 'verified-backend-v1';
|
|
20
|
-
const cacheNamespace = (model) => model ===
|
|
20
|
+
const cacheNamespace = (model) => model === PSEUDO_EMBEDDING_MODEL ? undefined : VERIFIED_MODEL_CACHE_NAMESPACE;
|
|
21
21
|
/**
|
|
22
22
|
* Nomic Embedder for generating code embeddings via Ollama
|
|
23
23
|
*/
|
|
@@ -45,7 +45,7 @@ export class NomicEmbedder {
|
|
|
45
45
|
* ```
|
|
46
46
|
*/
|
|
47
47
|
constructor(config = {}) {
|
|
48
|
-
this.client = new OllamaClient(config.ollamaBaseUrl);
|
|
48
|
+
this.client = new OllamaClient(config.ollamaBaseUrl, undefined, undefined, undefined, config.ollamaModel);
|
|
49
49
|
this.cache = config.cache ?? new EmbeddingCache(config.maxCacheSize);
|
|
50
50
|
this.batchSize = config.batchSize ?? EMBEDDING_CONFIG.BATCH_SIZE;
|
|
51
51
|
this.enableFallback = config.enableFallback ?? true;
|
|
@@ -56,9 +56,9 @@ export class NomicEmbedder {
|
|
|
56
56
|
async embed(text) {
|
|
57
57
|
// Prefer genuine cached vectors, then select the active backend before a
|
|
58
58
|
// single counted lookup so alternate namespaces do not inflate misses.
|
|
59
|
-
let model = this.cache.has(text,
|
|
59
|
+
let model = this.cache.has(text, this.getModelId(), VERIFIED_MODEL_CACHE_NAMESPACE) ||
|
|
60
60
|
await this.isOllamaAvailable() || !this.enableFallback
|
|
61
|
-
?
|
|
61
|
+
? this.getModelId() : PSEUDO_EMBEDDING_MODEL;
|
|
62
62
|
const cached = this.cache.get(text, model, cacheNamespace(model));
|
|
63
63
|
if (cached) {
|
|
64
64
|
return cached;
|
|
@@ -66,7 +66,7 @@ export class NomicEmbedder {
|
|
|
66
66
|
// Try Ollama first, fall back to pseudo-embedding if unavailable
|
|
67
67
|
let embedding;
|
|
68
68
|
if (await this.isOllamaAvailable()) {
|
|
69
|
-
model =
|
|
69
|
+
model = this.getModelId();
|
|
70
70
|
embedding = await this.client.generateEmbedding(text);
|
|
71
71
|
}
|
|
72
72
|
else if (this.enableFallback) {
|
|
@@ -75,7 +75,7 @@ export class NomicEmbedder {
|
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
77
|
throw new Error(`Ollama is not available and fallback is disabled. ` +
|
|
78
|
-
`Please run: ollama pull ${EMBEDDING_CONFIG.
|
|
78
|
+
`Please run: ollama pull ${EMBEDDING_CONFIG.OLLAMA_PULL_NAME}`);
|
|
79
79
|
}
|
|
80
80
|
// Cache result
|
|
81
81
|
this.cache.set(text, model, embedding, cacheNamespace(model));
|
|
@@ -137,7 +137,7 @@ export class NomicEmbedder {
|
|
|
137
137
|
}
|
|
138
138
|
else if (!this.enableFallback) {
|
|
139
139
|
throw new Error(`Ollama is not available and fallback is disabled. ` +
|
|
140
|
-
`Please run: ollama pull ${EMBEDDING_CONFIG.
|
|
140
|
+
`Please run: ollama pull ${EMBEDDING_CONFIG.OLLAMA_PULL_NAME}`);
|
|
141
141
|
}
|
|
142
142
|
// Process in batches
|
|
143
143
|
for (let i = 0; i < chunks.length; i += this.batchSize) {
|
|
@@ -191,8 +191,8 @@ export class NomicEmbedder {
|
|
|
191
191
|
const formattedText = this.formatForEmbedding(chunk);
|
|
192
192
|
const chunkStartTime = Date.now();
|
|
193
193
|
// Check cache
|
|
194
|
-
const cachedModel = useOllama || this.cache.has(formattedText,
|
|
195
|
-
?
|
|
194
|
+
const cachedModel = useOllama || this.cache.has(formattedText, this.getModelId(), VERIFIED_MODEL_CACHE_NAMESPACE)
|
|
195
|
+
? this.getModelId() : PSEUDO_EMBEDDING_MODEL;
|
|
196
196
|
const cachedEmbedding = this.cache.get(formattedText, cachedModel, cacheNamespace(cachedModel));
|
|
197
197
|
if (cachedEmbedding) {
|
|
198
198
|
return {
|
|
@@ -213,7 +213,7 @@ export class NomicEmbedder {
|
|
|
213
213
|
embedding = this.generatePseudoEmbedding(formattedText);
|
|
214
214
|
}
|
|
215
215
|
// Cache the result
|
|
216
|
-
const model = useOllama ?
|
|
216
|
+
const model = useOllama ? this.getModelId() : PSEUDO_EMBEDDING_MODEL;
|
|
217
217
|
this.cache.set(formattedText, model, embedding, cacheNamespace(model));
|
|
218
218
|
return {
|
|
219
219
|
chunkId: chunk.id,
|
|
@@ -300,6 +300,14 @@ export class NomicEmbedder {
|
|
|
300
300
|
async healthCheck() {
|
|
301
301
|
return await this.client.healthCheck();
|
|
302
302
|
}
|
|
303
|
+
/** #1229: the installed Ollama model, or why there is none. */
|
|
304
|
+
async checkModel() {
|
|
305
|
+
return await this.client.checkModel();
|
|
306
|
+
}
|
|
307
|
+
/** Identifies the embedding space of this embedder's vectors (ADR-097). */
|
|
308
|
+
getModelId() {
|
|
309
|
+
return this.client.getModelId();
|
|
310
|
+
}
|
|
303
311
|
/**
|
|
304
312
|
* Get Ollama server information
|
|
305
313
|
*/
|
|
@@ -317,7 +325,7 @@ export class NomicEmbedder {
|
|
|
317
325
|
*/
|
|
318
326
|
getConfig() {
|
|
319
327
|
return {
|
|
320
|
-
model:
|
|
328
|
+
model: this.getModelId(),
|
|
321
329
|
dimensions: EMBEDDING_CONFIG.DIMENSIONS,
|
|
322
330
|
contextWindow: EMBEDDING_CONFIG.CONTEXT_WINDOW,
|
|
323
331
|
batchSize: this.batchSize,
|
|
@@ -2,7 +2,16 @@
|
|
|
2
2
|
* Agentic QE v3 - Ollama API Client
|
|
3
3
|
* Client for Ollama embeddings API with retry logic
|
|
4
4
|
*/
|
|
5
|
-
import { OllamaHealthResponse } from './types';
|
|
5
|
+
import { OllamaHealthResponse, OllamaModelStatus } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* #1229: whether an installed Ollama model is EMBEDDING_CONFIG.MODEL. Accepts
|
|
8
|
+
* the exact name with any namespace and tag (`Xenova/all-MiniLM-L6-v2:latest`)
|
|
9
|
+
* and Ollama's library name `all-minilm` with an L6 tag (`all-minilm:22m`).
|
|
10
|
+
* Other models are rejected, even 384-dimensional ones such as
|
|
11
|
+
* `all-minilm:33m` (all-MiniLM-L12-v2): their vectors are in another
|
|
12
|
+
* embedding space (ADR-097).
|
|
13
|
+
*/
|
|
14
|
+
export declare function isConfiguredOllamaModel(listed: string): boolean;
|
|
6
15
|
/**
|
|
7
16
|
* Client for Ollama API
|
|
8
17
|
*/
|
|
@@ -11,11 +20,28 @@ export declare class OllamaClient {
|
|
|
11
20
|
private maxRetries;
|
|
12
21
|
private retryDelayMs;
|
|
13
22
|
private timeoutMs;
|
|
14
|
-
|
|
23
|
+
/** #1229: the Ollama model named by the user (AQE_OLLAMA_EMBEDDING_MODEL), if any. */
|
|
24
|
+
private readonly requestedModel?;
|
|
25
|
+
/** The installed Ollama model found by the last successful check. */
|
|
26
|
+
private installedModel;
|
|
27
|
+
constructor(baseUrl?: string, maxRetries?: number, retryDelayMs?: number, timeoutMs?: number, ollamaModel?: string | undefined);
|
|
28
|
+
/** The Ollama server this client talks to. */
|
|
29
|
+
getBaseUrl(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Identifies the embedding space of this client's vectors. A model named by
|
|
32
|
+
* AQE_OLLAMA_EMBEDDING_MODEL that is not EMBEDDING_CONFIG.MODEL gets its own
|
|
33
|
+
* id, so its vectors are never compared with stored MiniLM vectors (ADR-097).
|
|
34
|
+
*/
|
|
35
|
+
getModelId(): string;
|
|
15
36
|
/**
|
|
16
37
|
* Check if Ollama is running and the configured embedding model is available
|
|
17
38
|
*/
|
|
18
39
|
healthCheck(): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* #1229: find the installed Ollama model to embed with, or say why there is
|
|
42
|
+
* none (Ollama unreachable, or reachable without the model).
|
|
43
|
+
*/
|
|
44
|
+
checkModel(): Promise<OllamaModelStatus>;
|
|
19
45
|
/**
|
|
20
46
|
* Generate embedding for a single text prompt
|
|
21
47
|
*/
|
|
@@ -5,6 +5,30 @@
|
|
|
5
5
|
import { toError } from '../error-utils.js';
|
|
6
6
|
import { EMBEDDING_CONFIG, } from './types.js';
|
|
7
7
|
import { resolveOllamaBaseUrl } from '../llm/ollama-url.js';
|
|
8
|
+
/** Tags of Ollama's `all-minilm` that are all-MiniLM-L6-v2 (33m / l12-v2 is the L12 model). */
|
|
9
|
+
const ALL_MINILM_L6_TAG = /^(latest|22m(-.*)?|l6-v2(-.*)?)?$/i;
|
|
10
|
+
/** Splits `namespace/name:tag` into the name part and the tag ('' when untagged). */
|
|
11
|
+
function splitTag(listed) {
|
|
12
|
+
const colon = listed.lastIndexOf(':');
|
|
13
|
+
return colon > listed.lastIndexOf('/')
|
|
14
|
+
? { base: listed.slice(0, colon), tag: listed.slice(colon + 1) }
|
|
15
|
+
: { base: listed, tag: '' };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* #1229: whether an installed Ollama model is EMBEDDING_CONFIG.MODEL. Accepts
|
|
19
|
+
* the exact name with any namespace and tag (`Xenova/all-MiniLM-L6-v2:latest`)
|
|
20
|
+
* and Ollama's library name `all-minilm` with an L6 tag (`all-minilm:22m`).
|
|
21
|
+
* Other models are rejected, even 384-dimensional ones such as
|
|
22
|
+
* `all-minilm:33m` (all-MiniLM-L12-v2): their vectors are in another
|
|
23
|
+
* embedding space (ADR-097).
|
|
24
|
+
*/
|
|
25
|
+
export function isConfiguredOllamaModel(listed) {
|
|
26
|
+
const { base, tag } = splitTag(listed);
|
|
27
|
+
const name = base.slice(base.lastIndexOf('/') + 1).toLowerCase();
|
|
28
|
+
if (name === EMBEDDING_CONFIG.MODEL.toLowerCase())
|
|
29
|
+
return true;
|
|
30
|
+
return base.toLowerCase() === 'all-minilm' && ALL_MINILM_L6_TAG.test(tag);
|
|
31
|
+
}
|
|
8
32
|
/**
|
|
9
33
|
* Client for Ollama API
|
|
10
34
|
*/
|
|
@@ -13,46 +37,85 @@ export class OllamaClient {
|
|
|
13
37
|
maxRetries;
|
|
14
38
|
retryDelayMs;
|
|
15
39
|
timeoutMs;
|
|
16
|
-
|
|
40
|
+
/** #1229: the Ollama model named by the user (AQE_OLLAMA_EMBEDDING_MODEL), if any. */
|
|
41
|
+
requestedModel;
|
|
42
|
+
/** The installed Ollama model found by the last successful check. */
|
|
43
|
+
installedModel = null;
|
|
44
|
+
constructor(baseUrl = resolveOllamaBaseUrl(EMBEDDING_CONFIG.DEFAULT_OLLAMA_URL), maxRetries = EMBEDDING_CONFIG.MAX_RETRIES, retryDelayMs = EMBEDDING_CONFIG.RETRY_DELAY_MS, timeoutMs = EMBEDDING_CONFIG.TIMEOUT_MS, ollamaModel = process.env[EMBEDDING_CONFIG.OLLAMA_MODEL_ENV]) {
|
|
17
45
|
this.baseUrl = baseUrl.replace(/\/$/, ''); // Remove trailing slash
|
|
18
46
|
this.maxRetries = maxRetries;
|
|
19
47
|
this.retryDelayMs = retryDelayMs;
|
|
20
48
|
this.timeoutMs = timeoutMs;
|
|
49
|
+
this.requestedModel = ollamaModel?.trim() || undefined;
|
|
50
|
+
}
|
|
51
|
+
/** The Ollama server this client talks to. */
|
|
52
|
+
getBaseUrl() {
|
|
53
|
+
return this.baseUrl;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Identifies the embedding space of this client's vectors. A model named by
|
|
57
|
+
* AQE_OLLAMA_EMBEDDING_MODEL that is not EMBEDDING_CONFIG.MODEL gets its own
|
|
58
|
+
* id, so its vectors are never compared with stored MiniLM vectors (ADR-097).
|
|
59
|
+
*/
|
|
60
|
+
getModelId() {
|
|
61
|
+
return !this.requestedModel || isConfiguredOllamaModel(this.requestedModel)
|
|
62
|
+
? EMBEDDING_CONFIG.MODEL
|
|
63
|
+
: `ollama:${this.requestedModel}`;
|
|
21
64
|
}
|
|
22
65
|
/**
|
|
23
66
|
* Check if Ollama is running and the configured embedding model is available
|
|
24
67
|
*/
|
|
25
68
|
async healthCheck() {
|
|
69
|
+
return (await this.checkModel()).status === 'available';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* #1229: find the installed Ollama model to embed with, or say why there is
|
|
73
|
+
* none (Ollama unreachable, or reachable without the model).
|
|
74
|
+
*/
|
|
75
|
+
async checkModel() {
|
|
76
|
+
const wanted = this.requestedModel ?? EMBEDDING_CONFIG.MODEL;
|
|
77
|
+
let data;
|
|
26
78
|
try {
|
|
27
|
-
|
|
79
|
+
data = await this.fetchWithTimeout(`${this.baseUrl}/api/tags`, {
|
|
28
80
|
method: 'GET',
|
|
29
81
|
headers: { 'Content-Type': 'application/json' },
|
|
30
82
|
}, 5000, // Shorter timeout for health check
|
|
31
|
-
async (response) =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const data = await response.json();
|
|
35
|
-
// Check if configured embedding model is available
|
|
36
|
-
// Match the configured model exactly, allowing its existing tag suffix.
|
|
37
|
-
if (data.models) {
|
|
38
|
-
return data.models.some((model) => model.name === EMBEDDING_CONFIG.MODEL ||
|
|
39
|
-
model.name?.startsWith(`${EMBEDDING_CONFIG.MODEL}:`) ||
|
|
40
|
-
model.model === EMBEDDING_CONFIG.MODEL ||
|
|
41
|
-
model.model?.startsWith(`${EMBEDDING_CONFIG.MODEL}:`));
|
|
42
|
-
}
|
|
43
|
-
return false;
|
|
44
|
-
});
|
|
83
|
+
async (response) => response.ok
|
|
84
|
+
? await response.json()
|
|
85
|
+
: { httpStatus: response.status });
|
|
45
86
|
}
|
|
46
87
|
catch {
|
|
47
|
-
return
|
|
88
|
+
return { status: 'unreachable', reason: `Ollama at ${this.baseUrl} is not reachable` };
|
|
48
89
|
}
|
|
90
|
+
if (data && 'httpStatus' in data) {
|
|
91
|
+
return {
|
|
92
|
+
status: 'unreachable',
|
|
93
|
+
reason: `Ollama at ${this.baseUrl} answered HTTP ${data.httpStatus} when listing models`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const requested = this.requestedModel;
|
|
97
|
+
const matches = requested
|
|
98
|
+
? (listed) => listed === requested || (!splitTag(requested).tag && listed === `${requested}:latest`)
|
|
99
|
+
: isConfiguredOllamaModel;
|
|
100
|
+
for (const model of data?.models ?? []) {
|
|
101
|
+
const found = [model.name, model.model].find((listed) => !!listed && matches(listed));
|
|
102
|
+
if (found) {
|
|
103
|
+
this.installedModel = found;
|
|
104
|
+
return { status: 'available', model: found };
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
status: 'missing',
|
|
109
|
+
reason: `model '${wanted}' not installed in Ollama at ${this.baseUrl}; ` +
|
|
110
|
+
`install it with: ollama pull ${requested ?? EMBEDDING_CONFIG.OLLAMA_PULL_NAME}`,
|
|
111
|
+
};
|
|
49
112
|
}
|
|
50
113
|
/**
|
|
51
114
|
* Generate embedding for a single text prompt
|
|
52
115
|
*/
|
|
53
116
|
async generateEmbedding(prompt) {
|
|
54
117
|
const request = {
|
|
55
|
-
model: EMBEDDING_CONFIG.MODEL,
|
|
118
|
+
model: this.installedModel ?? this.requestedModel ?? EMBEDDING_CONFIG.MODEL,
|
|
56
119
|
prompt,
|
|
57
120
|
};
|
|
58
121
|
let lastError = null;
|
|
@@ -133,10 +196,9 @@ export class OllamaClient {
|
|
|
133
196
|
* Verify model is available and throw if not
|
|
134
197
|
*/
|
|
135
198
|
async ensureModelAvailable() {
|
|
136
|
-
const
|
|
137
|
-
if (
|
|
138
|
-
throw new Error(`Ollama model '${EMBEDDING_CONFIG.MODEL}' is not available.
|
|
139
|
-
`Please run: ollama pull ${EMBEDDING_CONFIG.MODEL}`);
|
|
199
|
+
const check = await this.checkModel();
|
|
200
|
+
if (check.status !== 'available') {
|
|
201
|
+
throw new Error(`Ollama model '${this.requestedModel ?? EMBEDDING_CONFIG.MODEL}' is not available: ${check.reason}`);
|
|
140
202
|
}
|
|
141
203
|
}
|
|
142
204
|
}
|
|
@@ -120,6 +120,21 @@ export declare const EMBEDDING_CONFIG: {
|
|
|
120
120
|
readonly TIMEOUT_MS: 30000;
|
|
121
121
|
/** Default Ollama URL */
|
|
122
122
|
readonly DEFAULT_OLLAMA_URL: "http://localhost:11434";
|
|
123
|
+
/** #1229: Ollama library name of MODEL, used in install hints */
|
|
124
|
+
readonly OLLAMA_PULL_NAME: "all-minilm:22m";
|
|
125
|
+
/** #1229: env var naming the installed Ollama model to use for MODEL */
|
|
126
|
+
readonly OLLAMA_MODEL_ENV: "AQE_OLLAMA_EMBEDDING_MODEL";
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* #1229: whether Ollama has the configured embedding model. `reason` says why
|
|
130
|
+
* not: Ollama did not answer, or it answered without the model.
|
|
131
|
+
*/
|
|
132
|
+
export type OllamaModelStatus = {
|
|
133
|
+
status: 'available';
|
|
134
|
+
model: string;
|
|
135
|
+
} | {
|
|
136
|
+
status: 'missing' | 'unreachable';
|
|
137
|
+
reason: string;
|
|
123
138
|
};
|
|
124
139
|
/**
|
|
125
140
|
* Interface for embedding providers
|
|
@@ -22,5 +22,9 @@ export const EMBEDDING_CONFIG = {
|
|
|
22
22
|
TIMEOUT_MS: 30000,
|
|
23
23
|
/** Default Ollama URL */
|
|
24
24
|
DEFAULT_OLLAMA_URL: 'http://localhost:11434',
|
|
25
|
+
/** #1229: Ollama library name of MODEL, used in install hints */
|
|
26
|
+
OLLAMA_PULL_NAME: 'all-minilm:22m',
|
|
27
|
+
/** #1229: env var naming the installed Ollama model to use for MODEL */
|
|
28
|
+
OLLAMA_MODEL_ENV: 'AQE_OLLAMA_EMBEDDING_MODEL',
|
|
25
29
|
};
|
|
26
30
|
//# sourceMappingURL=types.js.map
|