agentic-qe 3.15.14 → 3.15.16
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/agents/v3/templates/qx-report-template.html +1 -1
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +136 -0
- package/assets/agents/v3/templates/qx-report-template.html +1 -1
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/audit/witness-chain.d.ts +7 -0
- package/dist/audit/witness-chain.js +10 -0
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-6CQ2PIP5.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-45NWEKVS.js +2 -0
- package/dist/cli/chunks/{agent-handler-P3IY7XEE.js → agent-handler-LVHMYFEF.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WWKC2H3G.js → agent-memory-branch-YDWOJFEQ.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +2 -0
- package/dist/cli/chunks/{arena-EIV5OALF.js → arena-CZKHXDDS.js} +2 -2
- package/dist/cli/chunks/{arena-4BMFF6BS.js → arena-ELDZH3CZ.js} +4 -4
- package/dist/cli/chunks/{audit-DNTI453H.js → audit-5MT4T47Z.js} +3 -3
- package/dist/cli/chunks/base-SMCMMVGP.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-TQBQGNC6.js → better-sqlite3-6TGYPC2B.js} +2 -2
- package/dist/cli/chunks/{brain-handler-HY57CNAO.js → brain-handler-HQWZFO52.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-THPMZPHQ.js → branch-enumerator-WVILM4SO.js} +2 -2
- package/dist/cli/chunks/{browser-O6JJOZCK.js → browser-RX5ALU3H.js} +2 -2
- package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +2 -0
- package/dist/cli/chunks/{chunk-CIINJHOX.js → chunk-24OX5TQJ.js} +1 -1
- package/dist/cli/chunks/{chunk-6P4Q4RTC.js → chunk-24QHCVX6.js} +1 -1
- package/dist/cli/chunks/{chunk-U6IOQKCT.js → chunk-2H4XH6FT.js} +2 -2
- package/dist/cli/chunks/{chunk-OGEIHS76.js → chunk-2YZ4G6NW.js} +1 -1
- package/dist/cli/chunks/chunk-32BPDLRZ.js +27 -0
- package/dist/cli/chunks/{chunk-5PLBQZ5J.js → chunk-32GN3JKR.js} +1 -1
- package/dist/cli/chunks/{chunk-AJVLVF7V.js → chunk-3HD7E6HN.js} +2 -2
- package/dist/cli/chunks/{chunk-X7CUI7KH.js → chunk-4D4DENG6.js} +2 -2
- package/dist/cli/chunks/{chunk-E2JLAW3U.js → chunk-4LQFBY5L.js} +6 -6
- package/dist/cli/chunks/{chunk-E3QIQMMN.js → chunk-4NFQLP6R.js} +1 -1
- package/dist/cli/chunks/{chunk-7Y3LXH57.js → chunk-525CFDUE.js} +2 -2
- package/dist/cli/chunks/chunk-5B5QPCNU.js +65 -0
- package/dist/cli/chunks/{chunk-X6Q2N5S5.js → chunk-5JZRZI4S.js} +2 -2
- package/dist/cli/chunks/{chunk-MB4UKUBV.js → chunk-5LAVKGLH.js} +2 -2
- package/dist/cli/chunks/chunk-5NNNEWLS.js +755 -0
- package/dist/cli/chunks/{chunk-NKOLILT7.js → chunk-5PBLPQ5T.js} +2 -2
- package/dist/cli/chunks/chunk-5QO3R3TU.js +6 -0
- package/dist/cli/chunks/{chunk-7T6L3LFN.js → chunk-5SPCGMBB.js} +2 -2
- package/dist/cli/chunks/{chunk-2QLE6NDW.js → chunk-5V3TI2LG.js} +1 -1
- package/dist/cli/chunks/{chunk-A2T56XVL.js → chunk-5VZL4UVN.js} +2 -2
- package/dist/cli/chunks/{chunk-TWOV3I3A.js → chunk-63GMRQ25.js} +1 -1
- package/dist/cli/chunks/{chunk-YGOSSVY5.js → chunk-63ZKI4PX.js} +6 -6
- package/dist/cli/chunks/{chunk-FHPNWHY7.js → chunk-67Z5R7RJ.js} +2 -2
- package/dist/cli/chunks/{chunk-PCQZIAXB.js → chunk-6DPYNAOK.js} +2 -2
- package/dist/cli/chunks/{chunk-WCM6WE7G.js → chunk-6ICX3FEG.js} +3 -3
- package/dist/cli/chunks/{chunk-JB7R77SH.js → chunk-6XXZDV2C.js} +2 -2
- package/dist/cli/chunks/{chunk-FJOIBZUB.js → chunk-6ZBXSOX6.js} +2 -2
- package/dist/cli/chunks/{chunk-WZQADC5R.js → chunk-72XSEQMW.js} +2 -2
- package/dist/cli/chunks/{chunk-AYLEH2UF.js → chunk-7TE5ONQQ.js} +1 -1
- package/dist/cli/chunks/{chunk-7QUSNBAA.js → chunk-A5GBXCP5.js} +2 -2
- package/dist/cli/chunks/{chunk-7724KXM2.js → chunk-AAMLQ2LF.js} +3 -3
- package/dist/cli/chunks/chunk-AG2EWGXS.js +21 -0
- package/dist/cli/chunks/{chunk-2UZBLC5H.js → chunk-AGRV5B3T.js} +2 -2
- package/dist/cli/chunks/{chunk-V6SE2ZU2.js → chunk-AJMJNQMP.js} +1 -1
- package/dist/cli/chunks/{chunk-2HPNGK7A.js → chunk-AR67RJPY.js} +2 -2
- package/dist/cli/chunks/{chunk-G7HGUQAE.js → chunk-ASEOFRIG.js} +2 -2
- package/dist/cli/chunks/{chunk-7TH4PJSU.js → chunk-BEKDKVQT.js} +2 -2
- package/dist/cli/chunks/{chunk-M5JEA6ZY.js → chunk-BY5OF7OH.js} +2 -2
- package/dist/cli/chunks/{chunk-OLUOVNUF.js → chunk-C5FP5GW3.js} +2 -2
- package/dist/cli/chunks/{chunk-R5RRWLRI.js → chunk-C6D5AHBO.js} +2 -2
- package/dist/cli/chunks/{chunk-K7GFYFBO.js → chunk-CAKMOVZ6.js} +2 -2
- package/dist/cli/chunks/{chunk-6NIGSY5L.js → chunk-CEYSYSK5.js} +2 -2
- package/dist/cli/chunks/{chunk-U4TML2VD.js → chunk-CGGUM2YJ.js} +2 -2
- package/dist/cli/chunks/{chunk-YE54T2NQ.js → chunk-CJSHWQXP.js} +2 -2
- package/dist/cli/chunks/{chunk-7SQTLUEN.js → chunk-CRPIYUTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-65EE2EST.js → chunk-D6COXLYE.js} +2 -2
- package/dist/cli/chunks/{chunk-4WLIOPHX.js → chunk-DTMAS2GB.js} +2 -2
- package/dist/cli/chunks/{chunk-E7QTWGPI.js → chunk-DVYHMDFR.js} +470 -411
- package/dist/cli/chunks/chunk-DXD6K2ZP.js +3 -0
- package/dist/cli/chunks/{chunk-HSDWPQQY.js → chunk-E3D4GPLP.js} +3 -3
- package/dist/cli/chunks/{chunk-JJHLGGPP.js → chunk-EA4YQVKS.js} +1 -1
- package/dist/cli/chunks/{chunk-EIEEST4T.js → chunk-EGYE5UPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-O756AOUX.js → chunk-EK7OLYOZ.js} +2 -2
- package/dist/cli/chunks/{chunk-57DRT6UA.js → chunk-F742SZAX.js} +2 -2
- package/dist/cli/chunks/{chunk-6OI5SK7M.js → chunk-FBDVGRSC.js} +1 -1
- package/dist/cli/chunks/{chunk-H3C5FJRH.js → chunk-FDDC72IA.js} +2 -2
- package/dist/cli/chunks/{chunk-IQRPR4KB.js → chunk-FL64OUBA.js} +2 -2
- package/dist/cli/chunks/{chunk-BNG4J3CE.js → chunk-FLNAW7C4.js} +2 -2
- package/dist/cli/chunks/{chunk-C3OIBFAA.js → chunk-G5RHFBAY.js} +2 -2
- package/dist/cli/chunks/{chunk-NPCXGX7N.js → chunk-GAHNO6JJ.js} +2 -2
- package/dist/cli/chunks/{chunk-PNRPVQGI.js → chunk-GFWHUQSF.js} +2 -2
- package/dist/cli/chunks/{chunk-OCN53CCK.js → chunk-GJYHWYXR.js} +2 -2
- package/dist/cli/chunks/{chunk-5Z4MO2F3.js → chunk-GQ6TUIKY.js} +1 -1
- package/dist/cli/chunks/{chunk-N736GLWZ.js → chunk-GSKMOPL7.js} +2 -2
- package/dist/cli/chunks/{chunk-43XHGWYH.js → chunk-HCH4Y6XX.js} +2 -2
- package/dist/cli/chunks/{chunk-QP6GL3O5.js → chunk-HGWXF45W.js} +1 -1
- package/dist/cli/chunks/{chunk-PGN4TARY.js → chunk-HJ6ZGVTB.js} +2 -2
- package/dist/cli/chunks/{chunk-M2TG7VDK.js → chunk-HLUXXCHF.js} +1 -1
- package/dist/cli/chunks/{chunk-UMHFTQTR.js → chunk-HVRRLYX6.js} +4 -4
- package/dist/cli/chunks/{chunk-L7PC675Y.js → chunk-I7MQIM2U.js} +1 -1
- package/dist/cli/chunks/{chunk-JSSU4RIK.js → chunk-IESR7TNB.js} +2 -2
- package/dist/cli/chunks/{chunk-H4LYXLAT.js → chunk-IHRXZZQM.js} +1 -1
- package/dist/cli/chunks/{chunk-HV43NX4A.js → chunk-IOKYCMTJ.js} +6 -6
- package/dist/cli/chunks/{chunk-NZQYJCO6.js → chunk-IOQ6ZQ5W.js} +1 -1
- package/dist/cli/chunks/{chunk-JO26SG47.js → chunk-IOYG4VFL.js} +2 -2
- package/dist/cli/chunks/{chunk-6O63ZTVX.js → chunk-IUBJVHNB.js} +2 -2
- package/dist/cli/chunks/{chunk-XSPMLJCQ.js → chunk-J442IZLE.js} +1 -1
- package/dist/cli/chunks/{chunk-LTGQJYYO.js → chunk-J4ELZNLY.js} +2 -2
- package/dist/cli/chunks/chunk-J7I6PABJ.js +153 -0
- package/dist/cli/chunks/chunk-JDIYMZCQ.js +2 -0
- package/dist/cli/chunks/{chunk-TOJF3ZG4.js → chunk-JHQCRRJI.js} +2 -2
- package/dist/cli/chunks/{chunk-QUZ745UQ.js → chunk-JQ3DYUMS.js} +2 -2
- package/dist/cli/chunks/{chunk-P2TPH3TC.js → chunk-KITOPKRG.js} +2 -2
- package/dist/cli/chunks/{chunk-QNQE3EOH.js → chunk-KKU2QGSJ.js} +2 -2
- package/dist/cli/chunks/chunk-KL7OKSU2.js +4 -0
- package/dist/cli/chunks/{chunk-L5VSLPMW.js → chunk-KNSRL6NO.js} +2 -2
- package/dist/cli/chunks/{chunk-INGXD5IX.js → chunk-KPRCB5LT.js} +2 -2
- package/dist/cli/chunks/{chunk-GY4P7KAI.js → chunk-KQYJ4VQ5.js} +1 -1
- package/dist/cli/chunks/{chunk-Z2S7DNFP.js → chunk-KU2AUFGX.js} +2 -2
- package/dist/cli/chunks/{chunk-O5CEL447.js → chunk-KVF4NXGQ.js} +2 -2
- package/dist/cli/chunks/{chunk-2IJO3657.js → chunk-KXCLACFG.js} +2 -2
- package/dist/cli/chunks/{chunk-ZJGFQK27.js → chunk-L2DWPVNJ.js} +1 -1
- package/dist/cli/chunks/{chunk-E7OR6V3V.js → chunk-L6QSTQME.js} +2 -2
- package/dist/cli/chunks/{chunk-RE6JTSDM.js → chunk-LE4QJREF.js} +1 -1
- package/dist/cli/chunks/{chunk-DSQESXL4.js → chunk-LKTTUHLF.js} +2 -2
- package/dist/cli/chunks/{chunk-YGC5QKQ4.js → chunk-LQLPB2T6.js} +2 -2
- package/dist/cli/chunks/{chunk-VGZOPQQY.js → chunk-LRSX2FJM.js} +1 -1
- package/dist/cli/chunks/chunk-M4FRQ4TE.js +12 -0
- package/dist/cli/chunks/chunk-M7WJCTG3.js +2 -0
- package/dist/cli/chunks/{chunk-56NSE3LJ.js → chunk-MAFQV4U4.js} +2 -2
- package/dist/cli/chunks/{chunk-MKYOE7NE.js → chunk-MD43XRX5.js} +1 -1
- package/dist/cli/chunks/{chunk-3TF27MG5.js → chunk-MI5MFHRA.js} +2 -2
- package/dist/cli/chunks/{chunk-JK6PMLQQ.js → chunk-MO55CVMT.js} +32 -32
- package/dist/cli/chunks/{chunk-X6NJOT3V.js → chunk-N7HL5PHH.js} +1 -1
- package/dist/cli/chunks/chunk-NAEWCFQT.js +14 -0
- package/dist/cli/chunks/{chunk-WUGXXNK4.js → chunk-NDJ7P2EP.js} +1 -1
- package/dist/cli/chunks/{chunk-D5GB5PUU.js → chunk-NO3IV5Q5.js} +1 -1
- package/dist/cli/chunks/{chunk-3XACRXBY.js → chunk-NQXXI77K.js} +2 -2
- package/dist/cli/chunks/{chunk-EC65UZ77.js → chunk-NVEWF4JV.js} +1 -1
- package/dist/cli/chunks/{chunk-JI67T6Q2.js → chunk-NZU4ACBZ.js} +2 -2
- package/dist/cli/chunks/chunk-O5W3FIO6.js +63 -0
- package/dist/cli/chunks/{chunk-YEFTK4HD.js → chunk-OAEE6JWQ.js} +2 -2
- package/dist/cli/chunks/{chunk-JAOCHPYX.js → chunk-OCV2XEWQ.js} +2 -2
- package/dist/cli/chunks/{chunk-IDBA5GK2.js → chunk-P3EYRILV.js} +2 -2
- package/dist/cli/chunks/{chunk-4RPBODN5.js → chunk-PEQDY4BO.js} +2 -2
- package/dist/cli/chunks/{chunk-CPPYZYXC.js → chunk-PF7RBAYL.js} +2 -2
- package/dist/cli/chunks/{chunk-WCPSR4MJ.js → chunk-PHT5N7SC.js} +2 -2
- package/dist/cli/chunks/{chunk-O2AAYJUV.js → chunk-PINSJCM3.js} +1 -1
- package/dist/cli/chunks/{chunk-HEDGFKC5.js → chunk-PPUZWYUG.js} +2 -2
- package/dist/cli/chunks/{chunk-XMCSKYDE.js → chunk-QPEOLAAS.js} +1 -1
- package/dist/cli/chunks/{chunk-7MUO4DEH.js → chunk-QQWBWEJS.js} +18 -18
- package/dist/cli/chunks/{chunk-UFP7SN5V.js → chunk-QVDCVD5D.js} +2 -2
- package/dist/cli/chunks/{chunk-NHEG2DLN.js → chunk-RJIEG3NA.js} +2 -2
- package/dist/cli/chunks/{chunk-KJ5A54ZH.js → chunk-RV74I3YO.js} +2 -2
- package/dist/cli/chunks/{chunk-UDSB3XCG.js → chunk-S75SOOZL.js} +2 -2
- package/dist/cli/chunks/{chunk-BPDAQB3F.js → chunk-SASBO5Y5.js} +2 -2
- package/dist/cli/chunks/{chunk-VJBJRFUO.js → chunk-SDLWKRVL.js} +9 -9
- package/dist/cli/chunks/{chunk-J6ASX536.js → chunk-SHKOCGNK.js} +2 -2
- package/dist/cli/chunks/{chunk-J35JWDJE.js → chunk-SI6DPU5D.js} +1 -1
- package/dist/cli/chunks/{chunk-V3MGY76S.js → chunk-SJ6Y4725.js} +2 -2
- package/dist/cli/chunks/{chunk-FTYRPEJS.js → chunk-SR52XP5F.js} +1 -1
- package/dist/cli/chunks/{chunk-ZUE524JL.js → chunk-SSUAAX3F.js} +2 -2
- package/dist/cli/chunks/{chunk-VG32EEUG.js → chunk-SSYAQZXA.js} +2 -2
- package/dist/cli/chunks/{chunk-HTVGHHX2.js → chunk-SUDMM5SO.js} +2 -2
- package/dist/cli/chunks/{chunk-K2SMP4OD.js → chunk-TIUKLYAI.js} +1 -1
- package/dist/cli/chunks/{chunk-VCVRZD4Y.js → chunk-TVGI32MB.js} +33 -33
- package/dist/cli/chunks/{chunk-CAZM63TP.js → chunk-U2A7NHZA.js} +2 -2
- package/dist/cli/chunks/{chunk-WBC6WB32.js → chunk-UE5ZOZR2.js} +2 -2
- package/dist/cli/chunks/{chunk-BQJ7CV53.js → chunk-UHEOGZLX.js} +12 -12
- package/dist/cli/chunks/chunk-UNGBRZDK.js +12 -0
- package/dist/cli/chunks/{chunk-XN3KCKAM.js → chunk-V5NHZV7S.js} +2 -2
- package/dist/cli/chunks/{chunk-UNYTHZDZ.js → chunk-VJCIEHEF.js} +1 -1
- package/dist/cli/chunks/{chunk-5Y7UFHJD.js → chunk-VMDFFTCK.js} +1 -1
- package/dist/cli/chunks/chunk-VSIKHWZ4.js +29 -0
- package/dist/cli/chunks/{chunk-UPWLMIDY.js → chunk-VWPM27GU.js} +2 -2
- package/dist/cli/chunks/{chunk-USAKCGHC.js → chunk-VXFLJNCA.js} +2 -2
- package/dist/cli/chunks/{chunk-WKI46WWN.js → chunk-W5HQUIML.js} +2 -2
- package/dist/cli/chunks/{chunk-Z54G2YOL.js → chunk-WP4RETKG.js} +2 -2
- package/dist/cli/chunks/{chunk-IRPNEXOU.js → chunk-XIIQ5QTT.js} +2 -2
- package/dist/cli/chunks/{chunk-O32BFQV4.js → chunk-XIQW7EFL.js} +2 -2
- package/dist/cli/chunks/{chunk-TW6Z6W4X.js → chunk-XWUWX7BV.js} +13 -13
- package/dist/cli/chunks/{chunk-57FX3GP6.js → chunk-Y4PFUMOU.js} +1 -1
- package/dist/cli/chunks/chunk-YAPLJR7K.js +2 -0
- package/dist/cli/chunks/{chunk-4T7XV5KQ.js → chunk-YLMNVLDK.js} +1 -1
- package/dist/cli/chunks/{chunk-TSP6SU5V.js → chunk-YNMJEDN5.js} +2 -2
- package/dist/cli/chunks/{chunk-PWQWKYBG.js → chunk-YPBSUGMI.js} +1 -1
- package/dist/cli/chunks/{chunk-QP2HLKTS.js → chunk-YRAX7SFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-O3ERGUXH.js → chunk-YTHTQPWR.js} +1 -1
- package/dist/cli/chunks/{chunk-MR2OPUSA.js → chunk-YU2BDRSD.js} +1 -1
- package/dist/cli/chunks/chunk-ZB3LEFYG.js +2 -0
- package/dist/cli/chunks/{chunk-2W5MQDHM.js → chunk-ZFL436FN.js} +2 -2
- package/dist/cli/chunks/{chunk-7MISCSL5.js → chunk-ZJH5MU2I.js} +2 -2
- package/dist/cli/chunks/{chunk-52KOPIMI.js → chunk-ZQ2XW3IP.js} +2 -2
- package/dist/cli/chunks/chunk-ZR2TKVXQ.js +14 -0
- package/dist/cli/chunks/{ci-UMA2SMNW.js → ci-MFUR4CWV.js} +2 -2
- package/dist/cli/chunks/{ci-config-UQSILJFQ.js → ci-config-PNDLQ6XV.js} +2 -2
- package/dist/cli/chunks/{ci-output-U6YZLLKH.js → ci-output-PFZ4M7NC.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ATYQP6X2.js → circuit-breaker-5HH6NLZN.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-6YHFD7AN.js → claude-flow-setup-QCKYLGLC.js} +2 -2
- package/dist/cli/chunks/client-MHQRTZM4.js +2 -0
- package/dist/cli/chunks/{cline-installer-EPE7IOZE.js → cline-installer-EASVPFXR.js} +2 -2
- package/dist/cli/chunks/{code-NUEJ4XYO.js → code-UJXDVYRK.js} +4 -3
- package/dist/cli/chunks/{code-index-extractor-D4DBT6OL.js → code-index-extractor-BZJ3UDP4.js} +2 -2
- package/dist/cli/chunks/{codex-installer-633SM4LR.js → codex-installer-XSQZUVOZ.js} +4 -4
- package/dist/cli/chunks/{completions-WUKVIW3L.js → completions-OWOOJFI2.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-F73ACR5H.js → complexity-analyzer-KP5TOHDT.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-QH42TKMS.js → continuedev-installer-IFKQXLHM.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-Y3XC7BTT.js → copilot-installer-IGJ6KGQY.js} +2 -2
- package/dist/cli/chunks/core-handlers-UAK3LLJE.js +2 -0
- package/dist/cli/chunks/{cost-tracker-57QPV7E3.js → cost-tracker-MMDDNKZB.js} +2 -2
- package/dist/cli/chunks/{coverage-IBCHMBCR.js → coverage-LUH2B7NT.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +2 -0
- package/dist/cli/chunks/{cursor-installer-F4UYQHIN.js → cursor-installer-4YLM5GWM.js} +2 -2
- package/dist/cli/chunks/daemon-CAVZ7OFV.js +18 -0
- package/dist/cli/chunks/{daemon-XR4Q6YZF.js → daemon-MZKVM4CJ.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-ZR5ZD3TW.js → dag-attention-scheduler-X4CYW665.js} +2 -2
- package/dist/cli/chunks/{detect-GEGYURLL.js → detect-7BM2XINO.js} +2 -2
- package/dist/cli/chunks/{dist-node-JU3KT2JO.js → dist-node-Y5APLEYB.js} +2 -2
- package/dist/cli/chunks/{domain-handler-7QI3FJGE.js → domain-handler-X3ZRJNAH.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-O2YRM2PD.js → domain-plugins-2UW5KQJB.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-7J3S2OS6.js → domain-transfer-35W4CIBV.js} +2 -2
- package/dist/cli/chunks/dream-EJY24JN6.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +3 -0
- package/dist/cli/chunks/embedding-space-SBM2MZD2.js +2 -0
- package/dist/cli/chunks/{eval-RVMCIUOR.js → eval-4QA2SROK.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-Z6BF6KYM.js +40 -0
- package/dist/cli/chunks/{fast-paths-QUKPKWKZ.js → fast-paths-FIORX6GN.js} +2 -2
- package/dist/cli/chunks/{feature-flags-K7JXNKJI.js → feature-flags-6LYI2T4G.js} +2 -2
- package/dist/cli/chunks/{feature-flags-5JCSKL2P.js → feature-flags-ZOO7LMIC.js} +2 -2
- package/dist/cli/chunks/file-discovery-UZSFSS4V.js +2 -0
- package/dist/cli/chunks/{fleet-II4Q6HXK.js → fleet-7WF53H4F.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-M7VO2EMS.js → gnn-wrapper-KJ6B7BRM.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ND5CY26N.js → heartbeat-handler-DEKKMOVW.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +2 -0
- package/dist/cli/chunks/hnsw-index-POCPMVJH.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-N3AUUUU7.js → hnsw-legacy-bridge-L27WS27N.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-NZY3E5EN.js → hnswlib-node-4YOQC6L4.js} +2 -2
- package/dist/cli/chunks/{hooks-QVJDTII5.js → hooks-TAOKV4EJ.js} +23 -22
- package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ZRY6MTDV.js → hypergraph-engine-BODRJLHL.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-56DO4XZQ.js → hypergraph-handler-RKMYJNTU.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +2 -0
- package/dist/cli/chunks/{init-guard-DTF4EVUY.js → init-guard-MXHSLSB2.js} +2 -2
- package/dist/cli/chunks/{init-handler-M6CNQHMX.js → init-handler-HUE57IFW.js} +6 -6
- package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +2 -0
- package/dist/cli/chunks/kernel-CCDWT7KS.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-IJN7XKBH.js → kilocode-installer-S333IKYQ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-UKKPGPDC.js → kiro-installer-WM5DLQWC.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +2 -0
- package/dist/cli/chunks/{learning-W2HETWQ4.js → learning-LNHMQLH5.js} +3 -3
- package/dist/cli/chunks/{llm-router-Y546K4VX.js → llm-router-EWFXYZZR.js} +4 -4
- package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +2 -0
- package/dist/cli/chunks/{load-MKAB2AXE.js → load-FGYGWVDK.js} +2 -2
- package/dist/cli/chunks/load-test-UNZUWY3F.js +2 -0
- package/dist/cli/chunks/{mcp-AZKUS6K3.js → mcp-2FHNAAOM.js} +2 -2
- package/dist/cli/chunks/{memory-ZDOQN2KU.js → memory-DZMQ73AB.js} +5 -5
- package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +2 -0
- package/dist/cli/chunks/memory-handlers-MP426XRJ.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-WWVXDHG4.js → multi-model-executor-6F2UAEUW.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-YUJNXXWS.js → opencode-installer-XY3BGOTZ.js} +2 -2
- package/dist/cli/chunks/{orchestrator-Z6PWPLRE.js → orchestrator-B4CNKUOS.js} +17 -17
- package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-TPWPX32U.js → pattern-usage-recorder-R4GUFNMD.js} +2 -2
- package/dist/cli/chunks/{pipeline-4BBGTE4M.js → pipeline-FG5RKVRO.js} +2 -2
- package/dist/cli/chunks/{platform-5GSHXCV5.js → platform-3BT4KEVJ.js} +2 -2
- package/dist/cli/chunks/{plugin-OFDVF5HS.js → plugin-WI4RIN7O.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-NC6MUYGJ.js → prime-radiant-advanced-wasm-7ECDNQFS.js} +2 -2
- package/dist/cli/chunks/project-root-BEANNYWU.js +2 -0
- package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +2 -0
- package/dist/cli/chunks/{protocol-handler-MPOAAEPA.js → protocol-handler-WNODKPGW.js} +2 -2
- package/dist/cli/chunks/{prove-CDKMAIVM.js → prove-5RHAEPYZ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +2 -0
- package/dist/cli/chunks/{quality-ZH4F7R7R.js → quality-WPHR7BGQ.js} +2 -2
- package/dist/cli/chunks/{quality-gate-IDRMW6OE.js → quality-gate-4RKTEZMX.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +2 -0
- package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +2 -0
- package/dist/cli/chunks/{ref-validation-Z5GCGVXK.js → ref-validation-TPAWHOHH.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-IZ2S7PH2.js → roocode-installer-7AVHFNDI.js} +2 -2
- package/dist/cli/chunks/router-EP34O3KB.js +2 -0
- package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +2 -0
- package/dist/cli/chunks/{routing-handler-NAX35VUW.js → routing-handler-YKEDVJSH.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-5YW2SOFF.js → ruvector-commands-JUAMM354.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-IPGCAT6C.js → rvf-store-integrity-VJDUIRTX.js} +2 -2
- package/dist/cli/chunks/safe-db-TCAU4FUT.js +2 -0
- package/dist/cli/chunks/schedule-NB5KV435.js +2 -0
- package/dist/cli/chunks/scheduler-JKXGKVK6.js +2 -0
- package/dist/cli/chunks/{security-3IH4BO5Z.js → security-ORDN3RD2.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-ABY7PAY2.js → shared-rvf-adapter-CF4BCIO7.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-6KENLN2W.js → shared-rvf-dual-writer-C32UBR6D.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +2 -0
- package/dist/cli/chunks/{standalone-memory-RLFAUGOW.js → standalone-memory-OXRJYZXN.js} +2 -2
- package/dist/cli/chunks/{status-handler-FCOZBPE5.js → status-handler-BCX5D4HY.js} +2 -2
- package/dist/cli/chunks/{structural-health-4RDA5UUM.js → structural-health-LFG7RUU6.js} +2 -2
- package/dist/cli/chunks/sync-OSF7C2NL.js +2 -0
- package/dist/cli/chunks/{sync-KGEEXXCC.js → sync-YJEE2K2L.js} +2 -2
- package/dist/cli/chunks/task-handler-6LXKPTXJ.js +64 -0
- package/dist/cli/chunks/{task-handlers-6H7L2UT4.js → task-handlers-CILP36I7.js} +4 -4
- package/dist/cli/chunks/{test-S7IG6EIX.js → test-SD457QJ6.js} +4 -4
- package/dist/cli/chunks/test-runner-process-VKD65QQU.js +2 -0
- package/dist/cli/chunks/{test-scheduling-7XYXI4L2.js → test-scheduling-ISI2O4Q5.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +2 -0
- package/dist/cli/chunks/{token-usage-Y2YTPOFE.js → token-usage-XOC5KG7S.js} +2 -2
- package/dist/cli/chunks/{transformers-UCJ3HHHC.js → transformers-LSLQAARK.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +2 -0
- package/dist/cli/chunks/{types-6CMFPETH.js → types-5BLCGLCR.js} +2 -2
- package/dist/cli/chunks/unified-memory-GI76TXFV.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +2 -0
- package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +2 -0
- package/dist/cli/chunks/{upgrade-K25DN6WU.js → upgrade-RQJYLK3J.js} +2 -2
- package/dist/cli/chunks/{validate-T4V3TBY3.js → validate-QBHWXXCK.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-XSRC576T.js → validate-swarm-IKXBKFB5.js} +2 -2
- package/dist/cli/chunks/visual-security-GZ2MOKWB.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-YOZXHRTN.js → web-tree-sitter-ZF6FIE5R.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-ITPU2IYL.js → windsurf-installer-HQGDZT5D.js} +2 -2
- package/dist/cli/chunks/witness-chain-DCHCAMSQ.js +2 -0
- package/dist/cli/chunks/witness-chain-P3XXXA62.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-DTDSVKOG.js → witness-chain-verifier-PX2OQ6XT.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-EWACWGAW.js → witness-key-manager-RXYQNFJB.js} +2 -2
- package/dist/cli/chunks/{workflow-ZIQ4FV42.js → workflow-FBKCA4H6.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +2 -0
- package/dist/cli/chunks/wrappers-TWSKBTWD.js +2 -0
- package/dist/cli/commands/code.js +4 -0
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
- package/dist/cli/handlers/task-handler.d.ts +5 -0
- package/dist/cli/handlers/task-handler.js +21 -1
- package/dist/cli/utils/task-result.d.ts +11 -0
- package/dist/cli/utils/task-result.js +39 -0
- package/dist/coordination/handlers/test-execution-handlers.js +92 -58
- package/dist/coordination/mincut/mincut-persistence.js +29 -25
- package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
- package/dist/domains/code-intelligence/coordinator.js +46 -13
- package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +32 -7
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +112 -53
- package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
- package/dist/domains/quality-assessment/coordinator.js +2 -1
- package/dist/domains/test-execution/coordinator.js +10 -5
- package/dist/domains/test-execution/interfaces.d.ts +12 -0
- package/dist/domains/test-execution/plugin.js +6 -2
- package/dist/domains/test-execution/services/retry-handler.d.ts +2 -0
- package/dist/domains/test-execution/services/retry-handler.js +14 -9
- package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
- package/dist/domains/test-execution/services/test-executor.js +28 -9
- package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
- package/dist/domains/visual-accessibility/coordinator.js +15 -7
- package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
- package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
- package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
- package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
- package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
- package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
- package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
- package/dist/feedback/coverage-learner.js +13 -9
- package/dist/feedback/test-outcome-tracker.js +13 -9
- package/dist/governance/witness-chain.d.ts +5 -0
- package/dist/governance/witness-chain.js +22 -6
- package/dist/init/init-wizard-hooks.d.ts +1 -1
- package/dist/init/init-wizard-hooks.js +7 -8
- package/dist/init/phases/08-mcp.js +9 -0
- package/dist/init/settings-merge.d.ts +13 -0
- package/dist/init/settings-merge.js +49 -2
- package/dist/integrations/agent-booster-wasm/agent_booster_wasm.js +849 -0
- package/dist/integrations/agent-booster-wasm/agent_booster_wasm_bg.wasm +0 -0
- package/dist/integrations/agent-booster-wasm/index.d.ts +8 -0
- package/dist/integrations/agent-booster-wasm/index.js +25 -2
- package/dist/integrations/agent-booster-wasm/package.json +16 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
- package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
- package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
- package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
- package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
- package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
- package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
- package/dist/integrations/ruvector/delta-tracker.js +16 -0
- package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
- package/dist/integrations/ruvector/sona-persistence.js +49 -24
- package/dist/kernel/unified-memory.d.ts +24 -0
- package/dist/kernel/unified-memory.js +63 -8
- package/dist/learning/aqe-learning-engine.js +1 -1
- package/dist/learning/dream/dream-engine.d.ts +3 -2
- package/dist/learning/dream/dream-engine.js +42 -24
- package/dist/learning/dream/dream-lock-retry.d.ts +38 -0
- package/dist/learning/dream/dream-lock-retry.js +66 -0
- package/dist/learning/dream/speculative-dreamer.js +1 -1
- package/dist/learning/embed-and-insert-pattern.js +4 -2
- package/dist/learning/embedder-endpoint-client.d.ts +31 -0
- package/dist/learning/embedder-endpoint-client.js +103 -10
- package/dist/learning/embedding-space.d.ts +12 -0
- package/dist/learning/embedding-space.js +17 -0
- package/dist/learning/experience-capture-middleware.js +25 -13
- package/dist/learning/experience-capture.js +1 -1
- package/dist/learning/experience-consolidation.d.ts +18 -0
- package/dist/learning/experience-consolidation.js +55 -8
- package/dist/learning/experience-space-verification.d.ts +71 -0
- package/dist/learning/experience-space-verification.js +147 -0
- package/dist/learning/pattern-lifecycle.d.ts +40 -4
- package/dist/learning/pattern-lifecycle.js +153 -76
- package/dist/learning/pattern-null-store.d.ts +5 -0
- package/dist/learning/pattern-null-store.js +8 -0
- package/dist/learning/pattern-promotion.js +6 -3
- package/dist/learning/pattern-store.d.ts +6 -0
- package/dist/learning/pattern-store.js +19 -6
- package/dist/learning/qe-reasoning-bank.js +2 -2
- package/dist/learning/real-embeddings.js +3 -1
- package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
- package/dist/learning/real-qe-reasoning-bank.js +77 -47
- package/dist/learning/rvf-pattern-store.js +6 -2
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +10 -0
- package/dist/mcp/bundle.js +642 -571
- package/dist/mcp/entry.js +4 -0
- package/dist/mcp/handlers/domain-handler-configs.js +2 -0
- package/dist/mcp/handlers/trajectory-judge.js +1 -1
- package/dist/mcp/protocol-server.js +1 -0
- package/dist/mcp/tools/visual-accessibility/index.js +8 -2
- package/dist/mcp/types.d.ts +6 -0
- package/dist/optimization/session-cache.d.ts +17 -1
- package/dist/optimization/session-cache.js +40 -36
- package/dist/planning/goap-planner.d.ts +6 -0
- package/dist/planning/goap-planner.js +35 -19
- package/dist/planning/plan-executor.js +24 -15
- package/dist/routing/co-execution-repository.js +12 -9
- package/dist/routing/routing-feedback.d.ts +8 -0
- package/dist/routing/routing-feedback.js +46 -24
- package/dist/routing/routing-outcomes-migration.js +7 -2
- package/dist/shared/llm/spend-ledger.d.ts +9 -0
- package/dist/shared/llm/spend-ledger.js +64 -39
- package/dist/shared/sqlite-lock-wait.d.ts +27 -0
- package/dist/shared/sqlite-lock-wait.js +37 -0
- package/dist/shared/sqlite-write-queue.d.ts +28 -0
- package/dist/shared/sqlite-write-queue.js +38 -0
- package/dist/shared/test-runner-project.d.ts +69 -0
- package/dist/shared/test-runner-project.js +186 -0
- package/dist/skills/security-visual-testing/index.d.ts +3 -1
- package/dist/skills/security-visual-testing/index.js +49 -35
- package/dist/skills/security-visual-testing/types.d.ts +19 -3
- package/dist/workers/workers/heartbeat-scheduler.js +5 -5
- package/dist/workers/workers/learning-consolidation.js +8 -7
- package/package.json +4 -2
- package/dist/cli/chunks/adapter-23KA2YW7.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-2DLAEZK6.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +0 -2
- package/dist/cli/chunks/base-XPWGYDKD.js +0 -2
- package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +0 -2
- package/dist/cli/chunks/chunk-3FITMWWJ.js +0 -21
- package/dist/cli/chunks/chunk-ARRBXCII.js +0 -4
- package/dist/cli/chunks/chunk-BBYJBZHG.js +0 -14
- package/dist/cli/chunks/chunk-BM3EJLMV.js +0 -153
- package/dist/cli/chunks/chunk-D3ZZ2NLL.js +0 -62
- package/dist/cli/chunks/chunk-DLTB5KCR.js +0 -2
- package/dist/cli/chunks/chunk-DRLSJJIC.js +0 -6
- package/dist/cli/chunks/chunk-HAYKLXCT.js +0 -744
- package/dist/cli/chunks/chunk-HHBF2BZC.js +0 -65
- package/dist/cli/chunks/chunk-K7RT6ITZ.js +0 -2
- package/dist/cli/chunks/chunk-L752CNG3.js +0 -13
- package/dist/cli/chunks/chunk-MQXWG55U.js +0 -12
- package/dist/cli/chunks/chunk-WM2QRIRD.js +0 -14
- package/dist/cli/chunks/chunk-WRC3HLUY.js +0 -29
- package/dist/cli/chunks/chunk-XTZGAG6P.js +0 -27
- package/dist/cli/chunks/chunk-YKQWIXUY.js +0 -2
- package/dist/cli/chunks/client-E43GWLQH.js +0 -2
- package/dist/cli/chunks/core-handlers-R5A3SQDY.js +0 -2
- package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +0 -2
- package/dist/cli/chunks/daemon-BYYPIJ7G.js +0 -18
- package/dist/cli/chunks/dream-6C4NURSE.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-URES5Q6J.js +0 -3
- package/dist/cli/chunks/experience-capture-middleware-SYJQSBKE.js +0 -40
- package/dist/cli/chunks/file-discovery-J5IE5KP7.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +0 -2
- package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +0 -2
- package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +0 -2
- package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +0 -2
- package/dist/cli/chunks/init-wizard-RTLCRWDT.js +0 -2
- package/dist/cli/chunks/kernel-2OWIGGGT.js +0 -2
- package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +0 -2
- package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +0 -2
- package/dist/cli/chunks/load-test-D6QYNIVT.js +0 -2
- package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +0 -2
- package/dist/cli/chunks/memory-handlers-3SQVY7FE.js +0 -2
- package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +0 -2
- package/dist/cli/chunks/project-root-DDGBWDP6.js +0 -2
- package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +0 -2
- package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +0 -2
- package/dist/cli/chunks/real-embeddings-I2UVNNB3.js +0 -2
- package/dist/cli/chunks/router-FT5WJPUH.js +0 -2
- package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-VUIZHTVG.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +0 -2
- package/dist/cli/chunks/safe-db-TDZKUOZJ.js +0 -2
- package/dist/cli/chunks/schedule-CRKTRY2A.js +0 -2
- package/dist/cli/chunks/scheduler-6ZBDVQWN.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +0 -2
- package/dist/cli/chunks/sync-54LUAUTK.js +0 -2
- package/dist/cli/chunks/task-handler-K3OXHYKU.js +0 -62
- package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +0 -2
- package/dist/cli/chunks/token-bootstrap-3QMABE45.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +0 -2
- package/dist/cli/chunks/unified-memory-QARWQKJ2.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +0 -2
- package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +0 -2
- package/dist/cli/chunks/visual-security-O4ALMCXQ.js +0 -2
- package/dist/cli/chunks/witness-chain-B3YW5NMS.js +0 -2
- package/dist/cli/chunks/witness-chain-PIYR72HJ.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-YUG7E3UX.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +0 -2
- package/dist/cli/chunks/wrappers-PW2O27LL.js +0 -2
|
@@ -49,12 +49,14 @@ export class MinCutPersistence {
|
|
|
49
49
|
this.ensureInitialized();
|
|
50
50
|
const id = uuidv4();
|
|
51
51
|
const db = this.memory.getDatabase();
|
|
52
|
-
|
|
52
|
+
// #1274: the queen's snapshot timer and agent events write here, so the
|
|
53
|
+
// writes queue instead of freezing the MCP server on a locked memory.db.
|
|
54
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
53
55
|
INSERT INTO mincut_snapshots (
|
|
54
56
|
id, timestamp, vertex_count, edge_count, total_weight,
|
|
55
57
|
is_connected, component_count, vertices_json, edges_json
|
|
56
58
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
57
|
-
`).run(id, snapshot.timestamp.toISOString(), snapshot.stats.vertexCount, snapshot.stats.edgeCount, snapshot.stats.totalWeight, snapshot.stats.isConnected ? 1 : 0, snapshot.stats.componentCount, JSON.stringify(snapshot.vertices), JSON.stringify(snapshot.edges));
|
|
59
|
+
`).run(id, snapshot.timestamp.toISOString(), snapshot.stats.vertexCount, snapshot.stats.edgeCount, snapshot.stats.totalWeight, snapshot.stats.isConnected ? 1 : 0, snapshot.stats.componentCount, JSON.stringify(snapshot.vertices), JSON.stringify(snapshot.edges)));
|
|
58
60
|
// Enforce retention to prevent unbounded snapshot growth (Issue #258)
|
|
59
61
|
await this.enforceRetention();
|
|
60
62
|
return id;
|
|
@@ -70,20 +72,20 @@ export class MinCutPersistence {
|
|
|
70
72
|
if (!countRow || countRow.count <= maxSnapshots)
|
|
71
73
|
return 0;
|
|
72
74
|
const deleteCount = countRow.count - maxSnapshots;
|
|
73
|
-
db.prepare(`
|
|
75
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
74
76
|
DELETE FROM mincut_snapshots WHERE id IN (
|
|
75
77
|
SELECT id FROM mincut_snapshots ORDER BY created_at ASC LIMIT ?
|
|
76
78
|
)
|
|
77
|
-
`).run(deleteCount);
|
|
79
|
+
`).run(deleteCount));
|
|
78
80
|
// Also trim history
|
|
79
81
|
const historyCount = db.prepare('SELECT COUNT(*) as count FROM mincut_history').get();
|
|
80
82
|
if (historyCount.count > 500) {
|
|
81
83
|
const historyDelete = historyCount.count - 500;
|
|
82
|
-
db.prepare(`
|
|
84
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
83
85
|
DELETE FROM mincut_history WHERE id IN (
|
|
84
86
|
SELECT id FROM mincut_history ORDER BY created_at ASC LIMIT ?
|
|
85
87
|
)
|
|
86
|
-
`).run(historyDelete);
|
|
88
|
+
`).run(historyDelete));
|
|
87
89
|
}
|
|
88
90
|
return deleteCount;
|
|
89
91
|
}
|
|
@@ -121,11 +123,11 @@ export class MinCutPersistence {
|
|
|
121
123
|
async recordHistory(entry) {
|
|
122
124
|
this.ensureInitialized();
|
|
123
125
|
const db = this.memory.getDatabase();
|
|
124
|
-
const result = db.prepare(`
|
|
126
|
+
const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
125
127
|
INSERT INTO mincut_history (
|
|
126
128
|
mincut_value, vertex_count, edge_count, algorithm, duration_ms, snapshot_id
|
|
127
129
|
) VALUES (?, ?, ?, ?, ?, ?)
|
|
128
|
-
`).run(entry.minCutValue, entry.vertexCount, entry.edgeCount, entry.algorithm ?? 'weighted-degree', entry.durationMs ?? null, entry.snapshotId ?? null);
|
|
130
|
+
`).run(entry.minCutValue, entry.vertexCount, entry.edgeCount, entry.algorithm ?? 'weighted-degree', entry.durationMs ?? null, entry.snapshotId ?? null));
|
|
129
131
|
return Number(result.lastInsertRowid);
|
|
130
132
|
}
|
|
131
133
|
/**
|
|
@@ -225,13 +227,15 @@ export class MinCutPersistence {
|
|
|
225
227
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
226
228
|
`);
|
|
227
229
|
const insertMany = db.transaction((vertices) => {
|
|
230
|
+
ids.length = 0; // a retried attempt starts over (#1283)
|
|
228
231
|
for (const weak of vertices) {
|
|
229
232
|
const id = uuidv4();
|
|
230
233
|
insert.run(id, weak.vertexId, weak.weightedDegree, weak.riskScore, weak.reason, weak.vertex.domain ?? null, weak.vertex.type, JSON.stringify(weak.suggestions), snapshotId ?? null);
|
|
231
234
|
ids.push(id);
|
|
232
235
|
}
|
|
233
236
|
});
|
|
234
|
-
|
|
237
|
+
// #1283: queued, so a locked memory.db does not freeze the MCP server.
|
|
238
|
+
await this.memory.writeWhenUnlocked(() => insertMany(weakVertices));
|
|
235
239
|
return ids;
|
|
236
240
|
}
|
|
237
241
|
/**
|
|
@@ -260,11 +264,11 @@ export class MinCutPersistence {
|
|
|
260
264
|
async resolveWeakVertex(id) {
|
|
261
265
|
this.ensureInitialized();
|
|
262
266
|
const db = this.memory.getDatabase();
|
|
263
|
-
const result = db.prepare(`
|
|
267
|
+
const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
264
268
|
UPDATE mincut_weak_vertices
|
|
265
269
|
SET resolved_at = datetime('now')
|
|
266
270
|
WHERE id = ? AND resolved_at IS NULL
|
|
267
|
-
`).run(id);
|
|
271
|
+
`).run(id));
|
|
268
272
|
return result.changes > 0;
|
|
269
273
|
}
|
|
270
274
|
// ==========================================================================
|
|
@@ -276,12 +280,12 @@ export class MinCutPersistence {
|
|
|
276
280
|
async saveAlert(alert) {
|
|
277
281
|
this.ensureInitialized();
|
|
278
282
|
const db = this.memory.getDatabase();
|
|
279
|
-
db.prepare(`
|
|
283
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
280
284
|
INSERT INTO mincut_alerts (
|
|
281
285
|
id, severity, message, mincut_value, threshold,
|
|
282
286
|
affected_vertices_json, remediations_json, acknowledged, timestamp
|
|
283
287
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
284
|
-
`).run(alert.id, alert.severity, alert.message, alert.minCutValue, alert.threshold, JSON.stringify(alert.affectedVertices), JSON.stringify(alert.remediations), alert.acknowledged ? 1 : 0, alert.timestamp.toISOString());
|
|
288
|
+
`).run(alert.id, alert.severity, alert.message, alert.minCutValue, alert.threshold, JSON.stringify(alert.affectedVertices), JSON.stringify(alert.remediations), alert.acknowledged ? 1 : 0, alert.timestamp.toISOString()));
|
|
285
289
|
return alert.id;
|
|
286
290
|
}
|
|
287
291
|
/**
|
|
@@ -303,13 +307,13 @@ export class MinCutPersistence {
|
|
|
303
307
|
async acknowledgeAlert(id, acknowledgedBy) {
|
|
304
308
|
this.ensureInitialized();
|
|
305
309
|
const db = this.memory.getDatabase();
|
|
306
|
-
const result = db.prepare(`
|
|
310
|
+
const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
307
311
|
UPDATE mincut_alerts
|
|
308
312
|
SET acknowledged = 1,
|
|
309
313
|
acknowledged_at = datetime('now'),
|
|
310
314
|
acknowledged_by = ?
|
|
311
315
|
WHERE id = ? AND acknowledged = 0
|
|
312
|
-
`).run(acknowledgedBy ?? null, id);
|
|
316
|
+
`).run(acknowledgedBy ?? null, id));
|
|
313
317
|
return result.changes > 0;
|
|
314
318
|
}
|
|
315
319
|
/**
|
|
@@ -335,14 +339,14 @@ export class MinCutPersistence {
|
|
|
335
339
|
this.ensureInitialized();
|
|
336
340
|
const id = uuidv4();
|
|
337
341
|
const db = this.memory.getDatabase();
|
|
338
|
-
db.prepare(`
|
|
342
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
339
343
|
INSERT INTO mincut_healing_actions (
|
|
340
344
|
id, action_type, action_params_json, success,
|
|
341
345
|
mincut_before, mincut_after, improvement,
|
|
342
346
|
error_message, duration_ms, triggered_by,
|
|
343
347
|
snapshot_before_id, snapshot_after_id
|
|
344
348
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
345
|
-
`).run(id, result.action.type, JSON.stringify(result.action), result.success ? 1 : 0, result.minCutBefore, result.minCutAfter, result.improvement, result.error ?? null, result.durationMs, result.triggeredBy ?? null, result.snapshotBeforeId ?? null, result.snapshotAfterId ?? null);
|
|
349
|
+
`).run(id, result.action.type, JSON.stringify(result.action), result.success ? 1 : 0, result.minCutBefore, result.minCutAfter, result.improvement, result.error ?? null, result.durationMs, result.triggeredBy ?? null, result.snapshotBeforeId ?? null, result.snapshotAfterId ?? null));
|
|
346
350
|
return id;
|
|
347
351
|
}
|
|
348
352
|
/**
|
|
@@ -408,13 +412,13 @@ export class MinCutPersistence {
|
|
|
408
412
|
if (observation.prediction) {
|
|
409
413
|
actualVsPredictedDiff = observation.minCutValue - observation.prediction.predictedMinCut;
|
|
410
414
|
}
|
|
411
|
-
db.prepare(`
|
|
415
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
412
416
|
INSERT INTO mincut_observations (
|
|
413
417
|
id, iteration, mincut_value, weak_vertex_count,
|
|
414
418
|
weak_vertices_json, snapshot_id, prediction_json,
|
|
415
419
|
actual_vs_predicted_diff
|
|
416
420
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
417
|
-
`).run(id, observation.iteration, observation.minCutValue, observation.weakVertices.length, JSON.stringify(observation.weakVertices.map(v => v.vertexId)), observation.snapshotId ?? null, observation.prediction ? JSON.stringify(observation.prediction) : null, actualVsPredictedDiff);
|
|
421
|
+
`).run(id, observation.iteration, observation.minCutValue, observation.weakVertices.length, JSON.stringify(observation.weakVertices.map(v => v.vertexId)), observation.snapshotId ?? null, observation.prediction ? JSON.stringify(observation.prediction) : null, actualVsPredictedDiff));
|
|
418
422
|
return id;
|
|
419
423
|
}
|
|
420
424
|
/**
|
|
@@ -474,18 +478,18 @@ export class MinCutPersistence {
|
|
|
474
478
|
const historyMaxAge = options.historyMaxAge ?? 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
475
479
|
const snapshotMaxAge = options.snapshotMaxAge ?? 24 * 60 * 60 * 1000; // 1 day
|
|
476
480
|
const alertMaxAge = options.alertMaxAge ?? 30 * 24 * 60 * 60 * 1000; // 30 days
|
|
477
|
-
const historyResult = db.prepare(`
|
|
481
|
+
const historyResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
478
482
|
DELETE FROM mincut_history
|
|
479
483
|
WHERE timestamp < ?
|
|
480
|
-
`).run(new Date(now - historyMaxAge).toISOString());
|
|
481
|
-
const snapshotResult = db.prepare(`
|
|
484
|
+
`).run(new Date(now - historyMaxAge).toISOString()));
|
|
485
|
+
const snapshotResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
482
486
|
DELETE FROM mincut_snapshots
|
|
483
487
|
WHERE timestamp < ?
|
|
484
|
-
`).run(new Date(now - snapshotMaxAge).toISOString());
|
|
485
|
-
const alertResult = db.prepare(`
|
|
488
|
+
`).run(new Date(now - snapshotMaxAge).toISOString()));
|
|
489
|
+
const alertResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
486
490
|
DELETE FROM mincut_alerts
|
|
487
491
|
WHERE timestamp < ? AND acknowledged = 1
|
|
488
|
-
`).run(new Date(now - alertMaxAge).toISOString());
|
|
492
|
+
`).run(new Date(now - alertMaxAge).toISOString()));
|
|
489
493
|
return {
|
|
490
494
|
historyDeleted: historyResult.changes,
|
|
491
495
|
snapshotsDeleted: snapshotResult.changes,
|
|
@@ -217,6 +217,10 @@ export declare class CodeIntelligenceCoordinator extends BaseDomainCoordinator<C
|
|
|
217
217
|
protected subscribeToEvents(): void;
|
|
218
218
|
private handleTestRunCompleted;
|
|
219
219
|
private handleFilesChanged;
|
|
220
|
+
/**
|
|
221
|
+
* #1230: makes every given file searchable, one file at a time (only one
|
|
222
|
+
* file's content is held at once), with no per-run file cap.
|
|
223
|
+
*/
|
|
220
224
|
indexForSearch(paths: string[]): Promise<SearchIndexSummary>;
|
|
221
225
|
private loadWorkflowState;
|
|
222
226
|
private saveWorkflowState;
|
|
@@ -59,8 +59,13 @@ const DEFAULT_CONFIG = {
|
|
|
59
59
|
* CQ-002: Extends BaseDomainCoordinator
|
|
60
60
|
*/
|
|
61
61
|
const logger = LoggerFactory.create('code-intelligence');
|
|
62
|
-
/**
|
|
63
|
-
|
|
62
|
+
/**
|
|
63
|
+
* #1230: after this many files in a row fail to embed, an index run stops
|
|
64
|
+
* asking the embedding model and stores the remaining files as text only.
|
|
65
|
+
* Each failed embed costs the client's retries and backoff (about 3s), which
|
|
66
|
+
* would otherwise dominate a large run while the model is down.
|
|
67
|
+
*/
|
|
68
|
+
const MAX_CONSECUTIVE_EMBED_FAILURES = 3;
|
|
64
69
|
export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
65
70
|
memory;
|
|
66
71
|
agentCoordinator;
|
|
@@ -761,19 +766,39 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
|
761
766
|
// ============================================================================
|
|
762
767
|
// Helper Methods
|
|
763
768
|
// ============================================================================
|
|
769
|
+
/**
|
|
770
|
+
* #1230: makes every given file searchable, one file at a time (only one
|
|
771
|
+
* file's content is held at once), with no per-run file cap.
|
|
772
|
+
*/
|
|
764
773
|
async indexForSearch(paths) {
|
|
765
|
-
// Index a subset of files for search
|
|
766
|
-
// Limit to 100 files for performance in a single batch
|
|
767
|
-
const filesToIndex = paths.slice(0, SEARCH_INDEX_FILE_LIMIT);
|
|
768
774
|
let searchable = 0;
|
|
769
|
-
|
|
775
|
+
let withVector = 0;
|
|
776
|
+
let embedFailures = 0;
|
|
777
|
+
let consecutiveEmbedFailures = 0;
|
|
778
|
+
let lastEmbedFailure;
|
|
779
|
+
let notEmbedded = 0;
|
|
780
|
+
for (const path of paths) {
|
|
770
781
|
try {
|
|
771
782
|
// Read actual file content
|
|
772
783
|
const result = await this.fileReader.readFile(path);
|
|
773
|
-
if (result.success
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
784
|
+
if (!result.success || !result.value)
|
|
785
|
+
continue;
|
|
786
|
+
const embed = consecutiveEmbedFailures < MAX_CONSECUTIVE_EMBED_FAILURES;
|
|
787
|
+
const indexed = await this.semanticAnalyzer.indexCode(path, result.value, { embed });
|
|
788
|
+
if (!indexed.success)
|
|
789
|
+
continue;
|
|
790
|
+
searchable++;
|
|
791
|
+
if (indexed.value.vector) {
|
|
792
|
+
withVector++;
|
|
793
|
+
consecutiveEmbedFailures = 0;
|
|
794
|
+
}
|
|
795
|
+
else if (indexed.value.vectorFailure !== undefined) {
|
|
796
|
+
embedFailures++;
|
|
797
|
+
consecutiveEmbedFailures++;
|
|
798
|
+
lastEmbedFailure = indexed.value.vectorFailure;
|
|
799
|
+
}
|
|
800
|
+
else if (!embed) {
|
|
801
|
+
notEmbedded++;
|
|
777
802
|
}
|
|
778
803
|
}
|
|
779
804
|
catch {
|
|
@@ -783,9 +808,17 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
|
783
808
|
// #1224: say when search will not see every indexed file.
|
|
784
809
|
const warnings = [];
|
|
785
810
|
if (searchable < paths.length) {
|
|
786
|
-
warnings.push(`Search covers ${searchable} of ${paths.length} indexed files` +
|
|
787
|
-
|
|
788
|
-
|
|
811
|
+
warnings.push(`Search covers ${searchable} of ${paths.length} indexed files; ` +
|
|
812
|
+
'the other files could not be added to the search index, so code in them is not found by search.');
|
|
813
|
+
}
|
|
814
|
+
// #1231: say which files a semantic search can only match by text.
|
|
815
|
+
if (embedFailures > 0) {
|
|
816
|
+
warnings.push(`The embedding model failed for ${embedFailures} file(s) (${lastEmbedFailure})` +
|
|
817
|
+
(notEmbedded > 0
|
|
818
|
+
? `, so it was not asked for the remaining ${notEmbedded} file(s) of this run`
|
|
819
|
+
: '') +
|
|
820
|
+
`. ${searchable - withVector} of ${searchable} searchable files have no vector; ` +
|
|
821
|
+
'semantic search matches them by text only. Re-index when the model is available.');
|
|
789
822
|
}
|
|
790
823
|
return { searchable, warnings };
|
|
791
824
|
}
|
|
@@ -75,9 +75,18 @@ export interface SearchResults {
|
|
|
75
75
|
* #1224, semantic searches only: 'vector' when an embedding model ranked the
|
|
76
76
|
* results, 'lexical-only' when none was available and query words were
|
|
77
77
|
* matched against the indexed text instead (`reason` says why).
|
|
78
|
+
* #1231: 'partial-vector' when only some indexed files have a vector; the
|
|
79
|
+
* others were matched by text (hits with `matchType: 'lexical'`) and
|
|
80
|
+
* `coverage` gives the counts.
|
|
78
81
|
*/
|
|
79
|
-
mode?: 'vector' | 'lexical-only';
|
|
82
|
+
mode?: 'vector' | 'partial-vector' | 'lexical-only';
|
|
80
83
|
reason?: string;
|
|
84
|
+
/** #1231, semantic searches that ranked by vector: how many indexed files have a vector. */
|
|
85
|
+
coverage?: SearchVectorCoverage;
|
|
86
|
+
}
|
|
87
|
+
export interface SearchVectorCoverage {
|
|
88
|
+
indexedFiles: number;
|
|
89
|
+
filesWithVector: number;
|
|
81
90
|
}
|
|
82
91
|
export interface SearchResult {
|
|
83
92
|
file: string;
|
|
@@ -11,6 +11,17 @@ import { SearchRequest, SearchResults, SearchResult } from '../interfaces';
|
|
|
11
11
|
* reported after searching an index that holds code.
|
|
12
12
|
*/
|
|
13
13
|
export declare const NOTHING_INDEXED_FOR_SEARCH: string;
|
|
14
|
+
export interface IndexCodeOptions {
|
|
15
|
+
/** false: store the text only, without asking the embedding model (#1230: it kept failing this run). */
|
|
16
|
+
embed?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** What indexCode stored for a file. */
|
|
19
|
+
export interface IndexedCode {
|
|
20
|
+
/** A vector from the current embedding model was stored. */
|
|
21
|
+
vector: boolean;
|
|
22
|
+
/** Set when an embedding model is configured but failed for this file. */
|
|
23
|
+
vectorFailure?: string;
|
|
24
|
+
}
|
|
14
25
|
/**
|
|
15
26
|
* Interface for the semantic analyzer service
|
|
16
27
|
*/
|
|
@@ -18,7 +29,7 @@ export interface ISemanticAnalyzerService {
|
|
|
18
29
|
/** Perform semantic search across codebase */
|
|
19
30
|
search(request: SearchRequest): Promise<Result<SearchResults, Error>>;
|
|
20
31
|
/** Index code for semantic search */
|
|
21
|
-
indexCode(file: string, content: string): Promise<Result<
|
|
32
|
+
indexCode(file: string, content: string, options?: IndexCodeOptions): Promise<Result<IndexedCode, Error>>;
|
|
22
33
|
/** Find semantically similar code */
|
|
23
34
|
findSimilar(code: string, limit?: number): Promise<Result<SearchResult[], Error>>;
|
|
24
35
|
/** Analyze code semantics */
|
|
@@ -113,7 +124,7 @@ export declare class SemanticAnalyzerService implements ISemanticAnalyzerService
|
|
|
113
124
|
/**
|
|
114
125
|
* Index code content for semantic search
|
|
115
126
|
*/
|
|
116
|
-
indexCode(file: string, content: string): Promise<Result<
|
|
127
|
+
indexCode(file: string, content: string, options?: IndexCodeOptions): Promise<Result<IndexedCode, Error>>;
|
|
117
128
|
/**
|
|
118
129
|
* Find semantically similar code
|
|
119
130
|
*/
|
|
@@ -139,17 +150,30 @@ export declare class SemanticAnalyzerService implements ISemanticAnalyzerService
|
|
|
139
150
|
private isCurrentModelVector;
|
|
140
151
|
private vectorKeyPrefix;
|
|
141
152
|
private contentKeyPattern;
|
|
153
|
+
/** Visits every indexed file's stored content, one at a time. */
|
|
154
|
+
private forEachIndexed;
|
|
142
155
|
/**
|
|
143
156
|
* #1224: vector search when an embedding model is available. Otherwise (or
|
|
144
157
|
* when no indexed file has a vector from that model) it matches query words
|
|
145
|
-
* against the indexed text and
|
|
146
|
-
* similarity is invented for those hits.
|
|
158
|
+
* against the indexed text and reports `mode: 'lexical-only'` with the
|
|
159
|
+
* reason; no similarity is invented for those hits.
|
|
147
160
|
*/
|
|
148
161
|
private semanticSearch;
|
|
162
|
+
/**
|
|
163
|
+
* #1231: files indexed while the embedding model was unavailable have no
|
|
164
|
+
* vector, so vector search cannot rank them. Match those by text, label the
|
|
165
|
+
* hits 'lexical', and report the result as 'partial-vector' with the counts.
|
|
166
|
+
* Cosine and text-match scores are not comparable, so vector hits come
|
|
167
|
+
* first (by cosine), then lexical hits (by share of query words found); the
|
|
168
|
+
* reason says how many text matches the limit left out.
|
|
169
|
+
*/
|
|
170
|
+
private withVectorlessFiles;
|
|
149
171
|
/** Word-overlap matching for a semantic query when no vectors can be used. */
|
|
150
172
|
private lexicalSearch;
|
|
151
173
|
private exactSearch;
|
|
152
174
|
private fuzzySearch;
|
|
175
|
+
/** Token-overlap match of one indexed file, or null when it is filtered out or scores too low. */
|
|
176
|
+
private fuzzyMatch;
|
|
153
177
|
private extractConcepts;
|
|
154
178
|
private detectPatterns;
|
|
155
179
|
private calculateComplexity;
|
|
@@ -160,9 +184,10 @@ export declare class SemanticAnalyzerService implements ISemanticAnalyzerService
|
|
|
160
184
|
private tokenize;
|
|
161
185
|
private calculateFuzzyScore;
|
|
162
186
|
/**
|
|
163
|
-
* A
|
|
164
|
-
*
|
|
165
|
-
*
|
|
187
|
+
* A query word is found when a content word contains it (or equals it):
|
|
188
|
+
* "login" is found in `loginWithPassword`. #1279: not the reverse; a query
|
|
189
|
+
* word such as `stepHandler450` is not found just because the file has the
|
|
190
|
+
* shorter word `step`, which made almost every file a full match.
|
|
166
191
|
*/
|
|
167
192
|
private tokensMatch;
|
|
168
193
|
private matchesFilters;
|
|
@@ -94,12 +94,12 @@ export class SemanticAnalyzerService {
|
|
|
94
94
|
return err(new Error(NOTHING_INDEXED_FOR_SEARCH));
|
|
95
95
|
}
|
|
96
96
|
let results;
|
|
97
|
-
let
|
|
97
|
+
let semanticOutcome = {};
|
|
98
98
|
switch (type) {
|
|
99
99
|
case 'semantic': {
|
|
100
|
-
const
|
|
101
|
-
results =
|
|
102
|
-
|
|
100
|
+
const { results: hits, ...outcome } = await this.semanticSearch(query, limit, scope, filters);
|
|
101
|
+
results = hits;
|
|
102
|
+
semanticOutcome = outcome;
|
|
103
103
|
break;
|
|
104
104
|
}
|
|
105
105
|
case 'exact':
|
|
@@ -116,11 +116,7 @@ export class SemanticAnalyzerService {
|
|
|
116
116
|
results,
|
|
117
117
|
total: results.length,
|
|
118
118
|
searchTime,
|
|
119
|
-
...
|
|
120
|
-
? lexicalOnlyReason === undefined
|
|
121
|
-
? { mode: 'vector' }
|
|
122
|
-
: { mode: 'lexical-only', reason: lexicalOnlyReason }
|
|
123
|
-
: {}),
|
|
119
|
+
...semanticOutcome,
|
|
124
120
|
});
|
|
125
121
|
}
|
|
126
122
|
catch (error) {
|
|
@@ -130,13 +126,13 @@ export class SemanticAnalyzerService {
|
|
|
130
126
|
/**
|
|
131
127
|
* Index code content for semantic search
|
|
132
128
|
*/
|
|
133
|
-
async indexCode(file, content) {
|
|
129
|
+
async indexCode(file, content, options = {}) {
|
|
134
130
|
try {
|
|
135
131
|
// Extract code metadata
|
|
136
132
|
const metadata = this.extractCodeMetadata(file, content);
|
|
137
133
|
// #1224: store a vector only when a real embedding model produced one;
|
|
138
134
|
// without it the file is still searchable by text.
|
|
139
|
-
const embedded = await this.tryEmbed(content);
|
|
135
|
+
const embedded = options.embed === false ? {} : await this.tryEmbed(content);
|
|
140
136
|
if (embedded.vector) {
|
|
141
137
|
const key = `${this.vectorKeyPrefix()}${this.fileToKey(file)}`;
|
|
142
138
|
await this.memory.storeVector(key, embedded.vector, {
|
|
@@ -153,8 +149,15 @@ export class SemanticAnalyzerService {
|
|
|
153
149
|
// namespace, and a write with {namespace} could not be read back without
|
|
154
150
|
// the same option (issue #491 Bug 2) — which silently dropped every
|
|
155
151
|
// search result (#511 follow-up).
|
|
156
|
-
|
|
157
|
-
|
|
152
|
+
const stored = embedded.vector
|
|
153
|
+
? { file, content, metadata, embeddingModel: this.embeddingModelId() }
|
|
154
|
+
: { file, content, metadata };
|
|
155
|
+
await this.memory.set(`${this.config.namespace}:content:${this.fileToKey(file)}`, stored);
|
|
156
|
+
return ok(embedded.vector
|
|
157
|
+
? { vector: true }
|
|
158
|
+
: this.embedder && embedded.reason
|
|
159
|
+
? { vector: false, vectorFailure: embedded.reason }
|
|
160
|
+
: { vector: false });
|
|
158
161
|
}
|
|
159
162
|
catch (error) {
|
|
160
163
|
return err(toError(error));
|
|
@@ -284,21 +287,31 @@ export class SemanticAnalyzerService {
|
|
|
284
287
|
contentKeyPattern() {
|
|
285
288
|
return `${this.config.namespace}:content:*`;
|
|
286
289
|
}
|
|
290
|
+
/** Visits every indexed file's stored content, one at a time. */
|
|
291
|
+
async forEachIndexed(visit) {
|
|
292
|
+
const keys = await this.memory.search(this.contentKeyPattern(), MAX_INDEXED_FILES_SCANNED);
|
|
293
|
+
for (const key of keys) {
|
|
294
|
+
const stored = await this.memory.get(key);
|
|
295
|
+
if (stored)
|
|
296
|
+
visit(stored);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
287
299
|
// ============================================================================
|
|
288
300
|
// Private Search Methods
|
|
289
301
|
// ============================================================================
|
|
290
302
|
/**
|
|
291
303
|
* #1224: vector search when an embedding model is available. Otherwise (or
|
|
292
304
|
* when no indexed file has a vector from that model) it matches query words
|
|
293
|
-
* against the indexed text and
|
|
294
|
-
* similarity is invented for those hits.
|
|
305
|
+
* against the indexed text and reports `mode: 'lexical-only'` with the
|
|
306
|
+
* reason; no similarity is invented for those hits.
|
|
295
307
|
*/
|
|
296
308
|
async semanticSearch(query, limit, scope, filters) {
|
|
297
309
|
const embedded = await this.tryEmbed(query);
|
|
298
310
|
if (!embedded.vector) {
|
|
299
311
|
return {
|
|
300
312
|
results: await this.lexicalSearch(query, limit, scope, filters),
|
|
301
|
-
|
|
313
|
+
mode: 'lexical-only',
|
|
314
|
+
reason: embedded.reason,
|
|
302
315
|
};
|
|
303
316
|
}
|
|
304
317
|
// Only this namespace's vectors, from the model that embedded the query.
|
|
@@ -310,7 +323,8 @@ export class SemanticAnalyzerService {
|
|
|
310
323
|
if (vectorResults.length === 0) {
|
|
311
324
|
return {
|
|
312
325
|
results: await this.lexicalSearch(query, limit, scope, filters),
|
|
313
|
-
|
|
326
|
+
mode: 'lexical-only',
|
|
327
|
+
reason: `no indexed file has an embedding from ${this.embeddingModelId()}; re-index to enable vector search`,
|
|
314
328
|
};
|
|
315
329
|
}
|
|
316
330
|
// Convert to search results with filtering
|
|
@@ -345,7 +359,53 @@ export class SemanticAnalyzerService {
|
|
|
345
359
|
break;
|
|
346
360
|
}
|
|
347
361
|
}
|
|
348
|
-
return
|
|
362
|
+
return this.withVectorlessFiles(query, results, limit, scope, filters);
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* #1231: files indexed while the embedding model was unavailable have no
|
|
366
|
+
* vector, so vector search cannot rank them. Match those by text, label the
|
|
367
|
+
* hits 'lexical', and report the result as 'partial-vector' with the counts.
|
|
368
|
+
* Cosine and text-match scores are not comparable, so vector hits come
|
|
369
|
+
* first (by cosine), then lexical hits (by share of query words found); the
|
|
370
|
+
* reason says how many text matches the limit left out.
|
|
371
|
+
*/
|
|
372
|
+
async withVectorlessFiles(query, vectorHits, limit, scope, filters) {
|
|
373
|
+
const model = this.embeddingModelId();
|
|
374
|
+
const vectorFiles = new Set(vectorHits.map((hit) => hit.file));
|
|
375
|
+
const queryTokens = this.tokenize(query.toLowerCase());
|
|
376
|
+
const lexicalHits = [];
|
|
377
|
+
let indexedFiles = 0;
|
|
378
|
+
let withoutVector = 0;
|
|
379
|
+
await this.forEachIndexed((stored) => {
|
|
380
|
+
indexedFiles++;
|
|
381
|
+
if (stored.embeddingModel === model)
|
|
382
|
+
return;
|
|
383
|
+
withoutVector++;
|
|
384
|
+
if (vectorFiles.has(stored.file))
|
|
385
|
+
return;
|
|
386
|
+
const hit = this.fuzzyMatch(queryTokens, stored, scope, filters);
|
|
387
|
+
if (hit)
|
|
388
|
+
lexicalHits.push({ ...hit, matchType: 'lexical' });
|
|
389
|
+
});
|
|
390
|
+
const coverage = { indexedFiles, filesWithVector: indexedFiles - withoutVector };
|
|
391
|
+
if (withoutVector === 0) {
|
|
392
|
+
return { results: vectorHits, mode: 'vector', coverage };
|
|
393
|
+
}
|
|
394
|
+
const byScore = (a, b) => b.score - a.score;
|
|
395
|
+
const results = [...[...vectorHits].sort(byScore), ...lexicalHits.sort(byScore)].slice(0, limit);
|
|
396
|
+
const droppedLexical = vectorHits.length + lexicalHits.length - results.length;
|
|
397
|
+
return {
|
|
398
|
+
results,
|
|
399
|
+
mode: 'partial-vector',
|
|
400
|
+
reason: `${withoutVector} of ${indexedFiles} indexed files have no embedding from ${model} ` +
|
|
401
|
+
'(it was unavailable when they were indexed, or an older aqe version indexed them), ' +
|
|
402
|
+
'so they were matched by text only (matchType "lexical", listed after the vector hits); ' +
|
|
403
|
+
(droppedLexical > 0
|
|
404
|
+
? `${droppedLexical} more text match(es) were left out by the limit of ${limit}; `
|
|
405
|
+
: '') +
|
|
406
|
+
're-index to rank them by vector',
|
|
407
|
+
coverage,
|
|
408
|
+
};
|
|
349
409
|
}
|
|
350
410
|
/** Word-overlap matching for a semantic query when no vectors can be used. */
|
|
351
411
|
async lexicalSearch(query, limit, scope, filters) {
|
|
@@ -390,39 +450,38 @@ export class SemanticAnalyzerService {
|
|
|
390
450
|
}
|
|
391
451
|
async fuzzySearch(query, limit, scope, filters) {
|
|
392
452
|
const results = [];
|
|
393
|
-
const keys = await this.memory.search(this.contentKeyPattern(), MAX_INDEXED_FILES_SCANNED);
|
|
394
453
|
const queryTokens = this.tokenize(query.toLowerCase());
|
|
395
|
-
|
|
396
|
-
const
|
|
397
|
-
if (
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
if (scope && scope.length > 0) {
|
|
401
|
-
const matchesScope = scope.some((s) => stored.file.includes(s));
|
|
402
|
-
if (!matchesScope)
|
|
403
|
-
continue;
|
|
404
|
-
}
|
|
405
|
-
// Apply filters
|
|
406
|
-
if (filters && !this.matchesFilters(stored.metadata, filters)) {
|
|
407
|
-
continue;
|
|
408
|
-
}
|
|
409
|
-
// Fuzzy match using token overlap
|
|
410
|
-
const contentTokens = this.tokenize(stored.content.toLowerCase());
|
|
411
|
-
const score = this.calculateFuzzyScore(queryTokens, contentTokens);
|
|
412
|
-
if (score >= this.config.minScore) {
|
|
413
|
-
const matchedTokens = queryTokens.filter((t) => contentTokens.some((ct) => this.tokensMatch(t, ct)));
|
|
414
|
-
results.push({
|
|
415
|
-
file: stored.file,
|
|
416
|
-
snippet: this.extractSnippet(stored.content, 200),
|
|
417
|
-
score,
|
|
418
|
-
highlights: matchedTokens,
|
|
419
|
-
metadata: stored.metadata,
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
}
|
|
454
|
+
await this.forEachIndexed((stored) => {
|
|
455
|
+
const hit = this.fuzzyMatch(queryTokens, stored, scope, filters);
|
|
456
|
+
if (hit)
|
|
457
|
+
results.push(hit);
|
|
458
|
+
});
|
|
423
459
|
// Sort by score and limit
|
|
424
460
|
return results.sort((a, b) => b.score - a.score).slice(0, limit);
|
|
425
461
|
}
|
|
462
|
+
/** Token-overlap match of one indexed file, or null when it is filtered out or scores too low. */
|
|
463
|
+
fuzzyMatch(queryTokens, stored, scope, filters) {
|
|
464
|
+
// Apply scope filter
|
|
465
|
+
if (scope && scope.length > 0 && !scope.some((s) => stored.file.includes(s))) {
|
|
466
|
+
return null;
|
|
467
|
+
}
|
|
468
|
+
// Apply filters
|
|
469
|
+
if (filters && !this.matchesFilters(stored.metadata, filters)) {
|
|
470
|
+
return null;
|
|
471
|
+
}
|
|
472
|
+
// Fuzzy match using token overlap
|
|
473
|
+
const contentTokens = this.tokenize(stored.content.toLowerCase());
|
|
474
|
+
const score = this.calculateFuzzyScore(queryTokens, contentTokens);
|
|
475
|
+
if (score < this.config.minScore)
|
|
476
|
+
return null;
|
|
477
|
+
return {
|
|
478
|
+
file: stored.file,
|
|
479
|
+
snippet: this.extractSnippet(stored.content, 200),
|
|
480
|
+
score,
|
|
481
|
+
highlights: queryTokens.filter((t) => contentTokens.some((ct) => this.tokensMatch(t, ct))),
|
|
482
|
+
metadata: stored.metadata,
|
|
483
|
+
};
|
|
484
|
+
}
|
|
426
485
|
// ============================================================================
|
|
427
486
|
// Private Analysis Methods
|
|
428
487
|
// ============================================================================
|
|
@@ -625,13 +684,13 @@ export class SemanticAnalyzerService {
|
|
|
625
684
|
return matches / queryTokens.length;
|
|
626
685
|
}
|
|
627
686
|
/**
|
|
628
|
-
* A
|
|
629
|
-
*
|
|
630
|
-
*
|
|
687
|
+
* A query word is found when a content word contains it (or equals it):
|
|
688
|
+
* "login" is found in `loginWithPassword`. #1279: not the reverse; a query
|
|
689
|
+
* word such as `stepHandler450` is not found just because the file has the
|
|
690
|
+
* shorter word `step`, which made almost every file a full match.
|
|
631
691
|
*/
|
|
632
692
|
tokensMatch(queryToken, contentToken) {
|
|
633
|
-
return contentToken.includes(queryToken)
|
|
634
|
-
(contentToken.length >= 3 && queryToken.includes(contentToken));
|
|
693
|
+
return contentToken.includes(queryToken);
|
|
635
694
|
}
|
|
636
695
|
matchesFilters(metadata, filters) {
|
|
637
696
|
for (const filter of filters) {
|
|
@@ -683,7 +742,7 @@ export class SemanticAnalyzerService {
|
|
|
683
742
|
const queryTokens = this.tokenize(query.toLowerCase());
|
|
684
743
|
const contentTokens = this.tokenize(content.toLowerCase());
|
|
685
744
|
for (const qt of queryTokens) {
|
|
686
|
-
const match = contentTokens.find((ct) =>
|
|
745
|
+
const match = contentTokens.find((ct) => this.tokensMatch(qt, ct));
|
|
687
746
|
if (match && !highlights.includes(match)) {
|
|
688
747
|
highlights.push(match);
|
|
689
748
|
}
|
|
@@ -512,7 +512,7 @@ Provide:
|
|
|
512
512
|
const contextFingerprint = `${experience.domain}:${experience.action}`;
|
|
513
513
|
for (const patternId of experience.appliedPatternIds ?? []) {
|
|
514
514
|
try {
|
|
515
|
-
nullStore.
|
|
515
|
+
await nullStore.recordNullWhenUnlocked({
|
|
516
516
|
patternId,
|
|
517
517
|
contextFingerprint,
|
|
518
518
|
failureMode: String(experience.result.outcome?.error ?? experience.action),
|
|
@@ -284,7 +284,8 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
284
284
|
// ADR-070: Record quality gate decision in witness chain
|
|
285
285
|
try {
|
|
286
286
|
const wc = await getWitnessChain();
|
|
287
|
-
|
|
287
|
+
// #1283: queued, so a locked memory.db does not freeze the MCP server.
|
|
288
|
+
await wc.appendWhenUnlocked(finalResult.passed ? 'QUALITY_GATE_PASS' : 'QUALITY_GATE_FAIL', { gateName: request.gateName, passed: finalResult.passed, score: finalResult.overallScore, failedChecks: finalResult.failedChecks }, 'quality-gate');
|
|
288
289
|
}
|
|
289
290
|
catch (_wcErr) { /* non-critical */ }
|
|
290
291
|
// ADR-062: Monotonic gate threshold ratcheting
|