@vyuhlabs/dxkit 1.6.1 → 2.0.1
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/CHANGELOG.md +115 -0
- package/README.md +3 -3
- package/dist/agents/extract.d.ts +25 -0
- package/dist/agents/extract.d.ts.map +1 -0
- package/dist/agents/extract.js +186 -0
- package/dist/agents/extract.js.map +1 -0
- package/dist/agents/schemas.d.ts +106 -0
- package/dist/agents/schemas.d.ts.map +1 -0
- package/dist/agents/schemas.js +86 -0
- package/dist/agents/schemas.js.map +1 -0
- package/dist/agents/session.d.ts +28 -0
- package/dist/agents/session.d.ts.map +1 -0
- package/dist/agents/session.js +223 -0
- package/dist/agents/session.js.map +1 -0
- package/dist/analyzers/developer/detailed.js +1 -1
- package/dist/analyzers/developer/detailed.js.map +1 -1
- package/dist/analyzers/dispatcher.d.ts +36 -0
- package/dist/analyzers/dispatcher.d.ts.map +1 -0
- package/dist/analyzers/dispatcher.js +62 -0
- package/dist/analyzers/dispatcher.js.map +1 -0
- package/dist/analyzers/docs/shallow.d.ts +3 -2
- package/dist/analyzers/docs/shallow.d.ts.map +1 -1
- package/dist/analyzers/docs/shallow.js +2 -2
- package/dist/analyzers/docs/shallow.js.map +1 -1
- package/dist/analyzers/dx/shallow.d.ts +3 -2
- package/dist/analyzers/dx/shallow.d.ts.map +1 -1
- package/dist/analyzers/dx/shallow.js +2 -2
- package/dist/analyzers/dx/shallow.js.map +1 -1
- package/dist/analyzers/health/actions.d.ts +3 -3
- package/dist/analyzers/health/actions.d.ts.map +1 -1
- package/dist/analyzers/health/actions.js +99 -52
- package/dist/analyzers/health/actions.js.map +1 -1
- package/dist/analyzers/health/detailed.d.ts.map +1 -1
- package/dist/analyzers/health/detailed.js +6 -2
- package/dist/analyzers/health/detailed.js.map +1 -1
- package/dist/analyzers/health.d.ts +0 -2
- package/dist/analyzers/health.d.ts.map +1 -1
- package/dist/analyzers/health.js +134 -72
- package/dist/analyzers/health.js.map +1 -1
- package/dist/analyzers/maintainability/shallow.d.ts +3 -2
- package/dist/analyzers/maintainability/shallow.d.ts.map +1 -1
- package/dist/analyzers/maintainability/shallow.js +2 -2
- package/dist/analyzers/maintainability/shallow.js.map +1 -1
- package/dist/analyzers/quality/detailed.js +1 -1
- package/dist/analyzers/quality/detailed.js.map +1 -1
- package/dist/analyzers/quality/gather.d.ts +33 -4
- package/dist/analyzers/quality/gather.d.ts.map +1 -1
- package/dist/analyzers/quality/gather.js +81 -93
- package/dist/analyzers/quality/gather.js.map +1 -1
- package/dist/analyzers/quality/index.js +4 -4
- package/dist/analyzers/quality/index.js.map +1 -1
- package/dist/analyzers/quality/shallow.d.ts +3 -2
- package/dist/analyzers/quality/shallow.d.ts.map +1 -1
- package/dist/analyzers/quality/shallow.js +2 -2
- package/dist/analyzers/quality/shallow.js.map +1 -1
- package/dist/analyzers/scoring.d.ts +26 -9
- package/dist/analyzers/scoring.d.ts.map +1 -1
- package/dist/analyzers/scoring.js +83 -71
- package/dist/analyzers/scoring.js.map +1 -1
- package/dist/analyzers/security/detailed.js +1 -1
- package/dist/analyzers/security/detailed.js.map +1 -1
- package/dist/analyzers/security/gather.d.ts +28 -5
- package/dist/analyzers/security/gather.d.ts.map +1 -1
- package/dist/analyzers/security/gather.js +87 -135
- package/dist/analyzers/security/gather.js.map +1 -1
- package/dist/analyzers/security/index.d.ts +1 -1
- package/dist/analyzers/security/index.d.ts.map +1 -1
- package/dist/analyzers/security/index.js +16 -11
- package/dist/analyzers/security/index.js.map +1 -1
- package/dist/analyzers/security/report.d.ts +6 -0
- package/dist/analyzers/security/report.d.ts.map +1 -0
- package/dist/analyzers/security/report.js +118 -0
- package/dist/analyzers/security/report.js.map +1 -0
- package/dist/analyzers/security/shallow.d.ts +3 -2
- package/dist/analyzers/security/shallow.d.ts.map +1 -1
- package/dist/analyzers/security/shallow.js +2 -2
- package/dist/analyzers/security/shallow.js.map +1 -1
- package/dist/analyzers/tests/detailed.js +1 -1
- package/dist/analyzers/tests/detailed.js.map +1 -1
- package/dist/analyzers/tests/import-graph.d.ts +8 -22
- package/dist/analyzers/tests/import-graph.d.ts.map +1 -1
- package/dist/analyzers/tests/import-graph.js +22 -189
- package/dist/analyzers/tests/import-graph.js.map +1 -1
- package/dist/analyzers/tests/index.d.ts +1 -1
- package/dist/analyzers/tests/index.d.ts.map +1 -1
- package/dist/analyzers/tests/index.js +3 -3
- package/dist/analyzers/tests/index.js.map +1 -1
- package/dist/analyzers/tests/shallow.d.ts +3 -2
- package/dist/analyzers/tests/shallow.d.ts.map +1 -1
- package/dist/analyzers/tests/shallow.js +2 -2
- package/dist/analyzers/tests/shallow.js.map +1 -1
- package/dist/analyzers/tools/coverage.d.ts +21 -11
- package/dist/analyzers/tools/coverage.d.ts.map +1 -1
- package/dist/analyzers/tools/coverage.js +32 -44
- package/dist/analyzers/tools/coverage.js.map +1 -1
- package/dist/analyzers/tools/dotnet.d.ts +8 -0
- package/dist/analyzers/tools/dotnet.d.ts.map +1 -0
- package/dist/analyzers/tools/dotnet.js +81 -0
- package/dist/analyzers/tools/dotnet.js.map +1 -0
- package/dist/analyzers/tools/gather-cache.d.ts +16 -0
- package/dist/analyzers/tools/gather-cache.d.ts.map +1 -0
- package/dist/analyzers/tools/gather-cache.js +126 -0
- package/dist/analyzers/tools/gather-cache.js.map +1 -0
- package/dist/analyzers/tools/generic.d.ts.map +1 -1
- package/dist/analyzers/tools/generic.js +6 -28
- package/dist/analyzers/tools/generic.js.map +1 -1
- package/dist/analyzers/tools/gitleaks.d.ts +28 -5
- package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
- package/dist/analyzers/tools/gitleaks.js +91 -37
- package/dist/analyzers/tools/gitleaks.js.map +1 -1
- package/dist/analyzers/tools/go.d.ts +8 -0
- package/dist/analyzers/tools/go.d.ts.map +1 -0
- package/dist/analyzers/tools/go.js +84 -0
- package/dist/analyzers/tools/go.js.map +1 -0
- package/dist/analyzers/tools/graphify.d.ts +31 -3
- package/dist/analyzers/tools/graphify.d.ts.map +1 -1
- package/dist/analyzers/tools/graphify.js +78 -36
- package/dist/analyzers/tools/graphify.js.map +1 -1
- package/dist/analyzers/tools/grep-secrets.d.ts +6 -0
- package/dist/analyzers/tools/grep-secrets.d.ts.map +1 -0
- package/dist/analyzers/tools/grep-secrets.js +124 -0
- package/dist/analyzers/tools/grep-secrets.js.map +1 -0
- package/dist/analyzers/tools/jscpd.d.ts +40 -0
- package/dist/analyzers/tools/jscpd.d.ts.map +1 -0
- package/dist/analyzers/tools/jscpd.js +96 -0
- package/dist/analyzers/tools/jscpd.js.map +1 -0
- package/dist/analyzers/tools/node.d.ts +8 -0
- package/dist/analyzers/tools/node.d.ts.map +1 -0
- package/dist/analyzers/tools/node.js +160 -0
- package/dist/analyzers/tools/node.js.map +1 -0
- package/dist/analyzers/tools/package-json.d.ts +6 -0
- package/dist/analyzers/tools/package-json.d.ts.map +1 -0
- package/dist/analyzers/tools/package-json.js +67 -0
- package/dist/analyzers/tools/package-json.js.map +1 -0
- package/dist/analyzers/tools/parallel.d.ts +22 -5
- package/dist/analyzers/tools/parallel.d.ts.map +1 -1
- package/dist/analyzers/tools/parallel.js +26 -185
- package/dist/analyzers/tools/parallel.js.map +1 -1
- package/dist/analyzers/tools/paths.d.ts +21 -0
- package/dist/analyzers/tools/paths.d.ts.map +1 -0
- package/dist/analyzers/tools/paths.js +62 -0
- package/dist/analyzers/tools/paths.js.map +1 -0
- package/dist/analyzers/tools/python.d.ts +8 -0
- package/dist/analyzers/tools/python.d.ts.map +1 -0
- package/dist/analyzers/tools/python.js +81 -0
- package/dist/analyzers/tools/python.js.map +1 -0
- package/dist/analyzers/tools/rust.d.ts +8 -0
- package/dist/analyzers/tools/rust.d.ts.map +1 -0
- package/dist/analyzers/tools/rust.js +86 -0
- package/dist/analyzers/tools/rust.js.map +1 -0
- package/dist/analyzers/tools/semgrep.d.ts +39 -0
- package/dist/analyzers/tools/semgrep.d.ts.map +1 -0
- package/dist/analyzers/tools/semgrep.js +129 -0
- package/dist/analyzers/tools/semgrep.js.map +1 -0
- package/dist/analyzers/tools/tool-registry.d.ts +0 -41
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +0 -87
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/analyzers/types.d.ts +42 -30
- package/dist/analyzers/types.d.ts.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +1 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +55 -14
- package/dist/constants.js.map +1 -1
- package/dist/languages/capabilities/descriptors.d.ts +74 -0
- package/dist/languages/capabilities/descriptors.d.ts.map +1 -0
- package/dist/languages/capabilities/descriptors.js +250 -0
- package/dist/languages/capabilities/descriptors.js.map +1 -0
- package/dist/languages/capabilities/global.d.ts +43 -0
- package/dist/languages/capabilities/global.d.ts.map +1 -0
- package/dist/languages/capabilities/global.js +48 -0
- package/dist/languages/capabilities/global.js.map +1 -0
- package/dist/languages/capabilities/index.d.ts +31 -0
- package/dist/languages/capabilities/index.d.ts.map +1 -0
- package/dist/languages/capabilities/index.js +56 -0
- package/dist/languages/capabilities/index.js.map +1 -0
- package/dist/languages/capabilities/provider.d.ts +16 -0
- package/dist/languages/capabilities/provider.d.ts.map +1 -0
- package/dist/languages/capabilities/provider.js +12 -0
- package/dist/languages/capabilities/provider.js.map +1 -0
- package/dist/languages/capabilities/types.d.ts +226 -0
- package/dist/languages/capabilities/types.d.ts.map +1 -0
- package/dist/languages/capabilities/types.js +23 -0
- package/dist/languages/capabilities/types.js.map +1 -0
- package/dist/languages/csharp.d.ts +8 -0
- package/dist/languages/csharp.d.ts.map +1 -1
- package/dist/languages/csharp.js +203 -103
- package/dist/languages/csharp.js.map +1 -1
- package/dist/languages/go.d.ts +13 -7
- package/dist/languages/go.d.ts.map +1 -1
- package/dist/languages/go.js +277 -183
- package/dist/languages/go.js.map +1 -1
- package/dist/languages/python.d.ts +14 -0
- package/dist/languages/python.d.ts.map +1 -1
- package/dist/languages/python.js +276 -169
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/rust.d.ts +8 -0
- package/dist/languages/rust.d.ts.map +1 -1
- package/dist/languages/rust.js +218 -131
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/types.d.ts +16 -15
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts +12 -11
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +256 -161
- package/dist/languages/typescript.js.map +1 -1
- package/package.json +1 -1
- package/templates/.ai/templates/session-checkpoint-template.md +97 -0
package/dist/languages/rust.js
CHANGED
|
@@ -35,9 +35,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.rust = void 0;
|
|
37
37
|
exports.mapClippyLintSeverity = mapClippyLintSeverity;
|
|
38
|
+
exports.extractRustImportsRaw = extractRustImportsRaw;
|
|
38
39
|
exports.parseLcov = parseLcov;
|
|
39
40
|
const fs = __importStar(require("fs"));
|
|
40
41
|
const path = __importStar(require("path"));
|
|
42
|
+
const exclusions_1 = require("../analyzers/tools/exclusions");
|
|
41
43
|
const csharp_1 = require("./csharp");
|
|
42
44
|
const runner_1 = require("../analyzers/tools/runner");
|
|
43
45
|
const tool_registry_1 = require("../analyzers/tools/tool-registry");
|
|
@@ -136,6 +138,215 @@ function tierCargoMessage(msg) {
|
|
|
136
138
|
return 'high';
|
|
137
139
|
return tier;
|
|
138
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Single source of truth for the rust pack's dep-vuln gathering.
|
|
143
|
+
* Consumed by `rustDepVulnsProvider` (capability dispatcher).
|
|
144
|
+
*/
|
|
145
|
+
async function gatherRustDepVulnsResult(cwd) {
|
|
146
|
+
const audit = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['cargo-audit'], cwd);
|
|
147
|
+
if (!audit.available || !audit.path)
|
|
148
|
+
return { kind: 'tool-missing' };
|
|
149
|
+
const raw = (0, runner_1.run)(`${audit.path} audit --json 2>/dev/null`, cwd, 60000);
|
|
150
|
+
if (!raw)
|
|
151
|
+
return { kind: 'no-output' };
|
|
152
|
+
try {
|
|
153
|
+
const data = JSON.parse(raw);
|
|
154
|
+
if (!data.vulnerabilities)
|
|
155
|
+
return { kind: 'no-output' };
|
|
156
|
+
let critical = 0;
|
|
157
|
+
let high = 0;
|
|
158
|
+
let medium = 0;
|
|
159
|
+
let low = 0;
|
|
160
|
+
for (const v of data.vulnerabilities.list || []) {
|
|
161
|
+
const sev = v.advisory?.severity?.toLowerCase();
|
|
162
|
+
if (sev === 'critical')
|
|
163
|
+
critical++;
|
|
164
|
+
else if (sev === 'high')
|
|
165
|
+
high++;
|
|
166
|
+
else if (sev === 'medium')
|
|
167
|
+
medium++;
|
|
168
|
+
else
|
|
169
|
+
low++;
|
|
170
|
+
}
|
|
171
|
+
const envelope = {
|
|
172
|
+
schemaVersion: 1,
|
|
173
|
+
tool: 'cargo-audit',
|
|
174
|
+
enrichment: null,
|
|
175
|
+
counts: { critical, high, medium, low },
|
|
176
|
+
};
|
|
177
|
+
return { kind: 'success', envelope };
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return { kind: 'parse-error' };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const rustDepVulnsProvider = {
|
|
184
|
+
source: 'rust',
|
|
185
|
+
async gather(cwd) {
|
|
186
|
+
const outcome = await gatherRustDepVulnsResult(cwd);
|
|
187
|
+
return outcome.kind === 'success' ? outcome.envelope : null;
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* Single source of truth for the rust pack's lint gathering.
|
|
192
|
+
* Consumed by `rustLintProvider` (capability dispatcher).
|
|
193
|
+
*
|
|
194
|
+
* Previously, empty cargo output was silently skipped (nothing pushed
|
|
195
|
+
* to toolsUsed or toolsUnavailable). This helper aligns rust with the
|
|
196
|
+
* other packs: empty output = clean run with zero lint issues. Strict
|
|
197
|
+
* improvement.
|
|
198
|
+
*/
|
|
199
|
+
function gatherRustLintResult(cwd) {
|
|
200
|
+
const clippy = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.clippy, cwd);
|
|
201
|
+
if (!clippy.available) {
|
|
202
|
+
return { kind: 'unavailable', reason: 'not installed' };
|
|
203
|
+
}
|
|
204
|
+
const raw = (0, runner_1.run)('cargo clippy --message-format json 2>/dev/null', cwd, 120000);
|
|
205
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
206
|
+
for (const line of raw.split('\n')) {
|
|
207
|
+
if (!line.trim())
|
|
208
|
+
continue;
|
|
209
|
+
try {
|
|
210
|
+
const msg = JSON.parse(line);
|
|
211
|
+
if (msg.reason !== 'compiler-message' || !msg.message)
|
|
212
|
+
continue;
|
|
213
|
+
// Upstream emits multiple levels (error, warning, note, help).
|
|
214
|
+
// Skip note/help — they're context, not findings.
|
|
215
|
+
if (msg.message.level !== 'error' && msg.message.level !== 'warning')
|
|
216
|
+
continue;
|
|
217
|
+
counts[tierCargoMessage(msg.message)]++;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
/* skip non-JSON lines */
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const envelope = { schemaVersion: 1, tool: 'clippy', counts };
|
|
224
|
+
return { kind: 'success', envelope };
|
|
225
|
+
}
|
|
226
|
+
const rustLintProvider = {
|
|
227
|
+
source: 'rust',
|
|
228
|
+
async gather(cwd) {
|
|
229
|
+
const outcome = gatherRustLintResult(cwd);
|
|
230
|
+
return outcome.kind === 'success' ? outcome.envelope : null;
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* Single source of truth for the rust pack's coverage gathering.
|
|
235
|
+
* Tries lcov first (cargo llvm-cov --lcov default), falls back to
|
|
236
|
+
* cobertura XML. Consumed by `rustCoverageProvider` (capability
|
|
237
|
+
* dispatcher).
|
|
238
|
+
*/
|
|
239
|
+
function gatherRustCoverageResult(cwd) {
|
|
240
|
+
for (const file of ['lcov.info', 'coverage/lcov.info']) {
|
|
241
|
+
const abs = path.join(cwd, file);
|
|
242
|
+
let raw;
|
|
243
|
+
try {
|
|
244
|
+
raw = fs.readFileSync(abs, 'utf-8');
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const coverage = parseLcov(raw, file, cwd);
|
|
250
|
+
if (coverage) {
|
|
251
|
+
return { schemaVersion: 1, tool: `coverage:${coverage.source}`, coverage };
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
for (const file of ['coverage.cobertura.xml', 'coverage/coverage.cobertura.xml']) {
|
|
255
|
+
const abs = path.join(cwd, file);
|
|
256
|
+
let raw;
|
|
257
|
+
try {
|
|
258
|
+
raw = fs.readFileSync(abs, 'utf-8');
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
const coverage = (0, csharp_1.parseCoberturaXml)(raw, file, cwd);
|
|
264
|
+
if (coverage) {
|
|
265
|
+
return { schemaVersion: 1, tool: `coverage:${coverage.source}`, coverage };
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
const rustCoverageProvider = {
|
|
271
|
+
source: 'rust',
|
|
272
|
+
async gather(cwd) {
|
|
273
|
+
return gatherRustCoverageResult(cwd);
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
/**
|
|
277
|
+
* Capture Rust `use` path specifiers from source text. Handles simple
|
|
278
|
+
* paths (`use std::io;`) and grouped (`use std::{io, fs};`). Rust has
|
|
279
|
+
* no file-level resolver — see note on the pack's capabilities slot —
|
|
280
|
+
* so this is the only raw helper the imports capability needs.
|
|
281
|
+
* Exported for unit tests.
|
|
282
|
+
*/
|
|
283
|
+
function extractRustImportsRaw(content) {
|
|
284
|
+
const out = [];
|
|
285
|
+
const re = /^\s*use\s+([a-zA-Z_][\w:]*(?:::\{[^}]+\})?)\s*;/gm;
|
|
286
|
+
let m;
|
|
287
|
+
while ((m = re.exec(content)) !== null) {
|
|
288
|
+
out.push(m[1]);
|
|
289
|
+
}
|
|
290
|
+
return out;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Enumerate .rs source files and capture the pack's per-file imports.
|
|
294
|
+
* Rust has no resolveImport (the module/crate hierarchy requires parsing
|
|
295
|
+
* Cargo.toml + mod declarations — out of scope), so `edges` is always
|
|
296
|
+
* empty and the envelope carries only `extracted` for downstream
|
|
297
|
+
* consumers that want package-level import analysis.
|
|
298
|
+
*/
|
|
299
|
+
function gatherRustImportsResult(cwd) {
|
|
300
|
+
const excludes = (0, exclusions_1.getFindExcludeFlags)(cwd);
|
|
301
|
+
const raw = (0, runner_1.run)(`find . -type f -name "*.rs" ${excludes} 2>/dev/null`, cwd);
|
|
302
|
+
if (!raw)
|
|
303
|
+
return null;
|
|
304
|
+
const extracted = new Map();
|
|
305
|
+
for (const line of raw.split('\n')) {
|
|
306
|
+
const p = line.trim();
|
|
307
|
+
if (!p)
|
|
308
|
+
continue;
|
|
309
|
+
const rel = p.replace(/^\.\//, '');
|
|
310
|
+
let content;
|
|
311
|
+
try {
|
|
312
|
+
content = fs.readFileSync(path.join(cwd, rel), 'utf-8');
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
extracted.set(rel, extractRustImportsRaw(content));
|
|
318
|
+
}
|
|
319
|
+
if (extracted.size === 0)
|
|
320
|
+
return null;
|
|
321
|
+
return {
|
|
322
|
+
schemaVersion: 1,
|
|
323
|
+
tool: 'rust-imports',
|
|
324
|
+
sourceExtensions: ['.rs'],
|
|
325
|
+
extracted,
|
|
326
|
+
edges: new Map(),
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
const rustImportsProvider = {
|
|
330
|
+
source: 'rust',
|
|
331
|
+
async gather(cwd) {
|
|
332
|
+
return gatherRustImportsResult(cwd);
|
|
333
|
+
},
|
|
334
|
+
};
|
|
335
|
+
/**
|
|
336
|
+
* Rust's canonical test runner is `cargo test`; any crate with a
|
|
337
|
+
* `Cargo.toml` has it available by default. No deeper detection needed.
|
|
338
|
+
*/
|
|
339
|
+
function gatherRustTestFrameworkResult(cwd) {
|
|
340
|
+
if (!(0, runner_1.fileExists)(cwd, 'Cargo.toml'))
|
|
341
|
+
return null;
|
|
342
|
+
return { schemaVersion: 1, tool: 'rust', name: 'cargo-test' };
|
|
343
|
+
}
|
|
344
|
+
const rustTestFrameworkProvider = {
|
|
345
|
+
source: 'rust',
|
|
346
|
+
async gather(cwd) {
|
|
347
|
+
return gatherRustTestFrameworkResult(cwd);
|
|
348
|
+
},
|
|
349
|
+
};
|
|
139
350
|
function round1(n) {
|
|
140
351
|
return Math.round(n * 10) / 10;
|
|
141
352
|
}
|
|
@@ -197,137 +408,13 @@ exports.rust = {
|
|
|
197
408
|
tools: ['clippy', 'cargo-audit', 'cargo-llvm-cov'],
|
|
198
409
|
// No dedicated semgrep Rust ruleset; covered by p/security-audit.
|
|
199
410
|
semgrepRulesets: [],
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
try {
|
|
207
|
-
raw = fs.readFileSync(abs, 'utf-8');
|
|
208
|
-
}
|
|
209
|
-
catch {
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
const result = parseLcov(raw, file, cwd);
|
|
213
|
-
if (result)
|
|
214
|
-
return result;
|
|
215
|
-
}
|
|
216
|
-
// Fall back to cobertura XML (cargo llvm-cov --cobertura)
|
|
217
|
-
for (const file of ['coverage.cobertura.xml', 'coverage/coverage.cobertura.xml']) {
|
|
218
|
-
const abs = path.join(cwd, file);
|
|
219
|
-
let raw;
|
|
220
|
-
try {
|
|
221
|
-
raw = fs.readFileSync(abs, 'utf-8');
|
|
222
|
-
}
|
|
223
|
-
catch {
|
|
224
|
-
continue;
|
|
225
|
-
}
|
|
226
|
-
const result = (0, csharp_1.parseCoberturaXml)(raw, file, cwd);
|
|
227
|
-
if (result)
|
|
228
|
-
return result;
|
|
229
|
-
}
|
|
230
|
-
return null;
|
|
231
|
-
},
|
|
232
|
-
extractImports(content) {
|
|
233
|
-
// Rust: `use std::io;`, `use std::collections::HashMap;`,
|
|
234
|
-
// `use crate::module;`, `use super::sibling;`
|
|
235
|
-
// Also block form: `use std::{io, fs};`
|
|
236
|
-
const out = [];
|
|
237
|
-
const re = /^\s*use\s+([a-zA-Z_][\w:]*(?:::\{[^}]+\})?)\s*;/gm;
|
|
238
|
-
let m;
|
|
239
|
-
while ((m = re.exec(content)) !== null) {
|
|
240
|
-
out.push(m[1]);
|
|
241
|
-
}
|
|
242
|
-
return out;
|
|
243
|
-
},
|
|
244
|
-
// resolveImport intentionally omitted: Rust's module system uses crate/mod.rs
|
|
245
|
-
// hierarchy which requires parsing Cargo.toml + mod declarations. Out of scope.
|
|
246
|
-
async gatherMetrics(cwd) {
|
|
247
|
-
const metrics = {
|
|
248
|
-
toolsUsed: [],
|
|
249
|
-
toolsUnavailable: [],
|
|
250
|
-
};
|
|
251
|
-
const clippy = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.clippy, cwd);
|
|
252
|
-
if (clippy.available) {
|
|
253
|
-
const raw = (0, runner_1.run)('cargo clippy --message-format json 2>/dev/null', cwd, 120000);
|
|
254
|
-
if (raw) {
|
|
255
|
-
// Tier by clippy lint code (clippy::*) or rustc lint name.
|
|
256
|
-
// Collapse: critical + high → errors, medium + low → warnings.
|
|
257
|
-
let errors = 0;
|
|
258
|
-
let warnings = 0;
|
|
259
|
-
for (const line of raw.split('\n')) {
|
|
260
|
-
if (!line.trim())
|
|
261
|
-
continue;
|
|
262
|
-
try {
|
|
263
|
-
const msg = JSON.parse(line);
|
|
264
|
-
if (msg.reason !== 'compiler-message' || !msg.message)
|
|
265
|
-
continue;
|
|
266
|
-
// Upstream emits multiple levels (error, warning, note, help).
|
|
267
|
-
// Skip note/help — they're context, not findings.
|
|
268
|
-
if (msg.message.level !== 'error' && msg.message.level !== 'warning')
|
|
269
|
-
continue;
|
|
270
|
-
const tier = tierCargoMessage(msg.message);
|
|
271
|
-
if (tier === 'critical' || tier === 'high')
|
|
272
|
-
errors++;
|
|
273
|
-
else
|
|
274
|
-
warnings++;
|
|
275
|
-
}
|
|
276
|
-
catch {
|
|
277
|
-
/* skip non-JSON lines */
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
metrics.lintErrors = errors;
|
|
281
|
-
metrics.lintWarnings = warnings;
|
|
282
|
-
metrics.lintTool = 'clippy';
|
|
283
|
-
metrics.toolsUsed.push('clippy');
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
metrics.toolsUnavailable.push('clippy');
|
|
288
|
-
}
|
|
289
|
-
const audit = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['cargo-audit'], cwd);
|
|
290
|
-
if (audit.available && audit.path) {
|
|
291
|
-
const raw = (0, runner_1.run)(`${audit.path} audit --json 2>/dev/null`, cwd, 60000);
|
|
292
|
-
if (raw) {
|
|
293
|
-
try {
|
|
294
|
-
const data = JSON.parse(raw);
|
|
295
|
-
if (data.vulnerabilities) {
|
|
296
|
-
let critical = 0;
|
|
297
|
-
let high = 0;
|
|
298
|
-
let medium = 0;
|
|
299
|
-
let low = 0;
|
|
300
|
-
for (const v of data.vulnerabilities.list || []) {
|
|
301
|
-
const sev = v.advisory?.severity?.toLowerCase();
|
|
302
|
-
if (sev === 'critical')
|
|
303
|
-
critical++;
|
|
304
|
-
else if (sev === 'high')
|
|
305
|
-
high++;
|
|
306
|
-
else if (sev === 'medium')
|
|
307
|
-
medium++;
|
|
308
|
-
else
|
|
309
|
-
low++;
|
|
310
|
-
}
|
|
311
|
-
metrics.depVulnCritical = critical;
|
|
312
|
-
metrics.depVulnHigh = high;
|
|
313
|
-
metrics.depVulnMedium = medium;
|
|
314
|
-
metrics.depVulnLow = low;
|
|
315
|
-
metrics.depAuditTool = 'cargo-audit';
|
|
316
|
-
metrics.toolsUsed.push('cargo-audit');
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
catch {
|
|
320
|
-
metrics.toolsUnavailable.push('cargo-audit (parse error)');
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
metrics.toolsUnavailable.push('cargo-audit');
|
|
326
|
-
}
|
|
327
|
-
if ((0, runner_1.fileExists)(cwd, 'Cargo.toml')) {
|
|
328
|
-
metrics.testFramework = 'cargo-test';
|
|
329
|
-
}
|
|
330
|
-
return metrics;
|
|
411
|
+
capabilities: {
|
|
412
|
+
depVulns: rustDepVulnsProvider,
|
|
413
|
+
lint: rustLintProvider,
|
|
414
|
+
coverage: rustCoverageProvider,
|
|
415
|
+
imports: rustImportsProvider,
|
|
416
|
+
testFramework: rustTestFrameworkProvider,
|
|
331
417
|
},
|
|
418
|
+
mapLintSeverity: mapClippyLintSeverity,
|
|
332
419
|
};
|
|
333
420
|
//# sourceMappingURL=rust.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/languages/rust.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/languages/rust.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { CapabilityProvider } from './capabilities/provider';
|
|
2
|
+
import type { CoverageResult, DepVulnResult, ImportsResult, LintResult, TestFrameworkResult } from './capabilities/types';
|
|
3
3
|
export type LanguageId = 'typescript' | 'python' | 'go' | 'rust' | 'csharp';
|
|
4
4
|
export type LintSeverity = 'critical' | 'high' | 'medium' | 'low';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* health.ts`: fields in AGGREGATED_VULN_FIELDS are summed across packs,
|
|
12
|
-
* depAuditTool is joined, array fields (toolsUsed, toolsUnavailable) are
|
|
13
|
-
* appended, all others are last-wins.
|
|
6
|
+
* Capability providers a language pack may expose. Every data-producing
|
|
7
|
+
* surface lives here after Phase 10e.C.5 — the legacy `gatherMetrics`
|
|
8
|
+
* channel is gone, and the capability dispatcher is the only route from
|
|
9
|
+
* a language pack to the analyzer layer. Each provider is optional so a
|
|
10
|
+
* pack can ship incrementally as underlying tool support lands.
|
|
14
11
|
*/
|
|
15
|
-
export
|
|
12
|
+
export interface LanguagePackCapabilities {
|
|
13
|
+
depVulns?: CapabilityProvider<DepVulnResult>;
|
|
14
|
+
lint?: CapabilityProvider<LintResult>;
|
|
15
|
+
coverage?: CapabilityProvider<CoverageResult>;
|
|
16
|
+
testFramework?: CapabilityProvider<TestFrameworkResult>;
|
|
17
|
+
imports?: CapabilityProvider<ImportsResult>;
|
|
18
|
+
}
|
|
16
19
|
/**
|
|
17
20
|
* Everything dxkit needs to know about a language lives in one implementation
|
|
18
21
|
* of this interface. See `src/languages/index.ts` for the registry.
|
|
@@ -29,10 +32,8 @@ export interface LanguageSupport {
|
|
|
29
32
|
detect(cwd: string): boolean;
|
|
30
33
|
tools: string[];
|
|
31
34
|
semgrepRulesets: string[];
|
|
32
|
-
parseCoverage?(cwd: string): Coverage | null;
|
|
33
|
-
extractImports?(content: string): string[];
|
|
34
|
-
resolveImport?(from: string, spec: string, cwd: string): string | null;
|
|
35
|
-
gatherMetrics?(cwd: string): Promise<Partial<LangMetrics>>;
|
|
36
35
|
mapLintSeverity?(code: string): LintSeverity;
|
|
36
|
+
/** Capability providers for the dispatcher channel. */
|
|
37
|
+
capabilities?: LanguagePackCapabilities;
|
|
37
38
|
}
|
|
38
39
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/languages/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/languages/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,UAAU,EACV,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,UAAU,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IAEpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,eAAe,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IAE7C,uDAAuD;IACvD,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import type { LanguageSupport
|
|
1
|
+
import type { LanguageSupport } from './types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* rules), falling back to the rule's ESLint severity (2=error → high,
|
|
7
|
-
* 1=warning → medium) for rules we don't recognize.
|
|
8
|
-
*
|
|
9
|
-
* Unknown rules default to 'low' so unfamiliar plugins don't inflate the
|
|
10
|
-
* error count. Callers that also have the ESLint severity should prefer
|
|
11
|
-
* mapLintMessageSeverity below.
|
|
3
|
+
* Capture raw TS/JS module specifiers from source text. The imports
|
|
4
|
+
* capability batch-calls this while walking the pack's source extensions;
|
|
5
|
+
* unit tests exercise it directly for parse-correctness cases.
|
|
12
6
|
*/
|
|
13
|
-
export declare function
|
|
7
|
+
export declare function extractTsImportsRaw(content: string): string[];
|
|
8
|
+
/**
|
|
9
|
+
* Resolve a TS/JS module specifier to an in-project relative file path,
|
|
10
|
+
* or null for external packages and unresolvable specifiers. Exported so
|
|
11
|
+
* unit tests can exercise resolution directly; the imports capability
|
|
12
|
+
* calls it while building per-file edges.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveTsImportRaw(fromFile: string, spec: string, cwd: string): string | null;
|
|
14
15
|
export declare const typescript: LanguageSupport;
|
|
15
16
|
//# sourceMappingURL=typescript.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/languages/typescript.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/languages/typescript.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAqK7D;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAc7D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB7F;AAwMD,eAAO,MAAM,UAAU,EAAE,eAoCxB,CAAC"}
|