@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,98 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AnthropicClient = void 0;
7
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
8
+ const baseLLMClient_1 = require("./baseLLMClient");
9
+ class AnthropicClient extends baseLLMClient_1.BaseLLMClient {
10
+ constructor(config) {
11
+ super(config.model);
12
+ this.model = config.model;
13
+ this.client = new sdk_1.default({
14
+ apiKey: config.apiKey,
15
+ baseURL: config.baseUrl
16
+ });
17
+ }
18
+ async generateText(prompt, systemPrompt) {
19
+ try {
20
+ const response = await this.client.messages.create({
21
+ model: this.model,
22
+ max_tokens: 4000,
23
+ temperature: 0.7,
24
+ system: systemPrompt,
25
+ messages: [
26
+ {
27
+ role: 'user',
28
+ content: prompt
29
+ }
30
+ ]
31
+ });
32
+ // Track usage statistics
33
+ this.trackUsage(response.usage, this.calculateAnthropicCost.bind(this));
34
+ return response.content[0]?.type === 'text' ? response.content[0].text : '';
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Anthropic API error: ${error instanceof Error ? error.message : String(error)}`);
38
+ }
39
+ }
40
+ calculateAnthropicCost(promptTokens, completionTokens) {
41
+ // Anthropic pricing (as of 2024)
42
+ const prices = {
43
+ 'claude-3-haiku-20240307': { input: 0.25, output: 1.25 },
44
+ 'claude-3-sonnet-20240229': { input: 3.0, output: 15.0 },
45
+ 'claude-3-opus-20240229': { input: 15.0, output: 75.0 },
46
+ 'claude-3-5-sonnet-20241022': { input: 3.0, output: 15.0 }
47
+ };
48
+ const pricing = prices[this.model] || prices['claude-3-haiku-20240307']; // fallback
49
+ const inputCost = (promptTokens / 1000000) * pricing.input;
50
+ const outputCost = (completionTokens / 1000000) * pricing.output;
51
+ return inputCost + outputCost;
52
+ }
53
+ async generateDocumentation(codeContent, filePath, context) {
54
+ const systemPrompt = `You are a technical documentation expert. Generate clear, comprehensive documentation for the provided code file. Include:
55
+ 1. Purpose and overview
56
+ 2. Key components/functions
57
+ 3. Dependencies and relationships
58
+ 4. Usage examples where applicable
59
+ 5. Important notes or gotchas
60
+
61
+ Focus on being practical and helpful for developers working with this codebase.`;
62
+ const prompt = `File: ${filePath}
63
+
64
+ Context: ${context}
65
+
66
+ Code:
67
+ \`\`\`
68
+ ${codeContent}
69
+ \`\`\`
70
+
71
+ Generate comprehensive documentation for this file.`;
72
+ return this.generateText(prompt, systemPrompt);
73
+ }
74
+ async generateAgentPrompt(repoStructure, fileContext, agentType) {
75
+ const systemPrompt = `You are an expert at creating AI agent prompts for software development. Create a specialized prompt that would help an AI assistant understand and work effectively with this specific codebase.
76
+
77
+ The prompt should include:
78
+ 1. Clear understanding of the codebase structure and patterns
79
+ 2. Key conventions and best practices used in this project
80
+ 3. Important files and their purposes
81
+ 4. Common tasks and workflows
82
+ 5. Specific guidance for the agent type requested
83
+
84
+ Make the prompt practical and actionable.`;
85
+ const prompt = `Codebase Structure:
86
+ ${repoStructure}
87
+
88
+ File Context:
89
+ ${fileContext}
90
+
91
+ Agent Type: ${agentType}
92
+
93
+ Generate a comprehensive agent prompt that would help an AI assistant work effectively with this codebase for ${agentType} tasks.`;
94
+ return this.generateText(prompt, systemPrompt);
95
+ }
96
+ }
97
+ exports.AnthropicClient = AnthropicClient;
98
+ //# sourceMappingURL=anthropicClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropicClient.js","sourceRoot":"","sources":["../../src/services/anthropicClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { UsageStats } from '../types';
2
+ export declare abstract class BaseLLMClient {
3
+ protected usageStats: UsageStats;
4
+ constructor(model: string);
5
+ abstract generateText(prompt: string, systemPrompt?: string): Promise<string>;
6
+ abstract generateDocumentation(codeContent: string, filePath: string, context: string): Promise<string>;
7
+ abstract generateAgentPrompt(repoStructure: string, fileContext: string, agentType: string): Promise<string>;
8
+ getUsageStats(): UsageStats;
9
+ resetUsageStats(): void;
10
+ protected trackUsage(usage: any, calculateCostFn: (promptTokens: number, completionTokens: number) => number): void;
11
+ }
12
+ //# sourceMappingURL=baseLLMClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseLLMClient.d.ts","sourceRoot":"","sources":["../../src/services/baseLLMClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,8BAAsB,aAAa;IACjC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;gBAErB,KAAK,EAAE,MAAM;IAWzB,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE7E,QAAQ,CAAC,qBAAqB,CAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IAElB,QAAQ,CAAC,mBAAmB,CAC1B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAElB,aAAa,IAAI,UAAU;IAI3B,eAAe,IAAI,IAAI;IAYvB,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;CAcpH"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseLLMClient = void 0;
4
+ class BaseLLMClient {
5
+ constructor(model) {
6
+ this.usageStats = {
7
+ totalCalls: 0,
8
+ totalPromptTokens: 0,
9
+ totalCompletionTokens: 0,
10
+ totalTokens: 0,
11
+ estimatedCost: 0,
12
+ model
13
+ };
14
+ }
15
+ getUsageStats() {
16
+ return { ...this.usageStats };
17
+ }
18
+ resetUsageStats() {
19
+ const model = this.usageStats.model;
20
+ this.usageStats = {
21
+ totalCalls: 0,
22
+ totalPromptTokens: 0,
23
+ totalCompletionTokens: 0,
24
+ totalTokens: 0,
25
+ estimatedCost: 0,
26
+ model
27
+ };
28
+ }
29
+ trackUsage(usage, calculateCostFn) {
30
+ if (usage) {
31
+ this.usageStats.totalCalls++;
32
+ this.usageStats.totalPromptTokens += usage.prompt_tokens || usage.input_tokens || 0;
33
+ this.usageStats.totalCompletionTokens += usage.completion_tokens || usage.output_tokens || 0;
34
+ this.usageStats.totalTokens += usage.total_tokens || (usage.prompt_tokens + usage.completion_tokens) || 0;
35
+ const requestCost = calculateCostFn(usage.prompt_tokens || usage.input_tokens || 0, usage.completion_tokens || usage.output_tokens || 0);
36
+ this.usageStats.estimatedCost += requestCost;
37
+ }
38
+ }
39
+ }
40
+ exports.BaseLLMClient = BaseLLMClient;
41
+ //# sourceMappingURL=baseLLMClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseLLMClient.js","sourceRoot":"","sources":["../../src/services/baseLLMClient.ts"],"names":[],"mappings":";;;AAEA,MAAsB,aAAa;IAGjC,YAAY,KAAa;QACvB,IAAI,CAAC,UAAU,GAAG;YAChB,UAAU,EAAE,CAAC;YACb,iBAAiB,EAAE,CAAC;YACpB,qBAAqB,EAAE,CAAC;YACxB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;YAChB,KAAK;SACN,CAAC;IACJ,CAAC;IAgBD,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,eAAe;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG;YAChB,UAAU,EAAE,CAAC;YACb,iBAAiB,EAAE,CAAC;YACpB,qBAAqB,EAAE,CAAC;YACxB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;YAChB,KAAK;SACN,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,KAAU,EAAE,eAA2E;QAC1G,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YACpF,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;YAC7F,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAE1G,MAAM,WAAW,GAAG,eAAe,CACjC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,EAC9C,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CACpD,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,WAAW,CAAC;QAC/C,CAAC;IACH,CAAC;CACF;AA1DD,sCA0DC"}
@@ -0,0 +1,44 @@
1
+ import { RepoStructure } from '../types';
2
+ import { GitService, GitChanges } from '../utils/gitService';
3
+ import { FileMapper } from '../utils/fileMapper';
4
+ export interface ModuleImpact {
5
+ moduleName: string;
6
+ affectedFiles: string[];
7
+ changeTypes: {
8
+ added: string[];
9
+ modified: string[];
10
+ deleted: string[];
11
+ renamed: Array<{
12
+ from: string;
13
+ to: string;
14
+ }>;
15
+ };
16
+ impactLevel: 'low' | 'medium' | 'high';
17
+ description: string;
18
+ }
19
+ export interface ChangeAnalysis {
20
+ totalChanges: number;
21
+ trackedChanges: number;
22
+ untrackedChanges: number;
23
+ affectedModules: ModuleImpact[];
24
+ overviewUpdateNeeded: boolean;
25
+ estimatedProcessingTime: string;
26
+ recommendations: string[];
27
+ gitChanges?: GitChanges;
28
+ }
29
+ export declare class ChangeAnalyzer {
30
+ private gitService;
31
+ private fileMapper;
32
+ constructor(gitService: GitService, fileMapper: FileMapper);
33
+ analyzeChanges(repoStructure: RepoStructure, changes?: GitChanges): Promise<ChangeAnalysis>;
34
+ displayAnalysis(analysis: ChangeAnalysis, verbose?: boolean): void;
35
+ private analyzeModuleImpacts;
36
+ private getModuleNameForFile;
37
+ private formatModuleName;
38
+ private getModuleDescription;
39
+ private calculateImpactLevel;
40
+ private shouldUpdateOverview;
41
+ private estimateProcessingTime;
42
+ private generateRecommendations;
43
+ }
44
+ //# sourceMappingURL=changeAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeAnalyzer.d.ts","sourceRoot":"","sources":["../../src/services/changeAnalyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,aAAa,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9C,CAAC;IACF,WAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,qBAAa,cAAc;IAEvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;gBADV,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU;IAG1B,cAAc,CAClB,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,cAAc,CAAC;IAiD1B,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAE,OAAe,GAAG,IAAI;IAyEzE,OAAO,CAAC,oBAAoB;IAkG5B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,sBAAsB;IAkC9B,OAAO,CAAC,uBAAuB;CA8BhC"}
@@ -0,0 +1,344 @@
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.ChangeAnalyzer = void 0;
40
+ const path = __importStar(require("path"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ class ChangeAnalyzer {
43
+ constructor(gitService, fileMapper) {
44
+ this.gitService = gitService;
45
+ this.fileMapper = fileMapper;
46
+ }
47
+ async analyzeChanges(repoStructure, changes) {
48
+ // Get changes if not provided
49
+ const gitChanges = changes || this.gitService.getChangedFiles();
50
+ // Calculate total unique changes
51
+ const totalChanges = gitChanges.added.length +
52
+ gitChanges.modified.length +
53
+ gitChanges.deleted.length +
54
+ gitChanges.renamed.length; // Count renames as single changes
55
+ // Get all unique changed files for filtering
56
+ const allChangedFiles = [
57
+ ...gitChanges.added,
58
+ ...gitChanges.modified,
59
+ ...gitChanges.deleted,
60
+ ...gitChanges.renamed.map(r => r.to) // Only count the target file for filtering
61
+ ];
62
+ // Filter for tracked files only
63
+ const trackedChangedFiles = this.gitService.filterTrackedFiles(allChangedFiles);
64
+ const relevantChangedFiles = trackedChangedFiles.filter(file => {
65
+ const fullPath = path.join(repoStructure.rootPath, file);
66
+ return this.fileMapper.isTextFile(fullPath);
67
+ });
68
+ // Analyze module impacts
69
+ const moduleImpacts = this.analyzeModuleImpacts(relevantChangedFiles, gitChanges, repoStructure);
70
+ // Determine if overview update is needed
71
+ const overviewUpdateNeeded = this.shouldUpdateOverview(moduleImpacts, gitChanges);
72
+ // Estimate processing time
73
+ const estimatedTime = this.estimateProcessingTime(moduleImpacts);
74
+ // Generate recommendations
75
+ const recommendations = this.generateRecommendations(moduleImpacts, gitChanges);
76
+ return {
77
+ totalChanges: totalChanges,
78
+ trackedChanges: trackedChangedFiles.length,
79
+ untrackedChanges: totalChanges - trackedChangedFiles.length,
80
+ affectedModules: moduleImpacts,
81
+ overviewUpdateNeeded,
82
+ estimatedProcessingTime: estimatedTime,
83
+ recommendations,
84
+ gitChanges // Add this for detailed breakdown in verbose mode
85
+ };
86
+ }
87
+ displayAnalysis(analysis, verbose = false) {
88
+ console.log(chalk_1.default.bold.blue('\n🔍 Documentation Update Analysis'));
89
+ console.log(chalk_1.default.gray('═'.repeat(60)));
90
+ // Summary
91
+ console.log(chalk_1.default.bold('\n📊 Change Summary:'));
92
+ console.log(` Total file changes: ${analysis.totalChanges}`);
93
+ // Show breakdown in verbose mode
94
+ if (verbose && analysis.gitChanges) {
95
+ const gc = analysis.gitChanges;
96
+ console.log(` ${chalk_1.default.green('Added:')} ${gc.added.length} files`);
97
+ console.log(` ${chalk_1.default.yellow('Modified:')} ${gc.modified.length} files`);
98
+ console.log(` ${chalk_1.default.red('Deleted:')} ${gc.deleted.length} files`);
99
+ console.log(` ${chalk_1.default.blue('Renamed:')} ${gc.renamed.length} files`);
100
+ }
101
+ console.log(` Tracked changes: ${chalk_1.default.green(analysis.trackedChanges)}`);
102
+ if (analysis.untrackedChanges > 0) {
103
+ console.log(` Untracked changes: ${chalk_1.default.gray(analysis.untrackedChanges)} (will be skipped)`);
104
+ }
105
+ // Affected modules
106
+ if (analysis.affectedModules.length > 0) {
107
+ console.log(chalk_1.default.bold('\n📦 Affected Modules:'));
108
+ analysis.affectedModules.forEach(module => {
109
+ const impactColor = module.impactLevel === 'high' ? chalk_1.default.red :
110
+ module.impactLevel === 'medium' ? chalk_1.default.yellow : chalk_1.default.green;
111
+ console.log(` ${impactColor('●')} ${chalk_1.default.bold(module.moduleName)} (${module.impactLevel} impact)`);
112
+ console.log(` ${chalk_1.default.gray(module.description)}`);
113
+ console.log(` Files affected: ${module.affectedFiles.length}`);
114
+ if (verbose) {
115
+ if (module.changeTypes.added.length > 0) {
116
+ console.log(` ${chalk_1.default.green('Added:')} ${module.changeTypes.added.join(', ')}`);
117
+ }
118
+ if (module.changeTypes.modified.length > 0) {
119
+ console.log(` ${chalk_1.default.yellow('Modified:')} ${module.changeTypes.modified.join(', ')}`);
120
+ }
121
+ if (module.changeTypes.deleted.length > 0) {
122
+ console.log(` ${chalk_1.default.red('Deleted:')} ${module.changeTypes.deleted.join(', ')}`);
123
+ }
124
+ if (module.changeTypes.renamed.length > 0) {
125
+ module.changeTypes.renamed.forEach(rename => {
126
+ console.log(` ${chalk_1.default.blue('Renamed:')} ${rename.from} → ${rename.to}`);
127
+ });
128
+ }
129
+ }
130
+ console.log();
131
+ });
132
+ }
133
+ else {
134
+ console.log(chalk_1.default.yellow('\n📦 No modules affected by tracked file changes'));
135
+ }
136
+ // Processing info
137
+ console.log(chalk_1.default.bold('⏱️ Estimated Processing Time:'), analysis.estimatedProcessingTime);
138
+ if (analysis.overviewUpdateNeeded) {
139
+ console.log(chalk_1.default.yellow('📋 Overview documents will be updated'));
140
+ }
141
+ // Recommendations
142
+ if (analysis.recommendations.length > 0) {
143
+ console.log(chalk_1.default.bold('\n💡 Recommendations:'));
144
+ analysis.recommendations.forEach(rec => {
145
+ console.log(` • ${rec}`);
146
+ });
147
+ }
148
+ console.log(chalk_1.default.gray('═'.repeat(60)));
149
+ }
150
+ analyzeModuleImpacts(changedFiles, gitChanges, repoStructure) {
151
+ const moduleMap = new Map();
152
+ const processedFiles = new Set();
153
+ // Helper function to initialize module if needed
154
+ const ensureModule = (moduleName) => {
155
+ if (!moduleMap.has(moduleName)) {
156
+ moduleMap.set(moduleName, {
157
+ moduleName: this.formatModuleName(moduleName),
158
+ affectedFiles: [],
159
+ changeTypes: {
160
+ added: [],
161
+ modified: [],
162
+ deleted: [],
163
+ renamed: []
164
+ },
165
+ impactLevel: 'low',
166
+ description: this.getModuleDescription(moduleName, repoStructure)
167
+ });
168
+ }
169
+ return moduleMap.get(moduleName);
170
+ };
171
+ // Process added files
172
+ gitChanges.added.forEach(file => {
173
+ if (processedFiles.has(file))
174
+ return;
175
+ processedFiles.add(file);
176
+ const moduleName = this.getModuleNameForFile(file);
177
+ const moduleImpact = ensureModule(moduleName);
178
+ moduleImpact.affectedFiles.push(file);
179
+ moduleImpact.changeTypes.added.push(file);
180
+ });
181
+ // Process modified files
182
+ gitChanges.modified.forEach(file => {
183
+ if (processedFiles.has(file))
184
+ return;
185
+ processedFiles.add(file);
186
+ const moduleName = this.getModuleNameForFile(file);
187
+ const moduleImpact = ensureModule(moduleName);
188
+ moduleImpact.affectedFiles.push(file);
189
+ moduleImpact.changeTypes.modified.push(file);
190
+ });
191
+ // Process deleted files
192
+ gitChanges.deleted.forEach(file => {
193
+ if (processedFiles.has(file))
194
+ return;
195
+ processedFiles.add(file);
196
+ const moduleName = this.getModuleNameForFile(file);
197
+ const moduleImpact = ensureModule(moduleName);
198
+ moduleImpact.affectedFiles.push(file);
199
+ moduleImpact.changeTypes.deleted.push(file);
200
+ });
201
+ // Process renamed files
202
+ gitChanges.renamed.forEach(rename => {
203
+ const fromModule = this.getModuleNameForFile(rename.from);
204
+ const toModule = this.getModuleNameForFile(rename.to);
205
+ // Add to source module if different from target
206
+ if (fromModule !== toModule && !processedFiles.has(rename.from)) {
207
+ const fromModuleImpact = ensureModule(fromModule);
208
+ fromModuleImpact.affectedFiles.push(rename.from);
209
+ if (!fromModuleImpact.changeTypes.renamed.some(r => r.from === rename.from)) {
210
+ fromModuleImpact.changeTypes.renamed.push(rename);
211
+ }
212
+ }
213
+ // Add to target module
214
+ if (!processedFiles.has(rename.to)) {
215
+ const toModuleImpact = ensureModule(toModule);
216
+ toModuleImpact.affectedFiles.push(rename.to);
217
+ if (!toModuleImpact.changeTypes.renamed.some(r => r.to === rename.to)) {
218
+ toModuleImpact.changeTypes.renamed.push(rename);
219
+ }
220
+ }
221
+ processedFiles.add(rename.from);
222
+ processedFiles.add(rename.to);
223
+ });
224
+ // Calculate impact levels
225
+ moduleMap.forEach(impact => {
226
+ impact.impactLevel = this.calculateImpactLevel(impact);
227
+ });
228
+ return Array.from(moduleMap.values()).sort((a, b) => {
229
+ const levelOrder = { high: 3, medium: 2, low: 1 };
230
+ return levelOrder[b.impactLevel] - levelOrder[a.impactLevel];
231
+ });
232
+ }
233
+ getModuleNameForFile(relativePath) {
234
+ const parts = relativePath.split(path.sep);
235
+ let groupName = 'Root Files';
236
+ if (parts.length > 1) {
237
+ groupName = parts[0];
238
+ // Special handling for src files
239
+ if (groupName === 'src' && parts.length > 2) {
240
+ groupName = parts[1];
241
+ }
242
+ }
243
+ return groupName;
244
+ }
245
+ formatModuleName(name) {
246
+ return name
247
+ .split(/[-_]/)
248
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
249
+ .join(' ');
250
+ }
251
+ getModuleDescription(name, repoStructure) {
252
+ const descriptions = {
253
+ 'generators': 'Code generation utilities for documentation and agents',
254
+ 'services': 'External service integrations and API clients',
255
+ 'utils': 'Utility functions and helper modules',
256
+ 'types': 'TypeScript type definitions and interfaces',
257
+ 'Root Files': 'Main configuration and entry point files'
258
+ };
259
+ const moduleFiles = repoStructure.files.filter(file => this.getModuleNameForFile(file.relativePath) === name);
260
+ return descriptions[name] || `${this.formatModuleName(name)} module with ${moduleFiles.length} files`;
261
+ }
262
+ calculateImpactLevel(impact) {
263
+ const totalChanges = impact.affectedFiles.length;
264
+ const hasDeletes = impact.changeTypes.deleted.length > 0;
265
+ const hasRenames = impact.changeTypes.renamed.length > 0;
266
+ // High impact: many changes, deletes, or renames
267
+ if (totalChanges >= 5 || hasDeletes || hasRenames) {
268
+ return 'high';
269
+ }
270
+ // Medium impact: moderate number of changes
271
+ if (totalChanges >= 2) {
272
+ return 'medium';
273
+ }
274
+ // Low impact: single file change
275
+ return 'low';
276
+ }
277
+ shouldUpdateOverview(moduleImpacts, gitChanges) {
278
+ // Update overview if:
279
+ // 1. Any module has high impact
280
+ // 2. Multiple modules are affected
281
+ // 3. There are structural changes (adds/deletes)
282
+ return moduleImpacts.some(m => m.impactLevel === 'high') ||
283
+ moduleImpacts.length > 1 ||
284
+ gitChanges.added.length > 0 ||
285
+ gitChanges.deleted.length > 0;
286
+ }
287
+ estimateProcessingTime(moduleImpacts) {
288
+ // Base time per module (in seconds)
289
+ const baseTimePerModule = 15;
290
+ let totalTime = 0;
291
+ moduleImpacts.forEach(impact => {
292
+ let moduleTime = baseTimePerModule;
293
+ // Adjust based on impact level
294
+ if (impact.impactLevel === 'high') {
295
+ moduleTime *= 1.5;
296
+ }
297
+ else if (impact.impactLevel === 'low') {
298
+ moduleTime *= 0.7;
299
+ }
300
+ totalTime += moduleTime;
301
+ });
302
+ // Add time for overview updates
303
+ if (this.shouldUpdateOverview(moduleImpacts, { added: [], modified: [], deleted: [], renamed: [] })) {
304
+ totalTime += 10;
305
+ }
306
+ if (totalTime < 30) {
307
+ return '< 30 seconds';
308
+ }
309
+ else if (totalTime < 60) {
310
+ return '< 1 minute';
311
+ }
312
+ else if (totalTime < 120) {
313
+ return '1-2 minutes';
314
+ }
315
+ else {
316
+ return `~${Math.ceil(totalTime / 60)} minutes`;
317
+ }
318
+ }
319
+ generateRecommendations(moduleImpacts, gitChanges) {
320
+ const recommendations = [];
321
+ if (moduleImpacts.length === 0) {
322
+ recommendations.push('No documentation updates needed - no relevant tracked file changes detected');
323
+ return recommendations;
324
+ }
325
+ if (moduleImpacts.some(m => m.impactLevel === 'high')) {
326
+ recommendations.push('High-impact changes detected - review generated documentation carefully');
327
+ }
328
+ if (gitChanges.deleted.length > 0) {
329
+ recommendations.push('Files were deleted - ensure corresponding documentation is properly cleaned up');
330
+ }
331
+ if (gitChanges.renamed.length > 0) {
332
+ recommendations.push('Files were renamed - check that documentation references are updated');
333
+ }
334
+ if (moduleImpacts.length > 3) {
335
+ recommendations.push('Many modules affected - consider running in stages or during low-activity periods');
336
+ }
337
+ if (moduleImpacts.some(m => m.moduleName === 'Types')) {
338
+ recommendations.push('Type definitions changed - API reference documentation may need updates');
339
+ }
340
+ return recommendations;
341
+ }
342
+ }
343
+ exports.ChangeAnalyzer = ChangeAnalyzer;
344
+ //# sourceMappingURL=changeAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeAnalyzer.js","sourceRoot":"","sources":["../../src/services/changeAnalyzer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAI7B,kDAA0B;AA0B1B,MAAa,cAAc;IACzB,YACU,UAAsB,EACtB,UAAsB;QADtB,eAAU,GAAV,UAAU,CAAY;QACtB,eAAU,GAAV,UAAU,CAAY;IAC7B,CAAC;IAEJ,KAAK,CAAC,cAAc,CAClB,aAA4B,EAC5B,OAAoB;QAEpB,8BAA8B;QAC9B,MAAM,UAAU,GAAG,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;QAEhE,iCAAiC;QACjC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM;YACxB,UAAU,CAAC,QAAQ,CAAC,MAAM;YAC1B,UAAU,CAAC,OAAO,CAAC,MAAM;YACzB,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,kCAAkC;QAEjF,6CAA6C;QAC7C,MAAM,eAAe,GAAG;YACtB,GAAG,UAAU,CAAC,KAAK;YACnB,GAAG,UAAU,CAAC,QAAQ;YACtB,GAAG,UAAU,CAAC,OAAO;YACrB,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,2CAA2C;SACjF,CAAC;QAEF,gCAAgC;QAChC,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAChF,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QAEjG,yCAAyC;QACzC,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAElF,2BAA2B;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAEjE,2BAA2B;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAEhF,OAAO;YACL,YAAY,EAAE,YAAY;YAC1B,cAAc,EAAE,mBAAmB,CAAC,MAAM;YAC1C,gBAAgB,EAAE,YAAY,GAAG,mBAAmB,CAAC,MAAM;YAC3D,eAAe,EAAE,aAAa;YAC9B,oBAAoB;YACpB,uBAAuB,EAAE,aAAa;YACtC,eAAe;YACf,UAAU,CAAC,kDAAkD;SAC9D,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,QAAwB,EAAE,UAAmB,KAAK;QAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,UAAU;QACV,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QAE9D,iCAAiC;QACjC,IAAI,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAI,QAAQ,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;QACjG,CAAC;QAED,mBAAmB;QACnB,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAClD,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACxC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC;gBAE/E,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,WAAW,UAAU,CAAC,CAAC;gBACrG,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;gBAElE,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxC,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACrF,CAAC;oBACD,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3C,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC5F,CAAC;oBACD,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACvF,CAAC;oBACD,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;4BAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC7E,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QAE5F,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,kBAAkB;QAClB,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACjD,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEO,oBAAoB,CAC1B,YAAsB,EACtB,UAAsB,EACtB,aAA4B;QAE5B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;QAClD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QAEzC,iDAAiD;QACjD,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,EAAE;YAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE;oBACxB,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;oBAC7C,aAAa,EAAE,EAAE;oBACjB,WAAW,EAAE;wBACX,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,EAAE;wBACZ,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE,EAAE;qBACZ;oBACD,WAAW,EAAE,KAAK;oBAClB,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,aAAa,CAAC;iBAClE,CAAC,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;QACpC,CAAC,CAAC;QAEF,sBAAsB;QACtB,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YACrC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YAC9C,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,yBAAyB;QACzB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YACrC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YAC9C,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAChC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YACrC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YAC9C,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAEtD,gDAAgD;YAChD,IAAI,UAAU,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChE,MAAM,gBAAgB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;gBAClD,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5E,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,uBAAuB;YACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnC,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC9C,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;oBACtE,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAED,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClD,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YAClD,OAAO,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB,CAAC,YAAoB;QAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,SAAS,GAAG,YAAY,CAAC;QAE7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,iCAAiC;YACjC,IAAI,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,gBAAgB,CAAC,IAAY;QACnC,OAAO,IAAI;aACR,KAAK,CAAC,MAAM,CAAC;aACb,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACzD,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAEO,oBAAoB,CAAC,IAAY,EAAE,aAA4B;QACrE,MAAM,YAAY,GAA8B;YAC9C,YAAY,EAAE,wDAAwD;YACtE,UAAU,EAAE,+CAA+C;YAC3D,OAAO,EAAE,sCAAsC;YAC/C,OAAO,EAAE,4CAA4C;YACrD,YAAY,EAAE,0CAA0C;SACzD,CAAC;QAEF,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACpD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CACtD,CAAC;QAEF,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,MAAM,QAAQ,CAAC;IACxG,CAAC;IAEO,oBAAoB,CAAC,MAAoB;QAC/C,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzD,iDAAiD;QACjD,IAAI,YAAY,IAAI,CAAC,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,4CAA4C;QAC5C,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,iCAAiC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,oBAAoB,CAAC,aAA6B,EAAE,UAAsB;QAChF,sBAAsB;QACtB,gCAAgC;QAChC,mCAAmC;QACnC,iDAAiD;QACjD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC;YACjD,aAAa,CAAC,MAAM,GAAG,CAAC;YACxB,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAC3B,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACvC,CAAC;IAEO,sBAAsB,CAAC,aAA6B;QAC1D,oCAAoC;QACpC,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAE7B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,IAAI,UAAU,GAAG,iBAAiB,CAAC;YAEnC,+BAA+B;YAC/B,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAClC,UAAU,IAAI,GAAG,CAAC;YACpB,CAAC;iBAAM,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;gBACxC,UAAU,IAAI,GAAG,CAAC;YACpB,CAAC;YAED,SAAS,IAAI,UAAU,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACpG,SAAS,IAAI,EAAE,CAAC;QAClB,CAAC;QAED,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;YACnB,OAAO,cAAc,CAAC;QACxB,CAAC;aAAM,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;YAC1B,OAAO,YAAY,CAAC;QACtB,CAAC;aAAM,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;YAC3B,OAAO,aAAa,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,aAA6B,EAAE,UAAsB;QACnF,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,eAAe,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;YACpG,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,EAAE,CAAC;YACtD,eAAe,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,eAAe,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,eAAe,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,eAAe,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,EAAE,CAAC;YACtD,eAAe,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QAClG,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AAzWD,wCAyWC"}
@@ -0,0 +1,12 @@
1
+ import { LLMConfig } from '../types';
2
+ import { BaseLLMClient } from './baseLLMClient';
3
+ export declare class GeminiClient extends BaseLLMClient {
4
+ private client;
5
+ private model;
6
+ constructor(config: LLMConfig);
7
+ generateText(prompt: string, systemPrompt?: string): Promise<string>;
8
+ private calculateGeminiCost;
9
+ generateDocumentation(codeContent: string, filePath: string, context: string): Promise<string>;
10
+ generateAgentPrompt(repoStructure: string, fileContext: string, agentType: string): Promise<string>;
11
+ }
12
+ //# sourceMappingURL=geminiClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,YAAa,SAAQ,aAAa;IAC7C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,SAAS;IAMvB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B1E,OAAO,CAAC,mBAAmB;IAiBrB,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"}