codehere 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 (159) hide show
  1. package/ARCHITECTURE.md +240 -0
  2. package/CHANGELOG.md +44 -0
  3. package/CONTRIBUTING.md +171 -0
  4. package/LICENSE +22 -0
  5. package/README.md +203 -0
  6. package/dist/ast-parser.d.ts +55 -0
  7. package/dist/ast-parser.d.ts.map +1 -0
  8. package/dist/ast-parser.js +331 -0
  9. package/dist/ast-parser.js.map +1 -0
  10. package/dist/benchmark.d.ts +39 -0
  11. package/dist/benchmark.d.ts.map +1 -0
  12. package/dist/benchmark.js +195 -0
  13. package/dist/benchmark.js.map +1 -0
  14. package/dist/cache.d.ts +45 -0
  15. package/dist/cache.d.ts.map +1 -0
  16. package/dist/cache.js +182 -0
  17. package/dist/cache.js.map +1 -0
  18. package/dist/chat.d.ts +4 -0
  19. package/dist/chat.d.ts.map +1 -0
  20. package/dist/chat.js +132 -0
  21. package/dist/chat.js.map +1 -0
  22. package/dist/code-analysis.d.ts +50 -0
  23. package/dist/code-analysis.d.ts.map +1 -0
  24. package/dist/code-analysis.js +327 -0
  25. package/dist/code-analysis.js.map +1 -0
  26. package/dist/context.d.ts +44 -0
  27. package/dist/context.d.ts.map +1 -0
  28. package/dist/context.js +187 -0
  29. package/dist/context.js.map +1 -0
  30. package/dist/docs.d.ts +21 -0
  31. package/dist/docs.d.ts.map +1 -0
  32. package/dist/docs.js +147 -0
  33. package/dist/docs.js.map +1 -0
  34. package/dist/edit.d.ts +38 -0
  35. package/dist/edit.d.ts.map +1 -0
  36. package/dist/edit.js +594 -0
  37. package/dist/edit.js.map +1 -0
  38. package/dist/embed.d.ts +18 -0
  39. package/dist/embed.d.ts.map +1 -0
  40. package/dist/embed.js +479 -0
  41. package/dist/embed.js.map +1 -0
  42. package/dist/error-handler.d.ts +76 -0
  43. package/dist/error-handler.d.ts.map +1 -0
  44. package/dist/error-handler.js +213 -0
  45. package/dist/error-handler.js.map +1 -0
  46. package/dist/formatter.d.ts +25 -0
  47. package/dist/formatter.d.ts.map +1 -0
  48. package/dist/formatter.js +148 -0
  49. package/dist/formatter.js.map +1 -0
  50. package/dist/git.d.ts +55 -0
  51. package/dist/git.d.ts.map +1 -0
  52. package/dist/git.js +198 -0
  53. package/dist/git.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +964 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/intelligent-retrieval.d.ts +41 -0
  59. package/dist/intelligent-retrieval.d.ts.map +1 -0
  60. package/dist/intelligent-retrieval.js +265 -0
  61. package/dist/intelligent-retrieval.js.map +1 -0
  62. package/dist/iterative-refinement.d.ts +31 -0
  63. package/dist/iterative-refinement.d.ts.map +1 -0
  64. package/dist/iterative-refinement.js +172 -0
  65. package/dist/iterative-refinement.js.map +1 -0
  66. package/dist/learning.d.ts +69 -0
  67. package/dist/learning.d.ts.map +1 -0
  68. package/dist/learning.js +233 -0
  69. package/dist/learning.js.map +1 -0
  70. package/dist/log.d.ts +4 -0
  71. package/dist/log.d.ts.map +1 -0
  72. package/dist/log.js +31 -0
  73. package/dist/log.js.map +1 -0
  74. package/dist/migrate.d.ts +33 -0
  75. package/dist/migrate.d.ts.map +1 -0
  76. package/dist/migrate.js +133 -0
  77. package/dist/migrate.js.map +1 -0
  78. package/dist/monitoring.d.ts +75 -0
  79. package/dist/monitoring.d.ts.map +1 -0
  80. package/dist/monitoring.js +248 -0
  81. package/dist/monitoring.js.map +1 -0
  82. package/dist/parallel-processor.d.ts +43 -0
  83. package/dist/parallel-processor.d.ts.map +1 -0
  84. package/dist/parallel-processor.js +308 -0
  85. package/dist/parallel-processor.js.map +1 -0
  86. package/dist/planner.d.ts +47 -0
  87. package/dist/planner.d.ts.map +1 -0
  88. package/dist/planner.js +198 -0
  89. package/dist/planner.js.map +1 -0
  90. package/dist/policy.d.ts +3 -0
  91. package/dist/policy.d.ts.map +1 -0
  92. package/dist/policy.js +26 -0
  93. package/dist/policy.js.map +1 -0
  94. package/dist/query-optimizer.d.ts +32 -0
  95. package/dist/query-optimizer.d.ts.map +1 -0
  96. package/dist/query-optimizer.js +205 -0
  97. package/dist/query-optimizer.js.map +1 -0
  98. package/dist/refactor.d.ts +27 -0
  99. package/dist/refactor.d.ts.map +1 -0
  100. package/dist/refactor.js +118 -0
  101. package/dist/refactor.js.map +1 -0
  102. package/dist/review.d.ts +31 -0
  103. package/dist/review.d.ts.map +1 -0
  104. package/dist/review.js +206 -0
  105. package/dist/review.js.map +1 -0
  106. package/dist/scaffold.d.ts +14 -0
  107. package/dist/scaffold.d.ts.map +1 -0
  108. package/dist/scaffold.js +85 -0
  109. package/dist/scaffold.js.map +1 -0
  110. package/dist/search.d.ts +19 -0
  111. package/dist/search.d.ts.map +1 -0
  112. package/dist/search.js +198 -0
  113. package/dist/search.js.map +1 -0
  114. package/dist/session.d.ts +17 -0
  115. package/dist/session.d.ts.map +1 -0
  116. package/dist/session.js +301 -0
  117. package/dist/session.js.map +1 -0
  118. package/dist/task-verification.d.ts +39 -0
  119. package/dist/task-verification.d.ts.map +1 -0
  120. package/dist/task-verification.js +336 -0
  121. package/dist/task-verification.js.map +1 -0
  122. package/dist/test_cohere.d.ts +2 -0
  123. package/dist/test_cohere.d.ts.map +1 -0
  124. package/dist/test_cohere.js +68 -0
  125. package/dist/test_cohere.js.map +1 -0
  126. package/dist/test_env.d.ts +2 -0
  127. package/dist/test_env.d.ts.map +1 -0
  128. package/dist/test_env.js +24 -0
  129. package/dist/test_env.js.map +1 -0
  130. package/dist/test_retrieval.d.ts +2 -0
  131. package/dist/test_retrieval.d.ts.map +1 -0
  132. package/dist/test_retrieval.js +84 -0
  133. package/dist/test_retrieval.js.map +1 -0
  134. package/dist/testgen.d.ts +24 -0
  135. package/dist/testgen.d.ts.map +1 -0
  136. package/dist/testgen.js +167 -0
  137. package/dist/testgen.js.map +1 -0
  138. package/dist/token-optimizer.d.ts +20 -0
  139. package/dist/token-optimizer.d.ts.map +1 -0
  140. package/dist/token-optimizer.js +277 -0
  141. package/dist/token-optimizer.js.map +1 -0
  142. package/dist/types.d.ts +36 -0
  143. package/dist/types.d.ts.map +1 -0
  144. package/dist/types.js +2 -0
  145. package/dist/types.js.map +1 -0
  146. package/dist/ui.d.ts +54 -0
  147. package/dist/ui.d.ts.map +1 -0
  148. package/dist/ui.js +295 -0
  149. package/dist/ui.js.map +1 -0
  150. package/dist/verify_db.d.ts +2 -0
  151. package/dist/verify_db.d.ts.map +1 -0
  152. package/dist/verify_db.js +52 -0
  153. package/dist/verify_db.js.map +1 -0
  154. package/package.json +71 -0
  155. package/templates/next-page/app/layout.tsx +19 -0
  156. package/templates/next-page/app/page.tsx +10 -0
  157. package/templates/next-page/package.json +22 -0
  158. package/templates/node-api/index.js +57 -0
  159. package/templates/node-api/package.json +13 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Performance Optimization & Caching System
3
+ * Improve efficiency with intelligent caching
4
+ */
5
+ declare class MemoryCache {
6
+ private cache;
7
+ private maxSize;
8
+ constructor(maxSize?: number);
9
+ set<T>(key: string, value: T, ttl?: number): void;
10
+ get<T>(key: string): T | null;
11
+ has(key: string): boolean;
12
+ clear(): void;
13
+ size(): number;
14
+ }
15
+ export declare const memoryCache: MemoryCache;
16
+ /**
17
+ * Generate cache key from parameters
18
+ */
19
+ export declare function generateCacheKey(...args: any[]): string;
20
+ /**
21
+ * Cache wrapper for async functions
22
+ */
23
+ export declare function cached<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T>;
24
+ /**
25
+ * Cache embeddings to disk
26
+ */
27
+ export declare function cacheEmbedding(key: string, embedding: number[]): void;
28
+ /**
29
+ * Get cached embedding from disk
30
+ */
31
+ export declare function getCachedEmbedding(key: string): number[] | null;
32
+ /**
33
+ * Clear all caches
34
+ */
35
+ export declare function clearAllCaches(): void;
36
+ /**
37
+ * Get cache statistics
38
+ */
39
+ export declare function getCacheStats(): {
40
+ memorySize: number;
41
+ memoryMaxSize: number;
42
+ fileCacheCount: number;
43
+ };
44
+ export {};
45
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,cAAM,WAAW;IACf,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAY;IAIjC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,GAAE,MAAgB,GAAG,IAAI;IAgB1D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAgB7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,MAAM;CAGf;AAGD,eAAO,MAAM,WAAW,aAAuB,CAAC;AAEhD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAGvD;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,GAAG,GAAE,MAAgB,GACpB,OAAO,CAAC,CAAC,CAAC,CAWZ;AAkBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAWrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAoB/D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAsBrC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB,CAuBA"}
package/dist/cache.js ADDED
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Performance Optimization & Caching System
3
+ * Improve efficiency with intelligent caching
4
+ */
5
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
6
+ import { join, dirname } from 'path';
7
+ import { fileURLToPath } from 'url';
8
+ import { createHash } from 'crypto';
9
+ class MemoryCache {
10
+ cache = new Map();
11
+ maxSize;
12
+ constructor(maxSize = 100) {
13
+ this.maxSize = maxSize;
14
+ }
15
+ set(key, value, ttl = 3600000) {
16
+ // Remove oldest entries if cache is full
17
+ if (this.cache.size >= this.maxSize) {
18
+ const oldestKey = Array.from(this.cache.entries())
19
+ .sort((a, b) => a[1].timestamp - b[1].timestamp)[0][0];
20
+ this.cache.delete(oldestKey);
21
+ }
22
+ this.cache.set(key, {
23
+ key,
24
+ value,
25
+ timestamp: Date.now(),
26
+ expiresAt: Date.now() + ttl,
27
+ });
28
+ }
29
+ get(key) {
30
+ const entry = this.cache.get(key);
31
+ if (!entry) {
32
+ return null;
33
+ }
34
+ // Check if expired
35
+ if (Date.now() > entry.expiresAt) {
36
+ this.cache.delete(key);
37
+ return null;
38
+ }
39
+ return entry.value;
40
+ }
41
+ has(key) {
42
+ const entry = this.cache.get(key);
43
+ if (!entry)
44
+ return false;
45
+ if (Date.now() > entry.expiresAt) {
46
+ this.cache.delete(key);
47
+ return false;
48
+ }
49
+ return true;
50
+ }
51
+ clear() {
52
+ this.cache.clear();
53
+ }
54
+ size() {
55
+ return this.cache.size;
56
+ }
57
+ }
58
+ // Global cache instance
59
+ export const memoryCache = new MemoryCache(200);
60
+ /**
61
+ * Generate cache key from parameters
62
+ */
63
+ export function generateCacheKey(...args) {
64
+ const str = JSON.stringify(args);
65
+ return createHash('md5').update(str).digest('hex');
66
+ }
67
+ /**
68
+ * Cache wrapper for async functions
69
+ */
70
+ export async function cached(key, fn, ttl = 3600000 // 1 hour default
71
+ ) {
72
+ // Check cache
73
+ const cached = memoryCache.get(key);
74
+ if (cached !== null) {
75
+ return cached;
76
+ }
77
+ // Execute and cache
78
+ const result = await fn();
79
+ memoryCache.set(key, result, ttl);
80
+ return result;
81
+ }
82
+ /**
83
+ * File-based cache for embeddings
84
+ */
85
+ function getCacheFilePath(key) {
86
+ const __filename = fileURLToPath(import.meta.url);
87
+ const __dirname = dirname(__filename);
88
+ const agentDir = join(__dirname, '..');
89
+ const cacheDir = join(agentDir, 'data', 'cache');
90
+ if (!existsSync(cacheDir)) {
91
+ mkdirSync(cacheDir, { recursive: true });
92
+ }
93
+ return join(cacheDir, `${key}.json`);
94
+ }
95
+ /**
96
+ * Cache embeddings to disk
97
+ */
98
+ export function cacheEmbedding(key, embedding) {
99
+ try {
100
+ const cacheFile = getCacheFilePath(key);
101
+ const data = {
102
+ embedding,
103
+ timestamp: Date.now(),
104
+ };
105
+ writeFileSync(cacheFile, JSON.stringify(data), 'utf-8');
106
+ }
107
+ catch (error) {
108
+ // Silently fail - caching is optional
109
+ }
110
+ }
111
+ /**
112
+ * Get cached embedding from disk
113
+ */
114
+ export function getCachedEmbedding(key) {
115
+ try {
116
+ const cacheFile = getCacheFilePath(key);
117
+ if (!existsSync(cacheFile)) {
118
+ return null;
119
+ }
120
+ const data = JSON.parse(readFileSync(cacheFile, 'utf-8'));
121
+ // Check if cache is still valid (24 hours)
122
+ const maxAge = 24 * 60 * 60 * 1000;
123
+ if (Date.now() - data.timestamp > maxAge) {
124
+ return null;
125
+ }
126
+ return data.embedding;
127
+ }
128
+ catch (error) {
129
+ return null;
130
+ }
131
+ }
132
+ /**
133
+ * Clear all caches
134
+ */
135
+ export function clearAllCaches() {
136
+ memoryCache.clear();
137
+ // Clear file cache
138
+ try {
139
+ const __filename = fileURLToPath(import.meta.url);
140
+ const __dirname = dirname(__filename);
141
+ const agentDir = join(__dirname, '..');
142
+ const cacheDir = join(agentDir, 'data', 'cache');
143
+ if (existsSync(cacheDir)) {
144
+ const { readdirSync, unlinkSync } = require('fs');
145
+ const files = readdirSync(cacheDir);
146
+ for (const file of files) {
147
+ if (file.endsWith('.json')) {
148
+ unlinkSync(join(cacheDir, file));
149
+ }
150
+ }
151
+ }
152
+ }
153
+ catch (error) {
154
+ // Silently fail
155
+ }
156
+ }
157
+ /**
158
+ * Get cache statistics
159
+ */
160
+ export function getCacheStats() {
161
+ let fileCacheCount = 0;
162
+ try {
163
+ const __filename = fileURLToPath(import.meta.url);
164
+ const __dirname = dirname(__filename);
165
+ const agentDir = join(__dirname, '..');
166
+ const cacheDir = join(agentDir, 'data', 'cache');
167
+ if (existsSync(cacheDir)) {
168
+ const { readdirSync } = require('fs');
169
+ const files = readdirSync(cacheDir);
170
+ fileCacheCount = files.filter((f) => f.endsWith('.json')).length;
171
+ }
172
+ }
173
+ catch (error) {
174
+ // Ignore
175
+ }
176
+ return {
177
+ memorySize: memoryCache.size(),
178
+ memoryMaxSize: 200,
179
+ fileCacheCount,
180
+ };
181
+ }
182
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
package/dist/chat.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { SearchResult } from './types.js';
2
+ export declare function chatWithContext(query: string, context: SearchResult[]): Promise<string>;
3
+ export declare function generateDiff(fileContent: string, instruction: string, filepath: string): Promise<string>;
4
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAoB/C,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,EAAE,GACtB,OAAO,CAAC,MAAM,CAAC,CA4DjB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAsEjB"}
package/dist/chat.js ADDED
@@ -0,0 +1,132 @@
1
+ import { config } from 'dotenv';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { CohereClient } from 'cohere-ai';
5
+ import { retryWithBackoff, cohereCircuitBreaker, handleError } from './error-handler.js';
6
+ import { optimizeContext } from './token-optimizer.js';
7
+ import { optimizeQuery } from './query-optimizer.js';
8
+ // Load .env from agent directory
9
+ try {
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = dirname(__filename);
12
+ const agentDir = join(__dirname, '..');
13
+ config({ path: join(agentDir, '.env') });
14
+ }
15
+ catch {
16
+ // Fallback
17
+ }
18
+ config(); // Also try current directory
19
+ const cohere = new CohereClient({
20
+ token: process.env.COHERE_API_KEY || '',
21
+ });
22
+ export async function chatWithContext(query, context) {
23
+ // Optimize query to understand intent and select strategy
24
+ const { optimizedQuery, strategy } = optimizeQuery(query);
25
+ // Optimize context to reduce tokens
26
+ const optimized = optimizeContext(context, optimizedQuery, strategy.maxTokens, strategy.contextStrategy);
27
+ // Use optimized chunks
28
+ const optimizedChunks = optimized.chunks;
29
+ const contextText = optimizedChunks
30
+ .map((chunk, idx) => `[Chunk ${idx + 1} from ${chunk.filepath}]\n${chunk.content}`)
31
+ .join('\n\n---\n\n');
32
+ const prompt = `You are a strict coding assistant for enterprise environments.
33
+ Use ONLY the provided code context.
34
+
35
+ CONTEXT:
36
+
37
+ ${contextText}
38
+
39
+ USER QUERY:
40
+
41
+ ${optimizedQuery}`;
42
+ return await retryWithBackoff(async () => {
43
+ return await cohereCircuitBreaker.execute(async () => {
44
+ const response = await cohere.chat({
45
+ message: prompt,
46
+ });
47
+ return response.text || 'No response generated';
48
+ });
49
+ }, {
50
+ maxRetries: 5,
51
+ baseDelay: 2000,
52
+ maxDelay: 60000,
53
+ operationName: 'chatWithContext',
54
+ onRetry: (attempt, error) => {
55
+ console.warn(`Retry attempt ${attempt} for chatWithContext: ${error instanceof Error ? error.message : String(error)}`);
56
+ },
57
+ }).catch(error => {
58
+ handleError(error, {
59
+ operation: 'chatWithContext',
60
+ metadata: {
61
+ query: optimizedQuery,
62
+ contextCount: optimizedChunks.length,
63
+ originalContextCount: context.length,
64
+ tokenReduction: `${optimized.reductionPercent.toFixed(1)}%`,
65
+ },
66
+ });
67
+ });
68
+ }
69
+ export async function generateDiff(fileContent, instruction, filepath) {
70
+ const prompt = `You are a code editor. Generate ONLY a unified diff patch that applies cleanly to the file.
71
+ CRITICAL: The diff MUST be valid and apply correctly. Include ALL necessary changes:
72
+ - Function/class renames: Update the definition AND all usages AND exports
73
+ - When renaming: Update function name, all calls to it, and module.exports
74
+ - Ensure the resulting code is valid JavaScript/TypeScript
75
+
76
+ Do not include any explanation, comments, or markdown formatting.
77
+ Return ONLY the raw unified diff starting with "---" and "+++".
78
+
79
+ File path: ${filepath}
80
+
81
+ Current file content:
82
+ \`\`\`
83
+ ${fileContent}
84
+ \`\`\`
85
+
86
+ Instruction: ${instruction}
87
+
88
+ IMPORTANT: If renaming a function, you MUST:
89
+ 1. Rename the function definition
90
+ 2. Update all calls to that function
91
+ 3. Update module.exports if the function is exported
92
+
93
+ Return the unified diff patch:`;
94
+ return await retryWithBackoff(async () => {
95
+ return await cohereCircuitBreaker.execute(async () => {
96
+ const response = await cohere.chat({
97
+ message: prompt,
98
+ });
99
+ let diffText = response.text || '';
100
+ // Extract diff if wrapped in markdown code blocks
101
+ const diffMatch = diffText.match(/```(?:diff)?\n([\s\S]*?)```/);
102
+ if (diffMatch) {
103
+ diffText = diffMatch[1];
104
+ }
105
+ // Ensure it starts with --- or +++
106
+ if (!diffText.trim().startsWith('---') && !diffText.trim().startsWith('+++')) {
107
+ // Try to find the diff in the response
108
+ const lines = diffText.split('\n');
109
+ const diffStart = lines.findIndex(line => line.startsWith('---') || line.startsWith('+++'));
110
+ if (diffStart >= 0) {
111
+ diffText = lines.slice(diffStart).join('\n');
112
+ }
113
+ }
114
+ return diffText.trim();
115
+ });
116
+ }, {
117
+ maxRetries: 5,
118
+ baseDelay: 2000,
119
+ maxDelay: 60000,
120
+ operationName: 'generateDiff',
121
+ onRetry: (attempt, error) => {
122
+ console.warn(`Retry attempt ${attempt} for generateDiff: ${error instanceof Error ? error.message : String(error)}`);
123
+ },
124
+ }).catch(error => {
125
+ handleError(error, {
126
+ operation: 'generateDiff',
127
+ filepath,
128
+ metadata: { instruction, fileLength: fileContent.length },
129
+ });
130
+ });
131
+ }
132
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Code Analysis Engine
3
+ * Call graph, dependency graph, symbol resolution, import resolution
4
+ */
5
+ import { type CodeAnalysis } from './ast-parser.js';
6
+ export interface DependencyGraph {
7
+ filepath: string;
8
+ dependencies: string[];
9
+ dependents: string[];
10
+ depth: number;
11
+ }
12
+ export interface CallGraphNode {
13
+ symbol: string;
14
+ filepath: string;
15
+ calls: string[];
16
+ calledBy: string[];
17
+ depth: number;
18
+ }
19
+ export interface CodebaseAnalysis {
20
+ files: Map<string, CodeAnalysis>;
21
+ dependencyGraph: Map<string, DependencyGraph>;
22
+ callGraph: Map<string, CallGraphNode>;
23
+ entryPoints: string[];
24
+ symbols: Map<string, {
25
+ filepath: string;
26
+ line: number;
27
+ kind: string;
28
+ }>;
29
+ }
30
+ /**
31
+ * Analyze entire codebase
32
+ */
33
+ export declare function analyzeCodebase(baseDir: string, entryFiles?: string[]): Promise<CodebaseAnalysis>;
34
+ /**
35
+ * Find all files that depend on a given file
36
+ */
37
+ export declare function findDependents(filepath: string, dependencyGraph: Map<string, DependencyGraph>): string[];
38
+ /**
39
+ * Find all files that a given file depends on
40
+ */
41
+ export declare function findDependencies(filepath: string, dependencyGraph: Map<string, DependencyGraph>): string[];
42
+ /**
43
+ * Get impact of changing a file (what breaks)
44
+ */
45
+ export declare function getChangeImpact(filepath: string, codebaseAnalysis: CodebaseAnalysis): {
46
+ affectedFiles: string[];
47
+ affectedSymbols: string[];
48
+ riskLevel: 'low' | 'medium' | 'high';
49
+ };
50
+ //# sourceMappingURL=code-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-analysis.d.ts","sourceRoot":"","sources":["../src/code-analysis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,KAAK,YAAY,EAA4C,MAAM,iBAAiB,CAAC;AAIzG,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC9C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,gBAAgB,CAAC,CA6E3B;AAmOD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAC5C,MAAM,EAAE,CAaV;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAC5C,MAAM,EAAE,CAaV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,gBAAgB,GACjC;IACD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC,CA2CA"}