@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.
- package/LICENSE +21 -0
- package/README.md +658 -0
- package/dist/generators/agentGenerator.d.ts +23 -0
- package/dist/generators/agentGenerator.d.ts.map +1 -0
- package/dist/generators/agentGenerator.js +357 -0
- package/dist/generators/agentGenerator.js.map +1 -0
- package/dist/generators/documentationGenerator.d.ts +40 -0
- package/dist/generators/documentationGenerator.d.ts.map +1 -0
- package/dist/generators/documentationGenerator.js +786 -0
- package/dist/generators/documentationGenerator.js.map +1 -0
- package/dist/generators/incrementalDocumentationGenerator.d.ts +33 -0
- package/dist/generators/incrementalDocumentationGenerator.d.ts.map +1 -0
- package/dist/generators/incrementalDocumentationGenerator.js +400 -0
- package/dist/generators/incrementalDocumentationGenerator.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +559 -0
- package/dist/index.js.map +1 -0
- package/dist/services/anthropicClient.d.ts +12 -0
- package/dist/services/anthropicClient.d.ts.map +1 -0
- package/dist/services/anthropicClient.js +98 -0
- package/dist/services/anthropicClient.js.map +1 -0
- package/dist/services/baseLLMClient.d.ts +12 -0
- package/dist/services/baseLLMClient.d.ts.map +1 -0
- package/dist/services/baseLLMClient.js +41 -0
- package/dist/services/baseLLMClient.js.map +1 -0
- package/dist/services/changeAnalyzer.d.ts +44 -0
- package/dist/services/changeAnalyzer.d.ts.map +1 -0
- package/dist/services/changeAnalyzer.js +344 -0
- package/dist/services/changeAnalyzer.js.map +1 -0
- package/dist/services/geminiClient.d.ts +12 -0
- package/dist/services/geminiClient.d.ts.map +1 -0
- package/dist/services/geminiClient.js +96 -0
- package/dist/services/geminiClient.js.map +1 -0
- package/dist/services/grokClient.d.ts +12 -0
- package/dist/services/grokClient.d.ts.map +1 -0
- package/dist/services/grokClient.js +101 -0
- package/dist/services/grokClient.js.map +1 -0
- package/dist/services/llmClientFactory.d.ts +14 -0
- package/dist/services/llmClientFactory.d.ts.map +1 -0
- package/dist/services/llmClientFactory.js +109 -0
- package/dist/services/llmClientFactory.js.map +1 -0
- package/dist/services/openRouterClient.d.ts +12 -0
- package/dist/services/openRouterClient.d.ts.map +1 -0
- package/dist/services/openRouterClient.js +96 -0
- package/dist/services/openRouterClient.js.map +1 -0
- package/dist/services/openaiClient.d.ts +12 -0
- package/dist/services/openaiClient.d.ts.map +1 -0
- package/dist/services/openaiClient.js +98 -0
- package/dist/services/openaiClient.js.map +1 -0
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/cliUI.d.ts +25 -0
- package/dist/utils/cliUI.d.ts.map +1 -0
- package/dist/utils/cliUI.js +236 -0
- package/dist/utils/cliUI.js.map +1 -0
- package/dist/utils/fileMapper.d.ts +11 -0
- package/dist/utils/fileMapper.d.ts.map +1 -0
- package/dist/utils/fileMapper.js +125 -0
- package/dist/utils/fileMapper.js.map +1 -0
- package/dist/utils/gitService.d.ts +50 -0
- package/dist/utils/gitService.d.ts.map +1 -0
- package/dist/utils/gitService.js +470 -0
- package/dist/utils/gitService.js.map +1 -0
- package/dist/utils/interactiveMode.d.ts +16 -0
- package/dist/utils/interactiveMode.d.ts.map +1 -0
- package/dist/utils/interactiveMode.js +432 -0
- package/dist/utils/interactiveMode.js.map +1 -0
- package/dist/utils/pricing.d.ts +14 -0
- package/dist/utils/pricing.d.ts.map +1 -0
- package/dist/utils/pricing.js +115 -0
- package/dist/utils/pricing.js.map +1 -0
- package/dist/utils/tokenEstimator.d.ts +27 -0
- package/dist/utils/tokenEstimator.d.ts.map +1 -0
- package/dist/utils/tokenEstimator.js +198 -0
- package/dist/utils/tokenEstimator.js.map +1 -0
- 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"}
|