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.
- package/LICENSE +22 -0
- package/README.md +244 -0
- package/dist/adapters/adapter-factory.d.ts +21 -0
- package/dist/adapters/adapter-factory.d.ts.map +1 -0
- package/dist/adapters/adapter-factory.js +157 -0
- package/dist/adapters/adapter-factory.js.map +1 -0
- package/dist/adapters/http-sse-adapter.d.ts +49 -0
- package/dist/adapters/http-sse-adapter.d.ts.map +1 -0
- package/dist/adapters/http-sse-adapter.js +485 -0
- package/dist/adapters/http-sse-adapter.js.map +1 -0
- package/dist/adapters/stdio-adapter.d.ts +69 -0
- package/dist/adapters/stdio-adapter.d.ts.map +1 -0
- package/dist/adapters/stdio-adapter.js +664 -0
- package/dist/adapters/stdio-adapter.js.map +1 -0
- package/dist/adapters/streamable-http-adapter.d.ts +38 -0
- package/dist/adapters/streamable-http-adapter.d.ts.map +1 -0
- package/dist/adapters/streamable-http-adapter.js +321 -0
- package/dist/adapters/streamable-http-adapter.js.map +1 -0
- package/dist/ai-gateway/anthropic-errors.d.ts +4 -0
- package/dist/ai-gateway/anthropic-errors.d.ts.map +1 -0
- package/dist/ai-gateway/anthropic-errors.js +17 -0
- package/dist/ai-gateway/anthropic-errors.js.map +1 -0
- package/dist/ai-gateway/auth.d.ts +3 -0
- package/dist/ai-gateway/auth.d.ts.map +1 -0
- package/dist/ai-gateway/auth.js +14 -0
- package/dist/ai-gateway/auth.js.map +1 -0
- package/dist/ai-gateway/auth.test.d.ts +2 -0
- package/dist/ai-gateway/auth.test.d.ts.map +1 -0
- package/dist/ai-gateway/auth.test.js +57 -0
- package/dist/ai-gateway/auth.test.js.map +1 -0
- package/dist/ai-gateway/count-tokens.d.ts +5 -0
- package/dist/ai-gateway/count-tokens.d.ts.map +1 -0
- package/dist/ai-gateway/count-tokens.js +37 -0
- package/dist/ai-gateway/count-tokens.js.map +1 -0
- package/dist/ai-gateway/count-tokens.test.d.ts +2 -0
- package/dist/ai-gateway/count-tokens.test.d.ts.map +1 -0
- package/dist/ai-gateway/count-tokens.test.js +19 -0
- package/dist/ai-gateway/count-tokens.test.js.map +1 -0
- package/dist/ai-gateway/dialects.d.ts +4 -0
- package/dist/ai-gateway/dialects.d.ts.map +1 -0
- package/dist/ai-gateway/dialects.js +15 -0
- package/dist/ai-gateway/dialects.js.map +1 -0
- package/dist/ai-gateway/gateway-server.d.ts +15 -0
- package/dist/ai-gateway/gateway-server.d.ts.map +1 -0
- package/dist/ai-gateway/gateway-server.js +121 -0
- package/dist/ai-gateway/gateway-server.js.map +1 -0
- package/dist/ai-gateway/integration.test.d.ts +2 -0
- package/dist/ai-gateway/integration.test.d.ts.map +1 -0
- package/dist/ai-gateway/integration.test.js +205 -0
- package/dist/ai-gateway/integration.test.js.map +1 -0
- package/dist/ai-gateway/ir/anthropic-in.d.ts +3 -0
- package/dist/ai-gateway/ir/anthropic-in.d.ts.map +1 -0
- package/dist/ai-gateway/ir/anthropic-in.js +121 -0
- package/dist/ai-gateway/ir/anthropic-in.js.map +1 -0
- package/dist/ai-gateway/ir/anthropic-in.test.d.ts +2 -0
- package/dist/ai-gateway/ir/anthropic-in.test.d.ts.map +1 -0
- package/dist/ai-gateway/ir/anthropic-in.test.js +93 -0
- package/dist/ai-gateway/ir/anthropic-in.test.js.map +1 -0
- package/dist/ai-gateway/ir/anthropic-sse.d.ts +22 -0
- package/dist/ai-gateway/ir/anthropic-sse.d.ts.map +1 -0
- package/dist/ai-gateway/ir/anthropic-sse.js +200 -0
- package/dist/ai-gateway/ir/anthropic-sse.js.map +1 -0
- package/dist/ai-gateway/ir/anthropic-sse.test.d.ts +2 -0
- package/dist/ai-gateway/ir/anthropic-sse.test.d.ts.map +1 -0
- package/dist/ai-gateway/ir/anthropic-sse.test.js +101 -0
- package/dist/ai-gateway/ir/anthropic-sse.test.js.map +1 -0
- package/dist/ai-gateway/ir/gemini-out.d.ts +20 -0
- package/dist/ai-gateway/ir/gemini-out.d.ts.map +1 -0
- package/dist/ai-gateway/ir/gemini-out.js +218 -0
- package/dist/ai-gateway/ir/gemini-out.js.map +1 -0
- package/dist/ai-gateway/ir/gemini-out.test.d.ts +2 -0
- package/dist/ai-gateway/ir/gemini-out.test.d.ts.map +1 -0
- package/dist/ai-gateway/ir/gemini-out.test.js +125 -0
- package/dist/ai-gateway/ir/gemini-out.test.js.map +1 -0
- package/dist/ai-gateway/ir/openai-out.d.ts +17 -0
- package/dist/ai-gateway/ir/openai-out.d.ts.map +1 -0
- package/dist/ai-gateway/ir/openai-out.js +226 -0
- package/dist/ai-gateway/ir/openai-out.js.map +1 -0
- package/dist/ai-gateway/ir/openai-out.test.d.ts +2 -0
- package/dist/ai-gateway/ir/openai-out.test.d.ts.map +1 -0
- package/dist/ai-gateway/ir/openai-out.test.js +144 -0
- package/dist/ai-gateway/ir/openai-out.test.js.map +1 -0
- package/dist/ai-gateway/ir/types.d.ts +77 -0
- package/dist/ai-gateway/ir/types.d.ts.map +1 -0
- package/dist/ai-gateway/ir/types.js +4 -0
- package/dist/ai-gateway/ir/types.js.map +1 -0
- package/dist/ai-gateway/ir-channel.d.ts +15 -0
- package/dist/ai-gateway/ir-channel.d.ts.map +1 -0
- package/dist/ai-gateway/ir-channel.js +120 -0
- package/dist/ai-gateway/ir-channel.js.map +1 -0
- package/dist/ai-gateway/model-router.d.ts +11 -0
- package/dist/ai-gateway/model-router.d.ts.map +1 -0
- package/dist/ai-gateway/model-router.js +27 -0
- package/dist/ai-gateway/model-router.js.map +1 -0
- package/dist/ai-gateway/model-router.test.d.ts +2 -0
- package/dist/ai-gateway/model-router.test.d.ts.map +1 -0
- package/dist/ai-gateway/model-router.test.js +43 -0
- package/dist/ai-gateway/model-router.test.js.map +1 -0
- package/dist/ai-gateway/passthrough.d.ts +9 -0
- package/dist/ai-gateway/passthrough.d.ts.map +1 -0
- package/dist/ai-gateway/passthrough.js +81 -0
- package/dist/ai-gateway/passthrough.js.map +1 -0
- package/dist/ai-gateway/passthrough.test.d.ts +2 -0
- package/dist/ai-gateway/passthrough.test.d.ts.map +1 -0
- package/dist/ai-gateway/passthrough.test.js +108 -0
- package/dist/ai-gateway/passthrough.test.js.map +1 -0
- package/dist/ai-gateway/upstream/model-lister.d.ts +13 -0
- package/dist/ai-gateway/upstream/model-lister.d.ts.map +1 -0
- package/dist/ai-gateway/upstream/model-lister.js +61 -0
- package/dist/ai-gateway/upstream/model-lister.js.map +1 -0
- package/dist/ai-gateway/upstream/provider-client.d.ts +20 -0
- package/dist/ai-gateway/upstream/provider-client.d.ts.map +1 -0
- package/dist/ai-gateway/upstream/provider-client.js +76 -0
- package/dist/ai-gateway/upstream/provider-client.js.map +1 -0
- package/dist/ai-gateway/upstream/provider-client.test.d.ts +2 -0
- package/dist/ai-gateway/upstream/provider-client.test.d.ts.map +1 -0
- package/dist/ai-gateway/upstream/provider-client.test.js +69 -0
- package/dist/ai-gateway/upstream/provider-client.test.js.map +1 -0
- package/dist/cli/cli-main.d.ts +7 -0
- package/dist/cli/cli-main.d.ts.map +1 -0
- package/dist/cli/cli-main.js +116 -0
- package/dist/cli/cli-main.js.map +1 -0
- package/dist/cli/cli-router.d.ts +20 -0
- package/dist/cli/cli-router.d.ts.map +1 -0
- package/dist/cli/cli-router.js +271 -0
- package/dist/cli/cli-router.js.map +1 -0
- package/dist/cli/cli-utils.d.ts +30 -0
- package/dist/cli/cli-utils.d.ts.map +1 -0
- package/dist/cli/cli-utils.js +219 -0
- package/dist/cli/cli-utils.js.map +1 -0
- package/dist/cli/commands/audit-commands.d.ts +30 -0
- package/dist/cli/commands/audit-commands.d.ts.map +1 -0
- package/dist/cli/commands/audit-commands.js +417 -0
- package/dist/cli/commands/audit-commands.js.map +1 -0
- package/dist/cli/commands/autostart-command.d.ts +21 -0
- package/dist/cli/commands/autostart-command.d.ts.map +1 -0
- package/dist/cli/commands/autostart-command.js +243 -0
- package/dist/cli/commands/autostart-command.js.map +1 -0
- package/dist/cli/commands/autostart-command.test.d.ts +2 -0
- package/dist/cli/commands/autostart-command.test.d.ts.map +1 -0
- package/dist/cli/commands/autostart-command.test.js +35 -0
- package/dist/cli/commands/autostart-command.test.js.map +1 -0
- package/dist/cli/commands/config-commands.d.ts +30 -0
- package/dist/cli/commands/config-commands.d.ts.map +1 -0
- package/dist/cli/commands/config-commands.js +1013 -0
- package/dist/cli/commands/config-commands.js.map +1 -0
- package/dist/cli/commands/daemon-commands.d.ts +76 -0
- package/dist/cli/commands/daemon-commands.d.ts.map +1 -0
- package/dist/cli/commands/daemon-commands.js +451 -0
- package/dist/cli/commands/daemon-commands.js.map +1 -0
- package/dist/cli/commands/detect-commands.d.ts +17 -0
- package/dist/cli/commands/detect-commands.d.ts.map +1 -0
- package/dist/cli/commands/detect-commands.js +293 -0
- package/dist/cli/commands/detect-commands.js.map +1 -0
- package/dist/cli/commands/diagnose-commands.d.ts +19 -0
- package/dist/cli/commands/diagnose-commands.d.ts.map +1 -0
- package/dist/cli/commands/diagnose-commands.js +326 -0
- package/dist/cli/commands/diagnose-commands.js.map +1 -0
- package/dist/cli/commands/optimize-commands.d.ts +14 -0
- package/dist/cli/commands/optimize-commands.d.ts.map +1 -0
- package/dist/cli/commands/optimize-commands.js +189 -0
- package/dist/cli/commands/optimize-commands.js.map +1 -0
- package/dist/cli/commands/proxy-command.d.ts +27 -0
- package/dist/cli/commands/proxy-command.d.ts.map +1 -0
- package/dist/cli/commands/proxy-command.js +212 -0
- package/dist/cli/commands/proxy-command.js.map +1 -0
- package/dist/cli/commands/start-command.d.ts +22 -0
- package/dist/cli/commands/start-command.d.ts.map +1 -0
- package/dist/cli/commands/start-command.js +275 -0
- package/dist/cli/commands/start-command.js.map +1 -0
- package/dist/config/config-manager.d.ts +125 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +569 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/config-manager.test.d.ts +2 -0
- package/dist/config/config-manager.test.d.ts.map +1 -0
- package/dist/config/config-manager.test.js +209 -0
- package/dist/config/config-manager.test.js.map +1 -0
- package/dist/core/auto-config-generator.d.ts +55 -0
- package/dist/core/auto-config-generator.d.ts.map +1 -0
- package/dist/core/auto-config-generator.js +278 -0
- package/dist/core/auto-config-generator.js.map +1 -0
- package/dist/core/mcpdog-server.d.ts +49 -0
- package/dist/core/mcpdog-server.d.ts.map +1 -0
- package/dist/core/mcpdog-server.js +552 -0
- package/dist/core/mcpdog-server.js.map +1 -0
- package/dist/core/protocol-detector.d.ts +56 -0
- package/dist/core/protocol-detector.d.ts.map +1 -0
- package/dist/core/protocol-detector.js +365 -0
- package/dist/core/protocol-detector.js.map +1 -0
- package/dist/daemon/daemon-client.d.ts +34 -0
- package/dist/daemon/daemon-client.d.ts.map +1 -0
- package/dist/daemon/daemon-client.js +130 -0
- package/dist/daemon/daemon-client.js.map +1 -0
- package/dist/daemon/daemon-client.test.d.ts +2 -0
- package/dist/daemon/daemon-client.test.d.ts.map +1 -0
- package/dist/daemon/daemon-client.test.js +77 -0
- package/dist/daemon/daemon-client.test.js.map +1 -0
- package/dist/daemon/daemon-info.d.ts +7 -0
- package/dist/daemon/daemon-info.d.ts.map +1 -0
- package/dist/daemon/daemon-info.js +34 -0
- package/dist/daemon/daemon-info.js.map +1 -0
- package/dist/daemon/daemon-info.test.d.ts +2 -0
- package/dist/daemon/daemon-info.test.d.ts.map +1 -0
- package/dist/daemon/daemon-info.test.js +57 -0
- package/dist/daemon/daemon-info.test.js.map +1 -0
- package/dist/daemon/daemon-web-server.ai.test.d.ts +2 -0
- package/dist/daemon/daemon-web-server.ai.test.d.ts.map +1 -0
- package/dist/daemon/daemon-web-server.ai.test.js +119 -0
- package/dist/daemon/daemon-web-server.ai.test.js.map +1 -0
- package/dist/daemon/daemon-web-server.d.ts +59 -0
- package/dist/daemon/daemon-web-server.d.ts.map +1 -0
- package/dist/daemon/daemon-web-server.js +1236 -0
- package/dist/daemon/daemon-web-server.js.map +1 -0
- package/dist/daemon/daemon-web-server.test.d.ts +2 -0
- package/dist/daemon/daemon-web-server.test.d.ts.map +1 -0
- package/dist/daemon/daemon-web-server.test.js +93 -0
- package/dist/daemon/daemon-web-server.test.js.map +1 -0
- package/dist/daemon/mcpdog-daemon.d.ts +42 -0
- package/dist/daemon/mcpdog-daemon.d.ts.map +1 -0
- package/dist/daemon/mcpdog-daemon.js +302 -0
- package/dist/daemon/mcpdog-daemon.js.map +1 -0
- package/dist/daemon/stdio-proxy.d.ts +17 -0
- package/dist/daemon/stdio-proxy.d.ts.map +1 -0
- package/dist/daemon/stdio-proxy.js +143 -0
- package/dist/daemon/stdio-proxy.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +198 -0
- package/dist/index.js.map +1 -0
- package/dist/intent-analyzer.d.ts +27 -0
- package/dist/intent-analyzer.d.ts.map +1 -0
- package/dist/intent-analyzer.js +140 -0
- package/dist/intent-analyzer.js.map +1 -0
- package/dist/logging/server-log-manager.d.ts +75 -0
- package/dist/logging/server-log-manager.d.ts.map +1 -0
- package/dist/logging/server-log-manager.js +185 -0
- package/dist/logging/server-log-manager.js.map +1 -0
- package/dist/mcp-registry.d.ts +35 -0
- package/dist/mcp-registry.d.ts.map +1 -0
- package/dist/mcp-registry.js +166 -0
- package/dist/mcp-registry.js.map +1 -0
- package/dist/middleware/auth.d.ts +5 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +81 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/mock-tool-database.d.ts +41 -0
- package/dist/mock-tool-database.d.ts.map +1 -0
- package/dist/mock-tool-database.js +461 -0
- package/dist/mock-tool-database.js.map +1 -0
- package/dist/proxy-server-manager.d.ts +11 -0
- package/dist/proxy-server-manager.d.ts.map +1 -0
- package/dist/proxy-server-manager.js +144 -0
- package/dist/proxy-server-manager.js.map +1 -0
- package/dist/router/tool-router.d.ts +61 -0
- package/dist/router/tool-router.d.ts.map +1 -0
- package/dist/router/tool-router.js +539 -0
- package/dist/router/tool-router.js.map +1 -0
- package/dist/router/tool-router.test.d.ts +2 -0
- package/dist/router/tool-router.test.d.ts.map +1 -0
- package/dist/router/tool-router.test.js +113 -0
- package/dist/router/tool-router.test.js.map +1 -0
- package/dist/streamable-http-server.d.ts +27 -0
- package/dist/streamable-http-server.d.ts.map +1 -0
- package/dist/streamable-http-server.js +302 -0
- package/dist/streamable-http-server.js.map +1 -0
- package/dist/tool-finder.d.ts +21 -0
- package/dist/tool-finder.d.ts.map +1 -0
- package/dist/tool-finder.js +86 -0
- package/dist/tool-finder.js.map +1 -0
- package/dist/tool-recommender.d.ts +23 -0
- package/dist/tool-recommender.d.ts.map +1 -0
- package/dist/tool-recommender.js +200 -0
- package/dist/tool-recommender.js.map +1 -0
- package/dist/types/index.d.ts +145 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/server-name-validator.d.ts +47 -0
- package/dist/utils/server-name-validator.d.ts.map +1 -0
- package/dist/utils/server-name-validator.js +156 -0
- package/dist/utils/server-name-validator.js.map +1 -0
- package/dist/web/web-server.d.ts +44 -0
- package/dist/web/web-server.d.ts.map +1 -0
- package/dist/web/web-server.js +500 -0
- package/dist/web/web-server.js.map +1 -0
- package/package.json +68 -0
- package/web/dist/assets/index-DMVhVtNU.css +1 -0
- package/web/dist/assets/index-VMXIgcOH.js +92 -0
- package/web/dist/assets/index-VMXIgcOH.js.map +1 -0
- package/web/dist/index.html +14 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autostart command - daemon 开机自启管理
|
|
3
|
+
* Windows: HKCU Run 注册表键 + ~/.mcpdog 下隐藏 VBS 启动器
|
|
4
|
+
* macOS: LaunchAgent (~/Library/LaunchAgents/com.mcpdog.daemon.plist)
|
|
5
|
+
* Linux: systemd user unit (~/.config/systemd/user/mcpdog.service)
|
|
6
|
+
*/
|
|
7
|
+
import { CLIUtils } from '../cli-utils.js';
|
|
8
|
+
import { promises as fs, realpathSync } from 'fs';
|
|
9
|
+
import { exec } from 'child_process';
|
|
10
|
+
import { promisify } from 'util';
|
|
11
|
+
import os from 'os';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
const execAsync = promisify(exec);
|
|
14
|
+
// 注册位置常量:Windows HKCU Run 键 + VBS;macOS LaunchAgent;Linux systemd user unit
|
|
15
|
+
const WIN_RUN_KEY = 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run';
|
|
16
|
+
const AUTOSTART_NAME = 'MCPDogDaemon';
|
|
17
|
+
const PLIST_LABEL = 'com.mcpdog.daemon';
|
|
18
|
+
// 从当前进程解析启动命令:node 绝对路径 + cli-main.js 绝对路径(不依赖 PATH)
|
|
19
|
+
// node 路径经 realpath 解析:fnm/nvm 等版本管理器返回会话级临时符号链接(如 fnm_multishells),重启后失效
|
|
20
|
+
export function buildDaemonStartCommand() {
|
|
21
|
+
let nodePath = process.execPath;
|
|
22
|
+
try {
|
|
23
|
+
nodePath = realpathSync(process.execPath);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// 解析失败沿用原路径
|
|
27
|
+
}
|
|
28
|
+
const cliPath = process.argv[1] || '';
|
|
29
|
+
return { nodePath, cliPath, fromNpxCache: cliPath.includes('_npx') };
|
|
30
|
+
}
|
|
31
|
+
// vbs 字符串内双引号写作 "";WScript.Shell.Run 直接 CreateProcess(不经 cmd),窗口样式 0 = 隐藏
|
|
32
|
+
// 注意保持纯 ASCII:wscript 按系统 ANSI 代码页解析 .vbs,非 ASCII 注释有编码风险
|
|
33
|
+
export function buildWindowsVbs(nodePath, cliPath) {
|
|
34
|
+
return `' MCPDog daemon autostart (generated by: agentdog daemon autostart --enable)\n`
|
|
35
|
+
+ `' Check: agentdog daemon status | Remove: agentdog daemon autostart --disable\n`
|
|
36
|
+
+ `CreateObject("WScript.Shell").Run """${nodePath}"" ""${cliPath}"" daemon start --no-color", 0, False\n`;
|
|
37
|
+
}
|
|
38
|
+
export function buildLaunchAgentPlist(nodePath, cliPath, logFile) {
|
|
39
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
40
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
41
|
+
<plist version="1.0">
|
|
42
|
+
<dict>
|
|
43
|
+
<key>Label</key>
|
|
44
|
+
<string>com.mcpdog.daemon</string>
|
|
45
|
+
<key>ProgramArguments</key>
|
|
46
|
+
<array>
|
|
47
|
+
<string>${nodePath}</string>
|
|
48
|
+
<string>${cliPath}</string>
|
|
49
|
+
<string>daemon</string>
|
|
50
|
+
<string>start</string>
|
|
51
|
+
<string>--no-color</string>
|
|
52
|
+
</array>
|
|
53
|
+
<key>RunAtLoad</key>
|
|
54
|
+
<true/>
|
|
55
|
+
<key>StandardOutPath</key>
|
|
56
|
+
<string>${logFile}</string>
|
|
57
|
+
<key>StandardErrorPath</key>
|
|
58
|
+
<string>${logFile}</string>
|
|
59
|
+
</dict>
|
|
60
|
+
</plist>
|
|
61
|
+
`;
|
|
62
|
+
}
|
|
63
|
+
export function buildSystemdUnit(nodePath, cliPath) {
|
|
64
|
+
return `[Unit]
|
|
65
|
+
Description=MCPDog daemon
|
|
66
|
+
After=network.target
|
|
67
|
+
|
|
68
|
+
[Service]
|
|
69
|
+
ExecStart="${nodePath}" "${cliPath}" daemon start --no-color
|
|
70
|
+
Restart=on-failure
|
|
71
|
+
RestartSec=5
|
|
72
|
+
|
|
73
|
+
[Install]
|
|
74
|
+
WantedBy=default.target
|
|
75
|
+
`;
|
|
76
|
+
}
|
|
77
|
+
export class AutostartCommand {
|
|
78
|
+
async execute(args, options) {
|
|
79
|
+
if (options.help) {
|
|
80
|
+
this.showHelp();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (options.enable) {
|
|
84
|
+
await this.enable();
|
|
85
|
+
}
|
|
86
|
+
else if (options.disable) {
|
|
87
|
+
await this.disable();
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
await this.status();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
vbsPath() {
|
|
94
|
+
return path.join(os.homedir(), '.mcpdog', 'mcpdog-autostart.vbs');
|
|
95
|
+
}
|
|
96
|
+
plistPath() {
|
|
97
|
+
return path.join(os.homedir(), 'Library', 'LaunchAgents', `${PLIST_LABEL}.plist`);
|
|
98
|
+
}
|
|
99
|
+
unitPath() {
|
|
100
|
+
return path.join(os.homedir(), '.config', 'systemd', 'user', 'mcpdog.service');
|
|
101
|
+
}
|
|
102
|
+
warnIfNpx() {
|
|
103
|
+
const { fromNpxCache } = buildDaemonStartCommand();
|
|
104
|
+
if (fromNpxCache) {
|
|
105
|
+
CLIUtils.warn('当前入口位于 npx 缓存目录,缓存清理/升级后自启可能失效;建议 npm i -g 全局安装后重新 --enable');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async enable() {
|
|
109
|
+
const { nodePath, cliPath } = buildDaemonStartCommand();
|
|
110
|
+
if (!cliPath) {
|
|
111
|
+
CLIUtils.error('无法确定 CLI 入口路径');
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
this.warnIfNpx();
|
|
115
|
+
if (process.platform === 'win32') {
|
|
116
|
+
await fs.mkdir(path.dirname(this.vbsPath()), { recursive: true });
|
|
117
|
+
await fs.writeFile(this.vbsPath(), buildWindowsVbs(nodePath, cliPath), 'utf-8');
|
|
118
|
+
// /d 值本身含引号,需以 \" 转义传给 reg.exe(经 cmd shell 解析)
|
|
119
|
+
await execAsync(`reg add "${WIN_RUN_KEY}" /v ${AUTOSTART_NAME} /t REG_SZ /d "wscript.exe \\"${this.vbsPath()}\\"" /f`);
|
|
120
|
+
CLIUtils.success('已注册开机自启(当前用户登录时启动)');
|
|
121
|
+
CLIUtils.info(`VBS: ${this.vbsPath()}`);
|
|
122
|
+
CLIUtils.info(`Run 键: ${WIN_RUN_KEY} -> ${AUTOSTART_NAME}`);
|
|
123
|
+
}
|
|
124
|
+
else if (process.platform === 'darwin') {
|
|
125
|
+
const logFile = path.join(os.homedir(), '.mcpdog', 'autostart.log');
|
|
126
|
+
await fs.mkdir(path.dirname(this.plistPath()), { recursive: true });
|
|
127
|
+
await fs.mkdir(path.dirname(logFile), { recursive: true });
|
|
128
|
+
await fs.writeFile(this.plistPath(), buildLaunchAgentPlist(nodePath, cliPath, logFile), 'utf-8');
|
|
129
|
+
// 先 unload 忽略未加载错误,再 load 使 RunAtLoad 生效
|
|
130
|
+
await execAsync(`launchctl unload "${this.plistPath()}" 2>/dev/null; launchctl load "${this.plistPath()}"`);
|
|
131
|
+
CLIUtils.success('已注册开机自启(LaunchAgent)');
|
|
132
|
+
CLIUtils.info(`plist: ${this.plistPath()}`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// Linux:enable 只注册不立即启动(--now 会与运行中 daemon 冲突报 failed)
|
|
136
|
+
await fs.mkdir(path.dirname(this.unitPath()), { recursive: true });
|
|
137
|
+
await fs.writeFile(this.unitPath(), buildSystemdUnit(nodePath, cliPath), 'utf-8');
|
|
138
|
+
try {
|
|
139
|
+
await execAsync('systemctl --user daemon-reload && systemctl --user enable mcpdog');
|
|
140
|
+
CLIUtils.success('已注册开机自启(systemd user unit)');
|
|
141
|
+
CLIUtils.info(`unit: ${this.unitPath()}`);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
CLIUtils.error(`systemd user 不可用(${error.message}),请改用桌面环境自启机制手动配置`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async disable() {
|
|
150
|
+
if (process.platform === 'win32') {
|
|
151
|
+
try {
|
|
152
|
+
await execAsync(`reg delete "${WIN_RUN_KEY}" /v ${AUTOSTART_NAME} /f`);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// 键值不存在视为已清理
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
await fs.unlink(this.vbsPath());
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// 文件不存在则忽略
|
|
162
|
+
}
|
|
163
|
+
CLIUtils.success('已移除开机自启');
|
|
164
|
+
}
|
|
165
|
+
else if (process.platform === 'darwin') {
|
|
166
|
+
try {
|
|
167
|
+
await execAsync(`launchctl unload "${this.plistPath()}"`);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// 未加载则忽略
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
await fs.unlink(this.plistPath());
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// 文件不存在则忽略
|
|
177
|
+
}
|
|
178
|
+
CLIUtils.success('已移除开机自启');
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
try {
|
|
182
|
+
await execAsync('systemctl --user disable mcpdog');
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// 未注册则忽略
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
await fs.unlink(this.unitPath());
|
|
189
|
+
await execAsync('systemctl --user daemon-reload');
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
// 文件不存在则忽略
|
|
193
|
+
}
|
|
194
|
+
CLIUtils.success('已移除开机自启');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async status() {
|
|
198
|
+
if (process.platform === 'win32') {
|
|
199
|
+
try {
|
|
200
|
+
const { stdout } = await execAsync(`reg query "${WIN_RUN_KEY}" /v ${AUTOSTART_NAME}`);
|
|
201
|
+
CLIUtils.success('开机自启:已启用');
|
|
202
|
+
CLIUtils.info(stdout.trim());
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
CLIUtils.info('开机自启:未启用(agentdog daemon autostart --enable 开启)');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else if (process.platform === 'darwin') {
|
|
209
|
+
const exists = await fs.access(this.plistPath()).then(() => true).catch(() => false);
|
|
210
|
+
CLIUtils.info(exists
|
|
211
|
+
? '开机自启:已启用(LaunchAgent 已安装)'
|
|
212
|
+
: '开机自启:未启用(agentdog daemon autostart --enable 开启)');
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
try {
|
|
216
|
+
await execAsync('systemctl --user is-enabled mcpdog');
|
|
217
|
+
CLIUtils.info('开机自启:已启用(systemd user unit)');
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
CLIUtils.info('开机自启:未启用(agentdog daemon autostart --enable 开启)');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
showHelp() {
|
|
225
|
+
console.log(`
|
|
226
|
+
${CLIUtils.colorize('agentdog daemon autostart', 'cyan')} - Manage daemon auto-start on login/boot
|
|
227
|
+
|
|
228
|
+
${CLIUtils.colorize('Usage:', 'yellow')}
|
|
229
|
+
agentdog daemon autostart --enable Register auto-start for current user
|
|
230
|
+
agentdog daemon autostart --disable Remove auto-start registration
|
|
231
|
+
agentdog daemon autostart Show current registration status
|
|
232
|
+
|
|
233
|
+
${CLIUtils.colorize('Description:', 'yellow')}
|
|
234
|
+
Windows: HKCU Run registry key + hidden VBS launcher in ~/.mcpdog
|
|
235
|
+
macOS: LaunchAgent (~/Library/LaunchAgents/com.mcpdog.daemon.plist)
|
|
236
|
+
Linux: systemd user unit (~/.config/systemd/user/mcpdog.service)
|
|
237
|
+
|
|
238
|
+
Note: if installed via npx, the registration points into the npx cache and
|
|
239
|
+
may break after cache cleanup - prefer a global install (npm i -g).
|
|
240
|
+
`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=autostart-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autostart-command.js","sourceRoot":"","sources":["../../../src/cli/commands/autostart-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autostart-command.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/autostart-command.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// AutostartCommand 内容生成纯函数测试:三平台启动配置文本
|
|
2
|
+
import { describe, it, expect } from 'vitest';
|
|
3
|
+
import { buildWindowsVbs, buildLaunchAgentPlist, buildSystemdUnit, } from './autostart-command.js';
|
|
4
|
+
describe('buildWindowsVbs', () => {
|
|
5
|
+
it('包含隐藏窗口启动与带引号路径', () => {
|
|
6
|
+
const vbs = buildWindowsVbs('C:\\Program Files\\nodejs\\node.exe', 'C:\\tools\\cli-main.js');
|
|
7
|
+
expect(vbs).toContain('WScript.Shell');
|
|
8
|
+
expect(vbs).toContain('", 0, False'); // 窗口样式 0 = 隐藏
|
|
9
|
+
expect(vbs).toContain('""C:\\Program Files\\nodejs\\node.exe""'); // vbs 内双引号转义
|
|
10
|
+
expect(vbs).toContain('""C:\\tools\\cli-main.js""');
|
|
11
|
+
expect(vbs).toContain('daemon start --no-color');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
describe('buildLaunchAgentPlist', () => {
|
|
15
|
+
it('生成含 Label/RunAtLoad/ProgramArguments 的合法结构', () => {
|
|
16
|
+
const xml = buildLaunchAgentPlist('/usr/local/bin/node', '/opt/mcpdog/cli-main.js', '/tmp/mcpdog.log');
|
|
17
|
+
expect(xml).toContain('<string>com.mcpdog.daemon</string>');
|
|
18
|
+
expect(xml).toContain('<key>RunAtLoad</key>');
|
|
19
|
+
expect(xml).toContain('<string>/usr/local/bin/node</string>');
|
|
20
|
+
expect(xml).toContain('<string>/opt/mcpdog/cli-main.js</string>');
|
|
21
|
+
expect(xml).toContain('<string>daemon</string>');
|
|
22
|
+
expect(xml).toContain('<string>start</string>');
|
|
23
|
+
expect(xml).toContain('<string>/tmp/mcpdog.log</string>');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe('buildSystemdUnit', () => {
|
|
27
|
+
it('生成 user service 单元', () => {
|
|
28
|
+
const unit = buildSystemdUnit('/usr/bin/node', '/opt/mcpdog/cli-main.js');
|
|
29
|
+
expect(unit).toContain('[Unit]');
|
|
30
|
+
expect(unit).toContain('[Service]');
|
|
31
|
+
expect(unit).toContain('ExecStart="/usr/bin/node" "/opt/mcpdog/cli-main.js" daemon start --no-color');
|
|
32
|
+
expect(unit).toContain('WantedBy=default.target');
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=autostart-command.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autostart-command.test.js","sourceRoot":"","sources":["../../../src/cli/commands/autostart-command.test.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,GAAG,GAAG,eAAe,CAAC,qCAAqC,EAAE,wBAAwB,CAAC,CAAC;QAC7F,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAW,cAAc;QAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC,CAAC,aAAa;QAC/E,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,qBAAqB,CAAC,qBAAqB,EAAE,yBAAyB,EAAE,iBAAiB,CAAC,CAAC;QACvG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6EAA6E,CAAC,CAAC;QACtG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Management CLI Commands
|
|
3
|
+
*/
|
|
4
|
+
import { ConfigManager } from '../../config/config-manager.js';
|
|
5
|
+
export declare class ConfigCommands {
|
|
6
|
+
private configManager;
|
|
7
|
+
constructor(configManager: ConfigManager);
|
|
8
|
+
private parseAddOptions;
|
|
9
|
+
execute(args: string[], options: Record<string, any>): Promise<void>;
|
|
10
|
+
private listServers;
|
|
11
|
+
private addServer;
|
|
12
|
+
private removeServer;
|
|
13
|
+
private updateServer;
|
|
14
|
+
private showServer;
|
|
15
|
+
private enableServer;
|
|
16
|
+
private disableServer;
|
|
17
|
+
private generateMCPConfig;
|
|
18
|
+
private initConfig;
|
|
19
|
+
private addCustomServer;
|
|
20
|
+
private askQuestion;
|
|
21
|
+
private validateConfig;
|
|
22
|
+
private validateBasicStructure;
|
|
23
|
+
private validateServers;
|
|
24
|
+
private validateSingleServer;
|
|
25
|
+
private validateWebConfig;
|
|
26
|
+
private validateBestPractices;
|
|
27
|
+
private displayValidationResults;
|
|
28
|
+
private showHelp;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=config-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAc/D,qBAAa,cAAc;IACb,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEhD,OAAO,CAAC,eAAe;IA2CjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YA8C5D,WAAW;YA4BX,SAAS;YAoHT,YAAY;YAiCZ,YAAY;YA6CZ,UAAU;YAqCV,YAAY;YAiBZ,aAAa;YAiBb,iBAAiB;YA0GjB,UAAU;YAyKV,eAAe;YAiEf,WAAW;YAcX,cAAc;IAwE5B,OAAO,CAAC,sBAAsB;IA8C9B,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,oBAAoB;IAuF5B,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,qBAAqB;IA0C7B,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,QAAQ;CA0CjB"}
|