@cc-monitoring/proxy-core 0.1.4 → 0.1.5

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.
Files changed (318) hide show
  1. package/README.md +11 -35
  2. package/dist/cli/commands/doc.d.ts +4 -0
  3. package/dist/cli/commands/doc.js +31 -0
  4. package/dist/cli/index.js +7 -0
  5. package/dist/config/index.js +2 -1
  6. package/dist/config/schema.d.ts +48 -0
  7. package/dist/config/schema.js +11 -1
  8. package/dist/parsers/docx-loader.d.ts +5 -0
  9. package/dist/parsers/docx-loader.js +15 -0
  10. package/dist/parsers/index.d.ts +3 -0
  11. package/dist/parsers/index.js +10 -0
  12. package/dist/parsers/md-loader.d.ts +5 -0
  13. package/dist/parsers/md-loader.js +13 -0
  14. package/dist/parsers/registry.d.ts +8 -0
  15. package/dist/parsers/registry.js +32 -0
  16. package/dist/parsers/types.d.ts +4 -0
  17. package/dist/parsers/types.js +1 -0
  18. package/dist/parsers/xlsx-loader.d.ts +5 -0
  19. package/dist/parsers/xlsx-loader.js +34 -0
  20. package/dist/server/__tests__/providers-route.test.js +4 -3
  21. package/dist/server/__tests__/proxy.test.js +11 -1
  22. package/dist/server/chat-route.d.ts +3 -0
  23. package/dist/server/chat-route.js +401 -0
  24. package/dist/server/claude-settings-route.d.ts +2 -0
  25. package/dist/server/claude-settings-route.js +76 -0
  26. package/dist/server/data-push.d.ts +3 -1
  27. package/dist/server/data-push.js +10 -3
  28. package/dist/server/docs-route.d.ts +2 -0
  29. package/dist/server/docs-route.js +63 -0
  30. package/dist/server/index.js +4 -0
  31. package/dist/server/mcp-route.d.ts +2 -0
  32. package/dist/server/mcp-route.js +161 -0
  33. package/dist/server/proxy.d.ts +4 -1
  34. package/dist/server/proxy.js +289 -128
  35. package/dist/server/ui-route.js +123 -46
  36. package/dist/tools/mcp-bridge.d.ts +13 -0
  37. package/dist/tools/mcp-bridge.js +36 -0
  38. package/dist/tools/registry.js +10 -4
  39. package/dist/ui/assets/{1c-CgVqmGt6.js → 1c-KmWe8RWs.js} +1 -1
  40. package/dist/ui/assets/{abnf-JPM4b6fj.js → abnf-BKQ6qIuo.js} +1 -1
  41. package/dist/ui/assets/{abnfDiagram-VRR7QNED-DJkd8PHl.js → abnfDiagram-VRR7QNED-CkRuDPu1.js} +1 -1
  42. package/dist/ui/assets/{accesslog-CLIMhXWi.js → accesslog-DD9H5Ktc.js} +1 -1
  43. package/dist/ui/assets/{actionscript-DqniQGld.js → actionscript-CAjf2Qtd.js} +1 -1
  44. package/dist/ui/assets/{ada-2BFfY7fF.js → ada-BXkXW16O.js} +1 -1
  45. package/dist/ui/assets/{angelscript-C47qRqcs.js → angelscript-BxT7o0Up.js} +1 -1
  46. package/dist/ui/assets/{apache-DP-LC5-h.js → apache-C5z_tmVm.js} +1 -1
  47. package/dist/ui/assets/{applescript-BB0gk3HQ.js → applescript-DdIxl8rr.js} +1 -1
  48. package/dist/ui/assets/{arc-D8wRCC4D.js → arc-hSdFaqKn.js} +1 -1
  49. package/dist/ui/assets/{arcade-1R6g1VPm.js → arcade-D5m0roat.js} +1 -1
  50. package/dist/ui/assets/{architectureDiagram-ZJ3FMSHR-CbHhHV9v.js → architectureDiagram-ZJ3FMSHR-DOSHSqzf.js} +1 -1
  51. package/dist/ui/assets/{arduino-B8YryK0R.js → arduino-FDap8kq-.js} +1 -1
  52. package/dist/ui/assets/{armasm-CYdj7mzR.js → armasm-Kzp-Jr1v.js} +1 -1
  53. package/dist/ui/assets/{asciidoc-bZ11zz6i.js → asciidoc-DbGMW3EE.js} +1 -1
  54. package/dist/ui/assets/{aspectj-D5WPU-RQ.js → aspectj-CVYMmBCO.js} +1 -1
  55. package/dist/ui/assets/{autohotkey-70tZvCLL.js → autohotkey-9PmBGTPd.js} +1 -1
  56. package/dist/ui/assets/{autoit-CX2GaaHP.js → autoit-B4F86jgh.js} +1 -1
  57. package/dist/ui/assets/{avrasm-C154El0d.js → avrasm-CSzv2eHX.js} +1 -1
  58. package/dist/ui/assets/{awk-DdXKOeux.js → awk-CjsvYvZE.js} +1 -1
  59. package/dist/ui/assets/{axapta-CwLwkXST.js → axapta-BVgMoNRY.js} +1 -1
  60. package/dist/ui/assets/{bash-Uu61S1nB.js → bash-IeBjW3pt.js} +1 -1
  61. package/dist/ui/assets/{basic-CeiAWoiF.js → basic-BTFJfmV1.js} +1 -1
  62. package/dist/ui/assets/{blockDiagram-677ZJIJ3-DcvhphUd.js → blockDiagram-677ZJIJ3-DLw3Bbhf.js} +1 -1
  63. package/dist/ui/assets/{bnf-B5KF61QW.js → bnf-rCkeRYk0.js} +1 -1
  64. package/dist/ui/assets/{brainfuck-CP0Y7_VW.js → brainfuck-DBHuB3uZ.js} +1 -1
  65. package/dist/ui/assets/{coq-D-WTlq_d.js → c-C95V0zHL.js} +1 -1
  66. package/dist/ui/assets/{c-like-DXr53gS6.js → c-like-CK1xGeX_.js} +1 -1
  67. package/dist/ui/assets/{c4Diagram-LMCZKHZV-Cn017lmJ.js → c4Diagram-LMCZKHZV-cqY51yJw.js} +1 -1
  68. package/dist/ui/assets/{cal-7ld1j-Wh.js → cal-BxGPpEZK.js} +1 -1
  69. package/dist/ui/assets/{capnproto-DrddNBCZ.js → capnproto-Bo2fgXF9.js} +1 -1
  70. package/dist/ui/assets/{ceylon-XPuE6IIL.js → ceylon-C4Bb4pNB.js} +1 -1
  71. package/dist/ui/assets/channel-D9Y4iN1l.js +1 -0
  72. package/dist/ui/assets/{chunk-2Q5K7J3B-BoX3IESS.js → chunk-2Q5K7J3B-CGTiTBmo.js} +1 -1
  73. package/dist/ui/assets/{chunk-32BRIVSS-C300ACzq.js → chunk-32BRIVSS-DWagYBp9.js} +1 -1
  74. package/dist/ui/assets/{chunk-5VM5RSS4-MtSkFsde.js → chunk-5VM5RSS4-BzSBMKJX.js} +1 -1
  75. package/dist/ui/assets/{chunk-EX3LRPZG-CEeHrGNV.js → chunk-EX3LRPZG-4-aKwCgZ.js} +1 -1
  76. package/dist/ui/assets/{chunk-JWPE2WC7-DTRgpK0R.js → chunk-JWPE2WC7-CPC_cBN0.js} +1 -1
  77. package/dist/ui/assets/{chunk-MOJQB5TN-DiOl0HJx.js → chunk-MOJQB5TN-DrDE4H9w.js} +1 -1
  78. package/dist/ui/assets/{chunk-RYQCIY6F-CVC3opqY.js → chunk-RYQCIY6F-DkdXe_kU.js} +1 -1
  79. package/dist/ui/assets/{chunk-V7JOEXUC-yQYlqQCC.js → chunk-V7JOEXUC-Da6EWcQt.js} +1 -1
  80. package/dist/ui/assets/{chunk-VR4S4FIN-iAA8ZgkK.js → chunk-VR4S4FIN-nP6dstD5.js} +1 -1
  81. package/dist/ui/assets/{chunk-XXDRQBXY-B303eieF.js → chunk-XXDRQBXY-Bi_rRAPA.js} +1 -1
  82. package/dist/ui/assets/classDiagram-OUVF2IWQ-C4UVH6RI.js +1 -0
  83. package/dist/ui/assets/classDiagram-v2-EOCWNBFH-C4UVH6RI.js +1 -0
  84. package/dist/ui/assets/{clean-MfHaW_uS.js → clean-cc1m9AxK.js} +1 -1
  85. package/dist/ui/assets/{clojure-9L8TfiWA.js → clojure-DX5V8QA8.js} +1 -1
  86. package/dist/ui/assets/{clojure-repl-CjsH9sxr.js → clojure-repl-FzjnVNWQ.js} +1 -1
  87. package/dist/ui/assets/{cmake-D0D1Q30G.js → cmake-COZZyrKs.js} +1 -1
  88. package/dist/ui/assets/{coffeescript-BI4jWZnB.js → coffeescript-DBsnOmC4.js} +1 -1
  89. package/dist/ui/assets/{c-BgqCrSpv.js → coq-TwFFolHa.js} +1 -1
  90. package/dist/ui/assets/{cos-DHax5LIJ.js → cos-Dm5g-IQT.js} +1 -1
  91. package/dist/ui/assets/{cose-bilkent-JH36ORCC-BzrKmTAZ.js → cose-bilkent-JH36ORCC-B3-weOQF.js} +1 -1
  92. package/dist/ui/assets/{cpp-M4aMPUas.js → cpp-_RZxQjg7.js} +1 -1
  93. package/dist/ui/assets/{crmsh-DAAczfR0.js → crmsh-DGPJ11Gt.js} +1 -1
  94. package/dist/ui/assets/{crystal-7g2CpWm4.js → crystal-BOMSPGge.js} +1 -1
  95. package/dist/ui/assets/{csharp-DW5GdKKf.js → csharp-DZXiHH72.js} +1 -1
  96. package/dist/ui/assets/{csp-Bq74fG7-.js → csp-DDSIMUoU.js} +1 -1
  97. package/dist/ui/assets/{css-DHyeLXff.js → css-Bjye-ZWr.js} +1 -1
  98. package/dist/ui/assets/{cynefin-VYW2F7L2-DwV1t9iV.js → cynefin-VYW2F7L2-Cj5c4L3y.js} +1 -1
  99. package/dist/ui/assets/{cynefinDiagram-TSTJHNR4-kBCFRYPz.js → cynefinDiagram-TSTJHNR4-BYsfTeNX.js} +1 -1
  100. package/dist/ui/assets/{d-yey2lm3v.js → d-22pfurOx.js} +1 -1
  101. package/dist/ui/assets/{dagre-VKFMJZFB-CErVJ1s0.js → dagre-VKFMJZFB-DiEob-by.js} +1 -1
  102. package/dist/ui/assets/{dart-BadDxflP.js → dart-Doiu8cDW.js} +1 -1
  103. package/dist/ui/assets/{delphi-CqzVqtDp.js → delphi-CQ7epp84.js} +1 -1
  104. package/dist/ui/assets/{diagram-FQU43EPY-C7zAW2DU.js → diagram-FQU43EPY-BOPbQcL4.js} +1 -1
  105. package/dist/ui/assets/{diagram-G47NLZAW-CbUb6BZI.js → diagram-G47NLZAW-C1UWDJTx.js} +1 -1
  106. package/dist/ui/assets/{diagram-NH7WQ7WH-C5mgi3dn.js → diagram-NH7WQ7WH-CYsBqW3J.js} +1 -1
  107. package/dist/ui/assets/{diagram-OA4YK3LP-Cok2YNfS.js → diagram-OA4YK3LP-Dnag0x_3.js} +1 -1
  108. package/dist/ui/assets/{diagram-WEI45ONY-BODuP2EB.js → diagram-WEI45ONY-Bo4CsDoj.js} +1 -1
  109. package/dist/ui/assets/{diff-EVigJ-h2.js → diff-Cs6VQQZt.js} +1 -1
  110. package/dist/ui/assets/{django-BH2EEal6.js → django-Bo3okOrw.js} +1 -1
  111. package/dist/ui/assets/{dns-BSc8VTm8.js → dns-BpG60eIX.js} +1 -1
  112. package/dist/ui/assets/{dockerfile-Br_pZjru.js → dockerfile-BWyH8SlV.js} +1 -1
  113. package/dist/ui/assets/{dos-Bx3ludet.js → dos-DWlNbaB9.js} +1 -1
  114. package/dist/ui/assets/{dsconfig-DSI-ePne.js → dsconfig-D_8y8YrJ.js} +1 -1
  115. package/dist/ui/assets/{dts-ClCuE1Xq.js → dts-Cz4SyMYR.js} +1 -1
  116. package/dist/ui/assets/{dust-CC9Z8iuW.js → dust-Cu4qLkeH.js} +1 -1
  117. package/dist/ui/assets/{ebnf-DI0w_fbi.js → ebnf-CTVHui3r.js} +1 -1
  118. package/dist/ui/assets/{ebnfDiagram-CCIWWBDH-CgsnO8Qm.js → ebnfDiagram-CCIWWBDH-epcXQLEj.js} +1 -1
  119. package/dist/ui/assets/{elixir-hdzZik8p.js → elixir-MAlwXhfU.js} +1 -1
  120. package/dist/ui/assets/{elm-DJAgqt5I.js → elm-Bdmwbvef.js} +1 -1
  121. package/dist/ui/assets/{erDiagram-Q63AITRT-K4zJcEKd.js → erDiagram-Q63AITRT-Bb60TqAM.js} +1 -1
  122. package/dist/ui/assets/{erb-Cq4OQqkl.js → erb-Ce9TpP4g.js} +1 -1
  123. package/dist/ui/assets/{erlang-CHoXLODu.js → erlang-CN2GEiqk.js} +1 -1
  124. package/dist/ui/assets/{erlang-repl-Brp70Zip.js → erlang-repl-D8K4O_cp.js} +1 -1
  125. package/dist/ui/assets/{excel-DjS-QR9P.js → excel-eVZU1r0f.js} +1 -1
  126. package/dist/ui/assets/{fix-BsO9Oq6H.js → fix-BzKerEv0.js} +1 -1
  127. package/dist/ui/assets/{flix-2A7CKozm.js → flix-B9CE3skV.js} +1 -1
  128. package/dist/ui/assets/{flowDiagram-23GEKE2U-Ck4tfxWX.js → flowDiagram-23GEKE2U-DzMLZIyt.js} +1 -1
  129. package/dist/ui/assets/{fortran-BQu3wORI.js → fortran-B4__3vos.js} +1 -1
  130. package/dist/ui/assets/{fsharp-D439S6PZ.js → fsharp-BJ3-ARHz.js} +1 -1
  131. package/dist/ui/assets/{gams-CPRxKfRH.js → gams-Cu43oSYT.js} +1 -1
  132. package/dist/ui/assets/{ganttDiagram-NO4QXBWP-QTPyXXxa.js → ganttDiagram-NO4QXBWP-D_aAoMRP.js} +1 -1
  133. package/dist/ui/assets/{gauss-GJFW9Vod.js → gauss-T8vk_TpE.js} +1 -1
  134. package/dist/ui/assets/{gcode-CF6woDAl.js → gcode-9j3BicpZ.js} +1 -1
  135. package/dist/ui/assets/{gherkin-Co-YjHfW.js → gherkin-Dyh5KFG-.js} +1 -1
  136. package/dist/ui/assets/{gitGraphDiagram-IHSO6WYX-Do9VfPHL.js → gitGraphDiagram-IHSO6WYX-CMxCHC-Z.js} +1 -1
  137. package/dist/ui/assets/{glsl-D3lldBTJ.js → glsl-DWWjN4ts.js} +1 -1
  138. package/dist/ui/assets/{gml-DyoCibnw.js → gml-BcYE-D5A.js} +1 -1
  139. package/dist/ui/assets/{go-BNeAS1jC.js → go-DUnUzOEI.js} +1 -1
  140. package/dist/ui/assets/{golo-BuXecWAH.js → golo-BDoc1QQL.js} +1 -1
  141. package/dist/ui/assets/{gradle-BP7ToLe9.js → gradle-B_WRa_bT.js} +1 -1
  142. package/dist/ui/assets/{groovy-GqWVT09g.js → groovy-CgjqFq1e.js} +1 -1
  143. package/dist/ui/assets/{haml-SLbvCHsC.js → haml-DCqcg7Ti.js} +1 -1
  144. package/dist/ui/assets/{handlebars-BnaCJTc5.js → handlebars-DSDUQrnw.js} +1 -1
  145. package/dist/ui/assets/{haskell-CrX9ftWp.js → haskell-DPVnctVi.js} +1 -1
  146. package/dist/ui/assets/{haxe-DNoaIxsE.js → haxe-BuCGXBa4.js} +1 -1
  147. package/dist/ui/assets/{hsp-CLjy3djj.js → hsp-BTKpS_u0.js} +1 -1
  148. package/dist/ui/assets/{htmlbars-w96Kz5NL.js → htmlbars-Cql3Jvy2.js} +1 -1
  149. package/dist/ui/assets/{http-VIMXIxM8.js → http-BB8I9jUh.js} +1 -1
  150. package/dist/ui/assets/{hy-_qE83_aW.js → hy-DG7xkZNz.js} +1 -1
  151. package/dist/ui/assets/index-CK_lJsTu.css +10 -0
  152. package/dist/ui/assets/index-CfTIGTiY.js +2677 -0
  153. package/dist/ui/assets/{index-DpcPfZl3.js → index-DqIiCkSD.js} +3 -3
  154. package/dist/ui/assets/{infoDiagram-FWYZ7A6U-D9O7SZ2X.js → infoDiagram-FWYZ7A6U-DIzEV-BJ.js} +1 -1
  155. package/dist/ui/assets/{inform7-CnyW73C1.js → inform7-BWNpVEkA.js} +1 -1
  156. package/dist/ui/assets/{ini-GFMFAjln.js → ini-BMw_C8EP.js} +1 -1
  157. package/dist/ui/assets/{irpf90-BPmSYATn.js → irpf90-Cy42ibFZ.js} +1 -1
  158. package/dist/ui/assets/{isbl-BnStGiBQ.js → isbl-CjFSc0hz.js} +1 -1
  159. package/dist/ui/assets/{ishikawaDiagram-FXEZZL3T-DgcUDM9X.js → ishikawaDiagram-FXEZZL3T-BZcxp5am.js} +1 -1
  160. package/dist/ui/assets/{java-CVORcFd8.js → java-BDxe9dp1.js} +1 -1
  161. package/dist/ui/assets/{javascript-B2pFzODm.js → javascript-CgLkkj7h.js} +1 -1
  162. package/dist/ui/assets/{jboss-cli-B9cQeKvZ.js → jboss-cli-C8biclrb.js} +1 -1
  163. package/dist/ui/assets/{journeyDiagram-5HDEW3XC-Bivjw4h7.js → journeyDiagram-5HDEW3XC-BbJu6m6Q.js} +1 -1
  164. package/dist/ui/assets/{json-BJof8L10.js → json-BjJKhmM6.js} +1 -1
  165. package/dist/ui/assets/{julia-D_dGrCpZ.js → julia-DvKEpg-R.js} +1 -1
  166. package/dist/ui/assets/{julia-repl-Dsw0K1B1.js → julia-repl-BDJWZxkU.js} +1 -1
  167. package/dist/ui/assets/{kanban-definition-HUTT4EX6-Dg7NbKta.js → kanban-definition-HUTT4EX6-DeIVPlbv.js} +1 -1
  168. package/dist/ui/assets/{kotlin-8oetHRtX.js → kotlin-DCoXcnEb.js} +1 -1
  169. package/dist/ui/assets/{lasso-e37r_NX1.js → lasso-C7m0QmV2.js} +1 -1
  170. package/dist/ui/assets/{latex-DAmwzl3n.js → latex-SHnTG9Eq.js} +1 -1
  171. package/dist/ui/assets/{ldif-CD0mgmt4.js → ldif-_6hUnKPV.js} +1 -1
  172. package/dist/ui/assets/{leaf-GfPKlp7a.js → leaf-Co9qxlaF.js} +1 -1
  173. package/dist/ui/assets/{less-PndaZJ6n.js → less-CJRDPwNA.js} +1 -1
  174. package/dist/ui/assets/{lisp-CNaspu3A.js → lisp-JEHGYbiW.js} +1 -1
  175. package/dist/ui/assets/{livecodeserver-DEKsXiP3.js → livecodeserver-BSYaUj4k.js} +1 -1
  176. package/dist/ui/assets/{livescript-DM7jasJn.js → livescript-WQMCQeuz.js} +1 -1
  177. package/dist/ui/assets/{llvm-D_29j9MV.js → llvm-DnAHqj5I.js} +1 -1
  178. package/dist/ui/assets/{lsl-DY0WRYhg.js → lsl--k-ghYia.js} +1 -1
  179. package/dist/ui/assets/{lua-DZ_v4xaE.js → lua-CXb23hbC.js} +1 -1
  180. package/dist/ui/assets/{makefile-VOjcUGXf.js → makefile-CM7o86yn.js} +1 -1
  181. package/dist/ui/assets/{markdown-yUEmZWvu.js → markdown-HB3HvChQ.js} +1 -1
  182. package/dist/ui/assets/{mathematica-BLXYGKkd.js → mathematica-9NTuf22N.js} +1 -1
  183. package/dist/ui/assets/{matlab-B7SkIpvh.js → matlab-CWv-ik4r.js} +1 -1
  184. package/dist/ui/assets/{maxima-C7Fw8Vyt.js → maxima-CqYiKCrw.js} +1 -1
  185. package/dist/ui/assets/{mel-C_Znst2Y.js → mel-BbsRpUm5.js} +1 -1
  186. package/dist/ui/assets/{mercury-DjUnQNsq.js → mercury-Cz2j4HhU.js} +1 -1
  187. package/dist/ui/assets/{mindmap-definition-LN4V7U3C-Dp6mEy6L.js → mindmap-definition-LN4V7U3C-WyJS8oye.js} +1 -1
  188. package/dist/ui/assets/{mipsasm-DaGHhR8c.js → mipsasm-BqWSRbQV.js} +1 -1
  189. package/dist/ui/assets/{mizar-CZnct-_Z.js → mizar-JLBfQ6vt.js} +1 -1
  190. package/dist/ui/assets/{mojolicious-BdWFK35j.js → mojolicious-D0LbMmyk.js} +1 -1
  191. package/dist/ui/assets/{monkey-ta_jgafo.js → monkey-DAGL6-JN.js} +1 -1
  192. package/dist/ui/assets/{moonscript-B9qovjV6.js → moonscript-DzbwNSKy.js} +1 -1
  193. package/dist/ui/assets/{n1ql-BciXbxiw.js → n1ql-dkgKq6Yv.js} +1 -1
  194. package/dist/ui/assets/{nginx-DRCZYbxj.js → nginx-AUoaDPV4.js} +1 -1
  195. package/dist/ui/assets/{nim-DTMCxPJt.js → nim-CdqYmVrl.js} +1 -1
  196. package/dist/ui/assets/{nix-D39yZxF9.js → nix-CxmVjwwo.js} +1 -1
  197. package/dist/ui/assets/{node-repl-vAEXdnYM.js → node-repl-B1Z3zUAh.js} +1 -1
  198. package/dist/ui/assets/{nsis-CCMP8mq3.js → nsis-CTAuPWhe.js} +1 -1
  199. package/dist/ui/assets/{objectivec-CZx4kSLP.js → objectivec-CvbKeAPz.js} +1 -1
  200. package/dist/ui/assets/{ocaml-DBnEo9uR.js → ocaml-DCiyXKOH.js} +1 -1
  201. package/dist/ui/assets/{openscad-BKc7u4Bl.js → openscad-CPGUwmeR.js} +1 -1
  202. package/dist/ui/assets/{oxygene-M_Z4lQ6l.js → oxygene-CI_bD1Gw.js} +1 -1
  203. package/dist/ui/assets/{parser3-DS9UKiKD.js → parser3-C91CVs85.js} +1 -1
  204. package/dist/ui/assets/{pegDiagram-2B236MQR-BBEXn76M.js → pegDiagram-2B236MQR-yF8AW7GR.js} +1 -1
  205. package/dist/ui/assets/{perl-D6iEALGE.js → perl-ChxfKl-n.js} +1 -1
  206. package/dist/ui/assets/{pf-JQL0ClGi.js → pf-CKCHkzIA.js} +1 -1
  207. package/dist/ui/assets/{pgsql-DEmCURBr.js → pgsql-BwOP20uH.js} +1 -1
  208. package/dist/ui/assets/{php-DVm-0PY5.js → php-B7Rs2tM5.js} +1 -1
  209. package/dist/ui/assets/{php-template-DfWbDpnE.js → php-template-Cx-Fh4AR.js} +1 -1
  210. package/dist/ui/assets/{pieDiagram-ENE6RG2P-D5PZFiDj.js → pieDiagram-ENE6RG2P-BS4hnGNX.js} +1 -1
  211. package/dist/ui/assets/{plaintext-BahVkGlu.js → plaintext-U7qkdtgS.js} +1 -1
  212. package/dist/ui/assets/{pony-wVig0caC.js → pony-_fGYgePh.js} +1 -1
  213. package/dist/ui/assets/{powershell-COjMBUit.js → powershell-CFBTcUce.js} +1 -1
  214. package/dist/ui/assets/{processing-DnUzvFZx.js → processing-BWHneU0K.js} +1 -1
  215. package/dist/ui/assets/{profile-mDlbwJeL.js → profile-BJ-HxhzS.js} +1 -1
  216. package/dist/ui/assets/{prolog-x2hG6DnA.js → prolog-ChHo7n6L.js} +1 -1
  217. package/dist/ui/assets/{properties-DzZyyivC.js → properties-e_DOYclC.js} +1 -1
  218. package/dist/ui/assets/{protobuf-a5NwbYD5.js → protobuf-5aGSIv7w.js} +1 -1
  219. package/dist/ui/assets/{puppet-CCWyPVuC.js → puppet-D2vQatzX.js} +1 -1
  220. package/dist/ui/assets/{purebasic-CXNdqtD4.js → purebasic-n6krfaeF.js} +1 -1
  221. package/dist/ui/assets/{python-iSR9YlDJ.js → python-CbIo0XxP.js} +1 -1
  222. package/dist/ui/assets/{python-repl-CCmKzWru.js → python-repl-BpIq9kyr.js} +1 -1
  223. package/dist/ui/assets/{q-B30ZmDuD.js → q-jntnvcCx.js} +1 -1
  224. package/dist/ui/assets/{qml-BGdPdB4X.js → qml-BafQlZNV.js} +1 -1
  225. package/dist/ui/assets/{quadrantDiagram-ABIIQ3AL-BBF1rAvI.js → quadrantDiagram-ABIIQ3AL-C3Th8mUJ.js} +1 -1
  226. package/dist/ui/assets/{r-B8ASdWL1.js → r-CHgvQFLK.js} +1 -1
  227. package/dist/ui/assets/{railroadDiagram-RFXS5EU6-DQFUXGVD.js → railroadDiagram-RFXS5EU6-CMQkbGJl.js} +1 -1
  228. package/dist/ui/assets/{reasonml-Dw4Bi5B5.js → reasonml-DNwlPD_T.js} +1 -1
  229. package/dist/ui/assets/{requirementDiagram-TGXJPOKE-DCgrs7-P.js → requirementDiagram-TGXJPOKE-B70_oR7v.js} +1 -1
  230. package/dist/ui/assets/{rib-CgUGGGZ9.js → rib-CX4e9JSF.js} +1 -1
  231. package/dist/ui/assets/{roboconf-CCZNQvSP.js → roboconf-ee4qsPGf.js} +1 -1
  232. package/dist/ui/assets/{routeros-DVT5M6iV.js → routeros-BJSwvu2L.js} +1 -1
  233. package/dist/ui/assets/{rsl-BY-LhdKq.js → rsl-BiKdMl_F.js} +1 -1
  234. package/dist/ui/assets/{ruby-CZW4dclw.js → ruby-CAXTU5LY.js} +1 -1
  235. package/dist/ui/assets/{ruleslanguage-CZdjv1of.js → ruleslanguage-C1kgDGXM.js} +1 -1
  236. package/dist/ui/assets/{rust-D5Xa_mSD.js → rust-DyEf_GXL.js} +1 -1
  237. package/dist/ui/assets/{sankeyDiagram-HTMAVEWB-BXeEgUB7.js → sankeyDiagram-HTMAVEWB-CvUfseMg.js} +1 -1
  238. package/dist/ui/assets/{sas-B_UJ-HCZ.js → sas-Q1rlUxPH.js} +1 -1
  239. package/dist/ui/assets/{scala-B8wSdZik.js → scala-Dg6KNmge.js} +1 -1
  240. package/dist/ui/assets/{scheme-DD7U81eh.js → scheme-D9iooUxI.js} +1 -1
  241. package/dist/ui/assets/{scilab-aJGpbkKs.js → scilab-CztEJXJY.js} +1 -1
  242. package/dist/ui/assets/{scss-BBqyvWYh.js → scss-BMh-JkdE.js} +1 -1
  243. package/dist/ui/assets/{sequenceDiagram-DBY2YBRQ-CnDTZN18.js → sequenceDiagram-DBY2YBRQ-DB0c9kf4.js} +1 -1
  244. package/dist/ui/assets/{shell-CR23jqfz.js → shell-DWo6z0MG.js} +1 -1
  245. package/dist/ui/assets/{sizeCapture-X5ZJPWSS-joZ477RB.js → sizeCapture-X5ZJPWSS-BcQlgjfD.js} +1 -1
  246. package/dist/ui/assets/{smali-ZmLyRCrQ.js → smali-Cijeb6pL.js} +1 -1
  247. package/dist/ui/assets/{smalltalk-CnADYfPr.js → smalltalk-D0lvqa_d.js} +1 -1
  248. package/dist/ui/assets/{sml-zj1KD04_.js → sml-B-vqWZ3b.js} +1 -1
  249. package/dist/ui/assets/{sqf-DCCaZ3e3.js → sqf-BJ-1Q583.js} +1 -1
  250. package/dist/ui/assets/{sql-CHGw2SCR.js → sql-CMGLxEYV.js} +1 -1
  251. package/dist/ui/assets/{sql_more-DsnvjMwh.js → sql_more-gsRmbNCH.js} +1 -1
  252. package/dist/ui/assets/{stan-ChxdV8f9.js → stan-D1AlTSpf.js} +1 -1
  253. package/dist/ui/assets/{stata-CgFw45qg.js → stata-DnEYviI0.js} +1 -1
  254. package/dist/ui/assets/{stateDiagram-2N3HPSRC-CzLIdKbt.js → stateDiagram-2N3HPSRC-BSRgVsHO.js} +1 -1
  255. package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-BLdfpGJO.js +1 -0
  256. package/dist/ui/assets/{step21-DaraQMOk.js → step21-DbQV9sMo.js} +1 -1
  257. package/dist/ui/assets/{stylus-BZpiJEzN.js → stylus-Cyc7vdUc.js} +1 -1
  258. package/dist/ui/assets/{subunit-B6Gp0n7h.js → subunit-16ipyMie.js} +1 -1
  259. package/dist/ui/assets/{swift-DQzoz60p.js → swift-DTNnw4qS.js} +1 -1
  260. package/dist/ui/assets/{swimlanes-5IMT3BWC-DOMOhwX0.js → swimlanes-5IMT3BWC-DgOdcc4_.js} +2 -2
  261. package/dist/ui/assets/swimlanesDiagram-G3AALYLV-DRVnkg3M.js +8 -0
  262. package/dist/ui/assets/{taggerscript-BMLkfiab.js → taggerscript-DM6pvUWE.js} +1 -1
  263. package/dist/ui/assets/{tap-PUNWTFgu.js → tap-Ch-uyKZq.js} +1 -1
  264. package/dist/ui/assets/{tcl-BODH5qJa.js → tcl-D0T_V5dA.js} +1 -1
  265. package/dist/ui/assets/{thrift-BQ-W_YlC.js → thrift-D9xJjYw4.js} +1 -1
  266. package/dist/ui/assets/{timeline-definition-FHXFAJF6-DQBDeTzH.js → timeline-definition-FHXFAJF6-BBeDMHxb.js} +1 -1
  267. package/dist/ui/assets/{tp-Dt3WwOGF.js → tp-kUrCGo9X.js} +1 -1
  268. package/dist/ui/assets/{twig-44RQtw7Z.js → twig-Cgub6rxA.js} +1 -1
  269. package/dist/ui/assets/{typescript-BsouHXHR.js → typescript-BxNP9Ap9.js} +1 -1
  270. package/dist/ui/assets/{vala-DqJj6fPT.js → vala-DF9ZZagU.js} +1 -1
  271. package/dist/ui/assets/{vbnet-CuqWYg5r.js → vbnet-Cf46ypDg.js} +1 -1
  272. package/dist/ui/assets/{vbscript-w20MQMYP.js → vbscript-DNs-QKLH.js} +1 -1
  273. package/dist/ui/assets/{vbscript-html-BP0D0WEV.js → vbscript-html-DyS6I5L1.js} +1 -1
  274. package/dist/ui/assets/{vennDiagram-L72KCM5P-DwNnj3Kc.js → vennDiagram-L72KCM5P-8WpWycE-.js} +1 -1
  275. package/dist/ui/assets/{verilog-DIpBpJAe.js → verilog-CF5wC4X-.js} +1 -1
  276. package/dist/ui/assets/{vhdl-D5nCxDbL.js → vhdl-Dm0jpDMn.js} +1 -1
  277. package/dist/ui/assets/{vim-CPfbBM_x.js → vim-nyO2DRAx.js} +1 -1
  278. package/dist/ui/assets/{wardleyDiagram-EHGQE667-WxVQHmM7.js → wardleyDiagram-EHGQE667-UeIOK-jv.js} +1 -1
  279. package/dist/ui/assets/{x86asm-D_t4Z_eq.js → x86asm-BNw2-6GG.js} +1 -1
  280. package/dist/ui/assets/{xl-DQf5IG_W.js → xl-D-YHxr6V.js} +1 -1
  281. package/dist/ui/assets/{xml-D-Bn0NMR.js → xml-BijAlrow.js} +1 -1
  282. package/dist/ui/assets/{xquery-DqushYX1.js → xquery-z0wxWBKz.js} +1 -1
  283. package/dist/ui/assets/{xychartDiagram-FW5EYKEG-B6D8mgs8.js → xychartDiagram-FW5EYKEG-BNzHLweN.js} +1 -1
  284. package/dist/ui/assets/{yaml-B2GFZenc.js → yaml-n5TIQArR.js} +1 -1
  285. package/dist/ui/assets/{zephir-SiNGockR.js → zephir-DrGhH8jG.js} +1 -1
  286. package/dist/ui/index.html +2 -2
  287. package/dist/utils/__tests__/providers-db.test.js +2 -1
  288. package/dist/utils/__tests__/tool-injector.test.js +32 -35
  289. package/dist/utils/db.d.ts +3 -0
  290. package/dist/utils/db.js +54 -0
  291. package/dist/utils/inject-loop.d.ts +52 -1
  292. package/dist/utils/inject-loop.js +70 -2
  293. package/dist/utils/mcp-db.d.ts +35 -0
  294. package/dist/utils/mcp-db.js +79 -0
  295. package/dist/utils/mcp-manager.d.ts +36 -0
  296. package/dist/utils/mcp-manager.js +215 -0
  297. package/dist/utils/openai-converter.d.ts +99 -0
  298. package/dist/utils/openai-converter.js +293 -0
  299. package/dist/utils/providers-db.d.ts +2 -0
  300. package/dist/utils/providers-db.js +19 -7
  301. package/dist/utils/request-writer.d.ts +20 -0
  302. package/dist/utils/request-writer.js +184 -4
  303. package/dist/utils/sse-stream-processor.d.ts +27 -0
  304. package/dist/utils/sse-stream-processor.js +144 -0
  305. package/dist/utils/stats-aggregator.js +2 -0
  306. package/dist/utils/status-history.js +3 -3
  307. package/dist/utils/tool-injector.d.ts +6 -9
  308. package/dist/utils/tool-injector.js +13 -14
  309. package/dist/utils/version.d.ts +6 -0
  310. package/dist/utils/version.js +11 -1
  311. package/package.json +14 -12
  312. package/dist/ui/assets/channel-C5JlZ38H.js +0 -1
  313. package/dist/ui/assets/classDiagram-OUVF2IWQ-j5FVBKaD.js +0 -1
  314. package/dist/ui/assets/classDiagram-v2-EOCWNBFH-j5FVBKaD.js +0 -1
  315. package/dist/ui/assets/index-Baqd6LlK.js +0 -2625
  316. package/dist/ui/assets/index-fHtNI_e8.css +0 -1
  317. package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-Bg4GAkB5.js +0 -1
  318. package/dist/ui/assets/swimlanesDiagram-G3AALYLV-99wEK8yq.js +0 -8
package/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # @cc-monitoring/proxy-core
2
2
 
3
- Claude Code 代理 + 监控 CLI。Fastify 应用层转发 + PM2 守护进程 + Web 管理面板 + 完整请求记录。
4
-
5
- 一站式解决国内网络访问 Claude Code 的问题,同时提供请求日志、Token 统计、供应商切换、SSE 流式抓包等运维能力。
3
+ Claude Code 代理工具 + Token 消耗监控面板。一行命令启动代理,实时追踪每次请求的模型、Token 用量和响应状态。
6
4
 
7
5
  [![npm version](https://img.shields.io/npm/v/@cc-monitoring/proxy-core.svg)](https://www.npmjs.com/package/@cc-monitoring/proxy-core)
8
6
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
@@ -27,7 +25,7 @@ ccm start
27
25
  ccm ui
28
26
 
29
27
  # 3. 把 Claude Code 的 ANTHROPIC_BASE_URL 指向本地代理
30
- export ANTHROPIC_BASE_URL=http://localhost:3000
28
+ export ANTHROPIC_BASE_URL=http://localhost:9527
31
29
  ```
32
30
 
33
31
  首次运行会在 `~/.cc-monitoring/` 生成配置文件和数据库:
@@ -67,20 +65,21 @@ ccm config set proxy.target https://xxx # 修改上游地址
67
65
 
68
66
  ```json
69
67
  {
70
- "server": { "port": 3000, "host": "localhost" },
68
+ "server": { "port": 9527, "host": "localhost" },
71
69
  "proxy": {
72
- "target": "https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic",
73
- "changeOrigin": true,
74
- "rewritePrefix": ""
70
+ "target": "https://ark.cn-beijing.volces.com/api/coding",
71
+ "changeOrigin": true
75
72
  },
76
- "logging": { "level": "info", "file": "logs/proxy.log" },
77
- "auth": { "token": "" }
73
+ "logging": { "level": "info", "file": "logs/proxy.log", "maxSize": "10m", "interval": "1d", "compress": true },
74
+ "storage": { "type": "sqlite", "path": "logs/proxy.db", "maxDays": 7 }
78
75
  }
79
76
  ```
80
77
 
78
+ > `logs/` 路径相对于 config 所在目录解析,实际存 `~/.cc-monitoring/logs/` 下。
79
+
81
80
  | 字段 | 类型 | 说明 |
82
81
  |------|------|------|
83
- | `server.port` | number (1-65535) | 监听端口,默认 3000 |
82
+ | `server.port` | number (1-65535) | 监听端口,默认 9527 |
84
83
  | `server.host` | string | 监听主机 |
85
84
  | `proxy.target` | URL | 上游 AI 供应商 API |
86
85
  | `proxy.changeOrigin` | boolean | 是否重写 Origin 头 |
@@ -92,7 +91,7 @@ ccm config set proxy.target https://xxx # 修改上游地址
92
91
 
93
92
  ## Web 管理面板
94
93
 
95
- `ccm ui` 或访问 `http://localhost:3000/ui`:
94
+ `ccm ui` 或访问 `http://localhost:9527/ui`:
96
95
 
97
96
  - **状态监控**:CPU / 内存 / 运行时间 / 重启次数(5s 刷新)
98
97
  - **实时日志**:WebSocket 推流、级别过滤、关键字搜索
@@ -100,29 +99,6 @@ ccm config set proxy.target https://xxx # 修改上游地址
100
99
  - **配置编辑**:可视化改 `config.json`,Zod 实时校验
101
100
  - **供应商管理**:多供应商配置,一键切换 baseUrl / apiKey / model
102
101
 
103
- ## 架构要点
104
-
105
- **应用层转发**(Controller + Fetch + SSE Pipe),非透明代理:
106
-
107
- ```
108
- Claude Code
109
- ↓ POST /v1/messages
110
- Fastify(解析 body)
111
- ↓ saveRequest(记录完整 payload)
112
- fetch → 上游 API
113
- ↓ Web ReadableStream
114
- reply.hijack() + Readable.fromWeb().pipe(reply.raw)
115
- ↓ 原样 SSE 转发
116
- Claude Code
117
- ```
118
-
119
- 为什么不用透明代理:`@fastify/http-proxy` 内部消费 request stream,无法同时完成「记录 body + 转发 SSE + 未来鉴权/统计」。HTTP stream 只能消费一次。
120
-
121
- **关键处理**:
122
- - Web Stream → Node Stream:`Readable.fromWeb(response.body)`
123
- - 头处理:删 `host`(阿里云 404)、`content-length`(长度变化),保留 `anthropic-version` / `x-api-key` / `accept: text/event-stream`
124
- - SSE 记录:`nodeStream.on('end')` 落盘完整 events 数组
125
-
126
102
  ## 环境变量
127
103
 
128
104
  | 变量 | 说明 |
@@ -0,0 +1,4 @@
1
+ export interface DocOptions {
2
+ build?: boolean;
3
+ }
4
+ export declare function docCommand(options: DocOptions): Promise<void>;
@@ -0,0 +1,31 @@
1
+ import { execSync } from 'child_process';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { loadConfig } from '../../config/index.js';
5
+ import { getProcessStatus } from '../../utils/pm2.js';
6
+ import { getCallerDirname } from '../../utils/esm-dirname.js';
7
+ const commandsDirname = getCallerDirname('../cli/commands');
8
+ export async function docCommand(options) {
9
+ const status = await getProcessStatus('cc-monitoring');
10
+ if (!status || status.status !== 'online') {
11
+ console.error('Server not running. Use "ccm start" first.');
12
+ return;
13
+ }
14
+ // 发布产物:dist/docs;本地开发:monorepo 的 proxy-docs/dist
15
+ const bundledDocs = path.join(commandsDirname, '../../docs');
16
+ const monorepoDocs = path.join(commandsDirname, '../../../../proxy-docs/dist');
17
+ const docsExists = fs.existsSync(bundledDocs) || fs.existsSync(monorepoDocs);
18
+ const needsBuild = options.build || !docsExists;
19
+ if (needsBuild) {
20
+ console.log('Building docs...');
21
+ execSync('pnpm --filter @cc-monitoring/docs build', {
22
+ stdio: 'inherit',
23
+ cwd: path.join(commandsDirname, '../../../..')
24
+ });
25
+ }
26
+ const config = await loadConfig();
27
+ const url = `http://${config.server.host}:${config.server.port}/docs/`;
28
+ console.log(`Opening docs: ${url}`);
29
+ const open = (await import('open')).default;
30
+ await open(url);
31
+ }
package/dist/cli/index.js CHANGED
@@ -111,6 +111,13 @@ program.command('ui')
111
111
  const { uiCommand } = await import('./commands/ui.js');
112
112
  await uiCommand(options);
113
113
  });
114
+ program.command('doc')
115
+ .description('Open architecture docs')
116
+ .option('--build', 'Force rebuild docs')
117
+ .action(async (options) => {
118
+ const { docCommand } = await import('./commands/doc.js');
119
+ await docCommand(options);
120
+ });
114
121
  program.command('clean-requests')
115
122
  .description('清理旧的请求日志(SQLite)')
116
123
  .option('--days <days>', '保留最近N天的数据', '7')
@@ -51,7 +51,8 @@ export async function resetConfig(configPath = getConfigPath()) {
51
51
  type: 'sqlite',
52
52
  path: 'logs/proxy.db',
53
53
  maxDays: 7
54
- }
54
+ },
55
+ mcpServers: []
55
56
  };
56
57
  await saveConfig(defaultConfig, configPath);
57
58
  }
@@ -65,6 +65,34 @@ export declare const AppConfigSchema: z.ZodObject<{
65
65
  }, {
66
66
  token: string;
67
67
  }>>;
68
+ mcpServers: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
69
+ name: z.ZodString;
70
+ transport_type: z.ZodEnum<["stdio", "sse", "streamable-http"]>;
71
+ command: z.ZodOptional<z.ZodString>;
72
+ args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
73
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
74
+ url: z.ZodOptional<z.ZodString>;
75
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
76
+ enabled: z.ZodDefault<z.ZodBoolean>;
77
+ }, "strip", z.ZodTypeAny, {
78
+ name: string;
79
+ transport_type: "stdio" | "sse" | "streamable-http";
80
+ enabled: boolean;
81
+ command?: string | undefined;
82
+ args?: string[] | undefined;
83
+ env?: Record<string, string> | undefined;
84
+ url?: string | undefined;
85
+ headers?: Record<string, string> | undefined;
86
+ }, {
87
+ name: string;
88
+ transport_type: "stdio" | "sse" | "streamable-http";
89
+ command?: string | undefined;
90
+ args?: string[] | undefined;
91
+ env?: Record<string, string> | undefined;
92
+ url?: string | undefined;
93
+ headers?: Record<string, string> | undefined;
94
+ enabled?: boolean | undefined;
95
+ }>, "many">>>;
68
96
  }, "strip", z.ZodTypeAny, {
69
97
  server: {
70
98
  port: number;
@@ -88,6 +116,16 @@ export declare const AppConfigSchema: z.ZodObject<{
88
116
  type: "sqlite";
89
117
  maxDays: number;
90
118
  };
119
+ mcpServers: {
120
+ name: string;
121
+ transport_type: "stdio" | "sse" | "streamable-http";
122
+ enabled: boolean;
123
+ command?: string | undefined;
124
+ args?: string[] | undefined;
125
+ env?: Record<string, string> | undefined;
126
+ url?: string | undefined;
127
+ headers?: Record<string, string> | undefined;
128
+ }[];
91
129
  auth?: {
92
130
  token: string;
93
131
  } | undefined;
@@ -117,6 +155,16 @@ export declare const AppConfigSchema: z.ZodObject<{
117
155
  auth?: {
118
156
  token: string;
119
157
  } | undefined;
158
+ mcpServers?: {
159
+ name: string;
160
+ transport_type: "stdio" | "sse" | "streamable-http";
161
+ command?: string | undefined;
162
+ args?: string[] | undefined;
163
+ env?: Record<string, string> | undefined;
164
+ url?: string | undefined;
165
+ headers?: Record<string, string> | undefined;
166
+ enabled?: boolean | undefined;
167
+ }[] | undefined;
120
168
  }>;
121
169
  export type AppConfig = z.infer<typeof AppConfigSchema>;
122
170
  export declare function validateConfig(config: unknown): ValidationResult;
@@ -24,7 +24,17 @@ export const AppConfigSchema = z.object({
24
24
  }).optional().default({ type: 'sqlite', path: 'logs/proxy.db', maxDays: 7 }),
25
25
  auth: z.object({
26
26
  token: z.string().min(1)
27
- }).optional()
27
+ }).optional(),
28
+ mcpServers: z.array(z.object({
29
+ name: z.string().min(1),
30
+ transport_type: z.enum(['stdio', 'sse', 'streamable-http']),
31
+ command: z.string().optional(),
32
+ args: z.array(z.string()).optional(),
33
+ env: z.record(z.string()).optional(),
34
+ url: z.string().optional(),
35
+ headers: z.record(z.string()).optional(),
36
+ enabled: z.boolean().default(true)
37
+ })).optional().default([])
28
38
  });
29
39
  export function validateConfig(config) {
30
40
  const result = AppConfigSchema.safeParse(config);
@@ -0,0 +1,5 @@
1
+ import type { ParserLoader } from './types.js';
2
+ export declare class DocxLoader implements ParserLoader {
3
+ supportedExtensions: string[];
4
+ parse(buffer: Buffer, _filename: string): Promise<string>;
5
+ }
@@ -0,0 +1,15 @@
1
+ export class DocxLoader {
2
+ constructor() {
3
+ Object.defineProperty(this, "supportedExtensions", {
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true,
7
+ value: ['.docx']
8
+ });
9
+ }
10
+ async parse(buffer, _filename) {
11
+ const mammoth = await import('mammoth');
12
+ const result = await mammoth.extractRawText({ buffer });
13
+ return result.value;
14
+ }
15
+ }
@@ -0,0 +1,3 @@
1
+ import { ParserRegistry } from './registry.js';
2
+ declare const registry: ParserRegistry;
3
+ export { registry };
@@ -0,0 +1,10 @@
1
+ // apps/proxy-core/src/parsers/index.ts
2
+ import { ParserRegistry } from './registry.js';
3
+ import { MdLoader } from './md-loader.js';
4
+ import { DocxLoader } from './docx-loader.js';
5
+ import { XlsxLoader } from './xlsx-loader.js';
6
+ const registry = new ParserRegistry();
7
+ registry.register(new MdLoader());
8
+ registry.register(new DocxLoader());
9
+ registry.register(new XlsxLoader());
10
+ export { registry };
@@ -0,0 +1,5 @@
1
+ import type { ParserLoader } from './types.js';
2
+ export declare class MdLoader implements ParserLoader {
3
+ supportedExtensions: string[];
4
+ parse(buffer: Buffer, _filename: string): Promise<string>;
5
+ }
@@ -0,0 +1,13 @@
1
+ export class MdLoader {
2
+ constructor() {
3
+ Object.defineProperty(this, "supportedExtensions", {
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true,
7
+ value: ['.md', '.markdown']
8
+ });
9
+ }
10
+ async parse(buffer, _filename) {
11
+ return buffer.toString('utf-8');
12
+ }
13
+ }
@@ -0,0 +1,8 @@
1
+ import type { ParserLoader } from './types.js';
2
+ export declare class ParserRegistry {
3
+ private loaders;
4
+ register(loader: ParserLoader): void;
5
+ getSupportedExtensions(): string[];
6
+ parse(buffer: Buffer, filename: string): Promise<string>;
7
+ private getExtension;
8
+ }
@@ -0,0 +1,32 @@
1
+ export class ParserRegistry {
2
+ constructor() {
3
+ Object.defineProperty(this, "loaders", {
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true,
7
+ value: new Map()
8
+ });
9
+ }
10
+ register(loader) {
11
+ for (const ext of loader.supportedExtensions) {
12
+ this.loaders.set(ext.toLowerCase(), loader);
13
+ }
14
+ }
15
+ getSupportedExtensions() {
16
+ return Array.from(this.loaders.keys());
17
+ }
18
+ async parse(buffer, filename) {
19
+ const ext = this.getExtension(filename);
20
+ const loader = this.loaders.get(ext);
21
+ if (!loader) {
22
+ throw new Error(`Unsupported file type: "${ext}". Supported types: ${this.getSupportedExtensions().join(', ')}`);
23
+ }
24
+ return loader.parse(buffer, filename);
25
+ }
26
+ getExtension(filename) {
27
+ const dotIndex = filename.lastIndexOf('.');
28
+ if (dotIndex === -1)
29
+ throw new Error(`File has no extension: "${filename}"`);
30
+ return filename.slice(dotIndex).toLowerCase();
31
+ }
32
+ }
@@ -0,0 +1,4 @@
1
+ export interface ParserLoader {
2
+ supportedExtensions: string[];
3
+ parse(buffer: Buffer, filename: string): Promise<string>;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { ParserLoader } from './types.js';
2
+ export declare class XlsxLoader implements ParserLoader {
3
+ supportedExtensions: string[];
4
+ parse(buffer: Buffer, _filename: string): Promise<string>;
5
+ }
@@ -0,0 +1,34 @@
1
+ export class XlsxLoader {
2
+ constructor() {
3
+ Object.defineProperty(this, "supportedExtensions", {
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true,
7
+ value: ['.xlsx', '.xls']
8
+ });
9
+ }
10
+ async parse(buffer, _filename) {
11
+ const XLSX = await import('xlsx');
12
+ const workbook = XLSX.read(buffer, { type: 'buffer' });
13
+ const parts = [];
14
+ for (const sheetName of workbook.SheetNames) {
15
+ const sheet = workbook.Sheets[sheetName];
16
+ const csv = XLSX.utils.sheet_to_csv(sheet);
17
+ // 转 CSV 为 markdown table
18
+ const mdTable = csvToMarkdownTable(csv);
19
+ parts.push(`## ${sheetName}\n\n${mdTable}`);
20
+ }
21
+ return parts.join('\n\n');
22
+ }
23
+ }
24
+ function csvToMarkdownTable(csv) {
25
+ const lines = csv.split('\n').filter(line => line.length > 0);
26
+ if (lines.length === 0)
27
+ return '';
28
+ const rows = lines.map(line => line.split(','));
29
+ // Header row
30
+ const header = `| ${rows[0].join(' | ')} |`;
31
+ const separator = `| ${rows[0].map(() => '---').join(' | ')} |`;
32
+ const body = rows.slice(1).map(row => `| ${row.join(' | ')} |`).join('\n');
33
+ return [header, separator, body].join('\n');
34
+ }
@@ -39,15 +39,16 @@ jest.mock('@utils/db', () => {
39
39
  CREATE TABLE IF NOT EXISTS providers (
40
40
  id INTEGER PRIMARY KEY AUTOINCREMENT,
41
41
  name TEXT UNIQUE NOT NULL,
42
- base_url TEXT NOT NULL,
43
- api_key TEXT NOT NULL,
44
- model TEXT NOT NULL,
42
+ base_url TEXT,
43
+ api_key TEXT,
44
+ model TEXT,
45
45
  haiku_model TEXT,
46
46
  sonnet_model TEXT,
47
47
  opus_model TEXT,
48
48
  subagent_model TEXT,
49
49
  provider TEXT NOT NULL,
50
50
  is_default INTEGER NOT NULL DEFAULT 0,
51
+ is_openai_compatible INTEGER NOT NULL DEFAULT 0,
51
52
  created_at TEXT DEFAULT CURRENT_TIMESTAMP,
52
53
  updated_at TEXT DEFAULT CURRENT_TIMESTAMP
53
54
  )
@@ -66,7 +66,7 @@ describe('resolveProxyTarget', () => {
66
66
  beforeEach(() => {
67
67
  jest.clearAllMocks();
68
68
  db = new Database(':memory:');
69
- db.exec(`CREATE TABLE providers (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL, base_url TEXT, api_key TEXT, model TEXT, haiku_model TEXT, sonnet_model TEXT, opus_model TEXT, subagent_model TEXT, provider TEXT NOT NULL, is_default INTEGER NOT NULL DEFAULT 0, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP)`);
69
+ db.exec(`CREATE TABLE providers (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL, base_url TEXT, api_key TEXT, model TEXT, haiku_model TEXT, sonnet_model TEXT, opus_model TEXT, subagent_model TEXT, provider TEXT NOT NULL, is_default INTEGER NOT NULL DEFAULT 0, is_openai_compatible INTEGER NOT NULL DEFAULT 0, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP)`);
70
70
  getDatabase.mockReturnValue(db);
71
71
  });
72
72
  afterEach(() => {
@@ -92,4 +92,14 @@ describe('resolveProxyTarget', () => {
92
92
  expect(result.targetPath).toBe('/apps/anthropic');
93
93
  expect(result.apiKey).toBe('config-key');
94
94
  });
95
+ test('returns is_openai_compatible from active provider', () => {
96
+ db.prepare('INSERT INTO providers (name, base_url, api_key, model, provider, is_default, is_openai_compatible) VALUES (?, ?, ?, ?, ?, ?, ?)').run('openai-provider', 'https://api.openai.com/v1', 'openai-key', 'gpt-4', 'openai', 1, 1);
97
+ const result = resolveProxyTarget(config);
98
+ expect(result.is_openai_compatible).toBe(true);
99
+ });
100
+ test('returns is_openai_compatible as false when not set', () => {
101
+ db.prepare('INSERT INTO providers (name, base_url, api_key, model, provider, is_default, is_openai_compatible) VALUES (?, ?, ?, ?, ?, ?, ?)').run('claude-provider', 'https://provider.example.com/v1', 'provider-key', 'test-model', 'anthropic', 1, 0);
102
+ const result = resolveProxyTarget(config);
103
+ expect(result.is_openai_compatible).toBe(false);
104
+ });
95
105
  });
@@ -0,0 +1,3 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ import { ProxyConfig } from '../types/config.js';
3
+ export declare function setupChatRoute(fastify: FastifyInstance, proxyConfig: ProxyConfig): Promise<void>;