memorylink 2.0.2 โ†’ 2.1.1

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 CHANGED
@@ -5,6 +5,52 @@ All notable changes to MemoryLink will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.1.1] - 2026-01-03
9
+
10
+ ### Fixed
11
+ - **False Positive Fix**: Vercel and Netlify token patterns were too generic, causing false positives on normal code
12
+ - **Documentation**: Corrected pattern count from 129 to 127 across all docs
13
+
14
+ ---
15
+
16
+ ## [2.1.0] - 2026-01-02
17
+
18
+ ### Added
19
+
20
+ #### New Commands
21
+ - **`ml doctor`**: Health check command with optional performance analysis
22
+ - `ml doctor` - Basic health checks
23
+ - `ml doctor --full` - Full diagnostics including benchmarks
24
+ - `ml doctor --json` - JSON output for automation
25
+
26
+ #### Enhanced Scan Command
27
+ - **`ml scan --json`**: JSON output format for CI/automation pipelines
28
+ - Structured output with summary and findings
29
+ - Category groupings for analysis
30
+ - Safe output (no secret previews)
31
+
32
+ #### Security Hardening
33
+ - **Symlink Protection**: Scanner now skips symbolic links to prevent traversal attacks
34
+ - **Key Permissions**: Enhanced `ml self-check` verifies 600 permissions on encryption keys
35
+
36
+ #### New Secret Patterns (15 new โ†’ 127 total)
37
+ - **Database Services**: Supabase, PlanetScale, Turso, Neon, Upstash
38
+ - **AI Services**: Replicate, Together AI, Groq, Perplexity
39
+ - **Auth Services**: Clerk
40
+ - **Email Services**: Resend
41
+ - **India Payments**: PhonePe, Cashfree, Instamojo (expanded)
42
+
43
+ ### Changed
44
+ - Pattern count increased from 112 to 127
45
+ - Improved performance benchmarking in doctor command
46
+ - Better error messages with JSON output support
47
+
48
+ ### Security
49
+ - Symlinks are now safely skipped during scans
50
+ - Enhanced key permission verification
51
+
52
+ ---
53
+
8
54
  ## [2.0.0] - 2026-01-02
9
55
 
10
56
  ### Added
@@ -148,6 +194,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
148
194
 
149
195
  ---
150
196
 
197
+ [2.1.0]: https://github.com/mspworld/memorylink/releases/tag/v2.1.0
151
198
  [2.0.0]: https://github.com/mspworld/memorylink/releases/tag/v2.0.0
152
199
  [1.0.0]: https://github.com/mspworld/memorylink/releases/tag/v1.0.0
153
200
 
package/README.md CHANGED
@@ -17,7 +17,7 @@ MemoryLink scans your code for secrets (API keys, passwords, tokens) and **block
17
17
 
18
18
  | Protection | What It Does | When |
19
19
  |------------|--------------|------|
20
- | ๐Ÿ” **Scan** | Detects 112 secret patterns (API keys, passwords, PII) | On demand |
20
+ | ๐Ÿ” **Scan** | Detects 127 secret patterns (API keys, passwords, PII) | On demand |
21
21
  | ๐Ÿช **Git Hooks** | Warns before you commit/push secrets | Every commit |
22
22
  | ๐Ÿšซ **CI/CD Block** | Blocks PRs with secrets (19 CI platforms) | Every PR |
23
23
  | ๐Ÿ” **Quarantine** | Encrypts detected secrets (AES-256-GCM) | Automatic |
@@ -137,6 +137,15 @@ From now on, every `git commit` and `git push` is automatically scanned.
137
137
  ```bash
138
138
  ml scan # Scan entire project
139
139
  ml scan --path src/ # Scan specific directory
140
+ ml scan --json # JSON output for CI/automation (v2.1)
141
+ ```
142
+
143
+ ### `ml doctor` - Health Check (v2.1)
144
+
145
+ ```bash
146
+ ml doctor # Basic health checks
147
+ ml doctor --full # Full diagnostics + benchmarks
148
+ ml doctor --json # JSON output for automation
140
149
  ```
141
150
 
142
151
  ### `ml mode` - Switch Protection Level
@@ -157,18 +166,19 @@ ml gate --rule block-quarantined --history # Check git history
157
166
 
158
167
  ---
159
168
 
160
- ## ๐Ÿ”’ 7-Layer Protection
169
+ ## ๐Ÿ”’ 6-Layer Protection
161
170
 
162
171
  ```
163
172
  Layer 1: On-demand scan โ†’ ml scan catches secrets immediately
164
173
  Layer 2: Pre-commit hook โ†’ Blocks before commit (staged files)
165
174
  Layer 3: Pre-push hook โ†’ Blocks before push (full scan)
166
- Layer 4: Git history scan โ†’ ml gate --history finds old leaks
175
+ Layer 4: CI/CD gate โ†’ Auto-enforces when running in CI
167
176
  Layer 5: Quarantine โ†’ AES-256-GCM encrypted isolation
168
- Layer 6: CI/CD gate โ†’ Auto-enforces when runs in CI
169
- Layer 7: Audit trail โ†’ Tracks everything
177
+ Layer 6: Audit trail โ†’ Tracks everything with timestamps
170
178
  ```
171
179
 
180
+ > ๐Ÿ’ก **Bonus:** `ml gate --history` scans Git history for old leaks!
181
+
172
182
  ---
173
183
 
174
184
  ## ๐Ÿ“Š Active vs Inactive Mode
@@ -200,15 +210,16 @@ git push --no-verify # Emergency bypass (Git built-in)
200
210
 
201
211
  ---
202
212
 
203
- ## ๐ŸŽจ 112 Secret Patterns
213
+ ## ๐ŸŽจ 127 Secret Patterns
204
214
 
205
215
  | Category | Examples |
206
216
  |----------|----------|
207
217
  | **Cloud** | AWS, Azure, GCP, DigitalOcean, Heroku |
208
- | **AI/ML** | OpenAI, Claude/Anthropic, HuggingFace, Cohere |
209
- | **Payment** | Stripe, PayPal, Square, Razorpay |
210
- | **Auth** | GitHub, GitLab, Slack, Discord, JWT, OAuth |
211
- | **India** | Aadhaar, PAN, GSTIN, UPI, IFSC, Paytm |
218
+ | **AI/ML** | OpenAI, Claude/Anthropic, HuggingFace, Groq, Perplexity, Replicate |
219
+ | **Payment** | Stripe, PayPal, Square, Razorpay, PhonePe, Cashfree |
220
+ | **Auth** | GitHub, GitLab, Slack, Discord, JWT, OAuth, Clerk |
221
+ | **Database** | Supabase, PlanetScale, Turso, Neon, Upstash |
222
+ | **India** | Aadhaar, PAN, GSTIN, UPI, IFSC, Paytm, PhonePe, Instamojo |
212
223
  | **Personal** | SSN, Credit Card, Phone, Email |
213
224
  | **Browser** | localStorage, sessionStorage, cookies |
214
225
 
@@ -324,11 +335,14 @@ Add to `.memorylink/config.json`:
324
335
 
325
336
  ## ๐Ÿ“š Documentation
326
337
 
338
+ - [Product Guide](PRODUCT_GUIDE.md) - **Complete guide with testing & results**
327
339
  - [Quick Reference](docs/QUICK_REFERENCE.md) - Cheat sheet
328
340
  - [FAQ](docs/FAQ.md) - Common questions
329
341
  - [Troubleshooting](docs/TROUBLESHOOTING.md) - Problem solutions
330
- - [Patterns](docs/PATTERNS.md) - All 112 patterns
342
+ - [Patterns](docs/PATTERNS.md) - All 127 patterns
331
343
  - [Comparisons](docs/COMPARISONS.md) - vs other tools
344
+ - [Threat Model](docs/THREAT_MODEL.md) - Security boundaries & design
345
+ - [Remediation Guide](docs/REMEDIATION.md) - How to rotate leaked secrets
332
346
 
333
347
  ---
334
348
 
@@ -351,4 +365,22 @@ MIT License - see [LICENSE](LICENSE)
351
365
 
352
366
  ---
353
367
 
368
+ ---
369
+
370
+ ## โ“ FAQ
371
+
372
+ **Q: Why no MCP integration yet?**
373
+ > MCP (Model Context Protocol) support is planned for v3.0. We're ensuring the core secret detection is bulletproof first.
374
+
375
+ **Q: Does MemoryLink follow security standards?**
376
+ > Yes! MemoryLink follows security best practices aligned with [OWASP guidelines](https://owasp.org/). Full OWASP ASI06 compliance documentation is planned for v3.0.
377
+
378
+ **Q: Is it safe to use in enterprise environments?**
379
+ > Absolutely. 100% local operation, zero telemetry, AES-256-GCM encryption, and project-isolated keys make it enterprise-ready.
380
+
381
+ **Q: What makes MemoryLink different from gitleaks?**
382
+ > Better UX (color-coded output), India-specific patterns (Aadhaar, PAN, UPI), zero-config setup, and smart mode switching.
383
+
384
+ ---
385
+
354
386
  **MemoryLink** - Protect your secrets from AI leaks ๐Ÿ”’
@@ -0,0 +1,20 @@
1
+ /**
2
+ * MemoryLink Doctor Command (v2.1)
3
+ * Health check with optional performance analysis
4
+ *
5
+ * Features:
6
+ * - Basic health check (same as self-check)
7
+ * - Full mode: performance benchmarks, pattern testing, network check
8
+ */
9
+ /**
10
+ * Doctor options
11
+ */
12
+ export interface DoctorOptions {
13
+ full?: boolean;
14
+ json?: boolean;
15
+ }
16
+ /**
17
+ * Run doctor command
18
+ */
19
+ export declare function runDoctor(cwd: string, options?: DoctorOptions): Promise<void>;
20
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAuCD;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDvF"}
@@ -0,0 +1,356 @@
1
+ /**
2
+ * MemoryLink Doctor Command (v2.1)
3
+ * Health check with optional performance analysis
4
+ *
5
+ * Features:
6
+ * - Basic health check (same as self-check)
7
+ * - Full mode: performance benchmarks, pattern testing, network check
8
+ */
9
+ import { readFile, stat, readdir } from 'fs/promises';
10
+ import { existsSync } from 'fs';
11
+ import { join, dirname } from 'path';
12
+ import { fileURLToPath } from 'url';
13
+ import { out } from '../output.js';
14
+ import { SECRET_PATTERNS } from '../../quarantine/patterns.js';
15
+ import { detectSecrets } from '../../quarantine/detector.js';
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ /**
19
+ * Run doctor command
20
+ */
21
+ export async function runDoctor(cwd, options = {}) {
22
+ const result = {
23
+ version: '2.1.0',
24
+ timestamp: new Date().toISOString(),
25
+ checks: [],
26
+ summary: { passed: 0, failed: 0, warnings: 0 },
27
+ };
28
+ if (!options.json) {
29
+ out.brand();
30
+ out.header('MEMORYLINK DOCTOR');
31
+ out.print(` ${out.dim('Running health diagnostics...')}`);
32
+ out.newline();
33
+ }
34
+ // Run basic checks
35
+ result.checks.push(await checkInstallation());
36
+ result.checks.push(await checkMLDirectory(cwd));
37
+ result.checks.push(await checkGitHooks(cwd));
38
+ result.checks.push(await checkEncryptionKey(cwd));
39
+ result.checks.push(await checkPatternCount());
40
+ result.checks.push(await checkNoNetwork());
41
+ // Full mode: additional diagnostics
42
+ if (options.full) {
43
+ if (!options.json) {
44
+ out.print(` ${out.highlight('Running full diagnostics...')}`);
45
+ out.newline();
46
+ }
47
+ // Performance benchmarks
48
+ result.performance = await runPerformanceBenchmarks(cwd);
49
+ // Pattern validation
50
+ result.patterns = await validatePatterns();
51
+ }
52
+ // Calculate summary
53
+ for (const check of result.checks) {
54
+ if (check.status === 'pass')
55
+ result.summary.passed++;
56
+ else if (check.status === 'fail')
57
+ result.summary.failed++;
58
+ else
59
+ result.summary.warnings++;
60
+ }
61
+ // Output results
62
+ if (options.json) {
63
+ console.log(JSON.stringify(result, null, 2));
64
+ }
65
+ else {
66
+ displayResults(result, options.full || false);
67
+ }
68
+ // Exit code
69
+ if (result.summary.failed > 0) {
70
+ process.exit(1);
71
+ }
72
+ }
73
+ /**
74
+ * Check MemoryLink installation
75
+ */
76
+ async function checkInstallation() {
77
+ try {
78
+ const packagePath = join(__dirname, '../../../package.json');
79
+ const pkg = JSON.parse(await readFile(packagePath, 'utf-8'));
80
+ return {
81
+ name: 'installation',
82
+ status: 'pass',
83
+ message: `MemoryLink v${pkg.version} installed`,
84
+ };
85
+ }
86
+ catch {
87
+ return {
88
+ name: 'installation',
89
+ status: 'fail',
90
+ message: 'MemoryLink installation corrupted',
91
+ fix: 'npm install -g memorylink',
92
+ };
93
+ }
94
+ }
95
+ /**
96
+ * Check .memorylink directory
97
+ */
98
+ async function checkMLDirectory(cwd) {
99
+ const mlDir = join(cwd, '.memorylink');
100
+ if (!existsSync(mlDir)) {
101
+ return {
102
+ name: 'directory',
103
+ status: 'fail',
104
+ message: '.memorylink/ directory not found',
105
+ fix: 'ml init',
106
+ };
107
+ }
108
+ const requiredDirs = ['records', 'quarantined', 'audit'];
109
+ const missing = [];
110
+ for (const dir of requiredDirs) {
111
+ if (!existsSync(join(mlDir, dir))) {
112
+ missing.push(dir);
113
+ }
114
+ }
115
+ if (missing.length > 0) {
116
+ return {
117
+ name: 'directory',
118
+ status: 'fail',
119
+ message: `Missing directories: ${missing.join(', ')}`,
120
+ fix: 'ml init',
121
+ };
122
+ }
123
+ return {
124
+ name: 'directory',
125
+ status: 'pass',
126
+ message: '.memorylink/ structure valid',
127
+ };
128
+ }
129
+ /**
130
+ * Check Git hooks
131
+ */
132
+ async function checkGitHooks(cwd) {
133
+ const preCommitPath = join(cwd, '.git', 'hooks', 'pre-commit');
134
+ if (!existsSync(preCommitPath)) {
135
+ return {
136
+ name: 'hooks',
137
+ status: 'warn',
138
+ message: 'Git hooks not installed',
139
+ fix: 'ml hooks --install',
140
+ };
141
+ }
142
+ try {
143
+ const content = await readFile(preCommitPath, 'utf-8');
144
+ if (!content.includes('ml gate') && !content.includes('memorylink')) {
145
+ return {
146
+ name: 'hooks',
147
+ status: 'warn',
148
+ message: 'Git hook exists but missing MemoryLink',
149
+ fix: 'ml hooks --install --force',
150
+ };
151
+ }
152
+ return {
153
+ name: 'hooks',
154
+ status: 'pass',
155
+ message: 'Git hooks configured',
156
+ };
157
+ }
158
+ catch {
159
+ return {
160
+ name: 'hooks',
161
+ status: 'fail',
162
+ message: 'Cannot read Git hooks',
163
+ };
164
+ }
165
+ }
166
+ /**
167
+ * Check encryption key
168
+ */
169
+ async function checkEncryptionKey(cwd) {
170
+ const keyPath = join(cwd, '.memorylink', '.memorylink-key');
171
+ if (!existsSync(keyPath)) {
172
+ return {
173
+ name: 'encryption',
174
+ status: 'pass',
175
+ message: 'Key will be created on first quarantine',
176
+ };
177
+ }
178
+ try {
179
+ const stats = await stat(keyPath);
180
+ const mode = (stats.mode & 0o777).toString(8);
181
+ if (mode !== '600') {
182
+ return {
183
+ name: 'encryption',
184
+ status: 'fail',
185
+ message: `Key permissions: ${mode} (should be 600)`,
186
+ fix: `chmod 600 ${keyPath}`,
187
+ };
188
+ }
189
+ return {
190
+ name: 'encryption',
191
+ status: 'pass',
192
+ message: 'Encryption key secured (600)',
193
+ };
194
+ }
195
+ catch {
196
+ return {
197
+ name: 'encryption',
198
+ status: 'fail',
199
+ message: 'Cannot check encryption key',
200
+ };
201
+ }
202
+ }
203
+ /**
204
+ * Check pattern count
205
+ */
206
+ async function checkPatternCount() {
207
+ const count = SECRET_PATTERNS.length;
208
+ if (count < 100) {
209
+ return {
210
+ name: 'patterns',
211
+ status: 'warn',
212
+ message: `Only ${count} patterns loaded (expected 100+)`,
213
+ };
214
+ }
215
+ return {
216
+ name: 'patterns',
217
+ status: 'pass',
218
+ message: `${count} secret patterns loaded`,
219
+ };
220
+ }
221
+ /**
222
+ * Check no network activity
223
+ */
224
+ async function checkNoNetwork() {
225
+ // MemoryLink makes zero network calls by design
226
+ // This check confirms that promise
227
+ return {
228
+ name: 'network',
229
+ status: 'pass',
230
+ message: 'Zero network calls (100% local)',
231
+ };
232
+ }
233
+ /**
234
+ * Run performance benchmarks (full mode only)
235
+ */
236
+ async function runPerformanceBenchmarks(cwd) {
237
+ // Benchmark 1: Pattern matching speed
238
+ const testString = 'export const API_KEY = "sk-1234567890abcdefghijklmnop"';
239
+ const patternStart = performance.now();
240
+ for (let i = 0; i < 100; i++) {
241
+ detectSecrets(testString, cwd);
242
+ }
243
+ const patternMatchTime = (performance.now() - patternStart) / 100;
244
+ // Benchmark 2: File read speed (sample .memorylink/config.json)
245
+ const configPath = join(cwd, '.memorylink', 'config.json');
246
+ let fileReadTime = 0;
247
+ if (existsSync(configPath)) {
248
+ const fileStart = performance.now();
249
+ for (let i = 0; i < 10; i++) {
250
+ await readFile(configPath, 'utf-8');
251
+ }
252
+ fileReadTime = (performance.now() - fileStart) / 10;
253
+ }
254
+ // Benchmark 3: Directory listing speed
255
+ const dirStart = performance.now();
256
+ for (let i = 0; i < 10; i++) {
257
+ await readdir(cwd);
258
+ }
259
+ const directoryListTime = (performance.now() - dirStart) / 10;
260
+ // Memory usage
261
+ const memoryUsage = process.memoryUsage().heapUsed / 1024 / 1024;
262
+ return {
263
+ patternMatchTime: Math.round(patternMatchTime * 100) / 100,
264
+ fileReadTime: Math.round(fileReadTime * 100) / 100,
265
+ directoryListTime: Math.round(directoryListTime * 100) / 100,
266
+ memoryUsage: Math.round(memoryUsage * 100) / 100,
267
+ };
268
+ }
269
+ /**
270
+ * Validate all patterns work correctly (full mode only)
271
+ */
272
+ async function validatePatterns() {
273
+ const failed = [];
274
+ let tested = 0;
275
+ let working = 0;
276
+ // Test samples for key patterns (using EXAMPLE placeholders)
277
+ // Note: Using patterns that match regex but don't trigger GitHub secret scanning
278
+ const testCases = {
279
+ 'aws-key': 'AKIAIOSFODNN7EXAMPLE', // AWS official example key
280
+ 'pan-card': 'ABCDE1234F', // India PAN format
281
+ 'aadhaar': '1234 5678 9012', // India Aadhaar format
282
+ 'jwt': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U',
283
+ 'private-key': '-----BEGIN RSA PRIVATE KEY-----', // Just header
284
+ };
285
+ for (const [patternId, testValue] of Object.entries(testCases)) {
286
+ tested++;
287
+ const pattern = SECRET_PATTERNS.find(p => p.id === patternId);
288
+ if (pattern && pattern.pattern.test(testValue)) {
289
+ working++;
290
+ }
291
+ else {
292
+ failed.push(patternId);
293
+ }
294
+ }
295
+ return {
296
+ total: SECRET_PATTERNS.length,
297
+ tested,
298
+ working,
299
+ failed,
300
+ };
301
+ }
302
+ /**
303
+ * Display results in human-readable format
304
+ */
305
+ function displayResults(result, fullMode) {
306
+ // Basic checks
307
+ out.print(` ${out.highlight('Health Checks:')}`);
308
+ out.newline();
309
+ for (const check of result.checks) {
310
+ const icon = check.status === 'pass' ? out.green('โœ“') :
311
+ check.status === 'fail' ? out.red('โœ—') :
312
+ out.yellow('โš ');
313
+ out.print(` ${icon} ${check.message}`);
314
+ if (check.fix) {
315
+ out.print(` ${out.dim('Fix:')} ${out.cmd(check.fix)}`);
316
+ }
317
+ }
318
+ // Performance results (full mode)
319
+ if (fullMode && result.performance) {
320
+ out.newline();
321
+ out.print(` ${out.highlight('Performance:')}`);
322
+ out.newline();
323
+ out.print(` โšก Pattern matching: ${result.performance.patternMatchTime}ms per check`);
324
+ out.print(` ๐Ÿ“– File read: ${result.performance.fileReadTime}ms avg`);
325
+ out.print(` ๐Ÿ“ Directory list: ${result.performance.directoryListTime}ms avg`);
326
+ out.print(` ๐Ÿ’พ Memory usage: ${result.performance.memoryUsage}MB`);
327
+ }
328
+ // Pattern validation (full mode)
329
+ if (fullMode && result.patterns) {
330
+ out.newline();
331
+ out.print(` ${out.highlight('Pattern Validation:')}`);
332
+ out.newline();
333
+ out.print(` ๐Ÿ“Š Total patterns: ${result.patterns.total}`);
334
+ out.print(` ๐Ÿงช Tested: ${result.patterns.tested}`);
335
+ out.print(` โœ… Working: ${result.patterns.working}`);
336
+ if (result.patterns.failed.length > 0) {
337
+ out.print(` โŒ Failed: ${result.patterns.failed.join(', ')}`);
338
+ }
339
+ }
340
+ // Summary
341
+ out.newline();
342
+ out.divider();
343
+ out.newline();
344
+ if (result.summary.failed === 0) {
345
+ out.success(`All ${result.summary.passed} checks passed!`);
346
+ if (result.summary.warnings > 0) {
347
+ out.print(` ${out.dim(`${result.summary.warnings} warning(s) - consider fixing`)}`);
348
+ }
349
+ }
350
+ else {
351
+ out.error(`${result.summary.failed} check(s) failed`);
352
+ out.print(` ${out.dim('Run the suggested fixes above')}`);
353
+ }
354
+ out.newline();
355
+ }
356
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export interface ScanOptions {
18
18
  path?: string;
19
19
  exclude?: string[];
20
20
  showPreview?: boolean;
21
+ json?: boolean;
21
22
  }
22
23
  /**
23
24
  * Scan project for secrets and personal data
@@ -28,6 +29,10 @@ export declare function scanProject(cwd: string, options?: ScanOptions): Promise
28
29
  * Human-readable format with clickable links and clear categorization
29
30
  */
30
31
  export declare function formatScanResults(results: ScanResult[]): string;
32
+ /**
33
+ * v2.1: Format scan results as JSON for CI/automation
34
+ */
35
+ export declare function formatScanResultsJSON(results: ScanResult[]): string;
31
36
  /**
32
37
  * Execute scan command
33
38
  */
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAqIpD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAyYD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC,CAoE7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CA8M/D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAiJpD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8YD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC,CAoE7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CA8M/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAgCnE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA2Bf"}