@vibecheckai/cli 3.2.6 → 3.4.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 (89) hide show
  1. package/bin/registry.js +306 -90
  2. package/bin/runners/lib/agent-firewall/change-packet/builder.js +280 -6
  3. package/bin/runners/lib/agent-firewall/critic/index.js +151 -0
  4. package/bin/runners/lib/agent-firewall/critic/judge.js +432 -0
  5. package/bin/runners/lib/agent-firewall/critic/prompts.js +305 -0
  6. package/bin/runners/lib/agent-firewall/lawbook/distributor.js +465 -0
  7. package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +604 -0
  8. package/bin/runners/lib/agent-firewall/lawbook/index.js +304 -0
  9. package/bin/runners/lib/agent-firewall/lawbook/registry.js +514 -0
  10. package/bin/runners/lib/agent-firewall/lawbook/schema.js +420 -0
  11. package/bin/runners/lib/agent-firewall/logger.js +141 -0
  12. package/bin/runners/lib/agent-firewall/policy/loader.js +312 -4
  13. package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +113 -1
  14. package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +133 -6
  15. package/bin/runners/lib/agent-firewall/proposal/extractor.js +394 -0
  16. package/bin/runners/lib/agent-firewall/proposal/index.js +212 -0
  17. package/bin/runners/lib/agent-firewall/proposal/schema.js +251 -0
  18. package/bin/runners/lib/agent-firewall/proposal/validator.js +386 -0
  19. package/bin/runners/lib/agent-firewall/reality/index.js +332 -0
  20. package/bin/runners/lib/agent-firewall/reality/state.js +625 -0
  21. package/bin/runners/lib/agent-firewall/reality/watcher.js +322 -0
  22. package/bin/runners/lib/agent-firewall/risk/index.js +173 -0
  23. package/bin/runners/lib/agent-firewall/risk/scorer.js +328 -0
  24. package/bin/runners/lib/agent-firewall/risk/thresholds.js +321 -0
  25. package/bin/runners/lib/agent-firewall/risk/vectors.js +421 -0
  26. package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +472 -0
  27. package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +346 -0
  28. package/bin/runners/lib/agent-firewall/simulator/index.js +181 -0
  29. package/bin/runners/lib/agent-firewall/simulator/route-validator.js +380 -0
  30. package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +661 -0
  31. package/bin/runners/lib/agent-firewall/time-machine/index.js +267 -0
  32. package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +436 -0
  33. package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +490 -0
  34. package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +530 -0
  35. package/bin/runners/lib/analyzers.js +136 -141
  36. package/bin/runners/lib/authority-badge.js +425 -0
  37. package/bin/runners/lib/cli-output.js +7 -1
  38. package/bin/runners/lib/entitlements-v2.js +96 -505
  39. package/bin/runners/lib/error-handler.js +16 -9
  40. package/bin/runners/lib/exit-codes.js +275 -0
  41. package/bin/runners/lib/global-flags.js +37 -0
  42. package/bin/runners/lib/help-formatter.js +413 -0
  43. package/bin/runners/lib/logger.js +38 -0
  44. package/bin/runners/lib/scan-output.js +18 -19
  45. package/bin/runners/lib/ship-output.js +18 -25
  46. package/bin/runners/lib/unified-cli-output.js +604 -0
  47. package/bin/runners/lib/upsell.js +105 -205
  48. package/bin/runners/runApprove.js +1200 -0
  49. package/bin/runners/runAuth.js +324 -95
  50. package/bin/runners/runCheckpoint.js +39 -21
  51. package/bin/runners/runClassify.js +859 -0
  52. package/bin/runners/runContext.js +136 -24
  53. package/bin/runners/runDoctor.js +108 -68
  54. package/bin/runners/runFix.js +6 -5
  55. package/bin/runners/runGuard.js +212 -118
  56. package/bin/runners/runInit.js +3 -2
  57. package/bin/runners/runMcp.js +130 -52
  58. package/bin/runners/runPolish.js +43 -20
  59. package/bin/runners/runProve.js +1 -2
  60. package/bin/runners/runReport.js +3 -2
  61. package/bin/runners/runScan.js +77 -45
  62. package/bin/runners/runShip.js +3 -4
  63. package/bin/runners/runValidate.js +19 -2
  64. package/bin/runners/runWatch.js +104 -53
  65. package/bin/vibecheck.js +103 -21
  66. package/mcp-server/HARDENING_SUMMARY.md +299 -0
  67. package/mcp-server/agent-firewall-interceptor.js +367 -31
  68. package/mcp-server/authority-tools.js +569 -0
  69. package/mcp-server/conductor/conflict-resolver.js +588 -0
  70. package/mcp-server/conductor/execution-planner.js +544 -0
  71. package/mcp-server/conductor/index.js +377 -0
  72. package/mcp-server/conductor/lock-manager.js +615 -0
  73. package/mcp-server/conductor/request-queue.js +550 -0
  74. package/mcp-server/conductor/session-manager.js +500 -0
  75. package/mcp-server/conductor/tools.js +510 -0
  76. package/mcp-server/index.js +1152 -856
  77. package/mcp-server/lib/api-client.cjs +13 -0
  78. package/mcp-server/lib/logger.cjs +30 -0
  79. package/mcp-server/logger.js +173 -0
  80. package/mcp-server/package.json +2 -2
  81. package/mcp-server/premium-tools.js +2 -2
  82. package/mcp-server/tier-auth.js +194 -383
  83. package/mcp-server/tools-v3.js +495 -533
  84. package/mcp-server/truth-firewall-tools.js +145 -15
  85. package/mcp-server/vibecheck-tools.js +2 -2
  86. package/package.json +2 -3
  87. package/mcp-server/index.old.js +0 -4137
  88. package/mcp-server/lib/api-client.js +0 -269
  89. package/mcp-server/package-lock.json +0 -165
@@ -1,269 +0,0 @@
1
- /**
2
- * API Client for Vibecheck Dashboard Integration
3
- *
4
- * Handles communication with the web dashboard API for:
5
- * - Creating scan records
6
- * - Updating scan progress
7
- * - Submitting scan results
8
- * - Broadcasting real-time updates
9
- */
10
-
11
- "use strict";
12
-
13
- const https = require("https");
14
- const http = require("http");
15
- const { logger } = require("./logger");
16
-
17
- // Configuration
18
- const API_BASE_URL = process.env.VIBECHECK_API_URL || "https://api.vibecheckai.dev";
19
- const API_TIMEOUT = 30000; // 30 seconds
20
-
21
- /**
22
- * Make HTTP request to API
23
- */
24
- async function makeRequest(path, options = {}) {
25
- const url = new URL(path, API_BASE_URL);
26
- const isHttps = url.protocol === "https:";
27
- const client = isHttps ? https : http;
28
-
29
- const defaultOptions = {
30
- method: "POST",
31
- headers: {
32
- "Content-Type": "application/json",
33
- "User-Agent": "vibecheck-cli/3.3.0",
34
- },
35
- timeout: API_TIMEOUT,
36
- };
37
-
38
- const requestOptions = {
39
- ...defaultOptions,
40
- ...options,
41
- hostname: url.hostname,
42
- port: url.port || (isHttps ? 443 : 80),
43
- path: url.pathname + url.search,
44
- };
45
-
46
- // Add Authorization header if API key is available
47
- const apiKey = process.env.VIBECHECK_API_KEY || getApiKey();
48
- if (apiKey) {
49
- requestOptions.headers.Authorization = `Bearer ${apiKey}`;
50
- }
51
-
52
- return new Promise((resolve, reject) => {
53
- const req = client.request(requestOptions, (res) => {
54
- let data = "";
55
-
56
- res.on("data", (chunk) => {
57
- data += chunk;
58
- });
59
-
60
- res.on("end", () => {
61
- try {
62
- const jsonData = data ? JSON.parse(data) : {};
63
- resolve({
64
- ok: res.statusCode >= 200 && res.statusCode < 300,
65
- status: res.statusCode,
66
- data: jsonData,
67
- });
68
- } catch (err) {
69
- resolve({
70
- ok: false,
71
- status: res.statusCode,
72
- data: { error: "Invalid JSON response" },
73
- });
74
- }
75
- });
76
- });
77
-
78
- req.on("error", (err) => {
79
- logger.debug(`API request failed: ${err.message}`);
80
- resolve({
81
- ok: false,
82
- error: err.message,
83
- data: { error: err.message },
84
- });
85
- });
86
-
87
- req.on("timeout", () => {
88
- req.destroy();
89
- resolve({
90
- ok: false,
91
- error: "Request timeout",
92
- data: { error: "Request timeout" },
93
- });
94
- });
95
-
96
- if (options.body) {
97
- req.write(JSON.stringify(options.body));
98
- }
99
-
100
- req.end();
101
- });
102
- }
103
-
104
- /**
105
- * Get API key from environment or config
106
- */
107
- function getApiKey() {
108
- // Try various environment variables
109
- const envVars = [
110
- "VIBECHECK_API_KEY",
111
- "VIBECHECK_TOKEN",
112
- "API_KEY",
113
- "TOKEN",
114
- ];
115
-
116
- for (const envVar of envVars) {
117
- if (process.env[envVar]) {
118
- return process.env[envVar];
119
- }
120
- }
121
-
122
- // Try to read from config file
123
- try {
124
- const fs = require("fs");
125
- const path = require("path");
126
- const os = require("os");
127
-
128
- const configPaths = [
129
- path.join(os.homedir(), ".vibecheck", "config.json"),
130
- path.join(process.cwd(), ".vibecheckrc.json"),
131
- path.join(process.cwd(), "vibecheck.config.json"),
132
- ];
133
-
134
- for (const configPath of configPaths) {
135
- if (fs.existsSync(configPath)) {
136
- const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
137
- if (config.apiKey || config.token) {
138
- return config.apiKey || config.token;
139
- }
140
- }
141
- }
142
- } catch (err) {
143
- // Ignore config file errors
144
- }
145
-
146
- return null;
147
- }
148
-
149
- /**
150
- * Create a new scan record
151
- */
152
- async function createScan(options) {
153
- const {
154
- repositoryId,
155
- repositoryUrl,
156
- localPath,
157
- branch = "main",
158
- enableLLM = false,
159
- } = options;
160
-
161
- const response = await makeRequest("/api/scans", {
162
- body: {
163
- repositoryId,
164
- repositoryUrl,
165
- localPath,
166
- branch,
167
- enableLLM,
168
- },
169
- });
170
-
171
- if (!response.ok) {
172
- throw new Error(`Failed to create scan: ${response.data?.error || response.error}`);
173
- }
174
-
175
- return response.data.data;
176
- }
177
-
178
- /**
179
- * Update scan progress
180
- */
181
- async function updateScanProgress(scanId, progress, status = null) {
182
- const response = await makeRequest(`/api/scans/${scanId}/progress`, {
183
- body: {
184
- progress,
185
- status,
186
- },
187
- });
188
-
189
- if (!response.ok) {
190
- logger.debug(`Failed to update scan progress: ${response.data?.error || response.error}`);
191
- }
192
-
193
- return response.data;
194
- }
195
-
196
- /**
197
- * Submit scan results
198
- */
199
- async function submitScanResults(scanId, results) {
200
- const {
201
- verdict,
202
- score,
203
- findings,
204
- filesScanned,
205
- linesScanned,
206
- durationMs,
207
- metadata = {},
208
- } = results;
209
-
210
- const response = await makeRequest(`/api/scans/${scanId}/complete`, {
211
- body: {
212
- verdict,
213
- score,
214
- findings,
215
- filesScanned,
216
- linesScanned,
217
- durationMs,
218
- metadata,
219
- },
220
- });
221
-
222
- if (!response.ok) {
223
- throw new Error(`Failed to submit scan results: ${response.data?.error || response.error}`);
224
- }
225
-
226
- return response.data;
227
- }
228
-
229
- /**
230
- * Report scan error
231
- */
232
- async function reportScanError(scanId, error) {
233
- const response = await makeRequest(`/api/scans/${scanId}/error`, {
234
- body: {
235
- error: error.message || String(error),
236
- stack: error.stack,
237
- },
238
- });
239
-
240
- if (!response.ok) {
241
- logger.debug(`Failed to report scan error: ${response.data?.error || response.error}`);
242
- }
243
-
244
- return response.data;
245
- }
246
-
247
- /**
248
- * Check if API is available
249
- */
250
- async function isApiAvailable() {
251
- try {
252
- const response = await makeRequest("/api/health", {
253
- method: "GET",
254
- timeout: 5000,
255
- });
256
- return response.ok;
257
- } catch (err) {
258
- return false;
259
- }
260
- }
261
-
262
- module.exports = {
263
- createScan,
264
- updateScanProgress,
265
- submitScanResults,
266
- reportScanError,
267
- isApiAvailable,
268
- getApiKey,
269
- };
@@ -1,165 +0,0 @@
1
- {
2
- "name": "vibecheck-mcp-server",
3
- "version": "2.1.0",
4
- "lockfileVersion": 3,
5
- "requires": true,
6
- "packages": {
7
- "": {
8
- "name": "vibecheck-mcp-server",
9
- "version": "2.1.0",
10
- "license": "MIT",
11
- "dependencies": {
12
- "@modelcontextprotocol/sdk": "^0.5.0"
13
- },
14
- "bin": {
15
- "vibecheck-mcp": "index.js"
16
- },
17
- "engines": {
18
- "node": ">=18.0.0"
19
- }
20
- },
21
- "node_modules/@modelcontextprotocol/sdk": {
22
- "version": "0.5.0",
23
- "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-0.5.0.tgz",
24
- "integrity": "sha512-RXgulUX6ewvxjAG0kOpLMEdXXWkzWgaoCGaA2CwNW7cQCIphjpJhjpHSiaPdVCnisjRF/0Cm9KWHUuIoeiAblQ==",
25
- "license": "MIT",
26
- "dependencies": {
27
- "content-type": "^1.0.5",
28
- "raw-body": "^3.0.0",
29
- "zod": "^3.23.8"
30
- }
31
- },
32
- "node_modules/bytes": {
33
- "version": "3.1.2",
34
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
35
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
36
- "license": "MIT",
37
- "engines": {
38
- "node": ">= 0.8"
39
- }
40
- },
41
- "node_modules/content-type": {
42
- "version": "1.0.5",
43
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
44
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
45
- "license": "MIT",
46
- "engines": {
47
- "node": ">= 0.6"
48
- }
49
- },
50
- "node_modules/depd": {
51
- "version": "2.0.0",
52
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
53
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
54
- "license": "MIT",
55
- "engines": {
56
- "node": ">= 0.8"
57
- }
58
- },
59
- "node_modules/http-errors": {
60
- "version": "2.0.1",
61
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
62
- "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
63
- "license": "MIT",
64
- "dependencies": {
65
- "depd": "~2.0.0",
66
- "inherits": "~2.0.4",
67
- "setprototypeof": "~1.2.0",
68
- "statuses": "~2.0.2",
69
- "toidentifier": "~1.0.1"
70
- },
71
- "engines": {
72
- "node": ">= 0.8"
73
- },
74
- "funding": {
75
- "type": "opencollective",
76
- "url": "https://opencollective.com/express"
77
- }
78
- },
79
- "node_modules/iconv-lite": {
80
- "version": "0.7.1",
81
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz",
82
- "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==",
83
- "license": "MIT",
84
- "dependencies": {
85
- "safer-buffer": ">= 2.1.2 < 3.0.0"
86
- },
87
- "engines": {
88
- "node": ">=0.10.0"
89
- },
90
- "funding": {
91
- "type": "opencollective",
92
- "url": "https://opencollective.com/express"
93
- }
94
- },
95
- "node_modules/inherits": {
96
- "version": "2.0.4",
97
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
98
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
99
- "license": "ISC"
100
- },
101
- "node_modules/raw-body": {
102
- "version": "3.0.2",
103
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
104
- "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
105
- "license": "MIT",
106
- "dependencies": {
107
- "bytes": "~3.1.2",
108
- "http-errors": "~2.0.1",
109
- "iconv-lite": "~0.7.0",
110
- "unpipe": "~1.0.0"
111
- },
112
- "engines": {
113
- "node": ">= 0.10"
114
- }
115
- },
116
- "node_modules/safer-buffer": {
117
- "version": "2.1.2",
118
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
119
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
120
- "license": "MIT"
121
- },
122
- "node_modules/setprototypeof": {
123
- "version": "1.2.0",
124
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
125
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
126
- "license": "ISC"
127
- },
128
- "node_modules/statuses": {
129
- "version": "2.0.2",
130
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
131
- "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
132
- "license": "MIT",
133
- "engines": {
134
- "node": ">= 0.8"
135
- }
136
- },
137
- "node_modules/toidentifier": {
138
- "version": "1.0.1",
139
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
140
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
141
- "license": "MIT",
142
- "engines": {
143
- "node": ">=0.6"
144
- }
145
- },
146
- "node_modules/unpipe": {
147
- "version": "1.0.0",
148
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
149
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
150
- "license": "MIT",
151
- "engines": {
152
- "node": ">= 0.8"
153
- }
154
- },
155
- "node_modules/zod": {
156
- "version": "3.25.76",
157
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
158
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
159
- "license": "MIT",
160
- "funding": {
161
- "url": "https://github.com/sponsors/colinhacks"
162
- }
163
- }
164
- }
165
- }