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
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Stdio proxy - MCP client connecting to daemon
3
+ * Acts as a bridge between MCP client and daemon
4
+ */
5
+ import { createInterface } from 'readline';
6
+ import { DaemonClient } from './daemon-client.js';
7
+ export class StdioProxy {
8
+ daemonClient;
9
+ readline;
10
+ isReady = false;
11
+ constructor(daemonPort) {
12
+ // 兼容两种入参:Web 端口号(数字)或完整 baseUrl(字符串)
13
+ const baseUrl = typeof daemonPort === 'string'
14
+ ? daemonPort
15
+ : `http://localhost:${daemonPort ?? 61125}`;
16
+ this.daemonClient = new DaemonClient({
17
+ baseUrl,
18
+ clientType: 'stdio',
19
+ silent: true // Enable silent mode to avoid log pollution in stdio
20
+ });
21
+ this.setupStdio();
22
+ this.setupDaemonClient();
23
+ }
24
+ setupStdio() {
25
+ this.readline = createInterface({
26
+ input: process.stdin,
27
+ output: process.stdout,
28
+ crlfDelay: Infinity
29
+ });
30
+ this.readline.on('line', (line) => {
31
+ this.handleStdioInput(line.trim());
32
+ });
33
+ this.readline.on('close', () => {
34
+ this.shutdown();
35
+ });
36
+ // Handle process signals
37
+ process.on('SIGINT', () => this.shutdown());
38
+ process.on('SIGTERM', () => this.shutdown());
39
+ }
40
+ setupDaemonClient() {
41
+ this.daemonClient.on('connected', () => {
42
+ this.isReady = true;
43
+ });
44
+ this.daemonClient.on('ready', () => {
45
+ this.isReady = true;
46
+ });
47
+ }
48
+ async handleStdioInput(line) {
49
+ if (!line)
50
+ return;
51
+ try {
52
+ const request = JSON.parse(line);
53
+ // Check if it's a notification message (no id field)
54
+ if (!('id' in request)) {
55
+ // Notification messages are temporarily ignored or forwarded to daemon
56
+ return;
57
+ }
58
+ // If daemon connection is not ready yet, wait a bit
59
+ if (!this.isReady) {
60
+ // Give some time for connection to establish
61
+ await new Promise(resolve => setTimeout(resolve, 100));
62
+ }
63
+ // If still not ready, try to send request directly
64
+ if (!this.isReady && !this.daemonClient.connected) {
65
+ this.sendStdioResponse({
66
+ jsonrpc: "2.0",
67
+ id: request.id,
68
+ error: {
69
+ code: -32603,
70
+ message: "MCPDog daemon not connected"
71
+ }
72
+ });
73
+ return;
74
+ }
75
+ // Forward MCP request to daemon; on failure return a JSON-RPC error instead of hanging
76
+ let response;
77
+ try {
78
+ response = await this.daemonClient.sendMCPRequest(request);
79
+ }
80
+ catch (error) {
81
+ this.sendStdioResponse({
82
+ jsonrpc: '2.0',
83
+ id: request.id,
84
+ error: {
85
+ code: -32603,
86
+ message: `MCPDog daemon request failed: ${error.message}`
87
+ }
88
+ });
89
+ return;
90
+ }
91
+ // Send response back to stdio
92
+ this.sendStdioResponse(response);
93
+ }
94
+ catch (error) {
95
+ // Don't output error logs to stderr to avoid polluting MCP protocol
96
+ // Send standard JSON-RPC error response
97
+ try {
98
+ const request = JSON.parse(line);
99
+ if ('id' in request) {
100
+ this.sendStdioResponse({
101
+ jsonrpc: "2.0",
102
+ id: request.id,
103
+ error: {
104
+ code: -32700,
105
+ message: "Parse error"
106
+ }
107
+ });
108
+ }
109
+ }
110
+ catch {
111
+ // Unable to parse request, ignore
112
+ }
113
+ }
114
+ }
115
+ sendStdioResponse(response) {
116
+ // Write response directly to stdout for MCP protocol
117
+ const responseStr = JSON.stringify(response) + '\n';
118
+ process.stdout.write(responseStr);
119
+ // Log summary to stderr for debugging (avoid stdout pollution)
120
+ if (responseStr.length > 1000) {
121
+ process.stderr.write(`[DEBUG] Response sent (${responseStr.length} chars)\n`);
122
+ }
123
+ }
124
+ async start() {
125
+ try {
126
+ await this.daemonClient.connect();
127
+ // After successful connection, start processing MCP requests
128
+ }
129
+ catch (error) {
130
+ process.stderr.write(`MCPDog failed to connect to daemon: ${error.message}\n`);
131
+ process.exit(1);
132
+ }
133
+ }
134
+ shutdown() {
135
+ // Silent shutdown, no log output
136
+ if (this.readline) {
137
+ this.readline.close();
138
+ }
139
+ this.daemonClient.disconnect();
140
+ process.exit(0);
141
+ }
142
+ }
143
+ //# sourceMappingURL=stdio-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio-proxy.js","sourceRoot":"","sources":["../../src/daemon/stdio-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ConfigManager } from './config/config-manager.js';
2
+ export declare class StdioMCPServer {
3
+ private server;
4
+ private readline;
5
+ private lastProcessedLine;
6
+ constructor(configManager: ConfigManager);
7
+ private setupServer;
8
+ private setupStdio;
9
+ private handleInput;
10
+ private sendMessage;
11
+ start(): Promise<void>;
12
+ private shutdown;
13
+ }
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,iBAAiB,CAAc;gBAE3B,aAAa,EAAE,aAAa;IAOxC,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,UAAU;YAyBJ,WAAW;IAuCzB,OAAO,CAAC,WAAW;IAMb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAWd,QAAQ;CAevB"}
package/dist/index.js ADDED
@@ -0,0 +1,198 @@
1
+ import { createInterface } from 'readline';
2
+ import { MCPDogServer } from './core/mcpdog-server.js';
3
+ import { ConfigManager } from './config/config-manager.js';
4
+ import { StreamableHttpMCPServer } from './streamable-http-server.js';
5
+ export class StdioMCPServer {
6
+ server;
7
+ readline;
8
+ lastProcessedLine = ''; // Prevent duplicate line processing
9
+ constructor(configManager) {
10
+ console.error(`[STDIO] Creating StdioMCPServer instance`);
11
+ this.server = new MCPDogServer(configManager);
12
+ this.setupServer();
13
+ this.setupStdio();
14
+ }
15
+ setupServer() {
16
+ this.server.on('notification', (notification) => {
17
+ this.sendMessage(notification);
18
+ });
19
+ this.server.on('error', ({ error, context }) => {
20
+ console.error(`MCPDog error [${context}]:`, error);
21
+ });
22
+ this.server.on('started', () => {
23
+ console.error('MCPDog Server started (stdio mode)');
24
+ });
25
+ this.server.on('stopped', () => {
26
+ console.error('MCPDog Server stopped');
27
+ });
28
+ }
29
+ setupStdio() {
30
+ this.readline = createInterface({
31
+ input: process.stdin,
32
+ output: process.stdout,
33
+ crlfDelay: Infinity
34
+ });
35
+ this.readline.on('line', (line) => {
36
+ console.error(`[STDIO] Received line: ${line.substring(0, 50)}...`);
37
+ this.handleInput(line.trim());
38
+ });
39
+ this.readline.on('close', () => {
40
+ this.shutdown();
41
+ });
42
+ // Handle process signals
43
+ process.on('SIGINT', () => this.shutdown());
44
+ process.on('SIGTERM', () => this.shutdown());
45
+ process.on('uncaughtException', (error) => {
46
+ console.error('Uncaught exception:', error);
47
+ this.shutdown();
48
+ });
49
+ }
50
+ async handleInput(line) {
51
+ console.error(`[STDIO] handleInput called with: ${line.substring(0, 30)}...`);
52
+ if (!line) {
53
+ return;
54
+ }
55
+ // Prevent processing duplicate lines
56
+ if (line === this.lastProcessedLine) {
57
+ console.error(`[DEDUP] Ignoring duplicate line processing`);
58
+ return;
59
+ }
60
+ this.lastProcessedLine = line;
61
+ try {
62
+ const message = JSON.parse(line);
63
+ // Check if it's a notification message (no id field)
64
+ if (!('id' in message)) {
65
+ const notification = message;
66
+ console.error(`Handling notification: ${notification.method}`);
67
+ // Notifications don't need responses
68
+ return;
69
+ }
70
+ // Handle regular requests
71
+ const request = message;
72
+ console.error(`Processing request: ${request.method} (id: ${request.id})`);
73
+ const response = await this.server.handleRequest(request, 'stdio-client');
74
+ console.error(`Sending response for: ${request.method} (id: ${request.id})`);
75
+ this.sendMessage(response);
76
+ }
77
+ catch (error) {
78
+ console.error('Error processing request:', error);
79
+ // Don't send error response, only log error
80
+ }
81
+ }
82
+ sendMessage(message) {
83
+ const messageStr = JSON.stringify(message);
84
+ console.log(messageStr);
85
+ }
86
+ async start() {
87
+ try {
88
+ console.error(`[STDIO] Starting StdioMCPServer...`);
89
+ await this.server.start();
90
+ console.error(`[STDIO] StdioMCPServer started successfully`);
91
+ }
92
+ catch (error) {
93
+ console.error('Failed to start server:', error);
94
+ process.exit(1);
95
+ }
96
+ }
97
+ async shutdown() {
98
+ console.error('Shutting down MCPDog Server...');
99
+ try {
100
+ if (this.readline) {
101
+ this.readline.close();
102
+ }
103
+ await this.server.stop();
104
+ process.exit(0);
105
+ }
106
+ catch (error) {
107
+ console.error('Error during shutdown:', error);
108
+ process.exit(1);
109
+ }
110
+ }
111
+ }
112
+ // Parse command line arguments
113
+ function parseArgs() {
114
+ const args = process.argv.slice(2);
115
+ const result = {};
116
+ for (let i = 0; i < args.length; i++) {
117
+ const arg = args[i];
118
+ if (arg === '--config' || arg === '-c') {
119
+ result.configPath = args[i + 1];
120
+ i++;
121
+ }
122
+ else if (arg === '--web-port') {
123
+ result.webPort = parseInt(args[i + 1], 10);
124
+ i++;
125
+ }
126
+ else if (arg === '--transport' || arg === '-t') {
127
+ result.transport = args[i + 1];
128
+ i++;
129
+ }
130
+ else if (arg === '--port' || arg === '-p') {
131
+ result.port = parseInt(args[i + 1], 10);
132
+ i++;
133
+ }
134
+ else if (arg === '--help' || arg === '-h') {
135
+ console.log(`
136
+ MCPDog - Universal MCP Server Manager
137
+
138
+ Usage: mcpdog [options]
139
+
140
+ Options:
141
+ -c, --config <path> Configuration file path (default: ./mcpdog.config.json)
142
+ -t, --transport <type> Transport protocol: stdio (default) or streamable-http
143
+ -p, --port <port> Port for HTTP transport (default: 4000)
144
+ --web-port <port> Enable web interface on port (experimental)
145
+ -h, --help Show this help message
146
+
147
+ Examples:
148
+ mcpdog # Start with stdio transport
149
+ agentdog --transport streamable-http # Start with HTTP transport on default port
150
+ agentdog --transport streamable-http --port 8080 # Start with HTTP transport on port 8080
151
+ agentdog --config ./my-config.json # Use custom config file
152
+ agentdog --web-port 3000 # Enable web interface (not yet implemented)
153
+
154
+ Transport Types:
155
+ stdio - Standard input/output (default, for MCP clients like Claude Desktop)
156
+ streamable-http - HTTP-based transport with optional Server-Sent Events
157
+
158
+ For more information, visit: https://github.com/lzm04521/Agent-Dog
159
+ `);
160
+ process.exit(0);
161
+ }
162
+ }
163
+ return result;
164
+ }
165
+ // Main program entry point
166
+ async function main() {
167
+ const { configPath, webPort, transport, port } = parseArgs();
168
+ if (webPort) {
169
+ console.error('Web interface not yet implemented');
170
+ process.exit(1);
171
+ }
172
+ const configManager = new ConfigManager(configPath);
173
+ await configManager.loadConfig(); // Load config before passing to server
174
+ // Choose transport type
175
+ const transportType = transport || 'stdio';
176
+ if (transportType === 'streamable-http') {
177
+ const httpPort = port || 4000;
178
+ const httpServer = new StreamableHttpMCPServer(configManager, httpPort);
179
+ await httpServer.start();
180
+ }
181
+ else if (transportType === 'stdio') {
182
+ const mcpServer = new StdioMCPServer(configManager);
183
+ await mcpServer.start();
184
+ }
185
+ else {
186
+ console.error(`Unknown transport type: ${transportType}`);
187
+ console.error('Supported transports: stdio, streamable-http');
188
+ process.exit(1);
189
+ }
190
+ }
191
+ // Only start server when this file is run directly, not when imported
192
+ if (import.meta.url === `file://${process.argv[1]}`) {
193
+ main().catch(error => {
194
+ console.error('Fatal error:', error);
195
+ process.exit(1);
196
+ });
197
+ }
198
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface UserIntent {
2
+ isValidRequest: boolean;
3
+ description: string;
4
+ confidence: number;
5
+ category: string;
6
+ keywords: string[];
7
+ extractedData: {
8
+ email?: string;
9
+ subject?: string;
10
+ message?: string;
11
+ filename?: string;
12
+ url?: string;
13
+ database?: string;
14
+ [key: string]: any;
15
+ };
16
+ }
17
+ export declare class IntentAnalyzer {
18
+ private browserPatterns;
19
+ private extractionPatterns;
20
+ parseIntent(userRequest: string): Promise<UserIntent>;
21
+ private isBrowserRelated;
22
+ private extractKeywords;
23
+ private extractStructuredData;
24
+ private calculateConfidence;
25
+ private generateDescription;
26
+ }
27
+ //# sourceMappingURL=intent-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-analyzer.d.ts","sourceRoot":"","sources":["../src/intent-analyzer.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAqBrB;IAEF,OAAO,CAAC,kBAAkB,CAIxB;IAEI,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwC3D,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,qBAAqB;IAwC7B,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,mBAAmB;CAc5B"}
@@ -0,0 +1,140 @@
1
+ export class IntentAnalyzer {
2
+ browserPatterns = [
3
+ /navigate/i,
4
+ /browser/i,
5
+ /web/i,
6
+ /website/i,
7
+ /url/i,
8
+ /go\s+to/i,
9
+ /visit/i,
10
+ /open/i,
11
+ /click/i,
12
+ /type/i,
13
+ /screenshot/i,
14
+ /snapshot/i,
15
+ /导航/i,
16
+ /浏览器/i,
17
+ /网页/i,
18
+ /网站/i,
19
+ /打开/i,
20
+ /点击/i,
21
+ /输入/i,
22
+ /截图/i
23
+ ];
24
+ extractionPatterns = {
25
+ url: /(https?:\/\/[^\s]+|www\.[^\s]+|[a-zA-Z0-9-]+\.[a-zA-Z]{2,})/g,
26
+ text: /"([^"]+)"|'([^']+)'/g,
27
+ element: /element[:\s]+["']?([^"'\n]+)["']?/i
28
+ };
29
+ async parseIntent(userRequest) {
30
+ // Remove "use mcpdog" part
31
+ const cleanRequest = userRequest.replace(/,?\s*use\s+mcpdog\s*$/i, '').trim();
32
+ if (!cleanRequest || cleanRequest.length < 3) {
33
+ return {
34
+ isValidRequest: false,
35
+ description: "Request is empty or too short",
36
+ confidence: 0,
37
+ category: "unknown",
38
+ keywords: [],
39
+ extractedData: {}
40
+ };
41
+ }
42
+ // Extract keywords for tool matching
43
+ const keywords = this.extractKeywords(cleanRequest);
44
+ // Extract structured data
45
+ const extractedData = this.extractStructuredData(cleanRequest);
46
+ // Detect if it's a browser-related request
47
+ const isBrowserRequest = this.isBrowserRelated(cleanRequest);
48
+ // Calculate confidence
49
+ const confidence = this.calculateConfidence(cleanRequest, keywords);
50
+ // Generate friendly description
51
+ const description = this.generateDescription(cleanRequest, extractedData);
52
+ return {
53
+ isValidRequest: true,
54
+ description,
55
+ confidence,
56
+ category: isBrowserRequest ? 'browser' : 'general',
57
+ keywords,
58
+ extractedData
59
+ };
60
+ }
61
+ isBrowserRelated(request) {
62
+ return this.browserPatterns.some(pattern => pattern.test(request));
63
+ }
64
+ extractKeywords(request) {
65
+ const keywords = new Set();
66
+ // Extract keywords from request (simple word splitting)
67
+ const words = request.toLowerCase().match(/\b\w+\b/g) || [];
68
+ words.forEach(word => {
69
+ if (word.length > 2 && !['the', 'and', 'or', 'but', 'to', 'use', 'mcpdog', 'com', 'www'].includes(word)) {
70
+ keywords.add(word);
71
+ }
72
+ });
73
+ return Array.from(keywords);
74
+ }
75
+ extractStructuredData(request) {
76
+ const data = {};
77
+ // Extract URL
78
+ const urlMatches = request.match(this.extractionPatterns.url);
79
+ if (urlMatches) {
80
+ data.url = urlMatches[0];
81
+ // If no protocol, add https://
82
+ if (!data.url.startsWith('http')) {
83
+ data.url = 'https://' + data.url;
84
+ }
85
+ }
86
+ // Extract text in quotes
87
+ const textMatches = request.match(this.extractionPatterns.text);
88
+ if (textMatches) {
89
+ data.text = textMatches[0].slice(1, -1); // Remove quotes
90
+ }
91
+ // Extract common website names and convert to URLs
92
+ const commonSites = {
93
+ 'google': 'https://www.google.com',
94
+ 'youtube': 'https://www.youtube.com',
95
+ 'github': 'https://www.github.com',
96
+ 'stackoverflow': 'https://stackoverflow.com',
97
+ 'reddit': 'https://www.reddit.com',
98
+ 'twitter': 'https://www.twitter.com',
99
+ 'facebook': 'https://www.facebook.com'
100
+ };
101
+ for (const [site, url] of Object.entries(commonSites)) {
102
+ if (request.toLowerCase().includes(site) && !data.url) {
103
+ data.url = url;
104
+ break;
105
+ }
106
+ }
107
+ return data;
108
+ }
109
+ calculateConfidence(request, keywords) {
110
+ let confidence = 0.5; // Base score
111
+ // Browser pattern matching bonus
112
+ const browserMatches = this.browserPatterns.filter(pattern => pattern.test(request)).length;
113
+ confidence += browserMatches * 0.15;
114
+ // Keyword count bonus
115
+ confidence += Math.min(keywords.length * 0.05, 0.2);
116
+ // Structured data bonus
117
+ const structuredData = this.extractStructuredData(request);
118
+ confidence += Object.keys(structuredData).length * 0.1;
119
+ // Request length bonus (moderate length is better)
120
+ if (request.length > 5 && request.length < 200) {
121
+ confidence += 0.1;
122
+ }
123
+ return Math.min(confidence, 1.0);
124
+ }
125
+ generateDescription(request, extractedData) {
126
+ let description = request;
127
+ // Add specific details
128
+ if (extractedData.url) {
129
+ description = `Browser operation (target: ${extractedData.url})`;
130
+ }
131
+ else if (extractedData.text) {
132
+ description = `Browser operation (text: ${extractedData.text})`;
133
+ }
134
+ else if (this.isBrowserRelated(request)) {
135
+ description = `Browser operation: ${request}`;
136
+ }
137
+ return description;
138
+ }
139
+ }
140
+ //# sourceMappingURL=intent-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-analyzer.js","sourceRoot":"","sources":["../src/intent-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface LogEntry {
3
+ timestamp: string;
4
+ level: 'info' | 'warn' | 'error' | 'debug';
5
+ message: string;
6
+ source?: 'stdout' | 'stderr' | 'system';
7
+ serverName: string;
8
+ }
9
+ export interface ServerLogStats {
10
+ totalLogs: number;
11
+ errorCount: number;
12
+ warnCount: number;
13
+ lastActivity: string;
14
+ isConnected: boolean;
15
+ connectionAttempts: number;
16
+ lastError?: string;
17
+ }
18
+ export declare class ServerLogManager extends EventEmitter {
19
+ private logs;
20
+ private maxLogsPerServer;
21
+ private logStats;
22
+ constructor(maxLogsPerServer?: number);
23
+ /**
24
+ * Add log entry
25
+ */
26
+ addLog(serverName: string, level: LogEntry['level'], message: string, source?: LogEntry['source']): void;
27
+ /**
28
+ * Get server logs
29
+ */
30
+ getLogs(serverName: string, limit?: number): LogEntry[];
31
+ /**
32
+ * Get recent logs for all servers
33
+ */
34
+ getAllRecentLogs(limit?: number): LogEntry[];
35
+ /**
36
+ * Get server statistics
37
+ */
38
+ getStats(serverName: string): ServerLogStats | undefined;
39
+ /**
40
+ * Get all server statistics
41
+ */
42
+ getAllStats(): Map<string, ServerLogStats>;
43
+ /**
44
+ * Clear server logs
45
+ */
46
+ clearLogs(serverName: string): void;
47
+ /**
48
+ * Clear all logs
49
+ */
50
+ clearAllLogs(): void;
51
+ /**
52
+ * Log server connection status changes
53
+ */
54
+ updateConnectionStatus(serverName: string, isConnected: boolean, error?: string): void;
55
+ /**
56
+ * Log server output
57
+ */
58
+ addServerOutput(serverName: string, data: string, source: 'stdout' | 'stderr'): void;
59
+ /**
60
+ * Search logs
61
+ */
62
+ searchLogs(serverName: string, query: string, options?: {
63
+ level?: LogEntry['level'];
64
+ source?: LogEntry['source'];
65
+ limit?: number;
66
+ }): LogEntry[];
67
+ /**
68
+ * Export logs as text format
69
+ */
70
+ exportLogs(serverName: string, format?: 'json' | 'text'): string;
71
+ private updateStats;
72
+ private getOrCreateStats;
73
+ }
74
+ export declare const globalLogManager: ServerLogManager;
75
+ //# sourceMappingURL=server-log-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-log-manager.d.ts","sourceRoot":"","sources":["../../src/logging/server-log-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAqC;gBAEzC,gBAAgB,SAAO;IAKnC;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,QAAQ,CAAC,QAAQ,CAAY,GAAG,IAAI;IAmClH;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAQvD;;OAEG;IACH,gBAAgB,CAAC,KAAK,SAAK,GAAG,QAAQ,EAAE;IAaxC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIxD;;OAEG;IACH,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAI1C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMnC;;OAEG;IACH,YAAY,IAAI,IAAI;IAMpB;;OAEG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAoBtF;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IASpF;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACtD,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,QAAQ,EAAE;IAmBd;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,MAAe,GAAG,MAAM;IAgBxE,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,gBAAgB;CAazB;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}