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,569 @@
1
+ import { promises as fs } from 'fs';
2
+ import * as fsSync from 'fs';
3
+ import { join, dirname } from 'path';
4
+ import { homedir } from 'os';
5
+ import { EventEmitter } from 'events';
6
+ import { AutoConfigGenerator } from '../core/auto-config-generator.js';
7
+ import { ProtocolDetector } from '../core/protocol-detector.js';
8
+ import { ServerNameValidator } from '../utils/server-name-validator.js';
9
+ export class ConfigManager extends EventEmitter {
10
+ config;
11
+ configPath;
12
+ autoCreateConfig;
13
+ watchAbortController;
14
+ autoConfigGenerator;
15
+ protocolDetector;
16
+ constructor(configPath, autoCreateConfig) {
17
+ super();
18
+ this.configPath = configPath || this.getDefaultConfigPath();
19
+ this.config = this.getDefaultConfig();
20
+ // Intelligently detect whether to auto-create config file
21
+ if (autoCreateConfig === undefined) {
22
+ this.autoCreateConfig = this.shouldAutoCreateConfig();
23
+ }
24
+ else {
25
+ this.autoCreateConfig = autoCreateConfig;
26
+ }
27
+ this.autoConfigGenerator = new AutoConfigGenerator();
28
+ this.protocolDetector = new ProtocolDetector();
29
+ }
30
+ /**
31
+ * Get the default configuration file path
32
+ * Always use user home directory ~/.mcpdog/mcpdog.config.json
33
+ */
34
+ getDefaultConfigPath() {
35
+ // Use user home directory for global config
36
+ const userConfigDir = join(homedir(), '.mcpdog');
37
+ const userConfigPath = join(userConfigDir, 'mcpdog.config.json');
38
+ // Ensure the config directory exists
39
+ try {
40
+ fsSync.mkdirSync(userConfigDir, { recursive: true });
41
+ }
42
+ catch (error) {
43
+ // Directory might already exist, ignore error
44
+ }
45
+ return userConfigPath;
46
+ }
47
+ isStdioMode() {
48
+ // Detect if running in stdio mode (called by MCP client)
49
+ // Determine by checking command line arguments
50
+ return process.argv.includes('serve') && !process.argv.includes('--web-port');
51
+ }
52
+ shouldAutoCreateConfig() {
53
+ // If in serve mode, do not auto-create (to avoid polluting stdio)
54
+ if (process.argv.includes('serve')) {
55
+ return false;
56
+ }
57
+ // If running as an MCP server (via stdio), do not auto-create
58
+ if (this.isStdioMode()) {
59
+ return false;
60
+ }
61
+ // Check if file system is read-only
62
+ try {
63
+ const testFile = './test-write-' + Date.now();
64
+ fs.writeFile(testFile, 'test').then(() => {
65
+ fs.unlink(testFile).catch(() => { });
66
+ }).catch(() => { });
67
+ return true;
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ }
73
+ getDefaultConfig() {
74
+ return {
75
+ servers: {},
76
+ version: '2.0.0',
77
+ logging: {
78
+ level: 'info'
79
+ }
80
+ };
81
+ }
82
+ async loadConfig() {
83
+ try {
84
+ const configJson = await fs.readFile(this.configPath, 'utf-8');
85
+ this.config = {
86
+ ...this.getDefaultConfig(),
87
+ ...JSON.parse(configJson)
88
+ };
89
+ }
90
+ catch (error) {
91
+ // Config doesn't exist
92
+ if (error.code === 'ENOENT') {
93
+ if (this.autoCreateConfig) {
94
+ await this.initializeAutoConfig();
95
+ }
96
+ }
97
+ else {
98
+ throw new Error(`Failed to load config from ${this.configPath}: ${error.message}`);
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Initialize auto-config by detecting available MCP servers and creating basic configuration
104
+ */
105
+ async initializeAutoConfig() {
106
+ try {
107
+ // Let the auto config generator create a basic config
108
+ const suggestions = await this.generateConfigSuggestionsInternal();
109
+ if (suggestions.length > 0) {
110
+ // Apply the first suggestion (usually the comprehensive one)
111
+ const suggestion = suggestions[0];
112
+ if (suggestion.config) {
113
+ this.config.servers[suggestion.config.name] = suggestion.config;
114
+ }
115
+ await this.saveConfig();
116
+ }
117
+ else {
118
+ // No suggestions, keep default config
119
+ await this.saveConfig();
120
+ }
121
+ }
122
+ catch (error) {
123
+ console.warn(`Failed to auto-initialize config: ${error.message}`);
124
+ // Keep default config
125
+ }
126
+ }
127
+ async saveConfig() {
128
+ try {
129
+ // Ensure the directory exists
130
+ const configDir = dirname(this.configPath);
131
+ await fs.mkdir(configDir, { recursive: true });
132
+ await fs.writeFile(this.configPath, JSON.stringify(this.config, null, 2));
133
+ }
134
+ catch (error) {
135
+ throw new Error(`Failed to save config to ${this.configPath}: ${error.message}`);
136
+ }
137
+ }
138
+ // Web 界面端口持久化:daemon start 显式 --web-port 时保存,后续启动免传参
139
+ getWebPort() {
140
+ return this.config?.web?.port ?? null;
141
+ }
142
+ getWebHost() {
143
+ return this.config?.web?.host ?? 'localhost';
144
+ }
145
+ async setWebPort(port) {
146
+ if (!this.config.web) {
147
+ this.config.web = { enabled: true, port, host: 'localhost' };
148
+ }
149
+ else {
150
+ this.config.web.port = port;
151
+ }
152
+ await this.saveConfig();
153
+ }
154
+ // ===== AI API 网关配置 =====
155
+ getAIGatewayConfig() {
156
+ return this.config.aiGateway;
157
+ }
158
+ getAIProviders() {
159
+ return this.config.providers || [];
160
+ }
161
+ getAIProviderBySlug(slug) {
162
+ return this.getAIProviders().find(p => p.slug === slug);
163
+ }
164
+ addAIProvider(provider) {
165
+ if (!isValidProviderSlug(provider.slug)) {
166
+ return false;
167
+ }
168
+ if (this.getAIProviderBySlug(provider.slug)) {
169
+ return false;
170
+ }
171
+ if (!this.config.providers) {
172
+ this.config.providers = [];
173
+ }
174
+ this.config.providers.push(provider);
175
+ this.saveConfig().catch(err => console.error('Failed to save config:', err));
176
+ this.emit('ai-providers-changed');
177
+ return true;
178
+ }
179
+ updateAIProvider(id, updates) {
180
+ const provider = this.getAIProviders().find(p => p.id === id);
181
+ if (!provider) {
182
+ return false;
183
+ }
184
+ // 改 slug 时校验格式与唯一性(排除自身)
185
+ if (updates.slug !== undefined && updates.slug !== provider.slug) {
186
+ if (!isValidProviderSlug(updates.slug) || this.getAIProviderBySlug(updates.slug)) {
187
+ return false;
188
+ }
189
+ }
190
+ for (const [key, value] of Object.entries(updates)) {
191
+ if (key === 'id') {
192
+ continue; // id 不可改
193
+ }
194
+ if (key === 'apiKey' && value === '') {
195
+ continue; // 空串 = 不修改
196
+ }
197
+ provider[key] = value;
198
+ }
199
+ this.saveConfig().catch(err => console.error('Failed to save config:', err));
200
+ this.emit('ai-providers-changed');
201
+ return true;
202
+ }
203
+ removeAIProvider(id) {
204
+ if (!this.config.providers) {
205
+ return false;
206
+ }
207
+ const index = this.config.providers.findIndex(p => p.id === id);
208
+ if (index === -1) {
209
+ return false;
210
+ }
211
+ this.config.providers.splice(index, 1);
212
+ this.saveConfig().catch(err => console.error('Failed to save config:', err));
213
+ this.emit('ai-providers-changed');
214
+ return true;
215
+ }
216
+ async setAIGateway(cfg) {
217
+ this.config.aiGateway = cfg;
218
+ await this.saveConfig();
219
+ }
220
+ getConfig() {
221
+ return this.config;
222
+ }
223
+ setConfig(config) {
224
+ this.config = config;
225
+ }
226
+ getConfigPath() {
227
+ return this.configPath;
228
+ }
229
+ getServerConfig(serverName) {
230
+ return this.config.servers[serverName];
231
+ }
232
+ getServer(serverName) {
233
+ return this.config.servers[serverName];
234
+ }
235
+ getAllServers() {
236
+ return this.config.servers;
237
+ }
238
+ getServers() {
239
+ return this.config.servers;
240
+ }
241
+ getEnabledServers() {
242
+ const servers = {};
243
+ for (const [name, config] of Object.entries(this.config.servers)) {
244
+ if (config.enabled !== false) { // Default to enabled if not specified
245
+ servers[name] = config;
246
+ }
247
+ }
248
+ return servers;
249
+ }
250
+ toggleServer(name, enabled) {
251
+ if (this.config.servers[name]) {
252
+ this.config.servers[name].enabled = enabled;
253
+ // Emit server-toggled event so MCPDogServer can handle connection/disconnection
254
+ this.emit('server-toggled', { name, enabled });
255
+ return true;
256
+ }
257
+ return false;
258
+ }
259
+ addServer(name, config) {
260
+ // Validate server name
261
+ const validation = ServerNameValidator.validateServerName(name);
262
+ if (!validation.valid) {
263
+ throw new Error(`Invalid server name: ${validation.error}`);
264
+ }
265
+ // Check for name conflicts
266
+ if (this.config.servers[name]) {
267
+ throw new Error(`Server "${name}" already exists`);
268
+ }
269
+ // Ensure name field matches the key
270
+ const finalConfig = { ...config, name };
271
+ this.config.servers[name] = finalConfig;
272
+ // Emit server-added event
273
+ this.emit('server-added', { name, config: finalConfig });
274
+ return true;
275
+ }
276
+ removeServer(name) {
277
+ if (this.config.servers[name]) {
278
+ delete this.config.servers[name];
279
+ // Emit server-removed event
280
+ this.emit('server-removed', { name });
281
+ return true;
282
+ }
283
+ return false;
284
+ }
285
+ updateServer(name, config) {
286
+ if (!this.config.servers[name]) {
287
+ return false;
288
+ }
289
+ // If name is being updated, validate the new name
290
+ if (config.name && config.name !== name) {
291
+ const validation = ServerNameValidator.validateServerName(config.name);
292
+ if (!validation.valid) {
293
+ throw new Error(`Invalid server name: ${validation.error}`);
294
+ }
295
+ // Check for name conflicts with other servers
296
+ if (this.config.servers[config.name]) {
297
+ throw new Error(`Server "${config.name}" already exists`);
298
+ }
299
+ // Rename the server
300
+ const oldConfig = this.config.servers[name];
301
+ delete this.config.servers[name];
302
+ this.config.servers[config.name] = { ...oldConfig, ...config };
303
+ // Emit server-renamed event
304
+ this.emit('server-renamed', { oldName: name, newName: config.name, config: this.config.servers[config.name] });
305
+ }
306
+ else {
307
+ // Update existing server
308
+ const merged = { ...this.config.servers[name], ...config };
309
+ // 切换传输类型时清理不相关字段
310
+ if (config.transport && config.transport !== this.config.servers[name].transport) {
311
+ if (config.transport === 'stdio') {
312
+ delete merged.endpoint;
313
+ delete merged.url;
314
+ delete merged.apiKey;
315
+ delete merged.headers;
316
+ }
317
+ else {
318
+ delete merged.command;
319
+ delete merged.args;
320
+ delete merged.cwd;
321
+ delete merged.env;
322
+ }
323
+ }
324
+ this.config.servers[name] = merged;
325
+ // Emit server-updated event
326
+ this.emit('server-updated', { name, config: this.config.servers[name] });
327
+ }
328
+ return true;
329
+ }
330
+ /**
331
+ * Rename a server
332
+ */
333
+ renameServer(oldName, newName) {
334
+ if (!this.config.servers[oldName]) {
335
+ return false;
336
+ }
337
+ const validation = ServerNameValidator.validateServerName(newName);
338
+ if (!validation.valid) {
339
+ throw new Error(`Invalid server name: ${validation.error}`);
340
+ }
341
+ if (this.config.servers[newName]) {
342
+ throw new Error(`Server "${newName}" already exists`);
343
+ }
344
+ const config = this.config.servers[oldName];
345
+ delete this.config.servers[oldName];
346
+ this.config.servers[newName] = { ...config, name: newName };
347
+ // Emit server-renamed event
348
+ this.emit('server-renamed', { oldName, newName, config: this.config.servers[newName] });
349
+ return true;
350
+ }
351
+ /**
352
+ * Generate a unique server name
353
+ */
354
+ generateUniqueServerName(baseName) {
355
+ const existingNames = Object.keys(this.config.servers);
356
+ return ServerNameValidator.generateUniqueName(baseName, existingNames);
357
+ }
358
+ /**
359
+ * Validate server name
360
+ */
361
+ validateServerName(name) {
362
+ return ServerNameValidator.validateServerName(name);
363
+ }
364
+ /**
365
+ * Check if server name conflicts with existing names
366
+ */
367
+ checkServerNameConflict(name) {
368
+ return ServerNameValidator.checkNameConflict(name, Object.keys(this.config.servers));
369
+ }
370
+ /**
371
+ * Start watching config file
372
+ */
373
+ async startWatching() {
374
+ return this.watchConfig();
375
+ }
376
+ /**
377
+ * Watch config file for changes and reload
378
+ */
379
+ async watchConfig() {
380
+ if (this.watchAbortController) {
381
+ return; // Already watching
382
+ }
383
+ this.watchAbortController = new AbortController();
384
+ try {
385
+ const watcher = fs.watch(this.configPath, { signal: this.watchAbortController.signal });
386
+ for await (const event of watcher) {
387
+ if (event.eventType === 'change') {
388
+ try {
389
+ await this.loadConfig();
390
+ this.emit('configChanged', this.config);
391
+ }
392
+ catch (error) {
393
+ this.emit('configError', error);
394
+ }
395
+ }
396
+ }
397
+ }
398
+ catch (error) {
399
+ if (error.name !== 'AbortError') {
400
+ this.emit('configError', error);
401
+ }
402
+ }
403
+ }
404
+ /**
405
+ * Stop watching config file
406
+ */
407
+ stopWatching() {
408
+ if (this.watchAbortController) {
409
+ this.watchAbortController.abort();
410
+ this.watchAbortController = undefined;
411
+ }
412
+ }
413
+ /**
414
+ * Validate configuration structure
415
+ */
416
+ validateConfig(config) {
417
+ const configToValidate = config || this.config;
418
+ const errors = [];
419
+ if (!configToValidate.servers || typeof configToValidate.servers !== 'object') {
420
+ errors.push('Config must have a "servers" object');
421
+ }
422
+ else {
423
+ for (const [name, serverConfig] of Object.entries(configToValidate.servers)) {
424
+ if (!serverConfig.command) {
425
+ errors.push(`Server "${name}" must have a command`);
426
+ }
427
+ if (serverConfig.args && !Array.isArray(serverConfig.args)) {
428
+ errors.push(`Server "${name}" args must be an array`);
429
+ }
430
+ if (serverConfig.env && typeof serverConfig.env !== 'object') {
431
+ errors.push(`Server "${name}" env must be an object`);
432
+ }
433
+ }
434
+ }
435
+ return {
436
+ valid: errors.length === 0,
437
+ errors
438
+ };
439
+ }
440
+ /**
441
+ * Optimize configuration by detecting protocols and suggesting improvements
442
+ */
443
+ async optimizeConfig() {
444
+ const suggestions = [];
445
+ for (const [name, serverConfig] of Object.entries(this.config.servers)) {
446
+ try {
447
+ const detection = await this.detectConfigProtocol(serverConfig);
448
+ if (detection.issues.length > 0) {
449
+ suggestions.push({
450
+ config: detection.suggestedConfig || serverConfig,
451
+ confidence: 0.8,
452
+ alternatives: [],
453
+ warnings: [`Detected issues with ${name}`],
454
+ optimizations: [`Server optimization available for ${name}`]
455
+ });
456
+ }
457
+ }
458
+ catch (error) {
459
+ suggestions.push({
460
+ config: serverConfig,
461
+ confidence: 0.1,
462
+ alternatives: [],
463
+ warnings: [`Server ${name} has configuration errors: ${error.message}`],
464
+ optimizations: []
465
+ });
466
+ }
467
+ }
468
+ return suggestions;
469
+ }
470
+ /**
471
+ * Apply configuration suggestions
472
+ */
473
+ async applySuggestions(suggestions) {
474
+ for (const suggestion of suggestions) {
475
+ if (suggestion.config && suggestion.config.name) {
476
+ this.config.servers[suggestion.config.name] = suggestion.config;
477
+ }
478
+ }
479
+ await this.saveConfig();
480
+ }
481
+ /**
482
+ * Export configuration for backup or sharing
483
+ */
484
+ exportConfig() {
485
+ return JSON.stringify(this.config, null, 2);
486
+ }
487
+ /**
488
+ * Import configuration from JSON string
489
+ */
490
+ async importConfig(configJson) {
491
+ try {
492
+ const config = JSON.parse(configJson);
493
+ const validation = this.validateConfig(config);
494
+ if (!validation.valid) {
495
+ throw new Error(`Invalid configuration: ${validation.errors.join(', ')}`);
496
+ }
497
+ this.config = {
498
+ ...this.getDefaultConfig(),
499
+ ...config
500
+ };
501
+ await this.saveConfig();
502
+ }
503
+ catch (error) {
504
+ throw new Error(`Failed to import configuration: ${error.message}`);
505
+ }
506
+ }
507
+ /**
508
+ * Get configuration statistics
509
+ */
510
+ getConfigStats() {
511
+ return {
512
+ serverCount: Object.keys(this.config.servers).length,
513
+ totalTools: 0, // This would need to be calculated from actual server connections
514
+ configSize: JSON.stringify(this.config).length,
515
+ lastModified: undefined // This would need file stats
516
+ };
517
+ }
518
+ // Legacy compatibility methods
519
+ generateAutoConfig() {
520
+ return Promise.resolve([this.config]);
521
+ }
522
+ // Internal method that returns ConfigSuggestion[]
523
+ async generateConfigSuggestionsInternal() {
524
+ const suggestions = [];
525
+ for (const [name, serverConfig] of Object.entries(this.config.servers)) {
526
+ suggestions.push({
527
+ config: serverConfig,
528
+ confidence: 0.9,
529
+ alternatives: [],
530
+ warnings: [],
531
+ optimizations: []
532
+ });
533
+ }
534
+ return suggestions;
535
+ }
536
+ // Legacy method that returns MCPDogConfig[] for compatibility
537
+ generateConfigSuggestions() {
538
+ return this.generateAutoConfig();
539
+ }
540
+ detectConfigProtocol(config) {
541
+ return Promise.resolve({ protocol: "stdio", issues: [] });
542
+ }
543
+ validateServerConfig(config) {
544
+ const errors = [];
545
+ if (!config.command && config.transport === "stdio") {
546
+ errors.push("Command is required for stdio transport");
547
+ }
548
+ return { valid: errors.length === 0, errors };
549
+ }
550
+ optimizeServerConfig(name) {
551
+ return Promise.resolve({ optimizations: [] });
552
+ }
553
+ auditAllServerProtocols() {
554
+ const results = {};
555
+ for (const name of Object.keys(this.config.servers)) {
556
+ results[name] = { protocol: "stdio", issues: [] };
557
+ }
558
+ return Promise.resolve(results);
559
+ }
560
+ toggleTool(serverName, toolName, enabled) {
561
+ // This would need actual implementation based on your tool management system
562
+ return true;
563
+ }
564
+ }
565
+ // AI 供应商 slug 格式:小写字母/数字开头,后续小写字母/数字/连字符
566
+ export function isValidProviderSlug(slug) {
567
+ return /^[a-z0-9][a-z0-9-]*$/.test(slug);
568
+ }
569
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.test.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.test.ts"],"names":[],"mappings":""}