@panguard-ai/panguard 0.2.0 → 0.2.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/index.js CHANGED
@@ -8,6 +8,9 @@
8
8
  *
9
9
  * @module @panguard-ai/panguard/cli
10
10
  */
11
+ import { existsSync, writeFileSync, mkdirSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { homedir } from 'node:os';
11
14
  import { Command } from 'commander';
12
15
  import { PANGUARD_VERSION } from '../index.js';
13
16
  import { scanCommand } from './commands/scan.js';
@@ -55,9 +58,48 @@ program.addCommand(hardeningCommand());
55
58
  program.addCommand(managerCommand());
56
59
  program.addCommand(upgradeCommand());
57
60
  program.addCommand(configCommand());
58
- // If no subcommand given (just `panguard` or `panguard --lang zh-TW`),
59
- // launch interactive mode. Check before commander parses so that
60
- // `panguard help` and `panguard --help` still work normally.
61
+ // ---------------------------------------------------------------------------
62
+ // First-run welcome banner (shown once, then a marker file is created)
63
+ // ---------------------------------------------------------------------------
64
+ function showWelcomeIfFirstRun() {
65
+ const pgDir = join(homedir(), '.panguard');
66
+ const marker = join(pgDir, '.welcome-shown');
67
+ if (existsSync(marker))
68
+ return;
69
+ try {
70
+ if (!existsSync(pgDir))
71
+ mkdirSync(pgDir, { recursive: true });
72
+ writeFileSync(marker, PANGUARD_VERSION, 'utf-8');
73
+ }
74
+ catch {
75
+ // non-fatal — skip banner if we can't write marker
76
+ return;
77
+ }
78
+ const G = '\x1b[32m\x1b[1m';
79
+ const R = '\x1b[0m';
80
+ const D = '\x1b[2m';
81
+ const C = '\x1b[36m';
82
+ const B = '\x1b[1m';
83
+ console.log(`
84
+ ${G} ____ _ _ _${R}
85
+ ${G} | _ \\ __ _ _ __ __ _ _ _ __ _ _ __ __| | / \\ |_|${R}
86
+ ${G} | |_) / _\` | '_ \\ / _\` | | | |/ _\` | '__/ _\` | / _ \\ | |${R}
87
+ ${G} | __/ (_| | | | | (_| | |_| | (_| | | | (_| | / ___ \\ | |${R}
88
+ ${G} |_| \\__,_|_| |_|\\__, |\\__,_|\\__,_|_| \\__,_|/_/ \\_\\|_|${R}
89
+ ${G} |___/${R}
90
+ ${D} AI-Powered Endpoint Security v${PANGUARD_VERSION}${R}
91
+
92
+ ${B} Welcome to Panguard AI!${R} Get started:
93
+
94
+ ${C} panguard scan${R} ${D}Run a security scan on this machine${R}
95
+ ${C} panguard guard start${R} ${D}Start real-time threat monitoring${R}
96
+ ${C} panguard login${R} ${D}Log in to your Panguard account${R}
97
+ ${C} panguard --help${R} ${D}Show all available commands${R}
98
+
99
+ ${D} Docs: https://panguard.ai/docs/getting-started${R}
100
+ `);
101
+ }
102
+ showWelcomeIfFirstRun();
61
103
  // Refresh tier from server in background (non-blocking)
62
104
  refreshTierInBackground();
63
105
  const userArgs = process.argv.slice(2);
@@ -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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panguard-ai/panguard",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "description": "Panguard AI - Unified security CLI",
6
6
  "main": "./dist/index.js",
@@ -13,20 +13,21 @@
13
13
  },
14
14
  "files": [
15
15
  "dist",
16
+ "scripts",
16
17
  "package.json",
17
18
  "README.md"
18
19
  ],
19
20
  "dependencies": {
20
21
  "commander": "^12.0.0",
21
22
  "@panguard-ai/core": "0.2.0",
22
- "@panguard-ai/panguard-scan": "0.2.0",
23
+ "@panguard-ai/panguard-guard": "0.2.0",
23
24
  "@panguard-ai/panguard-report": "0.2.0",
24
25
  "@panguard-ai/panguard-chat": "0.2.0",
25
- "@panguard-ai/panguard-guard": "0.2.0",
26
26
  "@panguard-ai/panguard-trap": "0.2.0",
27
27
  "@panguard-ai/threat-cloud": "0.2.0",
28
28
  "@panguard-ai/panguard-auth": "0.2.0",
29
- "@panguard-ai/security-hardening": "0.1.1"
29
+ "@panguard-ai/security-hardening": "0.1.1",
30
+ "@panguard-ai/panguard-scan": "0.2.0"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@types/node": "^22.14.0",
@@ -36,6 +37,7 @@
36
37
  "build": "tsc --build",
37
38
  "clean": "rm -rf dist tsconfig.tsbuildinfo",
38
39
  "typecheck": "tsc --noEmit",
39
- "dev": "tsc --build --watch"
40
+ "dev": "tsc --build --watch",
41
+ "postinstall": "node scripts/postinstall.mjs"
40
42
  }
41
43
  }
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Post-install welcome message for Panguard AI CLI.
4
+ * Shows a branded banner so users know installation succeeded.
5
+ */
6
+
7
+ const RESET = '\x1b[0m';
8
+ const BOLD = '\x1b[1m';
9
+ const DIM = '\x1b[2m';
10
+ const GREEN = '\x1b[32m';
11
+ const CYAN = '\x1b[36m';
12
+ const WHITE = '\x1b[37m';
13
+
14
+ const version = process.env.npm_package_version || '0.2.0';
15
+
16
+ const banner = `
17
+ ${GREEN}${BOLD} ____ _ _ _${RESET}
18
+ ${GREEN}${BOLD} | _ \\ __ _ _ __ __ _ _ _ __ _ _ __ __| | / \\ |_|${RESET}
19
+ ${GREEN}${BOLD} | |_) / _\` | '_ \\ / _\` | | | |/ _\` | '__/ _\` | / _ \\ | |${RESET}
20
+ ${GREEN}${BOLD} | __/ (_| | | | | (_| | |_| | (_| | | | (_| | / ___ \\ | |${RESET}
21
+ ${GREEN}${BOLD} |_| \\__,_|_| |_|\\__, |\\__,_|\\__,_|_| \\__,_|/_/ \\_\\|_|${RESET}
22
+ ${GREEN}${BOLD} |___/${RESET}
23
+ ${DIM} AI-Powered Endpoint Security ${WHITE}v${version}${RESET}
24
+
25
+ ${BOLD} Installation complete.${RESET} Get started:
26
+
27
+ ${CYAN} panguard scan${RESET} ${DIM}Run a security scan on this machine${RESET}
28
+ ${CYAN} panguard guard start${RESET} ${DIM}Start real-time threat monitoring${RESET}
29
+ ${CYAN} panguard login${RESET} ${DIM}Log in to your Panguard account${RESET}
30
+ ${CYAN} panguard --help${RESET} ${DIM}Show all available commands${RESET}
31
+
32
+ ${DIM} Docs: https://panguard.ai/docs/getting-started${RESET}
33
+ `;
34
+
35
+ console.log(banner);