@vibecheckai/cli 2.5.7 → 2.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/LICENSE +1 -1
- package/dist/bundles/vibecheck-core.js +20 -20
- package/dist/commands/secrets-allowlist.js +4 -4
- package/dist/commands/secrets-allowlist.js.map +1 -1
- package/dist/commands/ship-consolidated.js +193 -193
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/init/ci-generator.d.ts +2 -2
- package/dist/init/hooks-installer.d.ts +2 -2
- package/dist/init/index.d.ts +1 -1
- package/dist/init/index.d.ts.map +1 -1
- package/dist/init/index.js +2 -2
- package/dist/init/index.js.map +1 -1
- package/dist/init/templates.d.ts +6 -285
- package/dist/init/templates.d.ts.map +1 -1
- package/dist/init/templates.js +2 -3
- package/dist/init/templates.js.map +1 -1
- package/dist/runtime/json-output.d.ts +2 -2
- package/package.json +11 -3
- package/dist/bundles/guardrail-core.js +0 -25799
- package/dist/bundles/guardrail-security.js +0 -208687
- package/dist/bundles/guardrail-ship.js +0 -2318
- package/dist/commands/autopilot-decision.d.ts +0 -24
- package/dist/commands/autopilot-decision.d.ts.map +0 -1
- package/dist/commands/autopilot-decision.js +0 -304
- package/dist/commands/autopilot-decision.js.map +0 -1
- package/dist/commands/autopilot.d.ts +0 -33
- package/dist/commands/autopilot.d.ts.map +0 -1
- package/dist/commands/autopilot.js +0 -1539
- package/dist/commands/autopilot.js.map +0 -1
- package/dist/commands/context.d.ts +0 -8
- package/dist/commands/context.d.ts.map +0 -1
- package/dist/commands/context.js +0 -340
- package/dist/commands/context.js.map +0 -1
- package/dist/commands/debug.d.ts +0 -78
- package/dist/commands/debug.d.ts.map +0 -1
- package/dist/commands/debug.js +0 -381
- package/dist/commands/debug.js.map +0 -1
- package/dist/commands/preview.d.ts +0 -54
- package/dist/commands/preview.d.ts.map +0 -1
- package/dist/commands/preview.js +0 -352
- package/dist/commands/preview.js.map +0 -1
- package/dist/commands/quality/check.d.ts +0 -31
- package/dist/commands/quality/check.d.ts.map +0 -1
- package/dist/commands/quality/check.js +0 -242
- package/dist/commands/quality/check.js.map +0 -1
- package/dist/commands/quality/index.d.ts +0 -8
- package/dist/commands/quality/index.d.ts.map +0 -1
- package/dist/commands/quality/index.js +0 -14
- package/dist/commands/quality/index.js.map +0 -1
- package/dist/commands/quality/setup-quality.d.ts +0 -23
- package/dist/commands/quality/setup-quality.d.ts.map +0 -1
- package/dist/commands/quality/setup-quality.js +0 -452
- package/dist/commands/quality/setup-quality.js.map +0 -1
- package/dist/commands/quality/tidy.d.ts +0 -41
- package/dist/commands/quality/tidy.d.ts.map +0 -1
- package/dist/commands/quality/tidy.js +0 -466
- package/dist/commands/quality/tidy.js.map +0 -1
- package/dist/commands/quality/utils.d.ts +0 -73
- package/dist/commands/quality/utils.d.ts.map +0 -1
- package/dist/commands/quality/utils.js +0 -158
- package/dist/commands/quality/utils.js.map +0 -1
- package/dist/fix/analytics.d.ts +0 -121
- package/dist/fix/analytics.d.ts.map +0 -1
- package/dist/fix/analytics.js +0 -289
- package/dist/fix/analytics.js.map +0 -1
- package/dist/fix/audit.d.ts +0 -61
- package/dist/fix/audit.d.ts.map +0 -1
- package/dist/fix/audit.js +0 -149
- package/dist/fix/audit.js.map +0 -1
- package/dist/fix/config.d.ts +0 -78
- package/dist/fix/config.d.ts.map +0 -1
- package/dist/fix/config.js +0 -200
- package/dist/fix/config.js.map +0 -1
- package/dist/fix/impact.d.ts +0 -74
- package/dist/fix/impact.d.ts.map +0 -1
- package/dist/fix/impact.js +0 -281
- package/dist/fix/impact.js.map +0 -1
- package/dist/fix/learning.d.ts +0 -109
- package/dist/fix/learning.d.ts.map +0 -1
- package/dist/fix/learning.js +0 -296
- package/dist/fix/learning.js.map +0 -1
- package/dist/fix/metrics.d.ts +0 -106
- package/dist/fix/metrics.d.ts.map +0 -1
- package/dist/fix/metrics.js +0 -138
- package/dist/fix/metrics.js.map +0 -1
- package/dist/fix/parallel.d.ts +0 -69
- package/dist/fix/parallel.d.ts.map +0 -1
- package/dist/fix/parallel.js +0 -203
- package/dist/fix/parallel.js.map +0 -1
- package/dist/fix/report.d.ts +0 -40
- package/dist/fix/report.d.ts.map +0 -1
- package/dist/fix/report.js +0 -212
- package/dist/fix/report.js.map +0 -1
- package/dist/fix/strategy.d.ts +0 -53
- package/dist/fix/strategy.d.ts.map +0 -1
- package/dist/fix/strategy.js +0 -143
- package/dist/fix/strategy.js.map +0 -1
- package/dist/fix/templates.d.ts +0 -58
- package/dist/fix/templates.d.ts.map +0 -1
- package/dist/fix/templates.js +0 -259
- package/dist/fix/templates.js.map +0 -1
- package/dist/fix/testing.d.ts +0 -68
- package/dist/fix/testing.d.ts.map +0 -1
- package/dist/fix/testing.js +0 -245
- package/dist/fix/testing.js.map +0 -1
- package/dist/fix/validation.d.ts +0 -71
- package/dist/fix/validation.d.ts.map +0 -1
- package/dist/fix/validation.js +0 -267
- package/dist/fix/validation.js.map +0 -1
- package/dist/fix/visualization.d.ts +0 -73
- package/dist/fix/visualization.d.ts.map +0 -1
- package/dist/fix/visualization.js +0 -243
- package/dist/fix/visualization.js.map +0 -1
- package/dist/runtime/cli-errors.d.ts +0 -38
- package/dist/runtime/cli-errors.d.ts.map +0 -1
- package/dist/runtime/cli-errors.js +0 -354
- package/dist/runtime/cli-errors.js.map +0 -1
- package/dist/runtime/owner-mode.d.ts +0 -48
- package/dist/runtime/owner-mode.d.ts.map +0 -1
- package/dist/runtime/owner-mode.js +0 -284
- package/dist/runtime/owner-mode.js.map +0 -1
- package/dist/scanner/index.d.ts +0 -8
- package/dist/scanner/index.d.ts.map +0 -1
- package/dist/scanner/index.js +0 -15
- package/dist/scanner/index.js.map +0 -1
- package/dist/scanner/placeholder-detector.d.ts +0 -56
- package/dist/scanner/placeholder-detector.d.ts.map +0 -1
- package/dist/scanner/placeholder-detector.js +0 -220
- package/dist/scanner/placeholder-detector.js.map +0 -1
- package/dist/scanner/route-detector.d.ts +0 -100
- package/dist/scanner/route-detector.d.ts.map +0 -1
- package/dist/scanner/route-detector.js +0 -455
- package/dist/scanner/route-detector.js.map +0 -1
- package/dist/scanner/scoring.d.ts +0 -67
- package/dist/scanner/scoring.d.ts.map +0 -1
- package/dist/scanner/scoring.js +0 -284
- package/dist/scanner/scoring.js.map +0 -1
- package/dist/ship-baseline.d.ts +0 -56
- package/dist/ship-baseline.d.ts.map +0 -1
- package/dist/ship-baseline.js +0 -194
- package/dist/ship-baseline.js.map +0 -1
- package/dist/ship-config.d.ts +0 -91
- package/dist/ship-config.d.ts.map +0 -1
- package/dist/ship-config.js +0 -133
- package/dist/ship-config.js.map +0 -1
- package/dist/ship-data-loader.d.ts +0 -70
- package/dist/ship-data-loader.d.ts.map +0 -1
- package/dist/ship-data-loader.js +0 -301
- package/dist/ship-data-loader.js.map +0 -1
- package/dist/utils/ai-helpers.d.ts +0 -72
- package/dist/utils/ai-helpers.d.ts.map +0 -1
- package/dist/utils/ai-helpers.js +0 -339
- package/dist/utils/ai-helpers.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -34
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -160
- package/dist/utils/validation.js.map +0 -1
package/LICENSE
CHANGED
|
@@ -12999,8 +12999,8 @@ var envSchema = import_zod.z.object({
|
|
|
12999
12999
|
// Feature flags
|
|
13000
13000
|
ENABLE_METRICS: import_zod.z.string().transform((val) => val === "true").default("false"),
|
|
13001
13001
|
ENABLE_AI_FEATURES: import_zod.z.string().transform((val) => val === "true").default("true"),
|
|
13002
|
-
|
|
13003
|
-
|
|
13002
|
+
Vibecheck_DEMO_MODE: import_zod.z.string().transform((val) => val === "true").default("false"),
|
|
13003
|
+
Vibecheck_POLICY_STRICT: import_zod.z.string().transform((val) => val === "true").default("false")
|
|
13004
13004
|
});
|
|
13005
13005
|
function validateEnv() {
|
|
13006
13006
|
try {
|
|
@@ -13815,96 +13815,96 @@ var MetricsRegistry = class {
|
|
|
13815
13815
|
}
|
|
13816
13816
|
// Scan metrics
|
|
13817
13817
|
scansTotal = new Counter(
|
|
13818
|
-
"
|
|
13818
|
+
"Vibecheck_scans_total",
|
|
13819
13819
|
"Total number of security scans performed",
|
|
13820
13820
|
["scan_type", "status"]
|
|
13821
13821
|
);
|
|
13822
13822
|
scanDuration = new Histogram(
|
|
13823
|
-
"
|
|
13823
|
+
"Vibecheck_scan_duration_seconds",
|
|
13824
13824
|
"Duration of security scans in seconds",
|
|
13825
13825
|
["scan_type"],
|
|
13826
13826
|
[0.1, 0.5, 1, 2, 5, 10, 30, 60]
|
|
13827
13827
|
);
|
|
13828
13828
|
// Injection detection metrics
|
|
13829
13829
|
injectionsDetected = new Counter(
|
|
13830
|
-
"
|
|
13830
|
+
"Vibecheck_injections_detected_total",
|
|
13831
13831
|
"Total number of prompt injection attempts detected",
|
|
13832
13832
|
["severity", "type"]
|
|
13833
13833
|
);
|
|
13834
13834
|
injectionScanDuration = new Histogram(
|
|
13835
|
-
"
|
|
13835
|
+
"Vibecheck_injection_scan_duration_seconds",
|
|
13836
13836
|
"Duration of injection scans in seconds",
|
|
13837
13837
|
["content_type"]
|
|
13838
13838
|
);
|
|
13839
13839
|
// Vulnerability metrics
|
|
13840
13840
|
vulnerabilitiesFound = new Counter(
|
|
13841
|
-
"
|
|
13841
|
+
"Vibecheck_vulnerabilities_found_total",
|
|
13842
13842
|
"Total number of vulnerabilities found",
|
|
13843
13843
|
["severity", "source"]
|
|
13844
13844
|
);
|
|
13845
13845
|
vulnerablePackages = new Gauge(
|
|
13846
|
-
"
|
|
13846
|
+
"Vibecheck_vulnerable_packages",
|
|
13847
13847
|
"Current number of vulnerable packages",
|
|
13848
13848
|
["project_id"]
|
|
13849
13849
|
);
|
|
13850
13850
|
// Secret detection metrics
|
|
13851
13851
|
secretsDetected = new Counter(
|
|
13852
|
-
"
|
|
13852
|
+
"Vibecheck_secrets_detected_total",
|
|
13853
13853
|
"Total number of secrets detected",
|
|
13854
13854
|
["secret_type", "severity"]
|
|
13855
13855
|
);
|
|
13856
13856
|
// Compliance metrics
|
|
13857
13857
|
complianceScore = new Gauge(
|
|
13858
|
-
"
|
|
13858
|
+
"Vibecheck_compliance_score",
|
|
13859
13859
|
"Current compliance score (0-100)",
|
|
13860
13860
|
["framework", "project_id"]
|
|
13861
13861
|
);
|
|
13862
13862
|
complianceViolations = new Counter(
|
|
13863
|
-
"
|
|
13863
|
+
"Vibecheck_compliance_violations_total",
|
|
13864
13864
|
"Total number of compliance violations",
|
|
13865
13865
|
["framework", "severity"]
|
|
13866
13866
|
);
|
|
13867
13867
|
// API metrics
|
|
13868
13868
|
apiRequestsTotal = new Counter(
|
|
13869
|
-
"
|
|
13869
|
+
"Vibecheck_api_requests_total",
|
|
13870
13870
|
"Total number of API requests",
|
|
13871
13871
|
["method", "endpoint", "status_code"]
|
|
13872
13872
|
);
|
|
13873
13873
|
apiRequestDuration = new Histogram(
|
|
13874
|
-
"
|
|
13874
|
+
"Vibecheck_api_request_duration_seconds",
|
|
13875
13875
|
"Duration of API requests in seconds",
|
|
13876
13876
|
["method", "endpoint"]
|
|
13877
13877
|
);
|
|
13878
13878
|
// Agent metrics
|
|
13879
13879
|
agentActionsTotal = new Counter(
|
|
13880
|
-
"
|
|
13880
|
+
"Vibecheck_agent_actions_total",
|
|
13881
13881
|
"Total number of agent actions",
|
|
13882
13882
|
["agent_id", "action_type", "status"]
|
|
13883
13883
|
);
|
|
13884
13884
|
agentActionsBlocked = new Counter(
|
|
13885
|
-
"
|
|
13885
|
+
"Vibecheck_agent_actions_blocked_total",
|
|
13886
13886
|
"Total number of agent actions blocked",
|
|
13887
13887
|
["agent_id", "reason"]
|
|
13888
13888
|
);
|
|
13889
13889
|
// Cache metrics
|
|
13890
13890
|
cacheHits = new Counter(
|
|
13891
|
-
"
|
|
13891
|
+
"Vibecheck_cache_hits_total",
|
|
13892
13892
|
"Total number of cache hits",
|
|
13893
13893
|
["cache_type"]
|
|
13894
13894
|
);
|
|
13895
13895
|
cacheMisses = new Counter(
|
|
13896
|
-
"
|
|
13896
|
+
"Vibecheck_cache_misses_total",
|
|
13897
13897
|
"Total number of cache misses",
|
|
13898
13898
|
["cache_type"]
|
|
13899
13899
|
);
|
|
13900
13900
|
// System metrics
|
|
13901
13901
|
activeConnections = new Gauge(
|
|
13902
|
-
"
|
|
13902
|
+
"Vibecheck_active_connections",
|
|
13903
13903
|
"Number of active WebSocket connections",
|
|
13904
13904
|
[]
|
|
13905
13905
|
);
|
|
13906
13906
|
memoryUsageBytes = new Gauge(
|
|
13907
|
-
"
|
|
13907
|
+
"Vibecheck_memory_usage_bytes",
|
|
13908
13908
|
"Current memory usage in bytes",
|
|
13909
13909
|
["type"]
|
|
13910
13910
|
);
|
|
@@ -25543,7 +25543,7 @@ function generateGitLabCI(_config) {
|
|
|
25543
25543
|
stages:
|
|
25544
25544
|
- security
|
|
25545
25545
|
|
|
25546
|
-
|
|
25546
|
+
vibecheck_scan:
|
|
25547
25547
|
stage: security
|
|
25548
25548
|
image: node:18
|
|
25549
25549
|
before_script:
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.registerSecretsAllowlistCommand = registerSecretsAllowlistCommand;
|
|
8
8
|
const path_1 = require("path");
|
|
9
|
-
const
|
|
9
|
+
const security_1 = require('../bundles/vibecheck-security');
|
|
10
10
|
const c = {
|
|
11
11
|
reset: '\x1b[0m',
|
|
12
12
|
bold: (s) => `\x1b[1m${s}\x1b[0m`,
|
|
@@ -29,7 +29,7 @@ function registerSecretsAllowlistCommand(program, requireAuth, printLogo) {
|
|
|
29
29
|
printLogo();
|
|
30
30
|
console.log(`\n${c.bold('🔐 SECRETS ALLOWLIST - ADD')}\n`);
|
|
31
31
|
const projectPath = (0, path_1.resolve)(opts.path);
|
|
32
|
-
const allowlistManager = new
|
|
32
|
+
const allowlistManager = new security_1.Allowlist(projectPath);
|
|
33
33
|
try {
|
|
34
34
|
allowlistManager.add(fingerprint);
|
|
35
35
|
allowlistManager.save();
|
|
@@ -52,7 +52,7 @@ function registerSecretsAllowlistCommand(program, requireAuth, printLogo) {
|
|
|
52
52
|
console.log(`\n${c.bold('🔐 SECRETS ALLOWLIST - FROM BASELINE')}\n`);
|
|
53
53
|
const projectPath = (0, path_1.resolve)(opts.path);
|
|
54
54
|
const baselinePath = (0, path_1.resolve)(file);
|
|
55
|
-
const allowlistManager = new
|
|
55
|
+
const allowlistManager = new security_1.Allowlist(projectPath);
|
|
56
56
|
try {
|
|
57
57
|
const added = allowlistManager.addFromBaseline(baselinePath);
|
|
58
58
|
allowlistManager.save();
|
|
@@ -73,7 +73,7 @@ function registerSecretsAllowlistCommand(program, requireAuth, printLogo) {
|
|
|
73
73
|
printLogo();
|
|
74
74
|
console.log(`\n${c.bold('🔐 SECRETS ALLOWLIST - LIST')}\n`);
|
|
75
75
|
const projectPath = (0, path_1.resolve)(opts.path);
|
|
76
|
-
const allowlistManager = new
|
|
76
|
+
const allowlistManager = new security_1.Allowlist(projectPath);
|
|
77
77
|
if (allowlistManager.size() === 0) {
|
|
78
78
|
console.log(` ${c.dim('No fingerprints in allowlist')}\n`);
|
|
79
79
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets-allowlist.js","sourceRoot":"","sources":["../../src/commands/secrets-allowlist.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAgBH,0EA0EC;AAvFD,+BAA+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"secrets-allowlist.js","sourceRoot":"","sources":["../../src/commands/secrets-allowlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -317,199 +317,199 @@ function getShipVerdictColor(verdict) {
|
|
|
317
317
|
function generateShipHTMLReport(result) {
|
|
318
318
|
const verdictColor = result.verdict === 'GO' ? '#10b981' : result.verdict === 'NO-GO' ? '#ef4444' : '#f59e0b';
|
|
319
319
|
const verdictIcon = result.verdict === 'GO' ? '✓' : result.verdict === 'NO-GO' ? '✗' : '⚠';
|
|
320
|
-
return `<!DOCTYPE html>
|
|
321
|
-
<html lang="en">
|
|
322
|
-
<head>
|
|
323
|
-
<meta charset="UTF-8">
|
|
324
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
325
|
-
<title>vibecheck Ship Report - ${result.verdict}</title>
|
|
326
|
-
<style>
|
|
327
|
-
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
328
|
-
body {
|
|
329
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
330
|
-
background: #0f172a;
|
|
331
|
-
color: #e2e8f0;
|
|
332
|
-
line-height: 1.6;
|
|
333
|
-
padding: 2rem;
|
|
334
|
-
}
|
|
335
|
-
.container { max-width: 1200px; margin: 0 auto; }
|
|
336
|
-
.header {
|
|
337
|
-
background: #1e293b;
|
|
338
|
-
border-radius: 12px;
|
|
339
|
-
padding: 2rem;
|
|
340
|
-
margin-bottom: 2rem;
|
|
341
|
-
border-left: 4px solid ${verdictColor};
|
|
342
|
-
}
|
|
343
|
-
.verdict {
|
|
344
|
-
font-size: 2rem;
|
|
345
|
-
font-weight: bold;
|
|
346
|
-
color: ${verdictColor};
|
|
347
|
-
margin-bottom: 0.5rem;
|
|
348
|
-
}
|
|
349
|
-
.timestamp { color: #94a3b8; font-size: 0.9rem; }
|
|
350
|
-
.section {
|
|
351
|
-
background: #1e293b;
|
|
352
|
-
border-radius: 12px;
|
|
353
|
-
padding: 1.5rem;
|
|
354
|
-
margin-bottom: 1.5rem;
|
|
355
|
-
}
|
|
356
|
-
.section-title {
|
|
357
|
-
font-size: 1.25rem;
|
|
358
|
-
font-weight: bold;
|
|
359
|
-
margin-bottom: 1rem;
|
|
360
|
-
color: #f1f5f9;
|
|
361
|
-
}
|
|
362
|
-
.metric {
|
|
363
|
-
display: inline-block;
|
|
364
|
-
background: #334155;
|
|
365
|
-
padding: 0.5rem 1rem;
|
|
366
|
-
border-radius: 6px;
|
|
367
|
-
margin-right: 1rem;
|
|
368
|
-
margin-bottom: 0.5rem;
|
|
369
|
-
}
|
|
370
|
-
.metric-value {
|
|
371
|
-
font-size: 1.5rem;
|
|
372
|
-
font-weight: bold;
|
|
373
|
-
color: #60a5fa;
|
|
374
|
-
}
|
|
375
|
-
.metric-label {
|
|
376
|
-
font-size: 0.875rem;
|
|
377
|
-
color: #94a3b8;
|
|
378
|
-
}
|
|
379
|
-
.finding {
|
|
380
|
-
background: #0f172a;
|
|
381
|
-
border-left: 3px solid #ef4444;
|
|
382
|
-
padding: 1rem;
|
|
383
|
-
margin-bottom: 0.75rem;
|
|
384
|
-
border-radius: 6px;
|
|
385
|
-
}
|
|
386
|
-
.finding-id {
|
|
387
|
-
font-family: 'Monaco', 'Courier New', monospace;
|
|
388
|
-
color: #60a5fa;
|
|
389
|
-
font-weight: bold;
|
|
390
|
-
}
|
|
391
|
-
.finding-file {
|
|
392
|
-
color: #94a3b8;
|
|
393
|
-
font-size: 0.875rem;
|
|
394
|
-
margin-top: 0.25rem;
|
|
395
|
-
}
|
|
396
|
-
.next-actions {
|
|
397
|
-
background: #1e293b;
|
|
398
|
-
border-radius: 12px;
|
|
399
|
-
padding: 1.5rem;
|
|
400
|
-
margin-top: 2rem;
|
|
401
|
-
}
|
|
402
|
-
.action {
|
|
403
|
-
background: #334155;
|
|
404
|
-
padding: 0.75rem 1rem;
|
|
405
|
-
border-radius: 6px;
|
|
406
|
-
margin-bottom: 0.5rem;
|
|
407
|
-
font-family: 'Monaco', 'Courier New', monospace;
|
|
408
|
-
color: #60a5fa;
|
|
409
|
-
}
|
|
410
|
-
.badge {
|
|
411
|
-
display: inline-block;
|
|
412
|
-
padding: 0.25rem 0.75rem;
|
|
413
|
-
border-radius: 4px;
|
|
414
|
-
font-size: 0.75rem;
|
|
415
|
-
font-weight: bold;
|
|
416
|
-
margin-left: 0.5rem;
|
|
417
|
-
}
|
|
418
|
-
.badge-critical { background: #ef4444; color: white; }
|
|
419
|
-
.badge-high { background: #f59e0b; color: white; }
|
|
420
|
-
.badge-medium { background: #3b82f6; color: white; }
|
|
421
|
-
.badge-low { background: #6b7280; color: white; }
|
|
422
|
-
</style>
|
|
423
|
-
</head>
|
|
424
|
-
<body>
|
|
425
|
-
<div class="container">
|
|
426
|
-
<div class="header">
|
|
427
|
-
<div class="verdict">${verdictIcon} ${result.verdict}</div>
|
|
428
|
-
<div class="timestamp">Generated: ${new Date(result.timestamp).toLocaleString()}</div>
|
|
429
|
-
<div class="timestamp">Project: ${result.projectPath}</div>
|
|
430
|
-
</div>
|
|
431
|
-
|
|
432
|
-
<div class="section">
|
|
433
|
-
<div class="section-title">Summary</div>
|
|
434
|
-
<div class="metric">
|
|
435
|
-
<div class="metric-value">${result.scan.summary.totalFindings}</div>
|
|
436
|
-
<div class="metric-label">Scan Findings</div>
|
|
437
|
-
</div>
|
|
438
|
-
<div class="metric">
|
|
439
|
-
<div class="metric-value">${result.deadUI.summary.total}</div>
|
|
440
|
-
<div class="metric-label">Dead UI Issues</div>
|
|
441
|
-
</div>
|
|
442
|
-
${result.playwright.ran ? `
|
|
443
|
-
<div class="metric">
|
|
444
|
-
<div class="metric-value">${result.playwright.summary.passed}/${result.playwright.summary.totalActions}</div>
|
|
445
|
-
<div class="metric-label">Playwright Actions</div>
|
|
446
|
-
</div>
|
|
447
|
-
` : ''}
|
|
448
|
-
</div>
|
|
449
|
-
|
|
450
|
-
${result.scan.topBlockers.length > 0 ? `
|
|
451
|
-
<div class="section">
|
|
452
|
-
<div class="section-title">Top Blockers</div>
|
|
453
|
-
${result.scan.topBlockers.slice(0, 10).map(blocker => `
|
|
454
|
-
<div class="finding">
|
|
455
|
-
<div class="finding-id">${blocker.id}</div>
|
|
456
|
-
<div>${blocker.type} - ${blocker.severity}</div>
|
|
457
|
-
<div class="finding-file">${blocker.file}:${blocker.line}</div>
|
|
458
|
-
</div>
|
|
459
|
-
`).join('')}
|
|
460
|
-
</div>
|
|
461
|
-
` : ''}
|
|
462
|
-
|
|
463
|
-
${result.deadUI.findings.length > 0 ? `
|
|
464
|
-
<div class="section">
|
|
465
|
-
<div class="section-title">Dead UI Issues</div>
|
|
466
|
-
${result.deadUI.findings.slice(0, 10).map(finding => `
|
|
467
|
-
<div class="finding">
|
|
468
|
-
<div class="finding-id">${finding.id}</div>
|
|
469
|
-
<div>${finding.issue}</div>
|
|
470
|
-
<div class="finding-file">${finding.file}:${finding.line}</div>
|
|
471
|
-
<div style="margin-top: 0.5rem; color: #94a3b8; font-size: 0.875rem;">
|
|
472
|
-
Suggestion: ${finding.suggestion}
|
|
473
|
-
</div>
|
|
474
|
-
</div>
|
|
475
|
-
`).join('')}
|
|
476
|
-
</div>
|
|
477
|
-
` : ''}
|
|
478
|
-
|
|
479
|
-
${result.playwright.failures.length > 0 ? `
|
|
480
|
-
<div class="section">
|
|
481
|
-
<div class="section-title">Playwright Failures</div>
|
|
482
|
-
${result.playwright.failures.map((failure, i) => `
|
|
483
|
-
<div class="finding">
|
|
484
|
-
<div class="finding-id">Test ${i + 1}</div>
|
|
485
|
-
<div>${failure.test}</div>
|
|
486
|
-
<div style="color: #ef4444; margin-top: 0.5rem;">${failure.error}</div>
|
|
487
|
-
${failure.trace ? `<div style="margin-top: 0.5rem; color: #60a5fa;">Trace: ${failure.trace}</div>` : ''}
|
|
488
|
-
</div>
|
|
489
|
-
`).join('')}
|
|
490
|
-
</div>
|
|
491
|
-
` : ''}
|
|
492
|
-
|
|
493
|
-
${result.proofBundle ? `
|
|
494
|
-
<div class="section">
|
|
495
|
-
<div class="section-title">Proof Bundle</div>
|
|
496
|
-
<div style="color: #94a3b8;">
|
|
497
|
-
Proof bundle available at: ${result.proofBundle.path}
|
|
498
|
-
</div>
|
|
499
|
-
<div style="margin-top: 0.5rem; color: #94a3b8; font-size: 0.875rem;">
|
|
500
|
-
Includes: ${result.proofBundle.includes.join(', ')}
|
|
501
|
-
</div>
|
|
502
|
-
</div>
|
|
503
|
-
` : ''}
|
|
504
|
-
|
|
505
|
-
<div class="next-actions">
|
|
506
|
-
<div class="section-title">Next Actions</div>
|
|
507
|
-
${result.nextActions.map(action => `
|
|
508
|
-
<div class="action">${action}</div>
|
|
509
|
-
`).join('')}
|
|
510
|
-
</div>
|
|
511
|
-
</div>
|
|
512
|
-
</body>
|
|
320
|
+
return `<!DOCTYPE html>
|
|
321
|
+
<html lang="en">
|
|
322
|
+
<head>
|
|
323
|
+
<meta charset="UTF-8">
|
|
324
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
325
|
+
<title>vibecheck Ship Report - ${result.verdict}</title>
|
|
326
|
+
<style>
|
|
327
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
328
|
+
body {
|
|
329
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
330
|
+
background: #0f172a;
|
|
331
|
+
color: #e2e8f0;
|
|
332
|
+
line-height: 1.6;
|
|
333
|
+
padding: 2rem;
|
|
334
|
+
}
|
|
335
|
+
.container { max-width: 1200px; margin: 0 auto; }
|
|
336
|
+
.header {
|
|
337
|
+
background: #1e293b;
|
|
338
|
+
border-radius: 12px;
|
|
339
|
+
padding: 2rem;
|
|
340
|
+
margin-bottom: 2rem;
|
|
341
|
+
border-left: 4px solid ${verdictColor};
|
|
342
|
+
}
|
|
343
|
+
.verdict {
|
|
344
|
+
font-size: 2rem;
|
|
345
|
+
font-weight: bold;
|
|
346
|
+
color: ${verdictColor};
|
|
347
|
+
margin-bottom: 0.5rem;
|
|
348
|
+
}
|
|
349
|
+
.timestamp { color: #94a3b8; font-size: 0.9rem; }
|
|
350
|
+
.section {
|
|
351
|
+
background: #1e293b;
|
|
352
|
+
border-radius: 12px;
|
|
353
|
+
padding: 1.5rem;
|
|
354
|
+
margin-bottom: 1.5rem;
|
|
355
|
+
}
|
|
356
|
+
.section-title {
|
|
357
|
+
font-size: 1.25rem;
|
|
358
|
+
font-weight: bold;
|
|
359
|
+
margin-bottom: 1rem;
|
|
360
|
+
color: #f1f5f9;
|
|
361
|
+
}
|
|
362
|
+
.metric {
|
|
363
|
+
display: inline-block;
|
|
364
|
+
background: #334155;
|
|
365
|
+
padding: 0.5rem 1rem;
|
|
366
|
+
border-radius: 6px;
|
|
367
|
+
margin-right: 1rem;
|
|
368
|
+
margin-bottom: 0.5rem;
|
|
369
|
+
}
|
|
370
|
+
.metric-value {
|
|
371
|
+
font-size: 1.5rem;
|
|
372
|
+
font-weight: bold;
|
|
373
|
+
color: #60a5fa;
|
|
374
|
+
}
|
|
375
|
+
.metric-label {
|
|
376
|
+
font-size: 0.875rem;
|
|
377
|
+
color: #94a3b8;
|
|
378
|
+
}
|
|
379
|
+
.finding {
|
|
380
|
+
background: #0f172a;
|
|
381
|
+
border-left: 3px solid #ef4444;
|
|
382
|
+
padding: 1rem;
|
|
383
|
+
margin-bottom: 0.75rem;
|
|
384
|
+
border-radius: 6px;
|
|
385
|
+
}
|
|
386
|
+
.finding-id {
|
|
387
|
+
font-family: 'Monaco', 'Courier New', monospace;
|
|
388
|
+
color: #60a5fa;
|
|
389
|
+
font-weight: bold;
|
|
390
|
+
}
|
|
391
|
+
.finding-file {
|
|
392
|
+
color: #94a3b8;
|
|
393
|
+
font-size: 0.875rem;
|
|
394
|
+
margin-top: 0.25rem;
|
|
395
|
+
}
|
|
396
|
+
.next-actions {
|
|
397
|
+
background: #1e293b;
|
|
398
|
+
border-radius: 12px;
|
|
399
|
+
padding: 1.5rem;
|
|
400
|
+
margin-top: 2rem;
|
|
401
|
+
}
|
|
402
|
+
.action {
|
|
403
|
+
background: #334155;
|
|
404
|
+
padding: 0.75rem 1rem;
|
|
405
|
+
border-radius: 6px;
|
|
406
|
+
margin-bottom: 0.5rem;
|
|
407
|
+
font-family: 'Monaco', 'Courier New', monospace;
|
|
408
|
+
color: #60a5fa;
|
|
409
|
+
}
|
|
410
|
+
.badge {
|
|
411
|
+
display: inline-block;
|
|
412
|
+
padding: 0.25rem 0.75rem;
|
|
413
|
+
border-radius: 4px;
|
|
414
|
+
font-size: 0.75rem;
|
|
415
|
+
font-weight: bold;
|
|
416
|
+
margin-left: 0.5rem;
|
|
417
|
+
}
|
|
418
|
+
.badge-critical { background: #ef4444; color: white; }
|
|
419
|
+
.badge-high { background: #f59e0b; color: white; }
|
|
420
|
+
.badge-medium { background: #3b82f6; color: white; }
|
|
421
|
+
.badge-low { background: #6b7280; color: white; }
|
|
422
|
+
</style>
|
|
423
|
+
</head>
|
|
424
|
+
<body>
|
|
425
|
+
<div class="container">
|
|
426
|
+
<div class="header">
|
|
427
|
+
<div class="verdict">${verdictIcon} ${result.verdict}</div>
|
|
428
|
+
<div class="timestamp">Generated: ${new Date(result.timestamp).toLocaleString()}</div>
|
|
429
|
+
<div class="timestamp">Project: ${result.projectPath}</div>
|
|
430
|
+
</div>
|
|
431
|
+
|
|
432
|
+
<div class="section">
|
|
433
|
+
<div class="section-title">Summary</div>
|
|
434
|
+
<div class="metric">
|
|
435
|
+
<div class="metric-value">${result.scan.summary.totalFindings}</div>
|
|
436
|
+
<div class="metric-label">Scan Findings</div>
|
|
437
|
+
</div>
|
|
438
|
+
<div class="metric">
|
|
439
|
+
<div class="metric-value">${result.deadUI.summary.total}</div>
|
|
440
|
+
<div class="metric-label">Dead UI Issues</div>
|
|
441
|
+
</div>
|
|
442
|
+
${result.playwright.ran ? `
|
|
443
|
+
<div class="metric">
|
|
444
|
+
<div class="metric-value">${result.playwright.summary.passed}/${result.playwright.summary.totalActions}</div>
|
|
445
|
+
<div class="metric-label">Playwright Actions</div>
|
|
446
|
+
</div>
|
|
447
|
+
` : ''}
|
|
448
|
+
</div>
|
|
449
|
+
|
|
450
|
+
${result.scan.topBlockers.length > 0 ? `
|
|
451
|
+
<div class="section">
|
|
452
|
+
<div class="section-title">Top Blockers</div>
|
|
453
|
+
${result.scan.topBlockers.slice(0, 10).map(blocker => `
|
|
454
|
+
<div class="finding">
|
|
455
|
+
<div class="finding-id">${blocker.id}</div>
|
|
456
|
+
<div>${blocker.type} - ${blocker.severity}</div>
|
|
457
|
+
<div class="finding-file">${blocker.file}:${blocker.line}</div>
|
|
458
|
+
</div>
|
|
459
|
+
`).join('')}
|
|
460
|
+
</div>
|
|
461
|
+
` : ''}
|
|
462
|
+
|
|
463
|
+
${result.deadUI.findings.length > 0 ? `
|
|
464
|
+
<div class="section">
|
|
465
|
+
<div class="section-title">Dead UI Issues</div>
|
|
466
|
+
${result.deadUI.findings.slice(0, 10).map(finding => `
|
|
467
|
+
<div class="finding">
|
|
468
|
+
<div class="finding-id">${finding.id}</div>
|
|
469
|
+
<div>${finding.issue}</div>
|
|
470
|
+
<div class="finding-file">${finding.file}:${finding.line}</div>
|
|
471
|
+
<div style="margin-top: 0.5rem; color: #94a3b8; font-size: 0.875rem;">
|
|
472
|
+
Suggestion: ${finding.suggestion}
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
`).join('')}
|
|
476
|
+
</div>
|
|
477
|
+
` : ''}
|
|
478
|
+
|
|
479
|
+
${result.playwright.failures.length > 0 ? `
|
|
480
|
+
<div class="section">
|
|
481
|
+
<div class="section-title">Playwright Failures</div>
|
|
482
|
+
${result.playwright.failures.map((failure, i) => `
|
|
483
|
+
<div class="finding">
|
|
484
|
+
<div class="finding-id">Test ${i + 1}</div>
|
|
485
|
+
<div>${failure.test}</div>
|
|
486
|
+
<div style="color: #ef4444; margin-top: 0.5rem;">${failure.error}</div>
|
|
487
|
+
${failure.trace ? `<div style="margin-top: 0.5rem; color: #60a5fa;">Trace: ${failure.trace}</div>` : ''}
|
|
488
|
+
</div>
|
|
489
|
+
`).join('')}
|
|
490
|
+
</div>
|
|
491
|
+
` : ''}
|
|
492
|
+
|
|
493
|
+
${result.proofBundle ? `
|
|
494
|
+
<div class="section">
|
|
495
|
+
<div class="section-title">Proof Bundle</div>
|
|
496
|
+
<div style="color: #94a3b8;">
|
|
497
|
+
Proof bundle available at: ${result.proofBundle.path}
|
|
498
|
+
</div>
|
|
499
|
+
<div style="margin-top: 0.5rem; color: #94a3b8; font-size: 0.875rem;">
|
|
500
|
+
Includes: ${result.proofBundle.includes.join(', ')}
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
` : ''}
|
|
504
|
+
|
|
505
|
+
<div class="next-actions">
|
|
506
|
+
<div class="section-title">Next Actions</div>
|
|
507
|
+
${result.nextActions.map(action => `
|
|
508
|
+
<div class="action">${action}</div>
|
|
509
|
+
`).join('')}
|
|
510
|
+
</div>
|
|
511
|
+
</div>
|
|
512
|
+
</body>
|
|
513
513
|
</html>`;
|
|
514
514
|
}
|
|
515
515
|
//# sourceMappingURL=ship-consolidated.js.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAwHH,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;CAoBV,CAAC;AAEF,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;CAkCX,CAAC;AA0KF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAGpC,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAyDvI;AAgHD,iBAAS,SAAS,SAEjB"}
|
package/dist/index.js
CHANGED
|
@@ -48,7 +48,7 @@ const fs_1 = require("fs");
|
|
|
48
48
|
const path_2 = require("path");
|
|
49
49
|
// Use package.json version instead of hardcoding
|
|
50
50
|
const { version: CLI_VERSION = '0.0.0' } = require('../package.json');
|
|
51
|
-
const
|
|
51
|
+
const security_1 = require('./bundles/vibecheck-security');
|
|
52
52
|
const creds_1 = require("./runtime/creds");
|
|
53
53
|
const client_1 = require("./runtime/client");
|
|
54
54
|
const exit_codes_1 = require("./runtime/exit-codes");
|
|
@@ -3058,7 +3058,7 @@ function countFiles(dir) {
|
|
|
3058
3058
|
}
|
|
3059
3059
|
async function generateFindings(projectPath) {
|
|
3060
3060
|
const findings = [];
|
|
3061
|
-
const guardian = new
|
|
3061
|
+
const guardian = new security_1.SecretsGuardian();
|
|
3062
3062
|
// File extensions to scan for secrets
|
|
3063
3063
|
const scanExtensions = ['.ts', '.js', '.tsx', '.jsx', '.json', '.env', '.yaml', '.yml', '.toml', '.py', '.rb'];
|
|
3064
3064
|
// Recursively get files to scan
|
|
@@ -3155,7 +3155,7 @@ async function generateFindings(projectPath) {
|
|
|
3155
3155
|
}
|
|
3156
3156
|
async function scanSecrets(projectPath, options) {
|
|
3157
3157
|
const s = spinner('Scanning for hardcoded secrets...');
|
|
3158
|
-
const guardian = new
|
|
3158
|
+
const guardian = new security_1.SecretsGuardian();
|
|
3159
3159
|
// Use enterprise-grade scanProject instead of custom file walking
|
|
3160
3160
|
// Handles: ignores, binary files, size caps, concurrency, dedupe
|
|
3161
3161
|
const report = await guardian.scanProject(projectPath, 'cli-scan', {
|
|
@@ -3331,7 +3331,7 @@ async function scanCompliance(projectPath, options) {
|
|
|
3331
3331
|
}
|
|
3332
3332
|
async function generateSBOM(projectPath, options) {
|
|
3333
3333
|
const s = spinner('Generating Software Bill of Materials...');
|
|
3334
|
-
const sbomGenerator = new
|
|
3334
|
+
const sbomGenerator = new security_1.SBOMGenerator();
|
|
3335
3335
|
try {
|
|
3336
3336
|
const sbom = await sbomGenerator.generate(projectPath, {
|
|
3337
3337
|
format: options.format || 'cyclonedx',
|
|
@@ -3407,7 +3407,7 @@ async function generateSBOM(projectPath, options) {
|
|
|
3407
3407
|
}
|
|
3408
3408
|
async function generateContainerSBOM(imageName, options) {
|
|
3409
3409
|
const s = spinner('Generating container SBOM...');
|
|
3410
|
-
const sbomGenerator = new
|
|
3410
|
+
const sbomGenerator = new security_1.SBOMGenerator();
|
|
3411
3411
|
try {
|
|
3412
3412
|
const sbom = await sbomGenerator.generateContainerSBOM(imageName, {
|
|
3413
3413
|
format: options.format || 'cyclonedx',
|