@ai-coders/context 0.1.0

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +658 -0
  3. package/dist/generators/agentGenerator.d.ts +23 -0
  4. package/dist/generators/agentGenerator.d.ts.map +1 -0
  5. package/dist/generators/agentGenerator.js +357 -0
  6. package/dist/generators/agentGenerator.js.map +1 -0
  7. package/dist/generators/documentationGenerator.d.ts +40 -0
  8. package/dist/generators/documentationGenerator.d.ts.map +1 -0
  9. package/dist/generators/documentationGenerator.js +786 -0
  10. package/dist/generators/documentationGenerator.js.map +1 -0
  11. package/dist/generators/incrementalDocumentationGenerator.d.ts +33 -0
  12. package/dist/generators/incrementalDocumentationGenerator.d.ts.map +1 -0
  13. package/dist/generators/incrementalDocumentationGenerator.js +400 -0
  14. package/dist/generators/incrementalDocumentationGenerator.js.map +1 -0
  15. package/dist/index.d.ts +6 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +559 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/services/anthropicClient.d.ts +12 -0
  20. package/dist/services/anthropicClient.d.ts.map +1 -0
  21. package/dist/services/anthropicClient.js +98 -0
  22. package/dist/services/anthropicClient.js.map +1 -0
  23. package/dist/services/baseLLMClient.d.ts +12 -0
  24. package/dist/services/baseLLMClient.d.ts.map +1 -0
  25. package/dist/services/baseLLMClient.js +41 -0
  26. package/dist/services/baseLLMClient.js.map +1 -0
  27. package/dist/services/changeAnalyzer.d.ts +44 -0
  28. package/dist/services/changeAnalyzer.d.ts.map +1 -0
  29. package/dist/services/changeAnalyzer.js +344 -0
  30. package/dist/services/changeAnalyzer.js.map +1 -0
  31. package/dist/services/geminiClient.d.ts +12 -0
  32. package/dist/services/geminiClient.d.ts.map +1 -0
  33. package/dist/services/geminiClient.js +96 -0
  34. package/dist/services/geminiClient.js.map +1 -0
  35. package/dist/services/grokClient.d.ts +12 -0
  36. package/dist/services/grokClient.d.ts.map +1 -0
  37. package/dist/services/grokClient.js +101 -0
  38. package/dist/services/grokClient.js.map +1 -0
  39. package/dist/services/llmClientFactory.d.ts +14 -0
  40. package/dist/services/llmClientFactory.d.ts.map +1 -0
  41. package/dist/services/llmClientFactory.js +109 -0
  42. package/dist/services/llmClientFactory.js.map +1 -0
  43. package/dist/services/openRouterClient.d.ts +12 -0
  44. package/dist/services/openRouterClient.d.ts.map +1 -0
  45. package/dist/services/openRouterClient.js +96 -0
  46. package/dist/services/openRouterClient.js.map +1 -0
  47. package/dist/services/openaiClient.d.ts +12 -0
  48. package/dist/services/openaiClient.d.ts.map +1 -0
  49. package/dist/services/openaiClient.js +98 -0
  50. package/dist/services/openaiClient.js.map +1 -0
  51. package/dist/types.d.ts +60 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +3 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/utils/cliUI.d.ts +25 -0
  56. package/dist/utils/cliUI.d.ts.map +1 -0
  57. package/dist/utils/cliUI.js +236 -0
  58. package/dist/utils/cliUI.js.map +1 -0
  59. package/dist/utils/fileMapper.d.ts +11 -0
  60. package/dist/utils/fileMapper.d.ts.map +1 -0
  61. package/dist/utils/fileMapper.js +125 -0
  62. package/dist/utils/fileMapper.js.map +1 -0
  63. package/dist/utils/gitService.d.ts +50 -0
  64. package/dist/utils/gitService.d.ts.map +1 -0
  65. package/dist/utils/gitService.js +470 -0
  66. package/dist/utils/gitService.js.map +1 -0
  67. package/dist/utils/interactiveMode.d.ts +16 -0
  68. package/dist/utils/interactiveMode.d.ts.map +1 -0
  69. package/dist/utils/interactiveMode.js +432 -0
  70. package/dist/utils/interactiveMode.js.map +1 -0
  71. package/dist/utils/pricing.d.ts +14 -0
  72. package/dist/utils/pricing.d.ts.map +1 -0
  73. package/dist/utils/pricing.js +115 -0
  74. package/dist/utils/pricing.js.map +1 -0
  75. package/dist/utils/tokenEstimator.d.ts +27 -0
  76. package/dist/utils/tokenEstimator.d.ts.map +1 -0
  77. package/dist/utils/tokenEstimator.js +198 -0
  78. package/dist/utils/tokenEstimator.js.map +1 -0
  79. package/package.json +73 -0
@@ -0,0 +1,432 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.InteractiveMode = void 0;
40
+ const inquirer_1 = __importDefault(require("inquirer"));
41
+ const path = __importStar(require("path"));
42
+ const fs = __importStar(require("fs-extra"));
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ const cliUI_1 = require("./cliUI");
45
+ const llmClientFactory_1 = require("../services/llmClientFactory");
46
+ class InteractiveMode {
47
+ constructor() {
48
+ this.ui = new cliUI_1.CLIInterface();
49
+ }
50
+ async start() {
51
+ this.ui.displayWelcome('0.1.0');
52
+ console.log(chalk_1.default.cyan('\n🎯 Interactive Mode\n'));
53
+ console.log(chalk_1.default.gray('Let me help you get started with AI Context Generator!\n'));
54
+ const answers = await this.promptMainCommand();
55
+ if (answers.command === 'exit') {
56
+ console.log(chalk_1.default.yellow('\n👋 Goodbye!\n'));
57
+ process.exit(0);
58
+ }
59
+ // Execute the selected command
60
+ await this.executeCommand(answers);
61
+ }
62
+ async promptMainCommand() {
63
+ const { command } = await inquirer_1.default.prompt([
64
+ {
65
+ type: 'list',
66
+ name: 'command',
67
+ message: 'What would you like to do?',
68
+ choices: [
69
+ {
70
+ name: '🚀 Initialize documentation and AI agents for a new project',
71
+ value: 'init',
72
+ short: 'Initialize'
73
+ },
74
+ {
75
+ name: '🔍 Analyze repository structure and estimate costs',
76
+ value: 'analyze',
77
+ short: 'Analyze'
78
+ },
79
+ {
80
+ name: '🔄 Update existing documentation with recent changes',
81
+ value: 'update',
82
+ short: 'Update'
83
+ },
84
+ {
85
+ name: '👁️ Preview what changes would be made',
86
+ value: 'preview',
87
+ short: 'Preview'
88
+ },
89
+ {
90
+ name: '❌ Exit',
91
+ value: 'exit',
92
+ short: 'Exit'
93
+ }
94
+ ]
95
+ }
96
+ ]);
97
+ if (command === 'exit') {
98
+ return { command };
99
+ }
100
+ // Get common parameters
101
+ const commonAnswers = await this.promptCommonParameters();
102
+ // Get command-specific parameters
103
+ let specificAnswers = {};
104
+ switch (command) {
105
+ case 'init':
106
+ specificAnswers = await this.promptInitParameters();
107
+ break;
108
+ case 'update':
109
+ case 'preview':
110
+ // These commands might need additional parameters in the future
111
+ break;
112
+ }
113
+ return {
114
+ command,
115
+ ...commonAnswers,
116
+ ...specificAnswers
117
+ };
118
+ }
119
+ async promptCommonParameters() {
120
+ const answers = await inquirer_1.default.prompt([
121
+ {
122
+ type: 'input',
123
+ name: 'repoPath',
124
+ message: 'Enter the path to your repository:',
125
+ default: '.',
126
+ validate: async (input) => {
127
+ const resolvedPath = path.resolve(input);
128
+ if (await fs.pathExists(resolvedPath)) {
129
+ return true;
130
+ }
131
+ return 'Path does not exist. Please enter a valid path.';
132
+ }
133
+ },
134
+ {
135
+ type: 'input',
136
+ name: 'outputDir',
137
+ message: 'Where should the output be saved?',
138
+ default: './.context'
139
+ }
140
+ ]);
141
+ return answers;
142
+ }
143
+ async promptInitParameters() {
144
+ const initAnswers = await inquirer_1.default.prompt([
145
+ {
146
+ type: 'list',
147
+ name: 'initType',
148
+ message: 'What would you like to initialize?',
149
+ choices: [
150
+ {
151
+ name: '📚 Both documentation and AI agents (recommended)',
152
+ value: 'both',
153
+ short: 'Both'
154
+ },
155
+ {
156
+ name: '📄 Documentation only',
157
+ value: 'docs',
158
+ short: 'Docs only'
159
+ },
160
+ {
161
+ name: '🤖 AI agents only',
162
+ value: 'agents',
163
+ short: 'Agents only'
164
+ }
165
+ ],
166
+ default: 'both'
167
+ }
168
+ ]);
169
+ // Ask for LLM configuration
170
+ const llmAnswers = await this.promptLLMConfiguration();
171
+ // Ask for patterns
172
+ const patternAnswers = await this.promptPatterns();
173
+ return {
174
+ ...initAnswers,
175
+ ...llmAnswers,
176
+ ...patternAnswers
177
+ };
178
+ }
179
+ async promptLLMConfiguration() {
180
+ // First check if any API keys are already set in environment
181
+ const availableProviders = this.getAvailableProviders();
182
+ let provider;
183
+ let model;
184
+ let apiKey;
185
+ if (availableProviders.length > 0) {
186
+ const { useExisting } = await inquirer_1.default.prompt([
187
+ {
188
+ type: 'confirm',
189
+ name: 'useExisting',
190
+ message: `Found API keys for: ${availableProviders.join(', ')}. Use existing configuration?`,
191
+ default: true
192
+ }
193
+ ]);
194
+ if (useExisting) {
195
+ provider = availableProviders[0];
196
+ model = this.getDefaultModelForProvider(provider);
197
+ return { provider, model };
198
+ }
199
+ }
200
+ // Ask for provider
201
+ const { selectedProvider } = await inquirer_1.default.prompt([
202
+ {
203
+ type: 'list',
204
+ name: 'selectedProvider',
205
+ message: 'Choose your LLM provider:',
206
+ choices: [
207
+ { name: '🌐 OpenRouter (access to multiple models)', value: 'openrouter' },
208
+ { name: '🤖 OpenAI (GPT models)', value: 'openai' },
209
+ { name: '🧠 Anthropic (Claude models)', value: 'anthropic' },
210
+ { name: '🔷 Google Gemini', value: 'gemini' },
211
+ { name: '🚀 Grok (xAI)', value: 'grok' }
212
+ ]
213
+ }
214
+ ]);
215
+ provider = selectedProvider;
216
+ // Ask for model based on provider
217
+ const modelChoices = this.getModelsForProvider(provider);
218
+ const { selectedModel } = await inquirer_1.default.prompt([
219
+ {
220
+ type: 'list',
221
+ name: 'selectedModel',
222
+ message: 'Choose a model:',
223
+ choices: modelChoices,
224
+ default: this.getDefaultModelForProvider(provider)
225
+ }
226
+ ]);
227
+ model = selectedModel;
228
+ // Check if API key is needed
229
+ const envVars = llmClientFactory_1.LLMClientFactory.getEnvironmentVariables()[provider];
230
+ let hasApiKey = false;
231
+ for (const envVar of envVars) {
232
+ if (process.env[envVar]) {
233
+ hasApiKey = true;
234
+ break;
235
+ }
236
+ }
237
+ if (!hasApiKey) {
238
+ const { enteredApiKey } = await inquirer_1.default.prompt([
239
+ {
240
+ type: 'password',
241
+ name: 'enteredApiKey',
242
+ message: `Enter your ${provider.toUpperCase()} API key:`,
243
+ mask: '*',
244
+ validate: (input) => {
245
+ if (input.length > 0) {
246
+ return true;
247
+ }
248
+ return `API key is required. Get one from ${this.getProviderUrl(provider)}`;
249
+ }
250
+ }
251
+ ]);
252
+ apiKey = enteredApiKey;
253
+ }
254
+ return { provider, model, apiKey };
255
+ }
256
+ async promptPatterns() {
257
+ const { hasPatterns } = await inquirer_1.default.prompt([
258
+ {
259
+ type: 'confirm',
260
+ name: 'hasPatterns',
261
+ message: 'Do you want to customize file include/exclude patterns?',
262
+ default: false
263
+ }
264
+ ]);
265
+ if (!hasPatterns) {
266
+ return {};
267
+ }
268
+ const patterns = await inquirer_1.default.prompt([
269
+ {
270
+ type: 'input',
271
+ name: 'includePatterns',
272
+ message: 'Enter patterns to include (comma-separated, e.g., "src/**/*.ts,lib/**/*.js"):',
273
+ default: ''
274
+ },
275
+ {
276
+ type: 'input',
277
+ name: 'excludePatterns',
278
+ message: 'Enter additional patterns to exclude (comma-separated, e.g., "tests/**,*.test.ts"):',
279
+ default: ''
280
+ }
281
+ ]);
282
+ return patterns;
283
+ }
284
+ getAvailableProviders() {
285
+ const providers = [];
286
+ const providerMap = llmClientFactory_1.LLMClientFactory.getEnvironmentVariables();
287
+ for (const [provider, envVars] of Object.entries(providerMap)) {
288
+ for (const envVar of envVars) {
289
+ if (process.env[envVar]) {
290
+ providers.push(provider);
291
+ break;
292
+ }
293
+ }
294
+ }
295
+ return providers;
296
+ }
297
+ getDefaultModelForProvider(provider) {
298
+ const defaults = {
299
+ openrouter: 'google/gemini-2.5-flash-preview-05-20',
300
+ openai: 'gpt-4o-mini',
301
+ anthropic: 'claude-3-haiku-20240307',
302
+ gemini: 'gemini-2.5-flash-preview-05-20',
303
+ grok: 'grok-beta'
304
+ };
305
+ return defaults[provider] || 'default';
306
+ }
307
+ getModelsForProvider(provider) {
308
+ const models = {
309
+ openrouter: [
310
+ { name: '💰 Google Gemini 2.5 Flash (recommended, fast & cheap)', value: 'google/gemini-2.5-flash-preview-05-20' },
311
+ { name: '🚀 GPT-4o Mini (fast & capable)', value: 'openai/gpt-4o-mini' },
312
+ { name: '⚡ Claude 3 Haiku (very fast)', value: 'anthropic/claude-3-haiku' },
313
+ { name: '🧠 Claude 3.5 Sonnet (powerful)', value: 'anthropic/claude-3.5-sonnet' },
314
+ { name: '💎 GPT-4o (most capable)', value: 'openai/gpt-4o' }
315
+ ],
316
+ openai: [
317
+ { name: '💰 GPT-4o Mini (recommended, fast & cheap)', value: 'gpt-4o-mini' },
318
+ { name: '🚀 GPT-4o (most capable)', value: 'gpt-4o' },
319
+ { name: '📚 GPT-4 Turbo', value: 'gpt-4-turbo' }
320
+ ],
321
+ anthropic: [
322
+ { name: '⚡ Claude 3 Haiku (recommended, fast & cheap)', value: 'claude-3-haiku-20240307' },
323
+ { name: '🧠 Claude 3.5 Sonnet (powerful)', value: 'claude-3-5-sonnet-20241022' },
324
+ { name: '💎 Claude 3 Opus (most capable)', value: 'claude-3-opus-20240229' }
325
+ ],
326
+ gemini: [
327
+ { name: '⚡ Gemini 2.5 Flash (recommended)', value: 'gemini-2.5-flash-preview-05-20' },
328
+ { name: '🧠 Gemini 1.5 Pro', value: 'gemini-1.5-pro' }
329
+ ],
330
+ grok: [
331
+ { name: '🚀 Grok Beta', value: 'grok-beta' }
332
+ ]
333
+ };
334
+ return models[provider] || [];
335
+ }
336
+ getProviderUrl(provider) {
337
+ const urls = {
338
+ openrouter: 'https://openrouter.ai/keys',
339
+ openai: 'https://platform.openai.com/api-keys',
340
+ anthropic: 'https://console.anthropic.com/account/keys',
341
+ gemini: 'https://makersuite.google.com/app/apikey',
342
+ grok: 'https://console.x.ai/'
343
+ };
344
+ return urls[provider] || 'your provider\'s website';
345
+ }
346
+ async executeCommand(answers) {
347
+ const args = [];
348
+ // Build command arguments
349
+ args.push(answers.command);
350
+ if (answers.repoPath) {
351
+ args.push(answers.repoPath);
352
+ }
353
+ if (answers.command === 'init' && answers.initType) {
354
+ args.push(answers.initType);
355
+ }
356
+ // Add options
357
+ if (answers.outputDir) {
358
+ args.push('--output', answers.outputDir);
359
+ }
360
+ if (answers.provider) {
361
+ args.push('--provider', answers.provider);
362
+ }
363
+ if (answers.model) {
364
+ args.push('--model', answers.model);
365
+ }
366
+ if (answers.apiKey) {
367
+ args.push('--api-key', answers.apiKey);
368
+ }
369
+ if (answers.includePatterns) {
370
+ const patterns = answers.includePatterns.split(',').map(p => p.trim()).filter(p => p);
371
+ if (patterns.length > 0) {
372
+ args.push('--include', ...patterns);
373
+ }
374
+ }
375
+ if (answers.excludePatterns) {
376
+ const patterns = answers.excludePatterns.split(',').map(p => p.trim()).filter(p => p);
377
+ if (patterns.length > 0) {
378
+ args.push('--exclude', ...patterns);
379
+ }
380
+ }
381
+ // Show the command that will be executed
382
+ console.log(chalk_1.default.gray('\n📋 Executing command:'));
383
+ console.log(chalk_1.default.cyan(`ai-context ${args.join(' ')}\n`));
384
+ // Import and execute the command
385
+ const { runGenerate, runAnalyze, runUpdate, runPreview } = await Promise.resolve().then(() => __importStar(require('../index')));
386
+ try {
387
+ switch (answers.command) {
388
+ case 'init':
389
+ await runGenerate(answers.repoPath, {
390
+ output: answers.outputDir,
391
+ provider: answers.provider,
392
+ model: answers.model,
393
+ apiKey: answers.apiKey,
394
+ include: answers.includePatterns?.split(',').map(p => p.trim()).filter(p => p),
395
+ exclude: answers.excludePatterns?.split(',').map(p => p.trim()).filter(p => p),
396
+ docsOnly: answers.initType === 'docs',
397
+ agentsOnly: answers.initType === 'agents'
398
+ });
399
+ break;
400
+ case 'analyze':
401
+ await runAnalyze(answers.repoPath, {
402
+ include: answers.includePatterns?.split(',').map(p => p.trim()).filter(p => p),
403
+ exclude: answers.excludePatterns?.split(',').map(p => p.trim()).filter(p => p)
404
+ });
405
+ break;
406
+ case 'update':
407
+ await runUpdate(answers.repoPath, {
408
+ output: answers.outputDir,
409
+ provider: answers.provider,
410
+ model: answers.model,
411
+ apiKey: answers.apiKey,
412
+ include: answers.includePatterns?.split(',').map(p => p.trim()).filter(p => p),
413
+ exclude: answers.excludePatterns?.split(',').map(p => p.trim()).filter(p => p)
414
+ });
415
+ break;
416
+ case 'preview':
417
+ await runPreview(answers.repoPath, {
418
+ output: answers.outputDir,
419
+ include: answers.includePatterns?.split(',').map(p => p.trim()).filter(p => p),
420
+ exclude: answers.excludePatterns?.split(',').map(p => p.trim()).filter(p => p)
421
+ });
422
+ break;
423
+ }
424
+ }
425
+ catch (error) {
426
+ this.ui.displayError(`Failed to execute ${answers.command}`, error);
427
+ process.exit(1);
428
+ }
429
+ }
430
+ }
431
+ exports.InteractiveMode = InteractiveMode;
432
+ //# sourceMappingURL=interactiveMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactiveMode.js","sourceRoot":"","sources":["../../src/utils/interactiveMode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface ModelPricing {
2
+ inputPricePerMillion: number;
3
+ outputPricePerMillion: number;
4
+ description: string;
5
+ }
6
+ export declare const MODEL_PRICING: {
7
+ [key: string]: ModelPricing;
8
+ };
9
+ export declare function calculateCost(model: string, promptTokens: number, completionTokens: number): number;
10
+ export declare function formatCurrency(amount: number): string;
11
+ export declare function getModelInfo(model: string): ModelPricing | null;
12
+ export declare function getSupportedModels(): string[];
13
+ export declare function estimateTokens(text: string): number;
14
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/utils/pricing.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAgFxD,CAAC;AAEF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAYR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAE/D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ // OpenRouter pricing data - updated as of 2024
3
+ // Prices are per 1M tokens (input/output)
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.MODEL_PRICING = void 0;
6
+ exports.calculateCost = calculateCost;
7
+ exports.formatCurrency = formatCurrency;
8
+ exports.getModelInfo = getModelInfo;
9
+ exports.getSupportedModels = getSupportedModels;
10
+ exports.estimateTokens = estimateTokens;
11
+ exports.MODEL_PRICING = {
12
+ // Anthropic Claude models
13
+ 'anthropic/claude-3-haiku': {
14
+ inputPricePerMillion: 0.25,
15
+ outputPricePerMillion: 1.25,
16
+ description: 'Claude 3 Haiku - Fast and efficient'
17
+ },
18
+ 'anthropic/claude-3-sonnet': {
19
+ inputPricePerMillion: 3.0,
20
+ outputPricePerMillion: 15.0,
21
+ description: 'Claude 3 Sonnet - Balanced performance'
22
+ },
23
+ 'anthropic/claude-3-opus': {
24
+ inputPricePerMillion: 15.0,
25
+ outputPricePerMillion: 75.0,
26
+ description: 'Claude 3 Opus - Highest quality'
27
+ },
28
+ 'anthropic/claude-3.5-sonnet': {
29
+ inputPricePerMillion: 3.0,
30
+ outputPricePerMillion: 15.0,
31
+ description: 'Claude 3.5 Sonnet - Enhanced performance'
32
+ },
33
+ // OpenAI models
34
+ 'openai/gpt-4': {
35
+ inputPricePerMillion: 30.0,
36
+ outputPricePerMillion: 60.0,
37
+ description: 'GPT-4 - High quality reasoning'
38
+ },
39
+ 'openai/gpt-4-turbo': {
40
+ inputPricePerMillion: 10.0,
41
+ outputPricePerMillion: 30.0,
42
+ description: 'GPT-4 Turbo - Faster and cheaper'
43
+ },
44
+ 'openai/gpt-3.5-turbo': {
45
+ inputPricePerMillion: 1.0,
46
+ outputPricePerMillion: 2.0,
47
+ description: 'GPT-3.5 Turbo - Fast and economical'
48
+ },
49
+ // Google models
50
+ 'google/gemini-pro': {
51
+ inputPricePerMillion: 0.5,
52
+ outputPricePerMillion: 1.5,
53
+ description: 'Gemini Pro - Google\'s multimodal model'
54
+ },
55
+ 'google/gemini-2.5-flash-preview-05-20': {
56
+ inputPricePerMillion: 1.25,
57
+ outputPricePerMillion: 5.0,
58
+ description: 'Gemini 2.0 Pro - Latest Google model'
59
+ },
60
+ 'google/gemini-2.5-pro': {
61
+ inputPricePerMillion: 1.25,
62
+ outputPricePerMillion: 5.0,
63
+ description: 'Gemini 2.5 Pro - Enhanced Google model'
64
+ },
65
+ // Meta models
66
+ 'meta-llama/llama-3.1-70b-instruct': {
67
+ inputPricePerMillion: 0.88,
68
+ outputPricePerMillion: 0.88,
69
+ description: 'Llama 3.1 70B - Open source model'
70
+ },
71
+ 'meta-llama/llama-3.1-405b-instruct': {
72
+ inputPricePerMillion: 5.0,
73
+ outputPricePerMillion: 15.0,
74
+ description: 'Llama 3.1 405B - Largest open model'
75
+ },
76
+ // Mistral models
77
+ 'mistralai/mistral-large': {
78
+ inputPricePerMillion: 8.0,
79
+ outputPricePerMillion: 24.0,
80
+ description: 'Mistral Large - High performance model'
81
+ },
82
+ 'mistralai/mistral-medium': {
83
+ inputPricePerMillion: 2.7,
84
+ outputPricePerMillion: 8.1,
85
+ description: 'Mistral Medium - Balanced model'
86
+ }
87
+ };
88
+ function calculateCost(model, promptTokens, completionTokens) {
89
+ const pricing = exports.MODEL_PRICING[model];
90
+ if (!pricing) {
91
+ // Fallback pricing for unknown models (estimate based on GPT-3.5)
92
+ return ((promptTokens / 1000000) * 1.0) + ((completionTokens / 1000000) * 2.0);
93
+ }
94
+ const inputCost = (promptTokens / 1000000) * pricing.inputPricePerMillion;
95
+ const outputCost = (completionTokens / 1000000) * pricing.outputPricePerMillion;
96
+ return inputCost + outputCost;
97
+ }
98
+ function formatCurrency(amount) {
99
+ if (amount < 0.01) {
100
+ return `$${(amount * 100).toFixed(3)}¢`;
101
+ }
102
+ return `$${amount.toFixed(4)}`;
103
+ }
104
+ function getModelInfo(model) {
105
+ return exports.MODEL_PRICING[model] || null;
106
+ }
107
+ function getSupportedModels() {
108
+ return Object.keys(exports.MODEL_PRICING);
109
+ }
110
+ function estimateTokens(text) {
111
+ // Rough estimation: ~4 characters per token for English text
112
+ // This is approximate and varies by model and language
113
+ return Math.ceil(text.length / 4);
114
+ }
115
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/utils/pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { RepoStructure } from '../types';
2
+ import { FileMapper } from './fileMapper';
3
+ export interface TokenEstimate {
4
+ totalFiles: number;
5
+ estimatedInputTokens: number;
6
+ estimatedOutputTokens: number;
7
+ estimatedTotalTokens: number;
8
+ costEstimates: {
9
+ [modelKey: string]: {
10
+ provider: string;
11
+ modelName: string;
12
+ inputCost: number;
13
+ outputCost: number;
14
+ totalCost: number;
15
+ };
16
+ };
17
+ }
18
+ export declare class TokenEstimator {
19
+ private fileMapper;
20
+ constructor(fileMapper: FileMapper);
21
+ estimateTokensForFullGeneration(repoStructure: RepoStructure): Promise<TokenEstimate>;
22
+ private selectSampleFiles;
23
+ private estimateTokensFromText;
24
+ private calculateCostEstimates;
25
+ formatTokenEstimate(estimate: TokenEstimate): string;
26
+ }
27
+ //# sourceMappingURL=tokenEstimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenEstimator.d.ts","sourceRoot":"","sources":["../../src/utils/tokenEstimator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,aAAa,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyF1C,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE;QACb,CAAC,QAAQ,EAAE,MAAM,GAAG;YAClB,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC;YACnB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;CACH;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEpC,+BAA+B,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IA8C3F,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,sBAAsB;IAoB9B,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM;CAqCrD"}