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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding-space registry (#1298).
|
|
3
|
+
*
|
|
4
|
+
* A space id is a hash of the runtime configuration plus an exact fingerprint
|
|
5
|
+
* of a canary vector, rounded to int16 (steps of about 3e-5). The same model
|
|
6
|
+
* restarted on other hardware or kernels can move the canary by more than
|
|
7
|
+
* that, which would mint a new space id for vectors that are still
|
|
8
|
+
* comparable. So each space minted here also stores its canary vector, as the
|
|
9
|
+
* space's reference. At the next start, a runtime with the same configuration
|
|
10
|
+
* whose canary is within EMBEDDING_ROUND_TRIP_MIN_COSINE of a reference is
|
|
11
|
+
* that space: it keeps the stored identity and id instead of minting one.
|
|
12
|
+
*
|
|
13
|
+
* Entries live in memory.db kv_store (namespace _system) and are only ever
|
|
14
|
+
* added: a reference is never updated, so slow drift cannot walk a space
|
|
15
|
+
* away, and no stored id, vector or manifest is ever rewritten. Without a
|
|
16
|
+
* database, or when it cannot be read, derivation is what it was before.
|
|
17
|
+
*/
|
|
18
|
+
import { type EmbeddingSpaceIdentity } from './embedding-space.js';
|
|
19
|
+
/** The raw memory.db connection the registry reads and writes. */
|
|
20
|
+
export interface EmbeddingSpaceRegistryDb {
|
|
21
|
+
prepare(sql: string): {
|
|
22
|
+
all(...params: unknown[]): unknown[];
|
|
23
|
+
run(...params: unknown[]): unknown;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** A space and the canary vector it was minted with. */
|
|
27
|
+
export interface RegisteredEmbeddingSpace {
|
|
28
|
+
identity: EmbeddingSpaceIdentity;
|
|
29
|
+
/** The text the canary vector embeds; only like canaries are compared. */
|
|
30
|
+
canaryText: string;
|
|
31
|
+
canary: number[];
|
|
32
|
+
}
|
|
33
|
+
export type EmbeddingSpaceResolution =
|
|
34
|
+
/** A registered space with the same fingerprint. */
|
|
35
|
+
'matched-exact'
|
|
36
|
+
/** A registered space whose canary is within the round-trip cosine. */
|
|
37
|
+
| 'matched-cosine'
|
|
38
|
+
/** No registered space matched: the derived space was registered. */
|
|
39
|
+
| 'registered'
|
|
40
|
+
/** No registered space matched; a pre-registry space id was verified and registered (#1302). */
|
|
41
|
+
| 'adopted-legacy'
|
|
42
|
+
/** No usable registry: the derived space is used as before. */
|
|
43
|
+
| 'unavailable';
|
|
44
|
+
export interface ResolvedEmbeddingSpace {
|
|
45
|
+
identity: EmbeddingSpaceIdentity;
|
|
46
|
+
resolution: EmbeddingSpaceResolution;
|
|
47
|
+
/** Same-configuration spaces that did not match (for the drift warning). */
|
|
48
|
+
otherSpaces: number;
|
|
49
|
+
/** Settles when the registration write has run (or failed, logged). */
|
|
50
|
+
registration: Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
/** Same configuration: everything but the runtime fingerprint. */
|
|
53
|
+
export declare function sameEmbeddingSpaceConfig(a: EmbeddingSpaceIdentity, b: EmbeddingSpaceIdentity): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* The registered space a runtime belongs to, or null. Candidates share the
|
|
56
|
+
* runtime's configuration and canary text; an equal fingerprint wins, then
|
|
57
|
+
* the highest canary cosine at or above the round-trip threshold.
|
|
58
|
+
*/
|
|
59
|
+
export declare function matchRegisteredSpace(derived: EmbeddingSpaceIdentity, canaryText: string, canary: readonly number[], entries: readonly RegisteredEmbeddingSpace[]): {
|
|
60
|
+
entry: RegisteredEmbeddingSpace;
|
|
61
|
+
exact: boolean;
|
|
62
|
+
} | null;
|
|
63
|
+
/** Read every registered space. Malformed entries are skipped. Throws on a DB error. */
|
|
64
|
+
export declare function loadRegisteredSpaces(db: EmbeddingSpaceRegistryDb): RegisteredEmbeddingSpace[];
|
|
65
|
+
/**
|
|
66
|
+
* Add a space to the registry. Never replaces an entry. The write goes
|
|
67
|
+
* through the connection's write queue (#1283) when it has one, so a locked
|
|
68
|
+
* memory.db does not block the event loop.
|
|
69
|
+
*/
|
|
70
|
+
export declare function registerEmbeddingSpace(db: EmbeddingSpaceRegistryDb, space: RegisteredEmbeddingSpace): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Choose the space for a freshly derived runtime identity: a registered space
|
|
73
|
+
* it matches, or the derived space, which is then registered. Never throws:
|
|
74
|
+
* when the registry cannot be read the derived space is used, as before.
|
|
75
|
+
*/
|
|
76
|
+
export declare function resolveEmbeddingSpace(db: EmbeddingSpaceRegistryDb | null, derived: EmbeddingSpaceIdentity, canaryText: string, canary: readonly number[]): ResolvedEmbeddingSpace;
|
|
77
|
+
/**
|
|
78
|
+
* Picks a legacy space id (one with stored vectors but no registry entry) the
|
|
79
|
+
* runtime belongs to, or null. Throws only on an unexpected failure.
|
|
80
|
+
*/
|
|
81
|
+
export type LegacySpaceAdopter = (derived: EmbeddingSpaceIdentity, registered: readonly RegisteredEmbeddingSpace[]) => Promise<string | null>;
|
|
82
|
+
/**
|
|
83
|
+
* #1302: like resolveEmbeddingSpace, but before registering a new space the
|
|
84
|
+
* adopter may name a legacy space id the runtime has been shown to reproduce.
|
|
85
|
+
* That id is kept and registered with the current canary as its reference.
|
|
86
|
+
* Its identity carries the current runtime fields: a pre-registry id is a
|
|
87
|
+
* hash that cannot be reversed into the fields it was minted from.
|
|
88
|
+
*/
|
|
89
|
+
export declare function resolveEmbeddingSpaceAdoptingLegacy(db: EmbeddingSpaceRegistryDb | null, derived: EmbeddingSpaceIdentity, canaryText: string, canary: readonly number[], adoptLegacy: LegacySpaceAdopter): Promise<ResolvedEmbeddingSpace>;
|
|
90
|
+
//# sourceMappingURL=embedding-space-registry.d.ts.map
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding-space registry (#1298).
|
|
3
|
+
*
|
|
4
|
+
* A space id is a hash of the runtime configuration plus an exact fingerprint
|
|
5
|
+
* of a canary vector, rounded to int16 (steps of about 3e-5). The same model
|
|
6
|
+
* restarted on other hardware or kernels can move the canary by more than
|
|
7
|
+
* that, which would mint a new space id for vectors that are still
|
|
8
|
+
* comparable. So each space minted here also stores its canary vector, as the
|
|
9
|
+
* space's reference. At the next start, a runtime with the same configuration
|
|
10
|
+
* whose canary is within EMBEDDING_ROUND_TRIP_MIN_COSINE of a reference is
|
|
11
|
+
* that space: it keeps the stored identity and id instead of minting one.
|
|
12
|
+
*
|
|
13
|
+
* Entries live in memory.db kv_store (namespace _system) and are only ever
|
|
14
|
+
* added: a reference is never updated, so slow drift cannot walk a space
|
|
15
|
+
* away, and no stored id, vector or manifest is ever rewritten. Without a
|
|
16
|
+
* database, or when it cannot be read, derivation is what it was before.
|
|
17
|
+
*/
|
|
18
|
+
import { cosineSimilarity } from '../shared/utils/vector-math.js';
|
|
19
|
+
import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
|
|
20
|
+
import { toErrorMessage } from '../shared/error-utils.js';
|
|
21
|
+
import { EMBEDDING_ROUND_TRIP_MIN_COSINE, } from './embedding-space.js';
|
|
22
|
+
const NAMESPACE = '_system';
|
|
23
|
+
const KEY_PREFIX = 'embedding_space:';
|
|
24
|
+
/** Same configuration: everything but the runtime fingerprint. */
|
|
25
|
+
export function sameEmbeddingSpaceConfig(a, b) {
|
|
26
|
+
return (a.provider === b.provider &&
|
|
27
|
+
a.model === b.model &&
|
|
28
|
+
a.dimensions === b.dimensions &&
|
|
29
|
+
(a.pooling ?? null) === (b.pooling ?? null) &&
|
|
30
|
+
a.normalized === b.normalized &&
|
|
31
|
+
(a.preprocessingVersion ?? null) === (b.preprocessingVersion ?? null) &&
|
|
32
|
+
(a.implementation ?? null) === (b.implementation ?? null));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The registered space a runtime belongs to, or null. Candidates share the
|
|
36
|
+
* runtime's configuration and canary text; an equal fingerprint wins, then
|
|
37
|
+
* the highest canary cosine at or above the round-trip threshold.
|
|
38
|
+
*/
|
|
39
|
+
export function matchRegisteredSpace(derived, canaryText, canary, entries) {
|
|
40
|
+
const candidates = entries.filter((entry) => entry.canaryText === canaryText &&
|
|
41
|
+
entry.canary.length === canary.length &&
|
|
42
|
+
sameEmbeddingSpaceConfig(entry.identity, derived));
|
|
43
|
+
const exact = candidates.find((entry) => entry.identity.runtimeFingerprint === derived.runtimeFingerprint);
|
|
44
|
+
if (exact)
|
|
45
|
+
return { entry: exact, exact: true };
|
|
46
|
+
let best = null;
|
|
47
|
+
for (const entry of candidates) {
|
|
48
|
+
const cosine = cosineSimilarity(entry.canary, canary);
|
|
49
|
+
if (cosine >= EMBEDDING_ROUND_TRIP_MIN_COSINE && (!best || cosine > best.cosine)) {
|
|
50
|
+
best = { entry, cosine };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return best ? { entry: best.entry, exact: false } : null;
|
|
54
|
+
}
|
|
55
|
+
/** Read every registered space. Malformed entries are skipped. Throws on a DB error. */
|
|
56
|
+
export function loadRegisteredSpaces(db) {
|
|
57
|
+
const rows = db
|
|
58
|
+
.prepare('SELECT value FROM kv_store WHERE namespace = ? AND key LIKE ?')
|
|
59
|
+
.all(NAMESPACE, `${KEY_PREFIX}%`);
|
|
60
|
+
const entries = [];
|
|
61
|
+
for (const row of rows) {
|
|
62
|
+
const entry = parseEntry(row.value);
|
|
63
|
+
if (entry)
|
|
64
|
+
entries.push(entry);
|
|
65
|
+
}
|
|
66
|
+
return entries;
|
|
67
|
+
}
|
|
68
|
+
function parseEntry(value) {
|
|
69
|
+
let parsed;
|
|
70
|
+
try {
|
|
71
|
+
parsed = JSON.parse(value);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const { identity, canaryText, canary } = parsed;
|
|
77
|
+
if (parsed.version !== 1 ||
|
|
78
|
+
!identity ||
|
|
79
|
+
typeof identity.spaceId !== 'string' ||
|
|
80
|
+
typeof identity.runtimeFingerprint !== 'string' ||
|
|
81
|
+
typeof identity.dimensions !== 'number' ||
|
|
82
|
+
typeof canaryText !== 'string' ||
|
|
83
|
+
!Array.isArray(canary) ||
|
|
84
|
+
canary.length !== identity.dimensions ||
|
|
85
|
+
!canary.every((x) => typeof x === 'number' && Number.isFinite(x))) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return { identity, canaryText, canary };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Add a space to the registry. Never replaces an entry. The write goes
|
|
92
|
+
* through the connection's write queue (#1283) when it has one, so a locked
|
|
93
|
+
* memory.db does not block the event loop.
|
|
94
|
+
*/
|
|
95
|
+
export function registerEmbeddingSpace(db, space) {
|
|
96
|
+
const entry = { version: 1, createdAt: Date.now(), ...space };
|
|
97
|
+
return writeWhenUnlockedOn(db, () => {
|
|
98
|
+
db.prepare('INSERT OR IGNORE INTO kv_store (key, namespace, value) VALUES (?, ?, ?)').run(KEY_PREFIX + space.identity.spaceId, NAMESPACE, JSON.stringify(entry));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Choose the space for a freshly derived runtime identity: a registered space
|
|
103
|
+
* it matches, or the derived space, which is then registered. Never throws:
|
|
104
|
+
* when the registry cannot be read the derived space is used, as before.
|
|
105
|
+
*/
|
|
106
|
+
export function resolveEmbeddingSpace(db, derived, canaryText, canary) {
|
|
107
|
+
const lookup = lookupEmbeddingSpace(db, derived, canaryText, canary);
|
|
108
|
+
if (lookup.resolved)
|
|
109
|
+
return lookup.resolved;
|
|
110
|
+
return registerResolvedSpace(lookup.db, derived, canaryText, canary, 'registered', lookup.otherSpaces);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* #1302: like resolveEmbeddingSpace, but before registering a new space the
|
|
114
|
+
* adopter may name a legacy space id the runtime has been shown to reproduce.
|
|
115
|
+
* That id is kept and registered with the current canary as its reference.
|
|
116
|
+
* Its identity carries the current runtime fields: a pre-registry id is a
|
|
117
|
+
* hash that cannot be reversed into the fields it was minted from.
|
|
118
|
+
*/
|
|
119
|
+
export async function resolveEmbeddingSpaceAdoptingLegacy(db, derived, canaryText, canary, adoptLegacy) {
|
|
120
|
+
const lookup = lookupEmbeddingSpace(db, derived, canaryText, canary);
|
|
121
|
+
if (lookup.resolved)
|
|
122
|
+
return lookup.resolved;
|
|
123
|
+
let legacySpaceId = null;
|
|
124
|
+
try {
|
|
125
|
+
legacySpaceId = await adoptLegacy(derived, lookup.entries);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.warn(`[EmbeddingSpaceRegistry] legacy space check failed (${toErrorMessage(error)}); ` +
|
|
129
|
+
`registering the derived space id`);
|
|
130
|
+
}
|
|
131
|
+
if (legacySpaceId) {
|
|
132
|
+
const adopted = { ...derived, spaceId: legacySpaceId };
|
|
133
|
+
return registerResolvedSpace(lookup.db, adopted, canaryText, canary, 'adopted-legacy', 0);
|
|
134
|
+
}
|
|
135
|
+
return registerResolvedSpace(lookup.db, derived, canaryText, canary, 'registered', lookup.otherSpaces);
|
|
136
|
+
}
|
|
137
|
+
/** A registered match (or the unavailable fallback), or what is needed to register. */
|
|
138
|
+
function lookupEmbeddingSpace(db, derived, canaryText, canary) {
|
|
139
|
+
const unavailable = () => ({
|
|
140
|
+
resolved: {
|
|
141
|
+
identity: derived,
|
|
142
|
+
resolution: 'unavailable',
|
|
143
|
+
otherSpaces: 0,
|
|
144
|
+
registration: Promise.resolve(),
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
if (!db)
|
|
148
|
+
return unavailable();
|
|
149
|
+
let entries;
|
|
150
|
+
try {
|
|
151
|
+
entries = loadRegisteredSpaces(db);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
console.warn(`[EmbeddingSpaceRegistry] could not read registered embedding spaces ` +
|
|
155
|
+
`(${toErrorMessage(error)}); using the derived space id`);
|
|
156
|
+
return unavailable();
|
|
157
|
+
}
|
|
158
|
+
const match = matchRegisteredSpace(derived, canaryText, canary, entries);
|
|
159
|
+
if (match) {
|
|
160
|
+
return {
|
|
161
|
+
resolved: {
|
|
162
|
+
identity: match.entry.identity,
|
|
163
|
+
resolution: match.exact ? 'matched-exact' : 'matched-cosine',
|
|
164
|
+
otherSpaces: 0,
|
|
165
|
+
registration: Promise.resolve(),
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const otherSpaces = entries.filter((entry) => entry.canaryText === canaryText && sameEmbeddingSpaceConfig(entry.identity, derived)).length;
|
|
170
|
+
return { db, entries, otherSpaces };
|
|
171
|
+
}
|
|
172
|
+
function registerResolvedSpace(db, identity, canaryText, canary, resolution, otherSpaces) {
|
|
173
|
+
const registration = Promise.resolve()
|
|
174
|
+
.then(() => registerEmbeddingSpace(db, { identity, canaryText, canary: [...canary] }))
|
|
175
|
+
.catch((error) => {
|
|
176
|
+
console.warn(`[EmbeddingSpaceRegistry] could not register embedding space ${identity.spaceId.slice(0, 12)} ` +
|
|
177
|
+
`(${toErrorMessage(error)}); it is registered at a later start`);
|
|
178
|
+
});
|
|
179
|
+
return { identity, resolution, otherSpaces, registration };
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=embedding-space-registry.js.map
|
|
@@ -254,7 +254,9 @@ export declare class ExperienceCaptureService {
|
|
|
254
254
|
/**
|
|
255
255
|
* Extract pattern from experience
|
|
256
256
|
*/
|
|
257
|
-
extractPattern(experience: TaskExperience
|
|
257
|
+
extractPattern(experience: TaskExperience, options?: {
|
|
258
|
+
createIfMissing?: boolean;
|
|
259
|
+
}): Promise<PatternExtractionResult>;
|
|
258
260
|
/**
|
|
259
261
|
* Share experience across domains
|
|
260
262
|
*/
|
|
@@ -253,12 +253,17 @@ export class ExperienceCaptureService {
|
|
|
253
253
|
// Extract patterns: require positive reward (or no reward signal) AND quality threshold
|
|
254
254
|
// Zero or negative reward blocks extraction — only learn from genuinely positive outcomes
|
|
255
255
|
const rewardAllowsExtraction = experience.reward === undefined || experience.reward > 0;
|
|
256
|
+
const passesExtractionGates = experience.success &&
|
|
257
|
+
experience.quality >= this.config.minQualityForPatternExtraction &&
|
|
258
|
+
rewardAllowsExtraction;
|
|
256
259
|
// #1129: a measured outcome is recorded whether it succeeded or failed.
|
|
257
260
|
// Recording only successes made the usage success rate 100% by selection.
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
const extractionResult = await this.extractPattern(experience
|
|
261
|
+
// #1147: only a run that passes the gates creates a pattern; any other
|
|
262
|
+
// measured run updates the usage of an existing matching pattern.
|
|
263
|
+
if (passesExtractionGates || experience.outcomeBasis !== undefined) {
|
|
264
|
+
const extractionResult = await this.extractPattern(experience, {
|
|
265
|
+
createIfMissing: passesExtractionGates,
|
|
266
|
+
});
|
|
262
267
|
if (extractionResult.newPattern || extractionResult.reinforced) {
|
|
263
268
|
experience.patterns = [extractionResult.patternId];
|
|
264
269
|
}
|
|
@@ -375,7 +380,7 @@ export class ExperienceCaptureService {
|
|
|
375
380
|
/**
|
|
376
381
|
* Extract pattern from experience
|
|
377
382
|
*/
|
|
378
|
-
async extractPattern(experience) {
|
|
383
|
+
async extractPattern(experience, options = {}) {
|
|
379
384
|
if (!this.patternStore) {
|
|
380
385
|
return { newPattern: false, reinforced: false, promoted: false };
|
|
381
386
|
}
|
|
@@ -421,6 +426,11 @@ export class ExperienceCaptureService {
|
|
|
421
426
|
};
|
|
422
427
|
}
|
|
423
428
|
}
|
|
429
|
+
// #1147: a run that did not pass the extraction gates (e.g. a measured
|
|
430
|
+
// failure) never mints a pattern; with no existing match nothing is stored.
|
|
431
|
+
if (options.createIfMissing === false) {
|
|
432
|
+
return { newPattern: false, reinforced: false, promoted: false };
|
|
433
|
+
}
|
|
424
434
|
// Create new pattern from experience
|
|
425
435
|
const patternOptions = this.experienceToPatternOptions(experience);
|
|
426
436
|
const createResult = await this.patternStore.create(patternOptions);
|
|
@@ -61,6 +61,8 @@ export interface ExperienceSpaceVerificationResult {
|
|
|
61
61
|
* in steps_json.
|
|
62
62
|
*/
|
|
63
63
|
export declare function legacyExperienceEmbeddingTexts(row: LegacyExperienceRow): string[];
|
|
64
|
+
/** The row's stored float32 vector, or null when the blob is short. */
|
|
65
|
+
export declare function storedExperienceVector(row: LegacyExperienceRow): number[] | null;
|
|
64
66
|
/**
|
|
65
67
|
* Check up to `limit` legacy rows (vector, no embedding_space_id) and set
|
|
66
68
|
* embedding_space_id on those whose stored vector the active embedder
|
|
@@ -44,7 +44,8 @@ export function legacyExperienceEmbeddingTexts(row) {
|
|
|
44
44
|
}
|
|
45
45
|
return [...texts];
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
/** The row's stored float32 vector, or null when the blob is short. */
|
|
48
|
+
export function storedExperienceVector(row) {
|
|
48
49
|
if (row.embedding.length < row.embedding_dimension * 4)
|
|
49
50
|
return null;
|
|
50
51
|
const v = [];
|
|
@@ -107,7 +108,7 @@ export async function verifyLegacyExperienceSpaces(db, options) {
|
|
|
107
108
|
let lastRowid = 0;
|
|
108
109
|
try {
|
|
109
110
|
for (const row of rows) {
|
|
110
|
-
const stored =
|
|
111
|
+
const stored = storedExperienceVector(row);
|
|
111
112
|
let matched = false;
|
|
112
113
|
if (stored) {
|
|
113
114
|
for (const text of legacyExperienceEmbeddingTexts(row)) {
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
* Every step reports the row counts it measured before and after, or, in a
|
|
27
27
|
* dry run, the counts it would change.
|
|
28
28
|
*/
|
|
29
|
+
import { acknowledgeCheckpointShrink, removedRows } from './checkpoint-shrink-ack.js';
|
|
29
30
|
export const DEFAULT_FAILED_DREAM_CYCLE_RETENTION_DAYS = 7;
|
|
30
31
|
export const DEFAULT_OUTCOME_CONCEPT_CAP = 2000;
|
|
31
32
|
/** Below this the cap would delete outcome nodes that the next dream reloads. */
|
|
@@ -187,6 +188,9 @@ export function runDreamRetention(db, settings = resolveDefaultRetention()) {
|
|
|
187
188
|
if (settings.outcomeConceptCap !== null) {
|
|
188
189
|
steps.push(capOutcomeConcepts(db, { maxNodes: settings.outcomeConceptCap, dryRun }));
|
|
189
190
|
}
|
|
191
|
+
// #1251: a deliberate shrink, so the next brain checkpoint accepts it.
|
|
192
|
+
if (removedRows(steps))
|
|
193
|
+
acknowledgeCheckpointShrink(db, 'dream');
|
|
190
194
|
return { enabled: settings.enabled, steps };
|
|
191
195
|
}
|
|
192
196
|
/** Lines for a dream's output: what retention removed, or would remove while off. */
|
|
@@ -60,9 +60,16 @@ export interface SeedingDeps {
|
|
|
60
60
|
*/
|
|
61
61
|
signal?: AbortSignal;
|
|
62
62
|
}
|
|
63
|
+
/** Tag stored on every pattern written by cross-domain seeding. */
|
|
64
|
+
export declare const CROSS_DOMAIN_TRANSFER_TAG = "cross-domain-transfer";
|
|
63
65
|
/**
|
|
64
66
|
* Seed cross-domain patterns by transferring generalizable patterns
|
|
65
67
|
* from populated domains to their related domains.
|
|
68
|
+
*
|
|
69
|
+
* Idempotent (#1325): only original patterns are counted and transferred
|
|
70
|
+
* (never a pattern tagged `cross-domain-transfer`), and a transfer whose exact
|
|
71
|
+
* target name already exists in the target domain is skipped. Re-running it
|
|
72
|
+
* against a seeded store transfers nothing.
|
|
66
73
|
*/
|
|
67
74
|
export declare function seedCrossDomainPatterns(deps: SeedingDeps): Promise<{
|
|
68
75
|
transferred: number;
|
|
@@ -152,9 +152,39 @@ export async function promotePattern(patternId, deps) {
|
|
|
152
152
|
return result;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
|
+
/** Tag stored on every pattern written by cross-domain seeding. */
|
|
156
|
+
export const CROSS_DOMAIN_TRANSFER_TAG = 'cross-domain-transfer';
|
|
157
|
+
/** Maximum original patterns transferred out of one source domain per run. */
|
|
158
|
+
const SEED_SOURCE_LIMIT = 50;
|
|
159
|
+
function isCrossDomainTransfer(pattern) {
|
|
160
|
+
return pattern.context?.tags?.includes(CROSS_DOMAIN_TRANSFER_TAG) ?? false;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Snapshot one domain before seeding writes anything, or null when the store
|
|
164
|
+
* cannot list it. Counting and transferring only originals keeps every run's
|
|
165
|
+
* decisions the same as the first run's, so a re-run finds every transfer it
|
|
166
|
+
* would make already present by name (#1325).
|
|
167
|
+
*/
|
|
168
|
+
async function snapshotDomain(deps, domain, domainCount) {
|
|
169
|
+
if (domainCount === 0)
|
|
170
|
+
return { originals: [], names: new Set() };
|
|
171
|
+
const result = await deps.searchPatterns('', { domain, limit: domainCount });
|
|
172
|
+
if (!result.success)
|
|
173
|
+
return null;
|
|
174
|
+
const patterns = result.value.map(({ pattern }) => pattern);
|
|
175
|
+
return {
|
|
176
|
+
originals: patterns.filter((pattern) => !isCrossDomainTransfer(pattern)),
|
|
177
|
+
names: new Set(patterns.map((pattern) => pattern.name)),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
155
180
|
/**
|
|
156
181
|
* Seed cross-domain patterns by transferring generalizable patterns
|
|
157
182
|
* from populated domains to their related domains.
|
|
183
|
+
*
|
|
184
|
+
* Idempotent (#1325): only original patterns are counted and transferred
|
|
185
|
+
* (never a pattern tagged `cross-domain-transfer`), and a transfer whose exact
|
|
186
|
+
* target name already exists in the target domain is skipped. Re-running it
|
|
187
|
+
* against a seeded store transfers nothing.
|
|
158
188
|
*/
|
|
159
189
|
export async function seedCrossDomainPatterns(deps) {
|
|
160
190
|
const { signal } = deps;
|
|
@@ -162,27 +192,48 @@ export async function seedCrossDomainPatterns(deps) {
|
|
|
162
192
|
const stats = await deps.patternStore.getStats();
|
|
163
193
|
let transferred = 0;
|
|
164
194
|
let skipped = 0;
|
|
195
|
+
// Snapshot all involved domains up front, before any transfer is written.
|
|
196
|
+
const domains = new Set();
|
|
197
|
+
for (const [source, targets] of Object.entries(RELATED_DOMAINS)) {
|
|
198
|
+
domains.add(source);
|
|
199
|
+
for (const target of targets)
|
|
200
|
+
domains.add(target);
|
|
201
|
+
}
|
|
202
|
+
const snapshots = new Map();
|
|
203
|
+
for (const domain of domains) {
|
|
204
|
+
signal?.throwIfAborted();
|
|
205
|
+
snapshots.set(domain, await snapshotDomain(deps, domain, stats.byDomain[domain] || 0));
|
|
206
|
+
}
|
|
165
207
|
for (const [sourceDomainStr, targetDomains] of Object.entries(RELATED_DOMAINS)) {
|
|
166
208
|
signal?.throwIfAborted();
|
|
167
209
|
const sourceDomain = sourceDomainStr;
|
|
168
|
-
const
|
|
169
|
-
if (
|
|
210
|
+
const source = snapshots.get(sourceDomain);
|
|
211
|
+
if (!source)
|
|
170
212
|
continue;
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
limit: 50,
|
|
174
|
-
});
|
|
175
|
-
if (!sourceResult.success)
|
|
213
|
+
const sourceCount = source.originals.length;
|
|
214
|
+
if (sourceCount === 0)
|
|
176
215
|
continue;
|
|
216
|
+
const sourcePatterns = source.originals.slice(0, SEED_SOURCE_LIMIT);
|
|
177
217
|
for (const targetDomain of targetDomains) {
|
|
178
218
|
signal?.throwIfAborted();
|
|
179
|
-
const
|
|
180
|
-
if (
|
|
219
|
+
const target = snapshots.get(targetDomain);
|
|
220
|
+
if (!target) {
|
|
221
|
+
// Cannot prove which transfers already exist: transfer nothing rather
|
|
222
|
+
// than risk duplicating the target domain.
|
|
223
|
+
skipped++;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (target.originals.length >= sourceCount) {
|
|
181
227
|
skipped++;
|
|
182
228
|
continue;
|
|
183
229
|
}
|
|
184
|
-
for (const
|
|
230
|
+
for (const sourcePattern of sourcePatterns) {
|
|
185
231
|
signal?.throwIfAborted();
|
|
232
|
+
const transferredName = `${sourcePattern.name} (from ${sourceDomain})`;
|
|
233
|
+
if (target.names.has(transferredName)) {
|
|
234
|
+
skipped++;
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
186
237
|
const existingCheck = await deps.searchPatterns(sourcePattern.name, {
|
|
187
238
|
domain: targetDomain,
|
|
188
239
|
limit: 1,
|
|
@@ -198,7 +249,7 @@ export async function seedCrossDomainPatterns(deps) {
|
|
|
198
249
|
const transferResult = await deps.storePattern({
|
|
199
250
|
patternType: sourcePattern.patternType,
|
|
200
251
|
qeDomain: targetDomain,
|
|
201
|
-
name:
|
|
252
|
+
name: transferredName,
|
|
202
253
|
description: `${sourcePattern.description} [Transferred from ${sourceDomain} domain]`,
|
|
203
254
|
template: sourcePattern.template,
|
|
204
255
|
context: {
|
|
@@ -206,13 +257,14 @@ export async function seedCrossDomainPatterns(deps) {
|
|
|
206
257
|
relatedDomains: [sourceDomain, targetDomain],
|
|
207
258
|
tags: [
|
|
208
259
|
...sourcePattern.context.tags,
|
|
209
|
-
|
|
260
|
+
CROSS_DOMAIN_TRANSFER_TAG,
|
|
210
261
|
`source:${sourceDomain}`,
|
|
211
262
|
],
|
|
212
263
|
},
|
|
213
264
|
confidence: transferredConfidence,
|
|
214
265
|
});
|
|
215
266
|
if (transferResult.success) {
|
|
267
|
+
target.names.add(transferredName);
|
|
216
268
|
transferred++;
|
|
217
269
|
}
|
|
218
270
|
else {
|
|
@@ -40,6 +40,7 @@ export interface EmbeddingConfig {
|
|
|
40
40
|
endpointToken?: string;
|
|
41
41
|
}
|
|
42
42
|
export declare const DEFAULT_EMBEDDING_CONFIG: EmbeddingConfig;
|
|
43
|
+
export declare function __spaceRegistrationSettledForTests(): Promise<void>;
|
|
43
44
|
/**
|
|
44
45
|
* Compute real embedding using transformer model
|
|
45
46
|
*
|
|
@@ -95,6 +96,8 @@ export declare function allowEmbedderInitRetry(): void;
|
|
|
95
96
|
* for the breaker window as well as the caller's retry interval. The probe
|
|
96
97
|
* must find the identity this process bound to (ADR-097): a changed
|
|
97
98
|
* fingerprint means vectors would not be comparable.
|
|
99
|
+
* The client refuses it (EmbedderEndpointIdentityChangedError) and keeps
|
|
100
|
+
* refusing every caller, also when its breaker recovers on its own (#1282).
|
|
98
101
|
* Callers rate-limit rechecks, then embed a canary to confirm.
|
|
99
102
|
*/
|
|
100
103
|
export declare function recheckEmbedder(config?: Partial<EmbeddingConfig>): Promise<void>;
|