@git.zone/tsdoc 1.11.1 → 1.11.3

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 (62) hide show
  1. package/dist_ts/aidocs_classes/commit.js +65 -42
  2. package/dist_ts/aidocs_classes/description.js +68 -29
  3. package/dist_ts/aidocs_classes/projectcontext.d.ts +5 -5
  4. package/dist_ts/aidocs_classes/projectcontext.js +8 -16
  5. package/dist_ts/aidocs_classes/readme.js +156 -88
  6. package/dist_ts/classes.aidoc.d.ts +10 -6
  7. package/dist_ts/classes.aidoc.js +17 -11
  8. package/dist_ts/classes.diffprocessor.js +284 -0
  9. package/dist_ts/cli.js +21 -92
  10. package/dist_ts/plugins.d.ts +1 -2
  11. package/dist_ts/plugins.js +2 -3
  12. package/package.json +2 -3
  13. package/ts/aidocs_classes/commit.ts +67 -51
  14. package/ts/aidocs_classes/description.ts +72 -34
  15. package/ts/aidocs_classes/projectcontext.ts +7 -14
  16. package/ts/aidocs_classes/readme.ts +168 -93
  17. package/ts/classes.aidoc.ts +18 -11
  18. package/ts/cli.ts +20 -100
  19. package/ts/plugins.ts +1 -2
  20. package/dist_ts/context/config-manager.d.ts +0 -83
  21. package/dist_ts/context/config-manager.js +0 -318
  22. package/dist_ts/context/context-analyzer.d.ts +0 -73
  23. package/dist_ts/context/context-analyzer.js +0 -311
  24. package/dist_ts/context/context-cache.d.ts +0 -73
  25. package/dist_ts/context/context-cache.js +0 -239
  26. package/dist_ts/context/context-trimmer.d.ts +0 -60
  27. package/dist_ts/context/context-trimmer.js +0 -258
  28. package/dist_ts/context/diff-processor.js +0 -284
  29. package/dist_ts/context/enhanced-context.d.ts +0 -73
  30. package/dist_ts/context/enhanced-context.js +0 -275
  31. package/dist_ts/context/index.d.ts +0 -11
  32. package/dist_ts/context/index.js +0 -12
  33. package/dist_ts/context/iterative-context-builder.d.ts +0 -62
  34. package/dist_ts/context/iterative-context-builder.js +0 -395
  35. package/dist_ts/context/lazy-file-loader.d.ts +0 -60
  36. package/dist_ts/context/lazy-file-loader.js +0 -182
  37. package/dist_ts/context/task-context-factory.d.ts +0 -48
  38. package/dist_ts/context/task-context-factory.js +0 -86
  39. package/dist_ts/context/types.d.ts +0 -301
  40. package/dist_ts/context/types.js +0 -2
  41. package/dist_ts/tsdoc.classes.typedoc.d.ts +0 -10
  42. package/dist_ts/tsdoc.classes.typedoc.js +0 -48
  43. package/dist_ts/tsdoc.cli.d.ts +0 -1
  44. package/dist_ts/tsdoc.cli.js +0 -32
  45. package/dist_ts/tsdoc.logging.d.ts +0 -2
  46. package/dist_ts/tsdoc.logging.js +0 -14
  47. package/dist_ts/tsdoc.paths.d.ts +0 -8
  48. package/dist_ts/tsdoc.paths.js +0 -12
  49. package/dist_ts/tsdoc.plugins.d.ts +0 -11
  50. package/dist_ts/tsdoc.plugins.js +0 -15
  51. package/ts/context/config-manager.ts +0 -369
  52. package/ts/context/context-analyzer.ts +0 -391
  53. package/ts/context/context-cache.ts +0 -286
  54. package/ts/context/context-trimmer.ts +0 -310
  55. package/ts/context/enhanced-context.ts +0 -332
  56. package/ts/context/index.ts +0 -70
  57. package/ts/context/iterative-context-builder.ts +0 -512
  58. package/ts/context/lazy-file-loader.ts +0 -207
  59. package/ts/context/task-context-factory.ts +0 -120
  60. package/ts/context/types.ts +0 -324
  61. /package/dist_ts/{context/diff-processor.d.ts → classes.diffprocessor.d.ts} +0 -0
  62. /package/ts/{context/diff-processor.ts → classes.diffprocessor.ts} +0 -0
@@ -1,207 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import * as fs from 'fs';
3
- import type { IFileMetadata, IFileInfo } from './types.js';
4
-
5
- /**
6
- * LazyFileLoader handles efficient file loading by:
7
- * - Scanning files for metadata without loading contents
8
- * - Providing fast file size and token estimates
9
- * - Loading contents only when requested
10
- * - Parallel loading of selected files
11
- */
12
- export class LazyFileLoader {
13
- private projectRoot: string;
14
- private metadataCache: Map<string, IFileMetadata> = new Map();
15
-
16
- /**
17
- * Creates a new LazyFileLoader
18
- * @param projectRoot - Root directory of the project
19
- */
20
- constructor(projectRoot: string) {
21
- this.projectRoot = projectRoot;
22
- }
23
-
24
- /**
25
- * Scans files in given globs and creates metadata without loading contents
26
- * @param globs - File patterns to scan (e.g., ['ts/**\/*.ts', 'test/**\/*.ts'])
27
- * @returns Array of file metadata
28
- */
29
- public async scanFiles(globs: string[]): Promise<IFileMetadata[]> {
30
- const metadata: IFileMetadata[] = [];
31
-
32
- for (const globPattern of globs) {
33
- try {
34
- const virtualDir = await plugins.smartfileFactory.virtualDirectoryFromPath(this.projectRoot);
35
- // Filter files based on glob pattern using simple pattern matching
36
- const smartFiles = virtualDir.filter(file => {
37
- // Simple glob matching
38
- const relativePath = file.relative;
39
- if (globPattern.includes('**')) {
40
- // Handle ** patterns - match any path
41
- const pattern = globPattern.replace(/\*\*/g, '.*').replace(/\*/g, '[^/]*');
42
- return new RegExp(`^${pattern}$`).test(relativePath);
43
- } else if (globPattern.includes('*')) {
44
- // Handle single * patterns
45
- const pattern = globPattern.replace(/\*/g, '[^/]*');
46
- return new RegExp(`^${pattern}$`).test(relativePath);
47
- } else {
48
- // Exact match
49
- return relativePath === globPattern;
50
- }
51
- }).listFiles();
52
-
53
- for (const smartFile of smartFiles) {
54
- try {
55
- const meta = await this.getMetadata(smartFile.absolutePath);
56
- metadata.push(meta);
57
- } catch (error) {
58
- // Skip files that can't be read
59
- console.warn(`Failed to get metadata for ${smartFile.absolutePath}:`, error.message);
60
- }
61
- }
62
- } catch (error) {
63
- // Skip patterns that don't match any files
64
- console.warn(`No files found for pattern ${globPattern}`);
65
- }
66
- }
67
-
68
- return metadata;
69
- }
70
-
71
- /**
72
- * Gets metadata for a single file without loading contents
73
- * @param filePath - Absolute path to the file
74
- * @returns File metadata
75
- */
76
- public async getMetadata(filePath: string): Promise<IFileMetadata> {
77
- // Check cache first
78
- if (this.metadataCache.has(filePath)) {
79
- const cached = this.metadataCache.get(filePath)!;
80
- const currentStats = await fs.promises.stat(filePath);
81
-
82
- // Return cached if file hasn't changed
83
- if (cached.mtime === Math.floor(currentStats.mtimeMs)) {
84
- return cached;
85
- }
86
- }
87
-
88
- // Get file stats
89
- const stats = await fs.promises.stat(filePath);
90
- const relativePath = plugins.path.relative(this.projectRoot, filePath);
91
-
92
- // Estimate tokens: rough estimate of ~4 characters per token
93
- // This is faster than reading and tokenizing the entire file
94
- const estimatedTokens = Math.ceil(stats.size / 4);
95
-
96
- const metadata: IFileMetadata = {
97
- path: filePath,
98
- relativePath,
99
- size: stats.size,
100
- mtime: Math.floor(stats.mtimeMs),
101
- estimatedTokens,
102
- };
103
-
104
- // Cache the metadata
105
- this.metadataCache.set(filePath, metadata);
106
-
107
- return metadata;
108
- }
109
-
110
- /**
111
- * Loads file contents for selected files in parallel
112
- * @param metadata - Array of file metadata to load
113
- * @param tokenizer - Function to calculate accurate token count
114
- * @returns Array of complete file info with contents
115
- */
116
- public async loadFiles(
117
- metadata: IFileMetadata[],
118
- tokenizer: (content: string) => number
119
- ): Promise<IFileInfo[]> {
120
- // Load files in parallel
121
- const loadPromises = metadata.map(async (meta) => {
122
- try {
123
- const contents = await plugins.fsInstance.file(meta.path).encoding('utf8').read() as string;
124
- const tokenCount = tokenizer(contents);
125
-
126
- const fileInfo: IFileInfo = {
127
- path: meta.path,
128
- relativePath: meta.relativePath,
129
- contents,
130
- tokenCount,
131
- importanceScore: meta.importanceScore,
132
- };
133
-
134
- return fileInfo;
135
- } catch (error) {
136
- console.warn(`Failed to load file ${meta.path}:`, error.message);
137
- return null;
138
- }
139
- });
140
-
141
- // Wait for all loads to complete and filter out failures
142
- const results = await Promise.all(loadPromises);
143
- return results.filter((r): r is IFileInfo => r !== null);
144
- }
145
-
146
- /**
147
- * Loads a single file with contents
148
- * @param filePath - Absolute path to the file
149
- * @param tokenizer - Function to calculate accurate token count
150
- * @returns Complete file info with contents
151
- */
152
- public async loadFile(
153
- filePath: string,
154
- tokenizer: (content: string) => number
155
- ): Promise<IFileInfo> {
156
- const meta = await this.getMetadata(filePath);
157
- const contents = await plugins.fsInstance.file(filePath).encoding('utf8').read() as string;
158
- const tokenCount = tokenizer(contents);
159
- const relativePath = plugins.path.relative(this.projectRoot, filePath);
160
-
161
- return {
162
- path: filePath,
163
- relativePath,
164
- contents,
165
- tokenCount,
166
- importanceScore: meta.importanceScore,
167
- };
168
- }
169
-
170
- /**
171
- * Updates importance scores for metadata entries
172
- * @param scores - Map of file paths to importance scores
173
- */
174
- public updateImportanceScores(scores: Map<string, number>): void {
175
- for (const [path, score] of scores) {
176
- const meta = this.metadataCache.get(path);
177
- if (meta) {
178
- meta.importanceScore = score;
179
- }
180
- }
181
- }
182
-
183
- /**
184
- * Clears the metadata cache
185
- */
186
- public clearCache(): void {
187
- this.metadataCache.clear();
188
- }
189
-
190
- /**
191
- * Gets total estimated tokens for all cached metadata
192
- */
193
- public getTotalEstimatedTokens(): number {
194
- let total = 0;
195
- for (const meta of this.metadataCache.values()) {
196
- total += meta.estimatedTokens;
197
- }
198
- return total;
199
- }
200
-
201
- /**
202
- * Gets cached metadata entries
203
- */
204
- public getCachedMetadata(): IFileMetadata[] {
205
- return Array.from(this.metadataCache.values());
206
- }
207
- }
@@ -1,120 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import { IterativeContextBuilder } from './iterative-context-builder.js';
3
- import { ConfigManager } from './config-manager.js';
4
- import type { IIterativeContextResult, TaskType } from './types.js';
5
-
6
- /**
7
- * Factory class for creating task-specific context using iterative context building
8
- */
9
- export class TaskContextFactory {
10
- private projectDir: string;
11
- private configManager: ConfigManager;
12
- private openaiInstance?: any; // OpenAI provider instance
13
-
14
- /**
15
- * Create a new TaskContextFactory
16
- * @param projectDirArg The project directory
17
- * @param openaiInstance Optional pre-configured OpenAI provider instance
18
- */
19
- constructor(projectDirArg: string, openaiInstance?: any) {
20
- this.projectDir = projectDirArg;
21
- this.configManager = ConfigManager.getInstance();
22
- this.openaiInstance = openaiInstance;
23
- }
24
-
25
- /**
26
- * Initialize the factory
27
- */
28
- public async initialize(): Promise<void> {
29
- await this.configManager.initialize(this.projectDir);
30
- }
31
-
32
- /**
33
- * Create context for README generation
34
- */
35
- public async createContextForReadme(): Promise<IIterativeContextResult> {
36
- const iterativeBuilder = new IterativeContextBuilder(
37
- this.projectDir,
38
- this.configManager.getIterativeConfig(),
39
- this.openaiInstance
40
- );
41
- await iterativeBuilder.initialize();
42
- return await iterativeBuilder.buildContextIteratively('readme');
43
- }
44
-
45
- /**
46
- * Create context for description generation
47
- */
48
- public async createContextForDescription(): Promise<IIterativeContextResult> {
49
- const iterativeBuilder = new IterativeContextBuilder(
50
- this.projectDir,
51
- this.configManager.getIterativeConfig(),
52
- this.openaiInstance
53
- );
54
- await iterativeBuilder.initialize();
55
- return await iterativeBuilder.buildContextIteratively('description');
56
- }
57
-
58
- /**
59
- * Create context for commit message generation
60
- * @param gitDiff Optional git diff to include in the context
61
- */
62
- public async createContextForCommit(gitDiff?: string): Promise<IIterativeContextResult> {
63
- const iterativeBuilder = new IterativeContextBuilder(
64
- this.projectDir,
65
- this.configManager.getIterativeConfig(),
66
- this.openaiInstance
67
- );
68
- await iterativeBuilder.initialize();
69
- return await iterativeBuilder.buildContextIteratively('commit', gitDiff);
70
- }
71
-
72
- /**
73
- * Create context for any task type
74
- * @param taskType The task type to create context for
75
- * @param additionalContent Optional additional content (currently not used)
76
- */
77
- public async createContextForTask(
78
- taskType: TaskType,
79
- additionalContent?: string
80
- ): Promise<IIterativeContextResult> {
81
- switch (taskType) {
82
- case 'readme':
83
- return this.createContextForReadme();
84
- case 'description':
85
- return this.createContextForDescription();
86
- case 'commit':
87
- return this.createContextForCommit(additionalContent);
88
- default:
89
- // Default to readme for unknown task types
90
- return this.createContextForReadme();
91
- }
92
- }
93
-
94
- /**
95
- * Get token stats for all task types
96
- */
97
- public async getTokenStats(): Promise<Record<TaskType, {
98
- tokenCount: number;
99
- savings: number;
100
- includedFiles: number;
101
- trimmedFiles: number;
102
- excludedFiles: number;
103
- }>> {
104
- const taskTypes: TaskType[] = ['readme', 'description', 'commit'];
105
- const stats: Record<TaskType, any> = {} as any;
106
-
107
- for (const taskType of taskTypes) {
108
- const result = await this.createContextForTask(taskType);
109
- stats[taskType] = {
110
- tokenCount: result.tokenCount,
111
- savings: result.tokenSavings,
112
- includedFiles: result.includedFiles.length,
113
- trimmedFiles: result.trimmedFiles.length,
114
- excludedFiles: result.excludedFiles.length
115
- };
116
- }
117
-
118
- return stats;
119
- }
120
- }
@@ -1,324 +0,0 @@
1
- /**
2
- * Context processing mode to control how context is built
3
- */
4
- export type ContextMode = 'full' | 'trimmed' | 'summarized';
5
-
6
- /**
7
- * Configuration for context trimming
8
- */
9
- export interface ITrimConfig {
10
- /** Whether to remove function implementations */
11
- removeImplementations?: boolean;
12
- /** Whether to preserve interface definitions */
13
- preserveInterfaces?: boolean;
14
- /** Whether to preserve type definitions */
15
- preserveTypeDefs?: boolean;
16
- /** Whether to preserve JSDoc comments */
17
- preserveJSDoc?: boolean;
18
- /** Maximum lines to keep for function bodies (if not removing completely) */
19
- maxFunctionLines?: number;
20
- /** Whether to remove normal comments (non-JSDoc) */
21
- removeComments?: boolean;
22
- /** Whether to remove blank lines */
23
- removeBlankLines?: boolean;
24
- }
25
-
26
- /**
27
- * Task types that require different context optimization
28
- */
29
- export type TaskType = 'readme' | 'commit' | 'description';
30
-
31
- /**
32
- * Configuration for different tasks
33
- */
34
- export interface ITaskConfig {
35
- /** The context mode to use for this task */
36
- mode?: ContextMode;
37
- /** File paths to include for this task */
38
- includePaths?: string[];
39
- /** File paths to exclude for this task */
40
- excludePaths?: string[];
41
- /** For commit tasks, whether to focus on changed files */
42
- focusOnChangedFiles?: boolean;
43
- /** For description tasks, whether to include package info */
44
- includePackageInfo?: boolean;
45
- }
46
-
47
- /**
48
- * Complete context configuration
49
- */
50
- export interface IContextConfig {
51
- /** Maximum tokens to use for context */
52
- maxTokens?: number;
53
- /** Default context mode */
54
- defaultMode?: ContextMode;
55
- /** Task-specific settings */
56
- taskSpecificSettings?: {
57
- [key in TaskType]?: ITaskConfig;
58
- };
59
- /** Trimming configuration */
60
- trimming?: ITrimConfig;
61
- /** Cache configuration */
62
- cache?: ICacheConfig;
63
- /** Analyzer configuration */
64
- analyzer?: IAnalyzerConfig;
65
- /** Prioritization weights */
66
- prioritization?: IPrioritizationWeights;
67
- /** Tier configuration for adaptive trimming */
68
- tiers?: ITierConfig;
69
- /** Iterative context building configuration */
70
- iterative?: IIterativeConfig;
71
- }
72
-
73
- /**
74
- * Cache configuration
75
- */
76
- export interface ICacheConfig {
77
- /** Whether caching is enabled */
78
- enabled?: boolean;
79
- /** Time-to-live in seconds */
80
- ttl?: number;
81
- /** Maximum cache size in MB */
82
- maxSize?: number;
83
- /** Cache directory path */
84
- directory?: string;
85
- }
86
-
87
- /**
88
- * Analyzer configuration
89
- * Note: Smart analysis is always enabled; this config only controls advanced options
90
- */
91
- export interface IAnalyzerConfig {
92
- /** Whether to use AI refinement for selection (advanced, disabled by default) */
93
- useAIRefinement?: boolean;
94
- /** AI model to use for refinement */
95
- aiModel?: string;
96
- }
97
-
98
- /**
99
- * Weights for file prioritization
100
- */
101
- export interface IPrioritizationWeights {
102
- /** Weight for dependency centrality */
103
- dependencyWeight?: number;
104
- /** Weight for task relevance */
105
- relevanceWeight?: number;
106
- /** Weight for token efficiency */
107
- efficiencyWeight?: number;
108
- /** Weight for file recency */
109
- recencyWeight?: number;
110
- }
111
-
112
- /**
113
- * Tier configuration for adaptive trimming
114
- */
115
- export interface ITierConfig {
116
- essential?: ITierSettings;
117
- important?: ITierSettings;
118
- optional?: ITierSettings;
119
- }
120
-
121
- /**
122
- * Settings for a single tier
123
- */
124
- export interface ITierSettings {
125
- /** Minimum score to qualify for this tier */
126
- minScore: number;
127
- /** Trimming level to apply */
128
- trimLevel: 'none' | 'light' | 'aggressive';
129
- }
130
-
131
- /**
132
- * Basic file information interface
133
- */
134
- export interface IFileInfo {
135
- /** The file path */
136
- path: string;
137
- /** The file contents */
138
- contents: string;
139
- /** The file's relative path from the project root */
140
- relativePath: string;
141
- /** The estimated token count of the file */
142
- tokenCount?: number;
143
- /** The file's importance score (higher is more important) */
144
- importanceScore?: number;
145
- }
146
-
147
- /**
148
- * Result of context building
149
- */
150
- export interface IContextResult {
151
- /** The generated context string */
152
- context: string;
153
- /** The total token count of the context */
154
- tokenCount: number;
155
- /** Files included in the context */
156
- includedFiles: IFileInfo[];
157
- /** Files that were trimmed */
158
- trimmedFiles: IFileInfo[];
159
- /** Files that were excluded */
160
- excludedFiles: IFileInfo[];
161
- /** Token savings from trimming */
162
- tokenSavings: number;
163
- }
164
-
165
- /**
166
- * File metadata without contents (for lazy loading)
167
- */
168
- export interface IFileMetadata {
169
- /** The file path */
170
- path: string;
171
- /** The file's relative path from the project root */
172
- relativePath: string;
173
- /** File size in bytes */
174
- size: number;
175
- /** Last modified time (Unix timestamp) */
176
- mtime: number;
177
- /** Estimated token count (without loading full contents) */
178
- estimatedTokens: number;
179
- /** The file's importance score */
180
- importanceScore?: number;
181
- }
182
-
183
- /**
184
- * Cache entry for a file
185
- */
186
- export interface ICacheEntry {
187
- /** File path */
188
- path: string;
189
- /** File contents */
190
- contents: string;
191
- /** Token count */
192
- tokenCount: number;
193
- /** Last modified time when cached */
194
- mtime: number;
195
- /** When this cache entry was created */
196
- cachedAt: number;
197
- }
198
-
199
- /**
200
- * Dependency information for a file
201
- */
202
- export interface IFileDependencies {
203
- /** File path */
204
- path: string;
205
- /** Files this file imports */
206
- imports: string[];
207
- /** Files that import this file */
208
- importedBy: string[];
209
- /** Centrality score (0-1) - how central this file is in the dependency graph */
210
- centrality: number;
211
- }
212
-
213
- /**
214
- * Analysis result for a file
215
- */
216
- export interface IFileAnalysis {
217
- /** File path */
218
- path: string;
219
- /** Task relevance score (0-1) */
220
- relevanceScore: number;
221
- /** Dependency centrality score (0-1) */
222
- centralityScore: number;
223
- /** Token efficiency score (0-1) */
224
- efficiencyScore: number;
225
- /** Recency score (0-1) */
226
- recencyScore: number;
227
- /** Combined importance score (0-1) */
228
- importanceScore: number;
229
- /** Assigned tier */
230
- tier: 'essential' | 'important' | 'optional' | 'excluded';
231
- /** Reason for the score */
232
- reason?: string;
233
- }
234
-
235
- /**
236
- * Result of context analysis
237
- */
238
- export interface IAnalysisResult {
239
- /** Task type being analyzed */
240
- taskType: TaskType;
241
- /** Analyzed files with scores */
242
- files: IFileAnalysis[];
243
- /** Dependency graph */
244
- dependencyGraph: Map<string, IFileDependencies>;
245
- /** Total files analyzed */
246
- totalFiles: number;
247
- /** Analysis duration in ms */
248
- analysisDuration: number;
249
- }
250
-
251
- /**
252
- * Configuration for iterative context building
253
- */
254
- export interface IIterativeConfig {
255
- /** Maximum number of iterations allowed */
256
- maxIterations?: number;
257
- /** Maximum files to request in first iteration */
258
- firstPassFileLimit?: number;
259
- /** Maximum files to request in subsequent iterations */
260
- subsequentPassFileLimit?: number;
261
- /** Temperature for AI decision making (0-1) */
262
- temperature?: number;
263
- /** Model to use for iterative decisions */
264
- model?: string;
265
- }
266
-
267
- /**
268
- * AI decision for file selection
269
- */
270
- export interface IFileSelectionDecision {
271
- /** AI's reasoning for file selection */
272
- reasoning: string;
273
- /** File paths to load */
274
- filesToLoad: string[];
275
- /** Estimated tokens needed */
276
- estimatedTokensNeeded?: number;
277
- }
278
-
279
- /**
280
- * AI decision for context sufficiency
281
- */
282
- export interface IContextSufficiencyDecision {
283
- /** Whether context is sufficient */
284
- sufficient: boolean;
285
- /** AI's reasoning */
286
- reasoning: string;
287
- /** Additional files needed (if not sufficient) */
288
- additionalFilesNeeded?: string[];
289
- }
290
-
291
- /**
292
- * State for a single iteration
293
- */
294
- export interface IIterationState {
295
- /** Iteration number (1-based) */
296
- iteration: number;
297
- /** Files loaded in this iteration */
298
- filesLoaded: IFileInfo[];
299
- /** Tokens used in this iteration */
300
- tokensUsed: number;
301
- /** Total tokens used so far */
302
- totalTokensUsed: number;
303
- /** AI decision made in this iteration */
304
- decision: IFileSelectionDecision | IContextSufficiencyDecision;
305
- /** Duration of this iteration in ms */
306
- duration: number;
307
- }
308
-
309
- /**
310
- * Result of iterative context building
311
- */
312
- export interface IIterativeContextResult extends IContextResult {
313
- /** Number of iterations performed */
314
- iterationCount: number;
315
- /** Details of each iteration */
316
- iterations: IIterationState[];
317
- /** Total API calls made */
318
- apiCallCount: number;
319
- /** Total duration in ms */
320
- totalDuration: number;
321
- }
322
-
323
- // Export DiffProcessor types
324
- export type { IDiffFileInfo, IProcessedDiff, IDiffProcessorOptions } from './diff-processor.js';