@cc-monitoring/proxy-core 0.3.0 → 0.4.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/dist/cli/__tests__/commands.test.js +1 -1
- package/dist/cli/commands/exec.js +31 -42
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.Dc46Hlqp.js → app.DtYNT5zS.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.C4sjikMO.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.Snq5jR6J.js → VPLocalSearchBox.DpXF9ZAI.js} +1 -1
- package/dist/docs/assets/chunks/{theme.XLtxGM-l.js → theme.TS_gUyc7.js} +2 -2
- package/dist/docs/assets/{proxy-cli_data-hooks.md.w9Oe1OD3.js → proxy-cli_data-hooks.md.Bz8CVbxO.js} +1 -1
- package/dist/docs/assets/{proxy-core_ui-routes.md.Dyqkeoiv.js → proxy-core_ui-routes.md.B21t1p7R.js} +1 -1
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/index.html +3 -3
- package/dist/docs/overview.html +3 -3
- package/dist/docs/packages-utils.html +3 -3
- package/dist/docs/proxy-admin/env-and-build.html +3 -3
- package/dist/docs/proxy-admin/index.html +3 -3
- package/dist/docs/proxy-admin/layout-and-menu.html +3 -3
- package/dist/docs/proxy-admin/pages.html +3 -3
- package/dist/docs/proxy-admin/routing-and-auth.html +3 -3
- package/dist/docs/proxy-admin/services-and-mock.html +3 -3
- package/dist/docs/proxy-cli/api-layer.html +3 -3
- package/dist/docs/proxy-cli/app-shell.html +3 -3
- package/dist/docs/proxy-cli/components-common.html +3 -3
- package/dist/docs/proxy-cli/components-config.html +3 -3
- package/dist/docs/proxy-cli/components-requests.html +3 -3
- package/dist/docs/proxy-cli/components-stats.html +3 -3
- package/dist/docs/proxy-cli/components-status.html +3 -3
- package/dist/docs/proxy-cli/data-hooks.html +5 -5
- package/dist/docs/proxy-cli/index.html +3 -3
- package/dist/docs/proxy-cli/utils-and-i18n.html +3 -3
- package/dist/docs/proxy-core/chat-api.html +3 -3
- package/dist/docs/proxy-core/cli.html +3 -3
- package/dist/docs/proxy-core/config.html +3 -3
- package/dist/docs/proxy-core/data-layer.html +3 -3
- package/dist/docs/proxy-core/entry.html +3 -3
- package/dist/docs/proxy-core/index.html +3 -3
- package/dist/docs/proxy-core/pm2.html +3 -3
- package/dist/docs/proxy-core/providers.html +3 -3
- package/dist/docs/proxy-core/proxy.html +3 -3
- package/dist/docs/proxy-core/stats.html +3 -3
- package/dist/docs/proxy-core/tool.html +3 -3
- package/dist/docs/proxy-core/ui-routes.html +5 -5
- package/dist/docs/proxy-core/utilities.html +3 -3
- package/dist/docs/quickstart.html +3 -3
- package/dist/docs/request-flow.html +3 -3
- package/dist/logger/index.d.ts +0 -3
- package/dist/logger/index.js +0 -1
- package/dist/mcp-server/index.js +5 -3
- package/dist/mcp-server/tools.js +31 -10
- package/dist/server/__tests__/providers-route.test.js +1 -0
- package/dist/server/auth.d.ts +0 -1
- package/dist/server/auth.js +1 -1
- package/dist/server/chat-route.js +48 -156
- package/dist/server/data-push.d.ts +0 -1
- package/dist/server/data-push.js +0 -7
- package/dist/server/proxy.js +128 -219
- package/dist/server/ui-route.js +76 -59
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry.d.ts +0 -4
- package/dist/tools/registry.js +0 -8
- package/dist/types/config.d.ts +0 -13
- package/dist/types/pm2.d.ts +1 -2
- package/dist/ui/assets/{1c-Bx3CHH-I.js → 1c-CCx-FOtz.js} +1 -1
- package/dist/ui/assets/{abnf-NN4-iXDM.js → abnf-Bwbi42Z8.js} +1 -1
- package/dist/ui/assets/{abnfDiagram-VRR7QNED-CXFZgDk7.js → abnfDiagram-VRR7QNED-Dm1-8q0E.js} +1 -1
- package/dist/ui/assets/{accesslog-Bq9x4vSZ.js → accesslog-DCytz_-m.js} +1 -1
- package/dist/ui/assets/{actionscript-CeaB6gjT.js → actionscript-3udf15oh.js} +1 -1
- package/dist/ui/assets/{ada-DObFDSC6.js → ada-M5Xa74xG.js} +1 -1
- package/dist/ui/assets/{angelscript-4pIbuWPH.js → angelscript-qlrFxfW-.js} +1 -1
- package/dist/ui/assets/{apache-w0LzP4me.js → apache-B-sF-DQH.js} +1 -1
- package/dist/ui/assets/{applescript-DXpD6Cc9.js → applescript-4FdcBnbI.js} +1 -1
- package/dist/ui/assets/{arc-Dtt1H4m8.js → arc-BB3K1enp.js} +1 -1
- package/dist/ui/assets/{arcade-D_zU9Djr.js → arcade-B_yqWaaG.js} +1 -1
- package/dist/ui/assets/{architectureDiagram-ZJ3FMSHR-C0E_eQDM.js → architectureDiagram-ZJ3FMSHR-B39vkY8V.js} +1 -1
- package/dist/ui/assets/{arduino-BnmN_xp_.js → arduino-yAcBoTWU.js} +1 -1
- package/dist/ui/assets/{armasm-CH_xJaHf.js → armasm-wIcY84bI.js} +1 -1
- package/dist/ui/assets/{asciidoc-BlvZZ-hO.js → asciidoc-Bxnu28-Z.js} +1 -1
- package/dist/ui/assets/{aspectj-DP5DdFKQ.js → aspectj-B2cKJA_O.js} +1 -1
- package/dist/ui/assets/{autohotkey-Cy7dy_B1.js → autohotkey-B_rMWTtE.js} +1 -1
- package/dist/ui/assets/{autoit-BmQwjQdM.js → autoit-DwcuvMwv.js} +1 -1
- package/dist/ui/assets/{avrasm-fcPy4w1X.js → avrasm-heGX1PXK.js} +1 -1
- package/dist/ui/assets/{awk-AlcwGSdk.js → awk-BiqCQAEf.js} +1 -1
- package/dist/ui/assets/{axapta-NyMN6Mvz.js → axapta-Cv8M-Ih6.js} +1 -1
- package/dist/ui/assets/{bash-Bn3yyTUs.js → bash-Divgn3JV.js} +1 -1
- package/dist/ui/assets/{basic-gp9eOjjv.js → basic-B9dnAP55.js} +1 -1
- package/dist/ui/assets/{blockDiagram-677ZJIJ3-BHAadGGo.js → blockDiagram-677ZJIJ3-DQ1mf7A_.js} +1 -1
- package/dist/ui/assets/{bnf-DRAiK-_J.js → bnf-kIL5mSsP.js} +1 -1
- package/dist/ui/assets/{brainfuck-IYgPavhh.js → brainfuck-DqB7xDjH.js} +1 -1
- package/dist/ui/assets/{coq-BYVsAo31.js → c-HmsCM6sx.js} +1 -1
- package/dist/ui/assets/{c-like-B7T39dtK.js → c-like-De5MhE7G.js} +1 -1
- package/dist/ui/assets/{c4Diagram-LMCZKHZV-4cXT8R9f.js → c4Diagram-LMCZKHZV-DQxtYsAx.js} +1 -1
- package/dist/ui/assets/{cal-DmXm_WLX.js → cal-mYdfz9en.js} +1 -1
- package/dist/ui/assets/{capnproto-Cb-rKd-Z.js → capnproto-D04CRlOt.js} +1 -1
- package/dist/ui/assets/{ceylon-Bn2aNwEq.js → ceylon-pi9lFCja.js} +1 -1
- package/dist/ui/assets/channel-ChTtxQDg.js +1 -0
- package/dist/ui/assets/{chunk-2Q5K7J3B-B3N_AddF.js → chunk-2Q5K7J3B-BDD1nPt8.js} +1 -1
- package/dist/ui/assets/{chunk-32BRIVSS-CW7iU3gE.js → chunk-32BRIVSS-DgeQFBb5.js} +1 -1
- package/dist/ui/assets/{chunk-5VM5RSS4-M8Ep3dJD.js → chunk-5VM5RSS4-C7Xf2SnI.js} +1 -1
- package/dist/ui/assets/{chunk-EX3LRPZG-t2hCXH-v.js → chunk-EX3LRPZG-B_3p1HEv.js} +1 -1
- package/dist/ui/assets/{chunk-JWPE2WC7-rQK8maXo.js → chunk-JWPE2WC7-Dvs7u8eY.js} +1 -1
- package/dist/ui/assets/{chunk-MOJQB5TN-BpU7vp3L.js → chunk-MOJQB5TN-By21wDCN.js} +1 -1
- package/dist/ui/assets/{chunk-RYQCIY6F-CJVNOulR.js → chunk-RYQCIY6F-6NC700r1.js} +1 -1
- package/dist/ui/assets/{chunk-V7JOEXUC-B--maww3.js → chunk-V7JOEXUC-vEUqZ3rh.js} +1 -1
- package/dist/ui/assets/{chunk-VR4S4FIN-QJ5u9nSh.js → chunk-VR4S4FIN-6tX2dNN9.js} +1 -1
- package/dist/ui/assets/{chunk-XXDRQBXY-BcM9JOXa.js → chunk-XXDRQBXY-qDb2jxAR.js} +1 -1
- package/dist/ui/assets/classDiagram-OUVF2IWQ-Ccbvamlu.js +1 -0
- package/dist/ui/assets/classDiagram-v2-EOCWNBFH-Ccbvamlu.js +1 -0
- package/dist/ui/assets/{clean-BCfhFoON.js → clean-CLCsDUl1.js} +1 -1
- package/dist/ui/assets/{clojure-DtnBj8eB.js → clojure-dVi5Xifj.js} +1 -1
- package/dist/ui/assets/{clojure-repl-D8X-urCW.js → clojure-repl-BO_FpFmF.js} +1 -1
- package/dist/ui/assets/{cmake-BH2RXBgt.js → cmake-CP5aJbyK.js} +1 -1
- package/dist/ui/assets/{coffeescript-CuoLiQ_d.js → coffeescript-ZEfu_9pF.js} +1 -1
- package/dist/ui/assets/{c-Dht0EgwX.js → coq-6aKUn3zn.js} +1 -1
- package/dist/ui/assets/{cos-t-cDfrf6.js → cos-BohCnRN2.js} +1 -1
- package/dist/ui/assets/{cose-bilkent-JH36ORCC-CYip_9u7.js → cose-bilkent-JH36ORCC-DyXCbbro.js} +1 -1
- package/dist/ui/assets/{cpp-Cgv0dQ7g.js → cpp-FOgPWPEt.js} +1 -1
- package/dist/ui/assets/{crmsh-7pr1Pq_e.js → crmsh-B0OYb-Oe.js} +1 -1
- package/dist/ui/assets/{crystal-BHZFifeV.js → crystal-CuWb_dXm.js} +1 -1
- package/dist/ui/assets/{csharp-CVMfBRGF.js → csharp-BbcqM09j.js} +1 -1
- package/dist/ui/assets/{csp-NEBRDuZY.js → csp-rgHnTaDq.js} +1 -1
- package/dist/ui/assets/{css-B0fbMkoQ.js → css-C-ibh7ZG.js} +1 -1
- package/dist/ui/assets/{cynefin-VYW2F7L2-CycR2u2l.js → cynefin-VYW2F7L2-CkuBhgC4.js} +1 -1
- package/dist/ui/assets/{cynefinDiagram-TSTJHNR4-CvXYb5em.js → cynefinDiagram-TSTJHNR4-eycFyDao.js} +1 -1
- package/dist/ui/assets/{d-AzA6F7Ab.js → d-C0gXxJ0O.js} +1 -1
- package/dist/ui/assets/{dagre-VKFMJZFB-6NuSYMRG.js → dagre-VKFMJZFB-DzqX9e49.js} +1 -1
- package/dist/ui/assets/{dart-D0VXSwKi.js → dart-C-fTpuUV.js} +1 -1
- package/dist/ui/assets/{delphi-B-bkLmCx.js → delphi-Chm0B9xv.js} +1 -1
- package/dist/ui/assets/{diagram-FQU43EPY-CNNW_5O7.js → diagram-FQU43EPY-BEgCqfg1.js} +1 -1
- package/dist/ui/assets/{diagram-G47NLZAW-C60bRph-.js → diagram-G47NLZAW-Cw11Vs2v.js} +1 -1
- package/dist/ui/assets/{diagram-NH7WQ7WH-CwERNWac.js → diagram-NH7WQ7WH-DSG_UWpP.js} +1 -1
- package/dist/ui/assets/{diagram-OA4YK3LP-9XSTmf1Z.js → diagram-OA4YK3LP-CJz-WOaJ.js} +1 -1
- package/dist/ui/assets/{diagram-WEI45ONY-h8K41_YA.js → diagram-WEI45ONY-CBXjBCvc.js} +1 -1
- package/dist/ui/assets/{diff-Ch9RlEn8.js → diff-C-vyuMSL.js} +1 -1
- package/dist/ui/assets/{django-C00rhzcB.js → django-CJK7lReT.js} +1 -1
- package/dist/ui/assets/{dns-C5MKVde0.js → dns-D02SHjSy.js} +1 -1
- package/dist/ui/assets/{dockerfile-BpRaVDMB.js → dockerfile-trKL1Bqu.js} +1 -1
- package/dist/ui/assets/{dos-CjQOJ_vn.js → dos-C52dy-sK.js} +1 -1
- package/dist/ui/assets/{dsconfig-3zd3UkyN.js → dsconfig-MzHgzVrt.js} +1 -1
- package/dist/ui/assets/{dts-Bb6PtK5T.js → dts-B137dHyX.js} +1 -1
- package/dist/ui/assets/{dust-BEJKezIa.js → dust-BcbM0r5C.js} +1 -1
- package/dist/ui/assets/{ebnf-5-TvfsoC.js → ebnf-DkbpI7bK.js} +1 -1
- package/dist/ui/assets/{ebnfDiagram-CCIWWBDH-CRmIjeas.js → ebnfDiagram-CCIWWBDH-aI5uQ7w1.js} +1 -1
- package/dist/ui/assets/{elixir-B6gSEyen.js → elixir-BOtDuqQy.js} +1 -1
- package/dist/ui/assets/{elm-rR0aqyyf.js → elm-DS8Tyyu-.js} +1 -1
- package/dist/ui/assets/{erDiagram-Q63AITRT-DS3jYOq8.js → erDiagram-Q63AITRT-2vCbd4Mm.js} +1 -1
- package/dist/ui/assets/{erb-DUu22Jxg.js → erb-CSXECRbn.js} +1 -1
- package/dist/ui/assets/{erlang-C0m-R-6W.js → erlang-BMxlgKPJ.js} +1 -1
- package/dist/ui/assets/{erlang-repl-B7O2MhlI.js → erlang-repl-DPzlolPg.js} +1 -1
- package/dist/ui/assets/{excel-CIqnqFs1.js → excel-CW2Uxed3.js} +1 -1
- package/dist/ui/assets/{fix-Ds9tcTzQ.js → fix-UW84SlCs.js} +1 -1
- package/dist/ui/assets/{flix-ByzuevTB.js → flix-4UGiPULd.js} +1 -1
- package/dist/ui/assets/{flowDiagram-23GEKE2U-B9F3S_Hl.js → flowDiagram-23GEKE2U-R5PbCbZI.js} +1 -1
- package/dist/ui/assets/{fortran-DieSVGx5.js → fortran-nhHsngdu.js} +1 -1
- package/dist/ui/assets/{fsharp-DGP8m6H3.js → fsharp-CDyZ1ST5.js} +1 -1
- package/dist/ui/assets/{gams-BiLGBohb.js → gams-DHzkkUie.js} +1 -1
- package/dist/ui/assets/{ganttDiagram-NO4QXBWP-CHiCWnJt.js → ganttDiagram-NO4QXBWP-CGcq4Ie_.js} +1 -1
- package/dist/ui/assets/{gauss-Btl1fjJ0.js → gauss-DdhFGyBv.js} +1 -1
- package/dist/ui/assets/{gcode-DWl2YoL_.js → gcode-ImHh8OLA.js} +1 -1
- package/dist/ui/assets/{gherkin-D42ESIJ2.js → gherkin-CTWAW-XR.js} +1 -1
- package/dist/ui/assets/{gitGraphDiagram-IHSO6WYX-0pEKZnJg.js → gitGraphDiagram-IHSO6WYX-8nM2Z9lD.js} +1 -1
- package/dist/ui/assets/{glsl-Dx1QhGIM.js → glsl-0_W_27G2.js} +1 -1
- package/dist/ui/assets/{gml-f0noEVTB.js → gml-BoDggu2z.js} +1 -1
- package/dist/ui/assets/{go-DXT6c-0g.js → go-DYfFygwl.js} +1 -1
- package/dist/ui/assets/{golo-D3NuJxTg.js → golo-Mlq-TCg9.js} +1 -1
- package/dist/ui/assets/{gradle-CUsTLc_e.js → gradle-BALAinEB.js} +1 -1
- package/dist/ui/assets/{groovy-BIkOcIpQ.js → groovy-Dht--dWU.js} +1 -1
- package/dist/ui/assets/{haml-C5jI7YVN.js → haml-DpMrxg0d.js} +1 -1
- package/dist/ui/assets/{handlebars-UOvbWwDx.js → handlebars-DqHzujNj.js} +1 -1
- package/dist/ui/assets/{haskell-DuO_Av2n.js → haskell-DZSchhkY.js} +1 -1
- package/dist/ui/assets/{haxe-C0Cg5Hjh.js → haxe-C0zBRjdy.js} +1 -1
- package/dist/ui/assets/{hsp-CTDajZig.js → hsp-D_PwbSv2.js} +1 -1
- package/dist/ui/assets/{htmlbars-_ITuCkOs.js → htmlbars-DxAFMG8u.js} +1 -1
- package/dist/ui/assets/{http-Dr26PHfb.js → http-DvTRF0Do.js} +1 -1
- package/dist/ui/assets/{hy-B-ThgV4T.js → hy-lVO-kNyp.js} +1 -1
- package/dist/ui/assets/{index-CpQr158p.js → index-BbMRVVGt.js} +3 -3
- package/dist/ui/assets/{index-CwcnuNUs.js → index-Ci23SMK2.js} +242 -242
- package/dist/ui/assets/index-DlsVXaHT.css +10 -0
- package/dist/ui/assets/{infoDiagram-FWYZ7A6U-ClKPOdlx.js → infoDiagram-FWYZ7A6U-C7WYDlvc.js} +1 -1
- package/dist/ui/assets/{inform7-D7JYYkX9.js → inform7-B8Tf2n8v.js} +1 -1
- package/dist/ui/assets/{ini-BZwCkFAf.js → ini-DSoYMaLF.js} +1 -1
- package/dist/ui/assets/{irpf90-omMve0rd.js → irpf90-RCPdkB14.js} +1 -1
- package/dist/ui/assets/{isbl-C4xosfum.js → isbl-C2p75PPj.js} +1 -1
- package/dist/ui/assets/{ishikawaDiagram-FXEZZL3T-PtbNBMgh.js → ishikawaDiagram-FXEZZL3T-Cm6jsPlc.js} +1 -1
- package/dist/ui/assets/{java-CWjWDe7Q.js → java-DeY4Yuia.js} +1 -1
- package/dist/ui/assets/{javascript-C3dxrGuA.js → javascript-3uX1CO-H.js} +1 -1
- package/dist/ui/assets/{jboss-cli-CJE7m0Y-.js → jboss-cli-DgnD8mEc.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-5HDEW3XC-DgK9V4yg.js → journeyDiagram-5HDEW3XC-DEGV1uA5.js} +1 -1
- package/dist/ui/assets/{json-DFUiNV7v.js → json-BV2PmJJp.js} +1 -1
- package/dist/ui/assets/{julia-CUTHpx8X.js → julia-B-m8kQm7.js} +1 -1
- package/dist/ui/assets/{julia-repl-_ZaQqdrz.js → julia-repl-C51atU2X.js} +1 -1
- package/dist/ui/assets/{kanban-definition-HUTT4EX6-BFrDfKdv.js → kanban-definition-HUTT4EX6-BJ4k5iTX.js} +1 -1
- package/dist/ui/assets/{kotlin-CrYjQYp8.js → kotlin-CYBziIgl.js} +1 -1
- package/dist/ui/assets/{lasso-CAiVg9m2.js → lasso-Dw2SBMDW.js} +1 -1
- package/dist/ui/assets/{latex-BkxnXIrT.js → latex-Dpd35yke.js} +1 -1
- package/dist/ui/assets/{ldif-CBOqxiN7.js → ldif-Ce9EZU__.js} +1 -1
- package/dist/ui/assets/{leaf-CbBZyOGH.js → leaf-CpkZzQtC.js} +1 -1
- package/dist/ui/assets/{less-Ca6uLPP0.js → less-Uzo7M0FD.js} +1 -1
- package/dist/ui/assets/{lisp-0Cm7_Bzv.js → lisp-DWXDlJYm.js} +1 -1
- package/dist/ui/assets/{livecodeserver-B7ka0vFT.js → livecodeserver-uEyPEgVJ.js} +1 -1
- package/dist/ui/assets/{livescript-CGmWmcLd.js → livescript-BQ5f07oK.js} +1 -1
- package/dist/ui/assets/{llvm-DCVMvkrH.js → llvm-BAvP-skE.js} +1 -1
- package/dist/ui/assets/{lsl-PVrTScpn.js → lsl-DhbiIKu6.js} +1 -1
- package/dist/ui/assets/{lua-BTo3z2Ux.js → lua-COxeUeLx.js} +1 -1
- package/dist/ui/assets/{makefile-DJGh9r9C.js → makefile-DhDx-IgL.js} +1 -1
- package/dist/ui/assets/{markdown-BOloL-q7.js → markdown-DX5_kSxq.js} +1 -1
- package/dist/ui/assets/{mathematica-CtMMQM2V.js → mathematica-D351ZddB.js} +1 -1
- package/dist/ui/assets/{matlab-Bfg_AWdR.js → matlab-CELqIiwF.js} +1 -1
- package/dist/ui/assets/{maxima-B2cdS7BY.js → maxima-B_YljrMm.js} +1 -1
- package/dist/ui/assets/{mel-BvfPvpYI.js → mel-DltsbNS8.js} +1 -1
- package/dist/ui/assets/{mercury-B6KgNIai.js → mercury-axX-5Vjj.js} +1 -1
- package/dist/ui/assets/{mindmap-definition-LN4V7U3C-BkeXo5If.js → mindmap-definition-LN4V7U3C-Bl1EJo6p.js} +1 -1
- package/dist/ui/assets/{mipsasm-Csras-cD.js → mipsasm-BxmerVwX.js} +1 -1
- package/dist/ui/assets/{mizar-C3WDI1-X.js → mizar-XNHfbpL2.js} +1 -1
- package/dist/ui/assets/{mojolicious-MnD2Whic.js → mojolicious-BR0U_7zk.js} +1 -1
- package/dist/ui/assets/{monkey-DLvUPYTI.js → monkey-lLuu9_f-.js} +1 -1
- package/dist/ui/assets/{moonscript-B0XEb3R3.js → moonscript-DoaZ3DRQ.js} +1 -1
- package/dist/ui/assets/{n1ql-BMRF54sY.js → n1ql-C6TId6Iu.js} +1 -1
- package/dist/ui/assets/{nginx-DqUyeHb8.js → nginx-BezSG-JT.js} +1 -1
- package/dist/ui/assets/{nim-3xwg8mOL.js → nim-Bb0rfXie.js} +1 -1
- package/dist/ui/assets/{nix-ByTkLdcH.js → nix-o3sJ5-54.js} +1 -1
- package/dist/ui/assets/{node-repl-sGSuIUFG.js → node-repl-Sv5hhcTf.js} +1 -1
- package/dist/ui/assets/{nsis-Dng5mFSM.js → nsis-B45BJFhF.js} +1 -1
- package/dist/ui/assets/{objectivec-DSQ8vb7n.js → objectivec-CzS6zVgh.js} +1 -1
- package/dist/ui/assets/{ocaml-BHOhEgRu.js → ocaml-Bqux7PyP.js} +1 -1
- package/dist/ui/assets/{openscad-DcUxQ-FQ.js → openscad-4Wf6mF84.js} +1 -1
- package/dist/ui/assets/{oxygene-DNlmqhsR.js → oxygene-Fvwqgkkt.js} +1 -1
- package/dist/ui/assets/{parser3-DIR98Q6n.js → parser3-zEfzT5wv.js} +1 -1
- package/dist/ui/assets/{pegDiagram-2B236MQR-BrXp_1_9.js → pegDiagram-2B236MQR-Dd4rIztM.js} +1 -1
- package/dist/ui/assets/{perl-16cY7fyu.js → perl-CsS1Gs6o.js} +1 -1
- package/dist/ui/assets/{pf-KrAq2BW7.js → pf-BNH1jO0R.js} +1 -1
- package/dist/ui/assets/{pgsql-BV1Z2bjp.js → pgsql-DqPigHrq.js} +1 -1
- package/dist/ui/assets/{php-FGjYSZqs.js → php-CdOl9bRs.js} +1 -1
- package/dist/ui/assets/{php-template-B1OW86WT.js → php-template-DPfirJg2.js} +1 -1
- package/dist/ui/assets/{pieDiagram-ENE6RG2P-Bh0bhWSa.js → pieDiagram-ENE6RG2P-DGaJNf4S.js} +1 -1
- package/dist/ui/assets/{plaintext-Cvn_UgSv.js → plaintext-EHbgBKzw.js} +1 -1
- package/dist/ui/assets/{pony-CRWnA3MR.js → pony-DmJajtp2.js} +1 -1
- package/dist/ui/assets/{powershell-Cwn155MZ.js → powershell-DfGzdWR6.js} +1 -1
- package/dist/ui/assets/{processing-BS6-1lrQ.js → processing-BT0ETgPG.js} +1 -1
- package/dist/ui/assets/{profile-C45OLQrv.js → profile-B3I-x5Lt.js} +1 -1
- package/dist/ui/assets/{prolog-C5YafSzY.js → prolog-B_4QJIvI.js} +1 -1
- package/dist/ui/assets/{properties-BULd-Zhg.js → properties-BFVI8weS.js} +1 -1
- package/dist/ui/assets/{protobuf-Qf1IuG5l.js → protobuf-PaF39oZZ.js} +1 -1
- package/dist/ui/assets/{puppet-93XdQvnn.js → puppet-BDC6Q8VF.js} +1 -1
- package/dist/ui/assets/{purebasic-DlYNScQP.js → purebasic-B2ejrOZK.js} +1 -1
- package/dist/ui/assets/{python-D-Do6-F0.js → python-BOxtIk9H.js} +1 -1
- package/dist/ui/assets/{python-repl-DGutP04w.js → python-repl-BslBh_Mx.js} +1 -1
- package/dist/ui/assets/{q-lmgfrySy.js → q-BPe8WLGW.js} +1 -1
- package/dist/ui/assets/{qml-BbjX_mSU.js → qml-BazRR6fz.js} +1 -1
- package/dist/ui/assets/{quadrantDiagram-ABIIQ3AL-B891FOO8.js → quadrantDiagram-ABIIQ3AL-BQ7aPkHk.js} +1 -1
- package/dist/ui/assets/{r--x8NzO9N.js → r-C09pGNJC.js} +1 -1
- package/dist/ui/assets/{railroadDiagram-RFXS5EU6-R3O-GKNe.js → railroadDiagram-RFXS5EU6-sCO9VGvE.js} +1 -1
- package/dist/ui/assets/{reasonml-DwHsAflh.js → reasonml-S7dzwVL9.js} +1 -1
- package/dist/ui/assets/{requirementDiagram-TGXJPOKE-D4l_xEXt.js → requirementDiagram-TGXJPOKE-CfT5aVZg.js} +1 -1
- package/dist/ui/assets/{rib-DMJNtDwV.js → rib-fM2EwQd4.js} +1 -1
- package/dist/ui/assets/{roboconf-BNNGTvHr.js → roboconf-D7AaeyrW.js} +1 -1
- package/dist/ui/assets/{routeros-BF7SVruD.js → routeros-c6Q7mKuq.js} +1 -1
- package/dist/ui/assets/{rsl-1EHeIZqp.js → rsl-sCpEQBxh.js} +1 -1
- package/dist/ui/assets/{ruby-B-v_BYYp.js → ruby-lcKhz2w9.js} +1 -1
- package/dist/ui/assets/{ruleslanguage-GFeEMSdK.js → ruleslanguage-BW4ATOuX.js} +1 -1
- package/dist/ui/assets/{rust-ApqGtMhh.js → rust-BbpU-0VY.js} +1 -1
- package/dist/ui/assets/{sankeyDiagram-HTMAVEWB-Dc-2lhBq.js → sankeyDiagram-HTMAVEWB-CaweCpvN.js} +1 -1
- package/dist/ui/assets/{sas-YkxX6N9_.js → sas-BPt5R0dx.js} +1 -1
- package/dist/ui/assets/{scala-BpHi86GZ.js → scala-DxW_vqXs.js} +1 -1
- package/dist/ui/assets/{scheme-D889qY8Y.js → scheme-T2Q_jWzT.js} +1 -1
- package/dist/ui/assets/{scilab-C3l-bcRx.js → scilab-DMORg9lV.js} +1 -1
- package/dist/ui/assets/{scss-D0iGASxm.js → scss-t0VsosqT.js} +1 -1
- package/dist/ui/assets/{sequenceDiagram-DBY2YBRQ-DvppgciC.js → sequenceDiagram-DBY2YBRQ-o-H_R4zb.js} +1 -1
- package/dist/ui/assets/{shell-PUnaEPCO.js → shell-CnCDa1s9.js} +1 -1
- package/dist/ui/assets/{sizeCapture-X5ZJPWSS-DhvIbxXs.js → sizeCapture-X5ZJPWSS-BNLkHGDS.js} +1 -1
- package/dist/ui/assets/{smali-Du_dF9hl.js → smali-_n-BxJyG.js} +1 -1
- package/dist/ui/assets/{smalltalk-CSr2Gc1v.js → smalltalk-B90PXJwK.js} +1 -1
- package/dist/ui/assets/{sml-D3zkvzP2.js → sml-fuY7bj-n.js} +1 -1
- package/dist/ui/assets/{sqf-BZQ34qEZ.js → sqf-COpwkyuo.js} +1 -1
- package/dist/ui/assets/{sql-BFKScMsf.js → sql-CXIT0j-x.js} +1 -1
- package/dist/ui/assets/{sql_more-C2Lc_Qqq.js → sql_more-C1Oxq4rx.js} +1 -1
- package/dist/ui/assets/{stan-CzY8VdxU.js → stan-BZEpaHeC.js} +1 -1
- package/dist/ui/assets/{stata-9GxyhPpV.js → stata-CkBwaiZM.js} +1 -1
- package/dist/ui/assets/{stateDiagram-2N3HPSRC-CM63y6f0.js → stateDiagram-2N3HPSRC-BkdnNF7I.js} +1 -1
- package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-0JnZ1VSQ.js +1 -0
- package/dist/ui/assets/{step21-BpK_Zw3v.js → step21-fs9N_U3O.js} +1 -1
- package/dist/ui/assets/{stylus-DQ4k28M4.js → stylus-Bs_9cvKZ.js} +1 -1
- package/dist/ui/assets/{subunit-C6ciOPNF.js → subunit-DvgcOCqJ.js} +1 -1
- package/dist/ui/assets/{swift-CJfqqSbT.js → swift-BE4ONsur.js} +1 -1
- package/dist/ui/assets/{swimlanes-5IMT3BWC-DS6_HNF7.js → swimlanes-5IMT3BWC-uqTAc7o7.js} +2 -2
- package/dist/ui/assets/swimlanesDiagram-G3AALYLV-DQRIIEmi.js +8 -0
- package/dist/ui/assets/{taggerscript-VouMmJ_v.js → taggerscript-BhmPJ64C.js} +1 -1
- package/dist/ui/assets/{tap-wXCy18ot.js → tap-DkueIVKV.js} +1 -1
- package/dist/ui/assets/{tcl-ewDOmCFX.js → tcl-DyXOOkFi.js} +1 -1
- package/dist/ui/assets/{thrift-BfFA03rE.js → thrift-Dhgbk56T.js} +1 -1
- package/dist/ui/assets/{timeline-definition-FHXFAJF6-Dz2m6S6x.js → timeline-definition-FHXFAJF6-DBAk9Ouc.js} +1 -1
- package/dist/ui/assets/{tp-HGBcpNf9.js → tp-BsXyrRGH.js} +1 -1
- package/dist/ui/assets/{twig-nrQZ0pw8.js → twig-J0HqIuHw.js} +1 -1
- package/dist/ui/assets/{typescript-B7tNYFEQ.js → typescript-Dkwvul39.js} +1 -1
- package/dist/ui/assets/{vala-BIjQtoo6.js → vala-CRGnf8aY.js} +1 -1
- package/dist/ui/assets/{vbnet-Bbspccm6.js → vbnet-BtJAUe3z.js} +1 -1
- package/dist/ui/assets/{vbscript-C45_QgOy.js → vbscript-RgFFNuM3.js} +1 -1
- package/dist/ui/assets/{vbscript-html-DlF2QBc7.js → vbscript-html-DO32Io9Y.js} +1 -1
- package/dist/ui/assets/{vennDiagram-L72KCM5P-BPEphYtX.js → vennDiagram-L72KCM5P-BJi6y0hh.js} +1 -1
- package/dist/ui/assets/{verilog-BSitd8W0.js → verilog-C4h6MLcI.js} +1 -1
- package/dist/ui/assets/{vhdl-C1bbeiC4.js → vhdl-DOafePyU.js} +1 -1
- package/dist/ui/assets/{vim-DchwbT8X.js → vim-BAdTA9TY.js} +1 -1
- package/dist/ui/assets/{wardleyDiagram-EHGQE667-BttTCoBT.js → wardleyDiagram-EHGQE667-C7c_4IJ6.js} +1 -1
- package/dist/ui/assets/{x86asm-vARxMUvn.js → x86asm-BCL6__QH.js} +1 -1
- package/dist/ui/assets/{xl-dx63vvXo.js → xl-qIzE4HOe.js} +1 -1
- package/dist/ui/assets/{xml-BUnj27wL.js → xml-DE2sJXYU.js} +1 -1
- package/dist/ui/assets/{xquery-T7gpnf0e.js → xquery-CQ35t92y.js} +1 -1
- package/dist/ui/assets/{xychartDiagram-FW5EYKEG-BfrNhdrG.js → xychartDiagram-FW5EYKEG-D2ILn0jL.js} +1 -1
- package/dist/ui/assets/{yaml-xRgQKzeL.js → yaml-5KaAvG5C.js} +1 -1
- package/dist/ui/assets/{zephir-Yu6l5qJj.js → zephir-CbR3Ryfq.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/dist/utils/__tests__/abort-signals.test.js +67 -0
- package/dist/utils/__tests__/inject-loop.test.js +1 -53
- package/dist/utils/__tests__/learn-tasks-db.test.js +82 -0
- package/dist/utils/__tests__/openai-converter.test.js +25 -0
- package/dist/utils/__tests__/pi-crawl-tools.test.js +15 -4
- package/dist/utils/__tests__/pi-dedup-reconcile.test.js +11 -9
- package/dist/utils/__tests__/pi-events.test.js +172 -0
- package/dist/utils/__tests__/pi-learn-orchestrator.test.js +216 -6
- package/dist/utils/__tests__/pi-runtime-json.test.js +38 -3
- package/dist/utils/__tests__/providers-db.test.js +40 -2
- package/dist/utils/__tests__/request-writer.test.js +271 -39
- package/dist/utils/__tests__/sse-protocol.test.d.ts +1 -0
- package/dist/utils/__tests__/sse-protocol.test.js +115 -0
- package/dist/utils/__tests__/vault.test.d.ts +1 -0
- package/dist/utils/__tests__/{knowledge-store.test.js → vault.test.js} +16 -16
- package/dist/utils/abort-signals.d.ts +13 -0
- package/dist/utils/abort-signals.js +33 -0
- package/dist/utils/db.d.ts +2 -0
- package/dist/utils/db.js +42 -0
- package/dist/utils/esm-dirname.d.ts +0 -15
- package/dist/utils/esm-dirname.js +0 -4
- package/dist/utils/inject-loop.d.ts +0 -27
- package/dist/utils/inject-loop.js +2 -56
- package/dist/utils/learn-tasks-db.d.ts +15 -0
- package/dist/utils/learn-tasks-db.js +35 -0
- package/dist/utils/openai-converter.js +88 -78
- package/dist/utils/pi-browser-tools.d.ts +0 -2
- package/dist/utils/pi-browser-tools.js +0 -174
- package/dist/utils/pi-crawl-tools.d.ts +2 -1
- package/dist/utils/pi-crawl-tools.js +16 -11
- package/dist/utils/pi-dedup.d.ts +8 -30
- package/dist/utils/pi-dedup.js +32 -67
- package/dist/utils/pi-events.d.ts +65 -0
- package/dist/utils/pi-events.js +98 -0
- package/dist/utils/pi-learn-orchestrator.d.ts +6 -5
- package/dist/utils/pi-learn-orchestrator.js +71 -106
- package/dist/utils/pi-runtime.d.ts +5 -6
- package/dist/utils/pi-runtime.js +38 -42
- package/dist/utils/pi-sandbox-ops.d.ts +0 -36
- package/dist/utils/pi-sandbox-ops.js +5 -190
- package/dist/utils/providers-db.d.ts +3 -0
- package/dist/utils/providers-db.js +21 -7
- package/dist/utils/request-writer.d.ts +60 -30
- package/dist/utils/request-writer.js +182 -61
- package/dist/utils/sse-protocol.d.ts +34 -0
- package/dist/utils/sse-protocol.js +121 -0
- package/dist/utils/sse-stream-processor.d.ts +4 -9
- package/dist/utils/sse-stream-processor.js +13 -104
- package/dist/utils/sse-writer.d.ts +1 -1
- package/dist/utils/sse-writer.js +3 -2
- package/dist/utils/stats-aggregator.js +3 -0
- package/dist/utils/tool-injector.js +7 -0
- package/dist/utils/vault.d.ts +111 -0
- package/dist/utils/vault.js +434 -0
- package/package.json +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BN6hB8Jr.js +0 -1
- package/dist/types/api.d.ts +0 -20
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.js +0 -4
- package/dist/types/log.d.ts +0 -13
- package/dist/ui/assets/channel-BgAIihW-.js +0 -1
- package/dist/ui/assets/classDiagram-OUVF2IWQ-0fsnUoNI.js +0 -1
- package/dist/ui/assets/classDiagram-v2-EOCWNBFH-0fsnUoNI.js +0 -1
- package/dist/ui/assets/index-C0fxlU9d.css +0 -10
- package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-OA9dcuA9.js +0 -1
- package/dist/ui/assets/swimlanesDiagram-G3AALYLV-BLEnJU_R.js +0 -8
- package/dist/utils/__tests__/sse-accumulator.test.js +0 -83
- package/dist/utils/knowledge-store.d.ts +0 -44
- package/dist/utils/knowledge-store.js +0 -193
- package/dist/utils/migrate-files-to-db.d.ts +0 -1
- package/dist/utils/migrate-files-to-db.js +0 -138
- package/dist/utils/sse-accumulator.d.ts +0 -9
- package/dist/utils/sse-accumulator.js +0 -59
- /package/dist/docs/assets/{proxy-cli_data-hooks.md.w9Oe1OD3.lean.js → proxy-cli_data-hooks.md.Bz8CVbxO.lean.js} +0 -0
- /package/dist/docs/assets/{proxy-core_ui-routes.md.Dyqkeoiv.lean.js → proxy-core_ui-routes.md.B21t1p7R.lean.js} +0 -0
- /package/dist/{types/api.js → utils/__tests__/abort-signals.test.d.ts} +0 -0
- /package/dist/{types/log.js → utils/__tests__/learn-tasks-db.test.d.ts} +0 -0
- /package/dist/utils/__tests__/{knowledge-store.test.d.ts → openai-converter.test.d.ts} +0 -0
- /package/dist/utils/__tests__/{sse-accumulator.test.d.ts → pi-events.test.d.ts} +0 -0
package/dist/logger/index.d.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import pino from 'pino';
|
|
2
2
|
import type { LogConfig } from '../types/config.js';
|
|
3
|
-
declare const LEVEL_MAP: Record<string, number>;
|
|
4
|
-
declare const NUM_TO_LEVEL: Record<number, string>;
|
|
5
3
|
export declare function createLogger(config: LogConfig): pino.Logger;
|
|
6
4
|
export declare function readLogs(filePath: string, options: {
|
|
7
5
|
limit?: number;
|
|
8
6
|
level?: string;
|
|
9
7
|
grep?: string;
|
|
10
8
|
}): Promise<string[]>;
|
|
11
|
-
export { LEVEL_MAP, NUM_TO_LEVEL };
|
package/dist/logger/index.js
CHANGED
package/dist/mcp-server/index.js
CHANGED
|
@@ -2,11 +2,13 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
2
2
|
import { ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { getProjectVersion } from '../utils/version.js';
|
|
4
4
|
import { MCP_TOOLS, registerMcpTools } from './tools.js';
|
|
5
|
-
const MCP_INSTRUCTIONS = `This server provides a
|
|
5
|
+
const MCP_INSTRUCTIONS = `This server provides a project knowledge base and cc-monitoring proxy observability tools.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
KNOWLEDGE BASE: it is the authoritative source for this project, and your own knowledge may be outdated. Before answering any question that could relate to the project or its domain, call \`query_knowledge\` with the key terms — it searches and returns matching chunk bodies in one call. Do not rely on your own knowledge first, and do not wait for the user to explicitly ask. Skip this only for purely general questions (language syntax, standard algorithms, chitchat) with no plausible connection to a project topic.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
If query_knowledge returns nothing or the result is insufficient, browse with \`list_topics\` → \`get_topic\` → \`read_chunk\` (one chunk per call). Do not call \`list_topics\` again when its result is already present in this conversation.
|
|
10
|
+
|
|
11
|
+
OBSERVABILITY tools (\`get_status\`, \`list_requests\`, \`get_token_stats\`, \`get_logs\`) inspect the proxy itself — request history, token usage, logs. Use them only when the user asks about the proxy or monitoring state.`;
|
|
10
12
|
export function createMcpServer(config) {
|
|
11
13
|
const server = new Server({ name: 'cc-monitoring', version: getProjectVersion() }, {
|
|
12
14
|
capabilities: { tools: {} },
|
package/dist/mcp-server/tools.js
CHANGED
|
@@ -2,8 +2,8 @@ import fs from 'fs';
|
|
|
2
2
|
import { CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { getDatabase } from '../utils/db.js';
|
|
4
4
|
import { listRequestDB } from '../utils/request-writer.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { getActiveProvider } from '../utils/providers-db.js';
|
|
6
|
+
import { vault } from '../utils/vault.js';
|
|
7
7
|
function ok(text) {
|
|
8
8
|
return { content: [{ type: 'text', text }] };
|
|
9
9
|
}
|
|
@@ -18,8 +18,7 @@ async function handleGetStatus(_args, ctx) {
|
|
|
18
18
|
const countRow = db.prepare('SELECT COUNT(*) AS n FROM requests').get();
|
|
19
19
|
let defaultProvider = null;
|
|
20
20
|
try {
|
|
21
|
-
const
|
|
22
|
-
const def = providers.find(p => p.default);
|
|
21
|
+
const def = getActiveProvider(db);
|
|
23
22
|
if (def) {
|
|
24
23
|
defaultProvider = { name: def.name, model: def.model, base_url: def.base_url };
|
|
25
24
|
}
|
|
@@ -135,9 +134,22 @@ export const MCP_TOOLS = [
|
|
|
135
134
|
additionalProperties: false,
|
|
136
135
|
},
|
|
137
136
|
},
|
|
137
|
+
{
|
|
138
|
+
name: 'query_knowledge',
|
|
139
|
+
description: 'Search the knowledge base and return matching chunk bodies in one call. This is the primary tool for answering project/domain questions.',
|
|
140
|
+
inputSchema: {
|
|
141
|
+
type: 'object',
|
|
142
|
+
properties: {
|
|
143
|
+
query: { type: 'string', description: 'Search keywords' },
|
|
144
|
+
limit: { type: 'number', description: 'Max chunks to return (default 3, max 5).' },
|
|
145
|
+
},
|
|
146
|
+
required: ['query'],
|
|
147
|
+
additionalProperties: false,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
138
150
|
{
|
|
139
151
|
name: 'list_topics',
|
|
140
|
-
description: 'List all knowledge topics with one-line summary.
|
|
152
|
+
description: 'List all knowledge topics with one-line summary. Use this to browse topics when keyword search does not answer the question.',
|
|
141
153
|
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
142
154
|
},
|
|
143
155
|
{
|
|
@@ -152,7 +164,7 @@ export const MCP_TOOLS = [
|
|
|
152
164
|
},
|
|
153
165
|
{
|
|
154
166
|
name: 'search_chunks',
|
|
155
|
-
description: 'Keyword search across all chunks
|
|
167
|
+
description: 'Keyword search across all chunks, returning a matching chunk list without bodies. Prefer query_knowledge, which returns bodies directly; use this only when you need chunk lists without bodies.',
|
|
156
168
|
inputSchema: {
|
|
157
169
|
type: 'object',
|
|
158
170
|
properties: { query: { type: 'string', description: 'Search keyword' } },
|
|
@@ -179,10 +191,10 @@ const HANDLERS = {
|
|
|
179
191
|
list_requests: handleListRequests,
|
|
180
192
|
get_token_stats: handleGetTokenStats,
|
|
181
193
|
get_logs: handleGetLogs,
|
|
182
|
-
list_topics: async () => ok(JSON.stringify(await
|
|
194
|
+
list_topics: async () => ok(JSON.stringify(await vault.listTopics(), null, 2)),
|
|
183
195
|
get_topic: async (args) => {
|
|
184
196
|
try {
|
|
185
|
-
return ok(JSON.stringify(await
|
|
197
|
+
return ok(JSON.stringify(await vault.getTopic(args.topic), null, 2));
|
|
186
198
|
}
|
|
187
199
|
catch (e) {
|
|
188
200
|
const msg = e instanceof Error ? e.message : String(e);
|
|
@@ -192,10 +204,19 @@ const HANDLERS = {
|
|
|
192
204
|
return err(e);
|
|
193
205
|
}
|
|
194
206
|
},
|
|
195
|
-
|
|
207
|
+
query_knowledge: async (args) => {
|
|
208
|
+
const hits = await vault.queryKnowledge(args.query ?? '', args.limit);
|
|
209
|
+
if (hits.length === 0) {
|
|
210
|
+
return ok('No knowledge chunks matched. Call list_topics to browse available topics, or refine your query.');
|
|
211
|
+
}
|
|
212
|
+
return ok(JSON.stringify({
|
|
213
|
+
hits: hits.map(h => ({ topic: h.topic, chunkId: h.chunkId, title: h.title, body: h.body })),
|
|
214
|
+
}, null, 2));
|
|
215
|
+
},
|
|
216
|
+
search_chunks: async (args) => ok(JSON.stringify(await vault.searchChunks(args.query ?? ''), null, 2)),
|
|
196
217
|
read_chunk: async (args) => {
|
|
197
218
|
try {
|
|
198
|
-
const body = await
|
|
219
|
+
const body = await vault.readChunk(args.topic, args.chunk_id);
|
|
199
220
|
return ok(body);
|
|
200
221
|
}
|
|
201
222
|
catch (e) {
|
|
@@ -49,6 +49,7 @@ jest.mock('@utils/db', () => {
|
|
|
49
49
|
provider TEXT NOT NULL,
|
|
50
50
|
is_default INTEGER NOT NULL DEFAULT 0,
|
|
51
51
|
is_openai_compatible INTEGER NOT NULL DEFAULT 0,
|
|
52
|
+
auth_style TEXT NOT NULL DEFAULT 'bearer',
|
|
52
53
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
53
54
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
54
55
|
)
|
package/dist/server/auth.d.ts
CHANGED
package/dist/server/auth.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Readable } from 'stream';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { loadConfig } from '../config/index.js';
|
|
4
|
-
import {
|
|
4
|
+
import { createRequestRecorder, recordIteration, loadSessionHistory } from '../utils/request-writer.js';
|
|
5
5
|
import { cleanOldRequestsDB } from '../utils/request-writer.js';
|
|
6
|
-
import {
|
|
7
|
-
import { initDatabase, getDatabase } from '../utils/db.js';
|
|
6
|
+
import { initDatabase } from '../utils/db.js';
|
|
8
7
|
import { resolveProxyTarget, getProxyModel, filterForwardHeaders, extractSafeHeaders } from './proxy.js';
|
|
9
8
|
import { injectMcpTools } from '../utils/tool-injector.js';
|
|
10
9
|
import { findInjectedCall, runJsonInjectLoop, runStreamingInjectLoop } from '../utils/inject-loop.js';
|
|
@@ -12,6 +11,7 @@ import { findEnabledTool } from '../tools/index.js';
|
|
|
12
11
|
import { writeSSEEvent, writeTextAsSSE, shouldMock } from '../utils/sse-writer.js';
|
|
13
12
|
import { SSEStreamProcessor } from '../utils/sse-stream-processor.js';
|
|
14
13
|
import { getMachineIdSync, preloadMachineId } from '../utils/machine-id.js';
|
|
14
|
+
import { createClientAbortSignal, createTimeoutSignal } from '../utils/abort-signals.js';
|
|
15
15
|
export async function setupChatRoute(fastify, proxyConfig) {
|
|
16
16
|
const fullConfig = await loadConfig();
|
|
17
17
|
const maxDays = fullConfig.storage?.maxDays ?? 7;
|
|
@@ -20,6 +20,8 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
20
20
|
fastify.post('/api/chat', async (request, reply) => {
|
|
21
21
|
const startTime = Date.now();
|
|
22
22
|
const resolved = resolveProxyTarget(proxyConfig);
|
|
23
|
+
// 下游客户端中止:建一次,主 fetch 与 inject 循环内 fetch 全部复用同一 signal
|
|
24
|
+
const clientSignal = createClientAbortSignal(request.raw);
|
|
23
25
|
// Generate or reuse session ID
|
|
24
26
|
const providedSessionId = request.headers['x-chat-session-id'];
|
|
25
27
|
const sessionId = providedSessionId || randomUUID();
|
|
@@ -57,7 +59,7 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
57
59
|
request.log.info(`[chat] MCP tools injected: ${injectedNames.join(',')} (${request.id})`);
|
|
58
60
|
}
|
|
59
61
|
// Filter and forward headers
|
|
60
|
-
const forwardHeaders = filterForwardHeaders(extractSafeHeaders(request.headers), resolved.apiKey);
|
|
62
|
+
const forwardHeaders = filterForwardHeaders(extractSafeHeaders(request.headers), resolved.apiKey, resolved.auth_style);
|
|
61
63
|
forwardHeaders['x-chat-session-id'] = sessionId;
|
|
62
64
|
// Extract API keys for recording
|
|
63
65
|
const authHeader = request.headers['authorization'];
|
|
@@ -69,9 +71,9 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
69
71
|
(forwardedAuthHeader?.startsWith('Bearer ') ? forwardedAuthHeader.slice(7) : undefined);
|
|
70
72
|
// Build request data
|
|
71
73
|
const machineId = getMachineIdSync() ?? undefined;
|
|
72
|
-
const
|
|
73
|
-
requestId: request.id,
|
|
74
|
+
const meta = {
|
|
74
75
|
sessionId,
|
|
76
|
+
localRequestId: request.id,
|
|
75
77
|
timestamp: new Date().toISOString(),
|
|
76
78
|
apiKey,
|
|
77
79
|
proxyApiKey,
|
|
@@ -83,28 +85,12 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
83
85
|
path: request.url,
|
|
84
86
|
headers: forwardHeaders,
|
|
85
87
|
body: request.body
|
|
86
|
-
},
|
|
87
|
-
response: {
|
|
88
|
-
statusCode: 0,
|
|
89
|
-
events: []
|
|
90
88
|
}
|
|
91
89
|
};
|
|
90
|
+
const rec = createRequestRecorder(meta);
|
|
92
91
|
await cleanOldRequestsDB(maxDays);
|
|
93
92
|
// Save initial record + push pending status to frontend
|
|
94
|
-
await
|
|
95
|
-
pushNewRequest({
|
|
96
|
-
requestId: request.id,
|
|
97
|
-
sessionId,
|
|
98
|
-
compositeId: `${sessionId}:${request.id}`,
|
|
99
|
-
method: request.method,
|
|
100
|
-
path: request.url,
|
|
101
|
-
timestamp: requestData.timestamp,
|
|
102
|
-
statusCode: 0,
|
|
103
|
-
responseTime: 0,
|
|
104
|
-
model: forwardedModel,
|
|
105
|
-
machineId,
|
|
106
|
-
baseUrl: resolved.baseUrl
|
|
107
|
-
}, 'pending');
|
|
93
|
+
await rec.pending();
|
|
108
94
|
// Mock interception (PoC)
|
|
109
95
|
if (shouldMock(request.body)) {
|
|
110
96
|
reply.hijack();
|
|
@@ -125,14 +111,11 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
125
111
|
method: 'POST',
|
|
126
112
|
headers: forwardHeaders,
|
|
127
113
|
body: JSON.stringify(request.body),
|
|
128
|
-
signal:
|
|
114
|
+
signal: createTimeoutSignal(300000, clientSignal)
|
|
129
115
|
});
|
|
130
116
|
request.log.info(`[chat] response status: ${response.status}`);
|
|
131
117
|
// Extract cloud request ID
|
|
132
118
|
const cloudRequestId = response.headers.get('x-request-id') || request.id;
|
|
133
|
-
requestData.requestId = cloudRequestId;
|
|
134
|
-
requestData.response.statusCode = response.status;
|
|
135
|
-
requestData.response.headers = Object.fromEntries(response.headers);
|
|
136
119
|
// Check response type
|
|
137
120
|
const contentType = response.headers.get('content-type') || '';
|
|
138
121
|
const isSSE = contentType.includes('text/event-stream');
|
|
@@ -143,10 +126,10 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
143
126
|
let jsonBody;
|
|
144
127
|
try {
|
|
145
128
|
jsonBody = JSON.parse(responseBody);
|
|
146
|
-
|
|
129
|
+
rec.appendEvent(jsonBody);
|
|
147
130
|
}
|
|
148
131
|
catch {
|
|
149
|
-
|
|
132
|
+
rec.appendEvent({ raw: responseBody });
|
|
150
133
|
}
|
|
151
134
|
// JSON inject loop: if MCP tools injected and response has tool_use
|
|
152
135
|
if (injected && jsonBody && jsonBody.stop_reason === 'tool_use') {
|
|
@@ -162,7 +145,7 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
162
145
|
method: 'POST',
|
|
163
146
|
headers: forwardHeaders,
|
|
164
147
|
body: JSON.stringify(b),
|
|
165
|
-
signal:
|
|
148
|
+
signal: createTimeoutSignal(300000, clientSignal)
|
|
166
149
|
});
|
|
167
150
|
const loopResponseBody = await r.text();
|
|
168
151
|
let loopJson;
|
|
@@ -171,98 +154,42 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
171
154
|
}
|
|
172
155
|
catch { /* ignore */ }
|
|
173
156
|
// Record each loop iteration as a separate request
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
request: { method: 'POST', path: '/api/chat', headers: forwardHeaders, body: b },
|
|
186
|
-
response: {
|
|
187
|
-
statusCode: r.status,
|
|
188
|
-
headers: Object.fromEntries(r.headers),
|
|
189
|
-
events: [loopJson],
|
|
190
|
-
completedAt: new Date().toISOString()
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
await saveRequestDB(sessionId, loopRequestId, loopData);
|
|
194
|
-
const loopUsage = extractTokenUsage(loopData.response.events);
|
|
195
|
-
pushNewRequest({
|
|
196
|
-
requestId: loopRequestId,
|
|
197
|
-
sessionId,
|
|
198
|
-
compositeId: `${sessionId}:${loopRequestId}`,
|
|
199
|
-
method: 'POST',
|
|
200
|
-
path: '/api/chat',
|
|
201
|
-
timestamp: loopData.timestamp,
|
|
157
|
+
await recordIteration({
|
|
158
|
+
sessionId,
|
|
159
|
+
localRequestId: r.headers.get('x-request-id') || `loop_${request.id}_${Date.now()}`,
|
|
160
|
+
timestamp: new Date().toISOString(),
|
|
161
|
+
apiKey,
|
|
162
|
+
proxyApiKey,
|
|
163
|
+
baseUrl: resolved.baseUrl,
|
|
164
|
+
model: forwardedModel,
|
|
165
|
+
machineId,
|
|
166
|
+
request: { method: 'POST', path: '/api/chat', headers: forwardHeaders, body: b },
|
|
167
|
+
response: {
|
|
202
168
|
statusCode: r.status,
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
usage: loopUsage
|
|
208
|
-
}, 'completed');
|
|
209
|
-
}
|
|
169
|
+
headers: Object.fromEntries(r.headers),
|
|
170
|
+
events: loopJson ? [loopJson] : []
|
|
171
|
+
}
|
|
172
|
+
});
|
|
210
173
|
return loopJson || JSON.parse(loopResponseBody);
|
|
211
174
|
}
|
|
212
175
|
});
|
|
213
176
|
request.log.info(`[chat] json loop done: ${loopResult.iterations} iter (${cloudRequestId})`);
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
if (cloudRequestId !== request.id) {
|
|
217
|
-
const db = getDatabase();
|
|
218
|
-
db.prepare('DELETE FROM requests WHERE request_id = ? AND session_id = ?').run(request.id, sessionId);
|
|
219
|
-
}
|
|
220
|
-
await saveRequestDB(sessionId, cloudRequestId, requestData);
|
|
221
|
-
const usage = extractTokenUsage(requestData.response.events);
|
|
222
|
-
pushNewRequest({
|
|
223
|
-
requestId: cloudRequestId,
|
|
224
|
-
sessionId,
|
|
225
|
-
compositeId: `${sessionId}:${cloudRequestId}`,
|
|
226
|
-
method: request.method,
|
|
227
|
-
path: request.url,
|
|
228
|
-
timestamp: requestData.timestamp,
|
|
177
|
+
await rec.complete({
|
|
178
|
+
cloudRequestId: cloudRequestId !== request.id ? cloudRequestId : undefined,
|
|
229
179
|
statusCode: response.status,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
machineId,
|
|
233
|
-
baseUrl: resolved.baseUrl,
|
|
234
|
-
usage,
|
|
235
|
-
pendingId: cloudRequestId !== request.id ? `${sessionId}:${request.id}` : undefined
|
|
236
|
-
}, 'completed');
|
|
180
|
+
headers: Object.fromEntries(response.headers)
|
|
181
|
+
});
|
|
237
182
|
const finalBody = { ...loopResult.finalBody, _sessionId: sessionId };
|
|
238
183
|
reply.code(200).header('x-chat-session-id', sessionId).send(JSON.stringify(finalBody));
|
|
239
184
|
return;
|
|
240
185
|
}
|
|
241
186
|
}
|
|
242
187
|
// Normal JSON passthrough
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
if (cloudRequestId !== request.id) {
|
|
246
|
-
const db = getDatabase();
|
|
247
|
-
db.prepare('DELETE FROM requests WHERE request_id = ? AND session_id = ?').run(request.id, sessionId);
|
|
248
|
-
}
|
|
249
|
-
await saveRequestDB(sessionId, cloudRequestId, requestData);
|
|
250
|
-
const usage = extractTokenUsage(requestData.response.events);
|
|
251
|
-
pushNewRequest({
|
|
252
|
-
requestId: cloudRequestId,
|
|
253
|
-
sessionId,
|
|
254
|
-
compositeId: `${sessionId}:${cloudRequestId}`,
|
|
255
|
-
method: request.method,
|
|
256
|
-
path: request.url,
|
|
257
|
-
timestamp: requestData.timestamp,
|
|
188
|
+
await rec.complete({
|
|
189
|
+
cloudRequestId: cloudRequestId !== request.id ? cloudRequestId : undefined,
|
|
258
190
|
statusCode: response.status,
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
machineId,
|
|
262
|
-
baseUrl: resolved.baseUrl,
|
|
263
|
-
usage,
|
|
264
|
-
pendingId: cloudRequestId !== request.id ? `${sessionId}:${request.id}` : undefined
|
|
265
|
-
}, 'completed');
|
|
191
|
+
headers: Object.fromEntries(response.headers)
|
|
192
|
+
});
|
|
266
193
|
// Inject session ID into response for passthrough
|
|
267
194
|
try {
|
|
268
195
|
const passthroughBody = JSON.parse(responseBody);
|
|
@@ -290,31 +217,13 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
290
217
|
});
|
|
291
218
|
nodeStream.on('end', async () => {
|
|
292
219
|
processor.flushLeftover();
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
if (cloudRequestId !== request.id) {
|
|
298
|
-
const db = getDatabase();
|
|
299
|
-
db.prepare('DELETE FROM requests WHERE request_id = ? AND session_id = ?').run(request.id, sessionId);
|
|
300
|
-
}
|
|
301
|
-
await saveRequestDB(sessionId, cloudRequestId, requestData);
|
|
302
|
-
const usage = extractTokenUsage(requestData.response.events);
|
|
303
|
-
pushNewRequest({
|
|
304
|
-
requestId: cloudRequestId,
|
|
305
|
-
sessionId,
|
|
306
|
-
compositeId: `${sessionId}:${cloudRequestId}`,
|
|
307
|
-
method: request.method,
|
|
308
|
-
path: request.url,
|
|
309
|
-
timestamp: requestData.timestamp,
|
|
220
|
+
for (const ev of processor.events)
|
|
221
|
+
rec.appendEvent(ev);
|
|
222
|
+
await rec.complete({
|
|
223
|
+
cloudRequestId: cloudRequestId !== request.id ? cloudRequestId : undefined,
|
|
310
224
|
statusCode: response.status,
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
machineId,
|
|
314
|
-
baseUrl: resolved.baseUrl,
|
|
315
|
-
usage,
|
|
316
|
-
pendingId: cloudRequestId !== request.id ? `${sessionId}:${request.id}` : undefined
|
|
317
|
-
}, 'completed');
|
|
225
|
+
headers: Object.fromEntries(response.headers)
|
|
226
|
+
});
|
|
318
227
|
request.log.info(`[chat] stream completed: ${cloudRequestId} ${response.status} (${Date.now() - startTime}ms, ${processor.events.length} events)`);
|
|
319
228
|
// 检测注入的 MCP tool_use → 发 proxy_status 信号 + 跑 streaming inject loop
|
|
320
229
|
if (processor.hasInjectedToolUse()) {
|
|
@@ -330,7 +239,7 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
330
239
|
method: 'POST',
|
|
331
240
|
headers: forwardHeaders,
|
|
332
241
|
body: JSON.stringify(b),
|
|
333
|
-
signal:
|
|
242
|
+
signal: createTimeoutSignal(300000, clientSignal)
|
|
334
243
|
});
|
|
335
244
|
const loopRequestId = r.headers.get('x-request-id') || `loop_${request.id}_${Date.now()}`;
|
|
336
245
|
return { response: r, requestId: loopRequestId };
|
|
@@ -353,9 +262,9 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
353
262
|
},
|
|
354
263
|
sessionId,
|
|
355
264
|
saveIterationDB: async (loopRequestId, loopProcessor, loopStatusCode, loopBody) => {
|
|
356
|
-
|
|
357
|
-
requestId: loopRequestId,
|
|
265
|
+
await recordIteration({
|
|
358
266
|
sessionId,
|
|
267
|
+
localRequestId: loopRequestId,
|
|
359
268
|
timestamp: new Date().toISOString(),
|
|
360
269
|
apiKey,
|
|
361
270
|
proxyApiKey,
|
|
@@ -365,26 +274,9 @@ export async function setupChatRoute(fastify, proxyConfig) {
|
|
|
365
274
|
request: { method: 'POST', path: '/api/chat', headers: forwardHeaders, body: loopBody },
|
|
366
275
|
response: {
|
|
367
276
|
statusCode: loopStatusCode,
|
|
368
|
-
events: loopProcessor.events
|
|
369
|
-
completedAt: new Date().toISOString()
|
|
277
|
+
events: loopProcessor.events
|
|
370
278
|
}
|
|
371
|
-
};
|
|
372
|
-
await saveRequestDB(sessionId, loopRequestId, loopData);
|
|
373
|
-
const loopUsage = extractTokenUsage(loopProcessor.events);
|
|
374
|
-
pushNewRequest({
|
|
375
|
-
requestId: loopRequestId,
|
|
376
|
-
sessionId,
|
|
377
|
-
compositeId: `${sessionId}:${loopRequestId}`,
|
|
378
|
-
method: 'POST',
|
|
379
|
-
path: '/api/chat',
|
|
380
|
-
timestamp: loopData.timestamp,
|
|
381
|
-
statusCode: loopStatusCode,
|
|
382
|
-
responseTime: 0,
|
|
383
|
-
model: forwardedModel,
|
|
384
|
-
machineId,
|
|
385
|
-
baseUrl: resolved.baseUrl,
|
|
386
|
-
usage: loopUsage
|
|
387
|
-
}, 'completed');
|
|
279
|
+
});
|
|
388
280
|
},
|
|
389
281
|
raw: reply.raw
|
|
390
282
|
});
|
|
@@ -3,5 +3,4 @@ export declare function addDataClient(ws: WebSocket): void;
|
|
|
3
3
|
export declare function removeDataClient(ws: WebSocket): void;
|
|
4
4
|
export declare function getDataClientCount(): number;
|
|
5
5
|
export declare function pushNewRequest(summary: any, status?: 'pending' | 'completed'): void;
|
|
6
|
-
export declare function pushStatsNotify(): void;
|
|
7
6
|
export declare function broadcastToDataClients(msg: any): void;
|
package/dist/server/data-push.js
CHANGED
|
@@ -18,13 +18,6 @@ export function pushNewRequest(summary, status = 'completed') {
|
|
|
18
18
|
data: { ...summary, status }
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
export function pushStatsNotify() {
|
|
22
|
-
broadcast({
|
|
23
|
-
type: 'stats',
|
|
24
|
-
action: 'notify',
|
|
25
|
-
data: { reason: 'file_updated' }
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
21
|
function broadcast(msg) {
|
|
29
22
|
const payload = JSON.stringify(msg);
|
|
30
23
|
for (const ws of dataClients) {
|