@defai.digital/ax-cli 3.15.7 → 3.15.9
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.
- package/README.md +17 -2
- package/dist/agent/llm-agent.d.ts +0 -1
- package/dist/agent/llm-agent.js +2 -6
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/mcp/client-v2.d.ts +5 -5
- package/dist/mcp/client-v2.js +40 -68
- package/dist/mcp/client-v2.js.map +1 -1
- package/dist/mcp/zai-templates.js +19 -14
- package/dist/mcp/zai-templates.js.map +1 -1
- package/dist/schemas/settings-schemas.d.ts +3 -0
- package/dist/schemas/settings-schemas.js +4 -0
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/tools/bash.d.ts +6 -9
- package/dist/tools/bash.js +40 -38
- package/dist/tools/bash.js.map +1 -1
- package/dist/utils/file-cache.d.ts +4 -0
- package/dist/utils/file-cache.js +23 -33
- package/dist/utils/file-cache.js.map +1 -1
- package/package.json +1 -1
- package/.ax-cli/CUSTOM.md +0 -97
- package/.ax-cli/auto-accept-audit.json +0 -1302
- package/.ax-cli/index.json +0 -43
- package/.ax-cli/memory.json +0 -62
- package/.ax-cli/settings.json +0 -41
- package/ax.config.json +0 -304
- package/dist/analyzers/ast/tree-sitter-parser.d.ts +0 -134
- package/dist/analyzers/ast/tree-sitter-parser.js +0 -730
- package/dist/analyzers/ast/tree-sitter-parser.js.map +0 -1
- package/dist/mcp/config-detector-v2.d.ts +0 -83
- package/dist/mcp/config-detector-v2.js +0 -328
- package/dist/mcp/config-detector-v2.js.map +0 -1
- package/dist/mcp/config-migrator-v2.d.ts +0 -89
- package/dist/mcp/config-migrator-v2.js +0 -288
- package/dist/mcp/config-migrator-v2.js.map +0 -1
- package/dist/mcp/config-v2.d.ts +0 -111
- package/dist/mcp/config-v2.js +0 -443
- package/dist/mcp/config-v2.js.map +0 -1
- package/dist/mcp/transports-v2.d.ts +0 -152
- package/dist/mcp/transports-v2.js +0 -481
- package/dist/mcp/transports-v2.js.map +0 -1
- package/dist/utils/error-sanitizer.d.ts +0 -119
- package/dist/utils/error-sanitizer.js +0 -253
- package/dist/utils/error-sanitizer.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -74
- package/dist/utils/errors.js +0 -139
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/incremental-analyzer.d.ts +0 -134
- package/dist/utils/incremental-analyzer.js +0 -377
- package/dist/utils/incremental-analyzer.js.map +0 -1
- package/dist/utils/math.d.ts +0 -1
- package/dist/utils/math.js +0 -4
- package/dist/utils/math.js.map +0 -1
- package/dist/utils/settings.d.ts +0 -1
- package/dist/utils/settings.js +0 -4
- package/dist/utils/settings.js.map +0 -1
- package/dist/utils/streaming-analyzer.d.ts +0 -160
- package/dist/utils/streaming-analyzer.js +0 -214
- package/dist/utils/streaming-analyzer.js.map +0 -1
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Incremental Analyzer
|
|
3
|
-
*
|
|
4
|
-
* Analyzes only changed files and their dependencies using git integration.
|
|
5
|
-
* Provides 10-50x speedup by avoiding analysis of unchanged files.
|
|
6
|
-
*
|
|
7
|
-
* Quick Win #2: Git-Based Incremental Analysis (Est. time: 1 hour)
|
|
8
|
-
* Impact: 10-50x reduction in files to analyze
|
|
9
|
-
*/
|
|
10
|
-
import { execSync } from 'child_process';
|
|
11
|
-
import { existsSync } from 'fs';
|
|
12
|
-
import { resolve, dirname, join } from 'path';
|
|
13
|
-
import { readFile } from 'fs/promises';
|
|
14
|
-
/**
|
|
15
|
-
* Check if directory is a git repository
|
|
16
|
-
*/
|
|
17
|
-
export function isGitRepo(dir = process.cwd()) {
|
|
18
|
-
try {
|
|
19
|
-
execSync('git rev-parse --git-dir', {
|
|
20
|
-
cwd: dir,
|
|
21
|
-
stdio: 'ignore',
|
|
22
|
-
});
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Get changed files from git
|
|
31
|
-
*
|
|
32
|
-
* @param config - Configuration options
|
|
33
|
-
* @returns Array of changed files
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* ```typescript
|
|
37
|
-
* const changed = await getChangedFiles({
|
|
38
|
-
* compareWith: 'main',
|
|
39
|
-
* include: ['*.ts', '*.tsx'],
|
|
40
|
-
* });
|
|
41
|
-
*
|
|
42
|
-
* console.log(`${changed.length} files changed`);
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
export async function getChangedFiles(config = {}) {
|
|
46
|
-
const baseDir = config.baseDir || process.cwd();
|
|
47
|
-
// Check if git repo
|
|
48
|
-
if (!isGitRepo(baseDir)) {
|
|
49
|
-
throw new Error('Not a git repository');
|
|
50
|
-
}
|
|
51
|
-
const changedFiles = [];
|
|
52
|
-
try {
|
|
53
|
-
// Get staged and unstaged changes
|
|
54
|
-
const statusOutput = execSync(`git status --porcelain ${config.includeUntracked ? '--untracked-files=all' : '--untracked-files=no'}`, {
|
|
55
|
-
cwd: baseDir,
|
|
56
|
-
encoding: 'utf-8',
|
|
57
|
-
});
|
|
58
|
-
// Parse git status output
|
|
59
|
-
for (const line of statusOutput.split('\n')) {
|
|
60
|
-
if (!line.trim())
|
|
61
|
-
continue;
|
|
62
|
-
const status = line.substring(0, 2);
|
|
63
|
-
const filePath = line.substring(3);
|
|
64
|
-
// Parse status codes
|
|
65
|
-
let changeType;
|
|
66
|
-
if (status.includes('M')) {
|
|
67
|
-
changeType = 'modified';
|
|
68
|
-
}
|
|
69
|
-
else if (status.includes('A')) {
|
|
70
|
-
changeType = 'added';
|
|
71
|
-
}
|
|
72
|
-
else if (status.includes('D')) {
|
|
73
|
-
changeType = 'deleted';
|
|
74
|
-
}
|
|
75
|
-
else if (status.includes('R')) {
|
|
76
|
-
changeType = 'renamed';
|
|
77
|
-
}
|
|
78
|
-
else if (status.includes('?')) {
|
|
79
|
-
changeType = 'untracked';
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
// Apply filters - convert glob patterns to proper regex
|
|
85
|
-
const globToRegex = (pattern) => {
|
|
86
|
-
// Escape special regex chars except * and ?, then convert glob wildcards
|
|
87
|
-
// SECURITY FIX: Use [^/]* instead of .* to prevent ReDoS attacks
|
|
88
|
-
// .* can cause exponential time complexity on patterns like "a*b*c*d*"
|
|
89
|
-
const escaped = pattern
|
|
90
|
-
.replace(/[.+^${}()|[\]\\]/g, '\\$&') // Escape regex special chars
|
|
91
|
-
.replace(/\*/g, '[^/]*') // * -> [^/]* (non-greedy, no directory crossing)
|
|
92
|
-
.replace(/\?/g, '[^/]'); // ? -> [^/] (single char, no directory crossing)
|
|
93
|
-
return new RegExp(`^${escaped}$`);
|
|
94
|
-
};
|
|
95
|
-
if (config.include && config.include.length > 0) {
|
|
96
|
-
const matches = config.include.some((pattern) => globToRegex(pattern).test(filePath));
|
|
97
|
-
if (!matches)
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
if (config.exclude && config.exclude.length > 0) {
|
|
101
|
-
const excluded = config.exclude.some((pattern) => globToRegex(pattern).test(filePath));
|
|
102
|
-
if (excluded)
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
changedFiles.push({
|
|
106
|
-
path: filePath,
|
|
107
|
-
status: changeType,
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
// Get diff against specific commit/branch if specified
|
|
111
|
-
if (config.compareWith) {
|
|
112
|
-
const diffOutput = execSync(`git diff --name-status ${config.compareWith}...HEAD`, {
|
|
113
|
-
cwd: baseDir,
|
|
114
|
-
encoding: 'utf-8',
|
|
115
|
-
});
|
|
116
|
-
for (const line of diffOutput.split('\n')) {
|
|
117
|
-
if (!line.trim())
|
|
118
|
-
continue;
|
|
119
|
-
const [status, ...paths] = line.split('\t');
|
|
120
|
-
const filePath = paths[0];
|
|
121
|
-
// Skip if no file path found
|
|
122
|
-
if (!filePath)
|
|
123
|
-
continue;
|
|
124
|
-
// Skip if already in changed files
|
|
125
|
-
if (changedFiles.some((f) => f.path === filePath)) {
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
let changeType;
|
|
129
|
-
if (status === 'M') {
|
|
130
|
-
changeType = 'modified';
|
|
131
|
-
}
|
|
132
|
-
else if (status === 'A') {
|
|
133
|
-
changeType = 'added';
|
|
134
|
-
}
|
|
135
|
-
else if (status === 'D') {
|
|
136
|
-
changeType = 'deleted';
|
|
137
|
-
}
|
|
138
|
-
else if (status.startsWith('R')) {
|
|
139
|
-
changeType = 'renamed';
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
changedFiles.push({
|
|
145
|
-
path: filePath,
|
|
146
|
-
status: changeType,
|
|
147
|
-
oldPath: paths.length > 1 ? paths[1] : undefined,
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
throw new Error(`Failed to get changed files: ${error.message}`);
|
|
154
|
-
}
|
|
155
|
-
return changedFiles;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Get files to analyze incrementally
|
|
159
|
-
*
|
|
160
|
-
* Returns only files that need analysis based on git changes.
|
|
161
|
-
*
|
|
162
|
-
* @param allFiles - All files in project
|
|
163
|
-
* @param config - Configuration options
|
|
164
|
-
* @returns Incremental analysis result
|
|
165
|
-
*
|
|
166
|
-
* @example
|
|
167
|
-
* ```typescript
|
|
168
|
-
* const allFiles = await glob('src/** /*.ts');
|
|
169
|
-
* const result = await getFilesToAnalyze(allFiles);
|
|
170
|
-
*
|
|
171
|
-
* console.log(`Analyzing ${result.filesToAnalyze.length} of ${result.totalFiles} files`);
|
|
172
|
-
* console.log(`Speedup: ${result.speedup.toFixed(1)}x`);
|
|
173
|
-
* ```
|
|
174
|
-
*/
|
|
175
|
-
export async function getFilesToAnalyze(allFiles, config = {}) {
|
|
176
|
-
const baseDir = config.baseDir || process.cwd();
|
|
177
|
-
// Check if git repo
|
|
178
|
-
if (!isGitRepo(baseDir)) {
|
|
179
|
-
// Not a git repo - analyze all files
|
|
180
|
-
return {
|
|
181
|
-
filesToAnalyze: allFiles,
|
|
182
|
-
cachedFiles: [],
|
|
183
|
-
changedFiles: [],
|
|
184
|
-
totalFiles: allFiles.length,
|
|
185
|
-
speedup: 1.0,
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
// Get changed files
|
|
189
|
-
const changedFiles = await getChangedFiles(config);
|
|
190
|
-
if (changedFiles.length === 0) {
|
|
191
|
-
// No changes - all files can use cache
|
|
192
|
-
return {
|
|
193
|
-
filesToAnalyze: [],
|
|
194
|
-
cachedFiles: allFiles,
|
|
195
|
-
changedFiles: [],
|
|
196
|
-
totalFiles: allFiles.length,
|
|
197
|
-
speedup: allFiles.length > 0 ? Infinity : 1.0,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
// Convert changed file paths to absolute paths
|
|
201
|
-
const changedPaths = new Set(changedFiles.map((f) => resolve(baseDir, f.path)));
|
|
202
|
-
// Filter all files to only those that changed
|
|
203
|
-
const filesToAnalyze = allFiles.filter((file) => {
|
|
204
|
-
const absPath = resolve(file);
|
|
205
|
-
return changedPaths.has(absPath);
|
|
206
|
-
});
|
|
207
|
-
const cachedFiles = allFiles.filter((file) => {
|
|
208
|
-
const absPath = resolve(file);
|
|
209
|
-
return !changedPaths.has(absPath);
|
|
210
|
-
});
|
|
211
|
-
const speedup = allFiles.length / Math.max(filesToAnalyze.length, 1);
|
|
212
|
-
return {
|
|
213
|
-
filesToAnalyze,
|
|
214
|
-
cachedFiles,
|
|
215
|
-
changedFiles,
|
|
216
|
-
totalFiles: allFiles.length,
|
|
217
|
-
speedup,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Get git repository info
|
|
222
|
-
*
|
|
223
|
-
* @param baseDir - Base directory (default: cwd)
|
|
224
|
-
* @returns Repository information
|
|
225
|
-
*/
|
|
226
|
-
export function getGitInfo(baseDir = process.cwd()) {
|
|
227
|
-
if (!isGitRepo(baseDir)) {
|
|
228
|
-
return null;
|
|
229
|
-
}
|
|
230
|
-
try {
|
|
231
|
-
const branch = execSync('git rev-parse --abbrev-ref HEAD', {
|
|
232
|
-
cwd: baseDir,
|
|
233
|
-
encoding: 'utf-8',
|
|
234
|
-
}).trim();
|
|
235
|
-
const commit = execSync('git rev-parse --short HEAD', {
|
|
236
|
-
cwd: baseDir,
|
|
237
|
-
encoding: 'utf-8',
|
|
238
|
-
}).trim();
|
|
239
|
-
const statusOutput = execSync('git status --porcelain', {
|
|
240
|
-
cwd: baseDir,
|
|
241
|
-
encoding: 'utf-8',
|
|
242
|
-
});
|
|
243
|
-
const isDirty = statusOutput.trim().length > 0;
|
|
244
|
-
// Get ahead/behind counts
|
|
245
|
-
let ahead = 0;
|
|
246
|
-
let behind = 0;
|
|
247
|
-
try {
|
|
248
|
-
const aheadBehind = execSync('git rev-list --left-right --count HEAD...@{u}', {
|
|
249
|
-
cwd: baseDir,
|
|
250
|
-
encoding: 'utf-8',
|
|
251
|
-
}).trim();
|
|
252
|
-
const splitParts = aheadBehind.split('\t');
|
|
253
|
-
if (splitParts.length >= 2) {
|
|
254
|
-
const [aheadStr, behindStr] = splitParts;
|
|
255
|
-
ahead = parseInt(aheadStr, 10);
|
|
256
|
-
behind = parseInt(behindStr, 10);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
catch {
|
|
260
|
-
// No upstream branch
|
|
261
|
-
}
|
|
262
|
-
return {
|
|
263
|
-
branch,
|
|
264
|
-
commit,
|
|
265
|
-
isDirty,
|
|
266
|
-
ahead,
|
|
267
|
-
behind,
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
catch (error) {
|
|
271
|
-
return null;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Simple dependency tracker (for future use)
|
|
276
|
-
*
|
|
277
|
-
* Parses import/require statements to build a dependency graph.
|
|
278
|
-
*/
|
|
279
|
-
export class DependencyTracker {
|
|
280
|
-
graph = new Map();
|
|
281
|
-
reverseGraph = new Map();
|
|
282
|
-
/**
|
|
283
|
-
* Add a file and its dependencies
|
|
284
|
-
*/
|
|
285
|
-
async addFile(filePath) {
|
|
286
|
-
const content = await readFile(filePath, 'utf-8');
|
|
287
|
-
const imports = this.parseImports(content);
|
|
288
|
-
// Resolve imports to absolute paths
|
|
289
|
-
const resolvedImports = imports
|
|
290
|
-
.map((imp) => this.resolveImport(imp, filePath))
|
|
291
|
-
.filter((imp) => imp !== null);
|
|
292
|
-
// Add to graph
|
|
293
|
-
this.graph.set(filePath, new Set(resolvedImports));
|
|
294
|
-
// Add to reverse graph
|
|
295
|
-
for (const imp of resolvedImports) {
|
|
296
|
-
if (!this.reverseGraph.has(imp)) {
|
|
297
|
-
this.reverseGraph.set(imp, new Set());
|
|
298
|
-
}
|
|
299
|
-
this.reverseGraph.get(imp).add(filePath);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Get files that depend on the given file
|
|
304
|
-
*/
|
|
305
|
-
getDependents(filePath) {
|
|
306
|
-
return Array.from(this.reverseGraph.get(filePath) || []);
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Get all affected files (transitive dependencies)
|
|
310
|
-
*/
|
|
311
|
-
getAffectedFiles(changedFiles) {
|
|
312
|
-
const affected = new Set(changedFiles);
|
|
313
|
-
const queue = [...changedFiles];
|
|
314
|
-
while (queue.length > 0) {
|
|
315
|
-
const file = queue.shift();
|
|
316
|
-
const dependents = this.getDependents(file);
|
|
317
|
-
for (const dep of dependents) {
|
|
318
|
-
if (!affected.has(dep)) {
|
|
319
|
-
affected.add(dep);
|
|
320
|
-
queue.push(dep);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
return Array.from(affected);
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Parse import statements from file content
|
|
328
|
-
*/
|
|
329
|
-
parseImports(content) {
|
|
330
|
-
const imports = [];
|
|
331
|
-
// ES6 imports
|
|
332
|
-
const es6Regex = /import\s+.*?\s+from\s+['"]([^'"]+)['"]/g;
|
|
333
|
-
let match;
|
|
334
|
-
while ((match = es6Regex.exec(content)) !== null) {
|
|
335
|
-
imports.push(match[1]);
|
|
336
|
-
}
|
|
337
|
-
// CommonJS requires
|
|
338
|
-
const cjsRegex = /require\(['"]([^'"]+)['"]\)/g;
|
|
339
|
-
while ((match = cjsRegex.exec(content)) !== null) {
|
|
340
|
-
imports.push(match[1]);
|
|
341
|
-
}
|
|
342
|
-
// Dynamic imports
|
|
343
|
-
const dynamicRegex = /import\(['"]([^'"]+)['"]\)/g;
|
|
344
|
-
while ((match = dynamicRegex.exec(content)) !== null) {
|
|
345
|
-
imports.push(match[1]);
|
|
346
|
-
}
|
|
347
|
-
return imports;
|
|
348
|
-
}
|
|
349
|
-
/**
|
|
350
|
-
* Resolve import path to absolute path
|
|
351
|
-
*/
|
|
352
|
-
resolveImport(importPath, fromFile) {
|
|
353
|
-
// Skip node_modules
|
|
354
|
-
if (!importPath.startsWith('.')) {
|
|
355
|
-
return null;
|
|
356
|
-
}
|
|
357
|
-
const dir = dirname(fromFile);
|
|
358
|
-
let resolved = resolve(dir, importPath);
|
|
359
|
-
// Try with common extensions
|
|
360
|
-
const extensions = ['', '.ts', '.tsx', '.js', '.jsx'];
|
|
361
|
-
for (const ext of extensions) {
|
|
362
|
-
const withExt = resolved + ext;
|
|
363
|
-
if (existsSync(withExt)) {
|
|
364
|
-
return withExt;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
// Try index files
|
|
368
|
-
for (const ext of extensions.slice(1)) {
|
|
369
|
-
const indexPath = join(resolved, `index${ext}`);
|
|
370
|
-
if (existsSync(indexPath)) {
|
|
371
|
-
return indexPath;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
return null;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
//# sourceMappingURL=incremental-analyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"incremental-analyzer.js","sourceRoot":"","sources":["../../src/utils/incremental-analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/math.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function add(a: number, b: number): number;
|
package/dist/utils/math.js
DELETED
package/dist/utils/math.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
package/dist/utils/settings.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { getSettingsManager, UserSettings, ProjectSettings } from './settings-manager.js';
|
package/dist/utils/settings.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/utils/settings.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,uFAAuF;AAEvF,OAAO,EAAE,kBAAkB,EAAiC,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Streaming Analyzer
|
|
3
|
-
*
|
|
4
|
-
* Emits analysis results as they're found instead of waiting for all files.
|
|
5
|
-
* Provides better user experience with immediate feedback.
|
|
6
|
-
*
|
|
7
|
-
* Quick Win #3: Streaming Results (Est. time: 30 minutes)
|
|
8
|
-
* Impact: Better UX, perceived 2-5x faster
|
|
9
|
-
*/
|
|
10
|
-
import { EventEmitter } from 'events';
|
|
11
|
-
import { formatDuration } from '../ui/utils/tool-grouper.js';
|
|
12
|
-
/**
|
|
13
|
-
* Analysis result for a single file
|
|
14
|
-
*/
|
|
15
|
-
export interface FileAnalysisResult<T = unknown> {
|
|
16
|
-
/** File path */
|
|
17
|
-
file: string;
|
|
18
|
-
/** Analysis result */
|
|
19
|
-
result?: T;
|
|
20
|
-
/** Error if analysis failed */
|
|
21
|
-
error?: Error;
|
|
22
|
-
/** Analysis duration in ms */
|
|
23
|
-
duration: number;
|
|
24
|
-
/** Whether result was from cache */
|
|
25
|
-
cached: boolean;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Progress update
|
|
29
|
-
*/
|
|
30
|
-
export interface AnalysisProgress {
|
|
31
|
-
/** Number of files completed */
|
|
32
|
-
completed: number;
|
|
33
|
-
/** Total number of files */
|
|
34
|
-
total: number;
|
|
35
|
-
/** Current file being analyzed */
|
|
36
|
-
currentFile?: string;
|
|
37
|
-
/** Percentage complete (0-100) */
|
|
38
|
-
percentage: number;
|
|
39
|
-
/** Estimated time remaining in ms */
|
|
40
|
-
estimatedTimeRemaining?: number;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Analysis summary
|
|
44
|
-
*/
|
|
45
|
-
export interface AnalysisSummary<T = unknown> {
|
|
46
|
-
/** All results */
|
|
47
|
-
results: FileAnalysisResult<T>[];
|
|
48
|
-
/** Number of successful analyses */
|
|
49
|
-
successCount: number;
|
|
50
|
-
/** Number of failed analyses */
|
|
51
|
-
errorCount: number;
|
|
52
|
-
/** Number of cached results */
|
|
53
|
-
cachedCount: number;
|
|
54
|
-
/** Total duration in ms */
|
|
55
|
-
totalDuration: number;
|
|
56
|
-
/** Average duration per file in ms */
|
|
57
|
-
avgDuration: number;
|
|
58
|
-
/** Cache hit rate (0-1) */
|
|
59
|
-
cacheHitRate: number;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Streaming analyzer events
|
|
63
|
-
*/
|
|
64
|
-
export interface StreamingAnalyzerEvents<T = unknown> {
|
|
65
|
-
/** Emitted when a file analysis starts */
|
|
66
|
-
start: (file: string) => void;
|
|
67
|
-
/** Emitted when a file analysis completes */
|
|
68
|
-
result: (result: FileAnalysisResult<T>) => void;
|
|
69
|
-
/** Emitted on progress updates */
|
|
70
|
-
progress: (progress: AnalysisProgress) => void;
|
|
71
|
-
/** Emitted when all files are analyzed */
|
|
72
|
-
complete: (summary: AnalysisSummary<T>) => void;
|
|
73
|
-
/** Emitted on error */
|
|
74
|
-
error: (file: string, error: Error) => void;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Streaming Analyzer
|
|
78
|
-
*
|
|
79
|
-
* Analyzes files and emits results as they're completed.
|
|
80
|
-
*
|
|
81
|
-
* @example
|
|
82
|
-
* ```typescript
|
|
83
|
-
* const analyzer = new StreamingAnalyzer();
|
|
84
|
-
*
|
|
85
|
-
* analyzer.on('result', (result) => {
|
|
86
|
-
* if (result.error) {
|
|
87
|
-
* console.error(`Error in ${result.file}: ${result.error.message}`);
|
|
88
|
-
* } else {
|
|
89
|
-
* console.log(`✓ ${result.file} (${result.duration}ms)`);
|
|
90
|
-
* }
|
|
91
|
-
* });
|
|
92
|
-
*
|
|
93
|
-
* analyzer.on('progress', (progress) => {
|
|
94
|
-
* console.log(`Progress: ${progress.percentage}%`);
|
|
95
|
-
* });
|
|
96
|
-
*
|
|
97
|
-
* analyzer.on('complete', (summary) => {
|
|
98
|
-
* console.log(`Done! ${summary.successCount} files analyzed`);
|
|
99
|
-
* });
|
|
100
|
-
*
|
|
101
|
-
* await analyzer.analyze(files, analyzeFile);
|
|
102
|
-
* ```
|
|
103
|
-
*/
|
|
104
|
-
export declare class StreamingAnalyzer<T = unknown> extends EventEmitter {
|
|
105
|
-
private results;
|
|
106
|
-
private startTime;
|
|
107
|
-
private completed;
|
|
108
|
-
private total;
|
|
109
|
-
/**
|
|
110
|
-
* Analyze files and emit results as they complete
|
|
111
|
-
*
|
|
112
|
-
* @param files - Array of file paths to analyze
|
|
113
|
-
* @param analyzer - Analysis function
|
|
114
|
-
* @returns Promise that resolves when all files are analyzed
|
|
115
|
-
*/
|
|
116
|
-
analyze(files: string[], analyzer: (file: string) => Promise<T>): Promise<AnalysisSummary<T>>;
|
|
117
|
-
/**
|
|
118
|
-
* Analyze files in parallel and emit results as they complete
|
|
119
|
-
*
|
|
120
|
-
* @param files - Array of file paths to analyze
|
|
121
|
-
* @param analyzer - Analysis function
|
|
122
|
-
* @param concurrency - Maximum concurrent analyses (default: 4)
|
|
123
|
-
* @returns Promise that resolves when all files are analyzed
|
|
124
|
-
*/
|
|
125
|
-
analyzeParallel(files: string[], analyzer: (file: string) => Promise<T>, concurrency?: number): Promise<AnalysisSummary<T>>;
|
|
126
|
-
/**
|
|
127
|
-
* Get current progress
|
|
128
|
-
*/
|
|
129
|
-
getProgress(): AnalysisProgress;
|
|
130
|
-
/**
|
|
131
|
-
* Analyze a single file and emit events
|
|
132
|
-
*/
|
|
133
|
-
private analyzeFile;
|
|
134
|
-
/**
|
|
135
|
-
* Create analysis summary
|
|
136
|
-
*/
|
|
137
|
-
private createSummary;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Helper function to create a progress bar string
|
|
141
|
-
*
|
|
142
|
-
* @param progress - Progress info
|
|
143
|
-
* @param width - Width of progress bar (default: 40)
|
|
144
|
-
* @returns Progress bar string
|
|
145
|
-
*
|
|
146
|
-
* @example
|
|
147
|
-
* ```typescript
|
|
148
|
-
* const bar = createProgressBar({ completed: 50, total: 100, percentage: 50 });
|
|
149
|
-
* console.log(bar); // [#################### ] 50%
|
|
150
|
-
* ```
|
|
151
|
-
*/
|
|
152
|
-
export declare function createProgressBar(progress: AnalysisProgress, width?: number): string;
|
|
153
|
-
export { formatDuration };
|
|
154
|
-
/**
|
|
155
|
-
* Helper function to format summary
|
|
156
|
-
*
|
|
157
|
-
* @param summary - Analysis summary
|
|
158
|
-
* @returns Formatted summary string
|
|
159
|
-
*/
|
|
160
|
-
export declare function formatSummary<T>(summary: AnalysisSummary<T>): string;
|