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,293 @@
1
+ /**
2
+ * Protocol detection CLI commands
3
+ */
4
+ import { CLIUtils } from '../cli-utils.js';
5
+ export class DetectCommands {
6
+ configManager;
7
+ constructor(configManager) {
8
+ this.configManager = configManager;
9
+ }
10
+ async execute(args, options) {
11
+ if (options.help) {
12
+ this.showHelp();
13
+ return;
14
+ }
15
+ if (options.all) {
16
+ await this.detectAllServers(options);
17
+ }
18
+ else {
19
+ const [target] = args;
20
+ if (!target) {
21
+ CLIUtils.error('Usage: agentdog detect <server-name|endpoint> or agentdog detect --all');
22
+ return;
23
+ }
24
+ await this.detectTarget(target, options);
25
+ }
26
+ }
27
+ async detectTarget(target, options) {
28
+ try {
29
+ // Determine if it's a server name or endpoint URL
30
+ const existingServer = this.configManager.getServer(target);
31
+ if (existingServer) {
32
+ // Detect existing server
33
+ await this.detectExistingServer(target, options);
34
+ }
35
+ else if (target.startsWith('http://') || target.startsWith('https://')) {
36
+ // Detect new endpoint
37
+ await this.detectNewEndpoint(target, options);
38
+ }
39
+ else {
40
+ // May be a stdio command
41
+ await this.detectStdioCommand(target, options);
42
+ }
43
+ }
44
+ catch (error) {
45
+ CLIUtils.error(`Protocol detection failed: ${error.message}`);
46
+ if (CLIUtils.isJsonMode()) {
47
+ CLIUtils.jsonOutput({ success: false, error: error.message });
48
+ }
49
+ process.exit(1);
50
+ }
51
+ }
52
+ async detectExistingServer(serverName, options) {
53
+ const server = this.configManager.getServer(serverName);
54
+ CLIUtils.info(`🔍 Detecting server: ${serverName}`);
55
+ CLIUtils.verbose(`Endpoint: ${server.endpoint || server.command}`);
56
+ const detection = await this.configManager.detectConfigProtocol(server);
57
+ if (CLIUtils.isJsonMode()) {
58
+ CLIUtils.jsonOutput({
59
+ server: serverName,
60
+ current: server.transport,
61
+ detected: detection.detected,
62
+ confidence: detection.confidence,
63
+ recommendations: detection.recommendations
64
+ });
65
+ return;
66
+ }
67
+ console.log(`\n${CLIUtils.colorize('📊 Detection Results:', 'cyan')}`);
68
+ console.log(`Server: ${CLIUtils.colorize(serverName, 'yellow')}`);
69
+ console.log(`Current Protocol: ${CLIUtils.colorize(server.transport, 'blue')}`);
70
+ console.log(`Detected Protocol: ${CLIUtils.colorize(detection.detected, detection.detected === server.transport ? 'green' : 'yellow')}`);
71
+ console.log(`Confidence: ${this.formatConfidence(detection.confidence)}`);
72
+ if (detection.recommendations.length > 0) {
73
+ console.log(`\n${CLIUtils.colorize('💡 Recommendations:', 'cyan')}`);
74
+ detection.recommendations.forEach((rec) => {
75
+ console.log(` • ${rec}`);
76
+ });
77
+ }
78
+ // If a better protocol is detected, ask whether to update
79
+ if (detection.detected !== server.transport && detection.confidence > 70) {
80
+ const shouldUpdate = options.yes || await CLIUtils.confirm(`Detected better protocol ${detection.detected}, update configuration?`, false);
81
+ if (shouldUpdate) {
82
+ await this.configManager.updateServer(serverName, { transport: detection.detected });
83
+ CLIUtils.success(`✅ Server '${serverName}' protocol updated to ${detection.detected}`);
84
+ }
85
+ }
86
+ }
87
+ async detectNewEndpoint(endpoint, options) {
88
+ CLIUtils.info(`🔍 Detecting new endpoint: ${endpoint}`);
89
+ // Use AutoConfigGenerator directly for endpoint detection
90
+ const { AutoConfigGenerator } = await import('../../core/auto-config-generator.js');
91
+ const generator = new AutoConfigGenerator();
92
+ const suggestion = await generator.generateConfig('temp-detection', endpoint, {
93
+ timeout: options.timeout ? parseInt(options.timeout) : undefined
94
+ });
95
+ if (CLIUtils.isJsonMode()) {
96
+ CLIUtils.jsonOutput({
97
+ endpoint,
98
+ detected: suggestion.config.transport,
99
+ confidence: suggestion.confidence,
100
+ config: suggestion.config,
101
+ alternatives: suggestion.alternatives,
102
+ warnings: suggestion.warnings,
103
+ optimizations: suggestion.optimizations
104
+ });
105
+ return;
106
+ }
107
+ console.log(`\n${CLIUtils.colorize('📊 Detection Results:', 'cyan')}`);
108
+ console.log(`Endpoint: ${CLIUtils.colorize(endpoint, 'yellow')}`);
109
+ console.log(`Recommended Protocol: ${CLIUtils.colorize(suggestion.config.transport, 'green')}`);
110
+ console.log(`Confidence: ${this.formatConfidence(suggestion.confidence)}`);
111
+ if (options.detailed) {
112
+ console.log(`\n${CLIUtils.colorize('🔧 Suggested Configuration:', 'cyan')}`);
113
+ console.log(` Transport Protocol: ${suggestion.config.transport}`);
114
+ console.log(` Timeout: ${suggestion.config.timeout}ms`);
115
+ console.log(` Retry Count: ${suggestion.config.retries}`);
116
+ console.log(` Session Mode: ${suggestion.config.sessionMode || 'Default'}`);
117
+ }
118
+ if (suggestion.alternatives.length > 0) {
119
+ console.log(`\n${CLIUtils.colorize('🔄 Alternatives:', 'cyan')}`);
120
+ suggestion.alternatives.forEach((alt, index) => {
121
+ console.log(` ${index + 1}. ${alt.transport} - ${alt.description}`);
122
+ });
123
+ }
124
+ if (suggestion.warnings.length > 0) {
125
+ console.log(`\n${CLIUtils.colorize('⚠️ Warnings:', 'yellow')}`);
126
+ suggestion.warnings.forEach(warning => {
127
+ console.log(` • ${warning}`);
128
+ });
129
+ }
130
+ if (suggestion.optimizations.length > 0) {
131
+ console.log(`\n${CLIUtils.colorize('💡 Optimization Suggestions:', 'cyan')}`);
132
+ suggestion.optimizations.forEach(opt => {
133
+ console.log(` • ${opt}`);
134
+ });
135
+ }
136
+ // Ask whether to add server
137
+ if (!options['no-add']) {
138
+ const shouldAdd = await CLIUtils.confirm('Add new server based on detection results?', false);
139
+ if (shouldAdd) {
140
+ const { createInterface } = await import('readline');
141
+ const rl = createInterface({
142
+ input: process.stdin,
143
+ output: process.stdout
144
+ });
145
+ const serverName = await new Promise((resolve) => {
146
+ rl.question('Please enter server name: ', resolve);
147
+ });
148
+ rl.close();
149
+ if (serverName.trim()) {
150
+ await this.configManager.addServer(serverName.trim(), suggestion.config);
151
+ CLIUtils.success(`✅ Server '${serverName.trim()}' added successfully`);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ async detectStdioCommand(command, options) {
157
+ CLIUtils.info(`🔍 Detecting stdio command: ${command}`);
158
+ // For stdio commands, we directly suggest stdio protocol
159
+ const suggestion = {
160
+ protocol: 'stdio',
161
+ confidence: 95,
162
+ reason: 'Command-based MCP server detected',
163
+ features: ['PROCESS_COMMUNICATION', 'DIRECT_EXECUTION']
164
+ };
165
+ if (CLIUtils.isJsonMode()) {
166
+ CLIUtils.jsonOutput({
167
+ command,
168
+ detected: suggestion.protocol,
169
+ confidence: suggestion.confidence,
170
+ reason: suggestion.reason,
171
+ features: suggestion.features
172
+ });
173
+ return;
174
+ }
175
+ console.log(`\n${CLIUtils.colorize('📊 Detection Results:', 'cyan')}`);
176
+ console.log(`Command: ${CLIUtils.colorize(command, 'yellow')}`);
177
+ console.log(`Recommended Protocol: ${CLIUtils.colorize('stdio', 'green')}`);
178
+ console.log(`Confidence: ${this.formatConfidence(suggestion.confidence)}`);
179
+ console.log(`Reason: ${suggestion.reason}`);
180
+ console.log(`\n${CLIUtils.colorize('🔧 Suggested Configuration:', 'cyan')}`);
181
+ console.log(` Transport Protocol: stdio`);
182
+ console.log(` Command: ${command}`);
183
+ console.log(` Timeout: 60000ms (stdio recommends longer)`);
184
+ }
185
+ async detectAllServers(options) {
186
+ const servers = this.configManager.getServers();
187
+ if (Object.keys(servers).length === 0) {
188
+ CLIUtils.info('No servers configured');
189
+ return;
190
+ }
191
+ CLIUtils.info(`🔍 Batch detecting protocols for ${Object.keys(servers).length} servers...`);
192
+ const results = await this.configManager.auditAllServerProtocols();
193
+ if (CLIUtils.isJsonMode()) {
194
+ const jsonResults = Object.entries(results).map(([name, result]) => ({
195
+ server: name,
196
+ ...result
197
+ }));
198
+ CLIUtils.jsonOutput(jsonResults);
199
+ return;
200
+ }
201
+ console.log(`\n${CLIUtils.colorize('📊 Batch Detection Results:', 'cyan')}\n`);
202
+ const headers = ['Server', 'Current Protocol', 'Detected Protocol', 'Confidence', 'Status', 'Recommendation'];
203
+ const rows = [];
204
+ for (const [serverName, result] of Object.entries(results)) {
205
+ const status = result.needsUpdate ?
206
+ CLIUtils.colorize('Needs Update', 'yellow') :
207
+ CLIUtils.colorize('OK', 'green');
208
+ const mainRecommendation = result.recommendations[0] || 'None';
209
+ rows.push([
210
+ serverName,
211
+ result.current,
212
+ result.detected,
213
+ this.formatConfidence(result.confidence),
214
+ status,
215
+ mainRecommendation.length > 40 ? mainRecommendation.substring(0, 37) + '...' : mainRecommendation
216
+ ]);
217
+ }
218
+ CLIUtils.printTable(headers, rows);
219
+ // Statistics
220
+ const needsUpdate = Object.values(results).filter((r) => r.needsUpdate).length;
221
+ const highConfidence = Object.values(results).filter((r) => r.confidence > 80).length;
222
+ console.log(`\n${CLIUtils.colorize('📈 Statistics:', 'cyan')}`);
223
+ console.log(` Total Servers: ${Object.keys(servers).length}`);
224
+ console.log(` Need Update: ${needsUpdate}`);
225
+ console.log(` High Confidence Detection: ${highConfidence}`);
226
+ if (needsUpdate > 0) {
227
+ const shouldUpdate = options.yes || await CLIUtils.confirm(`Found ${needsUpdate} servers that can be optimized, batch update?`, false);
228
+ if (shouldUpdate) {
229
+ let updated = 0;
230
+ for (const [serverName, result] of Object.entries(results)) {
231
+ if (result.needsUpdate) {
232
+ try {
233
+ await this.configManager.updateServer(serverName, {
234
+ transport: result.detected
235
+ });
236
+ updated++;
237
+ CLIUtils.verbose(`✅ Updated server '${serverName}' protocol to ${result.detected}`);
238
+ }
239
+ catch (error) {
240
+ CLIUtils.warning(`Failed to update server '${serverName}': ${error.message}`);
241
+ }
242
+ }
243
+ }
244
+ CLIUtils.success(`✅ Successfully updated ${updated} server configurations`);
245
+ }
246
+ }
247
+ }
248
+ formatConfidence(confidence) {
249
+ if (confidence >= 90) {
250
+ return CLIUtils.colorize(`${confidence}% (Very High)`, 'green');
251
+ }
252
+ else if (confidence >= 70) {
253
+ return CLIUtils.colorize(`${confidence}% (High)`, 'green');
254
+ }
255
+ else if (confidence >= 50) {
256
+ return CLIUtils.colorize(`${confidence}% (Medium)`, 'yellow');
257
+ }
258
+ else {
259
+ return CLIUtils.colorize(`${confidence}% (Low)`, 'red');
260
+ }
261
+ }
262
+ showHelp() {
263
+ console.log(`
264
+ ${CLIUtils.colorize('agentdog detect', 'cyan')} - 协议检测
265
+
266
+ ${CLIUtils.colorize('使用方法:', 'yellow')}
267
+ agentdog detect <server-name|endpoint> [options]
268
+ agentdog detect --all [options]
269
+
270
+ ${CLIUtils.colorize('选项:', 'yellow')}
271
+ --all 检测所有配置的服务器
272
+ --timeout <ms> 检测超时时间 (默认: 10000)
273
+ --detailed 显示详细检测信息
274
+ --no-add 不询问是否添加新服务器
275
+ --yes 自动确认所有操作
276
+
277
+ ${CLIUtils.colorize('示例:', 'yellow')}
278
+ agentdog detect my-server # 检测现有服务器
279
+ agentdog detect https://api.example.com # 检测新端点
280
+ agentdog detect "node mcp-server.js" # 检测stdio命令
281
+ agentdog detect --all # 检测所有服务器
282
+ agentdog detect --all --yes # 批量检测并自动更新
283
+ agentdog detect new-api --detailed # 详细检测信息
284
+
285
+ ${CLIUtils.colorize('输出说明:', 'yellow')}
286
+ 置信度 90%+: 极高可信度,强烈建议使用
287
+ 置信度 70-89%: 高可信度,建议使用
288
+ 置信度 50-69%: 中等可信度,可以尝试
289
+ 置信度 <50%: 低可信度,需要手动验证
290
+ `);
291
+ }
292
+ }
293
+ //# sourceMappingURL=detect-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-commands.js","sourceRoot":"","sources":["../../../src/cli/commands/detect-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 诊断和修复CLI命令
3
+ */
4
+ import { ConfigManager } from '../../config/config-manager.js';
5
+ export declare class DiagnoseCommands {
6
+ private configManager;
7
+ constructor(configManager: ConfigManager);
8
+ execute(args: string[], options: Record<string, any>): Promise<void>;
9
+ private diagnoseServer;
10
+ private diagnoseAllServers;
11
+ private healthCheck;
12
+ private attemptFix;
13
+ private calculateHealthScore;
14
+ private calculateSystemHealth;
15
+ private formatConfidence;
16
+ private formatHealthScore;
17
+ private showHelp;
18
+ }
19
+ //# sourceMappingURL=diagnose-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/diagnose-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,qBAAa,gBAAgB;IACf,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAE1C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAoB5D,cAAc;YAoEd,kBAAkB;YA0FlB,WAAW;YAuDX,UAAU;IA6CxB,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,QAAQ;CA4BjB"}
@@ -0,0 +1,326 @@
1
+ /**
2
+ * 诊断和修复CLI命令
3
+ */
4
+ import { CLIUtils } from '../cli-utils.js';
5
+ export class DiagnoseCommands {
6
+ configManager;
7
+ constructor(configManager) {
8
+ this.configManager = configManager;
9
+ }
10
+ async execute(args, options) {
11
+ if (options.help) {
12
+ this.showHelp();
13
+ return;
14
+ }
15
+ if (options['health-check']) {
16
+ await this.healthCheck(options);
17
+ }
18
+ else if (options.all) {
19
+ await this.diagnoseAllServers(options);
20
+ }
21
+ else {
22
+ const [serverName] = args;
23
+ if (!serverName) {
24
+ CLIUtils.error('使用方法: agentdog diagnose <server-name> 或 agentdog diagnose --all');
25
+ return;
26
+ }
27
+ await this.diagnoseServer(serverName, options);
28
+ }
29
+ }
30
+ async diagnoseServer(serverName, options) {
31
+ try {
32
+ const server = this.configManager.getServer(serverName);
33
+ if (!server) {
34
+ CLIUtils.error(`服务器 '${serverName}' 不存在`);
35
+ return;
36
+ }
37
+ CLIUtils.info(`🔍 诊断服务器: ${serverName}`);
38
+ // 执行基础配置检查
39
+ const configErrors = this.configManager.validateServerConfig(server);
40
+ // 执行协议检测诊断
41
+ const protocolDiagnosis = await this.configManager.detectConfigProtocol(server);
42
+ if (CLIUtils.isJsonMode()) {
43
+ CLIUtils.jsonOutput({
44
+ server: serverName,
45
+ configValid: configErrors.valid,
46
+ configErrors: configErrors.errors,
47
+ protocolDiagnosis,
48
+ needsFix: !configErrors.valid || protocolDiagnosis.confidence < 50
49
+ });
50
+ return;
51
+ }
52
+ console.log(`\n${CLIUtils.colorize('🏥 诊断报告:', 'cyan')} ${serverName}\n`);
53
+ // 配置验证结果
54
+ console.log(`${CLIUtils.colorize('📋 配置检查:', 'yellow')}`);
55
+ if (configErrors.valid) {
56
+ console.log(` ${CLIUtils.colorize('✅ 配置语法正确', 'green')}`);
57
+ }
58
+ else {
59
+ console.log(` ${CLIUtils.colorize('❌ 发现配置问题:', 'red')}`);
60
+ configErrors.errors.forEach((error) => {
61
+ console.log(` • ${error}`);
62
+ });
63
+ }
64
+ // 协议诊断结果
65
+ console.log(`\n${CLIUtils.colorize('🔌 连接诊断:', 'yellow')}`);
66
+ console.log(` 当前协议: ${server.transport}`);
67
+ console.log(` 检测协议: ${protocolDiagnosis.detected}`);
68
+ console.log(` 检测置信度: ${this.formatConfidence(protocolDiagnosis.confidence)}`);
69
+ if (protocolDiagnosis.recommendations.length > 0) {
70
+ console.log(`\n${CLIUtils.colorize('💡 诊断建议:', 'cyan')}`);
71
+ protocolDiagnosis.recommendations.forEach((rec) => {
72
+ console.log(` • ${rec}`);
73
+ });
74
+ }
75
+ // 健康状态评估
76
+ const healthScore = this.calculateHealthScore(configErrors.errors, protocolDiagnosis);
77
+ console.log(`\n${CLIUtils.colorize('💗 健康评分:', 'cyan')} ${this.formatHealthScore(healthScore)}`);
78
+ // 自动修复建议
79
+ if (options.fix || (healthScore < 70 && await CLIUtils.confirm('是否尝试自动修复发现的问题?', false))) {
80
+ await this.attemptFix(serverName, server, configErrors.errors, protocolDiagnosis);
81
+ }
82
+ }
83
+ catch (error) {
84
+ CLIUtils.error(`诊断失败: ${error.message}`);
85
+ process.exit(1);
86
+ }
87
+ }
88
+ async diagnoseAllServers(options) {
89
+ const servers = this.configManager.getServers();
90
+ const serverEntries = Object.entries(servers);
91
+ if (serverEntries.length === 0) {
92
+ CLIUtils.info('没有配置任何服务器');
93
+ return;
94
+ }
95
+ CLIUtils.info(`🔍 批量诊断 ${serverEntries.length} 个服务器...`);
96
+ const results = [];
97
+ for (let i = 0; i < serverEntries.length; i++) {
98
+ const [serverName, server] = serverEntries[i];
99
+ CLIUtils.showProgress(i + 1, serverEntries.length, `诊断 ${serverName}`);
100
+ try {
101
+ const configErrors = this.configManager.validateServerConfig(server);
102
+ const protocolDiagnosis = await this.configManager.detectConfigProtocol(server);
103
+ const healthScore = this.calculateHealthScore(configErrors.errors, protocolDiagnosis);
104
+ results.push({
105
+ name: serverName,
106
+ configValid: configErrors.valid,
107
+ configErrors: configErrors.errors,
108
+ protocolMatch: protocolDiagnosis.detected === server.transport,
109
+ confidence: protocolDiagnosis.confidence,
110
+ healthScore,
111
+ needsAttention: healthScore < 70
112
+ });
113
+ }
114
+ catch (error) {
115
+ results.push({
116
+ name: serverName,
117
+ configValid: false,
118
+ configErrors: [error.message],
119
+ protocolMatch: false,
120
+ confidence: 0,
121
+ healthScore: 0,
122
+ needsAttention: true,
123
+ error: error.message
124
+ });
125
+ }
126
+ }
127
+ if (CLIUtils.isJsonMode()) {
128
+ CLIUtils.jsonOutput(results);
129
+ return;
130
+ }
131
+ console.log(`\n${CLIUtils.colorize('🏥 批量诊断报告:', 'cyan')}\n`);
132
+ const headers = ['服务器', '配置', '协议匹配', '置信度', '健康分', '状态'];
133
+ const rows = results.map(result => [
134
+ result.name,
135
+ result.configValid ? CLIUtils.colorize('✓', 'green') : CLIUtils.colorize('✗', 'red'),
136
+ result.protocolMatch ? CLIUtils.colorize('✓', 'green') : CLIUtils.colorize('✗', 'yellow'),
137
+ `${result.confidence}%`,
138
+ result.healthScore.toString(),
139
+ result.needsAttention ? CLIUtils.colorize('需关注', 'yellow') : CLIUtils.colorize('健康', 'green')
140
+ ]);
141
+ CLIUtils.printTable(headers, rows);
142
+ // 统计信息
143
+ const needsAttention = results.filter(r => r.needsAttention).length;
144
+ const configIssues = results.filter(r => !r.configValid).length;
145
+ const protocolIssues = results.filter(r => !r.protocolMatch && r.confidence > 70).length;
146
+ console.log(`\n${CLIUtils.colorize('📊 诊断统计:', 'cyan')}`);
147
+ console.log(` 总服务器数: ${servers.length}`);
148
+ console.log(` 需要关注: ${needsAttention}`);
149
+ console.log(` 配置问题: ${configIssues}`);
150
+ console.log(` 协议问题: ${protocolIssues}`);
151
+ if (needsAttention > 0) {
152
+ console.log(`\n${CLIUtils.colorize('⚠️ 需要关注的服务器:', 'yellow')}`);
153
+ results.filter(r => r.needsAttention).forEach(result => {
154
+ console.log(` • ${result.name}: 健康分 ${result.healthScore}`);
155
+ if (result.configErrors.length > 0) {
156
+ result.configErrors.forEach((error) => {
157
+ console.log(` - 配置: ${error}`);
158
+ });
159
+ }
160
+ });
161
+ }
162
+ }
163
+ async healthCheck(options) {
164
+ CLIUtils.info('🏥 执行系统健康检查...');
165
+ const servers = this.configManager.getServers();
166
+ const config = this.configManager.getConfig();
167
+ // 基础检查
168
+ const serverEntries = Object.entries(servers);
169
+ const checks = {
170
+ configFile: true,
171
+ serversConfigured: serverEntries.length > 0,
172
+ enabledServers: serverEntries.filter(([name, s]) => s.enabled !== false).length,
173
+ webInterface: config.web?.enabled || false,
174
+ loggingConfigured: config.logging?.level !== undefined
175
+ };
176
+ if (CLIUtils.isJsonMode()) {
177
+ CLIUtils.jsonOutput({
178
+ systemHealth: checks,
179
+ serverCount: servers.length,
180
+ enabledCount: checks.enabledServers,
181
+ overallHealth: this.calculateSystemHealth(checks)
182
+ });
183
+ return;
184
+ }
185
+ console.log(`\n${CLIUtils.colorize('💗 系统健康检查:', 'cyan')}\n`);
186
+ console.log(`${CLIUtils.colorize('📋 基础检查:', 'yellow')}`);
187
+ console.log(` 配置文件: ${checks.configFile ? CLIUtils.colorize('✓', 'green') : CLIUtils.colorize('✗', 'red')}`);
188
+ console.log(` 服务器配置: ${checks.serversConfigured ? CLIUtils.colorize('✓', 'green') : CLIUtils.colorize('✗', 'red')} (${servers.length} 个)`);
189
+ console.log(` 启用的服务器: ${checks.enabledServers > 0 ? CLIUtils.colorize('✓', 'green') : CLIUtils.colorize('✗', 'yellow')} (${checks.enabledServers} 个)`);
190
+ console.log(` Web界面: ${checks.webInterface ? CLIUtils.colorize('✓', 'green') : CLIUtils.colorize('✗', 'yellow')}`);
191
+ console.log(` 日志配置: ${checks.loggingConfigured ? CLIUtils.colorize('✓', 'green') : CLIUtils.colorize('✗', 'yellow')}`);
192
+ const systemHealth = this.calculateSystemHealth(checks);
193
+ console.log(`\n${CLIUtils.colorize('💗 系统健康度:', 'cyan')} ${this.formatHealthScore(systemHealth)}`);
194
+ if (systemHealth < 80) {
195
+ console.log(`\n${CLIUtils.colorize('💡 改进建议:', 'cyan')}`);
196
+ if (!checks.serversConfigured) {
197
+ console.log(' • 添加至少一个MCP服务器配置');
198
+ }
199
+ if (checks.enabledServers === 0) {
200
+ console.log(' • 启用至少一个服务器');
201
+ }
202
+ if (!checks.webInterface) {
203
+ console.log(' • 考虑启用Web管理界面');
204
+ }
205
+ if (!checks.loggingConfigured) {
206
+ console.log(' • 配置日志级别以便调试');
207
+ }
208
+ }
209
+ }
210
+ async attemptFix(serverName, server, configErrors, protocolDiagnosis) {
211
+ CLIUtils.info(`🔧 尝试自动修复 ${serverName}...`);
212
+ let fixes = 0;
213
+ // 修复协议问题
214
+ if (protocolDiagnosis.detected !== server.transport && protocolDiagnosis.confidence > 70) {
215
+ try {
216
+ await this.configManager.updateServer(serverName, { transport: protocolDiagnosis.detected });
217
+ CLIUtils.success(`✅ 协议已更新为 ${protocolDiagnosis.detected}`);
218
+ fixes++;
219
+ }
220
+ catch (error) {
221
+ CLIUtils.warning(`协议修复失败: ${error.message}`);
222
+ }
223
+ }
224
+ // 修复配置问题 (简单的默认值修复)
225
+ const updates = {};
226
+ configErrors.forEach(error => {
227
+ if (error.includes('timeout')) {
228
+ updates.timeout = server.transport === 'stdio' ? 60000 : 30000;
229
+ fixes++;
230
+ }
231
+ if (error.includes('retries')) {
232
+ updates.retries = 3;
233
+ fixes++;
234
+ }
235
+ });
236
+ if (Object.keys(updates).length > 0) {
237
+ try {
238
+ await this.configManager.updateServer(serverName, updates);
239
+ CLIUtils.success(`✅ 配置参数已修复`);
240
+ }
241
+ catch (error) {
242
+ CLIUtils.warning(`配置修复失败: ${error.message}`);
243
+ }
244
+ }
245
+ if (fixes > 0) {
246
+ CLIUtils.success(`🎉 成功修复 ${fixes} 个问题`);
247
+ }
248
+ else {
249
+ CLIUtils.warning('没有可自动修复的问题,请手动检查配置');
250
+ }
251
+ }
252
+ calculateHealthScore(configErrors, protocolDiagnosis) {
253
+ let score = 100;
254
+ // 配置错误扣分
255
+ score -= configErrors.length * 20;
256
+ // 协议不匹配扣分
257
+ if (protocolDiagnosis.detected !== 'unknown' && protocolDiagnosis.confidence > 70) {
258
+ score -= (100 - protocolDiagnosis.confidence) / 2;
259
+ }
260
+ return Math.max(0, Math.round(score));
261
+ }
262
+ calculateSystemHealth(checks) {
263
+ let score = 0;
264
+ let maxScore = 0;
265
+ // 基础检查权重
266
+ const weights = {
267
+ configFile: 20,
268
+ serversConfigured: 30,
269
+ enabledServers: 25,
270
+ webInterface: 15,
271
+ loggingConfigured: 10
272
+ };
273
+ Object.entries(weights).forEach(([key, weight]) => {
274
+ maxScore += weight;
275
+ if (checks[key] === true || (key === 'enabledServers' && checks[key] > 0)) {
276
+ score += weight;
277
+ }
278
+ });
279
+ return Math.round((score / maxScore) * 100);
280
+ }
281
+ formatConfidence(confidence) {
282
+ if (confidence >= 90)
283
+ return CLIUtils.colorize(`${confidence}%`, 'green');
284
+ if (confidence >= 70)
285
+ return CLIUtils.colorize(`${confidence}%`, 'yellow');
286
+ return CLIUtils.colorize(`${confidence}%`, 'red');
287
+ }
288
+ formatHealthScore(score) {
289
+ if (score >= 90)
290
+ return CLIUtils.colorize(`${score}% (优秀)`, 'green');
291
+ if (score >= 70)
292
+ return CLIUtils.colorize(`${score}% (良好)`, 'green');
293
+ if (score >= 50)
294
+ return CLIUtils.colorize(`${score}% (一般)`, 'yellow');
295
+ return CLIUtils.colorize(`${score}% (需改进)`, 'red');
296
+ }
297
+ showHelp() {
298
+ console.log(`
299
+ ${CLIUtils.colorize('agentdog diagnose', 'cyan')} - 诊断和修复
300
+
301
+ ${CLIUtils.colorize('使用方法:', 'yellow')}
302
+ agentdog diagnose <server-name> [options]
303
+ agentdog diagnose --all [options]
304
+ agentdog diagnose --health-check
305
+
306
+ ${CLIUtils.colorize('选项:', 'yellow')}
307
+ --all 诊断所有服务器
308
+ --fix 自动修复发现的问题
309
+ --health-check 执行系统健康检查
310
+
311
+ ${CLIUtils.colorize('诊断内容:', 'yellow')}
312
+ • 配置语法验证
313
+ • 协议兼容性检查
314
+ • 连通性测试
315
+ • 性能分析
316
+ • 健康评分
317
+
318
+ ${CLIUtils.colorize('示例:', 'yellow')}
319
+ agentdog diagnose my-server # 诊断单个服务器
320
+ agentdog diagnose my-server --fix # 诊断并自动修复
321
+ agentdog diagnose --all # 诊断所有服务器
322
+ agentdog diagnose --health-check # 系统健康检查
323
+ `);
324
+ }
325
+ }
326
+ //# sourceMappingURL=diagnose-commands.js.map