@securecode-ai/mcp 0.5.4 → 0.5.5

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.
@@ -43,11 +43,20 @@ async function runVerifyLoop(opts) {
43
43
  const previousErrors = [];
44
44
  let lastTestScript = '';
45
45
  let lastTestOutput = '';
46
- const runtimeInfo = (0, runtimeDetect_1.detectRuntime)(workspaceRoot);
46
+ const runtimeInfo = (0, runtimeDetect_1.detectRuntime)(workspaceRoot, filePath || undefined);
47
47
  const testFileDir = path.join(workspaceRoot, '.securecode');
48
48
  const relativeImportPath = filePath
49
49
  ? (0, runtimeDetect_1.computeRelativeImportPath)(testFileDir, path.isAbsolute(filePath) ? filePath : path.join(workspaceRoot, filePath))
50
50
  : '';
51
+ if (!runtimeInfo.canRunLocally) {
52
+ return {
53
+ verdict: 'INCONCLUSIVE',
54
+ reason: runtimeInfo.skipReason || 'Detected framework cannot run a local exploit test.',
55
+ roundsUsed: 0,
56
+ testScript: '',
57
+ testOutput: '',
58
+ };
59
+ }
51
60
  for (let round = 1; round <= MAX_ROUNDS; round++) {
52
61
  onProgress?.(round, MAX_ROUNDS, `Round ${round}: generating test...`);
53
62
  const genResp = await client.postJson('/verify/generate', {
@@ -63,8 +72,13 @@ async function runVerifyLoop(opts) {
63
72
  previousErrors: previousErrors.length > 0 ? previousErrors : undefined,
64
73
  projectRuntime: runtimeInfo.runtime,
65
74
  suggestedRunner: runtimeInfo.runner,
75
+ framework: runtimeInfo.framework,
76
+ frameworkVersion: runtimeInfo.frameworkVersion,
77
+ testabilityTier: runtimeInfo.testabilityTier,
78
+ packageManager: runtimeInfo.packageManager,
66
79
  testFileDir: '.securecode',
67
80
  relativeImportPath,
81
+ depsInstalled: runtimeInfo.depsInstalled,
68
82
  });
69
83
  if (!genResp.canTest || !genResp.testScript) {
70
84
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"verifyLoop.js","sourceRoot":"","sources":["../../src/attack/verifyLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verifyLoop.js","sourceRoot":"","sources":["../../src/attack/verifyLoop.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,9 @@ async function runLocalTest(script, runner, workspaceRoot) {
49
49
  const testDir = path.join(workspaceRoot, '.securecode');
50
50
  if (!fs.existsSync(testDir))
51
51
  fs.mkdirSync(testDir, { recursive: true });
52
- const ext = (runner === 'tsx' || runner === 'ts' || runner === 'bun') ? '.test.ts' : '.test.js';
52
+ const isPython = runner === 'python' || runner === 'python3';
53
+ const isTsRunner = runner === 'tsx' || runner === 'ts' || runner === 'bun' || runner === 'deno' || runner === 'pnpm-tsx' || runner === 'yarn-tsx';
54
+ const ext = isPython ? '.py' : (isTsRunner ? '.test.ts' : '.test.js');
53
55
  const testFile = path.join(testDir, `verify-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}${ext}`);
54
56
  try {
55
57
  fs.writeFileSync(testFile, script, 'utf8');
@@ -65,6 +67,18 @@ async function runLocalTest(script, runner, workspaceRoot) {
65
67
  runnerBin = 'npx';
66
68
  runnerArgs = ['tsx', testFile];
67
69
  }
70
+ else if (runner === 'pnpm-tsx') {
71
+ runnerBin = 'pnpm';
72
+ runnerArgs = ['exec', 'tsx', testFile];
73
+ }
74
+ else if (runner === 'yarn-tsx') {
75
+ runnerBin = 'yarn';
76
+ runnerArgs = ['tsx', testFile];
77
+ }
78
+ else if (runner === 'deno') {
79
+ runnerBin = 'deno';
80
+ runnerArgs = ['run', '--allow-read', '--allow-env', testFile];
81
+ }
68
82
  else if (runner === 'bun' && isWindows) {
69
83
  runnerBin = 'npx';
70
84
  runnerArgs = ['bun', testFile];
@@ -1 +1 @@
1
- {"version":3,"file":"localTestRunner.js","sourceRoot":"","sources":["../../src/utils/localTestRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localTestRunner.js","sourceRoot":"","sources":["../../src/utils/localTestRunner.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,18 @@
1
- export type ProjectRuntime = 'bun' | 'node' | 'deno';
1
+ export type ProjectRuntime = 'bun' | 'node' | 'deno' | 'python';
2
+ export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'pip' | 'poetry' | 'uv' | null;
3
+ export type Framework = 'electron' | 'next' | 'remix' | 'nuxt' | 'react-native' | 'express' | 'fastify' | 'nestjs' | 'koa' | 'hapi' | 'flask' | 'fastapi' | 'django' | 'react' | 'vue' | 'svelte' | 'cloudflare-workers' | null;
4
+ export type TestabilityTier = 1 | 2 | 3 | 4;
2
5
  export interface RuntimeInfo {
3
6
  runtime: ProjectRuntime;
4
7
  runner: string;
8
+ packageManager: PackageManager;
9
+ framework: Framework;
10
+ frameworkVersion: string | null;
11
+ testabilityTier: TestabilityTier;
12
+ canRunLocally: boolean;
13
+ skipReason?: string;
5
14
  hasBunLock: boolean;
15
+ depsInstalled: boolean;
6
16
  }
7
- export declare function detectRuntime(workspaceRoot: string): RuntimeInfo;
17
+ export declare function detectRuntime(workspaceRoot: string, filePath?: string): RuntimeInfo;
8
18
  export declare function computeRelativeImportPath(testFileDir: string, targetFilePath: string): string;
@@ -37,22 +37,259 @@ exports.detectRuntime = detectRuntime;
37
37
  exports.computeRelativeImportPath = computeRelativeImportPath;
38
38
  const fs = __importStar(require("fs"));
39
39
  const path = __importStar(require("path"));
40
- function detectRuntime(workspaceRoot) {
41
- const hasBunLock = fs.existsSync(path.join(workspaceRoot, 'bun.lockb')) ||
42
- fs.existsSync(path.join(workspaceRoot, 'bun.lock')) ||
43
- fs.existsSync(path.join(workspaceRoot, 'bunfig.toml'));
44
- if (hasBunLock) {
45
- return { runtime: 'bun', runner: 'bun', hasBunLock: true };
40
+ const child_process_1 = require("child_process");
41
+ const JS_FRAMEWORK_RULES = [
42
+ { dep: 'react-native', framework: 'react-native', tier: 4 },
43
+ { dep: '@cloudflare/workers-types', framework: 'cloudflare-workers', tier: 4 },
44
+ { dep: 'wrangler', framework: 'cloudflare-workers', tier: 4 },
45
+ { dep: 'electron', framework: 'electron', tier: 2 },
46
+ { dep: 'next', framework: 'next', tier: 2 },
47
+ { dep: '@remix-run/node', framework: 'remix', tier: 2 },
48
+ { dep: 'remix', framework: 'remix', tier: 2 },
49
+ { dep: 'nuxt', framework: 'nuxt', tier: 2 },
50
+ { dep: '@nestjs/core', framework: 'nestjs', tier: 1 },
51
+ { dep: 'fastify', framework: 'fastify', tier: 1 },
52
+ { dep: 'express', framework: 'express', tier: 1 },
53
+ { dep: 'koa', framework: 'koa', tier: 1 },
54
+ { dep: '@hapi/hapi', framework: 'hapi', tier: 1 },
55
+ { dep: 'svelte', framework: 'svelte', tier: 3 },
56
+ { dep: 'vue', framework: 'vue', tier: 3 },
57
+ { dep: 'react', framework: 'react', tier: 3 },
58
+ ];
59
+ const PY_FRAMEWORK_RULES = [
60
+ { dep: 'fastapi', framework: 'fastapi', tier: 1 },
61
+ { dep: 'flask', framework: 'flask', tier: 1 },
62
+ { dep: 'django', framework: 'django', tier: 1 },
63
+ ];
64
+ const TIER_SKIP_REASONS = {
65
+ 4: 'Framework requires a runtime that cannot be invoked locally (Metro/worker runtime). Set canTest: false.',
66
+ };
67
+ const probeCache = new Map();
68
+ function probe(bin) {
69
+ if (probeCache.has(bin))
70
+ return probeCache.get(bin);
71
+ let ok = false;
72
+ try {
73
+ const r = (0, child_process_1.spawnSync)(bin, ['--version'], {
74
+ stdio: 'ignore',
75
+ shell: process.platform === 'win32',
76
+ timeout: 4000,
77
+ });
78
+ ok = r.status === 0;
46
79
  }
47
- if (fs.existsSync(path.join(workspaceRoot, 'deno.json')) ||
48
- fs.existsSync(path.join(workspaceRoot, 'deno.jsonc'))) {
49
- return { runtime: 'deno', runner: 'deno', hasBunLock: false };
80
+ catch {
81
+ ok = false;
50
82
  }
51
- return { runtime: 'node', runner: 'tsx', hasBunLock: false };
83
+ probeCache.set(bin, ok);
84
+ return ok;
85
+ }
86
+ function readJson(file) {
87
+ try {
88
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ }
94
+ function exists(...files) {
95
+ return files.some(f => fs.existsSync(f));
96
+ }
97
+ function findNearest(startDir, root, candidates) {
98
+ let dir = startDir;
99
+ const rootAbs = path.resolve(root);
100
+ while (true) {
101
+ for (const c of candidates) {
102
+ const p = path.join(dir, c);
103
+ if (fs.existsSync(p))
104
+ return { dir, file: p };
105
+ }
106
+ const parent = path.dirname(dir);
107
+ if (parent === dir || !dir.startsWith(rootAbs))
108
+ break;
109
+ dir = parent;
110
+ }
111
+ return null;
112
+ }
113
+ function detectJsFramework(pkg) {
114
+ if (!pkg)
115
+ return { framework: null, version: null, tier: 1 };
116
+ const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
117
+ for (const rule of JS_FRAMEWORK_RULES) {
118
+ if (deps[rule.dep]) {
119
+ return { framework: rule.framework, version: deps[rule.dep] || null, tier: rule.tier };
120
+ }
121
+ }
122
+ return { framework: null, version: null, tier: 1 };
123
+ }
124
+ function detectPyFramework(startDir, root) {
125
+ const reqs = findNearest(startDir, root, ['requirements.txt', 'pyproject.toml', 'setup.py', 'Pipfile']);
126
+ if (!reqs)
127
+ return { framework: null, version: null, tier: 1 };
128
+ let text = '';
129
+ try {
130
+ text = fs.readFileSync(reqs.file, 'utf8');
131
+ }
132
+ catch {
133
+ return { framework: null, version: null, tier: 1 };
134
+ }
135
+ const lower = text.toLowerCase();
136
+ for (const rule of PY_FRAMEWORK_RULES) {
137
+ const re = new RegExp(`^\\s*${rule.dep}(\\s*[=><~!]|\\s*$)`, 'im');
138
+ if (re.test(lower)) {
139
+ const verMatch = lower.match(new RegExp(`${rule.dep}\\s*[=><~!]*\\s*([0-9][0-9a-zA-Z.\\-]*)`, 'im'));
140
+ return { framework: rule.framework, version: verMatch ? verMatch[1] : null, tier: rule.tier };
141
+ }
142
+ }
143
+ return { framework: null, version: null, tier: 1 };
144
+ }
145
+ function resolveJsRunner(runtime, pkgManager) {
146
+ if (runtime === 'bun')
147
+ return probe('bun') ? 'bun' : 'tsx';
148
+ if (runtime === 'deno')
149
+ return probe('deno') ? 'deno' : 'tsx';
150
+ if (pkgManager === 'pnpm' && probe('pnpm'))
151
+ return 'pnpm-tsx';
152
+ if (pkgManager === 'yarn' && probe('yarn'))
153
+ return 'yarn-tsx';
154
+ return 'tsx';
155
+ }
156
+ function resolvePythonRunner() {
157
+ if (probe('python3'))
158
+ return { runner: 'python3', installed: true };
159
+ if (probe('python'))
160
+ return { runner: 'python', installed: true };
161
+ return { runner: 'python3', installed: false };
162
+ }
163
+ function detectPackageManager(pkg, nearest) {
164
+ if (pkg?.packageManager) {
165
+ const pm = String(pkg.packageManager).toLowerCase();
166
+ if (pm.startsWith('bun'))
167
+ return 'bun';
168
+ if (pm.startsWith('pnpm'))
169
+ return 'pnpm';
170
+ if (pm.startsWith('yarn'))
171
+ return 'yarn';
172
+ if (pm.startsWith('npm'))
173
+ return 'npm';
174
+ }
175
+ if (nearest) {
176
+ const dir = nearest.dir;
177
+ if (exists(path.join(dir, 'bun.lockb'), path.join(dir, 'bun.lock')))
178
+ return 'bun';
179
+ if (exists(path.join(dir, 'pnpm-lock.yaml')))
180
+ return 'pnpm';
181
+ if (exists(path.join(dir, 'yarn.lock')))
182
+ return 'yarn';
183
+ if (exists(path.join(dir, 'package-lock.json')))
184
+ return 'npm';
185
+ }
186
+ return 'npm';
187
+ }
188
+ function detectRuntime(workspaceRoot, filePath) {
189
+ const rootAbs = path.resolve(workspaceRoot);
190
+ const isPythonFile = filePath ? /\.p(yi?|yx)$/i.test(filePath) : false;
191
+ if (isPythonFile) {
192
+ const startDir = filePath
193
+ ? path.resolve(rootAbs, path.dirname(filePath))
194
+ : rootAbs;
195
+ const py = resolvePythonRunner();
196
+ const { framework, version, tier } = detectPyFramework(startDir, rootAbs);
197
+ const pkgMan = (() => {
198
+ if (exists(path.join(startDir, 'poetry.lock')))
199
+ return 'poetry';
200
+ if (exists(path.join(startDir, 'uv.lock')))
201
+ return 'uv';
202
+ if (exists(path.join(startDir, 'Pipfile')))
203
+ return 'pip';
204
+ if (exists(path.join(startDir, 'requirements.txt'), path.join(startDir, 'pyproject.toml')))
205
+ return 'pip';
206
+ return null;
207
+ })();
208
+ const canRun = py.installed && tier !== 4;
209
+ return {
210
+ runtime: 'python',
211
+ runner: py.runner,
212
+ packageManager: pkgMan,
213
+ framework,
214
+ frameworkVersion: version,
215
+ testabilityTier: tier,
216
+ canRunLocally: canRun,
217
+ skipReason: !py.installed
218
+ ? 'Python interpreter not found in PATH. Install python3 to run local exploit tests.'
219
+ : tier === 4 ? TIER_SKIP_REASONS[4] : undefined,
220
+ hasBunLock: false,
221
+ depsInstalled: exists(path.join(startDir, '__pycache__')) || exists(path.join(startDir, '.venv'), path.join(startDir, 'venv')),
222
+ };
223
+ }
224
+ const startDir = filePath
225
+ ? path.resolve(rootAbs, path.dirname(filePath))
226
+ : rootAbs;
227
+ const nearestPkg = findNearest(startDir, rootAbs, ['package.json']);
228
+ const pkg = nearestPkg ? readJson(nearestPkg.file) : null;
229
+ const hasBunLock = exists(path.join(rootAbs, 'bun.lockb'), path.join(rootAbs, 'bun.lock'), path.join(rootAbs, 'bunfig.toml'));
230
+ let runtime = 'node';
231
+ const nearestLock = findNearest(startDir, rootAbs, [
232
+ 'bun.lockb', 'bun.lock', 'bunfig.toml',
233
+ 'deno.json', 'deno.jsonc',
234
+ 'package-lock.json', 'pnpm-lock.yaml', 'yarn.lock',
235
+ ]);
236
+ if (pkg?.packageManager && String(pkg.packageManager).toLowerCase().startsWith('bun')) {
237
+ runtime = 'bun';
238
+ }
239
+ else if (pkg?.engines?.bun) {
240
+ runtime = 'bun';
241
+ }
242
+ else if (hasBunLock) {
243
+ runtime = 'bun';
244
+ }
245
+ else if (pkg?.packageManager && String(pkg.packageManager).toLowerCase().startsWith('deno')) {
246
+ runtime = 'deno';
247
+ }
248
+ else if (exists(path.join(rootAbs, 'deno.json'), path.join(rootAbs, 'deno.jsonc'))) {
249
+ runtime = 'deno';
250
+ }
251
+ else if (nearestLock?.file.endsWith('deno.json') || nearestLock?.file.endsWith('deno.jsonc')) {
252
+ runtime = 'deno';
253
+ }
254
+ else {
255
+ runtime = 'node';
256
+ }
257
+ const packageManager = detectPackageManager(pkg, nearestLock);
258
+ const { framework, version, tier } = detectJsFramework(pkg);
259
+ const runner = resolveJsRunner(runtime, packageManager);
260
+ const canRun = tier !== 4;
261
+ const depsInstalled = (() => {
262
+ const searchDirs = [startDir, rootAbs];
263
+ for (const d of searchDirs) {
264
+ if (exists(path.join(d, 'node_modules')))
265
+ return true;
266
+ }
267
+ if (nearestPkg) {
268
+ if (exists(path.join(nearestPkg.dir, 'node_modules')))
269
+ return true;
270
+ }
271
+ return false;
272
+ })();
273
+ return {
274
+ runtime,
275
+ runner,
276
+ packageManager,
277
+ framework,
278
+ frameworkVersion: version,
279
+ testabilityTier: tier,
280
+ canRunLocally: canRun,
281
+ skipReason: tier === 4 ? TIER_SKIP_REASONS[4] : undefined,
282
+ hasBunLock,
283
+ depsInstalled,
284
+ };
52
285
  }
53
286
  function computeRelativeImportPath(testFileDir, targetFilePath) {
54
287
  const rel = path.relative(testFileDir, targetFilePath);
55
288
  const normalized = rel.replace(/\\/g, '/');
289
+ if (/\.p(yi?|yx)$/i.test(targetFilePath)) {
290
+ const fromRoot = path.relative(path.dirname(testFileDir), targetFilePath).replace(/\\/g, '/');
291
+ return fromRoot.startsWith('.') ? fromRoot : `./${fromRoot}`;
292
+ }
56
293
  const withoutExt = normalized.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, '');
57
294
  return withoutExt.startsWith('.') ? withoutExt : `./${withoutExt}`;
58
295
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeDetect.js","sourceRoot":"","sources":["../../src/utils/runtimeDetect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,sCAeC;AAED,8DAKC;AAjCD,uCAAyB;AACzB,2CAA6B;AAU7B,SAAgB,aAAa,CAAC,aAAqB;IAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACnE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACnD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;IAE3D,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACpD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC;AAED,SAAgB,yBAAyB,CAAC,WAAmB,EAAE,cAAsB;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"runtimeDetect.js","sourceRoot":"","sources":["../../src/utils/runtimeDetect.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@securecode-ai/mcp",
3
- "version": "0.5.4",
3
+ "version": "0.5.5",
4
4
  "description": "Standalone SecureCode MCP server — scan, map, fix, and attack tools for AI coding assistants. Works without the VS Code extension.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {