@panguard-ai/panguard-mcp 1.2.0 → 1.3.1

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.
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Platform Detector - Detect installed AI agent runtimes
3
+ * 平台偵測器 - 偵測已安裝的 AI Agent 執行環境
4
+ *
5
+ * Detects 14 platforms: Claude Code, Claude Desktop, Cursor, OpenClaw, Codex,
6
+ * WorkBuddy, NemoClaw, ArkClaw, Windsurf, QClaw, Cline, VS Code Copilot,
7
+ * Zed, Gemini CLI, Continue, Roo Code.
8
+ *
9
+ * @module @panguard-ai/panguard-mcp/config/platform-detector
10
+ */
11
+ export type PlatformId = 'claude-code' | 'claude-desktop' | 'cursor' | 'openclaw' | 'codex' | 'workbuddy' | 'nemoclaw' | 'arkclaw' | 'windsurf' | 'qclaw' | 'cline' | 'vscode-copilot' | 'zed' | 'gemini-cli' | 'continue' | 'roo-code';
12
+ export interface DetectedPlatform {
13
+ id: PlatformId;
14
+ name: string;
15
+ configPath: string;
16
+ detected: boolean;
17
+ alreadyConfigured: boolean;
18
+ }
19
+ /**
20
+ * Detect all supported AI agent platforms.
21
+ * 偵測所有支援的 AI Agent 平台。
22
+ *
23
+ * @returns Array of detected platforms with their config paths and status.
24
+ */
25
+ export declare function detectPlatforms(): Promise<DetectedPlatform[]>;
26
+ /**
27
+ * Get the MCP config path for a specific platform.
28
+ * 取得特定平台的 MCP 設定路徑。
29
+ */
30
+ export declare function getConfigPath(platformId: PlatformId): string;
31
+ //# sourceMappingURL=platform-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../src/config/platform-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5F,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAyFD;;;;;GAKG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsEnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAa5D"}
1
+ {"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../src/config/platform-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,MAAM,UAAU,GAClB,aAAa,GACb,gBAAgB,GAChB,QAAQ,GACR,UAAU,GACV,OAAO,GACP,WAAW,GACX,UAAU,GACV,SAAS,GACT,UAAU,GACV,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,KAAK,GACL,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AA6OD;;;;;GAKG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqOnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAmC5D"}
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Platform Detector - Detect installed AI agent runtimes
3
+ * 平台偵測器 - 偵測已安裝的 AI Agent 執行環境
4
+ *
5
+ * Detects 14 platforms: Claude Code, Claude Desktop, Cursor, OpenClaw, Codex,
6
+ * WorkBuddy, NemoClaw, ArkClaw, Windsurf, QClaw, Cline, VS Code Copilot,
7
+ * Zed, Gemini CLI, Continue, Roo Code.
8
+ *
9
+ * @module @panguard-ai/panguard-mcp/config/platform-detector
10
+ */
11
+ import { existsSync, readFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { homedir, platform } from 'node:os';
14
+ import { execFile, execFileSync } from 'node:child_process';
15
+ import { createLogger } from '@panguard-ai/core';
16
+ const logger = createLogger('panguard-mcp:platform-detector');
17
+ /** Check if a command exists on PATH. */
18
+ function commandExists(cmd) {
19
+ if (!/^[a-zA-Z0-9_.-]+$/.test(cmd))
20
+ return Promise.resolve(false);
21
+ return new Promise((resolve) => {
22
+ const bin = platform() === 'win32' ? 'where' : 'which';
23
+ execFile(bin, [cmd], (err) => resolve(!err));
24
+ });
25
+ }
26
+ /** Check if a JSON config file has a panguard MCP server entry. */
27
+ function hasPanguardMCPEntry(filePath) {
28
+ if (!existsSync(filePath))
29
+ return false;
30
+ try {
31
+ const parsed = JSON.parse(readFileSync(filePath, 'utf-8'));
32
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
33
+ const servers = parsed['mcpServers'];
34
+ if (servers && typeof servers === 'object' && !Array.isArray(servers)) {
35
+ return 'panguard' in servers;
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ catch {
41
+ return false;
42
+ }
43
+ }
44
+ /** Check if Claude Code has panguard MCP configured via `claude mcp list`. */
45
+ function hasClaudeCodePanguard() {
46
+ try {
47
+ const output = execFileSync('claude', ['mcp', 'list'], {
48
+ timeout: 10_000,
49
+ stdio: 'pipe',
50
+ }).toString();
51
+ return output.includes('panguard');
52
+ }
53
+ catch {
54
+ // Fallback: check JSON config
55
+ return hasPanguardMCPEntry(getClaudeCodeConfigPath());
56
+ }
57
+ }
58
+ /** Check if OpenClaw has the panguard skill installed. */
59
+ function hasOpenClawSkill() {
60
+ return existsSync(getOpenClawSkillPath());
61
+ }
62
+ /** Get the MCP config path for Claude Desktop based on OS. */
63
+ function getClaudeDesktopConfigPath() {
64
+ const home = homedir();
65
+ switch (platform()) {
66
+ case 'darwin':
67
+ return join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
68
+ case 'win32':
69
+ return join(process.env['APPDATA'] ?? join(home, 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json');
70
+ default:
71
+ return join(home, '.config', 'claude', 'claude_desktop_config.json');
72
+ }
73
+ }
74
+ /** Get the MCP settings path for Claude Code. */
75
+ function getClaudeCodeConfigPath() {
76
+ return join(homedir(), '.claude', 'settings.local.json');
77
+ }
78
+ /** Get the MCP config path for Cursor. */
79
+ function getCursorConfigPath() {
80
+ return join(homedir(), '.cursor', 'mcp.json');
81
+ }
82
+ /** Get the OpenClaw skill installation path for Panguard. */
83
+ function getOpenClawSkillPath() {
84
+ return join(homedir(), '.openclaw', 'skills', 'panguard', 'SKILL.md');
85
+ }
86
+ /** Get the OpenClaw skills directory for Panguard. */
87
+ function getOpenClawSkillDir() {
88
+ return join(homedir(), '.openclaw', 'skills', 'panguard');
89
+ }
90
+ /** Get the MCP config path for Codex. */
91
+ function getCodexConfigPath() {
92
+ return join(homedir(), '.codex', 'mcp.json');
93
+ }
94
+ /** Get the MCP config path for WorkBuddy. */
95
+ function getWorkbuddyConfigPath() {
96
+ return join(homedir(), '.workbuddy', '.mcp.json');
97
+ }
98
+ /** Get the MCP config path for NemoClaw. */
99
+ function getNemoClawConfigPath() {
100
+ return join(homedir(), '.nemoclaw', 'mcp.json');
101
+ }
102
+ /** Get the MCP config path for ArkClaw (ByteDance). */
103
+ function getArkClawConfigPath() {
104
+ return join(homedir(), '.arkclaw', 'mcp.json');
105
+ }
106
+ /** Get the MCP config path for Windsurf (Codeium). */
107
+ function getWindsurfConfigPath() {
108
+ return join(homedir(), '.codeium', 'windsurf', 'mcp_config.json');
109
+ }
110
+ /** Get the MCP config path for QClaw (Tencent). */
111
+ function getQClawConfigPath() {
112
+ return join(homedir(), '.qclaw', 'mcp.json');
113
+ }
114
+ /** Get the MCP settings path for Cline (VS Code extension). */
115
+ function getClineConfigPath() {
116
+ const home = homedir();
117
+ switch (platform()) {
118
+ case 'darwin':
119
+ return join(home, 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
120
+ case 'win32':
121
+ return join(process.env['APPDATA'] ?? join(home, 'AppData', 'Roaming'), 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
122
+ default:
123
+ return join(home, '.config', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
124
+ }
125
+ }
126
+ /** Get the MCP config path for VS Code Copilot. */
127
+ function getVSCodeCopilotConfigPath() {
128
+ const home = homedir();
129
+ switch (platform()) {
130
+ case 'darwin':
131
+ return join(home, 'Library', 'Application Support', 'Code', 'User', 'settings.json');
132
+ case 'win32':
133
+ return join(process.env['APPDATA'] ?? join(home, 'AppData', 'Roaming'), 'Code', 'User', 'settings.json');
134
+ default:
135
+ return join(home, '.config', 'Code', 'User', 'settings.json');
136
+ }
137
+ }
138
+ /** Get the MCP config path for Zed editor. */
139
+ function getZedConfigPath() {
140
+ const home = homedir();
141
+ switch (platform()) {
142
+ case 'win32':
143
+ return join(process.env['APPDATA'] ?? join(home, 'AppData', 'Roaming'), 'Zed', 'settings.json');
144
+ default:
145
+ return join(home, '.config', 'zed', 'settings.json');
146
+ }
147
+ }
148
+ /** Get the MCP config path for Gemini CLI. */
149
+ function getGeminiCliConfigPath() {
150
+ return join(homedir(), '.gemini', 'settings.json');
151
+ }
152
+ /** Get the MCP config path for Continue.dev. */
153
+ function getContinueConfigPath() {
154
+ return join(homedir(), '.continue', 'mcp.json');
155
+ }
156
+ /** Get the MCP settings path for Roo Code (VS Code extension). */
157
+ function getRooCodeConfigPath() {
158
+ const home = homedir();
159
+ switch (platform()) {
160
+ case 'darwin':
161
+ return join(home, 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline', 'settings', 'cline_mcp_settings.json');
162
+ case 'win32':
163
+ return join(process.env['APPDATA'] ?? join(home, 'AppData', 'Roaming'), 'Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline', 'settings', 'cline_mcp_settings.json');
164
+ default:
165
+ return join(home, '.config', 'Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline', 'settings', 'cline_mcp_settings.json');
166
+ }
167
+ }
168
+ /**
169
+ * Detect all supported AI agent platforms.
170
+ * 偵測所有支援的 AI Agent 平台。
171
+ *
172
+ * @returns Array of detected platforms with their config paths and status.
173
+ */
174
+ export async function detectPlatforms() {
175
+ const platforms = [];
176
+ // Claude Code (uses `claude mcp add` CLI, not JSON config)
177
+ const claudeCodePath = getClaudeCodeConfigPath();
178
+ const claudeCodeDetected = (await commandExists('claude')) || existsSync(join(homedir(), '.claude'));
179
+ platforms.push({
180
+ id: 'claude-code',
181
+ name: 'Claude Code',
182
+ configPath: claudeCodePath,
183
+ detected: claudeCodeDetected,
184
+ alreadyConfigured: hasClaudeCodePanguard(),
185
+ });
186
+ // Claude Desktop
187
+ const claudeDesktopPath = getClaudeDesktopConfigPath();
188
+ const claudeDesktopDetected = existsSync(claudeDesktopPath) ||
189
+ (platform() === 'darwin' && existsSync('/Applications/Claude.app'));
190
+ platforms.push({
191
+ id: 'claude-desktop',
192
+ name: 'Claude Desktop',
193
+ configPath: claudeDesktopPath,
194
+ detected: claudeDesktopDetected,
195
+ alreadyConfigured: hasPanguardMCPEntry(claudeDesktopPath),
196
+ });
197
+ // Cursor
198
+ const cursorPath = getCursorConfigPath();
199
+ const cursorDetected = (await commandExists('cursor')) ||
200
+ existsSync(join(homedir(), '.cursor')) ||
201
+ (platform() === 'darwin' && existsSync('/Applications/Cursor.app'));
202
+ platforms.push({
203
+ id: 'cursor',
204
+ name: 'Cursor',
205
+ configPath: cursorPath,
206
+ detected: cursorDetected,
207
+ alreadyConfigured: hasPanguardMCPEntry(cursorPath),
208
+ });
209
+ // OpenClaw (uses native skill system, not MCP)
210
+ const openclawSkillDir = getOpenClawSkillDir();
211
+ const openclawDetected = (await commandExists('openclaw')) || existsSync(join(homedir(), '.openclaw'));
212
+ platforms.push({
213
+ id: 'openclaw',
214
+ name: 'OpenClaw',
215
+ configPath: openclawSkillDir,
216
+ detected: openclawDetected,
217
+ alreadyConfigured: hasOpenClawSkill(),
218
+ });
219
+ // Codex
220
+ const codexPath = getCodexConfigPath();
221
+ const codexDetected = (await commandExists('codex')) || existsSync(join(homedir(), '.codex'));
222
+ platforms.push({
223
+ id: 'codex',
224
+ name: 'Codex CLI',
225
+ configPath: codexPath,
226
+ detected: codexDetected,
227
+ alreadyConfigured: hasPanguardMCPEntry(codexPath),
228
+ });
229
+ // WorkBuddy
230
+ const wbPath = getWorkbuddyConfigPath();
231
+ const wbDetected = (await commandExists('workbuddy')) || existsSync(join(homedir(), '.workbuddy'));
232
+ platforms.push({
233
+ id: 'workbuddy',
234
+ name: 'WorkBuddy',
235
+ configPath: wbPath,
236
+ detected: wbDetected,
237
+ alreadyConfigured: hasPanguardMCPEntry(wbPath),
238
+ });
239
+ // NemoClaw
240
+ const ncPath = getNemoClawConfigPath();
241
+ const ncDetected = (await commandExists('nemoclaw')) || existsSync(join(homedir(), '.nemoclaw'));
242
+ platforms.push({
243
+ id: 'nemoclaw',
244
+ name: 'NemoClaw',
245
+ configPath: ncPath,
246
+ detected: ncDetected,
247
+ alreadyConfigured: hasPanguardMCPEntry(ncPath),
248
+ });
249
+ // ArkClaw (ByteDance)
250
+ try {
251
+ const acCmd = await commandExists('arkclaw');
252
+ const acDir = existsSync(join(homedir(), '.arkclaw'));
253
+ if (acCmd || acDir) {
254
+ const cfgPath = getArkClawConfigPath();
255
+ platforms.push({
256
+ id: 'arkclaw',
257
+ name: 'ArkClaw',
258
+ configPath: cfgPath,
259
+ detected: true,
260
+ alreadyConfigured: hasPanguardMCPEntry(cfgPath),
261
+ });
262
+ }
263
+ }
264
+ catch {
265
+ /* not installed */
266
+ }
267
+ // Windsurf (Codeium)
268
+ const wsPath = getWindsurfConfigPath();
269
+ const wsDetected = (await commandExists('windsurf')) || existsSync(join(homedir(), '.codeium', 'windsurf'));
270
+ platforms.push({
271
+ id: 'windsurf',
272
+ name: 'Windsurf',
273
+ configPath: wsPath,
274
+ detected: wsDetected,
275
+ alreadyConfigured: hasPanguardMCPEntry(wsPath),
276
+ });
277
+ // QClaw (Tencent)
278
+ const qcPath = getQClawConfigPath();
279
+ const qcDetected = (await commandExists('qclaw')) || existsSync(join(homedir(), '.qclaw'));
280
+ platforms.push({
281
+ id: 'qclaw',
282
+ name: 'QClaw',
283
+ configPath: qcPath,
284
+ detected: qcDetected,
285
+ alreadyConfigured: hasPanguardMCPEntry(qcPath),
286
+ });
287
+ // Cline (VS Code extension)
288
+ const clinePath = getClineConfigPath();
289
+ const clineDetected = existsSync(clinePath) ||
290
+ existsSync(join(homedir(), 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev'));
291
+ platforms.push({
292
+ id: 'cline',
293
+ name: 'Cline',
294
+ configPath: clinePath,
295
+ detected: clineDetected,
296
+ alreadyConfigured: hasPanguardMCPEntry(clinePath),
297
+ });
298
+ // VS Code Copilot (via .vscode/mcp.json or user settings)
299
+ const vscodePath = getVSCodeCopilotConfigPath();
300
+ const vscodeDetected = (await commandExists('code')) ||
301
+ (platform() === 'darwin' && existsSync('/Applications/Visual Studio Code.app'));
302
+ platforms.push({
303
+ id: 'vscode-copilot',
304
+ name: 'VS Code Copilot',
305
+ configPath: vscodePath,
306
+ detected: vscodeDetected,
307
+ alreadyConfigured: false, // VS Code uses different config structure
308
+ });
309
+ // Zed
310
+ const zedPath = getZedConfigPath();
311
+ const zedDetected = (await commandExists('zed')) ||
312
+ existsSync(join(homedir(), '.config', 'zed')) ||
313
+ (platform() === 'darwin' && existsSync('/Applications/Zed.app'));
314
+ platforms.push({
315
+ id: 'zed',
316
+ name: 'Zed',
317
+ configPath: zedPath,
318
+ detected: zedDetected,
319
+ alreadyConfigured: false, // Zed uses context_servers, not mcpServers
320
+ });
321
+ // Gemini CLI
322
+ const geminiPath = getGeminiCliConfigPath();
323
+ const geminiDetected = (await commandExists('gemini')) || existsSync(join(homedir(), '.gemini'));
324
+ platforms.push({
325
+ id: 'gemini-cli',
326
+ name: 'Gemini CLI',
327
+ configPath: geminiPath,
328
+ detected: geminiDetected,
329
+ alreadyConfigured: hasPanguardMCPEntry(geminiPath),
330
+ });
331
+ // Continue.dev
332
+ const continuePath = getContinueConfigPath();
333
+ const continueDetected = existsSync(join(homedir(), '.continue'));
334
+ platforms.push({
335
+ id: 'continue',
336
+ name: 'Continue',
337
+ configPath: continuePath,
338
+ detected: continueDetected,
339
+ alreadyConfigured: hasPanguardMCPEntry(continuePath),
340
+ });
341
+ // Roo Code (VS Code extension)
342
+ const rooPath = getRooCodeConfigPath();
343
+ const rooDetected = existsSync(rooPath) ||
344
+ existsSync(join(homedir(), 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline'));
345
+ platforms.push({
346
+ id: 'roo-code',
347
+ name: 'Roo Code',
348
+ configPath: rooPath,
349
+ detected: rooDetected,
350
+ alreadyConfigured: hasPanguardMCPEntry(rooPath),
351
+ });
352
+ const detected = platforms.filter((p) => p.detected);
353
+ logger.info(`Detected ${detected.length} platform(s): ${detected.map((p) => p.name).join(', ') || 'none'}`);
354
+ return platforms;
355
+ }
356
+ /**
357
+ * Get the MCP config path for a specific platform.
358
+ * 取得特定平台的 MCP 設定路徑。
359
+ */
360
+ export function getConfigPath(platformId) {
361
+ switch (platformId) {
362
+ case 'claude-code':
363
+ return getClaudeCodeConfigPath();
364
+ case 'claude-desktop':
365
+ return getClaudeDesktopConfigPath();
366
+ case 'cursor':
367
+ return getCursorConfigPath();
368
+ case 'openclaw':
369
+ return getOpenClawSkillDir();
370
+ case 'codex':
371
+ return getCodexConfigPath();
372
+ case 'workbuddy':
373
+ return getWorkbuddyConfigPath();
374
+ case 'nemoclaw':
375
+ return getNemoClawConfigPath();
376
+ case 'arkclaw':
377
+ return getArkClawConfigPath();
378
+ case 'windsurf':
379
+ return getWindsurfConfigPath();
380
+ case 'qclaw':
381
+ return getQClawConfigPath();
382
+ case 'cline':
383
+ return getClineConfigPath();
384
+ case 'vscode-copilot':
385
+ return getVSCodeCopilotConfigPath();
386
+ case 'zed':
387
+ return getZedConfigPath();
388
+ case 'gemini-cli':
389
+ return getGeminiCliConfigPath();
390
+ case 'continue':
391
+ return getContinueConfigPath();
392
+ case 'roo-code':
393
+ return getRooCodeConfigPath();
394
+ }
395
+ }
396
+ //# sourceMappingURL=platform-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-detector.js","sourceRoot":"","sources":["../../src/config/platform-detector.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Panguard MCP - Public API
3
+ * Panguard MCP - 公開 API
4
+ *
5
+ * MCP server for Panguard AI — control security scanning and guard from
6
+ * Claude Desktop, Cursor, or Claude Code via conversation.
7
+ * 用於 Panguard AI 的 MCP 伺服器 — 透過對話從 Claude Desktop、Cursor 或 Claude Code 控制安全掃描和守護。
8
+ *
9
+ * @module @panguard-ai/panguard-mcp
10
+ */
11
+ export { startMCPServer, getAllToolDefinitions, dispatchTool, PANGUARD_MCP_VERSION, } from './server.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,oBAAoB,GACrB,MAAM,aAAa,CAAC"}