@securecode-ai/mcp 0.4.9 → 0.5.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.
@@ -185,3 +185,17 @@ export interface SandboxProveResponse {
185
185
  };
186
186
  scanCredits?: number;
187
187
  }
188
+ export interface VerifyGenerateResponse {
189
+ canTest: boolean;
190
+ testScript?: string;
191
+ runner?: string;
192
+ description?: string;
193
+ skipReason?: string;
194
+ scanCredits?: number;
195
+ }
196
+ export interface VerifyAnalyzeResponse {
197
+ verdict: 'PROVEN' | 'UNPROVEN' | 'INCONCLUSIVE';
198
+ reason: string;
199
+ shouldRetry: boolean;
200
+ scanCredits?: number;
201
+ }
@@ -0,0 +1,31 @@
1
+ import type { ApiClient } from '../api/client';
2
+ export interface VerifyFinding {
3
+ type: string;
4
+ line: number;
5
+ lineEnd?: number;
6
+ evidence: string;
7
+ why: string;
8
+ severity: string;
9
+ }
10
+ export interface VerifyLoopOptions {
11
+ finding: VerifyFinding;
12
+ filePath: string;
13
+ code: string;
14
+ relatedFiles: Array<{
15
+ filePath: string;
16
+ content: string;
17
+ relationship: string;
18
+ }>;
19
+ workspaceRoot: string;
20
+ language: string;
21
+ client: ApiClient;
22
+ onProgress?: (round: number, maxRounds: number, message: string) => void;
23
+ }
24
+ export interface VerifyLoopResult {
25
+ verdict: 'PROVEN' | 'UNPROVEN' | 'INCONCLUSIVE';
26
+ reason: string;
27
+ roundsUsed: number;
28
+ testScript: string;
29
+ testOutput: string;
30
+ }
31
+ export declare function runVerifyLoop(opts: VerifyLoopOptions): Promise<VerifyLoopResult>;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runVerifyLoop = runVerifyLoop;
4
+ const localTestRunner_1 = require("../utils/localTestRunner");
5
+ const MAX_ROUNDS = 8;
6
+ async function runVerifyLoop(opts) {
7
+ const { finding, filePath, code, relatedFiles, workspaceRoot, language, client, onProgress } = opts;
8
+ const previousErrors = [];
9
+ let lastTestScript = '';
10
+ let lastTestOutput = '';
11
+ for (let round = 1; round <= MAX_ROUNDS; round++) {
12
+ onProgress?.(round, MAX_ROUNDS, `Round ${round}: generating test...`);
13
+ const genResp = await client.postJson('/verify/generate', {
14
+ code,
15
+ language,
16
+ vulnerabilityType: finding.type,
17
+ line: finding.line,
18
+ lineEnd: finding.lineEnd,
19
+ evidence: finding.evidence,
20
+ why: finding.why,
21
+ filePath,
22
+ relatedFiles,
23
+ previousErrors: previousErrors.length > 0 ? previousErrors : undefined,
24
+ });
25
+ if (!genResp.canTest || !genResp.testScript) {
26
+ return {
27
+ verdict: 'INCONCLUSIVE',
28
+ reason: genResp.skipReason || 'Could not generate a test for this vulnerability type.',
29
+ roundsUsed: round,
30
+ testScript: '',
31
+ testOutput: '',
32
+ };
33
+ }
34
+ lastTestScript = genResp.testScript;
35
+ const runner = genResp.runner || (language === 'typescript' ? 'tsx' : 'node');
36
+ onProgress?.(round, MAX_ROUNDS, `Round ${round}: running test...`);
37
+ const testResult = await (0, localTestRunner_1.runLocalTest)(genResp.testScript, runner, workspaceRoot);
38
+ lastTestOutput = testResult.output;
39
+ onProgress?.(round, MAX_ROUNDS, `Round ${round}: analyzing result...`);
40
+ const analyzeResp = await client.postJson('/verify/analyze', {
41
+ vulnerabilityType: finding.type,
42
+ line: finding.line,
43
+ evidence: finding.evidence,
44
+ why: finding.why,
45
+ testScript: genResp.testScript,
46
+ stdout: testResult.output,
47
+ stderr: '',
48
+ exitCode: testResult.exitCode,
49
+ round,
50
+ maxRounds: MAX_ROUNDS,
51
+ });
52
+ if (analyzeResp.verdict === 'PROVEN') {
53
+ return { verdict: 'PROVEN', reason: analyzeResp.reason, roundsUsed: round, testScript: lastTestScript, testOutput: lastTestOutput };
54
+ }
55
+ if (analyzeResp.verdict === 'UNPROVEN') {
56
+ return { verdict: 'UNPROVEN', reason: analyzeResp.reason, roundsUsed: round, testScript: lastTestScript, testOutput: lastTestOutput };
57
+ }
58
+ if (!analyzeResp.shouldRetry || round >= MAX_ROUNDS) {
59
+ return { verdict: 'INCONCLUSIVE', reason: analyzeResp.reason || `Could not verify after ${round} round(s).`, roundsUsed: round, testScript: lastTestScript, testOutput: lastTestOutput };
60
+ }
61
+ previousErrors.push(`Round ${round}: ${testResult.verdict} — ${testResult.output.slice(0, 500)}`);
62
+ }
63
+ return { verdict: 'INCONCLUSIVE', reason: `Exhausted all ${MAX_ROUNDS} rounds.`, roundsUsed: MAX_ROUNDS, testScript: lastTestScript, testOutput: lastTestOutput };
64
+ }
65
+ //# sourceMappingURL=verifyLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyLoop.js","sourceRoot":"","sources":["../../src/attack/verifyLoop.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,19 @@
1
1
  /**
2
- * securecode.agent-scan MCP tool — agent-mode scan with exploit proof.
2
+ * securecode.agent-scan MCP tool — agent-mode scan with exploit verification.
3
3
  *
4
4
  * An AI investigator that reads files, traces data flows, checks guards,
5
5
  * and compares endpoint policies to find vulnerabilities. Each high/critical
6
- * finding is then sent to the sandbox for PROVEN/UNPROVEN verification before
7
- * the Juror confirms it.
6
+ * finding is then verified by the verify subagent — a round-based loop that
7
+ * generates a local integration test, runs it on the user's machine, and
8
+ * analyzes the output for a PROVEN/UNPROVEN/INCONCLUSIVE verdict.
8
9
  *
9
10
  * Flow:
10
11
  * 1. Resolve code + language from filePath
11
12
  * 2. Build endpoint context from the project map
12
13
  * 3. Run the agent loop (POST /agent/scan/start + /step loop)
13
- * 4. For each high/critical finding → POST /sandbox/prove → PROVEN/UNPROVEN
14
- * 5. Map agent findings → CandidateContext[]
15
- * 6. POST /scan with scanDepth: 'agent' + candidateContexts (skips Scout,
16
- * Juror + Phase 3 verify the agent's candidates)
17
- * 7. Return merged result (agent findings + proven stamps + Juror-verified)
14
+ * 4. For each finding → runVerifyLoop (generate test → run locally → analyze)
15
+ * 5. Generate fixes for proven/suspected findings
16
+ * 6. Return result with proven stamps
18
17
  */
19
18
  import type { ServerContext } from '../mcp/types';
20
19
  export declare function toolAgentScan(ctx: ServerContext, args: any): Promise<unknown>;
@@ -1,21 +1,20 @@
1
1
  "use strict";
2
2
  /**
3
- * securecode.agent-scan MCP tool — agent-mode scan with exploit proof.
3
+ * securecode.agent-scan MCP tool — agent-mode scan with exploit verification.
4
4
  *
5
5
  * An AI investigator that reads files, traces data flows, checks guards,
6
6
  * and compares endpoint policies to find vulnerabilities. Each high/critical
7
- * finding is then sent to the sandbox for PROVEN/UNPROVEN verification before
8
- * the Juror confirms it.
7
+ * finding is then verified by the verify subagent — a round-based loop that
8
+ * generates a local integration test, runs it on the user's machine, and
9
+ * analyzes the output for a PROVEN/UNPROVEN/INCONCLUSIVE verdict.
9
10
  *
10
11
  * Flow:
11
12
  * 1. Resolve code + language from filePath
12
13
  * 2. Build endpoint context from the project map
13
14
  * 3. Run the agent loop (POST /agent/scan/start + /step loop)
14
- * 4. For each high/critical finding → POST /sandbox/prove → PROVEN/UNPROVEN
15
- * 5. Map agent findings → CandidateContext[]
16
- * 6. POST /scan with scanDepth: 'agent' + candidateContexts (skips Scout,
17
- * Juror + Phase 3 verify the agent's candidates)
18
- * 7. Return merged result (agent findings + proven stamps + Juror-verified)
15
+ * 4. For each finding → runVerifyLoop (generate test → run locally → analyze)
16
+ * 5. Generate fixes for proven/suspected findings
17
+ * 6. Return result with proven stamps
19
18
  */
20
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
20
  if (k2 === undefined) k2 = k;
@@ -59,15 +58,7 @@ const mapContext_1 = require("../project-map/mapContext");
59
58
  const scanCache_1 = require("../project-map/scanCache");
60
59
  const agentMemory_1 = require("../project-map/agentMemory");
61
60
  const agentScanLoop_1 = require("../attack/agentScanLoop");
62
- function mapFindingsToCandidates(findings) {
63
- return findings.map(f => ({
64
- line: f.line,
65
- lineEnd: f.lineEnd,
66
- type: f.type,
67
- snippet: f.evidence,
68
- definitionContext: f.why,
69
- }));
70
- }
61
+ const verifyLoop_1 = require("../attack/verifyLoop");
71
62
  /** Prove high/critical/medium findings — skip only low. */
72
63
  function shouldProve(finding) {
73
64
  return finding.severity === 'critical' || finding.severity === 'high' || finding.severity === 'medium';
@@ -194,25 +185,56 @@ async function toolAgentScan(ctx, args) {
194
185
  if (agentResult.status === 'spawn_failed') {
195
186
  throw new Error(agentResult.error || 'Agent scan failed to start.');
196
187
  }
197
- // 4. Prove each high/critical finding via the sandbox
188
+ // 4. Verify each finding via the verify subagent (replaces sandbox prove + juror)
198
189
  const client = new client_1.ApiClient({ baseUrl: ctx.apiUrl, token: ctx.apiToken });
199
190
  const provenFindings = [];
200
191
  const proveable = agentResult.findings.filter(shouldProve);
201
192
  if (proveable.length > 0 && progress) {
202
- progress(0, proveable.length, `Proving ${proveable.length} finding(s) in sandbox...`);
193
+ progress(0, proveable.length, `Verifying ${proveable.length} finding(s)...`);
203
194
  }
204
195
  let proveIdx = 0;
205
196
  for (const finding of agentResult.findings) {
206
197
  if (!shouldProve(finding)) {
207
- provenFindings.push({ ...finding, proven: 'SKIPPED', provenReason: 'Low severity — not proven' });
198
+ provenFindings.push({ ...finding, proven: 'SKIPPED', provenReason: 'Low severity — not verified' });
208
199
  continue;
209
200
  }
210
201
  if (progress) {
211
202
  proveIdx++;
212
- progress(proveIdx, proveable.length, `Proving ${finding.type} at line ${finding.line}...`);
203
+ progress(proveIdx, proveable.length, `Verifying ${finding.type} at line ${finding.line}...`);
213
204
  }
214
- let proved = false;
215
- for (let attempt = 1; attempt <= 2; attempt++) {
205
+ try {
206
+ const result = await (0, verifyLoop_1.runVerifyLoop)({
207
+ finding: {
208
+ type: finding.type,
209
+ line: finding.line,
210
+ lineEnd: finding.lineEnd,
211
+ evidence: finding.evidence,
212
+ why: finding.why,
213
+ severity: finding.severity,
214
+ },
215
+ filePath: filePath || '',
216
+ code,
217
+ relatedFiles: relatedFiles.map(rf => ({
218
+ filePath: rf.filePath,
219
+ content: rf.content,
220
+ relationship: rf.relationship,
221
+ })),
222
+ workspaceRoot: ctx.workspaceRoot,
223
+ language,
224
+ client,
225
+ onProgress: (round, maxR, msg) => {
226
+ if (progress)
227
+ progress(proveIdx, proveable.length, `Verify round ${round}/${maxR}: ${msg}`);
228
+ },
229
+ });
230
+ provenFindings.push({
231
+ ...finding,
232
+ proven: result.verdict,
233
+ provenReason: result.reason,
234
+ });
235
+ }
236
+ catch (err) {
237
+ console.warn(`[Agent Scan] Verify loop failed: ${err.message}. Falling back to sandbox prove.`);
216
238
  try {
217
239
  const proveResp = await client.postJson('/sandbox/prove', {
218
240
  code,
@@ -228,21 +250,13 @@ async function toolAgentScan(ctx, args) {
228
250
  proven: proveResp.proven,
229
251
  provenReason: proveResp.rationale || proveResp.skipReason || proveResp.sandbox?.reason,
230
252
  });
231
- proved = true;
232
- break;
233
253
  }
234
- catch (err) {
235
- if (attempt === 1) {
236
- console.warn(`[Agent Scan] Prove attempt 1 failed: ${err.message}. Retrying...`);
237
- await new Promise(r => setTimeout(r, 2000));
238
- }
239
- else {
240
- provenFindings.push({
241
- ...finding,
242
- proven: 'INCONCLUSIVE',
243
- provenReason: `Sandbox prove failed after 2 attempts: ${err.message || err}`,
244
- });
245
- }
254
+ catch (err2) {
255
+ provenFindings.push({
256
+ ...finding,
257
+ proven: 'INCONCLUSIVE',
258
+ provenReason: `Verify failed: ${err.message}; Sandbox fallback also failed: ${err2.message}`,
259
+ });
246
260
  }
247
261
  }
248
262
  }
@@ -283,57 +297,7 @@ async function toolAgentScan(ctx, args) {
283
297
  console.warn(`[Agent Scan] Fix generation failed for ${finding.type} at L${finding.line}: ${err.message}`);
284
298
  }
285
299
  }
286
- // 5. Map findings → CandidateContext[]
287
- const candidateContexts = mapFindingsToCandidates(provenFindings);
288
- // 6. If no findings, return early
289
- if (candidateContexts.length === 0) {
290
- if (useCache) {
291
- try {
292
- (0, scanCache_1.writeCachedScan)(ctx.workspaceRoot, filePath, code, {
293
- findings: provenFindings,
294
- status: agentResult.status,
295
- summary: agentResult.summary,
296
- stepsUsed: agentResult.stepsUsed,
297
- costSpentUsd: agentResult.costSpentUsd,
298
- });
299
- }
300
- catch (err) {
301
- console.warn(`[Agent Scan] Cache write skipped: ${err?.message || err}`);
302
- }
303
- }
304
- return {
305
- status: agentResult.status,
306
- summary: agentResult.summary || 'Agent completed with no findings.',
307
- findings: [],
308
- agentFindings: provenFindings,
309
- stepsUsed: agentResult.stepsUsed,
310
- costSpentUsd: agentResult.costSpentUsd,
311
- transcript: agentResult.transcript,
312
- };
313
- }
314
- // 7. POST /scan with scanDepth: 'agent' + candidateContexts
315
- // This skips Scout and sends the agent's candidates directly to Juror
316
- // + Phase 3 for verification.
317
- // If this call fails, return the agent findings without Juror
318
- // verification (degraded mode) instead of throwing everything away.
319
- let scanResp = null;
320
- try {
321
- scanResp = await client.postJson('/scan', {
322
- code,
323
- language,
324
- ...(filePath ? { filePath } : {}),
325
- scanDepth: 'agent',
326
- candidateContexts,
327
- ...(endpointContext.length > 0 ? { endpointContext } : {}),
328
- ...(relatedFiles.length > 0 ? { workspaceHints: { relatedFiles } } : {}),
329
- });
330
- }
331
- catch (err) {
332
- // Juror verification failed — return agent findings as-is (degraded).
333
- // This is better than throwing, which would lose all the agent's work.
334
- console.warn(`[Agent Scan] Juror verification failed (${err?.message || err}). Returning agent findings without verification.`);
335
- }
336
- // 8. Write to cache before returning
300
+ // 5. Write to cache before returning
337
301
  if (useCache) {
338
302
  try {
339
303
  (0, scanCache_1.writeCachedScan)(ctx.workspaceRoot, filePath, code, {
@@ -348,37 +312,13 @@ async function toolAgentScan(ctx, args) {
348
312
  console.warn(`[Agent Scan] Cache write skipped: ${err?.message || err}`);
349
313
  }
350
314
  }
351
- // 9. Return merged result with proven stamps
352
- // If Juror failed, scanResp is null — return agent findings as verified=false
353
- if (!scanResp) {
354
- return {
355
- status: agentResult.status,
356
- summary: (agentResult.summary || 'Agent completed') + ' (Juror verification skipped — degraded)',
357
- agentFindings: provenFindings,
358
- verifiedFindings: [],
359
- allFindings: [],
360
- degraded: true,
361
- stepsUsed: agentResult.stepsUsed,
362
- costSpentUsd: agentResult.costSpentUsd,
363
- transcript: agentResult.transcript,
364
- provenCount: provenFindings.filter(f => f.proven === 'PROVEN').length,
365
- unprovenCount: provenFindings.filter(f => f.proven === 'UNPROVEN').length,
366
- inconclusiveCount: provenFindings.filter(f => f.proven === 'INCONCLUSIVE').length,
367
- notReproducibleCount: provenFindings.filter(f => f.proven === 'NOT_REPRODUCIBLE').length,
368
- skippedCount: provenFindings.filter(f => f.proven === 'SKIPPED').length,
369
- };
370
- }
315
+ // 6. Return result — the verify subagent IS the verifier (no separate Juror call)
371
316
  return {
372
317
  status: agentResult.status,
373
318
  summary: agentResult.summary,
374
319
  agentFindings: provenFindings,
375
- verifiedFindings: scanResp.finalFindings || [],
376
- allFindings: scanResp.findings || [],
377
- scanId: scanResp.scanId,
378
- scanType: scanResp.scanType,
379
- degraded: scanResp.degraded,
380
- scanCredits: scanResp.scanCredits,
381
- plan: scanResp.plan,
320
+ verifiedFindings: provenFindings.filter(f => f.proven === 'PROVEN'),
321
+ allFindings: [],
382
322
  stepsUsed: agentResult.stepsUsed,
383
323
  costSpentUsd: agentResult.costSpentUsd,
384
324
  transcript: agentResult.transcript,
@@ -1 +1 @@
1
- {"version":3,"file":"agentScan.js","sourceRoot":"","sources":["../../src/tools/agentScan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agentScan.js","sourceRoot":"","sources":["../../src/tools/agentScan.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBH,sCAqRC;AA3SD,0CAA0C;AAC1C,2CAA6B;AAE7B,0CAAuD;AACvD,0DAA8F;AAC9F,wDAA0E;AAC1E,4DAAoF;AACpF,2DAAuD;AACvD,qDAAqD;AASrD,2DAA2D;AAC3D,SAAS,WAAW,CAAC,OAAyB;IAC1C,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC3G,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,GAAkB,EAAE,IAAS;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAqF,CAAC;IAE5G,6BAA6B;IAC7B,IAAI,IAAY,CAAC;IACjB,IAAI,QAAgB,CAAC;IACrB,IAAI,QAA4B,CAAC;IAEjC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,MAAM,UAAU,GAAG,IAAA,6BAAqB,EAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QACvB,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC;IACpD,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACjB,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;IAC7C,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACjE,CAAC;IAED,4EAA4E;IAC5E,kEAAkE;IAClE,yEAAyE;IACzE,oCAAoC;IACpC,MAAM,cAAc,GAAG,SAAS,CAAC;IACjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACH,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,kCAAkC;YAC3C,aAAa,EAAE,EAAE;YACjB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,CAAC;SACjB,CAAC;IACN,CAAC;IACD,0EAA0E;IAC1E,4EAA4E;IAC5E,iCAAiC;IACjC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,cAAc,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,0FAA0F,CAAC,CAAC;IACzI,CAAC;IAED,iEAAiE;IACjE,IAAI,eAAe,GAAU,EAAE,CAAC;IAChC,IAAI,YAAY,GAAU,EAAE,CAAC;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACrC,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAClC,IAAA,sCAAyB,EAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC;gBACtD,IAAA,mCAAsB,EAAC,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC;aACrD,CAAC,CAAC;YACH,eAAe,GAAG,GAAG,CAAC;YACtB,YAAY,GAAG,IAAI,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACL,wCAAwC;QAC5C,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC5B,IAAI,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAA,yBAAa,EAAC,GAAG,CAAC,aAAa,EAAE,QAAS,EAAE,IAAI,CAAC,CAAC;YACjE,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,QAAQ;oBAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,iDAAiD,CAAC,CAAC;gBAChF,OAAO;oBACH,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;oBACtD,aAAa,EAAE,MAAM,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,EAAE;oBACZ,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,YAAY,EAAE,CAAC;oBACf,UAAU,EAAE,EAAE;oBACd,MAAM,EAAE,IAAI;oBACZ,WAAW,EAAG,MAAM,CAAC,QAAkB,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;iBAC3F,CAAC;YACN,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,iEAAiE;YACjE,oDAAoD;YACpD,OAAO,CAAC,IAAI,CAAC,oCAAoC,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,8EAA8E;IAC9E,IAAI,eAAmC,CAAC;IACxC,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,6BAAe,EAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,eAAe,GAAG,IAAA,mCAAqB,EAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACL,uCAAuC;IAC3C,CAAC;IAED,MAAM,MAAM,GAAoB;QAC5B,QAAQ,EAAE,QAAQ,IAAI,aAAa;QACnC,QAAQ;QACR,WAAW,EAAE,IAAI;QACjB,eAAe;QACf,eAAe;KAClB,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,IAAA,4BAAY,EAAC,GAAG,EAAE,MAAM,EAAE;QAChD,MAAM,EAAG,IAAY,CAAC,OAAkC;QACxD,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5B,IAAI,QAAQ;gBAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,WAAW,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,6BAA6B,CAAC,CAAC;IACxE,CAAC;IAED,kFAAkF;IAClF,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAoB,EAAE,CAAC;IAE3C,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACnC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,aAAa,SAAS,CAAC,MAAM,gBAAgB,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,6BAA6B,EAAE,CAAC,CAAC;YACpG,SAAS;QACb,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,aAAa,OAAO,CAAC,IAAI,YAAY,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC;QACjG,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC;gBAC/B,OAAO,EAAE;oBACL,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC7B;gBACD,QAAQ,EAAE,QAAQ,IAAI,EAAE;gBACxB,IAAI;gBACJ,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClC,QAAQ,EAAE,EAAE,CAAC,QAAQ;oBACrB,OAAO,EAAE,EAAE,CAAC,OAAO;oBACnB,YAAY,EAAE,EAAE,CAAC,YAAY;iBAChC,CAAC,CAAC;gBACH,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,QAAQ;gBACR,MAAM;gBACN,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;oBAC7B,IAAI,QAAQ;wBAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;gBAChG,CAAC;aACJ,CAAC,CAAC;YAEH,cAAc,CAAC,IAAI,CAAC;gBAChB,GAAG,OAAO;gBACV,MAAM,EAAE,MAAM,CAAC,OAAO;gBACtB,YAAY,EAAE,MAAM,CAAC,MAAM;aAC9B,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,oCAAoC,GAAG,CAAC,OAAO,kCAAkC,CAAC,CAAC;YAChG,IAAI,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAuB,gBAAgB,EAAE;oBAC5E,IAAI;oBACJ,QAAQ;oBACR,iBAAiB,EAAE,OAAO,CAAC,IAAI;oBAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;iBACnB,CAAC,CAAC;gBACH,cAAc,CAAC,IAAI,CAAC;oBAChB,GAAG,OAAO;oBACV,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,YAAY,EAAE,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM;iBACzF,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,IAAS,EAAE,CAAC;gBACjB,cAAc,CAAC,IAAI,CAAC;oBAChB,GAAG,OAAO;oBACV,MAAM,EAAE,cAAc;oBACtB,YAAY,EAAE,kBAAkB,GAAG,CAAC,OAAO,mCAAmC,IAAI,CAAC,OAAO,EAAE;iBAC/F,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,mDAAmD;IACnD,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAC3E,CAAC;IAEF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzC,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,EAAE,wBAAwB,eAAe,CAAC,MAAM,gBAAgB,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,UAAU,OAAO,CAAC,IAAI,YAAY,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAc,MAAM,EAAE;gBACvD,IAAI;gBACJ,QAAQ;gBACR,aAAa,EAAE;oBACX,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,UAAU,EAAE,OAAO,CAAC,IAAI;oBACxB,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI;oBACzC,gBAAgB,EAAE,OAAO,CAAC,QAAQ;iBACrC;aACJ,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,GAAG;oBACV,SAAS,EAAE,OAAO,CAAC,UAAU;oBAC7B,YAAY,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;oBACrF,UAAU,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;oBACrC,aAAa,EAAE,OAAO,CAAC,cAAc;oBACrC,UAAU,EAAE,OAAO,CAAC,UAAU;iBACjC,CAAC;YACN,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,0CAA0C;YAC1C,OAAO,CAAC,IAAI,CAAC,0CAA0C,OAAO,CAAC,IAAI,QAAQ,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/G,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,CAAC;YACD,IAAA,2BAAe,EAAC,GAAG,CAAC,aAAa,EAAE,QAAS,EAAE,IAAI,EAAE;gBAChD,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,YAAY,EAAE,WAAW,CAAC,YAAY;aACzC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,qCAAqC,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IAED,kFAAkF;IAClF,OAAO;QACH,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,aAAa,EAAE,cAAc;QAC7B,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;QACnE,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;QACrE,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;QACzE,iBAAiB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,MAAM;QACjF,oBAAoB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,kBAAkB,CAAC,CAAC,MAAM;QACxF,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;KAC1E,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface LocalTestResult {
2
+ verdict: 'pass' | 'fail' | 'error' | 'timeout';
3
+ output: string;
4
+ exitCode: number;
5
+ }
6
+ export declare function runLocalTest(script: string, runner: string, workspaceRoot: string): Promise<LocalTestResult>;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runLocalTest = runLocalTest;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const child_process_1 = require("child_process");
40
+ const testSafety_1 = require("./testSafety");
41
+ const PASS_PATTERN = /^PASS:\s*(.+)$/m;
42
+ const FAIL_PATTERN = /^FAIL:\s*(.+)$/m;
43
+ const TIMEOUT_MS = 30_000;
44
+ async function runLocalTest(script, runner, workspaceRoot) {
45
+ const safety = (0, testSafety_1.checkTestSafety)(script, workspaceRoot);
46
+ if (!safety.allowed) {
47
+ return { verdict: 'error', output: `Test script blocked: ${safety.reason}`, exitCode: -1 };
48
+ }
49
+ const testDir = path.join(workspaceRoot, '.securecode');
50
+ if (!fs.existsSync(testDir))
51
+ fs.mkdirSync(testDir, { recursive: true });
52
+ const ext = runner === 'tsx' || runner === 'ts' ? '.test.ts' : '.test.js';
53
+ const testFile = path.join(testDir, `verify-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}${ext}`);
54
+ try {
55
+ fs.writeFileSync(testFile, script, 'utf8');
56
+ let stdout = '';
57
+ let stderr = '';
58
+ let exitCode = 0;
59
+ let timedOut = false;
60
+ try {
61
+ const runnerBin = runner === 'tsx' ? 'npx' : runner;
62
+ const runnerArgs = runner === 'tsx' ? ['tsx', testFile] : [testFile];
63
+ stdout = (0, child_process_1.execFileSync)(runnerBin, runnerArgs, {
64
+ cwd: workspaceRoot,
65
+ timeout: TIMEOUT_MS,
66
+ encoding: 'utf8',
67
+ stdio: ['pipe', 'pipe', 'pipe'],
68
+ env: { ...process.env, NODE_ENV: 'test' },
69
+ });
70
+ }
71
+ catch (err) {
72
+ stdout = err.stdout || '';
73
+ stderr = err.stderr || '';
74
+ exitCode = err.status ?? 1;
75
+ if (err.signal === 'SIGTERM')
76
+ timedOut = true;
77
+ }
78
+ const output = (stdout + '\n' + stderr).trim();
79
+ if (timedOut) {
80
+ return { verdict: 'timeout', output: 'Test timed out after 30s', exitCode: -1 };
81
+ }
82
+ if (PASS_PATTERN.test(output)) {
83
+ return { verdict: 'pass', output, exitCode };
84
+ }
85
+ if (FAIL_PATTERN.test(output)) {
86
+ return { verdict: 'fail', output, exitCode };
87
+ }
88
+ if (exitCode === 0) {
89
+ return { verdict: 'error', output: output + '\nTest exited 0 but did not print PASS: or FAIL:', exitCode };
90
+ }
91
+ return { verdict: 'error', output, exitCode };
92
+ }
93
+ catch (err) {
94
+ return { verdict: 'error', output: err.message || String(err), exitCode: -1 };
95
+ }
96
+ finally {
97
+ try {
98
+ fs.unlinkSync(testFile);
99
+ }
100
+ catch { }
101
+ }
102
+ }
103
+ //# sourceMappingURL=localTestRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localTestRunner.js","sourceRoot":"","sources":["../../src/utils/localTestRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function checkTestSafety(script: string, _workspaceRoot: string): {
2
+ allowed: boolean;
3
+ reason: string;
4
+ };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkTestSafety = checkTestSafety;
4
+ const BLOCKED_MODULES = new Set(['child_process', 'net', 'cluster', 'worker_threads']);
5
+ const BLOCKED_PATTERNS = [
6
+ { pattern: /process\.exit\s*\(/g, reason: () => 'process.exit() masks test results — use console.error + throw instead' },
7
+ { pattern: /require\s*\(\s*[a-zA-Z_$][a-zA-Z0-9_$]*\s*\)/g, reason: () => 'dynamic require with variable is not statically checkable' },
8
+ ];
9
+ const ALLOWED_IMPORT_PREFIXES = ['node:', 'effect', 'bun', 'bun:', '@synara/', './', '../'];
10
+ const BLOCKED_MODULE_REASONS = {
11
+ child_process: 'child_process is blocked — use only for testing command injection with mock spawns',
12
+ net: 'net is blocked — use HTTP libraries instead',
13
+ cluster: 'cluster is blocked',
14
+ worker_threads: 'worker_threads is blocked',
15
+ };
16
+ function checkTestSafety(script, _workspaceRoot) {
17
+ for (const { pattern, reason } of BLOCKED_PATTERNS) {
18
+ pattern.lastIndex = 0;
19
+ if (pattern.test(script)) {
20
+ return { allowed: false, reason: reason('') };
21
+ }
22
+ }
23
+ const importRegex = /(?:import\s+[^;]+?from\s*|require\s*\(\s*)["']([^"']+)["']/g;
24
+ let match;
25
+ while ((match = importRegex.exec(script)) !== null) {
26
+ const mod = match[1];
27
+ if (BLOCKED_MODULES.has(mod)) {
28
+ return { allowed: false, reason: BLOCKED_MODULE_REASONS[mod] || mod };
29
+ }
30
+ if (mod.startsWith('node:') || mod.startsWith('./') || mod.startsWith('../'))
31
+ continue;
32
+ if (mod.startsWith('effect') || mod.startsWith('bun') || mod.startsWith('@synara/'))
33
+ continue;
34
+ if (ALLOWED_IMPORT_PREFIXES.some(p => mod.startsWith(p)))
35
+ continue;
36
+ }
37
+ return { allowed: true, reason: '' };
38
+ }
39
+ //# sourceMappingURL=testSafety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testSafety.js","sourceRoot":"","sources":["../../src/utils/testSafety.ts"],"names":[],"mappings":";;AAgBA,0CAqBC;AArCD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEvF,MAAM,gBAAgB,GAAgE;IAClF,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,uEAAuE,EAAE;IACzH,EAAE,OAAO,EAAE,+CAA+C,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,2DAA2D,EAAE;CAC1I,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAE5F,MAAM,sBAAsB,GAA2B;IACnD,aAAa,EAAE,oFAAoF;IACnG,GAAG,EAAE,6CAA6C;IAClD,OAAO,EAAE,oBAAoB;IAC7B,cAAc,EAAE,2BAA2B;CAC9C,CAAC;AAEF,SAAgB,eAAe,CAAC,MAAc,EAAE,cAAsB;IAClE,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACjD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAClD,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,6DAA6D,CAAC;IAClF,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;QAC1E,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS;QACvF,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QAC9F,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;IACvE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@securecode-ai/mcp",
3
- "version": "0.4.9",
3
+ "version": "0.5.0",
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": {