@panguard-ai/panguard-mcp 1.3.0 → 1.3.2

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 (37) hide show
  1. package/dist/cli/index.d.ts +13 -0
  2. package/dist/cli/index.js +67 -0
  3. package/dist/cli/index.js.map +1 -0
  4. package/dist/config/index.d.ts +2 -2
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/index.js +1 -1
  7. package/dist/config/index.js.map +1 -1
  8. package/dist/config/mcp-config-reader.d.ts +3 -2
  9. package/dist/config/mcp-config-reader.d.ts.map +1 -1
  10. package/dist/config/mcp-config-reader.js +81 -4
  11. package/dist/config/mcp-config-reader.js.map +1 -1
  12. package/dist/config/mcp-injector.d.ts +30 -0
  13. package/dist/config/mcp-injector.d.ts.map +1 -1
  14. package/dist/config/mcp-injector.js +216 -2
  15. package/dist/config/mcp-injector.js.map +1 -1
  16. package/dist/config/platform-detector.d.ts +4 -3
  17. package/dist/config/platform-detector.d.ts.map +1 -1
  18. package/dist/config/platform-detector.js +166 -2
  19. package/dist/config/platform-detector.js.map +1 -1
  20. package/dist/index.d.ts +12 -0
  21. package/dist/index.js +12 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/server.d.ts +356 -0
  24. package/dist/server.js +323 -0
  25. package/dist/server.js.map +1 -0
  26. package/dist/tools/guard-tools.d.ts +62 -0
  27. package/dist/tools/guard-tools.d.ts.map +1 -0
  28. package/dist/tools/guard-tools.js +356 -0
  29. package/dist/tools/guard-tools.js.map +1 -0
  30. package/dist/tools/manage-tools.d.ts +65 -0
  31. package/dist/tools/manage-tools.js +299 -0
  32. package/dist/tools/manage-tools.js.map +1 -0
  33. package/dist/tools/scan-tools.d.ts +46 -0
  34. package/dist/tools/scan-tools.js +157 -0
  35. package/dist/tools/scan-tools.js.map +1 -0
  36. package/package.json +14 -13
  37. package/LICENSE +0 -21
@@ -0,0 +1,356 @@
1
+ /**
2
+ * Panguard MCP - Guard Tools
3
+ * Panguard MCP - 守護工具
4
+ *
5
+ * Implements panguard_guard_start, panguard_guard_stop, panguard_status,
6
+ * and panguard_alerts MCP tools.
7
+ * 實作 panguard_guard_start、panguard_guard_stop、panguard_status 和 panguard_alerts MCP 工具。
8
+ *
9
+ * @module @panguard-ai/panguard-mcp/tools/guard-tools
10
+ */
11
+ import { promises as fs, existsSync, readFileSync, openSync, closeSync } from 'node:fs';
12
+ import { spawn } from 'node:child_process';
13
+ import { createRequire } from 'node:module';
14
+ import { fileURLToPath } from 'node:url';
15
+ import os from 'node:os';
16
+ import path from 'node:path';
17
+ /**
18
+ * Resolve the guard data directory from args or default.
19
+ * 從參數或預設值解析守護資料目錄。
20
+ */
21
+ function resolveDataDir(args) {
22
+ return args['dataDir'] ?? path.join(os.homedir(), '.panguard-guard');
23
+ }
24
+ /**
25
+ * Execute panguard_guard_start — start the real-time threat monitoring daemon.
26
+ * 執行 panguard_guard_start — 啟動即時威脅監控常駐程式。
27
+ *
28
+ * Spawns the guard daemon as a detached background process with stdio
29
+ * redirected to a log file, so it does not interfere with MCP stdio transport.
30
+ * 將守護常駐程式作為分離的背景進程啟動,stdio 重導向到日誌檔案。
31
+ */
32
+ export async function executeGuardStart(args) {
33
+ const dataDir = resolveDataDir(args);
34
+ const mode = args['mode'] ?? 'learning';
35
+ try {
36
+ await fs.mkdir(dataDir, { recursive: true });
37
+ }
38
+ catch {
39
+ // Directory may already exist
40
+ }
41
+ // Check if guard is already running
42
+ const pidFile = path.join(dataDir, 'panguard-guard.pid');
43
+ try {
44
+ const pidContent = await fs.readFile(pidFile, 'utf-8');
45
+ const existingPid = parseInt(pidContent.trim(), 10);
46
+ if (!isNaN(existingPid)) {
47
+ try {
48
+ process.kill(existingPid, 0);
49
+ // Process exists — guard is already running
50
+ return {
51
+ content: [
52
+ {
53
+ type: 'text',
54
+ text: JSON.stringify({
55
+ status: 'already_running',
56
+ pid: existingPid,
57
+ dataDir,
58
+ mode,
59
+ message: `Guard engine is already running (PID: ${existingPid}).`,
60
+ }, null, 2),
61
+ },
62
+ ],
63
+ };
64
+ }
65
+ catch {
66
+ // Process not found — stale PID file, continue to start
67
+ await fs.unlink(pidFile).catch(() => undefined);
68
+ }
69
+ }
70
+ }
71
+ catch {
72
+ // No PID file — proceed to start
73
+ }
74
+ // Resolve the panguard-guard CLI script path
75
+ let guardCliScript;
76
+ try {
77
+ const _require = createRequire(import.meta.url);
78
+ const guardMainPath = _require.resolve('@panguard-ai/panguard-guard');
79
+ guardCliScript = path.join(path.dirname(guardMainPath), 'cli', 'index.js');
80
+ }
81
+ catch {
82
+ // Fallback: try resolving via import.meta.resolve
83
+ try {
84
+ const guardMainUrl = import.meta.resolve('@panguard-ai/panguard-guard');
85
+ guardCliScript = path.join(fileURLToPath(guardMainUrl), '..', 'cli', 'index.js');
86
+ }
87
+ catch {
88
+ return {
89
+ content: [
90
+ {
91
+ type: 'text',
92
+ text: JSON.stringify({
93
+ status: 'error',
94
+ message: 'Could not resolve @panguard-ai/panguard-guard package. Is it installed?',
95
+ }, null, 2),
96
+ },
97
+ ],
98
+ isError: true,
99
+ };
100
+ }
101
+ }
102
+ // Spawn guard as a detached background process
103
+ const logPath = path.join(dataDir, 'guard.log');
104
+ let logFd;
105
+ try {
106
+ logFd = openSync(logPath, 'a');
107
+ }
108
+ catch (err) {
109
+ return {
110
+ content: [
111
+ {
112
+ type: 'text',
113
+ text: JSON.stringify({
114
+ status: 'error',
115
+ message: `Failed to open log file: ${err instanceof Error ? err.message : String(err)}`,
116
+ }, null, 2),
117
+ },
118
+ ],
119
+ isError: true,
120
+ };
121
+ }
122
+ try {
123
+ const child = spawn(process.execPath, [guardCliScript, 'start'], {
124
+ detached: true,
125
+ stdio: ['ignore', logFd, logFd],
126
+ env: { ...process.env },
127
+ });
128
+ child.unref();
129
+ closeSync(logFd);
130
+ // Wait for PID file to confirm startup (up to 5 seconds)
131
+ let started = false;
132
+ let newPid = null;
133
+ const deadline = Date.now() + 5000;
134
+ while (Date.now() < deadline) {
135
+ if (existsSync(pidFile)) {
136
+ try {
137
+ const content = readFileSync(pidFile, 'utf-8').trim();
138
+ const parsed = parseInt(content, 10);
139
+ if (!isNaN(parsed)) {
140
+ process.kill(parsed, 0);
141
+ started = true;
142
+ newPid = parsed;
143
+ break;
144
+ }
145
+ }
146
+ catch {
147
+ // Not ready yet
148
+ }
149
+ }
150
+ await new Promise((r) => setTimeout(r, 300));
151
+ }
152
+ if (started) {
153
+ return {
154
+ content: [
155
+ {
156
+ type: 'text',
157
+ text: JSON.stringify({
158
+ status: 'started',
159
+ pid: newPid,
160
+ dataDir,
161
+ mode,
162
+ logFile: logPath,
163
+ message: `Guard engine started successfully (PID: ${newPid}).`,
164
+ }, null, 2),
165
+ },
166
+ ],
167
+ };
168
+ }
169
+ else {
170
+ return {
171
+ content: [
172
+ {
173
+ type: 'text',
174
+ text: JSON.stringify({
175
+ status: 'timeout',
176
+ dataDir,
177
+ mode,
178
+ logFile: logPath,
179
+ message: 'Guard engine was spawned but did not confirm startup within 5 seconds. Check the log file for details.',
180
+ }, null, 2),
181
+ },
182
+ ],
183
+ };
184
+ }
185
+ }
186
+ catch (err) {
187
+ closeSync(logFd);
188
+ return {
189
+ content: [
190
+ {
191
+ type: 'text',
192
+ text: JSON.stringify({
193
+ status: 'error',
194
+ message: `Failed to spawn guard process: ${err instanceof Error ? err.message : String(err)}`,
195
+ }, null, 2),
196
+ },
197
+ ],
198
+ isError: true,
199
+ };
200
+ }
201
+ }
202
+ /**
203
+ * Execute panguard_guard_stop — stop the real-time threat monitoring daemon.
204
+ * 執行 panguard_guard_stop — 停止即時威脅監控常駐程式。
205
+ */
206
+ export async function executeGuardStop(args) {
207
+ const dataDir = resolveDataDir(args);
208
+ const pidFile = path.join(dataDir, 'guard.pid');
209
+ let pid = null;
210
+ let stopped = false;
211
+ try {
212
+ const pidContent = await fs.readFile(pidFile, 'utf-8');
213
+ pid = parseInt(pidContent.trim(), 10);
214
+ if (!isNaN(pid)) {
215
+ try {
216
+ process.kill(pid, 'SIGTERM');
217
+ stopped = true;
218
+ // Remove stale PID file
219
+ await fs.unlink(pidFile).catch(() => undefined);
220
+ }
221
+ catch {
222
+ // Process not running — clean up stale PID file
223
+ await fs.unlink(pidFile).catch(() => undefined);
224
+ stopped = false;
225
+ }
226
+ }
227
+ }
228
+ catch {
229
+ // No PID file found
230
+ }
231
+ return {
232
+ content: [
233
+ {
234
+ type: 'text',
235
+ text: JSON.stringify({
236
+ status: stopped ? 'stopped' : 'not_running',
237
+ pid,
238
+ message: stopped
239
+ ? `Guard engine (PID: ${pid}) has been sent SIGTERM.`
240
+ : 'Guard engine was not running (no PID file found).',
241
+ }, null, 2),
242
+ },
243
+ ],
244
+ };
245
+ }
246
+ /**
247
+ * Execute panguard_status — get current status of all Panguard services.
248
+ * 執行 panguard_status — 取得所有 Panguard 服務的當前狀態。
249
+ */
250
+ export async function executeStatus(args) {
251
+ const dataDir = resolveDataDir(args);
252
+ const pidFile = path.join(dataDir, 'guard.pid');
253
+ let isRunning = false;
254
+ let pid = null;
255
+ try {
256
+ const pidContent = await fs.readFile(pidFile, 'utf-8');
257
+ pid = parseInt(pidContent.trim(), 10);
258
+ if (!isNaN(pid)) {
259
+ // Sending signal 0 checks if process exists without killing it
260
+ process.kill(pid, 0);
261
+ isRunning = true;
262
+ }
263
+ }
264
+ catch {
265
+ isRunning = false;
266
+ }
267
+ // Try to read guard config
268
+ let config = {};
269
+ try {
270
+ const configPath = path.join(dataDir, 'config.json');
271
+ const configContent = await fs.readFile(configPath, 'utf-8');
272
+ config = JSON.parse(configContent);
273
+ }
274
+ catch {
275
+ // No config file yet
276
+ }
277
+ // Count recent events as a proxy for threat activity
278
+ let eventCount = 0;
279
+ try {
280
+ const eventsFile = path.join(dataDir, 'events.jsonl');
281
+ const content = await fs.readFile(eventsFile, 'utf-8');
282
+ eventCount = content.trim().split('\n').filter(Boolean).length;
283
+ }
284
+ catch {
285
+ // No events file
286
+ }
287
+ return {
288
+ content: [
289
+ {
290
+ type: 'text',
291
+ text: JSON.stringify({
292
+ guard: {
293
+ running: isRunning,
294
+ pid,
295
+ dataDir,
296
+ mode: config['mode'] ?? 'unknown',
297
+ lang: config['lang'] ?? 'en',
298
+ },
299
+ events: {
300
+ total_logged: eventCount,
301
+ },
302
+ summary: isRunning
303
+ ? `Panguard Guard is RUNNING (PID: ${pid}, mode: ${config['mode'] ?? 'unknown'}).`
304
+ : 'Panguard Guard is NOT running. Use panguard_guard_start to start it.',
305
+ }, null, 2),
306
+ },
307
+ ],
308
+ };
309
+ }
310
+ /**
311
+ * Execute panguard_alerts — get recent security alerts from guard event log.
312
+ * 執行 panguard_alerts — 從守護事件日誌取得近期安全告警。
313
+ */
314
+ export async function executeAlerts(args) {
315
+ const limit = args['limit'] ?? 20;
316
+ const severity = args['severity'] ?? 'all';
317
+ const dataDir = resolveDataDir(args);
318
+ const eventsFile = path.join(dataDir, 'events.jsonl');
319
+ const alerts = [];
320
+ try {
321
+ const content = await fs.readFile(eventsFile, 'utf-8');
322
+ const lines = content.trim().split('\n').filter(Boolean);
323
+ for (const line of lines) {
324
+ try {
325
+ const event = JSON.parse(line);
326
+ if (severity === 'all' || event['severity'] === severity) {
327
+ alerts.push(event);
328
+ }
329
+ }
330
+ catch {
331
+ // Skip malformed JSONL lines
332
+ }
333
+ }
334
+ }
335
+ catch {
336
+ // No events file yet — guard may not have started
337
+ }
338
+ // Return the most recent `limit` alerts
339
+ const recentAlerts = alerts.slice(-Math.max(1, limit));
340
+ return {
341
+ content: [
342
+ {
343
+ type: 'text',
344
+ text: JSON.stringify({
345
+ total_alerts: recentAlerts.length,
346
+ filter: { severity, limit },
347
+ alerts: recentAlerts,
348
+ summary: recentAlerts.length === 0
349
+ ? 'No recent alerts. System appears clean.'
350
+ : `${recentAlerts.length} recent alert(s) detected.`,
351
+ }, null, 2),
352
+ },
353
+ ],
354
+ };
355
+ }
356
+ //# sourceMappingURL=guard-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard-tools.js","sourceRoot":"","sources":["../../src/tools/guard-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,SAAS,cAAc,CAAC,IAA6B;IACnD,OAAQ,IAAI,CAAC,SAAS,CAAY,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACnF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAA6B;IACnE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,GAAI,IAAI,CAAC,MAAM,CAAY,IAAI,UAAU,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,oCAAoC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC7B,4CAA4C;gBAC5C,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,MAAM,EAAE,iBAAiB;gCACzB,GAAG,EAAE,WAAW;gCAChB,OAAO;gCACP,IAAI;gCACJ,OAAO,EAAE,yCAAyC,WAAW,IAAI;6BAClE,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,wDAAwD;gBACxD,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,6CAA6C;IAC7C,IAAI,cAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACtE,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;QAClD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YACxE,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACnF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,MAAM,EAAE,OAAO;4BACf,OAAO,EAAE,yEAAyE;yBACnF,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChD,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,MAAM,EAAE,OAAO;wBACf,OAAO,EAAE,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBACxF,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE;YAC/D,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;YAC/B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,SAAS,CAAC,KAAK,CAAC,CAAC;QAEjB,yDAAyD;QACzD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;oBACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;wBACnB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;wBACxB,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM,GAAG,MAAM,CAAC;wBAChB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,gBAAgB;gBAClB,CAAC;YACH,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,MAAM,EAAE,SAAS;4BACjB,GAAG,EAAE,MAAM;4BACX,OAAO;4BACP,IAAI;4BACJ,OAAO,EAAE,OAAO;4BAChB,OAAO,EAAE,2CAA2C,MAAM,IAAI;yBAC/D,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,MAAM,EAAE,SAAS;4BACjB,OAAO;4BACP,IAAI;4BACJ,OAAO,EAAE,OAAO;4BAChB,OAAO,EACL,wGAAwG;yBAC3G,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,MAAM,EAAE,OAAO;wBACf,OAAO,EAAE,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBAC9F,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA6B;IAClE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAEhD,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7B,OAAO,GAAG,IAAI,CAAC;gBACf,wBAAwB;gBACxB,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;gBAChD,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAChD,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;oBAC3C,GAAG;oBACH,OAAO,EAAE,OAAO;wBACd,CAAC,CAAC,sBAAsB,GAAG,0BAA0B;wBACrD,CAAC,CAAC,mDAAmD;iBACxD,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAA6B;IAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAEhD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,GAAG,GAAkB,IAAI,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,+DAA+D;YAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,GAA4B,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAA4B,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IAED,qDAAqD;IACrD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,KAAK,EAAE;wBACL,OAAO,EAAE,SAAS;wBAClB,GAAG;wBACH,OAAO;wBACP,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS;wBACjC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI;qBAC7B;oBACD,MAAM,EAAE;wBACN,YAAY,EAAE,UAAU;qBACzB;oBACD,OAAO,EAAE,SAAS;wBAChB,CAAC,CAAC,mCAAmC,GAAG,WAAW,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,IAAI;wBAClF,CAAC,CAAC,sEAAsE;iBAC3E,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAA6B;IAC/D,MAAM,KAAK,GAAI,IAAI,CAAC,OAAO,CAAY,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAI,IAAI,CAAC,UAAU,CAAY,IAAI,KAAK,CAAC;IACvD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;gBAC1D,IAAI,QAAQ,KAAK,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAEvD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,YAAY,EAAE,YAAY,CAAC,MAAM;oBACjC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAC3B,MAAM,EAAE,YAAY;oBACpB,OAAO,EACL,YAAY,CAAC,MAAM,KAAK,CAAC;wBACvB,CAAC,CAAC,yCAAyC;wBAC3C,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,4BAA4B;iBACzD,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Panguard MCP - Management Tools
3
+ * Panguard MCP - 管理工具
4
+ *
5
+ * Implements panguard_init, panguard_deploy, panguard_block_ip,
6
+ * and panguard_generate_report MCP tools.
7
+ * 實作 panguard_init、panguard_deploy、panguard_block_ip 和 panguard_generate_report MCP 工具。
8
+ *
9
+ * @module @panguard-ai/panguard-mcp/tools/manage-tools
10
+ */
11
+ /**
12
+ * Execute panguard_block_ip — manually block an IP address.
13
+ * 執行 panguard_block_ip — 手動封鎖 IP 位址。
14
+ */
15
+ export declare function executeBlockIP(args: Record<string, unknown>): Promise<{
16
+ content: {
17
+ type: "text";
18
+ text: string;
19
+ }[];
20
+ isError: boolean;
21
+ } | {
22
+ content: {
23
+ type: "text";
24
+ text: string;
25
+ }[];
26
+ isError?: undefined;
27
+ }>;
28
+ /**
29
+ * Execute panguard_generate_report — run scan and generate a PDF compliance report.
30
+ * 執行 panguard_generate_report — 執行掃描並生成 PDF 合規報告。
31
+ */
32
+ export declare function executeGenerateReport(args: Record<string, unknown>): Promise<{
33
+ content: {
34
+ type: "text";
35
+ text: string;
36
+ }[];
37
+ isError?: undefined;
38
+ } | {
39
+ content: {
40
+ type: "text";
41
+ text: string;
42
+ }[];
43
+ isError: boolean;
44
+ }>;
45
+ /**
46
+ * Execute panguard_init — initialize Panguard configuration with defaults.
47
+ * 執行 panguard_init — 以預設值初始化 Panguard 配置。
48
+ */
49
+ export declare function executeInit(args: Record<string, unknown>): Promise<{
50
+ content: {
51
+ type: "text";
52
+ text: string;
53
+ }[];
54
+ }>;
55
+ /**
56
+ * Execute panguard_deploy — one-click setup: init + scan + optional report.
57
+ * 執行 panguard_deploy — 一鍵設定:初始化 + 掃描 + 可選報告。
58
+ */
59
+ export declare function executeDeploy(args: Record<string, unknown>): Promise<{
60
+ content: {
61
+ type: "text";
62
+ text: string;
63
+ }[];
64
+ }>;
65
+ //# sourceMappingURL=manage-tools.d.ts.map