@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.
Files changed (210) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/README.md +3 -3
  3. package/dist/agents/extract.d.ts +25 -0
  4. package/dist/agents/extract.d.ts.map +1 -0
  5. package/dist/agents/extract.js +186 -0
  6. package/dist/agents/extract.js.map +1 -0
  7. package/dist/agents/schemas.d.ts +106 -0
  8. package/dist/agents/schemas.d.ts.map +1 -0
  9. package/dist/agents/schemas.js +86 -0
  10. package/dist/agents/schemas.js.map +1 -0
  11. package/dist/agents/session.d.ts +28 -0
  12. package/dist/agents/session.d.ts.map +1 -0
  13. package/dist/agents/session.js +223 -0
  14. package/dist/agents/session.js.map +1 -0
  15. package/dist/analyzers/developer/detailed.js +1 -1
  16. package/dist/analyzers/developer/detailed.js.map +1 -1
  17. package/dist/analyzers/dispatcher.d.ts +36 -0
  18. package/dist/analyzers/dispatcher.d.ts.map +1 -0
  19. package/dist/analyzers/dispatcher.js +62 -0
  20. package/dist/analyzers/dispatcher.js.map +1 -0
  21. package/dist/analyzers/docs/shallow.d.ts +3 -2
  22. package/dist/analyzers/docs/shallow.d.ts.map +1 -1
  23. package/dist/analyzers/docs/shallow.js +2 -2
  24. package/dist/analyzers/docs/shallow.js.map +1 -1
  25. package/dist/analyzers/dx/shallow.d.ts +3 -2
  26. package/dist/analyzers/dx/shallow.d.ts.map +1 -1
  27. package/dist/analyzers/dx/shallow.js +2 -2
  28. package/dist/analyzers/dx/shallow.js.map +1 -1
  29. package/dist/analyzers/health/actions.d.ts +3 -3
  30. package/dist/analyzers/health/actions.d.ts.map +1 -1
  31. package/dist/analyzers/health/actions.js +99 -52
  32. package/dist/analyzers/health/actions.js.map +1 -1
  33. package/dist/analyzers/health/detailed.d.ts.map +1 -1
  34. package/dist/analyzers/health/detailed.js +6 -2
  35. package/dist/analyzers/health/detailed.js.map +1 -1
  36. package/dist/analyzers/health.d.ts +0 -2
  37. package/dist/analyzers/health.d.ts.map +1 -1
  38. package/dist/analyzers/health.js +134 -72
  39. package/dist/analyzers/health.js.map +1 -1
  40. package/dist/analyzers/maintainability/shallow.d.ts +3 -2
  41. package/dist/analyzers/maintainability/shallow.d.ts.map +1 -1
  42. package/dist/analyzers/maintainability/shallow.js +2 -2
  43. package/dist/analyzers/maintainability/shallow.js.map +1 -1
  44. package/dist/analyzers/quality/detailed.js +1 -1
  45. package/dist/analyzers/quality/detailed.js.map +1 -1
  46. package/dist/analyzers/quality/gather.d.ts +33 -4
  47. package/dist/analyzers/quality/gather.d.ts.map +1 -1
  48. package/dist/analyzers/quality/gather.js +81 -93
  49. package/dist/analyzers/quality/gather.js.map +1 -1
  50. package/dist/analyzers/quality/index.js +4 -4
  51. package/dist/analyzers/quality/index.js.map +1 -1
  52. package/dist/analyzers/quality/shallow.d.ts +3 -2
  53. package/dist/analyzers/quality/shallow.d.ts.map +1 -1
  54. package/dist/analyzers/quality/shallow.js +2 -2
  55. package/dist/analyzers/quality/shallow.js.map +1 -1
  56. package/dist/analyzers/scoring.d.ts +26 -9
  57. package/dist/analyzers/scoring.d.ts.map +1 -1
  58. package/dist/analyzers/scoring.js +83 -71
  59. package/dist/analyzers/scoring.js.map +1 -1
  60. package/dist/analyzers/security/detailed.js +1 -1
  61. package/dist/analyzers/security/detailed.js.map +1 -1
  62. package/dist/analyzers/security/gather.d.ts +28 -5
  63. package/dist/analyzers/security/gather.d.ts.map +1 -1
  64. package/dist/analyzers/security/gather.js +87 -135
  65. package/dist/analyzers/security/gather.js.map +1 -1
  66. package/dist/analyzers/security/index.d.ts +1 -1
  67. package/dist/analyzers/security/index.d.ts.map +1 -1
  68. package/dist/analyzers/security/index.js +16 -11
  69. package/dist/analyzers/security/index.js.map +1 -1
  70. package/dist/analyzers/security/report.d.ts +6 -0
  71. package/dist/analyzers/security/report.d.ts.map +1 -0
  72. package/dist/analyzers/security/report.js +118 -0
  73. package/dist/analyzers/security/report.js.map +1 -0
  74. package/dist/analyzers/security/shallow.d.ts +3 -2
  75. package/dist/analyzers/security/shallow.d.ts.map +1 -1
  76. package/dist/analyzers/security/shallow.js +2 -2
  77. package/dist/analyzers/security/shallow.js.map +1 -1
  78. package/dist/analyzers/tests/detailed.js +1 -1
  79. package/dist/analyzers/tests/detailed.js.map +1 -1
  80. package/dist/analyzers/tests/import-graph.d.ts +8 -22
  81. package/dist/analyzers/tests/import-graph.d.ts.map +1 -1
  82. package/dist/analyzers/tests/import-graph.js +22 -189
  83. package/dist/analyzers/tests/import-graph.js.map +1 -1
  84. package/dist/analyzers/tests/index.d.ts +1 -1
  85. package/dist/analyzers/tests/index.d.ts.map +1 -1
  86. package/dist/analyzers/tests/index.js +3 -3
  87. package/dist/analyzers/tests/index.js.map +1 -1
  88. package/dist/analyzers/tests/shallow.d.ts +3 -2
  89. package/dist/analyzers/tests/shallow.d.ts.map +1 -1
  90. package/dist/analyzers/tests/shallow.js +2 -2
  91. package/dist/analyzers/tests/shallow.js.map +1 -1
  92. package/dist/analyzers/tools/coverage.d.ts +21 -11
  93. package/dist/analyzers/tools/coverage.d.ts.map +1 -1
  94. package/dist/analyzers/tools/coverage.js +32 -44
  95. package/dist/analyzers/tools/coverage.js.map +1 -1
  96. package/dist/analyzers/tools/dotnet.d.ts +8 -0
  97. package/dist/analyzers/tools/dotnet.d.ts.map +1 -0
  98. package/dist/analyzers/tools/dotnet.js +81 -0
  99. package/dist/analyzers/tools/dotnet.js.map +1 -0
  100. package/dist/analyzers/tools/gather-cache.d.ts +16 -0
  101. package/dist/analyzers/tools/gather-cache.d.ts.map +1 -0
  102. package/dist/analyzers/tools/gather-cache.js +126 -0
  103. package/dist/analyzers/tools/gather-cache.js.map +1 -0
  104. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  105. package/dist/analyzers/tools/generic.js +6 -28
  106. package/dist/analyzers/tools/generic.js.map +1 -1
  107. package/dist/analyzers/tools/gitleaks.d.ts +28 -5
  108. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  109. package/dist/analyzers/tools/gitleaks.js +91 -37
  110. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  111. package/dist/analyzers/tools/go.d.ts +8 -0
  112. package/dist/analyzers/tools/go.d.ts.map +1 -0
  113. package/dist/analyzers/tools/go.js +84 -0
  114. package/dist/analyzers/tools/go.js.map +1 -0
  115. package/dist/analyzers/tools/graphify.d.ts +31 -3
  116. package/dist/analyzers/tools/graphify.d.ts.map +1 -1
  117. package/dist/analyzers/tools/graphify.js +78 -36
  118. package/dist/analyzers/tools/graphify.js.map +1 -1
  119. package/dist/analyzers/tools/grep-secrets.d.ts +6 -0
  120. package/dist/analyzers/tools/grep-secrets.d.ts.map +1 -0
  121. package/dist/analyzers/tools/grep-secrets.js +124 -0
  122. package/dist/analyzers/tools/grep-secrets.js.map +1 -0
  123. package/dist/analyzers/tools/jscpd.d.ts +40 -0
  124. package/dist/analyzers/tools/jscpd.d.ts.map +1 -0
  125. package/dist/analyzers/tools/jscpd.js +96 -0
  126. package/dist/analyzers/tools/jscpd.js.map +1 -0
  127. package/dist/analyzers/tools/node.d.ts +8 -0
  128. package/dist/analyzers/tools/node.d.ts.map +1 -0
  129. package/dist/analyzers/tools/node.js +160 -0
  130. package/dist/analyzers/tools/node.js.map +1 -0
  131. package/dist/analyzers/tools/package-json.d.ts +6 -0
  132. package/dist/analyzers/tools/package-json.d.ts.map +1 -0
  133. package/dist/analyzers/tools/package-json.js +67 -0
  134. package/dist/analyzers/tools/package-json.js.map +1 -0
  135. package/dist/analyzers/tools/parallel.d.ts +22 -5
  136. package/dist/analyzers/tools/parallel.d.ts.map +1 -1
  137. package/dist/analyzers/tools/parallel.js +26 -185
  138. package/dist/analyzers/tools/parallel.js.map +1 -1
  139. package/dist/analyzers/tools/paths.d.ts +21 -0
  140. package/dist/analyzers/tools/paths.d.ts.map +1 -0
  141. package/dist/analyzers/tools/paths.js +62 -0
  142. package/dist/analyzers/tools/paths.js.map +1 -0
  143. package/dist/analyzers/tools/python.d.ts +8 -0
  144. package/dist/analyzers/tools/python.d.ts.map +1 -0
  145. package/dist/analyzers/tools/python.js +81 -0
  146. package/dist/analyzers/tools/python.js.map +1 -0
  147. package/dist/analyzers/tools/rust.d.ts +8 -0
  148. package/dist/analyzers/tools/rust.d.ts.map +1 -0
  149. package/dist/analyzers/tools/rust.js +86 -0
  150. package/dist/analyzers/tools/rust.js.map +1 -0
  151. package/dist/analyzers/tools/semgrep.d.ts +39 -0
  152. package/dist/analyzers/tools/semgrep.d.ts.map +1 -0
  153. package/dist/analyzers/tools/semgrep.js +129 -0
  154. package/dist/analyzers/tools/semgrep.js.map +1 -0
  155. package/dist/analyzers/tools/tool-registry.d.ts +0 -41
  156. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  157. package/dist/analyzers/tools/tool-registry.js +0 -87
  158. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  159. package/dist/analyzers/types.d.ts +42 -30
  160. package/dist/analyzers/types.d.ts.map +1 -1
  161. package/dist/cli.js +2 -2
  162. package/dist/cli.js.map +1 -1
  163. package/dist/constants.d.ts +1 -3
  164. package/dist/constants.d.ts.map +1 -1
  165. package/dist/constants.js +55 -14
  166. package/dist/constants.js.map +1 -1
  167. package/dist/languages/capabilities/descriptors.d.ts +74 -0
  168. package/dist/languages/capabilities/descriptors.d.ts.map +1 -0
  169. package/dist/languages/capabilities/descriptors.js +250 -0
  170. package/dist/languages/capabilities/descriptors.js.map +1 -0
  171. package/dist/languages/capabilities/global.d.ts +43 -0
  172. package/dist/languages/capabilities/global.d.ts.map +1 -0
  173. package/dist/languages/capabilities/global.js +48 -0
  174. package/dist/languages/capabilities/global.js.map +1 -0
  175. package/dist/languages/capabilities/index.d.ts +31 -0
  176. package/dist/languages/capabilities/index.d.ts.map +1 -0
  177. package/dist/languages/capabilities/index.js +56 -0
  178. package/dist/languages/capabilities/index.js.map +1 -0
  179. package/dist/languages/capabilities/provider.d.ts +16 -0
  180. package/dist/languages/capabilities/provider.d.ts.map +1 -0
  181. package/dist/languages/capabilities/provider.js +12 -0
  182. package/dist/languages/capabilities/provider.js.map +1 -0
  183. package/dist/languages/capabilities/types.d.ts +226 -0
  184. package/dist/languages/capabilities/types.d.ts.map +1 -0
  185. package/dist/languages/capabilities/types.js +23 -0
  186. package/dist/languages/capabilities/types.js.map +1 -0
  187. package/dist/languages/csharp.d.ts +8 -0
  188. package/dist/languages/csharp.d.ts.map +1 -1
  189. package/dist/languages/csharp.js +203 -103
  190. package/dist/languages/csharp.js.map +1 -1
  191. package/dist/languages/go.d.ts +13 -7
  192. package/dist/languages/go.d.ts.map +1 -1
  193. package/dist/languages/go.js +277 -183
  194. package/dist/languages/go.js.map +1 -1
  195. package/dist/languages/python.d.ts +14 -0
  196. package/dist/languages/python.d.ts.map +1 -1
  197. package/dist/languages/python.js +276 -169
  198. package/dist/languages/python.js.map +1 -1
  199. package/dist/languages/rust.d.ts +8 -0
  200. package/dist/languages/rust.d.ts.map +1 -1
  201. package/dist/languages/rust.js +218 -131
  202. package/dist/languages/rust.js.map +1 -1
  203. package/dist/languages/types.d.ts +16 -15
  204. package/dist/languages/types.d.ts.map +1 -1
  205. package/dist/languages/typescript.d.ts +12 -11
  206. package/dist/languages/typescript.d.ts.map +1 -1
  207. package/dist/languages/typescript.js +256 -161
  208. package/dist/languages/typescript.js.map +1 -1
  209. package/package.json +1 -1
  210. package/templates/.ai/templates/session-checkpoint-template.md +97 -0
@@ -1,3 +1,17 @@
1
1
  import type { LanguageSupport } from './types';
2
+ /**
3
+ * Capture Python module specifiers from source text. Handles both
4
+ * `from X import Y` and bare `import X, Y as Z` forms. Exported so
5
+ * unit tests can exercise it directly; the imports capability batches
6
+ * it across all .py files under the repo.
7
+ */
8
+ export declare function extractPyImportsRaw(content: string): string[];
9
+ /**
10
+ * Resolve a Python import specifier to an in-project file path, or null
11
+ * for unresolvable / stdlib / external references. Handles relative
12
+ * specifiers (leading dots) and absolute-from-project-root imports.
13
+ * Exported for unit testing.
14
+ */
15
+ export declare function resolvePyImportRaw(fromFile: string, spec: string, cwd: string): string | null;
2
16
  export declare const python: LanguageSupport;
3
17
  //# sourceMappingURL=python.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAoE7D,eAAO,MAAM,MAAM,EAAE,eAiLpB,CAAC"}
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAkM7D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB7D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB7F;AA+ED,eAAO,MAAM,MAAM,EAAE,eA6BpB,CAAC"}
@@ -34,9 +34,12 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.python = void 0;
37
+ exports.extractPyImportsRaw = extractPyImportsRaw;
38
+ exports.resolvePyImportRaw = resolvePyImportRaw;
37
39
  const fs = __importStar(require("fs"));
38
40
  const path = __importStar(require("path"));
39
41
  const coverage_1 = require("../analyzers/tools/coverage");
42
+ const exclusions_1 = require("../analyzers/tools/exclusions");
40
43
  const osv_1 = require("../analyzers/tools/osv");
41
44
  const runner_1 = require("../analyzers/tools/runner");
42
45
  const tool_registry_1 = require("../analyzers/tools/tool-registry");
@@ -79,6 +82,70 @@ function hasPyFileWithinDepth(cwd, maxDepth = 2) {
79
82
  }
80
83
  return search(cwd, 0);
81
84
  }
85
+ /**
86
+ * Single source of truth for the python pack's dep-vuln gathering.
87
+ * Consumed by `pyDepVulnsProvider` (capability dispatcher).
88
+ */
89
+ async function gatherPyDepVulnsResult(cwd) {
90
+ const pipAudit = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['pip-audit'], cwd);
91
+ if (!pipAudit.available || !pipAudit.path)
92
+ return { kind: 'tool-missing' };
93
+ const raw = (0, runner_1.run)(`${pipAudit.path} --format json 2>/dev/null`, cwd, 120000);
94
+ if (!raw)
95
+ return { kind: 'no-output' };
96
+ try {
97
+ const data = JSON.parse(raw);
98
+ const vulnIds = [];
99
+ for (const dep of data.dependencies || []) {
100
+ for (const v of dep.vulns || []) {
101
+ if (v.id)
102
+ vulnIds.push(v.id);
103
+ }
104
+ }
105
+ // pip-audit doesn't carry severity per vuln — look up via OSV.dev.
106
+ // Unknown/unreachable IDs fall back to medium (pip-audit's legacy default).
107
+ const severities = await (0, osv_1.enrichSeverities)(vulnIds);
108
+ let critical = 0;
109
+ let high = 0;
110
+ let medium = 0;
111
+ let low = 0;
112
+ let enrichedCount = 0;
113
+ for (const id of vulnIds) {
114
+ const sev = severities.get(id);
115
+ if (sev && sev !== 'unknown') {
116
+ enrichedCount++;
117
+ if (sev === 'critical')
118
+ critical++;
119
+ else if (sev === 'high')
120
+ high++;
121
+ else if (sev === 'medium')
122
+ medium++;
123
+ else
124
+ low++;
125
+ }
126
+ else {
127
+ medium++;
128
+ }
129
+ }
130
+ const envelope = {
131
+ schemaVersion: 1,
132
+ tool: 'pip-audit',
133
+ enrichment: enrichedCount > 0 ? 'osv.dev' : null,
134
+ counts: { critical, high, medium, low },
135
+ };
136
+ return { kind: 'success', envelope };
137
+ }
138
+ catch {
139
+ return { kind: 'parse-error' };
140
+ }
141
+ }
142
+ const pyDepVulnsProvider = {
143
+ source: 'python',
144
+ async gather(cwd) {
145
+ const outcome = await gatherPyDepVulnsResult(cwd);
146
+ return outcome.kind === 'success' ? outcome.envelope : null;
147
+ },
148
+ };
82
149
  function mapRuffSeverity(code) {
83
150
  const prefix = code.match(/^[A-Z]+/)?.[0] ?? '';
84
151
  switch (prefix) {
@@ -94,6 +161,209 @@ function mapRuffSeverity(code) {
94
161
  return 'low';
95
162
  }
96
163
  }
164
+ /**
165
+ * Single source of truth for the python pack's lint gathering.
166
+ * Consumed by `pyLintProvider` (capability dispatcher).
167
+ */
168
+ function gatherPyLintResult(cwd) {
169
+ const ruff = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.ruff, cwd);
170
+ if (!ruff.available || !ruff.path) {
171
+ return { kind: 'unavailable', reason: 'not installed' };
172
+ }
173
+ const raw = (0, runner_1.run)(`${ruff.path} check . --output-format json 2>/dev/null`, cwd, 60000);
174
+ const counts = { critical: 0, high: 0, medium: 0, low: 0 };
175
+ if (!raw) {
176
+ // Empty output = ruff ran and found nothing, matching prior behavior.
177
+ const envelope = { schemaVersion: 1, tool: 'ruff', counts };
178
+ return { kind: 'success', envelope };
179
+ }
180
+ try {
181
+ const results = JSON.parse(raw);
182
+ if (!Array.isArray(results)) {
183
+ return { kind: 'unavailable', reason: 'parse error' };
184
+ }
185
+ for (const r of results) {
186
+ counts[mapRuffSeverity(r.code)]++;
187
+ }
188
+ const envelope = { schemaVersion: 1, tool: 'ruff', counts };
189
+ return { kind: 'success', envelope };
190
+ }
191
+ catch {
192
+ return { kind: 'unavailable', reason: 'parse error' };
193
+ }
194
+ }
195
+ const pyLintProvider = {
196
+ source: 'python',
197
+ async gather(cwd) {
198
+ const outcome = gatherPyLintResult(cwd);
199
+ return outcome.kind === 'success' ? outcome.envelope : null;
200
+ },
201
+ };
202
+ /**
203
+ * Single source of truth for the python pack's coverage gathering.
204
+ * Consumed by `pyCoverageProvider` (capability dispatcher).
205
+ */
206
+ function gatherPyCoverageResult(cwd) {
207
+ const file = path.join(cwd, 'coverage.json');
208
+ let raw;
209
+ try {
210
+ raw = fs.readFileSync(file, 'utf-8');
211
+ }
212
+ catch {
213
+ return null;
214
+ }
215
+ try {
216
+ const coverage = (0, coverage_1.parseCoveragePy)(raw, 'coverage.json', cwd);
217
+ return { schemaVersion: 1, tool: `coverage:${coverage.source}`, coverage };
218
+ }
219
+ catch {
220
+ return null;
221
+ }
222
+ }
223
+ const pyCoverageProvider = {
224
+ source: 'python',
225
+ async gather(cwd) {
226
+ return gatherPyCoverageResult(cwd);
227
+ },
228
+ };
229
+ /**
230
+ * Capture Python module specifiers from source text. Handles both
231
+ * `from X import Y` and bare `import X, Y as Z` forms. Exported so
232
+ * unit tests can exercise it directly; the imports capability batches
233
+ * it across all .py files under the repo.
234
+ */
235
+ function extractPyImportsRaw(content) {
236
+ const out = [];
237
+ for (const line of stripPyComments(content).split('\n')) {
238
+ const trimmed = line.trim();
239
+ const fromMatch = trimmed.match(/^from\s+([.\w]+)\s+import\s+/);
240
+ if (fromMatch) {
241
+ out.push(fromMatch[1]);
242
+ continue;
243
+ }
244
+ const impMatch = trimmed.match(/^import\s+(.+)$/);
245
+ if (impMatch) {
246
+ for (const part of impMatch[1].split(',')) {
247
+ const name = part
248
+ .trim()
249
+ .split(/\s+as\s+/)[0]
250
+ .trim();
251
+ if (name)
252
+ out.push(name);
253
+ }
254
+ }
255
+ }
256
+ return out;
257
+ }
258
+ /**
259
+ * Resolve a Python import specifier to an in-project file path, or null
260
+ * for unresolvable / stdlib / external references. Handles relative
261
+ * specifiers (leading dots) and absolute-from-project-root imports.
262
+ * Exported for unit testing.
263
+ */
264
+ function resolvePyImportRaw(fromFile, spec, cwd) {
265
+ const fromDir = path.dirname(path.join(cwd, fromFile));
266
+ const dotMatch = spec.match(/^(\.+)(.*)$/);
267
+ let baseDir;
268
+ let remainder;
269
+ if (dotMatch) {
270
+ const dots = dotMatch[1].length;
271
+ remainder = dotMatch[2];
272
+ baseDir = fromDir;
273
+ for (let i = 1; i < dots; i++)
274
+ baseDir = path.dirname(baseDir);
275
+ }
276
+ else {
277
+ baseDir = cwd;
278
+ remainder = spec;
279
+ }
280
+ if (!remainder)
281
+ return null;
282
+ const parts = remainder.split('.').filter(Boolean);
283
+ const candidate = path.join(baseDir, ...parts);
284
+ if (isFile(candidate + '.py'))
285
+ return toRel(candidate + '.py', cwd);
286
+ const init = path.join(candidate, '__init__.py');
287
+ if (isFile(init))
288
+ return toRel(init, cwd);
289
+ return null;
290
+ }
291
+ /**
292
+ * Enumerate .py source files under cwd and pre-compute the pack's
293
+ * per-file imports + resolved edges. Shares enumeration strategy with
294
+ * the typescript pack (find + getFindExcludeFlags).
295
+ */
296
+ function gatherPyImportsResult(cwd) {
297
+ const excludes = (0, exclusions_1.getFindExcludeFlags)(cwd);
298
+ const raw = (0, runner_1.run)(`find . -type f -name "*.py" ${excludes} 2>/dev/null`, cwd);
299
+ if (!raw)
300
+ return null;
301
+ const extracted = new Map();
302
+ const edges = new Map();
303
+ for (const line of raw.split('\n')) {
304
+ const p = line.trim();
305
+ if (!p)
306
+ continue;
307
+ const rel = p.replace(/^\.\//, '');
308
+ let content;
309
+ try {
310
+ content = fs.readFileSync(path.join(cwd, rel), 'utf-8');
311
+ }
312
+ catch {
313
+ continue;
314
+ }
315
+ const specs = extractPyImportsRaw(content);
316
+ extracted.set(rel, specs);
317
+ const targets = new Set();
318
+ for (const spec of specs) {
319
+ const resolved = resolvePyImportRaw(rel, spec, cwd);
320
+ if (resolved)
321
+ targets.add(resolved);
322
+ }
323
+ if (targets.size > 0)
324
+ edges.set(rel, targets);
325
+ }
326
+ if (extracted.size === 0)
327
+ return null;
328
+ return {
329
+ schemaVersion: 1,
330
+ tool: 'python-imports',
331
+ sourceExtensions: ['.py'],
332
+ extracted,
333
+ edges,
334
+ };
335
+ }
336
+ const pyImportsProvider = {
337
+ source: 'python',
338
+ async gather(cwd) {
339
+ return gatherPyImportsResult(cwd);
340
+ },
341
+ };
342
+ /**
343
+ * Detect pytest by the three signals it publishes: `pytest.ini`,
344
+ * `conftest.py`, or a `[tool.pytest]` table in `pyproject.toml`. Other
345
+ * Python runners (unittest, nose) don't self-announce and would need
346
+ * heuristic source-file scanning — out of scope until Phase 10f.1.
347
+ * Returns null when no signal is present.
348
+ */
349
+ function gatherPyTestFrameworkResult(cwd) {
350
+ const hasPytestConfigFile = (0, runner_1.fileExists)(cwd, 'pytest.ini', 'conftest.py');
351
+ if (hasPytestConfigFile)
352
+ return { schemaVersion: 1, tool: 'python', name: 'pytest' };
353
+ if ((0, runner_1.fileExists)(cwd, 'pyproject.toml')) {
354
+ const pyproject = (0, runner_1.run)('cat pyproject.toml 2>/dev/null', cwd);
355
+ if (pyproject?.includes('[tool.pytest')) {
356
+ return { schemaVersion: 1, tool: 'python', name: 'pytest' };
357
+ }
358
+ }
359
+ return null;
360
+ }
361
+ const pyTestFrameworkProvider = {
362
+ source: 'python',
363
+ async gather(cwd) {
364
+ return gatherPyTestFrameworkResult(cwd);
365
+ },
366
+ };
97
367
  exports.python = {
98
368
  id: 'python',
99
369
  displayName: 'Python',
@@ -109,175 +379,12 @@ exports.python = {
109
379
  },
110
380
  tools: ['ruff', 'pip-audit', 'coverage-py'],
111
381
  semgrepRulesets: ['p/python'],
112
- parseCoverage(cwd) {
113
- const file = path.join(cwd, 'coverage.json');
114
- let raw;
115
- try {
116
- raw = fs.readFileSync(file, 'utf-8');
117
- }
118
- catch {
119
- return null;
120
- }
121
- try {
122
- return (0, coverage_1.parseCoveragePy)(raw, 'coverage.json', cwd);
123
- }
124
- catch {
125
- return null;
126
- }
127
- },
128
- extractImports(content) {
129
- const out = [];
130
- for (const line of stripPyComments(content).split('\n')) {
131
- const trimmed = line.trim();
132
- const fromMatch = trimmed.match(/^from\s+([.\w]+)\s+import\s+/);
133
- if (fromMatch) {
134
- out.push(fromMatch[1]);
135
- continue;
136
- }
137
- const impMatch = trimmed.match(/^import\s+(.+)$/);
138
- if (impMatch) {
139
- for (const part of impMatch[1].split(',')) {
140
- const name = part
141
- .trim()
142
- .split(/\s+as\s+/)[0]
143
- .trim();
144
- if (name)
145
- out.push(name);
146
- }
147
- }
148
- }
149
- return out;
150
- },
151
- resolveImport(fromFile, spec, cwd) {
152
- const fromDir = path.dirname(path.join(cwd, fromFile));
153
- const dotMatch = spec.match(/^(\.+)(.*)$/);
154
- let baseDir;
155
- let remainder;
156
- if (dotMatch) {
157
- const dots = dotMatch[1].length;
158
- remainder = dotMatch[2];
159
- baseDir = fromDir;
160
- for (let i = 1; i < dots; i++)
161
- baseDir = path.dirname(baseDir);
162
- }
163
- else {
164
- baseDir = cwd;
165
- remainder = spec;
166
- }
167
- if (!remainder)
168
- return null;
169
- const parts = remainder.split('.').filter(Boolean);
170
- const candidate = path.join(baseDir, ...parts);
171
- if (isFile(candidate + '.py'))
172
- return toRel(candidate + '.py', cwd);
173
- const init = path.join(candidate, '__init__.py');
174
- if (isFile(init))
175
- return toRel(init, cwd);
176
- return null;
177
- },
178
- async gatherMetrics(cwd) {
179
- const metrics = {
180
- toolsUsed: [],
181
- toolsUnavailable: [],
182
- };
183
- const ruff = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.ruff, cwd);
184
- if (ruff.available && ruff.path) {
185
- const raw = (0, runner_1.run)(`${ruff.path} check . --output-format json 2>/dev/null`, cwd, 60000);
186
- if (raw) {
187
- try {
188
- const results = JSON.parse(raw);
189
- if (Array.isArray(results)) {
190
- let errors = 0;
191
- let warnings = 0;
192
- for (const r of results) {
193
- const sev = mapRuffSeverity(r.code);
194
- if (sev === 'critical' || sev === 'high')
195
- errors++;
196
- else
197
- warnings++;
198
- }
199
- metrics.lintErrors = errors;
200
- metrics.lintWarnings = warnings;
201
- metrics.lintTool = 'ruff';
202
- metrics.toolsUsed.push('ruff');
203
- }
204
- }
205
- catch {
206
- metrics.toolsUnavailable.push('ruff (parse error)');
207
- }
208
- }
209
- else {
210
- metrics.lintErrors = 0;
211
- metrics.lintWarnings = 0;
212
- metrics.lintTool = 'ruff';
213
- metrics.toolsUsed.push('ruff');
214
- }
215
- }
216
- else {
217
- metrics.toolsUnavailable.push('ruff');
218
- }
219
- const pipAudit = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['pip-audit'], cwd);
220
- if (pipAudit.available && pipAudit.path) {
221
- const raw = (0, runner_1.run)(`${pipAudit.path} --format json 2>/dev/null`, cwd, 120000);
222
- if (raw) {
223
- try {
224
- const data = JSON.parse(raw);
225
- const vulnIds = [];
226
- for (const dep of data.dependencies || []) {
227
- for (const v of dep.vulns || []) {
228
- if (v.id)
229
- vulnIds.push(v.id);
230
- }
231
- }
232
- // pip-audit doesn't carry severity per vuln — look up via OSV.dev.
233
- // Unknown/unreachable IDs fall back to medium (pip-audit's legacy default).
234
- const severities = await (0, osv_1.enrichSeverities)(vulnIds);
235
- let critical = 0;
236
- let high = 0;
237
- let medium = 0;
238
- let low = 0;
239
- let enrichedCount = 0;
240
- for (const id of vulnIds) {
241
- const sev = severities.get(id);
242
- if (sev && sev !== 'unknown') {
243
- enrichedCount++;
244
- if (sev === 'critical')
245
- critical++;
246
- else if (sev === 'high')
247
- high++;
248
- else if (sev === 'medium')
249
- medium++;
250
- else
251
- low++;
252
- }
253
- else {
254
- medium++;
255
- }
256
- }
257
- metrics.depVulnCritical = critical;
258
- metrics.depVulnHigh = high;
259
- metrics.depVulnMedium = medium;
260
- metrics.depVulnLow = low;
261
- metrics.depAuditTool = 'pip-audit';
262
- metrics.toolsUsed.push('pip-audit');
263
- if (enrichedCount > 0)
264
- metrics.toolsUsed.push('osv.dev');
265
- }
266
- catch {
267
- metrics.toolsUnavailable.push('pip-audit (parse error)');
268
- }
269
- }
270
- }
271
- else {
272
- metrics.toolsUnavailable.push('pip-audit');
273
- }
274
- if ((0, runner_1.fileExists)(cwd, 'pytest.ini', 'conftest.py') || (0, runner_1.fileExists)(cwd, 'pyproject.toml')) {
275
- const pyproject = (0, runner_1.run)('cat pyproject.toml 2>/dev/null', cwd);
276
- if (pyproject?.includes('[tool.pytest') || (0, runner_1.fileExists)(cwd, 'pytest.ini', 'conftest.py')) {
277
- metrics.testFramework = 'pytest';
278
- }
279
- }
280
- return metrics;
382
+ capabilities: {
383
+ depVulns: pyDepVulnsProvider,
384
+ lint: pyLintProvider,
385
+ coverage: pyCoverageProvider,
386
+ imports: pyImportsProvider,
387
+ testFramework: pyTestFrameworkProvider,
281
388
  },
282
389
  mapLintSeverity: mapRuffSeverity,
283
390
  };
@@ -1 +1 @@
1
- {"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,14 @@ import type { LanguageSupport, LintSeverity } from './types';
12
12
  * `deprecated` are meaningful but rarely critical.
13
13
  */
14
14
  export declare function mapClippyLintSeverity(code: string | undefined): LintSeverity;
15
+ /**
16
+ * Capture Rust `use` path specifiers from source text. Handles simple
17
+ * paths (`use std::io;`) and grouped (`use std::{io, fs};`). Rust has
18
+ * no file-level resolver — see note on the pack's capabilities slot —
19
+ * so this is the only raw helper the imports capability needs.
20
+ * Exported for unit tests.
21
+ */
22
+ export declare function extractRustImportsRaw(content: string): string[];
15
23
  export declare function parseLcov(raw: string, sourceFile: string, cwd: string): Coverage | null;
16
24
  export declare const rust: LanguageSupport;
17
25
  //# sourceMappingURL=rust.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../src/languages/rust.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,6BAA6B,CAAC;AAK1E,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAyE7D;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAM5E;AAsBD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAyCvF;AAED,eAAO,MAAM,IAAI,EAAE,eA4IlB,CAAC"}
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../src/languages/rust.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,6BAA6B,CAAC;AAgB1E,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAyE7D;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAM5E;AAuJD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ/D;AAkED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAyCvF;AAED,eAAO,MAAM,IAAI,EAAE,eA0BlB,CAAC"}