@git.zone/tsdoc 1.6.0 → 1.6.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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/context/config-manager.js +2 -3
- package/dist_ts/context/enhanced-context.d.ts +2 -15
- package/dist_ts/context/enhanced-context.js +26 -191
- package/dist_ts/context/types.d.ts +2 -3
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/context/config-manager.ts +1 -2
- package/ts/context/enhanced-context.ts +29 -246
- package/ts/context/types.ts +2 -3
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tsdoc',
|
|
6
|
-
version: '1.6.
|
|
6
|
+
version: '1.6.1',
|
|
7
7
|
description: 'A comprehensive TypeScript documentation tool that leverages AI to generate and enhance project documentation, including dynamic README creation, API docs via TypeDoc, and smart commit message generation.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDhNQUE4TTtDQUM1TixDQUFBIn0=
|
|
@@ -67,7 +67,6 @@ export class ConfigManager {
|
|
|
67
67
|
directory: undefined // Will be set to .nogit/context-cache by ContextCache
|
|
68
68
|
},
|
|
69
69
|
analyzer: {
|
|
70
|
-
enabled: true,
|
|
71
70
|
useAIRefinement: false, // Disabled by default for now
|
|
72
71
|
aiModel: 'haiku'
|
|
73
72
|
},
|
|
@@ -260,7 +259,7 @@ export class ConfigManager {
|
|
|
260
259
|
* Get analyzer configuration
|
|
261
260
|
*/
|
|
262
261
|
getAnalyzerConfig() {
|
|
263
|
-
return this.config.analyzer || {
|
|
262
|
+
return this.config.analyzer || { useAIRefinement: false, aiModel: 'haiku' };
|
|
264
263
|
}
|
|
265
264
|
/**
|
|
266
265
|
* Get prioritization weights
|
|
@@ -290,4 +289,4 @@ export class ConfigManager {
|
|
|
290
289
|
this.configCache = null;
|
|
291
290
|
}
|
|
292
291
|
}
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb250ZXh0L2NvbmZpZy1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBYXpCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFNeEI7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNIO1FBaEJRLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBcUQsSUFBSSxDQUFDO1FBZ0IzRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQWtCO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixPQUFPO1lBQ0wsU0FBUyxFQUFFLE1BQU0sRUFBRSx1Q0FBdUM7WUFDMUQsV0FBVyxFQUFFLFNBQVM7WUFDdEIsb0JBQW9CLEVBQUU7Z0JBQ3BCLE1BQU0sRUFBRTtvQkFDTixJQUFJLEVBQUUsU0FBUztvQkFDZixZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO29CQUM3QixZQUFZLEVBQUUsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDO2lCQUN6QztnQkFD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
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
1
|
import type { ContextMode, IContextResult, TaskType, IFileMetadata } from './types.js';
|
|
3
2
|
/**
|
|
4
3
|
* Enhanced ProjectContext that supports context optimization strategies
|
|
@@ -32,18 +31,6 @@ export declare class EnhancedContext {
|
|
|
32
31
|
* @param maxTokens The maximum tokens to use
|
|
33
32
|
*/
|
|
34
33
|
setTokenBudget(maxTokens: number): void;
|
|
35
|
-
/**
|
|
36
|
-
* Gather files from the project
|
|
37
|
-
* @param includePaths Optional paths to include
|
|
38
|
-
* @param excludePaths Optional paths to exclude
|
|
39
|
-
*/
|
|
40
|
-
gatherFiles(includePaths?: string[], excludePaths?: string[]): Promise<Record<string, plugins.smartfile.SmartFile | plugins.smartfile.SmartFile[]>>;
|
|
41
|
-
/**
|
|
42
|
-
* Convert files to context string
|
|
43
|
-
* @param files The files to convert
|
|
44
|
-
* @param mode The context mode to use
|
|
45
|
-
*/
|
|
46
|
-
convertFilesToContext(files: plugins.smartfile.SmartFile[], mode?: ContextMode): Promise<string>;
|
|
47
34
|
/**
|
|
48
35
|
* Convert files to context with smart analysis and prioritization
|
|
49
36
|
* @param metadata - File metadata to analyze
|
|
@@ -53,8 +40,8 @@ export declare class EnhancedContext {
|
|
|
53
40
|
*/
|
|
54
41
|
convertFilesToContextWithAnalysis(metadata: IFileMetadata[], taskType: TaskType, mode?: ContextMode): Promise<string>;
|
|
55
42
|
/**
|
|
56
|
-
* Build context for the project
|
|
57
|
-
* @param taskType
|
|
43
|
+
* Build context for the project using smart analysis
|
|
44
|
+
* @param taskType Task type for context-aware prioritization (defaults to 'description')
|
|
58
45
|
*/
|
|
59
46
|
buildContext(taskType?: TaskType): Promise<IContextResult>;
|
|
60
47
|
/**
|
|
@@ -53,130 +53,6 @@ export class EnhancedContext {
|
|
|
53
53
|
setTokenBudget(maxTokens) {
|
|
54
54
|
this.tokenBudget = maxTokens;
|
|
55
55
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Gather files from the project
|
|
58
|
-
* @param includePaths Optional paths to include
|
|
59
|
-
* @param excludePaths Optional paths to exclude
|
|
60
|
-
*/
|
|
61
|
-
async gatherFiles(includePaths, excludePaths) {
|
|
62
|
-
const smartfilePackageJSON = await plugins.smartfile.SmartFile.fromFilePath(plugins.path.join(this.projectDir, 'package.json'), this.projectDir);
|
|
63
|
-
const smartfilesReadme = await plugins.smartfile.SmartFile.fromFilePath(plugins.path.join(this.projectDir, 'readme.md'), this.projectDir);
|
|
64
|
-
const smartfilesReadmeHints = await plugins.smartfile.SmartFile.fromFilePath(plugins.path.join(this.projectDir, 'readme.hints.md'), this.projectDir);
|
|
65
|
-
const smartfilesNpmextraJSON = await plugins.smartfile.SmartFile.fromFilePath(plugins.path.join(this.projectDir, 'npmextra.json'), this.projectDir);
|
|
66
|
-
// Use provided include paths or default to all TypeScript files
|
|
67
|
-
const includeGlobs = includePaths?.map(path => `${path}/**/*.ts`) || ['ts*/**/*.ts'];
|
|
68
|
-
// Get TypeScript files
|
|
69
|
-
const smartfilesModPromises = includeGlobs.map(glob => plugins.smartfile.fs.fileTreeToObject(this.projectDir, glob));
|
|
70
|
-
const smartfilesModArrays = await Promise.all(smartfilesModPromises);
|
|
71
|
-
// Flatten the arrays
|
|
72
|
-
const smartfilesMod = [];
|
|
73
|
-
smartfilesModArrays.forEach(array => {
|
|
74
|
-
smartfilesMod.push(...array);
|
|
75
|
-
});
|
|
76
|
-
// Get test files if not excluded
|
|
77
|
-
let smartfilesTest = [];
|
|
78
|
-
if (!excludePaths?.includes('test/')) {
|
|
79
|
-
smartfilesTest = await plugins.smartfile.fs.fileTreeToObject(this.projectDir, 'test/**/*.ts');
|
|
80
|
-
}
|
|
81
|
-
return {
|
|
82
|
-
smartfilePackageJSON,
|
|
83
|
-
smartfilesReadme,
|
|
84
|
-
smartfilesReadmeHints,
|
|
85
|
-
smartfilesNpmextraJSON,
|
|
86
|
-
smartfilesMod,
|
|
87
|
-
smartfilesTest,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Convert files to context string
|
|
92
|
-
* @param files The files to convert
|
|
93
|
-
* @param mode The context mode to use
|
|
94
|
-
*/
|
|
95
|
-
async convertFilesToContext(files, mode = this.contextMode) {
|
|
96
|
-
// Reset context result
|
|
97
|
-
this.contextResult = {
|
|
98
|
-
context: '',
|
|
99
|
-
tokenCount: 0,
|
|
100
|
-
includedFiles: [],
|
|
101
|
-
trimmedFiles: [],
|
|
102
|
-
excludedFiles: [],
|
|
103
|
-
tokenSavings: 0
|
|
104
|
-
};
|
|
105
|
-
let totalTokenCount = 0;
|
|
106
|
-
let totalOriginalTokens = 0;
|
|
107
|
-
// Convert SmartFile objects to IFileMetadata for analysis
|
|
108
|
-
const metadata = files.map(sf => ({
|
|
109
|
-
path: sf.path,
|
|
110
|
-
relativePath: sf.relative,
|
|
111
|
-
size: sf.contents.toString().length,
|
|
112
|
-
mtime: Date.now(), // SmartFile doesn't expose mtime, use current time
|
|
113
|
-
estimatedTokens: this.countTokens(sf.contents.toString()),
|
|
114
|
-
importanceScore: 0
|
|
115
|
-
}));
|
|
116
|
-
// Analyze files using ContextAnalyzer to get smart prioritization
|
|
117
|
-
// (Note: This requires task type which we'll pass from buildContext)
|
|
118
|
-
// For now, sort files by estimated tokens (smaller files first for better efficiency)
|
|
119
|
-
const sortedFiles = [...files].sort((a, b) => {
|
|
120
|
-
const aTokens = this.countTokens(a.contents.toString());
|
|
121
|
-
const bTokens = this.countTokens(b.contents.toString());
|
|
122
|
-
return aTokens - bTokens;
|
|
123
|
-
});
|
|
124
|
-
const processedFiles = [];
|
|
125
|
-
for (const smartfile of sortedFiles) {
|
|
126
|
-
// Calculate original token count
|
|
127
|
-
const originalContent = smartfile.contents.toString();
|
|
128
|
-
const originalTokenCount = this.countTokens(originalContent);
|
|
129
|
-
totalOriginalTokens += originalTokenCount;
|
|
130
|
-
// Apply trimming based on mode
|
|
131
|
-
let processedContent = originalContent;
|
|
132
|
-
if (mode !== 'full') {
|
|
133
|
-
processedContent = this.trimmer.trimFile(smartfile.relative, originalContent, mode);
|
|
134
|
-
}
|
|
135
|
-
// Calculate new token count
|
|
136
|
-
const processedTokenCount = this.countTokens(processedContent);
|
|
137
|
-
// Check if we have budget for this file
|
|
138
|
-
if (totalTokenCount + processedTokenCount > this.tokenBudget) {
|
|
139
|
-
// We don't have budget for this file
|
|
140
|
-
this.contextResult.excludedFiles.push({
|
|
141
|
-
path: smartfile.path,
|
|
142
|
-
contents: originalContent,
|
|
143
|
-
relativePath: smartfile.relative,
|
|
144
|
-
tokenCount: originalTokenCount
|
|
145
|
-
});
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
// Format the file for context
|
|
149
|
-
const formattedContent = `
|
|
150
|
-
====== START OF FILE ${smartfile.relative} ======
|
|
151
|
-
|
|
152
|
-
${processedContent}
|
|
153
|
-
|
|
154
|
-
====== END OF FILE ${smartfile.relative} ======
|
|
155
|
-
`;
|
|
156
|
-
processedFiles.push(formattedContent);
|
|
157
|
-
totalTokenCount += processedTokenCount;
|
|
158
|
-
// Track file in appropriate list
|
|
159
|
-
const fileInfo = {
|
|
160
|
-
path: smartfile.path,
|
|
161
|
-
contents: processedContent,
|
|
162
|
-
relativePath: smartfile.relative,
|
|
163
|
-
tokenCount: processedTokenCount
|
|
164
|
-
};
|
|
165
|
-
if (mode === 'full' || processedContent === originalContent) {
|
|
166
|
-
this.contextResult.includedFiles.push(fileInfo);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
this.contextResult.trimmedFiles.push(fileInfo);
|
|
170
|
-
this.contextResult.tokenSavings += (originalTokenCount - processedTokenCount);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Join all processed files
|
|
174
|
-
const context = processedFiles.join('\n');
|
|
175
|
-
// Update context result
|
|
176
|
-
this.contextResult.context = context;
|
|
177
|
-
this.contextResult.tokenCount = totalTokenCount;
|
|
178
|
-
return context;
|
|
179
|
-
}
|
|
180
56
|
/**
|
|
181
57
|
* Convert files to context with smart analysis and prioritization
|
|
182
58
|
* @param metadata - File metadata to analyze
|
|
@@ -300,79 +176,38 @@ ${processedContent}
|
|
|
300
176
|
return context;
|
|
301
177
|
}
|
|
302
178
|
/**
|
|
303
|
-
* Build context for the project
|
|
304
|
-
* @param taskType
|
|
179
|
+
* Build context for the project using smart analysis
|
|
180
|
+
* @param taskType Task type for context-aware prioritization (defaults to 'description')
|
|
305
181
|
*/
|
|
306
182
|
async buildContext(taskType) {
|
|
307
183
|
// Initialize if needed
|
|
308
184
|
if (this.tokenBudget === 0) {
|
|
309
185
|
await this.initialize();
|
|
310
186
|
}
|
|
311
|
-
//
|
|
312
|
-
if
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
// Check if analyzer is enabled in config
|
|
319
|
-
const analyzerConfig = this.configManager.getAnalyzerConfig();
|
|
320
|
-
const useAnalyzer = analyzerConfig.enabled && taskType;
|
|
321
|
-
if (useAnalyzer) {
|
|
322
|
-
// Use new smart context building with lazy loading and analysis
|
|
323
|
-
const taskConfig = this.configManager.getTaskConfig(taskType);
|
|
324
|
-
// Build globs for scanning
|
|
325
|
-
const includeGlobs = taskConfig?.includePaths?.map(p => `${p}/**/*.ts`) || [
|
|
326
|
-
'ts/**/*.ts',
|
|
327
|
-
'ts*/**/*.ts'
|
|
328
|
-
];
|
|
329
|
-
// Add config files
|
|
330
|
-
const configGlobs = [
|
|
331
|
-
'package.json',
|
|
332
|
-
'readme.md',
|
|
333
|
-
'readme.hints.md',
|
|
334
|
-
'npmextra.json'
|
|
335
|
-
];
|
|
336
|
-
// Scan files for metadata (fast, doesn't load contents)
|
|
337
|
-
const metadata = await this.lazyLoader.scanFiles([...configGlobs, ...includeGlobs]);
|
|
338
|
-
// Use analyzer to build context with smart prioritization
|
|
339
|
-
await this.convertFilesToContextWithAnalysis(metadata, taskType, this.contextMode);
|
|
340
|
-
}
|
|
341
|
-
else {
|
|
342
|
-
// Fall back to old method for backward compatibility
|
|
343
|
-
const taskConfig = taskType ? this.configManager.getTaskConfig(taskType) : undefined;
|
|
344
|
-
const files = await this.gatherFiles(taskConfig?.includePaths, taskConfig?.excludePaths);
|
|
345
|
-
// Convert files to context
|
|
346
|
-
// Create an array of all files to process
|
|
347
|
-
const allFiles = [];
|
|
348
|
-
// Add individual files
|
|
349
|
-
if (files.smartfilePackageJSON)
|
|
350
|
-
allFiles.push(files.smartfilePackageJSON);
|
|
351
|
-
if (files.smartfilesReadme)
|
|
352
|
-
allFiles.push(files.smartfilesReadme);
|
|
353
|
-
if (files.smartfilesReadmeHints)
|
|
354
|
-
allFiles.push(files.smartfilesReadmeHints);
|
|
355
|
-
if (files.smartfilesNpmextraJSON)
|
|
356
|
-
allFiles.push(files.smartfilesNpmextraJSON);
|
|
357
|
-
// Add arrays of files
|
|
358
|
-
if (files.smartfilesMod) {
|
|
359
|
-
if (Array.isArray(files.smartfilesMod)) {
|
|
360
|
-
allFiles.push(...files.smartfilesMod);
|
|
361
|
-
}
|
|
362
|
-
else {
|
|
363
|
-
allFiles.push(files.smartfilesMod);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
if (files.smartfilesTest) {
|
|
367
|
-
if (Array.isArray(files.smartfilesTest)) {
|
|
368
|
-
allFiles.push(...files.smartfilesTest);
|
|
369
|
-
}
|
|
370
|
-
else {
|
|
371
|
-
allFiles.push(files.smartfilesTest);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
await this.convertFilesToContext(allFiles);
|
|
187
|
+
// Smart context building always requires a task type for optimal prioritization
|
|
188
|
+
// Default to 'description' if not provided
|
|
189
|
+
const effectiveTaskType = taskType || 'description';
|
|
190
|
+
// Get task-specific configuration
|
|
191
|
+
const taskConfig = this.configManager.getTaskConfig(effectiveTaskType);
|
|
192
|
+
if (taskConfig.mode) {
|
|
193
|
+
this.setContextMode(taskConfig.mode);
|
|
375
194
|
}
|
|
195
|
+
// Build globs for scanning
|
|
196
|
+
const includeGlobs = taskConfig?.includePaths?.map(p => `${p}/**/*.ts`) || [
|
|
197
|
+
'ts/**/*.ts',
|
|
198
|
+
'ts*/**/*.ts'
|
|
199
|
+
];
|
|
200
|
+
// Add config files
|
|
201
|
+
const configGlobs = [
|
|
202
|
+
'package.json',
|
|
203
|
+
'readme.md',
|
|
204
|
+
'readme.hints.md',
|
|
205
|
+
'npmextra.json'
|
|
206
|
+
];
|
|
207
|
+
// Scan files for metadata (fast, doesn't load contents)
|
|
208
|
+
const metadata = await this.lazyLoader.scanFiles([...configGlobs, ...includeGlobs]);
|
|
209
|
+
// Use smart analyzer to build context with intelligent prioritization
|
|
210
|
+
await this.convertFilesToContextWithAnalysis(metadata, effectiveTaskType, this.contextMode);
|
|
376
211
|
return this.contextResult;
|
|
377
212
|
}
|
|
378
213
|
/**
|
|
@@ -437,4 +272,4 @@ ${gitDiff}
|
|
|
437
272
|
};
|
|
438
273
|
}
|
|
439
274
|
}
|
|
440
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5oYW5jZWQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NvbnRleHQvZW5oYW5jZWQtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFrQjFCOzs7T0FHRztJQUNILFlBQVksYUFBcUI7UUFmekIsZ0JBQVcsR0FBZ0IsU0FBUyxDQUFDO1FBQ3JDLGdCQUFXLEdBQVcsTUFBTSxDQUFDLENBQUMsc0JBQXNCO1FBQ3BELGtCQUFhLEdBQW1CO1lBQ3RDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsVUFBVSxFQUFFLENBQUM7WUFDYixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsRUFBRTtZQUNoQixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsQ0FBQztTQUNoQixDQUFDO1FBT0EsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENB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
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5oYW5jZWQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NvbnRleHQvZW5oYW5jZWQtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFrQjFCOzs7T0FHRztJQUNILFlBQVksYUFBcUI7UUFmekIsZ0JBQVcsR0FBZ0IsU0FBUyxDQUFDO1FBQ3JDLGdCQUFXLEdBQVcsTUFBTSxDQUFDLENBQUMsc0JBQXNCO1FBQ3BELGtCQUFhLEdBQW1CO1lBQ3RDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsVUFBVSxFQUFFLENBQUM7WUFDYixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsRUFBRTtZQUNoQixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsQ0FBQztTQUNoQixDQUFDO1FBT0EsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENB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
|
|
@@ -78,11 +78,10 @@ export interface ICacheConfig {
|
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
80
|
* Analyzer configuration
|
|
81
|
+
* Note: Smart analysis is always enabled; this config only controls advanced options
|
|
81
82
|
*/
|
|
82
83
|
export interface IAnalyzerConfig {
|
|
83
|
-
/** Whether
|
|
84
|
-
enabled?: boolean;
|
|
85
|
-
/** Whether to use AI refinement for selection */
|
|
84
|
+
/** Whether to use AI refinement for selection (advanced, disabled by default) */
|
|
86
85
|
useAIRefinement?: boolean;
|
|
87
86
|
/** AI model to use for refinement */
|
|
88
87
|
aiModel?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tsdoc",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A comprehensive TypeScript documentation tool that leverages AI to generate and enhance project documentation, including dynamic README creation, API docs via TypeDoc, and smart commit message generation.",
|
|
6
6
|
"type": "module",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tsdoc',
|
|
6
|
-
version: '1.6.
|
|
6
|
+
version: '1.6.1',
|
|
7
7
|
description: 'A comprehensive TypeScript documentation tool that leverages AI to generate and enhance project documentation, including dynamic README creation, API docs via TypeDoc, and smart commit message generation.'
|
|
8
8
|
}
|
|
@@ -85,7 +85,6 @@ export class ConfigManager {
|
|
|
85
85
|
directory: undefined // Will be set to .nogit/context-cache by ContextCache
|
|
86
86
|
},
|
|
87
87
|
analyzer: {
|
|
88
|
-
enabled: true,
|
|
89
88
|
useAIRefinement: false, // Disabled by default for now
|
|
90
89
|
aiModel: 'haiku'
|
|
91
90
|
},
|
|
@@ -306,7 +305,7 @@ export class ConfigManager {
|
|
|
306
305
|
* Get analyzer configuration
|
|
307
306
|
*/
|
|
308
307
|
public getAnalyzerConfig(): IAnalyzerConfig {
|
|
309
|
-
return this.config.analyzer || {
|
|
308
|
+
return this.config.analyzer || { useAIRefinement: false, aiModel: 'haiku' };
|
|
310
309
|
}
|
|
311
310
|
|
|
312
311
|
/**
|
|
@@ -69,181 +69,7 @@ export class EnhancedContext {
|
|
|
69
69
|
public setTokenBudget(maxTokens: number): void {
|
|
70
70
|
this.tokenBudget = maxTokens;
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Gather files from the project
|
|
75
|
-
* @param includePaths Optional paths to include
|
|
76
|
-
* @param excludePaths Optional paths to exclude
|
|
77
|
-
*/
|
|
78
|
-
public async gatherFiles(includePaths?: string[], excludePaths?: string[]): Promise<Record<string, plugins.smartfile.SmartFile | plugins.smartfile.SmartFile[]>> {
|
|
79
|
-
const smartfilePackageJSON = await plugins.smartfile.SmartFile.fromFilePath(
|
|
80
|
-
plugins.path.join(this.projectDir, 'package.json'),
|
|
81
|
-
this.projectDir,
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
const smartfilesReadme = await plugins.smartfile.SmartFile.fromFilePath(
|
|
85
|
-
plugins.path.join(this.projectDir, 'readme.md'),
|
|
86
|
-
this.projectDir,
|
|
87
|
-
);
|
|
88
72
|
|
|
89
|
-
const smartfilesReadmeHints = await plugins.smartfile.SmartFile.fromFilePath(
|
|
90
|
-
plugins.path.join(this.projectDir, 'readme.hints.md'),
|
|
91
|
-
this.projectDir,
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
const smartfilesNpmextraJSON = await plugins.smartfile.SmartFile.fromFilePath(
|
|
95
|
-
plugins.path.join(this.projectDir, 'npmextra.json'),
|
|
96
|
-
this.projectDir,
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
// Use provided include paths or default to all TypeScript files
|
|
100
|
-
const includeGlobs = includePaths?.map(path => `${path}/**/*.ts`) || ['ts*/**/*.ts'];
|
|
101
|
-
|
|
102
|
-
// Get TypeScript files
|
|
103
|
-
const smartfilesModPromises = includeGlobs.map(glob =>
|
|
104
|
-
plugins.smartfile.fs.fileTreeToObject(this.projectDir, glob)
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
const smartfilesModArrays = await Promise.all(smartfilesModPromises);
|
|
108
|
-
|
|
109
|
-
// Flatten the arrays
|
|
110
|
-
const smartfilesMod: plugins.smartfile.SmartFile[] = [];
|
|
111
|
-
smartfilesModArrays.forEach(array => {
|
|
112
|
-
smartfilesMod.push(...array);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
// Get test files if not excluded
|
|
116
|
-
let smartfilesTest: plugins.smartfile.SmartFile[] = [];
|
|
117
|
-
if (!excludePaths?.includes('test/')) {
|
|
118
|
-
smartfilesTest = await plugins.smartfile.fs.fileTreeToObject(
|
|
119
|
-
this.projectDir,
|
|
120
|
-
'test/**/*.ts',
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return {
|
|
125
|
-
smartfilePackageJSON,
|
|
126
|
-
smartfilesReadme,
|
|
127
|
-
smartfilesReadmeHints,
|
|
128
|
-
smartfilesNpmextraJSON,
|
|
129
|
-
smartfilesMod,
|
|
130
|
-
smartfilesTest,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Convert files to context string
|
|
136
|
-
* @param files The files to convert
|
|
137
|
-
* @param mode The context mode to use
|
|
138
|
-
*/
|
|
139
|
-
public async convertFilesToContext(
|
|
140
|
-
files: plugins.smartfile.SmartFile[],
|
|
141
|
-
mode: ContextMode = this.contextMode
|
|
142
|
-
): Promise<string> {
|
|
143
|
-
// Reset context result
|
|
144
|
-
this.contextResult = {
|
|
145
|
-
context: '',
|
|
146
|
-
tokenCount: 0,
|
|
147
|
-
includedFiles: [],
|
|
148
|
-
trimmedFiles: [],
|
|
149
|
-
excludedFiles: [],
|
|
150
|
-
tokenSavings: 0
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
let totalTokenCount = 0;
|
|
154
|
-
let totalOriginalTokens = 0;
|
|
155
|
-
|
|
156
|
-
// Convert SmartFile objects to IFileMetadata for analysis
|
|
157
|
-
const metadata: IFileMetadata[] = files.map(sf => ({
|
|
158
|
-
path: sf.path,
|
|
159
|
-
relativePath: sf.relative,
|
|
160
|
-
size: sf.contents.toString().length,
|
|
161
|
-
mtime: Date.now(), // SmartFile doesn't expose mtime, use current time
|
|
162
|
-
estimatedTokens: this.countTokens(sf.contents.toString()),
|
|
163
|
-
importanceScore: 0
|
|
164
|
-
}));
|
|
165
|
-
|
|
166
|
-
// Analyze files using ContextAnalyzer to get smart prioritization
|
|
167
|
-
// (Note: This requires task type which we'll pass from buildContext)
|
|
168
|
-
// For now, sort files by estimated tokens (smaller files first for better efficiency)
|
|
169
|
-
const sortedFiles = [...files].sort((a, b) => {
|
|
170
|
-
const aTokens = this.countTokens(a.contents.toString());
|
|
171
|
-
const bTokens = this.countTokens(b.contents.toString());
|
|
172
|
-
return aTokens - bTokens;
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
const processedFiles: string[] = [];
|
|
176
|
-
|
|
177
|
-
for (const smartfile of sortedFiles) {
|
|
178
|
-
// Calculate original token count
|
|
179
|
-
const originalContent = smartfile.contents.toString();
|
|
180
|
-
const originalTokenCount = this.countTokens(originalContent);
|
|
181
|
-
totalOriginalTokens += originalTokenCount;
|
|
182
|
-
|
|
183
|
-
// Apply trimming based on mode
|
|
184
|
-
let processedContent = originalContent;
|
|
185
|
-
|
|
186
|
-
if (mode !== 'full') {
|
|
187
|
-
processedContent = this.trimmer.trimFile(
|
|
188
|
-
smartfile.relative,
|
|
189
|
-
originalContent,
|
|
190
|
-
mode
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// Calculate new token count
|
|
195
|
-
const processedTokenCount = this.countTokens(processedContent);
|
|
196
|
-
|
|
197
|
-
// Check if we have budget for this file
|
|
198
|
-
if (totalTokenCount + processedTokenCount > this.tokenBudget) {
|
|
199
|
-
// We don't have budget for this file
|
|
200
|
-
this.contextResult.excludedFiles.push({
|
|
201
|
-
path: smartfile.path,
|
|
202
|
-
contents: originalContent,
|
|
203
|
-
relativePath: smartfile.relative,
|
|
204
|
-
tokenCount: originalTokenCount
|
|
205
|
-
});
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// Format the file for context
|
|
210
|
-
const formattedContent = `
|
|
211
|
-
====== START OF FILE ${smartfile.relative} ======
|
|
212
|
-
|
|
213
|
-
${processedContent}
|
|
214
|
-
|
|
215
|
-
====== END OF FILE ${smartfile.relative} ======
|
|
216
|
-
`;
|
|
217
|
-
|
|
218
|
-
processedFiles.push(formattedContent);
|
|
219
|
-
totalTokenCount += processedTokenCount;
|
|
220
|
-
|
|
221
|
-
// Track file in appropriate list
|
|
222
|
-
const fileInfo: IFileInfo = {
|
|
223
|
-
path: smartfile.path,
|
|
224
|
-
contents: processedContent,
|
|
225
|
-
relativePath: smartfile.relative,
|
|
226
|
-
tokenCount: processedTokenCount
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
if (mode === 'full' || processedContent === originalContent) {
|
|
230
|
-
this.contextResult.includedFiles.push(fileInfo);
|
|
231
|
-
} else {
|
|
232
|
-
this.contextResult.trimmedFiles.push(fileInfo);
|
|
233
|
-
this.contextResult.tokenSavings += (originalTokenCount - processedTokenCount);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// Join all processed files
|
|
238
|
-
const context = processedFiles.join('\n');
|
|
239
|
-
|
|
240
|
-
// Update context result
|
|
241
|
-
this.contextResult.context = context;
|
|
242
|
-
this.contextResult.tokenCount = totalTokenCount;
|
|
243
|
-
|
|
244
|
-
return context;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
73
|
/**
|
|
248
74
|
* Convert files to context with smart analysis and prioritization
|
|
249
75
|
* @param metadata - File metadata to analyze
|
|
@@ -393,88 +219,45 @@ ${processedContent}
|
|
|
393
219
|
}
|
|
394
220
|
|
|
395
221
|
/**
|
|
396
|
-
* Build context for the project
|
|
397
|
-
* @param taskType
|
|
222
|
+
* Build context for the project using smart analysis
|
|
223
|
+
* @param taskType Task type for context-aware prioritization (defaults to 'description')
|
|
398
224
|
*/
|
|
399
225
|
public async buildContext(taskType?: TaskType): Promise<IContextResult> {
|
|
400
226
|
// Initialize if needed
|
|
401
227
|
if (this.tokenBudget === 0) {
|
|
402
228
|
await this.initialize();
|
|
403
229
|
}
|
|
404
|
-
|
|
405
|
-
// Get task-specific configuration if a task type is provided
|
|
406
|
-
if (taskType) {
|
|
407
|
-
const taskConfig = this.configManager.getTaskConfig(taskType);
|
|
408
|
-
if (taskConfig.mode) {
|
|
409
|
-
this.setContextMode(taskConfig.mode);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
// Check if analyzer is enabled in config
|
|
414
|
-
const analyzerConfig = this.configManager.getAnalyzerConfig();
|
|
415
|
-
const useAnalyzer = analyzerConfig.enabled && taskType;
|
|
416
|
-
|
|
417
|
-
if (useAnalyzer) {
|
|
418
|
-
// Use new smart context building with lazy loading and analysis
|
|
419
|
-
const taskConfig = this.configManager.getTaskConfig(taskType!);
|
|
420
|
-
|
|
421
|
-
// Build globs for scanning
|
|
422
|
-
const includeGlobs = taskConfig?.includePaths?.map(p => `${p}/**/*.ts`) || [
|
|
423
|
-
'ts/**/*.ts',
|
|
424
|
-
'ts*/**/*.ts'
|
|
425
|
-
];
|
|
426
|
-
|
|
427
|
-
// Add config files
|
|
428
|
-
const configGlobs = [
|
|
429
|
-
'package.json',
|
|
430
|
-
'readme.md',
|
|
431
|
-
'readme.hints.md',
|
|
432
|
-
'npmextra.json'
|
|
433
|
-
];
|
|
434
|
-
|
|
435
|
-
// Scan files for metadata (fast, doesn't load contents)
|
|
436
|
-
const metadata = await this.lazyLoader.scanFiles([...configGlobs, ...includeGlobs]);
|
|
437
|
-
|
|
438
|
-
// Use analyzer to build context with smart prioritization
|
|
439
|
-
await this.convertFilesToContextWithAnalysis(metadata, taskType!, this.contextMode);
|
|
440
|
-
} else {
|
|
441
|
-
// Fall back to old method for backward compatibility
|
|
442
|
-
const taskConfig = taskType ? this.configManager.getTaskConfig(taskType) : undefined;
|
|
443
|
-
const files = await this.gatherFiles(
|
|
444
|
-
taskConfig?.includePaths,
|
|
445
|
-
taskConfig?.excludePaths
|
|
446
|
-
);
|
|
447
|
-
|
|
448
|
-
// Convert files to context
|
|
449
|
-
// Create an array of all files to process
|
|
450
|
-
const allFiles: plugins.smartfile.SmartFile[] = [];
|
|
451
|
-
|
|
452
|
-
// Add individual files
|
|
453
|
-
if (files.smartfilePackageJSON) allFiles.push(files.smartfilePackageJSON as plugins.smartfile.SmartFile);
|
|
454
|
-
if (files.smartfilesReadme) allFiles.push(files.smartfilesReadme as plugins.smartfile.SmartFile);
|
|
455
|
-
if (files.smartfilesReadmeHints) allFiles.push(files.smartfilesReadmeHints as plugins.smartfile.SmartFile);
|
|
456
|
-
if (files.smartfilesNpmextraJSON) allFiles.push(files.smartfilesNpmextraJSON as plugins.smartfile.SmartFile);
|
|
457
|
-
|
|
458
|
-
// Add arrays of files
|
|
459
|
-
if (files.smartfilesMod) {
|
|
460
|
-
if (Array.isArray(files.smartfilesMod)) {
|
|
461
|
-
allFiles.push(...files.smartfilesMod);
|
|
462
|
-
} else {
|
|
463
|
-
allFiles.push(files.smartfilesMod);
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
230
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
} else {
|
|
471
|
-
allFiles.push(files.smartfilesTest);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
231
|
+
// Smart context building always requires a task type for optimal prioritization
|
|
232
|
+
// Default to 'description' if not provided
|
|
233
|
+
const effectiveTaskType = taskType || 'description';
|
|
474
234
|
|
|
475
|
-
|
|
235
|
+
// Get task-specific configuration
|
|
236
|
+
const taskConfig = this.configManager.getTaskConfig(effectiveTaskType);
|
|
237
|
+
if (taskConfig.mode) {
|
|
238
|
+
this.setContextMode(taskConfig.mode);
|
|
476
239
|
}
|
|
477
240
|
|
|
241
|
+
// Build globs for scanning
|
|
242
|
+
const includeGlobs = taskConfig?.includePaths?.map(p => `${p}/**/*.ts`) || [
|
|
243
|
+
'ts/**/*.ts',
|
|
244
|
+
'ts*/**/*.ts'
|
|
245
|
+
];
|
|
246
|
+
|
|
247
|
+
// Add config files
|
|
248
|
+
const configGlobs = [
|
|
249
|
+
'package.json',
|
|
250
|
+
'readme.md',
|
|
251
|
+
'readme.hints.md',
|
|
252
|
+
'npmextra.json'
|
|
253
|
+
];
|
|
254
|
+
|
|
255
|
+
// Scan files for metadata (fast, doesn't load contents)
|
|
256
|
+
const metadata = await this.lazyLoader.scanFiles([...configGlobs, ...includeGlobs]);
|
|
257
|
+
|
|
258
|
+
// Use smart analyzer to build context with intelligent prioritization
|
|
259
|
+
await this.convertFilesToContextWithAnalysis(metadata, effectiveTaskType, this.contextMode);
|
|
260
|
+
|
|
478
261
|
return this.contextResult;
|
|
479
262
|
}
|
|
480
263
|
|
package/ts/context/types.ts
CHANGED
|
@@ -84,11 +84,10 @@ export interface ICacheConfig {
|
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Analyzer configuration
|
|
87
|
+
* Note: Smart analysis is always enabled; this config only controls advanced options
|
|
87
88
|
*/
|
|
88
89
|
export interface IAnalyzerConfig {
|
|
89
|
-
/** Whether
|
|
90
|
-
enabled?: boolean;
|
|
91
|
-
/** Whether to use AI refinement for selection */
|
|
90
|
+
/** Whether to use AI refinement for selection (advanced, disabled by default) */
|
|
92
91
|
useAIRefinement?: boolean;
|
|
93
92
|
/** AI model to use for refinement */
|
|
94
93
|
aiModel?: string;
|