@vibecheckai/cli 3.6.1 โ 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +135 -63
- package/bin/_deprecations.js +447 -19
- package/bin/_router.js +1 -1
- package/bin/registry.js +347 -280
- package/bin/runners/context/generators/cursor-enhanced.js +2439 -0
- package/bin/runners/lib/agent-firewall/enforcement/gateway.js +1059 -0
- package/bin/runners/lib/agent-firewall/enforcement/index.js +98 -0
- package/bin/runners/lib/agent-firewall/enforcement/mode.js +318 -0
- package/bin/runners/lib/agent-firewall/enforcement/orchestrator.js +484 -0
- package/bin/runners/lib/agent-firewall/enforcement/proof-artifact.js +418 -0
- package/bin/runners/lib/agent-firewall/enforcement/schemas/change-event.schema.json +173 -0
- package/bin/runners/lib/agent-firewall/enforcement/schemas/intent.schema.json +181 -0
- package/bin/runners/lib/agent-firewall/enforcement/schemas/verdict.schema.json +222 -0
- package/bin/runners/lib/agent-firewall/enforcement/verdict-v2.js +333 -0
- package/bin/runners/lib/agent-firewall/index.js +200 -0
- package/bin/runners/lib/agent-firewall/integration/index.js +20 -0
- package/bin/runners/lib/agent-firewall/integration/ship-gate.js +437 -0
- package/bin/runners/lib/agent-firewall/intent/alignment-engine.js +622 -0
- package/bin/runners/lib/agent-firewall/intent/auto-detect.js +426 -0
- package/bin/runners/lib/agent-firewall/intent/index.js +102 -0
- package/bin/runners/lib/agent-firewall/intent/schema.js +352 -0
- package/bin/runners/lib/agent-firewall/intent/store.js +283 -0
- package/bin/runners/lib/agent-firewall/interception/fs-interceptor.js +502 -0
- package/bin/runners/lib/agent-firewall/interception/index.js +23 -0
- package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +31 -38
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +68 -3
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +4 -2
- package/bin/runners/lib/agent-firewall/risk/thresholds.js +5 -4
- package/bin/runners/lib/agent-firewall/session/collector.js +451 -0
- package/bin/runners/lib/agent-firewall/session/index.js +26 -0
- package/bin/runners/lib/artifact-envelope.js +540 -0
- package/bin/runners/lib/auth-shared.js +977 -0
- package/bin/runners/lib/checkpoint.js +941 -0
- package/bin/runners/lib/cleanup/engine.js +571 -0
- package/bin/runners/lib/cleanup/index.js +53 -0
- package/bin/runners/lib/cleanup/output.js +375 -0
- package/bin/runners/lib/cleanup/rules.js +1060 -0
- package/bin/runners/lib/doctor/diagnosis-receipt.js +454 -0
- package/bin/runners/lib/doctor/failure-signatures.js +526 -0
- package/bin/runners/lib/doctor/fix-script.js +336 -0
- package/bin/runners/lib/doctor/modules/build-tools.js +453 -0
- package/bin/runners/lib/doctor/modules/index.js +62 -3
- package/bin/runners/lib/doctor/modules/os-quirks.js +706 -0
- package/bin/runners/lib/doctor/modules/repo-integrity.js +485 -0
- package/bin/runners/lib/doctor/safe-repair.js +384 -0
- package/bin/runners/lib/engines/attack-detector.js +1192 -0
- package/bin/runners/lib/entitlements-v2.js +2 -2
- package/bin/runners/lib/error-messages.js +1 -1
- package/bin/runners/lib/missions/briefing.js +427 -0
- package/bin/runners/lib/missions/checkpoint.js +753 -0
- package/bin/runners/lib/missions/hardening.js +851 -0
- package/bin/runners/lib/missions/plan.js +421 -32
- package/bin/runners/lib/missions/safety-gates.js +645 -0
- package/bin/runners/lib/missions/schema.js +478 -0
- package/bin/runners/lib/packs/bundle.js +675 -0
- package/bin/runners/lib/packs/evidence-pack.js +671 -0
- package/bin/runners/lib/packs/pack-factory.js +837 -0
- package/bin/runners/lib/packs/permissions-pack.js +686 -0
- package/bin/runners/lib/packs/proof-graph-pack.js +779 -0
- package/bin/runners/lib/report-output.js +6 -6
- package/bin/runners/lib/safelist/index.js +96 -0
- package/bin/runners/lib/safelist/integration.js +334 -0
- package/bin/runners/lib/safelist/matcher.js +696 -0
- package/bin/runners/lib/safelist/schema.js +948 -0
- package/bin/runners/lib/safelist/store.js +438 -0
- package/bin/runners/lib/schemas/ship-manifest.schema.json +251 -0
- package/bin/runners/lib/ship-gate.js +832 -0
- package/bin/runners/lib/ship-manifest.js +1153 -0
- package/bin/runners/lib/ship-output.js +1 -1
- package/bin/runners/lib/unified-cli-output.js +710 -383
- package/bin/runners/lib/upsell.js +3 -3
- package/bin/runners/lib/why-tree.js +650 -0
- package/bin/runners/runAllowlist.js +33 -4
- package/bin/runners/runApprove.js +240 -1122
- package/bin/runners/runAudit.js +692 -0
- package/bin/runners/runAuth.js +325 -29
- package/bin/runners/runCheckpoint.js +442 -494
- package/bin/runners/runCleanup.js +343 -0
- package/bin/runners/runDoctor.js +269 -19
- package/bin/runners/runFix.js +411 -32
- package/bin/runners/runForge.js +411 -0
- package/bin/runners/runIntent.js +906 -0
- package/bin/runners/runKickoff.js +878 -0
- package/bin/runners/runLaunch.js +2000 -0
- package/bin/runners/runLink.js +785 -0
- package/bin/runners/runMcp.js +1741 -837
- package/bin/runners/runPacks.js +2089 -0
- package/bin/runners/runPolish.js +41 -0
- package/bin/runners/runSafelist.js +1190 -0
- package/bin/runners/runScan.js +21 -9
- package/bin/runners/runShield.js +1282 -0
- package/bin/runners/runShip.js +395 -16
- package/bin/vibecheck.js +34 -6
- package/mcp-server/README.md +117 -158
- package/mcp-server/handlers/tool-handler.ts +3 -3
- package/mcp-server/index.js +16 -0
- package/mcp-server/intent-firewall-interceptor.js +529 -0
- package/mcp-server/manifest.json +473 -0
- package/mcp-server/package.json +1 -1
- package/mcp-server/registry/tool-registry.js +315 -523
- package/mcp-server/registry/tools.json +442 -428
- package/mcp-server/tier-auth.js +164 -16
- package/mcp-server/tools-v3.js +70 -16
- package/package.json +1 -1
- package/bin/runners/runProof.zip +0 -0
package/mcp-server/tier-auth.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Simple 2-tier model:
|
|
9
9
|
* - FREE ($0): Inspect & Observe
|
|
10
|
-
* - PRO ($
|
|
10
|
+
* - PRO ($49/mo): Fix, Prove & Enforce
|
|
11
11
|
*
|
|
12
12
|
* โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
13
13
|
* โ MCP Tool โ Tier โ CLI Equivalent โ
|
|
@@ -42,6 +42,37 @@
|
|
|
42
42
|
import fs from "fs/promises";
|
|
43
43
|
import path from "path";
|
|
44
44
|
import os from "os";
|
|
45
|
+
import crypto from "crypto";
|
|
46
|
+
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// REDACTION - Secure API key masking
|
|
49
|
+
// ============================================================================
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Mask API key for secure display/logging.
|
|
53
|
+
* @param {string} key
|
|
54
|
+
* @returns {string}
|
|
55
|
+
*/
|
|
56
|
+
export function redactApiKey(key) {
|
|
57
|
+
if (!key || typeof key !== 'string' || key.length < 8) {
|
|
58
|
+
return '****';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (key.startsWith('grl_')) {
|
|
62
|
+
return `grl_${'*'.repeat(8)}${key.slice(-4)}`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const legacyMatch = key.match(/^(gr_[a-z]+_)/);
|
|
66
|
+
if (legacyMatch) {
|
|
67
|
+
return `${legacyMatch[1]}${'*'.repeat(8)}${key.slice(-4)}`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (key.length >= 12) {
|
|
71
|
+
return `${key.slice(0, 3)}****${key.slice(-4)}`;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return '****';
|
|
75
|
+
}
|
|
45
76
|
|
|
46
77
|
// ============================================================================
|
|
47
78
|
// ERROR CODES - Standard error envelope codes
|
|
@@ -51,6 +82,7 @@ export const ERROR_CODES = {
|
|
|
51
82
|
INVALID_API_KEY: 'INVALID_API_KEY',
|
|
52
83
|
RATE_LIMITED: 'RATE_LIMITED',
|
|
53
84
|
OPTION_NOT_ENTITLED: 'OPTION_NOT_ENTITLED',
|
|
85
|
+
API_KEY_REQUIRED: 'API_KEY_REQUIRED',
|
|
54
86
|
};
|
|
55
87
|
|
|
56
88
|
// ============================================================================
|
|
@@ -237,10 +269,48 @@ export function createTierErrorEnvelope(code, message, extra = {}) {
|
|
|
237
269
|
};
|
|
238
270
|
}
|
|
239
271
|
|
|
272
|
+
/**
|
|
273
|
+
* Create API_KEY_REQUIRED error envelope
|
|
274
|
+
* Used when a PRO tool is requested but no API key is provided
|
|
275
|
+
*/
|
|
276
|
+
export function apiKeyRequiredError(toolName) {
|
|
277
|
+
return createTierErrorEnvelope(ERROR_CODES.API_KEY_REQUIRED, `API key required for ${toolName}`, {
|
|
278
|
+
tool: toolName,
|
|
279
|
+
userAction: 'Add API Key',
|
|
280
|
+
retryable: true,
|
|
281
|
+
nextSteps: [
|
|
282
|
+
'Get your API key at https://vibecheckai.dev/dashboard',
|
|
283
|
+
'Run: vibecheck login',
|
|
284
|
+
'Or set VIBECHECK_API_KEY environment variable',
|
|
285
|
+
'Then pass apiKey in tool arguments or configure in ~/.vibecheck/credentials.json',
|
|
286
|
+
],
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
|
|
240
290
|
/**
|
|
241
291
|
* Create NOT_ENTITLED error envelope
|
|
242
292
|
*/
|
|
243
|
-
export function notEntitledError(toolName, currentTier = 'free', requiredTier = 'pro') {
|
|
293
|
+
export function notEntitledError(toolName, currentTier = 'free', requiredTier = 'pro', hasApiKey = true) {
|
|
294
|
+
// If no API key was provided, give more specific guidance
|
|
295
|
+
if (!hasApiKey) {
|
|
296
|
+
return createTierErrorEnvelope(ERROR_CODES.NOT_ENTITLED, `${toolName} requires PRO - add your API key`, {
|
|
297
|
+
tier: currentTier,
|
|
298
|
+
required: requiredTier,
|
|
299
|
+
tool: toolName,
|
|
300
|
+
userAction: 'Add API Key',
|
|
301
|
+
retryable: true,
|
|
302
|
+
nextSteps: [
|
|
303
|
+
`${toolName} requires PRO ($49/mo) subscription`,
|
|
304
|
+
'If you have PRO, add your API key:',
|
|
305
|
+
' - Run: vibecheck login',
|
|
306
|
+
' - Or pass apiKey in tool arguments',
|
|
307
|
+
' - Or set VIBECHECK_API_KEY environment variable',
|
|
308
|
+
'Get your API key at https://vibecheckai.dev/dashboard',
|
|
309
|
+
'Upgrade at https://vibecheckai.dev/pricing',
|
|
310
|
+
],
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
|
|
244
314
|
return createTierErrorEnvelope(ERROR_CODES.NOT_ENTITLED, `Requires ${requiredTier.toUpperCase()}`, {
|
|
245
315
|
tier: currentTier,
|
|
246
316
|
required: requiredTier,
|
|
@@ -248,7 +318,7 @@ export function notEntitledError(toolName, currentTier = 'free', requiredTier =
|
|
|
248
318
|
userAction: 'Open billing',
|
|
249
319
|
retryable: false,
|
|
250
320
|
nextSteps: [
|
|
251
|
-
`Upgrade to ${requiredTier.toUpperCase()} ($
|
|
321
|
+
`Upgrade to ${requiredTier.toUpperCase()} ($49/mo) to unlock this feature`,
|
|
252
322
|
'Visit https://vibecheckai.dev/pricing',
|
|
253
323
|
'Run: vibecheck upgrade',
|
|
254
324
|
],
|
|
@@ -326,6 +396,50 @@ export async function getTierFromApiKey(apiKey) {
|
|
|
326
396
|
}
|
|
327
397
|
}
|
|
328
398
|
|
|
399
|
+
// ============================================================================
|
|
400
|
+
// USER CONFIG
|
|
401
|
+
// ============================================================================
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Load user configuration from credential files.
|
|
405
|
+
* Checks multiple locations in priority order:
|
|
406
|
+
* 1. ~/.vibecheck/auth.json (new unified format)
|
|
407
|
+
* 2. ~/.vibecheck/credentials.json (legacy TS CLI)
|
|
408
|
+
* 3. ~/.config/vibecheck/config.json (legacy JS CLI)
|
|
409
|
+
*
|
|
410
|
+
* @returns {Promise<{apiKey?: string, email?: string}|null>}
|
|
411
|
+
*/
|
|
412
|
+
async function loadUserConfig() {
|
|
413
|
+
const locations = [
|
|
414
|
+
// New unified auth file (highest priority)
|
|
415
|
+
path.join(os.homedir(), '.vibecheck', 'auth.json'),
|
|
416
|
+
// Legacy credentials file
|
|
417
|
+
path.join(os.homedir(), '.vibecheck', 'credentials.json'),
|
|
418
|
+
// Legacy config file (Unix)
|
|
419
|
+
path.join(os.homedir(), '.config', 'vibecheck', 'config.json'),
|
|
420
|
+
];
|
|
421
|
+
|
|
422
|
+
// Windows legacy location
|
|
423
|
+
if (process.platform === 'win32' && process.env.APPDATA) {
|
|
424
|
+
locations.push(path.join(process.env.APPDATA, 'vibecheck', 'config.json'));
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
for (const configPath of locations) {
|
|
428
|
+
try {
|
|
429
|
+
const data = await fs.readFile(configPath, 'utf-8');
|
|
430
|
+
const config = JSON.parse(data);
|
|
431
|
+
if (config?.apiKey) {
|
|
432
|
+
return config;
|
|
433
|
+
}
|
|
434
|
+
} catch {
|
|
435
|
+
// Try next location
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
return null;
|
|
441
|
+
}
|
|
442
|
+
|
|
329
443
|
// ============================================================================
|
|
330
444
|
// ACCESS CONTROL
|
|
331
445
|
// ============================================================================
|
|
@@ -410,6 +524,34 @@ export function canApproveAuthority(tier) {
|
|
|
410
524
|
return tier === 'pro';
|
|
411
525
|
}
|
|
412
526
|
|
|
527
|
+
/**
|
|
528
|
+
* Resolve API key from multiple sources
|
|
529
|
+
* Priority: 1. Passed directly 2. Environment variable 3. Credentials file
|
|
530
|
+
*
|
|
531
|
+
* @param {string} apiKey - API key passed directly (optional)
|
|
532
|
+
* @returns {Promise<{apiKey: string|null, source: string}>}
|
|
533
|
+
*/
|
|
534
|
+
export async function resolveApiKey(apiKey) {
|
|
535
|
+
// 1. Use directly provided API key
|
|
536
|
+
if (apiKey && typeof apiKey === 'string' && apiKey.length >= 10) {
|
|
537
|
+
return { apiKey, source: 'args' };
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
// 2. Check environment variable
|
|
541
|
+
const envKey = process.env.VIBECHECK_API_KEY;
|
|
542
|
+
if (envKey && typeof envKey === 'string' && envKey.length >= 10) {
|
|
543
|
+
return { apiKey: envKey, source: 'env' };
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
// 3. Check credentials file
|
|
547
|
+
const config = await loadUserConfig();
|
|
548
|
+
if (config?.apiKey && typeof config.apiKey === 'string' && config.apiKey.length >= 10) {
|
|
549
|
+
return { apiKey: config.apiKey, source: 'credentials' };
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
return { apiKey: null, source: 'none' };
|
|
553
|
+
}
|
|
554
|
+
|
|
413
555
|
/**
|
|
414
556
|
* Get MCP tool access with full ErrorEnvelope support
|
|
415
557
|
*
|
|
@@ -419,18 +561,30 @@ export function canApproveAuthority(tier) {
|
|
|
419
561
|
* @returns {Promise<{hasAccess: boolean, tier: string, error?: object}>}
|
|
420
562
|
*/
|
|
421
563
|
export async function getMcpToolAccess(toolName, apiKey, args = {}) {
|
|
422
|
-
|
|
564
|
+
// Resolve API key from multiple sources
|
|
565
|
+
const resolved = await resolveApiKey(apiKey);
|
|
566
|
+
const resolvedApiKey = resolved.apiKey;
|
|
567
|
+
const hasApiKey = resolvedApiKey !== null;
|
|
568
|
+
|
|
569
|
+
const tier = await getTierFromApiKey(resolvedApiKey);
|
|
423
570
|
|
|
424
571
|
// Check tool-level access
|
|
425
572
|
const hasToolAccess = canAccessTool(tier, toolName);
|
|
426
573
|
|
|
427
574
|
if (!hasToolAccess) {
|
|
575
|
+
// Check if this is a PRO tool and no API key was provided
|
|
576
|
+
const isPROTool = PRO_TOOLS.includes(toolName);
|
|
577
|
+
|
|
428
578
|
return {
|
|
429
579
|
hasAccess: false,
|
|
430
580
|
tier,
|
|
581
|
+
hasApiKey,
|
|
582
|
+
apiKeySource: resolved.source,
|
|
431
583
|
firewallMode: getFirewallMode(tier),
|
|
432
|
-
error: notEntitledError(toolName, tier, 'pro'),
|
|
433
|
-
reason:
|
|
584
|
+
error: notEntitledError(toolName, tier, 'pro', hasApiKey),
|
|
585
|
+
reason: hasApiKey
|
|
586
|
+
? `${toolName} requires Pro ($49/mo). Upgrade at https://vibecheckai.dev/pricing`
|
|
587
|
+
: `${toolName} requires Pro. Add your API key first: run 'vibecheck login' or pass apiKey in tool arguments.`,
|
|
434
588
|
};
|
|
435
589
|
}
|
|
436
590
|
|
|
@@ -440,6 +594,8 @@ export async function getMcpToolAccess(toolName, apiKey, args = {}) {
|
|
|
440
594
|
return {
|
|
441
595
|
hasAccess: false,
|
|
442
596
|
tier,
|
|
597
|
+
hasApiKey,
|
|
598
|
+
apiKeySource: resolved.source,
|
|
443
599
|
firewallMode: getFirewallMode(tier),
|
|
444
600
|
error: optionNotEntitledError(toolName, optionCheck.blockedOption, tier, optionCheck.required),
|
|
445
601
|
reason: `Option --${optionCheck.blockedOption} requires Pro`,
|
|
@@ -449,6 +605,8 @@ export async function getMcpToolAccess(toolName, apiKey, args = {}) {
|
|
|
449
605
|
return {
|
|
450
606
|
hasAccess: true,
|
|
451
607
|
tier,
|
|
608
|
+
hasApiKey,
|
|
609
|
+
apiKeySource: resolved.source,
|
|
452
610
|
firewallMode: getFirewallMode(tier),
|
|
453
611
|
reason: 'Access granted',
|
|
454
612
|
};
|
|
@@ -515,16 +673,6 @@ export async function checkTierGate(toolName, apiKey, args = {}) {
|
|
|
515
673
|
// USER INFO
|
|
516
674
|
// ============================================================================
|
|
517
675
|
|
|
518
|
-
async function loadUserConfig() {
|
|
519
|
-
try {
|
|
520
|
-
const configPath = path.join(os.homedir(), '.vibecheck', 'credentials.json');
|
|
521
|
-
const data = await fs.readFile(configPath, 'utf-8');
|
|
522
|
-
return JSON.parse(data);
|
|
523
|
-
} catch {
|
|
524
|
-
return null;
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
|
|
528
676
|
export async function getUserInfo() {
|
|
529
677
|
const config = await loadUserConfig();
|
|
530
678
|
|
package/mcp-server/tools-v3.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Simple 2-tier model:
|
|
9
9
|
* - FREE ($0): Inspect & Observe (10 tools)
|
|
10
|
-
* - PRO ($
|
|
10
|
+
* - PRO ($49/mo): Fix, Prove & Enforce (18 tools)
|
|
11
11
|
*
|
|
12
12
|
* PRO includes:
|
|
13
13
|
* - Authority System (verdicts, approvals)
|
|
@@ -356,7 +356,7 @@ Response:
|
|
|
356
356
|
Returns evidence-backed verdict.
|
|
357
357
|
Response includes cacheStats: { hit, reusedFindingsCount, durationMs }
|
|
358
358
|
|
|
359
|
-
[PRO - $
|
|
359
|
+
[PRO - $49/mo]`,
|
|
360
360
|
inputSchema: {
|
|
361
361
|
type: "object",
|
|
362
362
|
properties: {
|
|
@@ -381,7 +381,7 @@ Response includes cacheStats: { hit, reusedFindingsCount, durationMs }
|
|
|
381
381
|
|
|
382
382
|
Modes: plan, apply, loop
|
|
383
383
|
|
|
384
|
-
[PRO - $
|
|
384
|
+
[PRO - $49/mo]`,
|
|
385
385
|
inputSchema: {
|
|
386
386
|
type: "object",
|
|
387
387
|
properties: {
|
|
@@ -396,7 +396,7 @@ Modes: plan, apply, loop
|
|
|
396
396
|
name: "vibecheck.prove",
|
|
397
397
|
description: `๐ฌ Full proof loop with runtime verification
|
|
398
398
|
|
|
399
|
-
[PRO - $
|
|
399
|
+
[PRO - $49/mo]`,
|
|
400
400
|
inputSchema: {
|
|
401
401
|
type: "object",
|
|
402
402
|
properties: {
|
|
@@ -410,7 +410,7 @@ Modes: plan, apply, loop
|
|
|
410
410
|
|
|
411
411
|
{
|
|
412
412
|
name: "vibecheck.gate",
|
|
413
|
-
description: `๐ง CI/CD enforcement - fail builds on issues [PRO - $
|
|
413
|
+
description: `๐ง CI/CD enforcement - fail builds on issues [PRO - $49/mo]`,
|
|
414
414
|
inputSchema: {
|
|
415
415
|
type: "object",
|
|
416
416
|
properties: {
|
|
@@ -422,7 +422,7 @@ Modes: plan, apply, loop
|
|
|
422
422
|
|
|
423
423
|
{
|
|
424
424
|
name: "vibecheck.badge",
|
|
425
|
-
description: `๐ท๏ธ Generate ship badge [PRO - $
|
|
425
|
+
description: `๐ท๏ธ Generate ship badge [PRO - $49/mo]`,
|
|
426
426
|
inputSchema: {
|
|
427
427
|
type: "object",
|
|
428
428
|
properties: {
|
|
@@ -434,7 +434,7 @@ Modes: plan, apply, loop
|
|
|
434
434
|
|
|
435
435
|
{
|
|
436
436
|
name: "vibecheck.reality",
|
|
437
|
-
description: `๐งช Full runtime verification with auth boundary testing [PRO - $
|
|
437
|
+
description: `๐งช Full runtime verification with auth boundary testing [PRO - $49/mo]`,
|
|
438
438
|
inputSchema: {
|
|
439
439
|
type: "object",
|
|
440
440
|
properties: {
|
|
@@ -449,7 +449,7 @@ Modes: plan, apply, loop
|
|
|
449
449
|
|
|
450
450
|
{
|
|
451
451
|
name: "vibecheck.ai_test",
|
|
452
|
-
description: `๐ค AI agent testing - autonomous exploration [PRO - $
|
|
452
|
+
description: `๐ค AI agent testing - autonomous exploration [PRO - $49/mo]`,
|
|
453
453
|
inputSchema: {
|
|
454
454
|
type: "object",
|
|
455
455
|
properties: {
|
|
@@ -463,7 +463,7 @@ Modes: plan, apply, loop
|
|
|
463
463
|
|
|
464
464
|
{
|
|
465
465
|
name: "vibecheck.share",
|
|
466
|
-
description: `๐ค Generate PR/review bundle [PRO - $
|
|
466
|
+
description: `๐ค Generate PR/review bundle [PRO - $49/mo]`,
|
|
467
467
|
inputSchema: {
|
|
468
468
|
type: "object",
|
|
469
469
|
properties: {
|
|
@@ -483,7 +483,7 @@ Modes: plan, apply, loop
|
|
|
483
483
|
|
|
484
484
|
Execute an authority to get a structured verdict with proofs.
|
|
485
485
|
|
|
486
|
-
[PRO - $
|
|
486
|
+
[PRO - $49/mo]`,
|
|
487
487
|
inputSchema: {
|
|
488
488
|
type: "object",
|
|
489
489
|
properties: {
|
|
@@ -505,7 +505,7 @@ Execute an authority to get a structured verdict with proofs.
|
|
|
505
505
|
|
|
506
506
|
Call this at the start of any multi-agent workflow.
|
|
507
507
|
|
|
508
|
-
[PRO - $
|
|
508
|
+
[PRO - $49/mo]`,
|
|
509
509
|
inputSchema: {
|
|
510
510
|
type: "object",
|
|
511
511
|
properties: {
|
|
@@ -523,7 +523,7 @@ Call this at the start of any multi-agent workflow.
|
|
|
523
523
|
|
|
524
524
|
Prevents concurrent modifications by other agents.
|
|
525
525
|
|
|
526
|
-
[PRO - $
|
|
526
|
+
[PRO - $49/mo]`,
|
|
527
527
|
inputSchema: {
|
|
528
528
|
type: "object",
|
|
529
529
|
properties: {
|
|
@@ -538,7 +538,7 @@ Prevents concurrent modifications by other agents.
|
|
|
538
538
|
|
|
539
539
|
{
|
|
540
540
|
name: "vibecheck_conductor_release_lock",
|
|
541
|
-
description: `๐ Release a previously acquired lock [PRO - $
|
|
541
|
+
description: `๐ Release a previously acquired lock [PRO - $49/mo]`,
|
|
542
542
|
inputSchema: {
|
|
543
543
|
type: "object",
|
|
544
544
|
properties: {
|
|
@@ -555,7 +555,7 @@ Prevents concurrent modifications by other agents.
|
|
|
555
555
|
|
|
556
556
|
Checks for conflicts with other agents before proceeding.
|
|
557
557
|
|
|
558
|
-
[PRO - $
|
|
558
|
+
[PRO - $49/mo]`,
|
|
559
559
|
inputSchema: {
|
|
560
560
|
type: "object",
|
|
561
561
|
properties: {
|
|
@@ -581,7 +581,7 @@ Checks for conflicts with other agents before proceeding.
|
|
|
581
581
|
|
|
582
582
|
{
|
|
583
583
|
name: "vibecheck_conductor_terminate",
|
|
584
|
-
description: `๐ Terminate agent session and release all locks [PRO - $
|
|
584
|
+
description: `๐ Terminate agent session and release all locks [PRO - $49/mo]`,
|
|
585
585
|
inputSchema: {
|
|
586
586
|
type: "object",
|
|
587
587
|
properties: {
|
|
@@ -611,7 +611,7 @@ Features:
|
|
|
611
611
|
|
|
612
612
|
Call BEFORE any file write operations.
|
|
613
613
|
|
|
614
|
-
[PRO - $
|
|
614
|
+
[PRO - $49/mo]`,
|
|
615
615
|
inputSchema: {
|
|
616
616
|
type: "object",
|
|
617
617
|
required: ["agentId", "filePath", "content"],
|
|
@@ -625,6 +625,60 @@ Call BEFORE any file write operations.
|
|
|
625
625
|
},
|
|
626
626
|
},
|
|
627
627
|
},
|
|
628
|
+
|
|
629
|
+
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
630
|
+
// INTENT FIREWALL v2 (PRO) - Intent-Aware BLOCKING Enforcement
|
|
631
|
+
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
632
|
+
|
|
633
|
+
{
|
|
634
|
+
name: "vibecheck_intent_firewall_intercept",
|
|
635
|
+
description: `๐ก๏ธ Intent-Aware Firewall v2 - BLOCKING enforcement
|
|
636
|
+
|
|
637
|
+
Intercepts AI code changes and BLOCKS unless:
|
|
638
|
+
1. User intent is declared (via vibecheck intent set)
|
|
639
|
+
2. Changes align with declared intent
|
|
640
|
+
3. Reality proofs pass
|
|
641
|
+
|
|
642
|
+
โ ๏ธ If no intent is declared, ALL CHANGES ARE BLOCKED.
|
|
643
|
+
|
|
644
|
+
This is enforcement infrastructure that cannot be bypassed.
|
|
645
|
+
Declare intent BEFORE making AI changes:
|
|
646
|
+
vibecheck intent set -s "Your intent"
|
|
647
|
+
|
|
648
|
+
Returns: { decision: "PASS"|"BLOCK", violations, intent_hash }
|
|
649
|
+
|
|
650
|
+
[PRO - $49/mo]`,
|
|
651
|
+
inputSchema: {
|
|
652
|
+
type: "object",
|
|
653
|
+
required: ["agentId", "filePath", "content"],
|
|
654
|
+
properties: {
|
|
655
|
+
agentId: { type: "string", description: "Agent ID" },
|
|
656
|
+
filePath: { type: "string", description: "File to write" },
|
|
657
|
+
content: { type: "string", description: "New content" },
|
|
658
|
+
oldContent: { type: "string", description: "Old content (for diff)" },
|
|
659
|
+
intent: { type: "string", description: "Agent's stated intent (NOT user intent)" },
|
|
660
|
+
projectRoot: { type: "string" },
|
|
661
|
+
},
|
|
662
|
+
},
|
|
663
|
+
},
|
|
664
|
+
|
|
665
|
+
{
|
|
666
|
+
name: "vibecheck_intent_status",
|
|
667
|
+
description: `๐ Get current intent status for Agent Firewall v2
|
|
668
|
+
|
|
669
|
+
Shows whether intent is declared and what changes are allowed.
|
|
670
|
+
Use this BEFORE making AI changes to understand constraints.
|
|
671
|
+
|
|
672
|
+
Returns: { hasIntent, summary, constraints, allowed_changes, hash }
|
|
673
|
+
|
|
674
|
+
[FREE]`,
|
|
675
|
+
inputSchema: {
|
|
676
|
+
type: "object",
|
|
677
|
+
properties: {
|
|
678
|
+
projectRoot: { type: "string", default: "." },
|
|
679
|
+
},
|
|
680
|
+
},
|
|
681
|
+
},
|
|
628
682
|
];
|
|
629
683
|
|
|
630
684
|
// =============================================================================
|
package/package.json
CHANGED
package/bin/runners/runProof.zip
DELETED
|
Binary file
|