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
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Monitoring & Health Check System
|
|
3
|
+
* Ensures 24/7 operation visibility
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readFileSync } from 'fs';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { cohereCircuitBreaker } from './error-handler.js';
|
|
9
|
+
class MetricsCollector {
|
|
10
|
+
operations = {
|
|
11
|
+
total: 0,
|
|
12
|
+
successful: 0,
|
|
13
|
+
failed: 0,
|
|
14
|
+
retries: 0,
|
|
15
|
+
};
|
|
16
|
+
performance = {
|
|
17
|
+
responseTimes: [],
|
|
18
|
+
retryTimes: [],
|
|
19
|
+
apiCalls: 0,
|
|
20
|
+
cacheHits: 0,
|
|
21
|
+
};
|
|
22
|
+
errors = {
|
|
23
|
+
byType: {},
|
|
24
|
+
recent: [],
|
|
25
|
+
};
|
|
26
|
+
recordOperation(success, responseTime, retries) {
|
|
27
|
+
this.operations.total++;
|
|
28
|
+
if (success) {
|
|
29
|
+
this.operations.successful++;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.operations.failed++;
|
|
33
|
+
}
|
|
34
|
+
if (retries) {
|
|
35
|
+
this.operations.retries += retries;
|
|
36
|
+
}
|
|
37
|
+
if (responseTime) {
|
|
38
|
+
this.performance.responseTimes.push(responseTime);
|
|
39
|
+
// Keep only last 1000 measurements
|
|
40
|
+
if (this.performance.responseTimes.length > 1000) {
|
|
41
|
+
this.performance.responseTimes.shift();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
recordApiCall() {
|
|
46
|
+
this.performance.apiCalls++;
|
|
47
|
+
}
|
|
48
|
+
recordCacheHit() {
|
|
49
|
+
this.performance.cacheHits++;
|
|
50
|
+
}
|
|
51
|
+
recordError(type, message) {
|
|
52
|
+
this.errors.byType[type] = (this.errors.byType[type] || 0) + 1;
|
|
53
|
+
this.errors.recent.push({
|
|
54
|
+
timestamp: new Date().toISOString(),
|
|
55
|
+
type,
|
|
56
|
+
message,
|
|
57
|
+
});
|
|
58
|
+
// Keep only last 100 errors
|
|
59
|
+
if (this.errors.recent.length > 100) {
|
|
60
|
+
this.errors.recent.shift();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
getMetrics() {
|
|
64
|
+
const avgResponseTime = this.performance.responseTimes.length > 0
|
|
65
|
+
? this.performance.responseTimes.reduce((a, b) => a + b, 0) / this.performance.responseTimes.length
|
|
66
|
+
: 0;
|
|
67
|
+
const avgRetryTime = this.performance.retryTimes.length > 0
|
|
68
|
+
? this.performance.retryTimes.reduce((a, b) => a + b, 0) / this.performance.retryTimes.length
|
|
69
|
+
: 0;
|
|
70
|
+
return {
|
|
71
|
+
operations: { ...this.operations },
|
|
72
|
+
performance: {
|
|
73
|
+
avgResponseTime,
|
|
74
|
+
avgRetryTime,
|
|
75
|
+
apiCalls: this.performance.apiCalls,
|
|
76
|
+
cacheHits: this.performance.cacheHits,
|
|
77
|
+
},
|
|
78
|
+
errors: {
|
|
79
|
+
byType: { ...this.errors.byType },
|
|
80
|
+
recent: [...this.errors.recent],
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
reset() {
|
|
85
|
+
this.operations = { total: 0, successful: 0, failed: 0, retries: 0 };
|
|
86
|
+
this.performance = { responseTimes: [], retryTimes: [], apiCalls: 0, cacheHits: 0 };
|
|
87
|
+
this.errors = { byType: {}, recent: [] };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export const metricsCollector = new MetricsCollector();
|
|
91
|
+
/**
|
|
92
|
+
* Check database health
|
|
93
|
+
*/
|
|
94
|
+
function checkDatabase() {
|
|
95
|
+
try {
|
|
96
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
97
|
+
const __dirname = dirname(__filename);
|
|
98
|
+
const agentDir = join(__dirname, '..');
|
|
99
|
+
const dbPath = join(agentDir, 'data', 'embeddings.sqlite');
|
|
100
|
+
if (!existsSync(dbPath)) {
|
|
101
|
+
return { status: 'error', message: 'Database file not found' };
|
|
102
|
+
}
|
|
103
|
+
// Try to read database
|
|
104
|
+
const buffer = readFileSync(dbPath);
|
|
105
|
+
if (buffer.length === 0) {
|
|
106
|
+
return { status: 'error', message: 'Database file is empty' };
|
|
107
|
+
}
|
|
108
|
+
return { status: 'ok', message: 'Database accessible' };
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return {
|
|
112
|
+
status: 'error',
|
|
113
|
+
message: `Database check failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check API health
|
|
119
|
+
*/
|
|
120
|
+
function checkApi() {
|
|
121
|
+
const circuitState = cohereCircuitBreaker.getState();
|
|
122
|
+
if (circuitState === 'OPEN') {
|
|
123
|
+
return { status: 'circuit_open', message: 'API circuit breaker is OPEN - too many failures' };
|
|
124
|
+
}
|
|
125
|
+
if (circuitState === 'HALF_OPEN') {
|
|
126
|
+
return { status: 'error', message: 'API circuit breaker is HALF_OPEN - recovering' };
|
|
127
|
+
}
|
|
128
|
+
// Check if API key is configured
|
|
129
|
+
if (!process.env.COHERE_API_KEY) {
|
|
130
|
+
return { status: 'error', message: 'COHERE_API_KEY not configured' };
|
|
131
|
+
}
|
|
132
|
+
return { status: 'ok', message: 'API accessible' };
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check filesystem health
|
|
136
|
+
*/
|
|
137
|
+
function checkFilesystem() {
|
|
138
|
+
try {
|
|
139
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
140
|
+
const __dirname = dirname(__filename);
|
|
141
|
+
const agentDir = join(__dirname, '..');
|
|
142
|
+
const dataDir = join(agentDir, 'data');
|
|
143
|
+
// Check if data directory exists or can be created
|
|
144
|
+
if (!existsSync(dataDir)) {
|
|
145
|
+
// Try to create it
|
|
146
|
+
try {
|
|
147
|
+
const { mkdirSync } = require('fs');
|
|
148
|
+
mkdirSync(dataDir, { recursive: true });
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return { status: 'error', message: 'Cannot create data directory' };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return { status: 'ok', message: 'Filesystem accessible' };
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
return {
|
|
158
|
+
status: 'error',
|
|
159
|
+
message: `Filesystem check failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Check memory usage
|
|
165
|
+
*/
|
|
166
|
+
function checkMemory() {
|
|
167
|
+
try {
|
|
168
|
+
const usage = process.memoryUsage();
|
|
169
|
+
const heapUsedMB = usage.heapUsed / 1024 / 1024;
|
|
170
|
+
const heapTotalMB = usage.heapTotal / 1024 / 1024;
|
|
171
|
+
const usagePercent = (heapUsedMB / heapTotalMB) * 100;
|
|
172
|
+
if (usagePercent > 90) {
|
|
173
|
+
return {
|
|
174
|
+
status: 'warning',
|
|
175
|
+
message: `High memory usage: ${usagePercent.toFixed(1)}%`,
|
|
176
|
+
usage: usagePercent,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
status: 'ok',
|
|
181
|
+
message: `Memory usage: ${usagePercent.toFixed(1)}%`,
|
|
182
|
+
usage: usagePercent,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
return {
|
|
187
|
+
status: 'ok',
|
|
188
|
+
message: 'Memory check unavailable',
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Perform health check
|
|
194
|
+
*/
|
|
195
|
+
export function performHealthCheck() {
|
|
196
|
+
const dbCheck = checkDatabase();
|
|
197
|
+
const apiCheck = checkApi();
|
|
198
|
+
const fsCheck = checkFilesystem();
|
|
199
|
+
const memCheck = checkMemory();
|
|
200
|
+
const checks = {
|
|
201
|
+
database: dbCheck,
|
|
202
|
+
api: apiCheck,
|
|
203
|
+
filesystem: fsCheck,
|
|
204
|
+
memory: memCheck,
|
|
205
|
+
};
|
|
206
|
+
// Determine overall status
|
|
207
|
+
let status = 'healthy';
|
|
208
|
+
if (dbCheck.status === 'error' || apiCheck.status === 'circuit_open' || fsCheck.status === 'error') {
|
|
209
|
+
status = 'unhealthy';
|
|
210
|
+
}
|
|
211
|
+
else if (apiCheck.status === 'error' || memCheck.status === 'warning') {
|
|
212
|
+
status = 'degraded';
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
status,
|
|
216
|
+
timestamp: new Date().toISOString(),
|
|
217
|
+
checks,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get current metrics
|
|
222
|
+
*/
|
|
223
|
+
export function getMetrics() {
|
|
224
|
+
return metricsCollector.getMetrics();
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Format health status for display
|
|
228
|
+
*/
|
|
229
|
+
export function formatHealthStatus(health) {
|
|
230
|
+
const statusIcon = {
|
|
231
|
+
healthy: '✓',
|
|
232
|
+
degraded: '⚠',
|
|
233
|
+
unhealthy: '✗',
|
|
234
|
+
}[health.status];
|
|
235
|
+
const statusColor = {
|
|
236
|
+
healthy: 'green',
|
|
237
|
+
degraded: 'yellow',
|
|
238
|
+
unhealthy: 'red',
|
|
239
|
+
}[health.status];
|
|
240
|
+
let output = `${statusIcon} System Status: ${health.status.toUpperCase()}\n\n`;
|
|
241
|
+
output += 'Component Checks:\n';
|
|
242
|
+
for (const [component, check] of Object.entries(health.checks)) {
|
|
243
|
+
const icon = check.status === 'ok' ? '✓' : check.status === 'warning' ? '⚠' : '✗';
|
|
244
|
+
output += ` ${icon} ${component}: ${check.message}\n`;
|
|
245
|
+
}
|
|
246
|
+
return output;
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=monitoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitoring.js","sourceRoot":"","sources":["../src/monitoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel Processing & Caching System
|
|
3
|
+
* 10-100x faster through parallelization and smart caching
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parallel indexing with caching
|
|
7
|
+
*/
|
|
8
|
+
export declare function indexParallel(files: string[], options?: {
|
|
9
|
+
maxConcurrency?: number;
|
|
10
|
+
useCache?: boolean;
|
|
11
|
+
cacheDir?: string;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
indexed: number;
|
|
14
|
+
cached: number;
|
|
15
|
+
totalChunks: number;
|
|
16
|
+
timeMs: number;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Incremental update: only process changed files
|
|
20
|
+
*/
|
|
21
|
+
export declare function updateIndexIncremental(baseDir: string, options?: {
|
|
22
|
+
cacheDir?: string;
|
|
23
|
+
watchMode?: boolean;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
updated: number;
|
|
26
|
+
unchanged: number;
|
|
27
|
+
totalChunks: number;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Clear cache
|
|
31
|
+
*/
|
|
32
|
+
export declare function clearCache(cacheDir?: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get cache statistics
|
|
35
|
+
*/
|
|
36
|
+
export declare function getCacheStats(cacheDir?: string): {
|
|
37
|
+
totalFiles: number;
|
|
38
|
+
totalChunks: number;
|
|
39
|
+
totalSize: number;
|
|
40
|
+
oldestEntry: number;
|
|
41
|
+
newestEntry: number;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=parallel-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-processor.d.ts","sourceRoot":"","sources":["../src/parallel-processor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4BH;;GAEG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CA4CD;AA+FD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAoCD;AAmCD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,GAAE,MAA0B,GAAG,IAAI,CAmBrE;AAsDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAA0B,GAAG;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CA4CA"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel Processing & Caching System
|
|
3
|
+
* 10-100x faster through parallelization and smart caching
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, existsSync, statSync, readdirSync, mkdirSync, rmSync, unlinkSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { CohereClient } from 'cohere-ai';
|
|
8
|
+
import { config } from 'dotenv';
|
|
9
|
+
import { encoding_for_model } from 'tiktoken';
|
|
10
|
+
// Load .env
|
|
11
|
+
config();
|
|
12
|
+
const cohere = new CohereClient({
|
|
13
|
+
token: process.env.COHERE_API_KEY || '',
|
|
14
|
+
});
|
|
15
|
+
const enc = encoding_for_model('gpt-3.5-turbo');
|
|
16
|
+
const CHUNK_SIZE = 300;
|
|
17
|
+
const OVERLAP = 50;
|
|
18
|
+
/**
|
|
19
|
+
* Parallel indexing with caching
|
|
20
|
+
*/
|
|
21
|
+
export async function indexParallel(files, options = {}) {
|
|
22
|
+
const { maxConcurrency = 5, useCache = true, cacheDir = '.codehere-cache' } = options;
|
|
23
|
+
const startTime = Date.now();
|
|
24
|
+
let indexed = 0;
|
|
25
|
+
let cached = 0;
|
|
26
|
+
let totalChunks = 0;
|
|
27
|
+
// Create cache directory
|
|
28
|
+
if (useCache && !existsSync(cacheDir)) {
|
|
29
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
// Process files in parallel batches
|
|
32
|
+
const batches = [];
|
|
33
|
+
for (let i = 0; i < files.length; i += maxConcurrency) {
|
|
34
|
+
batches.push(files.slice(i, i + maxConcurrency));
|
|
35
|
+
}
|
|
36
|
+
for (const batch of batches) {
|
|
37
|
+
const results = await Promise.allSettled(batch.map(file => processFileWithCache(file, useCache, cacheDir)));
|
|
38
|
+
for (const result of results) {
|
|
39
|
+
if (result.status === 'fulfilled') {
|
|
40
|
+
if (result.value.cached) {
|
|
41
|
+
cached++;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
indexed++;
|
|
45
|
+
}
|
|
46
|
+
totalChunks += result.value.chunks;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const timeMs = Date.now() - startTime;
|
|
51
|
+
return {
|
|
52
|
+
indexed,
|
|
53
|
+
cached,
|
|
54
|
+
totalChunks,
|
|
55
|
+
timeMs,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Process file with caching
|
|
60
|
+
*/
|
|
61
|
+
async function processFileWithCache(filepath, useCache, cacheDir) {
|
|
62
|
+
if (!useCache) {
|
|
63
|
+
// Process without cache
|
|
64
|
+
const content = readFileSync(filepath, 'utf-8');
|
|
65
|
+
const chunks = chunkTextLocal(content, CHUNK_SIZE, OVERLAP);
|
|
66
|
+
// Embed chunks (this is the slow part)
|
|
67
|
+
for (const chunk of chunks) {
|
|
68
|
+
await embedTextLocal(chunk);
|
|
69
|
+
}
|
|
70
|
+
return { cached: false, chunks: chunks.length };
|
|
71
|
+
}
|
|
72
|
+
// Check cache
|
|
73
|
+
const cacheKey = getCacheKey(filepath);
|
|
74
|
+
const cachePath = join(cacheDir, cacheKey);
|
|
75
|
+
if (existsSync(cachePath)) {
|
|
76
|
+
const cacheEntry = JSON.parse(readFileSync(cachePath, 'utf-8'));
|
|
77
|
+
// Check if file hasn't changed
|
|
78
|
+
const fileHash = getFileHash(filepath);
|
|
79
|
+
if (cacheEntry.hash === fileHash) {
|
|
80
|
+
// Cache hit - return cached chunks
|
|
81
|
+
return { cached: true, chunks: cacheEntry.chunks.length };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Cache miss or stale - process file
|
|
85
|
+
const content = readFileSync(filepath, 'utf-8');
|
|
86
|
+
const chunks = chunkTextLocal(content, CHUNK_SIZE, OVERLAP); // Defined below
|
|
87
|
+
const fileHash = getFileHash(filepath);
|
|
88
|
+
// Embed chunks (with rate limiting)
|
|
89
|
+
const embeddings = [];
|
|
90
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
91
|
+
const chunk = chunks[i];
|
|
92
|
+
// Rate limit: delay between chunks
|
|
93
|
+
if (i > 0) {
|
|
94
|
+
await new Promise(resolve => setTimeout(resolve, 2000)); // 2 second delay
|
|
95
|
+
}
|
|
96
|
+
const embedding = await embedTextLocal(chunk);
|
|
97
|
+
embeddings[i] = embedding;
|
|
98
|
+
}
|
|
99
|
+
// Save to cache
|
|
100
|
+
const cacheEntry = {
|
|
101
|
+
filepath,
|
|
102
|
+
hash: fileHash,
|
|
103
|
+
chunks: chunks.map((content, i) => ({
|
|
104
|
+
content,
|
|
105
|
+
embedding: embeddings[i],
|
|
106
|
+
})),
|
|
107
|
+
timestamp: Date.now(),
|
|
108
|
+
};
|
|
109
|
+
writeFileSync(cachePath, JSON.stringify(cacheEntry, null, 2), 'utf-8');
|
|
110
|
+
return { cached: false, chunks: chunks.length };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get cache key from filepath
|
|
114
|
+
*/
|
|
115
|
+
function getCacheKey(filepath) {
|
|
116
|
+
// Create a safe filename from filepath
|
|
117
|
+
return filepath.replace(/[^a-zA-Z0-9]/g, '_') + '.json';
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get file hash (simple: use mtime + size)
|
|
121
|
+
*/
|
|
122
|
+
function getFileHash(filepath) {
|
|
123
|
+
try {
|
|
124
|
+
const stat = statSync(filepath);
|
|
125
|
+
return `${stat.mtimeMs}-${stat.size}`;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return 'unknown';
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Incremental update: only process changed files
|
|
133
|
+
*/
|
|
134
|
+
export async function updateIndexIncremental(baseDir, options = {}) {
|
|
135
|
+
const { cacheDir = '.codehere-cache', watchMode = false } = options;
|
|
136
|
+
// Find all code files
|
|
137
|
+
const files = findCodeFiles(baseDir);
|
|
138
|
+
let updated = 0;
|
|
139
|
+
let unchanged = 0;
|
|
140
|
+
let totalChunks = 0;
|
|
141
|
+
for (const filepath of files) {
|
|
142
|
+
const cacheKey = getCacheKey(filepath);
|
|
143
|
+
const cachePath = join(cacheDir, cacheKey);
|
|
144
|
+
if (existsSync(cachePath)) {
|
|
145
|
+
const cacheEntry = JSON.parse(readFileSync(cachePath, 'utf-8'));
|
|
146
|
+
const fileHash = getFileHash(filepath);
|
|
147
|
+
if (cacheEntry.hash === fileHash) {
|
|
148
|
+
// File unchanged
|
|
149
|
+
unchanged++;
|
|
150
|
+
totalChunks += cacheEntry.chunks.length;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// File changed or new - process it
|
|
155
|
+
const result = await processFileWithCache(filepath, true, cacheDir);
|
|
156
|
+
updated++;
|
|
157
|
+
totalChunks += result.chunks;
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
updated,
|
|
161
|
+
unchanged,
|
|
162
|
+
totalChunks,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Find code files recursively
|
|
167
|
+
*/
|
|
168
|
+
function findCodeFiles(dir) {
|
|
169
|
+
const files = [];
|
|
170
|
+
try {
|
|
171
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
172
|
+
for (const entry of entries) {
|
|
173
|
+
const fullPath = join(dir, entry.name);
|
|
174
|
+
// Skip node_modules, .git, etc.
|
|
175
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist' || entry.name === 'build') {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (entry.isDirectory()) {
|
|
179
|
+
files.push(...findCodeFiles(fullPath));
|
|
180
|
+
}
|
|
181
|
+
else if (entry.isFile()) {
|
|
182
|
+
const ext = entry.name.split('.').pop()?.toLowerCase();
|
|
183
|
+
if (ext && ['ts', 'tsx', 'js', 'jsx'].includes(ext)) {
|
|
184
|
+
files.push(fullPath);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// Skip directories we can't read
|
|
191
|
+
}
|
|
192
|
+
return files;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Clear cache
|
|
196
|
+
*/
|
|
197
|
+
export function clearCache(cacheDir = '.codehere-cache') {
|
|
198
|
+
if (!existsSync(cacheDir)) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
rmSync(cacheDir, { recursive: true, force: true });
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// Fallback: delete files individually
|
|
206
|
+
const files = readdirSync(cacheDir);
|
|
207
|
+
for (const file of files) {
|
|
208
|
+
const filePath = join(cacheDir, file);
|
|
209
|
+
try {
|
|
210
|
+
unlinkSync(filePath);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// Skip files we can't delete
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Chunk text locally (duplicate from embed.ts for independence)
|
|
220
|
+
*/
|
|
221
|
+
function chunkTextLocal(text, targetTokens, overlap) {
|
|
222
|
+
const tokens = enc.encode(text);
|
|
223
|
+
const chunks = [];
|
|
224
|
+
if (tokens.length <= targetTokens) {
|
|
225
|
+
return [text];
|
|
226
|
+
}
|
|
227
|
+
let start = 0;
|
|
228
|
+
while (start < tokens.length) {
|
|
229
|
+
const end = Math.min(start + targetTokens, tokens.length);
|
|
230
|
+
const chunkTokens = tokens.slice(start, end);
|
|
231
|
+
const decoded = enc.decode(chunkTokens);
|
|
232
|
+
const chunkText = typeof decoded === 'string' ? decoded : new TextDecoder().decode(decoded);
|
|
233
|
+
chunks.push(chunkText);
|
|
234
|
+
if (end >= tokens.length)
|
|
235
|
+
break;
|
|
236
|
+
start = end - overlap;
|
|
237
|
+
}
|
|
238
|
+
return chunks;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Embed text locally (duplicate from embed.ts for independence)
|
|
242
|
+
*/
|
|
243
|
+
async function embedTextLocal(text, retries = 3) {
|
|
244
|
+
for (let attempt = 0; attempt < retries; attempt++) {
|
|
245
|
+
try {
|
|
246
|
+
const response = await cohere.embed({
|
|
247
|
+
texts: [text],
|
|
248
|
+
model: 'embed-english-v3.0',
|
|
249
|
+
inputType: 'search_document',
|
|
250
|
+
});
|
|
251
|
+
const embeddings = Array.isArray(response.embeddings)
|
|
252
|
+
? response.embeddings
|
|
253
|
+
: response.embeddings.embeddings || [];
|
|
254
|
+
return embeddings[0] || [];
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
if (attempt === retries - 1)
|
|
258
|
+
throw error;
|
|
259
|
+
await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
throw new Error('Failed to embed text after retries');
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get cache statistics
|
|
266
|
+
*/
|
|
267
|
+
export function getCacheStats(cacheDir = '.codehere-cache') {
|
|
268
|
+
if (!existsSync(cacheDir)) {
|
|
269
|
+
return {
|
|
270
|
+
totalFiles: 0,
|
|
271
|
+
totalChunks: 0,
|
|
272
|
+
totalSize: 0,
|
|
273
|
+
oldestEntry: 0,
|
|
274
|
+
newestEntry: 0,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
const files = readdirSync(cacheDir).filter(f => f.endsWith('.json'));
|
|
278
|
+
let totalChunks = 0;
|
|
279
|
+
let totalSize = 0;
|
|
280
|
+
let oldestEntry = Date.now();
|
|
281
|
+
let newestEntry = 0;
|
|
282
|
+
for (const file of files) {
|
|
283
|
+
try {
|
|
284
|
+
const cachePath = join(cacheDir, file);
|
|
285
|
+
const stat = statSync(cachePath);
|
|
286
|
+
totalSize += stat.size;
|
|
287
|
+
const cacheEntry = JSON.parse(readFileSync(cachePath, 'utf-8'));
|
|
288
|
+
totalChunks += cacheEntry.chunks.length;
|
|
289
|
+
if (cacheEntry.timestamp < oldestEntry) {
|
|
290
|
+
oldestEntry = cacheEntry.timestamp;
|
|
291
|
+
}
|
|
292
|
+
if (cacheEntry.timestamp > newestEntry) {
|
|
293
|
+
newestEntry = cacheEntry.timestamp;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Skip invalid cache entries
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
totalFiles: files.length,
|
|
302
|
+
totalChunks,
|
|
303
|
+
totalSize,
|
|
304
|
+
oldestEntry,
|
|
305
|
+
newestEntry,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=parallel-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-processor.js","sourceRoot":"","sources":["../src/parallel-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligent Planning & Execution System
|
|
3
|
+
* Agentic behavior for complex multi-step tasks
|
|
4
|
+
*/
|
|
5
|
+
export interface Task {
|
|
6
|
+
id: string;
|
|
7
|
+
description: string;
|
|
8
|
+
type: 'search' | 'edit' | 'refactor' | 'review' | 'analyze';
|
|
9
|
+
dependencies: string[];
|
|
10
|
+
status: 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
11
|
+
result?: any;
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Plan {
|
|
15
|
+
tasks: Task[];
|
|
16
|
+
estimatedSteps: number;
|
|
17
|
+
dependencies: Map<string, string[]>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Decompose complex instruction into actionable tasks
|
|
21
|
+
*/
|
|
22
|
+
export declare function planTask(instruction: string, context?: {
|
|
23
|
+
files?: string[];
|
|
24
|
+
pattern?: string;
|
|
25
|
+
query?: string;
|
|
26
|
+
}): Promise<Plan>;
|
|
27
|
+
/**
|
|
28
|
+
* Execute a plan step by step
|
|
29
|
+
*/
|
|
30
|
+
export declare function executePlan(plan: Plan, context: {
|
|
31
|
+
instruction: string;
|
|
32
|
+
files?: string[];
|
|
33
|
+
pattern?: string;
|
|
34
|
+
}): Promise<{
|
|
35
|
+
success: boolean;
|
|
36
|
+
completedTasks: number;
|
|
37
|
+
results: Map<string, any>;
|
|
38
|
+
errors: Array<{
|
|
39
|
+
task: string;
|
|
40
|
+
error: string;
|
|
41
|
+
}>;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Format plan for display
|
|
45
|
+
*/
|
|
46
|
+
export declare function formatPlan(plan: Plan): string;
|
|
47
|
+
//# sourceMappingURL=planner.d.ts.map
|