@vyuhlabs/dxkit 1.5.1 → 1.6.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 (257) hide show
  1. package/CHANGELOG.md +264 -0
  2. package/README.md +265 -352
  3. package/THIRD_PARTY_NOTICES.md +40 -0
  4. package/dist/analyzers/developer/detailed.d.ts +26 -0
  5. package/dist/analyzers/developer/detailed.d.ts.map +1 -0
  6. package/dist/analyzers/developer/detailed.js +193 -0
  7. package/dist/analyzers/developer/detailed.js.map +1 -0
  8. package/dist/analyzers/developer/gather.d.ts +11 -0
  9. package/dist/analyzers/developer/gather.d.ts.map +1 -0
  10. package/dist/analyzers/developer/gather.js +167 -0
  11. package/dist/analyzers/developer/gather.js.map +1 -0
  12. package/dist/analyzers/developer/index.d.ts +8 -0
  13. package/dist/analyzers/developer/index.d.ts.map +1 -0
  14. package/dist/analyzers/developer/index.js +168 -0
  15. package/dist/analyzers/developer/index.js.map +1 -0
  16. package/dist/analyzers/developer/types.d.ts +49 -0
  17. package/dist/analyzers/developer/types.d.ts.map +1 -0
  18. package/dist/analyzers/developer/types.js +6 -0
  19. package/dist/analyzers/developer/types.js.map +1 -0
  20. package/dist/analyzers/docs/shallow.d.ts +9 -0
  21. package/dist/analyzers/docs/shallow.d.ts.map +1 -0
  22. package/dist/analyzers/docs/shallow.js +8 -0
  23. package/dist/analyzers/docs/shallow.js.map +1 -0
  24. package/dist/analyzers/dx/shallow.d.ts +9 -0
  25. package/dist/analyzers/dx/shallow.d.ts.map +1 -0
  26. package/dist/analyzers/dx/shallow.js +8 -0
  27. package/dist/analyzers/dx/shallow.js.map +1 -0
  28. package/dist/analyzers/evidence.d.ts +36 -0
  29. package/dist/analyzers/evidence.d.ts.map +1 -0
  30. package/dist/analyzers/evidence.js +3 -0
  31. package/dist/analyzers/evidence.js.map +1 -0
  32. package/dist/analyzers/health/actions.d.ts +10 -0
  33. package/dist/analyzers/health/actions.d.ts.map +1 -0
  34. package/dist/analyzers/health/actions.js +284 -0
  35. package/dist/analyzers/health/actions.js.map +1 -0
  36. package/dist/analyzers/health/detailed.d.ts +26 -0
  37. package/dist/analyzers/health/detailed.d.ts.map +1 -0
  38. package/dist/analyzers/health/detailed.js +147 -0
  39. package/dist/analyzers/health/detailed.js.map +1 -0
  40. package/dist/analyzers/health.d.ts +22 -0
  41. package/dist/analyzers/health.d.ts.map +1 -0
  42. package/dist/analyzers/health.js +270 -0
  43. package/dist/analyzers/health.js.map +1 -0
  44. package/dist/analyzers/index.d.ts +3 -0
  45. package/dist/analyzers/index.d.ts.map +1 -0
  46. package/dist/analyzers/index.js +6 -0
  47. package/dist/analyzers/index.js.map +1 -0
  48. package/dist/analyzers/maintainability/shallow.d.ts +9 -0
  49. package/dist/analyzers/maintainability/shallow.d.ts.map +1 -0
  50. package/dist/analyzers/maintainability/shallow.js +8 -0
  51. package/dist/analyzers/maintainability/shallow.js.map +1 -0
  52. package/dist/analyzers/quality/actions.d.ts +5 -0
  53. package/dist/analyzers/quality/actions.d.ts.map +1 -0
  54. package/dist/analyzers/quality/actions.js +158 -0
  55. package/dist/analyzers/quality/actions.js.map +1 -0
  56. package/dist/analyzers/quality/detailed.d.ts +17 -0
  57. package/dist/analyzers/quality/detailed.d.ts.map +1 -0
  58. package/dist/analyzers/quality/detailed.js +122 -0
  59. package/dist/analyzers/quality/detailed.js.map +1 -0
  60. package/dist/analyzers/quality/gather.d.ts +38 -0
  61. package/dist/analyzers/quality/gather.d.ts.map +1 -0
  62. package/dist/analyzers/quality/gather.js +279 -0
  63. package/dist/analyzers/quality/gather.js.map +1 -0
  64. package/dist/analyzers/quality/index.d.ts +12 -0
  65. package/dist/analyzers/quality/index.d.ts.map +1 -0
  66. package/dist/analyzers/quality/index.js +281 -0
  67. package/dist/analyzers/quality/index.js.map +1 -0
  68. package/dist/analyzers/quality/shallow.d.ts +9 -0
  69. package/dist/analyzers/quality/shallow.d.ts.map +1 -0
  70. package/dist/analyzers/quality/shallow.js +8 -0
  71. package/dist/analyzers/quality/shallow.js.map +1 -0
  72. package/dist/analyzers/quality/types.d.ts +66 -0
  73. package/dist/analyzers/quality/types.d.ts.map +1 -0
  74. package/dist/analyzers/quality/types.js +3 -0
  75. package/dist/analyzers/quality/types.js.map +1 -0
  76. package/dist/analyzers/remediation.d.ts +42 -0
  77. package/dist/analyzers/remediation.d.ts.map +1 -0
  78. package/dist/analyzers/remediation.js +28 -0
  79. package/dist/analyzers/remediation.js.map +1 -0
  80. package/dist/analyzers/scoring.d.ts +32 -0
  81. package/dist/analyzers/scoring.d.ts.map +1 -0
  82. package/dist/analyzers/scoring.js +410 -0
  83. package/dist/analyzers/scoring.js.map +1 -0
  84. package/dist/analyzers/security/actions.d.ts +7 -0
  85. package/dist/analyzers/security/actions.d.ts.map +1 -0
  86. package/dist/analyzers/security/actions.js +104 -0
  87. package/dist/analyzers/security/actions.js.map +1 -0
  88. package/dist/analyzers/security/detailed.d.ts +14 -0
  89. package/dist/analyzers/security/detailed.d.ts.map +1 -0
  90. package/dist/analyzers/security/detailed.js +124 -0
  91. package/dist/analyzers/security/detailed.js.map +1 -0
  92. package/dist/analyzers/security/gather.d.ts +12 -0
  93. package/dist/analyzers/security/gather.d.ts.map +1 -0
  94. package/dist/analyzers/security/gather.js +195 -0
  95. package/dist/analyzers/security/gather.js.map +1 -0
  96. package/dist/analyzers/security/index.d.ts +8 -0
  97. package/dist/analyzers/security/index.d.ts.map +1 -0
  98. package/dist/analyzers/security/index.js +173 -0
  99. package/dist/analyzers/security/index.js.map +1 -0
  100. package/dist/analyzers/security/scoring.d.ts +29 -0
  101. package/dist/analyzers/security/scoring.d.ts.map +1 -0
  102. package/dist/analyzers/security/scoring.js +40 -0
  103. package/dist/analyzers/security/scoring.js.map +1 -0
  104. package/dist/analyzers/security/shallow.d.ts +10 -0
  105. package/dist/analyzers/security/shallow.d.ts.map +1 -0
  106. package/dist/analyzers/security/shallow.js +8 -0
  107. package/dist/analyzers/security/shallow.js.map +1 -0
  108. package/dist/analyzers/security/types.d.ts +43 -0
  109. package/dist/analyzers/security/types.d.ts.map +1 -0
  110. package/dist/analyzers/security/types.js +6 -0
  111. package/dist/analyzers/security/types.js.map +1 -0
  112. package/dist/analyzers/tests/actions.d.ts +6 -0
  113. package/dist/analyzers/tests/actions.d.ts.map +1 -0
  114. package/dist/analyzers/tests/actions.js +80 -0
  115. package/dist/analyzers/tests/actions.js.map +1 -0
  116. package/dist/analyzers/tests/detailed.d.ts +14 -0
  117. package/dist/analyzers/tests/detailed.d.ts.map +1 -0
  118. package/dist/analyzers/tests/detailed.js +121 -0
  119. package/dist/analyzers/tests/detailed.js.map +1 -0
  120. package/dist/analyzers/tests/gather.d.ts +5 -0
  121. package/dist/analyzers/tests/gather.d.ts.map +1 -0
  122. package/dist/analyzers/tests/gather.js +270 -0
  123. package/dist/analyzers/tests/gather.js.map +1 -0
  124. package/dist/analyzers/tests/import-graph.d.ts +48 -0
  125. package/dist/analyzers/tests/import-graph.d.ts.map +1 -0
  126. package/dist/analyzers/tests/import-graph.js +231 -0
  127. package/dist/analyzers/tests/import-graph.js.map +1 -0
  128. package/dist/analyzers/tests/index.d.ts +8 -0
  129. package/dist/analyzers/tests/index.d.ts.map +1 -0
  130. package/dist/analyzers/tests/index.js +247 -0
  131. package/dist/analyzers/tests/index.js.map +1 -0
  132. package/dist/analyzers/tests/scoring.d.ts +27 -0
  133. package/dist/analyzers/tests/scoring.d.ts.map +1 -0
  134. package/dist/analyzers/tests/scoring.js +38 -0
  135. package/dist/analyzers/tests/scoring.js.map +1 -0
  136. package/dist/analyzers/tests/shallow.d.ts +9 -0
  137. package/dist/analyzers/tests/shallow.d.ts.map +1 -0
  138. package/dist/analyzers/tests/shallow.js +8 -0
  139. package/dist/analyzers/tests/shallow.js.map +1 -0
  140. package/dist/analyzers/tests/types.d.ts +49 -0
  141. package/dist/analyzers/tests/types.d.ts.map +1 -0
  142. package/dist/analyzers/tests/types.js +6 -0
  143. package/dist/analyzers/tests/types.js.map +1 -0
  144. package/dist/analyzers/tools/cloc.d.ts +8 -0
  145. package/dist/analyzers/tools/cloc.d.ts.map +1 -0
  146. package/dist/analyzers/tools/cloc.js +49 -0
  147. package/dist/analyzers/tools/cloc.js.map +1 -0
  148. package/dist/analyzers/tools/coverage.d.ts +59 -0
  149. package/dist/analyzers/tools/coverage.d.ts.map +1 -0
  150. package/dist/analyzers/tools/coverage.js +280 -0
  151. package/dist/analyzers/tools/coverage.js.map +1 -0
  152. package/dist/analyzers/tools/cvss-v4-lookup.d.ts +10 -0
  153. package/dist/analyzers/tools/cvss-v4-lookup.d.ts.map +1 -0
  154. package/dist/analyzers/tools/cvss-v4-lookup.js +284 -0
  155. package/dist/analyzers/tools/cvss-v4-lookup.js.map +1 -0
  156. package/dist/analyzers/tools/cvss-v4.d.ts +24 -0
  157. package/dist/analyzers/tools/cvss-v4.d.ts.map +1 -0
  158. package/dist/analyzers/tools/cvss-v4.js +362 -0
  159. package/dist/analyzers/tools/cvss-v4.js.map +1 -0
  160. package/dist/analyzers/tools/default-exclusions.gitignore +56 -0
  161. package/dist/analyzers/tools/exclusions.d.ts +70 -0
  162. package/dist/analyzers/tools/exclusions.d.ts.map +1 -0
  163. package/dist/analyzers/tools/exclusions.js +250 -0
  164. package/dist/analyzers/tools/exclusions.js.map +1 -0
  165. package/dist/analyzers/tools/generic.d.ts +4 -0
  166. package/dist/analyzers/tools/generic.d.ts.map +1 -0
  167. package/dist/analyzers/tools/generic.js +198 -0
  168. package/dist/analyzers/tools/generic.js.map +1 -0
  169. package/dist/analyzers/tools/gitleaks.d.ts +8 -0
  170. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -0
  171. package/dist/analyzers/tools/gitleaks.js +58 -0
  172. package/dist/analyzers/tools/gitleaks.js.map +1 -0
  173. package/dist/analyzers/tools/graphify.d.ts +4 -0
  174. package/dist/analyzers/tools/graphify.d.ts.map +1 -0
  175. package/dist/analyzers/tools/graphify.js +222 -0
  176. package/dist/analyzers/tools/graphify.js.map +1 -0
  177. package/dist/analyzers/tools/osv.d.ts +51 -0
  178. package/dist/analyzers/tools/osv.d.ts.map +1 -0
  179. package/dist/analyzers/tools/osv.js +188 -0
  180. package/dist/analyzers/tools/osv.js.map +1 -0
  181. package/dist/analyzers/tools/parallel.d.ts +8 -0
  182. package/dist/analyzers/tools/parallel.d.ts.map +1 -0
  183. package/dist/analyzers/tools/parallel.js +195 -0
  184. package/dist/analyzers/tools/parallel.js.map +1 -0
  185. package/dist/analyzers/tools/runner.d.ts +13 -0
  186. package/dist/analyzers/tools/runner.d.ts.map +1 -0
  187. package/dist/analyzers/tools/runner.js +109 -0
  188. package/dist/analyzers/tools/runner.js.map +1 -0
  189. package/dist/analyzers/tools/suppressions.d.ts +55 -0
  190. package/dist/analyzers/tools/suppressions.d.ts.map +1 -0
  191. package/dist/analyzers/tools/suppressions.js +203 -0
  192. package/dist/analyzers/tools/suppressions.js.map +1 -0
  193. package/dist/analyzers/tools/timing.d.ts +9 -0
  194. package/dist/analyzers/tools/timing.d.ts.map +1 -0
  195. package/dist/analyzers/tools/timing.js +29 -0
  196. package/dist/analyzers/tools/timing.js.map +1 -0
  197. package/dist/analyzers/tools/tool-registry.d.ts +86 -0
  198. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -0
  199. package/dist/analyzers/tools/tool-registry.js +705 -0
  200. package/dist/analyzers/tools/tool-registry.js.map +1 -0
  201. package/dist/analyzers/types.d.ts +125 -0
  202. package/dist/analyzers/types.d.ts.map +1 -0
  203. package/dist/analyzers/types.js +11 -0
  204. package/dist/analyzers/types.js.map +1 -0
  205. package/dist/cli.d.ts.map +1 -1
  206. package/dist/cli.js +405 -0
  207. package/dist/cli.js.map +1 -1
  208. package/dist/detect.d.ts.map +1 -1
  209. package/dist/detect.js +24 -15
  210. package/dist/detect.js.map +1 -1
  211. package/dist/languages/csharp.d.ts +5 -0
  212. package/dist/languages/csharp.d.ts.map +1 -0
  213. package/dist/languages/csharp.js +265 -0
  214. package/dist/languages/csharp.js.map +1 -0
  215. package/dist/languages/go.d.ts +11 -0
  216. package/dist/languages/go.d.ts.map +1 -0
  217. package/dist/languages/go.js +321 -0
  218. package/dist/languages/go.js.map +1 -0
  219. package/dist/languages/index.d.ts +6 -0
  220. package/dist/languages/index.d.ts.map +1 -0
  221. package/dist/languages/index.js +18 -0
  222. package/dist/languages/index.js.map +1 -0
  223. package/dist/languages/python.d.ts +3 -0
  224. package/dist/languages/python.d.ts.map +1 -0
  225. package/dist/languages/python.js +284 -0
  226. package/dist/languages/python.js.map +1 -0
  227. package/dist/languages/rust.d.ts +17 -0
  228. package/dist/languages/rust.d.ts.map +1 -0
  229. package/dist/languages/rust.js +333 -0
  230. package/dist/languages/rust.js.map +1 -0
  231. package/dist/languages/types.d.ts +38 -0
  232. package/dist/languages/types.d.ts.map +1 -0
  233. package/dist/languages/types.js +3 -0
  234. package/dist/languages/types.js.map +1 -0
  235. package/dist/languages/typescript.d.ts +15 -0
  236. package/dist/languages/typescript.d.ts.map +1 -0
  237. package/dist/languages/typescript.js +353 -0
  238. package/dist/languages/typescript.js.map +1 -0
  239. package/dist/logger.d.ts +1 -0
  240. package/dist/logger.d.ts.map +1 -1
  241. package/dist/logger.js +25 -12
  242. package/dist/logger.js.map +1 -1
  243. package/dist/project-yaml.d.ts.map +1 -1
  244. package/dist/project-yaml.js +1 -0
  245. package/dist/project-yaml.js.map +1 -1
  246. package/dist/tools-cli.d.ts +2 -0
  247. package/dist/tools-cli.d.ts.map +1 -0
  248. package/dist/tools-cli.js +231 -0
  249. package/dist/tools-cli.js.map +1 -0
  250. package/dist/types.d.ts +10 -0
  251. package/dist/types.d.ts.map +1 -1
  252. package/package.json +6 -2
  253. package/templates/.claude/commands/dev-report.md +34 -4
  254. package/templates/.claude/commands/health.md +45 -2
  255. package/templates/.claude/commands/quality.md.template +38 -15
  256. package/templates/.claude/commands/test-gaps.md +36 -2
  257. package/templates/.claude/commands/vulnerabilities.md +36 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cvss-v4.js","sourceRoot":"","sources":["../../../src/analyzers/tools/cvss-v4.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ # Default exclusions for dxkit analyzers — gitignore format.
2
+ # Shipped with dxkit; always applied. Union'd with the project's .gitignore
3
+ # and optional .dxkit-ignore.
4
+ #
5
+ # Edit this file (or add entries to a project-local .dxkit-ignore) to tune
6
+ # what gets scanned. Rules:
7
+ # - Blank lines and `#` comments are ignored.
8
+ # - `foo/` → directory (matches any `foo` dir anywhere in the tree)
9
+ # - `foo/bar/` → multi-segment path (matches the nested path exactly)
10
+ # - `*.log` → file-glob pattern
11
+ # - Lines starting with `!` (negations) are not currently supported.
12
+
13
+ # ─── Package managers & build artifacts ───────────────────────────────────
14
+ node_modules/
15
+ dist/
16
+ build/
17
+ vendor/
18
+ target/
19
+ bin/
20
+ obj/
21
+
22
+ # ─── VCS & caches ─────────────────────────────────────────────────────────
23
+ .git/
24
+ .cache/
25
+ .next/
26
+ .nuxt/
27
+ .mypy_cache/
28
+ .pytest_cache/
29
+ .ruff_cache/
30
+ .tox/
31
+ coverage/
32
+
33
+ # ─── Python environments & bytecode ───────────────────────────────────────
34
+ __pycache__/
35
+ .venv/
36
+ venv/
37
+
38
+ # ─── Scaffold / starter / template dirs ───────────────────────────────────
39
+ # These contain code copied into user projects (not host project source).
40
+ templates/
41
+ src-templates/
42
+ scaffold/
43
+ scaffolds/
44
+
45
+ # ─── Vendored front-end asset bundles ────────────────────────────────────
46
+ public/assets/
47
+ static/js/
48
+ public/static/
49
+
50
+ # ─── Minified / generated files ───────────────────────────────────────────
51
+ *.min.js
52
+ *.min.css
53
+ *.bundle.js
54
+ *.chunk.js
55
+ *.generated.ts
56
+ *.d.ts
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Centralized exclusions — data-driven from `.gitignore`-style files.
3
+ *
4
+ * Three layers, unioned:
5
+ * 1. Bundled `default-exclusions.gitignore` — ships with dxkit, always applied.
6
+ * 2. Project `.gitignore` — whatever the repo already ignores.
7
+ * 3. Project `.dxkit-ignore` (optional) — dxkit-specific extras.
8
+ *
9
+ * All three use the same parser so they behave identically. Users add/remove
10
+ * exclusions by editing a plain text file — no code changes needed.
11
+ *
12
+ * The canonical question "should this path be excluded?" is answered by
13
+ * `isExcludedPath()`. Tool-specific flag builders (grep, cloc, semgrep, find,
14
+ * graphify's Python) derive their flags from the same resolved exclusion set,
15
+ * so drift between tools is impossible.
16
+ */
17
+ /** Resolved exclusions for one project root. */
18
+ export interface Exclusions {
19
+ /** Directory basenames — single-segment (no slash). Grep/find --exclude-dir friendly. */
20
+ dirs: string[];
21
+ /** Multi-segment path patterns. Need path-based matching. */
22
+ sourcePaths: string[];
23
+ /** File-glob patterns (e.g. *.min.js, *.d.ts, .DS_Store). */
24
+ filePatterns: string[];
25
+ }
26
+ /**
27
+ * Load resolved exclusions for a project root.
28
+ *
29
+ * Reads bundled defaults + project .gitignore + project .dxkit-ignore and
30
+ * returns the union. Result is memoized per cwd for the process lifetime.
31
+ */
32
+ export declare function loadExclusions(cwd: string): Exclusions;
33
+ /** Clear memo — useful for tests. */
34
+ export declare function clearExclusionsCache(): void;
35
+ /**
36
+ * Test whether a relative file path should be excluded from analysis.
37
+ *
38
+ * This is the ONE place every tool-wrapper consults. If a caller is tempted
39
+ * to inline `node_modules` / `dist` / `.min.` checks, they should call this
40
+ * instead. Keeps all tools behaving identically.
41
+ *
42
+ * Path must be relative (strip the cwd prefix before calling).
43
+ */
44
+ export declare function isExcludedPath(cwd: string, relPath: string): boolean;
45
+ /**
46
+ * Build `find -not -path` flags excluding directories.
47
+ * Usage: `find . -type f ... ${getFindExcludeFlags(cwd)}`
48
+ */
49
+ export declare function getFindExcludeFlags(cwd: string, includeSourcePaths?: boolean): string;
50
+ /**
51
+ * Build grep `--exclude-dir` flags (basename matching only).
52
+ * Path-based exclusions must be post-filtered via isExcludedPath().
53
+ */
54
+ export declare function getGrepExcludeDirFlags(cwd: string): string;
55
+ /**
56
+ * Build cloc `--exclude-dir` argument value (comma-separated basenames).
57
+ * cloc matches basenames only, so multi-segment sourcePaths get flattened.
58
+ */
59
+ export declare function getClocExcludeDirs(cwd: string): string;
60
+ /**
61
+ * Build semgrep `--exclude` flags (one per directory/pattern).
62
+ * Usage: `semgrep scan ${getSemgrepExcludeFlags(cwd)} .`
63
+ */
64
+ export declare function getSemgrepExcludeFlags(cwd: string): string;
65
+ /**
66
+ * Python set literal for graphify script — basenames only (flattened paths).
67
+ * Used as a template substitution in the embedded Python script.
68
+ */
69
+ export declare function getPythonExcludeSet(cwd: string): string;
70
+ //# sourceMappingURL=exclusions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exclusions.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/exclusions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,yFAAyF;IACzF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,6DAA6D;IAC7D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAQD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAmBtD;AAED,qCAAqC;AACrC,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAmED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAapE;AAqBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,UAAO,GAAG,MAAM,CAIlF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAavD"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ /**
3
+ * Centralized exclusions — data-driven from `.gitignore`-style files.
4
+ *
5
+ * Three layers, unioned:
6
+ * 1. Bundled `default-exclusions.gitignore` — ships with dxkit, always applied.
7
+ * 2. Project `.gitignore` — whatever the repo already ignores.
8
+ * 3. Project `.dxkit-ignore` (optional) — dxkit-specific extras.
9
+ *
10
+ * All three use the same parser so they behave identically. Users add/remove
11
+ * exclusions by editing a plain text file — no code changes needed.
12
+ *
13
+ * The canonical question "should this path be excluded?" is answered by
14
+ * `isExcludedPath()`. Tool-specific flag builders (grep, cloc, semgrep, find,
15
+ * graphify's Python) derive their flags from the same resolved exclusion set,
16
+ * so drift between tools is impossible.
17
+ */
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
34
+ var __importStar = (this && this.__importStar) || (function () {
35
+ var ownKeys = function(o) {
36
+ ownKeys = Object.getOwnPropertyNames || function (o) {
37
+ var ar = [];
38
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
+ return ar;
40
+ };
41
+ return ownKeys(o);
42
+ };
43
+ return function (mod) {
44
+ if (mod && mod.__esModule) return mod;
45
+ var result = {};
46
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
+ __setModuleDefault(result, mod);
48
+ return result;
49
+ };
50
+ })();
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.loadExclusions = loadExclusions;
53
+ exports.clearExclusionsCache = clearExclusionsCache;
54
+ exports.isExcludedPath = isExcludedPath;
55
+ exports.getFindExcludeFlags = getFindExcludeFlags;
56
+ exports.getGrepExcludeDirFlags = getGrepExcludeDirFlags;
57
+ exports.getClocExcludeDirs = getClocExcludeDirs;
58
+ exports.getSemgrepExcludeFlags = getSemgrepExcludeFlags;
59
+ exports.getPythonExcludeSet = getPythonExcludeSet;
60
+ const fs = __importStar(require("fs"));
61
+ const path = __importStar(require("path"));
62
+ /** Memo: one entry per cwd so repeated helper calls don't re-read files. */
63
+ const cache = new Map();
64
+ /** Absolute path to the bundled default exclusions file. */
65
+ const DEFAULTS_PATH = path.join(__dirname, 'default-exclusions.gitignore');
66
+ /**
67
+ * Load resolved exclusions for a project root.
68
+ *
69
+ * Reads bundled defaults + project .gitignore + project .dxkit-ignore and
70
+ * returns the union. Result is memoized per cwd for the process lifetime.
71
+ */
72
+ function loadExclusions(cwd) {
73
+ const hit = cache.get(cwd);
74
+ if (hit)
75
+ return hit;
76
+ const dirs = new Set();
77
+ const sourcePaths = new Set();
78
+ const filePatterns = new Set();
79
+ parseGitignoreFile(DEFAULTS_PATH, dirs, sourcePaths, filePatterns);
80
+ parseGitignoreFile(path.join(cwd, '.gitignore'), dirs, sourcePaths, filePatterns);
81
+ parseGitignoreFile(path.join(cwd, '.dxkit-ignore'), dirs, sourcePaths, filePatterns);
82
+ const resolved = {
83
+ dirs: [...dirs],
84
+ sourcePaths: [...sourcePaths],
85
+ filePatterns: [...filePatterns],
86
+ };
87
+ cache.set(cwd, resolved);
88
+ return resolved;
89
+ }
90
+ /** Clear memo — useful for tests. */
91
+ function clearExclusionsCache() {
92
+ cache.clear();
93
+ }
94
+ /**
95
+ * Parse a .gitignore-style file, classifying each entry into dirs / sourcePaths
96
+ * / filePatterns. Best-effort mapping of gitignore semantics:
97
+ *
98
+ * `foo/` directory basename → dirs
99
+ * `foo/bar/` multi-segment path → sourcePaths
100
+ * `*.log` glob (contains `*`) → filePatterns
101
+ * `.DS_Store` specific file (has `.`) → filePatterns
102
+ * `.env` specific file → filePatterns
103
+ * `foo` bare name, no `.` no slash → dirs
104
+ *
105
+ * Lines starting with `#` or `!`, and blank lines, are skipped. Leading `/`
106
+ * is stripped (we treat all patterns as "anywhere in tree" — the same way
107
+ * gitignore treats leading-slash patterns relative to the repo root).
108
+ */
109
+ function parseGitignoreFile(filePath, dirs, sourcePaths, filePatterns) {
110
+ let content;
111
+ try {
112
+ content = fs.readFileSync(filePath, 'utf-8');
113
+ }
114
+ catch {
115
+ return;
116
+ }
117
+ for (const rawLine of content.split('\n')) {
118
+ const line = rawLine.replace(/\s+#.*$/, '').trim();
119
+ if (!line || line.startsWith('#') || line.startsWith('!'))
120
+ continue;
121
+ const noSlash = line.replace(/^\//, '');
122
+ const isDir = noSlash.endsWith('/');
123
+ const core = isDir ? noSlash.slice(0, -1) : noSlash;
124
+ if (!core)
125
+ continue;
126
+ // Glob patterns (*, ?) are always file patterns.
127
+ if (core.includes('*') || core.includes('?')) {
128
+ filePatterns.add(core);
129
+ continue;
130
+ }
131
+ // Multi-segment: directory path OR nested file.
132
+ if (core.includes('/')) {
133
+ sourcePaths.add(core);
134
+ continue;
135
+ }
136
+ // Single segment: `foo/` → dir, `foo.txt` (has extension) → file,
137
+ // `.env` (dotfile without extension) → file, `foo` (bare name) → dir.
138
+ if (isDir) {
139
+ dirs.add(core);
140
+ }
141
+ else if (/^\.[^.]+$/.test(core) || core.includes('.')) {
142
+ // Dotfiles (.env, .DS_Store) and files with extensions (foo.log).
143
+ filePatterns.add(core);
144
+ }
145
+ else {
146
+ dirs.add(core);
147
+ }
148
+ }
149
+ }
150
+ // ─── Path predicate (centralized) ──────────────────────────────────────────
151
+ /**
152
+ * Test whether a relative file path should be excluded from analysis.
153
+ *
154
+ * This is the ONE place every tool-wrapper consults. If a caller is tempted
155
+ * to inline `node_modules` / `dist` / `.min.` checks, they should call this
156
+ * instead. Keeps all tools behaving identically.
157
+ *
158
+ * Path must be relative (strip the cwd prefix before calling).
159
+ */
160
+ function isExcludedPath(cwd, relPath) {
161
+ if (!relPath)
162
+ return false;
163
+ const { dirs, sourcePaths, filePatterns } = loadExclusions(cwd);
164
+ const segs = relPath.split('/').filter(Boolean);
165
+ if (dirs.some((d) => segs.includes(d)))
166
+ return true;
167
+ if (sourcePaths.some((p) => relPath.includes(p)))
168
+ return true;
169
+ const base = segs[segs.length - 1] || '';
170
+ for (const pat of filePatterns) {
171
+ if (matchFileGlob(pat, base))
172
+ return true;
173
+ }
174
+ return false;
175
+ }
176
+ /** Match a basename against a simple glob (* and ?). */
177
+ function matchFileGlob(pattern, base) {
178
+ // If pattern has no wildcards, require exact basename match.
179
+ if (!pattern.includes('*') && !pattern.includes('?')) {
180
+ return base === pattern;
181
+ }
182
+ const regex = new RegExp('^' +
183
+ pattern
184
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
185
+ .replace(/\*/g, '.*')
186
+ .replace(/\?/g, '.') +
187
+ '$');
188
+ return regex.test(base);
189
+ }
190
+ // ─── Tool-specific flag builders ────────────────────────────────────────────
191
+ /**
192
+ * Build `find -not -path` flags excluding directories.
193
+ * Usage: `find . -type f ... ${getFindExcludeFlags(cwd)}`
194
+ */
195
+ function getFindExcludeFlags(cwd, includeSourcePaths = true) {
196
+ const { dirs, sourcePaths } = loadExclusions(cwd);
197
+ const all = includeSourcePaths ? [...dirs, ...sourcePaths] : dirs;
198
+ return all.map((d) => `-not -path "*/${d}/*"`).join(' ');
199
+ }
200
+ /**
201
+ * Build grep `--exclude-dir` flags (basename matching only).
202
+ * Path-based exclusions must be post-filtered via isExcludedPath().
203
+ */
204
+ function getGrepExcludeDirFlags(cwd) {
205
+ const { dirs } = loadExclusions(cwd);
206
+ return dirs.map((d) => `--exclude-dir='${d}'`).join(' ');
207
+ }
208
+ /**
209
+ * Build cloc `--exclude-dir` argument value (comma-separated basenames).
210
+ * cloc matches basenames only, so multi-segment sourcePaths get flattened.
211
+ */
212
+ function getClocExcludeDirs(cwd) {
213
+ const { dirs, sourcePaths } = loadExclusions(cwd);
214
+ const basenames = new Set(dirs);
215
+ for (const p of sourcePaths) {
216
+ for (const seg of p.split('/'))
217
+ if (seg)
218
+ basenames.add(seg);
219
+ }
220
+ return Array.from(basenames).join(',');
221
+ }
222
+ /**
223
+ * Build semgrep `--exclude` flags (one per directory/pattern).
224
+ * Usage: `semgrep scan ${getSemgrepExcludeFlags(cwd)} .`
225
+ */
226
+ function getSemgrepExcludeFlags(cwd) {
227
+ const { dirs, sourcePaths, filePatterns } = loadExclusions(cwd);
228
+ const dirFlags = [...dirs, ...sourcePaths].map((d) => `--exclude '${d}'`).join(' ');
229
+ const fileFlags = filePatterns.map((p) => `--exclude '${p}'`).join(' ');
230
+ return `${dirFlags} ${fileFlags}`;
231
+ }
232
+ /**
233
+ * Python set literal for graphify script — basenames only (flattened paths).
234
+ * Used as a template substitution in the embedded Python script.
235
+ */
236
+ function getPythonExcludeSet(cwd) {
237
+ const { dirs, sourcePaths } = loadExclusions(cwd);
238
+ const basenames = new Set(dirs);
239
+ for (const p of sourcePaths) {
240
+ for (const seg of p.split('/'))
241
+ if (seg)
242
+ basenames.add(seg);
243
+ }
244
+ return ('{' +
245
+ Array.from(basenames)
246
+ .map((d) => `'${d}'`)
247
+ .join(', ') +
248
+ '}');
249
+ }
250
+ //# sourceMappingURL=exclusions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exclusions.js","sourceRoot":"","sources":["../../../src/analyzers/tools/exclusions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { HealthMetrics } from '../types';
2
+ /** Gather metrics using only built-in Unix tools. */
3
+ export declare function gatherGenericMetrics(cwd: string): Partial<HealthMetrics>;
4
+ //# sourceMappingURL=generic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/generic.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAsCzC,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwMxE"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.gatherGenericMetrics = gatherGenericMetrics;
37
+ /**
38
+ * Generic tool runner -- uses grep, find, wc, git.
39
+ * Works on any Unix machine with no external dependencies.
40
+ * This is Layer 0: always available.
41
+ */
42
+ const fs = __importStar(require("fs"));
43
+ const runner_1 = require("./runner");
44
+ const exclusions_1 = require("./exclusions");
45
+ // grepCount uses a narrow filter (node_modules, dist, __pycache__, .d.ts) to
46
+ // preserve pre-refactor byte-equality. The broader EXCLUDED_DIRS list from
47
+ // exclusions.ts is used for find-based counts. Widening this filter would
48
+ // change legitimate metric totals and should be a separate, intentional change.
49
+ const GREP_PIPELINE_FILTER = 'grep -v node_modules | grep -v dist | grep -v __pycache__';
50
+ /** Reliable grep count that avoids shell escaping issues by writing pattern to a temp file. */
51
+ function grepCount(cwd, pattern, includes) {
52
+ const patternFile = `/tmp/dxkit-grep-${Date.now()}-${Math.random().toString(36).slice(2)}.pat`;
53
+ fs.writeFileSync(patternFile, pattern);
54
+ const includeFlags = includes.map((i) => `--include='${i}'`).join(' ');
55
+ const result = (0, runner_1.run)(`grep -rEf '${patternFile}' ${includeFlags} . 2>/dev/null | ${GREP_PIPELINE_FILTER} | grep -v '.d.ts' | wc -l`, cwd);
56
+ try {
57
+ fs.unlinkSync(patternFile);
58
+ }
59
+ catch {
60
+ /* ignore */
61
+ }
62
+ return parseInt(result) || 0;
63
+ }
64
+ // EXCLUDE moved inside gatherGenericMetrics() — must be computed per-cwd now
65
+ // so it picks up project-specific .gitignore / .dxkit-ignore entries.
66
+ const SOURCE_EXTS = '\\( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" ' +
67
+ '-o -name "*.py" -o -name "*.go" -o -name "*.rs" -o -name "*.cs" \\)';
68
+ const TEST_PATTERNS = '\\( -name "*.test.*" -o -name "*.spec.*" -o -name "*_test.go" ' +
69
+ '-o -name "test_*.py" -o -name "*Tests.cs" -o -name "*_test.rs" \\)';
70
+ /** Gather metrics using only built-in Unix tools. */
71
+ function gatherGenericMetrics(cwd) {
72
+ const EXCLUDE = (0, exclusions_1.getFindExcludeFlags)(cwd);
73
+ // File counts
74
+ const sourceFiles = (0, runner_1.countLines)(`find . -type f ${SOURCE_EXTS} ${EXCLUDE}`, cwd);
75
+ const testFiles = (0, runner_1.countLines)(`find . -type f ${TEST_PATTERNS} ${EXCLUDE}`, cwd);
76
+ const testDirFiles = (0, runner_1.countLines)(`find . -type f ${SOURCE_EXTS} ${EXCLUDE} \\( -path "*/__tests__/*" -o -path "*/tests/*" -o -path "*/test/*" \\) 2>/dev/null`, cwd);
77
+ // Total lines, largest file, files over 500 — single find+xargs wc pass
78
+ const wcRaw = (0, runner_1.run)(`find . -type f ${SOURCE_EXTS} ${EXCLUDE} -print0 2>/dev/null | xargs -0 wc -l 2>/dev/null`, cwd, 120000);
79
+ let totalLines = 0;
80
+ let largestFileLines = 0;
81
+ let largestFilePath = '';
82
+ let filesOver500Lines = 0;
83
+ if (wcRaw) {
84
+ for (const line of wcRaw.split('\n')) {
85
+ const m = line.trim().match(/^(\d+)\s+(.+)$/);
86
+ if (!m)
87
+ continue;
88
+ const lines = parseInt(m[1]);
89
+ const file = m[2];
90
+ if (file === 'total') {
91
+ totalLines = lines;
92
+ }
93
+ else {
94
+ if (lines > largestFileLines) {
95
+ largestFileLines = lines;
96
+ largestFilePath = file;
97
+ }
98
+ if (lines > 500)
99
+ filesOver500Lines++;
100
+ }
101
+ }
102
+ // If only one file, xargs wc won't print "total"
103
+ if (totalLines === 0 && largestFileLines > 0)
104
+ totalLines = largestFileLines;
105
+ }
106
+ // Console/debug statement count -- use grepCount helper for reliability
107
+ const jsConsoleCount = grepCount(cwd, 'console\\.(log|error|warn)', ['*.ts', '*.tsx', '*.js']);
108
+ const pyPrintCount = grepCount(cwd, '\\bprint\\(', ['*.py']);
109
+ const goPrintCount = grepCount(cwd, 'fmt\\.Print', ['*.go']);
110
+ const consoleLogCount = jsConsoleCount + pyPrintCount + goPrintCount;
111
+ // TypeScript ": any" count
112
+ const anyTypeCount = grepCount(cwd, ': any', ['*.ts', '*.tsx']);
113
+ // Documentation
114
+ const readmeExists = (0, runner_1.fileExists)(cwd, 'README.md', 'readme.md');
115
+ const readmeLines = parseInt((0, runner_1.run)("wc -l README.md 2>/dev/null | awk '{print $1}'", cwd)) || 0;
116
+ const docCommentFiles = (0, runner_1.countLines)("grep -rlE '/\\*\\*|^\"\"\"|^[[:space:]]*#[[:space:]]' --include='*.ts' --include='*.py' --include='*.go' . 2>/dev/null | grep -v node_modules | grep -v dist", cwd);
117
+ const apiDocsExist = (0, runner_1.fileExists)(cwd, 'openapi.json', 'openapi.yaml', 'swagger.json', 'swagger.yaml');
118
+ const architectureDocsExist = (0, runner_1.fileExists)(cwd, 'ARCHITECTURE.md', 'docs/', 'ADR/', 'adr/');
119
+ const contributingExists = (0, runner_1.fileExists)(cwd, 'CONTRIBUTING.md');
120
+ const changelogExists = (0, runner_1.fileExists)(cwd, 'CHANGELOG.md', 'CHANGES.md');
121
+ // Security -- grep-based secret detection (Layer 0 fallback, overridden by gitleaks when available)
122
+ const secretPatterns = [
123
+ { pattern: 'password[[:space:]]*[:=]', rule: 'hardcoded-password' },
124
+ { pattern: 'api[_-]?key[[:space:]]*[:=]', rule: 'hardcoded-api-key' },
125
+ { pattern: 'secret[[:space:]]*[:=]', rule: 'hardcoded-secret' },
126
+ { pattern: 'BEGIN.*PRIVATE KEY', rule: 'private-key-in-source' },
127
+ { pattern: 'AKIA[0-9A-Z]{16}', rule: 'aws-access-key' },
128
+ { pattern: 'ghp_[a-zA-Z0-9]{36}', rule: 'github-token' },
129
+ { pattern: 'sk-ant-[a-zA-Z0-9]', rule: 'anthropic-api-key' },
130
+ ];
131
+ const secretDetails = [];
132
+ for (const sp of secretPatterns) {
133
+ const findings = (0, runner_1.run)(`grep -rnE '${sp.pattern}' --include='*.ts' --include='*.js' --include='*.py' --include='*.go' . 2>/dev/null | grep -v node_modules | grep -v dist | grep -v '.d.ts' | head -20`, cwd);
134
+ for (const line of findings.split('\n').filter((l) => l.trim())) {
135
+ const match = line.match(/^\.\/(.+?):(\d+):/);
136
+ if (match) {
137
+ secretDetails.push({
138
+ file: match[1],
139
+ line: parseInt(match[2]),
140
+ rule: sp.rule,
141
+ severity: sp.rule.includes('private-key') || sp.rule.includes('password') ? 'critical' : 'high',
142
+ });
143
+ }
144
+ }
145
+ }
146
+ const evalCount = parseInt((0, runner_1.run)("grep -rnE '\\beval\\(' --include='*.ts' --include='*.js' --include='*.py' . 2>/dev/null | grep -v node_modules | grep -v dist | wc -l", cwd)) || 0;
147
+ const privateKeyFiles = (0, runner_1.countLines)(`find . \\( -name "*.key" -o -name "*.pem" \\) ${EXCLUDE} 2>/dev/null`, cwd);
148
+ const envFilesInGit = (0, runner_1.countLines)('git ls-files .env .env.* 2>/dev/null', cwd);
149
+ const tlsDisabledCount = parseInt((0, runner_1.run)("grep -rnE 'NODE_TLS_REJECT_UNAUTHORIZED.*0|rejectUnauthorized.*false|VERIFY_SSL.*false' --include='*.ts' --include='*.js' --include='*.py' . 2>/dev/null | grep -v node_modules | wc -l", cwd)) || 0;
150
+ // Maintainability
151
+ const controllers = (0, runner_1.countLines)(`find . \\( -path "*/controllers/*" -name "*.ts" -o -path "*/handlers/*" -name "*.go" -o -path "*/views/*" -name "*.py" \\) ${EXCLUDE} 2>/dev/null`, cwd);
152
+ const models = (0, runner_1.countLines)(`find . -path "*/models/*" -type f ${SOURCE_EXTS} ${EXCLUDE} 2>/dev/null`, cwd);
153
+ const directories = (0, runner_1.countLines)(`find . -type d ${EXCLUDE} 2>/dev/null`, cwd);
154
+ // Developer Experience
155
+ const ciConfigCount = (0, runner_1.countLines)('find .github/workflows -name "*.yml" -o -name "*.yaml" 2>/dev/null; ls .gitlab-ci.yml Jenkinsfile .circleci/config.yml 2>/dev/null', cwd);
156
+ const dockerConfigCount = (0, runner_1.countLines)('ls Dockerfile docker-compose.yml docker-compose.yaml .devcontainer/devcontainer.json 2>/dev/null', cwd);
157
+ const precommitConfigCount = (0, runner_1.countLines)('ls -d .husky .pre-commit-config.yaml .git/hooks/pre-commit 2>/dev/null', cwd);
158
+ const makefileExists = (0, runner_1.fileExists)(cwd, 'Makefile', 'justfile', 'Taskfile.yml');
159
+ const envExampleExists = (0, runner_1.fileExists)(cwd, '.env.example', '.env.sample', '.env.template');
160
+ // Coverage config
161
+ const coverageConfigExists = (0, runner_1.fileExists)(cwd, '.nycrc', '.nycrc.json', '.c8rc', '.c8rc.json', 'jest.config.js', 'jest.config.ts', 'vitest.config.ts', 'vitest.config.js', '.coveragerc', 'setup.cfg', 'pytest.ini');
162
+ return {
163
+ sourceFiles,
164
+ testFiles: testFiles + testDirFiles,
165
+ totalLines,
166
+ coverageConfigExists,
167
+ filesOver500Lines,
168
+ largestFileLines,
169
+ largestFilePath,
170
+ consoleLogCount,
171
+ anyTypeCount,
172
+ readmeExists,
173
+ readmeLines,
174
+ docCommentFiles,
175
+ apiDocsExist,
176
+ architectureDocsExist,
177
+ contributingExists,
178
+ changelogExists,
179
+ secretFindings: secretDetails.length,
180
+ secretDetails,
181
+ evalCount,
182
+ privateKeyFiles,
183
+ envFilesInGit,
184
+ tlsDisabledCount,
185
+ controllers,
186
+ models,
187
+ directories,
188
+ ciConfigCount,
189
+ dockerConfigCount,
190
+ precommitConfigCount,
191
+ makefileExists,
192
+ envExampleExists,
193
+ coveragePercent: null,
194
+ toolsUsed: ['grep', 'find', 'wc', 'git'],
195
+ toolsUnavailable: [],
196
+ };
197
+ }
198
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/analyzers/tools/generic.ts"],"names":[],"mappings":"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"}