@panguard-ai/panguard 0.3.8 → 0.4.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.
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +28 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/serve-admin.d.ts +11 -0
- package/dist/cli/commands/serve-admin.d.ts.map +1 -0
- package/dist/cli/commands/serve-admin.js +302 -0
- package/dist/cli/commands/serve-admin.js.map +1 -0
- package/dist/cli/commands/serve-auth.d.ts +11 -0
- package/dist/cli/commands/serve-auth.d.ts.map +1 -0
- package/dist/cli/commands/serve-auth.js +119 -0
- package/dist/cli/commands/serve-auth.js.map +1 -0
- package/dist/cli/commands/serve-core.d.ts +25 -0
- package/dist/cli/commands/serve-core.d.ts.map +1 -0
- package/dist/cli/commands/serve-core.js +258 -0
- package/dist/cli/commands/serve-core.js.map +1 -0
- package/dist/cli/commands/serve-tc.d.ts +12 -0
- package/dist/cli/commands/serve-tc.d.ts.map +1 -0
- package/dist/cli/commands/serve-tc.js +296 -0
- package/dist/cli/commands/serve-tc.js.map +1 -0
- package/dist/cli/commands/serve-types.d.ts +38 -0
- package/dist/cli/commands/serve-types.d.ts.map +1 -0
- package/dist/cli/commands/serve-types.js +108 -0
- package/dist/cli/commands/serve-types.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +6 -0
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +41 -1144
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/setup.js +2 -2
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/interactive/actions/audit.d.ts +7 -0
- package/dist/cli/interactive/actions/audit.d.ts.map +1 -0
- package/dist/cli/interactive/actions/audit.js +198 -0
- package/dist/cli/interactive/actions/audit.js.map +1 -0
- package/dist/cli/interactive/actions/demo.d.ts +7 -0
- package/dist/cli/interactive/actions/demo.d.ts.map +1 -0
- package/dist/cli/interactive/actions/demo.js +113 -0
- package/dist/cli/interactive/actions/demo.js.map +1 -0
- package/dist/cli/interactive/actions/guard.d.ts +7 -0
- package/dist/cli/interactive/actions/guard.d.ts.map +1 -0
- package/dist/cli/interactive/actions/guard.js +164 -0
- package/dist/cli/interactive/actions/guard.js.map +1 -0
- package/dist/cli/interactive/actions/misc.d.ts +13 -0
- package/dist/cli/interactive/actions/misc.d.ts.map +1 -0
- package/dist/cli/interactive/actions/misc.js +209 -0
- package/dist/cli/interactive/actions/misc.js.map +1 -0
- package/dist/cli/interactive/actions/scan.d.ts +7 -0
- package/dist/cli/interactive/actions/scan.d.ts.map +1 -0
- package/dist/cli/interactive/actions/scan.js +143 -0
- package/dist/cli/interactive/actions/scan.js.map +1 -0
- package/dist/cli/interactive/actions/setup.d.ts +8 -0
- package/dist/cli/interactive/actions/setup.d.ts.map +1 -0
- package/dist/cli/interactive/actions/setup.js +130 -0
- package/dist/cli/interactive/actions/setup.js.map +1 -0
- package/dist/cli/interactive/lang.d.ts +11 -0
- package/dist/cli/interactive/lang.d.ts.map +1 -0
- package/dist/cli/interactive/lang.js +51 -0
- package/dist/cli/interactive/lang.js.map +1 -0
- package/dist/cli/interactive/menu-defs.d.ts +17 -0
- package/dist/cli/interactive/menu-defs.d.ts.map +1 -0
- package/dist/cli/interactive/menu-defs.js +106 -0
- package/dist/cli/interactive/menu-defs.js.map +1 -0
- package/dist/cli/interactive/render.d.ts +16 -0
- package/dist/cli/interactive/render.d.ts.map +1 -0
- package/dist/cli/interactive/render.js +145 -0
- package/dist/cli/interactive/render.js.map +1 -0
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +64 -1322
- package/dist/cli/interactive.js.map +1 -1
- package/package.json +7 -6
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup & MCP connection actions
|
|
3
|
+
* @module @panguard-ai/panguard/cli/interactive/actions/setup
|
|
4
|
+
*/
|
|
5
|
+
import { c, spinner } from '@panguard-ai/core';
|
|
6
|
+
import { theme } from '../../theme.js';
|
|
7
|
+
import { breadcrumb, formatError } from '../../ux-helpers.js';
|
|
8
|
+
export async function actionInit(lang) {
|
|
9
|
+
breadcrumb(['Panguard', lang === 'zh-TW' ? '\u521D\u59CB\u8A2D\u5B9A' : 'Setup']);
|
|
10
|
+
const { runInitWizard } = await import('../../../init/index.js');
|
|
11
|
+
await runInitWizard(lang);
|
|
12
|
+
}
|
|
13
|
+
export async function actionMCPSetup(lang) {
|
|
14
|
+
breadcrumb(['Panguard', lang === 'zh-TW' ? 'MCP \u8A2D\u5B9A' : 'MCP Setup']);
|
|
15
|
+
const title = lang === 'zh-TW' ? 'AI \u4EE3\u7406\u9023\u63A5 (MCP)' : 'AI Agent Connection (MCP)';
|
|
16
|
+
console.log(` ${theme.brandBold(title)}`);
|
|
17
|
+
console.log('');
|
|
18
|
+
const detectSp = spinner(lang === 'zh-TW'
|
|
19
|
+
? '\u6B63\u5728\u5075\u6E2C AI \u4EE3\u7406\u5E73\u53F0...'
|
|
20
|
+
: 'Detecting AI agent platforms...');
|
|
21
|
+
try {
|
|
22
|
+
const mcpConfig = await import('@panguard-ai/panguard-mcp/config');
|
|
23
|
+
const platforms = await mcpConfig.detectPlatforms();
|
|
24
|
+
const detected = platforms.filter((p) => p.detected);
|
|
25
|
+
const unconfigured = detected.filter((p) => !p.alreadyConfigured);
|
|
26
|
+
if (detected.length === 0) {
|
|
27
|
+
detectSp.warn(lang === 'zh-TW'
|
|
28
|
+
? '\u672A\u5075\u6E2C\u5230\u4EFB\u4F55 AI \u4EE3\u7406\u5E73\u53F0'
|
|
29
|
+
: 'No AI agent platforms detected');
|
|
30
|
+
console.log('');
|
|
31
|
+
console.log(c.dim(lang === 'zh-TW'
|
|
32
|
+
? ' \u652F\u63F4\u5E73\u53F0: Claude Code, Cursor, OpenClaw, Codex, WorkBuddy, NemoClaw, Claude Desktop'
|
|
33
|
+
: ' Supported: Claude Code, Cursor, OpenClaw, Codex, WorkBuddy, NemoClaw, Claude Desktop'));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
detectSp.succeed(lang === 'zh-TW'
|
|
37
|
+
? `\u5075\u6E2C\u5230 ${detected.length} \u500B\u5E73\u53F0`
|
|
38
|
+
: `Found ${detected.length} platform(s)`);
|
|
39
|
+
console.log('');
|
|
40
|
+
for (const p of platforms) {
|
|
41
|
+
const status = p.detected
|
|
42
|
+
? p.alreadyConfigured
|
|
43
|
+
? c.safe('\u2713 configured')
|
|
44
|
+
: c.caution('~ not configured')
|
|
45
|
+
: c.dim('- not found');
|
|
46
|
+
console.log(` ${p.detected ? c.bold(p.name) : c.dim(p.name)} ${status}`);
|
|
47
|
+
}
|
|
48
|
+
console.log('');
|
|
49
|
+
if (unconfigured.length === 0) {
|
|
50
|
+
console.log(c.safe(lang === 'zh-TW'
|
|
51
|
+
? ` \u2713 \u6240\u6709\u5E73\u53F0\u5DF2\u8A2D\u5B9A\u5B8C\u6210\uFF01`
|
|
52
|
+
: ' \u2713 All platforms already configured!'));
|
|
53
|
+
console.log('');
|
|
54
|
+
console.log(c.dim(lang === 'zh-TW'
|
|
55
|
+
? ' \u91CD\u555F AI \u4EE3\u7406\u5F8C\uFF0C\u8ACB\u6C42\u300Cpanguard_status\u300D\u5373\u53EF\u9A57\u8B49\u3002'
|
|
56
|
+
: ' Restart your AI agent, then ask "panguard_status" to verify.'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const configSp = spinner(lang === 'zh-TW'
|
|
60
|
+
? `\u6B63\u5728\u8A2D\u5B9A ${unconfigured.length} \u500B\u5E73\u53F0...`
|
|
61
|
+
: `Configuring ${unconfigured.length} platform(s)...`);
|
|
62
|
+
let successCount = 0;
|
|
63
|
+
for (const p of unconfigured) {
|
|
64
|
+
const result = mcpConfig.injectMCPConfig(p.id);
|
|
65
|
+
if (result.success)
|
|
66
|
+
successCount++;
|
|
67
|
+
}
|
|
68
|
+
if (successCount === unconfigured.length) {
|
|
69
|
+
configSp.succeed(lang === 'zh-TW'
|
|
70
|
+
? `${successCount} \u500B\u5E73\u53F0\u8A2D\u5B9A\u5B8C\u6210`
|
|
71
|
+
: `${successCount} platform(s) configured`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
configSp.warn(lang === 'zh-TW'
|
|
75
|
+
? `${successCount}/${unconfigured.length} \u5E73\u53F0\u8A2D\u5B9A\u6210\u529F`
|
|
76
|
+
: `${successCount}/${unconfigured.length} platform(s) configured`);
|
|
77
|
+
}
|
|
78
|
+
console.log('');
|
|
79
|
+
console.log(c.dim(lang === 'zh-TW'
|
|
80
|
+
? ' \u91CD\u555F AI \u4EE3\u7406\u5F8C\u5373\u53EF\u4F7F\u7528 11 \u500B panguard_* MCP \u5DE5\u5177\uFF1A'
|
|
81
|
+
: ' Restart your AI agent to use 11 panguard_* MCP tools:'));
|
|
82
|
+
const restartHints = {
|
|
83
|
+
'claude-code': {
|
|
84
|
+
en: 'Close and reopen your terminal',
|
|
85
|
+
zh: '\u95DC\u9589\u4E26\u91CD\u65B0\u958B\u555F\u7D42\u7AEF\u6A5F',
|
|
86
|
+
},
|
|
87
|
+
'claude-desktop': {
|
|
88
|
+
en: 'Quit and reopen Claude Desktop',
|
|
89
|
+
zh: '\u9000\u51FA\u4E26\u91CD\u65B0\u958B\u555F Claude Desktop',
|
|
90
|
+
},
|
|
91
|
+
cursor: {
|
|
92
|
+
en: 'Cmd+Shift+P (or Ctrl+Shift+P) > "Reload Window"',
|
|
93
|
+
zh: 'Cmd+Shift+P > "Reload Window"',
|
|
94
|
+
},
|
|
95
|
+
openclaw: {
|
|
96
|
+
en: 'Close and reopen OpenClaw',
|
|
97
|
+
zh: '\u95DC\u9589\u4E26\u91CD\u65B0\u958B\u555F OpenClaw',
|
|
98
|
+
},
|
|
99
|
+
codex: { en: 'Restart the Codex CLI session', zh: '\u91CD\u65B0\u555F\u52D5 Codex CLI' },
|
|
100
|
+
workbuddy: {
|
|
101
|
+
en: 'Close and reopen WorkBuddy',
|
|
102
|
+
zh: '\u95DC\u9589\u4E26\u91CD\u65B0\u958B\u555F WorkBuddy',
|
|
103
|
+
},
|
|
104
|
+
nemoclaw: {
|
|
105
|
+
en: 'Close and reopen NemoClaw',
|
|
106
|
+
zh: '\u95DC\u9589\u4E26\u91CD\u65B0\u958B\u555F NemoClaw',
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
for (const p of unconfigured) {
|
|
110
|
+
const hint = restartHints[p.id];
|
|
111
|
+
const text = hint
|
|
112
|
+
? lang === 'zh-TW'
|
|
113
|
+
? hint.zh
|
|
114
|
+
: hint.en
|
|
115
|
+
: lang === 'zh-TW'
|
|
116
|
+
? '\u91CD\u65B0\u555F\u52D5\u61C9\u7528\u7A0B\u5F0F'
|
|
117
|
+
: 'Restart the application';
|
|
118
|
+
console.log(c.dim(` ${p.name}: ${text}`));
|
|
119
|
+
}
|
|
120
|
+
console.log('');
|
|
121
|
+
console.log(c.dim(lang === 'zh-TW'
|
|
122
|
+
? ' \u8A66\u8A66\u554F AI: \u300C\u5BE9\u8A08\u9019\u500B\u5C08\u6848\u7684\u6280\u80FD\u300D\u6216\u300C\u6383\u63CF\u6211\u7684\u7CFB\u7D71\u300D'
|
|
123
|
+
: ' Try asking your AI: "audit the skills in this project" or "scan my system"'));
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
detectSp.fail(lang === 'zh-TW' ? 'MCP \u8A2D\u5B9A\u5931\u6557' : 'MCP setup failed');
|
|
127
|
+
console.log(formatError(err instanceof Error ? err.message : String(err), 'MCP Setup', lang === 'zh-TW' ? '\u8ACB\u91CD\u8A66' : 'Please retry'));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/cli/interactive/actions/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language management for interactive CLI
|
|
3
|
+
* @module @panguard-ai/panguard/cli/interactive/lang
|
|
4
|
+
*/
|
|
5
|
+
import type { Lang } from '../menu.js';
|
|
6
|
+
export declare function getLang(): Lang;
|
|
7
|
+
export declare function setLang(lang: Lang): void;
|
|
8
|
+
export declare function getConfigPath(): string;
|
|
9
|
+
export declare function detectLang(): Lang;
|
|
10
|
+
export declare function saveLang(lang: Lang): void;
|
|
11
|
+
//# sourceMappingURL=lang.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lang.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/lang.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAExC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,IAAI,CAYjC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAYzC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language management for interactive CLI
|
|
3
|
+
* @module @panguard-ai/panguard/cli/interactive/lang
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
const CONFIG_DIR = join(homedir(), '.panguard');
|
|
9
|
+
const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
|
|
10
|
+
let currentLang = 'en';
|
|
11
|
+
export function getLang() {
|
|
12
|
+
return currentLang;
|
|
13
|
+
}
|
|
14
|
+
export function setLang(lang) {
|
|
15
|
+
currentLang = lang;
|
|
16
|
+
}
|
|
17
|
+
export function getConfigPath() {
|
|
18
|
+
return CONFIG_PATH;
|
|
19
|
+
}
|
|
20
|
+
export function detectLang() {
|
|
21
|
+
if (existsSync(CONFIG_PATH)) {
|
|
22
|
+
try {
|
|
23
|
+
const data = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
|
|
24
|
+
if (data.lang === 'zh-TW' || data.lang === 'en')
|
|
25
|
+
return data.lang;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
/* ignore */
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const sysLang = process.env['LANG'] ?? process.env['LC_ALL'] ?? '';
|
|
32
|
+
if (sysLang.includes('zh'))
|
|
33
|
+
return 'zh-TW';
|
|
34
|
+
return 'en';
|
|
35
|
+
}
|
|
36
|
+
export function saveLang(lang) {
|
|
37
|
+
try {
|
|
38
|
+
let config = {};
|
|
39
|
+
if (existsSync(CONFIG_PATH)) {
|
|
40
|
+
config = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
|
|
41
|
+
}
|
|
42
|
+
config['lang'] = lang;
|
|
43
|
+
if (!existsSync(CONFIG_DIR))
|
|
44
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
45
|
+
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
/* best effort */
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lang.js","sourceRoot":"","sources":["../../../src/cli/interactive/lang.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,IAAI,WAAW,GAAS,IAAI,CAAC;AAE7B,MAAM,UAAU,OAAO;IACrB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAU;IAChC,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAU;IACjC,IAAI,CAAC;QACH,IAAI,MAAM,GAA4B,EAAE,CAAC;QACzC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menu definitions for interactive CLI
|
|
3
|
+
* @module @panguard-ai/panguard/cli/interactive/menu-defs
|
|
4
|
+
*/
|
|
5
|
+
export interface MenuDef {
|
|
6
|
+
key: string;
|
|
7
|
+
icon: string;
|
|
8
|
+
number: number;
|
|
9
|
+
en: string;
|
|
10
|
+
zh: string;
|
|
11
|
+
enDesc: string;
|
|
12
|
+
zhDesc: string;
|
|
13
|
+
tierBadge: string;
|
|
14
|
+
featureKey: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const MENU_DEFS: MenuDef[];
|
|
17
|
+
//# sourceMappingURL=menu-defs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-defs.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/menu-defs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,EAAE,OAAO,EAqG9B,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menu definitions for interactive CLI
|
|
3
|
+
* @module @panguard-ai/panguard/cli/interactive/menu-defs
|
|
4
|
+
*/
|
|
5
|
+
export const MENU_DEFS = [
|
|
6
|
+
{
|
|
7
|
+
key: 'setup',
|
|
8
|
+
icon: '>',
|
|
9
|
+
number: 0,
|
|
10
|
+
en: 'Setup Wizard',
|
|
11
|
+
zh: '\u521D\u59CB\u8A2D\u5B9A',
|
|
12
|
+
enDesc: 'Configure all modules with guided setup',
|
|
13
|
+
zhDesc: '\u958B\u555F\u6B64\u5F15\u64CE\uFF0C\u81EA\u52D5\u914D\u7F6E\u6240\u6709\u6A21\u7D44',
|
|
14
|
+
tierBadge: '',
|
|
15
|
+
featureKey: 'setup',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
key: 'scan',
|
|
19
|
+
icon: '\u26A1',
|
|
20
|
+
number: 1,
|
|
21
|
+
en: 'Security Scan',
|
|
22
|
+
zh: '\u5B89\u5168\u6383\u63CF',
|
|
23
|
+
enDesc: 'Scan system security and analyze risks',
|
|
24
|
+
zhDesc: '\u6383\u63CF\u7CFB\u7D71\u5B89\u5168\u72C0\u614B\uFF0C\u5206\u6790\u6240\u6709\u98A8\u96AA',
|
|
25
|
+
tierBadge: '',
|
|
26
|
+
featureKey: 'scan',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
key: 'report',
|
|
30
|
+
icon: '\u25A0',
|
|
31
|
+
number: 2,
|
|
32
|
+
en: 'Compliance Report [Coming Soon]',
|
|
33
|
+
zh: '\u5408\u898F\u5831\u544A [\u5373\u5C07\u63A8\u51FA]',
|
|
34
|
+
enDesc: 'ISO 27001, SOC 2, TW Cyber Security Act — under development',
|
|
35
|
+
zhDesc: 'ISO 27001\u3001SOC 2\u3001\u8CC7\u5B89\u7BA1\u7406\u6CD5 \u2014 \u958B\u767C\u4E2D',
|
|
36
|
+
tierBadge: '',
|
|
37
|
+
featureKey: 'report',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
key: 'guard',
|
|
41
|
+
icon: '\u2713',
|
|
42
|
+
number: 3,
|
|
43
|
+
en: 'Guard Engine',
|
|
44
|
+
zh: '\u5B88\u8B77\u5F15\u64CE',
|
|
45
|
+
enDesc: 'Real-time monitoring and continuous protection',
|
|
46
|
+
zhDesc: '\u5373\u6642\u76E3\u63A7\u9023\u7E8C\u9632\u8B77\u7CFB\u7D71',
|
|
47
|
+
tierBadge: '',
|
|
48
|
+
featureKey: 'guard',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: 'trap',
|
|
52
|
+
icon: '\u00B7',
|
|
53
|
+
number: 4,
|
|
54
|
+
en: 'Honeypot System [Coming Soon]',
|
|
55
|
+
zh: '\u871C\u7F50\u7CFB\u7D71 [\u5373\u5C07\u63A8\u51FA]',
|
|
56
|
+
enDesc: 'Decoy services to detect attackers — under development',
|
|
57
|
+
zhDesc: '\u8A98\u990C\u670D\u52D9\u5075\u6E2C\u653B\u64CA\u8005 \u2014 \u958B\u767C\u4E2D',
|
|
58
|
+
tierBadge: '',
|
|
59
|
+
featureKey: 'trap',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
key: 'notify',
|
|
63
|
+
icon: '\u00B7',
|
|
64
|
+
number: 5,
|
|
65
|
+
en: 'Notifications',
|
|
66
|
+
zh: '\u901A\u77E5\u7CFB\u7D71',
|
|
67
|
+
enDesc: 'LINE, Telegram, Slack, Email, Webhook channels',
|
|
68
|
+
zhDesc: 'LINE\u3001Telegram\u3001Slack\u3001Email\u3001Webhook \u901A\u77E5\u7BA1\u9053',
|
|
69
|
+
tierBadge: '',
|
|
70
|
+
featureKey: 'notify',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
key: 'threat-cloud',
|
|
74
|
+
icon: '\u00B7',
|
|
75
|
+
number: 6,
|
|
76
|
+
en: 'Threat Cloud',
|
|
77
|
+
zh: '\u5A01\u8105\u60C5\u5831',
|
|
78
|
+
enDesc: 'Threat intelligence REST API server',
|
|
79
|
+
zhDesc: '\u5A01\u8105\u60C5\u5831 REST API \u4F3A\u670D\u5668',
|
|
80
|
+
tierBadge: '',
|
|
81
|
+
featureKey: 'threat-cloud',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
key: 'demo',
|
|
85
|
+
icon: '\u00B7',
|
|
86
|
+
number: 7,
|
|
87
|
+
en: 'Auto Demo',
|
|
88
|
+
zh: '\u81EA\u52D5\u5C55\u793A',
|
|
89
|
+
enDesc: 'Run through all security modules',
|
|
90
|
+
zhDesc: '\u81EA\u52D5\u57F7\u884C\u7D9C\u5408\u529F\u80FD\u5C55\u793A',
|
|
91
|
+
tierBadge: '',
|
|
92
|
+
featureKey: 'demo',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
key: 'audit',
|
|
96
|
+
icon: '\u25A0',
|
|
97
|
+
number: 8,
|
|
98
|
+
en: 'Skill Auditor',
|
|
99
|
+
zh: '\u6280\u80FD\u5BE9\u8A08',
|
|
100
|
+
enDesc: 'Audit AI agent skills for security issues',
|
|
101
|
+
zhDesc: '\u5BE9\u8A08 AI \u4EE3\u7406\u6280\u80FD\u7684\u5B89\u5168\u554F\u984C',
|
|
102
|
+
tierBadge: '',
|
|
103
|
+
featureKey: 'audit',
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
//# sourceMappingURL=menu-defs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-defs.js","sourceRoot":"","sources":["../../../src/cli/interactive/menu-defs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC;QACE,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,cAAc;QAClB,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,yCAAyC;QACjD,MAAM,EAAE,sFAAsF;QAC9F,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,OAAO;KACpB;IACD;QACE,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,eAAe;QACnB,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,wCAAwC;QAChD,MAAM,EACJ,4FAA4F;QAC9F,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,MAAM;KACnB;IACD;QACE,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,iCAAiC;QACrC,EAAE,EAAE,qDAAqD;QACzD,MAAM,EAAE,6DAA6D;QACrE,MAAM,EAAE,oFAAoF;QAC5F,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,QAAQ;KACrB;IACD;QACE,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,cAAc;QAClB,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,gDAAgD;QACxD,MAAM,EAAE,8DAA8D;QACtE,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,OAAO;KACpB;IACD;QACE,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,+BAA+B;QACnC,EAAE,EAAE,qDAAqD;QACzD,MAAM,EAAE,wDAAwD;QAChE,MAAM,EAAE,kFAAkF;QAC1F,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,MAAM;KACnB;IACD;QACE,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,eAAe;QACnB,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,gDAAgD;QACxD,MAAM,EAAE,gFAAgF;QACxF,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,QAAQ;KACrB;IACD;QACE,GAAG,EAAE,cAAc;QACnB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,cAAc;QAClB,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,qCAAqC;QAC7C,MAAM,EAAE,sDAAsD;QAC9D,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,cAAc;KAC3B;IACD;QACE,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,WAAW;QACf,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,kCAAkC;QAC1C,MAAM,EAAE,8DAA8D;QACtE,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,MAAM;KACnB;IACD;QACE,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,eAAe;QACnB,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,2CAA2C;QACnD,MAAM,EAAE,wEAAwE;QAChF,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,OAAO;KACpB;CACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering functions for interactive CLI UI
|
|
3
|
+
* @module @panguard-ai/panguard/cli/interactive/render
|
|
4
|
+
*/
|
|
5
|
+
import type { Lang } from '../menu.js';
|
|
6
|
+
export declare function isGuardRunning(): {
|
|
7
|
+
running: boolean;
|
|
8
|
+
pid?: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function isMCPConfigured(): Promise<boolean>;
|
|
11
|
+
export declare function renderStatusPanel(lang: Lang): void;
|
|
12
|
+
export declare function renderMenu(lang: Lang): void;
|
|
13
|
+
export declare function renderFooter(lang: Lang): void;
|
|
14
|
+
export declare function showHelp(lang: Lang): void;
|
|
15
|
+
export declare function renderStartup(lang: Lang): void;
|
|
16
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/render.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAUnE;AAMD,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAUxD;AAMD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAuBlD;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAe3C;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAO7C;AAMD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAgDzC;AAMD,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAU9C"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering functions for interactive CLI UI
|
|
3
|
+
* @module @panguard-ai/panguard/cli/interactive/render
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
import { c, box } from '@panguard-ai/core';
|
|
9
|
+
import { PANGUARD_VERSION } from '../../index.js';
|
|
10
|
+
import { renderLogo, theme } from '../theme.js';
|
|
11
|
+
import { moduleCountDisplay } from '../ux-helpers.js';
|
|
12
|
+
import { MENU_DEFS } from './menu-defs.js';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Guard process helpers
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
export function isGuardRunning() {
|
|
17
|
+
const pidPath = join(homedir(), '.panguard-guard', 'panguard-guard.pid');
|
|
18
|
+
if (!existsSync(pidPath))
|
|
19
|
+
return { running: false };
|
|
20
|
+
try {
|
|
21
|
+
const pid = parseInt(readFileSync(pidPath, 'utf-8').trim(), 10);
|
|
22
|
+
process.kill(pid, 0);
|
|
23
|
+
return { running: true, pid };
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { running: false };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// MCP detection helper
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
export async function isMCPConfigured() {
|
|
33
|
+
try {
|
|
34
|
+
const mcpConfig = await import('@panguard-ai/panguard-mcp/config');
|
|
35
|
+
const platforms = await mcpConfig.detectPlatforms();
|
|
36
|
+
return platforms.some((p) => p.detected && p.alreadyConfigured);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Status panel with box border
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
export function renderStatusPanel(lang) {
|
|
46
|
+
const guardStatus = isGuardRunning();
|
|
47
|
+
const modulesValue = moduleCountDisplay(lang);
|
|
48
|
+
const guardLine = guardStatus.running
|
|
49
|
+
? `${c.safe('PROTECTED')} ${c.dim(`(PID: ${guardStatus.pid})`)}`
|
|
50
|
+
: c.dim('Inactive');
|
|
51
|
+
const lines = lang === 'zh-TW'
|
|
52
|
+
? [
|
|
53
|
+
`\u9632\u8B77\u72C0\u614B\uFF1A${guardLine}`,
|
|
54
|
+
`\u53EF\u7528\u6A21\u7D44\uFF1A${modulesValue}`,
|
|
55
|
+
`\u7248\u672C\uFF1A v${PANGUARD_VERSION}`,
|
|
56
|
+
]
|
|
57
|
+
: [
|
|
58
|
+
`Protection: ${guardLine}`,
|
|
59
|
+
`Modules: ${modulesValue}`,
|
|
60
|
+
`Version: v${PANGUARD_VERSION}`,
|
|
61
|
+
];
|
|
62
|
+
const title = lang === 'zh-TW' ? '\u7CFB\u7D71\u72C0\u614B / System Status' : 'System Status';
|
|
63
|
+
console.log(box(lines.join('\n'), { borderColor: c.sage, title }));
|
|
64
|
+
}
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Menu rendering
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
export function renderMenu(lang) {
|
|
69
|
+
const titleText = lang === 'zh-TW' ? '\u4E3B\u9078\u55AE / Main Menu' : 'Main Menu';
|
|
70
|
+
console.log(` ${theme.title(titleText)}`);
|
|
71
|
+
console.log('');
|
|
72
|
+
for (const def of MENU_DEFS) {
|
|
73
|
+
const name = lang === 'zh-TW' ? def.zh : def.en;
|
|
74
|
+
const desc = lang === 'zh-TW' ? def.zhDesc : def.enDesc;
|
|
75
|
+
const badge = def.tierBadge ? ` ${c.dim(def.tierBadge)}` : '';
|
|
76
|
+
const iconStr = def.icon === '\u2713' ? c.safe(def.icon) : c.dim(def.icon);
|
|
77
|
+
console.log(` ${iconStr} ${c.sage(`[${def.number}]`)} ${name}${badge}`);
|
|
78
|
+
console.log(` ${c.dim(desc)}`);
|
|
79
|
+
console.log('');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Footer shortcuts
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
export function renderFooter(lang) {
|
|
86
|
+
const quit = lang === 'zh-TW' ? '\u9000\u51FA' : 'Quit';
|
|
87
|
+
const help = lang === 'zh-TW' ? '\u8AAA\u660E' : 'Help';
|
|
88
|
+
const langToggle = '\u4E2D/EN';
|
|
89
|
+
console.log(`${c.dim(`[q] ${quit} [h] ${help} [b] ${langToggle}`)}`);
|
|
90
|
+
console.log('');
|
|
91
|
+
}
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// Help display
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
export function showHelp(lang) {
|
|
96
|
+
console.log('');
|
|
97
|
+
const title = lang === 'zh-TW' ? '\u6307\u4EE4\u8AAA\u660E' : 'Available Commands';
|
|
98
|
+
console.log(` ${theme.brandBold(title)}`);
|
|
99
|
+
console.log('');
|
|
100
|
+
const menuTitle = lang === 'zh-TW' ? '\u4E3B\u9078\u55AE' : 'Main Menu';
|
|
101
|
+
console.log(` ${c.sage(menuTitle)}`);
|
|
102
|
+
console.log(c.dim(lang === 'zh-TW'
|
|
103
|
+
? ' [0]-[8] \u6309\u6578\u5B57\u9375\u5373\u523B\u9078\u64C7\uFF08\u4E0D\u9700\u6309 Enter\uFF09'
|
|
104
|
+
: ' [0]-[8] Press number key to select instantly (no Enter needed)'));
|
|
105
|
+
console.log('');
|
|
106
|
+
const promptTitle = lang === 'zh-TW' ? '\u6587\u5B57\u6307\u4EE4' : 'Text Commands';
|
|
107
|
+
console.log(` ${c.sage(promptTitle)}`);
|
|
108
|
+
const cmds = [
|
|
109
|
+
{
|
|
110
|
+
cmd: 'setup',
|
|
111
|
+
en: 'Connect AI agents via MCP',
|
|
112
|
+
zh: '\u900F\u904E MCP \u9023\u63A5 AI \u4EE3\u7406',
|
|
113
|
+
},
|
|
114
|
+
{ cmd: 'audit', en: 'Audit AI agent skills', zh: '\u5BE9\u8A08 AI \u4EE3\u7406\u6280\u80FD' },
|
|
115
|
+
{ cmd: 'status', en: 'System status overview', zh: '\u7CFB\u7D71\u72C0\u614B\u7E3D\u89BD' },
|
|
116
|
+
{ cmd: 'config', en: 'Settings management', zh: '\u8A2D\u5B9A\u7BA1\u7406' },
|
|
117
|
+
{ cmd: 'hardening', en: 'Security hardening', zh: '\u5B89\u5168\u52A0\u56FA' },
|
|
118
|
+
{ cmd: 'doctor', en: 'Health diagnostics', zh: '\u5065\u5EB7\u8A3A\u65B7' },
|
|
119
|
+
{ cmd: 'help', en: 'Show this help', zh: '\u986F\u793A\u6B64\u8AAA\u660E' },
|
|
120
|
+
];
|
|
121
|
+
for (const { cmd, en, zh } of cmds) {
|
|
122
|
+
const desc = lang === 'zh-TW' ? zh : en;
|
|
123
|
+
console.log(` ${c.sage(cmd.padEnd(14))} ${c.dim(desc)}`);
|
|
124
|
+
}
|
|
125
|
+
const shortcutTitle = lang === 'zh-TW' ? '\u5FEB\u6377\u9375' : 'Shortcuts';
|
|
126
|
+
console.log('');
|
|
127
|
+
console.log(` ${c.sage(shortcutTitle)}`);
|
|
128
|
+
console.log(c.dim(` [q] ${lang === 'zh-TW' ? '\u9000\u51FA' : 'Quit'} [h] ${lang === 'zh-TW' ? '\u8AAA\u660E' : 'Help'} [b] ${lang === 'zh-TW' ? '\u5207\u63DB\u8A9E\u8A00' : 'Toggle language'}`));
|
|
129
|
+
console.log('');
|
|
130
|
+
}
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
// Startup screen
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
export function renderStartup(lang) {
|
|
135
|
+
console.clear();
|
|
136
|
+
renderLogo();
|
|
137
|
+
console.log('');
|
|
138
|
+
console.log(c.dim(' AI-Powered Security Platform'));
|
|
139
|
+
console.log('');
|
|
140
|
+
renderStatusPanel(lang);
|
|
141
|
+
console.log('');
|
|
142
|
+
renderMenu(lang);
|
|
143
|
+
renderFooter(lang);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/cli/interactive/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+BH,wBAAsB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmHnE"}
|