guardvibe 0.4.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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +205 -0
  3. package/build/cli.d.ts +3 -0
  4. package/build/cli.d.ts.map +1 -0
  5. package/build/cli.js +118 -0
  6. package/build/cli.js.map +1 -0
  7. package/build/data/framework-guides.d.ts +8 -0
  8. package/build/data/framework-guides.d.ts.map +1 -0
  9. package/build/data/framework-guides.js +500 -0
  10. package/build/data/framework-guides.js.map +1 -0
  11. package/build/data/owasp-rules.d.ts +12 -0
  12. package/build/data/owasp-rules.d.ts.map +1 -0
  13. package/build/data/owasp-rules.js +469 -0
  14. package/build/data/owasp-rules.js.map +1 -0
  15. package/build/data/rules/core.d.ts +3 -0
  16. package/build/data/rules/core.d.ts.map +1 -0
  17. package/build/data/rules/core.js +245 -0
  18. package/build/data/rules/core.js.map +1 -0
  19. package/build/data/rules/go.d.ts +3 -0
  20. package/build/data/rules/go.d.ts.map +1 -0
  21. package/build/data/rules/go.js +64 -0
  22. package/build/data/rules/go.js.map +1 -0
  23. package/build/data/rules/index.d.ts +3 -0
  24. package/build/data/rules/index.d.ts.map +1 -0
  25. package/build/data/rules/index.js +13 -0
  26. package/build/data/rules/index.js.map +1 -0
  27. package/build/data/rules/java.d.ts +3 -0
  28. package/build/data/rules/java.d.ts.map +1 -0
  29. package/build/data/rules/java.js +64 -0
  30. package/build/data/rules/java.js.map +1 -0
  31. package/build/data/rules/php.d.ts +3 -0
  32. package/build/data/rules/php.d.ts.map +1 -0
  33. package/build/data/rules/php.js +54 -0
  34. package/build/data/rules/php.js.map +1 -0
  35. package/build/data/rules/ruby.d.ts +3 -0
  36. package/build/data/rules/ruby.d.ts.map +1 -0
  37. package/build/data/rules/ruby.js +54 -0
  38. package/build/data/rules/ruby.js.map +1 -0
  39. package/build/data/rules/types.d.ts +11 -0
  40. package/build/data/rules/types.d.ts.map +1 -0
  41. package/build/data/rules/types.js +2 -0
  42. package/build/data/rules/types.js.map +1 -0
  43. package/build/data/secret-patterns.d.ts +9 -0
  44. package/build/data/secret-patterns.d.ts.map +1 -0
  45. package/build/data/secret-patterns.js +87 -0
  46. package/build/data/secret-patterns.js.map +1 -0
  47. package/build/index.d.ts +3 -0
  48. package/build/index.d.ts.map +1 -0
  49. package/build/index.js +117 -0
  50. package/build/index.js.map +1 -0
  51. package/build/tools/check-code.d.ts +9 -0
  52. package/build/tools/check-code.d.ts.map +1 -0
  53. package/build/tools/check-code.js +125 -0
  54. package/build/tools/check-code.js.map +1 -0
  55. package/build/tools/check-deps.d.ts +8 -0
  56. package/build/tools/check-deps.d.ts.map +1 -0
  57. package/build/tools/check-deps.js +57 -0
  58. package/build/tools/check-deps.js.map +1 -0
  59. package/build/tools/check-project.d.ts +7 -0
  60. package/build/tools/check-project.d.ts.map +1 -0
  61. package/build/tools/check-project.js +134 -0
  62. package/build/tools/check-project.js.map +1 -0
  63. package/build/tools/get-security-docs.d.ts +2 -0
  64. package/build/tools/get-security-docs.d.ts.map +1 -0
  65. package/build/tools/get-security-docs.js +61 -0
  66. package/build/tools/get-security-docs.js.map +1 -0
  67. package/build/tools/scan-dependencies.d.ts +2 -0
  68. package/build/tools/scan-dependencies.d.ts.map +1 -0
  69. package/build/tools/scan-dependencies.js +69 -0
  70. package/build/tools/scan-dependencies.js.map +1 -0
  71. package/build/tools/scan-directory.d.ts +2 -0
  72. package/build/tools/scan-directory.d.ts.map +1 -0
  73. package/build/tools/scan-directory.js +120 -0
  74. package/build/tools/scan-directory.js.map +1 -0
  75. package/build/tools/scan-secrets.d.ts +11 -0
  76. package/build/tools/scan-secrets.d.ts.map +1 -0
  77. package/build/tools/scan-secrets.js +150 -0
  78. package/build/tools/scan-secrets.js.map +1 -0
  79. package/build/utils/manifest-parser.d.ts +7 -0
  80. package/build/utils/manifest-parser.d.ts.map +1 -0
  81. package/build/utils/manifest-parser.js +102 -0
  82. package/build/utils/manifest-parser.js.map +1 -0
  83. package/build/utils/osv-client.d.ts +37 -0
  84. package/build/utils/osv-client.d.ts.map +1 -0
  85. package/build/utils/osv-client.js +78 -0
  86. package/build/utils/osv-client.js.map +1 -0
  87. package/package.json +46 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 VibeGuard Security
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,205 @@
1
+ # GuardVibe Security
2
+
3
+ **Security guardian for vibe-coders.** An MCP server that gives your AI coding assistant (Gemini, Claude, Cursor) real-time security knowledge.
4
+
5
+ Stop shipping vulnerable code. GuardVibe checks your code against OWASP Top 10, scans dependencies for CVEs, and provides framework-specific security guides — all inside your AI workflow.
6
+
7
+ ## Features
8
+
9
+ - **Code Security Analysis** — Scans code for 45+ vulnerability patterns (SQL injection, XSS, hardcoded secrets, cloud API keys, CORS misconfig, and more)
10
+ - **Directory Scanning** — Scan your entire project directory directly from the filesystem with security scoring (A-F grade)
11
+ - **Secret Detection** — Pattern + entropy-based detection of leaked API keys, tokens, and credentials in code and config files
12
+ - **Dependency CVE Check** — Parse lockfiles (package.json, requirements.txt, go.mod, Gemfile.lock, Cargo.lock) and batch-query Google's OSV database
13
+ - **False Positive Suppression** — `// guardvibe-ignore VG001` comments to suppress known false positives
14
+ - **Security Documentation** — Instant best-practice guides for Express, Next.js, FastAPI, React, and more
15
+ - **8 Languages** — JavaScript, TypeScript, Python, Go, Java, PHP, Ruby, and more
16
+ - **OWASP Top 10:2025** — All rules mapped to the latest OWASP standards
17
+ - **Zero-Config Setup** — `npx guardvibe init claude` sets up everything automatically
18
+
19
+ ## Quick Start
20
+
21
+ ### Auto Setup (Recommended)
22
+
23
+ ```bash
24
+ # Set up for your AI coding assistant
25
+ npx guardvibe init claude # Claude Code
26
+ npx guardvibe init gemini # Gemini CLI
27
+ npx guardvibe init cursor # Cursor / VS Code
28
+ npx guardvibe init all # All platforms
29
+ ```
30
+
31
+ ### Manual Setup
32
+
33
+ **Claude Code:**
34
+ ```bash
35
+ claude mcp add guardvibe -- npx guardvibe
36
+ ```
37
+
38
+ **Gemini CLI** — add to `~/.gemini/settings.json`:
39
+ ```json
40
+ {
41
+ "mcpServers": {
42
+ "guardvibe": {
43
+ "command": "npx",
44
+ "args": ["-y", "guardvibe"]
45
+ }
46
+ }
47
+ }
48
+ ```
49
+
50
+ **Cursor / VS Code** — add to MCP settings:
51
+ ```json
52
+ {
53
+ "mcpServers": {
54
+ "guardvibe": {
55
+ "command": "npx",
56
+ "args": ["-y", "guardvibe"]
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ ## Tools
63
+
64
+ ### `check_code`
65
+ Analyze a single code snippet for security vulnerabilities.
66
+
67
+ ```
68
+ Input: { code: string, language: "javascript"|"typescript"|"python"|"go"|"java"|"php"|"ruby"|..., framework?: string }
69
+ Output: Security report with findings, severity, OWASP mapping, and fix suggestions
70
+ ```
71
+
72
+ ### `check_project`
73
+ Scan multiple files and generate a project-wide security report with a score (A-F).
74
+
75
+ ```
76
+ Input: { files: [{ path: "src/app.ts", content: "..." }, ...] }
77
+ Output: Project security report with score, summary table, and per-file findings
78
+ ```
79
+
80
+ ### `get_security_docs`
81
+ Get security best practices for a topic or framework.
82
+
83
+ ```
84
+ Input: { topic: "express authentication" | "sql injection" | "nextjs csrf" | ... }
85
+ Output: Markdown guide with code examples
86
+ ```
87
+
88
+ ### `scan_directory`
89
+ Scan an entire project directory directly from the filesystem. No need to pass file contents.
90
+
91
+ ```
92
+ Input: { path: "./src", recursive?: true, exclude?: ["vendor"] }
93
+ Output: Project security report with A-F score, summary, and per-file findings
94
+ ```
95
+
96
+ ### `scan_dependencies`
97
+ Parse a lockfile/manifest and check all dependencies for CVEs in one batch query.
98
+
99
+ ```
100
+ Input: { manifest_path: "package.json" }
101
+ Supported: package.json, package-lock.json, requirements.txt, go.mod, Gemfile.lock, Cargo.lock
102
+ Output: Vulnerability report with normalized severity and fix versions
103
+ ```
104
+
105
+ ### `scan_secrets`
106
+ Detect leaked secrets, API keys, and tokens in code and config files.
107
+
108
+ ```
109
+ Input: { path: ".", recursive?: true }
110
+ Output: Secret scan report with provider identification, .gitignore coverage check, entropy-based detection
111
+ ```
112
+
113
+ ### `check_dependencies`
114
+ Check individual packages for known CVEs via Google OSV.
115
+
116
+ ```
117
+ Input: { packages: [{ name: "lodash", version: "4.17.20", ecosystem: "npm" }] }
118
+ Output: Vulnerability report with CVE IDs, severity, and fix versions
119
+ ```
120
+
121
+ ## Supported Topics
122
+
123
+ | Topic | Coverage |
124
+ |-------|----------|
125
+ | OWASP Top 10 | Full 2025 reference |
126
+ | Express.js | Helmet, CORS, rate limiting, sessions, input validation |
127
+ | Next.js | Server Components, Server Actions, CSRF, CSP, env vars |
128
+ | FastAPI | Pydantic, CORS, rate limiting, SQLAlchemy, auth |
129
+ | React | XSS prevention, secure API calls, state management |
130
+ | SQL Injection | Parameterized queries, ORMs (Prisma, Drizzle, SQLAlchemy) |
131
+ | XSS | DOM sanitization, CSP, React escaping |
132
+ | Authentication | bcrypt, JWT, OAuth, session security |
133
+ | Environment Variables | .env management, Vercel, secret rotation |
134
+
135
+ ## Security Rules (45+ patterns)
136
+
137
+ ### Core Rules (All supported languages)
138
+
139
+ | ID | Rule | Severity | Languages |
140
+ |----|------|----------|-----------|
141
+ | VG001 | Hardcoded credentials | Critical | All |
142
+ | VG003 | Cloud provider API keys (AWS, GitHub, OpenAI, Stripe) | Critical | All |
143
+ | VG010 | SQL injection | Critical | All |
144
+ | VG011 | Command injection | Critical | All |
145
+ | VG014 | Dynamic code execution (eval) | Critical | JS/TS/Python/PHP/Ruby |
146
+ | VG060 | Weak password hashing (MD5/SHA-1) | Critical | All |
147
+ | VG040 | CORS wildcard | High | All |
148
+ | VG030 | Missing rate limiting | Medium | All |
149
+
150
+ ### Language-Specific Rules
151
+
152
+ | ID Range | Language | Rules |
153
+ |----------|----------|-------|
154
+ | VG002, VG012-VG015 | JavaScript/TypeScript | Missing auth, XSS, NoSQL injection, JWT |
155
+ | VG005 | Python | Missing auth (FastAPI/Flask) |
156
+ | VG110-VG115 | Go | SQL injection (fmt.Sprintf), os/exec, template.HTML, handler auth, weak hash, CORS |
157
+ | VG120-VG125 | Java | SQL concat, Runtime.exec, JSP XSS, Spring auth, MessageDigest, @CrossOrigin |
158
+ | VG130-VG134 | PHP | $_GET/$_POST SQL injection, shell_exec, echo XSS, md5/sha1, eval |
159
+ | VG140-VG144 | Ruby | String interpolation SQL, backtick injection, html_safe XSS, route auth, Digest |
160
+
161
+ ## Suppressing False Positives
162
+
163
+ Add `guardvibe-ignore` comments to suppress specific findings:
164
+
165
+ ```javascript
166
+ // Suppress a specific rule on this line
167
+ const password = process.env.DB_PASSWORD; // guardvibe-ignore VG001
168
+
169
+ // Suppress a rule on the next line
170
+ // guardvibe-ignore-next-line VG002
171
+ app.get('/api/health', (req, res) => res.json({ ok: true }));
172
+
173
+ // Suppress all rules on this line
174
+ const x = something; // guardvibe-ignore
175
+ ```
176
+
177
+ Supports `//`, `#`, and `<!-- -->` comment styles.
178
+
179
+ ## How It Works
180
+
181
+ GuardVibe runs as a local MCP server (stdio transport). When your AI assistant needs security guidance, it calls GuardVibe's tools:
182
+
183
+ 1. **Writing code?** → `check_code` scans for vulnerability patterns
184
+ 2. **Reviewing a project?** → `scan_directory` scans your entire codebase
185
+ 3. **Adding a package?** → `scan_dependencies` checks your lockfile for CVEs
186
+ 4. **Worried about leaks?** → `scan_secrets` detects API keys and tokens
187
+ 5. **Need guidance?** → `get_security_docs` returns best practices
188
+
189
+ No API keys needed. No cloud dependency. Runs entirely on your machine.
190
+
191
+ ## Development
192
+
193
+ ```bash
194
+ git clone https://github.com/goklab/guardvibe.git
195
+ cd guardvibe
196
+ npm install
197
+ npm run dev # watch mode
198
+ npm run build # compile
199
+ npm test # run tests
200
+ npm start # run server
201
+ ```
202
+
203
+ ## License
204
+
205
+ MIT
package/build/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/build/cli.js ADDED
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
3
+ import { join, dirname } from "path";
4
+ import { homedir } from "os";
5
+ const GUARDVIBE_MCP_CONFIG = {
6
+ command: "npx",
7
+ args: ["-y", "guardvibe"],
8
+ };
9
+ const platforms = {
10
+ claude: {
11
+ path: join(process.cwd(), ".claude.json"),
12
+ description: "Claude Code (.claude.json)",
13
+ },
14
+ gemini: {
15
+ path: join(homedir(), ".gemini", "settings.json"),
16
+ description: "Gemini CLI (~/.gemini/settings.json)",
17
+ },
18
+ cursor: {
19
+ path: join(process.cwd(), ".cursor", "mcp.json"),
20
+ description: "Cursor (.cursor/mcp.json)",
21
+ },
22
+ };
23
+ function readJsonFile(filePath) {
24
+ try {
25
+ const content = readFileSync(filePath, "utf-8");
26
+ return JSON.parse(content);
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ function writeJsonFile(filePath, data) {
33
+ const dir = dirname(filePath);
34
+ if (!existsSync(dir)) {
35
+ mkdirSync(dir, { recursive: true });
36
+ }
37
+ writeFileSync(filePath, JSON.stringify(data, null, 2) + "\n", "utf-8");
38
+ }
39
+ function setupPlatform(name) {
40
+ const platform = platforms[name];
41
+ if (!platform)
42
+ return false;
43
+ const existing = readJsonFile(platform.path);
44
+ if (existing) {
45
+ // Merge - don't overwrite existing MCP servers
46
+ if (!existing.mcpServers) {
47
+ existing.mcpServers = {};
48
+ }
49
+ if (existing.mcpServers["guardvibe"]) {
50
+ console.log(` [OK] GuardVibe already configured in ${platform.description}`);
51
+ return true;
52
+ }
53
+ existing.mcpServers["guardvibe"] = GUARDVIBE_MCP_CONFIG;
54
+ writeJsonFile(platform.path, existing);
55
+ }
56
+ else {
57
+ // Create new config
58
+ writeJsonFile(platform.path, {
59
+ mcpServers: {
60
+ vibeguard: GUARDVIBE_MCP_CONFIG,
61
+ },
62
+ });
63
+ }
64
+ console.log(` [OK] Added MCP server to ${platform.description}`);
65
+ return true;
66
+ }
67
+ function printUsage() {
68
+ console.log(`
69
+ GuardVibe Security - Setup CLI
70
+
71
+ Usage:
72
+ npx guardvibe init <platform>
73
+
74
+ Platforms:
75
+ claude Configure for Claude Code (.claude.json)
76
+ gemini Configure for Gemini CLI (~/.gemini/settings.json)
77
+ cursor Configure for Cursor (.cursor/mcp.json)
78
+ all Configure all platforms
79
+
80
+ Examples:
81
+ npx guardvibe init claude
82
+ npx guardvibe init all
83
+ `);
84
+ }
85
+ function main() {
86
+ const args = process.argv.slice(2);
87
+ if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
88
+ printUsage();
89
+ process.exit(0);
90
+ }
91
+ if (args[0] !== "init") {
92
+ console.error(` Unknown command: ${args[0]}`);
93
+ printUsage();
94
+ process.exit(1);
95
+ }
96
+ const platform = args[1]?.toLowerCase();
97
+ if (!platform) {
98
+ console.error(" Please specify a platform: claude, gemini, cursor, or all");
99
+ process.exit(1);
100
+ }
101
+ console.log(`\n GuardVibe Security Setup\n`);
102
+ if (platform === "all") {
103
+ for (const name of Object.keys(platforms)) {
104
+ setupPlatform(name);
105
+ }
106
+ }
107
+ else if (platforms[platform]) {
108
+ setupPlatform(platform);
109
+ }
110
+ else {
111
+ console.error(` Unknown platform: ${platform}`);
112
+ console.error(` Available: claude, gemini, cursor, all`);
113
+ process.exit(1);
114
+ }
115
+ console.log(`\n [OK] Ready! Start coding securely.\n`);
116
+ }
117
+ main();
118
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface SecurityGuide {
2
+ topic: string;
3
+ keywords: string[];
4
+ title: string;
5
+ content: string;
6
+ }
7
+ export declare const frameworkGuides: SecurityGuide[];
8
+ //# sourceMappingURL=framework-guides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-guides.d.ts","sourceRoot":"","sources":["../../src/data/framework-guides.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,eAAO,MAAM,eAAe,EAAE,aAAa,EAwf1C,CAAC"}