agentic-qe 3.15.14 → 3.15.15
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 +46 -0
- package/assets/agents/v3/templates/qx-report-template.html +1 -1
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-QU6INSKP.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-EUF4XVUC.js +2 -0
- package/dist/cli/chunks/{agent-handler-P3IY7XEE.js → agent-handler-MOX6PSIQ.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WWKC2H3G.js → agent-memory-branch-AEXKIGDG.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +2 -0
- package/dist/cli/chunks/{arena-EIV5OALF.js → arena-IQ5ZZDRF.js} +2 -2
- package/dist/cli/chunks/{arena-4BMFF6BS.js → arena-M7GA3CVG.js} +4 -4
- package/dist/cli/chunks/{audit-DNTI453H.js → audit-4IPBMKWB.js} +3 -3
- package/dist/cli/chunks/base-OTGSN6IC.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-TQBQGNC6.js → better-sqlite3-IKDKJ2IE.js} +2 -2
- package/dist/cli/chunks/{brain-handler-HY57CNAO.js → brain-handler-5NQUDH4W.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-THPMZPHQ.js → branch-enumerator-KSXELWRC.js} +2 -2
- package/dist/cli/chunks/{browser-O6JJOZCK.js → browser-6LACARWE.js} +2 -2
- package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +2 -0
- package/dist/cli/chunks/{chunk-7724KXM2.js → chunk-22UKJGGN.js} +3 -3
- package/dist/cli/chunks/{chunk-3XACRXBY.js → chunk-27HE2BHC.js} +2 -2
- package/dist/cli/chunks/{chunk-3TF27MG5.js → chunk-2CKERSMB.js} +2 -2
- package/dist/cli/chunks/{chunk-TOJF3ZG4.js → chunk-2IIXCEMS.js} +2 -2
- package/dist/cli/chunks/{chunk-3FITMWWJ.js → chunk-2LUTPMBO.js} +2 -2
- package/dist/cli/chunks/{chunk-MB4UKUBV.js → chunk-2ZFLULL4.js} +2 -2
- package/dist/cli/chunks/{chunk-6NIGSY5L.js → chunk-337Z52QM.js} +2 -2
- package/dist/cli/chunks/{chunk-4T7XV5KQ.js → chunk-3CYNZFKH.js} +1 -1
- package/dist/cli/chunks/chunk-3HVFIITW.js +2 -0
- package/dist/cli/chunks/{chunk-2QLE6NDW.js → chunk-3J3RNJNX.js} +1 -1
- package/dist/cli/chunks/{chunk-E3QIQMMN.js → chunk-4ATQP3PR.js} +1 -1
- package/dist/cli/chunks/{chunk-EIEEST4T.js → chunk-4D4CWP72.js} +2 -2
- package/dist/cli/chunks/{chunk-WCM6WE7G.js → chunk-4HKAD25N.js} +3 -3
- package/dist/cli/chunks/{chunk-HEDGFKC5.js → chunk-4X3SWKBA.js} +2 -2
- package/dist/cli/chunks/{chunk-IQRPR4KB.js → chunk-5AFVEWMT.js} +2 -2
- package/dist/cli/chunks/{chunk-VCVRZD4Y.js → chunk-5C62XMJR.js} +3 -3
- package/dist/cli/chunks/{chunk-UDSB3XCG.js → chunk-5G4UFTV4.js} +2 -2
- package/dist/cli/chunks/{chunk-BNG4J3CE.js → chunk-5I7357KS.js} +2 -2
- package/dist/cli/chunks/{chunk-DRLSJJIC.js → chunk-5KA5TVPR.js} +2 -2
- package/dist/cli/chunks/{chunk-WZQADC5R.js → chunk-5PTAFGJT.js} +2 -2
- package/dist/cli/chunks/{chunk-M2TG7VDK.js → chunk-6BRQPHMZ.js} +1 -1
- package/dist/cli/chunks/{chunk-J35JWDJE.js → chunk-6KCSKGVY.js} +1 -1
- package/dist/cli/chunks/{chunk-QUZ745UQ.js → chunk-6LE362LZ.js} +2 -2
- package/dist/cli/chunks/{chunk-L752CNG3.js → chunk-6NBRMD25.js} +3 -3
- package/dist/cli/chunks/{chunk-56NSE3LJ.js → chunk-6RBTS3NF.js} +2 -2
- package/dist/cli/chunks/{chunk-E7OR6V3V.js → chunk-6YVMX2TC.js} +2 -2
- package/dist/cli/chunks/{chunk-WKI46WWN.js → chunk-73PBAWAF.js} +2 -2
- package/dist/cli/chunks/{chunk-HSDWPQQY.js → chunk-74YG72NQ.js} +3 -3
- package/dist/cli/chunks/{chunk-5PLBQZ5J.js → chunk-76P32JVU.js} +1 -1
- package/dist/cli/chunks/{chunk-FTYRPEJS.js → chunk-7ACCBHRB.js} +1 -1
- package/dist/cli/chunks/{chunk-O3ERGUXH.js → chunk-7BLZHFKD.js} +1 -1
- package/dist/cli/chunks/{chunk-BM3EJLMV.js → chunk-7O45RQHF.js} +2 -2
- package/dist/cli/chunks/{chunk-JSSU4RIK.js → chunk-7XB3FCKM.js} +2 -2
- package/dist/cli/chunks/{chunk-7TH4PJSU.js → chunk-AHMWD6JG.js} +2 -2
- package/dist/cli/chunks/{chunk-X7CUI7KH.js → chunk-AJPROCDW.js} +2 -2
- package/dist/cli/chunks/{chunk-TW6Z6W4X.js → chunk-AKZO6GGG.js} +13 -13
- package/dist/cli/chunks/{chunk-L7PC675Y.js → chunk-AOKKUB5F.js} +1 -1
- package/dist/cli/chunks/{chunk-UNYTHZDZ.js → chunk-AP2W7Z3A.js} +1 -1
- package/dist/cli/chunks/{chunk-VG32EEUG.js → chunk-BBRROA3Z.js} +2 -2
- package/dist/cli/chunks/{chunk-2IJO3657.js → chunk-BDKEAGQ2.js} +2 -2
- package/dist/cli/chunks/{chunk-YEFTK4HD.js → chunk-BFQTLF5X.js} +2 -2
- package/dist/cli/chunks/{chunk-JB7R77SH.js → chunk-BLL2XU7A.js} +2 -2
- package/dist/cli/chunks/{chunk-UMHFTQTR.js → chunk-BP5T3OEV.js} +2 -2
- package/dist/cli/chunks/{chunk-C3OIBFAA.js → chunk-BQ47GQPK.js} +2 -2
- package/dist/cli/chunks/{chunk-IDBA5GK2.js → chunk-BU4UQR36.js} +2 -2
- package/dist/cli/chunks/{chunk-U6IOQKCT.js → chunk-BZULJMGH.js} +2 -2
- package/dist/cli/chunks/{chunk-X6NJOT3V.js → chunk-C4KLXFJP.js} +1 -1
- package/dist/cli/chunks/{chunk-KJ5A54ZH.js → chunk-C4RTAVC6.js} +2 -2
- package/dist/cli/chunks/{chunk-ZUE524JL.js → chunk-C5CXL3JP.js} +2 -2
- package/dist/cli/chunks/{chunk-YE54T2NQ.js → chunk-CAOUV5GZ.js} +2 -2
- package/dist/cli/chunks/{chunk-7MISCSL5.js → chunk-CBK5CT6T.js} +2 -2
- package/dist/cli/chunks/{chunk-Z54G2YOL.js → chunk-DEKR3CTS.js} +2 -2
- package/dist/cli/chunks/{chunk-57DRT6UA.js → chunk-DKX4GNRU.js} +2 -2
- package/dist/cli/chunks/{chunk-HTVGHHX2.js → chunk-DUKE27HC.js} +2 -2
- package/dist/cli/chunks/{chunk-O756AOUX.js → chunk-DURD37JZ.js} +2 -2
- package/dist/cli/chunks/{chunk-OGEIHS76.js → chunk-E3MRDIZF.js} +1 -1
- package/dist/cli/chunks/{chunk-N736GLWZ.js → chunk-E56PVVWC.js} +2 -2
- package/dist/cli/chunks/{chunk-GY4P7KAI.js → chunk-E5G4WZ2T.js} +1 -1
- package/dist/cli/chunks/{chunk-JI67T6Q2.js → chunk-EBTNMQSS.js} +2 -2
- package/dist/cli/chunks/{chunk-P2TPH3TC.js → chunk-EFUJDMNC.js} +2 -2
- package/dist/cli/chunks/{chunk-7T6L3LFN.js → chunk-EKP2SC77.js} +2 -2
- package/dist/cli/chunks/{chunk-WRC3HLUY.js → chunk-EMSZVUYA.js} +3 -3
- package/dist/cli/chunks/{chunk-NZQYJCO6.js → chunk-ERN56H6S.js} +1 -1
- package/dist/cli/chunks/{chunk-INGXD5IX.js → chunk-FOOW4JVS.js} +2 -2
- package/dist/cli/chunks/{chunk-PGN4TARY.js → chunk-FTRSS64D.js} +2 -2
- package/dist/cli/chunks/{chunk-LTGQJYYO.js → chunk-G242G224.js} +2 -2
- package/dist/cli/chunks/{chunk-ARRBXCII.js → chunk-G6RDCCFV.js} +2 -2
- package/dist/cli/chunks/{chunk-7SQTLUEN.js → chunk-GCHYOPRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-G7HGUQAE.js → chunk-GGQGCT4Y.js} +2 -2
- package/dist/cli/chunks/{chunk-AYLEH2UF.js → chunk-GKSMRBHU.js} +1 -1
- package/dist/cli/chunks/{chunk-JO26SG47.js → chunk-GQABPCQE.js} +2 -2
- package/dist/cli/chunks/{chunk-O2AAYJUV.js → chunk-GV2QE5TO.js} +1 -1
- package/dist/cli/chunks/{chunk-K2SMP4OD.js → chunk-H5DER3JY.js} +1 -1
- package/dist/cli/chunks/{chunk-HAYKLXCT.js → chunk-HH4ED4F7.js} +11 -11
- package/dist/cli/chunks/{chunk-L5VSLPMW.js → chunk-HL2ANKN3.js} +2 -2
- package/dist/cli/chunks/{chunk-USAKCGHC.js → chunk-HTZSRMHW.js} +2 -2
- package/dist/cli/chunks/{chunk-MR2OPUSA.js → chunk-IXL5ZHWJ.js} +1 -1
- package/dist/cli/chunks/{chunk-6P4Q4RTC.js → chunk-J3FP5UGL.js} +1 -1
- package/dist/cli/chunks/{chunk-6OI5SK7M.js → chunk-JCQGJGGZ.js} +1 -1
- package/dist/cli/chunks/{chunk-NKOLILT7.js → chunk-JCZCJE6X.js} +2 -2
- package/dist/cli/chunks/{chunk-VGZOPQQY.js → chunk-JKJOB65O.js} +1 -1
- package/dist/cli/chunks/{chunk-43XHGWYH.js → chunk-JUDUBQHA.js} +2 -2
- package/dist/cli/chunks/{chunk-NHEG2DLN.js → chunk-JW74KRBC.js} +2 -2
- package/dist/cli/chunks/{chunk-ZJGFQK27.js → chunk-K3WZICFA.js} +1 -1
- package/dist/cli/chunks/{chunk-5Y7UFHJD.js → chunk-K3XBQC3R.js} +1 -1
- package/dist/cli/chunks/{chunk-JJHLGGPP.js → chunk-KCQNFBBR.js} +1 -1
- package/dist/cli/chunks/{chunk-U4TML2VD.js → chunk-KJBPB7P5.js} +2 -2
- package/dist/cli/chunks/{chunk-6O63ZTVX.js → chunk-KLTMOXIK.js} +2 -2
- package/dist/cli/chunks/{chunk-XMCSKYDE.js → chunk-L32JNNKL.js} +1 -1
- package/dist/cli/chunks/{chunk-UPWLMIDY.js → chunk-LB2LGEDP.js} +2 -2
- package/dist/cli/chunks/{chunk-4RPBODN5.js → chunk-LHMQIZ6B.js} +2 -2
- package/dist/cli/chunks/{chunk-RE6JTSDM.js → chunk-LJMYRTJ7.js} +1 -1
- package/dist/cli/chunks/{chunk-57FX3GP6.js → chunk-LNX74WHQ.js} +1 -1
- package/dist/cli/chunks/{chunk-52KOPIMI.js → chunk-LTQVUAPH.js} +2 -2
- package/dist/cli/chunks/{chunk-H3C5FJRH.js → chunk-LVABQNRF.js} +2 -2
- package/dist/cli/chunks/{chunk-V3MGY76S.js → chunk-LYJHUNBK.js} +2 -2
- package/dist/cli/chunks/{chunk-QNQE3EOH.js → chunk-M4CJCPCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-D5GB5PUU.js → chunk-M4WMSCAE.js} +1 -1
- package/dist/cli/chunks/{chunk-TWOV3I3A.js → chunk-MIA447GY.js} +1 -1
- package/dist/cli/chunks/{chunk-CAZM63TP.js → chunk-MPFPWJTH.js} +2 -2
- package/dist/cli/chunks/{chunk-BPDAQB3F.js → chunk-MV55NXTD.js} +2 -2
- package/dist/cli/chunks/{chunk-EC65UZ77.js → chunk-NQS3BWS6.js} +1 -1
- package/dist/cli/chunks/{chunk-DSQESXL4.js → chunk-NWIIYHT6.js} +2 -2
- package/dist/cli/chunks/{chunk-4WLIOPHX.js → chunk-O6EWL5DQ.js} +2 -2
- package/dist/cli/chunks/{chunk-QP2HLKTS.js → chunk-OBDONJQM.js} +2 -2
- package/dist/cli/chunks/{chunk-BQJ7CV53.js → chunk-OLZH5LRT.js} +12 -12
- package/dist/cli/chunks/{chunk-H4LYXLAT.js → chunk-OQG3UQQ7.js} +1 -1
- package/dist/cli/chunks/{chunk-E2JLAW3U.js → chunk-PFQCV6YS.js} +3 -3
- package/dist/cli/chunks/{chunk-JAOCHPYX.js → chunk-PS6UMZVK.js} +2 -2
- package/dist/cli/chunks/{chunk-K7GFYFBO.js → chunk-PXATBHWN.js} +2 -2
- package/dist/cli/chunks/{chunk-CPPYZYXC.js → chunk-PYPS65P7.js} +2 -2
- package/dist/cli/chunks/{chunk-HHBF2BZC.js → chunk-Q6I4SIUU.js} +4 -4
- package/dist/cli/chunks/{chunk-QP6GL3O5.js → chunk-QFGYH6HD.js} +1 -1
- package/dist/cli/chunks/{chunk-BBYJBZHG.js → chunk-QGBGSQ2E.js} +2 -2
- package/dist/cli/chunks/{chunk-XTZGAG6P.js → chunk-QRKTBSZT.js} +2 -2
- package/dist/cli/chunks/{chunk-FJOIBZUB.js → chunk-R6LHJ7ME.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2S7DNFP.js → chunk-RBKUU7WF.js} +2 -2
- package/dist/cli/chunks/{chunk-PWQWKYBG.js → chunk-RDMRY7CT.js} +1 -1
- package/dist/cli/chunks/{chunk-65EE2EST.js → chunk-RIRZHOS2.js} +2 -2
- package/dist/cli/chunks/{chunk-D3ZZ2NLL.js → chunk-SHRI7TKJ.js} +2 -2
- package/dist/cli/chunks/{chunk-CIINJHOX.js → chunk-SJCKCSN3.js} +1 -1
- package/dist/cli/chunks/{chunk-X6Q2N5S5.js → chunk-SON6ZRH3.js} +2 -2
- package/dist/cli/chunks/{chunk-2UZBLC5H.js → chunk-SZAZQZWI.js} +2 -2
- package/dist/cli/chunks/{chunk-2W5MQDHM.js → chunk-T4GE7MPI.js} +2 -2
- package/dist/cli/chunks/{chunk-JK6PMLQQ.js → chunk-T66PPF4D.js} +2 -2
- package/dist/cli/chunks/{chunk-OLUOVNUF.js → chunk-T67R2MUN.js} +2 -2
- package/dist/cli/chunks/{chunk-O32BFQV4.js → chunk-TDQWTSBS.js} +2 -2
- package/dist/cli/chunks/{chunk-YGOSSVY5.js → chunk-TODNOP7C.js} +2 -2
- package/dist/cli/chunks/{chunk-WBC6WB32.js → chunk-TX2CHQD7.js} +2 -2
- package/dist/cli/chunks/{chunk-FHPNWHY7.js → chunk-TZIHDJZD.js} +2 -2
- package/dist/cli/chunks/{chunk-WUGXXNK4.js → chunk-U62OUXBF.js} +1 -1
- package/dist/cli/chunks/{chunk-A2T56XVL.js → chunk-UAQZI6N4.js} +2 -2
- package/dist/cli/chunks/{chunk-MKYOE7NE.js → chunk-UE2J6MA5.js} +1 -1
- package/dist/cli/chunks/{chunk-K7RT6ITZ.js → chunk-UGYM4U44.js} +1 -1
- package/dist/cli/chunks/{chunk-7QUSNBAA.js → chunk-UJABDXST.js} +2 -2
- package/dist/cli/chunks/{chunk-VJBJRFUO.js → chunk-UORB2QDU.js} +9 -9
- package/dist/cli/chunks/{chunk-O5CEL447.js → chunk-UQPA33UK.js} +2 -2
- package/dist/cli/chunks/{chunk-7MUO4DEH.js → chunk-UUBIQR6A.js} +3 -3
- package/dist/cli/chunks/{chunk-WCPSR4MJ.js → chunk-UXIY4IAI.js} +2 -2
- package/dist/cli/chunks/{chunk-UFP7SN5V.js → chunk-VCXI4XC4.js} +2 -2
- package/dist/cli/chunks/{chunk-OCN53CCK.js → chunk-VMAM46HQ.js} +2 -2
- package/dist/cli/chunks/{chunk-MQXWG55U.js → chunk-VY4U6DPO.js} +3 -3
- package/dist/cli/chunks/{chunk-M5JEA6ZY.js → chunk-W27AJ5B4.js} +2 -2
- package/dist/cli/chunks/{chunk-YGC5QKQ4.js → chunk-W5ZJG2OU.js} +2 -2
- package/dist/cli/chunks/{chunk-AJVLVF7V.js → chunk-W62OOK7A.js} +2 -2
- package/dist/cli/chunks/{chunk-WM2QRIRD.js → chunk-WNTA4YKE.js} +2 -2
- package/dist/cli/chunks/{chunk-7Y3LXH57.js → chunk-WUOOX7UG.js} +2 -2
- package/dist/cli/chunks/{chunk-PCQZIAXB.js → chunk-WVXJ2QIG.js} +2 -2
- package/dist/cli/chunks/{chunk-PNRPVQGI.js → chunk-X33CWRDF.js} +2 -2
- package/dist/cli/chunks/{chunk-TSP6SU5V.js → chunk-XG4F4XH4.js} +2 -2
- package/dist/cli/chunks/{chunk-V6SE2ZU2.js → chunk-XH4JMX5O.js} +1 -1
- package/dist/cli/chunks/{chunk-R5RRWLRI.js → chunk-XHHWABJV.js} +2 -2
- package/dist/cli/chunks/{chunk-DLTB5KCR.js → chunk-XHLYGXYE.js} +2 -2
- package/dist/cli/chunks/{chunk-NPCXGX7N.js → chunk-XIVVTYM2.js} +2 -2
- package/dist/cli/chunks/{chunk-E7QTWGPI.js → chunk-XM6ZVFM5.js} +10 -10
- package/dist/cli/chunks/{chunk-XN3KCKAM.js → chunk-XWIAZG3C.js} +2 -2
- package/dist/cli/chunks/{chunk-J6ASX536.js → chunk-Y2OX6KGN.js} +2 -2
- package/dist/cli/chunks/{chunk-HV43NX4A.js → chunk-YUS6TWAL.js} +2 -2
- package/dist/cli/chunks/{chunk-2HPNGK7A.js → chunk-ZIPAB5J6.js} +2 -2
- package/dist/cli/chunks/{chunk-XSPMLJCQ.js → chunk-ZSOMUTNL.js} +1 -1
- package/dist/cli/chunks/{chunk-IRPNEXOU.js → chunk-ZWBGYJ7K.js} +2 -2
- package/dist/cli/chunks/{chunk-5Z4MO2F3.js → chunk-ZYJB6FML.js} +1 -1
- package/dist/cli/chunks/{ci-UMA2SMNW.js → ci-UCUJOSBW.js} +2 -2
- package/dist/cli/chunks/{ci-config-UQSILJFQ.js → ci-config-2XILD3XG.js} +2 -2
- package/dist/cli/chunks/{ci-output-U6YZLLKH.js → ci-output-BL6KWOHW.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ATYQP6X2.js → circuit-breaker-5XLIOXE5.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-6YHFD7AN.js → claude-flow-setup-4IMP6ACS.js} +2 -2
- package/dist/cli/chunks/client-KKRNPX4F.js +2 -0
- package/dist/cli/chunks/{cline-installer-EPE7IOZE.js → cline-installer-RYLHCDK7.js} +2 -2
- package/dist/cli/chunks/{code-NUEJ4XYO.js → code-WY3GJXHX.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-D4DBT6OL.js → code-index-extractor-Y4MZBZCW.js} +2 -2
- package/dist/cli/chunks/{codex-installer-633SM4LR.js → codex-installer-SCJ3T3DX.js} +4 -4
- package/dist/cli/chunks/{completions-WUKVIW3L.js → completions-CN2DXQFU.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-F73ACR5H.js → complexity-analyzer-7MDPPIBH.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-QH42TKMS.js → continuedev-installer-GCEJRK34.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-Y3XC7BTT.js → copilot-installer-BHPDSELY.js} +2 -2
- package/dist/cli/chunks/core-handlers-47MPMED7.js +2 -0
- package/dist/cli/chunks/{cost-tracker-57QPV7E3.js → cost-tracker-VO5MFWR6.js} +2 -2
- package/dist/cli/chunks/{coverage-IBCHMBCR.js → coverage-LYFQYNH6.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +2 -0
- package/dist/cli/chunks/{cursor-installer-F4UYQHIN.js → cursor-installer-KP4HA7TV.js} +2 -2
- package/dist/cli/chunks/{daemon-XR4Q6YZF.js → daemon-7RC7TS57.js} +3 -3
- package/dist/cli/chunks/{daemon-BYYPIJ7G.js → daemon-AXLVPKVO.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-ZR5ZD3TW.js → dag-attention-scheduler-NKA44RSR.js} +2 -2
- package/dist/cli/chunks/{detect-GEGYURLL.js → detect-CMYAJWYF.js} +2 -2
- package/dist/cli/chunks/{dist-node-JU3KT2JO.js → dist-node-EN3PYEGW.js} +2 -2
- package/dist/cli/chunks/{domain-handler-7QI3FJGE.js → domain-handler-EXSZCX7A.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-O2YRM2PD.js → domain-plugins-HCQFSNL7.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-7J3S2OS6.js → domain-transfer-3LGSNTPO.js} +2 -2
- package/dist/cli/chunks/dream-76L6EEN7.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-URES5Q6J.js → embed-and-insert-pattern-B6MNHICW.js} +2 -2
- package/dist/cli/chunks/{eval-RVMCIUOR.js → eval-OQELIWJK.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-SYJQSBKE.js → experience-capture-middleware-SUFILYPW.js} +3 -3
- package/dist/cli/chunks/{fast-paths-QUKPKWKZ.js → fast-paths-UV4NDEWM.js} +2 -2
- package/dist/cli/chunks/{feature-flags-K7JXNKJI.js → feature-flags-CKTYX67J.js} +2 -2
- package/dist/cli/chunks/{feature-flags-5JCSKL2P.js → feature-flags-H7H33B6C.js} +2 -2
- package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +2 -0
- package/dist/cli/chunks/{fleet-II4Q6HXK.js → fleet-ZJBCAKRG.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-M7VO2EMS.js → gnn-wrapper-RUE2QZRG.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ND5CY26N.js → heartbeat-handler-XRV327M7.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +2 -0
- package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-N3AUUUU7.js → hnsw-legacy-bridge-UJID6ZZ4.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-NZY3E5EN.js → hnswlib-node-WS43R4AX.js} +2 -2
- package/dist/cli/chunks/{hooks-QVJDTII5.js → hooks-YZNJKXAJ.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ZRY6MTDV.js → hypergraph-engine-XQJSIMTS.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-56DO4XZQ.js → hypergraph-handler-ZD2NYXMR.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +2 -0
- package/dist/cli/chunks/{init-guard-DTF4EVUY.js → init-guard-DSRUAVRT.js} +2 -2
- package/dist/cli/chunks/{init-handler-M6CNQHMX.js → init-handler-RJU5QMAP.js} +6 -6
- package/dist/cli/chunks/init-wizard-JCKNGIGT.js +2 -0
- package/dist/cli/chunks/kernel-F7ILJTYD.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-IJN7XKBH.js → kilocode-installer-BCPOCVMC.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-UKKPGPDC.js → kiro-installer-GFCWCB2S.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +2 -0
- package/dist/cli/chunks/{learning-W2HETWQ4.js → learning-FZTD72CF.js} +3 -3
- package/dist/cli/chunks/{llm-router-Y546K4VX.js → llm-router-GJVKGRJL.js} +4 -4
- package/dist/cli/chunks/llm-router-service-TNOWQINA.js +2 -0
- package/dist/cli/chunks/{load-MKAB2AXE.js → load-YKTPOYBE.js} +2 -2
- package/dist/cli/chunks/load-test-FPVBK2EV.js +2 -0
- package/dist/cli/chunks/{mcp-AZKUS6K3.js → mcp-LT6R2IKS.js} +2 -2
- package/dist/cli/chunks/{memory-ZDOQN2KU.js → memory-4HKKOLRY.js} +5 -5
- package/dist/cli/chunks/memory-backend-2QE7O67A.js +2 -0
- package/dist/cli/chunks/{memory-handlers-3SQVY7FE.js → memory-handlers-X4CMVBXB.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-WWVXDHG4.js → multi-model-executor-2YPM2WTK.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-YUJNXXWS.js → opencode-installer-WBAJMH5K.js} +2 -2
- package/dist/cli/chunks/{orchestrator-Z6PWPLRE.js → orchestrator-5W5WVMVJ.js} +17 -17
- package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-TPWPX32U.js → pattern-usage-recorder-GXRMNPAZ.js} +2 -2
- package/dist/cli/chunks/{pipeline-4BBGTE4M.js → pipeline-2NA4DRDA.js} +2 -2
- package/dist/cli/chunks/{platform-5GSHXCV5.js → platform-BGERNQ5V.js} +2 -2
- package/dist/cli/chunks/{plugin-OFDVF5HS.js → plugin-L4EPVENR.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-NC6MUYGJ.js → prime-radiant-advanced-wasm-RTQRTPTM.js} +2 -2
- package/dist/cli/chunks/project-root-S7WDFTMU.js +2 -0
- package/dist/cli/chunks/protocol-executor-OPANXQVB.js +2 -0
- package/dist/cli/chunks/{protocol-handler-MPOAAEPA.js → protocol-handler-SYQXM6JK.js} +2 -2
- package/dist/cli/chunks/{prove-CDKMAIVM.js → prove-5O7GPJCU.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +2 -0
- package/dist/cli/chunks/{quality-ZH4F7R7R.js → quality-KIIDHGNF.js} +2 -2
- package/dist/cli/chunks/{quality-gate-IDRMW6OE.js → quality-gate-H65VECD3.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +2 -0
- package/dist/cli/chunks/{real-embeddings-I2UVNNB3.js → real-embeddings-DYIOLKQ3.js} +2 -2
- package/dist/cli/chunks/{ref-validation-Z5GCGVXK.js → ref-validation-CSBJOMZM.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-IZ2S7PH2.js → roocode-installer-G7OVYXEN.js} +2 -2
- package/dist/cli/chunks/router-DBBW4NC2.js +2 -0
- package/dist/cli/chunks/routing-feedback-W35QHCL4.js +2 -0
- package/dist/cli/chunks/{routing-handler-NAX35VUW.js → routing-handler-ZNZPPI5Y.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-5YW2SOFF.js → ruvector-commands-C6IG3OY3.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-VUIZHTVG.js → rvf-migration-coordinator-4ATTHGHD.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-IPGCAT6C.js → rvf-store-integrity-3G6LFLT3.js} +2 -2
- package/dist/cli/chunks/safe-db-ZS2QKANY.js +2 -0
- package/dist/cli/chunks/schedule-ZH6VNA32.js +2 -0
- package/dist/cli/chunks/scheduler-T6CD74B6.js +2 -0
- package/dist/cli/chunks/{security-3IH4BO5Z.js → security-A3IMVLFM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-ABY7PAY2.js → shared-rvf-adapter-VHWQ6US5.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-6KENLN2W.js → shared-rvf-dual-writer-JB3QS7IG.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +2 -0
- package/dist/cli/chunks/{standalone-memory-RLFAUGOW.js → standalone-memory-DDNXCSBD.js} +2 -2
- package/dist/cli/chunks/{status-handler-FCOZBPE5.js → status-handler-2HK7XPEK.js} +2 -2
- package/dist/cli/chunks/{structural-health-4RDA5UUM.js → structural-health-DSJVLEPV.js} +2 -2
- package/dist/cli/chunks/{sync-54LUAUTK.js → sync-3MUV6S5E.js} +2 -2
- package/dist/cli/chunks/{sync-KGEEXXCC.js → sync-NTUR53PI.js} +2 -2
- package/dist/cli/chunks/{task-handler-K3OXHYKU.js → task-handler-74MZN2EO.js} +2 -2
- package/dist/cli/chunks/{task-handlers-6H7L2UT4.js → task-handlers-VJR6EHRZ.js} +3 -3
- package/dist/cli/chunks/{test-S7IG6EIX.js → test-O6FK3FVF.js} +4 -4
- package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +2 -0
- package/dist/cli/chunks/{test-scheduling-7XYXI4L2.js → test-scheduling-Q6QEEOS6.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-3QMABE45.js → token-bootstrap-TTRCECLP.js} +2 -2
- package/dist/cli/chunks/{token-usage-Y2YTPOFE.js → token-usage-YEEFWSSI.js} +2 -2
- package/dist/cli/chunks/{transformers-UCJ3HHHC.js → transformers-BZCHJJJT.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +2 -0
- package/dist/cli/chunks/{types-6CMFPETH.js → types-4AOKZYOX.js} +2 -2
- package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +2 -0
- package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +2 -0
- package/dist/cli/chunks/{upgrade-K25DN6WU.js → upgrade-2MWW6BT2.js} +2 -2
- package/dist/cli/chunks/{validate-T4V3TBY3.js → validate-PAEV3GT5.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-XSRC576T.js → validate-swarm-ZIXACK5K.js} +2 -2
- package/dist/cli/chunks/visual-security-GXGSFBVA.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-YOZXHRTN.js → web-tree-sitter-VLTXZFAB.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-ITPU2IYL.js → windsurf-installer-VELMLOZF.js} +2 -2
- package/dist/cli/chunks/witness-chain-MRJKVCOW.js +2 -0
- package/dist/cli/chunks/witness-chain-WWHJKITG.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-YUG7E3UX.js → witness-chain-repair-5SAXPETG.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-DTDSVKOG.js → witness-chain-verifier-MIDWD4JS.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-EWACWGAW.js → witness-key-manager-OSVCWOB2.js} +2 -2
- package/dist/cli/chunks/{workflow-ZIQ4FV42.js → workflow-MK7A7QCX.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +2 -0
- package/dist/cli/chunks/{wrappers-PW2O27LL.js → wrappers-5QFMCKXL.js} +2 -2
- 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/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/mcp/bundle.js +419 -419
- 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-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/dream-6C4NURSE.js +0 -2
- 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/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/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-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/test-runner-process-OTQDAJLN.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/workflow-orchestrator-3ZN2BCGY.js +0 -2
|
Binary file
|
|
@@ -41,6 +41,14 @@ export interface TransformOptions {
|
|
|
41
41
|
maxChunks?: number;
|
|
42
42
|
allowFallback?: boolean;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Locate the wasm-bindgen glue (#1241). A relative require resolved against
|
|
46
|
+
* the bundle's directory (dist/mcp/ or dist/cli/chunks/), where the glue does
|
|
47
|
+
* not exist, so WASM never loaded from the published package. Look next to
|
|
48
|
+
* this module first (unbundled src/ or dist/), then in the copy the build
|
|
49
|
+
* places under dist/integrations/agent-booster-wasm/ in the package root.
|
|
50
|
+
*/
|
|
51
|
+
export declare function resolveWasmGlue(metaUrl?: string): string | null;
|
|
44
52
|
/**
|
|
45
53
|
* Map file extension to Language enum
|
|
46
54
|
*/
|
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
* Accuracy: 81% (13/16 test cases)
|
|
9
9
|
*/
|
|
10
10
|
import { createRequire } from 'module';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
import { dirname, join } from 'path';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
11
14
|
import { LoggerFactory } from '../../logging/index.js';
|
|
15
|
+
import { findPackageRoot } from '../../init/find-package-root.js';
|
|
12
16
|
const logger = LoggerFactory.create('agent-booster-wasm');
|
|
13
17
|
// Language constants (const object instead of enum for ESM compatibility)
|
|
14
18
|
// This pattern works consistently across tsx dev mode, node, and bundled builds
|
|
@@ -45,6 +49,21 @@ const LanguageNames = {
|
|
|
45
49
|
let wasmModule = null;
|
|
46
50
|
let wasmBooster = null;
|
|
47
51
|
let loadError = null;
|
|
52
|
+
const GLUE_FILE = 'agent_booster_wasm.js';
|
|
53
|
+
/**
|
|
54
|
+
* Locate the wasm-bindgen glue (#1241). A relative require resolved against
|
|
55
|
+
* the bundle's directory (dist/mcp/ or dist/cli/chunks/), where the glue does
|
|
56
|
+
* not exist, so WASM never loaded from the published package. Look next to
|
|
57
|
+
* this module first (unbundled src/ or dist/), then in the copy the build
|
|
58
|
+
* places under dist/integrations/agent-booster-wasm/ in the package root.
|
|
59
|
+
*/
|
|
60
|
+
export function resolveWasmGlue(metaUrl = import.meta.url) {
|
|
61
|
+
const candidates = [join(dirname(fileURLToPath(metaUrl)), GLUE_FILE)];
|
|
62
|
+
const root = findPackageRoot(metaUrl);
|
|
63
|
+
if (root)
|
|
64
|
+
candidates.push(join(root, 'dist', 'integrations', 'agent-booster-wasm', GLUE_FILE));
|
|
65
|
+
return candidates.find((p) => existsSync(p)) ?? null;
|
|
66
|
+
}
|
|
48
67
|
/**
|
|
49
68
|
* Load the WASM module
|
|
50
69
|
*/
|
|
@@ -54,9 +73,13 @@ async function loadWasm() {
|
|
|
54
73
|
if (loadError)
|
|
55
74
|
return false;
|
|
56
75
|
try {
|
|
57
|
-
|
|
76
|
+
const gluePath = resolveWasmGlue();
|
|
77
|
+
if (!gluePath) {
|
|
78
|
+
throw new Error(`${GLUE_FILE} not found next to the module or under dist/integrations/agent-booster-wasm/`);
|
|
79
|
+
}
|
|
80
|
+
// The glue is CommonJS (it reads the .wasm via __dirname), so load it with require.
|
|
58
81
|
const require = createRequire(import.meta.url);
|
|
59
|
-
wasmModule = require(
|
|
82
|
+
wasmModule = require(gluePath);
|
|
60
83
|
if (!wasmModule) {
|
|
61
84
|
throw new Error('WASM module loaded but is null');
|
|
62
85
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agent-booster-wasm",
|
|
3
|
+
"collaborators": [
|
|
4
|
+
"Agent Booster Team"
|
|
5
|
+
],
|
|
6
|
+
"description": "WebAssembly bindings for agent-booster",
|
|
7
|
+
"version": "0.1.0",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"files": [
|
|
10
|
+
"agent_booster_wasm_bg.wasm",
|
|
11
|
+
"agent_booster_wasm.js",
|
|
12
|
+
"agent_booster_wasm.d.ts"
|
|
13
|
+
],
|
|
14
|
+
"main": "agent_booster_wasm.js",
|
|
15
|
+
"types": "agent_booster_wasm.d.ts"
|
|
16
|
+
}
|
|
@@ -212,9 +212,10 @@ export declare class DreamEngine {
|
|
|
212
212
|
* #1060: write the results of a `dream(…, { commit: false })` run, in the
|
|
213
213
|
* same single transaction a normal dream uses. Returns the commit duration
|
|
214
214
|
* in ms. Throws (and writes nothing) if the engine is closed or the write
|
|
215
|
-
* fails.
|
|
215
|
+
* fails. #1253: async, because a locked database is retried without
|
|
216
|
+
* blocking the process.
|
|
216
217
|
*/
|
|
217
|
-
commitDreamResult(result: DreamCycleResult): number
|
|
218
|
+
commitDreamResult(result: DreamCycleResult): Promise<number>;
|
|
218
219
|
/**
|
|
219
220
|
* Commit a computed dream, then record it in the witness chain (#1060) and
|
|
220
221
|
* run the default retention steps (#1239).
|
|
@@ -31,6 +31,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
31
31
|
import { getUnifiedPersistence } from '../../kernel/unified-persistence.js';
|
|
32
32
|
import { registerStoreCloser } from '../../kernel/process-lifecycle.js';
|
|
33
33
|
import { ConceptGraph } from './concept-graph.js';
|
|
34
|
+
import { DREAM_LOCK_WAIT_MS, DREAM_SHUTDOWN_LOCK_WAIT_MS, isBusyError, retryWhileBusy, withBusyTimeout, } from './dream-lock-retry.js';
|
|
34
35
|
import { SpreadingActivation, } from './spreading-activation.js';
|
|
35
36
|
import { InsightGenerator, } from './insight-generator.js';
|
|
36
37
|
import { DEFAULT_VALIDATION_THRESHOLDS, } from './rvcow-branch-manager.js';
|
|
@@ -277,16 +278,14 @@ export class DreamEngine {
|
|
|
277
278
|
await this.persistence.initialize();
|
|
278
279
|
}
|
|
279
280
|
this.db = this.persistence.getDatabase();
|
|
280
|
-
//
|
|
281
|
-
//
|
|
282
|
-
//
|
|
283
|
-
//
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
// Migrate legacy schema: rename 'duration' → 'duration_ms' if needed
|
|
289
|
-
this.migrateSchema();
|
|
281
|
+
// #1253: no 60 s busy_timeout on this shared connection. better-sqlite3
|
|
282
|
+
// waits synchronously, so it froze the whole process (the MCP event loop)
|
|
283
|
+
// while another writer held the database. Dream writes instead wait
|
|
284
|
+
// briefly per attempt and retry asynchronously (dream-lock-retry.ts),
|
|
285
|
+
// which keeps the patience that avoided failures under contention (#1060).
|
|
286
|
+
// Migrate legacy schema: rename 'duration' → 'duration_ms' if needed.
|
|
287
|
+
// #1253: a short lock wait only; migrateSchema() logs and carries on.
|
|
288
|
+
withBusyTimeout(this.db, DREAM_LOCK_WAIT_MS, () => this.migrateSchema());
|
|
290
289
|
// Initialize concept graph (shares same unified persistence)
|
|
291
290
|
this.graph = new ConceptGraph();
|
|
292
291
|
await this.graph.initialize();
|
|
@@ -296,9 +295,19 @@ export class DreamEngine {
|
|
|
296
295
|
'committed in one short transaction instead of a SAVEPOINT held across the dream');
|
|
297
296
|
}
|
|
298
297
|
// #1060: a process that exited mid-dream left its cycle 'running'.
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
298
|
+
// #1253: housekeeping, so a locked database skips it after a short
|
|
299
|
+
// wait instead of blocking the process; the next initialize() retries.
|
|
300
|
+
const db = this.db;
|
|
301
|
+
try {
|
|
302
|
+
const abandoned = withBusyTimeout(db, DREAM_LOCK_WAIT_MS, () => markAbandonedCycles(db, Math.max(this.config.maxDurationMs, MAX_TOOL_DREAM_MS) + ABANDONED_CYCLE_GRACE_MS));
|
|
303
|
+
if (abandoned > 0) {
|
|
304
|
+
dreamLogger.info('Marked abandoned dream cycles as interrupted', { abandoned });
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
if (!isBusyError(error))
|
|
309
|
+
throw error;
|
|
310
|
+
dreamLogger.warn('Abandoned dream cycle sweep skipped: database is locked', { error: toErrorMessage(error) });
|
|
302
311
|
}
|
|
303
312
|
this.initialized = true;
|
|
304
313
|
this.closing = false;
|
|
@@ -433,7 +442,7 @@ export class DreamEngine {
|
|
|
433
442
|
let committed = false;
|
|
434
443
|
try {
|
|
435
444
|
if (commitResults)
|
|
436
|
-
await this.saveCycle(cycle);
|
|
445
|
+
await this.saveCycle(cycle, live);
|
|
437
446
|
if (!live())
|
|
438
447
|
throw new Error('Dream cycle cancelled');
|
|
439
448
|
// 1. Check we have enough concepts
|
|
@@ -483,7 +492,7 @@ export class DreamEngine {
|
|
|
483
492
|
committed = true; // nothing to record: the caller decides
|
|
484
493
|
return { ...result, pending: computed };
|
|
485
494
|
}
|
|
486
|
-
const commit = this.commitComputed(db, computed);
|
|
495
|
+
const commit = await this.commitComputed(db, computed, live);
|
|
487
496
|
committed = true;
|
|
488
497
|
result.commitDurationMs = commit.durationMs;
|
|
489
498
|
result.retention = commit.retention;
|
|
@@ -499,7 +508,7 @@ export class DreamEngine {
|
|
|
499
508
|
cycle.durationMs = Date.now() - startTime;
|
|
500
509
|
if (commitResults && this.db === db) {
|
|
501
510
|
try {
|
|
502
|
-
this.updateCycleSync(cycle);
|
|
511
|
+
await retryWhileBusy(db, () => this.updateCycleSync(cycle), { shouldContinue: () => this.db === db });
|
|
503
512
|
}
|
|
504
513
|
catch { /* best effort */ }
|
|
505
514
|
}
|
|
@@ -528,9 +537,10 @@ export class DreamEngine {
|
|
|
528
537
|
* #1060: write the results of a `dream(…, { commit: false })` run, in the
|
|
529
538
|
* same single transaction a normal dream uses. Returns the commit duration
|
|
530
539
|
* in ms. Throws (and writes nothing) if the engine is closed or the write
|
|
531
|
-
* fails.
|
|
540
|
+
* fails. #1253: async, because a locked database is retried without
|
|
541
|
+
* blocking the process.
|
|
532
542
|
*/
|
|
533
|
-
commitDreamResult(result) {
|
|
543
|
+
async commitDreamResult(result) {
|
|
534
544
|
this.ensureInitialized();
|
|
535
545
|
if (this.closing) {
|
|
536
546
|
throw new Error('Dream engine is closing; nothing is committed');
|
|
@@ -538,7 +548,8 @@ export class DreamEngine {
|
|
|
538
548
|
if (!result.pending) {
|
|
539
549
|
throw new Error('Dream result has nothing pending to commit (it was already committed)');
|
|
540
550
|
}
|
|
541
|
-
const
|
|
551
|
+
const db = this.db;
|
|
552
|
+
const commit = await this.commitComputed(db, result.pending, () => !this.closing && this.db === db);
|
|
542
553
|
result.pending = undefined;
|
|
543
554
|
result.commitDurationMs = commit.durationMs;
|
|
544
555
|
result.retention = commit.retention;
|
|
@@ -548,8 +559,12 @@ export class DreamEngine {
|
|
|
548
559
|
* Commit a computed dream, then record it in the witness chain (#1060) and
|
|
549
560
|
* run the default retention steps (#1239).
|
|
550
561
|
*/
|
|
551
|
-
commitComputed(db, computed) {
|
|
552
|
-
|
|
562
|
+
async commitComputed(db, computed, live) {
|
|
563
|
+
// #1253: retry a locked database asynchronously; each attempt is short.
|
|
564
|
+
const commit = await retryWhileBusy(db, () => commitDream(db, computed), {
|
|
565
|
+
shouldContinue: live,
|
|
566
|
+
cancelledError: () => new Error('Dream cycle cancelled'),
|
|
567
|
+
});
|
|
553
568
|
try {
|
|
554
569
|
this._witnessChain?.append('DREAM_COMMIT', {
|
|
555
570
|
cycleId: computed.cycle.id,
|
|
@@ -613,7 +628,9 @@ export class DreamEngine {
|
|
|
613
628
|
cycle.endTime = new Date();
|
|
614
629
|
cycle.durationMs = Date.now() - startTime;
|
|
615
630
|
try {
|
|
616
|
-
|
|
631
|
+
// #1253: a short wait only; if the database stays locked, the
|
|
632
|
+
// abandoned-cycle sweep marks the cycle interrupted later.
|
|
633
|
+
withBusyTimeout(this.db, DREAM_SHUTDOWN_LOCK_WAIT_MS, () => this.updateCycleSync(cycle));
|
|
617
634
|
}
|
|
618
635
|
catch {
|
|
619
636
|
// Best effort during shutdown
|
|
@@ -912,16 +929,17 @@ export class DreamEngine {
|
|
|
912
929
|
// ==========================================================================
|
|
913
930
|
// Persistence
|
|
914
931
|
// ==========================================================================
|
|
915
|
-
async saveCycle(cycle) {
|
|
932
|
+
async saveCycle(cycle, live) {
|
|
916
933
|
if (!this.db)
|
|
917
934
|
return;
|
|
935
|
+
const db = this.db;
|
|
918
936
|
const stmt = this.db.prepare(`
|
|
919
937
|
INSERT INTO dream_cycles
|
|
920
938
|
(id, start_time, end_time, duration_ms, concepts_processed, associations_found,
|
|
921
939
|
insights_generated, status, error, created_at)
|
|
922
940
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
923
941
|
`);
|
|
924
|
-
stmt.run(cycle.id, cycle.startTime.toISOString(), cycle.endTime?.toISOString() ?? null, cycle.durationMs ?? null, cycle.conceptsProcessed, cycle.associationsFound, cycle.insightsGenerated, cycle.status, cycle.error ?? null, cycle.startTime.toISOString());
|
|
942
|
+
await retryWhileBusy(db, () => stmt.run(cycle.id, cycle.startTime.toISOString(), cycle.endTime?.toISOString() ?? null, cycle.durationMs ?? null, cycle.conceptsProcessed, cycle.associationsFound, cycle.insightsGenerated, cycle.status, cycle.error ?? null, cycle.startTime.toISOString()), { shouldContinue: live, cancelledError: () => new Error('Dream cycle cancelled') });
|
|
925
943
|
}
|
|
926
944
|
updateCycleSync(cycle) {
|
|
927
945
|
if (!this.db)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lock waits for dream writes (#1253).
|
|
3
|
+
*
|
|
4
|
+
* better-sqlite3 waits for a locked database synchronously, so a long
|
|
5
|
+
* busy_timeout freezes the whole process: in the MCP server that is the event
|
|
6
|
+
* loop and every tool call. Dream writes therefore wait only briefly per
|
|
7
|
+
* attempt and retry asynchronously, so other work runs between attempts.
|
|
8
|
+
*/
|
|
9
|
+
import type { Database as DatabaseType } from 'better-sqlite3';
|
|
10
|
+
/** Longest a single dream write attempt blocks the process on a locked database. */
|
|
11
|
+
export declare const DREAM_LOCK_WAIT_MS = 200;
|
|
12
|
+
/** Total time a dream write keeps retrying a locked database before it fails. */
|
|
13
|
+
export declare const DREAM_LOCK_RETRY_BUDGET_MS = 60000;
|
|
14
|
+
/** True for SQLite "database is locked" / "busy" failures. */
|
|
15
|
+
export declare function isBusyError(error: unknown): boolean;
|
|
16
|
+
/** Run `fn` with a temporary busy_timeout, restoring the connection's previous value. */
|
|
17
|
+
export declare function withBusyTimeout<T>(db: DatabaseType, timeoutMs: number, fn: () => T): T;
|
|
18
|
+
export interface RetryWhileBusyOptions {
|
|
19
|
+
/** Synchronous wait per attempt (default DREAM_LOCK_WAIT_MS). */
|
|
20
|
+
waitMs?: number;
|
|
21
|
+
/** Total retry time before the busy error is thrown (default DREAM_LOCK_RETRY_BUDGET_MS). */
|
|
22
|
+
budgetMs?: number;
|
|
23
|
+
/** Checked before every attempt; when false, `cancelledError` is thrown instead of retrying. */
|
|
24
|
+
shouldContinue?: () => boolean;
|
|
25
|
+
cancelledError?: () => Error;
|
|
26
|
+
/** Injectable for tests. */
|
|
27
|
+
sleep?: (ms: number) => Promise<void>;
|
|
28
|
+
now?: () => number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Run a synchronous write, retrying while the database is locked. Each attempt
|
|
32
|
+
* blocks for at most `waitMs`; between attempts the event loop is free. Errors
|
|
33
|
+
* other than a busy database are thrown at once.
|
|
34
|
+
*/
|
|
35
|
+
export declare function retryWhileBusy<T>(db: DatabaseType, fn: () => T, options?: RetryWhileBusyOptions): Promise<T>;
|
|
36
|
+
/** Wait for the synchronous best-effort write made while a dream is interrupted at shutdown. */
|
|
37
|
+
export declare const DREAM_SHUTDOWN_LOCK_WAIT_MS = 1000;
|
|
38
|
+
//# sourceMappingURL=dream-lock-retry.d.ts.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lock waits for dream writes (#1253).
|
|
3
|
+
*
|
|
4
|
+
* better-sqlite3 waits for a locked database synchronously, so a long
|
|
5
|
+
* busy_timeout freezes the whole process: in the MCP server that is the event
|
|
6
|
+
* loop and every tool call. Dream writes therefore wait only briefly per
|
|
7
|
+
* attempt and retry asynchronously, so other work runs between attempts.
|
|
8
|
+
*/
|
|
9
|
+
/** Longest a single dream write attempt blocks the process on a locked database. */
|
|
10
|
+
export const DREAM_LOCK_WAIT_MS = 200;
|
|
11
|
+
/** Total time a dream write keeps retrying a locked database before it fails. */
|
|
12
|
+
export const DREAM_LOCK_RETRY_BUDGET_MS = 60_000;
|
|
13
|
+
/** Longest pause between attempts; the pause doubles from 25 ms up to this. */
|
|
14
|
+
const MAX_BACKOFF_MS = 1000;
|
|
15
|
+
/** True for SQLite "database is locked" / "busy" failures. */
|
|
16
|
+
export function isBusyError(error) {
|
|
17
|
+
const code = error?.code;
|
|
18
|
+
if (typeof code === 'string' && /^SQLITE_(BUSY|LOCKED)/.test(code))
|
|
19
|
+
return true;
|
|
20
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
21
|
+
return /database is locked|database table is locked|SQLITE_BUSY/i.test(message);
|
|
22
|
+
}
|
|
23
|
+
/** Run `fn` with a temporary busy_timeout, restoring the connection's previous value. */
|
|
24
|
+
export function withBusyTimeout(db, timeoutMs, fn) {
|
|
25
|
+
const previous = db.pragma('busy_timeout', { simple: true });
|
|
26
|
+
db.pragma(`busy_timeout = ${timeoutMs}`);
|
|
27
|
+
try {
|
|
28
|
+
return fn();
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
try {
|
|
32
|
+
db.pragma(`busy_timeout = ${previous}`);
|
|
33
|
+
}
|
|
34
|
+
catch { /* connection closed */ }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Run a synchronous write, retrying while the database is locked. Each attempt
|
|
39
|
+
* blocks for at most `waitMs`; between attempts the event loop is free. Errors
|
|
40
|
+
* other than a busy database are thrown at once.
|
|
41
|
+
*/
|
|
42
|
+
export async function retryWhileBusy(db, fn, options = {}) {
|
|
43
|
+
const waitMs = options.waitMs ?? DREAM_LOCK_WAIT_MS;
|
|
44
|
+
const budgetMs = options.budgetMs ?? DREAM_LOCK_RETRY_BUDGET_MS;
|
|
45
|
+
const sleep = options.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
46
|
+
const now = options.now ?? Date.now;
|
|
47
|
+
const started = now();
|
|
48
|
+
let backoff = 25;
|
|
49
|
+
for (;;) {
|
|
50
|
+
if (options.shouldContinue && !options.shouldContinue()) {
|
|
51
|
+
throw options.cancelledError?.() ?? new Error('Cancelled while waiting for a locked database');
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
return withBusyTimeout(db, waitMs, fn);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (!isBusyError(error) || now() - started + backoff >= budgetMs)
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
await sleep(backoff);
|
|
61
|
+
backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Wait for the synchronous best-effort write made while a dream is interrupted at shutdown. */
|
|
65
|
+
export const DREAM_SHUTDOWN_LOCK_WAIT_MS = 1000;
|
|
66
|
+
//# sourceMappingURL=dream-lock-retry.js.map
|
|
@@ -117,7 +117,7 @@ export class SpeculativeDreamer {
|
|
|
117
117
|
let commitDurationMs;
|
|
118
118
|
if (winner?.result) {
|
|
119
119
|
try {
|
|
120
|
-
commitDurationMs = this.engine.commitDreamResult(winner.result);
|
|
120
|
+
commitDurationMs = await this.engine.commitDreamResult(winner.result);
|
|
121
121
|
winner.selected = true;
|
|
122
122
|
}
|
|
123
123
|
catch (error) {
|