@git.zone/tsdoc 1.11.1 → 1.11.2
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/aidocs_classes/commit.js +27 -34
- package/dist_ts/aidocs_classes/description.js +68 -29
- package/dist_ts/aidocs_classes/projectcontext.d.ts +5 -5
- package/dist_ts/aidocs_classes/projectcontext.js +8 -16
- package/dist_ts/aidocs_classes/readme.js +156 -88
- package/dist_ts/classes.aidoc.d.ts +10 -6
- package/dist_ts/classes.aidoc.js +17 -11
- package/dist_ts/classes.diffprocessor.js +284 -0
- package/dist_ts/cli.js +21 -92
- package/dist_ts/plugins.d.ts +1 -2
- package/dist_ts/plugins.js +2 -3
- package/package.json +2 -3
- package/ts/aidocs_classes/commit.ts +26 -41
- package/ts/aidocs_classes/description.ts +72 -34
- package/ts/aidocs_classes/projectcontext.ts +7 -14
- package/ts/aidocs_classes/readme.ts +168 -93
- package/ts/classes.aidoc.ts +18 -11
- package/ts/cli.ts +20 -100
- package/ts/plugins.ts +1 -2
- package/dist_ts/context/config-manager.d.ts +0 -83
- package/dist_ts/context/config-manager.js +0 -318
- package/dist_ts/context/context-analyzer.d.ts +0 -73
- package/dist_ts/context/context-analyzer.js +0 -311
- package/dist_ts/context/context-cache.d.ts +0 -73
- package/dist_ts/context/context-cache.js +0 -239
- package/dist_ts/context/context-trimmer.d.ts +0 -60
- package/dist_ts/context/context-trimmer.js +0 -258
- package/dist_ts/context/diff-processor.js +0 -284
- package/dist_ts/context/enhanced-context.d.ts +0 -73
- package/dist_ts/context/enhanced-context.js +0 -275
- package/dist_ts/context/index.d.ts +0 -11
- package/dist_ts/context/index.js +0 -12
- package/dist_ts/context/iterative-context-builder.d.ts +0 -62
- package/dist_ts/context/iterative-context-builder.js +0 -395
- package/dist_ts/context/lazy-file-loader.d.ts +0 -60
- package/dist_ts/context/lazy-file-loader.js +0 -182
- package/dist_ts/context/task-context-factory.d.ts +0 -48
- package/dist_ts/context/task-context-factory.js +0 -86
- package/dist_ts/context/types.d.ts +0 -301
- package/dist_ts/context/types.js +0 -2
- package/dist_ts/tsdoc.classes.typedoc.d.ts +0 -10
- package/dist_ts/tsdoc.classes.typedoc.js +0 -48
- package/dist_ts/tsdoc.cli.d.ts +0 -1
- package/dist_ts/tsdoc.cli.js +0 -32
- package/dist_ts/tsdoc.logging.d.ts +0 -2
- package/dist_ts/tsdoc.logging.js +0 -14
- package/dist_ts/tsdoc.paths.d.ts +0 -8
- package/dist_ts/tsdoc.paths.js +0 -12
- package/dist_ts/tsdoc.plugins.d.ts +0 -11
- package/dist_ts/tsdoc.plugins.js +0 -15
- package/ts/context/config-manager.ts +0 -369
- package/ts/context/context-analyzer.ts +0 -391
- package/ts/context/context-cache.ts +0 -286
- package/ts/context/context-trimmer.ts +0 -310
- package/ts/context/enhanced-context.ts +0 -332
- package/ts/context/index.ts +0 -70
- package/ts/context/iterative-context-builder.ts +0 -512
- package/ts/context/lazy-file-loader.ts +0 -207
- package/ts/context/task-context-factory.ts +0 -120
- package/ts/context/types.ts +0 -324
- /package/dist_ts/{context/diff-processor.d.ts → classes.diffprocessor.d.ts} +0 -0
- /package/ts/{context/diff-processor.ts → classes.diffprocessor.ts} +0 -0
package/ts/cli.ts
CHANGED
|
@@ -4,7 +4,6 @@ import { logger } from './logging.js';
|
|
|
4
4
|
|
|
5
5
|
import { TypeDoc } from './classes.typedoc.js';
|
|
6
6
|
import { AiDoc } from './classes.aidoc.js';
|
|
7
|
-
import * as context from './context/index.js';
|
|
8
7
|
|
|
9
8
|
export const run = async () => {
|
|
10
9
|
const tsdocCli = new plugins.smartcli.Smartcli();
|
|
@@ -32,17 +31,6 @@ export const run = async () => {
|
|
|
32
31
|
const aidocInstance = new AiDoc();
|
|
33
32
|
await aidocInstance.start();
|
|
34
33
|
|
|
35
|
-
// Get context token count if requested
|
|
36
|
-
if (argvArg.tokens || argvArg.showTokens) {
|
|
37
|
-
logger.log('info', `Calculating context token count...`);
|
|
38
|
-
const tokenCount = await aidocInstance.getProjectContextTokenCount(paths.cwd);
|
|
39
|
-
logger.log('ok', `Total context token count: ${tokenCount}`);
|
|
40
|
-
|
|
41
|
-
if (argvArg.tokensOnly) {
|
|
42
|
-
return; // Exit early if we only want token count
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
34
|
logger.log('info', `Generating new readme...`);
|
|
47
35
|
logger.log('info', `This may take some time...`);
|
|
48
36
|
await aidocInstance.buildReadme(paths.cwd);
|
|
@@ -51,102 +39,34 @@ export const run = async () => {
|
|
|
51
39
|
await aidocInstance.buildDescription(paths.cwd);
|
|
52
40
|
});
|
|
53
41
|
|
|
54
|
-
tsdocCli.addCommand('
|
|
42
|
+
tsdocCli.addCommand('readme').subscribe(async (argvArg) => {
|
|
55
43
|
const aidocInstance = new AiDoc();
|
|
56
44
|
await aidocInstance.start();
|
|
57
45
|
|
|
58
|
-
logger.log('info', `
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (argvArg.task) {
|
|
63
|
-
if (['readme', 'commit', 'description'].includes(argvArg.task)) {
|
|
64
|
-
taskType = argvArg.task as context.TaskType;
|
|
65
|
-
} else {
|
|
66
|
-
logger.log('warn', `Unknown task type: ${argvArg.task}. Using default (readme).`);
|
|
67
|
-
taskType = 'readme';
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
// Default to readme if no task specified
|
|
71
|
-
taskType = 'readme';
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Use iterative context building
|
|
75
|
-
const taskFactory = new context.TaskContextFactory(paths.cwd);
|
|
76
|
-
await taskFactory.initialize();
|
|
77
|
-
|
|
78
|
-
let contextResult: context.IIterativeContextResult;
|
|
46
|
+
logger.log('info', `Generating new readme...`);
|
|
47
|
+
logger.log('info', `This may take some time...`);
|
|
48
|
+
await aidocInstance.buildReadme(paths.cwd);
|
|
49
|
+
});
|
|
79
50
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
51
|
+
tsdocCli.addCommand('description').subscribe(async (argvArg) => {
|
|
52
|
+
const aidocInstance = new AiDoc();
|
|
53
|
+
await aidocInstance.start();
|
|
83
54
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
logger.log('info', ` Token savings: ${data.savings}`);
|
|
89
|
-
logger.log('info', ` Files: ${data.includedFiles} included, ${data.trimmedFiles} trimmed, ${data.excludedFiles} excluded`);
|
|
55
|
+
logger.log('info', `Generating new description and keywords...`);
|
|
56
|
+
logger.log('info', `This may take some time...`);
|
|
57
|
+
await aidocInstance.buildDescription(paths.cwd);
|
|
58
|
+
});
|
|
90
59
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
60
|
+
tsdocCli.addCommand('commit').subscribe(async (argvArg) => {
|
|
61
|
+
const aidocInstance = new AiDoc();
|
|
62
|
+
await aidocInstance.start();
|
|
95
63
|
|
|
96
|
-
|
|
97
|
-
|
|
64
|
+
logger.log('info', `Generating commit message...`);
|
|
65
|
+
logger.log('info', `This may take some time...`);
|
|
66
|
+
const commitObject = await aidocInstance.buildNextCommitObject(paths.cwd);
|
|
98
67
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
// Display results
|
|
103
|
-
logger.log('ok', `Total context token count: ${contextResult.tokenCount}`);
|
|
104
|
-
logger.log('info', `Files included: ${contextResult.includedFiles.length}`);
|
|
105
|
-
logger.log('info', `Files trimmed: ${contextResult.trimmedFiles.length}`);
|
|
106
|
-
logger.log('info', `Files excluded: ${contextResult.excludedFiles.length}`);
|
|
107
|
-
logger.log('info', `Token savings: ${contextResult.tokenSavings}`);
|
|
108
|
-
|
|
109
|
-
if (argvArg.detailed) {
|
|
110
|
-
// Show more detailed info about the context and token usage
|
|
111
|
-
const o4MiniPercentage = (contextResult.tokenCount / 200000 * 100).toFixed(2);
|
|
112
|
-
logger.log('info', `Token usage: ${o4MiniPercentage}% of o4-mini 200K token context window`);
|
|
113
|
-
|
|
114
|
-
if (argvArg.model) {
|
|
115
|
-
// Show percentages for different models
|
|
116
|
-
if (argvArg.model === 'gpt4') {
|
|
117
|
-
const gpt4Percentage = (contextResult.tokenCount / 8192 * 100).toFixed(2);
|
|
118
|
-
logger.log('info', `Token usage (GPT-4): ${gpt4Percentage}% of 8192 token context window`);
|
|
119
|
-
} else if (argvArg.model === 'gpt35') {
|
|
120
|
-
const gpt35Percentage = (contextResult.tokenCount / 4096 * 100).toFixed(2);
|
|
121
|
-
logger.log('info', `Token usage (GPT-3.5): ${gpt35Percentage}% of 4096 token context window`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// Estimate cost (approximate values)
|
|
126
|
-
const o4MiniInputCost = 0.00005; // per 1K tokens for o4-mini
|
|
127
|
-
const estimatedCost = (contextResult.tokenCount / 1000 * o4MiniInputCost).toFixed(6);
|
|
128
|
-
logger.log('info', `Estimated input cost: $${estimatedCost} (o4-mini)`);
|
|
129
|
-
|
|
130
|
-
if (argvArg.listFiles) {
|
|
131
|
-
// List files included in context
|
|
132
|
-
logger.log('info', '\nIncluded files:');
|
|
133
|
-
contextResult.includedFiles.forEach(file => {
|
|
134
|
-
logger.log('info', ` ${file.relativePath} (${file.tokenCount} tokens)`);
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
logger.log('info', '\nTrimmed files:');
|
|
138
|
-
contextResult.trimmedFiles.forEach(file => {
|
|
139
|
-
logger.log('info', ` ${file.relativePath} (${file.tokenCount} tokens)`);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
if (contextResult.excludedFiles.length > 0) {
|
|
143
|
-
logger.log('info', '\nExcluded files:');
|
|
144
|
-
contextResult.excludedFiles.forEach(file => {
|
|
145
|
-
logger.log('info', ` ${file.relativePath} (${file.tokenCount} tokens)`);
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
68
|
+
logger.log('ok', `Commit message generated:`);
|
|
69
|
+
console.log(JSON.stringify(commitObject, null, 2));
|
|
150
70
|
});
|
|
151
71
|
|
|
152
72
|
tsdocCli.addCommand('test').subscribe((argvArg) => {
|
package/ts/plugins.ts
CHANGED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import type { IContextConfig, ITrimConfig, ITaskConfig, TaskType, ICacheConfig, IAnalyzerConfig, IPrioritizationWeights, ITierConfig, IIterativeConfig } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Manages configuration for context building
|
|
4
|
-
*/
|
|
5
|
-
export declare class ConfigManager {
|
|
6
|
-
private static instance;
|
|
7
|
-
private config;
|
|
8
|
-
private projectDir;
|
|
9
|
-
private configCache;
|
|
10
|
-
/**
|
|
11
|
-
* Get the singleton instance of ConfigManager
|
|
12
|
-
*/
|
|
13
|
-
static getInstance(): ConfigManager;
|
|
14
|
-
/**
|
|
15
|
-
* Private constructor for singleton pattern
|
|
16
|
-
*/
|
|
17
|
-
private constructor();
|
|
18
|
-
/**
|
|
19
|
-
* Initialize the config manager with a project directory
|
|
20
|
-
* @param projectDir The project directory
|
|
21
|
-
*/
|
|
22
|
-
initialize(projectDir: string): Promise<void>;
|
|
23
|
-
/**
|
|
24
|
-
* Get the default configuration
|
|
25
|
-
*/
|
|
26
|
-
private getDefaultConfig;
|
|
27
|
-
/**
|
|
28
|
-
* Load configuration from npmextra.json
|
|
29
|
-
*/
|
|
30
|
-
private loadConfig;
|
|
31
|
-
/**
|
|
32
|
-
* Merge configurations, with userConfig taking precedence
|
|
33
|
-
* @param defaultConfig The default configuration
|
|
34
|
-
* @param userConfig The user configuration
|
|
35
|
-
*/
|
|
36
|
-
private mergeConfigs;
|
|
37
|
-
/**
|
|
38
|
-
* Get the complete configuration
|
|
39
|
-
*/
|
|
40
|
-
getConfig(): IContextConfig;
|
|
41
|
-
/**
|
|
42
|
-
* Get the trimming configuration
|
|
43
|
-
*/
|
|
44
|
-
getTrimConfig(): ITrimConfig;
|
|
45
|
-
/**
|
|
46
|
-
* Get configuration for a specific task
|
|
47
|
-
* @param taskType The type of task
|
|
48
|
-
*/
|
|
49
|
-
getTaskConfig(taskType: TaskType): ITaskConfig;
|
|
50
|
-
/**
|
|
51
|
-
* Get the maximum tokens allowed for context
|
|
52
|
-
*/
|
|
53
|
-
getMaxTokens(): number;
|
|
54
|
-
/**
|
|
55
|
-
* Update the configuration
|
|
56
|
-
* @param config The new configuration
|
|
57
|
-
*/
|
|
58
|
-
updateConfig(config: Partial<IContextConfig>): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Get cache configuration
|
|
61
|
-
*/
|
|
62
|
-
getCacheConfig(): ICacheConfig;
|
|
63
|
-
/**
|
|
64
|
-
* Get analyzer configuration
|
|
65
|
-
*/
|
|
66
|
-
getAnalyzerConfig(): IAnalyzerConfig;
|
|
67
|
-
/**
|
|
68
|
-
* Get prioritization weights
|
|
69
|
-
*/
|
|
70
|
-
getPrioritizationWeights(): IPrioritizationWeights;
|
|
71
|
-
/**
|
|
72
|
-
* Get tier configuration
|
|
73
|
-
*/
|
|
74
|
-
getTierConfig(): ITierConfig;
|
|
75
|
-
/**
|
|
76
|
-
* Get iterative configuration
|
|
77
|
-
*/
|
|
78
|
-
getIterativeConfig(): IIterativeConfig;
|
|
79
|
-
/**
|
|
80
|
-
* Clear the config cache (force reload on next access)
|
|
81
|
-
*/
|
|
82
|
-
clearCache(): void;
|
|
83
|
-
}
|
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
/**
|
|
4
|
-
* Manages configuration for context building
|
|
5
|
-
*/
|
|
6
|
-
export class ConfigManager {
|
|
7
|
-
/**
|
|
8
|
-
* Get the singleton instance of ConfigManager
|
|
9
|
-
*/
|
|
10
|
-
static getInstance() {
|
|
11
|
-
if (!ConfigManager.instance) {
|
|
12
|
-
ConfigManager.instance = new ConfigManager();
|
|
13
|
-
}
|
|
14
|
-
return ConfigManager.instance;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Private constructor for singleton pattern
|
|
18
|
-
*/
|
|
19
|
-
constructor() {
|
|
20
|
-
this.projectDir = '';
|
|
21
|
-
this.configCache = null;
|
|
22
|
-
this.config = this.getDefaultConfig();
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Initialize the config manager with a project directory
|
|
26
|
-
* @param projectDir The project directory
|
|
27
|
-
*/
|
|
28
|
-
async initialize(projectDir) {
|
|
29
|
-
this.projectDir = projectDir;
|
|
30
|
-
await this.loadConfig();
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Get the default configuration
|
|
34
|
-
*/
|
|
35
|
-
getDefaultConfig() {
|
|
36
|
-
return {
|
|
37
|
-
maxTokens: 190000, // Default for o4-mini with some buffer
|
|
38
|
-
defaultMode: 'trimmed',
|
|
39
|
-
taskSpecificSettings: {
|
|
40
|
-
readme: {
|
|
41
|
-
mode: 'trimmed',
|
|
42
|
-
includePaths: ['ts/', 'src/'],
|
|
43
|
-
excludePaths: ['test/', 'node_modules/']
|
|
44
|
-
},
|
|
45
|
-
commit: {
|
|
46
|
-
mode: 'trimmed',
|
|
47
|
-
focusOnChangedFiles: true
|
|
48
|
-
},
|
|
49
|
-
description: {
|
|
50
|
-
mode: 'trimmed',
|
|
51
|
-
includePackageInfo: true
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
trimming: {
|
|
55
|
-
removeImplementations: true,
|
|
56
|
-
preserveInterfaces: true,
|
|
57
|
-
preserveTypeDefs: true,
|
|
58
|
-
preserveJSDoc: true,
|
|
59
|
-
maxFunctionLines: 5,
|
|
60
|
-
removeComments: true,
|
|
61
|
-
removeBlankLines: true
|
|
62
|
-
},
|
|
63
|
-
cache: {
|
|
64
|
-
enabled: true,
|
|
65
|
-
ttl: 3600, // 1 hour
|
|
66
|
-
maxSize: 100, // 100MB
|
|
67
|
-
directory: undefined // Will be set to .nogit/context-cache by ContextCache
|
|
68
|
-
},
|
|
69
|
-
analyzer: {
|
|
70
|
-
useAIRefinement: false, // Disabled by default for now
|
|
71
|
-
aiModel: 'haiku'
|
|
72
|
-
},
|
|
73
|
-
prioritization: {
|
|
74
|
-
dependencyWeight: 0.3,
|
|
75
|
-
relevanceWeight: 0.4,
|
|
76
|
-
efficiencyWeight: 0.2,
|
|
77
|
-
recencyWeight: 0.1
|
|
78
|
-
},
|
|
79
|
-
tiers: {
|
|
80
|
-
essential: { minScore: 0.8, trimLevel: 'none' },
|
|
81
|
-
important: { minScore: 0.5, trimLevel: 'light' },
|
|
82
|
-
optional: { minScore: 0.2, trimLevel: 'aggressive' }
|
|
83
|
-
},
|
|
84
|
-
iterative: {
|
|
85
|
-
maxIterations: 5,
|
|
86
|
-
firstPassFileLimit: 10,
|
|
87
|
-
subsequentPassFileLimit: 5,
|
|
88
|
-
temperature: 0.3,
|
|
89
|
-
model: 'gpt-4-turbo-preview'
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Load configuration from npmextra.json
|
|
95
|
-
*/
|
|
96
|
-
async loadConfig() {
|
|
97
|
-
try {
|
|
98
|
-
if (!this.projectDir) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const npmextraJsonPath = plugins.path.join(this.projectDir, 'npmextra.json');
|
|
102
|
-
// Check if file exists
|
|
103
|
-
const fileExists = await plugins.fsInstance.file(npmextraJsonPath).exists();
|
|
104
|
-
if (!fileExists) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
// Check cache
|
|
108
|
-
const stats = await fs.promises.stat(npmextraJsonPath);
|
|
109
|
-
const currentMtime = Math.floor(stats.mtimeMs);
|
|
110
|
-
if (this.configCache && this.configCache.mtime === currentMtime) {
|
|
111
|
-
// Use cached config
|
|
112
|
-
this.config = this.configCache.config;
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
// Read the npmextra.json file
|
|
116
|
-
const npmextraJsonFile = await plugins.smartfileFactory.fromFilePath(npmextraJsonPath);
|
|
117
|
-
const npmextraContent = JSON.parse(npmextraJsonFile.contents.toString());
|
|
118
|
-
// Check for tsdoc context configuration
|
|
119
|
-
if (npmextraContent?.['@git.zone/tsdoc']?.context) {
|
|
120
|
-
// Merge with default config
|
|
121
|
-
this.config = this.mergeConfigs(this.config, npmextraContent['@git.zone/tsdoc'].context);
|
|
122
|
-
}
|
|
123
|
-
// Cache the config
|
|
124
|
-
this.configCache = {
|
|
125
|
-
mtime: currentMtime,
|
|
126
|
-
config: { ...this.config }
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
console.error('Error loading context configuration:', error);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Merge configurations, with userConfig taking precedence
|
|
135
|
-
* @param defaultConfig The default configuration
|
|
136
|
-
* @param userConfig The user configuration
|
|
137
|
-
*/
|
|
138
|
-
mergeConfigs(defaultConfig, userConfig) {
|
|
139
|
-
const result = { ...defaultConfig };
|
|
140
|
-
// Merge top-level properties
|
|
141
|
-
if (userConfig.maxTokens !== undefined)
|
|
142
|
-
result.maxTokens = userConfig.maxTokens;
|
|
143
|
-
if (userConfig.defaultMode !== undefined)
|
|
144
|
-
result.defaultMode = userConfig.defaultMode;
|
|
145
|
-
// Merge task-specific settings
|
|
146
|
-
if (userConfig.taskSpecificSettings) {
|
|
147
|
-
result.taskSpecificSettings = result.taskSpecificSettings || {};
|
|
148
|
-
// For each task type, merge settings
|
|
149
|
-
['readme', 'commit', 'description'].forEach(taskType => {
|
|
150
|
-
if (userConfig.taskSpecificSettings?.[taskType]) {
|
|
151
|
-
result.taskSpecificSettings[taskType] = {
|
|
152
|
-
...result.taskSpecificSettings[taskType],
|
|
153
|
-
...userConfig.taskSpecificSettings[taskType]
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
// Merge trimming configuration
|
|
159
|
-
if (userConfig.trimming) {
|
|
160
|
-
result.trimming = {
|
|
161
|
-
...result.trimming,
|
|
162
|
-
...userConfig.trimming
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
// Merge cache configuration
|
|
166
|
-
if (userConfig.cache) {
|
|
167
|
-
result.cache = {
|
|
168
|
-
...result.cache,
|
|
169
|
-
...userConfig.cache
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
// Merge analyzer configuration
|
|
173
|
-
if (userConfig.analyzer) {
|
|
174
|
-
result.analyzer = {
|
|
175
|
-
...result.analyzer,
|
|
176
|
-
...userConfig.analyzer
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
// Merge prioritization weights
|
|
180
|
-
if (userConfig.prioritization) {
|
|
181
|
-
result.prioritization = {
|
|
182
|
-
...result.prioritization,
|
|
183
|
-
...userConfig.prioritization
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
// Merge tier configuration
|
|
187
|
-
if (userConfig.tiers) {
|
|
188
|
-
result.tiers = {
|
|
189
|
-
...result.tiers,
|
|
190
|
-
...userConfig.tiers
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
// Merge iterative configuration
|
|
194
|
-
if (userConfig.iterative) {
|
|
195
|
-
result.iterative = {
|
|
196
|
-
...result.iterative,
|
|
197
|
-
...userConfig.iterative
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
return result;
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Get the complete configuration
|
|
204
|
-
*/
|
|
205
|
-
getConfig() {
|
|
206
|
-
return this.config;
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Get the trimming configuration
|
|
210
|
-
*/
|
|
211
|
-
getTrimConfig() {
|
|
212
|
-
return this.config.trimming || {};
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Get configuration for a specific task
|
|
216
|
-
* @param taskType The type of task
|
|
217
|
-
*/
|
|
218
|
-
getTaskConfig(taskType) {
|
|
219
|
-
// Get task-specific config or empty object
|
|
220
|
-
const taskConfig = this.config.taskSpecificSettings?.[taskType] || {};
|
|
221
|
-
// If mode is not specified, use default mode
|
|
222
|
-
if (!taskConfig.mode) {
|
|
223
|
-
taskConfig.mode = this.config.defaultMode;
|
|
224
|
-
}
|
|
225
|
-
return taskConfig;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Get the maximum tokens allowed for context
|
|
229
|
-
*/
|
|
230
|
-
getMaxTokens() {
|
|
231
|
-
return this.config.maxTokens || 190000;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Update the configuration
|
|
235
|
-
* @param config The new configuration
|
|
236
|
-
*/
|
|
237
|
-
async updateConfig(config) {
|
|
238
|
-
// Merge with existing config
|
|
239
|
-
this.config = this.mergeConfigs(this.config, config);
|
|
240
|
-
// Invalidate cache
|
|
241
|
-
this.configCache = null;
|
|
242
|
-
try {
|
|
243
|
-
if (!this.projectDir) {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
// Read the existing npmextra.json file
|
|
247
|
-
const npmextraJsonPath = plugins.path.join(this.projectDir, 'npmextra.json');
|
|
248
|
-
let npmextraContent = {};
|
|
249
|
-
if (await plugins.fsInstance.file(npmextraJsonPath).exists()) {
|
|
250
|
-
const npmextraJsonFile = await plugins.smartfileFactory.fromFilePath(npmextraJsonPath);
|
|
251
|
-
npmextraContent = JSON.parse(npmextraJsonFile.contents.toString()) || {};
|
|
252
|
-
}
|
|
253
|
-
// Update the tsdoc context configuration
|
|
254
|
-
const typedContent = npmextraContent;
|
|
255
|
-
if (!typedContent.tsdoc)
|
|
256
|
-
typedContent.tsdoc = {};
|
|
257
|
-
typedContent.tsdoc.context = this.config;
|
|
258
|
-
// Write back to npmextra.json
|
|
259
|
-
const updatedContent = JSON.stringify(npmextraContent, null, 2);
|
|
260
|
-
await plugins.fsInstance.file(npmextraJsonPath).encoding('utf8').write(updatedContent);
|
|
261
|
-
}
|
|
262
|
-
catch (error) {
|
|
263
|
-
console.error('Error updating context configuration:', error);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Get cache configuration
|
|
268
|
-
*/
|
|
269
|
-
getCacheConfig() {
|
|
270
|
-
return this.config.cache || { enabled: true, ttl: 3600, maxSize: 100 };
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Get analyzer configuration
|
|
274
|
-
*/
|
|
275
|
-
getAnalyzerConfig() {
|
|
276
|
-
return this.config.analyzer || { useAIRefinement: false, aiModel: 'haiku' };
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Get prioritization weights
|
|
280
|
-
*/
|
|
281
|
-
getPrioritizationWeights() {
|
|
282
|
-
return this.config.prioritization || {
|
|
283
|
-
dependencyWeight: 0.3,
|
|
284
|
-
relevanceWeight: 0.4,
|
|
285
|
-
efficiencyWeight: 0.2,
|
|
286
|
-
recencyWeight: 0.1
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Get tier configuration
|
|
291
|
-
*/
|
|
292
|
-
getTierConfig() {
|
|
293
|
-
return this.config.tiers || {
|
|
294
|
-
essential: { minScore: 0.8, trimLevel: 'none' },
|
|
295
|
-
important: { minScore: 0.5, trimLevel: 'light' },
|
|
296
|
-
optional: { minScore: 0.2, trimLevel: 'aggressive' }
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Get iterative configuration
|
|
301
|
-
*/
|
|
302
|
-
getIterativeConfig() {
|
|
303
|
-
return this.config.iterative || {
|
|
304
|
-
maxIterations: 5,
|
|
305
|
-
firstPassFileLimit: 10,
|
|
306
|
-
subsequentPassFileLimit: 5,
|
|
307
|
-
temperature: 0.3,
|
|
308
|
-
model: 'gpt-4-turbo-preview'
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* Clear the config cache (force reload on next access)
|
|
313
|
-
*/
|
|
314
|
-
clearCache() {
|
|
315
|
-
this.configCache = null;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb250ZXh0L2NvbmZpZy1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBY3pCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFNeEI7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNIO1FBaEJRLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBcUQsSUFBSSxDQUFDO1FBZ0IzRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQWtCO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixPQUFPO1lBQ0wsU0FBUyxFQUFFLE1BQU0sRUFBRSx1Q0FBdUM7WUFDMUQsV0FBVyxFQUFFLFNBQVM7WUFDdEIsb0JBQW9CLEVBQUU7Z0JBQ3BCLE1BQU0sRUFBRTtvQkFDTixJQUFJLEVBQUUsU0FBUztvQkFDZixZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO29CQUM3QixZQUFZLEVBQUUsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDO2lCQUN6QztnQkFD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
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import type { IFileMetadata, IAnalysisResult, TaskType, IPrioritizationWeights, ITierConfig } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* ContextAnalyzer provides intelligent file selection and prioritization
|
|
4
|
-
* based on dependency analysis, task relevance, and configurable weights
|
|
5
|
-
*/
|
|
6
|
-
export declare class ContextAnalyzer {
|
|
7
|
-
private projectRoot;
|
|
8
|
-
private weights;
|
|
9
|
-
private tiers;
|
|
10
|
-
/**
|
|
11
|
-
* Creates a new ContextAnalyzer
|
|
12
|
-
* @param projectRoot - Root directory of the project
|
|
13
|
-
* @param weights - Prioritization weights
|
|
14
|
-
* @param tiers - Tier configuration
|
|
15
|
-
*/
|
|
16
|
-
constructor(projectRoot: string, weights?: Partial<IPrioritizationWeights>, tiers?: Partial<ITierConfig>);
|
|
17
|
-
/**
|
|
18
|
-
* Analyzes files for a specific task type
|
|
19
|
-
* @param metadata - Array of file metadata to analyze
|
|
20
|
-
* @param taskType - Type of task being performed
|
|
21
|
-
* @param changedFiles - Optional list of recently changed files (for commits)
|
|
22
|
-
* @returns Analysis result with scored files
|
|
23
|
-
*/
|
|
24
|
-
analyze(metadata: IFileMetadata[], taskType: TaskType, changedFiles?: string[]): Promise<IAnalysisResult>;
|
|
25
|
-
/**
|
|
26
|
-
* Builds a dependency graph from file metadata
|
|
27
|
-
* @param metadata - Array of file metadata
|
|
28
|
-
* @returns Dependency graph as a map
|
|
29
|
-
*/
|
|
30
|
-
private buildDependencyGraph;
|
|
31
|
-
/**
|
|
32
|
-
* Extracts import statements from file contents
|
|
33
|
-
* @param contents - File contents
|
|
34
|
-
* @param filePath - Path of the file being analyzed
|
|
35
|
-
* @returns Array of absolute paths to imported files
|
|
36
|
-
*/
|
|
37
|
-
private extractImports;
|
|
38
|
-
/**
|
|
39
|
-
* Calculates centrality scores for all nodes in the dependency graph
|
|
40
|
-
* Uses a simplified PageRank-like algorithm
|
|
41
|
-
* @param graph - Dependency graph
|
|
42
|
-
*/
|
|
43
|
-
private calculateCentrality;
|
|
44
|
-
/**
|
|
45
|
-
* Analyzes a single file
|
|
46
|
-
* @param meta - File metadata
|
|
47
|
-
* @param taskType - Task being performed
|
|
48
|
-
* @param graph - Dependency graph
|
|
49
|
-
* @param changedFiles - Recently changed files
|
|
50
|
-
* @returns File analysis
|
|
51
|
-
*/
|
|
52
|
-
private analyzeFile;
|
|
53
|
-
/**
|
|
54
|
-
* Calculates task-specific relevance score
|
|
55
|
-
*/
|
|
56
|
-
private calculateRelevance;
|
|
57
|
-
/**
|
|
58
|
-
* Calculates efficiency score (information density)
|
|
59
|
-
*/
|
|
60
|
-
private calculateEfficiency;
|
|
61
|
-
/**
|
|
62
|
-
* Calculates recency score for changed files
|
|
63
|
-
*/
|
|
64
|
-
private calculateRecency;
|
|
65
|
-
/**
|
|
66
|
-
* Assigns a tier based on importance score
|
|
67
|
-
*/
|
|
68
|
-
private assignTier;
|
|
69
|
-
/**
|
|
70
|
-
* Generates a human-readable reason for the score
|
|
71
|
-
*/
|
|
72
|
-
private generateReason;
|
|
73
|
-
}
|