@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/utils/db.js
CHANGED
|
@@ -68,6 +68,14 @@ export function initDatabase() {
|
|
|
68
68
|
applySchemaV9(db);
|
|
69
69
|
db.prepare('INSERT OR REPLACE INTO schema_version (version) VALUES (9)').run();
|
|
70
70
|
}
|
|
71
|
+
if (currentVersion < 10) {
|
|
72
|
+
applySchemaV10(db);
|
|
73
|
+
db.prepare('INSERT OR REPLACE INTO schema_version (version) VALUES (10)').run();
|
|
74
|
+
}
|
|
75
|
+
if (currentVersion < 11) {
|
|
76
|
+
applySchemaV11(db);
|
|
77
|
+
db.prepare('INSERT OR REPLACE INTO schema_version (version) VALUES (11)').run();
|
|
78
|
+
}
|
|
71
79
|
return db;
|
|
72
80
|
}
|
|
73
81
|
export function applySchemaV2(db) {
|
|
@@ -146,6 +154,7 @@ function applySchemaV1(db) {
|
|
|
146
154
|
proxy_api_key TEXT,
|
|
147
155
|
base_url TEXT,
|
|
148
156
|
model TEXT,
|
|
157
|
+
user_agent TEXT,
|
|
149
158
|
input_tokens INTEGER,
|
|
150
159
|
output_tokens INTEGER,
|
|
151
160
|
cache_read_tokens INTEGER,
|
|
@@ -262,6 +271,39 @@ export function applySchemaV9(db) {
|
|
|
262
271
|
db.exec("ALTER TABLE providers ADD COLUMN auth_style TEXT NOT NULL DEFAULT 'bearer'");
|
|
263
272
|
}
|
|
264
273
|
}
|
|
274
|
+
export function applySchemaV10(db) {
|
|
275
|
+
// Add user_agent column to requests table
|
|
276
|
+
// ALTER TABLE ADD COLUMN is idempotent-safe via column-existence check
|
|
277
|
+
const columns = db.prepare("PRAGMA table_info(requests)").all();
|
|
278
|
+
if (!columns.some(c => c.name === 'user_agent')) {
|
|
279
|
+
db.exec('ALTER TABLE requests ADD COLUMN user_agent TEXT');
|
|
280
|
+
}
|
|
281
|
+
// Backfill historical rows from request_headers JSON (idempotent)
|
|
282
|
+
db.prepare(`
|
|
283
|
+
UPDATE requests SET user_agent = json_extract(request_headers, '$.user-agent')
|
|
284
|
+
WHERE user_agent IS NULL AND request_headers IS NOT NULL
|
|
285
|
+
`).run();
|
|
286
|
+
}
|
|
287
|
+
export function applySchemaV11(db) {
|
|
288
|
+
// learn 流水线状态机落库:文件操作前插 running,结束转 completed/failed/aborted;
|
|
289
|
+
// 服务启动时无主 running 回收为 crashed。partial unique index 硬守同 slug 并发运行。
|
|
290
|
+
db.exec(`
|
|
291
|
+
CREATE TABLE IF NOT EXISTS learn_tasks (
|
|
292
|
+
task_id TEXT PRIMARY KEY,
|
|
293
|
+
slug TEXT NOT NULL,
|
|
294
|
+
source_type TEXT NOT NULL,
|
|
295
|
+
label TEXT NOT NULL,
|
|
296
|
+
status TEXT NOT NULL,
|
|
297
|
+
error TEXT,
|
|
298
|
+
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
299
|
+
ended_at TEXT
|
|
300
|
+
)
|
|
301
|
+
`);
|
|
302
|
+
db.exec(`
|
|
303
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_learn_tasks_running_slug
|
|
304
|
+
ON learn_tasks(slug) WHERE status = 'running'
|
|
305
|
+
`);
|
|
306
|
+
}
|
|
265
307
|
export function closeDatabase() {
|
|
266
308
|
if (db) {
|
|
267
309
|
db.close();
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ESM-compatible __dirname for this module.
|
|
3
|
-
*
|
|
4
|
-
* In ESM runtime, __dirname is undefined. This module computes its own
|
|
5
|
-
* directory path using import.meta.url, which can then be used to derive
|
|
6
|
-
* other paths relative to known locations.
|
|
7
|
-
*
|
|
8
|
-
* In CJS test environments (Jest), import.meta is not available, so this
|
|
9
|
-
* module should be mocked to return a suitable path.
|
|
10
|
-
*/
|
|
11
|
-
declare const thisDirname: string;
|
|
12
1
|
/**
|
|
13
2
|
* Get the directory of a source file relative to this utility's location.
|
|
14
3
|
*
|
|
@@ -22,10 +11,6 @@ declare const thisDirname: string;
|
|
|
22
11
|
* Example: getCallerDirname('../server') => packages/core/src/server
|
|
23
12
|
*/
|
|
24
13
|
export declare function getCallerDirname(relativePath: string): string;
|
|
25
|
-
/**
|
|
26
|
-
* Direct export of this module's __dirname for simple relative path derivation.
|
|
27
|
-
*/
|
|
28
|
-
export { thisDirname as utilsDirname };
|
|
29
14
|
/**
|
|
30
15
|
* ESM-compatible accessor for the entry module's URL.
|
|
31
16
|
*
|
|
@@ -34,10 +34,6 @@ const thisDirname = (() => {
|
|
|
34
34
|
export function getCallerDirname(relativePath) {
|
|
35
35
|
return path.resolve(thisDirname, relativePath);
|
|
36
36
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Direct export of this module's __dirname for simple relative path derivation.
|
|
39
|
-
*/
|
|
40
|
-
export { thisDirname as utilsDirname };
|
|
41
37
|
/**
|
|
42
38
|
* ESM-compatible accessor for the entry module's URL.
|
|
43
39
|
*
|
|
@@ -18,39 +18,13 @@ export interface ParsedUpstream {
|
|
|
18
18
|
stopReason: string;
|
|
19
19
|
usage: any;
|
|
20
20
|
}
|
|
21
|
-
/** 解析上游 SSE 全文 -> 事件数组(收集 data: 行的 JSON) */
|
|
22
|
-
export declare function parseSSEText(text: string): any[];
|
|
23
21
|
/** 从事件数组重建有序内容块 + stop_reason + usage */
|
|
24
22
|
export declare function parseUpstreamEvents(events: any[]): ParsedUpstream;
|
|
25
23
|
/** 找出命中的、已启用的注入 tool 调用块 */
|
|
26
24
|
export declare function findInjectedCall(parsed: ParsedUpstream): ParsedBlock | undefined;
|
|
27
|
-
export interface InjectLoopResult {
|
|
28
|
-
text: string;
|
|
29
|
-
iterations: number;
|
|
30
|
-
stoppedByLimit: boolean;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* SSE 内部循环:命中已启用 tool -> 执行 exec -> 追加对话 -> 再调上游 -> 直到 end_turn。
|
|
34
|
-
* opts.body 会被原地追加 messages。
|
|
35
|
-
*
|
|
36
|
-
* @param opts.events 首次上游响应事件(已确认命中注入 tool)
|
|
37
|
-
* @param opts.callUpstream 用给定 body 再次调上游,返回事件数组
|
|
38
|
-
* @param opts.maxIterations 死循环护栏(tool 描述可能诱导模型反复调用)
|
|
39
|
-
*/
|
|
40
|
-
export declare function runInjectLoop(opts: {
|
|
41
|
-
events: any[];
|
|
42
|
-
body: any;
|
|
43
|
-
callUpstream: (body: any) => Promise<any[]>;
|
|
44
|
-
maxIterations?: number;
|
|
45
|
-
}): Promise<InjectLoopResult>;
|
|
46
25
|
/**
|
|
47
26
|
* SSE 流式注入循环:命中已启用 tool → 执行 exec → 追加对话 → 再调上游 → 新 SSE 流式转发到同一 reply.raw。
|
|
48
27
|
* 每次迭代作为独立 DB 记录。客户端实时看到续接 SSE。
|
|
49
|
-
*
|
|
50
|
-
* 与 runInjectLoop 的区别:
|
|
51
|
-
* - 不缓冲上游响应,直接流式转发
|
|
52
|
-
* - 不返回合成 text,客户端已实时收到原始 SSE
|
|
53
|
-
* - 每次迭代用 SSEStreamProcessor 边转发边解析
|
|
54
28
|
*/
|
|
55
29
|
export interface StreamingInjectLoopResult {
|
|
56
30
|
iterations: number;
|
|
@@ -79,7 +53,6 @@ export interface JsonInjectLoopResult {
|
|
|
79
53
|
}
|
|
80
54
|
/**
|
|
81
55
|
* JSON 内部循环:非流式请求中命中 MCP tool -> 执行 exec -> 追加对话 -> 再调上游 -> 直到 end_turn。
|
|
82
|
-
* 与 SSE 版 runInjectLoop 对称,但处理 parsed JSON response body 而非 SSE event 数组。
|
|
83
56
|
*
|
|
84
57
|
* @param opts.initialBody 首次上游 JSON 响应(已确认命中 MCP tool)
|
|
85
58
|
* @param opts.requestBody 请求体(messages 会被原地追加)
|
|
@@ -1,22 +1,4 @@
|
|
|
1
1
|
import { findEnabledTool } from '../tools/index.js';
|
|
2
|
-
/** 解析上游 SSE 全文 -> 事件数组(收集 data: 行的 JSON) */
|
|
3
|
-
export function parseSSEText(text) {
|
|
4
|
-
const events = [];
|
|
5
|
-
for (const line of text.split('\n')) {
|
|
6
|
-
if (line.startsWith('data:')) {
|
|
7
|
-
const d = line.slice(5).trim();
|
|
8
|
-
if (d && d !== '[DONE]') {
|
|
9
|
-
try {
|
|
10
|
-
events.push(JSON.parse(d));
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
// 非 JSON 行跳过
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return events;
|
|
19
|
-
}
|
|
20
2
|
/** 从事件数组重建有序内容块 + stop_reason + usage */
|
|
21
3
|
export function parseUpstreamEvents(events) {
|
|
22
4
|
const blocks = new Map();
|
|
@@ -82,42 +64,6 @@ function blocksToAssistantContent(blocks) {
|
|
|
82
64
|
}
|
|
83
65
|
return content;
|
|
84
66
|
}
|
|
85
|
-
function collectText(parsed) {
|
|
86
|
-
return parsed.blocks
|
|
87
|
-
.filter((b) => b.type === 'text' && b.text)
|
|
88
|
-
.map((b) => b.text)
|
|
89
|
-
.join('');
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* SSE 内部循环:命中已启用 tool -> 执行 exec -> 追加对话 -> 再调上游 -> 直到 end_turn。
|
|
93
|
-
* opts.body 会被原地追加 messages。
|
|
94
|
-
*
|
|
95
|
-
* @param opts.events 首次上游响应事件(已确认命中注入 tool)
|
|
96
|
-
* @param opts.callUpstream 用给定 body 再次调上游,返回事件数组
|
|
97
|
-
* @param opts.maxIterations 死循环护栏(tool 描述可能诱导模型反复调用)
|
|
98
|
-
*/
|
|
99
|
-
export async function runInjectLoop(opts) {
|
|
100
|
-
const maxIterations = opts.maxIterations ?? 3;
|
|
101
|
-
let parsed = parseUpstreamEvents(opts.events);
|
|
102
|
-
let iterations = 0;
|
|
103
|
-
while (iterations < maxIterations) {
|
|
104
|
-
const call = findInjectedCall(parsed);
|
|
105
|
-
if (!call || parsed.stopReason !== 'tool_use') {
|
|
106
|
-
return { text: collectText(parsed), iterations, stoppedByLimit: false };
|
|
107
|
-
}
|
|
108
|
-
const tool = findEnabledTool(call.name);
|
|
109
|
-
const result = await tool.exec(call.input);
|
|
110
|
-
opts.body.messages.push({ role: 'assistant', content: blocksToAssistantContent(parsed.blocks) });
|
|
111
|
-
opts.body.messages.push({
|
|
112
|
-
role: 'user',
|
|
113
|
-
content: [{ type: 'tool_result', tool_use_id: call.id, content: result }]
|
|
114
|
-
});
|
|
115
|
-
const nextEvents = await opts.callUpstream(opts.body);
|
|
116
|
-
parsed = parseUpstreamEvents(nextEvents);
|
|
117
|
-
iterations++;
|
|
118
|
-
}
|
|
119
|
-
return { text: collectText(parsed) || '(内部循环达到最大轮次)', iterations, stoppedByLimit: true };
|
|
120
|
-
}
|
|
121
67
|
export async function runStreamingInjectLoop(opts) {
|
|
122
68
|
const maxIterations = opts.maxIterations ?? 3;
|
|
123
69
|
let parsed = opts.initialParsed;
|
|
@@ -144,8 +90,9 @@ export async function runStreamingInjectLoop(opts) {
|
|
|
144
90
|
const { processor, statusCode } = await opts.streamAndParse(response);
|
|
145
91
|
// 保存这次迭代到 DB
|
|
146
92
|
await opts.saveIterationDB(requestId, processor, statusCode, opts.body);
|
|
147
|
-
|
|
93
|
+
// 先收尾残帧再取解析结果,保证最后一帧参与解析
|
|
148
94
|
processor.flushLeftover();
|
|
95
|
+
parsed = processor.getParsedUpstream();
|
|
149
96
|
iterations++;
|
|
150
97
|
}
|
|
151
98
|
const stoppedByLimit = iterations >= (opts.maxIterations ?? 3) &&
|
|
@@ -155,7 +102,6 @@ export async function runStreamingInjectLoop(opts) {
|
|
|
155
102
|
}
|
|
156
103
|
/**
|
|
157
104
|
* JSON 内部循环:非流式请求中命中 MCP tool -> 执行 exec -> 追加对话 -> 再调上游 -> 直到 end_turn。
|
|
158
|
-
* 与 SSE 版 runInjectLoop 对称,但处理 parsed JSON response body 而非 SSE event 数组。
|
|
159
105
|
*
|
|
160
106
|
* @param opts.initialBody 首次上游 JSON 响应(已确认命中 MCP tool)
|
|
161
107
|
* @param opts.requestBody 请求体(messages 会被原地追加)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export interface InsertRunningArgs {
|
|
3
|
+
slug: string;
|
|
4
|
+
sourceType: 'url' | 'file';
|
|
5
|
+
label: string;
|
|
6
|
+
}
|
|
7
|
+
/** 落 running 行;撞同 slug 唯一约束时错误原样抛出(SQLITE_CONSTRAINT_UNIQUE) */
|
|
8
|
+
export declare function insertRunning(db: Database.Database, args: InsertRunningArgs): {
|
|
9
|
+
taskId: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function markCompleted(db: Database.Database, taskId: string): void;
|
|
12
|
+
export declare function markFailed(db: Database.Database, taskId: string, error: string): void;
|
|
13
|
+
export declare function markAborted(db: Database.Database, taskId: string): void;
|
|
14
|
+
/** 回收无主 running 行为 crashed(服务启动时调用),返回回收行数 */
|
|
15
|
+
export declare function recoverCrashedTasks(db: Database.Database): number;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// learn_tasks 数据层:learn 流水线状态机落库
|
|
2
|
+
// running → completed / failed / aborted;启动回收的无主 running → crashed。
|
|
3
|
+
// 同 slug 并发运行由 partial unique index idx_learn_tasks_running_slug 硬守。
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
/** 落 running 行;撞同 slug 唯一约束时错误原样抛出(SQLITE_CONSTRAINT_UNIQUE) */
|
|
6
|
+
export function insertRunning(db, args) {
|
|
7
|
+
const taskId = randomUUID();
|
|
8
|
+
db.prepare(`
|
|
9
|
+
INSERT INTO learn_tasks (task_id, slug, source_type, label, status)
|
|
10
|
+
VALUES (?, ?, ?, ?, 'running')
|
|
11
|
+
`).run(taskId, args.slug, args.sourceType, args.label);
|
|
12
|
+
return { taskId };
|
|
13
|
+
}
|
|
14
|
+
export function markCompleted(db, taskId) {
|
|
15
|
+
db.prepare(`
|
|
16
|
+
UPDATE learn_tasks SET status = 'completed', ended_at = ? WHERE task_id = ?
|
|
17
|
+
`).run(new Date().toISOString(), taskId);
|
|
18
|
+
}
|
|
19
|
+
export function markFailed(db, taskId, error) {
|
|
20
|
+
db.prepare(`
|
|
21
|
+
UPDATE learn_tasks SET status = 'failed', error = ?, ended_at = ? WHERE task_id = ?
|
|
22
|
+
`).run(error, new Date().toISOString(), taskId);
|
|
23
|
+
}
|
|
24
|
+
export function markAborted(db, taskId) {
|
|
25
|
+
db.prepare(`
|
|
26
|
+
UPDATE learn_tasks SET status = 'aborted', ended_at = ? WHERE task_id = ?
|
|
27
|
+
`).run(new Date().toISOString(), taskId);
|
|
28
|
+
}
|
|
29
|
+
/** 回收无主 running 行为 crashed(服务启动时调用),返回回收行数 */
|
|
30
|
+
export function recoverCrashedTasks(db) {
|
|
31
|
+
const info = db.prepare(`
|
|
32
|
+
UPDATE learn_tasks SET status = 'crashed', ended_at = ? WHERE status = 'running'
|
|
33
|
+
`).run(new Date().toISOString());
|
|
34
|
+
return info.changes;
|
|
35
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Transform } from 'stream';
|
|
2
|
+
import { createSSEDecoder, encodeSSEFrame } from './sse-protocol.js';
|
|
2
3
|
/**
|
|
3
4
|
* Recursively cleans a JSON Schema for OpenAI API compatibility.
|
|
4
5
|
* Removes '$schema' and 'additionalProperties'.
|
|
@@ -175,12 +176,16 @@ export function buildOpenAIHeaders(apiKey) {
|
|
|
175
176
|
*/
|
|
176
177
|
export function createStreamTransformer(model) {
|
|
177
178
|
let initialized = false;
|
|
178
|
-
let buffer = '';
|
|
179
179
|
const messageId = `msg_${Math.random().toString(36).substr(2, 9)}`;
|
|
180
180
|
const toolCalls = {};
|
|
181
181
|
let contentBlockIndex = 0;
|
|
182
|
+
// 上一帧的原始 data 字符串(帧驱动下对应原 lines[length-2] 的数据来源)
|
|
183
|
+
let lastDataRaw = '';
|
|
184
|
+
let decoder = null;
|
|
185
|
+
// [DONE] 已在 decoder 回调内收尾,transform 末尾不再重复 callback
|
|
186
|
+
let doneHandled = false;
|
|
182
187
|
const sendEvent = (event, data) => {
|
|
183
|
-
return
|
|
188
|
+
return encodeSSEFrame({ event, data: JSON.stringify(data) });
|
|
184
189
|
};
|
|
185
190
|
return new Transform({
|
|
186
191
|
transform(chunk, _encoding, callback) {
|
|
@@ -204,89 +209,94 @@ export function createStreamTransformer(model) {
|
|
|
204
209
|
}));
|
|
205
210
|
initialized = true;
|
|
206
211
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
212
|
+
if (!decoder) {
|
|
213
|
+
decoder = createSSEDecoder((frame) => {
|
|
214
|
+
const data = frame.data.join('\n');
|
|
215
|
+
if (data.trim() === '[DONE]') {
|
|
216
|
+
// Send closing events
|
|
217
|
+
this.push(sendEvent('content_block_stop', { type: 'content_block_stop', index: 0 }));
|
|
218
|
+
Object.values(toolCalls).forEach(tc => {
|
|
219
|
+
if (tc.started) {
|
|
220
|
+
this.push(sendEvent('content_block_stop', { type: 'content_block_stop', index: tc.claudeIndex }));
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
let finalStopReason = 'end_turn';
|
|
224
|
+
try {
|
|
225
|
+
const lastChunk = JSON.parse(lastDataRaw);
|
|
226
|
+
const finishReason = lastChunk.choices[0].finish_reason;
|
|
227
|
+
if (finishReason === 'tool_calls')
|
|
228
|
+
finalStopReason = 'tool_use';
|
|
229
|
+
if (finishReason === 'length')
|
|
230
|
+
finalStopReason = 'max_tokens';
|
|
220
231
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (finishReason === 'tool_calls')
|
|
227
|
-
finalStopReason = 'tool_use';
|
|
228
|
-
if (finishReason === 'length')
|
|
229
|
-
finalStopReason = 'max_tokens';
|
|
230
|
-
}
|
|
231
|
-
catch { }
|
|
232
|
-
this.push(sendEvent('message_delta', {
|
|
233
|
-
type: 'message_delta',
|
|
234
|
-
delta: { stop_reason: finalStopReason, stop_sequence: null },
|
|
235
|
-
usage: { output_tokens: 0 }
|
|
236
|
-
}));
|
|
237
|
-
this.push(sendEvent('message_stop', { type: 'message_stop' }));
|
|
238
|
-
callback();
|
|
239
|
-
this.destroy();
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
try {
|
|
243
|
-
const openaiChunk = JSON.parse(data);
|
|
244
|
-
const delta = openaiChunk.choices[0]?.delta;
|
|
245
|
-
if (!delta)
|
|
246
|
-
continue;
|
|
247
|
-
if (delta.content) {
|
|
248
|
-
this.push(sendEvent('content_block_delta', {
|
|
249
|
-
type: 'content_block_delta',
|
|
250
|
-
index: 0,
|
|
251
|
-
delta: { type: 'text_delta', text: delta.content }
|
|
232
|
+
catch { }
|
|
233
|
+
this.push(sendEvent('message_delta', {
|
|
234
|
+
type: 'message_delta',
|
|
235
|
+
delta: { stop_reason: finalStopReason, stop_sequence: null },
|
|
236
|
+
usage: { output_tokens: 0 }
|
|
252
237
|
}));
|
|
238
|
+
this.push(sendEvent('message_stop', { type: 'message_stop' }));
|
|
239
|
+
doneHandled = true;
|
|
240
|
+
callback();
|
|
241
|
+
this.destroy();
|
|
242
|
+
return;
|
|
253
243
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
244
|
+
lastDataRaw = data;
|
|
245
|
+
try {
|
|
246
|
+
const openaiChunk = JSON.parse(data);
|
|
247
|
+
const delta = openaiChunk.choices[0]?.delta;
|
|
248
|
+
if (!delta)
|
|
249
|
+
return;
|
|
250
|
+
if (delta.content) {
|
|
251
|
+
this.push(sendEvent('content_block_delta', {
|
|
252
|
+
type: 'content_block_delta',
|
|
253
|
+
index: 0,
|
|
254
|
+
delta: { type: 'text_delta', text: delta.content }
|
|
255
|
+
}));
|
|
256
|
+
}
|
|
257
|
+
if (delta.tool_calls) {
|
|
258
|
+
for (const tc_delta of delta.tool_calls) {
|
|
259
|
+
const index = tc_delta.index;
|
|
260
|
+
if (!toolCalls[index]) {
|
|
261
|
+
toolCalls[index] = { id: '', name: '', args: '', claudeIndex: 0, started: false };
|
|
262
|
+
}
|
|
263
|
+
if (tc_delta.id)
|
|
264
|
+
toolCalls[index].id = tc_delta.id;
|
|
265
|
+
if (tc_delta.function?.name)
|
|
266
|
+
toolCalls[index].name = tc_delta.function.name;
|
|
267
|
+
if (tc_delta.function?.arguments)
|
|
268
|
+
toolCalls[index].args += tc_delta.function.arguments;
|
|
269
|
+
if (toolCalls[index].id && toolCalls[index].name && !toolCalls[index].started) {
|
|
270
|
+
contentBlockIndex++;
|
|
271
|
+
toolCalls[index].claudeIndex = contentBlockIndex;
|
|
272
|
+
toolCalls[index].started = true;
|
|
273
|
+
this.push(sendEvent('content_block_start', {
|
|
274
|
+
type: 'content_block_start',
|
|
275
|
+
index: contentBlockIndex,
|
|
276
|
+
content_block: { type: 'tool_use', id: toolCalls[index].id, name: toolCalls[index].name, input: {} }
|
|
277
|
+
}));
|
|
278
|
+
}
|
|
279
|
+
if (toolCalls[index].started && tc_delta.function?.arguments) {
|
|
280
|
+
this.push(sendEvent('content_block_delta', {
|
|
281
|
+
type: 'content_block_delta',
|
|
282
|
+
index: toolCalls[index].claudeIndex,
|
|
283
|
+
delta: { type: 'input_json_delta', partial_json: tc_delta.function.arguments }
|
|
284
|
+
}));
|
|
285
|
+
}
|
|
282
286
|
}
|
|
283
287
|
}
|
|
284
288
|
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
}
|
|
289
|
+
catch {
|
|
290
|
+
// Ignore JSON parse errors in SSE chunks
|
|
291
|
+
}
|
|
292
|
+
});
|
|
289
293
|
}
|
|
294
|
+
decoder.write(chunk);
|
|
295
|
+
if (!doneHandled)
|
|
296
|
+
callback();
|
|
297
|
+
},
|
|
298
|
+
flush(callback) {
|
|
299
|
+
decoder?.end();
|
|
290
300
|
callback();
|
|
291
301
|
}
|
|
292
302
|
});
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { ToolDefinition } from '@earendil-works/pi-coding-agent';
|
|
2
1
|
/**
|
|
3
2
|
* 统一封装 ego-browser CLI:spawn 子进程 + 写入 Node 脚本 stdin,返回 cliLog 文本。
|
|
4
3
|
* 每次调用独立进程,靠 useOrCreateTaskSpace 在同一 task space 复用 tab。
|
|
@@ -9,4 +8,3 @@ export declare function runEgoBrowser(scriptBody: string, opts?: {
|
|
|
9
8
|
}): Promise<string>;
|
|
10
9
|
/** 过滤 ego-browser 自身打到输出流的横幅行(如升级 notice),保留脚本 cliLog 的真实输出 */
|
|
11
10
|
export declare function stripCliBanners(text: string): string;
|
|
12
|
-
export declare const browserTools: ToolDefinition[];
|