@cc-monitoring/proxy-core 0.1.5 → 0.1.7
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/docs/404.html +22 -0
- package/dist/docs/assets/app.BxFOH0P1.js +1 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.Cuu7C9vz.js +1 -0
- package/dist/docs/assets/chunks/VPLocalSearchBox.CYDhNgXW.js +9 -0
- package/dist/docs/assets/chunks/abnfDiagram-VRR7QNED.RG1C5NpS.js +1 -0
- package/dist/docs/assets/chunks/arc.C9NMazfV.js +1 -0
- package/dist/docs/assets/chunks/architectureDiagram-ZJ3FMSHR.u2IZtOa6.js +36 -0
- package/dist/docs/assets/chunks/blockDiagram-677ZJIJ3.DdHVir7t.js +132 -0
- package/dist/docs/assets/chunks/c4Diagram-LMCZKHZV.gSbgoaJo.js +10 -0
- package/dist/docs/assets/chunks/channel.Cc6zpfFP.js +1 -0
- package/dist/docs/assets/chunks/chunk-2Q5K7J3B.HRSdtksv.js +1 -0
- package/dist/docs/assets/chunks/chunk-32BRIVSS.BYzKapof.js +1 -0
- package/dist/docs/assets/chunks/chunk-5VM5RSS4.c3oeF0uS.js +15 -0
- package/dist/docs/assets/chunks/chunk-EX3LRPZG.Cz5AKl7t.js +231 -0
- package/dist/docs/assets/chunks/chunk-JWPE2WC7.DtJxsA7-.js +1 -0
- package/dist/docs/assets/chunks/chunk-MOJQB5TN.h5kO0Dtu.js +88 -0
- package/dist/docs/assets/chunks/chunk-RYQCIY6F.Ch_NfMTR.js +1 -0
- package/dist/docs/assets/chunks/chunk-V7JOEXUC.CHrHyPoW.js +206 -0
- package/dist/docs/assets/chunks/chunk-VR4S4FIN.DG8DIrH3.js +1 -0
- package/dist/docs/assets/chunks/chunk-XXDRQBXY.CSXBN12Y.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-OUVF2IWQ.DV5B4KLJ.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-EOCWNBFH.DV5B4KLJ.js +1 -0
- package/dist/docs/assets/chunks/cose-bilkent-JH36ORCC.BeFuOTgi.js +1 -0
- package/dist/docs/assets/chunks/cynefin-VYW2F7L2.DaXIfh7Y.js +178 -0
- package/dist/docs/assets/chunks/cynefinDiagram-TSTJHNR4.BrJcHEEe.js +62 -0
- package/dist/docs/assets/chunks/cytoscape.esm.CUqq0XTU.js +331 -0
- package/dist/docs/assets/chunks/dagre-VKFMJZFB.D4vaA23X.js +4 -0
- package/dist/docs/assets/chunks/defaultLocale.DX6XiGOO.js +1 -0
- package/dist/docs/assets/chunks/diagram-FQU43EPY.uwRFLKRx.js +3 -0
- package/dist/docs/assets/chunks/diagram-G47NLZAW.Byfc9d0H.js +24 -0
- package/dist/docs/assets/chunks/diagram-NH7WQ7WH.CxjBEGZX.js +24 -0
- package/dist/docs/assets/chunks/diagram-OA4YK3LP.CU1jGXMi.js +30 -0
- package/dist/docs/assets/chunks/diagram-WEI45ONY.yXgVkURA.js +41 -0
- package/dist/docs/assets/chunks/ebnfDiagram-CCIWWBDH.UucqGQ_d.js +1 -0
- package/dist/docs/assets/chunks/erDiagram-Q63AITRT.C6qmOrvh.js +85 -0
- package/dist/docs/assets/chunks/flowDiagram-23GEKE2U.BZLu-WUl.js +156 -0
- package/dist/docs/assets/chunks/framework.D_Xv2a7c.js +19 -0
- package/dist/docs/assets/chunks/ganttDiagram-NO4QXBWP.DUzsw4Yr.js +292 -0
- package/dist/docs/assets/chunks/gitGraphDiagram-IHSO6WYX.BqLfYTI7.js +106 -0
- package/dist/docs/assets/chunks/graph.C2PyVmSI.js +1 -0
- package/dist/docs/assets/chunks/infoDiagram-FWYZ7A6U.CiKWveW9.js +2 -0
- package/dist/docs/assets/chunks/init.Gi6I4Gst.js +1 -0
- package/dist/docs/assets/chunks/ishikawaDiagram-FXEZZL3T.jerUXEXA.js +70 -0
- package/dist/docs/assets/chunks/journeyDiagram-5HDEW3XC.Cqzvo6I_.js +139 -0
- package/dist/docs/assets/chunks/kanban-definition-HUTT4EX6.BzJ4OPe5.js +89 -0
- package/dist/docs/assets/chunks/katex.C5jXJg4s.js +257 -0
- package/dist/docs/assets/chunks/layout.BG3qr61M.js +1 -0
- package/dist/docs/assets/chunks/linear.hFjgYGMN.js +1 -0
- package/dist/docs/assets/chunks/map.DwDi8XlU.js +1 -0
- package/dist/docs/assets/chunks/mermaid-client.D3gEaJ5e.js +2 -0
- package/dist/docs/assets/chunks/mermaid.core.CEHdFh45.js +314 -0
- package/dist/docs/assets/chunks/mindmap-definition-LN4V7U3C.ChC5FJW6.js +96 -0
- package/dist/docs/assets/chunks/ordinal.BYWQX77i.js +1 -0
- package/dist/docs/assets/chunks/pegDiagram-2B236MQR.ClnjsRYs.js +1 -0
- package/dist/docs/assets/chunks/pieDiagram-ENE6RG2P.Bb0MqerK.js +39 -0
- package/dist/docs/assets/chunks/quadrantDiagram-ABIIQ3AL.Do6HK_yb.js +7 -0
- package/dist/docs/assets/chunks/railroadDiagram-RFXS5EU6.D35m6hQn.js +1 -0
- package/dist/docs/assets/chunks/requirementDiagram-TGXJPOKE.DMtjRYUg.js +84 -0
- package/dist/docs/assets/chunks/sankeyDiagram-HTMAVEWB.dfXDu62B.js +40 -0
- package/dist/docs/assets/chunks/sequenceDiagram-DBY2YBRQ.CLZ0rZTY.js +162 -0
- package/dist/docs/assets/chunks/sizeCapture-X5ZJPWSS.DWvGYLUT.js +1 -0
- package/dist/docs/assets/chunks/stateDiagram-2N3HPSRC.DY8sDkI0.js +1 -0
- package/dist/docs/assets/chunks/stateDiagram-v2-6OUMAXLB.B9v-Vq5L.js +1 -0
- package/dist/docs/assets/chunks/swimlanes-5IMT3BWC.Dy9SffeT.js +2 -0
- package/dist/docs/assets/chunks/swimlanesDiagram-G3AALYLV.Kb9LnCTH.js +8 -0
- package/dist/docs/assets/chunks/theme.BLEczZWC.js +2 -0
- package/dist/docs/assets/chunks/timeline-definition-FHXFAJF6.CH6uzgIu.js +120 -0
- package/dist/docs/assets/chunks/vennDiagram-L72KCM5P.7EBCJmyP.js +34 -0
- package/dist/docs/assets/chunks/wardleyDiagram-EHGQE667.DPHAQssL.js +78 -0
- package/dist/docs/assets/chunks/xychartDiagram-FW5EYKEG.aKgxZVbK.js +7 -0
- package/dist/docs/assets/index.md.p9floL_p.js +1 -0
- package/dist/docs/assets/index.md.p9floL_p.lean.js +1 -0
- package/dist/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/dist/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/dist/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/dist/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/dist/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/dist/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/dist/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/dist/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/dist/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/dist/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/dist/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/dist/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/dist/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/dist/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/dist/docs/assets/overview.md.BKVdLT3o.js +70 -0
- package/dist/docs/assets/overview.md.BKVdLT3o.lean.js +1 -0
- package/dist/docs/assets/packages-utils.md.CvgYp5Ll.js +31 -0
- package/dist/docs/assets/packages-utils.md.CvgYp5Ll.lean.js +1 -0
- package/dist/docs/assets/proxy-admin_env-and-build.md.xkeQNYS3.js +40 -0
- package/dist/docs/assets/proxy-admin_env-and-build.md.xkeQNYS3.lean.js +1 -0
- package/dist/docs/assets/proxy-admin_index.md.DBLI0n0G.js +38 -0
- package/dist/docs/assets/proxy-admin_index.md.DBLI0n0G.lean.js +1 -0
- package/dist/docs/assets/proxy-admin_layout-and-menu.md.BKGcu49p.js +48 -0
- package/dist/docs/assets/proxy-admin_layout-and-menu.md.BKGcu49p.lean.js +1 -0
- package/dist/docs/assets/proxy-admin_pages.md.m_fGvvOH.js +51 -0
- package/dist/docs/assets/proxy-admin_pages.md.m_fGvvOH.lean.js +1 -0
- package/dist/docs/assets/proxy-admin_routing-and-auth.md.DZsdFese.js +106 -0
- package/dist/docs/assets/proxy-admin_routing-and-auth.md.DZsdFese.lean.js +1 -0
- package/dist/docs/assets/proxy-admin_services-and-mock.md.sdNPcf25.js +66 -0
- package/dist/docs/assets/proxy-admin_services-and-mock.md.sdNPcf25.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_api-layer.md.GfdbtEUx.js +1 -0
- package/dist/docs/assets/proxy-cli_api-layer.md.GfdbtEUx.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_app-shell.md.Do18CYhW.js +83 -0
- package/dist/docs/assets/proxy-cli_app-shell.md.Do18CYhW.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_components-common.md.Dd6Yazvz.js +23 -0
- package/dist/docs/assets/proxy-cli_components-common.md.Dd6Yazvz.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_components-config.md.B81Y3ta2.js +46 -0
- package/dist/docs/assets/proxy-cli_components-config.md.B81Y3ta2.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_components-requests.md.vN8IrwL_.js +84 -0
- package/dist/docs/assets/proxy-cli_components-requests.md.vN8IrwL_.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_components-stats.md.B90esaNa.js +14 -0
- package/dist/docs/assets/proxy-cli_components-stats.md.B90esaNa.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_components-status.md.C5lAzS2c.js +42 -0
- package/dist/docs/assets/proxy-cli_components-status.md.C5lAzS2c.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_data-hooks.md.w9Oe1OD3.js +87 -0
- package/dist/docs/assets/proxy-cli_data-hooks.md.w9Oe1OD3.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_index.md.BA6g8QD-.js +34 -0
- package/dist/docs/assets/proxy-cli_index.md.BA6g8QD-.lean.js +1 -0
- package/dist/docs/assets/proxy-cli_utils-and-i18n.md.Ch_e-g_o.js +34 -0
- package/dist/docs/assets/proxy-cli_utils-and-i18n.md.Ch_e-g_o.lean.js +1 -0
- package/dist/docs/assets/proxy-core_chat-api.md.DHihiBxR.js +152 -0
- package/dist/docs/assets/proxy-core_chat-api.md.DHihiBxR.lean.js +1 -0
- package/dist/docs/assets/proxy-core_cli.md.DCFYX4Bd.js +37 -0
- package/dist/docs/assets/proxy-core_cli.md.DCFYX4Bd.lean.js +1 -0
- package/dist/docs/assets/proxy-core_config.md.BXSOyxYE.js +83 -0
- package/dist/docs/assets/proxy-core_config.md.BXSOyxYE.lean.js +1 -0
- package/dist/docs/assets/proxy-core_data-layer.md.Cdomb3Gz.js +85 -0
- package/dist/docs/assets/proxy-core_data-layer.md.Cdomb3Gz.lean.js +1 -0
- package/dist/docs/assets/proxy-core_entry.md.BZmIcCUM.js +90 -0
- package/dist/docs/assets/proxy-core_entry.md.BZmIcCUM.lean.js +1 -0
- package/dist/docs/assets/proxy-core_index.md.BM6VV5Qe.js +55 -0
- package/dist/docs/assets/proxy-core_index.md.BM6VV5Qe.lean.js +1 -0
- package/dist/docs/assets/proxy-core_pm2.md.DUhWEtgn.js +79 -0
- package/dist/docs/assets/proxy-core_pm2.md.DUhWEtgn.lean.js +1 -0
- package/dist/docs/assets/proxy-core_providers.md.CbDZ6b_7.js +1 -0
- package/dist/docs/assets/proxy-core_providers.md.CbDZ6b_7.lean.js +1 -0
- package/dist/docs/assets/proxy-core_proxy.md.CzQYmX6X.js +46 -0
- package/dist/docs/assets/proxy-core_proxy.md.CzQYmX6X.lean.js +1 -0
- package/dist/docs/assets/proxy-core_stats.md.BsM6wuK_.js +42 -0
- package/dist/docs/assets/proxy-core_stats.md.BsM6wuK_.lean.js +1 -0
- package/dist/docs/assets/proxy-core_tool.md.B6Le1nQr.js +100 -0
- package/dist/docs/assets/proxy-core_tool.md.B6Le1nQr.lean.js +1 -0
- package/dist/docs/assets/proxy-core_ui-routes.md.Dyqkeoiv.js +27 -0
- package/dist/docs/assets/proxy-core_ui-routes.md.Dyqkeoiv.lean.js +1 -0
- package/dist/docs/assets/proxy-core_utilities.md.C18pjnkz.js +63 -0
- package/dist/docs/assets/proxy-core_utilities.md.C18pjnkz.lean.js +1 -0
- package/dist/docs/assets/quickstart.md.Cy_FmXIY.js +38 -0
- package/dist/docs/assets/quickstart.md.Cy_FmXIY.lean.js +1 -0
- package/dist/docs/assets/request-flow.md.C1fyxdPE.js +146 -0
- package/dist/docs/assets/request-flow.md.C1fyxdPE.lean.js +1 -0
- package/dist/docs/assets/style.DU_kNMWy.css +1 -0
- package/dist/docs/hashmap.json +1 -0
- package/dist/docs/index.html +25 -0
- package/dist/docs/overview.html +94 -0
- package/dist/docs/packages-utils.html +55 -0
- package/dist/docs/proxy-admin/env-and-build.html +64 -0
- package/dist/docs/proxy-admin/index.html +62 -0
- package/dist/docs/proxy-admin/layout-and-menu.html +72 -0
- package/dist/docs/proxy-admin/pages.html +75 -0
- package/dist/docs/proxy-admin/routing-and-auth.html +130 -0
- package/dist/docs/proxy-admin/services-and-mock.html +90 -0
- package/dist/docs/proxy-cli/api-layer.html +38 -0
- package/dist/docs/proxy-cli/app-shell.html +107 -0
- package/dist/docs/proxy-cli/components-common.html +47 -0
- package/dist/docs/proxy-cli/components-config.html +70 -0
- package/dist/docs/proxy-cli/components-requests.html +108 -0
- package/dist/docs/proxy-cli/components-stats.html +38 -0
- package/dist/docs/proxy-cli/components-status.html +66 -0
- package/dist/docs/proxy-cli/data-hooks.html +111 -0
- package/dist/docs/proxy-cli/index.html +58 -0
- package/dist/docs/proxy-cli/utils-and-i18n.html +58 -0
- package/dist/docs/proxy-core/chat-api.html +176 -0
- package/dist/docs/proxy-core/cli.html +61 -0
- package/dist/docs/proxy-core/config.html +107 -0
- package/dist/docs/proxy-core/data-layer.html +109 -0
- package/dist/docs/proxy-core/entry.html +114 -0
- package/dist/docs/proxy-core/index.html +79 -0
- package/dist/docs/proxy-core/pm2.html +103 -0
- package/dist/docs/proxy-core/providers.html +39 -0
- package/dist/docs/proxy-core/proxy.html +70 -0
- package/dist/docs/proxy-core/stats.html +66 -0
- package/dist/docs/proxy-core/tool.html +124 -0
- package/dist/docs/proxy-core/ui-routes.html +51 -0
- package/dist/docs/proxy-core/utilities.html +87 -0
- package/dist/docs/quickstart.html +62 -0
- package/dist/docs/request-flow.html +170 -0
- package/dist/docs/vp-icons.css +0 -0
- package/dist/server/proxy.js +2 -1
- package/dist/ui/assets/{1c-KmWe8RWs.js → 1c-DPsrzNHI.js} +1 -1
- package/dist/ui/assets/{abnf-BKQ6qIuo.js → abnf-DNkBIQRO.js} +1 -1
- package/dist/ui/assets/{abnfDiagram-VRR7QNED-CkRuDPu1.js → abnfDiagram-VRR7QNED-BqvHvzR8.js} +1 -1
- package/dist/ui/assets/{accesslog-DD9H5Ktc.js → accesslog-D5NxQ43Q.js} +1 -1
- package/dist/ui/assets/{actionscript-CAjf2Qtd.js → actionscript-DLr-LB2m.js} +1 -1
- package/dist/ui/assets/{ada-BXkXW16O.js → ada-BRSz3tHX.js} +1 -1
- package/dist/ui/assets/{angelscript-BxT7o0Up.js → angelscript-DMtEGgIa.js} +1 -1
- package/dist/ui/assets/{apache-C5z_tmVm.js → apache-C4gn4cSd.js} +1 -1
- package/dist/ui/assets/{applescript-DdIxl8rr.js → applescript-DoodcTwg.js} +1 -1
- package/dist/ui/assets/{arc-hSdFaqKn.js → arc-HmnzaGf9.js} +1 -1
- package/dist/ui/assets/{arcade-D5m0roat.js → arcade-RJZZSHSl.js} +1 -1
- package/dist/ui/assets/{architectureDiagram-ZJ3FMSHR-DOSHSqzf.js → architectureDiagram-ZJ3FMSHR-BUfDpSIw.js} +1 -1
- package/dist/ui/assets/{arduino-FDap8kq-.js → arduino-n6Dpx6Ig.js} +1 -1
- package/dist/ui/assets/{armasm-Kzp-Jr1v.js → armasm-DzCVITGB.js} +1 -1
- package/dist/ui/assets/{asciidoc-DbGMW3EE.js → asciidoc-CaqMsApq.js} +1 -1
- package/dist/ui/assets/{aspectj-CVYMmBCO.js → aspectj-B0kIcV0v.js} +1 -1
- package/dist/ui/assets/{autohotkey-9PmBGTPd.js → autohotkey-xUEXewap.js} +1 -1
- package/dist/ui/assets/{autoit-B4F86jgh.js → autoit-D3OfN2VX.js} +1 -1
- package/dist/ui/assets/{avrasm-CSzv2eHX.js → avrasm-Cbf0F4Kf.js} +1 -1
- package/dist/ui/assets/{awk-CjsvYvZE.js → awk-Cc0rWEwe.js} +1 -1
- package/dist/ui/assets/{axapta-BVgMoNRY.js → axapta-BKEeoUEe.js} +1 -1
- package/dist/ui/assets/{bash-IeBjW3pt.js → bash-D6JH6L3m.js} +1 -1
- package/dist/ui/assets/{basic-BTFJfmV1.js → basic-ka6JXc9C.js} +1 -1
- package/dist/ui/assets/{blockDiagram-677ZJIJ3-DLw3Bbhf.js → blockDiagram-677ZJIJ3-BHXRSjnM.js} +1 -1
- package/dist/ui/assets/{bnf-rCkeRYk0.js → bnf-Bxclk5tZ.js} +1 -1
- package/dist/ui/assets/{brainfuck-DBHuB3uZ.js → brainfuck--s_Fd8b9.js} +1 -1
- package/dist/ui/assets/{coq-TwFFolHa.js → c-BsgdDna0.js} +1 -1
- package/dist/ui/assets/{c-like-CK1xGeX_.js → c-like-CNkOkbqh.js} +1 -1
- package/dist/ui/assets/{c4Diagram-LMCZKHZV-cqY51yJw.js → c4Diagram-LMCZKHZV-Bp1uSrW8.js} +1 -1
- package/dist/ui/assets/{cal-BxGPpEZK.js → cal-LVlIOy9W.js} +1 -1
- package/dist/ui/assets/{capnproto-Bo2fgXF9.js → capnproto-r9DiQ1H8.js} +1 -1
- package/dist/ui/assets/{ceylon-C4Bb4pNB.js → ceylon-CTNzyZJX.js} +1 -1
- package/dist/ui/assets/channel-_rFUXR2i.js +1 -0
- package/dist/ui/assets/{chunk-2Q5K7J3B-CGTiTBmo.js → chunk-2Q5K7J3B-nnLVtUW3.js} +1 -1
- package/dist/ui/assets/{chunk-32BRIVSS-DWagYBp9.js → chunk-32BRIVSS-BDNS6igp.js} +1 -1
- package/dist/ui/assets/{chunk-5VM5RSS4-BzSBMKJX.js → chunk-5VM5RSS4-D713xBhI.js} +1 -1
- package/dist/ui/assets/{chunk-EX3LRPZG-4-aKwCgZ.js → chunk-EX3LRPZG-DExsU6Rd.js} +1 -1
- package/dist/ui/assets/{chunk-JWPE2WC7-CPC_cBN0.js → chunk-JWPE2WC7-DcpW5RnW.js} +1 -1
- package/dist/ui/assets/{chunk-MOJQB5TN-DrDE4H9w.js → chunk-MOJQB5TN-BQiSZNTn.js} +1 -1
- package/dist/ui/assets/{chunk-RYQCIY6F-DkdXe_kU.js → chunk-RYQCIY6F-DfblgZPd.js} +1 -1
- package/dist/ui/assets/{chunk-V7JOEXUC-Da6EWcQt.js → chunk-V7JOEXUC-np--VgmN.js} +1 -1
- package/dist/ui/assets/{chunk-VR4S4FIN-nP6dstD5.js → chunk-VR4S4FIN-BG0IhjO6.js} +1 -1
- package/dist/ui/assets/{chunk-XXDRQBXY-Bi_rRAPA.js → chunk-XXDRQBXY-DHuoh-RB.js} +1 -1
- package/dist/ui/assets/classDiagram-OUVF2IWQ-DqgbMzM1.js +1 -0
- package/dist/ui/assets/classDiagram-v2-EOCWNBFH-DqgbMzM1.js +1 -0
- package/dist/ui/assets/{clean-cc1m9AxK.js → clean-CtVj0-EB.js} +1 -1
- package/dist/ui/assets/{clojure-DX5V8QA8.js → clojure-CZwle60-.js} +1 -1
- package/dist/ui/assets/{clojure-repl-FzjnVNWQ.js → clojure-repl-DJXWH00I.js} +1 -1
- package/dist/ui/assets/{cmake-COZZyrKs.js → cmake-Boxf0e7r.js} +1 -1
- package/dist/ui/assets/{coffeescript-DBsnOmC4.js → coffeescript-h85ZW4Gm.js} +1 -1
- package/dist/ui/assets/{c-C95V0zHL.js → coq-CVLui3m8.js} +1 -1
- package/dist/ui/assets/{cos-Dm5g-IQT.js → cos-CL0igafw.js} +1 -1
- package/dist/ui/assets/{cose-bilkent-JH36ORCC-B3-weOQF.js → cose-bilkent-JH36ORCC-CnXyotYB.js} +1 -1
- package/dist/ui/assets/{cpp-_RZxQjg7.js → cpp-vite1NvJ.js} +1 -1
- package/dist/ui/assets/{crmsh-DGPJ11Gt.js → crmsh-DqT9g0Iq.js} +1 -1
- package/dist/ui/assets/{crystal-BOMSPGge.js → crystal-Oans-K8G.js} +1 -1
- package/dist/ui/assets/{csharp-DZXiHH72.js → csharp-sCaDAzIB.js} +1 -1
- package/dist/ui/assets/{csp-DDSIMUoU.js → csp-rMcp93pK.js} +1 -1
- package/dist/ui/assets/{css-Bjye-ZWr.js → css-BwDLHi_h.js} +1 -1
- package/dist/ui/assets/{cynefin-VYW2F7L2-Cj5c4L3y.js → cynefin-VYW2F7L2-D8Bmecdd.js} +1 -1
- package/dist/ui/assets/{cynefinDiagram-TSTJHNR4-BYsfTeNX.js → cynefinDiagram-TSTJHNR4-BT2YFmPZ.js} +1 -1
- package/dist/ui/assets/{d-22pfurOx.js → d-BFgZm0RV.js} +1 -1
- package/dist/ui/assets/{dagre-VKFMJZFB-DiEob-by.js → dagre-VKFMJZFB-BeJU73ex.js} +1 -1
- package/dist/ui/assets/{dart-Doiu8cDW.js → dart-rIo85iL3.js} +1 -1
- package/dist/ui/assets/{delphi-CQ7epp84.js → delphi-Bi2Rfp1o.js} +1 -1
- package/dist/ui/assets/{diagram-FQU43EPY-BOPbQcL4.js → diagram-FQU43EPY-CHQiS5Fr.js} +1 -1
- package/dist/ui/assets/{diagram-G47NLZAW-C1UWDJTx.js → diagram-G47NLZAW-EVerd4V8.js} +1 -1
- package/dist/ui/assets/{diagram-NH7WQ7WH-CYsBqW3J.js → diagram-NH7WQ7WH-DMP0VOAs.js} +1 -1
- package/dist/ui/assets/{diagram-OA4YK3LP-Dnag0x_3.js → diagram-OA4YK3LP-CAur5jK9.js} +1 -1
- package/dist/ui/assets/{diagram-WEI45ONY-Bo4CsDoj.js → diagram-WEI45ONY-DvmKkPH7.js} +1 -1
- package/dist/ui/assets/{diff-Cs6VQQZt.js → diff-CZZCIG00.js} +1 -1
- package/dist/ui/assets/{django-Bo3okOrw.js → django-D88PKHy-.js} +1 -1
- package/dist/ui/assets/{dns-BpG60eIX.js → dns-DX4hzjUh.js} +1 -1
- package/dist/ui/assets/{dockerfile-BWyH8SlV.js → dockerfile-1lgzEXn1.js} +1 -1
- package/dist/ui/assets/{dos-DWlNbaB9.js → dos-CwrC1ROy.js} +1 -1
- package/dist/ui/assets/{dsconfig-D_8y8YrJ.js → dsconfig-tvVdBv4w.js} +1 -1
- package/dist/ui/assets/{dts-Cz4SyMYR.js → dts-DTgQkdRs.js} +1 -1
- package/dist/ui/assets/{dust-Cu4qLkeH.js → dust-BbLlyCpf.js} +1 -1
- package/dist/ui/assets/{ebnf-CTVHui3r.js → ebnf-D6Dc4oRr.js} +1 -1
- package/dist/ui/assets/{ebnfDiagram-CCIWWBDH-epcXQLEj.js → ebnfDiagram-CCIWWBDH-Kvilk1RF.js} +1 -1
- package/dist/ui/assets/{elixir-MAlwXhfU.js → elixir-CnMolQVs.js} +1 -1
- package/dist/ui/assets/{elm-Bdmwbvef.js → elm-BQ7VQFn7.js} +1 -1
- package/dist/ui/assets/{erDiagram-Q63AITRT-Bb60TqAM.js → erDiagram-Q63AITRT-C-S9oHZd.js} +1 -1
- package/dist/ui/assets/{erb-Ce9TpP4g.js → erb-B_1g6fXE.js} +1 -1
- package/dist/ui/assets/{erlang-CN2GEiqk.js → erlang-3b3ITXJu.js} +1 -1
- package/dist/ui/assets/{erlang-repl-D8K4O_cp.js → erlang-repl-Cy6Z3TdH.js} +1 -1
- package/dist/ui/assets/{excel-eVZU1r0f.js → excel-DtkATto8.js} +1 -1
- package/dist/ui/assets/{fix-BzKerEv0.js → fix-DsEG7TDI.js} +1 -1
- package/dist/ui/assets/{flix-B9CE3skV.js → flix-CQ-rKwGO.js} +1 -1
- package/dist/ui/assets/{flowDiagram-23GEKE2U-DzMLZIyt.js → flowDiagram-23GEKE2U-EbHDNMCC.js} +1 -1
- package/dist/ui/assets/{fortran-B4__3vos.js → fortran-AqzaRCEt.js} +1 -1
- package/dist/ui/assets/{fsharp-BJ3-ARHz.js → fsharp-CCzWGasu.js} +1 -1
- package/dist/ui/assets/{gams-Cu43oSYT.js → gams-Bqa6CB_r.js} +1 -1
- package/dist/ui/assets/{ganttDiagram-NO4QXBWP-D_aAoMRP.js → ganttDiagram-NO4QXBWP-B6jvc6O7.js} +1 -1
- package/dist/ui/assets/{gauss-T8vk_TpE.js → gauss-D4Utubeh.js} +1 -1
- package/dist/ui/assets/{gcode-9j3BicpZ.js → gcode-By3KwWjb.js} +1 -1
- package/dist/ui/assets/{gherkin-Dyh5KFG-.js → gherkin-PXOPjT7Y.js} +1 -1
- package/dist/ui/assets/{gitGraphDiagram-IHSO6WYX-CMxCHC-Z.js → gitGraphDiagram-IHSO6WYX-C5l6rHvK.js} +1 -1
- package/dist/ui/assets/{glsl-DWWjN4ts.js → glsl-KmmyBk93.js} +1 -1
- package/dist/ui/assets/{gml-BcYE-D5A.js → gml-C1Qw_Nrt.js} +1 -1
- package/dist/ui/assets/{go-DUnUzOEI.js → go-DaBQtdp1.js} +1 -1
- package/dist/ui/assets/{golo-BDoc1QQL.js → golo-D7PDzNpb.js} +1 -1
- package/dist/ui/assets/{gradle-B_WRa_bT.js → gradle-nXueCYH-.js} +1 -1
- package/dist/ui/assets/{groovy-CgjqFq1e.js → groovy-DFDsQDhl.js} +1 -1
- package/dist/ui/assets/{haml-DCqcg7Ti.js → haml-B_zxHzy_.js} +1 -1
- package/dist/ui/assets/{handlebars-DSDUQrnw.js → handlebars-BdMY-8KA.js} +1 -1
- package/dist/ui/assets/{haskell-DPVnctVi.js → haskell-CftsIPps.js} +1 -1
- package/dist/ui/assets/{haxe-BuCGXBa4.js → haxe-BFZb0OIE.js} +1 -1
- package/dist/ui/assets/{hsp-BTKpS_u0.js → hsp-EPTuqwtZ.js} +1 -1
- package/dist/ui/assets/{htmlbars-Cql3Jvy2.js → htmlbars-B7ZSC-iN.js} +1 -1
- package/dist/ui/assets/{http-BB8I9jUh.js → http-BxSd_aa1.js} +1 -1
- package/dist/ui/assets/{hy-DG7xkZNz.js → hy-D-rBN9MQ.js} +1 -1
- package/dist/ui/assets/index-CWFn1h-J.css +10 -0
- package/dist/ui/assets/{index-CfTIGTiY.js → index-DSGZBcd1.js} +166 -171
- package/dist/ui/assets/{index-DqIiCkSD.js → index-Dlp8uGHu.js} +3 -3
- package/dist/ui/assets/{infoDiagram-FWYZ7A6U-DIzEV-BJ.js → infoDiagram-FWYZ7A6U-BOF_kBqe.js} +1 -1
- package/dist/ui/assets/{inform7-BWNpVEkA.js → inform7-OjpbRXZf.js} +1 -1
- package/dist/ui/assets/{ini-BMw_C8EP.js → ini-Dc-QApXQ.js} +1 -1
- package/dist/ui/assets/{irpf90-Cy42ibFZ.js → irpf90-C4OfYiST.js} +1 -1
- package/dist/ui/assets/{isbl-CjFSc0hz.js → isbl-9km6K6Sf.js} +1 -1
- package/dist/ui/assets/{ishikawaDiagram-FXEZZL3T-BZcxp5am.js → ishikawaDiagram-FXEZZL3T-BvKSD8LY.js} +1 -1
- package/dist/ui/assets/{java-BDxe9dp1.js → java-C2mOf3QX.js} +1 -1
- package/dist/ui/assets/{javascript-CgLkkj7h.js → javascript-_i0Q5MkQ.js} +1 -1
- package/dist/ui/assets/{jboss-cli-C8biclrb.js → jboss-cli-BS5ipQOv.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-5HDEW3XC-BbJu6m6Q.js → journeyDiagram-5HDEW3XC-yKdSl63P.js} +1 -1
- package/dist/ui/assets/{json-BjJKhmM6.js → json-Dci0MO4x.js} +1 -1
- package/dist/ui/assets/{julia-DvKEpg-R.js → julia-bEqo4nlV.js} +1 -1
- package/dist/ui/assets/{julia-repl-BDJWZxkU.js → julia-repl-Co6hf47q.js} +1 -1
- package/dist/ui/assets/{kanban-definition-HUTT4EX6-DeIVPlbv.js → kanban-definition-HUTT4EX6-B7BbZCd6.js} +1 -1
- package/dist/ui/assets/{kotlin-DCoXcnEb.js → kotlin-krx8WewB.js} +1 -1
- package/dist/ui/assets/{lasso-C7m0QmV2.js → lasso-d3ZTv9Tj.js} +1 -1
- package/dist/ui/assets/{latex-SHnTG9Eq.js → latex-BNWbHYxK.js} +1 -1
- package/dist/ui/assets/{ldif-_6hUnKPV.js → ldif-Bs8eb63L.js} +1 -1
- package/dist/ui/assets/{leaf-Co9qxlaF.js → leaf-BTbRDVWB.js} +1 -1
- package/dist/ui/assets/{less-CJRDPwNA.js → less-DH5cqJTD.js} +1 -1
- package/dist/ui/assets/{lisp-JEHGYbiW.js → lisp-CBUvBYtR.js} +1 -1
- package/dist/ui/assets/{livecodeserver-BSYaUj4k.js → livecodeserver-CkM7-E4a.js} +1 -1
- package/dist/ui/assets/{livescript-WQMCQeuz.js → livescript-DomXyXUO.js} +1 -1
- package/dist/ui/assets/{llvm-DnAHqj5I.js → llvm-e_-ff59-.js} +1 -1
- package/dist/ui/assets/{lsl--k-ghYia.js → lsl-BNDsGOmv.js} +1 -1
- package/dist/ui/assets/{lua-CXb23hbC.js → lua-_ZmkXwc_.js} +1 -1
- package/dist/ui/assets/{makefile-CM7o86yn.js → makefile-BhG7cThe.js} +1 -1
- package/dist/ui/assets/{markdown-HB3HvChQ.js → markdown-ClW2SRy6.js} +1 -1
- package/dist/ui/assets/{mathematica-9NTuf22N.js → mathematica-kqoCR611.js} +1 -1
- package/dist/ui/assets/{matlab-CWv-ik4r.js → matlab-DqawyK3q.js} +1 -1
- package/dist/ui/assets/{maxima-CqYiKCrw.js → maxima-B0qzCXe1.js} +1 -1
- package/dist/ui/assets/{mel-BbsRpUm5.js → mel-BZaSas3B.js} +1 -1
- package/dist/ui/assets/{mercury-Cz2j4HhU.js → mercury-ByD0wyJH.js} +1 -1
- package/dist/ui/assets/{mindmap-definition-LN4V7U3C-WyJS8oye.js → mindmap-definition-LN4V7U3C-Ce6QsaH5.js} +1 -1
- package/dist/ui/assets/{mipsasm-BqWSRbQV.js → mipsasm-B08lqZSo.js} +1 -1
- package/dist/ui/assets/{mizar-JLBfQ6vt.js → mizar-7iaUqWPq.js} +1 -1
- package/dist/ui/assets/{mojolicious-D0LbMmyk.js → mojolicious-CbH-d8Wh.js} +1 -1
- package/dist/ui/assets/{monkey-DAGL6-JN.js → monkey-D5z6-hFH.js} +1 -1
- package/dist/ui/assets/{moonscript-DzbwNSKy.js → moonscript-DuLd7pdm.js} +1 -1
- package/dist/ui/assets/{n1ql-dkgKq6Yv.js → n1ql-EbVfQMfD.js} +1 -1
- package/dist/ui/assets/{nginx-AUoaDPV4.js → nginx-D-4AxpHP.js} +1 -1
- package/dist/ui/assets/{nim-CdqYmVrl.js → nim-wPHQEX5v.js} +1 -1
- package/dist/ui/assets/{nix-CxmVjwwo.js → nix-6SVkxAXi.js} +1 -1
- package/dist/ui/assets/{node-repl-B1Z3zUAh.js → node-repl-CaFKEOyj.js} +1 -1
- package/dist/ui/assets/{nsis-CTAuPWhe.js → nsis-BmqbwVv_.js} +1 -1
- package/dist/ui/assets/{objectivec-CvbKeAPz.js → objectivec-BX0R-sI2.js} +1 -1
- package/dist/ui/assets/{ocaml-DCiyXKOH.js → ocaml-CyfdrIqo.js} +1 -1
- package/dist/ui/assets/{openscad-CPGUwmeR.js → openscad-B5qfaF1E.js} +1 -1
- package/dist/ui/assets/{oxygene-CI_bD1Gw.js → oxygene-CmlCgXLr.js} +1 -1
- package/dist/ui/assets/{parser3-C91CVs85.js → parser3-DdpPyZkn.js} +1 -1
- package/dist/ui/assets/{pegDiagram-2B236MQR-yF8AW7GR.js → pegDiagram-2B236MQR-ByyVqaXh.js} +1 -1
- package/dist/ui/assets/{perl-ChxfKl-n.js → perl-D3qc2wEe.js} +1 -1
- package/dist/ui/assets/{pf-CKCHkzIA.js → pf-Bv3zza37.js} +1 -1
- package/dist/ui/assets/{pgsql-BwOP20uH.js → pgsql-BZIppw1a.js} +1 -1
- package/dist/ui/assets/{php-B7Rs2tM5.js → php-D1ScecZC.js} +1 -1
- package/dist/ui/assets/{php-template-Cx-Fh4AR.js → php-template-sEqzzKWJ.js} +1 -1
- package/dist/ui/assets/{pieDiagram-ENE6RG2P-BS4hnGNX.js → pieDiagram-ENE6RG2P-T1OgWN3l.js} +1 -1
- package/dist/ui/assets/{plaintext-U7qkdtgS.js → plaintext-DO7Jy_T2.js} +1 -1
- package/dist/ui/assets/{pony-_fGYgePh.js → pony-CTXTp2Tb.js} +1 -1
- package/dist/ui/assets/{powershell-CFBTcUce.js → powershell-C9lzZsbj.js} +1 -1
- package/dist/ui/assets/{processing-BWHneU0K.js → processing-hzJAP_Li.js} +1 -1
- package/dist/ui/assets/{profile-BJ-HxhzS.js → profile-bFiAkh7e.js} +1 -1
- package/dist/ui/assets/{prolog-ChHo7n6L.js → prolog-CE0trHSn.js} +1 -1
- package/dist/ui/assets/{properties-e_DOYclC.js → properties-MeANnTVc.js} +1 -1
- package/dist/ui/assets/{protobuf-5aGSIv7w.js → protobuf-S-rp7SK0.js} +1 -1
- package/dist/ui/assets/{puppet-D2vQatzX.js → puppet-B5YT8Ct1.js} +1 -1
- package/dist/ui/assets/{purebasic-n6krfaeF.js → purebasic-DO-5HeDl.js} +1 -1
- package/dist/ui/assets/{python-CbIo0XxP.js → python-DVGTQbwU.js} +1 -1
- package/dist/ui/assets/{python-repl-BpIq9kyr.js → python-repl-CQ4VlKLC.js} +1 -1
- package/dist/ui/assets/{q-jntnvcCx.js → q-nS96imov.js} +1 -1
- package/dist/ui/assets/{qml-BafQlZNV.js → qml-BkzkCgUU.js} +1 -1
- package/dist/ui/assets/{quadrantDiagram-ABIIQ3AL-C3Th8mUJ.js → quadrantDiagram-ABIIQ3AL-BkaCzlXD.js} +1 -1
- package/dist/ui/assets/{r-CHgvQFLK.js → r-y4Q5t85r.js} +1 -1
- package/dist/ui/assets/{railroadDiagram-RFXS5EU6-CMQkbGJl.js → railroadDiagram-RFXS5EU6-C1lbwk19.js} +1 -1
- package/dist/ui/assets/{reasonml-DNwlPD_T.js → reasonml-Bzhzc5Ao.js} +1 -1
- package/dist/ui/assets/{requirementDiagram-TGXJPOKE-B70_oR7v.js → requirementDiagram-TGXJPOKE-C8Rw6N2I.js} +1 -1
- package/dist/ui/assets/{rib-CX4e9JSF.js → rib-BP3Y9dW3.js} +1 -1
- package/dist/ui/assets/{roboconf-ee4qsPGf.js → roboconf-87QE7cIh.js} +1 -1
- package/dist/ui/assets/{routeros-BJSwvu2L.js → routeros-BV3nt8wW.js} +1 -1
- package/dist/ui/assets/{rsl-BiKdMl_F.js → rsl-DfQf4CW_.js} +1 -1
- package/dist/ui/assets/{ruby-CAXTU5LY.js → ruby-DQxFKbgX.js} +1 -1
- package/dist/ui/assets/{ruleslanguage-C1kgDGXM.js → ruleslanguage-B8oCm_aw.js} +1 -1
- package/dist/ui/assets/{rust-DyEf_GXL.js → rust-DzZgPf9W.js} +1 -1
- package/dist/ui/assets/{sankeyDiagram-HTMAVEWB-CvUfseMg.js → sankeyDiagram-HTMAVEWB-Dxiuo8Hz.js} +1 -1
- package/dist/ui/assets/{sas-Q1rlUxPH.js → sas-CFh-Rsrv.js} +1 -1
- package/dist/ui/assets/{scala-Dg6KNmge.js → scala-3UDyJBiS.js} +1 -1
- package/dist/ui/assets/{scheme-D9iooUxI.js → scheme-KaUTge9W.js} +1 -1
- package/dist/ui/assets/{scilab-CztEJXJY.js → scilab-CLSBZzuh.js} +1 -1
- package/dist/ui/assets/{scss-BMh-JkdE.js → scss-DaEkfHWX.js} +1 -1
- package/dist/ui/assets/{sequenceDiagram-DBY2YBRQ-DB0c9kf4.js → sequenceDiagram-DBY2YBRQ-Cv__zR2v.js} +1 -1
- package/dist/ui/assets/{shell-DWo6z0MG.js → shell-B0d4cZTk.js} +1 -1
- package/dist/ui/assets/{sizeCapture-X5ZJPWSS-BcQlgjfD.js → sizeCapture-X5ZJPWSS-C4nD-ShQ.js} +1 -1
- package/dist/ui/assets/{smali-Cijeb6pL.js → smali-CLhfky4R.js} +1 -1
- package/dist/ui/assets/{smalltalk-D0lvqa_d.js → smalltalk-B4aaTMO5.js} +1 -1
- package/dist/ui/assets/{sml-B-vqWZ3b.js → sml-x4CTxWEZ.js} +1 -1
- package/dist/ui/assets/{sqf-BJ-1Q583.js → sqf-G_0vdVVs.js} +1 -1
- package/dist/ui/assets/{sql-CMGLxEYV.js → sql-C--WH0Fo.js} +1 -1
- package/dist/ui/assets/{sql_more-gsRmbNCH.js → sql_more-B4LrzCtd.js} +1 -1
- package/dist/ui/assets/{stan-D1AlTSpf.js → stan-CACDFOA0.js} +1 -1
- package/dist/ui/assets/{stata-DnEYviI0.js → stata-BP9M7sZt.js} +1 -1
- package/dist/ui/assets/{stateDiagram-2N3HPSRC-BSRgVsHO.js → stateDiagram-2N3HPSRC-z3-31Cr2.js} +1 -1
- package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-BKIXFHzO.js +1 -0
- package/dist/ui/assets/{step21-DbQV9sMo.js → step21-MAOu4dNb.js} +1 -1
- package/dist/ui/assets/{stylus-Cyc7vdUc.js → stylus-CpuP3pvE.js} +1 -1
- package/dist/ui/assets/{subunit-16ipyMie.js → subunit-NWzuqFhT.js} +1 -1
- package/dist/ui/assets/{swift-DTNnw4qS.js → swift-DuFKNmKv.js} +1 -1
- package/dist/ui/assets/{swimlanes-5IMT3BWC-DgOdcc4_.js → swimlanes-5IMT3BWC-E463-rXd.js} +2 -2
- package/dist/ui/assets/swimlanesDiagram-G3AALYLV-CkQvBOYs.js +8 -0
- package/dist/ui/assets/{taggerscript-DM6pvUWE.js → taggerscript-BDnv2jvg.js} +1 -1
- package/dist/ui/assets/{tap-Ch-uyKZq.js → tap-aB2cLXdf.js} +1 -1
- package/dist/ui/assets/{tcl-D0T_V5dA.js → tcl-7WepIaIa.js} +1 -1
- package/dist/ui/assets/{thrift-D9xJjYw4.js → thrift-BLh6pdjc.js} +1 -1
- package/dist/ui/assets/{timeline-definition-FHXFAJF6-BBeDMHxb.js → timeline-definition-FHXFAJF6-FA_RNhFQ.js} +1 -1
- package/dist/ui/assets/{tp-kUrCGo9X.js → tp-D1rt5u_j.js} +1 -1
- package/dist/ui/assets/{twig-Cgub6rxA.js → twig-DgfeYg4W.js} +1 -1
- package/dist/ui/assets/{typescript-BxNP9Ap9.js → typescript-oU560Q8V.js} +1 -1
- package/dist/ui/assets/{vala-DF9ZZagU.js → vala-DlXsaz2B.js} +1 -1
- package/dist/ui/assets/{vbnet-Cf46ypDg.js → vbnet-BjpxjeMZ.js} +1 -1
- package/dist/ui/assets/{vbscript-DNs-QKLH.js → vbscript-DfNdtdO3.js} +1 -1
- package/dist/ui/assets/{vbscript-html-DyS6I5L1.js → vbscript-html-D09WPsgK.js} +1 -1
- package/dist/ui/assets/{vennDiagram-L72KCM5P-8WpWycE-.js → vennDiagram-L72KCM5P-zaCDWwTs.js} +1 -1
- package/dist/ui/assets/{verilog-CF5wC4X-.js → verilog-B9vENtLK.js} +1 -1
- package/dist/ui/assets/{vhdl-Dm0jpDMn.js → vhdl-CJLTZOu1.js} +1 -1
- package/dist/ui/assets/{vim-nyO2DRAx.js → vim-FuPhupu9.js} +1 -1
- package/dist/ui/assets/{wardleyDiagram-EHGQE667-UeIOK-jv.js → wardleyDiagram-EHGQE667-BS8ApwmV.js} +1 -1
- package/dist/ui/assets/{x86asm-BNw2-6GG.js → x86asm-kX_Cp6wB.js} +1 -1
- package/dist/ui/assets/{xl-D-YHxr6V.js → xl-MuHNmLUj.js} +1 -1
- package/dist/ui/assets/{xml-BijAlrow.js → xml-Mbn2z12n.js} +1 -1
- package/dist/ui/assets/{xquery-z0wxWBKz.js → xquery-Dy4lt-m-.js} +1 -1
- package/dist/ui/assets/{xychartDiagram-FW5EYKEG-BNzHLweN.js → xychartDiagram-FW5EYKEG-DoNZtZus.js} +1 -1
- package/dist/ui/assets/{yaml-n5TIQArR.js → yaml-CxxAisfE.js} +1 -1
- package/dist/ui/assets/{zephir-DrGhH8jG.js → zephir-WWG8qyld.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/package.json +2 -2
- package/dist/ui/assets/channel-D9Y4iN1l.js +0 -1
- package/dist/ui/assets/classDiagram-OUVF2IWQ-C4UVH6RI.js +0 -1
- package/dist/ui/assets/classDiagram-v2-EOCWNBFH-C4UVH6RI.js +0 -1
- package/dist/ui/assets/index-CK_lJsTu.css +0 -10
- package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-BLdfpGJO.js +0 -1
- package/dist/ui/assets/swimlanesDiagram-G3AALYLV-DRVnkg3M.js +0 -8
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN" dir="ltr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<title>proxy-core / 启动链 | CC Monitoring</title>
|
|
7
|
+
<meta name="description" content="Claude Code 代理 + 监控系统文档">
|
|
8
|
+
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
+
<link rel="preload stylesheet" href="/docs/assets/style.DU_kNMWy.css" as="style">
|
|
10
|
+
<link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
|
|
11
|
+
|
|
12
|
+
<script type="module" src="/docs/assets/app.BxFOH0P1.js"></script>
|
|
13
|
+
<link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
+
<link rel="modulepreload" href="/docs/assets/chunks/theme.BLEczZWC.js">
|
|
15
|
+
<link rel="modulepreload" href="/docs/assets/chunks/framework.D_Xv2a7c.js">
|
|
16
|
+
<link rel="modulepreload" href="/docs/assets/proxy-core_entry.md.BZmIcCUM.lean.js">
|
|
17
|
+
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
18
|
+
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
<div id="app"><div class="Layout" data-v-0fd5f79a><!--[--><!--]--><!--[--><span tabindex="-1" data-v-13bcab17></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-13bcab17>Skip to content</a><!--]--><!----><header class="VPNav" data-v-0fd5f79a data-v-221ddc7b><div class="VPNavBar" data-v-221ddc7b data-v-6a82b350><div class="wrapper" data-v-6a82b350><div class="container" data-v-6a82b350><div class="title" data-v-6a82b350><div class="VPNavBarTitle has-sidebar" data-v-6a82b350 data-v-98825d79><a class="title" href="/docs/" data-v-98825d79><!--[--><!--]--><!----><span data-v-98825d79>CC Monitoring</span><!--[--><!--]--></a></div></div><div class="content" data-v-6a82b350><div class="content-body" data-v-6a82b350><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6a82b350><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6a82b350 data-v-2fa375b4><span id="main-nav-aria-label" class="visually-hidden" data-v-2fa375b4> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/overview.html" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>概览</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/quickstart.html" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>快速开始</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/proxy-core/" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>Proxy Core</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/proxy-cli/" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>Proxy CLI</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/proxy-admin/" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>Proxy Admin</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6a82b350 data-v-c7859fea><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-c7859fea data-v-458e2939 data-v-2fadb15f><span class="check" data-v-2fadb15f><span class="icon" data-v-2fadb15f><!--[--><span class="vpi-sun sun" data-v-458e2939></span><span class="vpi-moon moon" data-v-458e2939></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-6a82b350 data-v-4a332738 data-v-3416cc30><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-3416cc30><span class="vpi-more-horizontal icon" data-v-3416cc30></span></button><div class="menu" data-v-3416cc30><div class="VPMenu" data-v-3416cc30 data-v-70b241a4><!----><!--[--><!--[--><!----><div class="group" data-v-4a332738><div class="item appearance" data-v-4a332738><p class="label" data-v-4a332738>Appearance</p><div class="appearance-action" data-v-4a332738><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-4a332738 data-v-458e2939 data-v-2fadb15f><span class="check" data-v-2fadb15f><span class="icon" data-v-2fadb15f><!--[--><span class="vpi-sun sun" data-v-458e2939></span><span class="vpi-moon moon" data-v-458e2939></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6a82b350 data-v-2b9279da><span class="container" data-v-2b9279da><span class="top" data-v-2b9279da></span><span class="middle" data-v-2b9279da></span><span class="bottom" data-v-2b9279da></span></span></button></div></div></div></div><div class="divider" data-v-6a82b350><div class="divider-line" data-v-6a82b350></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-0fd5f79a data-v-751e8533><div class="container" data-v-751e8533><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-751e8533><span class="vpi-align-left menu-icon" data-v-751e8533></span><span class="menu-text" data-v-751e8533>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-751e8533 data-v-afd8288e><button data-v-afd8288e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-0fd5f79a data-v-711af969><div class="curtain" data-v-711af969></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-711af969><span class="visually-hidden" id="sidebar-aria-label" data-v-711af969> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-4ebb8294><section class="VPSidebarItem level-0 has-active" data-v-4ebb8294 data-v-04203d25><div class="item" role="button" tabindex="0" data-v-04203d25><div class="indicator" data-v-04203d25></div><h2 class="text" data-v-04203d25>Proxy Core</h2><!----></div><div class="items" data-v-04203d25><!--[--><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/" data-v-04203d25><!--[--><p class="text" data-v-04203d25>模块概览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/entry.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>入口与启动</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/cli.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>CLI 命令</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/proxy.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>代理转发</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/ui-routes.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>UI 路由</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/providers.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>供应商管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/config.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>配置与日志</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/data-layer.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>数据层</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/stats.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>统计与历史</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/tool.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>工具注入</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/pm2.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>PM2 集成</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/utilities.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>工具函数</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/chat-api.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>Chat API</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-0fd5f79a data-v-3aa167b9><div class="VPDoc has-sidebar has-aside" data-v-3aa167b9 data-v-b2c5ca34><!--[--><!--]--><div class="container" data-v-b2c5ca34><div class="aside" data-v-b2c5ca34><div class="aside-curtain" data-v-b2c5ca34></div><div class="aside-container" data-v-b2c5ca34><div class="aside-content" data-v-b2c5ca34><div class="VPDocAside" data-v-b2c5ca34 data-v-af7efbb6><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-af7efbb6 data-v-db542fa8><div class="content" data-v-db542fa8><div class="outline-marker" data-v-db542fa8></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-db542fa8>On this page</div><ul class="VPDocOutlineItem root" data-v-db542fa8 data-v-1d036821><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-af7efbb6></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-b2c5ca34><div class="content-container" data-v-b2c5ca34><!--[--><!--]--><main class="main" data-v-b2c5ca34><div style="position:relative;" class="vp-doc _docs_proxy-core_entry" data-v-b2c5ca34><div><h1 id="proxy-core-启动链" tabindex="-1">proxy-core / 启动链 <a class="header-anchor" href="#proxy-core-启动链" aria-label="Permalink to "proxy-core / 启动链""></a></h1><h2 id="本文档覆盖的源文件" tabindex="-1">本文档覆盖的源文件 <a class="header-anchor" href="#本文档覆盖的源文件" aria-label="Permalink to "本文档覆盖的源文件""></a></h2><ul><li><code>apps/proxy-core/bin/proxy-cli.ts</code></li><li><code>apps/proxy-core/src/cli/index.ts</code></li><li><code>apps/proxy-core/src/server/index.ts</code></li><li><code>apps/proxy-core/src/utils/paths.ts</code></li><li><code>apps/proxy-core/src/utils/esm-dirname.ts</code></li><li><code>apps/proxy-core/ecosystem.config.cjs</code></li></ul><h2 id="三条入口" tabindex="-1">三条入口 <a class="header-anchor" href="#三条入口" aria-label="Permalink to "三条入口""></a></h2><p><code>proxy-core</code> 有三种被启动的方式,都最终走到 <code>startServer()</code>:</p><div class="language-mermaid vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">mermaid</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">flowchart TB</span></span>
|
|
22
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> A[pnpm cli / proxy CLI] --> BIN[bin/proxy-cli.ts]</span></span>
|
|
23
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> BIN --> CLI[src/cli/index.ts]</span></span>
|
|
24
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CLI -- start --> PM2[PM2 start ecosystem.config.cjs]</span></span>
|
|
25
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> PM2 --> SERVER[src/server/index.ts]</span></span>
|
|
26
|
+
<span class="line"></span>
|
|
27
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> B[pnpm dev:proxy-core] --> TSX[tsx src/server/index.ts]</span></span>
|
|
28
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> TSX --> SERVER</span></span>
|
|
29
|
+
<span class="line"></span>
|
|
30
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> C[PM2 daemon 重启] --> SERVER</span></span>
|
|
31
|
+
<span class="line"></span>
|
|
32
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> SERVER -->|_isPm2 ‖ _isDirectExecution| START[startServer]</span></span>
|
|
33
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> START --> LOAD[loadConfig]</span></span>
|
|
34
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> START --> DB[configureDbPath]</span></span>
|
|
35
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> START --> LOG[createLogger]</span></span>
|
|
36
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> START --> FASTIFY[Fastify + hooks]</span></span>
|
|
37
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> FASTIFY --> UI[setupUiRoutes]</span></span>
|
|
38
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> FASTIFY --> PROXY[setupProxy<br/>init MCP + preloadMachineId]</span></span>
|
|
39
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> FASTIFY --> CHAT[setupChatRoute<br/>MCP-enhanced endpoint]</span></span>
|
|
40
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> FASTIFY --> LISTEN[listen host:port]</span></span></code></pre></div><h2 id="bin-proxy-cli-ts" tabindex="-1"><code>bin/proxy-cli.ts</code> <a class="header-anchor" href="#bin-proxy-cli-ts" aria-label="Permalink to "`bin/proxy-cli.ts`""></a></h2><p><code>apps/proxy-core/bin/proxy-cli.ts:1-3</code>:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">#!/usr/bin/env node</span></span>
|
|
41
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '../dist/cli/index.js'</span></span></code></pre></div><p>只有两行:加 shebang 让它可直接执行,然后 side-effect import 编译产物。<code>package.json</code> 的 <code>bin</code> 字段指向 <code>./dist/cli/index.js</code>,全局装包(<code>npm i -g @cc-monitoring/cli-core</code>)后终端有 <code>proxy</code> 命令。</p><h2 id="src-cli-index-ts-—-commander-注册" tabindex="-1"><code>src/cli/index.ts</code> — Commander 注册 <a class="header-anchor" href="#src-cli-index-ts-—-commander-注册" aria-label="Permalink to "`src/cli/index.ts` — Commander 注册""></a></h2><p><code>apps/proxy-core/src/cli/index.ts:1-80</code>。核心结构:</p><ul><li>顶层 <code>program</code>:<code>name('proxy')</code>、<code>version('1.0.0')</code>、全局参数 <code>-c, --config <path></code></li><li><code>preAction</code> hook(<code>cli/index.ts:20-25</code>):如果传了 <code>--config</code>,用 <code>path.resolve</code> 得到绝对路径调用 <code>setConfigPathOverride</code>,供后续 <code>loadConfig</code> 命中</li><li>8 条显式命令:<code>start / stop / status / logs / config / reload / test / ui</code>(详见 <a href="./cli.html">cli.md</a>)</li><li>1 条隐藏命令:<code>clean-requests</code>(<code>cli/index.ts:63-78</code>),带 <code>--days <days></code> 参数(默认 7),动态 import <code>cleanOldRequestsDB</code> 清 SQLite 老数据</li></ul><p>命令 action 从 <code>commands/<name>.ts</code> 导入,保持文件级模块化。</p><h2 id="src-server-index-ts-—-服务端引导" tabindex="-1"><code>src/server/index.ts</code> — 服务端引导 <a class="header-anchor" href="#src-server-index-ts-—-服务端引导" aria-label="Permalink to "`src/server/index.ts` — 服务端引导""></a></h2><p><code>apps/proxy-core/src/server/index.ts:11-42</code>:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> createServer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Promise</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">FastifyInstance</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> {</span></span>
|
|
42
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> config</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> loadConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
|
|
43
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (config.storage?.path) </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">configureDbPath</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(config.storage.path)</span></span>
|
|
44
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> logger</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> createLogger</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(config.logging)</span></span>
|
|
45
|
+
<span class="line"></span>
|
|
46
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> fastify</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Fastify</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({ logger, trustProxy: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> })</span></span>
|
|
47
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fastify.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">register</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(requestIdMiddleware)</span></span>
|
|
48
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setupUiRoutes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(fastify) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 必须先于 setupProxy,否则 /ui/* 会被 /v1/* 通配</span></span>
|
|
49
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setupProxy</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(fastify, config.proxy)</span></span>
|
|
50
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setupChatRoute</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(fastify, config.proxy) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// MCP-enhanced chat endpoint</span></span>
|
|
51
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fastify</span></span>
|
|
52
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
|
|
53
|
+
<span class="line"></span>
|
|
54
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> startServer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Promise</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> {</span></span>
|
|
55
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> config</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> loadConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
|
|
56
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> server</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> createServer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
|
|
57
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> server.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">listen</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({ port: config.server.port, host: config.server.host })</span></span>
|
|
58
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="注册顺序为什么重要" tabindex="-1">注册顺序为什么重要 <a class="header-anchor" href="#注册顺序为什么重要" aria-label="Permalink to "注册顺序为什么重要""></a></h3><p><code>setupProxy</code> 内部注册 <code>fastify.all('/v1/*', ...)</code>(<code>proxy.ts:178</code>)。Fastify 的路由匹配按注册顺序,先注册的先命中。<code>setupUiRoutes</code> 里既有 <code>/ui</code>、<code>/ui/api/*</code>,也有 <code>/ui/*</code>(静态资源,<code>ui-route.ts:398-404</code>)。若顺序颠倒,静态资源的 wildcard 可能会吞掉 <code>/v1/*</code> 之外的路径——因此 <code>server/index.ts:24</code> 有明确注释 <code>UI routes registered BEFORE proxy</code>。</p><h3 id="trustproxy-true" tabindex="-1"><code>trustProxy: true</code> <a class="header-anchor" href="#trustproxy-true" aria-label="Permalink to "`trustProxy: true`""></a></h3><p>信任反向代理头(如 <code>X-Forwarded-For</code>)。用户可能把 proxy-core 再套一层 nginx,这样 <code>request.ip</code> 才能反映真实客户端。</p><h3 id="requestidmiddleware-提前注册" tabindex="-1"><code>requestIdMiddleware</code> 提前注册 <a class="header-anchor" href="#requestidmiddleware-提前注册" aria-label="Permalink to "`requestIdMiddleware` 提前注册""></a></h3><p><code>middleware/request-id.ts</code> 通过 <code>onRequest</code> hook 给每个请求分配 <code>request.id</code>。放在最外层让所有日志与后续 handler 都用同一 ID(Fastify 默认自己会生成 UUID,本项目替换为 <code>nanoid(12)</code> 或客户端提供的 <code>x-request-id</code>)。</p><h2 id="esm-pm2-双重入口守卫" tabindex="-1">ESM + PM2 双重入口守卫 <a class="header-anchor" href="#esm-pm2-双重入口守卫" aria-label="Permalink to "ESM + PM2 双重入口守卫""></a></h2><p><code>apps/proxy-core/src/server/index.ts:42-60</code>:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> _isPm2</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> process.env.pm_id </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!==</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> undefined</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> process.env.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">NODE_APP_INSTANCE</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> !==</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> undefined</span></span>
|
|
59
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> _currentModuleUrl</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> getCurrentModuleUrl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// wraps import.meta.url</span></span>
|
|
60
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> _mainModulePath</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> process.argv[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">?</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> path.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">resolve</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(process.argv[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ''</span></span>
|
|
61
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> _mainModuleUrl</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> _mainModulePath </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">?</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> `file://${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">_mainModulePath</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}`</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> :</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ''</span></span>
|
|
62
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> _isDirectExecution</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> _currentModuleUrl </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">===</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> _mainModuleUrl</span></span>
|
|
63
|
+
<span class="line"></span>
|
|
64
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (_isPm2 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">||</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> _isDirectExecution) {</span></span>
|
|
65
|
+
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> startServer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">catch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">err</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'Server start failed:'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, err); process.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">exit</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) })</span></span>
|
|
66
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>两个场景都会自动启动:</p><ul><li><strong>PM2 fork 模式</strong>:PM2 会把 <code>process.argv[1]</code> 改成 <code>ProcessContainerFork.js</code> 包装脚本,导致 <code>import.meta.url === main module url</code> 判定失败;用 <code>pm_id</code> / <code>NODE_APP_INSTANCE</code> 环境变量补检测</li><li><strong>直接执行</strong>(<code>tsx src/server/index.ts</code> 或 <code>node dist/server/index.js</code>):URL 相等判定成立</li></ul><p>第三种情况(只 import 不执行,例如测试)两条判定都不成立,<code>startServer</code> 不会自动跑。</p><h2 id="数据目录锚点-paths-ts" tabindex="-1">数据目录锚点 <code>paths.ts</code> <a class="header-anchor" href="#数据目录锚点-paths-ts" aria-label="Permalink to "数据目录锚点 `paths.ts`""></a></h2><p><code>apps/proxy-core/src/utils/paths.ts</code>:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> dataDir</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> path.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(os.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">homedir</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(), </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'.cc-monitoring'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
|
67
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> logsDir</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> path.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(dataDir, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'logs'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span></code></pre></div><ul><li>全局 npm/pnpm 安装后 <code>process.cwd()</code> 无法预测,锚定到用户主目录才可靠</li><li>CLI 全局 <code>--config</code> → <code>setConfigPathOverride</code> → 存到模块级变量 <code>configPathOverride</code></li><li><code>getConfigPath()</code> 优先级:override > <code>process.env.CONFIG_PATH</code> > <code>path.join(dataDir, 'config.json')</code></li><li><code>ensureDataDirs()</code> 首次运行时 <code>mkdirSync(logsDir, { recursive: true })</code></li></ul><h2 id="ecosystem-config-cjs" tabindex="-1">ecosystem.config.cjs <a class="header-anchor" href="#ecosystem-config-cjs" aria-label="Permalink to "ecosystem.config.cjs""></a></h2><p><code>apps/proxy-core/ecosystem.config.cjs</code>(本项目唯一的 CommonJS 文件):</p><div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> dataDir</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> process.env.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">CC_DATA_DIR</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> path.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(os.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">homedir</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(), </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'.cc-monitoring'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
|
68
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> configPath</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> process.env.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">CONFIG_PATH</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> path.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(dataDir, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'config.json'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
|
69
|
+
<span class="line"></span>
|
|
70
|
+
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">module</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">exports</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
71
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> apps: [{</span></span>
|
|
72
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'cc-monitoring'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
73
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> script: path.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(__dirname, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'dist/server/index.js'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">),</span></span>
|
|
74
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cwd: dataDir,</span></span>
|
|
75
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> instances: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
76
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> exec_mode: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'fork'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 必须 fork:ESM 与 cluster 不兼容</span></span>
|
|
77
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> autorestart: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
78
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> watch: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
79
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> max_memory_restart: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'200M'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
80
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> env: { NODE_ENV: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'production'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, CONFIG_PATH: configPath },</span></span>
|
|
81
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> env_development: { NODE_ENV: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'development'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, CONFIG_PATH: configPath },</span></span>
|
|
82
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> log_date_format: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'YYYY-MM-DD HH:mm:ss Z'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
83
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> error_file: path.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(logsDir, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error.log'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">),</span></span>
|
|
84
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> out_file: path.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(logsDir, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'out.log'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">),</span></span>
|
|
85
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> merge_logs: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span>
|
|
86
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }]</span></span>
|
|
87
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><ul><li><code>script</code> 用 <code>path.join(__dirname, ...)</code>:ecosystem 无论从哪个 cwd 调都能找到编译产物</li><li><code>cwd: dataDir</code>:让相对路径日志/DB 落到用户目录,不污染项目工程</li><li><code>exec_mode: fork</code>:cluster 模式基于 <code>worker_threads</code> 子进程复制 <code>main</code>,ESM 会在 worker 里报 <code>Cannot use import statement</code>;fork 直接 spawn Node,安全</li><li><code>.cjs</code> 扩展名:根 <code>package.json</code> <code>type: "module"</code> 让 <code>.js</code> 变 ESM;PM2 是 CJS,必须 <code>.cjs</code> 让 Node 按 CJS 加载</li></ul><p>更多细节 → <a href="./pm2.html">pm2.md</a>。</p><h2 id="冷启动时序" tabindex="-1">冷启动时序 <a class="header-anchor" href="#冷启动时序" aria-label="Permalink to "冷启动时序""></a></h2><div class="language-mermaid vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">mermaid</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">sequenceDiagram</span></span>
|
|
88
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> autonumber</span></span>
|
|
89
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> actor U as 用户</span></span>
|
|
90
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> participant CLI as bin/proxy-cli.ts</span></span>
|
|
91
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> participant CMD as commands/start.ts</span></span>
|
|
92
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> participant PM2 as pm2.startProcess</span></span>
|
|
93
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> participant D as PM2 daemon</span></span>
|
|
94
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> participant S as dist/server/index.js</span></span>
|
|
95
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> participant N as waitForPort</span></span>
|
|
96
|
+
<span class="line"></span>
|
|
97
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> U->>CLI: proxy start</span></span>
|
|
98
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CLI->>CMD: startCommand()</span></span>
|
|
99
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CMD->>CMD: loadConfig(读 ~/.cc-monitoring/config.json)</span></span>
|
|
100
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CMD->>PM2: startProcess(ecosystemPath)</span></span>
|
|
101
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> PM2->>D: pm2 connect + start</span></span>
|
|
102
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> D->>S: fork dist/server/index.js</span></span>
|
|
103
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> S->>S: createServer → setupUi → setupProxy → setupChatRoute</span></span>
|
|
104
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> S->>S: listen host:port</span></span>
|
|
105
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Note over S: init SQLite 4 版 schema</span></span>
|
|
106
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CMD->>N: waitForOnline (轮询 pm2 list)</span></span>
|
|
107
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> N-->>CMD: online</span></span>
|
|
108
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CMD->>N: waitForPort (递增退避 5 次)</span></span>
|
|
109
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> N-->>CMD: listening</span></span>
|
|
110
|
+
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CMD-->>U: 打印 base URL / dashboard / logs 路径</span></span></code></pre></div><p><code>start.ts</code> 用 <code>ora</code> spinner 打印 6 步进度(Loading config → Locating PM2 config → Starting → Waiting online → Verifying port → Summary),失败时 spinner 变红并给出日志路径提示。</p></div></div></main><footer class="VPDocFooter" data-v-b2c5ca34 data-v-2cae581d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-2cae581d><span class="visually-hidden" id="doc-footer-aria-label" data-v-2cae581d>Pager</span><div class="pager" data-v-2cae581d><a class="VPLink link pager-link prev" href="/docs/proxy-core/" data-v-2cae581d><!--[--><span class="desc" data-v-2cae581d>Previous page</span><span class="title" data-v-2cae581d>模块概览</span><!--]--></a></div><div class="pager" data-v-2cae581d><a class="VPLink link pager-link next" href="/docs/proxy-core/cli.html" data-v-2cae581d><!--[--><span class="desc" data-v-2cae581d>Next page</span><span class="title" data-v-2cae581d>CLI 命令</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
111
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"index.md\":\"p9floL_p\",\"overview.md\":\"BKVdLT3o\",\"packages-utils.md\":\"CvgYp5Ll\",\"proxy-admin_env-and-build.md\":\"xkeQNYS3\",\"proxy-admin_index.md\":\"DBLI0n0G\",\"proxy-admin_layout-and-menu.md\":\"BKGcu49p\",\"proxy-admin_pages.md\":\"m_fGvvOH\",\"proxy-admin_routing-and-auth.md\":\"DZsdFese\",\"proxy-admin_services-and-mock.md\":\"sdNPcf25\",\"proxy-cli_api-layer.md\":\"GfdbtEUx\",\"proxy-cli_app-shell.md\":\"Do18CYhW\",\"proxy-cli_components-common.md\":\"Dd6Yazvz\",\"proxy-cli_components-config.md\":\"B81Y3ta2\",\"proxy-cli_components-requests.md\":\"vN8IrwL_\",\"proxy-cli_components-stats.md\":\"B90esaNa\",\"proxy-cli_components-status.md\":\"C5lAzS2c\",\"proxy-cli_data-hooks.md\":\"w9Oe1OD3\",\"proxy-cli_index.md\":\"BA6g8QD-\",\"proxy-cli_utils-and-i18n.md\":\"Ch_e-g_o\",\"proxy-core_chat-api.md\":\"DHihiBxR\",\"proxy-core_cli.md\":\"DCFYX4Bd\",\"proxy-core_config.md\":\"BXSOyxYE\",\"proxy-core_data-layer.md\":\"Cdomb3Gz\",\"proxy-core_entry.md\":\"BZmIcCUM\",\"proxy-core_index.md\":\"BM6VV5Qe\",\"proxy-core_pm2.md\":\"DUhWEtgn\",\"proxy-core_providers.md\":\"CbDZ6b_7\",\"proxy-core_proxy.md\":\"CzQYmX6X\",\"proxy-core_stats.md\":\"BsM6wuK_\",\"proxy-core_tool.md\":\"B6Le1nQr\",\"proxy-core_ui-routes.md\":\"Dyqkeoiv\",\"proxy-core_utilities.md\":\"C18pjnkz\",\"quickstart.md\":\"Cy_FmXIY\",\"request-flow.md\":\"C1fyxdPE\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"CC Monitoring\",\"description\":\"Claude Code 代理 + 监控系统文档\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"概览\",\"link\":\"/overview\"},{\"text\":\"快速开始\",\"link\":\"/quickstart\"},{\"text\":\"Proxy Core\",\"link\":\"/proxy-core/\"},{\"text\":\"Proxy CLI\",\"link\":\"/proxy-cli/\"},{\"text\":\"Proxy Admin\",\"link\":\"/proxy-admin/\"}],\"sidebar\":{\"/proxy-core/\":[{\"text\":\"Proxy Core\",\"items\":[{\"text\":\"模块概览\",\"link\":\"/proxy-core/\"},{\"text\":\"入口与启动\",\"link\":\"/proxy-core/entry\"},{\"text\":\"CLI 命令\",\"link\":\"/proxy-core/cli\"},{\"text\":\"代理转发\",\"link\":\"/proxy-core/proxy\"},{\"text\":\"UI 路由\",\"link\":\"/proxy-core/ui-routes\"},{\"text\":\"供应商管理\",\"link\":\"/proxy-core/providers\"},{\"text\":\"配置与日志\",\"link\":\"/proxy-core/config\"},{\"text\":\"数据层\",\"link\":\"/proxy-core/data-layer\"},{\"text\":\"统计与历史\",\"link\":\"/proxy-core/stats\"},{\"text\":\"工具注入\",\"link\":\"/proxy-core/tool\"},{\"text\":\"PM2 集成\",\"link\":\"/proxy-core/pm2\"},{\"text\":\"工具函数\",\"link\":\"/proxy-core/utilities\"},{\"text\":\"Chat API\",\"link\":\"/proxy-core/chat-api\"}]}],\"/proxy-cli/\":[{\"text\":\"Proxy CLI\",\"items\":[{\"text\":\"模块概览\",\"link\":\"/proxy-cli/\"},{\"text\":\"应用外壳\",\"link\":\"/proxy-cli/app-shell\"},{\"text\":\"数据 Hooks\",\"link\":\"/proxy-cli/data-hooks\"},{\"text\":\"API 层\",\"link\":\"/proxy-cli/api-layer\"},{\"text\":\"状态组件\",\"link\":\"/proxy-cli/components-status\"},{\"text\":\"统计组件\",\"link\":\"/proxy-cli/components-stats\"},{\"text\":\"请求组件\",\"link\":\"/proxy-cli/components-requests\"},{\"text\":\"配置组件\",\"link\":\"/proxy-cli/components-config\"},{\"text\":\"通用组件\",\"link\":\"/proxy-cli/components-common\"},{\"text\":\"工具与国际化\",\"link\":\"/proxy-cli/utils-and-i18n\"}]}],\"/proxy-admin/\":[{\"text\":\"Proxy Admin\",\"items\":[{\"text\":\"模块概览\",\"link\":\"/proxy-admin/\"},{\"text\":\"路由与认证\",\"link\":\"/proxy-admin/routing-and-auth\"},{\"text\":\"布局与菜单\",\"link\":\"/proxy-admin/layout-and-menu\"},{\"text\":\"页面\",\"link\":\"/proxy-admin/pages\"},{\"text\":\"服务与 Mock\",\"link\":\"/proxy-admin/services-and-mock\"},{\"text\":\"环境与构建\",\"link\":\"/proxy-admin/env-and-build\"}]}]},\"siteTitle\":\"CC Monitoring\",\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
112
|
+
|
|
113
|
+
</body>
|
|
114
|
+
</html>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN" dir="ltr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<title>proxy-core | CC Monitoring</title>
|
|
7
|
+
<meta name="description" content="Claude Code 代理 + 监控系统文档">
|
|
8
|
+
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
+
<link rel="preload stylesheet" href="/docs/assets/style.DU_kNMWy.css" as="style">
|
|
10
|
+
<link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
|
|
11
|
+
|
|
12
|
+
<script type="module" src="/docs/assets/app.BxFOH0P1.js"></script>
|
|
13
|
+
<link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
+
<link rel="modulepreload" href="/docs/assets/chunks/theme.BLEczZWC.js">
|
|
15
|
+
<link rel="modulepreload" href="/docs/assets/chunks/framework.D_Xv2a7c.js">
|
|
16
|
+
<link rel="modulepreload" href="/docs/assets/proxy-core_index.md.BM6VV5Qe.lean.js">
|
|
17
|
+
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
18
|
+
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
<div id="app"><div class="Layout" data-v-0fd5f79a><!--[--><!--]--><!--[--><span tabindex="-1" data-v-13bcab17></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-13bcab17>Skip to content</a><!--]--><!----><header class="VPNav" data-v-0fd5f79a data-v-221ddc7b><div class="VPNavBar" data-v-221ddc7b data-v-6a82b350><div class="wrapper" data-v-6a82b350><div class="container" data-v-6a82b350><div class="title" data-v-6a82b350><div class="VPNavBarTitle has-sidebar" data-v-6a82b350 data-v-98825d79><a class="title" href="/docs/" data-v-98825d79><!--[--><!--]--><!----><span data-v-98825d79>CC Monitoring</span><!--[--><!--]--></a></div></div><div class="content" data-v-6a82b350><div class="content-body" data-v-6a82b350><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6a82b350><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6a82b350 data-v-2fa375b4><span id="main-nav-aria-label" class="visually-hidden" data-v-2fa375b4> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/overview.html" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>概览</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/quickstart.html" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>快速开始</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/docs/proxy-core/" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>Proxy Core</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/proxy-cli/" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>Proxy CLI</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/proxy-admin/" tabindex="0" data-v-2fa375b4 data-v-88169469><!--[--><span data-v-88169469>Proxy Admin</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6a82b350 data-v-c7859fea><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-c7859fea data-v-458e2939 data-v-2fadb15f><span class="check" data-v-2fadb15f><span class="icon" data-v-2fadb15f><!--[--><span class="vpi-sun sun" data-v-458e2939></span><span class="vpi-moon moon" data-v-458e2939></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-6a82b350 data-v-4a332738 data-v-3416cc30><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-3416cc30><span class="vpi-more-horizontal icon" data-v-3416cc30></span></button><div class="menu" data-v-3416cc30><div class="VPMenu" data-v-3416cc30 data-v-70b241a4><!----><!--[--><!--[--><!----><div class="group" data-v-4a332738><div class="item appearance" data-v-4a332738><p class="label" data-v-4a332738>Appearance</p><div class="appearance-action" data-v-4a332738><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-4a332738 data-v-458e2939 data-v-2fadb15f><span class="check" data-v-2fadb15f><span class="icon" data-v-2fadb15f><!--[--><span class="vpi-sun sun" data-v-458e2939></span><span class="vpi-moon moon" data-v-458e2939></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6a82b350 data-v-2b9279da><span class="container" data-v-2b9279da><span class="top" data-v-2b9279da></span><span class="middle" data-v-2b9279da></span><span class="bottom" data-v-2b9279da></span></span></button></div></div></div></div><div class="divider" data-v-6a82b350><div class="divider-line" data-v-6a82b350></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-0fd5f79a data-v-751e8533><div class="container" data-v-751e8533><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-751e8533><span class="vpi-align-left menu-icon" data-v-751e8533></span><span class="menu-text" data-v-751e8533>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-751e8533 data-v-afd8288e><button data-v-afd8288e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-0fd5f79a data-v-711af969><div class="curtain" data-v-711af969></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-711af969><span class="visually-hidden" id="sidebar-aria-label" data-v-711af969> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-4ebb8294><section class="VPSidebarItem level-0 has-active" data-v-4ebb8294 data-v-04203d25><div class="item" role="button" tabindex="0" data-v-04203d25><div class="indicator" data-v-04203d25></div><h2 class="text" data-v-04203d25>Proxy Core</h2><!----></div><div class="items" data-v-04203d25><!--[--><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/" data-v-04203d25><!--[--><p class="text" data-v-04203d25>模块概览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/entry.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>入口与启动</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/cli.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>CLI 命令</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/proxy.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>代理转发</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/ui-routes.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>UI 路由</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/providers.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>供应商管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/config.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>配置与日志</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/data-layer.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>数据层</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/stats.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>统计与历史</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/tool.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>工具注入</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/pm2.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>PM2 集成</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/utilities.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>工具函数</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-04203d25><div class="item" data-v-04203d25><div class="indicator" data-v-04203d25></div><a class="VPLink link link" href="/docs/proxy-core/chat-api.html" data-v-04203d25><!--[--><p class="text" data-v-04203d25>Chat API</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-0fd5f79a data-v-3aa167b9><div class="VPDoc has-sidebar has-aside" data-v-3aa167b9 data-v-b2c5ca34><!--[--><!--]--><div class="container" data-v-b2c5ca34><div class="aside" data-v-b2c5ca34><div class="aside-curtain" data-v-b2c5ca34></div><div class="aside-container" data-v-b2c5ca34><div class="aside-content" data-v-b2c5ca34><div class="VPDocAside" data-v-b2c5ca34 data-v-af7efbb6><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-af7efbb6 data-v-db542fa8><div class="content" data-v-db542fa8><div class="outline-marker" data-v-db542fa8></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-db542fa8>On this page</div><ul class="VPDocOutlineItem root" data-v-db542fa8 data-v-1d036821><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-af7efbb6></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-b2c5ca34><div class="content-container" data-v-b2c5ca34><!--[--><!--]--><main class="main" data-v-b2c5ca34><div style="position:relative;" class="vp-doc _docs_proxy-core_" data-v-b2c5ca34><div><h1 id="proxy-core" tabindex="-1">proxy-core <a class="header-anchor" href="#proxy-core" aria-label="Permalink to "proxy-core""></a></h1><h2 id="本文档覆盖的源文件" tabindex="-1">本文档覆盖的源文件 <a class="header-anchor" href="#本文档覆盖的源文件" aria-label="Permalink to "本文档覆盖的源文件""></a></h2><ul><li><code>apps/proxy-core/package.json</code></li><li><code>apps/proxy-core/tsconfig.json</code></li><li><code>apps/proxy-core/src/**/*.ts</code>(不含测试)</li></ul><h2 id="模块角色" tabindex="-1">模块角色 <a class="header-anchor" href="#模块角色" aria-label="Permalink to "模块角色""></a></h2><p><code>proxy-core</code> 是整个系统的后端。它承担四类职责:</p><ol><li><strong>业务代理</strong>:转发 Claude Code 的 <code>/v1/*</code> 请求到上游 AI API,同时记录完整请求与响应</li><li><strong>UI 后端</strong>:提供 REST API + 两个 WebSocket 通道给前端面板(proxy-cli)</li><li><strong>CLI 工具</strong>:<code>proxy</code> 命令行工具,用于 start/stop/status/logs/config/reload/test/ui/clean-requests</li><li><strong>静态资源托管</strong>:<code>@fastify/static</code> 挂载 <code>proxy-cli/dist</code> 到 <code>/ui/</code></li></ol><p>发布名:<code>@cc-monitoring/cli-core</code>,<code>bin/proxy</code> → <code>dist/cli/index.js</code>,<code>main</code> → <code>dist/server/index.js</code>。</p><h2 id="目录布局" tabindex="-1">目录布局 <a class="header-anchor" href="#目录布局" aria-label="Permalink to "目录布局""></a></h2><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>apps/proxy-core/</span></span>
|
|
22
|
+
<span class="line"><span>├── bin/proxy-cli.ts # 一行 bin,只 import dist/cli/index.js</span></span>
|
|
23
|
+
<span class="line"><span>├── ecosystem.config.cjs # PM2 配置(.cjs 因为 root type=module)</span></span>
|
|
24
|
+
<span class="line"><span>├── package.json</span></span>
|
|
25
|
+
<span class="line"><span>├── tsconfig.json</span></span>
|
|
26
|
+
<span class="line"><span>└── src/</span></span>
|
|
27
|
+
<span class="line"><span> ├── cli/</span></span>
|
|
28
|
+
<span class="line"><span> │ ├── index.ts # Commander 命令注册</span></span>
|
|
29
|
+
<span class="line"><span> │ └── commands/</span></span>
|
|
30
|
+
<span class="line"><span> │ ├── start.ts</span></span>
|
|
31
|
+
<span class="line"><span> │ ├── stop.ts</span></span>
|
|
32
|
+
<span class="line"><span> │ ├── status.ts</span></span>
|
|
33
|
+
<span class="line"><span> │ ├── logs.ts</span></span>
|
|
34
|
+
<span class="line"><span> │ ├── config.ts</span></span>
|
|
35
|
+
<span class="line"><span> │ ├── reload.ts</span></span>
|
|
36
|
+
<span class="line"><span> │ ├── test.ts</span></span>
|
|
37
|
+
<span class="line"><span> │ └── ui.ts</span></span>
|
|
38
|
+
<span class="line"><span> ├── server/</span></span>
|
|
39
|
+
<span class="line"><span> │ ├── index.ts # createServer / startServer / ESM+PM2 入口判断</span></span>
|
|
40
|
+
<span class="line"><span> │ ├── proxy.ts # 代理转发核心 (486 行)</span></span>
|
|
41
|
+
<span class="line"><span> │ ├── ui-route.ts # REST + 双 WebSocket + 静态挂载</span></span>
|
|
42
|
+
<span class="line"><span> │ ├── providers-route.ts</span></span>
|
|
43
|
+
<span class="line"><span> │ ├── data-push.ts # WebSocket 广播工具</span></span>
|
|
44
|
+
<span class="line"><span> │ ├── auth.ts # Bearer Token 校验</span></span>
|
|
45
|
+
<span class="line"><span> │ └── middleware/</span></span>
|
|
46
|
+
<span class="line"><span> │ └── request-id.ts # nanoid + x-request-id</span></span>
|
|
47
|
+
<span class="line"><span> ├── config/</span></span>
|
|
48
|
+
<span class="line"><span> │ ├── index.ts # load / save / reset</span></span>
|
|
49
|
+
<span class="line"><span> │ └── schema.ts # Zod 校验</span></span>
|
|
50
|
+
<span class="line"><span> ├── logger/</span></span>
|
|
51
|
+
<span class="line"><span> │ └── index.ts # Pino + file-stream-rotator</span></span>
|
|
52
|
+
<span class="line"><span> ├── utils/</span></span>
|
|
53
|
+
<span class="line"><span> │ ├── db.ts # SQLite 初始化 + 4 版 schema 迁移</span></span>
|
|
54
|
+
<span class="line"><span> │ ├── providers-db.ts # providers 表 CRUD + validate</span></span>
|
|
55
|
+
<span class="line"><span> │ ├── request-writer.ts # requests 表读写</span></span>
|
|
56
|
+
<span class="line"><span> │ ├── stats-aggregator.ts</span></span>
|
|
57
|
+
<span class="line"><span> │ ├── status-history.ts # 内存中的 CPU/内存滑动窗口</span></span>
|
|
58
|
+
<span class="line"><span> │ ├── sse-accumulator.ts</span></span>
|
|
59
|
+
<span class="line"><span> │ ├── sse-writer.ts # 合成 SSE</span></span>
|
|
60
|
+
<span class="line"><span> │ ├── tool-injector.ts</span></span>
|
|
61
|
+
<span class="line"><span> │ ├── inject-loop.ts # tool 命中后的内部循环</span></span>
|
|
62
|
+
<span class="line"><span> │ ├── pm2.ts # PM2 promise 封装</span></span>
|
|
63
|
+
<span class="line"><span> │ ├── paths.ts # ~/.cc-monitoring 锚点</span></span>
|
|
64
|
+
<span class="line"><span> │ ├── esm-dirname.ts # ESM+CJS 双模 __dirname</span></span>
|
|
65
|
+
<span class="line"><span> │ ├── net.ts # waitForPort</span></span>
|
|
66
|
+
<span class="line"><span> │ ├── version.ts # 项目 + Claude Code 版本</span></span>
|
|
67
|
+
<span class="line"><span> │ └── migrate-files-to-db.ts # 旧文件系统迁移到 SQLite(一次性脚本)</span></span>
|
|
68
|
+
<span class="line"><span> ├── tools/</span></span>
|
|
69
|
+
<span class="line"><span> │ ├── index.ts # 转发 registry 导出</span></span>
|
|
70
|
+
<span class="line"><span> │ ├── registry.ts # ALL_TOOLS + enabled/find</span></span>
|
|
71
|
+
<span class="line"><span> │ ├── types.ts # InjectableTool 接口</span></span>
|
|
72
|
+
<span class="line"><span> │ ├── curl.tool.ts</span></span>
|
|
73
|
+
<span class="line"><span> │ └── probe.tool.ts</span></span>
|
|
74
|
+
<span class="line"><span> └── types/</span></span>
|
|
75
|
+
<span class="line"><span> ├── api.ts / config.ts / log.ts / pm2.ts / index.ts</span></span></code></pre></div><h2 id="依赖速览" tabindex="-1">依赖速览 <a class="header-anchor" href="#依赖速览" aria-label="Permalink to "依赖速览""></a></h2><p><code>apps/proxy-core/package.json</code>:</p><ul><li><code>fastify</code> <code>4.26</code> + <code>@fastify/static</code> <code>7.0</code> + <code>@fastify/http-proxy</code> <code>9.5</code>(<strong>未使用</strong>,早期遗留)</li><li><code>@fastify/websocket</code> <code>10</code>(也未使用,服务器直接用原生 <code>ws</code>)</li><li><code>commander</code> <code>11.1</code>、<code>chalk</code> <code>5.6</code>、<code>ora</code> <code>9.4</code>(CLI 交互)</li><li><code>better-sqlite3</code> <code>12.11</code> + <code>@types/better-sqlite3</code></li><li><code>pino</code> <code>8.18</code> + <code>pino-pretty</code> <code>10.3</code> + <code>file-stream-rotator</code> <code>1.0</code>(日志)</li><li><code>pm2</code> <code>5.4</code></li><li><code>nanoid</code> <code>5.0</code>(request id)</li><li><code>open</code> <code>10.1</code>(<code>ui</code> 命令打开浏览器)</li><li><code>ws</code> <code>8.21</code>(原生 WebSocket)</li><li><code>zod</code> <code>3.23</code></li></ul><p>Dev:Jest 29 + ts-jest + tsx 4。</p><h2 id="阅读顺序" tabindex="-1">阅读顺序 <a class="header-anchor" href="#阅读顺序" aria-label="Permalink to "阅读顺序""></a></h2><ul><li>先看启动 → <a href="./entry.html">entry.md</a></li><li>后看代理核心 → <a href="./proxy.html">proxy.md</a></li><li>想理解数据 → <a href="./data-layer.html">data-layer.md</a> + <a href="./stats.html">stats.md</a></li><li>想扩展 tool → <a href="./tool.html">tool.md</a></li><li>想改 UI 端点 → <a href="./ui-routes.html">ui-routes.md</a></li><li>想改供应商 → <a href="./providers.html">providers.md</a></li><li>想改配置字段 → <a href="./config.html">config.md</a></li><li>打包/进程细节 → <a href="./pm2.html">pm2.md</a></li><li>底层小工具 → <a href="./utilities.html">utilities.md</a></li><li>CLI 每个命令 → <a href="./cli.html">cli.md</a></li></ul></div></div></main><footer class="VPDocFooter" data-v-b2c5ca34 data-v-2cae581d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-2cae581d><span class="visually-hidden" id="doc-footer-aria-label" data-v-2cae581d>Pager</span><div class="pager" data-v-2cae581d><!----></div><div class="pager" data-v-2cae581d><a class="VPLink link pager-link next" href="/docs/proxy-core/entry.html" data-v-2cae581d><!--[--><span class="desc" data-v-2cae581d>Next page</span><span class="title" data-v-2cae581d>入口与启动</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
76
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"index.md\":\"p9floL_p\",\"overview.md\":\"BKVdLT3o\",\"packages-utils.md\":\"CvgYp5Ll\",\"proxy-admin_env-and-build.md\":\"xkeQNYS3\",\"proxy-admin_index.md\":\"DBLI0n0G\",\"proxy-admin_layout-and-menu.md\":\"BKGcu49p\",\"proxy-admin_pages.md\":\"m_fGvvOH\",\"proxy-admin_routing-and-auth.md\":\"DZsdFese\",\"proxy-admin_services-and-mock.md\":\"sdNPcf25\",\"proxy-cli_api-layer.md\":\"GfdbtEUx\",\"proxy-cli_app-shell.md\":\"Do18CYhW\",\"proxy-cli_components-common.md\":\"Dd6Yazvz\",\"proxy-cli_components-config.md\":\"B81Y3ta2\",\"proxy-cli_components-requests.md\":\"vN8IrwL_\",\"proxy-cli_components-stats.md\":\"B90esaNa\",\"proxy-cli_components-status.md\":\"C5lAzS2c\",\"proxy-cli_data-hooks.md\":\"w9Oe1OD3\",\"proxy-cli_index.md\":\"BA6g8QD-\",\"proxy-cli_utils-and-i18n.md\":\"Ch_e-g_o\",\"proxy-core_chat-api.md\":\"DHihiBxR\",\"proxy-core_cli.md\":\"DCFYX4Bd\",\"proxy-core_config.md\":\"BXSOyxYE\",\"proxy-core_data-layer.md\":\"Cdomb3Gz\",\"proxy-core_entry.md\":\"BZmIcCUM\",\"proxy-core_index.md\":\"BM6VV5Qe\",\"proxy-core_pm2.md\":\"DUhWEtgn\",\"proxy-core_providers.md\":\"CbDZ6b_7\",\"proxy-core_proxy.md\":\"CzQYmX6X\",\"proxy-core_stats.md\":\"BsM6wuK_\",\"proxy-core_tool.md\":\"B6Le1nQr\",\"proxy-core_ui-routes.md\":\"Dyqkeoiv\",\"proxy-core_utilities.md\":\"C18pjnkz\",\"quickstart.md\":\"Cy_FmXIY\",\"request-flow.md\":\"C1fyxdPE\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"CC Monitoring\",\"description\":\"Claude Code 代理 + 监控系统文档\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"概览\",\"link\":\"/overview\"},{\"text\":\"快速开始\",\"link\":\"/quickstart\"},{\"text\":\"Proxy Core\",\"link\":\"/proxy-core/\"},{\"text\":\"Proxy CLI\",\"link\":\"/proxy-cli/\"},{\"text\":\"Proxy Admin\",\"link\":\"/proxy-admin/\"}],\"sidebar\":{\"/proxy-core/\":[{\"text\":\"Proxy Core\",\"items\":[{\"text\":\"模块概览\",\"link\":\"/proxy-core/\"},{\"text\":\"入口与启动\",\"link\":\"/proxy-core/entry\"},{\"text\":\"CLI 命令\",\"link\":\"/proxy-core/cli\"},{\"text\":\"代理转发\",\"link\":\"/proxy-core/proxy\"},{\"text\":\"UI 路由\",\"link\":\"/proxy-core/ui-routes\"},{\"text\":\"供应商管理\",\"link\":\"/proxy-core/providers\"},{\"text\":\"配置与日志\",\"link\":\"/proxy-core/config\"},{\"text\":\"数据层\",\"link\":\"/proxy-core/data-layer\"},{\"text\":\"统计与历史\",\"link\":\"/proxy-core/stats\"},{\"text\":\"工具注入\",\"link\":\"/proxy-core/tool\"},{\"text\":\"PM2 集成\",\"link\":\"/proxy-core/pm2\"},{\"text\":\"工具函数\",\"link\":\"/proxy-core/utilities\"},{\"text\":\"Chat API\",\"link\":\"/proxy-core/chat-api\"}]}],\"/proxy-cli/\":[{\"text\":\"Proxy CLI\",\"items\":[{\"text\":\"模块概览\",\"link\":\"/proxy-cli/\"},{\"text\":\"应用外壳\",\"link\":\"/proxy-cli/app-shell\"},{\"text\":\"数据 Hooks\",\"link\":\"/proxy-cli/data-hooks\"},{\"text\":\"API 层\",\"link\":\"/proxy-cli/api-layer\"},{\"text\":\"状态组件\",\"link\":\"/proxy-cli/components-status\"},{\"text\":\"统计组件\",\"link\":\"/proxy-cli/components-stats\"},{\"text\":\"请求组件\",\"link\":\"/proxy-cli/components-requests\"},{\"text\":\"配置组件\",\"link\":\"/proxy-cli/components-config\"},{\"text\":\"通用组件\",\"link\":\"/proxy-cli/components-common\"},{\"text\":\"工具与国际化\",\"link\":\"/proxy-cli/utils-and-i18n\"}]}],\"/proxy-admin/\":[{\"text\":\"Proxy Admin\",\"items\":[{\"text\":\"模块概览\",\"link\":\"/proxy-admin/\"},{\"text\":\"路由与认证\",\"link\":\"/proxy-admin/routing-and-auth\"},{\"text\":\"布局与菜单\",\"link\":\"/proxy-admin/layout-and-menu\"},{\"text\":\"页面\",\"link\":\"/proxy-admin/pages\"},{\"text\":\"服务与 Mock\",\"link\":\"/proxy-admin/services-and-mock\"},{\"text\":\"环境与构建\",\"link\":\"/proxy-admin/env-and-build\"}]}]},\"siteTitle\":\"CC Monitoring\",\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
77
|
+
|
|
78
|
+
</body>
|
|
79
|
+
</html>
|