@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
@@ -9,15 +9,7 @@ export class Readme {
9
9
  }
10
10
  async build() {
11
11
  let finalReadmeString = ``;
12
- // Use the new TaskContextFactory for optimized context
13
- const taskContextFactory = new (await import('../context/index.js')).TaskContextFactory(this.projectDir, this.aiDocsRef.openaiInstance);
14
- await taskContextFactory.initialize();
15
- // Generate context specifically for readme task
16
- const contextResult = await taskContextFactory.createContextForReadme();
17
- const contextString = contextResult.context;
18
- // Log token usage statistics
19
- console.log(`Token usage - Context: ${contextResult.tokenCount}, Files: ${contextResult.includedFiles.length + contextResult.trimmedFiles.length}, Savings: ${contextResult.tokenSavings}`);
20
- // lets first check legal before introducung any cost
12
+ // First check legal info before introducing any cost
21
13
  const projectContext = new ProjectContext(this.projectDir);
22
14
  const npmExtraJson = JSON.parse((await projectContext.gatherFiles()).smartfilesNpmextraJSON.contents.toString());
23
15
  const legalInfo = npmExtraJson?.['@git.zone/tsdoc']?.legal;
@@ -25,48 +17,92 @@ export class Readme {
25
17
  const error = new Error(`No legal information found in npmextra.json`);
26
18
  console.log(error);
27
19
  }
28
- let result = await this.aiDocsRef.openaiInstance.chat({
29
- systemMessage: `
30
- You create markdown readmes for npm projects. You only output the markdown readme.
20
+ // Use DualAgentOrchestrator with filesystem tool for agent-driven exploration
21
+ const readmeOrchestrator = new plugins.smartagent.DualAgentOrchestrator({
22
+ smartAiInstance: this.aiDocsRef.smartAiInstance,
23
+ defaultProvider: 'openai',
24
+ maxIterations: 25,
25
+ maxResultChars: 15000, // Limit tool output to prevent token explosion
26
+ maxHistoryMessages: 20, // Limit history window
27
+ logPrefix: '[README]',
28
+ onProgress: (event) => logger.log(event.logLevel, event.logMessage),
29
+ guardianPolicyPrompt: `
30
+ You validate README generation tool calls and outputs.
31
31
 
32
- The Readme should follow the following template:
32
+ APPROVE tool calls for:
33
+ - Reading any files within the project directory (package.json, ts/*.ts, readme.md, etc.)
34
+ - Using tree to see project structure
35
+ - Using glob to find source files
36
+ - Listing directory contents
37
+
38
+ REJECT tool calls for:
39
+ - Reading files outside the project directory
40
+ - Writing, deleting, or modifying any files
41
+ - Any destructive operations
42
+
43
+ For final README output, APPROVE if:
44
+ - README follows proper markdown format
45
+ - Contains Install and Usage sections
46
+ - Code examples are correct TypeScript/ESM syntax
47
+ - Documentation is comprehensive and helpful
48
+
49
+ REJECT final output if:
50
+ - README is incomplete or poorly formatted
51
+ - Contains licensing information (added separately)
52
+ - Uses CommonJS syntax instead of ESM
53
+ - Contains "in conclusion" or similar filler
54
+ `,
55
+ });
56
+ // Register scoped filesystem tool for agent exploration
57
+ readmeOrchestrator.registerScopedFilesystemTool(this.projectDir);
58
+ await readmeOrchestrator.start();
59
+ const readmeTaskPrompt = `
60
+ You create markdown READMEs for npm projects. You only output the markdown readme.
61
+
62
+ PROJECT DIRECTORY: ${this.projectDir}
63
+
64
+ Use the filesystem tool to explore the project and understand what it does:
65
+ 1. First, use tree to see the project structure (maxDepth: 3)
66
+ 2. Read package.json to understand the package name, description, and dependencies
67
+ 3. Read the existing readme.md if it exists (use it as a base, improve and expand)
68
+ 4. Read readme.hints.md if it exists (contains hints for documentation)
69
+ 5. Read key source files in ts/ directory to understand the API and implementation
70
+ 6. Focus on exported classes, interfaces, and functions
71
+
72
+ Then generate a comprehensive README following this template:
33
73
 
34
74
  # Project Name
35
- [
36
- The name is the module name of package.json
37
- The description is in the description field of package.json
38
- ]
75
+ [The name from package.json and description]
39
76
 
40
77
  ## Install
41
- [
42
- Write a short text on how to install the project
43
- ]
78
+ [Short text on how to install the project]
44
79
 
45
80
  ## Usage
46
- [
81
+ [
47
82
  Give code examples here.
48
83
  Construct sensible scenarios for the user.
49
84
  Make sure to show a complete set of features of the module.
50
85
  Don't omit use cases.
51
- It does not matter how much time you need.
52
86
  ALWAYS USE ESM SYNTAX AND TYPESCRIPT.
53
- DON'T CHICKEN OUT. Write at least 4000 words. More if necessary.
54
- If there is already a readme, take the Usage section as base. Remove outdated content, and expand and improve upon the valid parts.
55
- Super important: Check for completenes.
56
- Don't include any licensing information. This will be added in a later step.
57
- Avoid "in conclusions".
58
-
59
- Good to know:
60
- * npmextra.json contains overall module information.
61
- * readme.hints.md provides valuable hints about module ideas.
87
+ Write at least 4000 words. More if necessary.
88
+ If there is already a readme, take the Usage section as base. Remove outdated content, expand and improve.
89
+ Check for completeness.
90
+ Don't include any licensing information. This will be added later.
91
+ Avoid "in conclusion" statements.
62
92
  ]
63
- `,
64
- messageHistory: [],
65
- userMessage: contextString,
66
- });
67
- finalReadmeString += result.message + '\n' + legalInfo;
93
+ `;
94
+ const readmeResult = await readmeOrchestrator.run(readmeTaskPrompt);
95
+ await readmeOrchestrator.stop();
96
+ if (!readmeResult.success) {
97
+ throw new Error(`README generation failed: ${readmeResult.status}`);
98
+ }
99
+ // Clean up markdown formatting if wrapped in code blocks
100
+ let resultMessage = readmeResult.result
101
+ .replace(/^```markdown\n?/i, '')
102
+ .replace(/\n?```$/i, '');
103
+ finalReadmeString += resultMessage + '\n' + legalInfo;
68
104
  console.log(`\n======================\n`);
69
- console.log(result.message);
105
+ console.log(resultMessage);
70
106
  console.log(`\n======================\n`);
71
107
  const readme = (await projectContext.gatherFiles()).smartfilesReadme;
72
108
  readme.contents = Buffer.from(finalReadmeString);
@@ -77,58 +113,90 @@ The Readme should follow the following template:
77
113
  logger.log('info', `Found ${Object.keys(subModules).length} sub modules`);
78
114
  for (const subModule of Object.keys(subModules)) {
79
115
  logger.log('info', `Building readme for ${subModule}`);
80
- const subModuleContextString = await projectContext.update();
81
- let result = await this.aiDocsRef.openaiInstance.chat({
82
- systemMessage: `
83
- You create markdown readmes for npm projects. You only output the markdown readme.
84
-
85
- IMPORTANT: YOU ARE NOW CREATING THE README FOR THE FOLLOWING SUB MODULE: ${subModule} !!!!!!!!!!!
86
- The Sub Module will be published with the following data:
87
- ${JSON.stringify(await plugins.fsInstance.file(plugins.path.join(paths.cwd, subModule, 'tspublish.json')).encoding('utf8').read(), null, 2)}
88
-
89
-
90
- The Readme should follow the following template:
91
-
92
- # Project Name
93
- [
94
- The name is the module name of package.json
95
- The description is in the description field of package.json
96
- ]
97
-
98
- ## Install
99
- [
100
- Write a short text on how to install the project
101
- ]
102
-
103
- ## Usage
104
- [
105
- Give code examples here.
106
- Construct sensible scenarios for the user.
107
- Make sure to show a complete set of features of the module.
108
- Don't omit use cases.
109
- It does not matter how much time you need.
110
- ALWAYS USE ESM SYNTAX AND TYPESCRIPT.
111
- DON'T CHICKEN OUT. Write at least 4000 words. More if necessary.
112
- If there is already a readme, take the Usage section as base. Remove outdated content, and expand and improve upon the valid parts.
113
- Super important: Check for completenes.
114
- Don't include any licensing information. This will be added in a later step.
115
- Avoid "in conclusions".
116
-
117
- Good to know:
118
- * npmextra.json contains overall module information.
119
- * readme.hints.md provides valuable hints about module ideas.
120
- * Your output lands directly in the readme.md file.
121
- * Don't use \`\`\` at the beginning or the end. It'll cause problems. Only use it for codeblocks. You are directly writing markdown. No need to introduce it weirdly.
122
- ]
123
- `,
124
- messageHistory: [],
125
- userMessage: subModuleContextString,
116
+ const subModulePath = plugins.path.join(paths.cwd, subModule);
117
+ const tspublishData = await plugins.fsInstance
118
+ .file(plugins.path.join(subModulePath, 'tspublish.json'))
119
+ .encoding('utf8')
120
+ .read();
121
+ // Create a new orchestrator with filesystem tool for each submodule
122
+ const subModuleOrchestrator = new plugins.smartagent.DualAgentOrchestrator({
123
+ smartAiInstance: this.aiDocsRef.smartAiInstance,
124
+ defaultProvider: 'openai',
125
+ maxIterations: 20,
126
+ maxResultChars: 12000,
127
+ maxHistoryMessages: 15,
128
+ logPrefix: `[README:${subModule}]`,
129
+ onProgress: (event) => logger.log(event.logLevel, event.logMessage),
130
+ guardianPolicyPrompt: `
131
+ You validate README generation for submodules.
132
+
133
+ APPROVE tool calls for:
134
+ - Reading any files within the submodule directory
135
+ - Using tree to see structure
136
+ - Using glob to find source files
137
+
138
+ REJECT tool calls for:
139
+ - Reading files outside the submodule directory
140
+ - Writing, deleting, or modifying any files
141
+ - Any destructive operations
142
+
143
+ APPROVE final README if comprehensive, well-formatted markdown with ESM TypeScript examples.
144
+ REJECT incomplete READMEs or those with licensing info.
145
+ `,
126
146
  });
127
- const subModuleReadmeString = result.message + '\n' + legalInfo;
128
- await plugins.fsInstance.file(plugins.path.join(paths.cwd, subModule, 'readme.md')).encoding('utf8').write(subModuleReadmeString);
129
- logger.log('success', `Built readme for ${subModule}`);
147
+ // Register scoped filesystem tool for the submodule directory
148
+ subModuleOrchestrator.registerScopedFilesystemTool(subModulePath);
149
+ await subModuleOrchestrator.start();
150
+ const subModulePrompt = `
151
+ You create markdown READMEs for npm projects. You only output the markdown readme.
152
+ SUB MODULE: ${subModule}
153
+ SUB MODULE DIRECTORY: ${subModulePath}
154
+
155
+ IMPORTANT: YOU ARE CREATING THE README FOR THIS SUB MODULE: ${subModule}
156
+ The Sub Module will be published with:
157
+ ${JSON.stringify(tspublishData, null, 2)}
158
+
159
+ Use the filesystem tool to explore the submodule:
160
+ 1. Use tree to see the submodule structure
161
+ 2. Read package.json to understand the submodule
162
+ 3. Read source files in ts/ directory to understand the implementation
163
+
164
+ Generate a README following the template:
165
+
166
+ # Project Name
167
+ [name and description from package.json]
168
+
169
+ ## Install
170
+ [installation instructions]
171
+
172
+ ## Usage
173
+ [
174
+ Code examples with complete features.
175
+ ESM TypeScript syntax only.
176
+ Write at least 4000 words.
177
+ No licensing information.
178
+ No "in conclusion".
179
+ ]
180
+
181
+ Don't use \`\`\` at the beginning or end. Only for code blocks.
182
+ `;
183
+ const subModuleResult = await subModuleOrchestrator.run(subModulePrompt);
184
+ await subModuleOrchestrator.stop();
185
+ if (subModuleResult.success) {
186
+ const subModuleReadmeString = subModuleResult.result
187
+ .replace(/^```markdown\n?/i, '')
188
+ .replace(/\n?```$/i, '') + '\n' + legalInfo;
189
+ await plugins.fsInstance
190
+ .file(plugins.path.join(subModulePath, 'readme.md'))
191
+ .encoding('utf8')
192
+ .write(subModuleReadmeString);
193
+ logger.log('success', `Built readme for ${subModule}`);
194
+ }
195
+ else {
196
+ logger.log('error', `Failed to build readme for ${subModule}: ${subModuleResult.status}`);
197
+ }
130
198
  }
131
- return result.message;
199
+ return resultMessage;
132
200
  }
133
201
  }
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvYWlkb2NzX2NsYXNzZXMvcmVhZG1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE1BQU0sT0FBTyxNQUFNO0lBS2pCLFlBQVksU0FBZ0IsRUFBRSxhQUFxQjtRQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFM0IsdURBQXVEO1FBQ3ZELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FDckYsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FDOUIsQ0FBQztRQUNGLE1BQU0sa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdEMsZ0RBQWdEO1FBQ2hELE1BQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN4RSxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO1FBRTVDLDZCQUE2QjtRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixhQUFhLENBQUMsVUFBVSxZQUFZLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxjQUFjLGFBQWEsQ0FBQyxZQUFZLEVB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
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvYWlkb2NzX2NsYXNzZXMvcmVhZG1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE1BQU0sT0FBTyxNQUFNO0lBS2pCLFlBQVksU0FBZ0IsRUFBRSxhQUFxQjtRQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFM0IscURBQXFEO1FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUM3QixDQUFDLE1BQU0sY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUNoRixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDM0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUN2RSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8s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
@@ -5,12 +5,17 @@ export declare class AiDoc {
5
5
  npmextraKV: plugins.npmextra.KeyValueStore;
6
6
  qenvInstance: plugins.qenv.Qenv;
7
7
  aidocInteract: plugins.smartinteract.SmartInteract;
8
- openaiInstance: plugins.smartai.OpenAiProvider;
8
+ smartAiInstance: plugins.smartai.SmartAi;
9
9
  argvArg: any;
10
10
  constructor(argvArg?: any);
11
11
  private printSanitizedToken;
12
12
  start(): Promise<void>;
13
13
  stop(): Promise<void>;
14
+ /**
15
+ * Get the OpenAI provider for direct chat calls
16
+ * This is a convenience getter to access the provider from SmartAi
17
+ */
18
+ get openaiProvider(): plugins.smartai.OpenAiProvider;
14
19
  getOpenaiToken(): string;
15
20
  buildReadme(projectDirArg: string): Promise<string>;
16
21
  buildDescription(projectDirArg: string): Promise<string>;
@@ -39,10 +44,9 @@ export declare class AiDoc {
39
44
  */
40
45
  getProjectContextTokenCount(projectDirArg: string): Promise<number>;
41
46
  /**
42
- * Count tokens in a text string using GPT tokenizer
43
- * @param text The text to count tokens for
44
- * @param model The model to use for tokenization (default: gpt-3.5-turbo)
45
- * @returns The number of tokens in the text
47
+ * Estimate token count in a text string
48
+ * @param text The text to estimate tokens for
49
+ * @returns Estimated number of tokens
46
50
  */
47
- countTokens(text: string, model?: string): number;
51
+ countTokens(text: string): number;
48
52
  }
@@ -68,18 +68,25 @@ export class AiDoc {
68
68
  this.openaiToken = await this.npmextraKV.readKey('OPENAI_TOKEN');
69
69
  }
70
70
  // lets assume we have an OPENAI_Token now
71
- this.openaiInstance = new plugins.smartai.OpenAiProvider({
71
+ this.smartAiInstance = new plugins.smartai.SmartAi({
72
72
  openaiToken: this.openaiToken,
73
73
  });
74
- await this.openaiInstance.start();
74
+ await this.smartAiInstance.start();
75
75
  }
76
76
  async stop() {
77
- if (this.openaiInstance) {
78
- await this.openaiInstance.stop();
77
+ if (this.smartAiInstance) {
78
+ await this.smartAiInstance.stop();
79
79
  }
80
80
  // No explicit cleanup needed for npmextraKV or aidocInteract
81
81
  // They don't keep event loop alive
82
82
  }
83
+ /**
84
+ * Get the OpenAI provider for direct chat calls
85
+ * This is a convenience getter to access the provider from SmartAi
86
+ */
87
+ get openaiProvider() {
88
+ return this.smartAiInstance.openaiProvider;
89
+ }
83
90
  getOpenaiToken() {
84
91
  return this.openaiToken;
85
92
  }
@@ -120,14 +127,13 @@ export class AiDoc {
120
127
  return projectContextInstance.getTokenCount();
121
128
  }
122
129
  /**
123
- * Count tokens in a text string using GPT tokenizer
124
- * @param text The text to count tokens for
125
- * @param model The model to use for tokenization (default: gpt-3.5-turbo)
126
- * @returns The number of tokens in the text
130
+ * Estimate token count in a text string
131
+ * @param text The text to estimate tokens for
132
+ * @returns Estimated number of tokens
127
133
  */
128
- countTokens(text, model = 'gpt-3.5-turbo') {
134
+ countTokens(text) {
129
135
  const projectContextInstance = new aiDocsClasses.ProjectContext('');
130
- return projectContextInstance.countTokens(text, model);
136
+ return projectContextInstance.countTokens(text);
131
137
  }
132
138
  }
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5haWRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYWlkb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxLQUFLLGFBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sS0FBSztJQVVoQixZQUFZLE9BQWE7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixpRkFBaUY7UUFDakYsSUFBSSxVQUFrQixDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsbURBQW1EO1lBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRSxVQUFVLEdBQUcsR0FBRyxLQUFLLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixtREFBbUQ7WUFDbkQsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJ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
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5haWRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYWlkb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxLQUFLLGFBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sS0FBSztJQVVoQixZQUFZLE9BQWE7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixpRkFBaUY7UUFDakYsSUFBSSxVQUFrQixDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsbURBQW1EO1lBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRSxVQUFVLEdBQUcsR0FBRyxLQUFLLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixtREFBbUQ7WUFDbkQsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJ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