agentic-qe 3.13.11 → 3.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/helpers/.helpers-version +1 -1
- package/.claude/helpers/helpers.manifest.json +2 -2
- package/.claude/helpers/statusline.cjs +89 -40
- package/.claude/skills/qe-court/SKILL.md +4 -4
- package/.claude/skills/qe-court/config-schema.json +38 -0
- package/.claude/skills/qe-court/evals/qe-court.yaml +8 -8
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +93 -0
- package/assets/skills/qe-court/SKILL.md +4 -4
- package/assets/skills/qe-court/config-schema.json +38 -0
- package/assets/skills/qe-court/evals/qe-court.yaml +8 -8
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/brain-commands.d.ts +1 -0
- package/dist/cli/brain-commands.js +1 -0
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-3VBXL7DO.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-5ARDZYNO.js → agent-booster-wasm-JZO6VUW4.js} +2 -2
- package/dist/cli/chunks/{agent-handler-SVKEPF7B.js → agent-handler-534KFGEJ.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-QDL7OVHC.js → agent-memory-branch-B7KWLWY4.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-NXRNKJNA.js +2 -0
- package/dist/cli/chunks/{arena-7OCKBN6O.js → arena-7CCD3S3I.js} +2 -2
- package/dist/cli/chunks/{arena-HQLSNQZ3.js → arena-OW5MELJX.js} +4 -4
- package/dist/cli/chunks/{audit-2EQJW5UE.js → audit-BHVKN4E2.js} +3 -3
- package/dist/cli/chunks/base-F6GMOKU2.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-OBFNNE4T.js → better-sqlite3-P5FA6WFK.js} +2 -2
- package/dist/cli/chunks/brain-handler-WNW5LOV7.js +90 -0
- package/dist/cli/chunks/{branch-enumerator-6B4L5O3D.js → branch-enumerator-TVZ2ODKH.js} +2 -2
- package/dist/cli/chunks/{browser-VDMGBWNK.js → browser-TCEB2W2F.js} +2 -2
- package/dist/cli/chunks/browser-workflow-QRDC46LR.js +2 -0
- package/dist/cli/chunks/{chunk-M3MRFZKD.js → chunk-2D7UBX5S.js} +1 -1
- package/dist/cli/chunks/{chunk-IZF3VLNW.js → chunk-2HYVOX6N.js} +1 -1
- package/dist/cli/chunks/{chunk-U6G6RUFI.js → chunk-2NO4H35K.js} +1 -1
- package/dist/cli/chunks/{chunk-4TJJU5Y2.js → chunk-2O4DDPEA.js} +19 -19
- package/dist/cli/chunks/{chunk-24XW7KUX.js → chunk-3EM2MK3Z.js} +2 -2
- package/dist/cli/chunks/chunk-3GUO4ERR.js +24 -0
- package/dist/cli/chunks/{chunk-YRCNWQBO.js → chunk-3JIJBR4V.js} +2 -2
- package/dist/cli/chunks/{chunk-2E2QCIGR.js → chunk-3QT6S3A3.js} +3 -3
- package/dist/cli/chunks/{chunk-W2T36CS5.js → chunk-3RYTAYR6.js} +1 -1
- package/dist/cli/chunks/chunk-43GPSYAL.js +14 -0
- package/dist/cli/chunks/{chunk-YYAJEPRD.js → chunk-4FEJEVG7.js} +1 -1
- package/dist/cli/chunks/{chunk-4DTBGQWA.js → chunk-4MK2G6TK.js} +2 -2
- package/dist/cli/chunks/{chunk-CK7ZLMD2.js → chunk-4XTHRAUV.js} +1 -1
- package/dist/cli/chunks/{chunk-LM727BVL.js → chunk-4ZVGSVHV.js} +4 -4
- package/dist/cli/chunks/{chunk-DPZ4AU6W.js → chunk-52DFCV57.js} +2 -2
- package/dist/cli/chunks/{chunk-PADCR4LY.js → chunk-5LEAGKX5.js} +2 -2
- package/dist/cli/chunks/{chunk-P736OKQN.js → chunk-5MZF4N4Q.js} +1 -1
- package/dist/cli/chunks/{chunk-XZI4QXJJ.js → chunk-5VDVYTO5.js} +2 -2
- package/dist/cli/chunks/chunk-5XGVSQS2.js +11 -0
- package/dist/cli/chunks/{chunk-AAPJG3WI.js → chunk-6AOZU3UN.js} +2 -2
- package/dist/cli/chunks/{chunk-NC7HTDH5.js → chunk-6AYO3IR2.js} +2 -2
- package/dist/cli/chunks/{chunk-TJ67B7S7.js → chunk-6DPAMYLU.js} +2 -2
- package/dist/cli/chunks/{chunk-PZHAPI47.js → chunk-6IJMD2ZL.js} +3 -3
- package/dist/cli/chunks/{chunk-RGUKQXKL.js → chunk-6IZQSLYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-2E3PRDEX.js → chunk-6W42XWLL.js} +2 -2
- package/dist/cli/chunks/{chunk-ATRUE6CT.js → chunk-7BOPFN3Y.js} +2 -2
- package/dist/cli/chunks/{chunk-LIGDJP6H.js → chunk-7OUMJCJT.js} +1 -1
- package/dist/cli/chunks/{chunk-2Y3PW5EJ.js → chunk-7RAB2BZY.js} +160 -26
- package/dist/cli/chunks/{chunk-XEUUWOSS.js → chunk-7RVAHJQZ.js} +3 -3
- package/dist/cli/chunks/{chunk-HHEWINDL.js → chunk-A2WZEMWT.js} +1 -1
- package/dist/cli/chunks/{chunk-36ONUM43.js → chunk-A7SKM6JL.js} +1 -1
- package/dist/cli/chunks/chunk-AFGT26NR.js +2 -0
- package/dist/cli/chunks/{chunk-23E37MDA.js → chunk-AR6SATU3.js} +2 -2
- package/dist/cli/chunks/{chunk-IYMV4CU5.js → chunk-AVLA5PBJ.js} +2 -2
- package/dist/cli/chunks/{chunk-OLPJGYO5.js → chunk-B3H4K7CY.js} +2 -2
- package/dist/cli/chunks/{chunk-JWT675RM.js → chunk-BQCTO7UB.js} +2 -2
- package/dist/cli/chunks/{chunk-JKP2BUF5.js → chunk-BZ4QVFP2.js} +2 -2
- package/dist/cli/chunks/{chunk-WINYWMQP.js → chunk-CIUOC5F3.js} +1 -1
- package/dist/cli/chunks/{chunk-SJJFU7KK.js → chunk-CIZ6LSNV.js} +2 -2
- package/dist/cli/chunks/{chunk-2D7SBOZ4.js → chunk-DDPJUAXQ.js} +2 -2
- package/dist/cli/chunks/{chunk-H7QWOJF2.js → chunk-DJITEQYS.js} +2 -2
- package/dist/cli/chunks/{chunk-DMHQ4ZUZ.js → chunk-DOWCOZDO.js} +2 -2
- package/dist/cli/chunks/{chunk-PBJ5I2NS.js → chunk-E4NU4BJA.js} +2 -2
- package/dist/cli/chunks/{chunk-E54QUKAD.js → chunk-E722WNWC.js} +2 -2
- package/dist/cli/chunks/chunk-ECTPFCON.js +2 -0
- package/dist/cli/chunks/{chunk-MUAW4AJ6.js → chunk-EJ6IP7DE.js} +5 -5
- package/dist/cli/chunks/{chunk-NHL37QAZ.js → chunk-ENGKLFLY.js} +2 -2
- package/dist/cli/chunks/{chunk-VU3ARH4S.js → chunk-FF43SRP6.js} +1 -1
- package/dist/cli/chunks/{chunk-PJNIDDER.js → chunk-FOHYBR3O.js} +1 -1
- package/dist/cli/chunks/{chunk-LREIHR2A.js → chunk-FRL3X2QA.js} +2 -2
- package/dist/cli/chunks/{chunk-WYQM7GXW.js → chunk-GKNDP5VK.js} +2 -2
- package/dist/cli/chunks/{chunk-JK6ENS3J.js → chunk-GVEJP5T7.js} +2 -2
- package/dist/cli/chunks/{chunk-H3BHOIT6.js → chunk-H3YDDKBW.js} +3 -3
- package/dist/cli/chunks/{chunk-3SPYI7TS.js → chunk-H6NFDOMK.js} +1 -1
- package/dist/cli/chunks/{chunk-AZVV7POX.js → chunk-H76TV4UU.js} +3 -3
- package/dist/cli/chunks/{chunk-2HT5HRAA.js → chunk-HJIAVR6P.js} +2 -2
- package/dist/cli/chunks/{chunk-UZ7OWJ75.js → chunk-HLNQDRHA.js} +1 -1
- package/dist/cli/chunks/{chunk-IGW5L7YM.js → chunk-HNKPLVYS.js} +1 -1
- package/dist/cli/chunks/{chunk-Y2S6SS7M.js → chunk-HQ7243G3.js} +2 -2
- package/dist/cli/chunks/{chunk-TZA45FI7.js → chunk-HQHLHSJO.js} +2 -2
- package/dist/cli/chunks/{chunk-YEPJS4AM.js → chunk-I3VHXA2W.js} +2 -2
- package/dist/cli/chunks/{chunk-W2NQDAJZ.js → chunk-IE5LC7MB.js} +2 -2
- package/dist/cli/chunks/{chunk-TU4BYSXR.js → chunk-IL4AEB3J.js} +27 -25
- package/dist/cli/chunks/{chunk-JTQSXU6V.js → chunk-IL6QRXRP.js} +6 -6
- package/dist/cli/chunks/{chunk-UX5SM2PW.js → chunk-IQ3JFHZN.js} +1 -1
- package/dist/cli/chunks/{chunk-RAV2NJNX.js → chunk-IQLRA4FV.js} +1 -1
- package/dist/cli/chunks/{chunk-S3FNAHNC.js → chunk-J3XSHJGK.js} +2 -2
- package/dist/cli/chunks/{chunk-AHG2O5HT.js → chunk-JAK5UUWH.js} +2 -2
- package/dist/cli/chunks/{chunk-XDK2TPI5.js → chunk-JGROLJ33.js} +1 -1
- package/dist/cli/chunks/{chunk-MWTFFGU3.js → chunk-JMKMDSXG.js} +2 -2
- package/dist/cli/chunks/{chunk-BVKFBJX6.js → chunk-JRKEBESE.js} +2 -2
- package/dist/cli/chunks/{chunk-76NSSNB3.js → chunk-JTWJR2KY.js} +2 -2
- package/dist/cli/chunks/{chunk-QYHRDBKI.js → chunk-JY4VZ6BN.js} +2 -2
- package/dist/cli/chunks/{chunk-DLL3AJH7.js → chunk-K6CGQR5R.js} +1 -1
- package/dist/cli/chunks/{chunk-7HTYM6XY.js → chunk-KDIZQHG5.js} +2 -2
- package/dist/cli/chunks/{chunk-B646CE3C.js → chunk-KTSCZ7AW.js} +2 -2
- package/dist/cli/chunks/{chunk-LLP3UW62.js → chunk-L4C42WYI.js} +2 -2
- package/dist/cli/chunks/{chunk-H3AKF2HS.js → chunk-LCSVROU7.js} +10 -10
- package/dist/cli/chunks/{chunk-HZR4G6I3.js → chunk-LKR7T3OZ.js} +1 -1
- package/dist/cli/chunks/{chunk-Z5ARI4XT.js → chunk-LZHTCUCO.js} +2 -2
- package/dist/cli/chunks/{chunk-YDEYB6Z2.js → chunk-M3HUZD2I.js} +1 -1
- package/dist/cli/chunks/{chunk-GWTGBQ6X.js → chunk-MO7EITJK.js} +2 -2
- package/dist/cli/chunks/{chunk-5364DBZG.js → chunk-N2YAUDAV.js} +2 -2
- package/dist/cli/chunks/{chunk-XVFSZLRS.js → chunk-NDPQ2WPU.js} +1 -1
- package/dist/cli/chunks/{chunk-CTS545BF.js → chunk-NKWO2X3T.js} +1 -1
- package/dist/cli/chunks/{chunk-GPJDZFFV.js → chunk-NOPVFBQM.js} +2 -2
- package/dist/cli/chunks/{chunk-VNVGCJCS.js → chunk-NYARYONH.js} +1 -1
- package/dist/cli/chunks/{chunk-WRZ5WZG3.js → chunk-O2MZZL54.js} +2 -2
- package/dist/cli/chunks/{chunk-EKFKQGIT.js → chunk-OIYUSWHX.js} +1 -1
- package/dist/cli/chunks/{chunk-ZNGFSR5M.js → chunk-OONCRNFA.js} +2 -2
- package/dist/cli/chunks/{chunk-LUAXQB57.js → chunk-PEW6FZ47.js} +1 -1
- package/dist/cli/chunks/{chunk-W7BB4XLP.js → chunk-Q73RRTLE.js} +2 -2
- package/dist/cli/chunks/{chunk-JKPMV5VB.js → chunk-QKQZ4IJF.js} +5 -5
- package/dist/cli/chunks/{chunk-EHZQIXH6.js → chunk-QMMDN4WX.js} +3 -3
- package/dist/cli/chunks/chunk-QQCENKCX.js +2 -0
- package/dist/cli/chunks/{chunk-7YL7P5XG.js → chunk-QSPRQPEL.js} +2 -2
- package/dist/cli/chunks/{chunk-DXQMVATY.js → chunk-QZPFUFZG.js} +2 -2
- package/dist/cli/chunks/chunk-R2B6EE45.js +2 -0
- package/dist/cli/chunks/{chunk-VLW63UA2.js → chunk-R6WJF4D5.js} +2 -2
- package/dist/cli/chunks/{chunk-EWH7PFV6.js → chunk-RGVD6ZUX.js} +1 -1
- package/dist/cli/chunks/{chunk-UGFHEVG4.js → chunk-RKUYVVGJ.js} +2 -2
- package/dist/cli/chunks/{chunk-V7QZMOG3.js → chunk-S5YVLPXU.js} +2 -2
- package/dist/cli/chunks/{chunk-UDFTDQ6C.js → chunk-SROZXIMT.js} +37 -37
- package/dist/cli/chunks/{chunk-AFXMTSO3.js → chunk-SSV6KSFT.js} +1 -1
- package/dist/cli/chunks/{chunk-HGPMS6JL.js → chunk-SUSMHSXT.js} +2 -2
- package/dist/cli/chunks/{chunk-BL5BHBXR.js → chunk-T3BZAFLP.js} +1 -1
- package/dist/cli/chunks/{chunk-K652SCBA.js → chunk-TGOGCA74.js} +2 -2
- package/dist/cli/chunks/{chunk-VHNAN7E2.js → chunk-TKYEP7OR.js} +1 -1
- package/dist/cli/chunks/{chunk-OJUI65TR.js → chunk-TQJE7DNL.js} +2 -2
- package/dist/cli/chunks/{chunk-MS5CAEPA.js → chunk-TRDEULS7.js} +2 -2
- package/dist/cli/chunks/{chunk-YRV45WDT.js → chunk-U4GZWPKM.js} +2 -2
- package/dist/cli/chunks/{chunk-2BDTZYQN.js → chunk-UI6WSPEK.js} +3 -3
- package/dist/cli/chunks/{chunk-TMY2Y7SC.js → chunk-UUJ5VQJM.js} +1 -1
- package/dist/cli/chunks/{chunk-4CTKRLRX.js → chunk-VESOYP6A.js} +2 -2
- package/dist/cli/chunks/{chunk-UPMQHCC2.js → chunk-VOSISOFD.js} +1 -1
- package/dist/cli/chunks/{chunk-IZOWGVTU.js → chunk-VPVZHJSU.js} +2 -2
- package/dist/cli/chunks/{chunk-TBO64O56.js → chunk-VRRG66XB.js} +1 -1
- package/dist/cli/chunks/{chunk-WJB6YYMJ.js → chunk-VXU53F7Z.js} +2 -2
- package/dist/cli/chunks/{chunk-4TUGQESL.js → chunk-VYENTZ45.js} +2 -2
- package/dist/cli/chunks/chunk-WJXHE52V.js +65 -0
- package/dist/cli/chunks/{chunk-EN36AFRJ.js → chunk-WKNWRDA5.js} +1 -1
- package/dist/cli/chunks/{chunk-4X4GTEQY.js → chunk-WTHAVFIC.js} +1 -1
- package/dist/cli/chunks/{chunk-LPDT27EC.js → chunk-WWWX76QB.js} +2 -2
- package/dist/cli/chunks/{chunk-TCVEXQLL.js → chunk-XITTURP2.js} +2 -2
- package/dist/cli/chunks/{chunk-HV6LJ57R.js → chunk-XXFKN7LB.js} +1 -1
- package/dist/cli/chunks/{chunk-UJ2NRIAS.js → chunk-YEAC3DC6.js} +2 -2
- package/dist/cli/chunks/{chunk-FBASWZ7G.js → chunk-YKWMKRYB.js} +1 -1
- package/dist/cli/chunks/chunk-YKZV7O65.js +2 -0
- package/dist/cli/chunks/{chunk-PT6U3IIK.js → chunk-YW4RNZWT.js} +2 -2
- package/dist/cli/chunks/{chunk-H5DS7S4B.js → chunk-ZAAYOENS.js} +2 -2
- package/dist/cli/chunks/chunk-ZBKGX72B.js +13 -0
- package/dist/cli/chunks/{chunk-WVNLNXXI.js → chunk-ZBOWR4XT.js} +2 -2
- package/dist/cli/chunks/{chunk-FPX4JSFH.js → chunk-ZCVJCCQQ.js} +2 -2
- package/dist/cli/chunks/{chunk-OQWG7GOD.js → chunk-ZI3UO7QR.js} +8 -7
- package/dist/cli/chunks/{chunk-BPPEN7SS.js → chunk-ZNSMVQCG.js} +2 -2
- package/dist/cli/chunks/{chunk-EI4KYBNI.js → chunk-ZQSXG7FA.js} +2 -2
- package/dist/cli/chunks/{ci-M6WYL2XY.js → ci-B432UH6N.js} +2 -2
- package/dist/cli/chunks/{ci-output-JFC3WOHX.js → ci-output-GTHH7WYG.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-IMVBU6WP.js → circuit-breaker-VW75DLME.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-M5T5ZUXX.js → claude-flow-setup-RE3IVT7U.js} +2 -2
- package/dist/cli/chunks/client-HNBZUEVV.js +2 -0
- package/dist/cli/chunks/{cline-installer-LSFAUHXC.js → cline-installer-NUBZZ55N.js} +2 -2
- package/dist/cli/chunks/{code-N3SWJ3XL.js → code-K6JCWKNW.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-WPGRG36B.js → code-index-extractor-I4ILB5JN.js} +2 -2
- package/dist/cli/chunks/{codex-installer-LKRCSDU5.js → codex-installer-AKQ5BCHU.js} +2 -2
- package/dist/cli/chunks/{completions-E5TBZ5AB.js → completions-V3KJVJF4.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-3FOSOELK.js → complexity-analyzer-HRG7OOY3.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-ZSVFWMQB.js → continuedev-installer-CNTDONWG.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-POSKHPZM.js → copilot-installer-XPWWIWYA.js} +2 -2
- package/dist/cli/chunks/core-handlers-TB7NLYXL.js +2 -0
- package/dist/cli/chunks/{cost-tracker-3UWDCNGC.js → cost-tracker-MFNLQ56K.js} +2 -2
- package/dist/cli/chunks/{coverage-HPBO67JF.js → coverage-KOIK654V.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-MDSI553U.js +2 -0
- package/dist/cli/chunks/{cursor-installer-DSW3L62X.js → cursor-installer-S5MKLRQQ.js} +2 -2
- package/dist/cli/chunks/{daemon-2622ZCMJ.js → daemon-DUS6JYW6.js} +3 -3
- package/dist/cli/chunks/{daemon-33KTKDUM.js → daemon-Z7VPGWHY.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-YFT5JMM6.js → dag-attention-scheduler-7CQ3ARNI.js} +2 -2
- package/dist/cli/chunks/{detect-COR3Q6BE.js → detect-WORBCAYF.js} +2 -2
- package/dist/cli/chunks/{dist-node-5TRNTNWI.js → dist-node-KRNI6OYW.js} +2 -2
- package/dist/cli/chunks/{domain-handler-TZC4GCF6.js → domain-handler-KRUR2VQG.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-D2TENM3Y.js → domain-transfer-VEOVLV54.js} +2 -2
- package/dist/cli/chunks/dream-X7ISHFEE.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-QU3NQVA5.js +3 -0
- package/dist/cli/chunks/{eval-5ID5D77H.js → eval-AYQ7BSUP.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-MT4Z74TD.js → experience-capture-middleware-AWQBL6LT.js} +3 -3
- package/dist/cli/chunks/{fast-paths-MACRZGSE.js → fast-paths-V5EL4BYJ.js} +2 -2
- package/dist/cli/chunks/{feature-flags-LFNL6BHS.js → feature-flags-BXX7BP22.js} +2 -2
- package/dist/cli/chunks/{feature-flags-JZX6ZBUX.js → feature-flags-P34BPRWU.js} +2 -2
- package/dist/cli/chunks/{file-discovery-DA5BEAO2.js → file-discovery-MS6BKQ2U.js} +2 -2
- package/dist/cli/chunks/{fleet-35I4F7D2.js → fleet-7WVVPA4W.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-2W3HM3ZI.js → gnn-wrapper-7WQ3LEPG.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-6O2D2FU2.js → heartbeat-handler-P7QD3BZH.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-2C5XGFQT.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-KCVMXLUL.js +2 -0
- package/dist/cli/chunks/hnsw-index-OGWZS6MP.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-GWBXEMQR.js → hnsw-legacy-bridge-Y3GAR3UP.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-TZ4VLARU.js → hnswlib-node-5QUXZQWQ.js} +2 -2
- package/dist/cli/chunks/{hooks-723GPTQ4.js → hooks-2D64KPRY.js} +10 -10
- package/dist/cli/chunks/{hypergraph-engine-ILRYFJM5.js → hypergraph-engine-5INXEZDP.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-523TSK4P.js → hypergraph-handler-YJJJ3ESZ.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-IBJ43GQL.js +2 -0
- package/dist/cli/chunks/{init-handler-RBDYIXNV.js → init-handler-QSFYJN5Q.js} +6 -6
- package/dist/cli/chunks/init-wizard-6XMFD5LP.js +2 -0
- package/dist/cli/chunks/kernel-UDUMUPB3.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-E2QSX7Z7.js → kilocode-installer-3N3QGTJU.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-EZZLT2R5.js → kiro-installer-GIWVTFZQ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-JRYTUG3W.js +2 -0
- package/dist/cli/chunks/learning-SGO2DQ5Q.js +122 -0
- package/dist/cli/chunks/llm-router-HBBULO65.js +37 -0
- package/dist/cli/chunks/llm-router-service-KF5ZALUQ.js +2 -0
- package/dist/cli/chunks/{load-QFQ3YOBQ.js → load-B5OFYB4H.js} +2 -2
- package/dist/cli/chunks/load-test-LHMBCNCH.js +2 -0
- package/dist/cli/chunks/{mcp-FPBBJJFY.js → mcp-FG3LNQR4.js} +2 -2
- package/dist/cli/chunks/{memory-RKN6KV75.js → memory-SPS7ZWLC.js} +5 -5
- package/dist/cli/chunks/memory-backend-WZHKHBZK.js +2 -0
- package/dist/cli/chunks/memory-handlers-P7FTPWP3.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-OUNW3JM5.js → multi-model-executor-PUB7E6KH.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-FXETYGGY.js → opencode-installer-TGCSGVG2.js} +2 -2
- package/dist/cli/chunks/{orchestrator-35UTVXSP.js → orchestrator-S5FTJFGB.js} +10 -13
- package/dist/cli/chunks/pattern-null-store-UZSHCRL2.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-YEQDS7DN.js → pattern-usage-recorder-LCXXGRAB.js} +2 -2
- package/dist/cli/chunks/{pipeline-YDJMWCAR.js → pipeline-ENOSRHKW.js} +2 -2
- package/dist/cli/chunks/{platform-L3LPNVKT.js → platform-WCRBO3Z7.js} +2 -2
- package/dist/cli/chunks/{plugin-55EYFJH5.js → plugin-JZ5ODJSU.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-SUZT6RTM.js → prime-radiant-advanced-wasm-DPJUPNCG.js} +2 -2
- package/dist/cli/chunks/protocol-executor-42NLVDTC.js +2 -0
- package/dist/cli/chunks/{protocol-handler-QNBFRJNY.js → protocol-handler-IP4NLVY3.js} +2 -2
- package/dist/cli/chunks/{prove-3X5NQP4L.js → prove-P6FM4RU7.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-W74RSMMU.js +2 -0
- package/dist/cli/chunks/{quality-5ZONTNA6.js → quality-UHP4XO26.js} +2 -2
- package/dist/cli/chunks/{quality-gate-JPNREEVR.js → quality-gate-63DDBSGM.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-XELKSRMS.js +2 -0
- package/dist/cli/chunks/real-embeddings-6SO5MFRQ.js +2 -0
- package/dist/cli/chunks/{roocode-installer-ZK73O2GD.js → roocode-installer-WTWUOFCH.js} +2 -2
- package/dist/cli/chunks/router-GTW2EQZV.js +2 -0
- package/dist/cli/chunks/routing-feedback-NVOBWEMK.js +2 -0
- package/dist/cli/chunks/{routing-handler-2UN5GRHJ.js → routing-handler-IK7HYERQ.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-EQQUEVWN.js → ruvector-commands-THLB4NIM.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-5OPVMXNL.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-5S4YFTX4.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-BUKCSHBD.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-LYSJHEVX.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-66FEC3MD.js → rvf-store-integrity-ECTADZIN.js} +2 -2
- package/dist/cli/chunks/safe-db-AEB3JMLD.js +2 -0
- package/dist/cli/chunks/schedule-4QNPCQNT.js +2 -0
- package/dist/cli/chunks/scheduler-S3DFHX6A.js +2 -0
- package/dist/cli/chunks/{security-H7PEUUCV.js → security-HN4UXFXX.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-XETNK4ID.js → shared-rvf-adapter-XJCPX5SN.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-PXD54BWJ.js → shared-rvf-dual-writer-23X5PNY5.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-L2KISU2H.js +2 -0
- package/dist/cli/chunks/status-handler-ZXANTHKT.js +47 -0
- package/dist/cli/chunks/{structural-health-EIFBDCRI.js → structural-health-LR6WI3AH.js} +2 -2
- package/dist/cli/chunks/{sync-PECWQ64K.js → sync-4OEI3BC2.js} +2 -2
- package/dist/cli/chunks/{sync-3SU4H6R3.js → sync-I5IUJF33.js} +2 -2
- package/dist/cli/chunks/{task-handler-ZTUAT6YF.js → task-handler-R3ATJKU5.js} +2 -2
- package/dist/cli/chunks/{task-handlers-4RIO7LJJ.js → task-handlers-4X357AEW.js} +3 -3
- package/dist/cli/chunks/{test-EV7BSUTI.js → test-PR2B5H2F.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-4WVI5DLE.js → test-scheduling-ZNOSQVLD.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-LYXOI72S.js +2 -0
- package/dist/cli/chunks/{token-usage-FR3JOWYB.js → token-usage-R6EQZBX2.js} +2 -2
- package/dist/cli/chunks/{transformers-FENO33LA.js → transformers-COQWK27J.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-YFGJLSMB.js → tree-sitter-wasm-parser-LLIW2X3M.js} +2 -2
- package/dist/cli/chunks/{types-N3Y565RZ.js → types-MEYTZITK.js} +2 -2
- package/dist/cli/chunks/unified-memory-5KQMA7FV.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-PQRPTYOD.js +2 -0
- package/dist/cli/chunks/unified-persistence-YDONVPJB.js +2 -0
- package/dist/cli/chunks/{upgrade-33ZVVZFW.js → upgrade-DVIJ456A.js} +2 -2
- package/dist/cli/chunks/{validate-CS5PXGDF.js → validate-UYTSMJ5X.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-GRZPWYNM.js → validate-swarm-P32WCJR6.js} +2 -2
- package/dist/cli/chunks/{vibium-IO7N4VEE.js → vibium-JGVOLM6X.js} +2 -2
- package/dist/cli/chunks/visual-security-RJ7RTNGJ.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-UQXR5HHR.js → web-tree-sitter-5ZGNCTPN.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-BCKLSLZT.js → windsurf-installer-IILSSQAE.js} +2 -2
- package/dist/cli/chunks/{witness-chain-R3V26QWL.js → witness-chain-JZMXCG3B.js} +2 -2
- package/dist/cli/chunks/witness-chain-YXXXNGAM.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-Y36HMPEM.js → witness-key-manager-UUTLNUIH.js} +2 -2
- package/dist/cli/chunks/{workflow-4TCIUUFQ.js → workflow-NS7HXVHZ.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-5KUAVSTH.js +2 -0
- package/dist/cli/chunks/{wrappers-MD4JRHJH.js → wrappers-XKEDSV5W.js} +2 -2
- package/dist/cli/commands/learning.js +44 -0
- package/dist/cli/commands/llm-router.js +62 -27
- package/dist/cli/handlers/brain-handler.js +2 -0
- package/dist/cli/handlers/status-handler.js +18 -2
- package/dist/context/compaction/index.d.ts +1 -0
- package/dist/context/compaction/index.js +3 -0
- package/dist/context/compaction/instruction-provenance.d.ts +20 -0
- package/dist/context/compaction/instruction-provenance.js +18 -0
- package/dist/context/compaction/tier2-session-summary.d.ts +8 -0
- package/dist/context/compaction/tier2-session-summary.js +20 -0
- package/dist/context/compaction/tier3-llm-compact.d.ts +4 -0
- package/dist/context/compaction/tier3-llm-compact.js +32 -4
- package/dist/init/phases/07-hooks.js +0 -3
- package/dist/integrations/embeddings/base/EmbeddingGenerator.js +4 -2
- package/dist/integrations/ruvector/brain-exporter.d.ts +1 -1
- package/dist/integrations/ruvector/brain-exporter.js +15 -3
- package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +4 -0
- package/dist/integrations/ruvector/brain-rvf-exporter.js +118 -37
- package/dist/integrations/ruvector/brain-search.d.ts +1 -1
- package/dist/integrations/ruvector/brain-search.js +1 -1
- package/dist/integrations/ruvector/brain-shared.d.ts +4 -2
- package/dist/integrations/ruvector/brain-shared.js +11 -4
- package/dist/integrations/ruvector/brain-table-ddl.d.ts +2 -2
- package/dist/integrations/ruvector/brain-table-ddl.js +20 -8
- package/dist/integrations/ruvector/cognitive-container.js +1 -1
- package/dist/integrations/ruvector/rvf-dual-writer.d.ts +4 -0
- package/dist/integrations/ruvector/rvf-dual-writer.js +57 -9
- package/dist/integrations/ruvector/rvf-store-integrity.js +1 -1
- package/dist/kernel/unified-memory-schemas.d.ts +4 -3
- package/dist/kernel/unified-memory-schemas.js +19 -9
- package/dist/kernel/unified-memory.d.ts +2 -0
- package/dist/kernel/unified-memory.js +19 -0
- package/dist/learning/embed-and-insert-pattern.js +6 -3
- package/dist/learning/embedding-space.d.ts +50 -0
- package/dist/learning/embedding-space.js +128 -0
- package/dist/learning/evidence-admission-store.d.ts +15 -0
- package/dist/learning/evidence-admission-store.js +68 -0
- package/dist/learning/index.d.ts +4 -0
- package/dist/learning/index.js +2 -0
- package/dist/learning/learning-evidence-admission.d.ts +44 -0
- package/dist/learning/learning-evidence-admission.js +97 -0
- package/dist/learning/pattern-store.d.ts +5 -0
- package/dist/learning/pattern-store.js +36 -7
- package/dist/learning/qe-flywheel/coupled-anchor.d.ts +8 -0
- package/dist/learning/qe-flywheel/coupled-anchor.js +46 -3
- package/dist/learning/qe-reasoning-bank.js +4 -0
- package/dist/learning/real-embeddings.d.ts +3 -0
- package/dist/learning/real-embeddings.js +40 -3
- package/dist/learning/real-qe-reasoning-bank.js +7 -3
- package/dist/learning/rvf-pattern-migration.d.ts +2 -0
- package/dist/learning/rvf-pattern-migration.js +5 -3
- package/dist/learning/rvf-pattern-store.d.ts +3 -0
- package/dist/learning/rvf-pattern-store.js +21 -1
- package/dist/learning/sqlite-persistence.d.ts +7 -2
- package/dist/learning/sqlite-persistence.js +58 -21
- package/dist/mcp/bundle.js +607 -443
- package/dist/mcp/handlers/memory-handlers.js +6 -2
- package/dist/migrations/20260830_add_learning_evidence_tables.d.ts +7 -0
- package/dist/migrations/20260830_add_learning_evidence_tables.js +173 -0
- package/dist/persistence/rvf-migration-adapter.d.ts +2 -0
- package/dist/persistence/rvf-migration-adapter.js +56 -12
- package/dist/shared/llm/billing-modes.d.ts +5 -0
- package/dist/shared/llm/billing-modes.js +42 -3
- package/dist/shared/llm/index.d.ts +4 -1
- package/dist/shared/llm/index.js +5 -1
- package/dist/shared/llm/interfaces.d.ts +34 -3
- package/dist/shared/llm/interfaces.js +17 -0
- package/dist/shared/llm/llm-router-service.d.ts +8 -0
- package/dist/shared/llm/llm-router-service.js +21 -3
- package/dist/shared/llm/provider-manager.js +8 -1
- package/dist/shared/llm/provider-registry.d.ts +135 -0
- package/dist/shared/llm/provider-registry.js +227 -0
- package/dist/shared/llm/providers/external-cli.d.ts +129 -0
- package/dist/shared/llm/providers/external-cli.js +385 -0
- package/dist/shared/llm/router/config-store.d.ts +14 -0
- package/dist/shared/llm/router/config-store.js +102 -14
- package/dist/shared/llm/router/external-provider-config.d.ts +47 -0
- package/dist/shared/llm/router/external-provider-config.js +105 -0
- package/dist/shared/llm/router/types.d.ts +50 -4
- package/dist/shared/llm/router/types.js +10 -0
- package/dist/shared/llm/translation/message-formatter.js +7 -1
- package/dist/shared/sql-safety.js +4 -0
- package/dist/skills/qe-court/cli.d.ts +3 -0
- package/dist/skills/qe-court/cli.js +54 -0
- package/dist/verification/adversarial-verify/calibrate.d.ts +46 -2
- package/dist/verification/adversarial-verify/calibrate.js +104 -2
- package/dist/verification/adversarial-verify/index.d.ts +1 -1
- package/dist/verification/adversarial-verify/index.js +1 -1
- package/package.json +12 -3
- package/dist/cli/chunks/adapter-YBSKQFQ4.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-3H7DRDD4.js +0 -2
- package/dist/cli/chunks/base-ZTD6PFD7.js +0 -2
- package/dist/cli/chunks/brain-handler-FV2AJZ4A.js +0 -89
- package/dist/cli/chunks/browser-workflow-GKWDM25H.js +0 -2
- package/dist/cli/chunks/chunk-2CBEQV6R.js +0 -2
- package/dist/cli/chunks/chunk-4ZQOJ7Q2.js +0 -2
- package/dist/cli/chunks/chunk-CYQRZ645.js +0 -2
- package/dist/cli/chunks/chunk-FXKOHZBN.js +0 -2
- package/dist/cli/chunks/chunk-GJTGHVAX.js +0 -65
- package/dist/cli/chunks/chunk-GP5QBJVO.js +0 -3
- package/dist/cli/chunks/chunk-JGXP67BP.js +0 -2
- package/dist/cli/chunks/chunk-SW56PB22.js +0 -2
- package/dist/cli/chunks/chunk-T5M4TZRB.js +0 -12
- package/dist/cli/chunks/chunk-UDSNWQQI.js +0 -2
- package/dist/cli/chunks/chunk-VC77SDNH.js +0 -9
- package/dist/cli/chunks/chunk-WRMJWQUI.js +0 -12
- package/dist/cli/chunks/chunk-YXUFGDGS.js +0 -2
- package/dist/cli/chunks/client-4Q5JE7RY.js +0 -2
- package/dist/cli/chunks/core-handlers-4GKEYGPS.js +0 -2
- package/dist/cli/chunks/cross-domain-router-PBJ2ZGPJ.js +0 -2
- package/dist/cli/chunks/dream-4EXVFHUJ.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-COAZZGS6.js +0 -3
- package/dist/cli/chunks/heartbeat-scheduler-UNEYR3WR.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-JQG66H4L.js +0 -2
- package/dist/cli/chunks/hnsw-index-2NOROILM.js +0 -2
- package/dist/cli/chunks/hybrid-router-FXTAJATE.js +0 -2
- package/dist/cli/chunks/impact-analyzer-VHZSBWMT.js +0 -2
- package/dist/cli/chunks/init-wizard-EML4OET2.js +0 -2
- package/dist/cli/chunks/kernel-TMRJOEO2.js +0 -2
- package/dist/cli/chunks/knowledge-graph-FMKVCMJQ.js +0 -2
- package/dist/cli/chunks/learning-II2U3EV2.js +0 -119
- package/dist/cli/chunks/llm-router-WC66OXZH.js +0 -36
- package/dist/cli/chunks/llm-router-service-GOSVGMKM.js +0 -2
- package/dist/cli/chunks/load-test-WIRGDZIA.js +0 -2
- package/dist/cli/chunks/memory-backend-XBBIXDZU.js +0 -2
- package/dist/cli/chunks/memory-handlers-SQHNK3DK.js +0 -2
- package/dist/cli/chunks/pattern-null-store-PFLKHRVU.js +0 -2
- package/dist/cli/chunks/protocol-executor-GAMNY2JB.js +0 -2
- package/dist/cli/chunks/provider-manager-VTIG5AKU.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-KAX63PXV.js +0 -2
- package/dist/cli/chunks/queen-coordinator-UYW2MDKI.js +0 -2
- package/dist/cli/chunks/real-embeddings-HHR75AR5.js +0 -2
- package/dist/cli/chunks/router-NVDU7IIA.js +0 -2
- package/dist/cli/chunks/routing-feedback-KHR3J2J3.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-43L75WLF.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-Y5OVCYTO.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-NEPDFB3N.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-PQ4IOTZU.js +0 -2
- package/dist/cli/chunks/safe-db-QHSFV63M.js +0 -2
- package/dist/cli/chunks/schedule-JGZFHJGM.js +0 -2
- package/dist/cli/chunks/scheduler-NGCDQIW5.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-3JSNWL6I.js +0 -2
- package/dist/cli/chunks/status-handler-CTXOH3FX.js +0 -47
- package/dist/cli/chunks/token-bootstrap-3P22AYZ4.js +0 -2
- package/dist/cli/chunks/unified-memory-4VO5KSHP.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZR2FZXOB.js +0 -2
- package/dist/cli/chunks/unified-persistence-VFPW5MFM.js +0 -2
- package/dist/cli/chunks/visual-security-SNADRUPR.js +0 -2
- package/dist/cli/chunks/witness-chain-2TXUTEJE.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-ON6UYRVE.js +0 -2
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 — External provider registry
|
|
3
|
+
* ADR-127: External provider registration (issue #628)
|
|
4
|
+
*
|
|
5
|
+
* The sanctioned extension point for provider identity. A downstream
|
|
6
|
+
* integrator can register an additional provider type so
|
|
7
|
+
* `AQE_LLM_PROVIDER=<their-host>` resolves to a provider they supply, instead
|
|
8
|
+
* of forking `BuiltinProviderType` or projecting their host onto an unrelated
|
|
9
|
+
* vendor identity (which would make `aqe health` misreport who served the work).
|
|
10
|
+
*
|
|
11
|
+
* Two entry points feed this registry:
|
|
12
|
+
* 1. `registerProvider()` — for a consumer that embeds AQE in-process.
|
|
13
|
+
* 2. The `externalProviders` block in `.agentic-qe/llm-config.json` — for the
|
|
14
|
+
* subprocess case (the `aqe` CLI and MCP server are separate bundles, so
|
|
15
|
+
* an in-process call cannot reach them). See `external-provider-config.ts`.
|
|
16
|
+
*
|
|
17
|
+
* State is process-global module state, matching ADR-125's
|
|
18
|
+
* `agent-router-config.ts`. Tests must call `resetProviderRegistry()`.
|
|
19
|
+
*/
|
|
20
|
+
import { type BillingMode, type LLMProvider, type LLMProviderType } from './interfaces';
|
|
21
|
+
/**
|
|
22
|
+
* Builds a provider instance. Receives whatever config the caller registered
|
|
23
|
+
* the provider with (an `externalProviders` entry, or the `config` passed to
|
|
24
|
+
* `registerProvider`). Must return an object satisfying `LLMProvider`.
|
|
25
|
+
*/
|
|
26
|
+
export type ProviderFactory = (config?: unknown) => LLMProvider;
|
|
27
|
+
/** Where a registration came from — surfaced by `aqe health` (ADR-127). */
|
|
28
|
+
export type ProviderRegistrationSource = 'api' | 'config';
|
|
29
|
+
export interface ProviderRegistrationOptions {
|
|
30
|
+
/**
|
|
31
|
+
* How this provider bills. ADR-123/ADR-127: this is an *assertion by the
|
|
32
|
+
* registrant*, not something AQE can verify, so it is recorded with its
|
|
33
|
+
* source and surfaced as "declared by". Omitting it resolves to
|
|
34
|
+
* `metered-api` — the conservative, cap-requiring assumption.
|
|
35
|
+
*/
|
|
36
|
+
readonly billingMode?: BillingMode;
|
|
37
|
+
/** Human-facing name for CLI output. Defaults to the type string. */
|
|
38
|
+
readonly displayName?: string;
|
|
39
|
+
/** Models this provider accepts. Informational; used by CLI listings. */
|
|
40
|
+
readonly models?: readonly string[];
|
|
41
|
+
/** Opaque config handed back to the factory on each construction. */
|
|
42
|
+
readonly config?: unknown;
|
|
43
|
+
/** Provenance. Defaults to `'api'`. */
|
|
44
|
+
readonly source?: ProviderRegistrationSource;
|
|
45
|
+
/** For `source: 'config'`, the file the declaration came from. */
|
|
46
|
+
readonly sourceDetail?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface RegisteredProvider extends ProviderRegistrationOptions {
|
|
49
|
+
readonly type: string;
|
|
50
|
+
readonly factory: ProviderFactory;
|
|
51
|
+
readonly source: ProviderRegistrationSource;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate a candidate provider type. Returns an error message, or `undefined`
|
|
55
|
+
* when the type is acceptable.
|
|
56
|
+
*
|
|
57
|
+
* Exported so config-driven registration can report per-entry problems without
|
|
58
|
+
* throwing (a bad line in a config file must never be fatal — ADR-125's
|
|
59
|
+
* drop-individually discipline).
|
|
60
|
+
*/
|
|
61
|
+
export declare function validateProviderType(type: string): string | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Register an additional provider type (ADR-127).
|
|
64
|
+
*
|
|
65
|
+
* Throws on an invalid or colliding type — an in-process caller passing a bad
|
|
66
|
+
* type has a bug, and silently ignoring it would strand `AQE_LLM_PROVIDER`
|
|
67
|
+
* pointing at nothing. Config-driven registration uses
|
|
68
|
+
* `tryRegisterProvider()` instead, which reports rather than throws.
|
|
69
|
+
*
|
|
70
|
+
* Re-registering the same type replaces the previous entry.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* import { registerProvider } from 'agentic-qe/shared/llm';
|
|
75
|
+
*
|
|
76
|
+
* registerProvider('my-host', () => new MyHostProvider(), {
|
|
77
|
+
* billingMode: 'subscription',
|
|
78
|
+
* displayName: 'My Host (subscription)',
|
|
79
|
+
* });
|
|
80
|
+
* // now AQE_LLM_PROVIDER=my-host resolves
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare function registerProvider(type: string, factory: ProviderFactory, options?: ProviderRegistrationOptions): void;
|
|
84
|
+
/**
|
|
85
|
+
* Config-driven registration. Returns an error message instead of throwing, so
|
|
86
|
+
* one malformed `externalProviders` entry drops itself rather than failing
|
|
87
|
+
* router construction for the whole project.
|
|
88
|
+
*/
|
|
89
|
+
export declare function tryRegisterProvider(type: string, factory: ProviderFactory, options?: ProviderRegistrationOptions): string | undefined;
|
|
90
|
+
/** Remove a registration. Returns true if something was removed. */
|
|
91
|
+
export declare function unregisterProvider(type: string): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Clear all registrations. Tests must call this between cases — the registry
|
|
94
|
+
* is module-global (ADR-125 precedent: `resetAgentProviderOverrides()`).
|
|
95
|
+
*/
|
|
96
|
+
export declare function resetProviderRegistry(): void;
|
|
97
|
+
/** Is this type registered as an external provider? */
|
|
98
|
+
export declare function isRegisteredProvider(type: string): boolean;
|
|
99
|
+
/** Get a registration, or `undefined`. */
|
|
100
|
+
export declare function getRegisteredProvider(type: string): RegisteredProvider | undefined;
|
|
101
|
+
/** All registrations, in registration order. */
|
|
102
|
+
export declare function listRegisteredProviders(): readonly RegisteredProvider[];
|
|
103
|
+
/** Just the registered type strings. */
|
|
104
|
+
export declare function registeredProviderTypes(): readonly string[];
|
|
105
|
+
/**
|
|
106
|
+
* Validate that a factory actually produced something the manager can drive.
|
|
107
|
+
* Returns an error message, or `undefined` when the instance conforms.
|
|
108
|
+
*
|
|
109
|
+
* This runs at construction rather than registration because the product is
|
|
110
|
+
* what must conform, and calling a factory eagerly at registration time would
|
|
111
|
+
* be an unwanted side effect (a provider constructor may spawn processes or
|
|
112
|
+
* open handles).
|
|
113
|
+
*/
|
|
114
|
+
export declare function validateProviderInstance(type: string, instance: unknown): string | undefined;
|
|
115
|
+
/**
|
|
116
|
+
* Build an instance of a registered provider.
|
|
117
|
+
*
|
|
118
|
+
* Throws `PROVIDER_UNAVAILABLE` when the type is not registered, and
|
|
119
|
+
* `INVALID_REQUEST` when the factory produced something that is not a usable
|
|
120
|
+
* `LLMProvider`. `ProviderManager.createProvider()` calls this from the
|
|
121
|
+
* `default` arm of its built-in `switch`, so built-ins always win and a
|
|
122
|
+
* registration can never shadow one.
|
|
123
|
+
*/
|
|
124
|
+
export declare function createRegisteredProvider(type: LLMProviderType): LLMProvider;
|
|
125
|
+
/**
|
|
126
|
+
* The billing mode a registered provider declared, with its provenance, for
|
|
127
|
+
* `aqe health` to render as "external — <mode> (declared by <source>)".
|
|
128
|
+
* Returns `undefined` for a type that is not registered.
|
|
129
|
+
*/
|
|
130
|
+
export declare function registeredBillingDeclaration(type: LLMProviderType): {
|
|
131
|
+
mode: BillingMode;
|
|
132
|
+
source: ProviderRegistrationSource;
|
|
133
|
+
detail?: string;
|
|
134
|
+
} | undefined;
|
|
135
|
+
//# sourceMappingURL=provider-registry.d.ts.map
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 — External provider registry
|
|
3
|
+
* ADR-127: External provider registration (issue #628)
|
|
4
|
+
*
|
|
5
|
+
* The sanctioned extension point for provider identity. A downstream
|
|
6
|
+
* integrator can register an additional provider type so
|
|
7
|
+
* `AQE_LLM_PROVIDER=<their-host>` resolves to a provider they supply, instead
|
|
8
|
+
* of forking `BuiltinProviderType` or projecting their host onto an unrelated
|
|
9
|
+
* vendor identity (which would make `aqe health` misreport who served the work).
|
|
10
|
+
*
|
|
11
|
+
* Two entry points feed this registry:
|
|
12
|
+
* 1. `registerProvider()` — for a consumer that embeds AQE in-process.
|
|
13
|
+
* 2. The `externalProviders` block in `.agentic-qe/llm-config.json` — for the
|
|
14
|
+
* subprocess case (the `aqe` CLI and MCP server are separate bundles, so
|
|
15
|
+
* an in-process call cannot reach them). See `external-provider-config.ts`.
|
|
16
|
+
*
|
|
17
|
+
* State is process-global module state, matching ADR-125's
|
|
18
|
+
* `agent-router-config.ts`. Tests must call `resetProviderRegistry()`.
|
|
19
|
+
*/
|
|
20
|
+
import { isBuiltinProviderType, createLLMError, } from './interfaces.js';
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Registry state
|
|
23
|
+
// ============================================================================
|
|
24
|
+
const registry = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Reserved identifiers that must never be claimed by an external provider.
|
|
27
|
+
* `anthropic` is normalized to `claude` by `resolveProviderOverrideFromEnv`,
|
|
28
|
+
* so registering it would create a type whose env selector is unreachable.
|
|
29
|
+
*/
|
|
30
|
+
const RESERVED_TYPES = new Set(['anthropic']);
|
|
31
|
+
/** A provider type must be a URL/env-safe slug — this is an env var value. */
|
|
32
|
+
const VALID_TYPE = /^[a-z0-9][a-z0-9-]{0,62}$/;
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Registration
|
|
35
|
+
// ============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Validate a candidate provider type. Returns an error message, or `undefined`
|
|
38
|
+
* when the type is acceptable.
|
|
39
|
+
*
|
|
40
|
+
* Exported so config-driven registration can report per-entry problems without
|
|
41
|
+
* throwing (a bad line in a config file must never be fatal — ADR-125's
|
|
42
|
+
* drop-individually discipline).
|
|
43
|
+
*/
|
|
44
|
+
export function validateProviderType(type) {
|
|
45
|
+
if (typeof type !== 'string' || type.trim().length === 0) {
|
|
46
|
+
return 'provider type must be a non-empty string';
|
|
47
|
+
}
|
|
48
|
+
if (type !== type.toLowerCase()) {
|
|
49
|
+
return `provider type "${type}" must be lowercase (AQE_LLM_PROVIDER is matched case-insensitively)`;
|
|
50
|
+
}
|
|
51
|
+
if (!VALID_TYPE.test(type)) {
|
|
52
|
+
return `provider type "${type}" must match ${VALID_TYPE.source} (lowercase alphanumeric and dashes)`;
|
|
53
|
+
}
|
|
54
|
+
if (isBuiltinProviderType(type)) {
|
|
55
|
+
return `provider type "${type}" is built in and cannot be overridden`;
|
|
56
|
+
}
|
|
57
|
+
if (RESERVED_TYPES.has(type)) {
|
|
58
|
+
return `provider type "${type}" is reserved`;
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Register an additional provider type (ADR-127).
|
|
64
|
+
*
|
|
65
|
+
* Throws on an invalid or colliding type — an in-process caller passing a bad
|
|
66
|
+
* type has a bug, and silently ignoring it would strand `AQE_LLM_PROVIDER`
|
|
67
|
+
* pointing at nothing. Config-driven registration uses
|
|
68
|
+
* `tryRegisterProvider()` instead, which reports rather than throws.
|
|
69
|
+
*
|
|
70
|
+
* Re-registering the same type replaces the previous entry.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* import { registerProvider } from 'agentic-qe/shared/llm';
|
|
75
|
+
*
|
|
76
|
+
* registerProvider('my-host', () => new MyHostProvider(), {
|
|
77
|
+
* billingMode: 'subscription',
|
|
78
|
+
* displayName: 'My Host (subscription)',
|
|
79
|
+
* });
|
|
80
|
+
* // now AQE_LLM_PROVIDER=my-host resolves
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export function registerProvider(type, factory, options = {}) {
|
|
84
|
+
const problem = validateProviderType(type);
|
|
85
|
+
if (problem) {
|
|
86
|
+
throw createLLMError(problem, 'INVALID_REGISTRATION', { retryable: false });
|
|
87
|
+
}
|
|
88
|
+
if (typeof factory !== 'function') {
|
|
89
|
+
throw createLLMError(`provider "${type}" must be registered with a factory function`, 'INVALID_REGISTRATION', { retryable: false });
|
|
90
|
+
}
|
|
91
|
+
registry.set(type, {
|
|
92
|
+
...options,
|
|
93
|
+
type,
|
|
94
|
+
factory,
|
|
95
|
+
source: options.source ?? 'api',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Config-driven registration. Returns an error message instead of throwing, so
|
|
100
|
+
* one malformed `externalProviders` entry drops itself rather than failing
|
|
101
|
+
* router construction for the whole project.
|
|
102
|
+
*/
|
|
103
|
+
export function tryRegisterProvider(type, factory, options = {}) {
|
|
104
|
+
try {
|
|
105
|
+
registerProvider(type, factory, options);
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
return error instanceof Error ? error.message : String(error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Remove a registration. Returns true if something was removed. */
|
|
113
|
+
export function unregisterProvider(type) {
|
|
114
|
+
return registry.delete(type);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Clear all registrations. Tests must call this between cases — the registry
|
|
118
|
+
* is module-global (ADR-125 precedent: `resetAgentProviderOverrides()`).
|
|
119
|
+
*/
|
|
120
|
+
export function resetProviderRegistry() {
|
|
121
|
+
registry.clear();
|
|
122
|
+
}
|
|
123
|
+
// ============================================================================
|
|
124
|
+
// Lookup
|
|
125
|
+
// ============================================================================
|
|
126
|
+
/** Is this type registered as an external provider? */
|
|
127
|
+
export function isRegisteredProvider(type) {
|
|
128
|
+
return registry.has(type);
|
|
129
|
+
}
|
|
130
|
+
/** Get a registration, or `undefined`. */
|
|
131
|
+
export function getRegisteredProvider(type) {
|
|
132
|
+
return registry.get(type);
|
|
133
|
+
}
|
|
134
|
+
/** All registrations, in registration order. */
|
|
135
|
+
export function listRegisteredProviders() {
|
|
136
|
+
return [...registry.values()];
|
|
137
|
+
}
|
|
138
|
+
/** Just the registered type strings. */
|
|
139
|
+
export function registeredProviderTypes() {
|
|
140
|
+
return [...registry.keys()];
|
|
141
|
+
}
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// Construction
|
|
144
|
+
// ============================================================================
|
|
145
|
+
/**
|
|
146
|
+
* The subset of `LLMProvider` a registered provider must actually implement
|
|
147
|
+
* for the manager and router to drive it. `embed` is deliberately excluded —
|
|
148
|
+
* a CLI-shaped host cannot generally offer an embeddings endpoint, and
|
|
149
|
+
* `ExternalCliProvider` throws `EMBEDDING_UNSUPPORTED` so the caller falls
|
|
150
|
+
* back rather than receiving a fabricated vector.
|
|
151
|
+
*/
|
|
152
|
+
const REQUIRED_PROVIDER_METHODS = [
|
|
153
|
+
'isAvailable',
|
|
154
|
+
'healthCheck',
|
|
155
|
+
'generate',
|
|
156
|
+
'complete',
|
|
157
|
+
'getConfig',
|
|
158
|
+
'getSupportedModels',
|
|
159
|
+
'getCostPerToken',
|
|
160
|
+
'dispose',
|
|
161
|
+
];
|
|
162
|
+
/**
|
|
163
|
+
* Validate that a factory actually produced something the manager can drive.
|
|
164
|
+
* Returns an error message, or `undefined` when the instance conforms.
|
|
165
|
+
*
|
|
166
|
+
* This runs at construction rather than registration because the product is
|
|
167
|
+
* what must conform, and calling a factory eagerly at registration time would
|
|
168
|
+
* be an unwanted side effect (a provider constructor may spawn processes or
|
|
169
|
+
* open handles).
|
|
170
|
+
*/
|
|
171
|
+
export function validateProviderInstance(type, instance) {
|
|
172
|
+
if (!instance || typeof instance !== 'object') {
|
|
173
|
+
return `provider "${type}" factory returned ${instance === null ? 'null' : typeof instance}, expected an LLMProvider`;
|
|
174
|
+
}
|
|
175
|
+
const candidate = instance;
|
|
176
|
+
const missing = REQUIRED_PROVIDER_METHODS.filter((method) => typeof candidate[method] !== 'function');
|
|
177
|
+
if (missing.length > 0) {
|
|
178
|
+
return `provider "${type}" is missing required LLMProvider method(s): ${missing.join(', ')}`;
|
|
179
|
+
}
|
|
180
|
+
if (typeof candidate.type !== 'string' || candidate.type.length === 0) {
|
|
181
|
+
return `provider "${type}" must expose a non-empty \`type\``;
|
|
182
|
+
}
|
|
183
|
+
if (candidate.type !== type) {
|
|
184
|
+
return `provider "${type}" reports type "${candidate.type}" — a provider must not claim an identity other than the one it was registered under`;
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Build an instance of a registered provider.
|
|
190
|
+
*
|
|
191
|
+
* Throws `PROVIDER_UNAVAILABLE` when the type is not registered, and
|
|
192
|
+
* `INVALID_REQUEST` when the factory produced something that is not a usable
|
|
193
|
+
* `LLMProvider`. `ProviderManager.createProvider()` calls this from the
|
|
194
|
+
* `default` arm of its built-in `switch`, so built-ins always win and a
|
|
195
|
+
* registration can never shadow one.
|
|
196
|
+
*/
|
|
197
|
+
export function createRegisteredProvider(type) {
|
|
198
|
+
const registration = registry.get(type);
|
|
199
|
+
if (!registration) {
|
|
200
|
+
throw createLLMError(`Unknown provider type: ${type}`, 'PROVIDER_UNAVAILABLE', {
|
|
201
|
+
retryable: false,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
const instance = registration.factory(registration.config);
|
|
205
|
+
const problem = validateProviderInstance(type, instance);
|
|
206
|
+
if (problem) {
|
|
207
|
+
throw createLLMError(problem, 'INVALID_REGISTRATION', { retryable: false });
|
|
208
|
+
}
|
|
209
|
+
return instance;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The billing mode a registered provider declared, with its provenance, for
|
|
213
|
+
* `aqe health` to render as "external — <mode> (declared by <source>)".
|
|
214
|
+
* Returns `undefined` for a type that is not registered.
|
|
215
|
+
*/
|
|
216
|
+
export function registeredBillingDeclaration(type) {
|
|
217
|
+
const registration = registry.get(type);
|
|
218
|
+
if (!registration)
|
|
219
|
+
return undefined;
|
|
220
|
+
return {
|
|
221
|
+
// Absent declaration → metered-api: assume it costs money and needs a cap.
|
|
222
|
+
mode: registration.billingMode ?? 'metered-api',
|
|
223
|
+
source: registration.source,
|
|
224
|
+
detail: registration.sourceDetail,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=provider-registry.js.map
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 — Generic external CLI provider (ADR-127 / issue #628)
|
|
3
|
+
*
|
|
4
|
+
* A provider built from a *declaration* rather than from code. It generalizes
|
|
5
|
+
* the shape AQE has already shipped twice — `providers/codex.ts` and
|
|
6
|
+
* `providers/claude-code.ts` — into something a downstream integrator can
|
|
7
|
+
* obtain by writing JSON:
|
|
8
|
+
*
|
|
9
|
+
* spawn a host CLI → feed it a prompt on stdin → read the completion from
|
|
10
|
+
* stdout → attribute the usage honestly.
|
|
11
|
+
*
|
|
12
|
+
* WHY DECLARATIVE: the requester (agentic-kit) drives AQE as spawned
|
|
13
|
+
* subprocesses — the `aqe` CLI bundle and the MCP server bundle are separate
|
|
14
|
+
* esbuild artifacts — so an in-process `registerProvider()` call cannot reach
|
|
15
|
+
* them. A declaration in `.agentic-qe/llm-config.json` reaches both, and does
|
|
16
|
+
* so without AQE ever importing third-party code. See ADR-127 for why the
|
|
17
|
+
* dynamic-`import()` plugin design was rejected.
|
|
18
|
+
*
|
|
19
|
+
* LOAD-BEARING: `stripEnv` removes named variables from the child environment.
|
|
20
|
+
* A host that bills against a subscription must be able to guarantee an API
|
|
21
|
+
* key is not silently present to flip it back to metered billing — the same
|
|
22
|
+
* discipline `codex.ts` enforces for OPENAI_API_KEY / CODEX_API_KEY.
|
|
23
|
+
*/
|
|
24
|
+
import { type BillingMode, type CompleteOptions, type CompletionResponse, type EmbedOptions, type EmbeddingResponse, type GenerateOptions, type HealthCheckResult, type LLMConfig, type LLMProvider, type LLMResponse, type Message } from '../interfaces';
|
|
25
|
+
/**
|
|
26
|
+
* A declared external CLI provider. This is the on-disk contract — see ADR-127
|
|
27
|
+
* §Schema. Everything except `kind` and `command` is optional.
|
|
28
|
+
*/
|
|
29
|
+
export interface ExternalCliProviderConfig {
|
|
30
|
+
/** Discriminator. Only `'cli'` exists today; `'http'` is a follow-up. */
|
|
31
|
+
readonly kind: 'cli';
|
|
32
|
+
/** argv. Not shell-interpreted — `command[0]` is the binary. */
|
|
33
|
+
readonly command: readonly string[];
|
|
34
|
+
/** How this host bills. Unverified assertion; defaults to `metered-api`. */
|
|
35
|
+
readonly billingMode?: BillingMode;
|
|
36
|
+
/** Models this host accepts. Defaults to `['default']`. */
|
|
37
|
+
readonly models?: readonly string[];
|
|
38
|
+
/** Model used when the caller does not name one. Defaults to `models[0]`. */
|
|
39
|
+
readonly defaultModel?: string;
|
|
40
|
+
/** Flag used to pass the model, e.g. `--model`. Omitted = never passed. */
|
|
41
|
+
readonly modelFlag?: string;
|
|
42
|
+
/** Hard timeout per invocation. Defaults to 180000. */
|
|
43
|
+
readonly timeoutMs?: number;
|
|
44
|
+
/** Max concurrent subprocesses. Defaults to 2. */
|
|
45
|
+
readonly maxConcurrency?: number;
|
|
46
|
+
/** Env vars removed from the child process before spawning. */
|
|
47
|
+
readonly stripEnv?: readonly string[];
|
|
48
|
+
/** Human-facing name for CLI output. Defaults to the type string. */
|
|
49
|
+
readonly displayName?: string;
|
|
50
|
+
}
|
|
51
|
+
export declare const DEFAULT_EXTERNAL_CLI_TIMEOUT_MS = 180000;
|
|
52
|
+
export declare const DEFAULT_EXTERNAL_CLI_CONCURRENCY = 2;
|
|
53
|
+
export declare const EXTERNAL_CLI_DEFAULT_MODEL = "default";
|
|
54
|
+
/**
|
|
55
|
+
* Validate a declaration. Returns an error message, or `undefined` when the
|
|
56
|
+
* declaration is usable.
|
|
57
|
+
*
|
|
58
|
+
* Deliberately does NOT check that the binary exists — that is a runtime
|
|
59
|
+
* availability question answered by `isAvailable()`. A declaration for a host
|
|
60
|
+
* that is not installed yet is valid-but-unavailable, not malformed, so a
|
|
61
|
+
* config file stays portable across machines.
|
|
62
|
+
*/
|
|
63
|
+
export declare function validateExternalCliConfig(type: string, config: unknown): string | undefined;
|
|
64
|
+
export declare class ExternalCliProvider implements LLMProvider {
|
|
65
|
+
readonly type: string;
|
|
66
|
+
readonly name: string;
|
|
67
|
+
readonly billingMode: BillingMode;
|
|
68
|
+
private readonly config;
|
|
69
|
+
private requestCounter;
|
|
70
|
+
private availabilityCache?;
|
|
71
|
+
private active;
|
|
72
|
+
private readonly queue;
|
|
73
|
+
constructor(type: string, config: ExternalCliProviderConfig);
|
|
74
|
+
/**
|
|
75
|
+
* Is the host's binary present and executable?
|
|
76
|
+
*
|
|
77
|
+
* Deliberately does NOT run it. AQE cannot know what invoking an arbitrary
|
|
78
|
+
* host costs — a declared host has no `--version` contract it agreed to, and
|
|
79
|
+
* spawning it with an empty prompt could burn a real request against the
|
|
80
|
+
* user's plan just to answer "are you installed?". Resolving the binary on
|
|
81
|
+
* PATH answers the question for free.
|
|
82
|
+
*/
|
|
83
|
+
isAvailable(): Promise<boolean>;
|
|
84
|
+
healthCheck(): Promise<HealthCheckResult>;
|
|
85
|
+
generate(input: string | Message[], options?: GenerateOptions): Promise<LLMResponse>;
|
|
86
|
+
/**
|
|
87
|
+
* ADR-127: a generic CLI contract cannot promise an embeddings endpoint.
|
|
88
|
+
* Throws `EMBEDDING_UNSUPPORTED` — a distinct, non-retryable signal so the
|
|
89
|
+
* caller falls back to a provider that has one, and never receives a
|
|
90
|
+
* fabricated vector.
|
|
91
|
+
*/
|
|
92
|
+
embed(_text: string, _options?: EmbedOptions): Promise<EmbeddingResponse>;
|
|
93
|
+
complete(prompt: string, options?: CompleteOptions): Promise<CompletionResponse>;
|
|
94
|
+
getConfig(): LLMConfig;
|
|
95
|
+
getSupportedModels(): string[];
|
|
96
|
+
/**
|
|
97
|
+
* Unknown. A declared host does not tell AQE its per-token price, and
|
|
98
|
+
* inventing one would feed fabricated numbers into cost reporting.
|
|
99
|
+
*/
|
|
100
|
+
getCostPerToken(): {
|
|
101
|
+
input: number;
|
|
102
|
+
output: number;
|
|
103
|
+
};
|
|
104
|
+
dispose(): Promise<void>;
|
|
105
|
+
private defaultModel;
|
|
106
|
+
/**
|
|
107
|
+
* Child env with the declared keys removed (LOAD-BEARING — see file header).
|
|
108
|
+
* Static so tests can assert the strip without spawning anything.
|
|
109
|
+
*/
|
|
110
|
+
static childEnv(stripEnv?: readonly string[], base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
111
|
+
private classifyError;
|
|
112
|
+
private spawnHost;
|
|
113
|
+
/** Semaphore so we never spawn unbounded host subprocesses. */
|
|
114
|
+
private withConcurrency;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Does this binary resolve to something executable, without running it?
|
|
118
|
+
* An absolute or explicitly-relative path is checked directly; a bare name is
|
|
119
|
+
* looked up across PATH the way the shell would.
|
|
120
|
+
*/
|
|
121
|
+
export declare function resolvesOnPath(binary: string, env?: NodeJS.ProcessEnv): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Flatten messages into a single prompt. A generic CLI has no role protocol,
|
|
124
|
+
* so system content is hoisted into a preamble — the same strategy
|
|
125
|
+
* `codex.ts` uses and the reason `message-formatter` falls back to
|
|
126
|
+
* `'first-message'` for unknown providers.
|
|
127
|
+
*/
|
|
128
|
+
export declare function flattenPrompt(input: string | Message[], systemPrompt?: string): string;
|
|
129
|
+
//# sourceMappingURL=external-cli.d.ts.map
|