@vyuhlabs/dxkit 2.2.0 → 2.3.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 (145) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/README.md +40 -29
  3. package/dist/analyzers/bom/discovery.d.ts +38 -0
  4. package/dist/analyzers/bom/discovery.d.ts.map +1 -0
  5. package/dist/analyzers/bom/discovery.js +166 -0
  6. package/dist/analyzers/bom/discovery.js.map +1 -0
  7. package/dist/analyzers/bom/gather.d.ts +28 -0
  8. package/dist/analyzers/bom/gather.d.ts.map +1 -1
  9. package/dist/analyzers/bom/gather.js +98 -0
  10. package/dist/analyzers/bom/gather.js.map +1 -1
  11. package/dist/analyzers/bom/index.d.ts +49 -2
  12. package/dist/analyzers/bom/index.d.ts.map +1 -1
  13. package/dist/analyzers/bom/index.js +188 -12
  14. package/dist/analyzers/bom/index.js.map +1 -1
  15. package/dist/analyzers/bom/types.d.ts +33 -1
  16. package/dist/analyzers/bom/types.d.ts.map +1 -1
  17. package/dist/analyzers/licenses/index.d.ts +1 -1
  18. package/dist/analyzers/licenses/index.d.ts.map +1 -1
  19. package/dist/analyzers/licenses/index.js +22 -7
  20. package/dist/analyzers/licenses/index.js.map +1 -1
  21. package/dist/analyzers/security/detailed.d.ts.map +1 -1
  22. package/dist/analyzers/security/detailed.js +21 -8
  23. package/dist/analyzers/security/detailed.js.map +1 -1
  24. package/dist/analyzers/security/gather.d.ts.map +1 -1
  25. package/dist/analyzers/security/gather.js +76 -1
  26. package/dist/analyzers/security/gather.js.map +1 -1
  27. package/dist/analyzers/security/index.d.ts.map +1 -1
  28. package/dist/analyzers/security/index.js +20 -7
  29. package/dist/analyzers/security/index.js.map +1 -1
  30. package/dist/analyzers/tools/epss.d.ts +55 -0
  31. package/dist/analyzers/tools/epss.d.ts.map +1 -0
  32. package/dist/analyzers/tools/epss.js +133 -0
  33. package/dist/analyzers/tools/epss.js.map +1 -0
  34. package/dist/analyzers/tools/graphify.d.ts.map +1 -1
  35. package/dist/analyzers/tools/graphify.js +17 -7
  36. package/dist/analyzers/tools/graphify.js.map +1 -1
  37. package/dist/analyzers/tools/kev.d.ts +52 -0
  38. package/dist/analyzers/tools/kev.d.ts.map +1 -0
  39. package/dist/analyzers/tools/kev.js +95 -0
  40. package/dist/analyzers/tools/kev.js.map +1 -0
  41. package/dist/analyzers/tools/npm-registry.d.ts +43 -0
  42. package/dist/analyzers/tools/npm-registry.d.ts.map +1 -0
  43. package/dist/analyzers/tools/npm-registry.js +107 -0
  44. package/dist/analyzers/tools/npm-registry.js.map +1 -0
  45. package/dist/analyzers/tools/osv.d.ts +12 -0
  46. package/dist/analyzers/tools/osv.d.ts.map +1 -1
  47. package/dist/analyzers/tools/osv.js +45 -2
  48. package/dist/analyzers/tools/osv.js.map +1 -1
  49. package/dist/analyzers/tools/reachability.d.ts +60 -0
  50. package/dist/analyzers/tools/reachability.d.ts.map +1 -0
  51. package/dist/analyzers/tools/reachability.js +104 -0
  52. package/dist/analyzers/tools/reachability.js.map +1 -0
  53. package/dist/analyzers/tools/risk-score.d.ts +69 -0
  54. package/dist/analyzers/tools/risk-score.d.ts.map +1 -0
  55. package/dist/analyzers/tools/risk-score.js +86 -0
  56. package/dist/analyzers/tools/risk-score.js.map +1 -0
  57. package/dist/analyzers/tools/tool-registry.d.ts +10 -0
  58. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  59. package/dist/analyzers/tools/tool-registry.js +35 -20
  60. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  61. package/dist/analyzers/xlsx/bom.d.ts.map +1 -1
  62. package/dist/analyzers/xlsx/bom.js +1 -2
  63. package/dist/analyzers/xlsx/bom.js.map +1 -1
  64. package/dist/cli.d.ts.map +1 -1
  65. package/dist/cli.js +41 -10
  66. package/dist/cli.js.map +1 -1
  67. package/dist/languages/capabilities/types.d.ts +6 -0
  68. package/dist/languages/capabilities/types.d.ts.map +1 -1
  69. package/dist/languages/csharp.d.ts.map +1 -1
  70. package/dist/languages/csharp.js +8 -0
  71. package/dist/languages/csharp.js.map +1 -1
  72. package/dist/languages/go.d.ts.map +1 -1
  73. package/dist/languages/go.js +24 -7
  74. package/dist/languages/go.js.map +1 -1
  75. package/dist/languages/python.d.ts.map +1 -1
  76. package/dist/languages/python.js +8 -0
  77. package/dist/languages/python.js.map +1 -1
  78. package/dist/languages/rust.d.ts.map +1 -1
  79. package/dist/languages/rust.js +9 -0
  80. package/dist/languages/rust.js.map +1 -1
  81. package/dist/languages/typescript.d.ts.map +1 -1
  82. package/dist/languages/typescript.js +23 -1
  83. package/dist/languages/typescript.js.map +1 -1
  84. package/package.json +4 -3
  85. package/templates/.claude/agents-available/dashboard-builder.md +7 -7
  86. package/templates/.claude/agents-available/dev-report.md +4 -4
  87. package/templates/.claude/agents-available/health-auditor.md +1 -1
  88. package/templates/.claude/agents-available/strategic-planner.md +7 -7
  89. package/templates/.claude/agents-available/vulnerability-scanner.md +3 -3
  90. package/templates/.claude/commands/dashboard.md +1 -1
  91. package/templates/.claude/commands/deps.md +1 -1
  92. package/templates/.claude/commands/dev-report.md +2 -2
  93. package/templates/.claude/commands/docs.md +1 -1
  94. package/templates/.claude/commands/export-pdf.md +3 -3
  95. package/templates/.claude/commands/health.md +3 -3
  96. package/templates/.claude/commands/plan.md +1 -1
  97. package/templates/.claude/commands/quality.md.template +2 -2
  98. package/templates/.claude/commands/stealth-mode.md +1 -1
  99. package/templates/.claude/commands/test-gaps.md +2 -2
  100. package/templates/.claude/commands/vulnerabilities.md +3 -3
  101. package/dist/agents/extract.d.ts +0 -25
  102. package/dist/agents/extract.d.ts.map +0 -1
  103. package/dist/agents/extract.js +0 -186
  104. package/dist/agents/extract.js.map +0 -1
  105. package/dist/agents/schemas.d.ts +0 -106
  106. package/dist/agents/schemas.d.ts.map +0 -1
  107. package/dist/agents/schemas.js +0 -86
  108. package/dist/agents/schemas.js.map +0 -1
  109. package/dist/agents/session.d.ts +0 -28
  110. package/dist/agents/session.d.ts.map +0 -1
  111. package/dist/agents/session.js +0 -223
  112. package/dist/agents/session.js.map +0 -1
  113. package/dist/analyzers/index.d.ts +0 -3
  114. package/dist/analyzers/index.d.ts.map +0 -1
  115. package/dist/analyzers/index.js +0 -6
  116. package/dist/analyzers/index.js.map +0 -1
  117. package/dist/analyzers/security/report.d.ts +0 -6
  118. package/dist/analyzers/security/report.d.ts.map +0 -1
  119. package/dist/analyzers/security/report.js +0 -118
  120. package/dist/analyzers/security/report.js.map +0 -1
  121. package/dist/analyzers/tools/dotnet.d.ts +0 -8
  122. package/dist/analyzers/tools/dotnet.d.ts.map +0 -1
  123. package/dist/analyzers/tools/dotnet.js +0 -81
  124. package/dist/analyzers/tools/dotnet.js.map +0 -1
  125. package/dist/analyzers/tools/gather-cache.d.ts +0 -16
  126. package/dist/analyzers/tools/gather-cache.d.ts.map +0 -1
  127. package/dist/analyzers/tools/gather-cache.js +0 -126
  128. package/dist/analyzers/tools/gather-cache.js.map +0 -1
  129. package/dist/analyzers/tools/go.d.ts +0 -8
  130. package/dist/analyzers/tools/go.d.ts.map +0 -1
  131. package/dist/analyzers/tools/go.js +0 -84
  132. package/dist/analyzers/tools/go.js.map +0 -1
  133. package/dist/analyzers/tools/node.d.ts +0 -8
  134. package/dist/analyzers/tools/node.d.ts.map +0 -1
  135. package/dist/analyzers/tools/node.js +0 -160
  136. package/dist/analyzers/tools/node.js.map +0 -1
  137. package/dist/analyzers/tools/python.d.ts +0 -8
  138. package/dist/analyzers/tools/python.d.ts.map +0 -1
  139. package/dist/analyzers/tools/python.js +0 -81
  140. package/dist/analyzers/tools/python.js.map +0 -1
  141. package/dist/analyzers/tools/rust.d.ts +0 -8
  142. package/dist/analyzers/tools/rust.d.ts.map +0 -1
  143. package/dist/analyzers/tools/rust.js +0 -86
  144. package/dist/analyzers/tools/rust.js.map +0 -1
  145. package/templates/.ai/templates/session-checkpoint-template.md +0 -97
@@ -1,126 +0,0 @@
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.GatherCache = void 0;
37
- /**
38
- * Gather cache — file-based memoization for tool outputs.
39
- *
40
- * Solves: tools running multiple times when user runs health + vulnerabilities + quality.
41
- * Each tool's output is cached per commitSha in `.ai/cache/` (gitignored).
42
- *
43
- * Cache key: {toolName}-{commitSha}.json
44
- * Invalidation: automatic — if HEAD changes, the commitSha changes, cache misses.
45
- * Cleanup: stale entries (different commitSha) are deleted on write.
46
- *
47
- * Usage:
48
- * const result = cache.getOrCompute('cloc', cwd, () => gatherClocMetrics(cwd));
49
- *
50
- * The cache is optional. Gather functions work without it (backward compatible).
51
- * Passing a GatherCache instance enables memoization across multiple analyzers.
52
- */
53
- const fs = __importStar(require("fs"));
54
- const path = __importStar(require("path"));
55
- const runner_1 = require("./runner");
56
- class GatherCache {
57
- cacheDir;
58
- commitSha;
59
- memory = new Map();
60
- constructor(targetRepo) {
61
- this.cacheDir = path.join(targetRepo, '.ai', 'cache');
62
- this.commitSha = (0, runner_1.run)('git rev-parse --short HEAD 2>/dev/null', targetRepo) || 'unknown';
63
- }
64
- /**
65
- * Get cached result or compute and cache it.
66
- * Checks in-memory first (same process), then file cache (cross-process).
67
- */
68
- getOrCompute(toolName, compute) {
69
- const key = `${toolName}-${this.commitSha}`;
70
- // 1. In-memory cache (same process, same session)
71
- if (this.memory.has(key)) {
72
- return this.memory.get(key);
73
- }
74
- // 2. File cache (cross-process, e.g., health then vulnerabilities)
75
- const filePath = path.join(this.cacheDir, `${key}.json`);
76
- try {
77
- if (fs.existsSync(filePath)) {
78
- const raw = fs.readFileSync(filePath, 'utf-8');
79
- const result = JSON.parse(raw);
80
- this.memory.set(key, result);
81
- return result;
82
- }
83
- }
84
- catch {
85
- // Cache read failed — compute fresh
86
- }
87
- // 3. Compute, cache, return
88
- const result = compute();
89
- this.memory.set(key, result);
90
- // Write to file cache
91
- try {
92
- fs.mkdirSync(this.cacheDir, { recursive: true });
93
- // Clean stale entries (different commitSha) for this tool
94
- this.cleanStale(toolName);
95
- fs.writeFileSync(filePath, JSON.stringify(result));
96
- }
97
- catch {
98
- // Cache write failed — non-fatal
99
- }
100
- return result;
101
- }
102
- /** Check if a tool has a cached result. */
103
- has(toolName) {
104
- const key = `${toolName}-${this.commitSha}`;
105
- if (this.memory.has(key))
106
- return true;
107
- const filePath = path.join(this.cacheDir, `${key}.json`);
108
- return fs.existsSync(filePath);
109
- }
110
- /** Remove cached entries for a tool from different commits. */
111
- cleanStale(toolName) {
112
- try {
113
- const files = fs.readdirSync(this.cacheDir);
114
- for (const file of files) {
115
- if (file.startsWith(`${toolName}-`) && !file.includes(this.commitSha)) {
116
- fs.unlinkSync(path.join(this.cacheDir, file));
117
- }
118
- }
119
- }
120
- catch {
121
- // Non-fatal
122
- }
123
- }
124
- }
125
- exports.GatherCache = GatherCache;
126
- //# sourceMappingURL=gather-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gather-cache.js","sourceRoot":"","sources":["../../../src/analyzers/tools/gather-cache.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Go tool runner — golangci-lint, govulncheck.
3
- * Layer 1: language-specific tools for Go projects.
4
- */
5
- import { HealthMetrics } from '../types';
6
- /** Gather Go-specific metrics. */
7
- export declare function gatherGoMetrics(cwd: string): Partial<HealthMetrics>;
8
- //# sourceMappingURL=go.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/go.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAazC,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwEnE"}
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gatherGoMetrics = gatherGoMetrics;
4
- const runner_1 = require("./runner");
5
- const tool_registry_1 = require("./tool-registry");
6
- /** Gather Go-specific metrics. */
7
- function gatherGoMetrics(cwd) {
8
- const metrics = {
9
- toolsUsed: [],
10
- toolsUnavailable: [],
11
- };
12
- // golangci-lint
13
- const lint = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['golangci-lint'], cwd);
14
- if (lint.available && lint.path) {
15
- const raw = (0, runner_1.run)(`${lint.path} run --out-format json ./... 2>/dev/null`, cwd, 120000);
16
- if (raw) {
17
- try {
18
- const data = JSON.parse(raw);
19
- const issues = data.Issues || [];
20
- const errors = issues.filter((i) => i.Severity === 'error').length;
21
- const warnings = issues.length - errors;
22
- metrics.lintErrors = errors;
23
- metrics.lintWarnings = warnings;
24
- metrics.lintTool = 'golangci-lint';
25
- metrics.toolsUsed.push('golangci-lint');
26
- }
27
- catch {
28
- metrics.toolsUnavailable.push('golangci-lint (parse error)');
29
- }
30
- }
31
- else {
32
- // Empty = no issues
33
- metrics.lintErrors = 0;
34
- metrics.lintWarnings = 0;
35
- metrics.lintTool = 'golangci-lint';
36
- metrics.toolsUsed.push('golangci-lint');
37
- }
38
- }
39
- else {
40
- metrics.toolsUnavailable.push('golangci-lint');
41
- }
42
- // govulncheck
43
- const vuln = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.govulncheck, cwd);
44
- if (vuln.available && vuln.path) {
45
- const raw = (0, runner_1.run)(`${vuln.path} -json ./... 2>/dev/null`, cwd, 120000);
46
- if (raw) {
47
- try {
48
- // govulncheck JSON is newline-delimited JSON objects
49
- let vulnCount = 0;
50
- for (const line of raw.split('\n')) {
51
- if (!line.trim())
52
- continue;
53
- try {
54
- const obj = JSON.parse(line);
55
- if (obj.finding)
56
- vulnCount++;
57
- }
58
- catch {
59
- /* skip non-JSON lines */
60
- }
61
- }
62
- // govulncheck doesn't provide severity breakdown — count all as high
63
- metrics.depVulnHigh = vulnCount;
64
- metrics.depVulnCritical = 0;
65
- metrics.depVulnMedium = 0;
66
- metrics.depVulnLow = 0;
67
- metrics.depAuditTool = 'govulncheck';
68
- metrics.toolsUsed.push('govulncheck');
69
- }
70
- catch {
71
- metrics.toolsUnavailable.push('govulncheck (parse error)');
72
- }
73
- }
74
- }
75
- else {
76
- metrics.toolsUnavailable.push('govulncheck');
77
- }
78
- // Test framework detection
79
- if ((0, runner_1.fileExists)(cwd, 'go.mod')) {
80
- metrics.testFramework = 'go-test';
81
- }
82
- return metrics;
83
- }
84
- //# sourceMappingURL=go.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/analyzers/tools/go.ts"],"names":[],"mappings":";;AAkBA,0CAwEC;AArFD,qCAA2C;AAC3C,mDAAsD;AAWtD,kCAAkC;AAClC,SAAgB,eAAe,CAAC,GAAW;IACzC,MAAM,OAAO,GAA2B;QACtC,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,gBAAgB;IAChB,MAAM,IAAI,GAAG,IAAA,wBAAQ,EAAC,yBAAS,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAA,YAAG,EAAC,GAAG,IAAI,CAAC,IAAI,0CAA0C,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACrF,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;gBACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC;gBAC5B,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC;gBAChC,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC;gBACnC,OAAO,CAAC,SAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,gBAAiB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;YACvB,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;YACzB,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC;YACnC,OAAO,CAAC,SAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,gBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,cAAc;IACd,MAAM,IAAI,GAAG,IAAA,wBAAQ,EAAC,yBAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAA,YAAG,EAAC,GAAG,IAAI,CAAC,IAAI,0BAA0B,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,qDAAqD;gBACrD,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;wBAAE,SAAS;oBAC3B,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC7B,IAAI,GAAG,CAAC,OAAO;4BAAE,SAAS,EAAE,CAAC;oBAC/B,CAAC;oBAAC,MAAM,CAAC;wBACP,yBAAyB;oBAC3B,CAAC;gBACH,CAAC;gBACD,qEAAqE;gBACrE,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;gBAChC,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC;gBAC5B,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;gBAC1B,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;gBACvB,OAAO,CAAC,YAAY,GAAG,aAAa,CAAC;gBACrC,OAAO,CAAC,SAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,gBAAiB,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,gBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,2BAA2B;IAC3B,IAAI,IAAA,mBAAU,EAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Node.js tool runner -- eslint, npm audit, test runners.
3
- * Layer 1 (project tools) + Layer 2 (optional tools).
4
- */
5
- import { HealthMetrics } from '../types';
6
- /** Gather Node.js-specific metrics. */
7
- export declare function gatherNodeMetrics(cwd: string): Partial<HealthMetrics>;
8
- //# sourceMappingURL=node.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAiBzC,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwFrE"}
@@ -1,160 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gatherNodeMetrics = gatherNodeMetrics;
4
- const runner_1 = require("./runner");
5
- /** Gather Node.js-specific metrics. */
6
- function gatherNodeMetrics(cwd) {
7
- const metrics = {
8
- toolsUsed: [],
9
- toolsUnavailable: [],
10
- };
11
- // ESLint — pick the right binary and config format, skip gracefully if mismatched
12
- const eslintStatus = runEslint(cwd);
13
- if (eslintStatus.ran) {
14
- metrics.lintErrors = eslintStatus.errors;
15
- metrics.lintWarnings = eslintStatus.warnings;
16
- metrics.lintTool = 'eslint';
17
- metrics.toolsUsed.push('eslint');
18
- }
19
- else {
20
- metrics.toolsUnavailable.push(`eslint (${eslintStatus.reason})`);
21
- }
22
- // npm audit -- handles both v1 and v2+ formats
23
- // npm audit may exit non-zero when vulnerabilities exist, so use run() which catches errors
24
- // Don't redirect stderr to /dev/null — some versions write JSON to stderr
25
- const auditRaw = (0, runner_1.run)('npm audit --json 2>&1', cwd, 60000);
26
- if (auditRaw) {
27
- try {
28
- const auditData = JSON.parse(auditRaw);
29
- let critical = 0, high = 0, medium = 0, low = 0;
30
- if (auditData.metadata?.vulnerabilities) {
31
- const v = auditData.metadata.vulnerabilities;
32
- critical = v.critical || 0;
33
- high = v.high || 0;
34
- medium = v.moderate || 0;
35
- low = v.low || 0;
36
- }
37
- else if (auditData.vulnerabilities) {
38
- for (const v of Object.values(auditData.vulnerabilities)) {
39
- if (v.severity === 'critical')
40
- critical++;
41
- else if (v.severity === 'high')
42
- high++;
43
- else if (v.severity === 'moderate')
44
- medium++;
45
- else if (v.severity === 'low')
46
- low++;
47
- }
48
- }
49
- metrics.depVulnCritical = critical;
50
- metrics.depVulnHigh = high;
51
- metrics.depVulnMedium = medium;
52
- metrics.depVulnLow = low;
53
- metrics.depAuditTool = 'npm-audit';
54
- metrics.toolsUsed.push('npm-audit');
55
- }
56
- catch {
57
- metrics.toolsUnavailable.push('npm-audit (parse error)');
58
- }
59
- }
60
- else {
61
- metrics.toolsUnavailable.push('npm-audit');
62
- }
63
- // Test runner detection (detect framework but don't run tests -- too slow for health audit)
64
- const testScript = (0, runner_1.run)("node -e \"const p=require('./package.json'); console.log(p.scripts?.test || '')\" 2>/dev/null", cwd);
65
- if (testScript && testScript !== 'echo "Error: no test specified" && exit 1') {
66
- let framework = 'unknown';
67
- if (testScript.includes('vitest'))
68
- framework = 'vitest';
69
- else if (testScript.includes('jest'))
70
- framework = 'jest';
71
- else if (testScript.includes('mocha') || testScript.includes('lb-mocha'))
72
- framework = 'mocha';
73
- else if (testScript.includes('ava'))
74
- framework = 'ava';
75
- else if (testScript.includes('tap'))
76
- framework = 'tap';
77
- metrics.testFramework = framework;
78
- }
79
- // npm scripts count
80
- const scriptsOutput = (0, runner_1.run)('node -e "const p=require(\'./package.json\'); console.log(Object.keys(p.scripts||{}).length)" 2>/dev/null', cwd);
81
- metrics.npmScriptsCount = parseInt(scriptsOutput) || 0;
82
- // Node engine
83
- const engineOutput = (0, runner_1.run)("node -e \"const p=require('./package.json'); console.log(p.engines?.node || '')\" 2>/dev/null", cwd);
84
- if (engineOutput) {
85
- metrics.nodeEngineVersion = engineOutput;
86
- }
87
- return metrics;
88
- }
89
- /**
90
- * Run eslint with config-aware binary selection and graceful failure.
91
- *
92
- * Compatibility matrix:
93
- * - ESLint v9+: needs eslint.config.{js,mjs,cjs,ts} (flat config)
94
- * - ESLint v8: needs .eslintrc.{js,json,yml,yaml,cjs}
95
- * - LoopBack projects: use lb-eslint binary with embedded config
96
- */
97
- function runEslint(cwd) {
98
- // Prefer lb-eslint if present (LoopBack embeds its own config)
99
- const lbEslintPath = 'node_modules/.bin/lb-eslint';
100
- const eslintPath = 'node_modules/.bin/eslint';
101
- const hasLbEslint = (0, runner_1.fileExists)(cwd, lbEslintPath);
102
- const hasEslint = (0, runner_1.fileExists)(cwd, eslintPath);
103
- if (!hasLbEslint && !hasEslint) {
104
- return { ran: false, errors: 0, warnings: 0, reason: 'not installed' };
105
- }
106
- // Detect config format
107
- const hasFlatConfig = (0, runner_1.fileExists)(cwd, 'eslint.config.js', 'eslint.config.mjs', 'eslint.config.cjs', 'eslint.config.ts');
108
- const hasLegacyConfig = (0, runner_1.fileExists)(cwd, '.eslintrc', '.eslintrc.js', '.eslintrc.json', '.eslintrc.yml', '.eslintrc.yaml', '.eslintrc.cjs');
109
- // Get eslint version to check compatibility
110
- const binToCheck = hasEslint ? `./${eslintPath}` : `./${lbEslintPath}`;
111
- const versionOutput = (0, runner_1.run)(`${binToCheck} --version 2>/dev/null`, cwd);
112
- const majorMatch = versionOutput.match(/v?(\d+)/);
113
- const major = majorMatch ? parseInt(majorMatch[1]) : 0;
114
- // Config compatibility check
115
- if (major >= 9 && !hasFlatConfig) {
116
- // v9+ needs flat config
117
- if (hasLbEslint) {
118
- // lb-eslint may provide its own config; try it
119
- // (fall through to actual run)
120
- }
121
- else if (hasLegacyConfig) {
122
- return {
123
- ran: false,
124
- errors: 0,
125
- warnings: 0,
126
- reason: `v${major} but project uses legacy .eslintrc`,
127
- };
128
- }
129
- else {
130
- return {
131
- ran: false,
132
- errors: 0,
133
- warnings: 0,
134
- reason: 'no eslint config found',
135
- };
136
- }
137
- }
138
- // Prefer lb-eslint first if available, then standard eslint
139
- const bins = hasLbEslint ? [`./${lbEslintPath}`, `./${eslintPath}`] : [`./${eslintPath}`];
140
- for (const bin of bins) {
141
- if (!(0, runner_1.fileExists)(cwd, bin.replace('./', '')))
142
- continue;
143
- const result = (0, runner_1.runJSON)(`${bin} . --format json 2>/dev/null`, cwd, 120000);
144
- if (result && Array.isArray(result)) {
145
- let errors = 0;
146
- let warnings = 0;
147
- for (const file of result) {
148
- for (const msg of file.messages || []) {
149
- if (msg.severity === 2)
150
- errors++;
151
- else
152
- warnings++;
153
- }
154
- }
155
- return { ran: true, errors, warnings, reason: '' };
156
- }
157
- }
158
- return { ran: false, errors: 0, warnings: 0, reason: 'config error' };
159
- }
160
- //# sourceMappingURL=node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/analyzers/tools/node.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Python tool runner — ruff (lint), pip-audit (deps).
3
- * Layer 1: language-specific tools for Python projects.
4
- */
5
- import { HealthMetrics } from '../types';
6
- /** Gather Python-specific metrics. */
7
- export declare function gatherPythonMetrics(cwd: string): Partial<HealthMetrics>;
8
- //# sourceMappingURL=python.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/python.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAUzC,sCAAsC;AACtC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0EvE"}
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gatherPythonMetrics = gatherPythonMetrics;
4
- const runner_1 = require("./runner");
5
- const tool_registry_1 = require("./tool-registry");
6
- /** Gather Python-specific metrics. */
7
- function gatherPythonMetrics(cwd) {
8
- const metrics = {
9
- toolsUsed: [],
10
- toolsUnavailable: [],
11
- };
12
- // ruff (lint)
13
- const ruff = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.ruff, cwd);
14
- if (ruff.available && ruff.path) {
15
- const raw = (0, runner_1.run)(`${ruff.path} check . --output-format json 2>/dev/null`, cwd, 60000);
16
- if (raw) {
17
- try {
18
- const results = JSON.parse(raw);
19
- if (Array.isArray(results)) {
20
- // ruff doesn't distinguish error/warning by default — all are errors
21
- metrics.lintErrors = results.length;
22
- metrics.lintWarnings = 0;
23
- metrics.lintTool = 'ruff';
24
- metrics.toolsUsed.push('ruff');
25
- }
26
- }
27
- catch {
28
- metrics.toolsUnavailable.push('ruff (parse error)');
29
- }
30
- }
31
- else {
32
- // Empty output = no errors
33
- metrics.lintErrors = 0;
34
- metrics.lintWarnings = 0;
35
- metrics.lintTool = 'ruff';
36
- metrics.toolsUsed.push('ruff');
37
- }
38
- }
39
- else {
40
- metrics.toolsUnavailable.push('ruff');
41
- }
42
- // pip-audit (dependency vulnerabilities)
43
- const pipAudit = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['pip-audit'], cwd);
44
- if (pipAudit.available && pipAudit.path) {
45
- const raw = (0, runner_1.run)(`${pipAudit.path} --format json 2>/dev/null`, cwd, 120000);
46
- if (raw) {
47
- try {
48
- const data = JSON.parse(raw);
49
- let medium = 0;
50
- for (const dep of data.dependencies || []) {
51
- // pip-audit doesn't provide severity — count all as medium
52
- medium += (dep.vulns || []).length;
53
- }
54
- const critical = 0;
55
- const high = 0;
56
- const low = 0;
57
- metrics.depVulnCritical = critical;
58
- metrics.depVulnHigh = high;
59
- metrics.depVulnMedium = medium;
60
- metrics.depVulnLow = low;
61
- metrics.depAuditTool = 'pip-audit';
62
- metrics.toolsUsed.push('pip-audit');
63
- }
64
- catch {
65
- metrics.toolsUnavailable.push('pip-audit (parse error)');
66
- }
67
- }
68
- }
69
- else {
70
- metrics.toolsUnavailable.push('pip-audit');
71
- }
72
- // Test framework detection (don't run tests — just detect)
73
- if ((0, runner_1.fileExists)(cwd, 'pytest.ini', 'conftest.py') || (0, runner_1.fileExists)(cwd, 'pyproject.toml')) {
74
- const pyproject = (0, runner_1.run)('cat pyproject.toml 2>/dev/null', cwd);
75
- if (pyproject?.includes('[tool.pytest') || (0, runner_1.fileExists)(cwd, 'pytest.ini', 'conftest.py')) {
76
- metrics.testFramework = 'pytest';
77
- }
78
- }
79
- return metrics;
80
- }
81
- //# sourceMappingURL=python.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/analyzers/tools/python.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Rust tool runner — clippy, cargo-audit.
3
- * Layer 1: language-specific tools for Rust projects.
4
- */
5
- import { HealthMetrics } from '../types';
6
- /** Gather Rust-specific metrics. */
7
- export declare function gatherRustMetrics(cwd: string): Partial<HealthMetrics>;
8
- //# sourceMappingURL=rust.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/rust.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAoBzC,oCAAoC;AACpC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0ErE"}
@@ -1,86 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gatherRustMetrics = gatherRustMetrics;
4
- const runner_1 = require("./runner");
5
- const tool_registry_1 = require("./tool-registry");
6
- /** Gather Rust-specific metrics. */
7
- function gatherRustMetrics(cwd) {
8
- const metrics = {
9
- toolsUsed: [],
10
- toolsUnavailable: [],
11
- };
12
- // clippy
13
- const clippy = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.clippy, cwd);
14
- if (clippy.available) {
15
- const raw = (0, runner_1.run)('cargo clippy --message-format json 2>/dev/null', cwd, 120000);
16
- if (raw) {
17
- let errors = 0;
18
- let warnings = 0;
19
- for (const line of raw.split('\n')) {
20
- if (!line.trim())
21
- continue;
22
- try {
23
- const msg = JSON.parse(line);
24
- if (msg.reason === 'compiler-message' && msg.message) {
25
- if (msg.message.level === 'error')
26
- errors++;
27
- else if (msg.message.level === 'warning')
28
- warnings++;
29
- }
30
- }
31
- catch {
32
- /* skip non-JSON lines */
33
- }
34
- }
35
- metrics.lintErrors = errors;
36
- metrics.lintWarnings = warnings;
37
- metrics.lintTool = 'clippy';
38
- metrics.toolsUsed.push('clippy');
39
- }
40
- }
41
- else {
42
- metrics.toolsUnavailable.push('clippy');
43
- }
44
- // cargo-audit
45
- const audit = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['cargo-audit'], cwd);
46
- if (audit.available && audit.path) {
47
- const raw = (0, runner_1.run)(`${audit.path} audit --json 2>/dev/null`, cwd, 60000);
48
- if (raw) {
49
- try {
50
- const data = JSON.parse(raw);
51
- if (data.vulnerabilities) {
52
- let critical = 0, high = 0, medium = 0, low = 0;
53
- for (const v of data.vulnerabilities.list || []) {
54
- const sev = v.advisory?.severity?.toLowerCase();
55
- if (sev === 'critical')
56
- critical++;
57
- else if (sev === 'high')
58
- high++;
59
- else if (sev === 'medium')
60
- medium++;
61
- else
62
- low++;
63
- }
64
- metrics.depVulnCritical = critical;
65
- metrics.depVulnHigh = high;
66
- metrics.depVulnMedium = medium;
67
- metrics.depVulnLow = low;
68
- metrics.depAuditTool = 'cargo-audit';
69
- metrics.toolsUsed.push('cargo-audit');
70
- }
71
- }
72
- catch {
73
- metrics.toolsUnavailable.push('cargo-audit (parse error)');
74
- }
75
- }
76
- }
77
- else {
78
- metrics.toolsUnavailable.push('cargo-audit');
79
- }
80
- // Test framework detection
81
- if ((0, runner_1.fileExists)(cwd, 'Cargo.toml')) {
82
- metrics.testFramework = 'cargo-test';
83
- }
84
- return metrics;
85
- }
86
- //# sourceMappingURL=rust.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/analyzers/tools/rust.ts"],"names":[],"mappings":"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"}