@panguard-ai/panguard 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -0
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +56 -6
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +6 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +39 -23
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +63 -20
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/guard.d.ts.map +1 -1
- package/dist/cli/commands/guard.js +220 -70
- package/dist/cli/commands/guard.js.map +1 -1
- package/dist/cli/commands/hook.d.ts +115 -0
- package/dist/cli/commands/hook.d.ts.map +1 -0
- package/dist/cli/commands/hook.js +767 -0
- package/dist/cli/commands/hook.js.map +1 -0
- package/dist/cli/commands/persist.d.ts +32 -0
- package/dist/cli/commands/persist.d.ts.map +1 -0
- package/dist/cli/commands/persist.js +104 -0
- package/dist/cli/commands/persist.js.map +1 -0
- package/dist/cli/commands/scan.d.ts.map +1 -1
- package/dist/cli/commands/scan.js +75 -21
- package/dist/cli/commands/scan.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +110 -37
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +66 -26
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/up.d.ts.map +1 -1
- package/dist/cli/commands/up.js +257 -43
- package/dist/cli/commands/up.js.map +1 -1
- package/dist/cli/consent.d.ts +26 -6
- package/dist/cli/consent.d.ts.map +1 -1
- package/dist/cli/consent.js +47 -18
- package/dist/cli/consent.js.map +1 -1
- package/dist/cli/credentials.d.ts +11 -1
- package/dist/cli/credentials.d.ts.map +1 -1
- package/dist/cli/credentials.js +6 -1
- package/dist/cli/credentials.js.map +1 -1
- package/dist/cli/dashboard-url.d.ts +31 -0
- package/dist/cli/dashboard-url.d.ts.map +1 -0
- package/dist/cli/dashboard-url.js +66 -0
- package/dist/cli/dashboard-url.js.map +1 -0
- package/dist/cli/first-run.d.ts +35 -0
- package/dist/cli/first-run.d.ts.map +1 -0
- package/dist/cli/first-run.js +59 -0
- package/dist/cli/first-run.js.map +1 -0
- package/dist/cli/guard-config.d.ts.map +1 -1
- package/dist/cli/guard-config.js +15 -3
- package/dist/cli/guard-config.js.map +1 -1
- package/dist/cli/index.js +32 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/interactive/actions/setup.d.ts.map +1 -1
- package/dist/cli/interactive/actions/setup.js +2 -10
- package/dist/cli/interactive/actions/setup.js.map +1 -1
- package/dist/cli/interactive/menu-defs.js +6 -6
- package/dist/cli/interactive/render.js +1 -1
- package/dist/cli/interactive/render.js.map +1 -1
- package/dist/cli/workspace-sync.d.ts +0 -1
- package/dist/cli/workspace-sync.d.ts.map +1 -1
- package/dist/cli/workspace-sync.js +3 -1
- package/dist/cli/workspace-sync.js.map +1 -1
- package/dist/init/wizard-runner.d.ts.map +1 -1
- package/dist/init/wizard-runner.js +0 -8
- package/dist/init/wizard-runner.js.map +1 -1
- package/package.json +15 -14
package/dist/cli/consent.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Telemetry consent — first-run collective-defense disclosure.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* Collective-defense sharing is OPT-IN and defaults to OFF. On first interactive
|
|
5
|
+
* run we explain BOTH the value (your blocked attacks become ATR rules that
|
|
6
|
+
* protect everyone, and you get community rules back faster) and the privacy
|
|
7
|
+
* guarantee (matched rule ID, a one-way payload hash, source type — never
|
|
8
|
+
* prompts/code/file contents/keys, no IP, no hostname, a random install ID),
|
|
9
|
+
* then ask the user to turn it ON; pressing Enter declines. This is an informed
|
|
10
|
+
* invitation, not a nag or a pre-checked default. Raw samples are never sent.
|
|
11
|
+
* Non-interactive (CI) stays OFF until explicitly enabled. Nothing leaves the
|
|
12
|
+
* machine unless the user explicitly opts in (gates are `=== true`).
|
|
10
13
|
*/
|
|
11
14
|
import { existsSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
12
15
|
import { join } from 'node:path';
|
|
@@ -20,8 +23,13 @@ const CONSENT_MARKER = join(GUARD_CONFIG_DIR, '.telemetry-prompted');
|
|
|
20
23
|
export function hasConsentBeenAsked() {
|
|
21
24
|
return existsSync(CONSENT_MARKER);
|
|
22
25
|
}
|
|
23
|
-
/**
|
|
24
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Mark consent as asked (regardless of answer). Exported so a command that owns
|
|
28
|
+
* its own consent prompt (e.g. `pga setup`'s Threat Cloud question) can record
|
|
29
|
+
* that the user has already been asked — preventing the trailing
|
|
30
|
+
* `ensureTelemetryConsent()` from re-prompting and overwriting the first answer.
|
|
31
|
+
*/
|
|
32
|
+
export function markConsentAsked() {
|
|
25
33
|
try {
|
|
26
34
|
if (!existsSync(GUARD_CONFIG_DIR)) {
|
|
27
35
|
mkdirSync(GUARD_CONFIG_DIR, { recursive: true });
|
|
@@ -49,17 +57,20 @@ export async function askTelemetryConsent() {
|
|
|
49
57
|
return false;
|
|
50
58
|
}
|
|
51
59
|
console.log('');
|
|
52
|
-
console.log(` ${symbols.info} ${c.bold('Collective defense')}`);
|
|
60
|
+
console.log(` ${symbols.info} ${c.bold('Collective defense (optional, off by default)')}`);
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log(` ${c.dim('Why turn it on: every attack PanGuard blocks on your machine can become')}`);
|
|
63
|
+
console.log(` ${c.dim('a new ATR rule that protects everyone — and you get those community')}`);
|
|
64
|
+
console.log(` ${c.dim('rules back faster. More sensors means faster detection for all of us.')}`);
|
|
53
65
|
console.log('');
|
|
54
|
-
console.log(` ${c.dim('
|
|
55
|
-
console.log(` ${c.dim('the
|
|
56
|
-
console.log(` ${c.dim('
|
|
66
|
+
console.log(` ${c.dim('What is shared: only the matched rule ID, a one-way hash of the payload,')}`);
|
|
67
|
+
console.log(` ${c.dim('and the source type. Never your prompts, code, file contents, keys, IP')}`);
|
|
68
|
+
console.log(` ${c.dim('address, or hostname. A random install ID only. Raw samples are never sent.')}`);
|
|
57
69
|
console.log('');
|
|
58
|
-
console.log(` ${c.dim('
|
|
59
|
-
console.log(` ${c.dim('only. Raw samples are never sent unless you opt in separately.')}`);
|
|
60
|
-
console.log(` ${c.dim('Turn off anytime: pga config set telemetry false')}`);
|
|
70
|
+
console.log(` ${c.dim('Stays off unless you opt in. Change anytime: pga config set telemetry true/false')}`);
|
|
61
71
|
console.log('');
|
|
62
|
-
|
|
72
|
+
// Opt-in: default is NO. Pressing Enter declines (default OFF).
|
|
73
|
+
const answer = await promptYesNo(' Join collective defense and share anonymized threat signatures? [y/N] ', false);
|
|
63
74
|
const config = loadGuardConfig();
|
|
64
75
|
updateGuardConfig({ ...config, telemetryEnabled: answer, threatCloudUploadEnabled: answer });
|
|
65
76
|
markConsentAsked();
|
|
@@ -73,8 +84,9 @@ export async function askTelemetryConsent() {
|
|
|
73
84
|
return answer;
|
|
74
85
|
}
|
|
75
86
|
/**
|
|
76
|
-
* Simple yes/no prompt. Empty input returns `defaultYes
|
|
77
|
-
*
|
|
87
|
+
* Simple yes/no prompt. Empty input (Enter) returns `defaultYes`; otherwise true
|
|
88
|
+
* only for y/yes. For opt-in consent pass `defaultYes = false` so a bare Enter
|
|
89
|
+
* declines and nothing is shared.
|
|
78
90
|
*/
|
|
79
91
|
function promptYesNo(question, defaultYes = false) {
|
|
80
92
|
return new Promise((resolve) => {
|
|
@@ -90,6 +102,23 @@ function promptYesNo(question, defaultYes = false) {
|
|
|
90
102
|
});
|
|
91
103
|
});
|
|
92
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Non-interactive read: has the user explicitly opted in to Threat Cloud upload?
|
|
107
|
+
*
|
|
108
|
+
* Use this on one-off code paths (e.g. `pga scan <path>`) that must NEVER trigger
|
|
109
|
+
* an outbound upload — or an interactive prompt — but still need to honour a prior
|
|
110
|
+
* opt-in. Defaults to FALSE (no upload) when config is absent or unreadable, so the
|
|
111
|
+
* privacy guarantee holds by default. Gate is `=== true`, matching the guard's
|
|
112
|
+
* upload gate.
|
|
113
|
+
*/
|
|
114
|
+
export function isThreatCloudUploadEnabled() {
|
|
115
|
+
try {
|
|
116
|
+
return loadGuardConfig().threatCloudUploadEnabled === true;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
93
122
|
/**
|
|
94
123
|
* Check and ask for telemetry consent if not yet asked.
|
|
95
124
|
* Call this at the start of scan/setup commands.
|
package/dist/cli/consent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/cli/consent.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/cli/consent.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,11 @@ export interface StoredCredentials {
|
|
|
17
17
|
}
|
|
18
18
|
export interface LlmConfig {
|
|
19
19
|
provider: string;
|
|
20
|
+
/**
|
|
21
|
+
* Deprecated and never persisted. Cloud keys are read only from the
|
|
22
|
+
* ANTHROPIC_API_KEY / OPENAI_API_KEY environment variables (see
|
|
23
|
+
* panguard-guard llm-detect.ts). Kept optional for type back-compat only.
|
|
24
|
+
*/
|
|
20
25
|
apiKey?: string;
|
|
21
26
|
model?: string;
|
|
22
27
|
endpoint?: string;
|
|
@@ -30,7 +35,12 @@ export declare function saveCredentials(_creds: StoredCredentials): void;
|
|
|
30
35
|
export declare function clearCredentials(): void;
|
|
31
36
|
/** Always returns null — no LLM config stored. */
|
|
32
37
|
export declare function loadLlmConfig(): LlmConfig | null;
|
|
33
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* No-op in community edition — this build does NOT persist an LLM config (and
|
|
40
|
+
* never a cloud key). The semantic layer resolves a provider at startup from
|
|
41
|
+
* the environment / local-runtime probe (see panguard-guard llm-detect.ts).
|
|
42
|
+
* Callers must not rely on a later loadLlmConfig() returning what they passed.
|
|
43
|
+
*/
|
|
34
44
|
export declare function saveLlmConfig(_config: LlmConfig): void;
|
|
35
45
|
/** Always returns false in community edition. */
|
|
36
46
|
export declare function deleteLlmConfig(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,YAAY,EAAE,IAAI,EAAE,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAE1D;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAG;AAEnE,kCAAkC;AAClC,wBAAgB,gBAAgB,IAAI,IAAI,CAAG;AAE3C,kDAAkD;AAClD,wBAAgB,aAAa,IAAI,SAAS,GAAG,IAAI,CAEhD;AAED
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,YAAY,EAAE,IAAI,EAAE,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAE1D;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAG;AAEnE,kCAAkC;AAClC,wBAAgB,gBAAgB,IAAI,IAAI,CAAG;AAE3C,kDAAkD;AAClD,wBAAgB,aAAa,IAAI,SAAS,GAAG,IAAI,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAG;AAE1D,iDAAiD;AACjD,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
|
package/dist/cli/credentials.js
CHANGED
|
@@ -16,7 +16,12 @@ export function clearCredentials() { }
|
|
|
16
16
|
export function loadLlmConfig() {
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* No-op in community edition — this build does NOT persist an LLM config (and
|
|
21
|
+
* never a cloud key). The semantic layer resolves a provider at startup from
|
|
22
|
+
* the environment / local-runtime probe (see panguard-guard llm-detect.ts).
|
|
23
|
+
* Callers must not rely on a later loadLlmConfig() returning what they passed.
|
|
24
|
+
*/
|
|
20
25
|
export function saveLlmConfig(_config) { }
|
|
21
26
|
/** Always returns false in community edition. */
|
|
22
27
|
export function deleteLlmConfig() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH,wEAAwE;AACxE,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,eAAe,CAAC,MAAyB,IAAS,CAAC;AAEnE,kCAAkC;AAClC,MAAM,UAAU,gBAAgB,KAAU,CAAC;AAE3C,kDAAkD;AAClD,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,OAAkB,IAAS,CAAC;AAE1D,iDAAiD;AACjD,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard URL helpers — shared by `pga up` and `pga setup`.
|
|
3
|
+
*
|
|
4
|
+
* The Guard daemon's dashboard auth token lives in DashboardServer memory and
|
|
5
|
+
* mints the auth cookie ONLY for a request carrying it as `/?token=<token>`. A
|
|
6
|
+
* bare http://127.0.0.1:PORT therefore lands on a 401 "Invalid token" page on a
|
|
7
|
+
* rerun / already-running daemon / headless host. The daemon persists that token
|
|
8
|
+
* to ~/.panguard-guard/dashboard-token (0o600) once its dashboard is listening;
|
|
9
|
+
* callers read it here to construct the URL the user can actually open.
|
|
10
|
+
*
|
|
11
|
+
* Both `pga up` and `pga setup` open/print the dashboard, so these live in one
|
|
12
|
+
* module instead of being duplicated (and drifting) across commands.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Read the dashboard port the daemon is actually configured to use, so the
|
|
16
|
+
* launch URL points at the right place even on a non-default port. Falls back
|
|
17
|
+
* to the shared default when config is absent or unreadable.
|
|
18
|
+
*/
|
|
19
|
+
export declare function readDashboardPort(): number;
|
|
20
|
+
/** Base (unauthenticated) dashboard URL — only for human-readable hints. */
|
|
21
|
+
export declare function dashboardBaseUrl(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Build the AUTHENTICATED dashboard launch URL, or null if the daemon has not
|
|
24
|
+
* (yet) persisted its launch token.
|
|
25
|
+
*
|
|
26
|
+
* Returns null when the token is absent so callers print guidance instead of a
|
|
27
|
+
* dead bare URL. The token is treated like the cookie: read from an owner-only
|
|
28
|
+
* file and never logged on its own.
|
|
29
|
+
*/
|
|
30
|
+
export declare function readAuthenticatedDashboardUrl(): string | null;
|
|
31
|
+
//# sourceMappingURL=dashboard-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-url.d.ts","sourceRoot":"","sources":["../../src/cli/dashboard-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAa1C;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,GAAG,IAAI,CAS7D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard URL helpers — shared by `pga up` and `pga setup`.
|
|
3
|
+
*
|
|
4
|
+
* The Guard daemon's dashboard auth token lives in DashboardServer memory and
|
|
5
|
+
* mints the auth cookie ONLY for a request carrying it as `/?token=<token>`. A
|
|
6
|
+
* bare http://127.0.0.1:PORT therefore lands on a 401 "Invalid token" page on a
|
|
7
|
+
* rerun / already-running daemon / headless host. The daemon persists that token
|
|
8
|
+
* to ~/.panguard-guard/dashboard-token (0o600) once its dashboard is listening;
|
|
9
|
+
* callers read it here to construct the URL the user can actually open.
|
|
10
|
+
*
|
|
11
|
+
* Both `pga up` and `pga setup` open/print the dashboard, so these live in one
|
|
12
|
+
* module instead of being duplicated (and drifting) across commands.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
/** Default dashboard port — matches packages/panguard-guard config default. */
|
|
18
|
+
const DEFAULT_DASHBOARD_PORT = 3100;
|
|
19
|
+
/** Where the daemon persists its per-launch dashboard auth token (0o600). */
|
|
20
|
+
const DASHBOARD_TOKEN_PATH = join(homedir(), '.panguard-guard', 'dashboard-token');
|
|
21
|
+
/**
|
|
22
|
+
* Read the dashboard port the daemon is actually configured to use, so the
|
|
23
|
+
* launch URL points at the right place even on a non-default port. Falls back
|
|
24
|
+
* to the shared default when config is absent or unreadable.
|
|
25
|
+
*/
|
|
26
|
+
export function readDashboardPort() {
|
|
27
|
+
try {
|
|
28
|
+
const cfgPath = join(homedir(), '.panguard-guard', 'config.json');
|
|
29
|
+
if (existsSync(cfgPath)) {
|
|
30
|
+
const cfg = JSON.parse(readFileSync(cfgPath, 'utf-8'));
|
|
31
|
+
if (typeof cfg.dashboardPort === 'number' && cfg.dashboardPort > 0) {
|
|
32
|
+
return cfg.dashboardPort;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* fall through to default */
|
|
38
|
+
}
|
|
39
|
+
return DEFAULT_DASHBOARD_PORT;
|
|
40
|
+
}
|
|
41
|
+
/** Base (unauthenticated) dashboard URL — only for human-readable hints. */
|
|
42
|
+
export function dashboardBaseUrl() {
|
|
43
|
+
return `http://127.0.0.1:${readDashboardPort()}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build the AUTHENTICATED dashboard launch URL, or null if the daemon has not
|
|
47
|
+
* (yet) persisted its launch token.
|
|
48
|
+
*
|
|
49
|
+
* Returns null when the token is absent so callers print guidance instead of a
|
|
50
|
+
* dead bare URL. The token is treated like the cookie: read from an owner-only
|
|
51
|
+
* file and never logged on its own.
|
|
52
|
+
*/
|
|
53
|
+
export function readAuthenticatedDashboardUrl() {
|
|
54
|
+
try {
|
|
55
|
+
if (!existsSync(DASHBOARD_TOKEN_PATH))
|
|
56
|
+
return null;
|
|
57
|
+
const token = readFileSync(DASHBOARD_TOKEN_PATH, 'utf-8').trim();
|
|
58
|
+
if (!token)
|
|
59
|
+
return null;
|
|
60
|
+
return `${dashboardBaseUrl()}/?token=${token}`;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=dashboard-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-url.js","sourceRoot":"","sources":["../../src/cli/dashboard-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,+EAA+E;AAC/E,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;AAEnF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAA+B,CAAC;YACrF,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBACnE,OAAO,GAAG,CAAC,aAAa,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB;IAC9B,OAAO,oBAAoB,iBAAiB,EAAE,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B;IAC3C,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,KAAK,GAAG,YAAY,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,OAAO,GAAG,gBAAgB,EAAE,WAAW,KAAK,EAAE,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First-run detection — durable, telemetry-independent.
|
|
3
|
+
*
|
|
4
|
+
* The flagship `pga up` and the bare `pga` interactive entry both need to know
|
|
5
|
+
* "has this machine completed the welcome + interactive setup at least once?".
|
|
6
|
+
*
|
|
7
|
+
* Previously each command answered that question with a marker that was wrong:
|
|
8
|
+
* - `pga up` keyed off ~/.panguard/activated, which is ONLY written by the
|
|
9
|
+
* opt-in Threat Cloud activation ping. A user who declines telemetry (the
|
|
10
|
+
* default) never gets that file, so EVERY `pga up` re-ran the full
|
|
11
|
+
* "Welcome to PanGuard AI!" + interactive setup.
|
|
12
|
+
* - bare `pga` keyed off ~/.panguard/config.json, which is never written —
|
|
13
|
+
* `pga setup` saves its config to ~/.panguard-guard/config.json — so the
|
|
14
|
+
* setup wizard re-triggered on every bare invocation even after setup.
|
|
15
|
+
*
|
|
16
|
+
* The fix is a single dedicated marker, ~/.panguard/.initialized (0o600),
|
|
17
|
+
* written once after the first successful run and consulted by BOTH commands.
|
|
18
|
+
* It is independent of telemetry consent and of any config file location.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Whether this is the machine's first run (no durable marker yet). Returns true
|
|
22
|
+
* on any read uncertainty only when the marker is genuinely absent — a present
|
|
23
|
+
* marker always means "not first run".
|
|
24
|
+
*/
|
|
25
|
+
export declare function isFirstRun(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Record that the first run has completed so subsequent `pga up` / bare `pga`
|
|
28
|
+
* skip the welcome + interactive setup and go straight to the normal flow.
|
|
29
|
+
*
|
|
30
|
+
* Idempotent and best-effort: creates ~/.panguard (0o700) if missing and writes
|
|
31
|
+
* the marker (0o600). A write failure is swallowed — we would simply re-detect
|
|
32
|
+
* first-run next time rather than crash a security tool's happy path.
|
|
33
|
+
*/
|
|
34
|
+
export declare function markInitialized(): void;
|
|
35
|
+
//# sourceMappingURL=first-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-run.d.ts","sourceRoot":"","sources":["../../src/cli/first-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,IAAI,CActC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First-run detection — durable, telemetry-independent.
|
|
3
|
+
*
|
|
4
|
+
* The flagship `pga up` and the bare `pga` interactive entry both need to know
|
|
5
|
+
* "has this machine completed the welcome + interactive setup at least once?".
|
|
6
|
+
*
|
|
7
|
+
* Previously each command answered that question with a marker that was wrong:
|
|
8
|
+
* - `pga up` keyed off ~/.panguard/activated, which is ONLY written by the
|
|
9
|
+
* opt-in Threat Cloud activation ping. A user who declines telemetry (the
|
|
10
|
+
* default) never gets that file, so EVERY `pga up` re-ran the full
|
|
11
|
+
* "Welcome to PanGuard AI!" + interactive setup.
|
|
12
|
+
* - bare `pga` keyed off ~/.panguard/config.json, which is never written —
|
|
13
|
+
* `pga setup` saves its config to ~/.panguard-guard/config.json — so the
|
|
14
|
+
* setup wizard re-triggered on every bare invocation even after setup.
|
|
15
|
+
*
|
|
16
|
+
* The fix is a single dedicated marker, ~/.panguard/.initialized (0o600),
|
|
17
|
+
* written once after the first successful run and consulted by BOTH commands.
|
|
18
|
+
* It is independent of telemetry consent and of any config file location.
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import { homedir } from 'node:os';
|
|
23
|
+
/** The PanGuard CLI state directory (NOT the Guard daemon's ~/.panguard-guard). */
|
|
24
|
+
const PANGUARD_DIR = join(homedir(), '.panguard');
|
|
25
|
+
/** Durable first-run marker. Presence => welcome + setup already completed. */
|
|
26
|
+
const INITIALIZED_MARKER = join(PANGUARD_DIR, '.initialized');
|
|
27
|
+
/**
|
|
28
|
+
* Whether this is the machine's first run (no durable marker yet). Returns true
|
|
29
|
+
* on any read uncertainty only when the marker is genuinely absent — a present
|
|
30
|
+
* marker always means "not first run".
|
|
31
|
+
*/
|
|
32
|
+
export function isFirstRun() {
|
|
33
|
+
return !existsSync(INITIALIZED_MARKER);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Record that the first run has completed so subsequent `pga up` / bare `pga`
|
|
37
|
+
* skip the welcome + interactive setup and go straight to the normal flow.
|
|
38
|
+
*
|
|
39
|
+
* Idempotent and best-effort: creates ~/.panguard (0o700) if missing and writes
|
|
40
|
+
* the marker (0o600). A write failure is swallowed — we would simply re-detect
|
|
41
|
+
* first-run next time rather than crash a security tool's happy path.
|
|
42
|
+
*/
|
|
43
|
+
export function markInitialized() {
|
|
44
|
+
try {
|
|
45
|
+
if (!existsSync(PANGUARD_DIR)) {
|
|
46
|
+
mkdirSync(PANGUARD_DIR, { recursive: true, mode: 0o700 });
|
|
47
|
+
}
|
|
48
|
+
if (!existsSync(INITIALIZED_MARKER)) {
|
|
49
|
+
writeFileSync(INITIALIZED_MARKER, new Date().toISOString(), {
|
|
50
|
+
encoding: 'utf-8',
|
|
51
|
+
mode: 0o600,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
/* best-effort: re-detect first-run next time rather than fail the run */
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=first-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-run.js","sourceRoot":"","sources":["../../src/cli/first-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,mFAAmF;AACnF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAElD,+EAA+E;AAC/E,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACpC,aAAa,CAAC,kBAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;gBAC1D,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard-config.d.ts","sourceRoot":"","sources":["../../src/cli/guard-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,IAAI,iBAAiB,CAUnD;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"guard-config.d.ts","sourceRoot":"","sources":["../../src/cli/guard-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,IAAI,iBAAiB,CAUnD;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAgBjE"}
|
package/dist/cli/guard-config.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Lightweight Guard config reader/writer for CLI commands.
|
|
3
3
|
* Does not import the full Guard engine — only reads/writes ~/.panguard-guard/config.json.
|
|
4
4
|
*/
|
|
5
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
5
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync } from 'node:fs';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
7
|
import { homedir } from 'node:os';
|
|
8
8
|
const GUARD_CONFIG_DIR = join(homedir(), '.panguard-guard');
|
|
@@ -22,9 +22,21 @@ export function loadGuardConfig() {
|
|
|
22
22
|
}
|
|
23
23
|
/** Write updated guard config to ~/.panguard-guard/config.json */
|
|
24
24
|
export function updateGuardConfig(config) {
|
|
25
|
+
// 0o700 dir + 0o600 file: the config can carry threatCloudApiKey and
|
|
26
|
+
// notification secrets — never world/group-readable on shared machines.
|
|
25
27
|
if (!existsSync(GUARD_CONFIG_DIR)) {
|
|
26
|
-
mkdirSync(GUARD_CONFIG_DIR, { recursive: true });
|
|
28
|
+
mkdirSync(GUARD_CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
29
|
+
}
|
|
30
|
+
writeFileSync(GUARD_CONFIG_PATH, JSON.stringify(config, null, 2), {
|
|
31
|
+
encoding: 'utf-8',
|
|
32
|
+
mode: 0o600,
|
|
33
|
+
});
|
|
34
|
+
// chmod even if the file already existed, to tighten a loosely-created file.
|
|
35
|
+
try {
|
|
36
|
+
chmodSync(GUARD_CONFIG_PATH, 0o600);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
/* best effort — platforms without POSIX permissions */
|
|
27
40
|
}
|
|
28
|
-
writeFileSync(GUARD_CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
|
|
29
41
|
}
|
|
30
42
|
//# sourceMappingURL=guard-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard-config.js","sourceRoot":"","sources":["../../src/cli/guard-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"guard-config.js","sourceRoot":"","sources":["../../src/cli/guard-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAC5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAYhE,2DAA2D;AAC3D,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,qEAAqE;IACrE,wEAAwE;IACxE,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAChE,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IACH,6EAA6E;IAC7E,IAAI,CAAC;QACH,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;AACH,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -70,6 +70,7 @@ const migrateProCommand = lazyCommand('migrate-pro', 'Convert Sigma/YARA detecti
|
|
|
70
70
|
import { upgradeCommand } from './commands/upgrade.js';
|
|
71
71
|
import { configCommand } from './commands/config.js';
|
|
72
72
|
import { doctorCommand } from './commands/doctor.js';
|
|
73
|
+
import { hookCommand } from './commands/hook.js';
|
|
73
74
|
import { auditCommand } from './commands/audit.js';
|
|
74
75
|
import { skillsCommand } from './commands/skills.js';
|
|
75
76
|
import { hacktivityCommand } from './commands/hacktivity.js';
|
|
@@ -99,6 +100,7 @@ program.addCommand(whoamiCommand());
|
|
|
99
100
|
program.addCommand(chatCommand());
|
|
100
101
|
program.addCommand(configCommand());
|
|
101
102
|
program.addCommand(doctorCommand());
|
|
103
|
+
program.addCommand(hookCommand());
|
|
102
104
|
// report (AI Compliance Audit Evidence generator) is the enterprise tier's
|
|
103
105
|
// core differentiator and is NOT released in the free community plan. It stays
|
|
104
106
|
// hidden until the paid tier launches behind a license gate. Do not register it
|
|
@@ -117,9 +119,17 @@ program.addCommand(hardeningCommand(), hidden);
|
|
|
117
119
|
program.addCommand(hacktivityCommand(), hidden);
|
|
118
120
|
program.addCommand(migrateProCommand(), hidden);
|
|
119
121
|
const userArgs = process.argv.slice(2);
|
|
120
|
-
|
|
122
|
+
// "-v" is treated as a version alias too: a single-letter flag must never fall
|
|
123
|
+
// through to the side-effectful first-run setup wizard (which writes config
|
|
124
|
+
// files). Commander only registers -V/--version, so we map -v to version output
|
|
125
|
+
// ourselves below.
|
|
126
|
+
const helpFlags = new Set(['-h', '--help', '-V', '--version', '-v']);
|
|
121
127
|
const hasSubcommand = userArgs.some((a) => !a.startsWith('-'));
|
|
122
128
|
const hasHelpOrVersion = userArgs.some((a) => helpFlags.has(a));
|
|
129
|
+
// The `hook` command is invoked by Claude Code per tool call and its stdout is
|
|
130
|
+
// parsed as JSON — it must emit NOTHING else (no update banner, no update check,
|
|
131
|
+
// no first-run wizard). Detect it early and stay silent + fast.
|
|
132
|
+
const isHookCommand = userArgs[0] === 'hook';
|
|
123
133
|
/**
|
|
124
134
|
* Show "What's new" message once after upgrade.
|
|
125
135
|
* Compares current version against ~/.panguard/.last-seen-version.
|
|
@@ -268,24 +278,35 @@ async function checkForUpdates() {
|
|
|
268
278
|
}
|
|
269
279
|
}
|
|
270
280
|
async function main() {
|
|
271
|
-
//
|
|
281
|
+
// "-v" version alias. Commander only registers -V/--version, so a bare `pga -v`
|
|
282
|
+
// would otherwise reach program.parseAsync() as an unknown option (or, worse,
|
|
283
|
+
// fall through to the first-run setup wizard which writes config). Handle it
|
|
284
|
+
// here, printing the same bare version string as --version, then exit.
|
|
285
|
+
if (userArgs.length === 1 && userArgs[0] === '-v') {
|
|
286
|
+
console.log(PANGUARD_VERSION);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
// Show "what's new" on interactive use (not --json, not --help, not the hook)
|
|
272
290
|
const isJsonMode = userArgs.includes('--json');
|
|
273
|
-
if (!hasHelpOrVersion && !isJsonMode) {
|
|
291
|
+
if (!hasHelpOrVersion && !isJsonMode && !isHookCommand) {
|
|
274
292
|
await showWhatsNewIfUpgraded();
|
|
275
293
|
// Non-blocking update check (fire and forget on non-JSON interactive use)
|
|
276
294
|
void checkForUpdates();
|
|
277
295
|
}
|
|
278
|
-
if (!hasSubcommand && !hasHelpOrVersion) {
|
|
279
|
-
// First-run detection
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
296
|
+
if (!hasSubcommand && !hasHelpOrVersion && !isHookCommand) {
|
|
297
|
+
// First-run detection uses the shared durable marker
|
|
298
|
+
// (~/.panguard/.initialized), the SAME marker `pga up` and `pga setup`
|
|
299
|
+
// write on first success. The old check looked at ~/.panguard/config.json,
|
|
300
|
+
// a file that is never written (setup saves to ~/.panguard-guard/config.json),
|
|
301
|
+
// so the setup wizard re-triggered on every bare `pga` even after setup.
|
|
302
|
+
const { isFirstRun, markInitialized } = await import('./first-run.js');
|
|
303
|
+
if (isFirstRun()) {
|
|
304
|
+
// First time user — run setup wizard directly, then mark initialized so
|
|
305
|
+
// subsequent bare `pga` goes straight to the interactive menu.
|
|
286
306
|
console.log('\n Welcome to Panguard AI! / Panguard AI!\n');
|
|
287
307
|
console.log(' First time detected. Starting setup wizard...\n');
|
|
288
308
|
await program.parseAsync(['node', 'panguard', 'setup']);
|
|
309
|
+
markInitialized();
|
|
289
310
|
return;
|
|
290
311
|
}
|
|
291
312
|
// Extract --lang value if present
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,6EAA6E;AAC7E,6EAA6E;AAC7E,sEAAsE;AACtE,mCAAmC;AACnC,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;IACvC,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACvC,gBAAgB,EAAE,GAAG;QACrB,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,YAAY;KACrD,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC/C,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AACD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,2EAA2E;AAC3E,6EAA6E;AAC7E,qDAAqD;AACrD,wDAAwD;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,4EAA4E;AAC5E,SAAS,WAAW,CAClB,IAAY,EACZ,IAAY,EACZ,UAAkB,EAClB,UAAkB;IAElB,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChD,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7B,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;gBACrC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,EAAa,CAAC;gBAC7C,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;gBACjC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AACD,MAAM,gBAAgB,GAAG,WAAW,CAClC,WAAW,EACX,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,CACnB,CAAC;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,wEAAwE;AACxE,MAAM,iBAAiB,GAAG,WAAW,CACnC,aAAa,EACb,6DAA6D,EAC7D,oCAAoC,EACpC,mBAAmB,CACpB,CAAC;AACF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE7B,sCAAsC;AACtC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AAErC,gDAAgD;AAChD,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AAEpC,2CAA2C;AAC3C,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,2EAA2E;AAC3E,+EAA+E;AAC/E,gFAAgF;AAChF,sEAAsE;AACtE,uCAAuC;AAEvC,kEAAkE;AAClE,gEAAgE;AAChE,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAElC,2DAA2D;AAC3D,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAAC,CAAC;AAChD,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvC,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,mBAAmB;AACnB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AACrE,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,+EAA+E;AAC/E,iFAAiF;AACjF,gEAAgE;AAChE,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AAE7C;;;;GAIG;AACH,KAAK,UAAU,sBAAsB;IACnC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACvF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAEpD,yBAAyB;IACzB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,uBAAuB;IACvB,IAAI,QAAQ,KAAK,gBAAgB;QAAE,OAAO;IAE1C,yDAAyD;IACzD,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,WAAW,gBAAgB,IAAI,CAAC,CAAC;QAEjF,4DAA4D;QAC5D,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,sEAAsE;YACtE,MAAM,cAAc,GAAG;gBACrB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,YAAY;gBAClE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,WAAW;aACtD,CAAC;YACF,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC/B,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClB,SAAS,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACrC,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,kCAAkC;gBAClC,MAAM,aAAa,GAAG,OAAO,gBAAgB,GAAG,CAAC;gBACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAClD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;oBAClB,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC1D,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CACjC,WAAW,EACX,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAC1C,CAAC;oBACF,wEAAwE;oBACxE,MAAM,OAAO,GAAG,OAAO;yBACpB,KAAK,CAAC,IAAI,CAAC;yBACX,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;yBAC3C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;yBACX,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE;wBACjB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;wBACrD,IAAI,CAAC,KAAK;4BAAE,OAAO,CAAC,CAAC;wBACrB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAClD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC;oBAC3D,CAAC,CAAC,CAAC;oBACL,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;wBAC7B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;4BACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBACxB,CAAC;wBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;YAC9C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe;IAC5B,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACvF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAElD,+BAA+B;IAC/B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;gBAAE,OAAO;QAC3D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,wDAAwD;IACxD,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,yDAAyD,EAAE;YACjF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;YAClC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO;QACpB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,gBAAgB;YAAE,OAAO;QAEnD,+DAA+D;QAC/D,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,OAAO,GACX,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CACT,yBAAyB,gBAAgB,WAAW,MAAM,EAAE,GAAG,wBAAwB,CACxF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,gFAAgF;IAChF,8EAA8E;IAC9E,6EAA6E;IAC7E,uEAAuE;IACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,8EAA8E;IAC9E,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,gBAAgB,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;QACvD,MAAM,sBAAsB,EAAE,CAAC;QAC/B,0EAA0E;QAC1E,KAAK,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1D,qDAAqD;QACrD,uEAAuE;QACvE,2EAA2E;QAC3E,+EAA+E;QAC/E,yEAAyE;QACzE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAEvE,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,wEAAwE;YACxE,+DAA+D;YAC/D,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YACxD,eAAe,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAY,EAAE,EAAE;IAClC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE;gBAC3B,IAAI,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;aACpE,CAAC,CAAC;YACH,wDAAwD;YACxD,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/cli/interactive/actions/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/cli/interactive/actions/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAuK9D"}
|
|
@@ -29,8 +29,8 @@ export async function actionMCPSetup(lang) {
|
|
|
29
29
|
: 'No AI agent platforms detected');
|
|
30
30
|
console.log('');
|
|
31
31
|
console.log(c.dim(lang === 'zh-TW'
|
|
32
|
-
? ' \u652F\u63F4\u5E73\u53F0: Claude Code, Cursor, OpenClaw, Codex, WorkBuddy,
|
|
33
|
-
: ' Supported: Claude Code, Cursor, OpenClaw, Codex, WorkBuddy,
|
|
32
|
+
? ' \u652F\u63F4\u5E73\u53F0: Claude Code, Cursor, OpenClaw, Codex, WorkBuddy, Claude Desktop'
|
|
33
|
+
: ' Supported: Claude Code, Cursor, OpenClaw, Codex, WorkBuddy, Claude Desktop'));
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
36
|
detectSp.succeed(lang === 'zh-TW'
|
|
@@ -101,14 +101,6 @@ export async function actionMCPSetup(lang) {
|
|
|
101
101
|
en: 'Close and reopen WorkBuddy',
|
|
102
102
|
zh: '\u95DC\u9589\u4E26\u91CD\u65B0\u958B\u555F WorkBuddy',
|
|
103
103
|
},
|
|
104
|
-
nemoclaw: {
|
|
105
|
-
en: 'Close and reopen NemoClaw',
|
|
106
|
-
zh: '\u95DC\u9589\u4E26\u91CD\u65B0\u958B\u555F NemoClaw',
|
|
107
|
-
},
|
|
108
|
-
arkclaw: {
|
|
109
|
-
en: 'Close and reopen ArkClaw',
|
|
110
|
-
zh: '\u95DC\u9589\u4E26\u91CD\u65B0\u958B\u555F ArkClaw',
|
|
111
|
-
},
|
|
112
104
|
};
|
|
113
105
|
for (const p of unconfigured) {
|
|
114
106
|
const hint = restartHints[p.id];
|