codedev-mcp 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/LICENSE +21 -0
  3. package/README.md +760 -0
  4. package/dist/analyzers/api-contract.d.ts +46 -0
  5. package/dist/analyzers/api-contract.d.ts.map +1 -0
  6. package/dist/analyzers/api-contract.js +319 -0
  7. package/dist/analyzers/api-contract.js.map +1 -0
  8. package/dist/analyzers/architecture.d.ts +37 -0
  9. package/dist/analyzers/architecture.d.ts.map +1 -0
  10. package/dist/analyzers/architecture.js +149 -0
  11. package/dist/analyzers/architecture.js.map +1 -0
  12. package/dist/analyzers/branch-compare.d.ts +46 -0
  13. package/dist/analyzers/branch-compare.d.ts.map +1 -0
  14. package/dist/analyzers/branch-compare.js +128 -0
  15. package/dist/analyzers/branch-compare.js.map +1 -0
  16. package/dist/analyzers/cicd.d.ts +42 -0
  17. package/dist/analyzers/cicd.d.ts.map +1 -0
  18. package/dist/analyzers/cicd.js +237 -0
  19. package/dist/analyzers/cicd.js.map +1 -0
  20. package/dist/analyzers/codebase.d.ts +64 -0
  21. package/dist/analyzers/codebase.d.ts.map +1 -0
  22. package/dist/analyzers/codebase.js +354 -0
  23. package/dist/analyzers/codebase.js.map +1 -0
  24. package/dist/analyzers/complexity-heatmap.d.ts +50 -0
  25. package/dist/analyzers/complexity-heatmap.d.ts.map +1 -0
  26. package/dist/analyzers/complexity-heatmap.js +156 -0
  27. package/dist/analyzers/complexity-heatmap.js.map +1 -0
  28. package/dist/analyzers/context-pack.d.ts +43 -0
  29. package/dist/analyzers/context-pack.d.ts.map +1 -0
  30. package/dist/analyzers/context-pack.js +232 -0
  31. package/dist/analyzers/context-pack.js.map +1 -0
  32. package/dist/analyzers/coverage.d.ts +70 -0
  33. package/dist/analyzers/coverage.d.ts.map +1 -0
  34. package/dist/analyzers/coverage.js +313 -0
  35. package/dist/analyzers/coverage.js.map +1 -0
  36. package/dist/analyzers/db-schema.d.ts +55 -0
  37. package/dist/analyzers/db-schema.d.ts.map +1 -0
  38. package/dist/analyzers/db-schema.js +237 -0
  39. package/dist/analyzers/db-schema.js.map +1 -0
  40. package/dist/analyzers/dead-code.d.ts +34 -0
  41. package/dist/analyzers/dead-code.d.ts.map +1 -0
  42. package/dist/analyzers/dead-code.js +131 -0
  43. package/dist/analyzers/dead-code.js.map +1 -0
  44. package/dist/analyzers/dep-vuln.d.ts +36 -0
  45. package/dist/analyzers/dep-vuln.d.ts.map +1 -0
  46. package/dist/analyzers/dep-vuln.js +342 -0
  47. package/dist/analyzers/dep-vuln.js.map +1 -0
  48. package/dist/analyzers/docs.d.ts +47 -0
  49. package/dist/analyzers/docs.d.ts.map +1 -0
  50. package/dist/analyzers/docs.js +473 -0
  51. package/dist/analyzers/docs.js.map +1 -0
  52. package/dist/analyzers/git.d.ts +115 -0
  53. package/dist/analyzers/git.d.ts.map +1 -0
  54. package/dist/analyzers/git.js +214 -0
  55. package/dist/analyzers/git.js.map +1 -0
  56. package/dist/analyzers/iac.d.ts +39 -0
  57. package/dist/analyzers/iac.d.ts.map +1 -0
  58. package/dist/analyzers/iac.js +233 -0
  59. package/dist/analyzers/iac.js.map +1 -0
  60. package/dist/analyzers/impact.d.ts +51 -0
  61. package/dist/analyzers/impact.d.ts.map +1 -0
  62. package/dist/analyzers/impact.js +235 -0
  63. package/dist/analyzers/impact.js.map +1 -0
  64. package/dist/analyzers/monorepo.d.ts +36 -0
  65. package/dist/analyzers/monorepo.d.ts.map +1 -0
  66. package/dist/analyzers/monorepo.js +233 -0
  67. package/dist/analyzers/monorepo.js.map +1 -0
  68. package/dist/analyzers/notebook.d.ts +53 -0
  69. package/dist/analyzers/notebook.d.ts.map +1 -0
  70. package/dist/analyzers/notebook.js +149 -0
  71. package/dist/analyzers/notebook.js.map +1 -0
  72. package/dist/analyzers/perf-profile.d.ts +39 -0
  73. package/dist/analyzers/perf-profile.d.ts.map +1 -0
  74. package/dist/analyzers/perf-profile.js +222 -0
  75. package/dist/analyzers/perf-profile.js.map +1 -0
  76. package/dist/analyzers/scaffold.d.ts +46 -0
  77. package/dist/analyzers/scaffold.d.ts.map +1 -0
  78. package/dist/analyzers/scaffold.js +313 -0
  79. package/dist/analyzers/scaffold.js.map +1 -0
  80. package/dist/analyzers/security.d.ts +42 -0
  81. package/dist/analyzers/security.d.ts.map +1 -0
  82. package/dist/analyzers/security.js +281 -0
  83. package/dist/analyzers/security.js.map +1 -0
  84. package/dist/analyzers/symbols.d.ts +49 -0
  85. package/dist/analyzers/symbols.d.ts.map +1 -0
  86. package/dist/analyzers/symbols.js +212 -0
  87. package/dist/analyzers/symbols.js.map +1 -0
  88. package/dist/analyzers/tree-sitter.d.ts +71 -0
  89. package/dist/analyzers/tree-sitter.d.ts.map +1 -0
  90. package/dist/analyzers/tree-sitter.js +333 -0
  91. package/dist/analyzers/tree-sitter.js.map +1 -0
  92. package/dist/analyzers/type-flow.d.ts +39 -0
  93. package/dist/analyzers/type-flow.d.ts.map +1 -0
  94. package/dist/analyzers/type-flow.js +75 -0
  95. package/dist/analyzers/type-flow.js.map +1 -0
  96. package/dist/cache/memory-cache.d.ts +130 -0
  97. package/dist/cache/memory-cache.d.ts.map +1 -0
  98. package/dist/cache/memory-cache.js +273 -0
  99. package/dist/cache/memory-cache.js.map +1 -0
  100. package/dist/config.d.ts +32 -0
  101. package/dist/config.d.ts.map +1 -0
  102. package/dist/config.js +57 -0
  103. package/dist/config.js.map +1 -0
  104. package/dist/constants/instructions.d.ts +2 -0
  105. package/dist/constants/instructions.d.ts.map +1 -0
  106. package/dist/constants/instructions.js +82 -0
  107. package/dist/constants/instructions.js.map +1 -0
  108. package/dist/db/connection.d.ts +12 -0
  109. package/dist/db/connection.d.ts.map +1 -0
  110. package/dist/db/connection.js +34 -0
  111. package/dist/db/connection.js.map +1 -0
  112. package/dist/db/json-store.d.ts +111 -0
  113. package/dist/db/json-store.d.ts.map +1 -0
  114. package/dist/db/json-store.js +201 -0
  115. package/dist/db/json-store.js.map +1 -0
  116. package/dist/db/sqlite-store.d.ts +153 -0
  117. package/dist/db/sqlite-store.d.ts.map +1 -0
  118. package/dist/db/sqlite-store.js +388 -0
  119. package/dist/db/sqlite-store.js.map +1 -0
  120. package/dist/index.d.ts +17 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +116 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/resources/health.d.ts +35 -0
  125. package/dist/resources/health.d.ts.map +1 -0
  126. package/dist/resources/health.js +81 -0
  127. package/dist/resources/health.js.map +1 -0
  128. package/dist/schemas/output-schemas.d.ts +517 -0
  129. package/dist/schemas/output-schemas.d.ts.map +1 -0
  130. package/dist/schemas/output-schemas.js +296 -0
  131. package/dist/schemas/output-schemas.js.map +1 -0
  132. package/dist/search/fast-search.d.ts +90 -0
  133. package/dist/search/fast-search.d.ts.map +1 -0
  134. package/dist/search/fast-search.js +387 -0
  135. package/dist/search/fast-search.js.map +1 -0
  136. package/dist/search/semantic.d.ts +26 -0
  137. package/dist/search/semantic.d.ts.map +1 -0
  138. package/dist/search/semantic.js +458 -0
  139. package/dist/search/semantic.js.map +1 -0
  140. package/dist/tools/analysis.d.ts +7 -0
  141. package/dist/tools/analysis.d.ts.map +1 -0
  142. package/dist/tools/analysis.js +491 -0
  143. package/dist/tools/analysis.js.map +1 -0
  144. package/dist/tools/architecture.d.ts +7 -0
  145. package/dist/tools/architecture.d.ts.map +1 -0
  146. package/dist/tools/architecture.js +176 -0
  147. package/dist/tools/architecture.js.map +1 -0
  148. package/dist/tools/devops.d.ts +7 -0
  149. package/dist/tools/devops.d.ts.map +1 -0
  150. package/dist/tools/devops.js +179 -0
  151. package/dist/tools/devops.js.map +1 -0
  152. package/dist/tools/docs.d.ts +7 -0
  153. package/dist/tools/docs.d.ts.map +1 -0
  154. package/dist/tools/docs.js +102 -0
  155. package/dist/tools/docs.js.map +1 -0
  156. package/dist/tools/git.d.ts +7 -0
  157. package/dist/tools/git.d.ts.map +1 -0
  158. package/dist/tools/git.js +475 -0
  159. package/dist/tools/git.js.map +1 -0
  160. package/dist/tools/nav.d.ts +7 -0
  161. package/dist/tools/nav.d.ts.map +1 -0
  162. package/dist/tools/nav.js +275 -0
  163. package/dist/tools/nav.js.map +1 -0
  164. package/dist/tools/notebook.d.ts +7 -0
  165. package/dist/tools/notebook.d.ts.map +1 -0
  166. package/dist/tools/notebook.js +102 -0
  167. package/dist/tools/notebook.js.map +1 -0
  168. package/dist/tools/performance.d.ts +7 -0
  169. package/dist/tools/performance.d.ts.map +1 -0
  170. package/dist/tools/performance.js +59 -0
  171. package/dist/tools/performance.js.map +1 -0
  172. package/dist/tools/quality.d.ts +7 -0
  173. package/dist/tools/quality.d.ts.map +1 -0
  174. package/dist/tools/quality.js +279 -0
  175. package/dist/tools/quality.js.map +1 -0
  176. package/dist/tools/scaffold.d.ts +7 -0
  177. package/dist/tools/scaffold.d.ts.map +1 -0
  178. package/dist/tools/scaffold.js +80 -0
  179. package/dist/tools/scaffold.js.map +1 -0
  180. package/dist/tools/search.d.ts +7 -0
  181. package/dist/tools/search.d.ts.map +1 -0
  182. package/dist/tools/search.js +308 -0
  183. package/dist/tools/search.js.map +1 -0
  184. package/dist/tools/security.d.ts +7 -0
  185. package/dist/tools/security.d.ts.map +1 -0
  186. package/dist/tools/security.js +138 -0
  187. package/dist/tools/security.js.map +1 -0
  188. package/dist/utils/analytics.d.ts +69 -0
  189. package/dist/utils/analytics.d.ts.map +1 -0
  190. package/dist/utils/analytics.js +144 -0
  191. package/dist/utils/analytics.js.map +1 -0
  192. package/dist/utils/concurrency.d.ts +43 -0
  193. package/dist/utils/concurrency.d.ts.map +1 -0
  194. package/dist/utils/concurrency.js +78 -0
  195. package/dist/utils/concurrency.js.map +1 -0
  196. package/dist/utils/fallback.d.ts +52 -0
  197. package/dist/utils/fallback.d.ts.map +1 -0
  198. package/dist/utils/fallback.js +137 -0
  199. package/dist/utils/fallback.js.map +1 -0
  200. package/dist/utils/git-hooks.d.ts +24 -0
  201. package/dist/utils/git-hooks.d.ts.map +1 -0
  202. package/dist/utils/git-hooks.js +108 -0
  203. package/dist/utils/git-hooks.js.map +1 -0
  204. package/dist/utils/languages.d.ts +72 -0
  205. package/dist/utils/languages.d.ts.map +1 -0
  206. package/dist/utils/languages.js +463 -0
  207. package/dist/utils/languages.js.map +1 -0
  208. package/dist/utils/logger.d.ts +13 -0
  209. package/dist/utils/logger.d.ts.map +1 -0
  210. package/dist/utils/logger.js +34 -0
  211. package/dist/utils/logger.js.map +1 -0
  212. package/dist/utils/plugins.d.ts +105 -0
  213. package/dist/utils/plugins.d.ts.map +1 -0
  214. package/dist/utils/plugins.js +325 -0
  215. package/dist/utils/plugins.js.map +1 -0
  216. package/dist/utils/security.d.ts +17 -0
  217. package/dist/utils/security.d.ts.map +1 -0
  218. package/dist/utils/security.js +48 -0
  219. package/dist/utils/security.js.map +1 -0
  220. package/dist/utils/streaming.d.ts +56 -0
  221. package/dist/utils/streaming.d.ts.map +1 -0
  222. package/dist/utils/streaming.js +95 -0
  223. package/dist/utils/streaming.js.map +1 -0
  224. package/dist/version.d.ts +3 -0
  225. package/dist/version.d.ts.map +1 -0
  226. package/dist/version.js +3 -0
  227. package/dist/version.js.map +1 -0
  228. package/mcp.json +100 -0
  229. package/package.json +89 -0
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Dependency Vulnerability Scanner
3
+ * Cross-references package lock files (package-lock.json, yarn.lock, pnpm-lock.yaml,
4
+ * Cargo.lock, Pipfile.lock, go.sum) against known vulnerability patterns.
5
+ * Checks for outdated packages, known-vulnerable version ranges, and security advisories.
6
+ */
7
+ import { readFile } from 'node:fs/promises';
8
+ import path from 'node:path';
9
+ // Known patterns for vulnerable packages / versions (static heuristic-based)
10
+ const KNOWN_VULN_PATTERNS = [
11
+ // npm ecosystem
12
+ { name: /^lodash$/, maxSafe: '4.17.21', severity: 'high', reason: 'Prototype pollution (CVE-2021-23337)' },
13
+ { name: /^minimist$/, maxSafe: '1.2.6', severity: 'high', reason: 'Prototype pollution (CVE-2021-44906)' },
14
+ { name: /^node-fetch$/, maxSafe: '2.6.7', severity: 'high', reason: 'Exposure of sensitive info (CVE-2022-0235)' },
15
+ { name: /^axios$/, maxSafe: '1.6.0', severity: 'medium', reason: 'SSRF vulnerability in versions < 1.6.0' },
16
+ {
17
+ name: /^jsonwebtoken$/,
18
+ maxSafe: '9.0.0',
19
+ severity: 'high',
20
+ reason: 'Insecure token verification (CVE-2022-23529)',
21
+ },
22
+ {
23
+ name: /^express$/,
24
+ maxSafe: '4.19.2',
25
+ severity: 'medium',
26
+ reason: 'Open redirect vulnerability in older versions',
27
+ },
28
+ {
29
+ name: /^tar$/,
30
+ maxSafe: '6.1.12',
31
+ severity: 'high',
32
+ reason: 'Arbitrary file creation/overwrite (CVE-2021-37712)',
33
+ },
34
+ { name: /^semver$/, maxSafe: '7.5.2', severity: 'medium', reason: 'ReDoS vulnerability (CVE-2022-25883)' },
35
+ { name: /^xml2js$/, maxSafe: '0.5.0', severity: 'high', reason: 'Prototype pollution (CVE-2023-0842)' },
36
+ { name: /^got$/, maxSafe: '11.8.5', severity: 'medium', reason: 'Open redirect (CVE-2022-33987)' },
37
+ { name: /^moment$/, maxSafe: '999.0.0', severity: 'low', reason: 'Deprecated — use date-fns or dayjs instead' },
38
+ { name: /^request$/, maxSafe: '999.0.0', severity: 'low', reason: 'Deprecated and unmaintained' },
39
+ {
40
+ name: /^event-stream$/,
41
+ maxSafe: '999.0.0',
42
+ severity: 'critical',
43
+ reason: 'Known malicious versions (flatmap-stream incident)',
44
+ },
45
+ { name: /^ua-parser-js$/, maxSafe: '0.7.33', severity: 'critical', reason: 'Supply chain attack (CVE-2021-27292)' },
46
+ { name: /^colors$/, maxSafe: '1.4.0', severity: 'high', reason: 'Sabotaged by maintainer in v1.4.1+' },
47
+ { name: /^faker$/, maxSafe: '5.5.3', severity: 'high', reason: 'Sabotaged by maintainer in v6+' },
48
+ // Python ecosystem
49
+ { name: /^pyyaml$/i, maxSafe: '6.0', severity: 'high', reason: 'Arbitrary code execution via yaml.load' },
50
+ { name: /^django$/i, maxSafe: '4.2.0', severity: 'medium', reason: 'Multiple security fixes in 4.2+' },
51
+ { name: /^flask$/i, maxSafe: '2.3.0', severity: 'low', reason: 'Security improvements in 2.3+' },
52
+ {
53
+ name: /^pillow$/i,
54
+ maxSafe: '10.0.0',
55
+ severity: 'high',
56
+ reason: 'Buffer overflow vulnerabilities in older versions',
57
+ },
58
+ { name: /^cryptography$/i, maxSafe: '41.0.0', severity: 'high', reason: 'Multiple CVEs in older versions' },
59
+ { name: /^urllib3$/i, maxSafe: '2.0.0', severity: 'medium', reason: 'Cookie leaking, CRLF injection in < 2.0' },
60
+ // Rust ecosystem
61
+ { name: /^hyper$/, maxSafe: '0.14.23', severity: 'high', reason: 'HTTP request smuggling (RUSTSEC-2023-0034)' },
62
+ { name: /^regex$/, maxSafe: '1.8.0', severity: 'medium', reason: 'ReDoS in older versions' },
63
+ ];
64
+ /**
65
+ * Simple semver comparison (major.minor.patch). Returns true if a < b.
66
+ * @param a - First version string
67
+ * @param b - Second version string
68
+ * @returns True if version a is less than version b
69
+ */
70
+ function semverLessThan(a, b) {
71
+ const parse = (v) => v
72
+ .replace(/^[~^>=<]+/, '')
73
+ .split('.')
74
+ .map((n) => parseInt(n, 10) || 0);
75
+ const pa = parse(a);
76
+ const pb = parse(b);
77
+ for (let i = 0; i < 3; i++) {
78
+ if ((pa[i] || 0) < (pb[i] || 0))
79
+ return true;
80
+ if ((pa[i] || 0) > (pb[i] || 0))
81
+ return false;
82
+ }
83
+ return false;
84
+ }
85
+ /**
86
+ * Parse package-lock.json or package.json dependencies.
87
+ * @param content - The raw file content
88
+ * @returns Array of dependency name/version pairs
89
+ */
90
+ function parseNpmLock(content) {
91
+ const deps = [];
92
+ try {
93
+ const data = JSON.parse(content);
94
+ // package-lock.json v2/v3
95
+ if (data.packages) {
96
+ for (const [pkgPath, info] of Object.entries(data.packages)) {
97
+ const d = info;
98
+ if (pkgPath && d.version) {
99
+ const name = pkgPath.replace(/^node_modules\//, '').replace(/.*node_modules\//, '');
100
+ if (name)
101
+ deps.push({ name, version: d.version });
102
+ }
103
+ }
104
+ }
105
+ // package-lock.json v1
106
+ else if (data.dependencies) {
107
+ for (const [name, info] of Object.entries(data.dependencies)) {
108
+ const d = info;
109
+ if (d.version)
110
+ deps.push({ name, version: d.version });
111
+ }
112
+ }
113
+ // package.json (fallback, ranges only)
114
+ else if (data.name && (data.dependencies || data.devDependencies)) {
115
+ for (const [name, ver] of Object.entries({ ...(data.dependencies || {}), ...(data.devDependencies || {}) })) {
116
+ deps.push({ name, version: String(ver) });
117
+ }
118
+ }
119
+ }
120
+ catch {
121
+ /* skip */
122
+ }
123
+ return deps;
124
+ }
125
+ /**
126
+ * Parse Cargo.lock.
127
+ * @param content - The raw Cargo.lock content
128
+ * @returns Array of dependency name/version pairs
129
+ */
130
+ function parseCargoLock(content) {
131
+ const deps = [];
132
+ const pkgRegex = /\[\[package\]\]\s*\nname\s*=\s*"([^"]+)"\s*\nversion\s*=\s*"([^"]+)"/g;
133
+ let match;
134
+ while ((match = pkgRegex.exec(content)) !== null) {
135
+ deps.push({ name: match[1], version: match[2] });
136
+ }
137
+ return deps;
138
+ }
139
+ /**
140
+ * Parse Pipfile.lock or requirements.txt.
141
+ * @param content - The raw file content
142
+ * @param file - The file path to determine format
143
+ * @returns Array of dependency name/version pairs
144
+ */
145
+ function parsePythonDeps(content, file) {
146
+ const deps = [];
147
+ if (file.endsWith('.lock')) {
148
+ try {
149
+ const data = JSON.parse(content);
150
+ for (const section of ['default', 'develop']) {
151
+ const pkgs = data[section] || {};
152
+ for (const [name, info] of Object.entries(pkgs)) {
153
+ const d = info;
154
+ if (d.version)
155
+ deps.push({ name, version: d.version.replace(/^==/, '') });
156
+ }
157
+ }
158
+ }
159
+ catch {
160
+ /* skip */
161
+ }
162
+ }
163
+ else {
164
+ // requirements.txt
165
+ for (const line of content.split('\n')) {
166
+ const match = line.trim().match(/^([a-zA-Z0-9_-]+)\s*[=<>!~]+\s*([0-9.]+)/);
167
+ if (match)
168
+ deps.push({ name: match[1], version: match[2] });
169
+ }
170
+ }
171
+ return deps;
172
+ }
173
+ /**
174
+ * Parse go.sum.
175
+ * @param content - The raw go.sum content
176
+ * @returns Array of dependency name/version pairs
177
+ */
178
+ function parseGoSum(content) {
179
+ const deps = [];
180
+ const seen = new Set();
181
+ for (const line of content.split('\n')) {
182
+ const match = line.match(/^(\S+)\s+v([0-9.]+)/);
183
+ if (match && !seen.has(match[1])) {
184
+ seen.add(match[1]);
185
+ deps.push({ name: match[1], version: match[2] });
186
+ }
187
+ }
188
+ return deps;
189
+ }
190
+ /**
191
+ * Main vulnerability scan function.
192
+ * @param cwd - The working directory to scan
193
+ * @returns Vulnerability scan results with findings and summary
194
+ */
195
+ export async function scanDependencyVulns(cwd) {
196
+ const vulnerabilities = [];
197
+ const lockFiles = [];
198
+ const ecosystems = new Set();
199
+ let totalDeps = 0;
200
+ let outdatedCount = 0;
201
+ // Scan npm lock files
202
+ for (const lockFile of ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml']) {
203
+ try {
204
+ const content = await readFile(path.join(cwd, lockFile), 'utf-8');
205
+ lockFiles.push(lockFile);
206
+ ecosystems.add('npm');
207
+ // Only parse JSON lock files for now
208
+ if (lockFile === 'package-lock.json') {
209
+ const deps = parseNpmLock(content);
210
+ totalDeps += deps.length;
211
+ for (const dep of deps) {
212
+ for (const pattern of KNOWN_VULN_PATTERNS) {
213
+ if (pattern.name.test(dep.name) && pattern.maxSafe && semverLessThan(dep.version, pattern.maxSafe)) {
214
+ vulnerabilities.push({
215
+ name: dep.name,
216
+ version: dep.version,
217
+ severity: pattern.severity,
218
+ reason: pattern.reason,
219
+ file: lockFile,
220
+ ecosystem: 'npm',
221
+ recommendation: `Upgrade to >= ${pattern.maxSafe}`,
222
+ });
223
+ if (pattern.severity !== 'info')
224
+ outdatedCount++;
225
+ }
226
+ }
227
+ }
228
+ }
229
+ }
230
+ catch {
231
+ /* file doesn't exist */
232
+ }
233
+ }
234
+ // Scan package.json if no lock file found
235
+ if (!lockFiles.some((f) => f.includes('lock'))) {
236
+ try {
237
+ const content = await readFile(path.join(cwd, 'package.json'), 'utf-8');
238
+ lockFiles.push('package.json');
239
+ ecosystems.add('npm');
240
+ const deps = parseNpmLock(content);
241
+ totalDeps += deps.length;
242
+ for (const dep of deps) {
243
+ for (const pattern of KNOWN_VULN_PATTERNS) {
244
+ if (pattern.name.test(dep.name) && pattern.maxSafe && semverLessThan(dep.version, pattern.maxSafe)) {
245
+ vulnerabilities.push({
246
+ name: dep.name,
247
+ version: dep.version,
248
+ severity: pattern.severity,
249
+ reason: pattern.reason,
250
+ file: 'package.json',
251
+ ecosystem: 'npm',
252
+ recommendation: `Upgrade to >= ${pattern.maxSafe}`,
253
+ });
254
+ }
255
+ }
256
+ }
257
+ }
258
+ catch {
259
+ /* skip */
260
+ }
261
+ }
262
+ // Scan Cargo.lock
263
+ try {
264
+ const content = await readFile(path.join(cwd, 'Cargo.lock'), 'utf-8');
265
+ lockFiles.push('Cargo.lock');
266
+ ecosystems.add('cargo');
267
+ const deps = parseCargoLock(content);
268
+ totalDeps += deps.length;
269
+ for (const dep of deps) {
270
+ for (const pattern of KNOWN_VULN_PATTERNS) {
271
+ if (pattern.name.test(dep.name) && pattern.maxSafe && semverLessThan(dep.version, pattern.maxSafe)) {
272
+ vulnerabilities.push({
273
+ name: dep.name,
274
+ version: dep.version,
275
+ severity: pattern.severity,
276
+ reason: pattern.reason,
277
+ file: 'Cargo.lock',
278
+ ecosystem: 'cargo',
279
+ recommendation: `Upgrade to >= ${pattern.maxSafe}`,
280
+ });
281
+ }
282
+ }
283
+ }
284
+ }
285
+ catch {
286
+ /* skip */
287
+ }
288
+ // Scan Python deps
289
+ for (const pyFile of ['Pipfile.lock', 'requirements.txt', 'requirements-dev.txt']) {
290
+ try {
291
+ const content = await readFile(path.join(cwd, pyFile), 'utf-8');
292
+ lockFiles.push(pyFile);
293
+ ecosystems.add('pip');
294
+ const deps = parsePythonDeps(content, pyFile);
295
+ totalDeps += deps.length;
296
+ for (const dep of deps) {
297
+ for (const pattern of KNOWN_VULN_PATTERNS) {
298
+ if (pattern.name.test(dep.name) && pattern.maxSafe && semverLessThan(dep.version, pattern.maxSafe)) {
299
+ vulnerabilities.push({
300
+ name: dep.name,
301
+ version: dep.version,
302
+ severity: pattern.severity,
303
+ reason: pattern.reason,
304
+ file: pyFile,
305
+ ecosystem: 'pip',
306
+ recommendation: `Upgrade to >= ${pattern.maxSafe}`,
307
+ });
308
+ }
309
+ }
310
+ }
311
+ }
312
+ catch {
313
+ /* skip */
314
+ }
315
+ }
316
+ // Scan go.sum
317
+ try {
318
+ const content = await readFile(path.join(cwd, 'go.sum'), 'utf-8');
319
+ lockFiles.push('go.sum');
320
+ ecosystems.add('go');
321
+ const deps = parseGoSum(content);
322
+ totalDeps += deps.length;
323
+ }
324
+ catch {
325
+ /* skip */
326
+ }
327
+ // Sort by severity
328
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3, info: 4 };
329
+ vulnerabilities.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
330
+ const summary = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
331
+ for (const v of vulnerabilities)
332
+ summary[v.severity]++;
333
+ return {
334
+ vulnerabilities,
335
+ totalDeps,
336
+ outdatedCount,
337
+ ecosystems: Array.from(ecosystems),
338
+ lockFiles,
339
+ summary,
340
+ };
341
+ }
342
+ //# sourceMappingURL=dep-vuln.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep-vuln.js","sourceRoot":"","sources":["../../src/analyzers/dep-vuln.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Documentation extraction from source code.
3
+ * Parses JSDoc, Python docstrings, Rustdoc, Javadoc, Go doc comments.
4
+ * Links documentation to symbols for "show docs for X" queries.
5
+ */
6
+ export interface DocEntry {
7
+ symbol: string;
8
+ /** The type of symbol: function, class, method, etc. */
9
+ symbolType: string;
10
+ file: string;
11
+ line: number;
12
+ doc: string;
13
+ params?: {
14
+ name: string;
15
+ type?: string;
16
+ description: string;
17
+ }[];
18
+ returns?: {
19
+ type?: string;
20
+ description: string;
21
+ };
22
+ examples?: string[];
23
+ tags?: {
24
+ tag: string;
25
+ value: string;
26
+ }[];
27
+ deprecated?: boolean;
28
+ }
29
+ /**
30
+ * Extract all documentation from a file.
31
+ * @param filePath - Path to the source file
32
+ * @param language - Programming language of the file
33
+ * @returns Array of documentation entries found in the file
34
+ */
35
+ export declare function extractDocs(filePath: string, language: string): Promise<DocEntry[]>;
36
+ /**
37
+ * Find undocumented public symbols in a file.
38
+ * @param filePath - Path to the source file
39
+ * @param language - Programming language of the file
40
+ * @returns Array of undocumented symbols with line numbers
41
+ */
42
+ export declare function findUndocumented(filePath: string, language: string): Promise<{
43
+ symbol: string;
44
+ line: number;
45
+ type: string;
46
+ }[]>;
47
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/analyzers/docs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0BzF;AAibD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CA4B3D"}