@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
package/dist/index.js ADDED
@@ -0,0 +1,559 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.runGenerate = runGenerate;
41
+ exports.runAnalyze = runAnalyze;
42
+ exports.runUpdate = runUpdate;
43
+ exports.runPreview = runPreview;
44
+ const commander_1 = require("commander");
45
+ const path = __importStar(require("path"));
46
+ const chalk_1 = __importDefault(require("chalk"));
47
+ const dotenv = __importStar(require("dotenv"));
48
+ // Load environment variables from .env file
49
+ dotenv.config();
50
+ const fileMapper_1 = require("./utils/fileMapper");
51
+ const documentationGenerator_1 = require("./generators/documentationGenerator");
52
+ const agentGenerator_1 = require("./generators/agentGenerator");
53
+ const incrementalDocumentationGenerator_1 = require("./generators/incrementalDocumentationGenerator");
54
+ const cliUI_1 = require("./utils/cliUI");
55
+ const llmClientFactory_1 = require("./services/llmClientFactory");
56
+ const gitService_1 = require("./utils/gitService");
57
+ const changeAnalyzer_1 = require("./services/changeAnalyzer");
58
+ const tokenEstimator_1 = require("./utils/tokenEstimator");
59
+ const interactiveMode_1 = require("./utils/interactiveMode");
60
+ const program = new commander_1.Command();
61
+ const ui = new cliUI_1.CLIInterface();
62
+ program
63
+ .name('ai-context')
64
+ .description('AI-powered CLI for generating codebase documentation and agent prompts')
65
+ .version('0.1.0');
66
+ program
67
+ .command('init')
68
+ .description('Initialize documentation and agent prompts for a repository')
69
+ .argument('<repo-path>', 'Path to the repository to analyze')
70
+ .argument('[type]', 'Type to initialize: "docs", "agents", or "both" (default: "both")', 'both')
71
+ .option('-o, --output <dir>', 'Output directory', './.context')
72
+ .option('-k, --api-key <key>', 'API key for the LLM provider')
73
+ .option('-m, --model <model>', 'LLM model to use', 'google/gemini-2.5-flash-preview-05-20')
74
+ .option('-p, --provider <provider>', 'LLM provider (openrouter, openai, anthropic, gemini, grok)', 'openrouter')
75
+ .option('--exclude <patterns...>', 'Patterns to exclude from analysis')
76
+ .option('--include <patterns...>', 'Patterns to include in analysis')
77
+ .option('-v, --verbose', 'Verbose output')
78
+ .action(async (repoPath, type, options) => {
79
+ try {
80
+ // Validate type argument
81
+ if (!['docs', 'agents', 'both'].includes(type)) {
82
+ ui.displayError(`Invalid type "${type}". Must be "docs", "agents", or "both".`);
83
+ process.exit(1);
84
+ }
85
+ // Set options based on type argument
86
+ if (type === 'docs') {
87
+ options.docsOnly = true;
88
+ }
89
+ else if (type === 'agents') {
90
+ options.agentsOnly = true;
91
+ }
92
+ // For 'both', neither flag is set
93
+ await runGenerate(repoPath, options);
94
+ }
95
+ catch (error) {
96
+ ui.displayError('Failed to initialize', error);
97
+ process.exit(1);
98
+ }
99
+ });
100
+ program
101
+ .command('update')
102
+ .description('Update documentation for changed files since last run or specified commit')
103
+ .argument('<repo-path>', 'Path to the repository to analyze')
104
+ .option('-o, --output <dir>', 'Output directory', './.context')
105
+ .option('-k, --api-key <key>', 'API key for the LLM provider')
106
+ .option('-m, --model <model>', 'LLM model to use', 'google/gemini-2.5-flash-preview-05-20')
107
+ .option('-p, --provider <provider>', 'LLM provider (openrouter, openai, anthropic, gemini, grok)', 'openrouter')
108
+ .option('--since <commit>', 'Compare against specific commit/branch (default: last processed commit)')
109
+ .option('--staged', 'Only process staged files (for pre-commit hooks)')
110
+ .option('--force', 'Force regeneration even if no changes detected')
111
+ .option('--exclude <patterns...>', 'Patterns to exclude from analysis')
112
+ .option('--include <patterns...>', 'Patterns to include in analysis')
113
+ .option('-v, --verbose', 'Verbose output')
114
+ .action(async (repoPath, options) => {
115
+ try {
116
+ await runUpdate(repoPath, options);
117
+ }
118
+ catch (error) {
119
+ ui.displayError('Failed to update documentation', error);
120
+ process.exit(1);
121
+ }
122
+ });
123
+ program
124
+ .command('analyze')
125
+ .description('Analyze repository structure without generating content')
126
+ .argument('<repo-path>', 'Path to the repository to analyze')
127
+ .option('--exclude <patterns...>', 'Patterns to exclude from analysis')
128
+ .option('--include <patterns...>', 'Patterns to include in analysis')
129
+ .option('-v, --verbose', 'Verbose output')
130
+ .action(async (repoPath, options) => {
131
+ try {
132
+ await runAnalyze(repoPath, options);
133
+ }
134
+ catch (error) {
135
+ ui.displayError('Failed to analyze repository', error);
136
+ process.exit(1);
137
+ }
138
+ });
139
+ program
140
+ .command('preview')
141
+ .description('Preview what documentation updates would be made without actually updating')
142
+ .argument('<repo-path>', 'Path to the repository to analyze')
143
+ .option('--since <commit>', 'Compare against specific commit/branch (default: last processed commit)')
144
+ .option('--staged', 'Only analyze staged files (for pre-commit hooks)')
145
+ .option('--exclude <patterns...>', 'Patterns to exclude from analysis')
146
+ .option('--include <patterns...>', 'Patterns to include in analysis')
147
+ .option('-v, --verbose', 'Verbose output with detailed file lists')
148
+ .addHelpText('after', `
149
+ Examples:
150
+ $ ai-context preview ./ # Preview changes since last run
151
+ $ ai-context preview ./ --staged # Preview staged files only
152
+ $ ai-context preview ./ --since HEAD~3 # Preview changes since 3 commits ago
153
+ $ ai-context preview ./ --verbose # Show detailed file change lists`)
154
+ .action(async (repoPath, options) => {
155
+ try {
156
+ await runPreview(repoPath, options);
157
+ }
158
+ catch (error) {
159
+ ui.displayError('Failed to preview updates', error);
160
+ process.exit(1);
161
+ }
162
+ });
163
+ async function runGenerate(repoPath, options) {
164
+ const provider = options.provider || llmClientFactory_1.LLMClientFactory.detectProviderFromModel(options.model);
165
+ // Get API key from options or environment variables
166
+ let apiKey = options.apiKey;
167
+ if (!apiKey) {
168
+ const envVars = llmClientFactory_1.LLMClientFactory.getEnvironmentVariables()[provider];
169
+ for (const envVar of envVars) {
170
+ apiKey = process.env[envVar];
171
+ if (apiKey)
172
+ break;
173
+ }
174
+ }
175
+ const cliOptions = {
176
+ repoPath: path.resolve(repoPath),
177
+ outputDir: path.resolve(options.output),
178
+ model: options.model,
179
+ apiKey,
180
+ provider,
181
+ exclude: options.exclude || [],
182
+ include: options.include,
183
+ verbose: options.verbose || false
184
+ };
185
+ if (!cliOptions.apiKey) {
186
+ const envVars = llmClientFactory_1.LLMClientFactory.getEnvironmentVariables()[provider];
187
+ ui.displayError(`${provider.toUpperCase()} API key is required. Set one of these environment variables: ${envVars.join(', ')} or use --api-key option.`);
188
+ process.exit(1);
189
+ }
190
+ // Display welcome message
191
+ ui.displayWelcome('0.1.0');
192
+ ui.displayProjectInfo(cliOptions.repoPath, cliOptions.outputDir, cliOptions.model, cliOptions.provider);
193
+ // Show usage warning for expensive models
194
+ if (cliOptions.model && ['anthropic/claude-3-opus', 'openai/gpt-4'].includes(cliOptions.model)) {
195
+ ui.displayUsageWarning(2.0); // Estimate high cost for warning
196
+ }
197
+ // Initialize components
198
+ const fileMapper = new fileMapper_1.FileMapper(cliOptions.exclude);
199
+ const llmConfig = {
200
+ apiKey: cliOptions.apiKey,
201
+ model: cliOptions.model || 'google/gemini-2.5-flash-preview-05-20',
202
+ provider: cliOptions.provider || 'openrouter'
203
+ };
204
+ const llmClient = llmClientFactory_1.LLMClientFactory.createClient(llmConfig);
205
+ const docGenerator = new documentationGenerator_1.DocumentationGenerator(fileMapper, llmClient);
206
+ const agentGenerator = new agentGenerator_1.AgentGenerator(fileMapper, llmClient);
207
+ // Step 1: Map repository structure
208
+ ui.displayStep(1, 4, 'Analyzing repository structure');
209
+ ui.startSpinner('Scanning files and directories...');
210
+ const repoStructure = await fileMapper.mapRepository(cliOptions.repoPath, cliOptions.include);
211
+ ui.updateSpinner(`Found ${repoStructure.totalFiles} files in ${repoStructure.directories.length} directories`, 'success');
212
+ // Display analysis results
213
+ if (cliOptions.verbose) {
214
+ ui.displayAnalysisResults(repoStructure.totalFiles, repoStructure.directories.length, ui.formatBytes(repoStructure.totalSize));
215
+ // Show file distribution
216
+ const extensions = new Map();
217
+ repoStructure.files.forEach(file => {
218
+ const ext = file.extension || 'no-extension';
219
+ extensions.set(ext, (extensions.get(ext) || 0) + 1);
220
+ });
221
+ ui.displayFileTypeDistribution(extensions, repoStructure.totalFiles);
222
+ }
223
+ let docsGenerated = 0;
224
+ let agentsGenerated = 0;
225
+ // Step 2: Generate documentation
226
+ if (!options.agentsOnly) {
227
+ ui.displayStep(2, 4, 'Generating documentation');
228
+ ui.startSpinner('Creating comprehensive documentation...');
229
+ try {
230
+ await docGenerator.generateDocumentation(repoStructure, cliOptions.outputDir, false // We'll handle our own progress display
231
+ );
232
+ docsGenerated = 10; // Number of doc files generated (README, STRUCTURE, DEVELOPMENT, API, DEPLOYMENT, TROUBLESHOOTING, configuration + modules)
233
+ ui.updateSpinner('Documentation generated successfully', 'success');
234
+ }
235
+ catch (error) {
236
+ ui.updateSpinner('Failed to generate documentation', 'fail');
237
+ throw error;
238
+ }
239
+ }
240
+ // Step 3: Generate agent prompts
241
+ if (!options.docsOnly) {
242
+ ui.displayStep(3, 4, 'Generating AI agent prompts');
243
+ ui.startSpinner('Creating specialized agent prompts...');
244
+ try {
245
+ await agentGenerator.generateAgentPrompts(repoStructure, cliOptions.outputDir, false // We'll handle our own progress display
246
+ );
247
+ agentsGenerated = 9; // Number of agent files generated
248
+ ui.updateSpinner('Agent prompts generated successfully', 'success');
249
+ }
250
+ catch (error) {
251
+ ui.updateSpinner('Failed to generate agent prompts', 'fail');
252
+ throw error;
253
+ }
254
+ }
255
+ // Step 4: Complete
256
+ ui.displayStep(4, 4, 'Finalizing output');
257
+ // Get usage statistics from the LLM client
258
+ const usageStats = llmClient.getUsageStats();
259
+ ui.displayGenerationSummary(docsGenerated, agentsGenerated, usageStats);
260
+ ui.displaySuccess(`Output saved to: ${cliOptions.outputDir}`);
261
+ }
262
+ async function runAnalyze(repoPath, options) {
263
+ const resolvedPath = path.resolve(repoPath);
264
+ // Display welcome
265
+ ui.displayWelcome('0.1.0');
266
+ ui.startSpinner('Analyzing repository structure...');
267
+ const fileMapper = new fileMapper_1.FileMapper(options.exclude || []);
268
+ const repoStructure = await fileMapper.mapRepository(resolvedPath, options.include);
269
+ ui.stopSpinner();
270
+ // Display analysis results
271
+ ui.displayAnalysisResults(repoStructure.totalFiles, repoStructure.directories.length, ui.formatBytes(repoStructure.totalSize));
272
+ // File type distribution
273
+ const extensions = new Map();
274
+ repoStructure.files.forEach(file => {
275
+ const ext = file.extension || 'no-extension';
276
+ extensions.set(ext, (extensions.get(ext) || 0) + 1);
277
+ });
278
+ ui.displayFileTypeDistribution(extensions, repoStructure.totalFiles);
279
+ // Directory structure (top level)
280
+ const topDirs = repoStructure.directories
281
+ .filter(dir => !dir.relativePath.includes('/'))
282
+ .slice(0, 10);
283
+ if (topDirs.length > 0) {
284
+ console.log(chalk_1.default.bold('\nšŸ“‚ Top-level Directories:'));
285
+ console.log(chalk_1.default.gray('─'.repeat(50)));
286
+ topDirs.forEach(dir => {
287
+ console.log(` ${chalk_1.default.blue('ā–ø')} ${chalk_1.default.white(dir.relativePath)}`);
288
+ });
289
+ }
290
+ // Token estimation for full documentation generation
291
+ ui.startSpinner('Estimating token usage for full documentation generation...');
292
+ const tokenEstimator = new tokenEstimator_1.TokenEstimator(fileMapper);
293
+ const tokenEstimate = await tokenEstimator.estimateTokensForFullGeneration(repoStructure);
294
+ ui.stopSpinner();
295
+ console.log(tokenEstimator.formatTokenEstimate(tokenEstimate));
296
+ ui.displaySuccess('Analysis complete!');
297
+ }
298
+ async function runUpdate(repoPath, options) {
299
+ const provider = options.provider || llmClientFactory_1.LLMClientFactory.detectProviderFromModel(options.model);
300
+ // Get API key from options or environment variables
301
+ let apiKey = options.apiKey;
302
+ if (!apiKey) {
303
+ const envVars = llmClientFactory_1.LLMClientFactory.getEnvironmentVariables()[provider];
304
+ for (const envVar of envVars) {
305
+ apiKey = process.env[envVar];
306
+ if (apiKey)
307
+ break;
308
+ }
309
+ }
310
+ const cliOptions = {
311
+ repoPath: path.resolve(repoPath),
312
+ outputDir: path.resolve(options.output),
313
+ model: options.model,
314
+ apiKey,
315
+ provider,
316
+ exclude: options.exclude || [],
317
+ include: options.include,
318
+ verbose: options.verbose || false,
319
+ since: options.since,
320
+ staged: options.staged || false,
321
+ force: options.force || false
322
+ };
323
+ if (!cliOptions.apiKey) {
324
+ const envVars = llmClientFactory_1.LLMClientFactory.getEnvironmentVariables()[provider];
325
+ ui.displayError(`${provider.toUpperCase()} API key is required. Set one of these environment variables: ${envVars.join(', ')} or use --api-key option.`);
326
+ process.exit(1);
327
+ }
328
+ // Initialize git service
329
+ const gitService = new gitService_1.GitService(cliOptions.repoPath);
330
+ if (!gitService.isGitRepository()) {
331
+ ui.displayError('This command requires a Git repository. Initialize git first or use the generate command instead.');
332
+ process.exit(1);
333
+ }
334
+ // Check if context has been initialized
335
+ if (!gitService.hasContextBeenInitialized(cliOptions.outputDir)) {
336
+ ui.displayError('No documentation context found. You should run analyze and init before updating.');
337
+ console.log(chalk_1.default.bold('\nšŸ’” Getting Started:'));
338
+ console.log(chalk_1.default.gray('─'.repeat(50)));
339
+ console.log(`${chalk_1.default.blue('1. Analyze:')} ai-context analyze ${cliOptions.repoPath}`);
340
+ console.log(`${chalk_1.default.blue('2. Initialize:')} ai-context init ${cliOptions.repoPath}`);
341
+ console.log(`${chalk_1.default.blue('3. Update:')} ai-context update ${cliOptions.repoPath}`);
342
+ console.log(chalk_1.default.gray('─'.repeat(50)));
343
+ console.log(chalk_1.default.gray('The analyze command shows token estimates and costs.'));
344
+ console.log(chalk_1.default.gray('The init command creates the initial documentation.'));
345
+ console.log(chalk_1.default.gray('The update command incrementally updates existing documentation.'));
346
+ process.exit(1);
347
+ }
348
+ // Display welcome message
349
+ ui.displayWelcome('0.1.0');
350
+ ui.displayProjectInfo(cliOptions.repoPath, cliOptions.outputDir, cliOptions.model, cliOptions.provider);
351
+ // Initialize components
352
+ const fileMapper = new fileMapper_1.FileMapper(cliOptions.exclude);
353
+ const llmConfig = {
354
+ apiKey: cliOptions.apiKey,
355
+ model: cliOptions.model || 'google/gemini-2.5-flash-preview-05-20',
356
+ provider: cliOptions.provider || 'openrouter'
357
+ };
358
+ const llmClient = llmClientFactory_1.LLMClientFactory.createClient(llmConfig);
359
+ const incrementalGenerator = new incrementalDocumentationGenerator_1.IncrementalDocumentationGenerator(fileMapper, llmClient, gitService);
360
+ // Step 1: Analyze repository structure
361
+ ui.displayStep(1, 4, 'Analyzing repository structure');
362
+ ui.startSpinner('Scanning files and directories...');
363
+ const repoStructure = await fileMapper.mapRepository(cliOptions.repoPath, cliOptions.include);
364
+ ui.updateSpinner(`Found ${repoStructure.totalFiles} files in ${repoStructure.directories.length} directories`, 'success');
365
+ // Step 2: Detect changes
366
+ ui.displayStep(2, 4, 'Detecting changes');
367
+ // Display commit tracking info in verbose mode
368
+ if (cliOptions.verbose) {
369
+ gitService.displayCommitTrackingInfo(true);
370
+ }
371
+ ui.startSpinner('Analyzing git changes...');
372
+ let changes;
373
+ if (cliOptions.staged) {
374
+ // For pre-commit hooks - analyze only staged files
375
+ changes = gitService.getStagedChanges();
376
+ }
377
+ else if (cliOptions.since) {
378
+ // Compare against specific commit
379
+ changes = gitService.getChangedFiles(cliOptions.since);
380
+ }
381
+ else {
382
+ // Compare against last processed commit
383
+ changes = gitService.getChangedFiles();
384
+ }
385
+ const totalChanges = changes.added.length + changes.modified.length + changes.deleted.length + changes.renamed.length;
386
+ if (totalChanges === 0 && !cliOptions.force) {
387
+ ui.updateSpinner('No changes detected since last run', 'info');
388
+ ui.displaySuccess('Documentation is up to date!');
389
+ return;
390
+ }
391
+ ui.updateSpinner(`Found ${totalChanges} changed files`, 'success');
392
+ // Step 3: Update documentation
393
+ ui.displayStep(3, 4, 'Updating documentation');
394
+ ui.startSpinner('Processing changed files...');
395
+ const result = await incrementalGenerator.updateDocumentation(repoStructure, cliOptions.outputDir, changes, cliOptions.verbose);
396
+ ui.updateSpinner(`Updated ${result.updated} files, removed ${result.removed} files`, 'success');
397
+ // Step 4: Save state (only if documentation was actually updated)
398
+ ui.displayStep(4, 4, 'Saving state');
399
+ const currentCommit = gitService.getCurrentCommit();
400
+ if (result.updated > 0 || result.removed > 0) {
401
+ gitService.saveState(currentCommit);
402
+ if (cliOptions.verbose) {
403
+ console.log(chalk_1.default.gray(`State saved: tracking commit ${currentCommit.substring(0, 8)}`));
404
+ }
405
+ }
406
+ else {
407
+ if (cliOptions.verbose) {
408
+ console.log(chalk_1.default.gray('No documentation changes made, state not updated'));
409
+ }
410
+ }
411
+ // Display summary of changed files
412
+ if (result.updatedFiles.length > 0 || result.removedFiles.length > 0) {
413
+ console.log(chalk_1.default.bold('\nšŸ“„ Documentation Files Changed:'));
414
+ console.log(chalk_1.default.gray('─'.repeat(50)));
415
+ if (result.updatedFiles.length > 0) {
416
+ console.log(chalk_1.default.green('\nāœ… Updated/Created:'));
417
+ result.updatedFiles.forEach(file => {
418
+ console.log(` ${chalk_1.default.green('ā—')} ${file}`);
419
+ });
420
+ }
421
+ if (result.removedFiles.length > 0) {
422
+ console.log(chalk_1.default.red('\nšŸ—‘ļø Removed:'));
423
+ result.removedFiles.forEach(file => {
424
+ console.log(` ${chalk_1.default.red('ā—')} ${file}`);
425
+ });
426
+ }
427
+ console.log(chalk_1.default.gray('─'.repeat(50)));
428
+ }
429
+ // Get usage statistics
430
+ const usageStats = llmClient.getUsageStats();
431
+ ui.displayGenerationSummary(result.updated, 0, usageStats, true);
432
+ ui.displaySuccess(`Documentation updated! Processed ${result.updated} files.`);
433
+ }
434
+ async function runPreview(repoPath, options) {
435
+ const resolvedPath = path.resolve(repoPath);
436
+ // Display welcome
437
+ ui.displayWelcome('0.1.0');
438
+ ui.startSpinner('Initializing analysis...');
439
+ // Initialize services
440
+ const fileMapper = new fileMapper_1.FileMapper(options.exclude || []);
441
+ const gitService = new gitService_1.GitService(resolvedPath);
442
+ const changeAnalyzer = new changeAnalyzer_1.ChangeAnalyzer(gitService, fileMapper);
443
+ // Check if it's a git repository
444
+ if (!gitService.isGitRepository()) {
445
+ ui.updateSpinner('Not a git repository', 'fail');
446
+ ui.displayError('The specified path is not a git repository. Preview requires git tracking.');
447
+ process.exit(1);
448
+ }
449
+ // Check if context has been initialized
450
+ const outputDir = path.resolve(options.output || './.context');
451
+ if (!gitService.hasContextBeenInitialized(outputDir)) {
452
+ ui.updateSpinner('Context not initialized', 'fail');
453
+ ui.displayError('No documentation context found. You should run analyze and init before previewing changes to update.');
454
+ console.log(chalk_1.default.bold('\nšŸ’” Getting Started:'));
455
+ console.log(chalk_1.default.gray('─'.repeat(50)));
456
+ console.log(`${chalk_1.default.blue('1. Analyze:')} ai-context analyze ${repoPath}`);
457
+ console.log(`${chalk_1.default.blue('2. Initialize:')} ai-context init ${repoPath}`);
458
+ console.log(`${chalk_1.default.blue('3. Preview:')} ai-context preview ${repoPath}`);
459
+ console.log(chalk_1.default.gray('─'.repeat(50)));
460
+ console.log(chalk_1.default.gray('The analyze command shows token estimates and costs.'));
461
+ console.log(chalk_1.default.gray('The init command creates the initial documentation.'));
462
+ console.log(chalk_1.default.gray('The preview command shows what would change in updates.'));
463
+ process.exit(1);
464
+ }
465
+ ui.updateSpinner('Mapping repository structure...');
466
+ // Map repository structure
467
+ const repoStructure = await fileMapper.mapRepository(resolvedPath, options.include);
468
+ ui.updateSpinner('Analyzing changes...');
469
+ // Detect changes
470
+ let changes;
471
+ if (options.staged) {
472
+ // For pre-commit hooks - analyze only staged files
473
+ changes = gitService.getStagedChanges();
474
+ }
475
+ else if (options.since) {
476
+ // Compare against specific commit
477
+ changes = gitService.getChangedFiles(options.since);
478
+ }
479
+ else {
480
+ // Compare against last processed commit
481
+ changes = gitService.getChangedFiles();
482
+ }
483
+ // Analyze the changes
484
+ const analysis = await changeAnalyzer.analyzeChanges(repoStructure, changes);
485
+ ui.stopSpinner();
486
+ // Display the analysis
487
+ changeAnalyzer.displayAnalysis(analysis, options.verbose);
488
+ // Add token estimation if there are changes to process
489
+ if (analysis.affectedModules.length > 0) {
490
+ ui.startSpinner('Estimating token usage and costs for affected changes...');
491
+ // Create a subset structure with only affected files
492
+ const affectedFiles = new Set();
493
+ // Add all files from affected modules
494
+ for (const module of analysis.affectedModules) {
495
+ module.affectedFiles.forEach(filePath => {
496
+ // Convert to absolute path to match repoStructure.files format
497
+ const absolutePath = path.resolve(resolvedPath, filePath);
498
+ if (fileMapper.isTextFile(absolutePath)) {
499
+ affectedFiles.add(absolutePath);
500
+ }
501
+ });
502
+ }
503
+ // Also add directly changed files
504
+ [...changes.added, ...changes.modified].forEach(filePath => {
505
+ const fullPath = path.resolve(resolvedPath, filePath);
506
+ if (fileMapper.isTextFile(fullPath)) {
507
+ affectedFiles.add(fullPath);
508
+ }
509
+ });
510
+ // Debug: Log the affected files and available files for comparison
511
+ if (options.verbose) {
512
+ console.log(chalk_1.default.gray(`\nDebug: Found ${affectedFiles.size} affected files:`));
513
+ for (const file of Array.from(affectedFiles).slice(0, 5)) {
514
+ const relativePath = path.relative(resolvedPath, file);
515
+ console.log(chalk_1.default.gray(` - ${relativePath}`));
516
+ }
517
+ if (affectedFiles.size > 5) {
518
+ console.log(chalk_1.default.gray(` ... and ${affectedFiles.size - 5} more`));
519
+ }
520
+ }
521
+ // Create a reduced repo structure for estimation
522
+ const matchedFiles = repoStructure.files.filter(file => affectedFiles.has(file.path));
523
+ const affectedRepoStructure = {
524
+ ...repoStructure,
525
+ files: matchedFiles,
526
+ totalFiles: matchedFiles.length
527
+ };
528
+ if (options.verbose) {
529
+ console.log(chalk_1.default.gray(`Debug: Matched ${matchedFiles.length} files from repo structure`));
530
+ }
531
+ const tokenEstimator = new tokenEstimator_1.TokenEstimator(fileMapper);
532
+ const tokenEstimate = await tokenEstimator.estimateTokensForFullGeneration(affectedRepoStructure);
533
+ ui.stopSpinner();
534
+ // Display the token estimate
535
+ console.log(chalk_1.default.bold('\nšŸ”® Token & Cost Estimate for Preview Changes:'));
536
+ console.log(chalk_1.default.gray('═'.repeat(60)));
537
+ console.log(tokenEstimator.formatTokenEstimate(tokenEstimate));
538
+ }
539
+ // Summary
540
+ if (analysis.affectedModules.length > 0) {
541
+ console.log(chalk_1.default.green('\nāœ… Ready to proceed with update command'));
542
+ console.log(chalk_1.default.gray('Run the same command with "update" instead of "preview" to apply changes'));
543
+ }
544
+ else {
545
+ console.log(chalk_1.default.yellow('\nšŸ“„ No updates needed - documentation is up to date'));
546
+ }
547
+ }
548
+ // Check if no arguments were provided (interactive mode)
549
+ if (process.argv.length === 2) {
550
+ const interactive = new interactiveMode_1.InteractiveMode();
551
+ interactive.start().catch((error) => {
552
+ ui.displayError('Interactive mode failed', error);
553
+ process.exit(1);
554
+ });
555
+ }
556
+ else {
557
+ program.parse();
558
+ }
559
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { LLMConfig } from '../types';
2
+ import { BaseLLMClient } from './baseLLMClient';
3
+ export declare class AnthropicClient extends BaseLLMClient {
4
+ private client;
5
+ private model;
6
+ constructor(config: LLMConfig);
7
+ generateText(prompt: string, systemPrompt?: string): Promise<string>;
8
+ private calculateAnthropicCost;
9
+ generateDocumentation(codeContent: string, filePath: string, context: string): Promise<string>;
10
+ generateAgentPrompt(repoStructure: string, fileContext: string, agentType: string): Promise<string>;
11
+ }
12
+ //# sourceMappingURL=anthropicClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropicClient.d.ts","sourceRoot":"","sources":["../../src/services/anthropicClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,SAAS;IASvB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB1E,OAAO,CAAC,sBAAsB;IAgBxB,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IAwBZ,mBAAmB,CACvB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;CAwBnB"}