@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
package/bin/runners/runGuard.js
CHANGED
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vibecheck guard - Unified trust boundary enforcement
|
|
3
|
-
*
|
|
4
|
-
* Combines: validate + claim-verifier + prompt-firewall
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* vibecheck guard # Run all checks
|
|
8
|
-
* vibecheck guard --claims # Verify AI claims against truthpack
|
|
9
|
-
* vibecheck guard --prompts # Check for prompt injection
|
|
10
|
-
* vibecheck guard --hallucinations # Detect AI hallucination patterns
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
const path = require("path");
|
|
14
|
-
const fs = require("fs");
|
|
15
|
-
|
|
16
|
-
// Import underlying implementations
|
|
17
|
-
const { runValidate } = require("./runValidate");
|
|
18
|
-
const { runPromptFirewall } = require("./runPromptFirewall");
|
|
19
|
-
|
|
20
|
-
// ANSI colors
|
|
21
|
-
const c = {
|
|
22
|
-
reset: "\x1b[0m",
|
|
23
|
-
dim: "\x1b[2m",
|
|
24
|
-
bold: "\x1b[1m",
|
|
25
|
-
cyan: "\x1b[36m",
|
|
26
|
-
green: "\x1b[32m",
|
|
27
|
-
yellow: "\x1b[33m",
|
|
28
|
-
red: "\x1b[31m",
|
|
29
|
-
magenta: "\x1b[35m",
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
function printHelp() {
|
|
33
|
-
console.log(`
|
|
34
|
-
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
35
|
-
${c.bold}vibecheck guard${c.reset} - Trust boundary enforcement for AI outputs
|
|
36
|
-
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
37
|
-
|
|
38
|
-
${c.green}USAGE${c.reset}
|
|
39
|
-
vibecheck guard [options]
|
|
40
|
-
|
|
41
|
-
${c.yellow}OPTIONS${c.reset}
|
|
42
|
-
--claims Verify AI claims against truthpack (route_exists, auth_enforced, etc.)
|
|
43
|
-
--prompts Check code for prompt injection vulnerabilities
|
|
44
|
-
--hallucinations Detect AI hallucination patterns in generated code
|
|
45
|
-
--file <path> Check specific file(s)
|
|
46
|
-
--json Output JSON for CI integration
|
|
47
|
-
--strict Fail on warnings (default: fail on errors only)
|
|
48
|
-
|
|
49
|
-
${c.magenta}EXAMPLES${c.reset}
|
|
50
|
-
vibecheck guard # Run all checks
|
|
51
|
-
vibecheck guard --claims --file api.ts # Verify claims in specific file
|
|
52
|
-
vibecheck guard --prompts # Prompt injection scan
|
|
53
|
-
vibecheck guard --json # CI-friendly output
|
|
54
|
-
|
|
55
|
-
${c.dim}This command unifies trust boundary checks for AI-generated code.${c.reset}
|
|
56
|
-
`);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async function runGuard(args = []) {
|
|
60
|
-
// Parse arguments
|
|
61
|
-
if (args.includes("--help") || args.includes("-h")) {
|
|
62
|
-
printHelp();
|
|
63
|
-
return 0;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const runClaims = args.includes("--claims") || (!args.includes("--prompts") && !args.includes("--hallucinations"));
|
|
67
|
-
const runPrompts = args.includes("--prompts") || (!args.includes("--claims") && !args.includes("--hallucinations"));
|
|
68
|
-
const runHallucinations = args.includes("--hallucinations") || (!args.includes("--claims") && !args.includes("--prompts"));
|
|
69
|
-
const jsonOutput = args.includes("--json");
|
|
70
|
-
const strict = args.includes("--strict");
|
|
71
|
-
|
|
72
|
-
const results = {
|
|
73
|
-
claims: null,
|
|
74
|
-
prompts: null,
|
|
75
|
-
hallucinations: null,
|
|
76
|
-
verdict: "PASS",
|
|
77
|
-
errors: 0,
|
|
78
|
-
warnings: 0,
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
console.log(`
|
|
82
|
-
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
83
|
-
${c.bold}🛡️ VIBECHECK GUARD${c.reset} - Trust Boundary Enforcement
|
|
84
|
-
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
85
|
-
`);
|
|
86
|
-
|
|
87
|
-
// Run claims verification (validates AI claims against truthpack)
|
|
88
|
-
if (runClaims) {
|
|
89
|
-
console.log(`${c.dim}▸ Verifying AI claims against truthpack...${c.reset}`);
|
|
90
|
-
try {
|
|
91
|
-
const validateArgs = args.filter(a => !["--claims", "--prompts", "--hallucinations"].includes(a));
|
|
92
|
-
const exitCode = await runValidate(validateArgs);
|
|
93
|
-
results.claims = { exitCode, status: exitCode === 0 ? "pass" : "fail" };
|
|
94
|
-
if (exitCode !== 0) {
|
|
95
|
-
results.errors++;
|
|
96
|
-
results.verdict = "FAIL";
|
|
97
|
-
}
|
|
98
|
-
console.log(exitCode === 0
|
|
99
|
-
? ` ${c.green}✓${c.reset} Claims verified`
|
|
100
|
-
: ` ${c.red}✗${c.reset} Claim verification failed`);
|
|
101
|
-
} catch (e) {
|
|
102
|
-
results.claims = { error: e.message };
|
|
103
|
-
console.log(` ${c.yellow}⚠${c.reset} Claims check skipped: ${e.message}`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Run prompt injection detection
|
|
108
|
-
if (runPrompts) {
|
|
109
|
-
console.log(`${c.dim}▸ Scanning for prompt injection vulnerabilities...${c.reset}`);
|
|
110
|
-
try {
|
|
111
|
-
const firewallArgs = args.filter(a => !["--claims", "--prompts", "--hallucinations"].includes(a));
|
|
112
|
-
const exitCode = await runPromptFirewall(firewallArgs);
|
|
113
|
-
results.prompts = { exitCode, status: exitCode === 0 ? "pass" : "fail" };
|
|
114
|
-
if (exitCode !== 0) {
|
|
115
|
-
results.warnings++;
|
|
116
|
-
if (strict) results.verdict = "FAIL";
|
|
117
|
-
}
|
|
118
|
-
console.log(exitCode === 0
|
|
119
|
-
? ` ${c.green}✓${c.reset} No prompt injection risks`
|
|
120
|
-
: ` ${c.yellow}⚠${c.reset} Prompt injection risks detected`);
|
|
121
|
-
} catch (e) {
|
|
122
|
-
results.prompts = { error: e.message };
|
|
123
|
-
console.log(` ${c.yellow}⚠${c.reset} Prompt check skipped: ${e.message}`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Run hallucination detection
|
|
128
|
-
if (runHallucinations) {
|
|
129
|
-
console.log(`${c.dim}▸ Detecting hallucination patterns...${c.reset}`);
|
|
130
|
-
// Use validate with hallucination focus
|
|
131
|
-
try {
|
|
132
|
-
const validateArgs = ["--hallucinations", ...args.filter(a => !["--claims", "--prompts", "--hallucinations"].includes(a))];
|
|
133
|
-
const exitCode = await runValidate(validateArgs);
|
|
134
|
-
results.hallucinations = { exitCode, status: exitCode === 0 ? "pass" : "fail" };
|
|
135
|
-
if (exitCode !== 0) {
|
|
136
|
-
results.warnings++;
|
|
137
|
-
if (strict) results.verdict = "FAIL";
|
|
138
|
-
}
|
|
139
|
-
console.log(exitCode === 0
|
|
140
|
-
? ` ${c.green}✓${c.reset} No hallucination patterns`
|
|
141
|
-
: ` ${c.yellow}⚠${c.reset} Potential hallucinations detected`);
|
|
142
|
-
} catch (e) {
|
|
143
|
-
results.hallucinations = { error: e.message };
|
|
144
|
-
console.log(` ${c.yellow}⚠${c.reset} Hallucination check skipped: ${e.message}`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Summary
|
|
149
|
-
console.log(`
|
|
150
|
-
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}`);
|
|
151
|
-
|
|
152
|
-
if (results.verdict === "PASS") {
|
|
153
|
-
console.log(` ${c.green}${c.bold}✓ GUARD PASS${c.reset} - All trust boundaries intact`);
|
|
154
|
-
} else {
|
|
155
|
-
console.log(` ${c.red}${c.bold}✗ GUARD FAIL${c.reset} - Trust boundary violations detected`);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
console.log(`${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
159
|
-
`);
|
|
160
|
-
|
|
161
|
-
if (jsonOutput) {
|
|
162
|
-
console.log(JSON.stringify(results, null, 2));
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
return results.verdict === "PASS" ? 0 : (results.errors > 0 ? 2 : 1);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
module.exports = { runGuard };
|
|
1
|
+
/**
|
|
2
|
+
* vibecheck guard - Unified trust boundary enforcement
|
|
3
|
+
*
|
|
4
|
+
* Combines: validate + claim-verifier + prompt-firewall
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* vibecheck guard # Run all checks
|
|
8
|
+
* vibecheck guard --claims # Verify AI claims against truthpack
|
|
9
|
+
* vibecheck guard --prompts # Check for prompt injection
|
|
10
|
+
* vibecheck guard --hallucinations # Detect AI hallucination patterns
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const path = require("path");
|
|
14
|
+
const fs = require("fs");
|
|
15
|
+
|
|
16
|
+
// Import underlying implementations
|
|
17
|
+
const { runValidate } = require("./runValidate");
|
|
18
|
+
const { runPromptFirewall } = require("./runPromptFirewall");
|
|
19
|
+
|
|
20
|
+
// ANSI colors
|
|
21
|
+
const c = {
|
|
22
|
+
reset: "\x1b[0m",
|
|
23
|
+
dim: "\x1b[2m",
|
|
24
|
+
bold: "\x1b[1m",
|
|
25
|
+
cyan: "\x1b[36m",
|
|
26
|
+
green: "\x1b[32m",
|
|
27
|
+
yellow: "\x1b[33m",
|
|
28
|
+
red: "\x1b[31m",
|
|
29
|
+
magenta: "\x1b[35m",
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function printHelp() {
|
|
33
|
+
console.log(`
|
|
34
|
+
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
35
|
+
${c.bold}vibecheck guard${c.reset} - Trust boundary enforcement for AI outputs
|
|
36
|
+
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
37
|
+
|
|
38
|
+
${c.green}USAGE${c.reset}
|
|
39
|
+
vibecheck guard [options]
|
|
40
|
+
|
|
41
|
+
${c.yellow}OPTIONS${c.reset}
|
|
42
|
+
--claims Verify AI claims against truthpack (route_exists, auth_enforced, etc.)
|
|
43
|
+
--prompts Check code for prompt injection vulnerabilities
|
|
44
|
+
--hallucinations Detect AI hallucination patterns in generated code
|
|
45
|
+
--file <path> Check specific file(s)
|
|
46
|
+
--json Output JSON for CI integration
|
|
47
|
+
--strict Fail on warnings (default: fail on errors only)
|
|
48
|
+
|
|
49
|
+
${c.magenta}EXAMPLES${c.reset}
|
|
50
|
+
vibecheck guard # Run all checks
|
|
51
|
+
vibecheck guard --claims --file api.ts # Verify claims in specific file
|
|
52
|
+
vibecheck guard --prompts # Prompt injection scan
|
|
53
|
+
vibecheck guard --json # CI-friendly output
|
|
54
|
+
|
|
55
|
+
${c.dim}This command unifies trust boundary checks for AI-generated code.${c.reset}
|
|
56
|
+
`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function runGuard(args = []) {
|
|
60
|
+
// Parse arguments
|
|
61
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
62
|
+
printHelp();
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const runClaims = args.includes("--claims") || (!args.includes("--prompts") && !args.includes("--hallucinations"));
|
|
67
|
+
const runPrompts = args.includes("--prompts") || (!args.includes("--claims") && !args.includes("--hallucinations"));
|
|
68
|
+
const runHallucinations = args.includes("--hallucinations") || (!args.includes("--claims") && !args.includes("--prompts"));
|
|
69
|
+
const jsonOutput = args.includes("--json");
|
|
70
|
+
const strict = args.includes("--strict");
|
|
71
|
+
|
|
72
|
+
const results = {
|
|
73
|
+
claims: null,
|
|
74
|
+
prompts: null,
|
|
75
|
+
hallucinations: null,
|
|
76
|
+
verdict: "PASS",
|
|
77
|
+
errors: 0,
|
|
78
|
+
warnings: 0,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
console.log(`
|
|
82
|
+
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
83
|
+
${c.bold}🛡️ VIBECHECK GUARD${c.reset} - Trust Boundary Enforcement
|
|
84
|
+
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
85
|
+
`);
|
|
86
|
+
|
|
87
|
+
// Run claims verification (validates AI claims against truthpack)
|
|
88
|
+
if (runClaims) {
|
|
89
|
+
console.log(`${c.dim}▸ Verifying AI claims against truthpack...${c.reset}`);
|
|
90
|
+
try {
|
|
91
|
+
const validateArgs = args.filter(a => !["--claims", "--prompts", "--hallucinations"].includes(a));
|
|
92
|
+
const exitCode = await runValidate(validateArgs);
|
|
93
|
+
results.claims = { exitCode, status: exitCode === 0 ? "pass" : "fail" };
|
|
94
|
+
if (exitCode !== 0) {
|
|
95
|
+
results.errors++;
|
|
96
|
+
results.verdict = "FAIL";
|
|
97
|
+
}
|
|
98
|
+
console.log(exitCode === 0
|
|
99
|
+
? ` ${c.green}✓${c.reset} Claims verified`
|
|
100
|
+
: ` ${c.red}✗${c.reset} Claim verification failed`);
|
|
101
|
+
} catch (e) {
|
|
102
|
+
results.claims = { error: e.message };
|
|
103
|
+
console.log(` ${c.yellow}⚠${c.reset} Claims check skipped: ${e.message}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Run prompt injection detection
|
|
108
|
+
if (runPrompts) {
|
|
109
|
+
console.log(`${c.dim}▸ Scanning for prompt injection vulnerabilities...${c.reset}`);
|
|
110
|
+
try {
|
|
111
|
+
const firewallArgs = args.filter(a => !["--claims", "--prompts", "--hallucinations"].includes(a));
|
|
112
|
+
const exitCode = await runPromptFirewall(firewallArgs);
|
|
113
|
+
results.prompts = { exitCode, status: exitCode === 0 ? "pass" : "fail" };
|
|
114
|
+
if (exitCode !== 0) {
|
|
115
|
+
results.warnings++;
|
|
116
|
+
if (strict) results.verdict = "FAIL";
|
|
117
|
+
}
|
|
118
|
+
console.log(exitCode === 0
|
|
119
|
+
? ` ${c.green}✓${c.reset} No prompt injection risks`
|
|
120
|
+
: ` ${c.yellow}⚠${c.reset} Prompt injection risks detected`);
|
|
121
|
+
} catch (e) {
|
|
122
|
+
results.prompts = { error: e.message };
|
|
123
|
+
console.log(` ${c.yellow}⚠${c.reset} Prompt check skipped: ${e.message}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Run hallucination detection
|
|
128
|
+
if (runHallucinations) {
|
|
129
|
+
console.log(`${c.dim}▸ Detecting hallucination patterns...${c.reset}`);
|
|
130
|
+
// Use validate with hallucination focus
|
|
131
|
+
try {
|
|
132
|
+
const validateArgs = ["--hallucinations", ...args.filter(a => !["--claims", "--prompts", "--hallucinations"].includes(a))];
|
|
133
|
+
const exitCode = await runValidate(validateArgs);
|
|
134
|
+
results.hallucinations = { exitCode, status: exitCode === 0 ? "pass" : "fail" };
|
|
135
|
+
if (exitCode !== 0) {
|
|
136
|
+
results.warnings++;
|
|
137
|
+
if (strict) results.verdict = "FAIL";
|
|
138
|
+
}
|
|
139
|
+
console.log(exitCode === 0
|
|
140
|
+
? ` ${c.green}✓${c.reset} No hallucination patterns`
|
|
141
|
+
: ` ${c.yellow}⚠${c.reset} Potential hallucinations detected`);
|
|
142
|
+
} catch (e) {
|
|
143
|
+
results.hallucinations = { error: e.message };
|
|
144
|
+
console.log(` ${c.yellow}⚠${c.reset} Hallucination check skipped: ${e.message}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Summary
|
|
149
|
+
console.log(`
|
|
150
|
+
${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}`);
|
|
151
|
+
|
|
152
|
+
if (results.verdict === "PASS") {
|
|
153
|
+
console.log(` ${c.green}${c.bold}✓ GUARD PASS${c.reset} - All trust boundaries intact`);
|
|
154
|
+
} else {
|
|
155
|
+
console.log(` ${c.red}${c.bold}✗ GUARD FAIL${c.reset} - Trust boundary violations detected`);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
console.log(`${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
|
|
159
|
+
`);
|
|
160
|
+
|
|
161
|
+
if (jsonOutput) {
|
|
162
|
+
console.log(JSON.stringify(results, null, 2));
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return results.verdict === "PASS" ? 0 : (results.errors > 0 ? 2 : 1);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
module.exports = { runGuard };
|
|
Binary file
|
package/bin/runners/runProve.js
CHANGED
|
@@ -31,6 +31,7 @@ const {
|
|
|
31
31
|
saveArtifact
|
|
32
32
|
} = require("./lib/cli-output");
|
|
33
33
|
const { parseGlobalFlags, shouldShowBanner } = require("./lib/global-flags");
|
|
34
|
+
const upsell = require("./lib/upsell");
|
|
34
35
|
|
|
35
36
|
let runReality;
|
|
36
37
|
try {
|
|
@@ -1410,6 +1411,13 @@ async function runProve(argsOrOpts = {}, context = {}) {
|
|
|
1410
1411
|
console.log(` ${colors.accent}vibecheck ship --fix${c.reset} ${c.dim}Manual fix mode${c.reset}`);
|
|
1411
1412
|
console.log();
|
|
1412
1413
|
}
|
|
1414
|
+
|
|
1415
|
+
// Upsell for upgrade
|
|
1416
|
+
console.log(upsell.formatNextSteps("prove", finalVerdict, "free"));
|
|
1417
|
+
console.log();
|
|
1418
|
+
console.log(` ${c.dim}${upsell.sym.star} Upgrade for unlimited prove runs + video artifacts${c.reset}`);
|
|
1419
|
+
console.log(` ${c.dim}${upsell.sym.arrow} ${upsell.PRICING_URL}${c.reset}`);
|
|
1420
|
+
console.log();
|
|
1413
1421
|
} else if (ci) {
|
|
1414
1422
|
// CI mode - structured output for easy parsing
|
|
1415
1423
|
console.log(`::group::vibecheck prove summary`);
|
|
@@ -32,6 +32,7 @@ const { parseGlobalFlags, shouldShowBanner } = require("./lib/global-flags");
|
|
|
32
32
|
|
|
33
33
|
// Entitlements enforcement
|
|
34
34
|
const entitlements = require("./lib/entitlements-v2");
|
|
35
|
+
const upsell = require("./lib/upsell");
|
|
35
36
|
|
|
36
37
|
let chromium;
|
|
37
38
|
let playwrightError = null;
|
|
@@ -2076,6 +2077,19 @@ async function runReality(argsOrOpts = {}) {
|
|
|
2076
2077
|
console.log();
|
|
2077
2078
|
}
|
|
2078
2079
|
|
|
2080
|
+
// Upsell for free tier users running in preview mode
|
|
2081
|
+
const currentTier = entitlements.getCurrentTierSync ? entitlements.getCurrentTierSync() : 'free';
|
|
2082
|
+
if (currentTier === 'free') {
|
|
2083
|
+
console.log(upsell.formatEarnedUpsell({
|
|
2084
|
+
cmd: "reality",
|
|
2085
|
+
why: "cap_hit",
|
|
2086
|
+
topIssues: findings.slice(0, 5),
|
|
2087
|
+
upgradeTier: "starter",
|
|
2088
|
+
}));
|
|
2089
|
+
console.log(upsell.formatNextSteps("reality", blocks > 0 ? "BLOCK" : warns > 0 ? "WARN" : "SHIP", currentTier));
|
|
2090
|
+
console.log();
|
|
2091
|
+
}
|
|
2092
|
+
|
|
2079
2093
|
process.exitCode = blocks ? 2 : warns ? 1 : 0;
|
|
2080
2094
|
return process.exitCode;
|
|
2081
2095
|
}
|
package/bin/runners/runScan.js
CHANGED
|
@@ -763,6 +763,13 @@ async function runScan(args) {
|
|
|
763
763
|
findDeprecatedApis,
|
|
764
764
|
findEmptyCatch,
|
|
765
765
|
findUnsafeRegex,
|
|
766
|
+
findSecurityVulnerabilities,
|
|
767
|
+
findPerformanceIssues,
|
|
768
|
+
findCodeQualityIssues,
|
|
769
|
+
findCrossFileIssues,
|
|
770
|
+
findTypeSafetyIssues,
|
|
771
|
+
findAccessibilityIssues,
|
|
772
|
+
findAPIConsistencyIssues,
|
|
766
773
|
clearFileCache, // V3: Memory management
|
|
767
774
|
} = require('./lib/analyzers');
|
|
768
775
|
|
|
@@ -789,8 +796,17 @@ async function runScan(args) {
|
|
|
789
796
|
findings.push(...findEmptyCatch(projectPath));
|
|
790
797
|
findings.push(...findUnsafeRegex(projectPath));
|
|
791
798
|
|
|
792
|
-
//
|
|
799
|
+
// Enhanced analyzers (Security, Performance, Code Quality)
|
|
800
|
+
findings.push(...findSecurityVulnerabilities(projectPath));
|
|
801
|
+
findings.push(...findPerformanceIssues(projectPath));
|
|
802
|
+
findings.push(...findCodeQualityIssues(projectPath));
|
|
803
|
+
|
|
804
|
+
// V3: Clear file cache and AST cache to prevent memory leaks in large monorepos
|
|
793
805
|
clearFileCache();
|
|
806
|
+
const engines = require("./lib/engines/vibecheck-engines");
|
|
807
|
+
if (engines.clearASTCache) {
|
|
808
|
+
engines.clearASTCache();
|
|
809
|
+
}
|
|
794
810
|
|
|
795
811
|
// Convert to scan format matching TypeScript scanner output
|
|
796
812
|
const shipBlockers = findings.map((f, i) => ({
|
package/bin/runners/runTruth.js
CHANGED
|
@@ -37,10 +37,22 @@ async function runTruth(options = {}) {
|
|
|
37
37
|
// Write truthpack files based on scope
|
|
38
38
|
if (scope === "all" || scope === "routes") {
|
|
39
39
|
const routesFile = path.join(truthpackDir, "routes.json");
|
|
40
|
+
// Extract routes from truthpack structure: truthpack.truthpack.routes.server
|
|
41
|
+
const serverRoutes = truthpack.truthpack?.routes?.server || [];
|
|
42
|
+
const gaps = truthpack.truthpack?.routes?.gaps || [];
|
|
43
|
+
const stack = truthpack.truthpack?.project || {};
|
|
44
|
+
|
|
40
45
|
fs.writeFileSync(routesFile, JSON.stringify({
|
|
41
|
-
routes:
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
routes: serverRoutes.map(r => ({
|
|
47
|
+
path: r.path,
|
|
48
|
+
method: r.method,
|
|
49
|
+
handler: r.handler || r.source
|
|
50
|
+
})),
|
|
51
|
+
gaps: gaps,
|
|
52
|
+
stack: {
|
|
53
|
+
framework: stack.frameworks?.[0] || "unknown",
|
|
54
|
+
language: "typescript"
|
|
55
|
+
}
|
|
44
56
|
}, null, 2));
|
|
45
57
|
}
|
|
46
58
|
|
package/mcp-server/tier-auth.js
CHANGED
|
@@ -197,7 +197,7 @@ export async function checkFeatureAccess(featureName, providedApiKey = null) {
|
|
|
197
197
|
hasAccess: false,
|
|
198
198
|
tier: 'free',
|
|
199
199
|
reason: 'No API key provided. Run: vibecheck auth --key YOUR_API_KEY',
|
|
200
|
-
upgradeUrl: 'https://vibecheckai.dev
|
|
200
|
+
upgradeUrl: 'https://vibecheckai.dev'
|
|
201
201
|
};
|
|
202
202
|
}
|
|
203
203
|
|
|
@@ -222,7 +222,7 @@ export async function checkFeatureAccess(featureName, providedApiKey = null) {
|
|
|
222
222
|
hasAccess: false,
|
|
223
223
|
tier: currentTier,
|
|
224
224
|
reason: `${featureName} is not available in any tier`,
|
|
225
|
-
upgradeUrl: 'https://vibecheckai.dev
|
|
225
|
+
upgradeUrl: 'https://vibecheckai.dev'
|
|
226
226
|
};
|
|
227
227
|
}
|
|
228
228
|
|
|
@@ -235,7 +235,7 @@ export async function checkFeatureAccess(featureName, providedApiKey = null) {
|
|
|
235
235
|
tier: currentTier,
|
|
236
236
|
requiredTier,
|
|
237
237
|
reason: `${featureName} requires ${requiredTierConfig.name} tier ($${requiredTierConfig.price}/mo) or higher. Current tier: ${currentTierConfig.name}`,
|
|
238
|
-
upgradeUrl: 'https://vibecheckai.dev
|
|
238
|
+
upgradeUrl: 'https://vibecheckai.dev'
|
|
239
239
|
};
|
|
240
240
|
}
|
|
241
241
|
|
|
@@ -322,7 +322,7 @@ export async function checkMcpToolAccess(toolName, providedApiKey = null) {
|
|
|
322
322
|
reason: requiredTierConfig
|
|
323
323
|
? `${toolName} requires ${requiredTierConfig.name} tier ($${requiredTierConfig.price}/mo). Current: ${currentTierConfig.name}`
|
|
324
324
|
: `${toolName} is not available`,
|
|
325
|
-
upgradeUrl: 'https://vibecheckai.dev
|
|
325
|
+
upgradeUrl: 'https://vibecheckai.dev'
|
|
326
326
|
};
|
|
327
327
|
}
|
|
328
328
|
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Tools Index - Single Entry Point for All Tools
|
|
3
|
-
*
|
|
4
|
-
* This module exports all MCP tools in a unified structure.
|
|
5
|
-
* Internal modules are organized by category but presented as one toolset.
|
|
6
|
-
*
|
|
7
|
-
* Tool Categories:
|
|
8
|
-
* - Core: scan, ship, reality, fix, prove, report
|
|
9
|
-
* - Truth: ctx, guard, validate_claim, compile_context
|
|
10
|
-
* - AI: checkpoint, architect, intelligence
|
|
11
|
-
*
|
|
12
|
-
* Usage:
|
|
13
|
-
* import { ALL_TOOLS, handleTool } from './tools/index.js';
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
// Re-export consolidated tools as the primary interface
|
|
17
|
-
export { CONSOLIDATED_TOOLS, handleConsolidatedTool } from '../consolidated-tools.js';
|
|
18
|
-
|
|
19
|
-
// Re-export truth firewall (hallucination stopper)
|
|
20
|
-
export { TRUTH_FIREWALL_TOOLS, handleTruthFirewallTool } from '../truth-firewall-tools.js';
|
|
21
|
-
|
|
22
|
-
// Re-export truth context
|
|
23
|
-
export { TRUTH_CONTEXT_TOOLS, handleTruthContextTool } from '../truth-context.js';
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Get all recommended tools (consolidated + truth firewall)
|
|
27
|
-
*/
|
|
28
|
-
export function getRecommendedTools() {
|
|
29
|
-
const { CONSOLIDATED_TOOLS } = require('../consolidated-tools.js');
|
|
30
|
-
const { TRUTH_FIREWALL_TOOLS } = require('../truth-firewall-tools.js');
|
|
31
|
-
return [...CONSOLIDATED_TOOLS, ...TRUTH_FIREWALL_TOOLS];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Handle any tool call by routing to the appropriate handler
|
|
36
|
-
*/
|
|
37
|
-
export async function handleToolCall(toolName, args) {
|
|
38
|
-
// Route to consolidated handler first
|
|
39
|
-
const { handleConsolidatedTool, CONSOLIDATED_TOOLS } = await import('../consolidated-tools.js');
|
|
40
|
-
const consolidatedNames = CONSOLIDATED_TOOLS.map(t => t.name);
|
|
41
|
-
|
|
42
|
-
if (consolidatedNames.includes(toolName)) {
|
|
43
|
-
return handleConsolidatedTool(toolName, args);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Route to truth firewall
|
|
47
|
-
const { handleTruthFirewallTool, TRUTH_FIREWALL_TOOLS } = await import('../truth-firewall-tools.js');
|
|
48
|
-
const firewallNames = TRUTH_FIREWALL_TOOLS.map(t => t.name);
|
|
49
|
-
|
|
50
|
-
if (firewallNames.includes(toolName)) {
|
|
51
|
-
return handleTruthFirewallTool(toolName, args);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Route to truth context
|
|
55
|
-
const { handleTruthContextTool, TRUTH_CONTEXT_TOOLS } = await import('../truth-context.js');
|
|
56
|
-
const contextNames = TRUTH_CONTEXT_TOOLS.map(t => t.name);
|
|
57
|
-
|
|
58
|
-
if (contextNames.includes(toolName)) {
|
|
59
|
-
return handleTruthContextTool(toolName, args);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
throw new Error(`Unknown tool: ${toolName}`);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Tool categories for documentation
|
|
67
|
-
*/
|
|
68
|
-
export const TOOL_CATEGORIES = {
|
|
69
|
-
core: ['vibecheck.scan', 'vibecheck.ship', 'vibecheck.reality', 'vibecheck.fix', 'vibecheck.prove', 'vibecheck.report'],
|
|
70
|
-
truth: ['vibecheck.ctx', 'vibecheck.get_truthpack', 'vibecheck.validate_claim', 'vibecheck.compile_context'],
|
|
71
|
-
guard: ['vibecheck.guard', 'vibecheck.check_route', 'vibecheck.check_env', 'vibecheck.check_auth'],
|
|
72
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools Index - Single Entry Point for All Tools
|
|
3
|
+
*
|
|
4
|
+
* This module exports all MCP tools in a unified structure.
|
|
5
|
+
* Internal modules are organized by category but presented as one toolset.
|
|
6
|
+
*
|
|
7
|
+
* Tool Categories:
|
|
8
|
+
* - Core: scan, ship, reality, fix, prove, report
|
|
9
|
+
* - Truth: ctx, guard, validate_claim, compile_context
|
|
10
|
+
* - AI: checkpoint, architect, intelligence
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* import { ALL_TOOLS, handleTool } from './tools/index.js';
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// Re-export consolidated tools as the primary interface
|
|
17
|
+
export { CONSOLIDATED_TOOLS, handleConsolidatedTool } from '../consolidated-tools.js';
|
|
18
|
+
|
|
19
|
+
// Re-export truth firewall (hallucination stopper)
|
|
20
|
+
export { TRUTH_FIREWALL_TOOLS, handleTruthFirewallTool } from '../truth-firewall-tools.js';
|
|
21
|
+
|
|
22
|
+
// Re-export truth context
|
|
23
|
+
export { TRUTH_CONTEXT_TOOLS, handleTruthContextTool } from '../truth-context.js';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get all recommended tools (consolidated + truth firewall)
|
|
27
|
+
*/
|
|
28
|
+
export function getRecommendedTools() {
|
|
29
|
+
const { CONSOLIDATED_TOOLS } = require('../consolidated-tools.js');
|
|
30
|
+
const { TRUTH_FIREWALL_TOOLS } = require('../truth-firewall-tools.js');
|
|
31
|
+
return [...CONSOLIDATED_TOOLS, ...TRUTH_FIREWALL_TOOLS];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Handle any tool call by routing to the appropriate handler
|
|
36
|
+
*/
|
|
37
|
+
export async function handleToolCall(toolName, args) {
|
|
38
|
+
// Route to consolidated handler first
|
|
39
|
+
const { handleConsolidatedTool, CONSOLIDATED_TOOLS } = await import('../consolidated-tools.js');
|
|
40
|
+
const consolidatedNames = CONSOLIDATED_TOOLS.map(t => t.name);
|
|
41
|
+
|
|
42
|
+
if (consolidatedNames.includes(toolName)) {
|
|
43
|
+
return handleConsolidatedTool(toolName, args);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Route to truth firewall
|
|
47
|
+
const { handleTruthFirewallTool, TRUTH_FIREWALL_TOOLS } = await import('../truth-firewall-tools.js');
|
|
48
|
+
const firewallNames = TRUTH_FIREWALL_TOOLS.map(t => t.name);
|
|
49
|
+
|
|
50
|
+
if (firewallNames.includes(toolName)) {
|
|
51
|
+
return handleTruthFirewallTool(toolName, args);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Route to truth context
|
|
55
|
+
const { handleTruthContextTool, TRUTH_CONTEXT_TOOLS } = await import('../truth-context.js');
|
|
56
|
+
const contextNames = TRUTH_CONTEXT_TOOLS.map(t => t.name);
|
|
57
|
+
|
|
58
|
+
if (contextNames.includes(toolName)) {
|
|
59
|
+
return handleTruthContextTool(toolName, args);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Tool categories for documentation
|
|
67
|
+
*/
|
|
68
|
+
export const TOOL_CATEGORIES = {
|
|
69
|
+
core: ['vibecheck.scan', 'vibecheck.ship', 'vibecheck.reality', 'vibecheck.fix', 'vibecheck.prove', 'vibecheck.report'],
|
|
70
|
+
truth: ['vibecheck.ctx', 'vibecheck.get_truthpack', 'vibecheck.validate_claim', 'vibecheck.compile_context'],
|
|
71
|
+
guard: ['vibecheck.guard', 'vibecheck.check_route', 'vibecheck.check_env', 'vibecheck.check_auth'],
|
|
72
|
+
};
|