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,275 @@
1
+ /**
2
+ * Start Command - 用户友好的启动命令
3
+ */
4
+ import { CLIUtils } from '../cli-utils.js';
5
+ import { DaemonCommands } from './daemon-commands.js';
6
+ import { MCPDogDaemon } from '../../daemon/mcpdog-daemon.js';
7
+ import { createServer } from 'net';
8
+ import fs from 'fs/promises';
9
+ import path from 'path';
10
+ import os from 'os';
11
+ export class StartCommand {
12
+ configManager;
13
+ daemonCommands;
14
+ constructor(configManager) {
15
+ this.configManager = configManager;
16
+ this.daemonCommands = new DaemonCommands(configManager.getConfigPath());
17
+ }
18
+ async execute(args, options) {
19
+ if (options.help) {
20
+ this.showHelp();
21
+ return;
22
+ }
23
+ if (options['daemon-port']) {
24
+ CLIUtils.error('--daemon-port has been removed: daemon IPC has been merged into the Web port. ' +
25
+ 'Use --web-port instead (or rely on the persisted web.port config).');
26
+ process.exit(1);
27
+ }
28
+ try {
29
+ // 加载配置以获取准确信息
30
+ await this.configManager.loadConfig();
31
+ // 检查守护进程是否已在运行
32
+ const isAlreadyRunning = await this.isDaemonRunning(options);
33
+ if (isAlreadyRunning) {
34
+ console.log(`
35
+ ❌ ${CLIUtils.colorize('MCPDog daemon is already running', 'red')}
36
+
37
+ ${CLIUtils.colorize('Available actions:', 'yellow')}
38
+ agentdog status # Check current status
39
+ agentdog stop # Stop the daemon
40
+ `);
41
+ process.exit(1);
42
+ }
43
+ // 解析启动模式
44
+ const startupConfig = this.parseStartupOptions(options);
45
+ // 显示启动信息
46
+ this.showStartingInfo(startupConfig);
47
+ // 启动守护进程
48
+ await this.startDaemonWithConfig(startupConfig);
49
+ }
50
+ catch (error) {
51
+ await this.showStartupError(error, options);
52
+ }
53
+ }
54
+ parseStartupOptions(options) {
55
+ // 支持向后兼容性
56
+ const dashboardPort = parseInt(options['dashboard-port']) ||
57
+ parseInt(options['web-port']) || 61125;
58
+ const httpPort = parseInt(options['mcp-http-port']) || 4000;
59
+ const pidFile = options['pid-file'] || path.join(os.homedir(), '.mcpdog', 'mcpdog.pid');
60
+ // 确定启动模式
61
+ let enableStdio = true; // 默认启用
62
+ let enableHttp = true; // 默认启用
63
+ let enableDashboard = !options['no-dashboard']; // 默认启用,除非明确禁用
64
+ if (options['stdio-only']) {
65
+ enableStdio = true;
66
+ enableHttp = false;
67
+ }
68
+ else if (options['http-only']) {
69
+ enableStdio = false;
70
+ enableHttp = true;
71
+ }
72
+ return {
73
+ enableStdio,
74
+ enableHttp,
75
+ enableDashboard,
76
+ dashboardPort,
77
+ httpPort,
78
+ pidFile
79
+ };
80
+ }
81
+ async showStartupInfo(startupConfig) {
82
+ // 等待一点时间让守护进程完全启动
83
+ await new Promise(resolve => setTimeout(resolve, 1000));
84
+ const config = this.configManager.getConfig();
85
+ const enabledServers = this.configManager.getEnabledServers();
86
+ console.log(`
87
+ 🚀 ${CLIUtils.colorize('MCPDog started successfully!', 'green')}
88
+
89
+ 📊 ${CLIUtils.colorize('Services:', 'cyan')}${startupConfig.enableStdio ? `
90
+ ✅ Stdio Transport: Ready (for MCP clients)` : ''}${startupConfig.enableHttp ? `
91
+ ✅ HTTP Transport: ${CLIUtils.colorize(`http://localhost:${startupConfig.httpPort}`, 'blue')}` : ''}${startupConfig.enableDashboard ? `
92
+ ✅ Dashboard UI: ${CLIUtils.colorize(`http://localhost:${startupConfig.dashboardPort}`, 'blue')}` : ''}
93
+
94
+ 🔧 ${CLIUtils.colorize('Configuration:', 'cyan')}
95
+ 📁 Config: ${this.configManager.getConfigPath()}
96
+ 🔧 Servers: ${Object.keys(enabledServers).join(', ')} (${this.getTotalToolCount()} tools)
97
+
98
+ 📋 ${CLIUtils.colorize('Usage:', 'cyan')}${startupConfig.enableStdio ? `
99
+ • MCP Clients: Use 'npx mcpdog@latest' in client config` : ''}${startupConfig.enableHttp ? `
100
+ • HTTP Clients: Connect to http://localhost:${startupConfig.httpPort}` : ''}${startupConfig.enableDashboard ? `
101
+ • Manage: Visit http://localhost:${startupConfig.dashboardPort}` : ''}
102
+
103
+ ⏹️ ${CLIUtils.colorize('Stop:', 'cyan')} npx mcpdog@latest stop
104
+
105
+ ${CLIUtils.colorize('[INFO]', 'cyan')} Daemon is running in the background
106
+ `);
107
+ }
108
+ async startDaemonWithConfig(startupConfig) {
109
+ // 查找可用端口
110
+ const finalConfig = await this.findAvailablePorts(startupConfig);
111
+ // 显示端口变化信息
112
+ if (finalConfig.dashboardPort !== startupConfig.dashboardPort) {
113
+ CLIUtils.warn(`Dashboard port ${startupConfig.dashboardPort} is busy, using ${finalConfig.dashboardPort}`);
114
+ }
115
+ if (finalConfig.httpPort !== startupConfig.httpPort) {
116
+ CLIUtils.warn(`HTTP port ${startupConfig.httpPort} is busy, using ${finalConfig.httpPort}`);
117
+ }
118
+ // 确保 .mcpdog 目录存在
119
+ const mcpdogDir = path.dirname(finalConfig.pidFile);
120
+ try {
121
+ await fs.mkdir(mcpdogDir, { recursive: true });
122
+ }
123
+ catch (error) {
124
+ // 目录可能已存在,忽略错误
125
+ }
126
+ // 创建 daemon 配置
127
+ const daemonConfig = {
128
+ configPath: this.configManager.getConfigPath(),
129
+ dashboardPort: finalConfig.enableDashboard ? finalConfig.dashboardPort : undefined,
130
+ httpPort: finalConfig.enableHttp ? finalConfig.httpPort : undefined,
131
+ enableHttp: finalConfig.enableHttp,
132
+ enableStdio: finalConfig.enableStdio,
133
+ pidFile: finalConfig.pidFile,
134
+ };
135
+ // 启动 daemon
136
+ const daemon = new MCPDogDaemon(daemonConfig);
137
+ try {
138
+ await daemon.start();
139
+ // 启动 dashboard (如果启用)
140
+ if (finalConfig.enableDashboard) {
141
+ try {
142
+ await daemon.startWebServer(finalConfig.dashboardPort);
143
+ }
144
+ catch (error) {
145
+ CLIUtils.warn(`Failed to start dashboard on port ${finalConfig.dashboardPort}: ${error.message}`);
146
+ }
147
+ }
148
+ // 显示成功信息
149
+ await this.showStartupInfo(finalConfig);
150
+ }
151
+ catch (error) {
152
+ throw new Error(`Failed to start daemon: ${error.message}`);
153
+ }
154
+ }
155
+ async findAvailablePorts(config) {
156
+ const result = { ...config };
157
+ if (config.enableDashboard) {
158
+ result.dashboardPort = await this.findAvailablePort(config.dashboardPort);
159
+ }
160
+ if (config.enableHttp) {
161
+ result.httpPort = await this.findAvailablePort(config.httpPort);
162
+ }
163
+ return result;
164
+ }
165
+ async findAvailablePort(startPort, maxAttempts = 10) {
166
+ for (let i = 0; i < maxAttempts; i++) {
167
+ const port = startPort + i;
168
+ if (await this.isPortAvailable(port)) {
169
+ return port;
170
+ }
171
+ }
172
+ throw new Error(`No available port found starting from ${startPort} (tried ${maxAttempts} ports)`);
173
+ }
174
+ async isPortAvailable(port) {
175
+ return new Promise((resolve) => {
176
+ const server = createServer();
177
+ server.listen(port, 'localhost', () => {
178
+ server.close();
179
+ resolve(true);
180
+ });
181
+ server.on('error', () => {
182
+ resolve(false);
183
+ });
184
+ });
185
+ }
186
+ async showStartupError(error, options) {
187
+ const configPath = this.configManager.getConfigPath();
188
+ console.log(`
189
+ ❌ ${CLIUtils.colorize('Startup failed:', 'red')} ${error.message}
190
+
191
+ ${CLIUtils.colorize('Common solutions:', 'yellow')}
192
+ 1. Check if configuration file exists:
193
+ ls -la ${configPath}
194
+
195
+ 2. Create a default configuration:
196
+ agentdog config init
197
+
198
+ 3. Validate your configuration:
199
+ agentdog config validate
200
+
201
+ 4. Check if port is already in use:
202
+ lsof -i :61125
203
+
204
+ ${CLIUtils.colorize('Need help?', 'cyan')}
205
+ agentdog --help # Show all commands
206
+ agentdog config --help # Configuration help
207
+ agentdog daemon --help # Advanced daemon options
208
+ `);
209
+ process.exit(1);
210
+ }
211
+ async isDaemonRunning(options) {
212
+ const pidFile = options['pid-file'] || path.join(process.cwd(), 'mcpdog.pid');
213
+ try {
214
+ const pidData = await fs.readFile(pidFile, 'utf-8');
215
+ const pid = parseInt(pidData.trim());
216
+ // 检查进程是否存在
217
+ process.kill(pid, 0);
218
+ return true;
219
+ }
220
+ catch {
221
+ return false;
222
+ }
223
+ }
224
+ showStartingInfo(options) {
225
+ console.log(`
226
+ 🚀 ${CLIUtils.colorize('Starting MCPDog daemon...', 'cyan')}
227
+ `);
228
+ }
229
+ getTotalToolCount() {
230
+ const enabledServers = this.configManager.getEnabledServers();
231
+ return Object.keys(enabledServers).length;
232
+ }
233
+ showHelp() {
234
+ console.log(`
235
+ ${CLIUtils.colorize('agentdog start', 'cyan')} - Start MCPDog daemon with all services
236
+
237
+ ${CLIUtils.colorize('Usage:', 'yellow')}
238
+ agentdog start [options]
239
+
240
+ ${CLIUtils.colorize('Options:', 'yellow')}
241
+ -c, --config <path> Configuration file path (default: ./mcpdog.config.json)
242
+ --dashboard-port <port> Dashboard UI port (default: 61125, auto-detected)
243
+ --mcp-http-port <port> HTTP transport port (default: 4000, auto-detected)
244
+ --pid-file <path> PID file location (default: ~/.mcpdog/mcpdog.pid)
245
+
246
+ --stdio-only Only enable stdio transport + dashboard
247
+ --http-only Only enable HTTP transport + dashboard
248
+ --no-dashboard Disable dashboard UI
249
+
250
+ --web-port <port> Deprecated, use --dashboard-port
251
+ --help Show this help message
252
+
253
+ ${CLIUtils.colorize('Default Behavior:', 'yellow')}
254
+ By default, 'agentdog start' enables all services:
255
+ • Stdio Transport (for MCP clients)
256
+ • HTTP Transport (for remote/web clients)
257
+ • Dashboard UI (for management)
258
+
259
+ ${CLIUtils.colorize('Examples:', 'yellow')}
260
+ agentdog start # Start all services
261
+ agentdog start --stdio-only # Only stdio + dashboard
262
+ agentdog start --http-only # Only HTTP + dashboard
263
+ agentdog start --no-dashboard # All transports, no dashboard
264
+ agentdog start --dashboard-port 3001 # Custom dashboard port
265
+ agentdog start --mcp-http-port 4001 # Custom HTTP port
266
+
267
+ ${CLIUtils.colorize('After starting:', 'yellow')}
268
+ • MCP Clients: Use 'npx mcpdog@latest' in client config
269
+ • HTTP Clients: Connect to http://localhost:4000
270
+ • Management: Visit http://localhost:61125
271
+ • Stop: agentdog stop
272
+ `);
273
+ }
274
+ }
275
+ //# sourceMappingURL=start-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-command.js","sourceRoot":"","sources":["../../../src/cli/commands/start-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { EventEmitter } from 'events';
2
+ import { MCPDogConfig, MCPServerConfig, AIProviderConfig, AIGatewayConfig } from '../types/index.js';
3
+ import { ConfigSuggestion } from '../core/auto-config-generator.js';
4
+ export declare class ConfigManager extends EventEmitter {
5
+ private config;
6
+ private configPath;
7
+ private autoCreateConfig;
8
+ private watchAbortController?;
9
+ private autoConfigGenerator;
10
+ private protocolDetector;
11
+ constructor(configPath?: string, autoCreateConfig?: boolean);
12
+ /**
13
+ * Get the default configuration file path
14
+ * Always use user home directory ~/.mcpdog/mcpdog.config.json
15
+ */
16
+ private getDefaultConfigPath;
17
+ private isStdioMode;
18
+ private shouldAutoCreateConfig;
19
+ private getDefaultConfig;
20
+ loadConfig(): Promise<void>;
21
+ /**
22
+ * Initialize auto-config by detecting available MCP servers and creating basic configuration
23
+ */
24
+ private initializeAutoConfig;
25
+ saveConfig(): Promise<void>;
26
+ getWebPort(): number | null;
27
+ getWebHost(): string;
28
+ setWebPort(port: number): Promise<void>;
29
+ getAIGatewayConfig(): AIGatewayConfig | undefined;
30
+ getAIProviders(): AIProviderConfig[];
31
+ getAIProviderBySlug(slug: string): AIProviderConfig | undefined;
32
+ addAIProvider(provider: AIProviderConfig): boolean;
33
+ updateAIProvider(id: string, updates: Partial<AIProviderConfig>): boolean;
34
+ removeAIProvider(id: string): boolean;
35
+ setAIGateway(cfg: AIGatewayConfig): Promise<void>;
36
+ getConfig(): MCPDogConfig;
37
+ setConfig(config: MCPDogConfig): void;
38
+ getConfigPath(): string;
39
+ getServerConfig(serverName: string): MCPServerConfig | undefined;
40
+ getServer(serverName: string): MCPServerConfig | undefined;
41
+ getAllServers(): Record<string, MCPServerConfig>;
42
+ getServers(): Record<string, MCPServerConfig>;
43
+ getEnabledServers(): Record<string, MCPServerConfig>;
44
+ toggleServer(name: string, enabled: boolean): boolean;
45
+ addServer(name: string, config: MCPServerConfig): boolean;
46
+ removeServer(name: string): boolean;
47
+ updateServer(name: string, config: Partial<MCPServerConfig>): boolean;
48
+ /**
49
+ * Rename a server
50
+ */
51
+ renameServer(oldName: string, newName: string): boolean;
52
+ /**
53
+ * Generate a unique server name
54
+ */
55
+ generateUniqueServerName(baseName: string): string;
56
+ /**
57
+ * Validate server name
58
+ */
59
+ validateServerName(name: string): {
60
+ valid: boolean;
61
+ error?: string;
62
+ suggestions?: string[];
63
+ };
64
+ /**
65
+ * Check if server name conflicts with existing names
66
+ */
67
+ checkServerNameConflict(name: string): boolean;
68
+ /**
69
+ * Start watching config file
70
+ */
71
+ startWatching(): Promise<void>;
72
+ /**
73
+ * Watch config file for changes and reload
74
+ */
75
+ watchConfig(): Promise<void>;
76
+ /**
77
+ * Stop watching config file
78
+ */
79
+ stopWatching(): void;
80
+ /**
81
+ * Validate configuration structure
82
+ */
83
+ validateConfig(config?: MCPDogConfig): {
84
+ valid: boolean;
85
+ errors: string[];
86
+ };
87
+ /**
88
+ * Optimize configuration by detecting protocols and suggesting improvements
89
+ */
90
+ optimizeConfig(): Promise<ConfigSuggestion[]>;
91
+ /**
92
+ * Apply configuration suggestions
93
+ */
94
+ applySuggestions(suggestions: ConfigSuggestion[]): Promise<void>;
95
+ /**
96
+ * Export configuration for backup or sharing
97
+ */
98
+ exportConfig(): string;
99
+ /**
100
+ * Import configuration from JSON string
101
+ */
102
+ importConfig(configJson: string): Promise<void>;
103
+ /**
104
+ * Get configuration statistics
105
+ */
106
+ getConfigStats(): {
107
+ serverCount: number;
108
+ totalTools: number;
109
+ configSize: number;
110
+ lastModified?: Date;
111
+ };
112
+ generateAutoConfig(): Promise<MCPDogConfig[]>;
113
+ private generateConfigSuggestionsInternal;
114
+ generateConfigSuggestions(): Promise<MCPDogConfig[]>;
115
+ detectConfigProtocol(config: MCPServerConfig): Promise<any>;
116
+ validateServerConfig(config: MCPServerConfig): {
117
+ valid: boolean;
118
+ errors: string[];
119
+ };
120
+ optimizeServerConfig(name: string): Promise<any>;
121
+ auditAllServerProtocols(): Promise<Record<string, any>>;
122
+ toggleTool(serverName: string, toolName: string, enabled: boolean): boolean;
123
+ }
124
+ export declare function isValidProviderSlug(slug: string): boolean;
125
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"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"}