agentdog 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +244 -0
  3. package/dist/adapters/adapter-factory.d.ts +21 -0
  4. package/dist/adapters/adapter-factory.d.ts.map +1 -0
  5. package/dist/adapters/adapter-factory.js +157 -0
  6. package/dist/adapters/adapter-factory.js.map +1 -0
  7. package/dist/adapters/http-sse-adapter.d.ts +49 -0
  8. package/dist/adapters/http-sse-adapter.d.ts.map +1 -0
  9. package/dist/adapters/http-sse-adapter.js +485 -0
  10. package/dist/adapters/http-sse-adapter.js.map +1 -0
  11. package/dist/adapters/stdio-adapter.d.ts +69 -0
  12. package/dist/adapters/stdio-adapter.d.ts.map +1 -0
  13. package/dist/adapters/stdio-adapter.js +664 -0
  14. package/dist/adapters/stdio-adapter.js.map +1 -0
  15. package/dist/adapters/streamable-http-adapter.d.ts +38 -0
  16. package/dist/adapters/streamable-http-adapter.d.ts.map +1 -0
  17. package/dist/adapters/streamable-http-adapter.js +321 -0
  18. package/dist/adapters/streamable-http-adapter.js.map +1 -0
  19. package/dist/ai-gateway/anthropic-errors.d.ts +4 -0
  20. package/dist/ai-gateway/anthropic-errors.d.ts.map +1 -0
  21. package/dist/ai-gateway/anthropic-errors.js +17 -0
  22. package/dist/ai-gateway/anthropic-errors.js.map +1 -0
  23. package/dist/ai-gateway/auth.d.ts +3 -0
  24. package/dist/ai-gateway/auth.d.ts.map +1 -0
  25. package/dist/ai-gateway/auth.js +14 -0
  26. package/dist/ai-gateway/auth.js.map +1 -0
  27. package/dist/ai-gateway/auth.test.d.ts +2 -0
  28. package/dist/ai-gateway/auth.test.d.ts.map +1 -0
  29. package/dist/ai-gateway/auth.test.js +57 -0
  30. package/dist/ai-gateway/auth.test.js.map +1 -0
  31. package/dist/ai-gateway/count-tokens.d.ts +5 -0
  32. package/dist/ai-gateway/count-tokens.d.ts.map +1 -0
  33. package/dist/ai-gateway/count-tokens.js +37 -0
  34. package/dist/ai-gateway/count-tokens.js.map +1 -0
  35. package/dist/ai-gateway/count-tokens.test.d.ts +2 -0
  36. package/dist/ai-gateway/count-tokens.test.d.ts.map +1 -0
  37. package/dist/ai-gateway/count-tokens.test.js +19 -0
  38. package/dist/ai-gateway/count-tokens.test.js.map +1 -0
  39. package/dist/ai-gateway/dialects.d.ts +4 -0
  40. package/dist/ai-gateway/dialects.d.ts.map +1 -0
  41. package/dist/ai-gateway/dialects.js +15 -0
  42. package/dist/ai-gateway/dialects.js.map +1 -0
  43. package/dist/ai-gateway/gateway-server.d.ts +15 -0
  44. package/dist/ai-gateway/gateway-server.d.ts.map +1 -0
  45. package/dist/ai-gateway/gateway-server.js +121 -0
  46. package/dist/ai-gateway/gateway-server.js.map +1 -0
  47. package/dist/ai-gateway/integration.test.d.ts +2 -0
  48. package/dist/ai-gateway/integration.test.d.ts.map +1 -0
  49. package/dist/ai-gateway/integration.test.js +205 -0
  50. package/dist/ai-gateway/integration.test.js.map +1 -0
  51. package/dist/ai-gateway/ir/anthropic-in.d.ts +3 -0
  52. package/dist/ai-gateway/ir/anthropic-in.d.ts.map +1 -0
  53. package/dist/ai-gateway/ir/anthropic-in.js +121 -0
  54. package/dist/ai-gateway/ir/anthropic-in.js.map +1 -0
  55. package/dist/ai-gateway/ir/anthropic-in.test.d.ts +2 -0
  56. package/dist/ai-gateway/ir/anthropic-in.test.d.ts.map +1 -0
  57. package/dist/ai-gateway/ir/anthropic-in.test.js +93 -0
  58. package/dist/ai-gateway/ir/anthropic-in.test.js.map +1 -0
  59. package/dist/ai-gateway/ir/anthropic-sse.d.ts +22 -0
  60. package/dist/ai-gateway/ir/anthropic-sse.d.ts.map +1 -0
  61. package/dist/ai-gateway/ir/anthropic-sse.js +200 -0
  62. package/dist/ai-gateway/ir/anthropic-sse.js.map +1 -0
  63. package/dist/ai-gateway/ir/anthropic-sse.test.d.ts +2 -0
  64. package/dist/ai-gateway/ir/anthropic-sse.test.d.ts.map +1 -0
  65. package/dist/ai-gateway/ir/anthropic-sse.test.js +101 -0
  66. package/dist/ai-gateway/ir/anthropic-sse.test.js.map +1 -0
  67. package/dist/ai-gateway/ir/gemini-out.d.ts +20 -0
  68. package/dist/ai-gateway/ir/gemini-out.d.ts.map +1 -0
  69. package/dist/ai-gateway/ir/gemini-out.js +218 -0
  70. package/dist/ai-gateway/ir/gemini-out.js.map +1 -0
  71. package/dist/ai-gateway/ir/gemini-out.test.d.ts +2 -0
  72. package/dist/ai-gateway/ir/gemini-out.test.d.ts.map +1 -0
  73. package/dist/ai-gateway/ir/gemini-out.test.js +125 -0
  74. package/dist/ai-gateway/ir/gemini-out.test.js.map +1 -0
  75. package/dist/ai-gateway/ir/openai-out.d.ts +17 -0
  76. package/dist/ai-gateway/ir/openai-out.d.ts.map +1 -0
  77. package/dist/ai-gateway/ir/openai-out.js +226 -0
  78. package/dist/ai-gateway/ir/openai-out.js.map +1 -0
  79. package/dist/ai-gateway/ir/openai-out.test.d.ts +2 -0
  80. package/dist/ai-gateway/ir/openai-out.test.d.ts.map +1 -0
  81. package/dist/ai-gateway/ir/openai-out.test.js +144 -0
  82. package/dist/ai-gateway/ir/openai-out.test.js.map +1 -0
  83. package/dist/ai-gateway/ir/types.d.ts +77 -0
  84. package/dist/ai-gateway/ir/types.d.ts.map +1 -0
  85. package/dist/ai-gateway/ir/types.js +4 -0
  86. package/dist/ai-gateway/ir/types.js.map +1 -0
  87. package/dist/ai-gateway/ir-channel.d.ts +15 -0
  88. package/dist/ai-gateway/ir-channel.d.ts.map +1 -0
  89. package/dist/ai-gateway/ir-channel.js +120 -0
  90. package/dist/ai-gateway/ir-channel.js.map +1 -0
  91. package/dist/ai-gateway/model-router.d.ts +11 -0
  92. package/dist/ai-gateway/model-router.d.ts.map +1 -0
  93. package/dist/ai-gateway/model-router.js +27 -0
  94. package/dist/ai-gateway/model-router.js.map +1 -0
  95. package/dist/ai-gateway/model-router.test.d.ts +2 -0
  96. package/dist/ai-gateway/model-router.test.d.ts.map +1 -0
  97. package/dist/ai-gateway/model-router.test.js +43 -0
  98. package/dist/ai-gateway/model-router.test.js.map +1 -0
  99. package/dist/ai-gateway/passthrough.d.ts +9 -0
  100. package/dist/ai-gateway/passthrough.d.ts.map +1 -0
  101. package/dist/ai-gateway/passthrough.js +81 -0
  102. package/dist/ai-gateway/passthrough.js.map +1 -0
  103. package/dist/ai-gateway/passthrough.test.d.ts +2 -0
  104. package/dist/ai-gateway/passthrough.test.d.ts.map +1 -0
  105. package/dist/ai-gateway/passthrough.test.js +108 -0
  106. package/dist/ai-gateway/passthrough.test.js.map +1 -0
  107. package/dist/ai-gateway/upstream/model-lister.d.ts +13 -0
  108. package/dist/ai-gateway/upstream/model-lister.d.ts.map +1 -0
  109. package/dist/ai-gateway/upstream/model-lister.js +61 -0
  110. package/dist/ai-gateway/upstream/model-lister.js.map +1 -0
  111. package/dist/ai-gateway/upstream/provider-client.d.ts +20 -0
  112. package/dist/ai-gateway/upstream/provider-client.d.ts.map +1 -0
  113. package/dist/ai-gateway/upstream/provider-client.js +76 -0
  114. package/dist/ai-gateway/upstream/provider-client.js.map +1 -0
  115. package/dist/ai-gateway/upstream/provider-client.test.d.ts +2 -0
  116. package/dist/ai-gateway/upstream/provider-client.test.d.ts.map +1 -0
  117. package/dist/ai-gateway/upstream/provider-client.test.js +69 -0
  118. package/dist/ai-gateway/upstream/provider-client.test.js.map +1 -0
  119. package/dist/cli/cli-main.d.ts +7 -0
  120. package/dist/cli/cli-main.d.ts.map +1 -0
  121. package/dist/cli/cli-main.js +116 -0
  122. package/dist/cli/cli-main.js.map +1 -0
  123. package/dist/cli/cli-router.d.ts +20 -0
  124. package/dist/cli/cli-router.d.ts.map +1 -0
  125. package/dist/cli/cli-router.js +271 -0
  126. package/dist/cli/cli-router.js.map +1 -0
  127. package/dist/cli/cli-utils.d.ts +30 -0
  128. package/dist/cli/cli-utils.d.ts.map +1 -0
  129. package/dist/cli/cli-utils.js +219 -0
  130. package/dist/cli/cli-utils.js.map +1 -0
  131. package/dist/cli/commands/audit-commands.d.ts +30 -0
  132. package/dist/cli/commands/audit-commands.d.ts.map +1 -0
  133. package/dist/cli/commands/audit-commands.js +417 -0
  134. package/dist/cli/commands/audit-commands.js.map +1 -0
  135. package/dist/cli/commands/autostart-command.d.ts +21 -0
  136. package/dist/cli/commands/autostart-command.d.ts.map +1 -0
  137. package/dist/cli/commands/autostart-command.js +243 -0
  138. package/dist/cli/commands/autostart-command.js.map +1 -0
  139. package/dist/cli/commands/autostart-command.test.d.ts +2 -0
  140. package/dist/cli/commands/autostart-command.test.d.ts.map +1 -0
  141. package/dist/cli/commands/autostart-command.test.js +35 -0
  142. package/dist/cli/commands/autostart-command.test.js.map +1 -0
  143. package/dist/cli/commands/config-commands.d.ts +30 -0
  144. package/dist/cli/commands/config-commands.d.ts.map +1 -0
  145. package/dist/cli/commands/config-commands.js +1013 -0
  146. package/dist/cli/commands/config-commands.js.map +1 -0
  147. package/dist/cli/commands/daemon-commands.d.ts +76 -0
  148. package/dist/cli/commands/daemon-commands.d.ts.map +1 -0
  149. package/dist/cli/commands/daemon-commands.js +451 -0
  150. package/dist/cli/commands/daemon-commands.js.map +1 -0
  151. package/dist/cli/commands/detect-commands.d.ts +17 -0
  152. package/dist/cli/commands/detect-commands.d.ts.map +1 -0
  153. package/dist/cli/commands/detect-commands.js +293 -0
  154. package/dist/cli/commands/detect-commands.js.map +1 -0
  155. package/dist/cli/commands/diagnose-commands.d.ts +19 -0
  156. package/dist/cli/commands/diagnose-commands.d.ts.map +1 -0
  157. package/dist/cli/commands/diagnose-commands.js +326 -0
  158. package/dist/cli/commands/diagnose-commands.js.map +1 -0
  159. package/dist/cli/commands/optimize-commands.d.ts +14 -0
  160. package/dist/cli/commands/optimize-commands.d.ts.map +1 -0
  161. package/dist/cli/commands/optimize-commands.js +189 -0
  162. package/dist/cli/commands/optimize-commands.js.map +1 -0
  163. package/dist/cli/commands/proxy-command.d.ts +27 -0
  164. package/dist/cli/commands/proxy-command.d.ts.map +1 -0
  165. package/dist/cli/commands/proxy-command.js +212 -0
  166. package/dist/cli/commands/proxy-command.js.map +1 -0
  167. package/dist/cli/commands/start-command.d.ts +22 -0
  168. package/dist/cli/commands/start-command.d.ts.map +1 -0
  169. package/dist/cli/commands/start-command.js +275 -0
  170. package/dist/cli/commands/start-command.js.map +1 -0
  171. package/dist/config/config-manager.d.ts +125 -0
  172. package/dist/config/config-manager.d.ts.map +1 -0
  173. package/dist/config/config-manager.js +569 -0
  174. package/dist/config/config-manager.js.map +1 -0
  175. package/dist/config/config-manager.test.d.ts +2 -0
  176. package/dist/config/config-manager.test.d.ts.map +1 -0
  177. package/dist/config/config-manager.test.js +209 -0
  178. package/dist/config/config-manager.test.js.map +1 -0
  179. package/dist/core/auto-config-generator.d.ts +55 -0
  180. package/dist/core/auto-config-generator.d.ts.map +1 -0
  181. package/dist/core/auto-config-generator.js +278 -0
  182. package/dist/core/auto-config-generator.js.map +1 -0
  183. package/dist/core/mcpdog-server.d.ts +49 -0
  184. package/dist/core/mcpdog-server.d.ts.map +1 -0
  185. package/dist/core/mcpdog-server.js +552 -0
  186. package/dist/core/mcpdog-server.js.map +1 -0
  187. package/dist/core/protocol-detector.d.ts +56 -0
  188. package/dist/core/protocol-detector.d.ts.map +1 -0
  189. package/dist/core/protocol-detector.js +365 -0
  190. package/dist/core/protocol-detector.js.map +1 -0
  191. package/dist/daemon/daemon-client.d.ts +34 -0
  192. package/dist/daemon/daemon-client.d.ts.map +1 -0
  193. package/dist/daemon/daemon-client.js +130 -0
  194. package/dist/daemon/daemon-client.js.map +1 -0
  195. package/dist/daemon/daemon-client.test.d.ts +2 -0
  196. package/dist/daemon/daemon-client.test.d.ts.map +1 -0
  197. package/dist/daemon/daemon-client.test.js +77 -0
  198. package/dist/daemon/daemon-client.test.js.map +1 -0
  199. package/dist/daemon/daemon-info.d.ts +7 -0
  200. package/dist/daemon/daemon-info.d.ts.map +1 -0
  201. package/dist/daemon/daemon-info.js +34 -0
  202. package/dist/daemon/daemon-info.js.map +1 -0
  203. package/dist/daemon/daemon-info.test.d.ts +2 -0
  204. package/dist/daemon/daemon-info.test.d.ts.map +1 -0
  205. package/dist/daemon/daemon-info.test.js +57 -0
  206. package/dist/daemon/daemon-info.test.js.map +1 -0
  207. package/dist/daemon/daemon-web-server.ai.test.d.ts +2 -0
  208. package/dist/daemon/daemon-web-server.ai.test.d.ts.map +1 -0
  209. package/dist/daemon/daemon-web-server.ai.test.js +119 -0
  210. package/dist/daemon/daemon-web-server.ai.test.js.map +1 -0
  211. package/dist/daemon/daemon-web-server.d.ts +59 -0
  212. package/dist/daemon/daemon-web-server.d.ts.map +1 -0
  213. package/dist/daemon/daemon-web-server.js +1236 -0
  214. package/dist/daemon/daemon-web-server.js.map +1 -0
  215. package/dist/daemon/daemon-web-server.test.d.ts +2 -0
  216. package/dist/daemon/daemon-web-server.test.d.ts.map +1 -0
  217. package/dist/daemon/daemon-web-server.test.js +93 -0
  218. package/dist/daemon/daemon-web-server.test.js.map +1 -0
  219. package/dist/daemon/mcpdog-daemon.d.ts +42 -0
  220. package/dist/daemon/mcpdog-daemon.d.ts.map +1 -0
  221. package/dist/daemon/mcpdog-daemon.js +302 -0
  222. package/dist/daemon/mcpdog-daemon.js.map +1 -0
  223. package/dist/daemon/stdio-proxy.d.ts +17 -0
  224. package/dist/daemon/stdio-proxy.d.ts.map +1 -0
  225. package/dist/daemon/stdio-proxy.js +143 -0
  226. package/dist/daemon/stdio-proxy.js.map +1 -0
  227. package/dist/index.d.ts +14 -0
  228. package/dist/index.d.ts.map +1 -0
  229. package/dist/index.js +198 -0
  230. package/dist/index.js.map +1 -0
  231. package/dist/intent-analyzer.d.ts +27 -0
  232. package/dist/intent-analyzer.d.ts.map +1 -0
  233. package/dist/intent-analyzer.js +140 -0
  234. package/dist/intent-analyzer.js.map +1 -0
  235. package/dist/logging/server-log-manager.d.ts +75 -0
  236. package/dist/logging/server-log-manager.d.ts.map +1 -0
  237. package/dist/logging/server-log-manager.js +185 -0
  238. package/dist/logging/server-log-manager.js.map +1 -0
  239. package/dist/mcp-registry.d.ts +35 -0
  240. package/dist/mcp-registry.d.ts.map +1 -0
  241. package/dist/mcp-registry.js +166 -0
  242. package/dist/mcp-registry.js.map +1 -0
  243. package/dist/middleware/auth.d.ts +5 -0
  244. package/dist/middleware/auth.d.ts.map +1 -0
  245. package/dist/middleware/auth.js +81 -0
  246. package/dist/middleware/auth.js.map +1 -0
  247. package/dist/mock-tool-database.d.ts +41 -0
  248. package/dist/mock-tool-database.d.ts.map +1 -0
  249. package/dist/mock-tool-database.js +461 -0
  250. package/dist/mock-tool-database.js.map +1 -0
  251. package/dist/proxy-server-manager.d.ts +11 -0
  252. package/dist/proxy-server-manager.d.ts.map +1 -0
  253. package/dist/proxy-server-manager.js +144 -0
  254. package/dist/proxy-server-manager.js.map +1 -0
  255. package/dist/router/tool-router.d.ts +61 -0
  256. package/dist/router/tool-router.d.ts.map +1 -0
  257. package/dist/router/tool-router.js +539 -0
  258. package/dist/router/tool-router.js.map +1 -0
  259. package/dist/router/tool-router.test.d.ts +2 -0
  260. package/dist/router/tool-router.test.d.ts.map +1 -0
  261. package/dist/router/tool-router.test.js +113 -0
  262. package/dist/router/tool-router.test.js.map +1 -0
  263. package/dist/streamable-http-server.d.ts +27 -0
  264. package/dist/streamable-http-server.d.ts.map +1 -0
  265. package/dist/streamable-http-server.js +302 -0
  266. package/dist/streamable-http-server.js.map +1 -0
  267. package/dist/tool-finder.d.ts +21 -0
  268. package/dist/tool-finder.d.ts.map +1 -0
  269. package/dist/tool-finder.js +86 -0
  270. package/dist/tool-finder.js.map +1 -0
  271. package/dist/tool-recommender.d.ts +23 -0
  272. package/dist/tool-recommender.d.ts.map +1 -0
  273. package/dist/tool-recommender.js +200 -0
  274. package/dist/tool-recommender.js.map +1 -0
  275. package/dist/types/index.d.ts +145 -0
  276. package/dist/types/index.d.ts.map +1 -0
  277. package/dist/types/index.js +2 -0
  278. package/dist/types/index.js.map +1 -0
  279. package/dist/utils/server-name-validator.d.ts +47 -0
  280. package/dist/utils/server-name-validator.d.ts.map +1 -0
  281. package/dist/utils/server-name-validator.js +156 -0
  282. package/dist/utils/server-name-validator.js.map +1 -0
  283. package/dist/web/web-server.d.ts +44 -0
  284. package/dist/web/web-server.d.ts.map +1 -0
  285. package/dist/web/web-server.js +500 -0
  286. package/dist/web/web-server.js.map +1 -0
  287. package/package.json +68 -0
  288. package/web/dist/assets/index-DMVhVtNU.css +1 -0
  289. package/web/dist/assets/index-VMXIgcOH.js +92 -0
  290. package/web/dist/assets/index-VMXIgcOH.js.map +1 -0
  291. package/web/dist/index.html +14 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 MCPDog 原始作者
4
+ Copyright (c) 2026 SIE-Operations-and-Maintenance-Team(本仓库维护方)
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,244 @@
1
+ # MCPDog 🐕 — MCP 服务器统一管理网关(团队维护版)
2
+
3
+ > **一次配置,统一管理所有 MCP 服务器**
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
6
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org/)
7
+
8
+ MCPDog(npm 包名 `agentdog`)是一个 MCP(Model Context Protocol)服务器统一管理网关:把多个 MCP 子服务器聚合成一个统一入口,供 Claude Desktop、Cursor、Claude Code 等 MCP 客户端使用。由 SIE 运维团队基于上游开源项目维护,包含 Windows 平台兼容修复、Web 界面汉化、daemon 常驻模式与内置 AI API 网关等增强。
9
+
10
+ ## 🏗️ 架构概览
11
+
12
+ ```
13
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
14
+ │ MCP 客户端: │ │ MCP 客户端: │ │ Claude Code │
15
+ │ (Claude) │ │ (Cursor) │ │ (AI 网关接入) │
16
+ └─────────┬───────┘ └─────────┬───────┘ └─────────┬───────┘
17
+ │ │ │
18
+ └──────────────────────┼──────────────────────┘
19
+
20
+ ┌─────────────▼─────────────┐
21
+ │ MCPDog │
22
+ │ (统一入口 + 智能路由 │
23
+ │ + AI API 网关) │
24
+ └──┬──────────────┬─────────┘
25
+ │ │
26
+ ┌────────────┼──────────────┐│
27
+ │ │ ││
28
+ ┌─────▼─────┐ ┌────▼──────┐ ┌────▼▼────────┐
29
+ │ db-tools │ │ itsm-tools│ │ AI 供应商 │
30
+ └───────────┘ └───────────┘ │ (openai兼容/ │
31
+ │ anthropic/ │
32
+ │ gemini) │
33
+ └──────────────┘
34
+ ```
35
+
36
+ ### 核心价值
37
+
38
+ - **🔗 一次配置**:客户端只连 MCPDog 一个入口,不用逐个配置子服务器
39
+ - **🔄 统一界面**:所有子服务器的工具合并成一张清单暴露给客户端
40
+ - **⚡ 智能路由**:MCPDog 自动把工具调用路由到对应的子服务器
41
+ - **🌐 多传输协议**:子服务器支持 stdio / HTTP SSE / Streamable HTTP 三种接入方式
42
+ - **📊 集中管理**:Web 管理界面可视化增删改查服务器、启停、工具开关
43
+ - **🤖 AI API 网关**:内置 Anthropic Messages 兼容端点,Claude Code 统一接入任意 AI 供应商
44
+ - **🛡️ 故障隔离**:单个子服务器挂掉不影响其他子服务器和整体入口
45
+ - **🪟 Windows 兼容**:cross-spawn 启动 `.cmd` 批处理、子进程无窗口静默启动
46
+
47
+ ## 🚀 快速开始
48
+
49
+ 前置要求:Node.js ≥ 18。
50
+
51
+ ```bash
52
+ npx agentdog@latest daemon start
53
+ ```
54
+
55
+ 启动后浏览器打开 `http://localhost:61125` 即可看到 Web 管理界面,在界面里添加并管理子服务器。
56
+
57
+ ### 客户端接入(以 Claude Code 为例)
58
+
59
+ 在 MCP 客户端配置中加入:
60
+
61
+ ```json
62
+ {
63
+ "mcpServers": {
64
+ "agentdog": {
65
+ "command": "npx",
66
+ "args": ["agentdog@latest"]
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ > 客户端连的是 MCPDog 聚合入口(stdio proxy),前提是 daemon 已启动并配好子服务器;daemon 未运行时 proxy 会自动拉起一次。
73
+
74
+ ## 📦 部署方式
75
+
76
+ MCPDog 以 daemon 常驻进程形态部署,同一台机器支持以下安装方式,按使用时长选择:
77
+
78
+ ### 方式一:npx 直接运行(临时体验)
79
+
80
+ 不落盘安装,随时用最新版:
81
+
82
+ ```bash
83
+ npx agentdog@latest daemon start
84
+ ```
85
+
86
+ ### 方式二:全局安装(推荐长期使用)
87
+
88
+ ```bash
89
+ npm i -g agentdog
90
+ agentdog daemon start
91
+ ```
92
+
93
+ 全局安装后 CLI 入口路径稳定,注册开机自启不会因 npx 缓存清理而失效(见下文自启说明)。
94
+
95
+ ### 方式三:Docker
96
+
97
+ 仓库提供多阶段构建(`node:20-alpine`,非 root 用户运行),适合服务器部署:
98
+
99
+ ```bash
100
+ docker build -t agentdog .
101
+ docker run -d -p 61125:61125 agentdog
102
+ ```
103
+
104
+ > 配置固定存放在用户主目录 `~/.mcpdog/mcpdog.config.json`。镜像以非 root 用户(appuser)运行,容器部署时把该用户的 `~/.mcpdog` 目录挂载为卷即可持久化配置(如 `-v <宿主目录>:/home/appuser/.mcpdog`)。
105
+
106
+ ### 端口与网络约定
107
+
108
+ - **单一端口**:daemon IPC 与 Web 管理界面合并为同一个 TCP 端口(默认 **61125**),CLI `status`/`reload` 与客户端 proxy 挂载全部走该端口的 HTTP 接口(`POST /api/mcp`)。旧参数 `--daemon-port` 已删除,传入会直接报错。
109
+ - **端口持久化**:`daemon start --web-port <端口>` 显式指定的端口保存到配置 `web.port`,之后启动免传参;未指定时依次取保存值、默认 61125,端口被占自动探测相邻可用端口(探测漂移值不回写配置)。
110
+ - **默认仅本机访问**:Web 界面默认监听 `localhost`。需要远程访问时必须同时满足两个条件,缺一拒绝启动:
111
+ 1. 配置显式设置 `web.host: "0.0.0.0"`;
112
+ 2. 设置环境变量 `MCPDOG_AUTH_TOKEN`(访问令牌)。
113
+
114
+ ### 🔑 daemon 开机自启
115
+
116
+ ```bash
117
+ agentdog daemon autostart --enable # 注册开机自启(当前用户)
118
+ agentdog daemon autostart # 查看自启状态
119
+ agentdog daemon autostart --disable # 移除开机自启
120
+ ```
121
+
122
+ 各平台实现:
123
+
124
+ | 平台 | 机制 | 说明 |
125
+ |---|---|---|
126
+ | Windows | HKCU Run 注册表键 + `~/.mcpdog` 下隐藏 VBS 启动器 | 登录时无窗口静默启动 daemon |
127
+ | macOS | LaunchAgent | 用户级 launchd 代理 |
128
+ | Linux | systemd user unit | 需 `systemd --user` 可用 |
129
+
130
+ 注意事项:
131
+
132
+ - 注册时记录的是当前 CLI 入口(node 与 cli-main.js)**解析符号链接后的绝对路径**。若入口位于 npx 缓存内,缓存清理/升级后自启会失效——长期使用建议先 `npm i -g agentdog` 全局安装再注册(注册时会检测到 npx 缓存入口并给出警告)。
133
+ - 开机自启后,MCP 客户端 npx 挂载照常工作:proxy 检测到 daemon 已运行会直接连接,无冷启动等待。
134
+ - daemon 升级:直接重跑一次 `daemon start`,检测到已有实例版本不同会自动停止旧实例并以新版本接管;版本相同则拒绝重复启动。
135
+
136
+ ## 📖 常用命令
137
+
138
+ ```bash
139
+ agentdog status # 查看整体状态
140
+ agentdog daemon start # 启动 daemon + Web 界面(默认 61125)
141
+ agentdog daemon stop # 停止 daemon
142
+ agentdog daemon restart # 重启 daemon
143
+ agentdog daemon logs # 查看运行日志
144
+ agentdog config list # 列出已配置的服务器
145
+ agentdog config add my-server "npx @some/mcp-server@latest" --auto-detect
146
+ # 添加子服务器(自动识别传输协议)
147
+ agentdog config remove old-server # 移除子服务器
148
+ agentdog diagnose --health-check # 健康检查
149
+ agentdog diagnose --fix # 自动修复常见问题
150
+ ```
151
+
152
+ > 以下示例用 `npx agentdog@latest <命令>` 可达到同样效果,无需全局安装。
153
+
154
+ ## 🖥️ Web 管理界面
155
+
156
+ - 服务器列表:连接状态、工具数一目了然,支持启用/禁用、编辑、删除、重试连接
157
+ - 工具管理:按服务器查看全部工具,逐个开关(白名单/黑名单两种模式)
158
+ - 服务器日志:实时查看子服务器的 stdout/stderr
159
+ - 客户端配置:一键生成 Claude Desktop / Cursor 的接入配置
160
+ - AI 供应商:管理 AI API 网关的供应商与接入配置(见下节)
161
+
162
+ ## 🤖 AI API 网关
163
+
164
+ daemon 内置 AI API 网关:对外提供 Anthropic Messages 兼容端点,Claude Code 统一接入任意供应商(openai 兼容 / anthropic / gemini)。
165
+
166
+ ```bash
167
+ agentdog daemon start --gateway-port 62125 # 启用并持久化网关端口
168
+ ```
169
+
170
+ 在 Web 界面"AI 供应商"视图配置供应商(slug、方言、Base URL、API Key),然后:
171
+
172
+ ```bash
173
+ export ANTHROPIC_BASE_URL=http://127.0.0.1:62125
174
+ export ANTHROPIC_API_KEY=<网关 apiKey,界面可复制>
175
+ export ANTHROPIC_MODEL=deepseek:deepseek-chat # 格式:供应商slug:模型Id
176
+ export ANTHROPIC_SMALL_FAST_MODEL=deepseek:deepseek-chat
177
+ ```
178
+
179
+ - **寻址**:模型名按第一个 `:` 分割,前段命中供应商 slug,后段为上游真实模型名原样透传;未命中返回 400 并列出可用 slug。
180
+ - **anthropic 上游直通**:请求字节级转发,`cache_control`、`thinking`、prompt cache 计费字段零损耗;`count_tokens` 直通真值(openai/gemini 上游本地估算)。
181
+ - **openai / gemini 转换**:工具调用、图片、system、tool_choice、采样参数经统一 IR 双向映射;流式 SSE 双向转换(延迟提交、ping 保活、断连 abort 链),上游错误状态码透传(message 保留原文,便于诊断中转站差异)。
182
+ - **Provider 管理面**:`/api/ai-gateway/*` 与 `/api/ai-providers` REST 接口(CRUD / 连通测试 / 模型拉取),apiKey 脱敏返回;对外 key 以 `ad-sk-` 前缀在首次启用时自动生成。配置文件新增可选段 `aiGateway` / `providers`,老配置无此段 = 网关关闭。
183
+ - **已知限制**:gemini 同名函数多调用的 `tool_result` 配对存在歧义;openai 兼容端点(DeepSeek / OpenRouter / 中转站)各有出入,不做静默兼容。
184
+
185
+ ## 🧩 子服务器配置示例
186
+
187
+ 配置文件位于 `~/.mcpdog/mcpdog.config.json`,也可全部在 Web 界面操作:
188
+
189
+ ```json
190
+ {
191
+ "servers": {
192
+ "my-stdio-server": {
193
+ "name": "my-stdio-server",
194
+ "enabled": true,
195
+ "transport": "stdio",
196
+ "command": "npx",
197
+ "args": ["-y", "@some/mcp-server"],
198
+ "env": { "API_KEY": "xxx" }
199
+ },
200
+ "my-http-server": {
201
+ "name": "my-http-server",
202
+ "enabled": true,
203
+ "transport": "streamable-http",
204
+ "url": "http://127.0.0.1:61123/mcp"
205
+ }
206
+ }
207
+ }
208
+ ```
209
+
210
+ ### 工具冲突处理
211
+
212
+ 多个子服务器存在同名工具时,MCPDog 自动将工具重命名为 `服务器名-工具名`(如 `db-tools-db_query`),调用时先校验完整服务器前缀再剥离转发到原服务器,客户端无感知。
213
+
214
+ ## 🐛 常见问题
215
+
216
+ **服务器连不上,提示 `initialize timeout`**
217
+ Windows 平台下全局命令(npx/npm 等)是 `.cmd` 批处理脚本,本版本已通过 cross-spawn 修复该兼容问题(上游版本在 Windows 上会出现 stdio 子服务器全部连接超时)。
218
+
219
+ **传入 `--daemon-port` 报错**
220
+ IPC 与 Web 界面已合并为单一端口,该参数已删除。请改用 `--web-port`,或直接使用默认端口 61125。
221
+
222
+ **远程访问 Web 界面启动被拒绝**
223
+ 默认仅监听 localhost。远程访问必须同时显式配置 `web.host: "0.0.0.0"` 并设置 `MCPDOG_AUTH_TOKEN` 环境变量。
224
+
225
+ **查看运行日志**
226
+ ```bash
227
+ agentdog daemon logs
228
+ ```
229
+
230
+ **工具不可见 / 缺失**
231
+ ```bash
232
+ agentdog detect --all
233
+ agentdog config show my-server
234
+ ```
235
+
236
+ ## 🏢 关于本仓库
237
+
238
+ - 本仓库([Agent-Dog](https://github.com/lzm04521/Agent-Dog))从运维团队 [MCP-Dog](https://github.com/SIE-Operations-and-Maintenance-Team/mcpdog) 分支并持续增强
239
+ - npm 包名:`agentdog`(CLI 命令同名)
240
+ - 上游原始项目:MIT 协议开源,版权归原作者所有(详见 [LICENSE](./LICENSE) 声明)
241
+
242
+ ## 📄 许可证
243
+
244
+ MIT License — 详见 [LICENSE](./LICENSE)
@@ -0,0 +1,21 @@
1
+ import { MCPServerConfig, ServerAdapter } from '../types/index.js';
2
+ export declare class AdapterFactory {
3
+ private static sensitiveKeywords;
4
+ static createAdapter(name: string, config: MCPServerConfig): ServerAdapter;
5
+ static validateConfig(config: MCPServerConfig): string[];
6
+ /**
7
+ * Validate environment variable configuration
8
+ */
9
+ static validateEnvironmentVariables(env?: Record<string, string>): string[];
10
+ /**
11
+ * Check if environment variable name conforms to specification
12
+ */
13
+ static isValidEnvVarName(name: string): boolean;
14
+ /**
15
+ * Check for sensitive environment variables
16
+ */
17
+ static checkSensitiveEnvVar(key: string, value: string): string[];
18
+ static getSupportedTransports(): string[];
19
+ static getTransportRequirements(transport: string): string[];
20
+ }
21
+ //# sourceMappingURL=adapter-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-factory.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKnE,qBAAa,cAAc;IAEzB,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAI9B;IAEF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,aAAa;IAgB1E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE;IAuDxD;;OAEG;IACH,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;IA8C3E;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/C;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAgCjE,MAAM,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAIzC,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;CAa7D"}
@@ -0,0 +1,157 @@
1
+ import { StdioAdapter } from './stdio-adapter.js';
2
+ import { HttpSseAdapter } from './http-sse-adapter.js';
3
+ import { StreamableHttpAdapter } from './streamable-http-adapter.js';
4
+ export class AdapterFactory {
5
+ // List of sensitive environment variable keywords
6
+ static sensitiveKeywords = [
7
+ 'password', 'secret', 'key', 'token', 'auth', 'credential',
8
+ 'pass', 'pwd', 'private', 'sensitive', 'security', 'api_key',
9
+ 'access_token', 'refresh_token', 'jwt', 'session'
10
+ ];
11
+ static createAdapter(name, config) {
12
+ switch (config.transport) {
13
+ case 'stdio':
14
+ return new StdioAdapter(name, config);
15
+ case 'http-sse':
16
+ return new HttpSseAdapter(name, config);
17
+ case 'streamable-http':
18
+ return new StreamableHttpAdapter(name, config);
19
+ default:
20
+ throw new Error(`Unsupported transport type: ${config.transport} for ${name}`);
21
+ }
22
+ }
23
+ static validateConfig(config) {
24
+ const errors = [];
25
+ // General validation
26
+ if (!config.name) {
27
+ errors.push('Server name is required');
28
+ }
29
+ if (!config.transport) {
30
+ errors.push('Transport type is required');
31
+ }
32
+ // Transport type specific validation
33
+ switch (config.transport) {
34
+ case 'stdio':
35
+ if (!config.command) {
36
+ errors.push('Command is required for stdio transport');
37
+ }
38
+ // Validate environment variables (only needed for stdio transport)
39
+ const envErrors = this.validateEnvironmentVariables(config.env);
40
+ errors.push(...envErrors);
41
+ break;
42
+ case 'http-sse':
43
+ case 'streamable-http':
44
+ // Support both 'url' (preferred) and 'endpoint' (legacy) fields
45
+ const httpUrl = config.url || config.endpoint;
46
+ if (!httpUrl) {
47
+ errors.push(`URL or endpoint is required for ${config.transport} transport`);
48
+ }
49
+ // Validate URL format
50
+ if (httpUrl) {
51
+ try {
52
+ new URL(httpUrl);
53
+ }
54
+ catch {
55
+ errors.push(`Invalid URL: ${httpUrl}`);
56
+ }
57
+ }
58
+ break;
59
+ }
60
+ // Timeout config validation
61
+ if (config.timeout && config.timeout <= 0) {
62
+ errors.push('Timeout must be a positive number');
63
+ }
64
+ if (config.retries && config.retries < 0) {
65
+ errors.push('Retries must be a non-negative number');
66
+ }
67
+ return errors;
68
+ }
69
+ /**
70
+ * Validate environment variable configuration
71
+ */
72
+ static validateEnvironmentVariables(env) {
73
+ const errors = [];
74
+ if (!env) {
75
+ return errors;
76
+ }
77
+ for (const [key, value] of Object.entries(env)) {
78
+ // Validate environment variable name format
79
+ if (!this.isValidEnvVarName(key)) {
80
+ errors.push(`Invalid environment variable name: '${key}'. Names must start with a letter or underscore and contain only letters, numbers, and underscores.`);
81
+ }
82
+ // Validate environment variable value type
83
+ if (typeof value !== 'string') {
84
+ errors.push(`Environment variable '${key}' must have a string value, got ${typeof value}`);
85
+ }
86
+ // Check for empty values
87
+ if (key.trim() === '') {
88
+ errors.push('Environment variable names cannot be empty');
89
+ }
90
+ // Security check: warn about sensitive information (now only log warnings, do not block config)
91
+ const warnings = this.checkSensitiveEnvVar(key, value);
92
+ if (warnings.length > 0) {
93
+ // Output security warnings to console, but do not treat as validation errors
94
+ warnings.forEach(warning => {
95
+ console.warn(`[SECURITY WARNING] ${warning} for server configuration`);
96
+ });
97
+ }
98
+ // Check environment variable name length
99
+ if (key.length > 255) {
100
+ errors.push(`Environment variable name '${key}' is too long (max 255 characters)`);
101
+ }
102
+ // Check value length (avoid excessively large values)
103
+ if (value && value.length > 10000) {
104
+ errors.push(`Environment variable '${key}' value is too long (max 10000 characters)`);
105
+ }
106
+ }
107
+ return errors;
108
+ }
109
+ /**
110
+ * Check if environment variable name conforms to specification
111
+ */
112
+ static isValidEnvVarName(name) {
113
+ // Environment variable names should start with a letter or underscore, and contain only letters, numbers, and underscores
114
+ return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name);
115
+ }
116
+ /**
117
+ * Check for sensitive environment variables
118
+ */
119
+ static checkSensitiveEnvVar(key, value) {
120
+ const warnings = [];
121
+ const lowerKey = key.toLowerCase();
122
+ // Check if variable name contains sensitive keywords
123
+ const containsSensitiveKeyword = this.sensitiveKeywords.some(keyword => lowerKey.includes(keyword.toLowerCase()));
124
+ if (containsSensitiveKeyword) {
125
+ warnings.push(`Environment variable '${key}' appears to contain sensitive information`);
126
+ // Check if value might be plain text password/key
127
+ if (value && value.length > 0) {
128
+ // Check if it's an obvious test value
129
+ const testValues = ['test', 'demo', 'example', 'placeholder', 'your-key-here', 'replace-me'];
130
+ const isTestValue = testValues.some(test => value.toLowerCase().includes(test));
131
+ if (isTestValue) {
132
+ warnings.push(`Environment variable '${key}' contains test/placeholder value. Please use real credentials.`);
133
+ }
134
+ // Check if value is too short (may not be a real key)
135
+ if (value.length < 8) {
136
+ warnings.push(`Environment variable '${key}' value seems too short for a secure credential`);
137
+ }
138
+ }
139
+ }
140
+ return warnings;
141
+ }
142
+ static getSupportedTransports() {
143
+ return ['stdio', 'http-sse', 'streamable-http'];
144
+ }
145
+ static getTransportRequirements(transport) {
146
+ switch (transport) {
147
+ case 'stdio':
148
+ return ['command'];
149
+ case 'http-sse':
150
+ case 'streamable-http':
151
+ return ['endpoint'];
152
+ default:
153
+ return [];
154
+ }
155
+ }
156
+ }
157
+ //# sourceMappingURL=adapter-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-factory.js","sourceRoot":"","sources":["../../src/adapters/adapter-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { EventEmitter } from 'events';
2
+ import { MCPServerConfig, MCPTool, MCPRequest, MCPResponse, ServerAdapter } from '../types/index.js';
3
+ export declare class HttpSseAdapter extends EventEmitter implements ServerAdapter {
4
+ readonly name: string;
5
+ readonly config: MCPServerConfig;
6
+ isConnected: boolean;
7
+ private httpClient;
8
+ private sseEventSource?;
9
+ private requestId;
10
+ private pendingRequests;
11
+ private baseUrl;
12
+ private sseUrl;
13
+ private dynamicEndpoint?;
14
+ private sessionId?;
15
+ private sessionMode;
16
+ private reconnectTimer?;
17
+ private isReconnecting;
18
+ private isDisabled;
19
+ constructor(name: string, config: MCPServerConfig);
20
+ connect(): Promise<void>;
21
+ disconnect(): Promise<void>;
22
+ private connectSSE;
23
+ private setupSSEHandlers;
24
+ private extractSessionId;
25
+ private initialize;
26
+ getTools(): Promise<MCPTool[]>;
27
+ callTool(name: string, args: any): Promise<MCPResponse>;
28
+ sendRequest(request: MCPRequest): Promise<MCPResponse>;
29
+ private sendNotification;
30
+ private getNextRequestId;
31
+ private handleSSEMessage;
32
+ private handleMCPResponse;
33
+ private handleMCPNotification;
34
+ private handleSSEDisconnection;
35
+ private attemptReconnection;
36
+ private cleanup;
37
+ getCachedTools(): Promise<MCPTool[]>;
38
+ hasTools(toolName: string): Promise<boolean>;
39
+ getStatus(): {
40
+ name: string;
41
+ connected: boolean;
42
+ toolCount: number;
43
+ pendingRequests: number;
44
+ endpoint: string;
45
+ };
46
+ disable(): void;
47
+ enable(): void;
48
+ }
49
+ //# sourceMappingURL=http-sse-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-sse-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/http-sse-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAErG,qBAAa,cAAe,SAAQ,YAAa,YAAW,aAAa;IACvE,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,MAAM,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,OAAO,CAAS;IAEpC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,cAAc,CAAC,CAAM;IAC7B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAIR;IAEf,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,UAAU,CAAkB;gBAExB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe;IAiC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBnB,UAAU;IAyBxB,OAAO,CAAC,gBAAgB;IAsFxB,OAAO,CAAC,gBAAgB;YAkCV,UAAU;IAqClB,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAiB9B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAcvD,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;YAmE9C,gBAAgB;IAuB9B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,sBAAsB;YAgChB,mBAAmB;IA4BjC,OAAO,CAAC,OAAO;IAaT,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOlD,SAAS,IAAI;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAWD,OAAO,IAAI,IAAI;IAYf,MAAM,IAAI,IAAI;CAIf"}