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.
- package/ARCHITECTURE.md +240 -0
- package/CHANGELOG.md +44 -0
- package/CONTRIBUTING.md +171 -0
- package/LICENSE +22 -0
- package/README.md +203 -0
- package/dist/ast-parser.d.ts +55 -0
- package/dist/ast-parser.d.ts.map +1 -0
- package/dist/ast-parser.js +331 -0
- package/dist/ast-parser.js.map +1 -0
- package/dist/benchmark.d.ts +39 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +195 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cache.d.ts +45 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +182 -0
- package/dist/cache.js.map +1 -0
- package/dist/chat.d.ts +4 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +132 -0
- package/dist/chat.js.map +1 -0
- package/dist/code-analysis.d.ts +50 -0
- package/dist/code-analysis.d.ts.map +1 -0
- package/dist/code-analysis.js +327 -0
- package/dist/code-analysis.js.map +1 -0
- package/dist/context.d.ts +44 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +187 -0
- package/dist/context.js.map +1 -0
- package/dist/docs.d.ts +21 -0
- package/dist/docs.d.ts.map +1 -0
- package/dist/docs.js +147 -0
- package/dist/docs.js.map +1 -0
- package/dist/edit.d.ts +38 -0
- package/dist/edit.d.ts.map +1 -0
- package/dist/edit.js +594 -0
- package/dist/edit.js.map +1 -0
- package/dist/embed.d.ts +18 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +479 -0
- package/dist/embed.js.map +1 -0
- package/dist/error-handler.d.ts +76 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +213 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/formatter.d.ts +25 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +148 -0
- package/dist/formatter.js.map +1 -0
- package/dist/git.d.ts +55 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +198 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +964 -0
- package/dist/index.js.map +1 -0
- package/dist/intelligent-retrieval.d.ts +41 -0
- package/dist/intelligent-retrieval.d.ts.map +1 -0
- package/dist/intelligent-retrieval.js +265 -0
- package/dist/intelligent-retrieval.js.map +1 -0
- package/dist/iterative-refinement.d.ts +31 -0
- package/dist/iterative-refinement.d.ts.map +1 -0
- package/dist/iterative-refinement.js +172 -0
- package/dist/iterative-refinement.js.map +1 -0
- package/dist/learning.d.ts +69 -0
- package/dist/learning.d.ts.map +1 -0
- package/dist/learning.js +233 -0
- package/dist/learning.js.map +1 -0
- package/dist/log.d.ts +4 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +31 -0
- package/dist/log.js.map +1 -0
- package/dist/migrate.d.ts +33 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +133 -0
- package/dist/migrate.js.map +1 -0
- package/dist/monitoring.d.ts +75 -0
- package/dist/monitoring.d.ts.map +1 -0
- package/dist/monitoring.js +248 -0
- package/dist/monitoring.js.map +1 -0
- package/dist/parallel-processor.d.ts +43 -0
- package/dist/parallel-processor.d.ts.map +1 -0
- package/dist/parallel-processor.js +308 -0
- package/dist/parallel-processor.js.map +1 -0
- package/dist/planner.d.ts +47 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +198 -0
- package/dist/planner.js.map +1 -0
- package/dist/policy.d.ts +3 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +26 -0
- package/dist/policy.js.map +1 -0
- package/dist/query-optimizer.d.ts +32 -0
- package/dist/query-optimizer.d.ts.map +1 -0
- package/dist/query-optimizer.js +205 -0
- package/dist/query-optimizer.js.map +1 -0
- package/dist/refactor.d.ts +27 -0
- package/dist/refactor.d.ts.map +1 -0
- package/dist/refactor.js +118 -0
- package/dist/refactor.js.map +1 -0
- package/dist/review.d.ts +31 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +206 -0
- package/dist/review.js.map +1 -0
- package/dist/scaffold.d.ts +14 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +85 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/search.d.ts +19 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +198 -0
- package/dist/search.js.map +1 -0
- package/dist/session.d.ts +17 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +301 -0
- package/dist/session.js.map +1 -0
- package/dist/task-verification.d.ts +39 -0
- package/dist/task-verification.d.ts.map +1 -0
- package/dist/task-verification.js +336 -0
- package/dist/task-verification.js.map +1 -0
- package/dist/test_cohere.d.ts +2 -0
- package/dist/test_cohere.d.ts.map +1 -0
- package/dist/test_cohere.js +68 -0
- package/dist/test_cohere.js.map +1 -0
- package/dist/test_env.d.ts +2 -0
- package/dist/test_env.d.ts.map +1 -0
- package/dist/test_env.js +24 -0
- package/dist/test_env.js.map +1 -0
- package/dist/test_retrieval.d.ts +2 -0
- package/dist/test_retrieval.d.ts.map +1 -0
- package/dist/test_retrieval.js +84 -0
- package/dist/test_retrieval.js.map +1 -0
- package/dist/testgen.d.ts +24 -0
- package/dist/testgen.d.ts.map +1 -0
- package/dist/testgen.js +167 -0
- package/dist/testgen.js.map +1 -0
- package/dist/token-optimizer.d.ts +20 -0
- package/dist/token-optimizer.d.ts.map +1 -0
- package/dist/token-optimizer.js +277 -0
- package/dist/token-optimizer.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +54 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +295 -0
- package/dist/ui.js.map +1 -0
- package/dist/verify_db.d.ts +2 -0
- package/dist/verify_db.d.ts.map +1 -0
- package/dist/verify_db.js +52 -0
- package/dist/verify_db.js.map +1 -0
- package/package.json +71 -0
- package/templates/next-page/app/layout.tsx +19 -0
- package/templates/next-page/app/page.tsx +10 -0
- package/templates/next-page/package.json +22 -0
- package/templates/node-api/index.js +57 -0
- package/templates/node-api/package.json +13 -0
package/dist/cache.d.ts
ADDED
|
@@ -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
|
package/dist/chat.js.map
ADDED
|
@@ -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"}
|