guardrail-cli 1.0.6 → 2.0.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 (144) hide show
  1. package/README.md +483 -10
  2. package/dist/commands/baseline.d.ts +7 -0
  3. package/dist/commands/baseline.d.ts.map +1 -0
  4. package/dist/commands/baseline.js +79 -0
  5. package/dist/commands/baseline.js.map +1 -0
  6. package/dist/commands/cache.d.ts +13 -0
  7. package/dist/commands/cache.d.ts.map +1 -0
  8. package/dist/commands/cache.js +165 -0
  9. package/dist/commands/cache.js.map +1 -0
  10. package/dist/commands/evidence.d.ts +45 -0
  11. package/dist/commands/evidence.d.ts.map +1 -0
  12. package/dist/commands/evidence.js +197 -0
  13. package/dist/commands/evidence.js.map +1 -0
  14. package/dist/commands/index.d.ts +8 -0
  15. package/dist/commands/index.d.ts.map +1 -0
  16. package/dist/commands/index.js +15 -0
  17. package/dist/commands/index.js.map +1 -0
  18. package/dist/commands/scan-secrets.d.ts +47 -0
  19. package/dist/commands/scan-secrets.d.ts.map +1 -0
  20. package/dist/commands/scan-secrets.js +225 -0
  21. package/dist/commands/scan-secrets.js.map +1 -0
  22. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
  23. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
  24. package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
  25. package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
  26. package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
  27. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
  28. package/dist/commands/scan-vulnerabilities-osv.js +716 -0
  29. package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
  30. package/dist/commands/scan-vulnerabilities.d.ts +32 -0
  31. package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
  32. package/dist/commands/scan-vulnerabilities.js +283 -0
  33. package/dist/commands/scan-vulnerabilities.js.map +1 -0
  34. package/dist/commands/secrets-allowlist.d.ts +7 -0
  35. package/dist/commands/secrets-allowlist.d.ts.map +1 -0
  36. package/dist/commands/secrets-allowlist.js +85 -0
  37. package/dist/commands/secrets-allowlist.js.map +1 -0
  38. package/dist/fix/applicator.d.ts +44 -0
  39. package/dist/fix/applicator.d.ts.map +1 -0
  40. package/dist/fix/applicator.js +144 -0
  41. package/dist/fix/applicator.js.map +1 -0
  42. package/dist/fix/backup.d.ts +38 -0
  43. package/dist/fix/backup.d.ts.map +1 -0
  44. package/dist/fix/backup.js +154 -0
  45. package/dist/fix/backup.js.map +1 -0
  46. package/dist/fix/engine.d.ts +55 -0
  47. package/dist/fix/engine.d.ts.map +1 -0
  48. package/dist/fix/engine.js +285 -0
  49. package/dist/fix/engine.js.map +1 -0
  50. package/dist/fix/index.d.ts +5 -0
  51. package/dist/fix/index.d.ts.map +1 -0
  52. package/dist/fix/index.js +12 -0
  53. package/dist/fix/index.js.map +1 -0
  54. package/dist/fix/interactive.d.ts +22 -0
  55. package/dist/fix/interactive.d.ts.map +1 -0
  56. package/dist/fix/interactive.js +172 -0
  57. package/dist/fix/interactive.js.map +1 -0
  58. package/dist/formatters/index.d.ts +6 -0
  59. package/dist/formatters/index.d.ts.map +1 -0
  60. package/dist/formatters/index.js +11 -0
  61. package/dist/formatters/index.js.map +1 -0
  62. package/dist/formatters/sarif-enhanced.d.ts +78 -0
  63. package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
  64. package/dist/formatters/sarif-enhanced.js +144 -0
  65. package/dist/formatters/sarif-enhanced.js.map +1 -0
  66. package/dist/formatters/sarif-v2.d.ts +121 -0
  67. package/dist/formatters/sarif-v2.d.ts.map +1 -0
  68. package/dist/formatters/sarif-v2.js +356 -0
  69. package/dist/formatters/sarif-v2.js.map +1 -0
  70. package/dist/formatters/sarif.d.ts +72 -0
  71. package/dist/formatters/sarif.d.ts.map +1 -0
  72. package/dist/formatters/sarif.js +146 -0
  73. package/dist/formatters/sarif.js.map +1 -0
  74. package/dist/index.js +3362 -1397
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/ci-generator.d.ts +18 -0
  77. package/dist/init/ci-generator.d.ts.map +1 -0
  78. package/dist/init/ci-generator.js +251 -0
  79. package/dist/init/ci-generator.js.map +1 -0
  80. package/dist/init/detect-framework.d.ts +15 -0
  81. package/dist/init/detect-framework.d.ts.map +1 -0
  82. package/dist/init/detect-framework.js +299 -0
  83. package/dist/init/detect-framework.js.map +1 -0
  84. package/dist/init/hooks-installer.d.ts +22 -0
  85. package/dist/init/hooks-installer.d.ts.map +1 -0
  86. package/dist/init/hooks-installer.js +302 -0
  87. package/dist/init/hooks-installer.js.map +1 -0
  88. package/dist/init/index.d.ts +8 -0
  89. package/dist/init/index.d.ts.map +1 -0
  90. package/dist/init/index.js +22 -0
  91. package/dist/init/index.js.map +1 -0
  92. package/dist/init/templates.d.ts +401 -0
  93. package/dist/init/templates.d.ts.map +1 -0
  94. package/dist/init/templates.js +240 -0
  95. package/dist/init/templates.js.map +1 -0
  96. package/dist/reality/reality-runner.d.ts +76 -0
  97. package/dist/reality/reality-runner.d.ts.map +1 -0
  98. package/dist/reality/reality-runner.js +454 -0
  99. package/dist/reality/reality-runner.js.map +1 -0
  100. package/dist/runtime/auth-utils.d.ts +43 -0
  101. package/dist/runtime/auth-utils.d.ts.map +1 -0
  102. package/dist/runtime/auth-utils.js +126 -0
  103. package/dist/runtime/auth-utils.js.map +1 -0
  104. package/dist/runtime/client.d.ts +74 -0
  105. package/dist/runtime/client.d.ts.map +1 -0
  106. package/dist/runtime/client.js +222 -0
  107. package/dist/runtime/client.js.map +1 -0
  108. package/dist/runtime/creds.d.ts +48 -0
  109. package/dist/runtime/creds.d.ts.map +1 -0
  110. package/dist/runtime/creds.js +245 -0
  111. package/dist/runtime/creds.js.map +1 -0
  112. package/dist/runtime/exit-codes.d.ts +47 -0
  113. package/dist/runtime/exit-codes.d.ts.map +1 -0
  114. package/dist/runtime/exit-codes.js +91 -0
  115. package/dist/runtime/exit-codes.js.map +1 -0
  116. package/dist/runtime/index.d.ts +9 -0
  117. package/dist/runtime/index.d.ts.map +1 -0
  118. package/dist/runtime/index.js +25 -0
  119. package/dist/runtime/index.js.map +1 -0
  120. package/dist/runtime/semver.d.ts +37 -0
  121. package/dist/runtime/semver.d.ts.map +1 -0
  122. package/dist/runtime/semver.js +110 -0
  123. package/dist/runtime/semver.js.map +1 -0
  124. package/dist/scanner/baseline.d.ts +52 -0
  125. package/dist/scanner/baseline.d.ts.map +1 -0
  126. package/dist/scanner/baseline.js +85 -0
  127. package/dist/scanner/baseline.js.map +1 -0
  128. package/dist/scanner/incremental.d.ts +30 -0
  129. package/dist/scanner/incremental.d.ts.map +1 -0
  130. package/dist/scanner/incremental.js +82 -0
  131. package/dist/scanner/incremental.js.map +1 -0
  132. package/dist/scanner/parallel.d.ts +43 -0
  133. package/dist/scanner/parallel.d.ts.map +1 -0
  134. package/dist/scanner/parallel.js +99 -0
  135. package/dist/scanner/parallel.js.map +1 -0
  136. package/dist/ui/frame.d.ts +68 -0
  137. package/dist/ui/frame.d.ts.map +1 -0
  138. package/dist/ui/frame.js +165 -0
  139. package/dist/ui/frame.js.map +1 -0
  140. package/dist/ui/index.d.ts +5 -0
  141. package/dist/ui/index.d.ts.map +1 -0
  142. package/dist/ui/index.js +16 -0
  143. package/dist/ui/index.js.map +1 -0
  144. package/package.json +42 -9
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ /**
3
+ * Cache management commands
4
+ *
5
+ * Commands:
6
+ * - cache:clear - Clear the OSV vulnerability cache
7
+ * - cache:status - Show cache statistics
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.registerCacheCommands = registerCacheCommands;
11
+ const path_1 = require("path");
12
+ const fs_1 = require("fs");
13
+ const c = {
14
+ bold: (s) => `\x1b[1m${s}\x1b[0m`,
15
+ dim: (s) => `\x1b[2m${s}\x1b[0m`,
16
+ success: (s) => `\x1b[32m${s}\x1b[0m`,
17
+ error: (s) => `\x1b[31m${s}\x1b[0m`,
18
+ info: (s) => `\x1b[34m${s}\x1b[0m`,
19
+ warning: (s) => `\x1b[33m${s}\x1b[0m`,
20
+ };
21
+ /**
22
+ * Get cache directory path
23
+ */
24
+ function getCacheDir(projectPath = '.') {
25
+ return (0, path_1.join)(projectPath, '.guardrail', 'cache');
26
+ }
27
+ /**
28
+ * Get cache statistics
29
+ */
30
+ function getCacheStats(cacheDir) {
31
+ if (!(0, fs_1.existsSync)(cacheDir)) {
32
+ return { exists: false, totalSize: 0, fileCount: 0, files: [] };
33
+ }
34
+ const files = [];
35
+ let totalSize = 0;
36
+ try {
37
+ const entries = (0, fs_1.readdirSync)(cacheDir);
38
+ for (const entry of entries) {
39
+ const filePath = (0, path_1.join)(cacheDir, entry);
40
+ const stat = (0, fs_1.statSync)(filePath);
41
+ if (stat.isFile()) {
42
+ files.push({
43
+ name: entry,
44
+ size: stat.size,
45
+ modified: stat.mtime,
46
+ });
47
+ totalSize += stat.size;
48
+ }
49
+ }
50
+ }
51
+ catch {
52
+ // Failed to read cache directory
53
+ }
54
+ return {
55
+ exists: true,
56
+ totalSize,
57
+ fileCount: files.length,
58
+ files,
59
+ };
60
+ }
61
+ /**
62
+ * Format bytes to human readable
63
+ */
64
+ function formatBytes(bytes) {
65
+ if (bytes === 0)
66
+ return '0 B';
67
+ const k = 1024;
68
+ const sizes = ['B', 'KB', 'MB', 'GB'];
69
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
70
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
71
+ }
72
+ /**
73
+ * Clear cache directory
74
+ */
75
+ function clearCache(cacheDir) {
76
+ try {
77
+ if ((0, fs_1.existsSync)(cacheDir)) {
78
+ (0, fs_1.rmSync)(cacheDir, { recursive: true, force: true });
79
+ }
80
+ (0, fs_1.mkdirSync)(cacheDir, { recursive: true });
81
+ return { success: true };
82
+ }
83
+ catch (error) {
84
+ return {
85
+ success: false,
86
+ error: error instanceof Error ? error.message : 'Unknown error',
87
+ };
88
+ }
89
+ }
90
+ /**
91
+ * Register cache commands
92
+ */
93
+ function registerCacheCommands(program, printLogo) {
94
+ program
95
+ .command('cache:clear')
96
+ .description('Clear the Guardrail cache (OSV vulnerability data)')
97
+ .option('-p, --path <path>', 'Project path', '.')
98
+ .option('--global', 'Clear global cache instead of project cache')
99
+ .action(async (opts) => {
100
+ printLogo();
101
+ console.log(`\n${c.bold('🗑️ CACHE CLEAR')}\n`);
102
+ let cacheDir;
103
+ if (opts.global) {
104
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '.';
105
+ cacheDir = (0, path_1.join)(homeDir, '.guardrail', 'cache');
106
+ }
107
+ else {
108
+ cacheDir = getCacheDir(opts.path);
109
+ }
110
+ const stats = getCacheStats(cacheDir);
111
+ if (!stats.exists || stats.fileCount === 0) {
112
+ console.log(` ${c.info('ℹ')} Cache is already empty\n`);
113
+ console.log(` ${c.dim('Path:')} ${cacheDir}\n`);
114
+ return;
115
+ }
116
+ console.log(` ${c.dim('Path:')} ${cacheDir}`);
117
+ console.log(` ${c.dim('Files:')} ${stats.fileCount}`);
118
+ console.log(` ${c.dim('Size:')} ${formatBytes(stats.totalSize)}\n`);
119
+ const result = clearCache(cacheDir);
120
+ if (result.success) {
121
+ console.log(` ${c.success('✓')} Cache cleared successfully\n`);
122
+ }
123
+ else {
124
+ console.log(` ${c.error('✗')} Failed to clear cache: ${result.error}\n`);
125
+ process.exit(1);
126
+ }
127
+ });
128
+ program
129
+ .command('cache:status')
130
+ .description('Show cache statistics')
131
+ .option('-p, --path <path>', 'Project path', '.')
132
+ .option('--global', 'Show global cache instead of project cache')
133
+ .action(async (opts) => {
134
+ printLogo();
135
+ console.log(`\n${c.bold('📊 CACHE STATUS')}\n`);
136
+ let cacheDir;
137
+ if (opts.global) {
138
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '.';
139
+ cacheDir = (0, path_1.join)(homeDir, '.guardrail', 'cache');
140
+ }
141
+ else {
142
+ cacheDir = getCacheDir(opts.path);
143
+ }
144
+ const stats = getCacheStats(cacheDir);
145
+ console.log(` ${c.dim('Path:')} ${cacheDir}`);
146
+ console.log(` ${c.dim('Exists:')} ${stats.exists ? c.success('yes') : c.warning('no')}`);
147
+ console.log(` ${c.dim('Files:')} ${stats.fileCount}`);
148
+ console.log(` ${c.dim('Total size:')} ${formatBytes(stats.totalSize)}\n`);
149
+ if (stats.files.length > 0) {
150
+ console.log(` ${c.bold('Cached files:')}\n`);
151
+ for (const file of stats.files) {
152
+ const age = Date.now() - file.modified.getTime();
153
+ const ageHours = Math.floor(age / (1000 * 60 * 60));
154
+ const ageStr = ageHours < 24 ? `${ageHours}h ago` : `${Math.floor(ageHours / 24)}d ago`;
155
+ console.log(` ${c.info('•')} ${file.name}`);
156
+ console.log(` ${c.dim('Size:')} ${formatBytes(file.size)} | ${c.dim('Modified:')} ${ageStr}`);
157
+ }
158
+ console.log('');
159
+ }
160
+ // Show TTL info
161
+ console.log(` ${c.dim('Cache TTL:')} 24 hours`);
162
+ console.log(` ${c.dim('Tip:')} Use ${c.bold('--no-cache')} flag to bypass cache\n`);
163
+ });
164
+ }
165
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Signed Evidence Packs
3
+ * Enterprise-grade audit trail with cryptographic attestation
4
+ *
5
+ * Generates:
6
+ * - manifest.json (scan metadata)
7
+ * - inputs.sha256 (hash list of scanned files)
8
+ * - results.json / results.sarif
9
+ * - attestation.sig (signature for tamper detection)
10
+ */
11
+ export interface EvidenceManifest {
12
+ schemaVersion: string;
13
+ runId: string;
14
+ tool: {
15
+ name: string;
16
+ version: string;
17
+ commit?: string;
18
+ };
19
+ project: {
20
+ path: string;
21
+ gitSha?: string;
22
+ gitBranch?: string;
23
+ gitRemote?: string;
24
+ };
25
+ scan: {
26
+ type: string;
27
+ startedAt: string;
28
+ completedAt: string;
29
+ filesScanned: number;
30
+ findingsCount: number;
31
+ };
32
+ evidence: {
33
+ inputsSha256: string;
34
+ resultsSha256: string;
35
+ policySha256?: string;
36
+ };
37
+ attestation: {
38
+ algorithm: string;
39
+ keyId: string;
40
+ signature?: string;
41
+ };
42
+ }
43
+ export declare function generateEvidence(scanType: string, results: any, projectPath: string): Promise<string>;
44
+ export declare function verifyEvidence(evidencePath: string): Promise<boolean>;
45
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/commands/evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AA2ED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,GAAG,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAoFjB;AAED,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkC3E"}
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * Signed Evidence Packs
4
+ * Enterprise-grade audit trail with cryptographic attestation
5
+ *
6
+ * Generates:
7
+ * - manifest.json (scan metadata)
8
+ * - inputs.sha256 (hash list of scanned files)
9
+ * - results.json / results.sarif
10
+ * - attestation.sig (signature for tamper detection)
11
+ */
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.generateEvidence = generateEvidence;
17
+ exports.verifyEvidence = verifyEvidence;
18
+ const crypto_1 = __importDefault(require("crypto"));
19
+ const fs_1 = require("fs");
20
+ const path_1 = require("path");
21
+ const child_process_1 = require("child_process");
22
+ function getVersion() {
23
+ try {
24
+ const pkg = require('../../package.json');
25
+ return pkg.version || '1.0.0';
26
+ }
27
+ catch {
28
+ return '1.0.0';
29
+ }
30
+ }
31
+ function getGitInfo(projectPath) {
32
+ try {
33
+ const sha = (0, child_process_1.execSync)('git rev-parse HEAD', { cwd: projectPath, encoding: 'utf8' }).trim();
34
+ const branch = (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', { cwd: projectPath, encoding: 'utf8' }).trim();
35
+ let remote;
36
+ try {
37
+ remote = (0, child_process_1.execSync)('git remote get-url origin', { cwd: projectPath, encoding: 'utf8' }).trim();
38
+ }
39
+ catch {
40
+ // No remote configured
41
+ }
42
+ return { sha, branch, remote };
43
+ }
44
+ catch {
45
+ return {};
46
+ }
47
+ }
48
+ function sha256(content) {
49
+ return crypto_1.default.createHash('sha256').update(content).digest('hex');
50
+ }
51
+ function generateRunId() {
52
+ return `run_${Date.now()}_${crypto_1.default.randomBytes(4).toString('hex')}`;
53
+ }
54
+ function hashFileList(projectPath, extensions = ['.ts', '.js', '.json', '.env', '.yaml', '.yml']) {
55
+ const hashes = [];
56
+ function walkDir(dir) {
57
+ try {
58
+ const items = (0, fs_1.readdirSync)(dir);
59
+ for (const item of items) {
60
+ if (item.startsWith('.') || item === 'node_modules' || item === 'dist' || item === '.git')
61
+ continue;
62
+ const fullPath = (0, path_1.join)(dir, item);
63
+ try {
64
+ const stat = (0, fs_1.statSync)(fullPath);
65
+ if (stat.isDirectory()) {
66
+ walkDir(fullPath);
67
+ }
68
+ else if (extensions.some(ext => item.endsWith(ext))) {
69
+ const content = (0, fs_1.readFileSync)(fullPath);
70
+ const hash = crypto_1.default.createHash('sha256').update(content).digest('hex');
71
+ const relPath = (0, path_1.relative)(projectPath, fullPath).replace(/\\/g, '/');
72
+ hashes.push(`${hash} ${relPath}`);
73
+ }
74
+ }
75
+ catch {
76
+ // Skip inaccessible files
77
+ }
78
+ }
79
+ }
80
+ catch {
81
+ // Skip inaccessible directories
82
+ }
83
+ }
84
+ walkDir(projectPath);
85
+ hashes.sort();
86
+ return hashes.join('\n');
87
+ }
88
+ function signContent(content, keyId) {
89
+ // Use HMAC-SHA256 with a per-installation key
90
+ // In production, this would use a proper signing key from keychain
91
+ const key = process.env.GUARDRAIL_SIGNING_KEY || `guardrail-${keyId}`;
92
+ return crypto_1.default.createHmac('sha256', key).update(content).digest('hex');
93
+ }
94
+ async function generateEvidence(scanType, results, projectPath) {
95
+ const evidenceDir = (0, path_1.join)(projectPath, '.guardrail', 'evidence');
96
+ if (!(0, fs_1.existsSync)(evidenceDir)) {
97
+ (0, fs_1.mkdirSync)(evidenceDir, { recursive: true });
98
+ }
99
+ const runId = generateRunId();
100
+ const runDir = (0, path_1.join)(evidenceDir, runId);
101
+ (0, fs_1.mkdirSync)(runDir, { recursive: true });
102
+ const startTime = new Date().toISOString();
103
+ const gitInfo = getGitInfo(projectPath);
104
+ const version = getVersion();
105
+ // Generate inputs hash
106
+ const inputsContent = hashFileList(projectPath);
107
+ const inputsPath = (0, path_1.join)(runDir, 'inputs.sha256');
108
+ (0, fs_1.writeFileSync)(inputsPath, inputsContent);
109
+ const inputsSha256 = sha256(inputsContent);
110
+ // Write results
111
+ const resultsJson = JSON.stringify(results, null, 2);
112
+ const resultsPath = (0, path_1.join)(runDir, 'results.json');
113
+ (0, fs_1.writeFileSync)(resultsPath, resultsJson);
114
+ const resultsSha256 = sha256(resultsJson);
115
+ // Generate machine ID for key identification
116
+ const keyId = crypto_1.default.createHash('sha256')
117
+ .update(process.env.COMPUTERNAME || process.env.HOSTNAME || 'unknown')
118
+ .digest('hex')
119
+ .slice(0, 16);
120
+ // Build manifest
121
+ const manifest = {
122
+ schemaVersion: 'guardrail.evidence.v1',
123
+ runId,
124
+ tool: {
125
+ name: 'guardrail-cli',
126
+ version,
127
+ },
128
+ project: {
129
+ path: projectPath,
130
+ gitSha: gitInfo.sha,
131
+ gitBranch: gitInfo.branch,
132
+ gitRemote: gitInfo.remote,
133
+ },
134
+ scan: {
135
+ type: scanType,
136
+ startedAt: startTime,
137
+ completedAt: new Date().toISOString(),
138
+ filesScanned: results.filesScanned || 0,
139
+ findingsCount: results.findings?.length || 0,
140
+ },
141
+ evidence: {
142
+ inputsSha256,
143
+ resultsSha256,
144
+ },
145
+ attestation: {
146
+ algorithm: 'HMAC-SHA256',
147
+ keyId,
148
+ },
149
+ };
150
+ // Sign the manifest
151
+ const manifestContent = JSON.stringify(manifest, null, 2);
152
+ const signature = signContent(manifestContent, keyId);
153
+ manifest.attestation.signature = signature;
154
+ // Write final manifest with signature
155
+ const manifestPath = (0, path_1.join)(runDir, 'manifest.json');
156
+ (0, fs_1.writeFileSync)(manifestPath, JSON.stringify(manifest, null, 2));
157
+ // Write attestation separately
158
+ const attestationPath = (0, path_1.join)(runDir, 'attestation.sig');
159
+ (0, fs_1.writeFileSync)(attestationPath, signature);
160
+ console.log(`\n 📦 Evidence pack generated: ${runDir}`);
161
+ console.log(` Run ID: ${runId}`);
162
+ console.log(` Inputs hash: ${inputsSha256.slice(0, 16)}...`);
163
+ console.log(` Results hash: ${resultsSha256.slice(0, 16)}...`);
164
+ console.log(` Signature: ${signature.slice(0, 16)}...\n`);
165
+ return runDir;
166
+ }
167
+ async function verifyEvidence(evidencePath) {
168
+ try {
169
+ const manifestPath = (0, path_1.join)(evidencePath, 'manifest.json');
170
+ const manifestContent = (0, fs_1.readFileSync)(manifestPath, 'utf8');
171
+ const manifest = JSON.parse(manifestContent);
172
+ // Remove signature for verification
173
+ const storedSignature = manifest.attestation.signature;
174
+ delete manifest.attestation.signature;
175
+ // Recompute signature
176
+ const expectedSignature = signContent(JSON.stringify(manifest, null, 2), manifest.attestation.keyId);
177
+ if (storedSignature !== expectedSignature) {
178
+ console.error('❌ Evidence verification failed: signature mismatch');
179
+ return false;
180
+ }
181
+ // Verify results hash
182
+ const resultsPath = (0, path_1.join)(evidencePath, 'results.json');
183
+ const resultsContent = (0, fs_1.readFileSync)(resultsPath, 'utf8');
184
+ const resultsSha256 = sha256(resultsContent);
185
+ if (resultsSha256 !== manifest.evidence.resultsSha256) {
186
+ console.error('❌ Evidence verification failed: results tampered');
187
+ return false;
188
+ }
189
+ console.log('✓ Evidence pack verified successfully');
190
+ return true;
191
+ }
192
+ catch (err) {
193
+ console.error(`❌ Evidence verification failed: ${err.message}`);
194
+ return false;
195
+ }
196
+ }
197
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/commands/evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CLI Commands Module
3
+ * Re-exports all command registration functions
4
+ */
5
+ export { registerScanSecretsCommand } from './scan-secrets';
6
+ export { registerScanVulnerabilitiesCommand } from './scan-vulnerabilities';
7
+ export { generateEvidence, verifyEvidence } from './evidence';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * CLI Commands Module
4
+ * Re-exports all command registration functions
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.verifyEvidence = exports.generateEvidence = exports.registerScanVulnerabilitiesCommand = exports.registerScanSecretsCommand = void 0;
8
+ var scan_secrets_1 = require("./scan-secrets");
9
+ Object.defineProperty(exports, "registerScanSecretsCommand", { enumerable: true, get: function () { return scan_secrets_1.registerScanSecretsCommand; } });
10
+ var scan_vulnerabilities_1 = require("./scan-vulnerabilities");
11
+ Object.defineProperty(exports, "registerScanVulnerabilitiesCommand", { enumerable: true, get: function () { return scan_vulnerabilities_1.registerScanVulnerabilitiesCommand; } });
12
+ var evidence_1 = require("./evidence");
13
+ Object.defineProperty(exports, "generateEvidence", { enumerable: true, get: function () { return evidence_1.generateEvidence; } });
14
+ Object.defineProperty(exports, "verifyEvidence", { enumerable: true, get: function () { return evidence_1.verifyEvidence; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+CAA4D;AAAnD,0HAAA,0BAA0B,OAAA;AACnC,+DAA4E;AAAnE,0IAAA,kCAAkC,OAAA;AAC3C,uCAA8D;AAArD,4GAAA,gBAAgB,OAAA;AAAE,0GAAA,cAAc,OAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * scan:secrets command
3
+ * Enterprise-grade secret detection with SecretsGuardian
4
+ */
5
+ import { Command } from 'commander';
6
+ export interface ScanSecretsOptions {
7
+ path: string;
8
+ format: 'table' | 'json' | 'sarif';
9
+ output?: string;
10
+ excludeTests: boolean;
11
+ minConfidence?: number;
12
+ failOnDetection: boolean;
13
+ evidence: boolean;
14
+ history?: boolean;
15
+ historyDepth?: number;
16
+ noCustomPatterns?: boolean;
17
+ noAllowlist?: boolean;
18
+ noContextualRisk?: boolean;
19
+ }
20
+ export interface SecretFinding {
21
+ type: string;
22
+ file: string;
23
+ line: number;
24
+ risk: string;
25
+ confidence: number;
26
+ entropy: number;
27
+ match: string;
28
+ isTest: boolean;
29
+ recommendation: any;
30
+ }
31
+ export interface ScanSecretsResult {
32
+ projectPath: string;
33
+ scanType: string;
34
+ filesScanned: number;
35
+ patterns: string[];
36
+ findings: SecretFinding[];
37
+ summary: {
38
+ total: number;
39
+ highEntropy: number;
40
+ lowEntropy: number;
41
+ byRisk: Record<string, number>;
42
+ };
43
+ }
44
+ export declare function scanSecrets(projectPath: string, options: ScanSecretsOptions): Promise<ScanSecretsResult>;
45
+ export declare function outputSecretsResults(results: ScanSecretsResult, options: ScanSecretsOptions): void;
46
+ export declare function registerScanSecretsCommand(program: Command, requireAuth: () => any, printLogo: () => void): void;
47
+ //# sourceMappingURL=scan-secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-secrets.d.ts","sourceRoot":"","sources":["../../src/commands/scan-secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,GAAG,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;CACH;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyG9G;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAsClG;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,IAAI,CAgFhH"}