@securecode-ai/mcp 0.5.4 → 0.5.6
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/api/types.d.ts +7 -0
- package/dist/approval/auditLog.d.ts +1 -1
- package/dist/approval/auditLog.js +11 -3
- package/dist/approval/auditLog.js.map +1 -1
- package/dist/approval/broker.d.ts +7 -2
- package/dist/approval/broker.js +239 -110
- package/dist/approval/broker.js.map +1 -1
- package/dist/approval/policy.d.ts +10 -0
- package/dist/approval/policy.js +104 -0
- package/dist/approval/policy.js.map +1 -0
- package/dist/approval/types.d.ts +11 -2
- package/dist/approval/types.js +10 -1
- package/dist/approval/types.js.map +1 -1
- package/dist/attack/agentScanExecutor.d.ts +35 -1
- package/dist/attack/agentScanExecutor.js +405 -76
- package/dist/attack/agentScanExecutor.js.map +1 -1
- package/dist/attack/agentScanLoop.d.ts +20 -0
- package/dist/attack/agentScanLoop.js +1264 -60
- package/dist/attack/agentScanLoop.js.map +1 -1
- package/dist/attack/agentScanProtocol.d.ts +382 -6
- package/dist/attack/agentScanProtocol.js +110 -4
- package/dist/attack/agentScanProtocol.js.map +1 -1
- package/dist/attack/agentTrace.d.ts +73 -0
- package/dist/attack/agentTrace.js +228 -0
- package/dist/attack/agentTrace.js.map +1 -0
- package/dist/attack/architectureScoutExecutor.d.ts +18 -0
- package/dist/attack/architectureScoutExecutor.js +211 -0
- package/dist/attack/architectureScoutExecutor.js.map +1 -0
- package/dist/attack/architectureScoutLoop.d.ts +36 -0
- package/dist/attack/architectureScoutLoop.js +403 -0
- package/dist/attack/architectureScoutLoop.js.map +1 -0
- package/dist/attack/architectureScoutProtocol.d.ts +209 -0
- package/dist/attack/architectureScoutProtocol.js +47 -0
- package/dist/attack/architectureScoutProtocol.js.map +1 -0
- package/dist/attack/candidateStore.d.ts +95 -0
- package/dist/attack/candidateStore.js +231 -0
- package/dist/attack/candidateStore.js.map +1 -0
- package/dist/attack/evidenceLedger.d.ts +67 -0
- package/dist/attack/evidenceLedger.js +192 -0
- package/dist/attack/evidenceLedger.js.map +1 -0
- package/dist/attack/finishGate.d.ts +62 -0
- package/dist/attack/finishGate.js +209 -0
- package/dist/attack/finishGate.js.map +1 -0
- package/dist/attack/fixCodeMerge.d.ts +27 -0
- package/dist/attack/fixCodeMerge.js +42 -0
- package/dist/attack/fixCodeMerge.js.map +1 -0
- package/dist/attack/fixVerifyLoop.d.ts +55 -0
- package/dist/attack/fixVerifyLoop.js +187 -0
- package/dist/attack/fixVerifyLoop.js.map +1 -0
- package/dist/attack/investigationProfiles.d.ts +36 -0
- package/dist/attack/investigationProfiles.js +144 -0
- package/dist/attack/investigationProfiles.js.map +1 -0
- package/dist/attack/investigationState.d.ts +227 -0
- package/dist/attack/investigationState.js +666 -0
- package/dist/attack/investigationState.js.map +1 -0
- package/dist/attack/mutationOperators.d.ts +22 -0
- package/dist/attack/mutationOperators.js +170 -0
- package/dist/attack/mutationOperators.js.map +1 -0
- package/dist/attack/mutationTest.d.ts +33 -0
- package/dist/attack/mutationTest.js +110 -0
- package/dist/attack/mutationTest.js.map +1 -0
- package/dist/attack/proofGate.d.ts +20 -0
- package/dist/attack/proofGate.js +104 -0
- package/dist/attack/proofGate.js.map +1 -0
- package/dist/attack/proofTypes.d.ts +57 -0
- package/dist/attack/proofTypes.js +32 -0
- package/dist/attack/proofTypes.js.map +1 -0
- package/dist/attack/protocolValidator.d.ts +50 -0
- package/dist/attack/protocolValidator.js +427 -0
- package/dist/attack/protocolValidator.js.map +1 -0
- package/dist/attack/qualityMetrics.d.ts +133 -0
- package/dist/attack/qualityMetrics.js +226 -0
- package/dist/attack/qualityMetrics.js.map +1 -0
- package/dist/attack/scanScheduler.d.ts +52 -0
- package/dist/attack/scanScheduler.js +265 -0
- package/dist/attack/scanScheduler.js.map +1 -0
- package/dist/attack/scanState.d.ts +58 -0
- package/dist/attack/scanState.js +102 -0
- package/dist/attack/scanState.js.map +1 -0
- package/dist/attack/searchIntent.d.ts +16 -0
- package/dist/attack/searchIntent.js +57 -0
- package/dist/attack/searchIntent.js.map +1 -0
- package/dist/attack/verifyLoop.d.ts +43 -0
- package/dist/attack/verifyLoop.js +329 -15
- package/dist/attack/verifyLoop.js.map +1 -1
- package/dist/attack/workItem.d.ts +57 -0
- package/dist/attack/workItem.js +225 -0
- package/dist/attack/workItem.js.map +1 -0
- package/dist/audit/findingReviewQueue.d.ts +109 -0
- package/dist/audit/findingReviewQueue.js +335 -0
- package/dist/audit/findingReviewQueue.js.map +1 -0
- package/dist/audit/scanAuditLog.d.ts +160 -0
- package/dist/audit/scanAuditLog.js +404 -0
- package/dist/audit/scanAuditLog.js.map +1 -0
- package/dist/dependency/dependencyChecker.js +35 -9
- package/dist/dependency/dependencyChecker.js.map +1 -1
- package/dist/dependency/exploitPriority.d.ts +33 -0
- package/dist/dependency/exploitPriority.js +78 -0
- package/dist/dependency/exploitPriority.js.map +1 -0
- package/dist/dependency/finding.d.ts +16 -0
- package/dist/dependency/osvClient.js +2 -0
- package/dist/dependency/osvClient.js.map +1 -1
- package/dist/dependency/types.d.ts +12 -1
- package/dist/mcp/server.js +13 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +1 -0
- package/dist/mcp/tools.js +127 -6
- package/dist/mcp/tools.js.map +1 -1
- package/dist/project-map/agentMemory.d.ts +83 -1
- package/dist/project-map/agentMemory.js +197 -7
- package/dist/project-map/agentMemory.js.map +1 -1
- package/dist/project-map/architectureContext.d.ts +202 -0
- package/dist/project-map/architectureContext.js +421 -0
- package/dist/project-map/architectureContext.js.map +1 -0
- package/dist/project-map/blastRadius.d.ts +54 -0
- package/dist/project-map/blastRadius.js +196 -0
- package/dist/project-map/blastRadius.js.map +1 -0
- package/dist/project-map/callGraphExtractor.d.ts +13 -0
- package/dist/project-map/callGraphExtractor.js +222 -0
- package/dist/project-map/callGraphExtractor.js.map +1 -0
- package/dist/project-map/capabilityRegistry.d.ts +46 -0
- package/dist/project-map/capabilityRegistry.js +91 -0
- package/dist/project-map/capabilityRegistry.js.map +1 -0
- package/dist/project-map/findTests.d.ts +29 -0
- package/dist/project-map/findTests.js +236 -0
- package/dist/project-map/findTests.js.map +1 -0
- package/dist/project-map/handlerInventory.d.ts +112 -0
- package/dist/project-map/handlerInventory.js +184 -0
- package/dist/project-map/handlerInventory.js.map +1 -0
- package/dist/project-map/implementationResolver.d.ts +43 -0
- package/dist/project-map/implementationResolver.js +217 -0
- package/dist/project-map/implementationResolver.js.map +1 -0
- package/dist/project-map/mapContext.d.ts +6 -1
- package/dist/project-map/mapContext.js +1 -0
- package/dist/project-map/mapContext.js.map +1 -1
- package/dist/project-map/scanCache.d.ts +57 -3
- package/dist/project-map/scanCache.js +61 -2
- package/dist/project-map/scanCache.js.map +1 -1
- package/dist/project-map/symbolIndex.d.ts +39 -0
- package/dist/project-map/symbolIndex.js +385 -0
- package/dist/project-map/symbolIndex.js.map +1 -0
- package/dist/tooling/agentEvalScoring.d.ts +77 -0
- package/dist/tooling/agentEvalScoring.js +140 -0
- package/dist/tooling/agentEvalScoring.js.map +1 -0
- package/dist/tooling/agentRegression.d.ts +53 -0
- package/dist/tooling/agentRegression.js +99 -0
- package/dist/tooling/agentRegression.js.map +1 -0
- package/dist/tools/agentScan.d.ts +69 -0
- package/dist/tools/agentScan.js +702 -43
- package/dist/tools/agentScan.js.map +1 -1
- package/dist/tools/findingReviewTools.d.ts +22 -0
- package/dist/tools/findingReviewTools.js +121 -0
- package/dist/tools/findingReviewTools.js.map +1 -0
- package/dist/tools/fix.js +1 -1
- package/dist/tools/fix.js.map +1 -1
- package/dist/tools/map.js +191 -1
- package/dist/tools/map.js.map +1 -1
- package/dist/tools/runTests.d.ts +2 -0
- package/dist/tools/runTests.js +29 -0
- package/dist/tools/runTests.js.map +1 -0
- package/dist/utils/effectMock.d.ts +1 -0
- package/dist/utils/effectMock.js +162 -0
- package/dist/utils/effectMock.js.map +1 -0
- package/dist/utils/gitContext.d.ts +26 -0
- package/dist/utils/gitContext.js +317 -0
- package/dist/utils/gitContext.js.map +1 -0
- package/dist/utils/localTestRunner.d.ts +57 -2
- package/dist/utils/localTestRunner.js +122 -101
- package/dist/utils/localTestRunner.js.map +1 -1
- package/dist/utils/runtimeDetect.d.ts +12 -2
- package/dist/utils/runtimeDetect.js +247 -10
- package/dist/utils/runtimeDetect.js.map +1 -1
- package/dist/utils/securityConfig.d.ts +17 -0
- package/dist/utils/securityConfig.js +192 -0
- package/dist/utils/securityConfig.js.map +1 -0
- package/dist/utils/testCommandPolicy.d.ts +36 -0
- package/dist/utils/testCommandPolicy.js +252 -0
- package/dist/utils/testCommandPolicy.js.map +1 -0
- package/dist/utils/testRunner.d.ts +56 -0
- package/dist/utils/testRunner.js +246 -0
- package/dist/utils/testRunner.js.map +1 -0
- package/dist/utils/testSafety.d.ts +40 -2
- package/dist/utils/testSafety.js +205 -26
- package/dist/utils/testSafety.js.map +1 -1
- package/dist/utils/verificationSandbox.d.ts +113 -0
- package/dist/utils/verificationSandbox.js +656 -0
- package/dist/utils/verificationSandbox.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Symbol index — structural find_definition and find_references across the
|
|
4
|
+
* workspace. Replaces regex-based search_code for "where is X defined?" and
|
|
5
|
+
* "who calls X?" questions.
|
|
6
|
+
*
|
|
7
|
+
* Two providers:
|
|
8
|
+
* - TypeScriptProgramProvider: uses ts.createProgram for JS/TS/TSX —
|
|
9
|
+
* accurate cross-file definition + references via the type system.
|
|
10
|
+
* - TreeSitterProvider: uses tree-sitter AST for Python — intra-file
|
|
11
|
+
* definition + workspace-wide reference search via identifier matching.
|
|
12
|
+
*
|
|
13
|
+
* Both return SymbolLocation[] with provider + confidence metadata.
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.findDefinition = findDefinition;
|
|
50
|
+
exports.findReferences = findReferences;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const parserLoader_1 = require("./parserLoader");
|
|
54
|
+
const astHelpers_1 = require("./astHelpers");
|
|
55
|
+
const files_1 = require("../utils/files");
|
|
56
|
+
const searchCode_1 = require("../utils/searchCode");
|
|
57
|
+
// ── TypeScript provider ────────────────────────────────────────────────────
|
|
58
|
+
class TypeScriptProgramProvider {
|
|
59
|
+
name = 'typescript';
|
|
60
|
+
isSupported(filePath) {
|
|
61
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
62
|
+
return ext === '.ts' || ext === '.tsx' || ext === '.js' || ext === '.jsx' || ext === '.mjs' || ext === '.cjs';
|
|
63
|
+
}
|
|
64
|
+
async findDefinition(query, workspaceRoot) {
|
|
65
|
+
if (!this.isSupported(query.filePath))
|
|
66
|
+
return [];
|
|
67
|
+
const tsResult = this.runTypeScript(query, workspaceRoot, 'definition');
|
|
68
|
+
if (tsResult.length > 0)
|
|
69
|
+
return tsResult;
|
|
70
|
+
// Fall back to tree-sitter for same-file definitions when TS
|
|
71
|
+
// can't resolve (e.g. temp dirs without node_modules).
|
|
72
|
+
return treeSitterProvider.findDefinition(query, workspaceRoot);
|
|
73
|
+
}
|
|
74
|
+
async findReferences(query, workspaceRoot) {
|
|
75
|
+
if (!this.isSupported(query.filePath))
|
|
76
|
+
return [];
|
|
77
|
+
// For references, workspace-wide search is more reliable than
|
|
78
|
+
// ts.findAllReferences (which requires a full program with all
|
|
79
|
+
// files). The agent needs "who uses this name?" — regex search
|
|
80
|
+
// with word boundaries is precise enough for that question.
|
|
81
|
+
try {
|
|
82
|
+
const escaped = query.symbol.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
83
|
+
const result = await (0, searchCode_1.searchCode)(workspaceRoot, `\\b${escaped}\\b`, undefined);
|
|
84
|
+
const out = [];
|
|
85
|
+
for (const hit of result.hits || []) {
|
|
86
|
+
out.push({
|
|
87
|
+
filePath: hit.path,
|
|
88
|
+
line: hit.line,
|
|
89
|
+
column: 0,
|
|
90
|
+
provider: 'typescript',
|
|
91
|
+
confidence: 0.9,
|
|
92
|
+
kind: 'reference',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
runTypeScript(query, workspaceRoot, mode) {
|
|
102
|
+
try {
|
|
103
|
+
const ts = require('typescript');
|
|
104
|
+
const absPath = (0, files_1.resolveWorkspacePath)(workspaceRoot, query.filePath);
|
|
105
|
+
const program = ts.createProgram({
|
|
106
|
+
rootNames: [absPath],
|
|
107
|
+
options: {
|
|
108
|
+
allowJs: true,
|
|
109
|
+
jsx: ts.JsxEmit.React,
|
|
110
|
+
noEmit: true,
|
|
111
|
+
skipLibCheck: true,
|
|
112
|
+
target: ts.ScriptTarget.ES2022,
|
|
113
|
+
module: ts.ModuleKind.CommonJS,
|
|
114
|
+
moduleResolution: ts.ModuleResolutionKind.NodeJs,
|
|
115
|
+
},
|
|
116
|
+
host: ts.createCompilerHost({}),
|
|
117
|
+
});
|
|
118
|
+
const sourceFile = program.getSourceFile(absPath);
|
|
119
|
+
if (!sourceFile)
|
|
120
|
+
return [];
|
|
121
|
+
// Find the identifier position to search from
|
|
122
|
+
const pos = this.findSymbolPosition(sourceFile, query.symbol, query.line);
|
|
123
|
+
if (pos === -1)
|
|
124
|
+
return [];
|
|
125
|
+
const checker = program.getTypeChecker();
|
|
126
|
+
const out = [];
|
|
127
|
+
if (mode === 'definition') {
|
|
128
|
+
const symbol = checker.getSymbolAtLocation(sourceFile, pos);
|
|
129
|
+
if (!symbol)
|
|
130
|
+
return [];
|
|
131
|
+
const declarations = symbol.declarations || [];
|
|
132
|
+
for (const decl of declarations) {
|
|
133
|
+
const declFile = decl.getSourceFile();
|
|
134
|
+
const declPath = declFile.fileName;
|
|
135
|
+
const relPath = path.relative(workspaceRoot, declPath).replace(/\\/g, '/');
|
|
136
|
+
const start = decl.getStart ? decl.getStart() : 0;
|
|
137
|
+
const lineChar = declFile.getLineAndCharacterOfPosition(start);
|
|
138
|
+
out.push({
|
|
139
|
+
filePath: relPath,
|
|
140
|
+
line: lineChar.line + 1,
|
|
141
|
+
column: lineChar.character + 1,
|
|
142
|
+
provider: 'typescript',
|
|
143
|
+
confidence: 1.0,
|
|
144
|
+
kind: 'definition',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// References
|
|
150
|
+
const symbol = checker.getSymbolAtLocation(sourceFile, pos);
|
|
151
|
+
if (!symbol)
|
|
152
|
+
return [];
|
|
153
|
+
const refs = checker.findAllReferences(symbol) || [];
|
|
154
|
+
for (const ref of refs) {
|
|
155
|
+
const refFile = ref.fileName;
|
|
156
|
+
const relPath = path.relative(workspaceRoot, refFile).replace(/\\/g, '/');
|
|
157
|
+
const lineChar = ts.getLineAndCharacterOfPosition(refFile, ref.textSpan.start);
|
|
158
|
+
if (!lineChar)
|
|
159
|
+
continue;
|
|
160
|
+
out.push({
|
|
161
|
+
filePath: relPath,
|
|
162
|
+
line: lineChar.line + 1,
|
|
163
|
+
column: lineChar.character + 1,
|
|
164
|
+
provider: 'typescript',
|
|
165
|
+
confidence: 1.0,
|
|
166
|
+
kind: 'reference',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return out;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
findSymbolPosition(sourceFile, symbol, hintLine) {
|
|
177
|
+
let bestPos = -1;
|
|
178
|
+
let bestDist = Infinity;
|
|
179
|
+
const visit = (node) => {
|
|
180
|
+
if (node.kind === 79 /* Identifier */ && node.text === symbol) {
|
|
181
|
+
const line = sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1;
|
|
182
|
+
const dist = hintLine ? Math.abs(line - hintLine) : 0;
|
|
183
|
+
if (dist < bestDist) {
|
|
184
|
+
bestDist = dist;
|
|
185
|
+
bestPos = node.getStart();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
tsForEachChild(node, visit);
|
|
189
|
+
};
|
|
190
|
+
visit(sourceFile);
|
|
191
|
+
return bestPos;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function tsForEachChild(node, cb) {
|
|
195
|
+
if (node && typeof node.forEachChild === 'function') {
|
|
196
|
+
node.forEachChild(cb);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// ── Tree-sitter provider (Python + fallback) ──────────────────────────────
|
|
200
|
+
class TreeSitterProvider {
|
|
201
|
+
name = 'tree-sitter';
|
|
202
|
+
async findDefinition(query, workspaceRoot) {
|
|
203
|
+
// For Python: search the file + its imports for the function definition
|
|
204
|
+
const grammar = (0, parserLoader_1.grammarForFile)(query.filePath);
|
|
205
|
+
if (grammar === 'unknown')
|
|
206
|
+
return [];
|
|
207
|
+
try {
|
|
208
|
+
const absPath = (0, files_1.resolveWorkspacePath)(workspaceRoot, query.filePath);
|
|
209
|
+
const content = fs.readFileSync(absPath, 'utf8');
|
|
210
|
+
const parsed = await (0, parserLoader_1.parseSource)(content, grammar);
|
|
211
|
+
if (!parsed)
|
|
212
|
+
return [];
|
|
213
|
+
const { root } = parsed;
|
|
214
|
+
const imports = (0, astHelpers_1.collectImports)(root, content);
|
|
215
|
+
// First: is the definition in THIS file?
|
|
216
|
+
const localDef = this.findLocalDefinition(root, content, query.symbol);
|
|
217
|
+
if (localDef) {
|
|
218
|
+
return [{
|
|
219
|
+
filePath: query.filePath,
|
|
220
|
+
line: localDef.line,
|
|
221
|
+
column: localDef.column,
|
|
222
|
+
provider: 'tree-sitter',
|
|
223
|
+
confidence: 0.8,
|
|
224
|
+
kind: 'definition',
|
|
225
|
+
}];
|
|
226
|
+
}
|
|
227
|
+
// Second: is it imported from another file?
|
|
228
|
+
const importSource = imports.get(query.symbol);
|
|
229
|
+
if (importSource) {
|
|
230
|
+
const resolvedFile = this.resolveImport(importSource, query.filePath, workspaceRoot);
|
|
231
|
+
if (resolvedFile) {
|
|
232
|
+
const resolvedContent = fs.readFileSync(resolvedFile, 'utf8');
|
|
233
|
+
const resolvedGrammar = (0, parserLoader_1.grammarForFile)(resolvedFile);
|
|
234
|
+
if (resolvedGrammar !== 'unknown') {
|
|
235
|
+
const resolvedParsed = await (0, parserLoader_1.parseSource)(resolvedContent, resolvedGrammar);
|
|
236
|
+
if (resolvedParsed) {
|
|
237
|
+
const defInImport = this.findLocalDefinition(resolvedParsed.root, resolvedContent, query.symbol);
|
|
238
|
+
if (defInImport) {
|
|
239
|
+
return [{
|
|
240
|
+
filePath: path.relative(workspaceRoot, resolvedFile).replace(/\\/g, '/'),
|
|
241
|
+
line: defInImport.line,
|
|
242
|
+
column: defInImport.column,
|
|
243
|
+
provider: 'tree-sitter',
|
|
244
|
+
confidence: 0.7,
|
|
245
|
+
kind: 'definition',
|
|
246
|
+
}];
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return [];
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return [];
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
async findReferences(query, workspaceRoot) {
|
|
259
|
+
// For Python: workspace-wide search for the symbol name
|
|
260
|
+
try {
|
|
261
|
+
const result = await (0, searchCode_1.searchCode)(workspaceRoot, `\\b${query.symbol.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`, undefined);
|
|
262
|
+
const out = [];
|
|
263
|
+
for (const hit of result.hits || []) {
|
|
264
|
+
out.push({
|
|
265
|
+
filePath: hit.path,
|
|
266
|
+
line: hit.line,
|
|
267
|
+
column: 0,
|
|
268
|
+
provider: 'tree-sitter',
|
|
269
|
+
confidence: 0.6,
|
|
270
|
+
kind: 'reference',
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
return out;
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
return [];
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
findLocalDefinition(root, source, name) {
|
|
280
|
+
const FUNCTION_TYPES = new Set([
|
|
281
|
+
'function_declaration', 'function_definition', 'method_definition',
|
|
282
|
+
'async_function_declaration', 'async_function_definition',
|
|
283
|
+
'arrow_function', 'function_expression',
|
|
284
|
+
'generator_function_declaration', 'generator_declaration',
|
|
285
|
+
'class_definition', 'class_declaration',
|
|
286
|
+
]);
|
|
287
|
+
for (const n of (0, astHelpers_1.walk)(root)) {
|
|
288
|
+
if (!FUNCTION_TYPES.has(n.type))
|
|
289
|
+
continue;
|
|
290
|
+
for (const child of n.namedChildren) {
|
|
291
|
+
if ((0, astHelpers_1.isIdentifier)(child) || child.type === 'type_identifier') {
|
|
292
|
+
const text = source.slice(child.startIndex, child.endIndex);
|
|
293
|
+
if (text === name) {
|
|
294
|
+
return {
|
|
295
|
+
line: n.startPosition.row + 1,
|
|
296
|
+
column: n.startPosition.column + 1,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// const name = () => {} — check parent
|
|
302
|
+
const parent = n.parent;
|
|
303
|
+
if (parent && (parent.type === 'lexical_declaration' || parent.type === 'variable_declaration')) {
|
|
304
|
+
const decl = parent.namedChildren.find(c => c.type === 'variable_declarator');
|
|
305
|
+
if (decl) {
|
|
306
|
+
const id = decl.child(0);
|
|
307
|
+
if (id && (0, astHelpers_1.isIdentifier)(id) && source.slice(id.startIndex, id.endIndex) === name) {
|
|
308
|
+
return {
|
|
309
|
+
line: parent.startPosition.row + 1,
|
|
310
|
+
column: parent.startPosition.column + 1,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return null;
|
|
317
|
+
}
|
|
318
|
+
resolveImport(spec, fromFile, workspaceRoot) {
|
|
319
|
+
if (!spec.startsWith('.'))
|
|
320
|
+
return null;
|
|
321
|
+
const fromDir = path.dirname(path.resolve(workspaceRoot, fromFile));
|
|
322
|
+
const base = path.resolve(fromDir, spec);
|
|
323
|
+
const candidates = [
|
|
324
|
+
base, base + '.ts', base + '.tsx', base + '.js', base + '.jsx',
|
|
325
|
+
base + '.mjs', base + '.cjs', base + '.py',
|
|
326
|
+
path.join(base, 'index.ts'), path.join(base, 'index.js'),
|
|
327
|
+
path.join(base, '__init__.py'),
|
|
328
|
+
];
|
|
329
|
+
for (const c of candidates) {
|
|
330
|
+
if (fs.existsSync(c))
|
|
331
|
+
return c;
|
|
332
|
+
}
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// ── Provider registry ──────────────────────────────────────────────────────
|
|
337
|
+
const tsProvider = new TypeScriptProgramProvider();
|
|
338
|
+
const treeSitterProvider = new TreeSitterProvider();
|
|
339
|
+
function getProvider(filePath) {
|
|
340
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
341
|
+
if (ext === '.ts' || ext === '.tsx' || ext === '.js' || ext === '.jsx' || ext === '.mjs' || ext === '.cjs') {
|
|
342
|
+
return tsProvider;
|
|
343
|
+
}
|
|
344
|
+
return treeSitterProvider;
|
|
345
|
+
}
|
|
346
|
+
// ── Public API ──────────────────────────────────────────────────────────────
|
|
347
|
+
async function findDefinition(workspaceRoot, filePath, symbol, line) {
|
|
348
|
+
try {
|
|
349
|
+
(0, files_1.resolveWorkspacePath)(workspaceRoot, filePath);
|
|
350
|
+
}
|
|
351
|
+
catch (e) {
|
|
352
|
+
return `Error: ${e.message}`;
|
|
353
|
+
}
|
|
354
|
+
const provider = getProvider(filePath);
|
|
355
|
+
const locations = await provider.findDefinition({ filePath, symbol, line }, workspaceRoot);
|
|
356
|
+
if (locations.length === 0) {
|
|
357
|
+
return `No definition found for "${symbol}" in ${filePath}.`;
|
|
358
|
+
}
|
|
359
|
+
const lines = [`Definition of "${symbol}" (${locations.length} location(s)):`];
|
|
360
|
+
for (const loc of locations) {
|
|
361
|
+
const prov = loc.provider === 'typescript' ? 'ts' : 'ast';
|
|
362
|
+
lines.push(` ${loc.filePath}:${loc.line}:${loc.column} [${prov}, confidence ${loc.confidence}]`);
|
|
363
|
+
}
|
|
364
|
+
return lines.join('\n');
|
|
365
|
+
}
|
|
366
|
+
async function findReferences(workspaceRoot, filePath, symbol, line) {
|
|
367
|
+
try {
|
|
368
|
+
(0, files_1.resolveWorkspacePath)(workspaceRoot, filePath);
|
|
369
|
+
}
|
|
370
|
+
catch (e) {
|
|
371
|
+
return `Error: ${e.message}`;
|
|
372
|
+
}
|
|
373
|
+
const provider = getProvider(filePath);
|
|
374
|
+
const locations = await provider.findReferences({ filePath, symbol, line }, workspaceRoot);
|
|
375
|
+
if (locations.length === 0) {
|
|
376
|
+
return `No references found for "${symbol}" in ${filePath}.`;
|
|
377
|
+
}
|
|
378
|
+
const lines = [`References to "${symbol}" (${locations.length} location(s)):`];
|
|
379
|
+
for (const loc of locations) {
|
|
380
|
+
const prov = loc.provider === 'typescript' ? 'ts' : 'ast';
|
|
381
|
+
lines.push(` ${loc.filePath}:${loc.line} [${prov}, confidence ${loc.confidence}]`);
|
|
382
|
+
}
|
|
383
|
+
return lines.join('\n');
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=symbolIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbolIndex.js","sourceRoot":"","sources":["../../src/project-map/symbolIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent eval scoring — pure functions for scoring Pipeline 2 scan results
|
|
3
|
+
* against a golden testset.
|
|
4
|
+
*
|
|
5
|
+
* Scoring model:
|
|
6
|
+
* - Each fixture has an expected verdict (vulnerable | safe) and optionally
|
|
7
|
+
* an expected line + type.
|
|
8
|
+
* - A finding "matches" a vulnerable fixture if it's at the expected line
|
|
9
|
+
* with the expected type (strict) or any finding at all (loose).
|
|
10
|
+
* - A finding on a safe fixture is a false positive.
|
|
11
|
+
* - Infrastructure failures (crash, timeout, spawn_failed) are tracked
|
|
12
|
+
* separately and never count as false negatives.
|
|
13
|
+
* - Verify verdicts (PROVEN/UNPROVEN/INCONCLUSIVE) are tracked as
|
|
14
|
+
* distribution metrics, not pass/fail.
|
|
15
|
+
*/
|
|
16
|
+
export interface AgentEvalFixture {
|
|
17
|
+
id: string;
|
|
18
|
+
class: string;
|
|
19
|
+
language: string;
|
|
20
|
+
framework: string;
|
|
21
|
+
verdict: 'vulnerable' | 'safe';
|
|
22
|
+
expectLine?: number;
|
|
23
|
+
expectType?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface AgentEvalFinding {
|
|
26
|
+
line: number;
|
|
27
|
+
type: string;
|
|
28
|
+
severity: string;
|
|
29
|
+
confidence: number;
|
|
30
|
+
proven: string;
|
|
31
|
+
evidenceLevel?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface AgentEvalCaseResult {
|
|
34
|
+
fixtureId: string;
|
|
35
|
+
class: string;
|
|
36
|
+
language: string;
|
|
37
|
+
framework: string;
|
|
38
|
+
expected: 'vulnerable' | 'safe';
|
|
39
|
+
found: boolean;
|
|
40
|
+
strictFound: boolean;
|
|
41
|
+
findingCount: number;
|
|
42
|
+
reportedTypes: string[];
|
|
43
|
+
reportedLines: number[];
|
|
44
|
+
provenCount: number;
|
|
45
|
+
unprovenCount: number;
|
|
46
|
+
inconclusiveCount: number;
|
|
47
|
+
skippedCount: number;
|
|
48
|
+
infraFailure: boolean;
|
|
49
|
+
infraError?: string;
|
|
50
|
+
stepsUsed: number;
|
|
51
|
+
costSpentUsd: number;
|
|
52
|
+
latencyMs: number;
|
|
53
|
+
}
|
|
54
|
+
export interface AgentEvalMetrics {
|
|
55
|
+
tp: number;
|
|
56
|
+
fn: number;
|
|
57
|
+
fp: number;
|
|
58
|
+
tn: number;
|
|
59
|
+
recall: number;
|
|
60
|
+
precision: number;
|
|
61
|
+
fpr: number;
|
|
62
|
+
f1: number;
|
|
63
|
+
total: number;
|
|
64
|
+
totalRealVuln: number;
|
|
65
|
+
totalSafe: number;
|
|
66
|
+
infraFailures: number;
|
|
67
|
+
completionRate: number;
|
|
68
|
+
provenRate: number;
|
|
69
|
+
unprovenRate: number;
|
|
70
|
+
inconclusiveRate: number;
|
|
71
|
+
meanSteps: number;
|
|
72
|
+
meanCostUsd: number;
|
|
73
|
+
meanLatencyMs: number;
|
|
74
|
+
}
|
|
75
|
+
export declare function scoreCase(fixture: AgentEvalFixture, findings: AgentEvalFinding[], infraFailure?: boolean, infraError?: string, stepsUsed?: number, costSpentUsd?: number, latencyMs?: number): AgentEvalCaseResult;
|
|
76
|
+
export declare function aggregateMetrics(results: AgentEvalCaseResult[]): AgentEvalMetrics;
|
|
77
|
+
export declare function formatMetricsMarkdown(metrics: AgentEvalMetrics): string;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent eval scoring — pure functions for scoring Pipeline 2 scan results
|
|
4
|
+
* against a golden testset.
|
|
5
|
+
*
|
|
6
|
+
* Scoring model:
|
|
7
|
+
* - Each fixture has an expected verdict (vulnerable | safe) and optionally
|
|
8
|
+
* an expected line + type.
|
|
9
|
+
* - A finding "matches" a vulnerable fixture if it's at the expected line
|
|
10
|
+
* with the expected type (strict) or any finding at all (loose).
|
|
11
|
+
* - A finding on a safe fixture is a false positive.
|
|
12
|
+
* - Infrastructure failures (crash, timeout, spawn_failed) are tracked
|
|
13
|
+
* separately and never count as false negatives.
|
|
14
|
+
* - Verify verdicts (PROVEN/UNPROVEN/INCONCLUSIVE) are tracked as
|
|
15
|
+
* distribution metrics, not pass/fail.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.scoreCase = scoreCase;
|
|
19
|
+
exports.aggregateMetrics = aggregateMetrics;
|
|
20
|
+
exports.formatMetricsMarkdown = formatMetricsMarkdown;
|
|
21
|
+
function normalizeType(t) {
|
|
22
|
+
return (t || '').toLowerCase().replace(/[\s-]+/g, '_');
|
|
23
|
+
}
|
|
24
|
+
function scoreCase(fixture, findings, infraFailure = false, infraError, stepsUsed = 0, costSpentUsd = 0, latencyMs = 0) {
|
|
25
|
+
const reportedTypes = findings.map(f => normalizeType(f.type));
|
|
26
|
+
const reportedLines = findings.map(f => f.line);
|
|
27
|
+
const found = findings.length > 0;
|
|
28
|
+
let strictFound = false;
|
|
29
|
+
if (fixture.verdict === 'vulnerable' && fixture.expectLine && fixture.expectType) {
|
|
30
|
+
const expectedType = normalizeType(fixture.expectType);
|
|
31
|
+
strictFound = findings.some(f => f.line === fixture.expectLine && normalizeType(f.type) === expectedType);
|
|
32
|
+
}
|
|
33
|
+
else if (fixture.verdict === 'vulnerable') {
|
|
34
|
+
strictFound = found;
|
|
35
|
+
}
|
|
36
|
+
const provenCount = findings.filter(f => f.proven === 'PROVEN').length;
|
|
37
|
+
const unprovenCount = findings.filter(f => f.proven === 'UNPROVEN').length;
|
|
38
|
+
const inconclusiveCount = findings.filter(f => f.proven === 'INCONCLUSIVE').length;
|
|
39
|
+
const skippedCount = findings.filter(f => f.proven === 'SKIPPED').length;
|
|
40
|
+
return {
|
|
41
|
+
fixtureId: fixture.id,
|
|
42
|
+
class: fixture.class,
|
|
43
|
+
language: fixture.language,
|
|
44
|
+
framework: fixture.framework,
|
|
45
|
+
expected: fixture.verdict,
|
|
46
|
+
found,
|
|
47
|
+
strictFound,
|
|
48
|
+
findingCount: findings.length,
|
|
49
|
+
reportedTypes,
|
|
50
|
+
reportedLines,
|
|
51
|
+
provenCount,
|
|
52
|
+
unprovenCount,
|
|
53
|
+
inconclusiveCount,
|
|
54
|
+
skippedCount,
|
|
55
|
+
infraFailure,
|
|
56
|
+
infraError,
|
|
57
|
+
stepsUsed,
|
|
58
|
+
costSpentUsd,
|
|
59
|
+
latencyMs,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function aggregateMetrics(results) {
|
|
63
|
+
let tp = 0, fn = 0, fp = 0, tn = 0;
|
|
64
|
+
let infraFailures = 0;
|
|
65
|
+
let totalSteps = 0;
|
|
66
|
+
let totalCost = 0;
|
|
67
|
+
let totalLatency = 0;
|
|
68
|
+
let totalProven = 0;
|
|
69
|
+
let totalUnproven = 0;
|
|
70
|
+
let totalInconclusive = 0;
|
|
71
|
+
let completedRuns = 0;
|
|
72
|
+
for (const r of results) {
|
|
73
|
+
if (r.infraFailure) {
|
|
74
|
+
infraFailures++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
totalSteps += r.stepsUsed;
|
|
78
|
+
totalCost += r.costSpentUsd;
|
|
79
|
+
totalLatency += r.latencyMs;
|
|
80
|
+
completedRuns++;
|
|
81
|
+
totalProven += r.provenCount;
|
|
82
|
+
totalUnproven += r.unprovenCount;
|
|
83
|
+
totalInconclusive += r.inconclusiveCount;
|
|
84
|
+
if (r.expected === 'vulnerable' && r.found)
|
|
85
|
+
tp++;
|
|
86
|
+
else if (r.expected === 'vulnerable' && !r.found)
|
|
87
|
+
fn++;
|
|
88
|
+
else if (r.expected === 'safe' && r.found)
|
|
89
|
+
fp++;
|
|
90
|
+
else
|
|
91
|
+
tn++;
|
|
92
|
+
}
|
|
93
|
+
const totalRealVuln = tp + fn;
|
|
94
|
+
const totalSafe = fp + tn;
|
|
95
|
+
const totalFindings = tp + fp;
|
|
96
|
+
const nonInfraTotal = results.length - infraFailures;
|
|
97
|
+
const recall = totalRealVuln ? tp / totalRealVuln : 0;
|
|
98
|
+
const precision = totalFindings ? tp / totalFindings : 1;
|
|
99
|
+
const fpr = totalSafe ? fp / totalSafe : 0;
|
|
100
|
+
const f1 = precision + recall ? (2 * precision * recall) / (precision + recall) : 0;
|
|
101
|
+
const totalVerdicts = totalProven + totalUnproven + totalInconclusive;
|
|
102
|
+
const verifyableRuns = results.filter(r => !r.infraFailure && r.expected === 'vulnerable' && r.found).length;
|
|
103
|
+
return {
|
|
104
|
+
tp, fn, fp, tn,
|
|
105
|
+
recall, precision, fpr, f1,
|
|
106
|
+
total: results.length,
|
|
107
|
+
totalRealVuln, totalSafe,
|
|
108
|
+
infraFailures,
|
|
109
|
+
completionRate: nonInfraTotal ? completedRuns / nonInfraTotal : 0,
|
|
110
|
+
provenRate: totalVerdicts ? totalProven / totalVerdicts : 0,
|
|
111
|
+
unprovenRate: totalVerdicts ? totalUnproven / totalVerdicts : 0,
|
|
112
|
+
inconclusiveRate: totalVerdicts ? totalInconclusive / totalVerdicts : 0,
|
|
113
|
+
meanSteps: completedRuns ? totalSteps / completedRuns : 0,
|
|
114
|
+
meanCostUsd: completedRuns ? totalCost / completedRuns : 0,
|
|
115
|
+
meanLatencyMs: completedRuns ? totalLatency / completedRuns : 0,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function formatMetricsMarkdown(metrics) {
|
|
119
|
+
const pct = (n) => (n * 100).toFixed(1) + '%';
|
|
120
|
+
const usd = (n) => '$' + n.toFixed(4);
|
|
121
|
+
const ms = (n) => n.toFixed(0) + 'ms';
|
|
122
|
+
return `## Agent Scan Golden Eval Results
|
|
123
|
+
|
|
124
|
+
| Metric | Value |
|
|
125
|
+
|--------|-------|
|
|
126
|
+
| **Recall** | ${pct(metrics.recall)} (${metrics.tp}/${metrics.totalRealVuln}) |
|
|
127
|
+
| **Precision** | ${pct(metrics.precision)} (${metrics.tp}/${metrics.tp + metrics.fp}) |
|
|
128
|
+
| **FPR** | ${pct(metrics.fpr)} (${metrics.fp}/${metrics.totalSafe}) |
|
|
129
|
+
| **F1** | ${metrics.f1.toFixed(3)} |
|
|
130
|
+
| **Completion Rate** | ${pct(metrics.completionRate)} |
|
|
131
|
+
| **Infra Failures** | ${metrics.infraFailures}/${metrics.total} |
|
|
132
|
+
| **Proven Rate** | ${pct(metrics.provenRate)} |
|
|
133
|
+
| **Unproven Rate** | ${pct(metrics.unprovenRate)} |
|
|
134
|
+
| **Inconclusive Rate** | ${pct(metrics.inconclusiveRate)} |
|
|
135
|
+
| **Mean Steps** | metrics.meanSteps.toFixed(1) |
|
|
136
|
+
| **Mean Cost** | ${usd(metrics.meanCostUsd)} |
|
|
137
|
+
| **Mean Latency** | ${ms(metrics.meanLatencyMs)} |
|
|
138
|
+
`;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=agentEvalScoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentEvalScoring.js","sourceRoot":"","sources":["../../src/tooling/agentEvalScoring.ts"],"names":[],"mappings":"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"}
|