agentic-qe 3.10.7 → 3.10.9
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/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +84 -0
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-TRSV37EA.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-6I3JMU2M.js → agent-booster-wasm-RPAOJXZ3.js} +2 -2
- package/dist/cli/chunks/{agent-handler-XWI7YM6R.js → agent-handler-SMD5CAS6.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-QFZKQN2L.js → agent-memory-branch-3IOQIQ7Y.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-CVJRJOSO.js +2 -0
- package/dist/cli/chunks/{arena-5HNPVTBZ.js → arena-AP2J62WO.js} +4 -4
- package/dist/cli/chunks/{arena-P4IUBKZP.js → arena-GT3D6EAO.js} +2 -2
- package/dist/cli/chunks/{audit-PBSH25VZ.js → audit-Q3GJ5354.js} +2 -2
- package/dist/cli/chunks/base-BX4A2D4V.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-ILDTCGLZ.js → better-sqlite3-6A6EAXAT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-EVYRCKXI.js → brain-handler-2Z4ILQF3.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-SUDGYJQJ.js → branch-enumerator-EZWGL4UM.js} +2 -2
- package/dist/cli/chunks/{browser-4UKMW2RE.js → browser-YZELFPLJ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-O3RL7EYT.js +2 -0
- package/dist/cli/chunks/{chunk-QBVFONWU.js → chunk-246Z3PH6.js} +2 -2
- package/dist/cli/chunks/{chunk-B5ZJV7GZ.js → chunk-2I5QLMQF.js} +2 -2
- package/dist/cli/chunks/{chunk-AW3LGLC3.js → chunk-2K2X75UF.js} +2 -2
- package/dist/cli/chunks/{chunk-OW4LJ5HE.js → chunk-2WRVNEIR.js} +2 -2
- package/dist/cli/chunks/{chunk-EWNJK2BU.js → chunk-2WSEJHFQ.js} +1 -1
- package/dist/cli/chunks/{chunk-6RG7ZJ2H.js → chunk-352W5G4G.js} +2 -2
- package/dist/cli/chunks/{chunk-7NK2H7H5.js → chunk-3HT4CT6F.js} +2 -2
- package/dist/cli/chunks/{chunk-MDVJVY4C.js → chunk-3YKJGKOY.js} +4 -4
- package/dist/cli/chunks/{chunk-OPLLH67G.js → chunk-42FBJF73.js} +1 -1
- package/dist/cli/chunks/{chunk-IXAABYGS.js → chunk-4BB75U6N.js} +2 -2
- package/dist/cli/chunks/{chunk-LJHCPN4E.js → chunk-4D3LVXUD.js} +2 -2
- package/dist/cli/chunks/{chunk-VPBXVZWE.js → chunk-4EJTE5TL.js} +1 -1
- package/dist/cli/chunks/{chunk-I7M574IO.js → chunk-4MUZGQPE.js} +2 -2
- package/dist/cli/chunks/{chunk-M7SO5KNJ.js → chunk-57XCLC55.js} +2 -2
- package/dist/cli/chunks/{chunk-QBVS4CXM.js → chunk-5HLOQEKL.js} +1 -1
- package/dist/cli/chunks/{chunk-XWPUCPYW.js → chunk-5U5SEO7C.js} +2 -2
- package/dist/cli/chunks/{chunk-YB4GXJJG.js → chunk-5X73HV2P.js} +1 -1
- package/dist/cli/chunks/{chunk-OSETFZVE.js → chunk-62MH7QAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-64BSODHA.js → chunk-6HPI6YX3.js} +2 -2
- package/dist/cli/chunks/{chunk-SG6O3PXZ.js → chunk-6TR3OM7C.js} +2 -2
- package/dist/cli/chunks/{chunk-FQBNPSV2.js → chunk-757YHKIJ.js} +2 -2
- package/dist/cli/chunks/{chunk-JJELOEIY.js → chunk-7C5HI4ZA.js} +4 -4
- package/dist/cli/chunks/chunk-7D5JE46U.js +2 -0
- package/dist/cli/chunks/{chunk-L2ZSYIDA.js → chunk-7NT34MLU.js} +1 -1
- package/dist/cli/chunks/{chunk-6QBD64W3.js → chunk-7PYEJ4NV.js} +2 -2
- package/dist/cli/chunks/{chunk-ISLI6D4K.js → chunk-7S6D5K4X.js} +2 -2
- package/dist/cli/chunks/chunk-ABJPFKHE.js +2 -0
- package/dist/cli/chunks/{chunk-LEZ2MGHM.js → chunk-ABVBHH7P.js} +3 -3
- package/dist/cli/chunks/{chunk-V7WBNB2S.js → chunk-AHUX7QSE.js} +2 -2
- package/dist/cli/chunks/{chunk-DPT37UHR.js → chunk-AU4DQMLJ.js} +4 -4
- package/dist/cli/chunks/{chunk-MOI74MMX.js → chunk-BG2FN5K2.js} +2 -2
- package/dist/cli/chunks/{chunk-JNQVPTOM.js → chunk-BM52ZEAD.js} +2 -2
- package/dist/cli/chunks/{chunk-BLFZFKT6.js → chunk-BSMUT672.js} +2 -2
- package/dist/cli/chunks/{chunk-34NT5NBZ.js → chunk-BVEQPMOF.js} +2 -2
- package/dist/cli/chunks/{chunk-QLVZEEPR.js → chunk-BYVARYGB.js} +2 -2
- package/dist/cli/chunks/{chunk-QDBFB4XD.js → chunk-C6GQIUKW.js} +2 -2
- package/dist/cli/chunks/{chunk-X6OJFP7G.js → chunk-C6JULAWA.js} +2 -2
- package/dist/cli/chunks/{chunk-76SUEI7S.js → chunk-CDJIYJIA.js} +1 -1
- package/dist/cli/chunks/{chunk-2J4ZUUU5.js → chunk-CLJNAQXB.js} +2 -2
- package/dist/cli/chunks/{chunk-DU7Y54JI.js → chunk-CLSHSVMY.js} +1 -1
- package/dist/cli/chunks/{chunk-O4B6FFC5.js → chunk-CREORFJV.js} +1 -1
- package/dist/cli/chunks/{chunk-S4NNQE4L.js → chunk-CVRTXIYP.js} +1 -1
- package/dist/cli/chunks/{chunk-TTLAWPEN.js → chunk-CWRSQQHV.js} +2 -2
- package/dist/cli/chunks/{chunk-R2B6EQQF.js → chunk-D2JCSWYM.js} +2 -2
- package/dist/cli/chunks/{chunk-Z44VJC5U.js → chunk-D7NWDUY3.js} +2 -2
- package/dist/cli/chunks/chunk-DK6WWNCL.js +2 -0
- package/dist/cli/chunks/{chunk-X3HRJV65.js → chunk-DNE6MVNA.js} +1 -1
- package/dist/cli/chunks/{chunk-UURGDFGU.js → chunk-DZWZASDV.js} +1 -1
- package/dist/cli/chunks/{chunk-L6NB4UHR.js → chunk-EL6F72JN.js} +2 -2
- package/dist/cli/chunks/{chunk-G7ISGLKP.js → chunk-EYGRNXQT.js} +1 -1
- package/dist/cli/chunks/{chunk-K6A3AWUI.js → chunk-FALB6Z2Y.js} +1 -1
- package/dist/cli/chunks/{chunk-TXXRBNOB.js → chunk-FD37QFXW.js} +1 -1
- package/dist/cli/chunks/{chunk-MWRKNBSY.js → chunk-G4KVGUQN.js} +2 -2
- package/dist/cli/chunks/{chunk-32E2OPIE.js → chunk-G7V2HDTH.js} +3 -3
- package/dist/cli/chunks/{chunk-YMBPKBKG.js → chunk-GPALZJD3.js} +1 -1
- package/dist/cli/chunks/{chunk-3IJS52OS.js → chunk-H4SHHYRD.js} +2 -2
- package/dist/cli/chunks/{chunk-3XEL7XCA.js → chunk-H7AQ7M3J.js} +1 -1
- package/dist/cli/chunks/{chunk-CW7JQVXV.js → chunk-HAC7NB6R.js} +2 -2
- package/dist/cli/chunks/{chunk-KXENXRZE.js → chunk-HGKZOSAI.js} +1 -1
- package/dist/cli/chunks/{chunk-L3EQQMFI.js → chunk-HQZX4XYH.js} +2 -2
- package/dist/cli/chunks/{chunk-LFSQSLNP.js → chunk-HZSYCVLC.js} +2 -2
- package/dist/cli/chunks/{chunk-2JWFS2K2.js → chunk-I5C7O5IQ.js} +2 -2
- package/dist/cli/chunks/{chunk-LSHUPEQQ.js → chunk-I7RTTJH5.js} +2 -2
- package/dist/cli/chunks/{chunk-R7KIC6TL.js → chunk-ILPIH4Z6.js} +1 -1
- package/dist/cli/chunks/{chunk-262F3EMN.js → chunk-IR7PJUO7.js} +2 -2
- package/dist/cli/chunks/{chunk-MMR23KAO.js → chunk-J6GKKXCP.js} +2 -2
- package/dist/cli/chunks/{chunk-INI3AGF5.js → chunk-JZNMU63B.js} +2 -2
- package/dist/cli/chunks/{chunk-J5ETX2DG.js → chunk-K23XK33X.js} +2 -2
- package/dist/cli/chunks/{chunk-S423UHYM.js → chunk-KAMFT25W.js} +2 -2
- package/dist/cli/chunks/{chunk-AKSCYNFH.js → chunk-KJA5A3TV.js} +2 -2
- package/dist/cli/chunks/{chunk-76JYG426.js → chunk-KRAWWBX5.js} +2 -2
- package/dist/cli/chunks/{chunk-4RGV6Z2H.js → chunk-L5IO7QNO.js} +2 -2
- package/dist/cli/chunks/{chunk-HBWAMCVB.js → chunk-L5NEEGKO.js} +14 -14
- package/dist/cli/chunks/{chunk-BRYYQQUV.js → chunk-LHKQW72O.js} +1 -1
- package/dist/cli/chunks/{chunk-BPC6X6VR.js → chunk-LT6QHDPK.js} +2 -2
- package/dist/cli/chunks/{chunk-HARYQMWN.js → chunk-MDED3HJI.js} +2 -2
- package/dist/cli/chunks/{chunk-HDLF6LGO.js → chunk-NLUWPS2H.js} +3 -3
- package/dist/cli/chunks/{chunk-CGBEI7UH.js → chunk-NMQEU4BG.js} +2 -2
- package/dist/cli/chunks/{chunk-K6IU2MV4.js → chunk-NOWGQ6YZ.js} +1 -1
- package/dist/cli/chunks/{chunk-YLXUF5KW.js → chunk-NYBAH76S.js} +3 -3
- package/dist/cli/chunks/{chunk-TIUC5LRA.js → chunk-O36VC7B7.js} +2 -2
- package/dist/cli/chunks/{chunk-3O4Q4GAX.js → chunk-OD4OIPXO.js} +15 -13
- package/dist/cli/chunks/{chunk-LUZH2IZY.js → chunk-OF3EMOWN.js} +2 -2
- package/dist/cli/chunks/{chunk-AKL5A3IZ.js → chunk-OIN3Y4BY.js} +1 -1
- package/dist/cli/chunks/chunk-OPKEQYAC.js +2 -0
- package/dist/cli/chunks/{chunk-TY7XPI6R.js → chunk-OQUH7657.js} +2 -2
- package/dist/cli/chunks/{chunk-F5RZSNHI.js → chunk-OSP5AJAB.js} +2 -2
- package/dist/cli/chunks/{chunk-6A2HRMTD.js → chunk-PFGH7TWL.js} +2 -2
- package/dist/cli/chunks/{chunk-MK73CCKO.js → chunk-PYQZ4OA3.js} +2 -2
- package/dist/cli/chunks/{chunk-BU2I77YW.js → chunk-QAP5S7YC.js} +3 -3
- package/dist/cli/chunks/{chunk-JNXPRDNV.js → chunk-QE3CZGAC.js} +3 -3
- package/dist/cli/chunks/{chunk-5QMIVHFT.js → chunk-QFIKEZB5.js} +2 -2
- package/dist/cli/chunks/{chunk-AY4IEMRI.js → chunk-QHICG2NI.js} +2 -2
- package/dist/cli/chunks/{chunk-4I6FK67T.js → chunk-QHPLU5BU.js} +3 -3
- package/dist/cli/chunks/{chunk-HI4DA7Z3.js → chunk-QL6ZJ7RV.js} +2 -2
- package/dist/cli/chunks/{chunk-FK4JHBG4.js → chunk-QL7OOCPO.js} +2 -2
- package/dist/cli/chunks/{chunk-6OLPKIYU.js → chunk-QWXJRZEH.js} +1 -1
- package/dist/cli/chunks/{chunk-S7FNTWFM.js → chunk-R2M3RMCN.js} +2 -2
- package/dist/cli/chunks/{chunk-NKYMHEHY.js → chunk-RHOBDQXA.js} +2 -2
- package/dist/cli/chunks/{chunk-6F5KPT6U.js → chunk-RRSJ7BMF.js} +1 -1
- package/dist/cli/chunks/{chunk-RLXCFURS.js → chunk-RSWQY4NZ.js} +2 -2
- package/dist/cli/chunks/{chunk-UPDPD43T.js → chunk-S73EBPI5.js} +2 -2
- package/dist/cli/chunks/{chunk-OMDV6GFP.js → chunk-TIR3Z6TE.js} +1 -1
- package/dist/cli/chunks/{chunk-UVUVWA4B.js → chunk-TKZABUHO.js} +1 -1
- package/dist/cli/chunks/{chunk-4MJQJQLY.js → chunk-TOGD2JH2.js} +2 -2
- package/dist/cli/chunks/{chunk-QMGNYRR5.js → chunk-TVU6NMO3.js} +3 -3
- package/dist/cli/chunks/{chunk-C5CY5NSW.js → chunk-TXWUV3S5.js} +2 -2
- package/dist/cli/chunks/{chunk-3W6QASVB.js → chunk-U6TZVACK.js} +2 -2
- package/dist/cli/chunks/{chunk-L5UUUSSB.js → chunk-UJBIHPU5.js} +1 -1
- package/dist/cli/chunks/{chunk-FWLXK6AH.js → chunk-UPGKS6Z3.js} +2 -2
- package/dist/cli/chunks/{chunk-SLASYVNX.js → chunk-UU7OCRZM.js} +2 -2
- package/dist/cli/chunks/{chunk-WCXQA24H.js → chunk-UUA2NVUN.js} +8 -8
- package/dist/cli/chunks/{chunk-IYZWEYWJ.js → chunk-UX4UHYLE.js} +1 -1
- package/dist/cli/chunks/{chunk-V3KNHI5B.js → chunk-VDL277DX.js} +2 -2
- package/dist/cli/chunks/{chunk-RJBCIN2G.js → chunk-VHCHBMZC.js} +2 -2
- package/dist/cli/chunks/{chunk-222ZQTL5.js → chunk-VHYNRISI.js} +2 -2
- package/dist/cli/chunks/{chunk-4W5QWFU4.js → chunk-VIHFC67B.js} +1 -1
- package/dist/cli/chunks/{chunk-DYNO72WD.js → chunk-WOGWIMQK.js} +2 -2
- package/dist/cli/chunks/{chunk-SFW6IDMR.js → chunk-WPBVLIWQ.js} +10 -10
- package/dist/cli/chunks/{chunk-CJTDQJ7E.js → chunk-WWGGL3TR.js} +1 -1
- package/dist/cli/chunks/{chunk-2MLISLRR.js → chunk-X6YUGKMM.js} +1 -1
- package/dist/cli/chunks/{chunk-PY3HWJRJ.js → chunk-X7677BX3.js} +2 -2
- package/dist/cli/chunks/{chunk-MRLGQX7Y.js → chunk-XEMP2PNW.js} +2 -2
- package/dist/cli/chunks/{chunk-YBM4LUSF.js → chunk-XLK4GP3I.js} +2 -2
- package/dist/cli/chunks/chunk-XYRJL7YN.js +2 -0
- package/dist/cli/chunks/{chunk-OAXDI4XM.js → chunk-YB3PQ3UV.js} +1 -1
- package/dist/cli/chunks/{chunk-GUDOOOO6.js → chunk-YHFCLJMY.js} +1 -1
- package/dist/cli/chunks/{chunk-HELQ7CXL.js → chunk-YQBL5XTM.js} +1 -1
- package/dist/cli/chunks/chunk-Z6FRNWQA.js +6 -0
- package/dist/cli/chunks/{chunk-U7EGKKN3.js → chunk-ZT2DGSIO.js} +2 -2
- package/dist/cli/chunks/{chunk-DYSRMAZP.js → chunk-ZVF7QY4R.js} +1 -1
- package/dist/cli/chunks/{ci-OO42YBET.js → ci-KDEFR2X3.js} +2 -2
- package/dist/cli/chunks/{ci-output-YXMTEX7Q.js → ci-output-Z3WXRRFI.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-EHA4N643.js → circuit-breaker-GS44DEW2.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-E6G6SLYI.js → claude-flow-setup-OHVMHAAH.js} +2 -2
- package/dist/cli/chunks/client-T263ZXVV.js +2 -0
- package/dist/cli/chunks/cline-installer-5TCF4MZD.js +4 -0
- package/dist/cli/chunks/{code-Q3U6XDOO.js → code-3KCGTG7Z.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-BK2DC4MO.js → code-index-extractor-LJBI54MZ.js} +2 -2
- package/dist/cli/chunks/codex-installer-IB62Z6LA.js +8 -0
- package/dist/cli/chunks/{completions-TZ5F33TA.js → completions-JDXX7KKB.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-N7U4V7ID.js → complexity-analyzer-6JVDXXXP.js} +2 -2
- package/dist/cli/chunks/continuedev-installer-PUB45QVR.js +15 -0
- package/dist/cli/chunks/copilot-installer-QWJ36P22.js +3 -0
- package/dist/cli/chunks/core-handlers-ODKKGCFK.js +2 -0
- package/dist/cli/chunks/{cost-tracker-ZTIDLUFW.js → cost-tracker-J3KEJDL5.js} +2 -2
- package/dist/cli/chunks/{coverage-6G7T7TRQ.js → coverage-FWKRI2EY.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-APU725GC.js +2 -0
- package/dist/cli/chunks/cursor-installer-2HYCUCTH.js +3 -0
- package/dist/cli/chunks/{daemon-KTXGJJRI.js → daemon-BVP66DIZ.js} +4 -4
- package/dist/cli/chunks/{daemon-5A4GD6XA.js → daemon-G3DBRWDQ.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-4CUEQZD6.js → dag-attention-scheduler-2AQLNB4B.js} +2 -2
- package/dist/cli/chunks/{detect-I32JUSUE.js → detect-RUM5SHNE.js} +2 -2
- package/dist/cli/chunks/{dist-node-7ITNV6QS.js → dist-node-GX7MJHFT.js} +2 -2
- package/dist/cli/chunks/{domain-handler-LIFCXSZ4.js → domain-handler-OFBGZ2U5.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-67UWLHSK.js → domain-transfer-6CGRPRGR.js} +2 -2
- package/dist/cli/chunks/dream-PJ5GKY3J.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-4WC5RUD6.js → embed-and-insert-pattern-MUOEVQX2.js} +2 -2
- package/dist/cli/chunks/{eval-DLS2UAQ2.js → eval-SJMG67DE.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-VG5E6OJA.js → experience-capture-middleware-ICKN6IXX.js} +3 -3
- package/dist/cli/chunks/{fast-paths-262IVHDN.js → fast-paths-HXLBG3J4.js} +2 -2
- package/dist/cli/chunks/{feature-flags-L3K7DBN3.js → feature-flags-CRUB2ASU.js} +2 -2
- package/dist/cli/chunks/{feature-flags-JJ3FHZGD.js → feature-flags-JYZSSQJC.js} +2 -2
- package/dist/cli/chunks/{file-discovery-Q3PBKVUW.js → file-discovery-YHHC7NTJ.js} +2 -2
- package/dist/cli/chunks/{fleet-LQ5S2YHG.js → fleet-2VGDL4YL.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-I33Z537H.js → gnn-wrapper-7ZAGD4S4.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-RYIRAGZ7.js → heartbeat-handler-HAW3JRHN.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-4ZHUIW3Q.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-UVJJ6TTP.js +2 -0
- package/dist/cli/chunks/hnsw-index-K6HS34JZ.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-SSENBBPR.js → hnsw-legacy-bridge-BO325POX.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-F262IAGH.js → hnswlib-node-YTK7S7GL.js} +2 -2
- package/dist/cli/chunks/{hooks-LR5KQMN5.js → hooks-HKM3JTFQ.js} +10 -10
- package/dist/cli/chunks/hybrid-router-25S7OH2Y.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-NDZA2DKP.js → hypergraph-engine-LGLGHK6B.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-ADMWVHBT.js → hypergraph-handler-6QDVREZA.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-UP4RDMJH.js +2 -0
- package/dist/cli/chunks/init-handler-XUQ7XHIE.js +74 -0
- package/dist/cli/chunks/init-wizard-2PAJ3GEC.js +2 -0
- package/dist/cli/chunks/kernel-7WOQGMMT.js +2 -0
- package/dist/cli/chunks/kilocode-installer-6CEZLVIX.js +4 -0
- package/dist/cli/chunks/{kiro-installer-TINLYZ22.js → kiro-installer-6CJGATOS.js} +4 -4
- package/dist/cli/chunks/knowledge-graph-FN2AWHGR.js +2 -0
- package/dist/cli/chunks/{learning-KBT3S5WW.js → learning-EIYTYZJY.js} +3 -3
- package/dist/cli/chunks/{llm-router-2MX5LUAB.js → llm-router-J4CI7VHU.js} +4 -4
- package/dist/cli/chunks/llm-router-service-C3UPBAS3.js +2 -0
- package/dist/cli/chunks/{load-IQWTGMLZ.js → load-CQPWGLQQ.js} +2 -2
- package/dist/cli/chunks/load-test-PQSGLDXJ.js +2 -0
- package/dist/cli/chunks/mcp-THOATWCO.js +2 -0
- package/dist/cli/chunks/{memory-XQVPI4UT.js → memory-NZHMHMRK.js} +5 -5
- package/dist/cli/chunks/memory-backend-6FR4RT5O.js +2 -0
- package/dist/cli/chunks/{memory-handlers-XD7MSFUN.js → memory-handlers-L2J54AQE.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-JC63UCWG.js → multi-model-executor-3P5E773H.js} +2 -2
- package/dist/cli/chunks/opencode-installer-IRZMKSNG.js +15 -0
- package/dist/cli/chunks/{orchestrator-B75QWJUF.js → orchestrator-UADLXTKP.js} +18 -18
- package/dist/cli/chunks/pattern-null-store-B2UX4NZY.js +2 -0
- package/dist/cli/chunks/{pipeline-TCBQ2UTZ.js → pipeline-QEH3XHXJ.js} +2 -2
- package/dist/cli/chunks/{platform-T43AYI3Z.js → platform-NEZ3NXLT.js} +2 -2
- package/dist/cli/chunks/{plugin-MSI3ZU3Z.js → plugin-O33HR2VO.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-V62CWI6M.js → prime-radiant-advanced-wasm-MBUMFEX7.js} +2 -2
- package/dist/cli/chunks/protocol-executor-OQ6SL7SR.js +2 -0
- package/dist/cli/chunks/{protocol-handler-OH2INET2.js → protocol-handler-L455UOUT.js} +2 -2
- package/dist/cli/chunks/{prove-6PTMXMUL.js → prove-3XA3SMAA.js} +2 -2
- package/dist/cli/chunks/provider-manager-DQWHW2RG.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-3JS2CZAE.js +2 -0
- package/dist/cli/chunks/{quality-PLNQN5GU.js → quality-H6Z5JH5B.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-KXCWEM3Y.js +2 -0
- package/dist/cli/chunks/{real-embeddings-OW4OKR77.js → real-embeddings-5DNJ4KEM.js} +2 -2
- package/dist/cli/chunks/roocode-installer-KHXKR2FK.js +4 -0
- package/dist/cli/chunks/router-OVLIKT55.js +2 -0
- package/dist/cli/chunks/routing-feedback-2BYCXNXX.js +2 -0
- package/dist/cli/chunks/{routing-handler-CKFXXPMI.js → routing-handler-WAMGESEM.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-GERRPTJL.js → ruvector-commands-4J7XC6XY.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-5FAB2QPA.js → rvf-dual-writer-3PZEN6XN.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-46COKWYB.js → rvf-migration-adapter-OIUNRQSU.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-AJVRWSNC.js → rvf-migration-coordinator-QZXDI4I5.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-YNUYOQ5C.js +2 -0
- package/dist/cli/chunks/safe-db-6TYYEU7C.js +2 -0
- package/dist/cli/chunks/schedule-XVH7RTVY.js +2 -0
- package/dist/cli/chunks/scheduler-DHZBN5HA.js +2 -0
- package/dist/cli/chunks/{security-Q622IVRB.js → security-5NY77AMD.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-EST24R3R.js → shared-rvf-adapter-MHPUZIMW.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-CP6EXKBT.js → shared-rvf-dual-writer-ITLDYHCX.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-NR5WXTPN.js +2 -0
- package/dist/cli/chunks/{status-handler-LLRQB4E2.js → status-handler-7RBRIXZD.js} +2 -2
- package/dist/cli/chunks/{structural-health-BUFWTNN2.js → structural-health-MQPY6GA6.js} +2 -2
- package/dist/cli/chunks/{sync-JDG4SNT5.js → sync-66KCEANE.js} +2 -2
- package/dist/cli/chunks/{sync-RDL2RUOV.js → sync-USVQTHKN.js} +2 -2
- package/dist/cli/chunks/{task-handler-KPP6ZXA6.js → task-handler-4UI4FPPW.js} +2 -2
- package/dist/cli/chunks/{task-handlers-MRK2BQWI.js → task-handlers-KRII3GVV.js} +3 -3
- package/dist/cli/chunks/{test-7NYFTHRY.js → test-JHN2MVEG.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-LGPKDMWD.js → test-scheduling-ZWTEGS3S.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-H5JHB7TD.js → token-bootstrap-YWXL6AS5.js} +2 -2
- package/dist/cli/chunks/{token-usage-TWPDS5U3.js → token-usage-INII2XM3.js} +2 -2
- package/dist/cli/chunks/{transformers-GRNPPUHM.js → transformers-DVFGDNZC.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-DOH5F6TO.js → tree-sitter-wasm-parser-W2XJT3XF.js} +2 -2
- package/dist/cli/chunks/{types-NYV3YKE3.js → types-GBZ5Q2GP.js} +2 -2
- package/dist/cli/chunks/unified-memory-WJEZ5YAK.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-6ZA2PMYO.js +2 -0
- package/dist/cli/chunks/unified-persistence-SWH6R7MA.js +2 -0
- package/dist/cli/chunks/{upgrade-GDJMRYAT.js → upgrade-2JEXEGQX.js} +2 -2
- package/dist/cli/chunks/{validate-SIRFOPPM.js → validate-GDCM5YTS.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-XGMJYR6X.js → validate-swarm-QZ5RSJEU.js} +2 -2
- package/dist/cli/chunks/{vibium-NP6ENRKV.js → vibium-I5BMT734.js} +2 -2
- package/dist/cli/chunks/visual-security-PH5JQZCZ.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-YDBWPYZD.js → web-tree-sitter-3QY2LMLP.js} +2 -2
- package/dist/cli/chunks/windsurf-installer-V7OBPLOB.js +7 -0
- package/dist/cli/chunks/{witness-chain-YHLBWQQ3.js → witness-chain-BNJ4VSZX.js} +2 -2
- package/dist/cli/chunks/witness-chain-WYMBNGSL.js +2 -0
- package/dist/cli/chunks/{workflow-TA6RY7R5.js → workflow-3FJSNLPI.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-56JIXCI4.js +2 -0
- package/dist/cli/chunks/{wrappers-DS77IK4H.js → wrappers-ERTQNIPK.js} +2 -2
- package/dist/cli/commands/mcp.js +28 -28
- package/dist/cli/handlers/init-handler.d.ts +4 -0
- package/dist/cli/handlers/init-handler.js +50 -1
- package/dist/coordination/result-saver.js +4 -0
- package/dist/domains/code-intelligence/coordinator-hypergraph.js +9 -4
- package/dist/domains/code-intelligence/coordinator.js +9 -4
- package/dist/init/cline-installer.d.ts +6 -0
- package/dist/init/cline-installer.js +3 -1
- package/dist/init/codex-installer.d.ts +6 -0
- package/dist/init/codex-installer.js +3 -1
- package/dist/init/continuedev-installer.d.ts +6 -0
- package/dist/init/continuedev-installer.js +10 -3
- package/dist/init/copilot-installer.d.ts +6 -0
- package/dist/init/copilot-installer.js +3 -1
- package/dist/init/cursor-installer.d.ts +6 -0
- package/dist/init/cursor-installer.js +3 -1
- package/dist/init/kilocode-installer.d.ts +6 -0
- package/dist/init/kilocode-installer.js +3 -1
- package/dist/init/kiro-installer.d.ts +5 -0
- package/dist/init/kiro-installer.js +4 -4
- package/dist/init/opencode-installer.d.ts +39 -17
- package/dist/init/opencode-installer.js +166 -114
- package/dist/init/orchestrator.js +2 -0
- package/dist/init/phases/04-database.d.ts +5 -0
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/05-learning.js +3 -0
- package/dist/init/phases/06-code-intelligence.js +6 -0
- package/dist/init/phases/07-hooks.js +5 -0
- package/dist/init/phases/08-mcp.js +34 -7
- package/dist/init/phases/09-assets.js +35 -28
- package/dist/init/phases/10-workers.js +4 -0
- package/dist/init/phases/11-claude-md.d.ts +1 -0
- package/dist/init/phases/11-claude-md.js +8 -0
- package/dist/init/phases/12-verification.js +10 -5
- package/dist/init/phases/13-governance.js +5 -0
- package/dist/init/phases/phase-interface.d.ts +14 -0
- package/dist/init/platform-config-generator.d.ts +3 -1
- package/dist/init/platform-config-generator.js +31 -17
- package/dist/init/roocode-installer.d.ts +6 -0
- package/dist/init/roocode-installer.js +3 -1
- package/dist/init/windsurf-installer.d.ts +6 -0
- package/dist/init/windsurf-installer.js +3 -1
- package/dist/integrations/ruvector/rvf-native-adapter.js +8 -0
- package/dist/integrations/ruvector/shared-rvf-dual-writer.js +5 -0
- package/dist/kernel/kernel.js +4 -2
- package/dist/kernel/unified-memory.js +66 -48
- package/dist/learning/rvf-pattern-store.js +8 -0
- package/dist/mcp/bundle.js +361 -358
- package/dist/mcp/entry.js +52 -6
- package/dist/mcp/handlers/core-handlers.js +7 -2
- package/dist/mcp/protocol-server.js +27 -1
- package/dist/mcp/services/session-store.d.ts +1 -0
- package/dist/mcp/services/session-store.js +7 -0
- package/dist/mcp/tools/base.d.ts +6 -0
- package/dist/mcp/tools/base.js +16 -0
- package/dist/optimization/session-cache.d.ts +11 -0
- package/dist/optimization/session-cache.js +31 -0
- package/package.json +7 -5
- package/dist/cli/chunks/adapter-TTIBYXH2.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-CTV5OLSN.js +0 -2
- package/dist/cli/chunks/base-ISNCJZ7A.js +0 -2
- package/dist/cli/chunks/browser-workflow-OD32QTTI.js +0 -2
- package/dist/cli/chunks/chunk-DF7V6X3N.js +0 -2
- package/dist/cli/chunks/chunk-I64BLAFS.js +0 -2
- package/dist/cli/chunks/chunk-LHZYTNOQ.js +0 -6
- package/dist/cli/chunks/chunk-LRRQEAP5.js +0 -2
- package/dist/cli/chunks/chunk-XCYPVJ34.js +0 -2
- package/dist/cli/chunks/chunk-XK7P7OXO.js +0 -2
- package/dist/cli/chunks/client-N4FQ6SMD.js +0 -2
- package/dist/cli/chunks/cline-installer-6JPWD64G.js +0 -4
- package/dist/cli/chunks/codex-installer-DA3GBMLN.js +0 -8
- package/dist/cli/chunks/continuedev-installer-DDDJGW26.js +0 -14
- package/dist/cli/chunks/copilot-installer-JVFCE6GT.js +0 -3
- package/dist/cli/chunks/core-handlers-SFD5HCA3.js +0 -2
- package/dist/cli/chunks/cross-domain-router-7HGRUNLT.js +0 -2
- package/dist/cli/chunks/cursor-installer-JFNYGSDD.js +0 -3
- package/dist/cli/chunks/dream-HPGD5TLD.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-O6TI5E4P.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-TOVTN23J.js +0 -2
- package/dist/cli/chunks/hnsw-index-KCZ75V7K.js +0 -2
- package/dist/cli/chunks/hybrid-router-4JEPC4JZ.js +0 -2
- package/dist/cli/chunks/impact-analyzer-3MHIU3SE.js +0 -2
- package/dist/cli/chunks/init-handler-MGCYDX62.js +0 -70
- package/dist/cli/chunks/init-wizard-ERBO5JNA.js +0 -2
- package/dist/cli/chunks/kernel-XJPIIWET.js +0 -2
- package/dist/cli/chunks/kilocode-installer-DQVWZUKP.js +0 -4
- package/dist/cli/chunks/knowledge-graph-NTJEG6ZE.js +0 -2
- package/dist/cli/chunks/llm-router-service-4T66BGB5.js +0 -2
- package/dist/cli/chunks/load-test-PM674TSK.js +0 -2
- package/dist/cli/chunks/mcp-GCTTJUBZ.js +0 -2
- package/dist/cli/chunks/memory-backend-53NQ5CG7.js +0 -2
- package/dist/cli/chunks/opencode-installer-6VJGEBIU.js +0 -3
- package/dist/cli/chunks/pattern-null-store-IF2RG2ON.js +0 -2
- package/dist/cli/chunks/protocol-executor-7AS75ZWT.js +0 -2
- package/dist/cli/chunks/provider-manager-AU2C4AET.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-WATQRCFO.js +0 -2
- package/dist/cli/chunks/queen-coordinator-IOCC4VQH.js +0 -2
- package/dist/cli/chunks/roocode-installer-C32LCYAJ.js +0 -4
- package/dist/cli/chunks/router-SCJMX6WA.js +0 -2
- package/dist/cli/chunks/routing-feedback-RWC7F553.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-W2RT6PTO.js +0 -2
- package/dist/cli/chunks/safe-db-HO2LCAO3.js +0 -2
- package/dist/cli/chunks/schedule-XENCR4MR.js +0 -2
- package/dist/cli/chunks/scheduler-WKZ3O2SS.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-IN6BOSCX.js +0 -2
- package/dist/cli/chunks/unified-memory-6MXOYRXZ.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-HY3JJD5Z.js +0 -2
- package/dist/cli/chunks/unified-persistence-LKQNQYRY.js +0 -2
- package/dist/cli/chunks/visual-security-7TBWICHP.js +0 -2
- package/dist/cli/chunks/windsurf-installer-MFI6EAPH.js +0 -7
- package/dist/cli/chunks/witness-chain-24SVOWQL.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-XBDXCTLY.js +0 -2
|
@@ -42,8 +42,8 @@ export class AssetsPhase extends BasePhase {
|
|
|
42
42
|
else if (options.autoMode && isVersionUpgrade) {
|
|
43
43
|
context.services.log(` Version upgrade detected: updating skills and agents`);
|
|
44
44
|
}
|
|
45
|
-
// Install skills
|
|
46
|
-
if (config.skills.install) {
|
|
45
|
+
// Install skills (Claude Code surface — skipped with --no-claude, #532)
|
|
46
|
+
if (!options.noClaude && config.skills.install) {
|
|
47
47
|
const skillsInstaller = createSkillsInstaller({
|
|
48
48
|
projectRoot,
|
|
49
49
|
installV2Skills: config.skills.installV2,
|
|
@@ -56,25 +56,27 @@ export class AssetsPhase extends BasePhase {
|
|
|
56
56
|
context.services.warn(`Skills warnings: ${skillsResult.errors.join(', ')}`);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
// Install agents
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
59
|
+
// Install agents (Claude Code surface — skipped with --no-claude, #532)
|
|
60
|
+
if (!options.noClaude) {
|
|
61
|
+
try {
|
|
62
|
+
const agentsInstaller = createAgentsInstaller({
|
|
63
|
+
projectRoot,
|
|
64
|
+
installQEAgents: true,
|
|
65
|
+
installSubagents: true,
|
|
66
|
+
overwrite: shouldOverwrite,
|
|
67
|
+
});
|
|
68
|
+
const agentsResult = await agentsInstaller.install();
|
|
69
|
+
agentsInstalled = agentsResult.installed.length;
|
|
70
|
+
if (agentsResult.errors.length > 0) {
|
|
71
|
+
context.services.warn(`Agents warnings: ${agentsResult.errors.join(', ')}`);
|
|
72
|
+
}
|
|
71
73
|
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
context.services.warn(`Agents install error: ${error instanceof Error ? error.message : error}`);
|
|
76
|
+
}
|
|
77
|
+
// Initialize overlay configs in agent registry for runtime use
|
|
78
|
+
initializeOverlays(projectRoot);
|
|
72
79
|
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
context.services.warn(`Agents install error: ${error instanceof Error ? error.message : error}`);
|
|
75
|
-
}
|
|
76
|
-
// Initialize overlay configs in agent registry for runtime use
|
|
77
|
-
initializeOverlays(projectRoot);
|
|
78
80
|
// Install Vibium browser engine for the qe-browser fleet skill.
|
|
79
81
|
// Graceful — never fails init if Vibium cannot be installed.
|
|
80
82
|
// Skipped in --minimal mode per ADR-086 minimal-footprint guidance.
|
|
@@ -169,8 +171,12 @@ export class AssetsPhase extends BasePhase {
|
|
|
169
171
|
projectRoot,
|
|
170
172
|
installAgents: true,
|
|
171
173
|
installSkills: true,
|
|
172
|
-
|
|
174
|
+
// AQE tool .ts files are not in OpenCode's tool() format and are
|
|
175
|
+
// redundant with the MCP server — never install them.
|
|
176
|
+
installTools: false,
|
|
173
177
|
overwrite: shouldOverwrite,
|
|
178
|
+
// Database-free install => MCP server configured to run in-memory.
|
|
179
|
+
memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined,
|
|
174
180
|
});
|
|
175
181
|
const ocResult = await openCodeInstaller.install();
|
|
176
182
|
openCodeAgents = ocResult.agentsInstalled.length;
|
|
@@ -200,6 +206,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
200
206
|
installHooks: true,
|
|
201
207
|
installSteering: true,
|
|
202
208
|
overwrite: shouldOverwrite,
|
|
209
|
+
memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined,
|
|
203
210
|
});
|
|
204
211
|
const kiroResult = await kiroInstaller.install();
|
|
205
212
|
kiroAgents = kiroResult.agentsInstalled.length;
|
|
@@ -220,7 +227,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
220
227
|
const platformsConfigured = [];
|
|
221
228
|
if (options.withCopilot || (options.autoMode && existsSync(join(projectRoot, '.vscode')))) {
|
|
222
229
|
const { createCopilotInstaller } = await import('../copilot-installer.js');
|
|
223
|
-
const installer = createCopilotInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
230
|
+
const installer = createCopilotInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
224
231
|
const res = await installer.install();
|
|
225
232
|
if (res.mcpConfigured)
|
|
226
233
|
platformsConfigured.push('copilot');
|
|
@@ -233,7 +240,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
233
240
|
}
|
|
234
241
|
if (options.withCursor || (options.autoMode && existsSync(join(projectRoot, '.cursor')))) {
|
|
235
242
|
const { createCursorInstaller } = await import('../cursor-installer.js');
|
|
236
|
-
const installer = createCursorInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
243
|
+
const installer = createCursorInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
237
244
|
const res = await installer.install();
|
|
238
245
|
if (res.mcpConfigured)
|
|
239
246
|
platformsConfigured.push('cursor');
|
|
@@ -246,7 +253,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
246
253
|
}
|
|
247
254
|
if (options.withCline) {
|
|
248
255
|
const { createClineInstaller } = await import('../cline-installer.js');
|
|
249
|
-
const installer = createClineInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
256
|
+
const installer = createClineInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
250
257
|
const res = await installer.install();
|
|
251
258
|
if (res.mcpConfigured)
|
|
252
259
|
platformsConfigured.push('cline');
|
|
@@ -259,7 +266,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
259
266
|
}
|
|
260
267
|
if (options.withKiloCode || (options.autoMode && existsSync(join(projectRoot, '.kilocode')))) {
|
|
261
268
|
const { createKiloCodeInstaller } = await import('../kilocode-installer.js');
|
|
262
|
-
const installer = createKiloCodeInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
269
|
+
const installer = createKiloCodeInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
263
270
|
const res = await installer.install();
|
|
264
271
|
if (res.mcpConfigured)
|
|
265
272
|
platformsConfigured.push('kilocode');
|
|
@@ -272,7 +279,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
272
279
|
}
|
|
273
280
|
if (options.withRooCode || (options.autoMode && existsSync(join(projectRoot, '.roo')))) {
|
|
274
281
|
const { createRooCodeInstaller } = await import('../roocode-installer.js');
|
|
275
|
-
const installer = createRooCodeInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
282
|
+
const installer = createRooCodeInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
276
283
|
const res = await installer.install();
|
|
277
284
|
if (res.mcpConfigured)
|
|
278
285
|
platformsConfigured.push('roocode');
|
|
@@ -286,7 +293,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
286
293
|
// P2 platforms: Codex (TOML), Windsurf (JSON), Continue.dev (YAML)
|
|
287
294
|
if (options.withCodex || (options.autoMode && existsSync(join(projectRoot, '.codex')))) {
|
|
288
295
|
const { createCodexInstaller } = await import('../codex-installer.js');
|
|
289
|
-
const installer = createCodexInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
296
|
+
const installer = createCodexInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
290
297
|
const res = await installer.install();
|
|
291
298
|
if (res.mcpConfigured)
|
|
292
299
|
platformsConfigured.push('codex');
|
|
@@ -299,7 +306,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
299
306
|
}
|
|
300
307
|
if (options.withWindsurf || (options.autoMode && existsSync(join(projectRoot, '.windsurf')))) {
|
|
301
308
|
const { createWindsurfInstaller } = await import('../windsurf-installer.js');
|
|
302
|
-
const installer = createWindsurfInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
309
|
+
const installer = createWindsurfInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
303
310
|
const res = await installer.install();
|
|
304
311
|
if (res.mcpConfigured)
|
|
305
312
|
platformsConfigured.push('windsurf');
|
|
@@ -312,7 +319,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
312
319
|
}
|
|
313
320
|
if (options.withContinueDev || (options.autoMode && existsSync(join(projectRoot, '.continue')))) {
|
|
314
321
|
const { createContinueDevInstaller } = await import('../continuedev-installer.js');
|
|
315
|
-
const installer = createContinueDevInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
322
|
+
const installer = createContinueDevInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
316
323
|
const res = await installer.install();
|
|
317
324
|
if (res.mcpConfigured)
|
|
318
325
|
platformsConfigured.push('continuedev');
|
|
@@ -18,6 +18,10 @@ export class WorkersPhase extends BasePhase {
|
|
|
18
18
|
critical = false;
|
|
19
19
|
requiresPhases = ['configuration'];
|
|
20
20
|
async shouldRun(context) {
|
|
21
|
+
// Background workers persist to the SQLite DB, which is absent in
|
|
22
|
+
// database-free mode.
|
|
23
|
+
if (context.options.memoryBackend === 'memory')
|
|
24
|
+
return false;
|
|
21
25
|
const config = context.config;
|
|
22
26
|
return config?.workers?.daemonAutoStart && (config?.workers?.enabled?.length ?? 0) > 0;
|
|
23
27
|
}
|
|
@@ -17,6 +17,7 @@ export declare class ClaudeMdPhase extends BasePhase<ClaudeMdResult> {
|
|
|
17
17
|
readonly order = 110;
|
|
18
18
|
readonly critical = false;
|
|
19
19
|
readonly requiresPhases: readonly ["configuration"];
|
|
20
|
+
shouldRun(context: InitContext): Promise<boolean>;
|
|
20
21
|
protected run(context: InitContext): Promise<ClaudeMdResult>;
|
|
21
22
|
/**
|
|
22
23
|
* Generate CLAUDE.md content
|
|
@@ -14,6 +14,14 @@ export class ClaudeMdPhase extends BasePhase {
|
|
|
14
14
|
order = 110;
|
|
15
15
|
critical = false;
|
|
16
16
|
requiresPhases = ['configuration'];
|
|
17
|
+
async shouldRun(context) {
|
|
18
|
+
// #532: --no-claude suppresses the Claude Code surface, including CLAUDE.md.
|
|
19
|
+
if (context.options.noClaude) {
|
|
20
|
+
context.services.log(' CLAUDE.md skipped (--no-claude)');
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
17
25
|
async run(context) {
|
|
18
26
|
const config = context.config;
|
|
19
27
|
const { projectRoot } = context;
|
|
@@ -23,11 +23,13 @@ export class VerificationPhase extends BasePhase {
|
|
|
23
23
|
const config = context.config;
|
|
24
24
|
const { projectRoot } = context;
|
|
25
25
|
const checks = [];
|
|
26
|
-
//
|
|
26
|
+
// Database-free mode: there is no SQLite database to verify or write to.
|
|
27
|
+
const memOnly = context.options.memoryBackend === 'memory';
|
|
28
|
+
// Check database exists (in-memory mode has none — treated as satisfied).
|
|
27
29
|
const dbPath = join(projectRoot, '.agentic-qe', 'memory.db');
|
|
28
30
|
checks.push({
|
|
29
|
-
name: 'Database exists',
|
|
30
|
-
passed: existsSync(dbPath),
|
|
31
|
+
name: memOnly ? 'Database (in-memory mode)' : 'Database exists',
|
|
32
|
+
passed: memOnly || existsSync(dbPath),
|
|
31
33
|
});
|
|
32
34
|
// Check .agentic-qe directory
|
|
33
35
|
checks.push({
|
|
@@ -42,8 +44,11 @@ export class VerificationPhase extends BasePhase {
|
|
|
42
44
|
name: 'Config saved',
|
|
43
45
|
passed: existsSync(configPath),
|
|
44
46
|
});
|
|
45
|
-
// Write version marker
|
|
46
|
-
|
|
47
|
+
// Write version marker. Skipped in database-free mode — there is no
|
|
48
|
+
// memory.db; the version is still recorded in config.yaml above.
|
|
49
|
+
const versionWritten = memOnly
|
|
50
|
+
? true
|
|
51
|
+
: await this.writeVersionToDb(config.version, projectRoot);
|
|
47
52
|
checks.push({
|
|
48
53
|
name: 'Version marker',
|
|
49
54
|
passed: versionWritten,
|
|
@@ -33,6 +33,11 @@ export class GovernancePhase extends BasePhase {
|
|
|
33
33
|
* Run unless --no-governance flag is set
|
|
34
34
|
*/
|
|
35
35
|
async shouldRun(context) {
|
|
36
|
+
// #532: governance is part of the Claude Code surface — skip with --no-claude.
|
|
37
|
+
if (context.options.noClaude) {
|
|
38
|
+
context.services.log(' Governance skipped (--no-claude)');
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
36
41
|
// Check for --no-governance flag (via noGovernance option)
|
|
37
42
|
if (context.options.noGovernance) {
|
|
38
43
|
context.services.log(' Governance skipped (--no-governance flag)');
|
|
@@ -129,8 +129,22 @@ export interface InitOptions {
|
|
|
129
129
|
withAllPlatforms?: boolean;
|
|
130
130
|
/** Skip MCP server config (MCP is enabled by default) */
|
|
131
131
|
noMcp?: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Suppress the default Claude Code surface (#532). When true, init does NOT
|
|
134
|
+
* write `.claude/` skills+agents, `.mcp.json`, `CLAUDE.md`, governance, or
|
|
135
|
+
* hooks — making `--with-<platform>` flags the only install targets (e.g. an
|
|
136
|
+
* OpenCode-only install). Opt-in via `--no-claude`; default install is
|
|
137
|
+
* unchanged. Pairs naturally with `--no-database`.
|
|
138
|
+
*/
|
|
139
|
+
noClaude?: boolean;
|
|
132
140
|
/** @deprecated Use default behavior instead — MCP is now enabled by default */
|
|
133
141
|
withMcp?: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Memory backend for this install. 'memory' => database-free: the SQLite
|
|
144
|
+
* database phase is skipped and any MCP config is written to run in-memory.
|
|
145
|
+
* Undefined preserves the default persistent backend. Set via `--no-database`.
|
|
146
|
+
*/
|
|
147
|
+
memoryBackend?: 'memory' | 'sqlite' | 'agentdb' | 'hybrid';
|
|
134
148
|
}
|
|
135
149
|
/**
|
|
136
150
|
* V2 installation detection result
|
|
@@ -35,7 +35,9 @@ export declare class PlatformConfigGenerator {
|
|
|
35
35
|
/**
|
|
36
36
|
* Generate the MCP config for a platform
|
|
37
37
|
*/
|
|
38
|
-
generateMcpConfig(platformId: PlatformId
|
|
38
|
+
generateMcpConfig(platformId: PlatformId, opts?: {
|
|
39
|
+
memoryBackend?: 'memory' | 'sqlite' | 'agentdb' | 'hybrid';
|
|
40
|
+
}): GeneratedConfig;
|
|
39
41
|
/**
|
|
40
42
|
* Generate behavioral rules / instruction file for a platform
|
|
41
43
|
*/
|
|
@@ -135,14 +135,22 @@ const SAFE_AUTO_APPROVE_TOOLS = [
|
|
|
135
135
|
// ============================================================================
|
|
136
136
|
// MCP Server Entry
|
|
137
137
|
// ============================================================================
|
|
138
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Build the MCP server env. Issue #533: in database-free mode the server must
|
|
140
|
+
* run in-memory (AQE_MEMORY_BACKEND=memory) and must NOT be pointed at a
|
|
141
|
+
* persistent db path — otherwise launching via this client recreates
|
|
142
|
+
* .agentic-qe/memory.db at runtime and defeats the --no-database install.
|
|
143
|
+
*/
|
|
144
|
+
function getMcpServerEnv(dbFree) {
|
|
145
|
+
return dbFree
|
|
146
|
+
? { AQE_MEMORY_BACKEND: 'memory', AQE_V3_MODE: 'true' }
|
|
147
|
+
: { AQE_MEMORY_PATH: '.agentic-qe/memory.db', AQE_V3_MODE: 'true' };
|
|
148
|
+
}
|
|
149
|
+
function getMcpServerEntry(withAutoApprove, dbFree) {
|
|
139
150
|
const entry = {
|
|
140
151
|
command: 'npx',
|
|
141
152
|
args: ['-y', 'agentic-qe@latest', 'mcp'],
|
|
142
|
-
env:
|
|
143
|
-
AQE_MEMORY_PATH: '.agentic-qe/memory.db',
|
|
144
|
-
AQE_V3_MODE: 'true',
|
|
145
|
-
},
|
|
153
|
+
env: getMcpServerEnv(dbFree),
|
|
146
154
|
};
|
|
147
155
|
if (withAutoApprove) {
|
|
148
156
|
entry.disabled = false;
|
|
@@ -153,8 +161,8 @@ function getMcpServerEntry(withAutoApprove) {
|
|
|
153
161
|
// ============================================================================
|
|
154
162
|
// Config Generators
|
|
155
163
|
// ============================================================================
|
|
156
|
-
function generateJsonConfig(platform) {
|
|
157
|
-
const serverEntry = getMcpServerEntry(platform.supportsAutoApprove);
|
|
164
|
+
function generateJsonConfig(platform, dbFree) {
|
|
165
|
+
const serverEntry = getMcpServerEntry(platform.supportsAutoApprove, dbFree);
|
|
158
166
|
if (platform.id === 'copilot') {
|
|
159
167
|
// Copilot uses "servers" key with "type": "stdio"
|
|
160
168
|
const config = {
|
|
@@ -174,7 +182,10 @@ function generateJsonConfig(platform) {
|
|
|
174
182
|
};
|
|
175
183
|
return JSON.stringify(config, null, 2) + '\n';
|
|
176
184
|
}
|
|
177
|
-
function generateTomlConfig() {
|
|
185
|
+
function generateTomlConfig(dbFree) {
|
|
186
|
+
const envLines = dbFree
|
|
187
|
+
? `AQE_MEMORY_BACKEND = "memory"\nAQE_V3_MODE = "true"`
|
|
188
|
+
: `AQE_MEMORY_PATH = ".agentic-qe/memory.db"\nAQE_V3_MODE = "true"`;
|
|
178
189
|
return `# Agentic QE MCP Server
|
|
179
190
|
[mcp_servers.agentic-qe]
|
|
180
191
|
type = "stdio"
|
|
@@ -182,11 +193,13 @@ command = "npx"
|
|
|
182
193
|
args = ["-y", "agentic-qe@latest", "mcp"]
|
|
183
194
|
|
|
184
195
|
[mcp_servers.agentic-qe.env]
|
|
185
|
-
|
|
186
|
-
AQE_V3_MODE = "true"
|
|
196
|
+
${envLines}
|
|
187
197
|
`;
|
|
188
198
|
}
|
|
189
|
-
function generateYamlConfig() {
|
|
199
|
+
function generateYamlConfig(dbFree) {
|
|
200
|
+
const envLines = dbFree
|
|
201
|
+
? ` AQE_MEMORY_BACKEND: memory\n AQE_V3_MODE: "true"`
|
|
202
|
+
: ` AQE_MEMORY_PATH: .agentic-qe/memory.db\n AQE_V3_MODE: "true"`;
|
|
190
203
|
return `# Agentic QE MCP Server
|
|
191
204
|
mcpServers:
|
|
192
205
|
- name: agentic-qe
|
|
@@ -196,8 +209,7 @@ mcpServers:
|
|
|
196
209
|
- agentic-qe@latest
|
|
197
210
|
- mcp
|
|
198
211
|
env:
|
|
199
|
-
|
|
200
|
-
AQE_V3_MODE: "true"
|
|
212
|
+
${envLines}
|
|
201
213
|
`;
|
|
202
214
|
}
|
|
203
215
|
// ============================================================================
|
|
@@ -281,19 +293,21 @@ export class PlatformConfigGenerator {
|
|
|
281
293
|
/**
|
|
282
294
|
* Generate the MCP config for a platform
|
|
283
295
|
*/
|
|
284
|
-
generateMcpConfig(platformId) {
|
|
296
|
+
generateMcpConfig(platformId, opts) {
|
|
285
297
|
const platform = this.getPlatform(platformId);
|
|
298
|
+
// Issue #533: database-free installs propagate AQE_MEMORY_BACKEND=memory.
|
|
299
|
+
const dbFree = opts?.memoryBackend === 'memory';
|
|
286
300
|
let content;
|
|
287
301
|
switch (platform.configFormat) {
|
|
288
302
|
case 'toml':
|
|
289
|
-
content = generateTomlConfig();
|
|
303
|
+
content = generateTomlConfig(dbFree);
|
|
290
304
|
break;
|
|
291
305
|
case 'yaml':
|
|
292
|
-
content = generateYamlConfig();
|
|
306
|
+
content = generateYamlConfig(dbFree);
|
|
293
307
|
break;
|
|
294
308
|
case 'json':
|
|
295
309
|
default:
|
|
296
|
-
content = generateJsonConfig(platform);
|
|
310
|
+
content = generateJsonConfig(platform, dbFree);
|
|
297
311
|
break;
|
|
298
312
|
}
|
|
299
313
|
return {
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
export interface RooCodeInstallerOptions {
|
|
9
9
|
projectRoot: string;
|
|
10
10
|
overwrite?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Memory backend for this install. 'memory' => database-free: the MCP config
|
|
13
|
+
* is written to run in-memory (AQE_MEMORY_BACKEND=memory, no AQE_MEMORY_PATH). (#533)
|
|
14
|
+
*/
|
|
15
|
+
memoryBackend?: 'memory' | 'sqlite' | 'agentdb' | 'hybrid';
|
|
11
16
|
}
|
|
12
17
|
export interface RooCodeInstallResult {
|
|
13
18
|
success: boolean;
|
|
@@ -20,6 +25,7 @@ export interface RooCodeInstallResult {
|
|
|
20
25
|
export declare class RooCodeInstaller {
|
|
21
26
|
private projectRoot;
|
|
22
27
|
private overwrite;
|
|
28
|
+
private options;
|
|
23
29
|
private generator;
|
|
24
30
|
constructor(options: RooCodeInstallerOptions);
|
|
25
31
|
install(): Promise<RooCodeInstallResult>;
|
|
@@ -15,10 +15,12 @@ import { createPlatformConfigGenerator, } from './platform-config-generator.js';
|
|
|
15
15
|
export class RooCodeInstaller {
|
|
16
16
|
projectRoot;
|
|
17
17
|
overwrite;
|
|
18
|
+
options;
|
|
18
19
|
generator;
|
|
19
20
|
constructor(options) {
|
|
20
21
|
this.projectRoot = options.projectRoot;
|
|
21
22
|
this.overwrite = options.overwrite ?? false;
|
|
23
|
+
this.options = options;
|
|
22
24
|
this.generator = createPlatformConfigGenerator();
|
|
23
25
|
}
|
|
24
26
|
async install() {
|
|
@@ -32,7 +34,7 @@ export class RooCodeInstaller {
|
|
|
32
34
|
};
|
|
33
35
|
try {
|
|
34
36
|
// Generate MCP config
|
|
35
|
-
const mcpConfig = this.generator.generateMcpConfig('roocode');
|
|
37
|
+
const mcpConfig = this.generator.generateMcpConfig('roocode', { memoryBackend: this.options.memoryBackend });
|
|
36
38
|
const configPath = join(this.projectRoot, mcpConfig.path);
|
|
37
39
|
result.configPath = configPath;
|
|
38
40
|
if (!existsSync(configPath) || this.overwrite) {
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
export interface WindsurfInstallerOptions {
|
|
9
9
|
projectRoot: string;
|
|
10
10
|
overwrite?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Memory backend for this install. 'memory' => database-free: the MCP config
|
|
13
|
+
* is written to run in-memory (AQE_MEMORY_BACKEND=memory, no AQE_MEMORY_PATH). (#533)
|
|
14
|
+
*/
|
|
15
|
+
memoryBackend?: 'memory' | 'sqlite' | 'agentdb' | 'hybrid';
|
|
11
16
|
}
|
|
12
17
|
export interface WindsurfInstallResult {
|
|
13
18
|
success: boolean;
|
|
@@ -20,6 +25,7 @@ export interface WindsurfInstallResult {
|
|
|
20
25
|
export declare class WindsurfInstaller {
|
|
21
26
|
private projectRoot;
|
|
22
27
|
private overwrite;
|
|
28
|
+
private options;
|
|
23
29
|
private generator;
|
|
24
30
|
constructor(options: WindsurfInstallerOptions);
|
|
25
31
|
install(): Promise<WindsurfInstallResult>;
|
|
@@ -15,10 +15,12 @@ import { createPlatformConfigGenerator, } from './platform-config-generator.js';
|
|
|
15
15
|
export class WindsurfInstaller {
|
|
16
16
|
projectRoot;
|
|
17
17
|
overwrite;
|
|
18
|
+
options;
|
|
18
19
|
generator;
|
|
19
20
|
constructor(options) {
|
|
20
21
|
this.projectRoot = options.projectRoot;
|
|
21
22
|
this.overwrite = options.overwrite ?? false;
|
|
23
|
+
this.options = options;
|
|
22
24
|
this.generator = createPlatformConfigGenerator();
|
|
23
25
|
}
|
|
24
26
|
async install() {
|
|
@@ -32,7 +34,7 @@ export class WindsurfInstaller {
|
|
|
32
34
|
};
|
|
33
35
|
try {
|
|
34
36
|
// Generate MCP config (project-level .windsurf/mcp_config.json)
|
|
35
|
-
const mcpConfig = this.generator.generateMcpConfig('windsurf');
|
|
37
|
+
const mcpConfig = this.generator.generateMcpConfig('windsurf', { memoryBackend: this.options.memoryBackend });
|
|
36
38
|
const configPath = join(this.projectRoot, mcpConfig.path);
|
|
37
39
|
result.configPath = configPath;
|
|
38
40
|
if (!existsSync(configPath) || this.overwrite) {
|
|
@@ -368,6 +368,14 @@ export function openRvfStoreReadonly(path) {
|
|
|
368
368
|
}
|
|
369
369
|
/** Check whether the native binding is loadable on this platform */
|
|
370
370
|
export function isRvfNativeAvailable() {
|
|
371
|
+
// Database-free mode (#534): report RVF as unavailable so every consumer
|
|
372
|
+
// (RVF pattern store, dual-writer, agent memory branches) takes its existing
|
|
373
|
+
// "no native RVF" degraded path and writes nothing to disk — no patterns.rvf,
|
|
374
|
+
// brain.rvf, or branches/*.rvf. This is the single central gate for all
|
|
375
|
+
// on-disk RVF stores.
|
|
376
|
+
if (process.env.AQE_MEMORY_BACKEND === 'memory') {
|
|
377
|
+
return false;
|
|
378
|
+
}
|
|
371
379
|
return getNative() !== null;
|
|
372
380
|
}
|
|
373
381
|
//# sourceMappingURL=rvf-native-adapter.js.map
|
|
@@ -50,6 +50,11 @@ export async function getSharedRvfDualWriter() {
|
|
|
50
50
|
if (rvfMode === 'sqlite-only') {
|
|
51
51
|
return null;
|
|
52
52
|
}
|
|
53
|
+
// Database-free mode (#534): no on-disk RVF store (brain.rvf). The unified
|
|
54
|
+
// DB is already in-memory, so there is nothing to dual-write to disk.
|
|
55
|
+
if (process.env.AQE_MEMORY_BACKEND === 'memory') {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
53
58
|
// Auto-detect native availability (dynamic import to avoid bundling .node files)
|
|
54
59
|
const { isRvfNativeAvailable } = await import('./rvf-native-adapter.js');
|
|
55
60
|
if (!isRvfNativeAvailable()) {
|
package/dist/kernel/kernel.js
CHANGED
|
@@ -144,8 +144,10 @@ export class QEKernelImpl {
|
|
|
144
144
|
// and memory backend setup now happen in async initialize().
|
|
145
145
|
const projectRoot = findProjectRoot();
|
|
146
146
|
const dataDir = this._config.dataDir || path.join(projectRoot, '.agentic-qe');
|
|
147
|
-
// Ensure data directory exists
|
|
148
|
-
|
|
147
|
+
// Ensure data directory exists. Skipped in database-free mode so the
|
|
148
|
+
// project's .agentic-qe/ is never created (the memory branch below uses a
|
|
149
|
+
// throwaway temp DB outside the project).
|
|
150
|
+
if (this._config.memoryBackend !== 'memory' && !fs.existsSync(dataDir)) {
|
|
149
151
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
150
152
|
}
|
|
151
153
|
// Initialize memory backend based on config
|
|
@@ -125,6 +125,14 @@ export class UnifiedMemoryManager {
|
|
|
125
125
|
constructor(config) {
|
|
126
126
|
const resolvedDefaults = getResolvedDefaultConfig();
|
|
127
127
|
this.config = { ...resolvedDefaults, ...config };
|
|
128
|
+
// Database-free mode (#534): keep ALL unified persistence in an ephemeral
|
|
129
|
+
// in-memory SQLite DB. Handlers/domains that reach for UnifiedMemoryManager
|
|
130
|
+
// (core-handlers, trajectory-judge, test-generator, experience-capture, …)
|
|
131
|
+
// keep working, but nothing is ever written under .agentic-qe/.
|
|
132
|
+
if (process.env.AQE_MEMORY_BACKEND === 'memory') {
|
|
133
|
+
this.config.dbPath = ':memory:';
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
128
136
|
if (!path.isAbsolute(this.config.dbPath)) {
|
|
129
137
|
const projectRoot = findProjectRoot();
|
|
130
138
|
this.config.dbPath = path.join(projectRoot, this.config.dbPath);
|
|
@@ -175,56 +183,63 @@ export class UnifiedMemoryManager {
|
|
|
175
183
|
return;
|
|
176
184
|
signal?.throwIfAborted();
|
|
177
185
|
try {
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (envRoot) {
|
|
184
|
-
const resolvedPath = path.resolve(this.config.dbPath);
|
|
185
|
-
const resolvedRoot = path.resolve(envRoot);
|
|
186
|
-
// Only redirect if path points OUTSIDE the env root AND into a real
|
|
187
|
-
// .agentic-qe directory (not another temp test dir)
|
|
188
|
-
if (!resolvedPath.startsWith(resolvedRoot) &&
|
|
189
|
-
!resolvedPath.startsWith(os.tmpdir()) &&
|
|
190
|
-
resolvedPath.includes('.agentic-qe')) {
|
|
191
|
-
console.error(`[UnifiedMemory] WARNING: DB path "${this.config.dbPath}" points to a ` +
|
|
192
|
-
`production .agentic-qe/ while AQE_PROJECT_ROOT="${envRoot}". ` +
|
|
193
|
-
`Redirecting to test-safe path.`);
|
|
194
|
-
this.config.dbPath = path.join(envRoot, '.agentic-qe', 'memory.db');
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
const dir = path.dirname(this.config.dbPath);
|
|
198
|
-
if (!fs.existsSync(dir)) {
|
|
199
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
200
|
-
}
|
|
201
|
-
// DATA LOSS PREVENTION: If the DB file already exists, record its size
|
|
202
|
-
// before opening. better-sqlite3's `new Database(path)` creates a fresh
|
|
203
|
-
// empty file when the path doesn't exist. If we expected an existing DB
|
|
204
|
-
// (dir exists, .agentic-qe present) but the file is missing, something
|
|
205
|
-
// deleted it — warn loudly and look for the most recent backup.
|
|
206
|
-
const dbExistedBefore = fs.existsSync(this.config.dbPath);
|
|
186
|
+
// Database-free mode (#534): ':memory:' is ephemeral — skip ALL filesystem
|
|
187
|
+
// work (dir creation, path redirect, backup recovery, size accounting).
|
|
188
|
+
const inMemory = this.config.dbPath === ':memory:';
|
|
189
|
+
let dir = '';
|
|
190
|
+
let dbExistedBefore = false;
|
|
207
191
|
let dbSizeBefore = 0;
|
|
208
|
-
if (
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
//
|
|
213
|
-
const
|
|
214
|
-
if (
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
192
|
+
if (!inMemory) {
|
|
193
|
+
// SAFETY: Detect test processes trying to open the production DB.
|
|
194
|
+
// If AQE_PROJECT_ROOT is set to a temp dir (vitest isolation) but the
|
|
195
|
+
// dbPath resolves to the REAL project's .agentic-qe/memory.db, redirect.
|
|
196
|
+
// Only redirect production paths — leave explicitly-set temp paths alone.
|
|
197
|
+
const envRoot = process.env.AQE_PROJECT_ROOT;
|
|
198
|
+
if (envRoot) {
|
|
199
|
+
const resolvedPath = path.resolve(this.config.dbPath);
|
|
200
|
+
const resolvedRoot = path.resolve(envRoot);
|
|
201
|
+
// Only redirect if path points OUTSIDE the env root AND into a real
|
|
202
|
+
// .agentic-qe directory (not another temp test dir)
|
|
203
|
+
if (!resolvedPath.startsWith(resolvedRoot) &&
|
|
204
|
+
!resolvedPath.startsWith(os.tmpdir()) &&
|
|
205
|
+
resolvedPath.includes('.agentic-qe')) {
|
|
206
|
+
console.error(`[UnifiedMemory] WARNING: DB path "${this.config.dbPath}" points to a ` +
|
|
207
|
+
`production .agentic-qe/ while AQE_PROJECT_ROOT="${envRoot}". ` +
|
|
208
|
+
`Redirecting to test-safe path.`);
|
|
209
|
+
this.config.dbPath = path.join(envRoot, '.agentic-qe', 'memory.db');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
dir = path.dirname(this.config.dbPath);
|
|
213
|
+
if (!fs.existsSync(dir)) {
|
|
214
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
215
|
+
}
|
|
216
|
+
// DATA LOSS PREVENTION: If the DB file already exists, record its size
|
|
217
|
+
// before opening. better-sqlite3's `new Database(path)` creates a fresh
|
|
218
|
+
// empty file when the path doesn't exist. If we expected an existing DB
|
|
219
|
+
// (dir exists, .agentic-qe present) but the file is missing, something
|
|
220
|
+
// deleted it — warn loudly and look for the most recent backup.
|
|
221
|
+
dbExistedBefore = fs.existsSync(this.config.dbPath);
|
|
222
|
+
if (dbExistedBefore) {
|
|
223
|
+
dbSizeBefore = fs.statSync(this.config.dbPath).size;
|
|
224
|
+
}
|
|
225
|
+
else if (fs.existsSync(dir)) {
|
|
226
|
+
// The .agentic-qe directory exists but memory.db is missing — suspect data loss
|
|
227
|
+
const backups = this.findRecentBackups(dir);
|
|
228
|
+
if (backups.length > 0) {
|
|
229
|
+
const newest = backups[0];
|
|
230
|
+
console.error(`[UnifiedMemory] CRITICAL: Database file missing but directory exists!\n` +
|
|
231
|
+
` Expected: ${this.config.dbPath}\n` +
|
|
232
|
+
` Found ${backups.length} backup(s), newest: ${newest.path} (${(newest.size / 1024 / 1024).toFixed(1)}MB)\n` +
|
|
233
|
+
` Restoring from backup to prevent data loss...`);
|
|
234
|
+
fs.copyFileSync(newest.path, this.config.dbPath);
|
|
235
|
+
// Remove stale WAL/SHM that may belong to the old file
|
|
236
|
+
for (const suffix of ['-wal', '-shm']) {
|
|
237
|
+
const walPath = this.config.dbPath + suffix;
|
|
238
|
+
if (fs.existsSync(walPath))
|
|
239
|
+
fs.unlinkSync(walPath);
|
|
240
|
+
}
|
|
241
|
+
dbSizeBefore = newest.size;
|
|
226
242
|
}
|
|
227
|
-
dbSizeBefore = newest.size;
|
|
228
243
|
}
|
|
229
244
|
}
|
|
230
245
|
// Bail before opening the DB if the caller already gave up — saves a
|
|
@@ -327,6 +342,9 @@ export class UnifiedMemoryManager {
|
|
|
327
342
|
}
|
|
328
343
|
}
|
|
329
344
|
warnIfDuplicateDatabases() {
|
|
345
|
+
// Database-free mode has no on-disk canonical DB to compare against.
|
|
346
|
+
if (this.config.dbPath === ':memory:')
|
|
347
|
+
return;
|
|
330
348
|
try {
|
|
331
349
|
const projectRoot = findProjectRoot();
|
|
332
350
|
const canonicalDb = path.resolve(this.config.dbPath);
|