@vibecheckai/cli 3.2.2 → 3.2.4
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/.generated +25 -25
- package/bin/dev/run-v2-torture.js +30 -30
- package/bin/runners/ENHANCEMENT_GUIDE.md +121 -121
- package/bin/runners/lib/__tests__/entitlements-v2.test.js +295 -295
- package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +474 -0
- package/bin/runners/lib/agent-firewall/claims/extractor.js +117 -28
- package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +23 -14
- package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +72 -1
- package/bin/runners/lib/agent-firewall/interceptor/base.js +2 -2
- package/bin/runners/lib/agent-firewall/policy/default-policy.json +6 -0
- package/bin/runners/lib/agent-firewall/policy/engine.js +34 -3
- package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +29 -4
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +12 -0
- package/bin/runners/lib/agent-firewall/truthpack/loader.js +21 -0
- package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +118 -0
- package/bin/runners/lib/analyzers.js +606 -325
- package/bin/runners/lib/auth-truth.js +193 -193
- package/bin/runners/lib/backup.js +62 -62
- package/bin/runners/lib/billing.js +107 -107
- package/bin/runners/lib/claims.js +118 -118
- package/bin/runners/lib/cli-ui.js +540 -540
- package/bin/runners/lib/contracts/auth-contract.js +202 -202
- package/bin/runners/lib/contracts/env-contract.js +181 -181
- package/bin/runners/lib/contracts/external-contract.js +206 -206
- package/bin/runners/lib/contracts/guard.js +168 -168
- package/bin/runners/lib/contracts/index.js +89 -89
- package/bin/runners/lib/contracts/plan-validator.js +311 -311
- package/bin/runners/lib/contracts/route-contract.js +199 -199
- package/bin/runners/lib/contracts.js +804 -804
- package/bin/runners/lib/detect.js +89 -89
- package/bin/runners/lib/doctor/autofix.js +254 -254
- package/bin/runners/lib/doctor/index.js +37 -37
- package/bin/runners/lib/doctor/modules/dependencies.js +325 -325
- package/bin/runners/lib/doctor/modules/index.js +46 -46
- package/bin/runners/lib/doctor/modules/network.js +250 -250
- package/bin/runners/lib/doctor/modules/project.js +312 -312
- package/bin/runners/lib/doctor/modules/runtime.js +224 -224
- package/bin/runners/lib/doctor/modules/security.js +348 -348
- package/bin/runners/lib/doctor/modules/system.js +213 -213
- package/bin/runners/lib/doctor/modules/vibecheck.js +394 -394
- package/bin/runners/lib/doctor/reporter.js +262 -262
- package/bin/runners/lib/doctor/service.js +262 -262
- package/bin/runners/lib/doctor/types.js +113 -113
- package/bin/runners/lib/doctor/ui.js +263 -263
- package/bin/runners/lib/doctor-v2.js +608 -608
- package/bin/runners/lib/drift.js +425 -425
- package/bin/runners/lib/enforcement.js +72 -72
- package/bin/runners/lib/engines/accessibility-engine.js +190 -0
- package/bin/runners/lib/engines/api-consistency-engine.js +162 -0
- package/bin/runners/lib/engines/ast-cache.js +99 -0
- package/bin/runners/lib/engines/code-quality-engine.js +255 -0
- package/bin/runners/lib/engines/console-logs-engine.js +115 -0
- package/bin/runners/lib/engines/cross-file-analysis-engine.js +268 -0
- package/bin/runners/lib/engines/dead-code-engine.js +198 -0
- package/bin/runners/lib/engines/deprecated-api-engine.js +226 -0
- package/bin/runners/lib/engines/empty-catch-engine.js +150 -0
- package/bin/runners/lib/engines/file-filter.js +131 -0
- package/bin/runners/lib/engines/hardcoded-secrets-engine.js +251 -0
- package/bin/runners/lib/engines/mock-data-engine.js +272 -0
- package/bin/runners/lib/engines/parallel-processor.js +71 -0
- package/bin/runners/lib/engines/performance-issues-engine.js +265 -0
- package/bin/runners/lib/engines/security-vulnerabilities-engine.js +243 -0
- package/bin/runners/lib/engines/todo-fixme-engine.js +115 -0
- package/bin/runners/lib/engines/type-aware-engine.js +152 -0
- package/bin/runners/lib/engines/unsafe-regex-engine.js +225 -0
- package/bin/runners/lib/engines/vibecheck-engines/README.md +53 -0
- package/bin/runners/lib/engines/vibecheck-engines/index.js +15 -0
- 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 +139 -0
- 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/engines/vibecheck-engines/package.json +13 -0
- package/bin/runners/lib/enterprise-detect.js +603 -603
- package/bin/runners/lib/enterprise-init.js +942 -942
- package/bin/runners/lib/env-resolver.js +417 -417
- package/bin/runners/lib/env-template.js +66 -66
- package/bin/runners/lib/env.js +189 -189
- package/bin/runners/lib/extractors/client-calls.js +990 -990
- package/bin/runners/lib/extractors/fastify-route-dump.js +573 -573
- package/bin/runners/lib/extractors/fastify-routes.js +426 -426
- package/bin/runners/lib/extractors/index.js +363 -363
- package/bin/runners/lib/extractors/next-routes.js +524 -524
- package/bin/runners/lib/extractors/proof-graph.js +431 -431
- package/bin/runners/lib/extractors/route-matcher.js +451 -451
- package/bin/runners/lib/extractors/truthpack-v2.js +377 -377
- package/bin/runners/lib/extractors/ui-bindings.js +547 -547
- package/bin/runners/lib/findings-schema.js +281 -281
- package/bin/runners/lib/firewall-prompt.js +50 -50
- package/bin/runners/lib/global-flags.js +213 -213
- package/bin/runners/lib/graph/graph-builder.js +265 -265
- package/bin/runners/lib/graph/html-renderer.js +413 -413
- package/bin/runners/lib/graph/index.js +32 -32
- package/bin/runners/lib/graph/runtime-collector.js +215 -215
- package/bin/runners/lib/graph/static-extractor.js +518 -518
- package/bin/runners/lib/html-report.js +650 -650
- package/bin/runners/lib/interactive-menu.js +1496 -1496
- package/bin/runners/lib/llm.js +75 -75
- package/bin/runners/lib/meter.js +61 -61
- package/bin/runners/lib/missions/evidence.js +126 -126
- package/bin/runners/lib/patch.js +40 -40
- package/bin/runners/lib/permissions/auth-model.js +213 -213
- package/bin/runners/lib/permissions/idor-prover.js +205 -205
- package/bin/runners/lib/permissions/index.js +45 -45
- package/bin/runners/lib/permissions/matrix-builder.js +198 -198
- package/bin/runners/lib/pkgjson.js +28 -28
- package/bin/runners/lib/policy.js +295 -295
- package/bin/runners/lib/preflight.js +142 -142
- package/bin/runners/lib/reality/correlation-detectors.js +359 -359
- package/bin/runners/lib/reality/index.js +318 -318
- package/bin/runners/lib/reality/request-hashing.js +416 -416
- package/bin/runners/lib/reality/request-mapper.js +453 -453
- package/bin/runners/lib/reality/safety-rails.js +463 -463
- package/bin/runners/lib/reality/semantic-snapshot.js +408 -408
- package/bin/runners/lib/reality/toast-detector.js +393 -393
- package/bin/runners/lib/reality-findings.js +84 -84
- package/bin/runners/lib/receipts.js +179 -179
- package/bin/runners/lib/redact.js +29 -29
- package/bin/runners/lib/replay/capsule-manager.js +154 -154
- package/bin/runners/lib/replay/index.js +263 -263
- package/bin/runners/lib/replay/player.js +348 -348
- package/bin/runners/lib/replay/recorder.js +331 -331
- package/bin/runners/lib/report-output.js +187 -187
- package/bin/runners/lib/report.js +135 -135
- package/bin/runners/lib/route-detection.js +1140 -1140
- package/bin/runners/lib/sandbox/index.js +59 -59
- package/bin/runners/lib/sandbox/proof-chain.js +399 -399
- package/bin/runners/lib/sandbox/sandbox-runner.js +205 -205
- package/bin/runners/lib/sandbox/worktree.js +174 -174
- package/bin/runners/lib/scan-output.js +525 -190
- package/bin/runners/lib/schema-validator.js +350 -350
- package/bin/runners/lib/schemas/contracts.schema.json +160 -160
- package/bin/runners/lib/schemas/finding.schema.json +100 -100
- package/bin/runners/lib/schemas/mission-pack.schema.json +206 -206
- package/bin/runners/lib/schemas/proof-graph.schema.json +176 -176
- package/bin/runners/lib/schemas/reality-report.schema.json +162 -162
- package/bin/runners/lib/schemas/share-pack.schema.json +180 -180
- package/bin/runners/lib/schemas/ship-report.schema.json +117 -117
- package/bin/runners/lib/schemas/truthpack-v2.schema.json +303 -303
- package/bin/runners/lib/schemas/validator.js +438 -438
- package/bin/runners/lib/score-history.js +282 -282
- package/bin/runners/lib/share-pack.js +239 -239
- package/bin/runners/lib/snippets.js +67 -67
- package/bin/runners/lib/status-output.js +253 -253
- package/bin/runners/lib/terminal-ui.js +351 -271
- package/bin/runners/lib/upsell.js +510 -510
- package/bin/runners/lib/usage.js +153 -153
- package/bin/runners/lib/validate-patch.js +156 -156
- package/bin/runners/lib/verdict-engine.js +628 -628
- package/bin/runners/reality/engine.js +917 -917
- package/bin/runners/reality/flows.js +122 -122
- package/bin/runners/reality/report.js +378 -378
- package/bin/runners/reality/session.js +193 -193
- package/bin/runners/runGuard.js +168 -168
- package/bin/runners/runProof.zip +0 -0
- package/bin/runners/runProve.js +8 -0
- package/bin/runners/runReality.js +14 -0
- package/bin/runners/runScan.js +17 -1
- package/bin/runners/runTruth.js +15 -3
- package/mcp-server/tier-auth.js +4 -4
- package/mcp-server/tools/index.js +72 -72
- package/package.json +1 -1
|
@@ -1,213 +1,213 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Global Flags Parser & Utilities
|
|
3
|
-
* Shared utilities for all commands to handle global flags consistently
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
7
|
-
// LAZY LOADING - Defer requires until needed
|
|
8
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
9
|
-
const lazyModules = {};
|
|
10
|
-
|
|
11
|
-
function lazy(name, loader) {
|
|
12
|
-
return () => {
|
|
13
|
-
if (!lazyModules[name]) {
|
|
14
|
-
lazyModules[name] = loader();
|
|
15
|
-
}
|
|
16
|
-
return lazyModules[name];
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const getOs = lazy("os", () => require("os"));
|
|
21
|
-
const getPath = lazy("path", () => require("path"));
|
|
22
|
-
const getFs = lazy("fs", () => require("fs"));
|
|
23
|
-
|
|
24
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
25
|
-
// GLOBAL FLAGS PARSER
|
|
26
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Parse global flags from command arguments
|
|
30
|
-
* Extracts global flags and returns clean args for command-specific parsing
|
|
31
|
-
*/
|
|
32
|
-
function parseGlobalFlags(rawArgs) {
|
|
33
|
-
const flags = {
|
|
34
|
-
help: false,
|
|
35
|
-
version: false,
|
|
36
|
-
json: false,
|
|
37
|
-
ci: false,
|
|
38
|
-
quiet: false,
|
|
39
|
-
verbose: false,
|
|
40
|
-
debug: false,
|
|
41
|
-
strict: false,
|
|
42
|
-
noBanner: false,
|
|
43
|
-
path: process.cwd(),
|
|
44
|
-
output: null,
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const cleanArgs = [];
|
|
48
|
-
let i = 0;
|
|
49
|
-
|
|
50
|
-
while (i < rawArgs.length) {
|
|
51
|
-
const arg = rawArgs[i];
|
|
52
|
-
|
|
53
|
-
switch (arg) {
|
|
54
|
-
case "--help":
|
|
55
|
-
case "-h":
|
|
56
|
-
flags.help = true;
|
|
57
|
-
break;
|
|
58
|
-
case "--version":
|
|
59
|
-
case "-v":
|
|
60
|
-
flags.version = true;
|
|
61
|
-
break;
|
|
62
|
-
case "--json":
|
|
63
|
-
flags.json = true;
|
|
64
|
-
break;
|
|
65
|
-
case "--ci":
|
|
66
|
-
flags.ci = true;
|
|
67
|
-
flags.noBanner = true; // CI mode automatically suppresses banner
|
|
68
|
-
break;
|
|
69
|
-
case "--quiet":
|
|
70
|
-
case "-q":
|
|
71
|
-
flags.quiet = true;
|
|
72
|
-
flags.noBanner = true; // Quiet mode also suppresses banner
|
|
73
|
-
break;
|
|
74
|
-
case "--verbose":
|
|
75
|
-
flags.verbose = true;
|
|
76
|
-
break;
|
|
77
|
-
case "--debug":
|
|
78
|
-
flags.debug = true;
|
|
79
|
-
break;
|
|
80
|
-
case "--strict":
|
|
81
|
-
flags.strict = true;
|
|
82
|
-
break;
|
|
83
|
-
case "--no-banner":
|
|
84
|
-
flags.noBanner = true;
|
|
85
|
-
break;
|
|
86
|
-
case "--path":
|
|
87
|
-
case "-p":
|
|
88
|
-
flags.path = rawArgs[++i] || process.cwd();
|
|
89
|
-
break;
|
|
90
|
-
case "--output":
|
|
91
|
-
case "-o":
|
|
92
|
-
flags.output = rawArgs[++i] || null;
|
|
93
|
-
break;
|
|
94
|
-
default:
|
|
95
|
-
if (arg.startsWith("--path=")) {
|
|
96
|
-
flags.path = arg.split("=")[1];
|
|
97
|
-
} else if (arg.startsWith("--output=")) {
|
|
98
|
-
flags.output = arg.split("=")[1];
|
|
99
|
-
} else {
|
|
100
|
-
cleanArgs.push(arg);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
i++;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return { flags, cleanArgs };
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
110
|
-
// BANNER CHECKING
|
|
111
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Check if banner should be shown
|
|
115
|
-
* Respects --no-banner flag, VIBECHECK_NO_BANNER env var, and VIBECHECK_QUIET
|
|
116
|
-
*/
|
|
117
|
-
function shouldShowBanner(flags = {}) {
|
|
118
|
-
// Check environment variables first
|
|
119
|
-
if (process.env.VIBECHECK_NO_BANNER === "true") return false;
|
|
120
|
-
if (process.env.VIBECHECK_QUIET === "true") return false;
|
|
121
|
-
|
|
122
|
-
// Check flags
|
|
123
|
-
if (flags.noBanner === true) return false;
|
|
124
|
-
if (flags.ci === true) return false;
|
|
125
|
-
if (flags.quiet === true) return false;
|
|
126
|
-
if (flags.json === true) return false; // JSON output shouldn't have banners
|
|
127
|
-
|
|
128
|
-
return true;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
132
|
-
// CI DETECTION
|
|
133
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Check if running in CI environment
|
|
137
|
-
*/
|
|
138
|
-
function isCI() {
|
|
139
|
-
return !!(
|
|
140
|
-
process.env.CI ||
|
|
141
|
-
process.env.CONTINUOUS_INTEGRATION ||
|
|
142
|
-
process.env.BUILD_NUMBER ||
|
|
143
|
-
process.env.TRAVIS ||
|
|
144
|
-
process.env.CIRCLECI ||
|
|
145
|
-
process.env.JENKINS_URL ||
|
|
146
|
-
process.env.GITLAB_CI ||
|
|
147
|
-
process.env.GITHUB_ACTIONS ||
|
|
148
|
-
process.env.BUILDKITE ||
|
|
149
|
-
process.env.TEAMCITY_VERSION ||
|
|
150
|
-
process.env.TF_BUILD
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
155
|
-
// CONFIG LOADING
|
|
156
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Load config with environment variable support
|
|
160
|
-
*/
|
|
161
|
-
function loadConfig(flags = {}) {
|
|
162
|
-
const path = getPath();
|
|
163
|
-
const fs = getFs();
|
|
164
|
-
|
|
165
|
-
const config = {
|
|
166
|
-
debug: false,
|
|
167
|
-
verbose: false,
|
|
168
|
-
quiet: false,
|
|
169
|
-
color: true,
|
|
170
|
-
analytics: true,
|
|
171
|
-
updateCheck: true,
|
|
172
|
-
timeout: 30000,
|
|
173
|
-
maxRetries: 3,
|
|
174
|
-
noBanner: false,
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
// Load project config if exists
|
|
178
|
-
const projectConfigPath = path.join(process.cwd(), ".vibecheckrc.json");
|
|
179
|
-
if (fs.existsSync(projectConfigPath)) {
|
|
180
|
-
try {
|
|
181
|
-
Object.assign(config, JSON.parse(fs.readFileSync(projectConfigPath, "utf-8")));
|
|
182
|
-
} catch {
|
|
183
|
-
// Ignore invalid config
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Environment overrides
|
|
188
|
-
if (process.env.VIBECHECK_DEBUG === "true") config.debug = true;
|
|
189
|
-
if (process.env.VIBECHECK_VERBOSE === "true") config.verbose = true;
|
|
190
|
-
if (process.env.VIBECHECK_QUIET === "true") config.quiet = true;
|
|
191
|
-
if (process.env.VIBECHECK_NO_BANNER === "true") config.noBanner = true;
|
|
192
|
-
if (process.env.NO_COLOR || process.env.VIBECHECK_NO_COLOR) config.color = false;
|
|
193
|
-
|
|
194
|
-
// Flag overrides (highest priority)
|
|
195
|
-
if (flags.debug) config.debug = true;
|
|
196
|
-
if (flags.verbose) config.verbose = true;
|
|
197
|
-
if (flags.quiet) config.quiet = true;
|
|
198
|
-
if (flags.noBanner) config.noBanner = true;
|
|
199
|
-
if (flags.ci) config.noBanner = true;
|
|
200
|
-
|
|
201
|
-
return config;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
module.exports = {
|
|
205
|
-
parseGlobalFlags,
|
|
206
|
-
shouldShowBanner,
|
|
207
|
-
isCI,
|
|
208
|
-
loadConfig,
|
|
209
|
-
lazy,
|
|
210
|
-
getOs,
|
|
211
|
-
getPath,
|
|
212
|
-
getFs,
|
|
213
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Global Flags Parser & Utilities
|
|
3
|
+
* Shared utilities for all commands to handle global flags consistently
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
7
|
+
// LAZY LOADING - Defer requires until needed
|
|
8
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
9
|
+
const lazyModules = {};
|
|
10
|
+
|
|
11
|
+
function lazy(name, loader) {
|
|
12
|
+
return () => {
|
|
13
|
+
if (!lazyModules[name]) {
|
|
14
|
+
lazyModules[name] = loader();
|
|
15
|
+
}
|
|
16
|
+
return lazyModules[name];
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const getOs = lazy("os", () => require("os"));
|
|
21
|
+
const getPath = lazy("path", () => require("path"));
|
|
22
|
+
const getFs = lazy("fs", () => require("fs"));
|
|
23
|
+
|
|
24
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
25
|
+
// GLOBAL FLAGS PARSER
|
|
26
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Parse global flags from command arguments
|
|
30
|
+
* Extracts global flags and returns clean args for command-specific parsing
|
|
31
|
+
*/
|
|
32
|
+
function parseGlobalFlags(rawArgs) {
|
|
33
|
+
const flags = {
|
|
34
|
+
help: false,
|
|
35
|
+
version: false,
|
|
36
|
+
json: false,
|
|
37
|
+
ci: false,
|
|
38
|
+
quiet: false,
|
|
39
|
+
verbose: false,
|
|
40
|
+
debug: false,
|
|
41
|
+
strict: false,
|
|
42
|
+
noBanner: false,
|
|
43
|
+
path: process.cwd(),
|
|
44
|
+
output: null,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const cleanArgs = [];
|
|
48
|
+
let i = 0;
|
|
49
|
+
|
|
50
|
+
while (i < rawArgs.length) {
|
|
51
|
+
const arg = rawArgs[i];
|
|
52
|
+
|
|
53
|
+
switch (arg) {
|
|
54
|
+
case "--help":
|
|
55
|
+
case "-h":
|
|
56
|
+
flags.help = true;
|
|
57
|
+
break;
|
|
58
|
+
case "--version":
|
|
59
|
+
case "-v":
|
|
60
|
+
flags.version = true;
|
|
61
|
+
break;
|
|
62
|
+
case "--json":
|
|
63
|
+
flags.json = true;
|
|
64
|
+
break;
|
|
65
|
+
case "--ci":
|
|
66
|
+
flags.ci = true;
|
|
67
|
+
flags.noBanner = true; // CI mode automatically suppresses banner
|
|
68
|
+
break;
|
|
69
|
+
case "--quiet":
|
|
70
|
+
case "-q":
|
|
71
|
+
flags.quiet = true;
|
|
72
|
+
flags.noBanner = true; // Quiet mode also suppresses banner
|
|
73
|
+
break;
|
|
74
|
+
case "--verbose":
|
|
75
|
+
flags.verbose = true;
|
|
76
|
+
break;
|
|
77
|
+
case "--debug":
|
|
78
|
+
flags.debug = true;
|
|
79
|
+
break;
|
|
80
|
+
case "--strict":
|
|
81
|
+
flags.strict = true;
|
|
82
|
+
break;
|
|
83
|
+
case "--no-banner":
|
|
84
|
+
flags.noBanner = true;
|
|
85
|
+
break;
|
|
86
|
+
case "--path":
|
|
87
|
+
case "-p":
|
|
88
|
+
flags.path = rawArgs[++i] || process.cwd();
|
|
89
|
+
break;
|
|
90
|
+
case "--output":
|
|
91
|
+
case "-o":
|
|
92
|
+
flags.output = rawArgs[++i] || null;
|
|
93
|
+
break;
|
|
94
|
+
default:
|
|
95
|
+
if (arg.startsWith("--path=")) {
|
|
96
|
+
flags.path = arg.split("=")[1];
|
|
97
|
+
} else if (arg.startsWith("--output=")) {
|
|
98
|
+
flags.output = arg.split("=")[1];
|
|
99
|
+
} else {
|
|
100
|
+
cleanArgs.push(arg);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
i++;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return { flags, cleanArgs };
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
110
|
+
// BANNER CHECKING
|
|
111
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Check if banner should be shown
|
|
115
|
+
* Respects --no-banner flag, VIBECHECK_NO_BANNER env var, and VIBECHECK_QUIET
|
|
116
|
+
*/
|
|
117
|
+
function shouldShowBanner(flags = {}) {
|
|
118
|
+
// Check environment variables first
|
|
119
|
+
if (process.env.VIBECHECK_NO_BANNER === "true") return false;
|
|
120
|
+
if (process.env.VIBECHECK_QUIET === "true") return false;
|
|
121
|
+
|
|
122
|
+
// Check flags
|
|
123
|
+
if (flags.noBanner === true) return false;
|
|
124
|
+
if (flags.ci === true) return false;
|
|
125
|
+
if (flags.quiet === true) return false;
|
|
126
|
+
if (flags.json === true) return false; // JSON output shouldn't have banners
|
|
127
|
+
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
132
|
+
// CI DETECTION
|
|
133
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Check if running in CI environment
|
|
137
|
+
*/
|
|
138
|
+
function isCI() {
|
|
139
|
+
return !!(
|
|
140
|
+
process.env.CI ||
|
|
141
|
+
process.env.CONTINUOUS_INTEGRATION ||
|
|
142
|
+
process.env.BUILD_NUMBER ||
|
|
143
|
+
process.env.TRAVIS ||
|
|
144
|
+
process.env.CIRCLECI ||
|
|
145
|
+
process.env.JENKINS_URL ||
|
|
146
|
+
process.env.GITLAB_CI ||
|
|
147
|
+
process.env.GITHUB_ACTIONS ||
|
|
148
|
+
process.env.BUILDKITE ||
|
|
149
|
+
process.env.TEAMCITY_VERSION ||
|
|
150
|
+
process.env.TF_BUILD
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
155
|
+
// CONFIG LOADING
|
|
156
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Load config with environment variable support
|
|
160
|
+
*/
|
|
161
|
+
function loadConfig(flags = {}) {
|
|
162
|
+
const path = getPath();
|
|
163
|
+
const fs = getFs();
|
|
164
|
+
|
|
165
|
+
const config = {
|
|
166
|
+
debug: false,
|
|
167
|
+
verbose: false,
|
|
168
|
+
quiet: false,
|
|
169
|
+
color: true,
|
|
170
|
+
analytics: true,
|
|
171
|
+
updateCheck: true,
|
|
172
|
+
timeout: 30000,
|
|
173
|
+
maxRetries: 3,
|
|
174
|
+
noBanner: false,
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
// Load project config if exists
|
|
178
|
+
const projectConfigPath = path.join(process.cwd(), ".vibecheckrc.json");
|
|
179
|
+
if (fs.existsSync(projectConfigPath)) {
|
|
180
|
+
try {
|
|
181
|
+
Object.assign(config, JSON.parse(fs.readFileSync(projectConfigPath, "utf-8")));
|
|
182
|
+
} catch {
|
|
183
|
+
// Ignore invalid config
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Environment overrides
|
|
188
|
+
if (process.env.VIBECHECK_DEBUG === "true") config.debug = true;
|
|
189
|
+
if (process.env.VIBECHECK_VERBOSE === "true") config.verbose = true;
|
|
190
|
+
if (process.env.VIBECHECK_QUIET === "true") config.quiet = true;
|
|
191
|
+
if (process.env.VIBECHECK_NO_BANNER === "true") config.noBanner = true;
|
|
192
|
+
if (process.env.NO_COLOR || process.env.VIBECHECK_NO_COLOR) config.color = false;
|
|
193
|
+
|
|
194
|
+
// Flag overrides (highest priority)
|
|
195
|
+
if (flags.debug) config.debug = true;
|
|
196
|
+
if (flags.verbose) config.verbose = true;
|
|
197
|
+
if (flags.quiet) config.quiet = true;
|
|
198
|
+
if (flags.noBanner) config.noBanner = true;
|
|
199
|
+
if (flags.ci) config.noBanner = true;
|
|
200
|
+
|
|
201
|
+
return config;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
module.exports = {
|
|
205
|
+
parseGlobalFlags,
|
|
206
|
+
shouldShowBanner,
|
|
207
|
+
isCI,
|
|
208
|
+
loadConfig,
|
|
209
|
+
lazy,
|
|
210
|
+
getOs,
|
|
211
|
+
getPath,
|
|
212
|
+
getFs,
|
|
213
|
+
};
|