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,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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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
@@ -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"}