@vibecheckai/cli 3.5.0 → 3.5.2
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/bin/registry.js +214 -237
- package/bin/runners/cli-utils.js +33 -2
- package/bin/runners/context/analyzer.js +52 -1
- package/bin/runners/context/generators/cursor.js +2 -49
- package/bin/runners/context/git-context.js +3 -1
- package/bin/runners/context/team-conventions.js +33 -7
- package/bin/runners/lib/analysis-core.js +25 -5
- package/bin/runners/lib/analyzers.js +431 -481
- package/bin/runners/lib/default-config.js +127 -0
- package/bin/runners/lib/doctor/modules/security.js +3 -1
- package/bin/runners/lib/engine/ast-cache.js +210 -0
- package/bin/runners/lib/engine/auth-extractor.js +211 -0
- package/bin/runners/lib/engine/billing-extractor.js +112 -0
- package/bin/runners/lib/engine/enforcement-extractor.js +100 -0
- package/bin/runners/lib/engine/env-extractor.js +207 -0
- package/bin/runners/lib/engine/express-extractor.js +208 -0
- package/bin/runners/lib/engine/extractors.js +849 -0
- package/bin/runners/lib/engine/index.js +207 -0
- package/bin/runners/lib/engine/repo-index.js +514 -0
- package/bin/runners/lib/engine/types.js +124 -0
- package/bin/runners/lib/engines/accessibility-engine.js +18 -218
- package/bin/runners/lib/engines/api-consistency-engine.js +30 -335
- package/bin/runners/lib/engines/cross-file-analysis-engine.js +27 -292
- package/bin/runners/lib/engines/empty-catch-engine.js +17 -127
- package/bin/runners/lib/engines/mock-data-engine.js +10 -53
- package/bin/runners/lib/engines/performance-issues-engine.js +36 -176
- package/bin/runners/lib/engines/security-vulnerabilities-engine.js +54 -382
- package/bin/runners/lib/engines/type-aware-engine.js +39 -263
- package/bin/runners/lib/engines/vibecheck-engines/index.js +13 -122
- package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +164 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +291 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +83 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +198 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +275 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +167 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +217 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +73 -373
- package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +140 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +164 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +234 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +217 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +78 -0
- package/bin/runners/lib/entitlements-v2.js +73 -97
- package/bin/runners/lib/error-handler.js +44 -3
- package/bin/runners/lib/error-messages.js +289 -0
- package/bin/runners/lib/evidence-pack.js +7 -1
- package/bin/runners/lib/finding-id.js +69 -0
- package/bin/runners/lib/finding-sorter.js +89 -0
- package/bin/runners/lib/html-proof-report.js +700 -350
- package/bin/runners/lib/missions/plan.js +6 -46
- package/bin/runners/lib/missions/templates.js +0 -232
- package/bin/runners/lib/next-action.js +560 -0
- package/bin/runners/lib/prerequisites.js +149 -0
- package/bin/runners/lib/route-detection.js +137 -68
- package/bin/runners/lib/scan-output.js +91 -76
- package/bin/runners/lib/scan-runner.js +135 -0
- package/bin/runners/lib/schemas/ajv-validator.js +464 -0
- package/bin/runners/lib/schemas/error-envelope.schema.json +105 -0
- package/bin/runners/lib/schemas/finding-v3.schema.json +151 -0
- package/bin/runners/lib/schemas/report-artifact.schema.json +120 -0
- package/bin/runners/lib/schemas/run-request.schema.json +108 -0
- package/bin/runners/lib/schemas/validator.js +27 -0
- package/bin/runners/lib/schemas/verdict.schema.json +140 -0
- package/bin/runners/lib/ship-output-enterprise.js +23 -23
- package/bin/runners/lib/ship-output.js +75 -31
- package/bin/runners/lib/terminal-ui.js +6 -113
- package/bin/runners/lib/truth.js +351 -10
- package/bin/runners/lib/unified-cli-output.js +430 -603
- package/bin/runners/lib/unified-output.js +13 -9
- package/bin/runners/runAIAgent.js +10 -5
- package/bin/runners/runAgent.js +0 -3
- package/bin/runners/runAllowlist.js +389 -0
- package/bin/runners/runApprove.js +0 -33
- package/bin/runners/runAuth.js +73 -45
- package/bin/runners/runCheckpoint.js +51 -11
- package/bin/runners/runClassify.js +85 -21
- package/bin/runners/runContext.js +0 -3
- package/bin/runners/runDoctor.js +41 -28
- package/bin/runners/runEvidencePack.js +362 -0
- package/bin/runners/runFirewall.js +0 -3
- package/bin/runners/runFirewallHook.js +0 -3
- package/bin/runners/runFix.js +66 -76
- package/bin/runners/runGuard.js +18 -411
- package/bin/runners/runInit.js +113 -30
- package/bin/runners/runLabs.js +424 -0
- package/bin/runners/runMcp.js +19 -25
- package/bin/runners/runPolish.js +64 -240
- package/bin/runners/runPromptFirewall.js +12 -5
- package/bin/runners/runProve.js +57 -22
- package/bin/runners/runQuickstart.js +531 -0
- package/bin/runners/runReality.js +59 -68
- package/bin/runners/runReport.js +38 -33
- package/bin/runners/runRuntime.js +8 -5
- package/bin/runners/runScan.js +1413 -190
- package/bin/runners/runShip.js +113 -719
- package/bin/runners/runTruth.js +0 -3
- package/bin/runners/runValidate.js +13 -9
- package/bin/runners/runWatch.js +23 -14
- package/bin/scan.js +6 -1
- package/bin/vibecheck.js +204 -185
- package/mcp-server/deprecation-middleware.js +282 -0
- package/mcp-server/handlers/index.ts +15 -0
- package/mcp-server/handlers/tool-handler.ts +554 -0
- package/mcp-server/index-v1.js +698 -0
- package/mcp-server/index.js +210 -238
- package/mcp-server/lib/cache-wrapper.cjs +383 -0
- package/mcp-server/lib/error-envelope.js +138 -0
- package/mcp-server/lib/executor.ts +499 -0
- package/mcp-server/lib/index.ts +19 -0
- package/mcp-server/lib/rate-limiter.js +166 -0
- package/mcp-server/lib/sandbox.test.ts +519 -0
- package/mcp-server/lib/sandbox.ts +395 -0
- package/mcp-server/lib/types.ts +267 -0
- package/mcp-server/package.json +12 -3
- package/mcp-server/registry/tool-registry.js +794 -0
- package/mcp-server/registry/tools.json +605 -0
- package/mcp-server/registry.test.ts +334 -0
- package/mcp-server/tests/tier-gating.test.js +297 -0
- package/mcp-server/tier-auth.js +378 -45
- package/mcp-server/tools-v3.js +353 -442
- package/mcp-server/tsconfig.json +37 -0
- package/mcp-server/vibecheck-2.0-tools.js +14 -1
- package/package.json +1 -1
- package/bin/runners/lib/agent-firewall/learning/learning-engine.js +0 -849
- package/bin/runners/lib/audit-logger.js +0 -532
- package/bin/runners/lib/authority/authorities/architecture.js +0 -364
- package/bin/runners/lib/authority/authorities/compliance.js +0 -341
- package/bin/runners/lib/authority/authorities/human.js +0 -343
- package/bin/runners/lib/authority/authorities/quality.js +0 -420
- package/bin/runners/lib/authority/authorities/security.js +0 -228
- package/bin/runners/lib/authority/index.js +0 -293
- package/bin/runners/lib/bundle/bundle-intelligence.js +0 -846
- package/bin/runners/lib/cli-charts.js +0 -368
- package/bin/runners/lib/cli-config-display.js +0 -405
- package/bin/runners/lib/cli-demo.js +0 -275
- package/bin/runners/lib/cli-errors.js +0 -438
- package/bin/runners/lib/cli-help-formatter.js +0 -439
- package/bin/runners/lib/cli-interactive-menu.js +0 -509
- package/bin/runners/lib/cli-prompts.js +0 -441
- package/bin/runners/lib/cli-scan-cards.js +0 -362
- package/bin/runners/lib/compliance-reporter.js +0 -710
- package/bin/runners/lib/conductor/index.js +0 -671
- package/bin/runners/lib/easy/README.md +0 -123
- package/bin/runners/lib/easy/index.js +0 -140
- package/bin/runners/lib/easy/interactive-wizard.js +0 -788
- package/bin/runners/lib/easy/one-click-firewall.js +0 -564
- package/bin/runners/lib/easy/zero-config-reality.js +0 -714
- package/bin/runners/lib/engines/async-patterns-engine.js +0 -444
- package/bin/runners/lib/engines/bundle-size-engine.js +0 -433
- package/bin/runners/lib/engines/confidence-scoring.js +0 -276
- package/bin/runners/lib/engines/context-detection.js +0 -264
- package/bin/runners/lib/engines/database-patterns-engine.js +0 -429
- package/bin/runners/lib/engines/duplicate-code-engine.js +0 -354
- package/bin/runners/lib/engines/env-variables-engine.js +0 -458
- package/bin/runners/lib/engines/error-handling-engine.js +0 -437
- package/bin/runners/lib/engines/false-positive-prevention.js +0 -630
- package/bin/runners/lib/engines/framework-adapters/index.js +0 -607
- package/bin/runners/lib/engines/framework-detection.js +0 -508
- package/bin/runners/lib/engines/import-order-engine.js +0 -429
- package/bin/runners/lib/engines/naming-conventions-engine.js +0 -544
- package/bin/runners/lib/engines/noise-reduction-engine.js +0 -452
- package/bin/runners/lib/engines/orchestrator.js +0 -334
- package/bin/runners/lib/engines/react-patterns-engine.js +0 -457
- package/bin/runners/lib/engines/vibecheck-engines/lib/ai-hallucination-engine.js +0 -806
- package/bin/runners/lib/engines/vibecheck-engines/lib/smart-fix-engine.js +0 -577
- package/bin/runners/lib/engines/vibecheck-engines/lib/vibe-score-engine.js +0 -543
- package/bin/runners/lib/engines/vibecheck-engines.js +0 -514
- package/bin/runners/lib/enhanced-features/index.js +0 -305
- package/bin/runners/lib/enhanced-output.js +0 -631
- package/bin/runners/lib/enterprise.js +0 -300
- package/bin/runners/lib/firewall/command-validator.js +0 -351
- package/bin/runners/lib/firewall/config.js +0 -341
- package/bin/runners/lib/firewall/content-validator.js +0 -519
- package/bin/runners/lib/firewall/index.js +0 -101
- package/bin/runners/lib/firewall/path-validator.js +0 -256
- package/bin/runners/lib/intelligence/cross-repo-intelligence.js +0 -817
- package/bin/runners/lib/mcp-utils.js +0 -425
- package/bin/runners/lib/output/index.js +0 -1022
- package/bin/runners/lib/policy-engine.js +0 -652
- package/bin/runners/lib/polish/autofix/accessibility-fixes.js +0 -333
- package/bin/runners/lib/polish/autofix/async-handlers.js +0 -273
- package/bin/runners/lib/polish/autofix/dead-code.js +0 -280
- package/bin/runners/lib/polish/autofix/imports-optimizer.js +0 -344
- package/bin/runners/lib/polish/autofix/index.js +0 -200
- package/bin/runners/lib/polish/autofix/remove-consoles.js +0 -209
- package/bin/runners/lib/polish/autofix/strengthen-types.js +0 -245
- package/bin/runners/lib/polish/backend-checks.js +0 -148
- package/bin/runners/lib/polish/documentation-checks.js +0 -111
- package/bin/runners/lib/polish/frontend-checks.js +0 -168
- package/bin/runners/lib/polish/index.js +0 -71
- package/bin/runners/lib/polish/infrastructure-checks.js +0 -131
- package/bin/runners/lib/polish/library-detection.js +0 -175
- package/bin/runners/lib/polish/performance-checks.js +0 -100
- package/bin/runners/lib/polish/security-checks.js +0 -148
- package/bin/runners/lib/polish/utils.js +0 -203
- package/bin/runners/lib/prompt-builder.js +0 -540
- package/bin/runners/lib/proof-certificate.js +0 -634
- package/bin/runners/lib/reality/accessibility-audit.js +0 -946
- package/bin/runners/lib/reality/api-contract-validator.js +0 -1012
- package/bin/runners/lib/reality/chaos-engineering.js +0 -1084
- package/bin/runners/lib/reality/performance-tracker.js +0 -1077
- package/bin/runners/lib/reality/scenario-generator.js +0 -1404
- package/bin/runners/lib/reality/visual-regression.js +0 -852
- package/bin/runners/lib/reality-profiler.js +0 -717
- package/bin/runners/lib/replay/flight-recorder-viewer.js +0 -1160
- package/bin/runners/lib/review/ai-code-review.js +0 -832
- package/bin/runners/lib/rules/custom-rule-engine.js +0 -985
- package/bin/runners/lib/sbom-generator.js +0 -641
- package/bin/runners/lib/scan-output-enhanced.js +0 -512
- package/bin/runners/lib/security/owasp-scanner.js +0 -939
- package/bin/runners/lib/validators/contract-validator.js +0 -283
- package/bin/runners/lib/validators/dead-export-detector.js +0 -279
- package/bin/runners/lib/validators/dep-audit.js +0 -245
- package/bin/runners/lib/validators/env-validator.js +0 -319
- package/bin/runners/lib/validators/index.js +0 -120
- package/bin/runners/lib/validators/license-checker.js +0 -252
- package/bin/runners/lib/validators/route-validator.js +0 -290
- package/bin/runners/runAuthority.js +0 -528
- package/bin/runners/runConductor.js +0 -772
- package/bin/runners/runContainer.js +0 -366
- package/bin/runners/runEasy.js +0 -410
- package/bin/runners/runIaC.js +0 -372
- package/bin/runners/runVibe.js +0 -791
- package/mcp-server/tools.js +0 -495
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Enterprise Module Index
|
|
3
|
-
*
|
|
4
|
-
* All enterprise-grade features in one place:
|
|
5
|
-
* - Proof Certificates
|
|
6
|
-
* - Compliance Reporting (SOC2, HIPAA, PCI-DSS)
|
|
7
|
-
* - Audit Logging
|
|
8
|
-
* - Policy Enforcement
|
|
9
|
-
* - SBOM Generation
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
"use strict";
|
|
13
|
-
|
|
14
|
-
// Proof Certificates
|
|
15
|
-
let proofCertificate;
|
|
16
|
-
try {
|
|
17
|
-
proofCertificate = require("./proof-certificate");
|
|
18
|
-
} catch (e) {
|
|
19
|
-
proofCertificate = null;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Compliance Reporter
|
|
23
|
-
let complianceReporter;
|
|
24
|
-
try {
|
|
25
|
-
complianceReporter = require("./compliance-reporter");
|
|
26
|
-
} catch (e) {
|
|
27
|
-
complianceReporter = null;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Audit Logger
|
|
31
|
-
let auditLogger;
|
|
32
|
-
try {
|
|
33
|
-
auditLogger = require("./audit-logger");
|
|
34
|
-
} catch (e) {
|
|
35
|
-
auditLogger = null;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Policy Engine
|
|
39
|
-
let policyEngine;
|
|
40
|
-
try {
|
|
41
|
-
policyEngine = require("./policy-engine");
|
|
42
|
-
} catch (e) {
|
|
43
|
-
policyEngine = null;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// SBOM Generator
|
|
47
|
-
let sbomGenerator;
|
|
48
|
-
try {
|
|
49
|
-
sbomGenerator = require("./sbom-generator");
|
|
50
|
-
} catch (e) {
|
|
51
|
-
sbomGenerator = null;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Check if all enterprise features are available
|
|
56
|
-
*/
|
|
57
|
-
function isEnterpriseReady() {
|
|
58
|
-
return !!(
|
|
59
|
-
proofCertificate &&
|
|
60
|
-
complianceReporter &&
|
|
61
|
-
auditLogger &&
|
|
62
|
-
policyEngine &&
|
|
63
|
-
sbomGenerator
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Get list of available enterprise features
|
|
69
|
-
*/
|
|
70
|
-
function getAvailableFeatures() {
|
|
71
|
-
const features = [];
|
|
72
|
-
|
|
73
|
-
if (proofCertificate) {
|
|
74
|
-
features.push({
|
|
75
|
-
name: "Proof Certificates",
|
|
76
|
-
module: "proof-certificate",
|
|
77
|
-
description: "Cryptographic proof certificates with risk radar and pre-flight checklist",
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (complianceReporter) {
|
|
82
|
-
features.push({
|
|
83
|
-
name: "Compliance Reporting",
|
|
84
|
-
module: "compliance-reporter",
|
|
85
|
-
description: "SOC 2, HIPAA, PCI-DSS compliance reports",
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (auditLogger) {
|
|
90
|
-
features.push({
|
|
91
|
-
name: "Audit Logging",
|
|
92
|
-
module: "audit-logger",
|
|
93
|
-
description: "Tamper-evident audit logs with SIEM integration",
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (policyEngine) {
|
|
98
|
-
features.push({
|
|
99
|
-
name: "Policy Enforcement",
|
|
100
|
-
module: "policy-engine",
|
|
101
|
-
description: "Custom security policies with override workflow",
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (sbomGenerator) {
|
|
106
|
-
features.push({
|
|
107
|
-
name: "SBOM Generation",
|
|
108
|
-
module: "sbom-generator",
|
|
109
|
-
description: "CycloneDX and SPDX SBOMs with vulnerability correlation",
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return features;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Run full enterprise scan
|
|
118
|
-
*/
|
|
119
|
-
async function runEnterpriseScan(options = {}) {
|
|
120
|
-
const {
|
|
121
|
-
projectPath = process.cwd(),
|
|
122
|
-
findings = [],
|
|
123
|
-
proofGraph = null,
|
|
124
|
-
tier = "pro",
|
|
125
|
-
version = "1.0.0",
|
|
126
|
-
} = options;
|
|
127
|
-
|
|
128
|
-
const results = {
|
|
129
|
-
certificate: null,
|
|
130
|
-
compliance: {},
|
|
131
|
-
audit: null,
|
|
132
|
-
policy: null,
|
|
133
|
-
sbom: null,
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
// Generate Proof Certificate
|
|
137
|
-
if (proofCertificate) {
|
|
138
|
-
const path = require("path");
|
|
139
|
-
results.certificate = proofCertificate.generateProofCertificate({
|
|
140
|
-
projectPath,
|
|
141
|
-
projectName: path.basename(projectPath),
|
|
142
|
-
verdict: findings.some(f => f.severity === "critical") ? "BLOCK" :
|
|
143
|
-
findings.length > 5 ? "WARN" : "SHIP",
|
|
144
|
-
score: Math.max(0, 100 - findings.length * 5),
|
|
145
|
-
findings,
|
|
146
|
-
proofGraph,
|
|
147
|
-
duration: 0,
|
|
148
|
-
tier,
|
|
149
|
-
version,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// Generate Compliance Reports
|
|
154
|
-
if (complianceReporter) {
|
|
155
|
-
results.compliance = {
|
|
156
|
-
soc2: complianceReporter.generateSOC2Report(findings, { projectName: path.basename(projectPath) }),
|
|
157
|
-
hipaa: complianceReporter.generateHIPAAReport(findings, { projectName: path.basename(projectPath) }),
|
|
158
|
-
pciDss: complianceReporter.generatePCIDSSReport(findings, { projectName: path.basename(projectPath) }),
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Log audit event
|
|
163
|
-
if (auditLogger) {
|
|
164
|
-
const logger = auditLogger.getAuditLogger();
|
|
165
|
-
results.audit = logger.log("SCAN_COMPLETED", {
|
|
166
|
-
projectPath,
|
|
167
|
-
findingsCount: findings.length,
|
|
168
|
-
critical: findings.filter(f => f.severity === "critical").length,
|
|
169
|
-
high: findings.filter(f => f.severity === "high").length,
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Evaluate policies
|
|
174
|
-
if (policyEngine) {
|
|
175
|
-
const engine = new policyEngine.PolicyEngine();
|
|
176
|
-
const policyResults = engine.evaluate({
|
|
177
|
-
findings,
|
|
178
|
-
summary: {
|
|
179
|
-
critical: findings.filter(f => f.severity === "critical").length,
|
|
180
|
-
high: findings.filter(f => f.severity === "high").length,
|
|
181
|
-
medium: findings.filter(f => f.severity === "warning" || f.severity === "medium").length,
|
|
182
|
-
low: findings.filter(f => f.severity === "suggestion" || f.severity === "low").length,
|
|
183
|
-
},
|
|
184
|
-
score: Math.max(0, 100 - findings.length * 5),
|
|
185
|
-
});
|
|
186
|
-
results.policy = engine.generateSummary(policyResults);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Generate SBOM
|
|
190
|
-
if (sbomGenerator) {
|
|
191
|
-
try {
|
|
192
|
-
const cycloneDX = sbomGenerator.generateCycloneDX(projectPath, { version });
|
|
193
|
-
results.sbom = {
|
|
194
|
-
cycloneDX,
|
|
195
|
-
summary: sbomGenerator.generateSBOMSummary(cycloneDX),
|
|
196
|
-
};
|
|
197
|
-
} catch (e) {
|
|
198
|
-
// SBOM generation may fail if no package.json
|
|
199
|
-
results.sbom = null;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
return results;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Render enterprise dashboard for terminal
|
|
208
|
-
*/
|
|
209
|
-
function renderEnterpriseDashboard(results) {
|
|
210
|
-
const lines = [];
|
|
211
|
-
|
|
212
|
-
// Terminal UI
|
|
213
|
-
let terminalUI;
|
|
214
|
-
try {
|
|
215
|
-
terminalUI = require("./terminal-ui");
|
|
216
|
-
} catch {
|
|
217
|
-
terminalUI = {
|
|
218
|
-
c: { reset: "", bold: "", dim: "" },
|
|
219
|
-
rgb: () => "",
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
const { c, rgb } = terminalUI;
|
|
224
|
-
const accent = rgb(0, 200, 255);
|
|
225
|
-
const success = rgb(0, 255, 150);
|
|
226
|
-
const warn = rgb(255, 200, 0);
|
|
227
|
-
const error = rgb(255, 80, 80);
|
|
228
|
-
|
|
229
|
-
lines.push("");
|
|
230
|
-
lines.push(` ${accent}╔${"═".repeat(62)}╗${c.reset}`);
|
|
231
|
-
lines.push(` ${accent}║${c.reset} ${c.bold}🏢 ENTERPRISE SECURITY DASHBOARD${c.reset} ${accent}║${c.reset}`);
|
|
232
|
-
lines.push(` ${accent}╠${"═".repeat(62)}╣${c.reset}`);
|
|
233
|
-
|
|
234
|
-
// Certificate
|
|
235
|
-
if (results.certificate) {
|
|
236
|
-
const cert = results.certificate.certificate;
|
|
237
|
-
const verdictColor = cert.verdict.status === "SHIP" ? success :
|
|
238
|
-
cert.verdict.status === "WARN" ? warn : error;
|
|
239
|
-
lines.push(` ${accent}║${c.reset} ${accent}║${c.reset}`);
|
|
240
|
-
lines.push(` ${accent}║${c.reset} 📜 ${c.bold}Proof Certificate${c.reset} ${accent}║${c.reset}`);
|
|
241
|
-
lines.push(` ${accent}║${c.reset} Verdict: ${verdictColor}${c.bold}${cert.verdict.status}${c.reset} Score: ${cert.verdict.score}/100 ${accent}║${c.reset}`);
|
|
242
|
-
lines.push(` ${accent}║${c.reset} ID: ${c.dim}${cert.shortCode}${c.reset} ${accent}║${c.reset}`);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// Compliance
|
|
246
|
-
if (results.compliance?.soc2) {
|
|
247
|
-
const soc2 = results.compliance.soc2;
|
|
248
|
-
const scoreColor = soc2.summary.complianceScore >= 80 ? success :
|
|
249
|
-
soc2.summary.complianceScore >= 60 ? warn : error;
|
|
250
|
-
lines.push(` ${accent}║${c.reset} ${accent}║${c.reset}`);
|
|
251
|
-
lines.push(` ${accent}║${c.reset} 📋 ${c.bold}Compliance Status${c.reset} ${accent}║${c.reset}`);
|
|
252
|
-
lines.push(` ${accent}║${c.reset} SOC 2: ${scoreColor}${soc2.summary.complianceScore}%${c.reset} HIPAA: ${scoreColor}${results.compliance.hipaa?.summary.complianceScore || 0}%${c.reset} PCI: ${scoreColor}${results.compliance.pciDss?.summary.complianceScore || 0}%${c.reset} ${accent}║${c.reset}`);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// Policy
|
|
256
|
-
if (results.policy) {
|
|
257
|
-
const actionColor = results.policy.finalAction === "allow" ? success :
|
|
258
|
-
results.policy.finalAction === "warn" ? warn : error;
|
|
259
|
-
lines.push(` ${accent}║${c.reset} ${accent}║${c.reset}`);
|
|
260
|
-
lines.push(` ${accent}║${c.reset} 🛡️ ${c.bold}Policy Enforcement${c.reset} ${accent}║${c.reset}`);
|
|
261
|
-
lines.push(` ${accent}║${c.reset} Action: ${actionColor}${results.policy.finalAction.toUpperCase()}${c.reset} Violations: ${results.policy.blocked} ${accent}║${c.reset}`);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// SBOM
|
|
265
|
-
if (results.sbom) {
|
|
266
|
-
const vulnColor = results.sbom.summary.vulnerabilities.total > 0 ? error : success;
|
|
267
|
-
lines.push(` ${accent}║${c.reset} ${accent}║${c.reset}`);
|
|
268
|
-
lines.push(` ${accent}║${c.reset} 📦 ${c.bold}Software Bill of Materials${c.reset} ${accent}║${c.reset}`);
|
|
269
|
-
lines.push(` ${accent}║${c.reset} Components: ${results.sbom.summary.totalComponents} Vulnerabilities: ${vulnColor}${results.sbom.summary.vulnerabilities.total}${c.reset} ${accent}║${c.reset}`);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
lines.push(` ${accent}║${c.reset} ${accent}║${c.reset}`);
|
|
273
|
-
lines.push(` ${accent}╚${"═".repeat(62)}╝${c.reset}`);
|
|
274
|
-
lines.push("");
|
|
275
|
-
|
|
276
|
-
return lines.join("\n");
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
module.exports = {
|
|
280
|
-
// Proof Certificates
|
|
281
|
-
proofCertificate,
|
|
282
|
-
|
|
283
|
-
// Compliance
|
|
284
|
-
complianceReporter,
|
|
285
|
-
|
|
286
|
-
// Audit
|
|
287
|
-
auditLogger,
|
|
288
|
-
|
|
289
|
-
// Policy
|
|
290
|
-
policyEngine,
|
|
291
|
-
|
|
292
|
-
// SBOM
|
|
293
|
-
sbomGenerator,
|
|
294
|
-
|
|
295
|
-
// Utilities
|
|
296
|
-
isEnterpriseReady,
|
|
297
|
-
getAvailableFeatures,
|
|
298
|
-
runEnterpriseScan,
|
|
299
|
-
renderEnterpriseDashboard,
|
|
300
|
-
};
|
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Command Validator
|
|
3
|
-
*
|
|
4
|
-
* Validates shell commands against:
|
|
5
|
-
* - Dangerous commands (rm -rf, curl | bash, etc.)
|
|
6
|
-
* - System-modifying commands
|
|
7
|
-
* - Database destructive operations
|
|
8
|
-
* - Commands requiring confirmation
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
"use strict";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* CommandValidator class for validating shell commands
|
|
15
|
-
*/
|
|
16
|
-
class CommandValidator {
|
|
17
|
-
/**
|
|
18
|
-
* Create a command validator
|
|
19
|
-
* @param {object} config - Firewall configuration
|
|
20
|
-
*/
|
|
21
|
-
constructor(config) {
|
|
22
|
-
this.config = config;
|
|
23
|
-
|
|
24
|
-
// Extract command configuration
|
|
25
|
-
const commands = config.commands || {};
|
|
26
|
-
this.blockedCommands = commands.blocked || [];
|
|
27
|
-
this.requireConfirmation = commands.requireConfirmation || [];
|
|
28
|
-
|
|
29
|
-
// Build blocked patterns
|
|
30
|
-
this.blockedPatterns = this.buildBlockedPatterns();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Build regex patterns for blocked commands
|
|
35
|
-
* @returns {Array} Array of {pattern, name, severity} objects
|
|
36
|
-
*/
|
|
37
|
-
buildBlockedPatterns() {
|
|
38
|
-
const patterns = [];
|
|
39
|
-
|
|
40
|
-
// Destructive file operations
|
|
41
|
-
patterns.push({
|
|
42
|
-
pattern: /rm\s+(-[rf]+\s+)*[\/~\.]\s*$/i,
|
|
43
|
-
name: "destructive-rm",
|
|
44
|
-
severity: "critical",
|
|
45
|
-
message: "Destructive rm command detected",
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
patterns.push({
|
|
49
|
-
pattern: /rm\s+-rf\s+\/(?!\w)/i,
|
|
50
|
-
name: "rm-root",
|
|
51
|
-
severity: "critical",
|
|
52
|
-
message: "Attempting to remove root directory",
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
patterns.push({
|
|
56
|
-
pattern: /rmdir\s+\/s\s+\/q/i,
|
|
57
|
-
name: "rmdir-force",
|
|
58
|
-
severity: "critical",
|
|
59
|
-
message: "Windows recursive delete detected",
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
// Remote code execution
|
|
63
|
-
patterns.push({
|
|
64
|
-
pattern: /curl\s+.*\|\s*(ba)?sh/i,
|
|
65
|
-
name: "curl-pipe-shell",
|
|
66
|
-
severity: "critical",
|
|
67
|
-
message: "Piping curl output to shell is dangerous",
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
patterns.push({
|
|
71
|
-
pattern: /wget\s+.*\|\s*(ba)?sh/i,
|
|
72
|
-
name: "wget-pipe-shell",
|
|
73
|
-
severity: "critical",
|
|
74
|
-
message: "Piping wget output to shell is dangerous",
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
patterns.push({
|
|
78
|
-
pattern: /curl\s+-s\s+.*\|\s*(ba)?sh/i,
|
|
79
|
-
name: "curl-silent-shell",
|
|
80
|
-
severity: "critical",
|
|
81
|
-
message: "Silent curl to shell is especially dangerous",
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
// Dangerous permissions
|
|
85
|
-
patterns.push({
|
|
86
|
-
pattern: /chmod\s+777/i,
|
|
87
|
-
name: "chmod-777",
|
|
88
|
-
severity: "high",
|
|
89
|
-
message: "chmod 777 grants excessive permissions",
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
patterns.push({
|
|
93
|
-
pattern: /chmod\s+\+s/i,
|
|
94
|
-
name: "setuid-bit",
|
|
95
|
-
severity: "critical",
|
|
96
|
-
message: "Setting setuid bit is dangerous",
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
// Sudo operations
|
|
100
|
-
patterns.push({
|
|
101
|
-
pattern: /sudo\s+rm\s+-rf/i,
|
|
102
|
-
name: "sudo-rm-rf",
|
|
103
|
-
severity: "critical",
|
|
104
|
-
message: "sudo rm -rf is extremely dangerous",
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
// Database operations
|
|
108
|
-
patterns.push({
|
|
109
|
-
pattern: /DROP\s+(DATABASE|TABLE|SCHEMA)/i,
|
|
110
|
-
name: "drop-database",
|
|
111
|
-
severity: "critical",
|
|
112
|
-
message: "DROP operation detected - data loss risk",
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
patterns.push({
|
|
116
|
-
pattern: /TRUNCATE\s+TABLE/i,
|
|
117
|
-
name: "truncate-table",
|
|
118
|
-
severity: "high",
|
|
119
|
-
message: "TRUNCATE operation detected - data loss risk",
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
patterns.push({
|
|
123
|
-
pattern: /DELETE\s+FROM\s+\w+\s*(?:WHERE\s+1\s*=\s*1)?$/i,
|
|
124
|
-
name: "delete-all",
|
|
125
|
-
severity: "high",
|
|
126
|
-
message: "DELETE without proper WHERE clause",
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
// Git force operations
|
|
130
|
-
patterns.push({
|
|
131
|
-
pattern: /git\s+push\s+(-f|--force)/i,
|
|
132
|
-
name: "git-force-push",
|
|
133
|
-
severity: "high",
|
|
134
|
-
message: "Force push can overwrite remote history",
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
patterns.push({
|
|
138
|
-
pattern: /git\s+push\s+.*\s+(main|master)\s*$/i,
|
|
139
|
-
name: "push-to-main",
|
|
140
|
-
severity: "warn",
|
|
141
|
-
message: "Direct push to main/master branch",
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
patterns.push({
|
|
145
|
-
pattern: /git\s+reset\s+--hard/i,
|
|
146
|
-
name: "git-reset-hard",
|
|
147
|
-
severity: "high",
|
|
148
|
-
message: "Hard reset can lose uncommitted changes",
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
// NPM/package operations
|
|
152
|
-
patterns.push({
|
|
153
|
-
pattern: /npm\s+publish\s*$/i,
|
|
154
|
-
name: "npm-publish",
|
|
155
|
-
severity: "warn",
|
|
156
|
-
message: "Publishing package - ensure this is intentional",
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
// Eval and dynamic code
|
|
160
|
-
patterns.push({
|
|
161
|
-
pattern: /node\s+-e\s+['"]/i,
|
|
162
|
-
name: "node-eval",
|
|
163
|
-
severity: "warn",
|
|
164
|
-
message: "Inline Node.js code execution",
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
patterns.push({
|
|
168
|
-
pattern: /python\s+-c\s+['"]/i,
|
|
169
|
-
name: "python-eval",
|
|
170
|
-
severity: "warn",
|
|
171
|
-
message: "Inline Python code execution",
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
return patterns;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Validate a shell command
|
|
179
|
-
* @param {object} params - Validation parameters
|
|
180
|
-
* @param {string} params.command - Command to validate
|
|
181
|
-
* @returns {object} Validation result
|
|
182
|
-
*/
|
|
183
|
-
validate({ command }) {
|
|
184
|
-
// Skip if no command provided
|
|
185
|
-
if (!command) {
|
|
186
|
-
return { valid: true };
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Normalize command
|
|
190
|
-
const normalizedCommand = command.trim();
|
|
191
|
-
|
|
192
|
-
// Check against blocked patterns
|
|
193
|
-
for (const { pattern, name, severity, message } of this.blockedPatterns) {
|
|
194
|
-
if (pattern.test(normalizedCommand)) {
|
|
195
|
-
return {
|
|
196
|
-
valid: false,
|
|
197
|
-
rule: name,
|
|
198
|
-
severity,
|
|
199
|
-
message,
|
|
200
|
-
details: {
|
|
201
|
-
command: normalizedCommand,
|
|
202
|
-
matchedPattern: pattern.toString(),
|
|
203
|
-
suggestion: this.getSuggestion(name),
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// Check against user-configured blocked commands
|
|
210
|
-
for (const blocked of this.blockedCommands) {
|
|
211
|
-
if (normalizedCommand.toLowerCase().includes(blocked.toLowerCase())) {
|
|
212
|
-
return {
|
|
213
|
-
valid: false,
|
|
214
|
-
rule: "blocked-command",
|
|
215
|
-
severity: "high",
|
|
216
|
-
message: `Command matches blocked pattern: "${blocked}"`,
|
|
217
|
-
details: {
|
|
218
|
-
command: normalizedCommand,
|
|
219
|
-
blockedPattern: blocked,
|
|
220
|
-
},
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Check for commands requiring confirmation
|
|
226
|
-
const needsConfirmation = this.checkRequiresConfirmation(normalizedCommand);
|
|
227
|
-
if (needsConfirmation) {
|
|
228
|
-
return {
|
|
229
|
-
valid: true,
|
|
230
|
-
requiresConfirmation: true,
|
|
231
|
-
rule: "requires-confirmation",
|
|
232
|
-
severity: "warn",
|
|
233
|
-
message: needsConfirmation.message,
|
|
234
|
-
details: {
|
|
235
|
-
command: normalizedCommand,
|
|
236
|
-
pattern: needsConfirmation.pattern,
|
|
237
|
-
},
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
return { valid: true };
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Check if command requires confirmation
|
|
246
|
-
* @param {string} command - Command to check
|
|
247
|
-
* @returns {object|null} Confirmation requirement or null
|
|
248
|
-
*/
|
|
249
|
-
checkRequiresConfirmation(command) {
|
|
250
|
-
const confirmPatterns = [
|
|
251
|
-
{ pattern: /npm\s+install/i, message: "Installing npm packages" },
|
|
252
|
-
{ pattern: /yarn\s+add/i, message: "Installing yarn packages" },
|
|
253
|
-
{ pattern: /pnpm\s+add/i, message: "Installing pnpm packages" },
|
|
254
|
-
{ pattern: /git\s+checkout/i, message: "Switching git branches" },
|
|
255
|
-
{ pattern: /git\s+merge/i, message: "Merging git branches" },
|
|
256
|
-
{ pattern: /git\s+rebase/i, message: "Rebasing git history" },
|
|
257
|
-
{ pattern: /docker\s+run/i, message: "Running Docker container" },
|
|
258
|
-
{ pattern: /kubectl\s+apply/i, message: "Applying Kubernetes config" },
|
|
259
|
-
];
|
|
260
|
-
|
|
261
|
-
for (const { pattern, message } of confirmPatterns) {
|
|
262
|
-
if (pattern.test(command)) {
|
|
263
|
-
return { pattern: pattern.toString(), message };
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Check user-configured patterns
|
|
268
|
-
for (const userPattern of this.requireConfirmation) {
|
|
269
|
-
if (command.toLowerCase().includes(userPattern.toLowerCase())) {
|
|
270
|
-
return {
|
|
271
|
-
pattern: userPattern,
|
|
272
|
-
message: `Command matches confirmation pattern: "${userPattern}"`
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* Get suggestion for how to fix a blocked command
|
|
282
|
-
* @param {string} ruleName - Name of the violated rule
|
|
283
|
-
* @returns {string} Suggestion text
|
|
284
|
-
*/
|
|
285
|
-
getSuggestion(ruleName) {
|
|
286
|
-
const suggestions = {
|
|
287
|
-
"destructive-rm": "Use specific file paths instead of wildcards",
|
|
288
|
-
"rm-root": "Never remove root directory",
|
|
289
|
-
"curl-pipe-shell": "Download the script first, review it, then execute",
|
|
290
|
-
"wget-pipe-shell": "Download the script first, review it, then execute",
|
|
291
|
-
"chmod-777": "Use more restrictive permissions (e.g., 755 or 644)",
|
|
292
|
-
"sudo-rm-rf": "Be very specific about what you're removing",
|
|
293
|
-
"drop-database": "Use migrations for schema changes",
|
|
294
|
-
"truncate-table": "Use migrations for data changes",
|
|
295
|
-
"git-force-push": "Use --force-with-lease for safer force push",
|
|
296
|
-
"push-to-main": "Create a feature branch and open a PR",
|
|
297
|
-
"git-reset-hard": "Make sure you've committed or stashed changes first",
|
|
298
|
-
"npm-publish": "Review package contents with 'npm pack' first",
|
|
299
|
-
};
|
|
300
|
-
|
|
301
|
-
return suggestions[ruleName] || "Review the command and consider safer alternatives";
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* Analyze command for potential risks
|
|
306
|
-
* @param {string} command - Command to analyze
|
|
307
|
-
* @returns {object} Risk analysis
|
|
308
|
-
*/
|
|
309
|
-
analyzeRisk(command) {
|
|
310
|
-
const result = this.validate({ command });
|
|
311
|
-
|
|
312
|
-
if (!result.valid) {
|
|
313
|
-
return {
|
|
314
|
-
riskLevel: result.severity === "critical" ? "high" : "medium",
|
|
315
|
-
blocked: true,
|
|
316
|
-
reason: result.message,
|
|
317
|
-
details: result.details,
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
if (result.requiresConfirmation) {
|
|
322
|
-
return {
|
|
323
|
-
riskLevel: "low",
|
|
324
|
-
blocked: false,
|
|
325
|
-
requiresConfirmation: true,
|
|
326
|
-
reason: result.message,
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
return {
|
|
331
|
-
riskLevel: "none",
|
|
332
|
-
blocked: false,
|
|
333
|
-
requiresConfirmation: false,
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* Get all blocked command patterns
|
|
339
|
-
* @returns {string[]} Blocked patterns
|
|
340
|
-
*/
|
|
341
|
-
getBlockedPatterns() {
|
|
342
|
-
return [
|
|
343
|
-
...this.blockedCommands,
|
|
344
|
-
...this.blockedPatterns.map(p => p.pattern.toString()),
|
|
345
|
-
];
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
module.exports = {
|
|
350
|
-
CommandValidator,
|
|
351
|
-
};
|