@vibecheck-ai/mcp 24.5.6 → 24.5.9
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/dist/index.js +348 -40
- package/dist/onnxruntime_binding-5QEF3SUC.node +0 -0
- package/dist/onnxruntime_binding-BKPKNEGC.node +0 -0
- package/dist/onnxruntime_binding-FMOXGIUT.node +0 -0
- package/dist/onnxruntime_binding-OI2KMXC5.node +0 -0
- package/dist/onnxruntime_binding-UX44MLAZ.node +0 -0
- package/dist/onnxruntime_binding-Y2W7N7WY.node +0 -0
- package/package.json +11 -2
package/dist/index.js
CHANGED
|
@@ -219066,27 +219066,29 @@ var require_has_flag = __commonJS({
|
|
|
219066
219066
|
}
|
|
219067
219067
|
});
|
|
219068
219068
|
|
|
219069
|
-
// ../../node_modules/.pnpm/supports-color@
|
|
219069
|
+
// ../../node_modules/.pnpm/supports-color@8.1.1/node_modules/supports-color/index.js
|
|
219070
219070
|
var require_supports_color = __commonJS({
|
|
219071
|
-
"../../node_modules/.pnpm/supports-color@
|
|
219071
|
+
"../../node_modules/.pnpm/supports-color@8.1.1/node_modules/supports-color/index.js"(exports2, module2) {
|
|
219072
219072
|
"use strict";
|
|
219073
219073
|
var os2 = __require("os");
|
|
219074
219074
|
var tty = __require("tty");
|
|
219075
219075
|
var hasFlag = require_has_flag();
|
|
219076
219076
|
var { env: env3 } = process;
|
|
219077
|
-
var
|
|
219077
|
+
var flagForceColor;
|
|
219078
219078
|
if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
|
|
219079
|
-
|
|
219079
|
+
flagForceColor = 0;
|
|
219080
219080
|
} else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
|
|
219081
|
-
|
|
219081
|
+
flagForceColor = 1;
|
|
219082
219082
|
}
|
|
219083
|
-
|
|
219084
|
-
if (
|
|
219085
|
-
|
|
219086
|
-
|
|
219087
|
-
|
|
219088
|
-
|
|
219089
|
-
|
|
219083
|
+
function envForceColor() {
|
|
219084
|
+
if ("FORCE_COLOR" in env3) {
|
|
219085
|
+
if (env3.FORCE_COLOR === "true") {
|
|
219086
|
+
return 1;
|
|
219087
|
+
}
|
|
219088
|
+
if (env3.FORCE_COLOR === "false") {
|
|
219089
|
+
return 0;
|
|
219090
|
+
}
|
|
219091
|
+
return env3.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env3.FORCE_COLOR, 10), 3);
|
|
219090
219092
|
}
|
|
219091
219093
|
}
|
|
219092
219094
|
function translateLevel(level) {
|
|
@@ -219100,15 +219102,22 @@ var require_supports_color = __commonJS({
|
|
|
219100
219102
|
has16m: level >= 3
|
|
219101
219103
|
};
|
|
219102
219104
|
}
|
|
219103
|
-
function supportsColor(haveStream, streamIsTTY) {
|
|
219105
|
+
function supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
|
|
219106
|
+
const noFlagForceColor = envForceColor();
|
|
219107
|
+
if (noFlagForceColor !== void 0) {
|
|
219108
|
+
flagForceColor = noFlagForceColor;
|
|
219109
|
+
}
|
|
219110
|
+
const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
|
|
219104
219111
|
if (forceColor === 0) {
|
|
219105
219112
|
return 0;
|
|
219106
219113
|
}
|
|
219107
|
-
if (
|
|
219108
|
-
|
|
219109
|
-
|
|
219110
|
-
|
|
219111
|
-
|
|
219114
|
+
if (sniffFlags) {
|
|
219115
|
+
if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
|
|
219116
|
+
return 3;
|
|
219117
|
+
}
|
|
219118
|
+
if (hasFlag("color=256")) {
|
|
219119
|
+
return 2;
|
|
219120
|
+
}
|
|
219112
219121
|
}
|
|
219113
219122
|
if (haveStream && !streamIsTTY && forceColor === void 0) {
|
|
219114
219123
|
return 0;
|
|
@@ -219125,7 +219134,7 @@ var require_supports_color = __commonJS({
|
|
|
219125
219134
|
return 1;
|
|
219126
219135
|
}
|
|
219127
219136
|
if ("CI" in env3) {
|
|
219128
|
-
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => sign in env3) || env3.CI_NAME === "codeship") {
|
|
219137
|
+
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE", "DRONE"].some((sign) => sign in env3) || env3.CI_NAME === "codeship") {
|
|
219129
219138
|
return 1;
|
|
219130
219139
|
}
|
|
219131
219140
|
return min2;
|
|
@@ -219137,7 +219146,7 @@ var require_supports_color = __commonJS({
|
|
|
219137
219146
|
return 3;
|
|
219138
219147
|
}
|
|
219139
219148
|
if ("TERM_PROGRAM" in env3) {
|
|
219140
|
-
const version3 = parseInt((env3.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
|
219149
|
+
const version3 = Number.parseInt((env3.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
|
219141
219150
|
switch (env3.TERM_PROGRAM) {
|
|
219142
219151
|
case "iTerm.app":
|
|
219143
219152
|
return version3 >= 3 ? 3 : 2;
|
|
@@ -219156,14 +219165,17 @@ var require_supports_color = __commonJS({
|
|
|
219156
219165
|
}
|
|
219157
219166
|
return min2;
|
|
219158
219167
|
}
|
|
219159
|
-
function getSupportLevel(stream) {
|
|
219160
|
-
const level = supportsColor(stream,
|
|
219168
|
+
function getSupportLevel(stream, options = {}) {
|
|
219169
|
+
const level = supportsColor(stream, {
|
|
219170
|
+
streamIsTTY: stream && stream.isTTY,
|
|
219171
|
+
...options
|
|
219172
|
+
});
|
|
219161
219173
|
return translateLevel(level);
|
|
219162
219174
|
}
|
|
219163
219175
|
module2.exports = {
|
|
219164
219176
|
supportsColor: getSupportLevel,
|
|
219165
|
-
stdout:
|
|
219166
|
-
stderr:
|
|
219177
|
+
stdout: getSupportLevel({ isTTY: tty.isatty(1) }),
|
|
219178
|
+
stderr: getSupportLevel({ isTTY: tty.isatty(2) })
|
|
219167
219179
|
};
|
|
219168
219180
|
}
|
|
219169
219181
|
});
|
|
@@ -219676,7 +219688,7 @@ var require_wrappers = __commonJS({
|
|
|
219676
219688
|
exports2.prepare = function prepare(sql) {
|
|
219677
219689
|
return this[cppdb].prepare(sql, this, false);
|
|
219678
219690
|
};
|
|
219679
|
-
exports2.exec = function
|
|
219691
|
+
exports2.exec = function exec(sql) {
|
|
219680
219692
|
this[cppdb].exec(sql);
|
|
219681
219693
|
return this;
|
|
219682
219694
|
};
|
|
@@ -278734,7 +278746,7 @@ import { pathToFileURL } from "url";
|
|
|
278734
278746
|
// src/server.ts
|
|
278735
278747
|
import * as path9 from "path";
|
|
278736
278748
|
import * as fs6 from "fs";
|
|
278737
|
-
import {
|
|
278749
|
+
import { execFile } from "child_process";
|
|
278738
278750
|
import { promisify } from "util";
|
|
278739
278751
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
278740
278752
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
@@ -278752,6 +278764,8 @@ import {
|
|
|
278752
278764
|
gateCanonicalScanReportFindings,
|
|
278753
278765
|
normalizeCanonicalScanReport
|
|
278754
278766
|
} from "@repo/shared-types";
|
|
278767
|
+
import { formatTrustScoreMcp, getTrustScoreStatus } from "@repo/shared-types";
|
|
278768
|
+
import { dashboardFindingUrl } from "@repo/shared-types";
|
|
278755
278769
|
|
|
278756
278770
|
// ../codegraph/dist/index.js
|
|
278757
278771
|
var import_fast_glob = __toESM(require_out4(), 1);
|
|
@@ -291811,7 +291825,7 @@ var ContextEngine = class {
|
|
|
291811
291825
|
// src/server.ts
|
|
291812
291826
|
init_dist();
|
|
291813
291827
|
|
|
291814
|
-
// ../subscriptions/dist/chunk-
|
|
291828
|
+
// ../subscriptions/dist/chunk-IRYOMNQT.js
|
|
291815
291829
|
var PLAN_IDS = ["free", "pro", "team", "enterprise"];
|
|
291816
291830
|
var PLAN_RANK = Object.fromEntries(
|
|
291817
291831
|
PLAN_IDS.map((id, index2) => [id, index2])
|
|
@@ -291896,9 +291910,9 @@ var PLAN_DEFINITIONS = {
|
|
|
291896
291910
|
},
|
|
291897
291911
|
pro: {
|
|
291898
291912
|
displayName: "Pro",
|
|
291899
|
-
tagline: "$
|
|
291900
|
-
monthlyPriceUsd:
|
|
291901
|
-
priceLabel: "$
|
|
291913
|
+
tagline: "$19.00/mo or $189.99/yr (save 17%).",
|
|
291914
|
+
monthlyPriceUsd: 19,
|
|
291915
|
+
priceLabel: "$19.00/mo",
|
|
291902
291916
|
billingInterval: "month",
|
|
291903
291917
|
badgeToken: "tier-pro",
|
|
291904
291918
|
highlights: [
|
|
@@ -293109,6 +293123,8 @@ var FEATURE_NAMES = {
|
|
|
293109
293123
|
REVIEW_WORKFLOWS: "Review Workflows",
|
|
293110
293124
|
FLOW_WORKFLOWS: "Flow Workflows",
|
|
293111
293125
|
WIKICODE_ATLAS: "WikiCode Atlas",
|
|
293126
|
+
/** Truthpack generate/validate — local CLI + IDE; registry key matches {@link FEATURE_REGISTRY} */
|
|
293127
|
+
TRUTHPACK: "Truthpack",
|
|
293112
293128
|
/** LLM guided routes — use getAccessMode for free taste vs Pro unlimited */
|
|
293113
293129
|
GUIDED_ROUTE: "Guided Route",
|
|
293114
293130
|
SHIP_SCORE: "Ship Score",
|
|
@@ -293657,9 +293673,6 @@ var InputValidator = class {
|
|
|
293657
293673
|
errors.push("Path traversal detected");
|
|
293658
293674
|
logger.warn("Path traversal attempt blocked", { input, normalized });
|
|
293659
293675
|
}
|
|
293660
|
-
if (path7.isAbsolute(input)) {
|
|
293661
|
-
errors.push("Absolute paths not allowed");
|
|
293662
|
-
}
|
|
293663
293676
|
if (input.includes("\0")) {
|
|
293664
293677
|
errors.push("Null byte detected in path");
|
|
293665
293678
|
logger.warn("Null byte injection attempt blocked", { input });
|
|
@@ -293955,7 +293968,7 @@ var TOOL_FEATURE_MAP = {
|
|
|
293955
293968
|
vibecheck_docguard: FEATURE_NAMES.DOCGUARD,
|
|
293956
293969
|
vibecheck_commitshield: FEATURE_NAMES.COMMIT_SHIELD,
|
|
293957
293970
|
vibecheck_polish: FEATURE_NAMES.POLISH,
|
|
293958
|
-
vibecheck_truthpack:
|
|
293971
|
+
vibecheck_truthpack: FEATURE_NAMES.TRUTHPACK,
|
|
293959
293972
|
vibecheck_review: FEATURE_NAMES.COMMIT_SHIELD
|
|
293960
293973
|
};
|
|
293961
293974
|
function getToolApiSurface(toolName) {
|
|
@@ -294231,6 +294244,84 @@ var MCP_TOOLS = [
|
|
|
294231
294244
|
},
|
|
294232
294245
|
required: ["file"]
|
|
294233
294246
|
}
|
|
294247
|
+
},
|
|
294248
|
+
// ── Platform Unification Tools ─────────────────────────────────────
|
|
294249
|
+
{
|
|
294250
|
+
name: "vibecheck_trust_score",
|
|
294251
|
+
description: "Get the current/latest trust score for a project. Returns score (0-100), grade, and status (PASSING/WARNING/FAILING). Alias for vibecheck_score with markdown formatting.",
|
|
294252
|
+
inputSchema: {
|
|
294253
|
+
type: "object",
|
|
294254
|
+
properties: {
|
|
294255
|
+
path: { type: "string", description: "Project path. Defaults to current directory." }
|
|
294256
|
+
}
|
|
294257
|
+
}
|
|
294258
|
+
},
|
|
294259
|
+
{
|
|
294260
|
+
name: "vibecheck_findings",
|
|
294261
|
+
description: 'List findings for the current project, filterable by severity, engine, or file path. Supports natural queries like "show me all critical findings in src/api/".',
|
|
294262
|
+
inputSchema: {
|
|
294263
|
+
type: "object",
|
|
294264
|
+
properties: {
|
|
294265
|
+
path: { type: "string", description: "Project path. Defaults to current directory." },
|
|
294266
|
+
severity: { type: "string", enum: ["critical", "high", "medium", "low", "info"], description: "Filter by severity." },
|
|
294267
|
+
engine: { type: "string", description: 'Filter by engine ID (e.g. "phantom_dep", "ghost_route").' },
|
|
294268
|
+
file: { type: "string", description: "Filter findings to a specific file or directory path." }
|
|
294269
|
+
}
|
|
294270
|
+
}
|
|
294271
|
+
},
|
|
294272
|
+
{
|
|
294273
|
+
name: "vibecheck_finding",
|
|
294274
|
+
description: "Get full detail on a specific finding by ID, including evidence, fix suggestion, and dashboard URL.",
|
|
294275
|
+
inputSchema: {
|
|
294276
|
+
type: "object",
|
|
294277
|
+
properties: {
|
|
294278
|
+
id: { type: "string", description: "Finding ID." },
|
|
294279
|
+
path: { type: "string", description: "Project path. Defaults to current directory." }
|
|
294280
|
+
},
|
|
294281
|
+
required: ["id"]
|
|
294282
|
+
}
|
|
294283
|
+
},
|
|
294284
|
+
{
|
|
294285
|
+
name: "vibecheck_dismiss",
|
|
294286
|
+
description: "Dismiss a finding (mark as false positive or acknowledged). Syncs across all surfaces when authenticated.",
|
|
294287
|
+
inputSchema: {
|
|
294288
|
+
type: "object",
|
|
294289
|
+
properties: {
|
|
294290
|
+
id: { type: "string", description: "Finding ID to dismiss." },
|
|
294291
|
+
reason: { type: "string", description: "Reason for dismissal." },
|
|
294292
|
+
path: { type: "string", description: "Project path. Defaults to current directory." }
|
|
294293
|
+
},
|
|
294294
|
+
required: ["id"]
|
|
294295
|
+
}
|
|
294296
|
+
},
|
|
294297
|
+
{
|
|
294298
|
+
name: "vibecheck_history",
|
|
294299
|
+
description: "Get scan history for a project. Returns recent scans with trust scores and finding counts.",
|
|
294300
|
+
inputSchema: {
|
|
294301
|
+
type: "object",
|
|
294302
|
+
properties: {
|
|
294303
|
+
path: { type: "string", description: "Project path. Defaults to current directory." },
|
|
294304
|
+
limit: { type: "number", description: "Max scans to return. Default 10." }
|
|
294305
|
+
}
|
|
294306
|
+
}
|
|
294307
|
+
},
|
|
294308
|
+
{
|
|
294309
|
+
name: "vibecheck_engines",
|
|
294310
|
+
description: "List available scan engines and their descriptions. Shows which engines are active.",
|
|
294311
|
+
inputSchema: {
|
|
294312
|
+
type: "object",
|
|
294313
|
+
properties: {}
|
|
294314
|
+
}
|
|
294315
|
+
},
|
|
294316
|
+
{
|
|
294317
|
+
name: "vibecheck_status",
|
|
294318
|
+
description: "Check auth status, tier, and entitlements. Returns whether the user is authenticated and their current plan.",
|
|
294319
|
+
inputSchema: {
|
|
294320
|
+
type: "object",
|
|
294321
|
+
properties: {
|
|
294322
|
+
path: { type: "string", description: "Workspace root path. Defaults to current directory." }
|
|
294323
|
+
}
|
|
294324
|
+
}
|
|
294234
294325
|
}
|
|
294235
294326
|
];
|
|
294236
294327
|
function isKnownToolName(toolName) {
|
|
@@ -294379,12 +294470,12 @@ function createScanIdempotencyKey(prefix) {
|
|
|
294379
294470
|
// src/mcp-scan-meter-client.ts
|
|
294380
294471
|
var MCP_SCAN_METER_CLIENT = {
|
|
294381
294472
|
type: "mcp",
|
|
294382
|
-
version: "24.5.
|
|
294473
|
+
version: "24.5.9"
|
|
294383
294474
|
};
|
|
294384
294475
|
|
|
294385
294476
|
// src/server.ts
|
|
294386
294477
|
import { uploadScanToApi } from "@repo/shared/sync/upload-scan";
|
|
294387
|
-
var
|
|
294478
|
+
var execFileAsync = promisify(execFile);
|
|
294388
294479
|
async function executeScan(targetPath, engineToggles = null) {
|
|
294389
294480
|
const resolved = path9.resolve(targetPath);
|
|
294390
294481
|
const stat4 = fs6.statSync(resolved);
|
|
@@ -294911,6 +295002,216 @@ ${validation.errors.join("\n")}`
|
|
|
294911
295002
|
]
|
|
294912
295003
|
};
|
|
294913
295004
|
}
|
|
295005
|
+
// ── Platform Unification Tool Handlers ──────────────────────────────
|
|
295006
|
+
case "vibecheck_trust_score": {
|
|
295007
|
+
const result = await withTimeout(
|
|
295008
|
+
runtime.runScore(targetPath),
|
|
295009
|
+
MCP_TOOL_TIMEOUT_MS,
|
|
295010
|
+
"vibecheck_trust_score"
|
|
295011
|
+
);
|
|
295012
|
+
const status = getTrustScoreStatus(result.score);
|
|
295013
|
+
const emoji = status === "passing" ? "\u2705" : status === "warning" ? "\u26A0\uFE0F" : "\u{1F6A8}";
|
|
295014
|
+
const text = [
|
|
295015
|
+
`## Trust Score`,
|
|
295016
|
+
"",
|
|
295017
|
+
`**${result.score}/100** (${status.toUpperCase()}) ${emoji}`,
|
|
295018
|
+
`**Grade:** ${result.grade}`,
|
|
295019
|
+
`**Decision:** ${result.decision}`,
|
|
295020
|
+
"",
|
|
295021
|
+
`> ${formatTrustScoreMcp(result.score)}`
|
|
295022
|
+
].join("\n");
|
|
295023
|
+
return { content: [{ type: "text", text }] };
|
|
295024
|
+
}
|
|
295025
|
+
case "vibecheck_findings": {
|
|
295026
|
+
const report = await withTimeout(
|
|
295027
|
+
runtime.runScan(targetPath, { enginePreset: "full" }),
|
|
295028
|
+
MCP_TOOL_TIMEOUT_MS,
|
|
295029
|
+
"vibecheck_findings"
|
|
295030
|
+
);
|
|
295031
|
+
const gatedReport = gateCanonicalScanReportFindings(report, userPlan);
|
|
295032
|
+
let filtered = gatedReport.findings;
|
|
295033
|
+
if (args2.severity) {
|
|
295034
|
+
filtered = filtered.filter((f) => f.severity === args2.severity);
|
|
295035
|
+
}
|
|
295036
|
+
if (args2.engine) {
|
|
295037
|
+
filtered = filtered.filter((f) => f.engine === args2.engine);
|
|
295038
|
+
}
|
|
295039
|
+
if (args2.file) {
|
|
295040
|
+
const fileFilter = args2.file;
|
|
295041
|
+
filtered = filtered.filter((f) => f.file?.includes(fileFilter));
|
|
295042
|
+
}
|
|
295043
|
+
const lines = [
|
|
295044
|
+
`## Findings (${filtered.length} of ${gatedReport.summary.total})`,
|
|
295045
|
+
""
|
|
295046
|
+
];
|
|
295047
|
+
for (const f of filtered.slice(0, 50)) {
|
|
295048
|
+
const loc = f.file ? `${f.file}${f.line ? `:${f.line}` : ""}` : "unknown";
|
|
295049
|
+
lines.push(`- **[${f.severity.toUpperCase()}]** ${f.message}`);
|
|
295050
|
+
lines.push(` \`${loc}\` (${f.engine})`);
|
|
295051
|
+
if (f.suggestion) lines.push(` Fix: ${f.suggestion}`);
|
|
295052
|
+
}
|
|
295053
|
+
if (filtered.length > 50) {
|
|
295054
|
+
lines.push("", `_...and ${filtered.length - 50} more findings_`);
|
|
295055
|
+
}
|
|
295056
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
295057
|
+
}
|
|
295058
|
+
case "vibecheck_finding": {
|
|
295059
|
+
const findingId = args2.id;
|
|
295060
|
+
if (!findingId) {
|
|
295061
|
+
return buildErrorResponse('vibecheck_finding requires "id"');
|
|
295062
|
+
}
|
|
295063
|
+
const report = await withTimeout(
|
|
295064
|
+
runtime.runScan(targetPath, { enginePreset: "full" }),
|
|
295065
|
+
MCP_TOOL_TIMEOUT_MS,
|
|
295066
|
+
"vibecheck_finding"
|
|
295067
|
+
);
|
|
295068
|
+
const finding = report.findings.find((f) => f.id === findingId);
|
|
295069
|
+
if (!finding) {
|
|
295070
|
+
return buildErrorResponse(`Finding "${findingId}" not found in current scan results.`);
|
|
295071
|
+
}
|
|
295072
|
+
const loc = finding.file ? `${finding.file}${finding.line ? `:${finding.line}` : ""}` : "unknown";
|
|
295073
|
+
const text = [
|
|
295074
|
+
`## Finding: ${finding.message}`,
|
|
295075
|
+
"",
|
|
295076
|
+
`| Field | Value |`,
|
|
295077
|
+
`|-------|-------|`,
|
|
295078
|
+
`| ID | \`${finding.id}\` |`,
|
|
295079
|
+
`| Severity | ${finding.severity.toUpperCase()} |`,
|
|
295080
|
+
`| Engine | ${finding.engine} |`,
|
|
295081
|
+
`| Location | \`${loc}\` |`,
|
|
295082
|
+
`| Confidence | ${finding.confidence ?? "N/A"} |`,
|
|
295083
|
+
finding.suggestion ? `| Suggestion | ${finding.suggestion} |` : "",
|
|
295084
|
+
"",
|
|
295085
|
+
report.runId ? `**Dashboard:** ${dashboardFindingUrl(report.runId, finding.id)}` : ""
|
|
295086
|
+
].filter(Boolean).join("\n");
|
|
295087
|
+
return { content: [{ type: "text", text }] };
|
|
295088
|
+
}
|
|
295089
|
+
case "vibecheck_dismiss": {
|
|
295090
|
+
const findingId = args2.id;
|
|
295091
|
+
if (!findingId) {
|
|
295092
|
+
return buildErrorResponse('vibecheck_dismiss requires "id"');
|
|
295093
|
+
}
|
|
295094
|
+
const reason = args2.reason ?? "Dismissed via MCP";
|
|
295095
|
+
const token = process.env.VIBECHECK_TOKEN?.trim();
|
|
295096
|
+
if (!token) {
|
|
295097
|
+
return {
|
|
295098
|
+
content: [{
|
|
295099
|
+
type: "text",
|
|
295100
|
+
text: JSON.stringify({
|
|
295101
|
+
ok: false,
|
|
295102
|
+
message: "Authentication required to dismiss findings across surfaces. Set VIBECHECK_TOKEN or run `vibecheck auth login`.",
|
|
295103
|
+
localOnly: true,
|
|
295104
|
+
findingId,
|
|
295105
|
+
reason
|
|
295106
|
+
}, null, 2)
|
|
295107
|
+
}]
|
|
295108
|
+
};
|
|
295109
|
+
}
|
|
295110
|
+
try {
|
|
295111
|
+
const apiBase = process.env.VIBECHECK_API_URL || "https://api.vibecheckai.dev";
|
|
295112
|
+
const resp = await fetch(`${apiBase}/api/v1/findings/${findingId}`, {
|
|
295113
|
+
method: "PATCH",
|
|
295114
|
+
headers: {
|
|
295115
|
+
"Authorization": `Bearer ${token}`,
|
|
295116
|
+
"Content-Type": "application/json"
|
|
295117
|
+
},
|
|
295118
|
+
body: JSON.stringify({ resolved: true })
|
|
295119
|
+
});
|
|
295120
|
+
if (!resp.ok) {
|
|
295121
|
+
return buildErrorResponse(`Failed to dismiss finding: HTTP ${resp.status}`);
|
|
295122
|
+
}
|
|
295123
|
+
return {
|
|
295124
|
+
content: [{
|
|
295125
|
+
type: "text",
|
|
295126
|
+
text: `Finding \`${findingId}\` dismissed. Reason: ${reason}
|
|
295127
|
+
This change is synced across all surfaces.`
|
|
295128
|
+
}]
|
|
295129
|
+
};
|
|
295130
|
+
} catch (err2) {
|
|
295131
|
+
return buildErrorResponse(`Failed to dismiss finding: ${err2 instanceof Error ? err2.message : String(err2)}`);
|
|
295132
|
+
}
|
|
295133
|
+
}
|
|
295134
|
+
case "vibecheck_history": {
|
|
295135
|
+
const token = process.env.VIBECHECK_TOKEN?.trim();
|
|
295136
|
+
if (!token) {
|
|
295137
|
+
return {
|
|
295138
|
+
content: [{
|
|
295139
|
+
type: "text",
|
|
295140
|
+
text: "Scan history requires authentication. Set VIBECHECK_TOKEN or run `vibecheck auth login`."
|
|
295141
|
+
}]
|
|
295142
|
+
};
|
|
295143
|
+
}
|
|
295144
|
+
try {
|
|
295145
|
+
const apiBase = process.env.VIBECHECK_API_URL || "https://api.vibecheckai.dev";
|
|
295146
|
+
const limit = args2.limit ?? 10;
|
|
295147
|
+
const resp = await fetch(`${apiBase}/api/v1/scans/recent?limit=${limit}`, {
|
|
295148
|
+
headers: { "Authorization": `Bearer ${token}` }
|
|
295149
|
+
});
|
|
295150
|
+
if (!resp.ok) {
|
|
295151
|
+
return buildErrorResponse(`Failed to fetch scan history: HTTP ${resp.status}`);
|
|
295152
|
+
}
|
|
295153
|
+
const body2 = await resp.json();
|
|
295154
|
+
const scans = body2.data ?? [];
|
|
295155
|
+
if (scans.length === 0) {
|
|
295156
|
+
return { content: [{ type: "text", text: "No scan history found. Run `vibecheck scan .` to create your first scan." }] };
|
|
295157
|
+
}
|
|
295158
|
+
const lines = [`## Scan History (${scans.length} most recent)`, ""];
|
|
295159
|
+
for (const s of scans) {
|
|
295160
|
+
const status = s.status ?? "unknown";
|
|
295161
|
+
const created = s.createdAt ?? "";
|
|
295162
|
+
const id = s.id ?? "";
|
|
295163
|
+
lines.push(`- **${status}** \u2014 ${created} (\`${id}\`)`);
|
|
295164
|
+
}
|
|
295165
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
295166
|
+
} catch (err2) {
|
|
295167
|
+
return buildErrorResponse(`Failed to fetch history: ${err2 instanceof Error ? err2.message : String(err2)}`);
|
|
295168
|
+
}
|
|
295169
|
+
}
|
|
295170
|
+
case "vibecheck_engines": {
|
|
295171
|
+
const engineIds = [
|
|
295172
|
+
"type-contract",
|
|
295173
|
+
"security-pattern",
|
|
295174
|
+
"perf-antipattern",
|
|
295175
|
+
"env_var",
|
|
295176
|
+
"ghost_route",
|
|
295177
|
+
"phantom_dep",
|
|
295178
|
+
"api_truth",
|
|
295179
|
+
"credentials",
|
|
295180
|
+
"security",
|
|
295181
|
+
"framework_packs",
|
|
295182
|
+
"fake_features",
|
|
295183
|
+
"version_hallucination",
|
|
295184
|
+
"logic_gap",
|
|
295185
|
+
"error_handling",
|
|
295186
|
+
"outcome_verification",
|
|
295187
|
+
"incomplete_impl"
|
|
295188
|
+
];
|
|
295189
|
+
const lines = [
|
|
295190
|
+
`## Available Engines (${engineIds.length})`,
|
|
295191
|
+
"",
|
|
295192
|
+
"| Engine ID | Status |",
|
|
295193
|
+
"|-----------|--------|"
|
|
295194
|
+
];
|
|
295195
|
+
for (const id of engineIds) {
|
|
295196
|
+
lines.push(`| \`${id}\` | Active |`);
|
|
295197
|
+
}
|
|
295198
|
+
lines.push("", "All engines are included in the free tier.");
|
|
295199
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
295200
|
+
}
|
|
295201
|
+
case "vibecheck_status": {
|
|
295202
|
+
const token = process.env.VIBECHECK_TOKEN?.trim();
|
|
295203
|
+
const authenticated = !!token;
|
|
295204
|
+
const text = [
|
|
295205
|
+
`## VibeCheck Status`,
|
|
295206
|
+
"",
|
|
295207
|
+
`**Authenticated:** ${authenticated ? "Yes" : "No"}`,
|
|
295208
|
+
`**Tier:** ${userPlan}`,
|
|
295209
|
+
`**MCP Server:** Active`,
|
|
295210
|
+
"",
|
|
295211
|
+
authenticated ? "All scans are synced to the dashboard." : "Run `vibecheck auth login` to sync scans across devices."
|
|
295212
|
+
].join("\n");
|
|
295213
|
+
return { content: [{ type: "text", text }] };
|
|
295214
|
+
}
|
|
294914
295215
|
case "vibecheck_forge":
|
|
294915
295216
|
case "vibecheck_reality":
|
|
294916
295217
|
case "vibecheck_ship":
|
|
@@ -294926,10 +295227,16 @@ ${validation.errors.join("\n")}`
|
|
|
294926
295227
|
case "vibecheck_explain_file":
|
|
294927
295228
|
case "vibecheck_review": {
|
|
294928
295229
|
const cmdName = name2.replace("vibecheck_", "");
|
|
294929
|
-
const
|
|
295230
|
+
const cliArgv = [cmdName];
|
|
295231
|
+
for (const [k, v] of Object.entries(args2)) {
|
|
295232
|
+
if (k === "path") continue;
|
|
295233
|
+
cliArgv.push(`--${k}`, String(v));
|
|
295234
|
+
}
|
|
294930
295235
|
const workDir = targetPath || workspaceRoot;
|
|
295236
|
+
const vibecheckBin = new URL("../node_modules/.bin/vibecheck", import.meta.url).pathname;
|
|
295237
|
+
const binPath = fs6.existsSync(vibecheckBin) ? vibecheckBin : "vibecheck";
|
|
294931
295238
|
try {
|
|
294932
|
-
const { stdout, stderr } = await
|
|
295239
|
+
const { stdout, stderr } = await execFileAsync(binPath, cliArgv, { cwd: workDir });
|
|
294933
295240
|
return {
|
|
294934
295241
|
content: [
|
|
294935
295242
|
{
|
|
@@ -294939,7 +295246,8 @@ ${validation.errors.join("\n")}`
|
|
|
294939
295246
|
]
|
|
294940
295247
|
};
|
|
294941
295248
|
} catch (error) {
|
|
294942
|
-
|
|
295249
|
+
const err2 = error;
|
|
295250
|
+
return buildErrorResponse(`CLI Execution Error: ${err2.message ?? err2.stdout ?? err2.stderr ?? String(error)}`);
|
|
294943
295251
|
}
|
|
294944
295252
|
}
|
|
294945
295253
|
default:
|
|
@@ -294955,7 +295263,7 @@ function createMcpServer(runtimeOverrides = {}) {
|
|
|
294955
295263
|
const server2 = new Server(
|
|
294956
295264
|
{
|
|
294957
295265
|
name: "vibecheck-mcp",
|
|
294958
|
-
version: "
|
|
295266
|
+
version: "24.5.9"
|
|
294959
295267
|
},
|
|
294960
295268
|
{
|
|
294961
295269
|
capabilities: {
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibecheck-ai/mcp",
|
|
3
|
-
"version": "24.5.
|
|
3
|
+
"version": "24.5.9",
|
|
4
4
|
"description": "The trust layer for AI-generated software. Catches phantom dependencies, ghost API routes, fake SDK methods, and hardcoded secrets — before they ship.",
|
|
5
5
|
"mcpName": "io.github.guardiavault-oss/vibecheck-mcp",
|
|
6
6
|
"type": "module",
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
"access": "public"
|
|
9
9
|
},
|
|
10
10
|
"main": "./dist/index.js",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
11
17
|
"keywords": [
|
|
12
18
|
"vibecheck",
|
|
13
19
|
"mcp",
|
|
@@ -29,7 +35,10 @@
|
|
|
29
35
|
"url": "https://github.com/vibecheck-oss/vibecheck/issues"
|
|
30
36
|
},
|
|
31
37
|
"files": [
|
|
32
|
-
"dist/index.js"
|
|
38
|
+
"dist/index.js",
|
|
39
|
+
"dist/index.d.ts",
|
|
40
|
+
"dist/index.d.ts.map",
|
|
41
|
+
"dist/*.node"
|
|
33
42
|
],
|
|
34
43
|
"bin": {
|
|
35
44
|
"vibecheck-mcp": "./dist/index.js"
|