@vibecheckai/cli 3.9.1 → 4.0.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.
Files changed (85) hide show
  1. package/README.md +1 -1
  2. package/bin/runners/context/generators/cursor-enhanced.js +99 -13
  3. package/mcp-server/.eslintrc.json +24 -0
  4. package/mcp-server/README.md +425 -135
  5. package/mcp-server/SPEC.md +583 -0
  6. package/mcp-server/configs/README.md +172 -0
  7. package/mcp-server/configs/claude-desktop-pro.json +31 -0
  8. package/mcp-server/configs/claude-desktop-with-workspace.json +25 -0
  9. package/mcp-server/configs/claude-desktop.json +19 -0
  10. package/mcp-server/configs/cursor-mcp.json +21 -0
  11. package/mcp-server/configs/windsurf-mcp.json +17 -0
  12. package/mcp-server/mcp-config.example.json +9 -0
  13. package/mcp-server/package.json +49 -34
  14. package/mcp-server/src/cli.ts +185 -0
  15. package/mcp-server/src/index.ts +85 -0
  16. package/mcp-server/src/server.ts +1933 -0
  17. package/mcp-server/src/services/cache-service.ts +466 -0
  18. package/mcp-server/src/services/cli-service.ts +345 -0
  19. package/mcp-server/src/services/context-manager.ts +717 -0
  20. package/mcp-server/src/services/firewall-service.ts +662 -0
  21. package/mcp-server/src/services/git-service.ts +671 -0
  22. package/mcp-server/src/services/index.ts +52 -0
  23. package/mcp-server/src/services/prompt-builder-service.ts +1031 -0
  24. package/mcp-server/src/services/session-service.ts +550 -0
  25. package/mcp-server/src/services/tier-service.ts +470 -0
  26. package/mcp-server/src/types.ts +351 -0
  27. package/mcp-server/tsconfig.json +16 -27
  28. package/package.json +6 -6
  29. package/mcp-server/.guardrail/audit/audit.log.jsonl +0 -2
  30. package/mcp-server/.specs/architecture.mdc +0 -90
  31. package/mcp-server/.specs/security.mdc +0 -30
  32. package/mcp-server/HARDENING_SUMMARY.md +0 -299
  33. package/mcp-server/agent-checkpoint.js +0 -364
  34. package/mcp-server/agent-firewall-interceptor.js +0 -500
  35. package/mcp-server/architect-tools.js +0 -707
  36. package/mcp-server/audit-mcp.js +0 -206
  37. package/mcp-server/authority-tools.js +0 -569
  38. package/mcp-server/codebase-architect-tools.js +0 -838
  39. package/mcp-server/conductor/conflict-resolver.js +0 -588
  40. package/mcp-server/conductor/execution-planner.js +0 -544
  41. package/mcp-server/conductor/index.js +0 -377
  42. package/mcp-server/conductor/lock-manager.js +0 -615
  43. package/mcp-server/conductor/request-queue.js +0 -550
  44. package/mcp-server/conductor/session-manager.js +0 -500
  45. package/mcp-server/conductor/tools.js +0 -510
  46. package/mcp-server/consolidated-tools.js +0 -1170
  47. package/mcp-server/deprecation-middleware.js +0 -282
  48. package/mcp-server/handlers/index.ts +0 -15
  49. package/mcp-server/handlers/tool-handler.ts +0 -593
  50. package/mcp-server/hygiene-tools.js +0 -428
  51. package/mcp-server/index-v1.js +0 -698
  52. package/mcp-server/index.js +0 -2940
  53. package/mcp-server/intelligence-tools.js +0 -664
  54. package/mcp-server/intent-drift-tools.js +0 -873
  55. package/mcp-server/intent-firewall-interceptor.js +0 -529
  56. package/mcp-server/lib/api-client.cjs +0 -13
  57. package/mcp-server/lib/cache-wrapper.cjs +0 -383
  58. package/mcp-server/lib/error-envelope.js +0 -138
  59. package/mcp-server/lib/executor.ts +0 -499
  60. package/mcp-server/lib/index.ts +0 -29
  61. package/mcp-server/lib/logger.cjs +0 -30
  62. package/mcp-server/lib/rate-limiter.js +0 -166
  63. package/mcp-server/lib/sandbox.test.ts +0 -519
  64. package/mcp-server/lib/sandbox.ts +0 -395
  65. package/mcp-server/lib/types.ts +0 -267
  66. package/mcp-server/logger.js +0 -173
  67. package/mcp-server/manifest.json +0 -473
  68. package/mcp-server/mdc-generator.js +0 -298
  69. package/mcp-server/premium-tools.js +0 -1275
  70. package/mcp-server/proof-tools.js +0 -571
  71. package/mcp-server/registry/tool-registry.js +0 -586
  72. package/mcp-server/registry/tools.json +0 -619
  73. package/mcp-server/registry.test.ts +0 -340
  74. package/mcp-server/test-mcp.js +0 -108
  75. package/mcp-server/test-tools.js +0 -36
  76. package/mcp-server/tests/tier-gating.test.js +0 -297
  77. package/mcp-server/tier-auth.js +0 -767
  78. package/mcp-server/tools/index.js +0 -72
  79. package/mcp-server/tools-reorganized.ts +0 -244
  80. package/mcp-server/tools-v3.js +0 -1004
  81. package/mcp-server/truth-context.js +0 -622
  82. package/mcp-server/truth-firewall-tools.js +0 -2183
  83. package/mcp-server/vibecheck-2.0-tools.js +0 -761
  84. package/mcp-server/vibecheck-mcp-server-3.2.0.tgz +0 -0
  85. package/mcp-server/vibecheck-tools.js +0 -1075
package/README.md CHANGED
@@ -216,4 +216,4 @@ MIT © Vibecheck AI
216
216
 
217
217
  ---
218
218
 
219
- **[Documentation](https://vibecheckai.dev/docs)** · **[Discord](https://discord.gg/vibecheck)** · **[GitHub](https://github.com/vibecheck-oss/vibecheck)**
219
+ **[Documentation](https://vibecheckai.dev/docs)** · **[Discord](https://discord.gg/vibecheck)** · **[GitHub](https://github.com/guardiavault-oss/VIBEYCHECK)**
@@ -2375,6 +2375,14 @@ function generateCursorHooks(analysis, truthpack = null) {
2375
2375
 
2376
2376
  /**
2377
2377
  * Write all enhanced context files to disk
2378
+ *
2379
+ * NOTE: Cursor only supports these file formats:
2380
+ * - Rules: .cursor/rules/*.mdc
2381
+ * - Skills: .cursor/skills/<name>/SKILL.md
2382
+ *
2383
+ * Agents and Hooks are NOT native Cursor features, so we convert them:
2384
+ * - Agents → Skills (procedural workflows)
2385
+ * - Hooks → Rules (contextual guidelines)
2378
2386
  */
2379
2387
  function writeEnhancedContext(projectPath, analysis, truthpack = null) {
2380
2388
  const written = [];
@@ -2394,7 +2402,7 @@ function writeEnhancedContext(projectPath, analysis, truthpack = null) {
2394
2402
  written.push(`.cursor/rules/${name}.mdc`);
2395
2403
  }
2396
2404
 
2397
- // 3. Write Skills
2405
+ // 3. Write Skills (native Cursor format)
2398
2406
  const skills = generateCursorSkills(analysis, truthpack);
2399
2407
  for (const [name, skill] of Object.entries(skills)) {
2400
2408
  const skillDir = path.dirname(path.join(projectPath, skill.path));
@@ -2403,29 +2411,107 @@ function writeEnhancedContext(projectPath, analysis, truthpack = null) {
2403
2411
  written.push(skill.path);
2404
2412
  }
2405
2413
 
2406
- // 4. Write ELITE Subagents
2414
+ // 4. Write Subagents AS SKILLS (Cursor doesn't support .cursor/agents/)
2415
+ // Converting agents to skills format for proper Cursor recognition
2407
2416
  const agents = generateCursorSubagents(analysis, truthpack);
2408
- const agentsDir = path.join(projectPath, ".cursor", "agents");
2409
- fs.mkdirSync(agentsDir, { recursive: true });
2410
-
2411
2417
  for (const [name, agent] of Object.entries(agents)) {
2412
- fs.writeFileSync(path.join(projectPath, agent.path), agent.content);
2413
- written.push(agent.path);
2418
+ // Convert agent path from .cursor/agents/X.md to .cursor/skills/X/SKILL.md
2419
+ const skillName = name.replace(/[^a-z0-9-]/g, '-');
2420
+ const skillPath = `.cursor/skills/${skillName}/SKILL.md`;
2421
+ const skillDir = path.dirname(path.join(projectPath, skillPath));
2422
+ fs.mkdirSync(skillDir, { recursive: true });
2423
+
2424
+ // Convert agent content to skill format
2425
+ const skillContent = convertAgentToSkill(agent, name, analysis);
2426
+ fs.writeFileSync(path.join(projectPath, skillPath), skillContent);
2427
+ written.push(skillPath);
2414
2428
  }
2415
2429
 
2416
- // 5. Write Hooks (NEW!)
2430
+ // 5. Write Hooks AS RULES (Cursor doesn't support .cursor/hooks/)
2431
+ // Converting hooks to rules format for proper Cursor recognition
2417
2432
  const hooks = generateCursorHooks(analysis, truthpack);
2418
- const hooksDir = path.join(projectPath, ".cursor", "hooks");
2419
- fs.mkdirSync(hooksDir, { recursive: true });
2420
-
2421
2433
  for (const [name, hook] of Object.entries(hooks)) {
2422
- fs.writeFileSync(path.join(projectPath, hook.path), hook.content);
2423
- written.push(hook.path);
2434
+ // Convert hook to rule format
2435
+ const ruleName = `hook-${name}`;
2436
+ const rulePath = path.join(rulesDir, `${ruleName}.mdc`);
2437
+ const ruleContent = convertHookToRule(hook, name, analysis);
2438
+ fs.writeFileSync(rulePath, ruleContent);
2439
+ written.push(`.cursor/rules/${ruleName}.mdc`);
2424
2440
  }
2425
2441
 
2426
2442
  return written;
2427
2443
  }
2428
2444
 
2445
+ /**
2446
+ * Convert an agent definition to a Cursor skill format
2447
+ */
2448
+ function convertAgentToSkill(agent, name, analysis) {
2449
+ // Extract description from the agent's frontmatter
2450
+ const descMatch = agent.content.match(/description:\s*(.+)/);
2451
+ const description = descMatch ? descMatch[1].trim() : `${name} workflow for ${analysis.name}`;
2452
+
2453
+ // Clean description for SKILL.md format (must be specific and include "when to use")
2454
+ const cleanDescription = description
2455
+ .replace(/^Elite\s+/i, '')
2456
+ .replace(/for\s+\$\{analysis\.name\}/g, `for ${analysis.name}`);
2457
+
2458
+ // Build the skill content with proper frontmatter
2459
+ return `---
2460
+ name: ${name}
2461
+ description: ${cleanDescription}. Use when asked about ${name.replace(/-/g, ' ')} or related tasks.
2462
+ ---
2463
+
2464
+ ${agent.content.replace(/^---[\s\S]*?---\n*/m, '')}`;
2465
+ }
2466
+
2467
+ /**
2468
+ * Convert a hook definition to a Cursor rule (.mdc) format
2469
+ */
2470
+ function convertHookToRule(hook, name, analysis) {
2471
+ // Extract trigger info from hook
2472
+ const triggerMatch = hook.content.match(/trigger:\s*(.+)/);
2473
+ const trigger = triggerMatch ? triggerMatch[1].trim() : 'contextual';
2474
+
2475
+ // Determine appropriate globs and alwaysApply based on hook type
2476
+ let globs = '[]';
2477
+ let alwaysApply = 'false';
2478
+ let priority = 60;
2479
+
2480
+ if (name.includes('commit') || name.includes('pr')) {
2481
+ alwaysApply = 'true';
2482
+ priority = 75;
2483
+ } else if (name.includes('save') || name.includes('lint')) {
2484
+ globs = '["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"]';
2485
+ priority = 65;
2486
+ } else if (name.includes('test')) {
2487
+ globs = '["**/*.test.*", "**/*.spec.*", "**/test/**", "**/__tests__/**"]';
2488
+ priority = 70;
2489
+ } else if (name.includes('scaffold') || name.includes('new-file')) {
2490
+ alwaysApply = 'true';
2491
+ priority = 50;
2492
+ }
2493
+
2494
+ // Extract content without the old frontmatter
2495
+ const contentWithoutFrontmatter = hook.content.replace(/^---[\s\S]*?---\n*/m, '');
2496
+
2497
+ // Build MDC rule format
2498
+ return `---
2499
+ description: "${name.replace(/-/g, ' ')} guidelines (converted from hook: ${trigger})"
2500
+ globs: ${globs}
2501
+ alwaysApply: ${alwaysApply}
2502
+ priority: ${priority}
2503
+ ---
2504
+
2505
+ > 📋 **Context Enhanced by vibecheck AI** - Auto-generated from workflow hook
2506
+ > When using this context, acknowledge: "Using vibecheck-enhanced context for ${name}"
2507
+
2508
+ ${contentWithoutFrontmatter}
2509
+
2510
+ ---
2511
+ *Converted from hook to rule for Cursor compatibility - Generated by Forge v1.0*
2512
+ `;
2513
+ }
2514
+
2429
2515
  module.exports = {
2430
2516
  generateCursorRulesEnhanced,
2431
2517
  generateCursorModularRulesEnhanced,
@@ -0,0 +1,24 @@
1
+ {
2
+ "root": true,
3
+ "parser": "@typescript-eslint/parser",
4
+ "parserOptions": {
5
+ "ecmaVersion": 2022,
6
+ "sourceType": "module",
7
+ "project": "./tsconfig.json"
8
+ },
9
+ "plugins": ["@typescript-eslint"],
10
+ "extends": [
11
+ "eslint:recommended",
12
+ "plugin:@typescript-eslint/recommended"
13
+ ],
14
+ "rules": {
15
+ "@typescript-eslint/no-explicit-any": "warn",
16
+ "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
17
+ "@typescript-eslint/explicit-function-return-type": "off",
18
+ "no-console": ["warn", { "allow": ["error", "warn"] }]
19
+ },
20
+ "env": {
21
+ "node": true,
22
+ "es2022": true
23
+ }
24
+ }