@vibecheckai/cli 2.5.6 → 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 +103 -17
- 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"}
|