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
|
@@ -2,13 +2,39 @@
|
|
|
2
2
|
* OpenCode Platform Installer
|
|
3
3
|
* ADR-025: Enhanced Init with Self-Configuration
|
|
4
4
|
*
|
|
5
|
-
* Installs OpenCode agents
|
|
6
|
-
*
|
|
5
|
+
* Installs OpenCode agents and skills to user projects in OpenCode's NATIVE
|
|
6
|
+
* on-disk format (validated against OpenCode CLI v1.17.x):
|
|
7
|
+
* - agents -> .opencode/agent/<name>.md (markdown + YAML frontmatter; body = system prompt)
|
|
8
|
+
* - skills -> .opencode/skills/<name>/SKILL.md (frontmatter name+description; body = instructions)
|
|
9
|
+
* - MCP -> opencode.json (mcp.agentic-qe local server)
|
|
10
|
+
*
|
|
11
|
+
* The shipped source assets under <pkg>/.opencode/{agents,skills} use AQE's own
|
|
12
|
+
* YAML schema (name/description/model/systemPrompt/tools/permissions). OpenCode
|
|
13
|
+
* does NOT load that schema, so this installer CONVERTS them at install time.
|
|
14
|
+
*
|
|
15
|
+
* Tools are intentionally NOT installed: AQE's .opencode/tools/*.ts use a custom
|
|
16
|
+
* `{name, parameters, execute}` shape and call ctx.callTool('mcp:agentic-qe:*'),
|
|
17
|
+
* which is incompatible with OpenCode's `tool()` API and redundant once the MCP
|
|
18
|
+
* server is connected (the underlying tools are exposed directly).
|
|
7
19
|
*/
|
|
8
|
-
import { existsSync, mkdirSync, readdirSync,
|
|
20
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, } from 'fs';
|
|
9
21
|
import { join } from 'path';
|
|
22
|
+
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
10
23
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
11
24
|
import { findPackageRoot } from './find-package-root.js';
|
|
25
|
+
// OpenCode-valid per-agent permission keys. AQE keys outside this set are dropped
|
|
26
|
+
// or remapped (see PERM_KEY_MAP). In particular `mcp:agentic-qe:*` patterns are
|
|
27
|
+
// dropped — OpenCode does not interpret MCP tool patterns in the permission block.
|
|
28
|
+
const VALID_PERMISSION_KEYS = new Set([
|
|
29
|
+
'read', 'edit', 'glob', 'grep', 'list', 'bash', 'task',
|
|
30
|
+
'external_directory', 'todowrite', 'webfetch', 'websearch',
|
|
31
|
+
'lsp', 'skill', 'question', 'doom_loop',
|
|
32
|
+
]);
|
|
33
|
+
// Remap AQE permission keys to OpenCode equivalents.
|
|
34
|
+
const PERM_KEY_MAP = {
|
|
35
|
+
fetch: 'webfetch',
|
|
36
|
+
write: 'edit', // OpenCode has no separate 'write' permission; file writes are 'edit'
|
|
37
|
+
};
|
|
12
38
|
// ============================================================================
|
|
13
39
|
// OpenCode Installer Class
|
|
14
40
|
// ============================================================================
|
|
@@ -21,7 +47,7 @@ export class OpenCodeInstaller {
|
|
|
21
47
|
this.options = {
|
|
22
48
|
installAgents: true,
|
|
23
49
|
installSkills: true,
|
|
24
|
-
installTools:
|
|
50
|
+
installTools: false,
|
|
25
51
|
overwrite: false,
|
|
26
52
|
...options,
|
|
27
53
|
};
|
|
@@ -31,7 +57,7 @@ export class OpenCodeInstaller {
|
|
|
31
57
|
// Source Directory Detection
|
|
32
58
|
// ==========================================================================
|
|
33
59
|
/**
|
|
34
|
-
* Find the source .opencode/ directory containing agents/skills
|
|
60
|
+
* Find the source .opencode/ directory containing agents/skills to install.
|
|
35
61
|
* Resolves relative to the package installation directory (not CWD) so that
|
|
36
62
|
* globally-installed and bundled CLI paths all work correctly (#361).
|
|
37
63
|
*/
|
|
@@ -40,20 +66,16 @@ export class OpenCodeInstaller {
|
|
|
40
66
|
const pkgRoot = findPackageRoot(import.meta.url);
|
|
41
67
|
const possiblePaths = [];
|
|
42
68
|
if (pkgRoot) {
|
|
43
|
-
// OpenCode assets live at the package root .opencode/ directory
|
|
44
69
|
possiblePaths.push(join(pkgRoot, '.opencode'));
|
|
45
70
|
}
|
|
46
|
-
// Local install: in node_modules
|
|
47
71
|
possiblePaths.push(join(this.projectRoot, 'node_modules/agentic-qe/.opencode'));
|
|
48
72
|
for (const path of possiblePaths) {
|
|
49
|
-
// Never use the target directory as the source
|
|
50
73
|
if (path === targetDir)
|
|
51
74
|
continue;
|
|
52
75
|
if (this.isValidSourceDir(path)) {
|
|
53
76
|
return path;
|
|
54
77
|
}
|
|
55
78
|
}
|
|
56
|
-
// Return the first package path even if not found — install() will report the error
|
|
57
79
|
return possiblePaths[0] ?? join(this.projectRoot, 'node_modules/agentic-qe/.opencode');
|
|
58
80
|
}
|
|
59
81
|
/**
|
|
@@ -69,7 +91,7 @@ export class OpenCodeInstaller {
|
|
|
69
91
|
// Installation
|
|
70
92
|
// ==========================================================================
|
|
71
93
|
/**
|
|
72
|
-
* Install OpenCode agents, skills,
|
|
94
|
+
* Install OpenCode agents, skills, and MCP config (native OpenCode format).
|
|
73
95
|
*/
|
|
74
96
|
async install() {
|
|
75
97
|
const targetDir = join(this.projectRoot, '.opencode');
|
|
@@ -88,29 +110,22 @@ export class OpenCodeInstaller {
|
|
|
88
110
|
result.success = false;
|
|
89
111
|
return result;
|
|
90
112
|
}
|
|
91
|
-
//
|
|
113
|
+
// Per-agent permission overrides shipped in permissions.yaml (defaults +
|
|
114
|
+
// per-agent). Merged with each agent's own `permissions` field.
|
|
115
|
+
const permissionsYaml = this.loadPermissionsYaml();
|
|
92
116
|
if (this.options.installAgents) {
|
|
93
|
-
const agentResult = this.installAgents(targetDir);
|
|
117
|
+
const agentResult = this.installAgents(targetDir, permissionsYaml);
|
|
94
118
|
result.agentsInstalled = agentResult.installed;
|
|
95
119
|
result.errors.push(...agentResult.errors);
|
|
120
|
+
// Per-agent permissions are folded into each agent's frontmatter.
|
|
121
|
+
result.permissionsInstalled = result.agentsInstalled.length > 0;
|
|
96
122
|
}
|
|
97
|
-
// Install skills
|
|
98
123
|
if (this.options.installSkills) {
|
|
99
124
|
const skillResult = this.installSkills(targetDir);
|
|
100
125
|
result.skillsInstalled = skillResult.installed;
|
|
101
126
|
result.errors.push(...skillResult.errors);
|
|
102
127
|
}
|
|
103
|
-
//
|
|
104
|
-
if (this.options.installTools) {
|
|
105
|
-
const toolResult = this.installTools(targetDir);
|
|
106
|
-
result.toolsInstalled = toolResult.installed;
|
|
107
|
-
result.errors.push(...toolResult.errors);
|
|
108
|
-
}
|
|
109
|
-
// Install permissions
|
|
110
|
-
const permResult = this.installPermissions(targetDir);
|
|
111
|
-
result.permissionsInstalled = permResult.installed;
|
|
112
|
-
result.errors.push(...permResult.errors);
|
|
113
|
-
// Generate opencode.json MCP config if not exists
|
|
128
|
+
// Generate opencode.json MCP config if not present.
|
|
114
129
|
this.generateOpenCodeConfig();
|
|
115
130
|
}
|
|
116
131
|
catch (error) {
|
|
@@ -119,14 +134,58 @@ export class OpenCodeInstaller {
|
|
|
119
134
|
}
|
|
120
135
|
return result;
|
|
121
136
|
}
|
|
137
|
+
// ==========================================================================
|
|
138
|
+
// Permission helpers
|
|
139
|
+
// ==========================================================================
|
|
122
140
|
/**
|
|
123
|
-
*
|
|
141
|
+
* Load the shipped permissions.yaml (defaults + per-agent overrides). Returns
|
|
142
|
+
* { defaults, agents } or empty maps if the file is missing/unparseable.
|
|
124
143
|
*/
|
|
125
|
-
|
|
144
|
+
loadPermissionsYaml() {
|
|
145
|
+
const empty = { defaults: {}, agents: {} };
|
|
146
|
+
const file = join(this.sourceDir, 'permissions.yaml');
|
|
147
|
+
if (!existsSync(file))
|
|
148
|
+
return empty;
|
|
149
|
+
try {
|
|
150
|
+
const parsed = parseYaml(readFileSync(file, 'utf-8'));
|
|
151
|
+
return { defaults: parsed?.defaults ?? {}, agents: parsed?.agents ?? {} };
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return empty;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Build an OpenCode-valid `permission` frontmatter object by merging
|
|
159
|
+
* defaults -> agent.permissions (from agent yaml) -> permissions.yaml override,
|
|
160
|
+
* remapping keys and dropping anything OpenCode does not understand.
|
|
161
|
+
*/
|
|
162
|
+
buildPermission(agentName, agentPerms, permissionsYaml) {
|
|
163
|
+
const merged = {
|
|
164
|
+
...permissionsYaml.defaults,
|
|
165
|
+
...(agentPerms ?? {}),
|
|
166
|
+
...(permissionsYaml.agents[agentName] ?? {}),
|
|
167
|
+
};
|
|
168
|
+
const out = {};
|
|
169
|
+
for (const [rawKey, value] of Object.entries(merged)) {
|
|
170
|
+
// Drop MCP tool patterns and any other unsupported key.
|
|
171
|
+
if (rawKey.includes(':'))
|
|
172
|
+
continue;
|
|
173
|
+
const key = PERM_KEY_MAP[rawKey] ?? rawKey;
|
|
174
|
+
if (!VALID_PERMISSION_KEYS.has(key))
|
|
175
|
+
continue;
|
|
176
|
+
// 'allow' | 'ask' | 'deny' (string) or object map for bash etc.
|
|
177
|
+
out[key] = value;
|
|
178
|
+
}
|
|
179
|
+
return out;
|
|
180
|
+
}
|
|
181
|
+
// ==========================================================================
|
|
182
|
+
// Agents: <name>.yaml -> .opencode/agent/<name>.md
|
|
183
|
+
// ==========================================================================
|
|
184
|
+
installAgents(targetDir, permissionsYaml) {
|
|
126
185
|
const installed = [];
|
|
127
186
|
const errors = [];
|
|
128
187
|
const sourceAgentsDir = join(this.sourceDir, 'agents');
|
|
129
|
-
const targetAgentsDir = join(targetDir, '
|
|
188
|
+
const targetAgentsDir = join(targetDir, 'agent'); // OpenCode native: singular 'agent'
|
|
130
189
|
if (!existsSync(sourceAgentsDir)) {
|
|
131
190
|
errors.push(`Source agents directory not found: ${sourceAgentsDir}`);
|
|
132
191
|
return { installed, errors };
|
|
@@ -134,26 +193,37 @@ export class OpenCodeInstaller {
|
|
|
134
193
|
if (!existsSync(targetAgentsDir)) {
|
|
135
194
|
mkdirSync(targetAgentsDir, { recursive: true });
|
|
136
195
|
}
|
|
137
|
-
const
|
|
138
|
-
for (const file of files) {
|
|
139
|
-
const sourceFile = join(sourceAgentsDir, file);
|
|
140
|
-
const targetFile = join(targetAgentsDir, file);
|
|
141
|
-
if (existsSync(targetFile) && !this.options.overwrite) {
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
196
|
+
for (const file of readdirSync(sourceAgentsDir).filter(f => f.endsWith('.yaml'))) {
|
|
144
197
|
try {
|
|
145
|
-
|
|
146
|
-
|
|
198
|
+
const data = parseYaml(readFileSync(join(sourceAgentsDir, file), 'utf-8'));
|
|
199
|
+
const name = data.name || file.replace(/\.yaml$/, '');
|
|
200
|
+
const targetFile = join(targetAgentsDir, `${name}.md`);
|
|
201
|
+
if (existsSync(targetFile) && !this.options.overwrite)
|
|
202
|
+
continue;
|
|
203
|
+
const frontmatter = {
|
|
204
|
+
description: (data.description || name).replace(/\s+/g, ' ').trim(),
|
|
205
|
+
mode: 'subagent',
|
|
206
|
+
};
|
|
207
|
+
// NOTE: `model` is intentionally omitted so agents inherit the user's
|
|
208
|
+
// default OpenCode model. AQE ships model "claude-sonnet-4-6" which may
|
|
209
|
+
// not resolve in OpenCode's provider registry; inheriting avoids
|
|
210
|
+
// hard-failing the agent at invocation time.
|
|
211
|
+
const permission = this.buildPermission(name, data.permissions, permissionsYaml);
|
|
212
|
+
if (Object.keys(permission).length > 0)
|
|
213
|
+
frontmatter.permission = permission;
|
|
214
|
+
const body = (data.systemPrompt || '').trimEnd() + '\n';
|
|
215
|
+
writeFileSync(targetFile, this.renderFrontmatter(frontmatter) + '\n' + body);
|
|
216
|
+
installed.push(name);
|
|
147
217
|
}
|
|
148
218
|
catch (error) {
|
|
149
|
-
errors.push(`Failed to
|
|
219
|
+
errors.push(`Failed to convert agent ${file}: ${toErrorMessage(error)}`);
|
|
150
220
|
}
|
|
151
221
|
}
|
|
152
222
|
return { installed, errors };
|
|
153
223
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
224
|
+
// ==========================================================================
|
|
225
|
+
// Skills: <name>.yaml -> .opencode/skills/<name>/SKILL.md
|
|
226
|
+
// ==========================================================================
|
|
157
227
|
installSkills(targetDir) {
|
|
158
228
|
const installed = [];
|
|
159
229
|
const errors = [];
|
|
@@ -166,97 +236,79 @@ export class OpenCodeInstaller {
|
|
|
166
236
|
if (!existsSync(targetSkillsDir)) {
|
|
167
237
|
mkdirSync(targetSkillsDir, { recursive: true });
|
|
168
238
|
}
|
|
169
|
-
const
|
|
170
|
-
for (const file of files) {
|
|
171
|
-
const sourceFile = join(sourceSkillsDir, file);
|
|
172
|
-
const targetFile = join(targetSkillsDir, file);
|
|
173
|
-
if (existsSync(targetFile) && !this.options.overwrite) {
|
|
174
|
-
continue;
|
|
175
|
-
}
|
|
239
|
+
for (const file of readdirSync(sourceSkillsDir).filter(f => f.endsWith('.yaml'))) {
|
|
176
240
|
try {
|
|
177
|
-
|
|
178
|
-
|
|
241
|
+
const data = parseYaml(readFileSync(join(sourceSkillsDir, file), 'utf-8'));
|
|
242
|
+
const name = (data.name || file.replace(/\.yaml$/, '')).toLowerCase();
|
|
243
|
+
// OpenCode requires: ^[a-z0-9]+(-[a-z0-9]+)*$ and name === directory.
|
|
244
|
+
if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(name)) {
|
|
245
|
+
errors.push(`Skipped skill with non-conforming name: ${name}`);
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
const skillDir = join(targetSkillsDir, name);
|
|
249
|
+
const targetFile = join(skillDir, 'SKILL.md');
|
|
250
|
+
if (existsSync(targetFile) && !this.options.overwrite)
|
|
251
|
+
continue;
|
|
252
|
+
if (!existsSync(skillDir))
|
|
253
|
+
mkdirSync(skillDir, { recursive: true });
|
|
254
|
+
let description = (data.description || name).replace(/\s+/g, ' ').trim();
|
|
255
|
+
if (description.length > 1024)
|
|
256
|
+
description = description.slice(0, 1021) + '...';
|
|
257
|
+
let body = '';
|
|
258
|
+
for (const step of data.steps ?? []) {
|
|
259
|
+
body += `## ${step.name || 'step'}\n\n`;
|
|
260
|
+
const text = (step.prompt || step.description || '').trimEnd();
|
|
261
|
+
if (text)
|
|
262
|
+
body += `${text}\n\n`;
|
|
263
|
+
}
|
|
264
|
+
if (!body.trim())
|
|
265
|
+
body = `${data.description || name}\n`;
|
|
266
|
+
writeFileSync(targetFile, this.renderFrontmatter({ name, description }) + '\n' + body.trimEnd() + '\n');
|
|
267
|
+
installed.push(name);
|
|
179
268
|
}
|
|
180
269
|
catch (error) {
|
|
181
|
-
errors.push(`Failed to
|
|
270
|
+
errors.push(`Failed to convert skill ${file}: ${toErrorMessage(error)}`);
|
|
182
271
|
}
|
|
183
272
|
}
|
|
184
273
|
return { installed, errors };
|
|
185
274
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
const sourceToolsDir = join(this.sourceDir, 'tools');
|
|
193
|
-
const targetToolsDir = join(targetDir, 'tools');
|
|
194
|
-
if (!existsSync(sourceToolsDir)) {
|
|
195
|
-
errors.push(`Source tools directory not found: ${sourceToolsDir}`);
|
|
196
|
-
return { installed, errors };
|
|
197
|
-
}
|
|
198
|
-
if (!existsSync(targetToolsDir)) {
|
|
199
|
-
mkdirSync(targetToolsDir, { recursive: true });
|
|
200
|
-
}
|
|
201
|
-
const files = readdirSync(sourceToolsDir).filter(f => f.endsWith('.ts'));
|
|
202
|
-
for (const file of files) {
|
|
203
|
-
const sourceFile = join(sourceToolsDir, file);
|
|
204
|
-
const targetFile = join(targetToolsDir, file);
|
|
205
|
-
if (existsSync(targetFile) && !this.options.overwrite) {
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
try {
|
|
209
|
-
copyFileSync(sourceFile, targetFile);
|
|
210
|
-
installed.push(file.replace('.ts', ''));
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
errors.push(`Failed to install tool ${file}: ${toErrorMessage(error)}`);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return { installed, errors };
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Install permissions.yaml to target .opencode/ directory
|
|
220
|
-
*/
|
|
221
|
-
installPermissions(targetDir) {
|
|
222
|
-
const errors = [];
|
|
223
|
-
const sourceFile = join(this.sourceDir, 'permissions.yaml');
|
|
224
|
-
const targetFile = join(targetDir, 'permissions.yaml');
|
|
225
|
-
if (!existsSync(sourceFile)) {
|
|
226
|
-
return { installed: false, errors: [] };
|
|
227
|
-
}
|
|
228
|
-
if (existsSync(targetFile) && !this.options.overwrite) {
|
|
229
|
-
return { installed: false, errors: [] };
|
|
230
|
-
}
|
|
231
|
-
try {
|
|
232
|
-
if (!existsSync(targetDir)) {
|
|
233
|
-
mkdirSync(targetDir, { recursive: true });
|
|
234
|
-
}
|
|
235
|
-
copyFileSync(sourceFile, targetFile);
|
|
236
|
-
return { installed: true, errors: [] };
|
|
237
|
-
}
|
|
238
|
-
catch (error) {
|
|
239
|
-
errors.push(`Failed to install permissions.yaml: ${toErrorMessage(error)}`);
|
|
240
|
-
return { installed: false, errors };
|
|
241
|
-
}
|
|
275
|
+
// ==========================================================================
|
|
276
|
+
// Frontmatter rendering
|
|
277
|
+
// ==========================================================================
|
|
278
|
+
/** Render a frontmatter object as a `---`-delimited YAML block. */
|
|
279
|
+
renderFrontmatter(obj) {
|
|
280
|
+
return `---\n${stringifyYaml(obj).trimEnd()}\n---\n`;
|
|
242
281
|
}
|
|
282
|
+
// ==========================================================================
|
|
283
|
+
// opencode.json MCP config
|
|
284
|
+
// ==========================================================================
|
|
243
285
|
/**
|
|
244
|
-
* Generate opencode.json MCP config if it does not already exist
|
|
286
|
+
* Generate opencode.json MCP config if it does not already exist.
|
|
245
287
|
*/
|
|
246
288
|
generateOpenCodeConfig() {
|
|
247
289
|
const configPath = join(this.projectRoot, 'opencode.json');
|
|
248
|
-
if (existsSync(configPath))
|
|
290
|
+
if (existsSync(configPath))
|
|
249
291
|
return;
|
|
250
|
-
|
|
292
|
+
// Database-free install: in-memory backend => no AQE_MEMORY_PATH, set
|
|
293
|
+
// AQE_MEMORY_BACKEND=memory so the MCP server writes nothing to disk.
|
|
294
|
+
// Otherwise preserve the historical persistent SQLite path.
|
|
295
|
+
const environment = this.options.memoryBackend === 'memory'
|
|
296
|
+
? { AQE_MEMORY_BACKEND: 'memory', AQE_V3_MODE: 'true' }
|
|
297
|
+
: { AQE_MEMORY_PATH: '.agentic-qe/memory.db', AQE_V3_MODE: 'true' };
|
|
251
298
|
const config = {
|
|
299
|
+
$schema: 'https://opencode.ai/config.json',
|
|
252
300
|
mcp: {
|
|
253
301
|
'agentic-qe': {
|
|
254
302
|
type: 'local',
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
303
|
+
// Use the dedicated `aqe-mcp` bin, which runs the MCP server bundle
|
|
304
|
+
// directly. The `agentic-qe mcp` subcommand instead double-spawns the
|
|
305
|
+
// server (stdio:'inherit'), which corrupts stdin delivery and makes
|
|
306
|
+
// OpenCode's client fail with "Failed to get tools". A higher timeout
|
|
307
|
+
// accommodates the server's subsystem boot.
|
|
308
|
+
command: ['aqe-mcp'],
|
|
309
|
+
environment,
|
|
310
|
+
enabled: true,
|
|
311
|
+
timeout: 60000,
|
|
260
312
|
},
|
|
261
313
|
},
|
|
262
314
|
};
|
|
@@ -29,6 +29,11 @@ export declare class DatabasePhase extends BasePhase<DatabaseResult> {
|
|
|
29
29
|
readonly order = 40;
|
|
30
30
|
readonly critical = true;
|
|
31
31
|
readonly requiresPhases: readonly ["configuration"];
|
|
32
|
+
/**
|
|
33
|
+
* Database-free mode (`--no-database` / memoryBackend: 'memory'): skip the
|
|
34
|
+
* SQLite database entirely. Nothing is written under .agentic-qe/.
|
|
35
|
+
*/
|
|
36
|
+
shouldRun(context: InitContext): Promise<boolean>;
|
|
32
37
|
protected run(context: InitContext): Promise<DatabaseResult>;
|
|
33
38
|
}
|
|
34
39
|
//# sourceMappingURL=04-database.d.ts.map
|
|
@@ -26,6 +26,13 @@ export class DatabasePhase extends BasePhase {
|
|
|
26
26
|
order = 40;
|
|
27
27
|
critical = true;
|
|
28
28
|
requiresPhases = ['configuration'];
|
|
29
|
+
/**
|
|
30
|
+
* Database-free mode (`--no-database` / memoryBackend: 'memory'): skip the
|
|
31
|
+
* SQLite database entirely. Nothing is written under .agentic-qe/.
|
|
32
|
+
*/
|
|
33
|
+
async shouldRun(context) {
|
|
34
|
+
return context.options.memoryBackend !== 'memory';
|
|
35
|
+
}
|
|
29
36
|
async run(context) {
|
|
30
37
|
const { projectRoot } = context;
|
|
31
38
|
// Issue #399 / ADR-090: warn on stale ./vectors.db cruft.
|
|
@@ -16,6 +16,9 @@ export class LearningPhase extends BasePhase {
|
|
|
16
16
|
critical = false;
|
|
17
17
|
requiresPhases = ['database', 'configuration'];
|
|
18
18
|
async shouldRun(context) {
|
|
19
|
+
// Database-free mode has no persistent store to seed patterns into.
|
|
20
|
+
if (context.options.memoryBackend === 'memory')
|
|
21
|
+
return false;
|
|
19
22
|
const config = context.config;
|
|
20
23
|
return config?.learning?.enabled ?? true;
|
|
21
24
|
}
|
|
@@ -84,6 +84,12 @@ export class CodeIntelligencePhase extends BasePhase {
|
|
|
84
84
|
* for the case where the corpus misses something in the wild.
|
|
85
85
|
*/
|
|
86
86
|
async shouldRun(context) {
|
|
87
|
+
// Database-free mode: the knowledge graph is persisted to the SQLite DB,
|
|
88
|
+
// which does not exist here. Build it later with `aqe code index`.
|
|
89
|
+
if (context.options.memoryBackend === 'memory') {
|
|
90
|
+
context.services.log(' Code intelligence skipped (database-free mode)');
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
87
93
|
const envSkip = process.env.AQE_SKIP_CODE_INDEX;
|
|
88
94
|
if (envSkip === '1' || envSkip === 'true') {
|
|
89
95
|
context.services.log(' Code intelligence skipped (AQE_SKIP_CODE_INDEX=1)');
|
|
@@ -25,6 +25,11 @@ export class HooksPhase extends BasePhase {
|
|
|
25
25
|
critical = false;
|
|
26
26
|
requiresPhases = ['configuration'];
|
|
27
27
|
async shouldRun(context) {
|
|
28
|
+
// #532: hooks write into .claude/ — part of the Claude Code surface.
|
|
29
|
+
if (context.options.noClaude) {
|
|
30
|
+
context.services.log(' Hooks skipped (--no-claude)');
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
28
33
|
const config = context.config;
|
|
29
34
|
return config?.hooks?.claudeCode ?? true;
|
|
30
35
|
}
|
|
@@ -26,6 +26,11 @@ export class MCPPhase extends BasePhase {
|
|
|
26
26
|
requiresPhases = ['configuration', 'database'];
|
|
27
27
|
async run(context) {
|
|
28
28
|
const { projectRoot } = context;
|
|
29
|
+
// #532: --no-claude suppresses the Claude Code surface, including .mcp.json.
|
|
30
|
+
if (context.options.noClaude) {
|
|
31
|
+
context.services.log(' MCP: skipped (--no-claude — .mcp.json is the Claude Code surface)');
|
|
32
|
+
return { configured: false, mcpPath: '', serverName: '' };
|
|
33
|
+
}
|
|
29
34
|
// MCP is enabled by default — skip only with --no-mcp
|
|
30
35
|
if (context.options.noMcp) {
|
|
31
36
|
context.services.log(' MCP: skipped (--no-mcp)');
|
|
@@ -39,14 +44,29 @@ export class MCPPhase extends BasePhase {
|
|
|
39
44
|
// AQE MCP server configuration
|
|
40
45
|
// AQE_PROJECT_ROOT omitted — runtime discovery via findProjectRoot() is
|
|
41
46
|
// portable across machines, devcontainers, and CI (#321)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
//
|
|
48
|
+
// Issue #533: in database-free mode (--no-database / memoryBackend:'memory')
|
|
49
|
+
// the server must run in-memory and must not have learning/workers forced
|
|
50
|
+
// on (those persist to SQLite, recreating .agentic-qe/memory.db at runtime
|
|
51
|
+
// and defeating the db-free install). Those phases are already skipped at
|
|
52
|
+
// install time; mirror that in the generated env.
|
|
53
|
+
const dbFree = context.options.memoryBackend === 'memory';
|
|
54
|
+
const env = dbFree
|
|
55
|
+
? {
|
|
56
|
+
AQE_MEMORY_BACKEND: 'memory',
|
|
57
|
+
AQE_LEARNING_ENABLED: 'false',
|
|
58
|
+
AQE_WORKERS_ENABLED: 'false',
|
|
59
|
+
NODE_ENV: 'production',
|
|
60
|
+
}
|
|
61
|
+
: {
|
|
46
62
|
AQE_LEARNING_ENABLED: 'true',
|
|
47
63
|
AQE_WORKERS_ENABLED: 'true',
|
|
48
64
|
NODE_ENV: 'production',
|
|
49
|
-
}
|
|
65
|
+
};
|
|
66
|
+
const aqeServerConfig = {
|
|
67
|
+
command: 'aqe-mcp',
|
|
68
|
+
args: [],
|
|
69
|
+
env,
|
|
50
70
|
};
|
|
51
71
|
// Write to .mcp.json at project root (the only location Claude Code reads)
|
|
52
72
|
const rootMcpPath = join(projectRoot, '.mcp.json');
|
|
@@ -68,8 +88,15 @@ export class MCPPhase extends BasePhase {
|
|
|
68
88
|
writeFileSync(rootMcpPath, JSON.stringify(rootMcpConfig, null, 2), 'utf-8');
|
|
69
89
|
context.services.log(` MCP config: ${rootMcpPath}`);
|
|
70
90
|
context.services.log(` Server: agentic-qe`);
|
|
71
|
-
|
|
72
|
-
|
|
91
|
+
if (dbFree) {
|
|
92
|
+
context.services.log(` Memory backend: in-memory (database-free)`);
|
|
93
|
+
context.services.log(` Learning: disabled (db-free)`);
|
|
94
|
+
context.services.log(` Workers: disabled (db-free)`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
context.services.log(` Learning: enabled`);
|
|
98
|
+
context.services.log(` Workers: enabled`);
|
|
99
|
+
}
|
|
73
100
|
return {
|
|
74
101
|
configured: true,
|
|
75
102
|
mcpPath: rootMcpPath,
|