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/testgen.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Generation System
|
|
3
|
+
* Generate comprehensive tests for code
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync, writeFileSync } from 'fs';
|
|
6
|
+
import { join, dirname, basename } from 'path';
|
|
7
|
+
import { chatWithContext } from './chat.js';
|
|
8
|
+
import { getEnhancedContext } from './context.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate tests for a file
|
|
11
|
+
*/
|
|
12
|
+
export async function generateTests(filepath, options = {}) {
|
|
13
|
+
const fullPath = join(process.cwd(), filepath);
|
|
14
|
+
if (!existsSync(fullPath)) {
|
|
15
|
+
throw new Error(`File not found: ${filepath}`);
|
|
16
|
+
}
|
|
17
|
+
const content = readFileSync(fullPath, 'utf-8');
|
|
18
|
+
const ext = filepath.split('.').pop()?.toLowerCase() || '';
|
|
19
|
+
// Detect test framework
|
|
20
|
+
const framework = options.framework || detectTestFramework(filepath, ext);
|
|
21
|
+
const coverage = options.coverage || 'unit';
|
|
22
|
+
// Get context
|
|
23
|
+
const context = await getEnhancedContext(`Generate ${coverage} tests for ${filepath}`, {
|
|
24
|
+
primaryChunks: 15,
|
|
25
|
+
includeRelationships: true,
|
|
26
|
+
});
|
|
27
|
+
// Create test generation prompt
|
|
28
|
+
const testPrompt = `Generate comprehensive ${coverage} tests for this code file:
|
|
29
|
+
|
|
30
|
+
File: ${filepath}
|
|
31
|
+
Test Framework: ${framework}
|
|
32
|
+
Code:
|
|
33
|
+
\`\`\`${ext}
|
|
34
|
+
${content}
|
|
35
|
+
\`\`\`
|
|
36
|
+
|
|
37
|
+
Generate:
|
|
38
|
+
1. Test file structure
|
|
39
|
+
2. Test cases for all functions/methods
|
|
40
|
+
3. Edge cases and error handling
|
|
41
|
+
4. Mock setup if needed
|
|
42
|
+
5. Assertions for expected behavior
|
|
43
|
+
|
|
44
|
+
Use ${framework} testing framework. Format as complete test file.`;
|
|
45
|
+
const contextResults = [{
|
|
46
|
+
filepath,
|
|
47
|
+
content,
|
|
48
|
+
score: 1.0,
|
|
49
|
+
}, ...context.primaryChunks];
|
|
50
|
+
const tests = await chatWithContext(testPrompt, contextResults);
|
|
51
|
+
return tests;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Detect test framework from file extension and content
|
|
55
|
+
*/
|
|
56
|
+
function detectTestFramework(filepath, ext) {
|
|
57
|
+
// Check for existing test files
|
|
58
|
+
const testPatterns = [
|
|
59
|
+
{ pattern: /\.test\./i, framework: 'jest' },
|
|
60
|
+
{ pattern: /\.spec\./i, framework: 'jest' },
|
|
61
|
+
{ pattern: /test_/i, framework: 'pytest' },
|
|
62
|
+
{ pattern: /_test\./i, framework: 'go test' },
|
|
63
|
+
];
|
|
64
|
+
for (const { pattern, framework } of testPatterns) {
|
|
65
|
+
if (pattern.test(filepath)) {
|
|
66
|
+
return framework;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Default by extension
|
|
70
|
+
const frameworkMap = {
|
|
71
|
+
'ts': 'jest',
|
|
72
|
+
'tsx': 'jest',
|
|
73
|
+
'js': 'jest',
|
|
74
|
+
'jsx': 'jest',
|
|
75
|
+
'py': 'pytest',
|
|
76
|
+
'go': 'go test',
|
|
77
|
+
'java': 'junit',
|
|
78
|
+
'rb': 'rspec',
|
|
79
|
+
};
|
|
80
|
+
return frameworkMap[ext] || 'jest';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Generate test file path
|
|
84
|
+
*/
|
|
85
|
+
export function getTestFilePath(filepath, framework) {
|
|
86
|
+
const ext = filepath.split('.').pop() || '';
|
|
87
|
+
const baseName = filepath.replace(/\.[^/.]+$/, '');
|
|
88
|
+
const dir = dirname(filepath);
|
|
89
|
+
// Framework-specific naming
|
|
90
|
+
if (framework === 'pytest' || ext === 'py') {
|
|
91
|
+
return join(dir, `test_${basename(filepath)}`);
|
|
92
|
+
}
|
|
93
|
+
else if (framework === 'go test' || ext === 'go') {
|
|
94
|
+
return join(dir, `${baseName}_test.${ext}`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Jest/Mocha style
|
|
98
|
+
return join(dir, `${baseName}.test.${ext}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Save generated tests to file
|
|
103
|
+
*/
|
|
104
|
+
export function saveTests(filepath, testContent) {
|
|
105
|
+
const fullPath = join(process.cwd(), filepath);
|
|
106
|
+
const dir = dirname(fullPath);
|
|
107
|
+
if (!existsSync(dir)) {
|
|
108
|
+
const { mkdirSync } = require('fs');
|
|
109
|
+
mkdirSync(dir, { recursive: true });
|
|
110
|
+
}
|
|
111
|
+
writeFileSync(fullPath, testContent, 'utf-8');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Improve existing tests
|
|
115
|
+
*/
|
|
116
|
+
export async function improveTests(testFilepath) {
|
|
117
|
+
const fullPath = join(process.cwd(), testFilepath);
|
|
118
|
+
if (!existsSync(fullPath)) {
|
|
119
|
+
throw new Error(`Test file not found: ${testFilepath}`);
|
|
120
|
+
}
|
|
121
|
+
const testContent = readFileSync(fullPath, 'utf-8');
|
|
122
|
+
// Find corresponding source file
|
|
123
|
+
const sourceFile = testFilepath
|
|
124
|
+
.replace(/\.test\./, '.')
|
|
125
|
+
.replace(/\.spec\./, '.')
|
|
126
|
+
.replace(/test_/, '')
|
|
127
|
+
.replace(/_test\./, '.');
|
|
128
|
+
let sourceContent = '';
|
|
129
|
+
try {
|
|
130
|
+
const sourcePath = join(process.cwd(), sourceFile);
|
|
131
|
+
if (existsSync(sourcePath)) {
|
|
132
|
+
sourceContent = readFileSync(sourcePath, 'utf-8');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Source file might not exist
|
|
137
|
+
}
|
|
138
|
+
const improvePrompt = `Improve this test file with better coverage and edge cases:
|
|
139
|
+
|
|
140
|
+
Test file: ${testFilepath}
|
|
141
|
+
Current tests:
|
|
142
|
+
\`\`\`
|
|
143
|
+
${testContent}
|
|
144
|
+
\`\`\`
|
|
145
|
+
|
|
146
|
+
Source code:
|
|
147
|
+
\`\`\`
|
|
148
|
+
${sourceContent.substring(0, 1000)}
|
|
149
|
+
\`\`\`
|
|
150
|
+
|
|
151
|
+
Improve by:
|
|
152
|
+
1. Adding missing test cases
|
|
153
|
+
2. Adding edge case tests
|
|
154
|
+
3. Improving assertions
|
|
155
|
+
4. Adding error handling tests
|
|
156
|
+
5. Improving test organization
|
|
157
|
+
|
|
158
|
+
Provide the improved test file.`;
|
|
159
|
+
const contextResults = [{
|
|
160
|
+
filepath: testFilepath,
|
|
161
|
+
content: testContent,
|
|
162
|
+
score: 1.0,
|
|
163
|
+
}];
|
|
164
|
+
const improvedTests = await chatWithContext(improvePrompt, contextResults);
|
|
165
|
+
return improvedTests;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=testgen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testgen.js","sourceRoot":"","sources":["../src/testgen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Optimization System
|
|
3
|
+
* 80-90% token reduction through smart compression
|
|
4
|
+
*/
|
|
5
|
+
import type { SearchResult } from './types.js';
|
|
6
|
+
export interface OptimizedContext {
|
|
7
|
+
chunks: SearchResult[];
|
|
8
|
+
totalTokens: number;
|
|
9
|
+
reductionPercent: number;
|
|
10
|
+
strategy: 'function-level' | 'file-level' | 'relevant-only' | 'compressed';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Optimize context to minimize tokens while preserving relevance
|
|
14
|
+
*/
|
|
15
|
+
export declare function optimizeContext(chunks: SearchResult[], query: string, maxTokens: number, strategy?: 'function-level' | 'file-level' | 'relevant-only' | 'compressed'): OptimizedContext;
|
|
16
|
+
/**
|
|
17
|
+
* Deduplicate chunks
|
|
18
|
+
*/
|
|
19
|
+
export declare function deduplicateChunks(chunks: SearchResult[]): SearchResult[];
|
|
20
|
+
//# sourceMappingURL=token-optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-optimizer.d.ts","sourceRoot":"","sources":["../src/token-optimizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,gBAAgB,GAAG,YAAY,GAAG,eAAe,GAAG,YAAY,CAAC;CAC5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,YAAY,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,gBAAgB,GAAG,YAAY,GAAG,eAAe,GAAG,YAA8B,GAC3F,gBAAgB,CAsClB;AAmRD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAexE"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Optimization System
|
|
3
|
+
* 80-90% token reduction through smart compression
|
|
4
|
+
*/
|
|
5
|
+
import { encoding_for_model } from 'tiktoken';
|
|
6
|
+
const enc = encoding_for_model('gpt-3.5-turbo');
|
|
7
|
+
/**
|
|
8
|
+
* Optimize context to minimize tokens while preserving relevance
|
|
9
|
+
*/
|
|
10
|
+
export function optimizeContext(chunks, query, maxTokens, strategy = 'relevant-only') {
|
|
11
|
+
const originalTokens = chunks.reduce((sum, chunk) => sum + enc.encode(chunk.content).length, 0);
|
|
12
|
+
let optimized;
|
|
13
|
+
switch (strategy) {
|
|
14
|
+
case 'function-level':
|
|
15
|
+
optimized = optimizeFunctionLevel(chunks, query, maxTokens);
|
|
16
|
+
break;
|
|
17
|
+
case 'file-level':
|
|
18
|
+
optimized = optimizeFileLevel(chunks, query, maxTokens);
|
|
19
|
+
break;
|
|
20
|
+
case 'relevant-only':
|
|
21
|
+
optimized = optimizeRelevantOnly(chunks, query, maxTokens);
|
|
22
|
+
break;
|
|
23
|
+
case 'compressed':
|
|
24
|
+
optimized = optimizeCompressed(chunks, query, maxTokens);
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
optimized = optimizeRelevantOnly(chunks, query, maxTokens);
|
|
28
|
+
}
|
|
29
|
+
const optimizedTokens = optimized.reduce((sum, chunk) => sum + enc.encode(chunk.content).length, 0);
|
|
30
|
+
const reductionPercent = originalTokens > 0
|
|
31
|
+
? ((originalTokens - optimizedTokens) / originalTokens) * 100
|
|
32
|
+
: 0;
|
|
33
|
+
return {
|
|
34
|
+
chunks: optimized,
|
|
35
|
+
totalTokens: optimizedTokens,
|
|
36
|
+
reductionPercent,
|
|
37
|
+
strategy,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Extract only relevant functions/classes from chunks
|
|
42
|
+
*/
|
|
43
|
+
function optimizeFunctionLevel(chunks, query, maxTokens) {
|
|
44
|
+
const optimized = [];
|
|
45
|
+
let currentTokens = 0;
|
|
46
|
+
// Extract function/class names from query
|
|
47
|
+
const querySymbols = extractSymbolsFromQuery(query);
|
|
48
|
+
for (const chunk of chunks) {
|
|
49
|
+
if (currentTokens >= maxTokens)
|
|
50
|
+
break;
|
|
51
|
+
// Try to extract relevant functions/classes
|
|
52
|
+
const relevantCode = extractRelevantCode(chunk.content, querySymbols);
|
|
53
|
+
if (relevantCode) {
|
|
54
|
+
const tokens = enc.encode(relevantCode).length;
|
|
55
|
+
if (currentTokens + tokens <= maxTokens) {
|
|
56
|
+
optimized.push({
|
|
57
|
+
...chunk,
|
|
58
|
+
content: relevantCode,
|
|
59
|
+
});
|
|
60
|
+
currentTokens += tokens;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Fallback: use chunk but truncate
|
|
65
|
+
const tokens = enc.encode(chunk.content).length;
|
|
66
|
+
const remaining = maxTokens - currentTokens;
|
|
67
|
+
if (tokens <= remaining) {
|
|
68
|
+
optimized.push(chunk);
|
|
69
|
+
currentTokens += tokens;
|
|
70
|
+
}
|
|
71
|
+
else if (remaining > 100) {
|
|
72
|
+
const truncated = truncateToTokens(chunk.content, remaining);
|
|
73
|
+
optimized.push({
|
|
74
|
+
...chunk,
|
|
75
|
+
content: truncated,
|
|
76
|
+
});
|
|
77
|
+
currentTokens = maxTokens;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return optimized;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Deduplicate and keep only unique files
|
|
86
|
+
*/
|
|
87
|
+
function optimizeFileLevel(chunks, query, maxTokens) {
|
|
88
|
+
// Group by file
|
|
89
|
+
const fileGroups = new Map();
|
|
90
|
+
for (const chunk of chunks) {
|
|
91
|
+
if (!fileGroups.has(chunk.filepath)) {
|
|
92
|
+
fileGroups.set(chunk.filepath, []);
|
|
93
|
+
}
|
|
94
|
+
fileGroups.get(chunk.filepath).push(chunk);
|
|
95
|
+
}
|
|
96
|
+
// Keep best chunk per file
|
|
97
|
+
const optimized = [];
|
|
98
|
+
let currentTokens = 0;
|
|
99
|
+
for (const [filepath, fileChunks] of fileGroups.entries()) {
|
|
100
|
+
if (currentTokens >= maxTokens)
|
|
101
|
+
break;
|
|
102
|
+
// Sort by score and take best
|
|
103
|
+
const bestChunk = fileChunks.sort((a, b) => b.score - a.score)[0];
|
|
104
|
+
const tokens = enc.encode(bestChunk.content).length;
|
|
105
|
+
if (currentTokens + tokens <= maxTokens) {
|
|
106
|
+
optimized.push(bestChunk);
|
|
107
|
+
currentTokens += tokens;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return optimized;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Keep only most relevant chunks
|
|
114
|
+
*/
|
|
115
|
+
function optimizeRelevantOnly(chunks, query, maxTokens) {
|
|
116
|
+
// Sort by relevance (score)
|
|
117
|
+
const sorted = [...chunks].sort((a, b) => b.score - a.score);
|
|
118
|
+
const optimized = [];
|
|
119
|
+
let currentTokens = 0;
|
|
120
|
+
for (const chunk of sorted) {
|
|
121
|
+
if (currentTokens >= maxTokens)
|
|
122
|
+
break;
|
|
123
|
+
const tokens = enc.encode(chunk.content).length;
|
|
124
|
+
const remaining = maxTokens - currentTokens;
|
|
125
|
+
if (tokens <= remaining) {
|
|
126
|
+
optimized.push(chunk);
|
|
127
|
+
currentTokens += tokens;
|
|
128
|
+
}
|
|
129
|
+
else if (remaining > 100) {
|
|
130
|
+
// Truncate to fit
|
|
131
|
+
const truncated = truncateToTokens(chunk.content, remaining);
|
|
132
|
+
optimized.push({
|
|
133
|
+
...chunk,
|
|
134
|
+
content: truncated,
|
|
135
|
+
});
|
|
136
|
+
currentTokens = maxTokens;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return optimized;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Compress chunks by removing comments and whitespace
|
|
144
|
+
*/
|
|
145
|
+
function optimizeCompressed(chunks, query, maxTokens) {
|
|
146
|
+
const optimized = [];
|
|
147
|
+
let currentTokens = 0;
|
|
148
|
+
for (const chunk of chunks) {
|
|
149
|
+
if (currentTokens >= maxTokens)
|
|
150
|
+
break;
|
|
151
|
+
// Remove comments and excessive whitespace
|
|
152
|
+
const compressed = compressCode(chunk.content);
|
|
153
|
+
const tokens = enc.encode(compressed).length;
|
|
154
|
+
const remaining = maxTokens - currentTokens;
|
|
155
|
+
if (tokens <= remaining) {
|
|
156
|
+
optimized.push({
|
|
157
|
+
...chunk,
|
|
158
|
+
content: compressed,
|
|
159
|
+
});
|
|
160
|
+
currentTokens += tokens;
|
|
161
|
+
}
|
|
162
|
+
else if (remaining > 100) {
|
|
163
|
+
const truncated = truncateToTokens(compressed, remaining);
|
|
164
|
+
optimized.push({
|
|
165
|
+
...chunk,
|
|
166
|
+
content: truncated,
|
|
167
|
+
});
|
|
168
|
+
currentTokens = maxTokens;
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return optimized;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Extract relevant code (functions/classes) from chunk
|
|
176
|
+
*/
|
|
177
|
+
function extractRelevantCode(content, symbols) {
|
|
178
|
+
if (symbols.length === 0)
|
|
179
|
+
return null;
|
|
180
|
+
const lines = content.split('\n');
|
|
181
|
+
const relevant = [];
|
|
182
|
+
let inRelevantBlock = false;
|
|
183
|
+
let braceCount = 0;
|
|
184
|
+
for (let i = 0; i < lines.length; i++) {
|
|
185
|
+
const line = lines[i];
|
|
186
|
+
// Check if line contains a symbol we're looking for
|
|
187
|
+
const hasSymbol = symbols.some(symbol => line.includes(symbol) &&
|
|
188
|
+
(line.match(/(function|class|interface|type|const|let|var)\s+/)));
|
|
189
|
+
if (hasSymbol) {
|
|
190
|
+
inRelevantBlock = true;
|
|
191
|
+
braceCount = 0;
|
|
192
|
+
}
|
|
193
|
+
if (inRelevantBlock) {
|
|
194
|
+
relevant.push(line);
|
|
195
|
+
// Count braces to find end of block
|
|
196
|
+
braceCount += (line.match(/{/g) || []).length;
|
|
197
|
+
braceCount -= (line.match(/}/g) || []).length;
|
|
198
|
+
if (braceCount === 0 && relevant.length > 1) {
|
|
199
|
+
// End of block
|
|
200
|
+
return relevant.join('\n');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return relevant.length > 0 ? relevant.join('\n') : null;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Extract symbol names from query
|
|
208
|
+
*/
|
|
209
|
+
function extractSymbolsFromQuery(query) {
|
|
210
|
+
const patterns = [
|
|
211
|
+
/function\s+(\w+)/gi,
|
|
212
|
+
/class\s+(\w+)/gi,
|
|
213
|
+
/interface\s+(\w+)/gi,
|
|
214
|
+
/type\s+(\w+)/gi,
|
|
215
|
+
/([A-Z][a-zA-Z0-9]+)/g,
|
|
216
|
+
/([a-z][a-zA-Z0-9]*\(\))/g,
|
|
217
|
+
];
|
|
218
|
+
const symbols = new Set();
|
|
219
|
+
for (const pattern of patterns) {
|
|
220
|
+
const matches = query.matchAll(pattern);
|
|
221
|
+
for (const match of matches) {
|
|
222
|
+
if (match[1]) {
|
|
223
|
+
symbols.add(match[1]);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return Array.from(symbols);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Compress code by removing comments and whitespace
|
|
231
|
+
*/
|
|
232
|
+
function compressCode(code) {
|
|
233
|
+
return code
|
|
234
|
+
// Remove single-line comments
|
|
235
|
+
.replace(/\/\/.*$/gm, '')
|
|
236
|
+
// Remove multi-line comments
|
|
237
|
+
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
238
|
+
// Remove excessive whitespace
|
|
239
|
+
.replace(/\n\s*\n\s*\n/g, '\n\n')
|
|
240
|
+
// Trim lines
|
|
241
|
+
.split('\n')
|
|
242
|
+
.map(line => line.trim())
|
|
243
|
+
.filter(line => line.length > 0)
|
|
244
|
+
.join('\n');
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Truncate text to fit token limit
|
|
248
|
+
*/
|
|
249
|
+
function truncateToTokens(text, maxTokens) {
|
|
250
|
+
const tokens = enc.encode(text);
|
|
251
|
+
if (tokens.length <= maxTokens) {
|
|
252
|
+
return text;
|
|
253
|
+
}
|
|
254
|
+
const truncatedTokens = tokens.slice(0, maxTokens - 10); // Leave room for "..."
|
|
255
|
+
const decoded = enc.decode(truncatedTokens);
|
|
256
|
+
const decodedText = typeof decoded === 'string'
|
|
257
|
+
? decoded
|
|
258
|
+
: new TextDecoder().decode(decoded);
|
|
259
|
+
return decodedText + '...';
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Deduplicate chunks
|
|
263
|
+
*/
|
|
264
|
+
export function deduplicateChunks(chunks) {
|
|
265
|
+
const seen = new Set();
|
|
266
|
+
const unique = [];
|
|
267
|
+
for (const chunk of chunks) {
|
|
268
|
+
// Create a key from filepath and content hash
|
|
269
|
+
const key = `${chunk.filepath}:${chunk.content.substring(0, 100)}`;
|
|
270
|
+
if (!seen.has(key)) {
|
|
271
|
+
seen.add(key);
|
|
272
|
+
unique.push(chunk);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return unique;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=token-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-optimizer.js","sourceRoot":"","sources":["../src/token-optimizer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface Chunk {
|
|
2
|
+
id: number;
|
|
3
|
+
filepath: string;
|
|
4
|
+
chunkIndex: number;
|
|
5
|
+
content: string;
|
|
6
|
+
embedding: number[];
|
|
7
|
+
}
|
|
8
|
+
export interface SearchResult {
|
|
9
|
+
filepath: string;
|
|
10
|
+
content: string;
|
|
11
|
+
score: number;
|
|
12
|
+
}
|
|
13
|
+
export interface LogEntry {
|
|
14
|
+
timestamp: string;
|
|
15
|
+
command: string;
|
|
16
|
+
query?: string;
|
|
17
|
+
filepath?: string;
|
|
18
|
+
diffStats?: {
|
|
19
|
+
linesAdded: number;
|
|
20
|
+
linesRemoved: number;
|
|
21
|
+
filesChanged: number;
|
|
22
|
+
};
|
|
23
|
+
policyStatus: 'allowed' | 'rejected';
|
|
24
|
+
policyReason?: string;
|
|
25
|
+
retrievedFiles?: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface PolicyResult {
|
|
28
|
+
allowed: boolean;
|
|
29
|
+
reason?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface DiffStats {
|
|
32
|
+
linesAdded: number;
|
|
33
|
+
linesRemoved: number;
|
|
34
|
+
filesChanged: number;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,YAAY,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Ora } from 'ora';
|
|
2
|
+
import cliProgress from 'cli-progress';
|
|
3
|
+
export declare const colors: {
|
|
4
|
+
success: import("chalk").ChalkInstance;
|
|
5
|
+
error: import("chalk").ChalkInstance;
|
|
6
|
+
warning: import("chalk").ChalkInstance;
|
|
7
|
+
info: import("chalk").ChalkInstance;
|
|
8
|
+
dim: import("chalk").ChalkInstance;
|
|
9
|
+
bold: import("chalk").ChalkInstance;
|
|
10
|
+
cyan: import("chalk").ChalkInstance;
|
|
11
|
+
magenta: import("chalk").ChalkInstance;
|
|
12
|
+
yellow: import("chalk").ChalkInstance;
|
|
13
|
+
red: import("chalk").ChalkInstance;
|
|
14
|
+
green: import("chalk").ChalkInstance;
|
|
15
|
+
gray: import("chalk").ChalkInstance;
|
|
16
|
+
blue: import("chalk").ChalkInstance;
|
|
17
|
+
};
|
|
18
|
+
export declare const symbols: {
|
|
19
|
+
success: string;
|
|
20
|
+
error: string;
|
|
21
|
+
warning: string;
|
|
22
|
+
info: string;
|
|
23
|
+
processing: string;
|
|
24
|
+
arrow: string;
|
|
25
|
+
dot: string;
|
|
26
|
+
check: string;
|
|
27
|
+
cross: string;
|
|
28
|
+
pipe: string;
|
|
29
|
+
dash: string;
|
|
30
|
+
plus: string;
|
|
31
|
+
minus: string;
|
|
32
|
+
bullet: string;
|
|
33
|
+
};
|
|
34
|
+
export declare function createSpinner(text: string): Ora;
|
|
35
|
+
export declare function createProgressBar(total: number, format?: string): cliProgress.SingleBar;
|
|
36
|
+
export declare function createBox(content: string, options?: any): string;
|
|
37
|
+
export declare function createBanner(title: string, subtitle?: string): string;
|
|
38
|
+
export declare function separator(char?: string, length?: number): string;
|
|
39
|
+
export declare function success(message: string): string;
|
|
40
|
+
export declare function error(message: string): string;
|
|
41
|
+
export declare function warning(message: string): string;
|
|
42
|
+
export declare function info(message: string): string;
|
|
43
|
+
export declare function createTable(headers: string[], rows: string[][]): any;
|
|
44
|
+
export declare function formatPath(path: string): string;
|
|
45
|
+
export declare function formatNumber(num: number): string;
|
|
46
|
+
export declare function formatPercent(value: number, total?: number): string;
|
|
47
|
+
export declare function formatScore(score: number): string;
|
|
48
|
+
export declare function sectionHeader(title: string): void;
|
|
49
|
+
export declare function newline(count?: number): void;
|
|
50
|
+
export declare function statusIndicator(status: 'success' | 'error' | 'warning' | 'info' | 'processing'): string;
|
|
51
|
+
export declare function createCodehereLogo(): string;
|
|
52
|
+
export declare function createWelcomeMessage(): string;
|
|
53
|
+
export declare function createSessionWelcome(): string;
|
|
54
|
+
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,WAAW,MAAM,cAAc,CAAC;AAQvC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;CAclB,CAAC;AAGF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;CAenB,CAAC;AAGF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAM/C;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS,CAavF;AAGD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,CAQhE;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAarE;AAGD,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAY,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAEzE;AAGD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/C;AAGD,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7C;AAGD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/C;AAGD,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5C;AAGD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,CAoCpE;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAGD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnE;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGjD;AAGD,wBAAgB,OAAO,CAAC,KAAK,GAAE,MAAU,GAAG,IAAI,CAI/C;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,CASvG;AAGD,wBAAgB,kBAAkB,IAAI,MAAM,CA0B3C;AAGD,wBAAgB,oBAAoB,IAAI,MAAM,CAS7C;AASD,wBAAgB,oBAAoB,IAAI,MAAM,CAiF7C"}
|