agentic-qe 3.12.0 → 3.12.2
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 +83 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-RL6GNUOS.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-IO54X6IQ.js → agent-booster-wasm-3KYNICBC.js} +2 -2
- package/dist/cli/chunks/{agent-handler-A57SZUCW.js → agent-handler-NGPTMI6E.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-BX7LRFGN.js → agent-memory-branch-GNTQKQMG.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-UEEW6AQG.js +2 -0
- package/dist/cli/chunks/{arena-UTC4YY6Y.js → arena-HQEP2NWI.js} +4 -4
- package/dist/cli/chunks/{arena-Y3XTX6O7.js → arena-PA7VIYD4.js} +2 -2
- package/dist/cli/chunks/{audit-L4RL2AOY.js → audit-XSDM57GC.js} +3 -3
- package/dist/cli/chunks/base-JQA5YULE.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-VS6L5VUG.js → better-sqlite3-RQCOOAZC.js} +2 -2
- package/dist/cli/chunks/{brain-handler-OHDPI5TQ.js → brain-handler-T7RDPKNM.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-ZRXE2CQ7.js → branch-enumerator-ZW7RNMUF.js} +2 -2
- package/dist/cli/chunks/{browser-NT33FG76.js → browser-4LU22CPP.js} +2 -2
- package/dist/cli/chunks/browser-workflow-XTKUHTIT.js +2 -0
- package/dist/cli/chunks/{chunk-XEYW3V5I.js → chunk-2L7K2J2T.js} +2 -2
- package/dist/cli/chunks/{chunk-VWJSWXHG.js → chunk-2R7J4ZGT.js} +1 -1
- package/dist/cli/chunks/{chunk-KZMRU7DL.js → chunk-2R7XZ2WP.js} +2 -2
- package/dist/cli/chunks/{chunk-2AR4B3DI.js → chunk-327YEKBU.js} +2 -2
- package/dist/cli/chunks/{chunk-HDJMD6UH.js → chunk-3AJUJAUJ.js} +1 -1
- package/dist/cli/chunks/{chunk-JOBCMNTP.js → chunk-3LELACAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-JYX7AZHE.js → chunk-4FHJYJCH.js} +2 -2
- package/dist/cli/chunks/{chunk-KJWQ7ENF.js → chunk-4KEOBDEI.js} +2 -2
- package/dist/cli/chunks/{chunk-G6LR7FK7.js → chunk-56MXYSYY.js} +2 -2
- package/dist/cli/chunks/{chunk-5YGESYBC.js → chunk-5CGTBAVF.js} +1 -1
- package/dist/cli/chunks/{chunk-RZDNCTOA.js → chunk-5SM57X4D.js} +2 -2
- package/dist/cli/chunks/{chunk-O3C5RRDQ.js → chunk-5YLY2WT2.js} +3 -3
- package/dist/cli/chunks/{chunk-PQMLIVGV.js → chunk-6FBXYS6X.js} +2 -2
- package/dist/cli/chunks/{chunk-GGMQOEZZ.js → chunk-6N62KS3C.js} +2 -2
- package/dist/cli/chunks/{chunk-BB4OVXWF.js → chunk-6SWR2BN7.js} +1 -1
- package/dist/cli/chunks/{chunk-7HJHXSYT.js → chunk-6X65BGGK.js} +2 -2
- package/dist/cli/chunks/{chunk-P52YORQG.js → chunk-7DV42KFP.js} +2 -2
- package/dist/cli/chunks/{chunk-EZE2HRQB.js → chunk-7KMYBRKJ.js} +2 -2
- package/dist/cli/chunks/{chunk-335GHVJV.js → chunk-7OD6HFCP.js} +3 -3
- package/dist/cli/chunks/chunk-ABHKXMOJ.js +2 -0
- package/dist/cli/chunks/{chunk-L5ZLOW3K.js → chunk-ACDZ2CRV.js} +2 -2
- package/dist/cli/chunks/{chunk-NW7G57NR.js → chunk-ADZTWGEB.js} +2 -2
- package/dist/cli/chunks/{chunk-CC5G3K4X.js → chunk-AJ6DZXKK.js} +2 -2
- package/dist/cli/chunks/{chunk-SSXAW3ER.js → chunk-AL5QT6OX.js} +2 -2
- package/dist/cli/chunks/{chunk-FKPUPQQT.js → chunk-AMPYON7M.js} +2 -2
- package/dist/cli/chunks/{chunk-C4SZSPXY.js → chunk-APVXTHTA.js} +2 -2
- package/dist/cli/chunks/{chunk-FEEMJDUF.js → chunk-B7DI76SY.js} +2 -2
- package/dist/cli/chunks/{chunk-Q5YRPS4P.js → chunk-BDVOXGY5.js} +1 -1
- package/dist/cli/chunks/{chunk-VMP4M5PB.js → chunk-BDX54WJV.js} +1 -1
- package/dist/cli/chunks/{chunk-G5JQLUUO.js → chunk-BMRR3MBR.js} +2 -2
- package/dist/cli/chunks/{chunk-2UMCB7AH.js → chunk-BOR5MME3.js} +1 -1
- package/dist/cli/chunks/{chunk-HW62TB4T.js → chunk-BPSEFLJ6.js} +1 -1
- package/dist/cli/chunks/{chunk-DTOE3NYW.js → chunk-BUKGW63B.js} +12 -12
- package/dist/cli/chunks/{chunk-V2MD5EDD.js → chunk-C7VNQ4PY.js} +2 -2
- package/dist/cli/chunks/{chunk-W766S4SK.js → chunk-CDMAVNV5.js} +1 -1
- package/dist/cli/chunks/{chunk-K5SN66B4.js → chunk-CKFZOPZN.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2MCIIJD.js → chunk-CMKCPRWX.js} +1 -1
- package/dist/cli/chunks/{chunk-DR7PCO3S.js → chunk-CQKEVUMO.js} +2 -2
- package/dist/cli/chunks/{chunk-2KHDGC7N.js → chunk-CTFW7CMI.js} +2 -2
- package/dist/cli/chunks/{chunk-5FR5GBUT.js → chunk-DGOZ3CGB.js} +2 -2
- package/dist/cli/chunks/{chunk-ZVPAFX4I.js → chunk-DTXHRALB.js} +2 -2
- package/dist/cli/chunks/{chunk-IJUYHIKN.js → chunk-E5XWCGSX.js} +2 -2
- package/dist/cli/chunks/{chunk-7ZIVDGSN.js → chunk-EGU54SNK.js} +1 -1
- package/dist/cli/chunks/{chunk-KI5BP4X5.js → chunk-EKTWIEEO.js} +2 -2
- package/dist/cli/chunks/{chunk-TJ6N4CCX.js → chunk-ERQL3D2O.js} +2 -2
- package/dist/cli/chunks/{chunk-CHO54B34.js → chunk-EZ3JVN6S.js} +2 -2
- package/dist/cli/chunks/{chunk-5VBPIJUZ.js → chunk-F3CKOVZM.js} +4 -4
- package/dist/cli/chunks/{chunk-RQN4HWGV.js → chunk-FKUH33L3.js} +2 -2
- package/dist/cli/chunks/{chunk-WNASEUBW.js → chunk-FTG4ZVTX.js} +11 -11
- package/dist/cli/chunks/{chunk-CMGYUCM7.js → chunk-FUBN5GPY.js} +1 -1
- package/dist/cli/chunks/{chunk-I6WHYRWB.js → chunk-GCQATSMK.js} +2 -2
- package/dist/cli/chunks/{chunk-TED4KOSK.js → chunk-GECWGFRR.js} +2 -2
- package/dist/cli/chunks/{chunk-BA6U7NSR.js → chunk-GP7IXYOY.js} +1 -1
- package/dist/cli/chunks/{chunk-CSEEGX5T.js → chunk-GUGUYFU5.js} +2 -2
- package/dist/cli/chunks/{chunk-KZ37VHMJ.js → chunk-HH5Y4NCR.js} +2 -2
- package/dist/cli/chunks/{chunk-DXOMRWDC.js → chunk-HNU32LN3.js} +1 -1
- package/dist/cli/chunks/{chunk-3AFNXU45.js → chunk-HU6ETNA7.js} +1 -1
- package/dist/cli/chunks/{chunk-KN5GOEYK.js → chunk-IKIKIHFQ.js} +2 -2
- package/dist/cli/chunks/{chunk-UGJQJSPB.js → chunk-ILNQPPKB.js} +1 -1
- package/dist/cli/chunks/{chunk-MJPYNGZ7.js → chunk-IQ56KMMH.js} +1 -1
- package/dist/cli/chunks/{chunk-SCMXIBI7.js → chunk-J6EFAKDQ.js} +2 -2
- package/dist/cli/chunks/{chunk-RMFRFING.js → chunk-K43YXI7C.js} +2 -2
- package/dist/cli/chunks/{chunk-FOPS6DRZ.js → chunk-KBAXD6PH.js} +1 -1
- package/dist/cli/chunks/{chunk-VS4GMNJK.js → chunk-KBXW7S3W.js} +3 -3
- package/dist/cli/chunks/{chunk-QJ6H2HQQ.js → chunk-KDGLNJPB.js} +1 -1
- package/dist/cli/chunks/{chunk-VA7TEOPM.js → chunk-KJJP446A.js} +1 -1
- package/dist/cli/chunks/{chunk-TC2JE5OK.js → chunk-KNOO6TFO.js} +3 -3
- package/dist/cli/chunks/{chunk-HAEUPIKW.js → chunk-KPV4N4KT.js} +2 -2
- package/dist/cli/chunks/{chunk-IKVNYK7Y.js → chunk-KV5OZ6T3.js} +2 -2
- package/dist/cli/chunks/{chunk-RG552ROA.js → chunk-LGEPR7MH.js} +3 -3
- package/dist/cli/chunks/{chunk-7WX3MKRS.js → chunk-LIAW5FD7.js} +2 -2
- package/dist/cli/chunks/{chunk-MUV56BPK.js → chunk-LOZAUP6L.js} +2 -2
- package/dist/cli/chunks/{chunk-BUYPRUNY.js → chunk-LWVUNBZO.js} +2 -2
- package/dist/cli/chunks/{chunk-FZRU73M4.js → chunk-M4XVEUUM.js} +2 -2
- package/dist/cli/chunks/{chunk-ICK3B24H.js → chunk-MALFTRCT.js} +2 -2
- package/dist/cli/chunks/{chunk-MBF3Q7FQ.js → chunk-MF4FULAI.js} +1 -1
- package/dist/cli/chunks/{chunk-7F7U2HUH.js → chunk-MNHGBG4D.js} +1 -1
- package/dist/cli/chunks/{chunk-XIFPIVZI.js → chunk-MNNNA57O.js} +2 -2
- package/dist/cli/chunks/{chunk-BZPF6GTL.js → chunk-N57BKUVE.js} +1 -1
- package/dist/cli/chunks/{chunk-TO5PQSDD.js → chunk-NDAJWCXN.js} +2 -2
- package/dist/cli/chunks/{chunk-NLHISTL2.js → chunk-OELLHV7S.js} +2 -2
- package/dist/cli/chunks/{chunk-PM566XEO.js → chunk-OEZNUXY7.js} +1 -1
- package/dist/cli/chunks/{chunk-4GU656WM.js → chunk-OIUIVV2N.js} +1 -1
- package/dist/cli/chunks/{chunk-CVGXB7IX.js → chunk-OMIGKGJJ.js} +2 -2
- package/dist/cli/chunks/{chunk-62RELCU6.js → chunk-OSAPKOGN.js} +1 -1
- package/dist/cli/chunks/{chunk-72VZGAMJ.js → chunk-P2FYRAC5.js} +1 -1
- package/dist/cli/chunks/{chunk-W2OMW6UU.js → chunk-P65S7AZA.js} +2 -2
- package/dist/cli/chunks/{chunk-VZ67ZDB3.js → chunk-PHIEJAQK.js} +3 -3
- package/dist/cli/chunks/chunk-PSA2SOON.js +18 -0
- package/dist/cli/chunks/{chunk-USB44IHJ.js → chunk-PXKVW6PT.js} +2 -2
- package/dist/cli/chunks/{chunk-64M3FFM4.js → chunk-QYST2TZW.js} +2 -2
- package/dist/cli/chunks/{chunk-MUAHFGIX.js → chunk-R554WVIG.js} +2 -2
- package/dist/cli/chunks/{chunk-TJEJ4UVX.js → chunk-R5HC6JVJ.js} +2 -2
- package/dist/cli/chunks/{chunk-6X3RJBA3.js → chunk-R6LDR3IO.js} +2 -2
- package/dist/cli/chunks/{chunk-OPIWFXME.js → chunk-RFQIC6ZF.js} +1 -1
- package/dist/cli/chunks/{chunk-EM2JIIAQ.js → chunk-RXEQB4OT.js} +2 -2
- package/dist/cli/chunks/{chunk-BGRJZH5Q.js → chunk-RXH2TC2K.js} +2 -2
- package/dist/cli/chunks/{chunk-DQDFACYW.js → chunk-SVUWAV6Y.js} +1 -1
- package/dist/cli/chunks/{chunk-POKMJTD2.js → chunk-SYLTJKN2.js} +1 -1
- package/dist/cli/chunks/{chunk-WJYTLRA5.js → chunk-T6TQPF5P.js} +3 -3
- package/dist/cli/chunks/{chunk-FI5SSLEF.js → chunk-T75VH6NT.js} +2 -2
- package/dist/cli/chunks/{chunk-EGH3H7QO.js → chunk-TERRRQVY.js} +1 -1
- package/dist/cli/chunks/{chunk-2ALNNXFF.js → chunk-TFVWUR2U.js} +2 -2
- package/dist/cli/chunks/{chunk-MK3J7JVZ.js → chunk-TLYZPOA7.js} +2 -2
- package/dist/cli/chunks/{chunk-RYUSZ43T.js → chunk-TMQ3S7HR.js} +1 -1
- package/dist/cli/chunks/{chunk-Z3W3R4CW.js → chunk-TQNNKW7K.js} +2 -2
- package/dist/cli/chunks/{chunk-PT3FTGKZ.js → chunk-TRHUH24V.js} +2 -2
- package/dist/cli/chunks/{chunk-5XFX25AJ.js → chunk-UEIIIDBJ.js} +2 -2
- package/dist/cli/chunks/{chunk-YKOTOCO6.js → chunk-UF3YOGHV.js} +2 -2
- package/dist/cli/chunks/{chunk-UUOXV3NS.js → chunk-UFPCNUJA.js} +10 -10
- package/dist/cli/chunks/{chunk-FZIHOMGY.js → chunk-V2QYW5KW.js} +2 -2
- package/dist/cli/chunks/{chunk-AAATFEIL.js → chunk-VHYACXLN.js} +2 -2
- package/dist/cli/chunks/chunk-VM6VBRRU.js +43 -0
- package/dist/cli/chunks/{chunk-ZT2WHCVM.js → chunk-VOHYQ6MX.js} +2 -2
- package/dist/cli/chunks/{chunk-C6GYLCTX.js → chunk-VQU2JXTK.js} +3 -3
- package/dist/cli/chunks/{chunk-FU5RNEXV.js → chunk-W7LBT3BF.js} +2 -2
- package/dist/cli/chunks/{chunk-GCF42L7M.js → chunk-WC5PM33J.js} +3 -3
- package/dist/cli/chunks/{chunk-WT4ZDDFM.js → chunk-WE5QHYL7.js} +1 -1
- package/dist/cli/chunks/chunk-WKWIUS5G.js +3 -0
- package/dist/cli/chunks/chunk-WL5VMIO4.js +2 -0
- package/dist/cli/chunks/{chunk-OHSVDMF7.js → chunk-WMNGPIP3.js} +1 -1
- package/dist/cli/chunks/{chunk-UVVKFBF7.js → chunk-WRMUQVKY.js} +2 -2
- package/dist/cli/chunks/{chunk-NNGCUJWQ.js → chunk-WY5CX3VH.js} +2 -2
- package/dist/cli/chunks/{chunk-36MPDANH.js → chunk-WYFEVPLO.js} +1 -1
- package/dist/cli/chunks/{chunk-RHC7TFPU.js → chunk-X47GHZY3.js} +2 -2
- package/dist/cli/chunks/{chunk-TR5GOGH3.js → chunk-XNNYHQLW.js} +5 -5
- package/dist/cli/chunks/{chunk-27JCWG5J.js → chunk-YDZIPP3Y.js} +2 -2
- package/dist/cli/chunks/{chunk-KDLYTJ5C.js → chunk-YRO7HNS4.js} +2 -2
- package/dist/cli/chunks/{chunk-SPEUF7ZL.js → chunk-YSCEUK55.js} +2 -2
- package/dist/cli/chunks/chunk-YY4KXDI6.js +2 -0
- package/dist/cli/chunks/{chunk-ZWC6CM4R.js → chunk-YYV3FYVB.js} +1 -1
- package/dist/cli/chunks/{chunk-AEX75YGI.js → chunk-YZ44FUVJ.js} +2 -2
- package/dist/cli/chunks/chunk-Z3FA5KR6.js +316 -0
- package/dist/cli/chunks/{chunk-G6RKUEGL.js → chunk-Z63IOTDW.js} +2 -2
- package/dist/cli/chunks/{chunk-6JNNZGI2.js → chunk-ZBYMF2QJ.js} +1 -1
- package/dist/cli/chunks/{chunk-JYXSVSH2.js → chunk-ZF65VOQH.js} +2 -2
- package/dist/cli/chunks/{chunk-4SALW7OT.js → chunk-ZHWXI4SK.js} +2 -2
- package/dist/cli/chunks/{chunk-LMJUQWR7.js → chunk-ZL7ZOIHO.js} +1 -1
- package/dist/cli/chunks/{ci-RJH5LAL3.js → ci-NT4DUGQ4.js} +2 -2
- package/dist/cli/chunks/{ci-output-62SGMGB2.js → ci-output-PXBD2QPH.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-QXTS5ZAW.js → circuit-breaker-ZPCCEEDX.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-BBCCT5WV.js → claude-flow-setup-CZCDFZOE.js} +2 -2
- package/dist/cli/chunks/client-S7DIRNFJ.js +2 -0
- package/dist/cli/chunks/{cline-installer-IZCUJJ3I.js → cline-installer-6J2S7GLM.js} +2 -2
- package/dist/cli/chunks/{code-AWNVOZ7S.js → code-UTERK5AP.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-MX65BKMI.js → code-index-extractor-O3MJTOS2.js} +2 -2
- package/dist/cli/chunks/{codex-installer-EQT6JVLM.js → codex-installer-AZJIVXJR.js} +2 -2
- package/dist/cli/chunks/{completions-WOJAM45W.js → completions-A6ANQSZN.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-3DJB7V3K.js → complexity-analyzer-MRSN7VUP.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-P4KWUTCJ.js → continuedev-installer-6LMKQRUI.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-FFZWTMWQ.js → copilot-installer-KP3TWUNO.js} +2 -2
- package/dist/cli/chunks/core-handlers-NM2KCI6Z.js +2 -0
- package/dist/cli/chunks/{cost-tracker-CYBOV3NI.js → cost-tracker-R3C5IQPZ.js} +2 -2
- package/dist/cli/chunks/{coverage-GTZJBSC4.js → coverage-MR4QA2NM.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-3TSZMCBM.js +2 -0
- package/dist/cli/chunks/{cursor-installer-WZIVXGGB.js → cursor-installer-LPZ7NGOS.js} +2 -2
- package/dist/cli/chunks/{daemon-JWMHEJEN.js → daemon-K3KW2UDV.js} +4 -4
- package/dist/cli/chunks/{daemon-MSFN2LXY.js → daemon-X5KXHRY3.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-4TWOTTQE.js → dag-attention-scheduler-J4FJSGNN.js} +2 -2
- package/dist/cli/chunks/{detect-YZ6AGQPB.js → detect-22TX2NCA.js} +2 -2
- package/dist/cli/chunks/{dist-node-3EM2XH54.js → dist-node-QI4I4QPS.js} +2 -2
- package/dist/cli/chunks/{domain-handler-4XU5BINU.js → domain-handler-ZYZGPNOQ.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-HUFC7I52.js → domain-transfer-2EEQTNIU.js} +2 -2
- package/dist/cli/chunks/dream-QIIJONYI.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-J5ZFM6YX.js → embed-and-insert-pattern-LYCTU5BS.js} +2 -2
- package/dist/cli/chunks/eval-SOA72GUX.js +17 -0
- package/dist/cli/chunks/{experience-capture-middleware-E3RYQB6Z.js → experience-capture-middleware-AFFYOMYM.js} +3 -3
- package/dist/cli/chunks/{fast-paths-DKIYN2YS.js → fast-paths-WNMHOSUH.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZB63Z7N5.js → feature-flags-FT4YBZH4.js} +2 -2
- package/dist/cli/chunks/{feature-flags-S2RNZATS.js → feature-flags-HAP5IAAY.js} +2 -2
- package/dist/cli/chunks/{file-discovery-USJJLYQU.js → file-discovery-B4FFOH3Z.js} +2 -2
- package/dist/cli/chunks/{fleet-4MUPHSF5.js → fleet-2ICPYV3J.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-PYOQZKX6.js → gnn-wrapper-XIBJAHMW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-HLO5XCG7.js → heartbeat-handler-NSLSKDOI.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-CDNGLJJO.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-CR7Y4OAM.js +2 -0
- package/dist/cli/chunks/hnsw-index-TEDO4MQC.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-FZEH2KLM.js → hnsw-legacy-bridge-FTV4CCBB.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-LRDXKYOJ.js → hnswlib-node-BCASOCNU.js} +2 -2
- package/dist/cli/chunks/{hooks-R2757K57.js → hooks-SM4EU52N.js} +10 -10
- package/dist/cli/chunks/hybrid-router-O24ZDIP5.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-EAV3GJ5D.js → hypergraph-engine-RRMX4N3L.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-5ERXAVGH.js → hypergraph-handler-MNFGDKAP.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-PDM4SDB6.js +2 -0
- package/dist/cli/chunks/{init-handler-RXUSEMG7.js → init-handler-BNHIJ5TX.js} +6 -6
- package/dist/cli/chunks/init-wizard-F4KODPNW.js +2 -0
- package/dist/cli/chunks/kernel-77UM35L6.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-ZUBVBHGT.js → kilocode-installer-GFKUKPLY.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-TRTRQDGL.js → kiro-installer-YBIYKODN.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-R6ZWWV2K.js +2 -0
- package/dist/cli/chunks/{learning-UYXWAU5D.js → learning-QEWUPCK6.js} +3 -3
- package/dist/cli/chunks/{llm-router-TB5OJPEV.js → llm-router-D5FQIMVQ.js} +5 -5
- package/dist/cli/chunks/llm-router-service-7QYCZ66H.js +2 -0
- package/dist/cli/chunks/{load-ELPSUIPV.js → load-CLBUCKZQ.js} +2 -2
- package/dist/cli/chunks/load-test-AWVA3CAQ.js +2 -0
- package/dist/cli/chunks/{mcp-UX7TK3XV.js → mcp-VOMG5DPV.js} +2 -2
- package/dist/cli/chunks/{memory-W3LG6H6N.js → memory-WZO63VSC.js} +5 -5
- package/dist/cli/chunks/memory-backend-YESSIHFW.js +2 -0
- package/dist/cli/chunks/memory-handlers-EOOWSUHI.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-227LWZRY.js → multi-model-executor-7UKW43VV.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-F4WKVWDL.js → opencode-installer-MLFPRRL2.js} +2 -2
- package/dist/cli/chunks/{orchestrator-V4DBMGK6.js → orchestrator-XNYDBGIN.js} +18 -18
- package/dist/cli/chunks/pattern-null-store-X3UXLJNL.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-BY3HEWSU.js → pattern-usage-recorder-ZAP7ASQI.js} +2 -2
- package/dist/cli/chunks/{pipeline-3F5RIESX.js → pipeline-4EJYOPBC.js} +2 -2
- package/dist/cli/chunks/{platform-KCGXTZO3.js → platform-ALPOWCOH.js} +2 -2
- package/dist/cli/chunks/{plugin-2H552KOV.js → plugin-S2RX3KHR.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-EFKVL7VN.js → prime-radiant-advanced-wasm-P2JB73XX.js} +2 -2
- package/dist/cli/chunks/protocol-executor-KXDCTMWI.js +2 -0
- package/dist/cli/chunks/{protocol-handler-ELGYV7D2.js → protocol-handler-ZBJXSESA.js} +2 -2
- package/dist/cli/chunks/{prove-AYJCQYNI.js → prove-MYJ5YV45.js} +2 -2
- package/dist/cli/chunks/provider-manager-XJZVHYI6.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-DPHPNIC6.js +2 -0
- package/dist/cli/chunks/{quality-HH7L5A7V.js → quality-NIACQC4M.js} +2 -2
- package/dist/cli/chunks/{quality-gate-NAQLXE4C.js → quality-gate-OAZ23ON5.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-EVGWME5C.js +2 -0
- package/dist/cli/chunks/{real-embeddings-IO3F4ZFR.js → real-embeddings-6I4LP7PL.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-X4TU5HO4.js → roocode-installer-LRQHP6MK.js} +2 -2
- package/dist/cli/chunks/router-R2N7TMAS.js +2 -0
- package/dist/cli/chunks/routing-feedback-G6W3H26L.js +2 -0
- package/dist/cli/chunks/{routing-handler-ZJKGDDMT.js → routing-handler-A7BW7MV4.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-NXCSUBN2.js → ruvector-commands-ZDRRFSJS.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-JMA74SKP.js → rvf-dual-writer-QWE3Z6BB.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-BNTGH2KU.js → rvf-migration-adapter-6UDAP7QB.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-7T2HHUOH.js → rvf-migration-coordinator-FEW2N4R4.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-D7R2GWXK.js +2 -0
- package/dist/cli/chunks/safe-db-CQZGF2KA.js +2 -0
- package/dist/cli/chunks/schedule-UP7E3LRC.js +2 -0
- package/dist/cli/chunks/scheduler-ENIZHYSL.js +2 -0
- package/dist/cli/chunks/{security-XSK2QHB3.js → security-KFXBV65O.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-WLRKI7RY.js → shared-rvf-adapter-HDDCXCHY.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-SZW3J7ZK.js → shared-rvf-dual-writer-CXXTB7CU.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-CEVJVWS5.js +2 -0
- package/dist/cli/chunks/status-handler-CXSVM236.js +47 -0
- package/dist/cli/chunks/{structural-health-4SJCFX63.js → structural-health-LMHSM7MJ.js} +2 -2
- package/dist/cli/chunks/{sync-7WAVNZGL.js → sync-DMOUY2EY.js} +2 -2
- package/dist/cli/chunks/{sync-ATR4DUSA.js → sync-REEFKICL.js} +2 -2
- package/dist/cli/chunks/{task-handler-O6REL34Y.js → task-handler-DMSNFIH3.js} +2 -2
- package/dist/cli/chunks/{task-handlers-WFV2ZYWW.js → task-handlers-3Z3QV7X7.js} +3 -3
- package/dist/cli/chunks/{test-4LXUVHEU.js → test-U6CGMDLN.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-OTN3DMKY.js → test-scheduling-YHYA3BP5.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-VA7T4P42.js → token-bootstrap-MQCTJURQ.js} +2 -2
- package/dist/cli/chunks/{token-usage-TLT6OXXR.js → token-usage-EOOTM7Q3.js} +2 -2
- package/dist/cli/chunks/{transformers-JI7LZRQ3.js → transformers-EKDJW2H6.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-QNIMHB4K.js → tree-sitter-wasm-parser-HTGAXDQA.js} +2 -2
- package/dist/cli/chunks/{types-DJNWOAC6.js → types-GLRXY4RY.js} +2 -2
- package/dist/cli/chunks/unified-memory-PXOQ4N53.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-VEXD6ASE.js +2 -0
- package/dist/cli/chunks/unified-persistence-46G6MZYC.js +2 -0
- package/dist/cli/chunks/{upgrade-VEW4FL23.js → upgrade-KU55H77X.js} +2 -2
- package/dist/cli/chunks/{validate-O3P6PF7B.js → validate-26VSBOJN.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-M2HXHZVC.js → validate-swarm-OIALRDKF.js} +2 -2
- package/dist/cli/chunks/{vibium-GOU55LUO.js → vibium-LOTWW25P.js} +2 -2
- package/dist/cli/chunks/visual-security-4X3T3MFL.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-MXOI4GH3.js → web-tree-sitter-6LWPPBYU.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-6GKT53IH.js → windsurf-installer-ILOQYENG.js} +2 -2
- package/dist/cli/chunks/witness-chain-XW4S3LVW.js +2 -0
- package/dist/cli/chunks/{witness-chain-OXGQGL26.js → witness-chain-YBS6OHS4.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-PGFSQXUJ.js → witness-key-manager-SI3WV3ZQ.js} +2 -2
- package/dist/cli/chunks/{workflow-ENBWRMBA.js → workflow-GY6SJRQW.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-IIVV6TCP.js +2 -0
- package/dist/cli/chunks/{wrappers-MHLNYANQ.js → wrappers-MMO5YKOZ.js} +2 -2
- package/dist/cli/commands/eval.js +73 -3
- package/dist/cli/commands/llm-router.js +2 -0
- package/dist/cli/handlers/status-handler.d.ts +5 -0
- package/dist/cli/handlers/status-handler.js +35 -0
- package/dist/coordination/consensus/providers/index.js +11 -0
- package/dist/init/init-wizard-hooks.js +11 -25
- package/dist/init/phases/07-hooks.js +15 -25
- package/dist/init/settings-merge.d.ts +44 -0
- package/dist/init/settings-merge.js +119 -4
- package/dist/mcp/bundle.js +412 -393
- package/dist/shared/llm/billing-modes.d.ts +24 -0
- package/dist/shared/llm/billing-modes.js +56 -0
- package/dist/shared/llm/cost-tracker.js +2 -0
- package/dist/shared/llm/interfaces.d.ts +61 -3
- package/dist/shared/llm/provider-manager.d.ts +34 -0
- package/dist/shared/llm/provider-manager.js +152 -3
- package/dist/shared/llm/providers/claude-code.d.ts +57 -0
- package/dist/shared/llm/providers/claude-code.js +312 -0
- package/dist/shared/llm/providers/cognitum.d.ts +64 -0
- package/dist/shared/llm/providers/cognitum.js +369 -0
- package/dist/shared/llm/providers/index.d.ts +2 -0
- package/dist/shared/llm/providers/index.js +2 -0
- package/dist/shared/llm/router/config-store.d.ts +31 -11
- package/dist/shared/llm/router/config-store.js +82 -12
- package/dist/shared/llm/router/hybrid-router.js +16 -0
- package/dist/shared/llm/router/types.js +7 -0
- package/dist/shared/llm/spend-ledger.d.ts +64 -0
- package/dist/shared/llm/spend-ledger.js +115 -0
- package/dist/shared/llm/translation/message-formatter.js +2 -0
- package/dist/shared/llm/translation/prompt-translator.js +2 -0
- package/dist/shared/llm/translation/tool-translator.js +2 -0
- package/dist/validation/index.d.ts +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/provider-llm-executor.d.ts +45 -0
- package/dist/validation/provider-llm-executor.js +98 -0
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-6IWRIHF3.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-FSF5U67K.js +0 -2
- package/dist/cli/chunks/base-2CKCJU3O.js +0 -2
- package/dist/cli/chunks/browser-workflow-UGYJE64S.js +0 -2
- package/dist/cli/chunks/chunk-2AOOIAW3.js +0 -316
- package/dist/cli/chunks/chunk-3B4XXFKD.js +0 -18
- package/dist/cli/chunks/chunk-BBC526PL.js +0 -24
- package/dist/cli/chunks/chunk-ESDGCTC4.js +0 -2
- package/dist/cli/chunks/chunk-IDLNLSQI.js +0 -3
- package/dist/cli/chunks/chunk-MDT3LIXS.js +0 -2
- package/dist/cli/chunks/client-E2XUBCLK.js +0 -2
- package/dist/cli/chunks/core-handlers-46Z5VOO6.js +0 -2
- package/dist/cli/chunks/cross-domain-router-SXQ3HFRY.js +0 -2
- package/dist/cli/chunks/dream-R6MQQQ3N.js +0 -2
- package/dist/cli/chunks/eval-XYOA3EH2.js +0 -15
- package/dist/cli/chunks/heartbeat-scheduler-OSDPJT6A.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-KMGSHBIN.js +0 -2
- package/dist/cli/chunks/hnsw-index-IMFRAOPE.js +0 -2
- package/dist/cli/chunks/hybrid-router-57QSWSWC.js +0 -2
- package/dist/cli/chunks/impact-analyzer-OC4MPBGA.js +0 -2
- package/dist/cli/chunks/init-wizard-CDBRL4PO.js +0 -2
- package/dist/cli/chunks/kernel-CQ7R3AAV.js +0 -2
- package/dist/cli/chunks/knowledge-graph-UXNH7RY4.js +0 -2
- package/dist/cli/chunks/llm-router-service-UV34YXBE.js +0 -2
- package/dist/cli/chunks/load-test-2VEN3PQZ.js +0 -2
- package/dist/cli/chunks/memory-backend-TZL5U6F3.js +0 -2
- package/dist/cli/chunks/memory-handlers-BNXAYS2P.js +0 -2
- package/dist/cli/chunks/pattern-null-store-KLX2RNHM.js +0 -2
- package/dist/cli/chunks/protocol-executor-5HJKW6MC.js +0 -2
- package/dist/cli/chunks/provider-manager-TRZSBXD3.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-RCEYSLVV.js +0 -2
- package/dist/cli/chunks/queen-coordinator-6JFZD54W.js +0 -2
- package/dist/cli/chunks/router-KRLC46NS.js +0 -2
- package/dist/cli/chunks/routing-feedback-WW26H6SA.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-OVQKPQUH.js +0 -2
- package/dist/cli/chunks/safe-db-UQOCQIH2.js +0 -2
- package/dist/cli/chunks/schedule-EUX7ZQUK.js +0 -2
- package/dist/cli/chunks/scheduler-MALHQKNR.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-OBCLRP4L.js +0 -2
- package/dist/cli/chunks/status-handler-HGCKYJX2.js +0 -46
- package/dist/cli/chunks/unified-memory-A5BS3LGX.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-WJLJO5MY.js +0 -2
- package/dist/cli/chunks/unified-persistence-CFC2BKI5.js +0 -2
- package/dist/cli/chunks/visual-security-VPB6KVYJ.js +0 -2
- package/dist/cli/chunks/witness-chain-ZZAUAXDY.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-S4LBFTYD.js +0 -2
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 — Claude Code (subscription) Provider (ADR-123, issue #557)
|
|
3
|
+
*
|
|
4
|
+
* Runs QE analysis on the user's Claude Pro/Max subscription by shelling out
|
|
5
|
+
* to the Claude Code CLI (`claude -p --output-format json`) instead of calling
|
|
6
|
+
* `api.anthropic.com` with a paid API key. The CLI authenticates with the
|
|
7
|
+
* user's existing OAuth login and draws from the subscription's shared usage
|
|
8
|
+
* allowance, so the worst case is "hit the plan rate limit and pause" rather
|
|
9
|
+
* than a surprise per-token bill.
|
|
10
|
+
*
|
|
11
|
+
* LOAD-BEARING: the child process env has ANTHROPIC_API_KEY / CLAUDE_API_KEY /
|
|
12
|
+
* ANTHROPIC_AUTH_TOKEN stripped. If any is present, the CLI silently reverts
|
|
13
|
+
* to API-key billing and this provider would be a lie. `parity` test coverage
|
|
14
|
+
* asserts the strip.
|
|
15
|
+
*/
|
|
16
|
+
import { spawn } from 'node:child_process';
|
|
17
|
+
import { createLLMError, } from '../interfaces';
|
|
18
|
+
import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
|
|
19
|
+
/** Env vars whose presence flips the CLI from subscription to API billing. */
|
|
20
|
+
export const API_BILLING_ENV_VARS = [
|
|
21
|
+
'ANTHROPIC_API_KEY',
|
|
22
|
+
'CLAUDE_API_KEY',
|
|
23
|
+
'ANTHROPIC_AUTH_TOKEN',
|
|
24
|
+
];
|
|
25
|
+
export const DEFAULT_CLAUDE_CODE_CONFIG = {
|
|
26
|
+
model: 'sonnet',
|
|
27
|
+
maxTokens: 4096,
|
|
28
|
+
temperature: 0.7,
|
|
29
|
+
timeoutMs: 120000,
|
|
30
|
+
maxRetries: 1,
|
|
31
|
+
binaryPath: 'claude',
|
|
32
|
+
maxConcurrency: 2,
|
|
33
|
+
disallowedTools: ['Bash', 'Edit', 'Write', 'NotebookEdit', 'WebFetch', 'WebSearch', 'Task'],
|
|
34
|
+
};
|
|
35
|
+
export class ClaudeCodeProvider {
|
|
36
|
+
type = 'claude-code';
|
|
37
|
+
name = 'Claude Code (subscription)';
|
|
38
|
+
billingMode = 'subscription';
|
|
39
|
+
config;
|
|
40
|
+
requestId = 0;
|
|
41
|
+
availabilityCache;
|
|
42
|
+
active = 0;
|
|
43
|
+
queue = [];
|
|
44
|
+
constructor(config = {}) {
|
|
45
|
+
this.config = { ...DEFAULT_CLAUDE_CODE_CONFIG, ...config };
|
|
46
|
+
const envConc = Number.parseInt(process.env.AQE_CLAUDE_CODE_CONCURRENCY ?? '', 10);
|
|
47
|
+
if (Number.isFinite(envConc) && envConc > 0) {
|
|
48
|
+
this.config.maxConcurrency = envConc;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async isAvailable() {
|
|
52
|
+
// Cache for 60s — spawning `claude --version` per call is wasteful.
|
|
53
|
+
const now = Date.now();
|
|
54
|
+
if (this.availabilityCache && now - this.availabilityCache.at < 60_000) {
|
|
55
|
+
return this.availabilityCache.available;
|
|
56
|
+
}
|
|
57
|
+
let available = false;
|
|
58
|
+
try {
|
|
59
|
+
const { code } = await this.runProcess(['--version'], undefined, 5000);
|
|
60
|
+
available = code === 0;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
available = false;
|
|
64
|
+
}
|
|
65
|
+
this.availabilityCache = { at: now, available };
|
|
66
|
+
return available;
|
|
67
|
+
}
|
|
68
|
+
async healthCheck() {
|
|
69
|
+
const start = Date.now();
|
|
70
|
+
const available = await this.isAvailable();
|
|
71
|
+
const latencyMs = Date.now() - start;
|
|
72
|
+
if (!available) {
|
|
73
|
+
return {
|
|
74
|
+
healthy: false,
|
|
75
|
+
latencyMs,
|
|
76
|
+
error: `Claude Code CLI ("${this.config.binaryPath}") not found or not runnable. ` +
|
|
77
|
+
`Install Claude Code and log in with your Pro/Max account.`,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
healthy: true,
|
|
82
|
+
latencyMs,
|
|
83
|
+
models: this.getSupportedModels(),
|
|
84
|
+
details: { binaryPath: this.config.binaryPath, billing: 'subscription' },
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async generate(input, options) {
|
|
88
|
+
const model = this.toCliModel(options?.model ?? this.config.model);
|
|
89
|
+
const requestId = `claude-code-${++this.requestId}-${Date.now()}`;
|
|
90
|
+
const { prompt, systemPrompt } = this.flatten(input, options?.systemPrompt);
|
|
91
|
+
const args = ['-p', '--output-format', 'json', '--model', model];
|
|
92
|
+
if (systemPrompt) {
|
|
93
|
+
args.push('--append-system-prompt', systemPrompt);
|
|
94
|
+
}
|
|
95
|
+
const disallowed = this.config.disallowedTools ?? [];
|
|
96
|
+
if (disallowed.length > 0) {
|
|
97
|
+
args.push('--disallowedTools', ...disallowed);
|
|
98
|
+
}
|
|
99
|
+
const start = Date.now();
|
|
100
|
+
const timeoutMs = options?.timeoutMs ?? this.config.timeoutMs ?? 120000;
|
|
101
|
+
const { code, stdout, stderr } = await this.withConcurrency(() => this.runProcess(args, prompt, timeoutMs));
|
|
102
|
+
const latencyMs = Date.now() - start;
|
|
103
|
+
if (code !== 0 && !stdout.trim()) {
|
|
104
|
+
throw this.classifyError(stderr || `claude exited with code ${code}`, model);
|
|
105
|
+
}
|
|
106
|
+
let data;
|
|
107
|
+
try {
|
|
108
|
+
data = JSON.parse(stdout);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
throw createLLMError(`Could not parse claude -p JSON output: ${stdout.slice(0, 200)}`, 'PROVIDER_UNAVAILABLE', { provider: 'claude-code', model, retryable: true });
|
|
112
|
+
}
|
|
113
|
+
if (data.is_error) {
|
|
114
|
+
throw this.classifyError(data.result ?? data.api_error_status ?? 'claude error', model);
|
|
115
|
+
}
|
|
116
|
+
const u = data.usage ?? {};
|
|
117
|
+
const usage = {
|
|
118
|
+
promptTokens: u.input_tokens ?? 0,
|
|
119
|
+
completionTokens: u.output_tokens ?? 0,
|
|
120
|
+
totalTokens: (u.input_tokens ?? 0) + (u.output_tokens ?? 0),
|
|
121
|
+
cacheCreationTokens: u.cache_creation_input_tokens ?? 0,
|
|
122
|
+
cacheReadTokens: u.cache_read_input_tokens ?? 0,
|
|
123
|
+
};
|
|
124
|
+
// The concrete model that actually served the request (modelUsage key).
|
|
125
|
+
const resolvedModel = (data.modelUsage && Object.keys(data.modelUsage)[0]) || model;
|
|
126
|
+
TokenMetricsCollector.recordTokenUsage(requestId, 'claude-code-provider', 'llm', 'generate', {
|
|
127
|
+
inputTokens: usage.promptTokens,
|
|
128
|
+
outputTokens: usage.completionTokens,
|
|
129
|
+
totalTokens: usage.totalTokens,
|
|
130
|
+
// Subscription: no marginal API charge. total_cost_usd is the
|
|
131
|
+
// API-equivalent figure, recorded for visibility only, not billed.
|
|
132
|
+
estimatedCostUsd: 0,
|
|
133
|
+
});
|
|
134
|
+
return {
|
|
135
|
+
content: data.result ?? '',
|
|
136
|
+
model: resolvedModel,
|
|
137
|
+
provider: 'claude-code',
|
|
138
|
+
usage,
|
|
139
|
+
// Subscription billing: marginal monetary cost is $0. The figure is
|
|
140
|
+
// authoritative (we know the subscription doesn't bill per token), so
|
|
141
|
+
// it's a provider receipt, not a local estimate.
|
|
142
|
+
cost: { inputCost: 0, outputCost: 0, totalCost: 0, currency: 'USD', source: 'provider-receipt' },
|
|
143
|
+
latencyMs,
|
|
144
|
+
finishReason: this.mapFinishReason(data.stop_reason),
|
|
145
|
+
cached: false,
|
|
146
|
+
requestId,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
async embed(_text, _options) {
|
|
150
|
+
throw createLLMError('Claude Code provider does not support embeddings. Use openai, ollama, or cognitum.', 'MODEL_NOT_FOUND', { provider: 'claude-code', retryable: false });
|
|
151
|
+
}
|
|
152
|
+
async complete(prompt, options) {
|
|
153
|
+
const response = await this.generate(prompt, {
|
|
154
|
+
model: options?.model,
|
|
155
|
+
temperature: options?.temperature ?? 0.2,
|
|
156
|
+
maxTokens: options?.maxTokens ?? 256,
|
|
157
|
+
});
|
|
158
|
+
return {
|
|
159
|
+
completion: response.content,
|
|
160
|
+
model: response.model,
|
|
161
|
+
provider: 'claude-code',
|
|
162
|
+
usage: response.usage,
|
|
163
|
+
latencyMs: response.latencyMs,
|
|
164
|
+
cached: response.cached,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
getConfig() {
|
|
168
|
+
return { ...this.config };
|
|
169
|
+
}
|
|
170
|
+
getSupportedModels() {
|
|
171
|
+
return ['opus', 'sonnet', 'haiku'];
|
|
172
|
+
}
|
|
173
|
+
getCostPerToken() {
|
|
174
|
+
// Subscription — no per-token monetary cost.
|
|
175
|
+
return { input: 0, output: 0 };
|
|
176
|
+
}
|
|
177
|
+
async dispose() {
|
|
178
|
+
// No persistent resources.
|
|
179
|
+
}
|
|
180
|
+
// -- internals -------------------------------------------------------------
|
|
181
|
+
/** Map an AQE canonical/model id to a CLI alias the `claude` binary accepts. */
|
|
182
|
+
toCliModel(model) {
|
|
183
|
+
const m = model.toLowerCase();
|
|
184
|
+
if (m.includes('opus'))
|
|
185
|
+
return 'opus';
|
|
186
|
+
if (m.includes('haiku'))
|
|
187
|
+
return 'haiku';
|
|
188
|
+
if (m.includes('sonnet'))
|
|
189
|
+
return 'sonnet';
|
|
190
|
+
return model;
|
|
191
|
+
}
|
|
192
|
+
flatten(input, systemPromptOpt) {
|
|
193
|
+
if (typeof input === 'string') {
|
|
194
|
+
return { prompt: input, systemPrompt: systemPromptOpt };
|
|
195
|
+
}
|
|
196
|
+
const systemParts = input.filter((m) => m.role === 'system').map((m) => m.content);
|
|
197
|
+
if (systemPromptOpt)
|
|
198
|
+
systemParts.unshift(systemPromptOpt);
|
|
199
|
+
const convo = input
|
|
200
|
+
.filter((m) => m.role !== 'system')
|
|
201
|
+
.map((m) => `${m.role === 'assistant' ? 'Assistant' : 'User'}: ${m.content}`)
|
|
202
|
+
.join('\n\n');
|
|
203
|
+
return {
|
|
204
|
+
prompt: convo,
|
|
205
|
+
systemPrompt: systemParts.length > 0 ? systemParts.join('\n\n') : undefined,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
mapFinishReason(reason) {
|
|
209
|
+
switch (reason) {
|
|
210
|
+
case 'max_tokens':
|
|
211
|
+
return 'length';
|
|
212
|
+
case 'end_turn':
|
|
213
|
+
case 'stop_sequence':
|
|
214
|
+
default:
|
|
215
|
+
return 'stop';
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
classifyError(message, model) {
|
|
219
|
+
const lower = message.toLowerCase();
|
|
220
|
+
if (lower.includes('rate limit') ||
|
|
221
|
+
lower.includes('usage limit') ||
|
|
222
|
+
lower.includes('429') ||
|
|
223
|
+
lower.includes('quota')) {
|
|
224
|
+
// The *desired* failure mode: plan limit reached → pause and retry later.
|
|
225
|
+
return createLLMError(message, 'RATE_LIMITED', {
|
|
226
|
+
provider: 'claude-code',
|
|
227
|
+
model,
|
|
228
|
+
retryable: true,
|
|
229
|
+
retryAfterMs: 60_000,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
return createLLMError(message, 'PROVIDER_UNAVAILABLE', {
|
|
233
|
+
provider: 'claude-code',
|
|
234
|
+
model,
|
|
235
|
+
retryable: true,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Build the child env with API-billing keys stripped (LOAD-BEARING).
|
|
240
|
+
* Exported logic tested by parity/env-strip tests.
|
|
241
|
+
*/
|
|
242
|
+
static childEnv(base = process.env) {
|
|
243
|
+
const env = { ...base };
|
|
244
|
+
for (const key of API_BILLING_ENV_VARS) {
|
|
245
|
+
delete env[key];
|
|
246
|
+
}
|
|
247
|
+
return env;
|
|
248
|
+
}
|
|
249
|
+
runProcess(args, stdin, timeoutMs) {
|
|
250
|
+
return new Promise((resolve, reject) => {
|
|
251
|
+
const child = spawn(this.config.binaryPath ?? 'claude', args, {
|
|
252
|
+
env: ClaudeCodeProvider.childEnv(),
|
|
253
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
254
|
+
});
|
|
255
|
+
let stdout = '';
|
|
256
|
+
let stderr = '';
|
|
257
|
+
let settled = false;
|
|
258
|
+
const timer = setTimeout(() => {
|
|
259
|
+
if (settled)
|
|
260
|
+
return;
|
|
261
|
+
settled = true;
|
|
262
|
+
child.kill('SIGKILL');
|
|
263
|
+
reject(createLLMError('claude -p timed out', 'TIMEOUT', {
|
|
264
|
+
provider: 'claude-code',
|
|
265
|
+
retryable: true,
|
|
266
|
+
}));
|
|
267
|
+
}, timeoutMs);
|
|
268
|
+
child.stdout.on('data', (d) => (stdout += d.toString()));
|
|
269
|
+
child.stderr.on('data', (d) => (stderr += d.toString()));
|
|
270
|
+
child.on('error', (err) => {
|
|
271
|
+
if (settled)
|
|
272
|
+
return;
|
|
273
|
+
settled = true;
|
|
274
|
+
clearTimeout(timer);
|
|
275
|
+
reject(createLLMError(`Failed to spawn claude: ${err.message}`, 'PROVIDER_UNAVAILABLE', {
|
|
276
|
+
provider: 'claude-code',
|
|
277
|
+
retryable: false,
|
|
278
|
+
cause: err,
|
|
279
|
+
}));
|
|
280
|
+
});
|
|
281
|
+
child.on('close', (code) => {
|
|
282
|
+
if (settled)
|
|
283
|
+
return;
|
|
284
|
+
settled = true;
|
|
285
|
+
clearTimeout(timer);
|
|
286
|
+
resolve({ code: code ?? 0, stdout, stderr });
|
|
287
|
+
});
|
|
288
|
+
if (stdin !== undefined) {
|
|
289
|
+
child.stdin.write(stdin);
|
|
290
|
+
}
|
|
291
|
+
child.stdin.end();
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
/** Simple semaphore so we don't spawn unbounded `claude` subprocesses. */
|
|
295
|
+
async withConcurrency(fn) {
|
|
296
|
+
const limit = this.config.maxConcurrency ?? 2;
|
|
297
|
+
if (this.active >= limit) {
|
|
298
|
+
await new Promise((resolve) => this.queue.push(resolve));
|
|
299
|
+
}
|
|
300
|
+
this.active++;
|
|
301
|
+
try {
|
|
302
|
+
return await fn();
|
|
303
|
+
}
|
|
304
|
+
finally {
|
|
305
|
+
this.active--;
|
|
306
|
+
const next = this.queue.shift();
|
|
307
|
+
if (next)
|
|
308
|
+
next();
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 — Cognitum Provider (ADR-123)
|
|
3
|
+
*
|
|
4
|
+
* api.cognitum.one is an OpenAI-compatible (and Anthropic-compatible) LLM
|
|
5
|
+
* gateway with two properties that matter for issue #557:
|
|
6
|
+
* 1. Every response carries an `x_cognitum` receipt with an authoritative
|
|
7
|
+
* per-request `price_usd` — so cost is a provider receipt, not a local
|
|
8
|
+
* price-table estimate.
|
|
9
|
+
* 2. It enforces a server-side hard spend cap (`/v1/usage` → `hardCapUsd`),
|
|
10
|
+
* so the worst case is "provider pauses at the cap", not a surprise bill.
|
|
11
|
+
*
|
|
12
|
+
* Models are tiers (`cognitum-auto|low|mid|high`); the gateway resolves each
|
|
13
|
+
* to a concrete model and reports it back in the receipt (`resolved_model`).
|
|
14
|
+
*/
|
|
15
|
+
import { LLMProvider, LLMProviderType, BillingMode, CognitumConfig, Message, GenerateOptions, EmbedOptions, CompleteOptions, LLMResponse, EmbeddingResponse, CompletionResponse, HealthCheckResult } from '../interfaces';
|
|
16
|
+
export type { CognitumConfig };
|
|
17
|
+
export declare const DEFAULT_COGNITUM_CONFIG: CognitumConfig;
|
|
18
|
+
/** Server-side budget snapshot from GET /v1/usage. */
|
|
19
|
+
export interface CognitumBudget {
|
|
20
|
+
servingBudgetUsd: number;
|
|
21
|
+
hardCapUsd: number;
|
|
22
|
+
committedUsd: number;
|
|
23
|
+
headroomUsd: number;
|
|
24
|
+
status: string;
|
|
25
|
+
headroomExhausted: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare class CognitumProvider implements LLMProvider {
|
|
28
|
+
readonly type: LLMProviderType;
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly billingMode: BillingMode;
|
|
31
|
+
private config;
|
|
32
|
+
private requestId;
|
|
33
|
+
constructor(config?: Partial<CognitumConfig>);
|
|
34
|
+
isAvailable(): Promise<boolean>;
|
|
35
|
+
healthCheck(): Promise<HealthCheckResult>;
|
|
36
|
+
generate(input: string | Message[], options?: GenerateOptions): Promise<LLMResponse>;
|
|
37
|
+
embed(text: string, options?: EmbedOptions): Promise<EmbeddingResponse>;
|
|
38
|
+
complete(prompt: string, options?: CompleteOptions): Promise<CompletionResponse>;
|
|
39
|
+
getConfig(): CognitumConfig;
|
|
40
|
+
getSupportedModels(): string[];
|
|
41
|
+
getCostPerToken(): {
|
|
42
|
+
input: number;
|
|
43
|
+
output: number;
|
|
44
|
+
};
|
|
45
|
+
dispose(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* ADR-123: read the provider's server-side budget so `aqe health` and the
|
|
48
|
+
* billing notice can show real remaining headroom. Returns undefined on any
|
|
49
|
+
* failure (best-effort — never throws).
|
|
50
|
+
*/
|
|
51
|
+
getRemoteBudget(): Promise<CognitumBudget | undefined>;
|
|
52
|
+
/** Build a CostInfo from the authoritative receipt price. */
|
|
53
|
+
private receiptCost;
|
|
54
|
+
private getApiKey;
|
|
55
|
+
private getBaseUrl;
|
|
56
|
+
private getHeaders;
|
|
57
|
+
private formatMessages;
|
|
58
|
+
private mapFinishReason;
|
|
59
|
+
private toApiError;
|
|
60
|
+
private fetchWithTimeout;
|
|
61
|
+
private fetchWithRetry;
|
|
62
|
+
private sleep;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=cognitum.d.ts.map
|