@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,67 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Panguard MCP - CLI Entry Point
4
+ * Panguard MCP - CLI 入口點
5
+ *
6
+ * Starts the Panguard MCP server on stdio for integration with
7
+ * Claude Desktop, Cursor, or Claude Code.
8
+ * 在 stdio 上啟動 Panguard MCP 伺服器,用於與 Claude Desktop、Cursor 或 Claude Code 整合。
9
+ *
10
+ * @module @panguard-ai/panguard-mcp/cli
11
+ */
12
+ import { startMCPServer, PANGUARD_MCP_VERSION } from '../server.js';
13
+ import { createLogger } from '@panguard-ai/core';
14
+ const logger = createLogger('panguard-mcp:cli');
15
+ // Print version if --version or -v flag provided
16
+ if (process.argv.includes('--version') || process.argv.includes('-v')) {
17
+ process.stdout.write(PANGUARD_MCP_VERSION + '\n');
18
+ process.exit(0);
19
+ }
20
+ // Print help if --help or -h flag provided
21
+ if (process.argv.includes('--help') || process.argv.includes('-h')) {
22
+ process.stdout.write(`
23
+ Panguard MCP Server v${PANGUARD_MCP_VERSION}
24
+ Usage: panguard-mcp [options]
25
+
26
+ Options:
27
+ --version, -v Print version and exit
28
+ --help, -h Print this help and exit
29
+
30
+ Description:
31
+ Starts the Panguard MCP server on stdio, allowing Claude Desktop,
32
+ Cursor, or Claude Code to control Panguard security scanning and
33
+ real-time threat monitoring via conversation.
34
+
35
+ 透過 stdio 啟動 Panguard MCP 伺服器,讓 Claude Desktop、Cursor
36
+ 或 Claude Code 透過對話控制 Panguard 安全掃描和即時威脅監控。
37
+
38
+ Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
39
+ {
40
+ "mcpServers": {
41
+ "panguard": {
42
+ "command": "panguard-mcp"
43
+ }
44
+ }
45
+ }
46
+
47
+ Available tools:
48
+ panguard_scan Run system security health check
49
+ panguard_scan_code Scan source code for vulnerabilities (SAST)
50
+ panguard_guard_start Start real-time threat monitoring
51
+ panguard_guard_stop Stop threat monitoring daemon
52
+ panguard_status Get status of all Panguard services
53
+ panguard_alerts Get recent security alerts
54
+ panguard_block_ip Manually block an IP address
55
+ panguard_generate_report Generate PDF compliance report
56
+ panguard_init Initialize Panguard configuration
57
+ panguard_deploy One-click deployment of all Panguard services
58
+ `);
59
+ process.exit(0);
60
+ }
61
+ // Start the MCP server
62
+ startMCPServer().catch((err) => {
63
+ const message = err instanceof Error ? err.message : String(err);
64
+ logger.error('MCP server failed to start: ' + message);
65
+ process.exit(1);
66
+ });
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAEhD,iDAAiD;AACjD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,2CAA2C;AAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;uBACA,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC1C,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,uBAAuB;AACvB,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,8BAA8B,GAAG,OAAO,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -8,6 +8,6 @@ export { detectPlatforms, getConfigPath } from './platform-detector.js';
8
8
  export type { PlatformId, DetectedPlatform } from './platform-detector.js';
9
9
  export { injectMCPConfig, removeMCPConfig, injectAll, getInstallCommand } from './mcp-injector.js';
10
10
  export type { InjectionResult } from './mcp-injector.js';
11
- export { parseMCPServers, resolveSkillDir, discoverAllSkills, removeServer } from './mcp-config-reader.js';
11
+ export { parseMCPServers, resolveSkillDir, discoverAllSkills, removeServer, } from './mcp-config-reader.js';
12
12
  export type { MCPServerEntry } from './mcp-config-reader.js';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnG,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3G,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnG,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
@@ -6,5 +6,5 @@
6
6
  */
7
7
  export { detectPlatforms, getConfigPath } from './platform-detector.js';
8
8
  export { injectMCPConfig, removeMCPConfig, injectAll, getInstallCommand } from './mcp-injector.js';
9
- export { parseMCPServers, resolveSkillDir, discoverAllSkills, removeServer } from './mcp-config-reader.js';
9
+ export { parseMCPServers, resolveSkillDir, discoverAllSkills, removeServer, } from './mcp-config-reader.js';
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEnG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEnG,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,GACb,MAAM,wBAAwB,CAAC"}
@@ -37,8 +37,9 @@ export declare function resolveSkillDir(entry: MCPServerEntry): string | null;
37
37
  */
38
38
  export declare function removeServer(platformId: PlatformId, serverName: string): boolean;
39
39
  /**
40
- * Discover all MCP skills installed across all detected platforms.
41
- * Filters out Panguard's own MCP server entry.
40
+ * Discover all skills installed across all detected platforms.
41
+ * Includes MCP servers (JSON config) AND Claude Code skills (.md files).
42
+ * Filters out Panguard's own entries.
42
43
  */
43
44
  export declare function discoverAllSkills(): Promise<readonly MCPServerEntry[]>;
44
45
  //# sourceMappingURL=mcp-config-reader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config-reader.d.ts","sourceRoot":"","sources":["../../src/config/mcp-config-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,GACrB,SAAS,cAAc,EAAE,CA2C3B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CA8BpE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CA8BhF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAsB5E"}
1
+ {"version":3,"file":"mcp-config-reader.d.ts","sourceRoot":"","sources":["../../src/config/mcp-config-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,GACrB,SAAS,cAAc,EAAE,CA2C3B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAkDpE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CA8BhF;AAwDD;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CA2B5E"}
@@ -7,8 +7,9 @@
7
7
  *
8
8
  * @module @panguard-ai/panguard-mcp/config/mcp-config-reader
9
9
  */
10
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
11
- import { dirname } from 'node:path';
10
+ import { existsSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';
11
+ import { dirname, join, basename } from 'node:path';
12
+ import { homedir } from 'node:os';
12
13
  import { createLogger } from '@panguard-ai/core';
13
14
  import { detectPlatforms, getConfigPath } from './platform-detector.js';
14
15
  const logger = createLogger('panguard-mcp:config-reader');
@@ -59,6 +60,25 @@ export function parseMCPServers(configPath, platformId) {
59
60
  * Returns null if resolution fails.
60
61
  */
61
62
  export function resolveSkillDir(entry) {
63
+ // Claude Code skill/command/agent: args[0] is the .md file path or SKILL.md path
64
+ if (['skill', 'command', 'agent'].includes(entry.command)) {
65
+ const mdPath = entry.args[0];
66
+ if (mdPath && existsSync(mdPath)) {
67
+ // For directory-based skills (e.g. ~/.claude/skills/browse/SKILL.md),
68
+ // return the parent directory so auditor finds SKILL.md inside.
69
+ // For direct .md files (e.g. ~/.claude/commands/plan.md),
70
+ // return the .md file path itself so auditor reads it directly.
71
+ if (mdPath.endsWith('/SKILL.md') || mdPath.endsWith('/README.md')) {
72
+ return dirname(mdPath);
73
+ }
74
+ return mdPath; // Direct .md file
75
+ }
76
+ // configPath is the skill directory for directory-based skills
77
+ if (entry.configPath && existsSync(entry.configPath)) {
78
+ return entry.configPath;
79
+ }
80
+ return null;
81
+ }
62
82
  // npx -y @package/name pattern
63
83
  if (entry.command === 'npx' && entry.args.length >= 1) {
64
84
  const pkgArg = entry.args.find((a) => !a.startsWith('-'));
@@ -122,13 +142,67 @@ export function removeServer(platformId, serverName) {
122
142
  }
123
143
  }
124
144
  /**
125
- * Discover all MCP skills installed across all detected platforms.
126
- * Filters out Panguard's own MCP server entry.
145
+ * Discover Claude Code skills, commands, and agents from ~/.claude/.
146
+ * These are .md-based skills that Claude Code loads natively.
147
+ */
148
+ function discoverClaudeCodeSkills() {
149
+ const claudeDir = join(homedir(), '.claude');
150
+ const entries = [];
151
+ const dirs = [
152
+ { path: join(claudeDir, 'skills'), type: 'skill' },
153
+ { path: join(claudeDir, 'commands'), type: 'command' },
154
+ { path: join(claudeDir, 'agents'), type: 'agent' },
155
+ ];
156
+ for (const { path: dirPath, type } of dirs) {
157
+ if (!existsSync(dirPath))
158
+ continue;
159
+ try {
160
+ const items = readdirSync(dirPath, { withFileTypes: true });
161
+ for (const item of items) {
162
+ // Directory with SKILL.md inside (e.g. ~/.claude/skills/browse/SKILL.md)
163
+ if (item.isDirectory()) {
164
+ const skillMd = join(dirPath, item.name, 'SKILL.md');
165
+ const readmeMd = join(dirPath, item.name, 'README.md');
166
+ const hasContent = existsSync(skillMd) || existsSync(readmeMd);
167
+ if (hasContent) {
168
+ entries.push({
169
+ name: item.name,
170
+ command: type,
171
+ args: [existsSync(skillMd) ? skillMd : readmeMd],
172
+ configPath: join(dirPath, item.name),
173
+ platformId: 'claude-code',
174
+ });
175
+ }
176
+ }
177
+ // Direct .md file (e.g. ~/.claude/commands/plan.md)
178
+ if (item.isFile() && item.name.endsWith('.md')) {
179
+ const name = basename(item.name, '.md');
180
+ entries.push({
181
+ name,
182
+ command: type,
183
+ args: [join(dirPath, item.name)],
184
+ configPath: join(dirPath, item.name),
185
+ platformId: 'claude-code',
186
+ });
187
+ }
188
+ }
189
+ }
190
+ catch {
191
+ // Directory not readable
192
+ }
193
+ }
194
+ return entries;
195
+ }
196
+ /**
197
+ * Discover all skills installed across all detected platforms.
198
+ * Includes MCP servers (JSON config) AND Claude Code skills (.md files).
199
+ * Filters out Panguard's own entries.
127
200
  */
128
201
  export async function discoverAllSkills() {
129
202
  const platforms = await detectPlatforms();
130
203
  const detected = platforms.filter((p) => p.detected);
131
204
  const allSkills = [];
205
+ // 1. MCP servers from platform JSON configs
132
206
  for (const platform of detected) {
133
207
  // OpenClaw uses native skills, not MCP JSON config
134
208
  if (platform.id === 'openclaw')
@@ -145,6 +219,9 @@ export async function discoverAllSkills() {
145
219
  allSkills.push(server);
146
220
  }
147
221
  }
222
+ // 2. Claude Code skills, commands, agents (.md files)
223
+ const claudeSkills = discoverClaudeCodeSkills();
224
+ allSkills.push(...claudeSkills);
148
225
  logger.info(`Discovered ${allSkills.length} skill(s) across ${detected.length} platform(s)`);
149
226
  return allSkills;
150
227
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config-reader.js","sourceRoot":"","sources":["../../src/config/mcp-config-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-config-reader.js","sourceRoot":"","sources":["../../src/config/mcp-config-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * MCP Config Injector - Write Panguard MCP config to AI agent platforms
3
+ * MCP 設定注入器 - 將 Panguard MCP 設定寫入 AI Agent 平台
4
+ *
5
+ * Supports Claude Code, Claude Desktop, Cursor, OpenClaw, Codex, Workbuddy, NemoClaw, ArkClaw.
6
+ *
7
+ * @module @panguard-ai/panguard-mcp/config/mcp-injector
8
+ */
9
+ import type { PlatformId } from './platform-detector.js';
10
+ export interface InjectionResult {
11
+ platformId: PlatformId;
12
+ success: boolean;
13
+ configPath: string;
14
+ backupPath?: string;
15
+ error?: string;
16
+ }
17
+ /**
18
+ * Inject Panguard MCP config into a specific platform.
19
+ * 將 Panguard MCP 設定注入特定平台。
20
+ *
21
+ * @param platformId - Target platform / 目標平台
22
+ * @returns Injection result with success status and paths.
23
+ */
24
+ export declare function injectMCPConfig(platformId: PlatformId): InjectionResult;
25
+ /**
26
+ * Remove Panguard MCP config from a specific platform.
27
+ * 從特定平台移除 Panguard MCP 設定。
28
+ */
29
+ export declare function removeMCPConfig(platformId: PlatformId): InjectionResult;
30
+ /**
31
+ * Inject Panguard MCP config into all detected platforms.
32
+ * 將 Panguard MCP 設定注入所有偵測到的平台。
33
+ */
34
+ export declare function injectAll(platformIds: PlatformId[]): Promise<InjectionResult[]>;
35
+ /**
36
+ * Get the one-liner install command for display.
37
+ * 取得用於顯示的一行安裝指令。
38
+ */
39
+ export declare function getInstallCommand(): string;
40
+ //# sourceMappingURL=mcp-injector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-injector.d.ts","sourceRoot":"","sources":["../../src/config/mcp-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKzD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0JD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAwEvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAqCvE;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAErF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
1
+ {"version":3,"file":"mcp-injector.d.ts","sourceRoot":"","sources":["../../src/config/mcp-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKzD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0JD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAmFvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAqCvE;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAErF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
@@ -0,0 +1,305 @@
1
+ /**
2
+ * MCP Config Injector - Write Panguard MCP config to AI agent platforms
3
+ * MCP 設定注入器 - 將 Panguard MCP 設定寫入 AI Agent 平台
4
+ *
5
+ * Supports Claude Code, Claude Desktop, Cursor, OpenClaw, Codex, Workbuddy, NemoClaw, ArkClaw.
6
+ *
7
+ * @module @panguard-ai/panguard-mcp/config/mcp-injector
8
+ */
9
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, copyFileSync, rmSync } from 'node:fs';
10
+ import { dirname, join } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { execFileSync } from 'node:child_process';
13
+ import { createLogger } from '@panguard-ai/core';
14
+ import { getConfigPath } from './platform-detector.js';
15
+ const logger = createLogger('panguard-mcp:injector');
16
+ /** The MCP server entry Panguard adds to config files. */
17
+ const PANGUARD_MCP_ENTRY = {
18
+ command: 'npx',
19
+ args: ['-y', '@panguard-ai/panguard-mcp'],
20
+ };
21
+ /**
22
+ * Read an existing JSON config file, or return empty object.
23
+ * 讀取現有 JSON 設定檔,或回傳空物件。
24
+ */
25
+ function readJsonSafe(filePath) {
26
+ if (!existsSync(filePath))
27
+ return {};
28
+ try {
29
+ const raw = readFileSync(filePath, 'utf-8');
30
+ const parsed = JSON.parse(raw);
31
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
32
+ return parsed;
33
+ }
34
+ return {};
35
+ }
36
+ catch {
37
+ return {};
38
+ }
39
+ }
40
+ /**
41
+ * Back up a config file before modifying it.
42
+ * 修改前備份設定檔。
43
+ */
44
+ function backupFile(filePath) {
45
+ if (!existsSync(filePath))
46
+ return undefined;
47
+ const backupPath = `${filePath}.bak.${Date.now()}`;
48
+ copyFileSync(filePath, backupPath);
49
+ logger.info(`Backed up ${filePath} -> ${backupPath}`);
50
+ return backupPath;
51
+ }
52
+ /**
53
+ * Ensure parent directory exists.
54
+ * 確保父目錄存在。
55
+ */
56
+ function ensureDir(filePath) {
57
+ const dir = dirname(filePath);
58
+ if (!existsSync(dir)) {
59
+ mkdirSync(dir, { recursive: true });
60
+ }
61
+ }
62
+ /**
63
+ * Inject Panguard MCP config for Claude Desktop.
64
+ * Claude Desktop uses: { "mcpServers": { "panguard": { "command": "...", "args": [...] } } }
65
+ */
66
+ function injectClaudeDesktop(configPath) {
67
+ const config = readJsonSafe(configPath);
68
+ const servers = config['mcpServers'] ?? {};
69
+ servers['panguard'] = { ...PANGUARD_MCP_ENTRY };
70
+ config['mcpServers'] = servers;
71
+ writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
72
+ }
73
+ /**
74
+ * Inject Panguard MCP config for Claude Code.
75
+ * Claude Code uses `claude mcp add` CLI (not JSON file).
76
+ * Falls back to writing settings.local.json if CLI not available.
77
+ */
78
+ function injectClaudeCode(_configPath) {
79
+ try {
80
+ // Try `claude mcp add` first (the correct way for Claude Code)
81
+ execFileSync('claude', ['mcp', 'add', '--scope', 'user', 'panguard', '--', 'npx', '-y', '@panguard-ai/panguard-mcp'], {
82
+ timeout: 15_000,
83
+ stdio: 'pipe',
84
+ });
85
+ logger.info('Added Panguard MCP via `claude mcp add --scope user`');
86
+ }
87
+ catch {
88
+ // Fallback: write JSON directly (older Claude Code versions)
89
+ logger.warn('`claude mcp add` failed, falling back to JSON config');
90
+ const config = readJsonSafe(_configPath);
91
+ const servers = config['mcpServers'] ?? {};
92
+ servers['panguard'] = { ...PANGUARD_MCP_ENTRY };
93
+ config['mcpServers'] = servers;
94
+ writeFileSync(_configPath, JSON.stringify(config, null, 2), 'utf-8');
95
+ }
96
+ }
97
+ /**
98
+ * Inject Panguard MCP config for Cursor.
99
+ * Cursor uses: { "mcpServers": { "panguard": { "command": "...", "args": [...] } } }
100
+ * in ~/.cursor/mcp.json
101
+ */
102
+ function injectCursor(configPath) {
103
+ const config = readJsonSafe(configPath);
104
+ const servers = config['mcpServers'] ?? {};
105
+ servers['panguard'] = { ...PANGUARD_MCP_ENTRY };
106
+ config['mcpServers'] = servers;
107
+ writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
108
+ }
109
+ /**
110
+ * Inject Panguard MCP config for Codex/Workbuddy/NemoClaw.
111
+ * Generic MCP JSON format: { "mcpServers": { "panguard": { ... } } }
112
+ */
113
+ function injectGenericMCP(configPath) {
114
+ const config = readJsonSafe(configPath);
115
+ const servers = config['mcpServers'] ?? {};
116
+ servers['panguard'] = { ...PANGUARD_MCP_ENTRY };
117
+ config['mcpServers'] = servers;
118
+ writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
119
+ }
120
+ /**
121
+ * Inject Panguard as an OpenClaw native skill.
122
+ * OpenClaw uses its own skill system (not MCP), so we copy SKILL.md
123
+ * to ~/.openclaw/skills/panguard/.
124
+ */
125
+ function injectOpenClawSkill(skillDir) {
126
+ mkdirSync(skillDir, { recursive: true });
127
+ // Resolve the bundled SKILL.md from this package
128
+ const thisDir = dirname(fileURLToPath(import.meta.url));
129
+ const bundledSkill = join(thisDir, '..', '..', 'openclaw-skill', 'SKILL.md');
130
+ if (existsSync(bundledSkill)) {
131
+ copyFileSync(bundledSkill, join(skillDir, 'SKILL.md'));
132
+ }
133
+ else {
134
+ // Fallback: write a minimal SKILL.md inline
135
+ const skillContent = [
136
+ '---',
137
+ 'name: panguard',
138
+ 'description: AI agent security platform -- audit skills, scan threats, run 24/7 protection',
139
+ 'homepage: https://panguard.ai',
140
+ 'license: MIT',
141
+ 'metadata: { "openclaw": { "requires": { "bins": ["npx"] }, "install": [{ "id": "node", "kind": "node", "package": "@panguard-ai/panguard", "bins": ["panguard"], "label": "Install Panguard AI" }] } }',
142
+ '---',
143
+ '',
144
+ '# Panguard AI',
145
+ '',
146
+ 'Security platform for AI agents with 10,400+ detection rules.',
147
+ '',
148
+ '## Commands',
149
+ '- `panguard audit skill .` -- Audit skills for threats',
150
+ '- `panguard scan` -- Security scan',
151
+ '- `panguard guard start` -- Start real-time protection',
152
+ '- `panguard status` -- Show status dashboard',
153
+ '',
154
+ ].join('\n');
155
+ writeFileSync(join(skillDir, 'SKILL.md'), skillContent, 'utf-8');
156
+ }
157
+ }
158
+ /**
159
+ * Inject Panguard MCP config into a specific platform.
160
+ * 將 Panguard MCP 設定注入特定平台。
161
+ *
162
+ * @param platformId - Target platform / 目標平台
163
+ * @returns Injection result with success status and paths.
164
+ */
165
+ export function injectMCPConfig(platformId) {
166
+ const configPath = getConfigPath(platformId);
167
+ const result = { platformId, success: false, configPath };
168
+ try {
169
+ ensureDir(configPath);
170
+ result.backupPath = backupFile(configPath);
171
+ switch (platformId) {
172
+ case 'claude-desktop':
173
+ injectClaudeDesktop(configPath);
174
+ break;
175
+ case 'claude-code':
176
+ injectClaudeCode(configPath);
177
+ break;
178
+ case 'cursor':
179
+ injectCursor(configPath);
180
+ break;
181
+ case 'openclaw':
182
+ injectOpenClawSkill(configPath);
183
+ break;
184
+ case 'codex':
185
+ case 'workbuddy':
186
+ case 'nemoclaw':
187
+ case 'arkclaw':
188
+ case 'windsurf':
189
+ case 'qclaw':
190
+ case 'cline':
191
+ case 'vscode-copilot':
192
+ case 'zed':
193
+ case 'gemini-cli':
194
+ case 'continue':
195
+ case 'roo-code':
196
+ injectGenericMCP(configPath);
197
+ break;
198
+ }
199
+ // Verify the write succeeded
200
+ if (platformId === 'claude-code') {
201
+ // Claude Code: verify via `claude mcp list`
202
+ try {
203
+ const output = execFileSync('claude', ['mcp', 'list'], {
204
+ timeout: 10_000,
205
+ stdio: 'pipe',
206
+ }).toString();
207
+ if (output.includes('panguard')) {
208
+ result.success = true;
209
+ logger.info('Verified Panguard MCP in Claude Code via `claude mcp list`');
210
+ }
211
+ else {
212
+ // Might take a moment to register, assume success if inject didn't throw
213
+ result.success = true;
214
+ logger.info('Panguard MCP added to Claude Code (pending verification)');
215
+ }
216
+ }
217
+ catch {
218
+ result.success = true; // inject didn't throw, assume OK
219
+ logger.info('Panguard MCP injected into Claude Code');
220
+ }
221
+ }
222
+ else if (platformId === 'openclaw') {
223
+ // OpenClaw uses SKILL.md, not JSON
224
+ if (existsSync(join(configPath, 'SKILL.md'))) {
225
+ result.success = true;
226
+ logger.info(`Installed Panguard skill for OpenClaw at ${configPath}`);
227
+ }
228
+ else {
229
+ result.error = 'Verification failed: SKILL.md not found after write';
230
+ logger.error(result.error);
231
+ }
232
+ }
233
+ else {
234
+ const verify = readJsonSafe(configPath);
235
+ const servers = verify['mcpServers'];
236
+ if (servers && servers['panguard']) {
237
+ result.success = true;
238
+ logger.info(`Injected Panguard MCP config into ${platformId} at ${configPath}`);
239
+ }
240
+ else {
241
+ result.error = 'Verification failed: panguard entry not found after write';
242
+ logger.error(result.error);
243
+ }
244
+ }
245
+ }
246
+ catch (err) {
247
+ result.error = err instanceof Error ? err.message : String(err);
248
+ logger.error(`Failed to inject ${platformId}: ${result.error}`);
249
+ }
250
+ return result;
251
+ }
252
+ /**
253
+ * Remove Panguard MCP config from a specific platform.
254
+ * 從特定平台移除 Panguard MCP 設定。
255
+ */
256
+ export function removeMCPConfig(platformId) {
257
+ const configPath = getConfigPath(platformId);
258
+ const result = { platformId, success: false, configPath };
259
+ try {
260
+ if (platformId === 'openclaw') {
261
+ // Remove OpenClaw skill directory
262
+ const skillMd = join(configPath, 'SKILL.md');
263
+ if (existsSync(skillMd)) {
264
+ rmSync(configPath, { recursive: true, force: true });
265
+ logger.info(`Removed Panguard skill from OpenClaw`);
266
+ }
267
+ result.success = true;
268
+ return result;
269
+ }
270
+ if (!existsSync(configPath)) {
271
+ result.success = true;
272
+ return result;
273
+ }
274
+ result.backupPath = backupFile(configPath);
275
+ const config = readJsonSafe(configPath);
276
+ const servers = config['mcpServers'];
277
+ if (servers) {
278
+ delete servers['panguard'];
279
+ config['mcpServers'] = servers;
280
+ }
281
+ writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
282
+ result.success = true;
283
+ logger.info(`Removed Panguard MCP config from ${platformId}`);
284
+ }
285
+ catch (err) {
286
+ result.error = err instanceof Error ? err.message : String(err);
287
+ logger.error(`Failed to remove from ${platformId}: ${result.error}`);
288
+ }
289
+ return result;
290
+ }
291
+ /**
292
+ * Inject Panguard MCP config into all detected platforms.
293
+ * 將 Panguard MCP 設定注入所有偵測到的平台。
294
+ */
295
+ export async function injectAll(platformIds) {
296
+ return platformIds.map((id) => injectMCPConfig(id));
297
+ }
298
+ /**
299
+ * Get the one-liner install command for display.
300
+ * 取得用於顯示的一行安裝指令。
301
+ */
302
+ export function getInstallCommand() {
303
+ return 'npx panguard setup';
304
+ }
305
+ //# sourceMappingURL=mcp-injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-injector.js","sourceRoot":"","sources":["../../src/config/mcp-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;AAUrD,0DAA0D;AAC1D,MAAM,kBAAkB,GAAG;IACzB,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,2BAA2B,CAAC;CAC1C,CAAC;AAEF;;;GAGG;AACH,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAAiC,CAAC;QAC3C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,QAAgB;IAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,UAAU,GAAG,GAAG,QAAQ,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACnD,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,CAAC,aAAa,QAAQ,OAAO,UAAU,EAAE,CAAC,CAAC;IACtD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,OAAO,GAAI,MAAM,CAAC,YAAY,CAA6B,IAAI,EAAE,CAAC;IACxE,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAChD,MAAM,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;IAC/B,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,IAAI,CAAC;QACH,+DAA+D;QAC/D,YAAY,CACV,QAAQ,EACR,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,CAAC,EAC7F;YACE,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,MAAM;SACd,CACF,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;QAC7D,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,OAAO,GAAI,MAAM,CAAC,YAAY,CAA6B,IAAI,EAAE,CAAC;QACxE,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;QAC/B,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,UAAkB;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,OAAO,GAAI,MAAM,CAAC,YAAY,CAA6B,IAAI,EAAE,CAAC;IACxE,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAChD,MAAM,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;IAC/B,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,OAAO,GAAI,MAAM,CAAC,YAAY,CAA6B,IAAI,EAAE,CAAC;IACxE,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAChD,MAAM,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;IAC/B,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,iDAAiD;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAE7E,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,YAAY,GAAG;YACnB,KAAK;YACL,gBAAgB;YAChB,4FAA4F;YAC5F,+BAA+B;YAC/B,cAAc;YACd,wMAAwM;YACxM,KAAK;YACL,EAAE;YACF,eAAe;YACf,EAAE;YACF,+DAA+D;YAC/D,EAAE;YACF,aAAa;YACb,wDAAwD;YACxD,oCAAoC;YACpC,wDAAwD;YACxD,8CAA8C;YAC9C,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,UAAsB;IACpD,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAoB,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAE3E,IAAI,CAAC;QACH,SAAS,CAAC,UAAU,CAAC,CAAC;QACtB,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAE3C,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,gBAAgB;gBACnB,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,aAAa;gBAChB,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,QAAQ;gBACX,YAAY,CAAC,UAAU,CAAC,CAAC;gBACzB,MAAM;YACR,KAAK,UAAU;gBACb,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,OAAO,CAAC;YACb,KAAK,WAAW,CAAC;YACjB,KAAK,UAAU,CAAC;YAChB,KAAK,SAAS,CAAC;YACf,KAAK,UAAU,CAAC;YAChB,KAAK,OAAO,CAAC;YACb,KAAK,OAAO,CAAC;YACb,KAAK,gBAAgB,CAAC;YACtB,KAAK,KAAK,CAAC;YACX,KAAK,YAAY,CAAC;YAClB,KAAK,UAAU,CAAC;YAChB,KAAK,UAAU;gBACb,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBAC7B,MAAM;QACV,CAAC;QAED,6BAA6B;QAC7B,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;YACjC,4CAA4C;YAC5C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;oBACrD,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,MAAM;iBACd,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,yEAAyE;oBACzE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,iCAAiC;gBACxD,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,mCAAmC;YACnC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,4CAA4C,UAAU,EAAE,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,GAAG,qDAAqD,CAAC;gBACrE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAwC,CAAC;YAC5E,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,qCAAqC,UAAU,OAAO,UAAU,EAAE,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,GAAG,2DAA2D,CAAC;gBAC3E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,oBAAoB,UAAU,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,UAAsB;IACpD,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAoB,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAE3E,IAAI,CAAC;QACH,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC9B,kCAAkC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC7C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAwC,CAAC;QAC5E,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3B,MAAM,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;QACjC,CAAC;QACD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,yBAAyB,UAAU,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,WAAyB;IACvD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}