@cc-monitoring/proxy-core 0.1.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/LICENSE +202 -0
- package/README.md +149 -0
- package/dist/cli/__tests__/commands.test.d.ts +2 -0
- package/dist/cli/__tests__/commands.test.d.ts.map +1 -0
- package/dist/cli/__tests__/commands.test.js +287 -0
- package/dist/cli/__tests__/commands.test.js.map +1 -0
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +40 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +6 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +12 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/reload.d.ts +2 -0
- package/dist/cli/commands/reload.d.ts.map +1 -0
- package/dist/cli/commands/reload.js +54 -0
- package/dist/cli/commands/reload.js.map +1 -0
- package/dist/cli/commands/start.d.ts +5 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +70 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +15 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +2 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +7 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/test.d.ts +2 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +16 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/ui.d.ts +5 -0
- package/dist/cli/commands/ui.d.ts.map +1 -0
- package/dist/cli/commands/ui.js +35 -0
- package/dist/cli/commands/ui.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +70 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/__tests__/config.test.d.ts +2 -0
- package/dist/config/__tests__/config.test.d.ts.map +1 -0
- package/dist/config/__tests__/config.test.js +160 -0
- package/dist/config/__tests__/config.test.js.map +1 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +64 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +132 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +42 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/logger/__tests__/logger.test.d.ts +2 -0
- package/dist/logger/__tests__/logger.test.d.ts.map +1 -0
- package/dist/logger/__tests__/logger.test.js +123 -0
- package/dist/logger/__tests__/logger.test.js.map +1 -0
- package/dist/logger/index.d.ts +12 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +120 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/server/__tests__/providers-route.test.d.ts +2 -0
- package/dist/server/__tests__/providers-route.test.d.ts.map +1 -0
- package/dist/server/__tests__/providers-route.test.js +225 -0
- package/dist/server/__tests__/providers-route.test.js.map +1 -0
- package/dist/server/__tests__/proxy.test.d.ts +2 -0
- package/dist/server/__tests__/proxy.test.d.ts.map +1 -0
- package/dist/server/__tests__/proxy.test.js +96 -0
- package/dist/server/__tests__/proxy.test.js.map +1 -0
- package/dist/server/__tests__/server.test.d.ts +2 -0
- package/dist/server/__tests__/server.test.d.ts.map +1 -0
- package/dist/server/__tests__/server.test.js +124 -0
- package/dist/server/__tests__/server.test.js.map +1 -0
- package/dist/server/__tests__/ui-route.test.d.ts +2 -0
- package/dist/server/__tests__/ui-route.test.d.ts.map +1 -0
- package/dist/server/__tests__/ui-route.test.js +368 -0
- package/dist/server/__tests__/ui-route.test.js.map +1 -0
- package/dist/server/auth.d.ts +3 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +16 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/data-push.d.ts +6 -0
- package/dist/server/data-push.d.ts.map +1 -0
- package/dist/server/data-push.js +33 -0
- package/dist/server/data-push.js.map +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +50 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middleware/__tests__/request-id.test.d.ts +2 -0
- package/dist/server/middleware/__tests__/request-id.test.d.ts.map +1 -0
- package/dist/server/middleware/__tests__/request-id.test.js +29 -0
- package/dist/server/middleware/__tests__/request-id.test.js.map +1 -0
- package/dist/server/middleware/request-id.d.ts +3 -0
- package/dist/server/middleware/request-id.d.ts.map +1 -0
- package/dist/server/middleware/request-id.js +13 -0
- package/dist/server/middleware/request-id.js.map +1 -0
- package/dist/server/providers-route.d.ts +3 -0
- package/dist/server/providers-route.d.ts.map +1 -0
- package/dist/server/providers-route.js +54 -0
- package/dist/server/providers-route.js.map +1 -0
- package/dist/server/proxy.d.ts +25 -0
- package/dist/server/proxy.d.ts.map +1 -0
- package/dist/server/proxy.js +400 -0
- package/dist/server/proxy.js.map +1 -0
- package/dist/server/ui-route.d.ts +3 -0
- package/dist/server/ui-route.d.ts.map +1 -0
- package/dist/server/ui-route.js +375 -0
- package/dist/server/ui-route.js.map +1 -0
- package/dist/tools/curl.tool.d.ts +3 -0
- package/dist/tools/curl.tool.d.ts.map +1 -0
- package/dist/tools/curl.tool.js +31 -0
- package/dist/tools/curl.tool.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/probe.tool.d.ts +9 -0
- package/dist/tools/probe.tool.d.ts.map +1 -0
- package/dist/tools/probe.tool.js +26 -0
- package/dist/tools/probe.tool.js.map +1 -0
- package/dist/tools/registry.d.ts +8 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +23 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +29 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +10 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types/api.d.ts +21 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +2 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/config.d.ts +28 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/log.d.ts +14 -0
- package/dist/types/log.d.ts.map +1 -0
- package/dist/types/log.js +2 -0
- package/dist/types/log.js.map +1 -0
- package/dist/types/pm2.d.ts +10 -0
- package/dist/types/pm2.d.ts.map +1 -0
- package/dist/types/pm2.js +2 -0
- package/dist/types/pm2.js.map +1 -0
- package/dist/ui/assets/abap-BdImnpbu.js +2 -0
- package/dist/ui/assets/abap-BdImnpbu.js.map +1 -0
- package/dist/ui/assets/actionscript-3-CoDkCxhg.js +2 -0
- package/dist/ui/assets/actionscript-3-CoDkCxhg.js.map +1 -0
- package/dist/ui/assets/ada-bCR0ucgS.js +2 -0
- package/dist/ui/assets/ada-bCR0ucgS.js.map +1 -0
- package/dist/ui/assets/andromeeda-C4gqWexZ.js +2 -0
- package/dist/ui/assets/andromeeda-C4gqWexZ.js.map +1 -0
- package/dist/ui/assets/angular-html-DA-rfuFy.js +2 -0
- package/dist/ui/assets/angular-html-DA-rfuFy.js.map +1 -0
- package/dist/ui/assets/angular-ts-BrjP3tb8.js +2 -0
- package/dist/ui/assets/angular-ts-BrjP3tb8.js.map +1 -0
- package/dist/ui/assets/apache-Pmp26Uib.js +2 -0
- package/dist/ui/assets/apache-Pmp26Uib.js.map +1 -0
- package/dist/ui/assets/apex-Dqspr-GT.js +2 -0
- package/dist/ui/assets/apex-Dqspr-GT.js.map +1 -0
- package/dist/ui/assets/apl-CORt7UWP.js +2 -0
- package/dist/ui/assets/apl-CORt7UWP.js.map +1 -0
- package/dist/ui/assets/applescript-Co6uUVPk.js +2 -0
- package/dist/ui/assets/applescript-Co6uUVPk.js.map +1 -0
- package/dist/ui/assets/ara-BRHolxvo.js +2 -0
- package/dist/ui/assets/ara-BRHolxvo.js.map +1 -0
- package/dist/ui/assets/asciidoc-Ve4PFQV2.js +2 -0
- package/dist/ui/assets/asciidoc-Ve4PFQV2.js.map +1 -0
- package/dist/ui/assets/asm-D_Q5rh1f.js +2 -0
- package/dist/ui/assets/asm-D_Q5rh1f.js.map +1 -0
- package/dist/ui/assets/astro-HNnZUWAn.js +2 -0
- package/dist/ui/assets/astro-HNnZUWAn.js.map +1 -0
- package/dist/ui/assets/aurora-x-D-2ljcwZ.js +2 -0
- package/dist/ui/assets/aurora-x-D-2ljcwZ.js.map +1 -0
- package/dist/ui/assets/awk-DMzUqQB5.js +2 -0
- package/dist/ui/assets/awk-DMzUqQB5.js.map +1 -0
- package/dist/ui/assets/ayu-dark-DYE7WIF3.js +2 -0
- package/dist/ui/assets/ayu-dark-DYE7WIF3.js.map +1 -0
- package/dist/ui/assets/ayu-light-BA47KaF1.js +2 -0
- package/dist/ui/assets/ayu-light-BA47KaF1.js.map +1 -0
- package/dist/ui/assets/ayu-mirage-32ctXXKs.js +2 -0
- package/dist/ui/assets/ayu-mirage-32ctXXKs.js.map +1 -0
- package/dist/ui/assets/ballerina-BFfxhgS-.js +2 -0
- package/dist/ui/assets/ballerina-BFfxhgS-.js.map +1 -0
- package/dist/ui/assets/bat-BkioyH1T.js +2 -0
- package/dist/ui/assets/bat-BkioyH1T.js.map +1 -0
- package/dist/ui/assets/beancount-k_qm7-4y.js +2 -0
- package/dist/ui/assets/beancount-k_qm7-4y.js.map +1 -0
- package/dist/ui/assets/berry-uYugtg8r.js +2 -0
- package/dist/ui/assets/berry-uYugtg8r.js.map +1 -0
- package/dist/ui/assets/bibtex-CHM0blh-.js +2 -0
- package/dist/ui/assets/bibtex-CHM0blh-.js.map +1 -0
- package/dist/ui/assets/bicep-Bmn6On1c.js +2 -0
- package/dist/ui/assets/bicep-Bmn6On1c.js.map +1 -0
- package/dist/ui/assets/bird2-BIv1doCn.js +2 -0
- package/dist/ui/assets/bird2-BIv1doCn.js.map +1 -0
- package/dist/ui/assets/blade-2xfisSek.js +2 -0
- package/dist/ui/assets/blade-2xfisSek.js.map +1 -0
- package/dist/ui/assets/bsl-BO_Y6i37.js +2 -0
- package/dist/ui/assets/bsl-BO_Y6i37.js.map +1 -0
- package/dist/ui/assets/c-BIGW1oBm.js +2 -0
- package/dist/ui/assets/c-BIGW1oBm.js.map +1 -0
- package/dist/ui/assets/c3-MRO5bC_T.js +2 -0
- package/dist/ui/assets/c3-MRO5bC_T.js.map +1 -0
- package/dist/ui/assets/cadence-Bv_4Rxtq.js +2 -0
- package/dist/ui/assets/cadence-Bv_4Rxtq.js.map +1 -0
- package/dist/ui/assets/cairo-KRGpt6FW.js +2 -0
- package/dist/ui/assets/cairo-KRGpt6FW.js.map +1 -0
- package/dist/ui/assets/catppuccin-frappe-DFWUc33u.js +2 -0
- package/dist/ui/assets/catppuccin-frappe-DFWUc33u.js.map +1 -0
- package/dist/ui/assets/catppuccin-latte-C9dUb6Cb.js +2 -0
- package/dist/ui/assets/catppuccin-latte-C9dUb6Cb.js.map +1 -0
- package/dist/ui/assets/catppuccin-macchiato-DQyhUUbL.js +2 -0
- package/dist/ui/assets/catppuccin-macchiato-DQyhUUbL.js.map +1 -0
- package/dist/ui/assets/catppuccin-mocha-D87Tk5Gz.js +2 -0
- package/dist/ui/assets/catppuccin-mocha-D87Tk5Gz.js.map +1 -0
- package/dist/ui/assets/clarity-D53aC0YG.js +2 -0
- package/dist/ui/assets/clarity-D53aC0YG.js.map +1 -0
- package/dist/ui/assets/clojure-P80f7IUj.js +2 -0
- package/dist/ui/assets/clojure-P80f7IUj.js.map +1 -0
- package/dist/ui/assets/cmake-D1j8_8rp.js +2 -0
- package/dist/ui/assets/cmake-D1j8_8rp.js.map +1 -0
- package/dist/ui/assets/cobol-nBiQ_Alo.js +2 -0
- package/dist/ui/assets/cobol-nBiQ_Alo.js.map +1 -0
- package/dist/ui/assets/codeowners-Bp6g37R7.js +2 -0
- package/dist/ui/assets/codeowners-Bp6g37R7.js.map +1 -0
- package/dist/ui/assets/codeql-DsOJ9woJ.js +2 -0
- package/dist/ui/assets/codeql-DsOJ9woJ.js.map +1 -0
- package/dist/ui/assets/coffee-Ch7k5sss.js +2 -0
- package/dist/ui/assets/coffee-Ch7k5sss.js.map +1 -0
- package/dist/ui/assets/common-lisp-Cg-RD9OK.js +2 -0
- package/dist/ui/assets/common-lisp-Cg-RD9OK.js.map +1 -0
- package/dist/ui/assets/coq-DkFqJrB1.js +2 -0
- package/dist/ui/assets/coq-DkFqJrB1.js.map +1 -0
- package/dist/ui/assets/cpp-UfJy6YNI.js +2 -0
- package/dist/ui/assets/cpp-UfJy6YNI.js.map +1 -0
- package/dist/ui/assets/crystal-DGywbUpC.js +2 -0
- package/dist/ui/assets/crystal-DGywbUpC.js.map +1 -0
- package/dist/ui/assets/csharp-DSvCPggb.js +2 -0
- package/dist/ui/assets/csharp-DSvCPggb.js.map +1 -0
- package/dist/ui/assets/css-CLj8gQPS.js +2 -0
- package/dist/ui/assets/css-CLj8gQPS.js.map +1 -0
- package/dist/ui/assets/csv-fuZLfV_i.js +2 -0
- package/dist/ui/assets/csv-fuZLfV_i.js.map +1 -0
- package/dist/ui/assets/cue-D82EKSYY.js +2 -0
- package/dist/ui/assets/cue-D82EKSYY.js.map +1 -0
- package/dist/ui/assets/cypher-COkxafJQ.js +2 -0
- package/dist/ui/assets/cypher-COkxafJQ.js.map +1 -0
- package/dist/ui/assets/d-85-TOEBH.js +2 -0
- package/dist/ui/assets/d-85-TOEBH.js.map +1 -0
- package/dist/ui/assets/dark-plus-C3mMm8J8.js +2 -0
- package/dist/ui/assets/dark-plus-C3mMm8J8.js.map +1 -0
- package/dist/ui/assets/dart-bE4Kk8sk.js +2 -0
- package/dist/ui/assets/dart-bE4Kk8sk.js.map +1 -0
- package/dist/ui/assets/dax-CEL-wOlO.js +2 -0
- package/dist/ui/assets/dax-CEL-wOlO.js.map +1 -0
- package/dist/ui/assets/desktop-BmXAJ9_W.js +2 -0
- package/dist/ui/assets/desktop-BmXAJ9_W.js.map +1 -0
- package/dist/ui/assets/diff-D97Zzqfu.js +2 -0
- package/dist/ui/assets/diff-D97Zzqfu.js.map +1 -0
- package/dist/ui/assets/docker-BcOcwvcX.js +2 -0
- package/dist/ui/assets/docker-BcOcwvcX.js.map +1 -0
- package/dist/ui/assets/dotenv-Da5cRb03.js +2 -0
- package/dist/ui/assets/dotenv-Da5cRb03.js.map +1 -0
- package/dist/ui/assets/dracula-BzJJZx-M.js +2 -0
- package/dist/ui/assets/dracula-BzJJZx-M.js.map +1 -0
- package/dist/ui/assets/dracula-soft-BXkSAIEj.js +2 -0
- package/dist/ui/assets/dracula-soft-BXkSAIEj.js.map +1 -0
- package/dist/ui/assets/dream-maker-BtqSS_iP.js +2 -0
- package/dist/ui/assets/dream-maker-BtqSS_iP.js.map +1 -0
- package/dist/ui/assets/edge-FbVlp4U3.js +2 -0
- package/dist/ui/assets/edge-FbVlp4U3.js.map +1 -0
- package/dist/ui/assets/elixir-CkH2-t6x.js +2 -0
- package/dist/ui/assets/elixir-CkH2-t6x.js.map +1 -0
- package/dist/ui/assets/elm-DbKCFpqz.js +2 -0
- package/dist/ui/assets/elm-DbKCFpqz.js.map +1 -0
- package/dist/ui/assets/emacs-lisp-CXvaQtF9.js +2 -0
- package/dist/ui/assets/emacs-lisp-CXvaQtF9.js.map +1 -0
- package/dist/ui/assets/erb-Dm6A9KJ5.js +2 -0
- package/dist/ui/assets/erb-Dm6A9KJ5.js.map +1 -0
- package/dist/ui/assets/erlang-DsQrWhSR.js +2 -0
- package/dist/ui/assets/erlang-DsQrWhSR.js.map +1 -0
- package/dist/ui/assets/everforest-dark-BgDCqdQA.js +2 -0
- package/dist/ui/assets/everforest-dark-BgDCqdQA.js.map +1 -0
- package/dist/ui/assets/everforest-light-C8M2exoo.js +2 -0
- package/dist/ui/assets/everforest-light-C8M2exoo.js.map +1 -0
- package/dist/ui/assets/fennel-BYunw83y.js +2 -0
- package/dist/ui/assets/fennel-BYunw83y.js.map +1 -0
- package/dist/ui/assets/fish-BvzEVeQv.js +2 -0
- package/dist/ui/assets/fish-BvzEVeQv.js.map +1 -0
- package/dist/ui/assets/fluent-C4IJs8-o.js +2 -0
- package/dist/ui/assets/fluent-C4IJs8-o.js.map +1 -0
- package/dist/ui/assets/fortran-fixed-form-CkoXwp7k.js +2 -0
- package/dist/ui/assets/fortran-fixed-form-CkoXwp7k.js.map +1 -0
- package/dist/ui/assets/fortran-free-form-BxgE0vQu.js +2 -0
- package/dist/ui/assets/fortran-free-form-BxgE0vQu.js.map +1 -0
- package/dist/ui/assets/fsharp-CXgrBDvD.js +2 -0
- package/dist/ui/assets/fsharp-CXgrBDvD.js.map +1 -0
- package/dist/ui/assets/gdresource-BOOCDP_w.js +2 -0
- package/dist/ui/assets/gdresource-BOOCDP_w.js.map +1 -0
- package/dist/ui/assets/gdscript-C5YyOfLZ.js +2 -0
- package/dist/ui/assets/gdscript-C5YyOfLZ.js.map +1 -0
- package/dist/ui/assets/gdshader-DkwncUOv.js +2 -0
- package/dist/ui/assets/gdshader-DkwncUOv.js.map +1 -0
- package/dist/ui/assets/genie-D0YGMca9.js +2 -0
- package/dist/ui/assets/genie-D0YGMca9.js.map +1 -0
- package/dist/ui/assets/gherkin-DyxjwDmM.js +2 -0
- package/dist/ui/assets/gherkin-DyxjwDmM.js.map +1 -0
- package/dist/ui/assets/git-commit-F4YmCXRG.js +2 -0
- package/dist/ui/assets/git-commit-F4YmCXRG.js.map +1 -0
- package/dist/ui/assets/git-rebase-r7XF79zn.js +2 -0
- package/dist/ui/assets/git-rebase-r7XF79zn.js.map +1 -0
- package/dist/ui/assets/github-dark-DHJKELXO.js +2 -0
- package/dist/ui/assets/github-dark-DHJKELXO.js.map +1 -0
- package/dist/ui/assets/github-dark-default-Cuk6v7N8.js +2 -0
- package/dist/ui/assets/github-dark-default-Cuk6v7N8.js.map +1 -0
- package/dist/ui/assets/github-dark-dimmed-DH5Ifo-i.js +2 -0
- package/dist/ui/assets/github-dark-dimmed-DH5Ifo-i.js.map +1 -0
- package/dist/ui/assets/github-dark-high-contrast-E3gJ1_iC.js +2 -0
- package/dist/ui/assets/github-dark-high-contrast-E3gJ1_iC.js.map +1 -0
- package/dist/ui/assets/github-light-DAi9KRSo.js +2 -0
- package/dist/ui/assets/github-light-DAi9KRSo.js.map +1 -0
- package/dist/ui/assets/github-light-default-D7oLnXFd.js +2 -0
- package/dist/ui/assets/github-light-default-D7oLnXFd.js.map +1 -0
- package/dist/ui/assets/github-light-high-contrast-BfjtVDDH.js +2 -0
- package/dist/ui/assets/github-light-high-contrast-BfjtVDDH.js.map +1 -0
- package/dist/ui/assets/gleam-BspZqrRM.js +2 -0
- package/dist/ui/assets/gleam-BspZqrRM.js.map +1 -0
- package/dist/ui/assets/glimmer-js-ByusRIyA.js +2 -0
- package/dist/ui/assets/glimmer-js-ByusRIyA.js.map +1 -0
- package/dist/ui/assets/glimmer-ts-BfAWNZQY.js +2 -0
- package/dist/ui/assets/glimmer-ts-BfAWNZQY.js.map +1 -0
- package/dist/ui/assets/glsl-DplSGwfg.js +2 -0
- package/dist/ui/assets/glsl-DplSGwfg.js.map +1 -0
- package/dist/ui/assets/gn-n2N0HUVH.js +2 -0
- package/dist/ui/assets/gn-n2N0HUVH.js.map +1 -0
- package/dist/ui/assets/gnuplot-DdkO51Og.js +2 -0
- package/dist/ui/assets/gnuplot-DdkO51Og.js.map +1 -0
- package/dist/ui/assets/go-C27-OAKa.js +2 -0
- package/dist/ui/assets/go-C27-OAKa.js.map +1 -0
- package/dist/ui/assets/graphql-ChdNCCLP.js +2 -0
- package/dist/ui/assets/graphql-ChdNCCLP.js.map +1 -0
- package/dist/ui/assets/groovy-gcz8RCvz.js +2 -0
- package/dist/ui/assets/groovy-gcz8RCvz.js.map +1 -0
- package/dist/ui/assets/gruvbox-dark-hard-CFHQjOhq.js +2 -0
- package/dist/ui/assets/gruvbox-dark-hard-CFHQjOhq.js.map +1 -0
- package/dist/ui/assets/gruvbox-dark-medium-GsRaNv29.js +2 -0
- package/dist/ui/assets/gruvbox-dark-medium-GsRaNv29.js.map +1 -0
- package/dist/ui/assets/gruvbox-dark-soft-CVdnzihN.js +2 -0
- package/dist/ui/assets/gruvbox-dark-soft-CVdnzihN.js.map +1 -0
- package/dist/ui/assets/gruvbox-light-hard-CH1njM8p.js +2 -0
- package/dist/ui/assets/gruvbox-light-hard-CH1njM8p.js.map +1 -0
- package/dist/ui/assets/gruvbox-light-medium-DRw_LuNl.js +2 -0
- package/dist/ui/assets/gruvbox-light-medium-DRw_LuNl.js.map +1 -0
- package/dist/ui/assets/gruvbox-light-soft-hJgmCMqR.js +2 -0
- package/dist/ui/assets/gruvbox-light-soft-hJgmCMqR.js.map +1 -0
- package/dist/ui/assets/hack-DbPARsA_.js +2 -0
- package/dist/ui/assets/hack-DbPARsA_.js.map +1 -0
- package/dist/ui/assets/haml-D5jkg6IW.js +2 -0
- package/dist/ui/assets/haml-D5jkg6IW.js.map +1 -0
- package/dist/ui/assets/handlebars-BpdQsYii.js +2 -0
- package/dist/ui/assets/handlebars-BpdQsYii.js.map +1 -0
- package/dist/ui/assets/haskell-Df6bDoY_.js +2 -0
- package/dist/ui/assets/haskell-Df6bDoY_.js.map +1 -0
- package/dist/ui/assets/haxe-CzTSHFRz.js +2 -0
- package/dist/ui/assets/haxe-CzTSHFRz.js.map +1 -0
- package/dist/ui/assets/hcl-BWvSN4gD.js +2 -0
- package/dist/ui/assets/hcl-BWvSN4gD.js.map +1 -0
- package/dist/ui/assets/hjson-D5-asLiD.js +2 -0
- package/dist/ui/assets/hjson-D5-asLiD.js.map +1 -0
- package/dist/ui/assets/hlsl-D3lLCCz7.js +2 -0
- package/dist/ui/assets/hlsl-D3lLCCz7.js.map +1 -0
- package/dist/ui/assets/horizon-BUw7H-hv.js +2 -0
- package/dist/ui/assets/horizon-BUw7H-hv.js.map +1 -0
- package/dist/ui/assets/horizon-bright-CUuTKBJd.js +2 -0
- package/dist/ui/assets/horizon-bright-CUuTKBJd.js.map +1 -0
- package/dist/ui/assets/houston-DnULxvSX.js +2 -0
- package/dist/ui/assets/houston-DnULxvSX.js.map +1 -0
- package/dist/ui/assets/html-derivative-DlHx6ybY.js +2 -0
- package/dist/ui/assets/html-derivative-DlHx6ybY.js.map +1 -0
- package/dist/ui/assets/html-pp8916En.js +2 -0
- package/dist/ui/assets/html-pp8916En.js.map +1 -0
- package/dist/ui/assets/http-jrhK8wxY.js +2 -0
- package/dist/ui/assets/http-jrhK8wxY.js.map +1 -0
- package/dist/ui/assets/hurl-irOxFIW8.js +2 -0
- package/dist/ui/assets/hurl-irOxFIW8.js.map +1 -0
- package/dist/ui/assets/hxml-Bvhsp5Yf.js +2 -0
- package/dist/ui/assets/hxml-Bvhsp5Yf.js.map +1 -0
- package/dist/ui/assets/hy-DFXneXwc.js +2 -0
- package/dist/ui/assets/hy-DFXneXwc.js.map +1 -0
- package/dist/ui/assets/imba-DGztddWO.js +2 -0
- package/dist/ui/assets/imba-DGztddWO.js.map +1 -0
- package/dist/ui/assets/index-Bm8Gh3sG.css +1 -0
- package/dist/ui/assets/index-DJGbAwr0.js +1791 -0
- package/dist/ui/assets/index-DJGbAwr0.js.map +1 -0
- package/dist/ui/assets/ini-BEwlwnbL.js +2 -0
- package/dist/ui/assets/ini-BEwlwnbL.js.map +1 -0
- package/dist/ui/assets/java-CylS5w8V.js +2 -0
- package/dist/ui/assets/java-CylS5w8V.js.map +1 -0
- package/dist/ui/assets/javascript-wDzz0qaB.js +2 -0
- package/dist/ui/assets/javascript-wDzz0qaB.js.map +1 -0
- package/dist/ui/assets/jinja-f2NsQr07.js +2 -0
- package/dist/ui/assets/jinja-f2NsQr07.js.map +1 -0
- package/dist/ui/assets/jison-wvAkD_A8.js +2 -0
- package/dist/ui/assets/jison-wvAkD_A8.js.map +1 -0
- package/dist/ui/assets/json-Cp-IABpG.js +2 -0
- package/dist/ui/assets/json-Cp-IABpG.js.map +1 -0
- package/dist/ui/assets/json5-C9tS-k6U.js +2 -0
- package/dist/ui/assets/json5-C9tS-k6U.js.map +1 -0
- package/dist/ui/assets/jsonc-Des-eS-w.js +2 -0
- package/dist/ui/assets/jsonc-Des-eS-w.js.map +1 -0
- package/dist/ui/assets/jsonl-DcaNXYhu.js +2 -0
- package/dist/ui/assets/jsonl-DcaNXYhu.js.map +1 -0
- package/dist/ui/assets/jsonnet-DFQXde-d.js +2 -0
- package/dist/ui/assets/jsonnet-DFQXde-d.js.map +1 -0
- package/dist/ui/assets/jssm-C2t-YnRu.js +2 -0
- package/dist/ui/assets/jssm-C2t-YnRu.js.map +1 -0
- package/dist/ui/assets/jsx-g9-lgVsj.js +2 -0
- package/dist/ui/assets/jsx-g9-lgVsj.js.map +1 -0
- package/dist/ui/assets/julia-D7OTSIA_.js +2 -0
- package/dist/ui/assets/julia-D7OTSIA_.js.map +1 -0
- package/dist/ui/assets/just-CUsbIsdP.js +2 -0
- package/dist/ui/assets/just-CUsbIsdP.js.map +1 -0
- package/dist/ui/assets/kanagawa-dragon-CkXjmgJE.js +2 -0
- package/dist/ui/assets/kanagawa-dragon-CkXjmgJE.js.map +1 -0
- package/dist/ui/assets/kanagawa-lotus-CfQXZHmo.js +2 -0
- package/dist/ui/assets/kanagawa-lotus-CfQXZHmo.js.map +1 -0
- package/dist/ui/assets/kanagawa-wave-DWedfzmr.js +2 -0
- package/dist/ui/assets/kanagawa-wave-DWedfzmr.js.map +1 -0
- package/dist/ui/assets/kdl-DV7GczEv.js +2 -0
- package/dist/ui/assets/kdl-DV7GczEv.js.map +1 -0
- package/dist/ui/assets/kotlin-BdnUsdx6.js +2 -0
- package/dist/ui/assets/kotlin-BdnUsdx6.js.map +1 -0
- package/dist/ui/assets/kusto-wEQ09or8.js +2 -0
- package/dist/ui/assets/kusto-wEQ09or8.js.map +1 -0
- package/dist/ui/assets/laserwave-DUszq2jm.js +2 -0
- package/dist/ui/assets/laserwave-DUszq2jm.js.map +1 -0
- package/dist/ui/assets/latex-CaSxy8MP.js +2 -0
- package/dist/ui/assets/latex-CaSxy8MP.js.map +1 -0
- package/dist/ui/assets/lean-BZvkOJ9d.js +2 -0
- package/dist/ui/assets/lean-BZvkOJ9d.js.map +1 -0
- package/dist/ui/assets/less-B1dDrJ26.js +2 -0
- package/dist/ui/assets/less-B1dDrJ26.js.map +1 -0
- package/dist/ui/assets/light-plus-B7mTdjB0.js +2 -0
- package/dist/ui/assets/light-plus-B7mTdjB0.js.map +1 -0
- package/dist/ui/assets/liquid-C0sCDyMI.js +2 -0
- package/dist/ui/assets/liquid-C0sCDyMI.js.map +1 -0
- package/dist/ui/assets/llvm-DjAJT7YJ.js +2 -0
- package/dist/ui/assets/llvm-DjAJT7YJ.js.map +1 -0
- package/dist/ui/assets/log-2UxHyX5q.js +2 -0
- package/dist/ui/assets/log-2UxHyX5q.js.map +1 -0
- package/dist/ui/assets/logo-BtOb2qkB.js +2 -0
- package/dist/ui/assets/logo-BtOb2qkB.js.map +1 -0
- package/dist/ui/assets/lua-BaeVxFsk.js +2 -0
- package/dist/ui/assets/lua-BaeVxFsk.js.map +1 -0
- package/dist/ui/assets/luau-KW6xsasC.js +2 -0
- package/dist/ui/assets/luau-KW6xsasC.js.map +1 -0
- package/dist/ui/assets/make-CHLpvVh8.js +2 -0
- package/dist/ui/assets/make-CHLpvVh8.js.map +1 -0
- package/dist/ui/assets/markdown-Cvjx9yec.js +2 -0
- package/dist/ui/assets/markdown-Cvjx9yec.js.map +1 -0
- package/dist/ui/assets/marko-DjSrsDqO.js +2 -0
- package/dist/ui/assets/marko-DjSrsDqO.js.map +1 -0
- package/dist/ui/assets/material-theme-D5KoaKCx.js +2 -0
- package/dist/ui/assets/material-theme-D5KoaKCx.js.map +1 -0
- package/dist/ui/assets/material-theme-darker-BfHTSMKl.js +2 -0
- package/dist/ui/assets/material-theme-darker-BfHTSMKl.js.map +1 -0
- package/dist/ui/assets/material-theme-lighter-B0m2ddpp.js +2 -0
- package/dist/ui/assets/material-theme-lighter-B0m2ddpp.js.map +1 -0
- package/dist/ui/assets/material-theme-ocean-CyktbL80.js +2 -0
- package/dist/ui/assets/material-theme-ocean-CyktbL80.js.map +1 -0
- package/dist/ui/assets/material-theme-palenight-Csfq5Kiy.js +2 -0
- package/dist/ui/assets/material-theme-palenight-Csfq5Kiy.js.map +1 -0
- package/dist/ui/assets/matlab-D7o27uSR.js +2 -0
- package/dist/ui/assets/matlab-D7o27uSR.js.map +1 -0
- package/dist/ui/assets/mdc-DTYItulj.js +2 -0
- package/dist/ui/assets/mdc-DTYItulj.js.map +1 -0
- package/dist/ui/assets/mdx-Cmh6b_Ma.js +2 -0
- package/dist/ui/assets/mdx-Cmh6b_Ma.js.map +1 -0
- package/dist/ui/assets/mermaid-mWjccvbQ.js +2 -0
- package/dist/ui/assets/mermaid-mWjccvbQ.js.map +1 -0
- package/dist/ui/assets/min-dark-CafNBF8u.js +2 -0
- package/dist/ui/assets/min-dark-CafNBF8u.js.map +1 -0
- package/dist/ui/assets/min-light-CTRr51gU.js +2 -0
- package/dist/ui/assets/min-light-CTRr51gU.js.map +1 -0
- package/dist/ui/assets/mipsasm-CKIfxQSi.js +2 -0
- package/dist/ui/assets/mipsasm-CKIfxQSi.js.map +1 -0
- package/dist/ui/assets/mojo-rZm6bMo-.js +2 -0
- package/dist/ui/assets/mojo-rZm6bMo-.js.map +1 -0
- package/dist/ui/assets/monokai-D4h5O-jR.js +2 -0
- package/dist/ui/assets/monokai-D4h5O-jR.js.map +1 -0
- package/dist/ui/assets/moonbit-_H4v1dQx.js +2 -0
- package/dist/ui/assets/moonbit-_H4v1dQx.js.map +1 -0
- package/dist/ui/assets/move-IF9eRakj.js +2 -0
- package/dist/ui/assets/move-IF9eRakj.js.map +1 -0
- package/dist/ui/assets/narrat-DRg8JJMk.js +2 -0
- package/dist/ui/assets/narrat-DRg8JJMk.js.map +1 -0
- package/dist/ui/assets/nextflow-C-mBbutL.js +2 -0
- package/dist/ui/assets/nextflow-C-mBbutL.js.map +1 -0
- package/dist/ui/assets/nextflow-groovy-vE_lwT2v.js +2 -0
- package/dist/ui/assets/nextflow-groovy-vE_lwT2v.js.map +1 -0
- package/dist/ui/assets/nginx-BpAMiNFr.js +2 -0
- package/dist/ui/assets/nginx-BpAMiNFr.js.map +1 -0
- package/dist/ui/assets/night-owl-C39BiMTA.js +2 -0
- package/dist/ui/assets/night-owl-C39BiMTA.js.map +1 -0
- package/dist/ui/assets/night-owl-light-CMTm3GFP.js +2 -0
- package/dist/ui/assets/night-owl-light-CMTm3GFP.js.map +1 -0
- package/dist/ui/assets/nim-BIad80T-.js +2 -0
- package/dist/ui/assets/nim-BIad80T-.js.map +1 -0
- package/dist/ui/assets/nix-CwoSXNpI.js +2 -0
- package/dist/ui/assets/nix-CwoSXNpI.js.map +1 -0
- package/dist/ui/assets/nord-Ddv68eIx.js +2 -0
- package/dist/ui/assets/nord-Ddv68eIx.js.map +1 -0
- package/dist/ui/assets/nushell-Cz2AlsmD.js +2 -0
- package/dist/ui/assets/nushell-Cz2AlsmD.js.map +1 -0
- package/dist/ui/assets/objective-c-DXmwc3jG.js +2 -0
- package/dist/ui/assets/objective-c-DXmwc3jG.js.map +1 -0
- package/dist/ui/assets/objective-cpp-CLxacb5B.js +2 -0
- package/dist/ui/assets/objective-cpp-CLxacb5B.js.map +1 -0
- package/dist/ui/assets/ocaml-C0hk2d4L.js +2 -0
- package/dist/ui/assets/ocaml-C0hk2d4L.js.map +1 -0
- package/dist/ui/assets/odin-BBf5iR-q.js +2 -0
- package/dist/ui/assets/odin-BBf5iR-q.js.map +1 -0
- package/dist/ui/assets/one-dark-pro-DVMEJ2y_.js +2 -0
- package/dist/ui/assets/one-dark-pro-DVMEJ2y_.js.map +1 -0
- package/dist/ui/assets/one-light-C3Wv6jpd.js +2 -0
- package/dist/ui/assets/one-light-C3Wv6jpd.js.map +1 -0
- package/dist/ui/assets/openscad-C4EeE6gA.js +2 -0
- package/dist/ui/assets/openscad-C4EeE6gA.js.map +1 -0
- package/dist/ui/assets/pascal-D93ZcfNL.js +2 -0
- package/dist/ui/assets/pascal-D93ZcfNL.js.map +1 -0
- package/dist/ui/assets/perl-B9cMNwum.js +2 -0
- package/dist/ui/assets/perl-B9cMNwum.js.map +1 -0
- package/dist/ui/assets/php-Csjmro_R.js +2 -0
- package/dist/ui/assets/php-Csjmro_R.js.map +1 -0
- package/dist/ui/assets/pierre-dark-CyvmCCZW.js +2 -0
- package/dist/ui/assets/pierre-dark-CyvmCCZW.js.map +1 -0
- package/dist/ui/assets/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js +2 -0
- package/dist/ui/assets/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js.map +1 -0
- package/dist/ui/assets/pierre-dark-soft-BHGpRqa4.js +2 -0
- package/dist/ui/assets/pierre-dark-soft-BHGpRqa4.js.map +1 -0
- package/dist/ui/assets/pierre-dark-tritanopia-Beq2gCRQ.js +2 -0
- package/dist/ui/assets/pierre-dark-tritanopia-Beq2gCRQ.js.map +1 -0
- package/dist/ui/assets/pierre-dark-vibrant-BWBVywrn.js +2 -0
- package/dist/ui/assets/pierre-dark-vibrant-BWBVywrn.js.map +1 -0
- package/dist/ui/assets/pierre-light-480U9XYS.js +2 -0
- package/dist/ui/assets/pierre-light-480U9XYS.js.map +1 -0
- package/dist/ui/assets/pierre-light-protanopia-deuteranopia-CaVOBURG.js +2 -0
- package/dist/ui/assets/pierre-light-protanopia-deuteranopia-CaVOBURG.js.map +1 -0
- package/dist/ui/assets/pierre-light-soft-CVdyfjmI.js +2 -0
- package/dist/ui/assets/pierre-light-soft-CVdyfjmI.js.map +1 -0
- package/dist/ui/assets/pierre-light-tritanopia-B4_gpKOM.js +2 -0
- package/dist/ui/assets/pierre-light-tritanopia-B4_gpKOM.js.map +1 -0
- package/dist/ui/assets/pierre-light-vibrant-DdTDNdfJ.js +2 -0
- package/dist/ui/assets/pierre-light-vibrant-DdTDNdfJ.js.map +1 -0
- package/dist/ui/assets/pkl-u5AG7uiY.js +2 -0
- package/dist/ui/assets/pkl-u5AG7uiY.js.map +1 -0
- package/dist/ui/assets/plastic-3e1v2bzS.js +2 -0
- package/dist/ui/assets/plastic-3e1v2bzS.js.map +1 -0
- package/dist/ui/assets/plsql-ChMvpjG-.js +2 -0
- package/dist/ui/assets/plsql-ChMvpjG-.js.map +1 -0
- package/dist/ui/assets/po-BTJTHyun.js +2 -0
- package/dist/ui/assets/po-BTJTHyun.js.map +1 -0
- package/dist/ui/assets/poimandres-CS3Unz2-.js +2 -0
- package/dist/ui/assets/poimandres-CS3Unz2-.js.map +1 -0
- package/dist/ui/assets/polar-C0HS_06l.js +2 -0
- package/dist/ui/assets/polar-C0HS_06l.js.map +1 -0
- package/dist/ui/assets/postcss-CXtECtnM.js +2 -0
- package/dist/ui/assets/postcss-CXtECtnM.js.map +1 -0
- package/dist/ui/assets/powerquery-CEu0bR-o.js +2 -0
- package/dist/ui/assets/powerquery-CEu0bR-o.js.map +1 -0
- package/dist/ui/assets/powershell-Dpen1YoG.js +2 -0
- package/dist/ui/assets/powershell-Dpen1YoG.js.map +1 -0
- package/dist/ui/assets/prisma-Dd19v3D-.js +2 -0
- package/dist/ui/assets/prisma-Dd19v3D-.js.map +1 -0
- package/dist/ui/assets/prolog-CbFg5uaA.js +2 -0
- package/dist/ui/assets/prolog-CbFg5uaA.js.map +1 -0
- package/dist/ui/assets/proto-C7zT0LnQ.js +2 -0
- package/dist/ui/assets/proto-C7zT0LnQ.js.map +1 -0
- package/dist/ui/assets/pug-DKIMFp6K.js +2 -0
- package/dist/ui/assets/pug-DKIMFp6K.js.map +1 -0
- package/dist/ui/assets/puppet-BMWR74SV.js +2 -0
- package/dist/ui/assets/puppet-BMWR74SV.js.map +1 -0
- package/dist/ui/assets/purescript-CklMAg4u.js +2 -0
- package/dist/ui/assets/purescript-CklMAg4u.js.map +1 -0
- package/dist/ui/assets/python-B6aJPvgy.js +2 -0
- package/dist/ui/assets/python-B6aJPvgy.js.map +1 -0
- package/dist/ui/assets/qml-3beO22l8.js +2 -0
- package/dist/ui/assets/qml-3beO22l8.js.map +1 -0
- package/dist/ui/assets/qmldir-C8lEn-DE.js +2 -0
- package/dist/ui/assets/qmldir-C8lEn-DE.js.map +1 -0
- package/dist/ui/assets/qss-IeuSbFQv.js +2 -0
- package/dist/ui/assets/qss-IeuSbFQv.js.map +1 -0
- package/dist/ui/assets/r-Dspwwk_N.js +2 -0
- package/dist/ui/assets/r-Dspwwk_N.js.map +1 -0
- package/dist/ui/assets/racket-BqYA7rlc.js +2 -0
- package/dist/ui/assets/racket-BqYA7rlc.js.map +1 -0
- package/dist/ui/assets/raku-DXvB9xmW.js +2 -0
- package/dist/ui/assets/raku-DXvB9xmW.js.map +1 -0
- package/dist/ui/assets/razor-BjBPvh-w.js +2 -0
- package/dist/ui/assets/razor-BjBPvh-w.js.map +1 -0
- package/dist/ui/assets/red-bN70gL4F.js +2 -0
- package/dist/ui/assets/red-bN70gL4F.js.map +1 -0
- package/dist/ui/assets/reg-C-SQnVFl.js +2 -0
- package/dist/ui/assets/reg-C-SQnVFl.js.map +1 -0
- package/dist/ui/assets/regexp-CDVJQ6XC.js +2 -0
- package/dist/ui/assets/regexp-CDVJQ6XC.js.map +1 -0
- package/dist/ui/assets/rel-C3B-1QV4.js +2 -0
- package/dist/ui/assets/rel-C3B-1QV4.js.map +1 -0
- package/dist/ui/assets/riscv-BM1_JUlF.js +2 -0
- package/dist/ui/assets/riscv-BM1_JUlF.js.map +1 -0
- package/dist/ui/assets/ron-D8l8udqQ.js +2 -0
- package/dist/ui/assets/ron-D8l8udqQ.js.map +1 -0
- package/dist/ui/assets/rose-pine-dawn-DHQR4-dF.js +2 -0
- package/dist/ui/assets/rose-pine-dawn-DHQR4-dF.js.map +1 -0
- package/dist/ui/assets/rose-pine-moon-D4_iv3hh.js +2 -0
- package/dist/ui/assets/rose-pine-moon-D4_iv3hh.js.map +1 -0
- package/dist/ui/assets/rose-pine-qdsjHGoJ.js +2 -0
- package/dist/ui/assets/rose-pine-qdsjHGoJ.js.map +1 -0
- package/dist/ui/assets/rosmsg-BJDFO7_C.js +2 -0
- package/dist/ui/assets/rosmsg-BJDFO7_C.js.map +1 -0
- package/dist/ui/assets/rst-CpCqk9r5.js +2 -0
- package/dist/ui/assets/rst-CpCqk9r5.js.map +1 -0
- package/dist/ui/assets/ruby-DyJCeAvU.js +2 -0
- package/dist/ui/assets/ruby-DyJCeAvU.js.map +1 -0
- package/dist/ui/assets/rust-B1yitclQ.js +2 -0
- package/dist/ui/assets/rust-B1yitclQ.js.map +1 -0
- package/dist/ui/assets/sas-DEy46yEz.js +2 -0
- package/dist/ui/assets/sas-DEy46yEz.js.map +1 -0
- package/dist/ui/assets/sass-Cj5Yp3dK.js +2 -0
- package/dist/ui/assets/sass-Cj5Yp3dK.js.map +1 -0
- package/dist/ui/assets/scala-C151Ov-r.js +2 -0
- package/dist/ui/assets/scala-C151Ov-r.js.map +1 -0
- package/dist/ui/assets/scheme-C98Dy4si.js +2 -0
- package/dist/ui/assets/scheme-C98Dy4si.js.map +1 -0
- package/dist/ui/assets/scss-D5BDwBP9.js +2 -0
- package/dist/ui/assets/scss-D5BDwBP9.js.map +1 -0
- package/dist/ui/assets/sdbl-DVxCFoDh.js +2 -0
- package/dist/ui/assets/sdbl-DVxCFoDh.js.map +1 -0
- package/dist/ui/assets/shaderlab-Dg9Lc6iA.js +2 -0
- package/dist/ui/assets/shaderlab-Dg9Lc6iA.js.map +1 -0
- package/dist/ui/assets/shellscript-Yzrsuije.js +2 -0
- package/dist/ui/assets/shellscript-Yzrsuije.js.map +1 -0
- package/dist/ui/assets/shellsession-BADoaaVG.js +2 -0
- package/dist/ui/assets/shellsession-BADoaaVG.js.map +1 -0
- package/dist/ui/assets/slack-dark-BthQWCQV.js +2 -0
- package/dist/ui/assets/slack-dark-BthQWCQV.js.map +1 -0
- package/dist/ui/assets/slack-ochin-DqwNpetd.js +2 -0
- package/dist/ui/assets/slack-ochin-DqwNpetd.js.map +1 -0
- package/dist/ui/assets/smalltalk-BERRCDM3.js +2 -0
- package/dist/ui/assets/smalltalk-BERRCDM3.js.map +1 -0
- package/dist/ui/assets/snazzy-light-Bw305WKR.js +2 -0
- package/dist/ui/assets/snazzy-light-Bw305WKR.js.map +1 -0
- package/dist/ui/assets/solarized-dark-DXbdFlpD.js +2 -0
- package/dist/ui/assets/solarized-dark-DXbdFlpD.js.map +1 -0
- package/dist/ui/assets/solarized-light-L9t79GZl.js +2 -0
- package/dist/ui/assets/solarized-light-L9t79GZl.js.map +1 -0
- package/dist/ui/assets/solidity-rGO070M0.js +2 -0
- package/dist/ui/assets/solidity-rGO070M0.js.map +1 -0
- package/dist/ui/assets/soy-8wufbnw4.js +2 -0
- package/dist/ui/assets/soy-8wufbnw4.js.map +1 -0
- package/dist/ui/assets/sparql-rVzFXLq3.js +2 -0
- package/dist/ui/assets/sparql-rVzFXLq3.js.map +1 -0
- package/dist/ui/assets/splunk-BtCnVYZw.js +2 -0
- package/dist/ui/assets/splunk-BtCnVYZw.js.map +1 -0
- package/dist/ui/assets/sql-CRqJ_cUM.js +2 -0
- package/dist/ui/assets/sql-CRqJ_cUM.js.map +1 -0
- package/dist/ui/assets/ssh-config-_ykCGR6B.js +2 -0
- package/dist/ui/assets/ssh-config-_ykCGR6B.js.map +1 -0
- package/dist/ui/assets/stata-DI20mbqo.js +2 -0
- package/dist/ui/assets/stata-DI20mbqo.js.map +1 -0
- package/dist/ui/assets/stylus-BEDo0Tqx.js +2 -0
- package/dist/ui/assets/stylus-BEDo0Tqx.js.map +1 -0
- package/dist/ui/assets/surrealql-Bq5Q-fJD.js +2 -0
- package/dist/ui/assets/surrealql-Bq5Q-fJD.js.map +1 -0
- package/dist/ui/assets/svelte-Cy7k_4gC.js +2 -0
- package/dist/ui/assets/svelte-Cy7k_4gC.js.map +1 -0
- package/dist/ui/assets/swift-D82vCrfD.js +2 -0
- package/dist/ui/assets/swift-D82vCrfD.js.map +1 -0
- package/dist/ui/assets/synthwave-84-CbfX1IO0.js +2 -0
- package/dist/ui/assets/synthwave-84-CbfX1IO0.js.map +1 -0
- package/dist/ui/assets/system-verilog-CnnmHF94.js +2 -0
- package/dist/ui/assets/system-verilog-CnnmHF94.js.map +1 -0
- package/dist/ui/assets/systemd-4A_iFExJ.js +2 -0
- package/dist/ui/assets/systemd-4A_iFExJ.js.map +1 -0
- package/dist/ui/assets/talonscript-CkByrt1z.js +2 -0
- package/dist/ui/assets/talonscript-CkByrt1z.js.map +1 -0
- package/dist/ui/assets/tasl-QIJgUcNo.js +2 -0
- package/dist/ui/assets/tasl-QIJgUcNo.js.map +1 -0
- package/dist/ui/assets/tcl-dwOrl1Do.js +2 -0
- package/dist/ui/assets/tcl-dwOrl1Do.js.map +1 -0
- package/dist/ui/assets/templ-DhtptRzy.js +2 -0
- package/dist/ui/assets/templ-DhtptRzy.js.map +1 -0
- package/dist/ui/assets/terraform-BETggiCN.js +2 -0
- package/dist/ui/assets/terraform-BETggiCN.js.map +1 -0
- package/dist/ui/assets/tex-idrVyKtj.js +2 -0
- package/dist/ui/assets/tex-idrVyKtj.js.map +1 -0
- package/dist/ui/assets/tokyo-night-hegEt444.js +2 -0
- package/dist/ui/assets/tokyo-night-hegEt444.js.map +1 -0
- package/dist/ui/assets/toml-vGWfd6FD.js +2 -0
- package/dist/ui/assets/toml-vGWfd6FD.js.map +1 -0
- package/dist/ui/assets/ts-tags-D351s5mN.js +2 -0
- package/dist/ui/assets/ts-tags-D351s5mN.js.map +1 -0
- package/dist/ui/assets/tsv-B_m7g4N7.js +2 -0
- package/dist/ui/assets/tsv-B_m7g4N7.js.map +1 -0
- package/dist/ui/assets/tsx-COt5Ahok.js +2 -0
- package/dist/ui/assets/tsx-COt5Ahok.js.map +1 -0
- package/dist/ui/assets/turtle-BsS91CYL.js +2 -0
- package/dist/ui/assets/turtle-BsS91CYL.js.map +1 -0
- package/dist/ui/assets/twig-CW1WmMYd.js +2 -0
- package/dist/ui/assets/twig-CW1WmMYd.js.map +1 -0
- package/dist/ui/assets/typescript-BPQ3VLAy.js +2 -0
- package/dist/ui/assets/typescript-BPQ3VLAy.js.map +1 -0
- package/dist/ui/assets/typespec-CAFt9gP4.js +2 -0
- package/dist/ui/assets/typespec-CAFt9gP4.js.map +1 -0
- package/dist/ui/assets/typst-DHCkPAjA.js +2 -0
- package/dist/ui/assets/typst-DHCkPAjA.js.map +1 -0
- package/dist/ui/assets/v-BcVCzyr7.js +2 -0
- package/dist/ui/assets/v-BcVCzyr7.js.map +1 -0
- package/dist/ui/assets/vala-CsfeWuGM.js +2 -0
- package/dist/ui/assets/vala-CsfeWuGM.js.map +1 -0
- package/dist/ui/assets/vb-D17OF-Vu.js +2 -0
- package/dist/ui/assets/vb-D17OF-Vu.js.map +1 -0
- package/dist/ui/assets/verilog-BQ8w6xss.js +2 -0
- package/dist/ui/assets/verilog-BQ8w6xss.js.map +1 -0
- package/dist/ui/assets/vesper-DRje8inN.js +2 -0
- package/dist/ui/assets/vesper-DRje8inN.js.map +1 -0
- package/dist/ui/assets/vhdl-CeAyd5Ju.js +2 -0
- package/dist/ui/assets/vhdl-CeAyd5Ju.js.map +1 -0
- package/dist/ui/assets/viml-CJc9bBzg.js +2 -0
- package/dist/ui/assets/viml-CJc9bBzg.js.map +1 -0
- package/dist/ui/assets/vitesse-black-Bkuqu6BP.js +2 -0
- package/dist/ui/assets/vitesse-black-Bkuqu6BP.js.map +1 -0
- package/dist/ui/assets/vitesse-dark-D0r3Knsf.js +2 -0
- package/dist/ui/assets/vitesse-dark-D0r3Knsf.js.map +1 -0
- package/dist/ui/assets/vitesse-light-CVO1_9PV.js +2 -0
- package/dist/ui/assets/vitesse-light-CVO1_9PV.js.map +1 -0
- package/dist/ui/assets/vue-D2xRrEX4.js +2 -0
- package/dist/ui/assets/vue-D2xRrEX4.js.map +1 -0
- package/dist/ui/assets/vue-html-AaS7Mt5G.js +2 -0
- package/dist/ui/assets/vue-html-AaS7Mt5G.js.map +1 -0
- package/dist/ui/assets/vue-vine-BoDAl6tE.js +2 -0
- package/dist/ui/assets/vue-vine-BoDAl6tE.js.map +1 -0
- package/dist/ui/assets/vyper-CDx5xZoG.js +2 -0
- package/dist/ui/assets/vyper-CDx5xZoG.js.map +1 -0
- package/dist/ui/assets/wasm-CG6Dc4jp.js +2 -0
- package/dist/ui/assets/wasm-CG6Dc4jp.js.map +1 -0
- package/dist/ui/assets/wasm-MzD3tlZU.js +2 -0
- package/dist/ui/assets/wasm-MzD3tlZU.js.map +1 -0
- package/dist/ui/assets/wenyan-BV7otONQ.js +2 -0
- package/dist/ui/assets/wenyan-BV7otONQ.js.map +1 -0
- package/dist/ui/assets/wgsl-Dx-B1_4e.js +2 -0
- package/dist/ui/assets/wgsl-Dx-B1_4e.js.map +1 -0
- package/dist/ui/assets/wikitext-BhOHFoWU.js +2 -0
- package/dist/ui/assets/wikitext-BhOHFoWU.js.map +1 -0
- package/dist/ui/assets/wit-5i3qLPDT.js +2 -0
- package/dist/ui/assets/wit-5i3qLPDT.js.map +1 -0
- package/dist/ui/assets/wolfram-lXgVvXCa.js +2 -0
- package/dist/ui/assets/wolfram-lXgVvXCa.js.map +1 -0
- package/dist/ui/assets/xml-sdJ4AIDG.js +2 -0
- package/dist/ui/assets/xml-sdJ4AIDG.js.map +1 -0
- package/dist/ui/assets/xsl-CtQFsRM5.js +2 -0
- package/dist/ui/assets/xsl-CtQFsRM5.js.map +1 -0
- package/dist/ui/assets/yaml-Buea-lGh.js +2 -0
- package/dist/ui/assets/yaml-Buea-lGh.js.map +1 -0
- package/dist/ui/assets/zenscript-DVFEvuxE.js +2 -0
- package/dist/ui/assets/zenscript-DVFEvuxE.js.map +1 -0
- package/dist/ui/assets/zig-VOosw3JB.js +2 -0
- package/dist/ui/assets/zig-VOosw3JB.js.map +1 -0
- package/dist/ui/index.html +13 -0
- package/dist/utils/__mocks__/esm-dirname.d.ts +11 -0
- package/dist/utils/__mocks__/esm-dirname.d.ts.map +1 -0
- package/dist/utils/__mocks__/esm-dirname.js +19 -0
- package/dist/utils/__mocks__/esm-dirname.js.map +1 -0
- package/dist/utils/__mocks__/pm2-helpers.d.ts +31 -0
- package/dist/utils/__mocks__/pm2-helpers.d.ts.map +1 -0
- package/dist/utils/__mocks__/pm2-helpers.js +87 -0
- package/dist/utils/__mocks__/pm2-helpers.js.map +1 -0
- package/dist/utils/__tests__/db-migration.test.d.ts +2 -0
- package/dist/utils/__tests__/db-migration.test.d.ts.map +1 -0
- package/dist/utils/__tests__/db-migration.test.js +85 -0
- package/dist/utils/__tests__/db-migration.test.js.map +1 -0
- package/dist/utils/__tests__/inject-loop.test.d.ts +2 -0
- package/dist/utils/__tests__/inject-loop.test.d.ts.map +1 -0
- package/dist/utils/__tests__/inject-loop.test.js +113 -0
- package/dist/utils/__tests__/inject-loop.test.js.map +1 -0
- package/dist/utils/__tests__/net.test.d.ts +2 -0
- package/dist/utils/__tests__/net.test.d.ts.map +1 -0
- package/dist/utils/__tests__/net.test.js +26 -0
- package/dist/utils/__tests__/net.test.js.map +1 -0
- package/dist/utils/__tests__/pm2.test.d.ts +2 -0
- package/dist/utils/__tests__/pm2.test.d.ts.map +1 -0
- package/dist/utils/__tests__/pm2.test.js +114 -0
- package/dist/utils/__tests__/pm2.test.js.map +1 -0
- package/dist/utils/__tests__/providers-db.test.d.ts +2 -0
- package/dist/utils/__tests__/providers-db.test.d.ts.map +1 -0
- package/dist/utils/__tests__/providers-db.test.js +239 -0
- package/dist/utils/__tests__/providers-db.test.js.map +1 -0
- package/dist/utils/__tests__/request-writer.test.d.ts +2 -0
- package/dist/utils/__tests__/request-writer.test.d.ts.map +1 -0
- package/dist/utils/__tests__/request-writer.test.js +49 -0
- package/dist/utils/__tests__/request-writer.test.js.map +1 -0
- package/dist/utils/__tests__/sse-accumulator.test.d.ts +2 -0
- package/dist/utils/__tests__/sse-accumulator.test.d.ts.map +1 -0
- package/dist/utils/__tests__/sse-accumulator.test.js +84 -0
- package/dist/utils/__tests__/sse-accumulator.test.js.map +1 -0
- package/dist/utils/__tests__/sse-writer.test.d.ts +2 -0
- package/dist/utils/__tests__/sse-writer.test.d.ts.map +1 -0
- package/dist/utils/__tests__/sse-writer.test.js +92 -0
- package/dist/utils/__tests__/sse-writer.test.js.map +1 -0
- package/dist/utils/__tests__/tool-injector.test.d.ts +2 -0
- package/dist/utils/__tests__/tool-injector.test.d.ts.map +1 -0
- package/dist/utils/__tests__/tool-injector.test.js +59 -0
- package/dist/utils/__tests__/tool-injector.test.js.map +1 -0
- package/dist/utils/db.d.ts +9 -0
- package/dist/utils/db.d.ts.map +1 -0
- package/dist/utils/db.js +199 -0
- package/dist/utils/db.js.map +1 -0
- package/dist/utils/esm-dirname.d.ts +37 -0
- package/dist/utils/esm-dirname.d.ts.map +1 -0
- package/dist/utils/esm-dirname.js +51 -0
- package/dist/utils/esm-dirname.js.map +1 -0
- package/dist/utils/inject-loop.d.ts +44 -0
- package/dist/utils/inject-loop.d.ts.map +1 -0
- package/dist/utils/inject-loop.js +121 -0
- package/dist/utils/inject-loop.js.map +1 -0
- package/dist/utils/migrate-files-to-db.d.ts +2 -0
- package/dist/utils/migrate-files-to-db.d.ts.map +1 -0
- package/dist/utils/migrate-files-to-db.js +139 -0
- package/dist/utils/migrate-files-to-db.js.map +1 -0
- package/dist/utils/net.d.ts +7 -0
- package/dist/utils/net.d.ts.map +1 -0
- package/dist/utils/net.js +39 -0
- package/dist/utils/net.js.map +1 -0
- package/dist/utils/paths.d.ts +6 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +23 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/pm2.d.ts +7 -0
- package/dist/utils/pm2.d.ts.map +1 -0
- package/dist/utils/pm2.js +125 -0
- package/dist/utils/pm2.js.map +1 -0
- package/dist/utils/providers-db.d.ts +45 -0
- package/dist/utils/providers-db.d.ts.map +1 -0
- package/dist/utils/providers-db.js +92 -0
- package/dist/utils/providers-db.js.map +1 -0
- package/dist/utils/request-writer.d.ts +50 -0
- package/dist/utils/request-writer.d.ts.map +1 -0
- package/dist/utils/request-writer.js +110 -0
- package/dist/utils/request-writer.js.map +1 -0
- package/dist/utils/sse-accumulator.d.ts +10 -0
- package/dist/utils/sse-accumulator.d.ts.map +1 -0
- package/dist/utils/sse-accumulator.js +60 -0
- package/dist/utils/sse-accumulator.js.map +1 -0
- package/dist/utils/sse-writer.d.ts +25 -0
- package/dist/utils/sse-writer.d.ts.map +1 -0
- package/dist/utils/sse-writer.js +63 -0
- package/dist/utils/sse-writer.js.map +1 -0
- package/dist/utils/stats-aggregator.d.ts +16 -0
- package/dist/utils/stats-aggregator.d.ts.map +1 -0
- package/dist/utils/stats-aggregator.js +149 -0
- package/dist/utils/stats-aggregator.js.map +1 -0
- package/dist/utils/status-history.d.ts +20 -0
- package/dist/utils/status-history.d.ts.map +1 -0
- package/dist/utils/status-history.js +34 -0
- package/dist/utils/status-history.js.map +1 -0
- package/dist/utils/tool-injector.d.ts +15 -0
- package/dist/utils/tool-injector.d.ts.map +1 -0
- package/dist/utils/tool-injector.js +32 -0
- package/dist/utils/tool-injector.js.map +1 -0
- package/dist/utils/version.d.ts +20 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +101 -0
- package/dist/utils/version.js.map +1 -0
- package/ecosystem.config.cjs +34 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-accumulator.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/sse-accumulator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { SSEAccumulator } from '../sse-accumulator.js';
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
describe('SSEAccumulator', () => {
|
|
4
|
+
it('should parse SSE events from chunk', async () => {
|
|
5
|
+
const accumulator = new SSEAccumulator('test-123');
|
|
6
|
+
const input = 'data: {"type":"test","data":"hello"}\n\n';
|
|
7
|
+
const stream = Readable.from([input]);
|
|
8
|
+
const result = await new Promise((resolve) => {
|
|
9
|
+
stream.pipe(accumulator);
|
|
10
|
+
accumulator.on('finish', () => {
|
|
11
|
+
resolve(accumulator.events);
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
expect(result).toEqual([
|
|
15
|
+
{ type: 'test', data: 'hello' }
|
|
16
|
+
]);
|
|
17
|
+
});
|
|
18
|
+
it('should accumulate multiple events', async () => {
|
|
19
|
+
const accumulator = new SSEAccumulator('test-456');
|
|
20
|
+
const input1 = 'data: {"event":"start"}\n\n';
|
|
21
|
+
const input2 = 'data: {"event":"delta"}\n\n';
|
|
22
|
+
const stream = Readable.from([input1, input2]);
|
|
23
|
+
const result = await new Promise((resolve) => {
|
|
24
|
+
stream.pipe(accumulator);
|
|
25
|
+
accumulator.on('finish', () => {
|
|
26
|
+
resolve(accumulator.events);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
expect(result).toEqual([
|
|
30
|
+
{ event: 'start' },
|
|
31
|
+
{ event: 'delta' }
|
|
32
|
+
]);
|
|
33
|
+
});
|
|
34
|
+
it('should handle invalid JSON as raw data', async () => {
|
|
35
|
+
const accumulator = new SSEAccumulator('test-789');
|
|
36
|
+
const input = 'data: not-json\n\n';
|
|
37
|
+
const stream = Readable.from([input]);
|
|
38
|
+
const result = await new Promise((resolve) => {
|
|
39
|
+
stream.pipe(accumulator);
|
|
40
|
+
accumulator.on('finish', () => {
|
|
41
|
+
resolve(accumulator.events);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
expect(result).toEqual([
|
|
45
|
+
{ raw: 'not-json' }
|
|
46
|
+
]);
|
|
47
|
+
});
|
|
48
|
+
it('should handle SSE events split across multiple chunks', async () => {
|
|
49
|
+
const accumulator = new SSEAccumulator('test-split');
|
|
50
|
+
// Simulate a single SSE event split across 3 chunks
|
|
51
|
+
const chunk1 = 'da';
|
|
52
|
+
const chunk2 = 'ta: {"even';
|
|
53
|
+
const chunk3 = 't":"split"}\n\n';
|
|
54
|
+
const stream = Readable.from([chunk1, chunk2, chunk3]);
|
|
55
|
+
const result = await new Promise((resolve) => {
|
|
56
|
+
stream.pipe(accumulator);
|
|
57
|
+
accumulator.on('finish', () => {
|
|
58
|
+
resolve(accumulator.events);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
expect(result).toEqual([
|
|
62
|
+
{ event: 'split' }
|
|
63
|
+
]);
|
|
64
|
+
});
|
|
65
|
+
it('should handle multiple events split across chunks', async () => {
|
|
66
|
+
const accumulator = new SSEAccumulator('test-multi-split');
|
|
67
|
+
// First event complete, second event split, third event trailing at stream end
|
|
68
|
+
const chunk1 = 'data: {"a":1}\n\ndata: {"b';
|
|
69
|
+
const chunk2 = '":2}\n\ndata: {"c":3}';
|
|
70
|
+
const stream = Readable.from([chunk1, chunk2]);
|
|
71
|
+
const result = await new Promise((resolve) => {
|
|
72
|
+
stream.pipe(accumulator);
|
|
73
|
+
accumulator.on('finish', () => {
|
|
74
|
+
resolve(accumulator.events);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
expect(result).toEqual([
|
|
78
|
+
{ a: 1 },
|
|
79
|
+
{ b: 2 },
|
|
80
|
+
{ c: 3 }
|
|
81
|
+
]);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=sse-accumulator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-accumulator.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/sse-accumulator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-writer.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/sse-writer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { writeSSEEvent, writeTextAsSSE, shouldMock } from '../sse-writer.js';
|
|
2
|
+
// 收集 write 调用的 mock ServerResponse
|
|
3
|
+
function mockRaw() {
|
|
4
|
+
const writes = [];
|
|
5
|
+
const raw = {
|
|
6
|
+
write: (chunk) => {
|
|
7
|
+
writes.push(chunk);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
return { raw, writes };
|
|
12
|
+
}
|
|
13
|
+
// 从 write 出的文本行解析回事件对象(Anthropic 双行格式:event: <type>\ndata: <json>\n\n)
|
|
14
|
+
function parseWrites(writes) {
|
|
15
|
+
return writes.map((w) => {
|
|
16
|
+
const match = w.match(/^event: (.+)\ndata: (.+)\n\n$/);
|
|
17
|
+
expect(match).not.toBeNull();
|
|
18
|
+
const event = JSON.parse(match[2]);
|
|
19
|
+
expect(match[1]).toBe(event.type);
|
|
20
|
+
return event;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
describe('sse-writer', () => {
|
|
24
|
+
describe('writeSSEEvent', () => {
|
|
25
|
+
it('should format event as `event: <type>\\ndata: {json}\\n\\n`', () => {
|
|
26
|
+
const { raw, writes } = mockRaw();
|
|
27
|
+
writeSSEEvent(raw, { type: 'ping', n: 1 });
|
|
28
|
+
expect(writes).toEqual(['event: ping\ndata: {"type":"ping","n":1}\n\n']);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('writeTextAsSSE', () => {
|
|
32
|
+
it('should emit events in correct order', () => {
|
|
33
|
+
const { raw, writes } = mockRaw();
|
|
34
|
+
writeTextAsSSE(raw, 'hello', 'msg_1');
|
|
35
|
+
const events = parseWrites(writes);
|
|
36
|
+
expect(events.map((e) => e.type)).toEqual([
|
|
37
|
+
'message_start',
|
|
38
|
+
'content_block_start',
|
|
39
|
+
'content_block_delta',
|
|
40
|
+
'content_block_stop',
|
|
41
|
+
'message_delta',
|
|
42
|
+
'message_stop'
|
|
43
|
+
]);
|
|
44
|
+
});
|
|
45
|
+
it('should carry text in text_delta and keep message id consistent', () => {
|
|
46
|
+
const { raw, writes } = mockRaw();
|
|
47
|
+
writeTextAsSSE(raw, 'the answer', 'msg_abc');
|
|
48
|
+
const events = parseWrites(writes);
|
|
49
|
+
expect(events[0].message.id).toBe('msg_abc');
|
|
50
|
+
expect(events[2].delta).toEqual({ type: 'text_delta', text: 'the answer' });
|
|
51
|
+
expect(events[4].delta.stop_reason).toBe('end_turn');
|
|
52
|
+
});
|
|
53
|
+
it('should use index 0 for the single text block', () => {
|
|
54
|
+
const { raw, writes } = mockRaw();
|
|
55
|
+
writeTextAsSSE(raw, 'x', 'msg_1');
|
|
56
|
+
const events = parseWrites(writes);
|
|
57
|
+
expect(events[1].index).toBe(0);
|
|
58
|
+
expect(events[2].index).toBe(0);
|
|
59
|
+
expect(events[3].index).toBe(0);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('shouldMock', () => {
|
|
63
|
+
it('should return true when last user message (string) contains __MOCK__', () => {
|
|
64
|
+
expect(shouldMock({ messages: [{ role: 'user', content: 'run __MOCK__ now' }] })).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it('should return true when last user message (blocks) contains __MOCK__', () => {
|
|
67
|
+
const body = {
|
|
68
|
+
messages: [{ role: 'user', content: [{ type: 'text', text: 'please __MOCK__' }] }]
|
|
69
|
+
};
|
|
70
|
+
expect(shouldMock(body)).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
it('should only inspect the last user message', () => {
|
|
73
|
+
const body = {
|
|
74
|
+
messages: [
|
|
75
|
+
{ role: 'user', content: '__MOCK__' },
|
|
76
|
+
{ role: 'assistant', content: 'ok' },
|
|
77
|
+
{ role: 'user', content: 'normal request' }
|
|
78
|
+
]
|
|
79
|
+
};
|
|
80
|
+
expect(shouldMock(body)).toBe(false);
|
|
81
|
+
});
|
|
82
|
+
it('should return false without magic word', () => {
|
|
83
|
+
expect(shouldMock({ messages: [{ role: 'user', content: 'hello' }] })).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
it('should return false for malformed body', () => {
|
|
86
|
+
expect(shouldMock({})).toBe(false);
|
|
87
|
+
expect(shouldMock(null)).toBe(false);
|
|
88
|
+
expect(shouldMock({ messages: 'nope' })).toBe(false);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=sse-writer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-writer.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/sse-writer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-injector.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/tool-injector.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// mock 注册表:提供一个已启用的 fake tool,供 injectTools 读取
|
|
2
|
+
jest.mock('../../tools/index.js', () => ({
|
|
3
|
+
enabledTools: () => [
|
|
4
|
+
{
|
|
5
|
+
name: '__test_tool',
|
|
6
|
+
description: 'test tool with __PROBE__ marker',
|
|
7
|
+
input_schema: { type: 'object', properties: { echo: { type: 'string' } }, required: ['echo'] },
|
|
8
|
+
enabled: true,
|
|
9
|
+
exec: () => 'ok'
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}));
|
|
13
|
+
import { injectTools } from '../tool-injector.js';
|
|
14
|
+
describe('tool-injector', () => {
|
|
15
|
+
describe('injectTools', () => {
|
|
16
|
+
it('should append enabled tools to the END of a non-empty tools array', () => {
|
|
17
|
+
const body = { tools: [{ name: 'Read' }, { name: 'Write' }] };
|
|
18
|
+
const injected = injectTools(body);
|
|
19
|
+
expect(injected).toEqual(['__test_tool']);
|
|
20
|
+
expect(body.tools.length).toBe(3);
|
|
21
|
+
// 追加到末尾,前缀原工具顺序不变(保护 cache)
|
|
22
|
+
expect(body.tools[0]).toEqual({ name: 'Read' });
|
|
23
|
+
expect(body.tools[1]).toEqual({ name: 'Write' });
|
|
24
|
+
expect(body.tools[2].name).toBe('__test_tool');
|
|
25
|
+
});
|
|
26
|
+
it('should NOT inject when tools is empty (辅助请求)', () => {
|
|
27
|
+
const body = { tools: [] };
|
|
28
|
+
expect(injectTools(body)).toEqual([]);
|
|
29
|
+
expect(body.tools.length).toBe(0);
|
|
30
|
+
});
|
|
31
|
+
it('should NOT inject when tools is absent', () => {
|
|
32
|
+
const body = { messages: [] };
|
|
33
|
+
expect(injectTools(body)).toEqual([]);
|
|
34
|
+
expect(body.tools).toBeUndefined();
|
|
35
|
+
});
|
|
36
|
+
it('should be idempotent (不重复注入)', () => {
|
|
37
|
+
const body = { tools: [{ name: 'Read' }] };
|
|
38
|
+
expect(injectTools(body)).toEqual(['__test_tool']);
|
|
39
|
+
expect(injectTools(body)).toEqual([]);
|
|
40
|
+
expect(body.tools.filter((t) => t.name === '__test_tool').length).toBe(1);
|
|
41
|
+
});
|
|
42
|
+
it('should handle malformed body safely', () => {
|
|
43
|
+
expect(injectTools(null)).toEqual([]);
|
|
44
|
+
expect(injectTools({})).toEqual([]);
|
|
45
|
+
expect(injectTools({ tools: 'nope' })).toEqual([]);
|
|
46
|
+
});
|
|
47
|
+
it('injected tool should only carry the function-call triple (no local metadata)', () => {
|
|
48
|
+
const body = { tools: [{ name: 'Read' }] };
|
|
49
|
+
injectTools(body);
|
|
50
|
+
const tool = body.tools.find((t) => t.name === '__test_tool');
|
|
51
|
+
expect(tool.input_schema.type).toBe('object');
|
|
52
|
+
expect(tool.input_schema.required).toContain('echo');
|
|
53
|
+
// enabled/exec 是本地元数据,不进请求体
|
|
54
|
+
expect(tool.enabled).toBeUndefined();
|
|
55
|
+
expect(tool.exec).toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=tool-injector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-injector.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/tool-injector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export declare function configureDbPath(absPath: string): void;
|
|
3
|
+
export declare function initDatabase(): Database.Database;
|
|
4
|
+
export declare function applySchemaV2(db: Database.Database): void;
|
|
5
|
+
export declare function applySchemaV3(db: Database.Database): void;
|
|
6
|
+
export declare function applySchemaV4(db: Database.Database): void;
|
|
7
|
+
export declare function closeDatabase(): void;
|
|
8
|
+
export declare function getDatabase(): Database.Database;
|
|
9
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/utils/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAQrC,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAErD;AAID,wBAAgB,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAmDhD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,QAkBlD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,QAOlD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,QAmClD;AAgFD,wBAAgB,aAAa,SAK5B;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAK/C"}
|
package/dist/utils/db.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import { logsDir } from './paths.js';
|
|
5
|
+
// DB 绝对路径:由 server 启动时按 config.storage.path 设置,未设置则回退到数据目录
|
|
6
|
+
let dbPath = null;
|
|
7
|
+
export function configureDbPath(absPath) {
|
|
8
|
+
dbPath = absPath;
|
|
9
|
+
}
|
|
10
|
+
let db = null;
|
|
11
|
+
export function initDatabase() {
|
|
12
|
+
if (db)
|
|
13
|
+
return db;
|
|
14
|
+
const resolvedPath = dbPath || path.join(logsDir, 'proxy.db');
|
|
15
|
+
// Ensure database directory exists
|
|
16
|
+
const dbDir = path.dirname(resolvedPath);
|
|
17
|
+
if (!fs.existsSync(dbDir)) {
|
|
18
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
// Initialize SQLite database
|
|
21
|
+
db = new Database(resolvedPath);
|
|
22
|
+
// Enable WAL mode for better concurrency & durability
|
|
23
|
+
db.pragma('journal_mode = WAL');
|
|
24
|
+
db.pragma('synchronous = NORMAL');
|
|
25
|
+
// Create schema_version table
|
|
26
|
+
db.exec(`
|
|
27
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
28
|
+
version INTEGER PRIMARY KEY
|
|
29
|
+
)
|
|
30
|
+
`);
|
|
31
|
+
// Check current schema version
|
|
32
|
+
const versionRow = db.prepare('SELECT version FROM schema_version').get();
|
|
33
|
+
const currentVersion = versionRow?.version || 0;
|
|
34
|
+
// Apply migrations if needed
|
|
35
|
+
if (currentVersion < 1) {
|
|
36
|
+
applySchemaV1(db);
|
|
37
|
+
db.prepare('INSERT OR REPLACE INTO schema_version (version) VALUES (1)').run();
|
|
38
|
+
}
|
|
39
|
+
if (currentVersion < 2) {
|
|
40
|
+
applySchemaV2(db);
|
|
41
|
+
db.prepare('INSERT OR REPLACE INTO schema_version (version) VALUES (2)').run();
|
|
42
|
+
}
|
|
43
|
+
if (currentVersion < 3) {
|
|
44
|
+
applySchemaV3(db);
|
|
45
|
+
db.prepare('INSERT OR REPLACE INTO schema_version (version) VALUES (3)').run();
|
|
46
|
+
}
|
|
47
|
+
if (currentVersion < 4) {
|
|
48
|
+
applySchemaV4(db);
|
|
49
|
+
db.prepare('INSERT OR REPLACE INTO schema_version (version) VALUES (4)').run();
|
|
50
|
+
}
|
|
51
|
+
return db;
|
|
52
|
+
}
|
|
53
|
+
export function applySchemaV2(db) {
|
|
54
|
+
db.exec(`
|
|
55
|
+
CREATE TABLE IF NOT EXISTS providers (
|
|
56
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
57
|
+
name TEXT UNIQUE NOT NULL,
|
|
58
|
+
base_url TEXT NOT NULL,
|
|
59
|
+
api_key TEXT NOT NULL,
|
|
60
|
+
model TEXT NOT NULL,
|
|
61
|
+
haiku_model TEXT,
|
|
62
|
+
sonnet_model TEXT,
|
|
63
|
+
opus_model TEXT,
|
|
64
|
+
subagent_model TEXT,
|
|
65
|
+
provider TEXT NOT NULL,
|
|
66
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
67
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
68
|
+
)
|
|
69
|
+
`);
|
|
70
|
+
db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS idx_providers_name ON providers(name)`);
|
|
71
|
+
}
|
|
72
|
+
export function applySchemaV3(db) {
|
|
73
|
+
// Add is_default column for provider activation feature
|
|
74
|
+
// ALTER TABLE ADD COLUMN is idempotent-safe via column-existence check
|
|
75
|
+
const columns = db.prepare("PRAGMA table_info(providers)").all();
|
|
76
|
+
if (!columns.some(c => c.name === 'is_default')) {
|
|
77
|
+
db.exec('ALTER TABLE providers ADD COLUMN is_default INTEGER NOT NULL DEFAULT 0');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function applySchemaV4(db) {
|
|
81
|
+
// Remove NOT NULL constraints from base_url, api_key, model
|
|
82
|
+
// SQLite doesn't support ALTER COLUMN, so rebuild the table
|
|
83
|
+
const columns = db.prepare("PRAGMA table_info(providers)").all();
|
|
84
|
+
const hasNotNullColumns = columns.some(c => ['base_url', 'api_key', 'model'].includes(c.name) && c.notnull === 1);
|
|
85
|
+
if (hasNotNullColumns) {
|
|
86
|
+
db.exec(`
|
|
87
|
+
CREATE TABLE IF NOT EXISTS providers_new (
|
|
88
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
89
|
+
name TEXT UNIQUE NOT NULL,
|
|
90
|
+
base_url TEXT,
|
|
91
|
+
api_key TEXT,
|
|
92
|
+
model TEXT,
|
|
93
|
+
haiku_model TEXT,
|
|
94
|
+
sonnet_model TEXT,
|
|
95
|
+
opus_model TEXT,
|
|
96
|
+
subagent_model TEXT,
|
|
97
|
+
provider TEXT NOT NULL,
|
|
98
|
+
is_default INTEGER NOT NULL DEFAULT 0,
|
|
99
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
100
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
101
|
+
)
|
|
102
|
+
`);
|
|
103
|
+
db.exec(`
|
|
104
|
+
INSERT INTO providers_new
|
|
105
|
+
SELECT id, name, base_url, api_key, model, haiku_model, sonnet_model, opus_model, subagent_model, provider, is_default, created_at, updated_at
|
|
106
|
+
FROM providers
|
|
107
|
+
`);
|
|
108
|
+
db.exec('DROP TABLE providers');
|
|
109
|
+
db.exec('ALTER TABLE providers_new RENAME TO providers');
|
|
110
|
+
db.exec('CREATE UNIQUE INDEX IF NOT EXISTS idx_providers_name ON providers(name)');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function applySchemaV1(db) {
|
|
114
|
+
// Main requests table
|
|
115
|
+
db.exec(`
|
|
116
|
+
CREATE TABLE IF NOT EXISTS requests (
|
|
117
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
118
|
+
request_id TEXT UNIQUE NOT NULL,
|
|
119
|
+
session_id TEXT NOT NULL,
|
|
120
|
+
timestamp TEXT NOT NULL,
|
|
121
|
+
method TEXT NOT NULL,
|
|
122
|
+
path TEXT NOT NULL,
|
|
123
|
+
status_code INTEGER NOT NULL,
|
|
124
|
+
response_time INTEGER NOT NULL,
|
|
125
|
+
api_key TEXT,
|
|
126
|
+
proxy_api_key TEXT,
|
|
127
|
+
base_url TEXT,
|
|
128
|
+
model TEXT,
|
|
129
|
+
input_tokens INTEGER,
|
|
130
|
+
output_tokens INTEGER,
|
|
131
|
+
cache_read_tokens INTEGER,
|
|
132
|
+
cache_creation_tokens INTEGER,
|
|
133
|
+
request_headers TEXT,
|
|
134
|
+
request_body TEXT,
|
|
135
|
+
response_headers TEXT,
|
|
136
|
+
response_events TEXT,
|
|
137
|
+
completed_at TEXT,
|
|
138
|
+
closed_at TEXT,
|
|
139
|
+
error TEXT,
|
|
140
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
141
|
+
)
|
|
142
|
+
`);
|
|
143
|
+
// Create indexes
|
|
144
|
+
db.exec(`
|
|
145
|
+
CREATE INDEX IF NOT EXISTS idx_requests_session ON requests(session_id, timestamp DESC)
|
|
146
|
+
`);
|
|
147
|
+
db.exec(`
|
|
148
|
+
CREATE INDEX IF NOT EXISTS idx_requests_time ON requests(timestamp DESC)
|
|
149
|
+
`);
|
|
150
|
+
db.exec(`
|
|
151
|
+
CREATE INDEX IF NOT EXISTS idx_requests_status ON requests(status_code)
|
|
152
|
+
`);
|
|
153
|
+
db.exec(`
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_requests_path ON requests(path)
|
|
155
|
+
`);
|
|
156
|
+
db.exec(`
|
|
157
|
+
CREATE INDEX IF NOT EXISTS idx_requests_api_key ON requests(api_key)
|
|
158
|
+
`);
|
|
159
|
+
db.exec(`
|
|
160
|
+
CREATE INDEX IF NOT EXISTS idx_requests_proxy_api_key ON requests(proxy_api_key)
|
|
161
|
+
`);
|
|
162
|
+
db.exec(`
|
|
163
|
+
CREATE INDEX IF NOT EXISTS idx_requests_base_url ON requests(base_url)
|
|
164
|
+
`);
|
|
165
|
+
db.exec(`
|
|
166
|
+
CREATE INDEX IF NOT EXISTS idx_requests_model ON requests(model)
|
|
167
|
+
`);
|
|
168
|
+
// Stats aggregation table
|
|
169
|
+
db.exec(`
|
|
170
|
+
CREATE TABLE IF NOT EXISTS stats (
|
|
171
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
172
|
+
period TEXT NOT NULL,
|
|
173
|
+
period_key TEXT NOT NULL,
|
|
174
|
+
input_tokens INTEGER DEFAULT 0,
|
|
175
|
+
output_tokens INTEGER DEFAULT 0,
|
|
176
|
+
cache_read_tokens INTEGER DEFAULT 0,
|
|
177
|
+
cache_creation_tokens INTEGER DEFAULT 0,
|
|
178
|
+
request_count INTEGER DEFAULT 0,
|
|
179
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
180
|
+
UNIQUE(period, period_key)
|
|
181
|
+
)
|
|
182
|
+
`);
|
|
183
|
+
db.exec(`
|
|
184
|
+
CREATE INDEX IF NOT EXISTS idx_stats_period ON stats(period, period_key)
|
|
185
|
+
`);
|
|
186
|
+
}
|
|
187
|
+
export function closeDatabase() {
|
|
188
|
+
if (db) {
|
|
189
|
+
db.close();
|
|
190
|
+
db = null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
export function getDatabase() {
|
|
194
|
+
if (!db) {
|
|
195
|
+
throw new Error('Database not initialized. Call initDatabase() first.');
|
|
196
|
+
}
|
|
197
|
+
return db;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/utils/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Get the directory of a source file relative to this utility's location.
|
|
14
|
+
*
|
|
15
|
+
* Since this file lives in `packages/core/src/utils/`, callers can derive
|
|
16
|
+
* their own __dirname by combining thisDirname with a relative offset.
|
|
17
|
+
*
|
|
18
|
+
* @param relativePath - Path relative to this file's directory to reach
|
|
19
|
+
* the caller's directory (e.g. '../server' from ui-route.ts)
|
|
20
|
+
* @returns Absolute path of the caller's directory
|
|
21
|
+
*
|
|
22
|
+
* Example: getCallerDirname('../server') => packages/core/src/server
|
|
23
|
+
*/
|
|
24
|
+
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
|
+
/**
|
|
30
|
+
* ESM-compatible accessor for the entry module's URL.
|
|
31
|
+
*
|
|
32
|
+
* Wraps import.meta.url so callers don't reference import.meta syntax directly
|
|
33
|
+
* (which fails to parse under ts-jest's CJS compilation). The __mocks__ version
|
|
34
|
+
* overrides this in the Jest environment.
|
|
35
|
+
*/
|
|
36
|
+
export declare function getCurrentModuleUrl(): string;
|
|
37
|
+
//# sourceMappingURL=esm-dirname.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-dirname.d.ts","sourceRoot":"","sources":["../../src/utils/esm-dirname.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,QAAA,MAAM,WAAW,EAAE,MAQf,CAAA;AAEJ;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;GAEG;AACH,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,CAAA;AAEtC;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
/**
|
|
3
|
+
* ESM-compatible __dirname for this module.
|
|
4
|
+
*
|
|
5
|
+
* In ESM runtime, __dirname is undefined. This module computes its own
|
|
6
|
+
* directory path using import.meta.url, which can then be used to derive
|
|
7
|
+
* other paths relative to known locations.
|
|
8
|
+
*
|
|
9
|
+
* In CJS test environments (Jest), import.meta is not available, so this
|
|
10
|
+
* module should be mocked to return a suitable path.
|
|
11
|
+
*/
|
|
12
|
+
const thisDirname = (() => {
|
|
13
|
+
try {
|
|
14
|
+
// ESM context
|
|
15
|
+
return path.dirname(new URL(import.meta.url).pathname);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// CJS fallback (Jest/ts-jest compiles to CJS)
|
|
19
|
+
return typeof __dirname !== 'undefined' ? __dirname : process.cwd();
|
|
20
|
+
}
|
|
21
|
+
})();
|
|
22
|
+
/**
|
|
23
|
+
* Get the directory of a source file relative to this utility's location.
|
|
24
|
+
*
|
|
25
|
+
* Since this file lives in `packages/core/src/utils/`, callers can derive
|
|
26
|
+
* their own __dirname by combining thisDirname with a relative offset.
|
|
27
|
+
*
|
|
28
|
+
* @param relativePath - Path relative to this file's directory to reach
|
|
29
|
+
* the caller's directory (e.g. '../server' from ui-route.ts)
|
|
30
|
+
* @returns Absolute path of the caller's directory
|
|
31
|
+
*
|
|
32
|
+
* Example: getCallerDirname('../server') => packages/core/src/server
|
|
33
|
+
*/
|
|
34
|
+
export function getCallerDirname(relativePath) {
|
|
35
|
+
return path.resolve(thisDirname, relativePath);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Direct export of this module's __dirname for simple relative path derivation.
|
|
39
|
+
*/
|
|
40
|
+
export { thisDirname as utilsDirname };
|
|
41
|
+
/**
|
|
42
|
+
* ESM-compatible accessor for the entry module's URL.
|
|
43
|
+
*
|
|
44
|
+
* Wraps import.meta.url so callers don't reference import.meta syntax directly
|
|
45
|
+
* (which fails to parse under ts-jest's CJS compilation). The __mocks__ version
|
|
46
|
+
* overrides this in the Jest environment.
|
|
47
|
+
*/
|
|
48
|
+
export function getCurrentModuleUrl() {
|
|
49
|
+
return import.meta.url;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=esm-dirname.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-dirname.js","sourceRoot":"","sources":["../../src/utils/esm-dirname.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB;;;;;;;;;GASG;AACH,MAAM,WAAW,GAAW,CAAC,GAAG,EAAE;IAChC,IAAI,CAAC;QACH,cAAc;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;QAC9C,OAAO,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACrE,CAAC;AACH,CAAC,CAAC,EAAE,CAAA;AAEJ;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;AAChD,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,CAAA;AAEtC;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内部循环(后端)——命中注入 tool 后,proxy 代行「执行 tool -> 追加对话 -> 再调上游」,
|
|
3
|
+
* 直到模型给出 end_turn 的最终文本,再由调用方合成 SSE 回写给客户端。
|
|
4
|
+
*
|
|
5
|
+
* 命中检测与执行都面向注册表:任意已启用 tool 被模型调用即命中,执行其 exec。
|
|
6
|
+
*/
|
|
7
|
+
export interface ParsedBlock {
|
|
8
|
+
type: string;
|
|
9
|
+
text?: string;
|
|
10
|
+
id?: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
input?: any;
|
|
13
|
+
}
|
|
14
|
+
export interface ParsedUpstream {
|
|
15
|
+
blocks: ParsedBlock[];
|
|
16
|
+
stopReason: string;
|
|
17
|
+
usage: any;
|
|
18
|
+
}
|
|
19
|
+
/** 解析上游 SSE 全文 -> 事件数组(收集 data: 行的 JSON) */
|
|
20
|
+
export declare function parseSSEText(text: string): any[];
|
|
21
|
+
/** 从事件数组重建有序内容块 + stop_reason + usage */
|
|
22
|
+
export declare function parseUpstreamEvents(events: any[]): ParsedUpstream;
|
|
23
|
+
/** 找出命中的、已启用的注入 tool 调用块 */
|
|
24
|
+
export declare function findInjectedCall(parsed: ParsedUpstream): ParsedBlock | undefined;
|
|
25
|
+
export interface InjectLoopResult {
|
|
26
|
+
text: string;
|
|
27
|
+
iterations: number;
|
|
28
|
+
stoppedByLimit: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 内部循环:命中已启用 tool -> 执行 exec -> 追加对话 -> 再调上游 -> 直到 end_turn。
|
|
32
|
+
* opts.body 会被原地追加 messages。
|
|
33
|
+
*
|
|
34
|
+
* @param opts.events 首次上游响应事件(已确认命中注入 tool)
|
|
35
|
+
* @param opts.callUpstream 用给定 body 再次调上游,返回事件数组
|
|
36
|
+
* @param opts.maxIterations 死循环护栏(tool 描述可能诱导模型反复调用)
|
|
37
|
+
*/
|
|
38
|
+
export declare function runInjectLoop(opts: {
|
|
39
|
+
events: any[];
|
|
40
|
+
body: any;
|
|
41
|
+
callUpstream: (body: any) => Promise<any[]>;
|
|
42
|
+
maxIterations?: number;
|
|
43
|
+
}): Promise<InjectLoopResult>;
|
|
44
|
+
//# sourceMappingURL=inject-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-loop.d.ts","sourceRoot":"","sources":["../../src/utils/inject-loop.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,GAAG,CAAA;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,GAAG,CAAA;CACX;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,CAehD;AAED,yCAAyC;AACzC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,cAAc,CA4CjE;AAED,4BAA4B;AAC5B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,SAAS,CAIhF;AAmBD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,MAAM,EAAE,GAAG,EAAE,CAAA;IACb,IAAI,EAAE,GAAG,CAAA;IACT,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyB5B"}
|