@vyuhlabs/dxkit 2.2.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/package.json +4 -3
  3. package/dist/agents/extract.d.ts +0 -25
  4. package/dist/agents/extract.d.ts.map +0 -1
  5. package/dist/agents/extract.js +0 -186
  6. package/dist/agents/extract.js.map +0 -1
  7. package/dist/agents/schemas.d.ts +0 -106
  8. package/dist/agents/schemas.d.ts.map +0 -1
  9. package/dist/agents/schemas.js +0 -86
  10. package/dist/agents/schemas.js.map +0 -1
  11. package/dist/agents/session.d.ts +0 -28
  12. package/dist/agents/session.d.ts.map +0 -1
  13. package/dist/agents/session.js +0 -223
  14. package/dist/agents/session.js.map +0 -1
  15. package/dist/analyzers/index.d.ts +0 -3
  16. package/dist/analyzers/index.d.ts.map +0 -1
  17. package/dist/analyzers/index.js +0 -6
  18. package/dist/analyzers/index.js.map +0 -1
  19. package/dist/analyzers/security/report.d.ts +0 -6
  20. package/dist/analyzers/security/report.d.ts.map +0 -1
  21. package/dist/analyzers/security/report.js +0 -118
  22. package/dist/analyzers/security/report.js.map +0 -1
  23. package/dist/analyzers/tools/dotnet.d.ts +0 -8
  24. package/dist/analyzers/tools/dotnet.d.ts.map +0 -1
  25. package/dist/analyzers/tools/dotnet.js +0 -81
  26. package/dist/analyzers/tools/dotnet.js.map +0 -1
  27. package/dist/analyzers/tools/gather-cache.d.ts +0 -16
  28. package/dist/analyzers/tools/gather-cache.d.ts.map +0 -1
  29. package/dist/analyzers/tools/gather-cache.js +0 -126
  30. package/dist/analyzers/tools/gather-cache.js.map +0 -1
  31. package/dist/analyzers/tools/go.d.ts +0 -8
  32. package/dist/analyzers/tools/go.d.ts.map +0 -1
  33. package/dist/analyzers/tools/go.js +0 -84
  34. package/dist/analyzers/tools/go.js.map +0 -1
  35. package/dist/analyzers/tools/node.d.ts +0 -8
  36. package/dist/analyzers/tools/node.d.ts.map +0 -1
  37. package/dist/analyzers/tools/node.js +0 -160
  38. package/dist/analyzers/tools/node.js.map +0 -1
  39. package/dist/analyzers/tools/python.d.ts +0 -8
  40. package/dist/analyzers/tools/python.d.ts.map +0 -1
  41. package/dist/analyzers/tools/python.js +0 -81
  42. package/dist/analyzers/tools/python.js.map +0 -1
  43. package/dist/analyzers/tools/rust.d.ts +0 -8
  44. package/dist/analyzers/tools/rust.d.ts.map +0 -1
  45. package/dist/analyzers/tools/rust.js +0 -86
  46. package/dist/analyzers/tools/rust.js.map +0 -1
  47. package/templates/.ai/templates/session-checkpoint-template.md +0 -97
@@ -1,223 +0,0 @@
1
- "use strict";
2
- /**
3
- * Managed Agent session orchestration.
4
- *
5
- * Creates sessions, mounts repos, sends tasks, streams results.
6
- * Requires @anthropic-ai/sdk and ANTHROPIC_API_KEY.
7
- */
8
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- var desc = Object.getOwnPropertyDescriptor(m, k);
11
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
- desc = { enumerable: true, get: function() { return m[k]; } };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- }) : (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- }));
19
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
- Object.defineProperty(o, "default", { enumerable: true, value: v });
21
- }) : function(o, v) {
22
- o["default"] = v;
23
- });
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- var __importDefault = (this && this.__importDefault) || function (mod) {
42
- return (mod && mod.__esModule) ? mod : { "default": mod };
43
- };
44
- Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.loadConfig = loadConfig;
46
- exports.setupAgents = setupAgents;
47
- exports.listAgents = listAgents;
48
- exports.runAgent = runAgent;
49
- const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
50
- const fs = __importStar(require("fs"));
51
- const path = __importStar(require("path"));
52
- const extract_1 = require("./extract");
53
- const logger = __importStar(require("../logger"));
54
- const CONFIG_FILE = '.dxkit-agents.json';
55
- /** Load agent config from disk. */
56
- function loadConfig(cwd) {
57
- const configPath = path.join(cwd, CONFIG_FILE);
58
- if (!fs.existsSync(configPath))
59
- return null;
60
- try {
61
- return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
62
- }
63
- catch {
64
- return null;
65
- }
66
- }
67
- /** Save agent config to disk. */
68
- function saveConfig(cwd, config) {
69
- fs.writeFileSync(path.join(cwd, CONFIG_FILE), JSON.stringify(config, null, 2));
70
- }
71
- /** Simple hash for change detection. */
72
- function hashPrompt(content) {
73
- let hash = 0;
74
- for (let i = 0; i < content.length; i++) {
75
- const char = content.charCodeAt(i);
76
- hash = (hash << 5) - hash + char;
77
- hash |= 0;
78
- }
79
- return `hash:${hash.toString(36)}`;
80
- }
81
- /**
82
- * Set up all agents on Anthropic's infrastructure.
83
- * Creates an environment and one agent per template.
84
- */
85
- async function setupAgents(cwd, modelOverride) {
86
- const client = new sdk_1.default();
87
- logger.header('Setting up Managed Agents');
88
- // Create environment
89
- logger.info('Creating environment...');
90
- const env = await client.beta.environments.create({
91
- name: `dxkit-${Date.now()}`,
92
- config: {
93
- type: 'cloud',
94
- networking: { type: 'unrestricted' },
95
- },
96
- });
97
- logger.success(`Environment: ${env.id}`);
98
- // Create agents from templates
99
- const templates = (0, extract_1.listAgentTemplates)();
100
- const agents = {};
101
- for (const name of templates) {
102
- const extracted = (0, extract_1.extractAgent)(name, modelOverride);
103
- logger.info(`Creating agent: ${extracted.name}...`);
104
- try {
105
- const agent = await client.beta.agents.create({
106
- name: extracted.name,
107
- model: extracted.model,
108
- system: extracted.systemPrompt,
109
- tools: extracted.tools,
110
- });
111
- agents[name] = {
112
- agent_id: agent.id,
113
- agent_version: String(agent.version),
114
- prompt_hash: hashPrompt(extracted.systemPrompt),
115
- };
116
- logger.success(` ${extracted.name} → ${agent.id}`);
117
- }
118
- catch (err) {
119
- logger.warn(` Failed to create ${extracted.name}: ${err instanceof Error ? err.message : err}`);
120
- }
121
- }
122
- const config = {
123
- version: '1.5.1',
124
- environment_id: env.id,
125
- agents,
126
- };
127
- saveConfig(cwd, config);
128
- logger.success(`\nConfig saved to ${CONFIG_FILE}`);
129
- logger.info(`${Object.keys(agents).length} agents created.`);
130
- return config;
131
- }
132
- /** List registered agents. */
133
- function listAgents(cwd) {
134
- const config = loadConfig(cwd);
135
- if (!config) {
136
- logger.warn('No agents configured. Run: npx @vyuhlabs/dxkit agents setup');
137
- return;
138
- }
139
- logger.header('Registered Agents');
140
- logger.info(`Environment: ${config.environment_id}`);
141
- console.log('');
142
- for (const [name, agent] of Object.entries(config.agents)) {
143
- console.log(` ${name.padEnd(25)} ${agent.agent_id}`);
144
- }
145
- console.log(`\n ${Object.keys(config.agents).length} agents total.`);
146
- }
147
- /** Run an agent session on a GitHub repo. */
148
- async function runAgent(cwd, agentType, repoUrl, githubToken, branch, task) {
149
- const config = loadConfig(cwd);
150
- if (!config) {
151
- throw new Error('No agents configured. Run: npx @vyuhlabs/dxkit agents setup');
152
- }
153
- const agentDef = config.agents[agentType];
154
- if (!agentDef) {
155
- throw new Error(`Unknown agent: ${agentType}. Available: ${Object.keys(config.agents).join(', ')}`);
156
- }
157
- const client = new sdk_1.default();
158
- logger.info(`Running ${agentType} on ${repoUrl}...`);
159
- // Create session with repo mounted
160
- const session = await client.beta.sessions.create({
161
- agent: {
162
- type: 'agent',
163
- id: agentDef.agent_id,
164
- version: Number(agentDef.agent_version),
165
- },
166
- environment_id: config.environment_id,
167
- resources: [
168
- {
169
- type: 'github_repository',
170
- url: repoUrl,
171
- authorization_token: githubToken,
172
- checkout: branch ? { type: 'branch', name: branch } : undefined,
173
- },
174
- ],
175
- });
176
- logger.info(`Session: ${session.id}`);
177
- // Send task
178
- const taskMessage = task || 'Analyze this codebase thoroughly and return your findings as JSON.';
179
- // Open stream first, then send message
180
- const stream = await client.beta.sessions.events.stream(session.id);
181
- await client.beta.sessions.events.send(session.id, {
182
- events: [
183
- {
184
- type: 'user.message',
185
- content: [{ type: 'text', text: taskMessage }],
186
- },
187
- ],
188
- });
189
- // Collect output
190
- let output = '';
191
- let lastEventType = '';
192
- for await (const event of stream) {
193
- if (event.type === 'agent.message') {
194
- for (const block of event.content) {
195
- if (block.type === 'text' && block.text) {
196
- output += block.text;
197
- process.stdout.write('.');
198
- }
199
- }
200
- }
201
- else if (event.type === 'session.status_idle') {
202
- const idleEvent = event;
203
- if (idleEvent.stop_reason?.type !== 'requires_action') {
204
- break;
205
- }
206
- }
207
- else if (event.type === 'session.status_terminated') {
208
- break;
209
- }
210
- lastEventType = event.type;
211
- }
212
- console.log(''); // newline after dots
213
- logger.success(`Session completed (last event: ${lastEventType})`);
214
- // Cleanup
215
- try {
216
- await client.beta.sessions.archive(session.id);
217
- }
218
- catch {
219
- // Archive may fail if session is already terminated
220
- }
221
- return output;
222
- }
223
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agents/session.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export { analyzeHealth } from './health';
2
- export type { HealthMetrics, HealthReport, DimensionScore } from './types';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyzeHealth = void 0;
4
- var health_1 = require("./health");
5
- Object.defineProperty(exports, "analyzeHealth", { enumerable: true, get: function () { return health_1.analyzeHealth; } });
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Markdown report formatter matching tmp/reports/vulnerability-scan-*.md format.
3
- */
4
- import { SecurityReport } from './types';
5
- export declare function formatSecurityReport(report: SecurityReport, elapsed: string): string;
6
- //# sourceMappingURL=report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/analyzers/security/report.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAmB,MAAM,SAAS,CAAC;AA6C1D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAuFpF"}
@@ -1,118 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatSecurityReport = formatSecurityReport;
4
- const SEVERITY_ORDER = ['critical', 'high', 'medium', 'low'];
5
- const CATEGORY_SECTIONS = [
6
- {
7
- key: 'secrets-and-keys',
8
- title: '1. Secrets & Credentials Exposure',
9
- filter: (f) => f.category === 'secret' || f.category === 'private-key',
10
- },
11
- {
12
- key: 'code-vuln',
13
- title: '2. Code Vulnerability Patterns',
14
- filter: (f) => f.category === 'code-vuln',
15
- },
16
- {
17
- key: 'config',
18
- title: '3. Configuration Vulnerabilities',
19
- filter: (f) => f.category === 'config',
20
- },
21
- ];
22
- function severityLabel(s) {
23
- return s.toUpperCase();
24
- }
25
- function formatFinding(f) {
26
- const lines = [];
27
- lines.push(`### ${severityLabel(f.severity)}: ${f.description}`);
28
- if (f.file) {
29
- const loc = f.line ? `${f.file}:${f.line}` : f.file;
30
- lines.push(`- **File:** \`${loc}\``);
31
- }
32
- if (f.cwe)
33
- lines.push(`- **CWE:** ${f.cwe}`);
34
- lines.push(`- **Rule:** ${f.rule}`);
35
- if (f.snippet)
36
- lines.push(`- **Snippet:** \`${f.snippet}\``);
37
- if (f.remediation)
38
- lines.push(`- **Remediation:** ${f.remediation}`);
39
- lines.push('');
40
- return lines.join('\n');
41
- }
42
- function formatSecurityReport(report, elapsed) {
43
- const lines = [];
44
- lines.push('# Vulnerability Scan Report');
45
- lines.push('');
46
- lines.push(`**Date:** ${report.analyzedAt.slice(0, 10)}`);
47
- lines.push(`**Repository:** ${report.repo}`);
48
- lines.push(`**Branch:** ${report.branch}`);
49
- lines.push(`**Commit:** ${report.commitSha}`);
50
- lines.push('');
51
- lines.push('---');
52
- lines.push('');
53
- // Executive Summary
54
- lines.push('## Executive Summary');
55
- lines.push('');
56
- lines.push('| Severity | Count |');
57
- lines.push('|----------|-------|');
58
- lines.push(`| CRITICAL | ${report.summary.critical} |`);
59
- lines.push(`| HIGH | ${report.summary.high} |`);
60
- lines.push(`| MEDIUM | ${report.summary.medium} |`);
61
- lines.push(`| LOW | ${report.summary.low} |`);
62
- lines.push(`| **Total** | **${report.summary.total}** |`);
63
- lines.push('');
64
- lines.push(`Overall severity: **${report.summary.overallSeverity.toUpperCase()}**. ` +
65
- `Dependency audit flagged ${report.dependencies.total} vulnerable packages.`);
66
- lines.push('');
67
- lines.push('---');
68
- lines.push('');
69
- // Category sections — sorted by severity within each
70
- for (const section of CATEGORY_SECTIONS) {
71
- const sectionFindings = report.findings.filter(section.filter);
72
- if (sectionFindings.length === 0)
73
- continue;
74
- lines.push(`## ${section.title}`);
75
- lines.push('');
76
- sectionFindings.sort((a, b) => SEVERITY_ORDER.indexOf(a.severity) - SEVERITY_ORDER.indexOf(b.severity));
77
- for (const f of sectionFindings) {
78
- lines.push(formatFinding(f));
79
- }
80
- lines.push('---');
81
- lines.push('');
82
- }
83
- // Dependency section
84
- lines.push('## 4. Dependency Vulnerabilities');
85
- lines.push('');
86
- lines.push(`**Tool:** ${report.dependencies.tool || 'not available'}`);
87
- lines.push('');
88
- lines.push('| Severity | Count |');
89
- lines.push('|----------|-------|');
90
- lines.push(`| Critical | ${report.dependencies.critical} |`);
91
- lines.push(`| High | ${report.dependencies.high} |`);
92
- lines.push(`| Medium | ${report.dependencies.medium} |`);
93
- lines.push(`| Low | ${report.dependencies.low} |`);
94
- lines.push(`| **Total** | **${report.dependencies.total}** |`);
95
- lines.push('');
96
- if (report.dependencies.subprojects && report.dependencies.subprojects.length > 0) {
97
- lines.push('### By subproject');
98
- lines.push('');
99
- lines.push('| Subproject | Critical | High | Medium | Low | Total |');
100
- lines.push('|------------|----------|------|--------|-----|-------|');
101
- for (const sp of report.dependencies.subprojects) {
102
- lines.push(`| ${sp.name} | ${sp.critical} | ${sp.high} | ${sp.medium} | ${sp.low} | ${sp.total} |`);
103
- }
104
- lines.push('');
105
- }
106
- lines.push('---');
107
- lines.push('');
108
- // Footer
109
- lines.push(`**Tools used:** ${report.toolsUsed.join(', ')}`);
110
- if (report.toolsUnavailable.length > 0) {
111
- lines.push(`**Tools unavailable:** ${report.toolsUnavailable.join(', ')}`);
112
- }
113
- lines.push(`**Analysis time:** ${elapsed}s`);
114
- lines.push('');
115
- lines.push('*Generated by [VyuhLabs DXKit](https://www.npmjs.com/package/@vyuhlabs/dxkit)*');
116
- return lines.join('\n');
117
- }
118
- //# sourceMappingURL=report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/analyzers/security/report.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * C# / .NET tool runner — dotnet format, dotnet list package --vulnerable.
3
- * Layer 1: language-specific tools for .NET projects.
4
- */
5
- import { HealthMetrics } from '../types';
6
- /** Gather .NET-specific metrics. */
7
- export declare function gatherDotnetMetrics(cwd: string): Partial<HealthMetrics>;
8
- //# sourceMappingURL=dotnet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dotnet.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/dotnet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,oCAAoC;AACpC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAqFvE"}
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gatherDotnetMetrics = gatherDotnetMetrics;
4
- const runner_1 = require("./runner");
5
- const tool_registry_1 = require("./tool-registry");
6
- /** Gather .NET-specific metrics. */
7
- function gatherDotnetMetrics(cwd) {
8
- const metrics = {
9
- toolsUsed: [],
10
- toolsUnavailable: [],
11
- };
12
- // dotnet format (lint/formatting check)
13
- const dotnet = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['dotnet-format'], cwd);
14
- if (dotnet.available) {
15
- const exitCode = (0, runner_1.runExitCode)('dotnet format --verify-no-changes 2>/dev/null', cwd, 120000);
16
- if (exitCode === 0) {
17
- metrics.lintErrors = 0;
18
- metrics.lintWarnings = 0;
19
- }
20
- else {
21
- // Count format violations from output
22
- const raw = (0, runner_1.run)('dotnet format --verify-no-changes 2>&1', cwd, 120000);
23
- const violations = raw ? raw.split('\n').filter((l) => l.includes('Formatted')).length : 1;
24
- metrics.lintErrors = violations;
25
- metrics.lintWarnings = 0;
26
- }
27
- metrics.lintTool = 'dotnet-format';
28
- metrics.toolsUsed.push('dotnet-format');
29
- }
30
- else {
31
- metrics.toolsUnavailable.push('dotnet-format');
32
- }
33
- // dotnet list package --vulnerable
34
- if (dotnet.available) {
35
- const raw = (0, runner_1.run)('dotnet list package --vulnerable --format json 2>/dev/null', cwd, 120000);
36
- if (raw) {
37
- try {
38
- const data = JSON.parse(raw);
39
- let critical = 0, high = 0, medium = 0, low = 0;
40
- for (const proj of data.projects || []) {
41
- for (const fw of proj.frameworks || []) {
42
- for (const pkg of fw.topLevelPackages || []) {
43
- for (const adv of pkg.advisories || []) {
44
- const sev = adv.severity?.toLowerCase();
45
- if (sev === 'critical')
46
- critical++;
47
- else if (sev === 'high')
48
- high++;
49
- else if (sev === 'moderate' || sev === 'medium')
50
- medium++;
51
- else
52
- low++;
53
- }
54
- }
55
- }
56
- }
57
- if (critical + high + medium + low > 0) {
58
- metrics.depVulnCritical = critical;
59
- metrics.depVulnHigh = high;
60
- metrics.depVulnMedium = medium;
61
- metrics.depVulnLow = low;
62
- metrics.depAuditTool = 'dotnet-vulnerable';
63
- metrics.toolsUsed.push('dotnet-vulnerable');
64
- }
65
- }
66
- catch {
67
- // --format json not supported in older SDKs — try text parsing
68
- metrics.toolsUnavailable.push('dotnet-vulnerable (parse error)');
69
- }
70
- }
71
- }
72
- // Test framework detection
73
- if ((0, runner_1.fileExists)(cwd, '*.csproj')) {
74
- const csproj = (0, runner_1.run)("find . -name '*.csproj' -exec grep -l 'xunit\\|nunit\\|MSTest' {} \\; 2>/dev/null | head -1", cwd);
75
- if (csproj) {
76
- metrics.testFramework = 'dotnet-test';
77
- }
78
- }
79
- return metrics;
80
- }
81
- //# sourceMappingURL=dotnet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dotnet.js","sourceRoot":"","sources":["../../../src/analyzers/tools/dotnet.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export declare class GatherCache {
2
- private cacheDir;
3
- private commitSha;
4
- private memory;
5
- constructor(targetRepo: string);
6
- /**
7
- * Get cached result or compute and cache it.
8
- * Checks in-memory first (same process), then file cache (cross-process).
9
- */
10
- getOrCompute<T>(toolName: string, compute: () => T): T;
11
- /** Check if a tool has a cached result. */
12
- has(toolName: string): boolean;
13
- /** Remove cached entries for a tool from different commits. */
14
- private cleanStale;
15
- }
16
- //# sourceMappingURL=gather-cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gather-cache.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/gather-cache.ts"],"names":[],"mappings":"AAoBA,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAA8B;gBAEhC,UAAU,EAAE,MAAM;IAK9B;;;OAGG;IACH,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;IAsCtD,2CAA2C;IAC3C,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO9B,+DAA+D;IAC/D,OAAO,CAAC,UAAU;CAYnB"}
@@ -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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"}