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,31 @@
1
+ /**
2
+ * Automated Code Review System
3
+ * Senior-level code analysis and suggestions
4
+ */
5
+ export interface ReviewIssue {
6
+ severity: 'error' | 'warning' | 'info';
7
+ category: 'security' | 'performance' | 'best-practice' | 'style' | 'bug';
8
+ message: string;
9
+ line?: number;
10
+ suggestion?: string;
11
+ }
12
+ export interface CodeReview {
13
+ file: string;
14
+ issues: ReviewIssue[];
15
+ score: number;
16
+ summary: string;
17
+ suggestions: string[];
18
+ }
19
+ /**
20
+ * Review a single file
21
+ */
22
+ export declare function reviewFile(filepath: string): Promise<CodeReview>;
23
+ /**
24
+ * Review multiple files
25
+ */
26
+ export declare function reviewFiles(filepaths: string[]): Promise<CodeReview[]>;
27
+ /**
28
+ * Format review for display
29
+ */
30
+ export declare function formatReview(review: CodeReview): string;
31
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,OAAO,GAAG,KAAK,CAAC;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAgEtE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAwB5E;AAqFD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAiCvD"}
package/dist/review.js ADDED
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Automated Code Review System
3
+ * Senior-level code analysis and suggestions
4
+ */
5
+ import { readFileSync, existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { chatWithContext } from './chat.js';
8
+ import { getEnhancedContext } from './context.js';
9
+ import { cleanResponse } from './formatter.js';
10
+ /**
11
+ * Review a single file
12
+ */
13
+ export async function reviewFile(filepath) {
14
+ const fullPath = join(process.cwd(), filepath);
15
+ if (!existsSync(fullPath)) {
16
+ throw new Error(`File not found: ${filepath}`);
17
+ }
18
+ const content = readFileSync(fullPath, 'utf-8');
19
+ const lines = content.split('\n');
20
+ // Get context about the file
21
+ const context = await getEnhancedContext(`Review code in ${filepath}`, {
22
+ primaryChunks: 10,
23
+ includeRelationships: false,
24
+ });
25
+ // Create review context
26
+ const reviewContext = [{
27
+ filepath,
28
+ content,
29
+ score: 1.0,
30
+ }];
31
+ // Generate review using AI
32
+ const reviewPrompt = `You are a senior code reviewer. Review this code file and identify:
33
+ 1. Security vulnerabilities
34
+ 2. Performance issues
35
+ 3. Best practice violations
36
+ 4. Potential bugs
37
+ 5. Code style issues
38
+
39
+ File: ${filepath}
40
+ Code:
41
+ \`\`\`
42
+ ${content}
43
+ \`\`\`
44
+
45
+ Provide a structured review with specific issues and suggestions.`;
46
+ const aiReviewRaw = await chatWithContext(reviewPrompt, reviewContext);
47
+ const aiReview = cleanResponse(aiReviewRaw);
48
+ // Parse AI review and extract issues
49
+ const issues = parseReviewResponse(aiReview, lines);
50
+ // Calculate score (100 - (errors * 10) - (warnings * 5) - (info * 1))
51
+ const errorCount = issues.filter(i => i.severity === 'error').length;
52
+ const warningCount = issues.filter(i => i.severity === 'warning').length;
53
+ const infoCount = issues.filter(i => i.severity === 'info').length;
54
+ const score = Math.max(0, 100 - (errorCount * 10) - (warningCount * 5) - (infoCount * 1));
55
+ // Extract suggestions
56
+ const suggestions = issues
57
+ .filter(i => i.suggestion)
58
+ .map(i => i.suggestion)
59
+ .filter((v, i, a) => a.indexOf(v) === i); // Deduplicate
60
+ return {
61
+ file: filepath,
62
+ issues,
63
+ score,
64
+ summary: generateSummary(issues, score),
65
+ suggestions,
66
+ };
67
+ }
68
+ /**
69
+ * Review multiple files
70
+ */
71
+ export async function reviewFiles(filepaths) {
72
+ const reviews = [];
73
+ for (const filepath of filepaths) {
74
+ try {
75
+ const review = await reviewFile(filepath);
76
+ reviews.push(review);
77
+ }
78
+ catch (error) {
79
+ // Continue with other files if one fails
80
+ reviews.push({
81
+ file: filepath,
82
+ issues: [{
83
+ severity: 'error',
84
+ category: 'bug',
85
+ message: `Failed to review: ${error instanceof Error ? error.message : String(error)}`,
86
+ }],
87
+ score: 0,
88
+ summary: 'Review failed',
89
+ suggestions: [],
90
+ });
91
+ }
92
+ }
93
+ return reviews;
94
+ }
95
+ /**
96
+ * Parse AI review response into structured issues
97
+ */
98
+ function parseReviewResponse(aiReview, lines) {
99
+ const issues = [];
100
+ // Simple parsing - look for common patterns
101
+ const lines_review = aiReview.split('\n');
102
+ for (let i = 0; i < lines_review.length; i++) {
103
+ const line = lines_review[i];
104
+ const lowerLine = line.toLowerCase();
105
+ // Detect severity
106
+ let severity = 'info';
107
+ if (lowerLine.includes('error') || lowerLine.includes('critical') || lowerLine.includes('security')) {
108
+ severity = 'error';
109
+ }
110
+ else if (lowerLine.includes('warning') || lowerLine.includes('should') || lowerLine.includes('consider')) {
111
+ severity = 'warning';
112
+ }
113
+ // Detect category
114
+ let category = 'best-practice';
115
+ if (lowerLine.includes('security') || lowerLine.includes('vulnerability')) {
116
+ category = 'security';
117
+ }
118
+ else if (lowerLine.includes('performance') || lowerLine.includes('slow') || lowerLine.includes('optimize')) {
119
+ category = 'performance';
120
+ }
121
+ else if (lowerLine.includes('bug') || lowerLine.includes('error') || lowerLine.includes('incorrect')) {
122
+ category = 'bug';
123
+ }
124
+ else if (lowerLine.includes('style') || lowerLine.includes('format')) {
125
+ category = 'style';
126
+ }
127
+ // Extract line number if mentioned
128
+ const lineMatch = line.match(/line\s+(\d+)/i);
129
+ const lineNumber = lineMatch ? parseInt(lineMatch[1], 10) : undefined;
130
+ // Extract suggestion
131
+ const suggestionMatch = line.match(/suggestion[:\s]+(.+)/i);
132
+ const suggestion = suggestionMatch ? suggestionMatch[1].trim() : undefined;
133
+ if (line.trim() && (severity !== 'info' || lineNumber || suggestion)) {
134
+ issues.push({
135
+ severity,
136
+ category,
137
+ message: line.trim(),
138
+ line: lineNumber,
139
+ suggestion,
140
+ });
141
+ }
142
+ }
143
+ // If no issues found, create a summary issue
144
+ if (issues.length === 0) {
145
+ issues.push({
146
+ severity: 'info',
147
+ category: 'best-practice',
148
+ message: 'AI review completed. See full review text for details.',
149
+ });
150
+ }
151
+ return issues;
152
+ }
153
+ /**
154
+ * Generate summary from issues
155
+ */
156
+ function generateSummary(issues, score) {
157
+ const errorCount = issues.filter(i => i.severity === 'error').length;
158
+ const warningCount = issues.filter(i => i.severity === 'warning').length;
159
+ const infoCount = issues.filter(i => i.severity === 'info').length;
160
+ if (score >= 90) {
161
+ return `Excellent code quality (${score}/100). ${errorCount} errors, ${warningCount} warnings.`;
162
+ }
163
+ else if (score >= 70) {
164
+ return `Good code quality (${score}/100). ${errorCount} errors, ${warningCount} warnings need attention.`;
165
+ }
166
+ else if (score >= 50) {
167
+ return `Moderate code quality (${score}/100). ${errorCount} errors and ${warningCount} warnings should be addressed.`;
168
+ }
169
+ else {
170
+ return `Poor code quality (${score}/100). ${errorCount} critical errors and ${warningCount} warnings require immediate attention.`;
171
+ }
172
+ }
173
+ /**
174
+ * Format review for display
175
+ */
176
+ export function formatReview(review) {
177
+ let output = `\nFile: ${review.file}\n`;
178
+ output += `Score: ${review.score}/100\n`;
179
+ output += `Summary: ${review.summary}\n\n`;
180
+ if (review.issues.length > 0) {
181
+ output += 'Issues:\n';
182
+ for (const issue of review.issues) {
183
+ const icon = {
184
+ error: '✗',
185
+ warning: '⚠',
186
+ info: '→',
187
+ }[issue.severity];
188
+ output += ` ${icon} [${issue.category}] ${issue.message}`;
189
+ if (issue.line) {
190
+ output += ` (line ${issue.line})`;
191
+ }
192
+ output += '\n';
193
+ if (issue.suggestion) {
194
+ output += ` Suggestion: ${issue.suggestion}\n`;
195
+ }
196
+ }
197
+ }
198
+ if (review.suggestions.length > 0) {
199
+ output += '\nSuggestions:\n';
200
+ for (const suggestion of review.suggestions) {
201
+ output += ` • ${suggestion}\n`;
202
+ }
203
+ }
204
+ return output;
205
+ }
206
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface ScaffoldResult {
2
+ success: boolean;
3
+ filesCreated: string[];
4
+ error?: string;
5
+ }
6
+ /**
7
+ * List available templates
8
+ */
9
+ export declare function listTemplates(): string[];
10
+ /**
11
+ * Scaffold a template into target directory
12
+ */
13
+ export declare function scaffoldTemplate(templateName: string, targetDir: string): ScaffoldResult;
14
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAQxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,cAAc,CAoEhB"}
@@ -0,0 +1,85 @@
1
+ import { existsSync, readdirSync, statSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = dirname(__filename);
6
+ const TEMPLATES_DIR = join(__dirname, '..', 'templates');
7
+ /**
8
+ * List available templates
9
+ */
10
+ export function listTemplates() {
11
+ if (!existsSync(TEMPLATES_DIR)) {
12
+ return [];
13
+ }
14
+ return readdirSync(TEMPLATES_DIR).filter(item => {
15
+ const itemPath = join(TEMPLATES_DIR, item);
16
+ return statSync(itemPath).isDirectory();
17
+ });
18
+ }
19
+ /**
20
+ * Scaffold a template into target directory
21
+ */
22
+ export function scaffoldTemplate(templateName, targetDir) {
23
+ const templatePath = join(TEMPLATES_DIR, templateName);
24
+ // Check template exists
25
+ if (!existsSync(templatePath)) {
26
+ const available = listTemplates().join(', ');
27
+ return {
28
+ success: false,
29
+ filesCreated: [],
30
+ error: `Template "${templateName}" not found. Available: ${available || 'none'}`,
31
+ };
32
+ }
33
+ // Check target directory
34
+ const targetPath = join(process.cwd(), targetDir);
35
+ // Check if target exists and has conflicting files
36
+ if (existsSync(targetPath)) {
37
+ const existingFiles = readdirSync(targetPath);
38
+ if (existingFiles.length > 0) {
39
+ return {
40
+ success: false,
41
+ filesCreated: [],
42
+ error: `Target directory "${targetDir}" already exists and is not empty. Use a different directory or remove existing files.`,
43
+ };
44
+ }
45
+ }
46
+ // Copy template files
47
+ const filesCreated = [];
48
+ function copyRecursive(src, dest) {
49
+ const stat = statSync(src);
50
+ if (stat.isDirectory()) {
51
+ if (!existsSync(dest)) {
52
+ mkdirSync(dest, { recursive: true });
53
+ }
54
+ const entries = readdirSync(src);
55
+ for (const entry of entries) {
56
+ copyRecursive(join(src, entry), join(dest, entry));
57
+ }
58
+ }
59
+ else {
60
+ // Read and write to handle text files properly
61
+ const content = readFileSync(src, 'utf-8');
62
+ const destDir = dirname(dest);
63
+ if (!existsSync(destDir)) {
64
+ mkdirSync(destDir, { recursive: true });
65
+ }
66
+ writeFileSync(dest, content, 'utf-8');
67
+ filesCreated.push(dest.replace(process.cwd() + '/', ''));
68
+ }
69
+ }
70
+ try {
71
+ copyRecursive(templatePath, targetPath);
72
+ return {
73
+ success: true,
74
+ filesCreated,
75
+ };
76
+ }
77
+ catch (err) {
78
+ return {
79
+ success: false,
80
+ filesCreated,
81
+ error: err instanceof Error ? err.message : String(err),
82
+ };
83
+ }
84
+ }
85
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { SearchResult } from './types.js';
2
+ /**
3
+ * Legacy search - kept for backward compatibility
4
+ * Use getIntelligentContext() for new code
5
+ */
6
+ export declare function searchSimilar(query: string, topK?: number): Promise<SearchResult[]>;
7
+ /**
8
+ * NEW: Intelligent search with AST-based understanding
9
+ * Uses searchSimilar internally to avoid circular dependency
10
+ */
11
+ export declare function searchIntelligent(query: string, options?: {
12
+ maxTokens?: number;
13
+ baseDir?: string;
14
+ }): Promise<{
15
+ chunks: SearchResult[];
16
+ tokenEstimate: number;
17
+ reductionPercent: number;
18
+ }>;
19
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAS,MAAM,YAAY,CAAC;AAqDtD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAW,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CA2EzB;AAyBD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,OAAO,CAAC;IACT,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC,CA2ED"}
package/dist/search.js ADDED
@@ -0,0 +1,198 @@
1
+ import { config } from 'dotenv';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { CohereClient } from 'cohere-ai';
5
+ import initSqlJs from 'sql.js';
6
+ import { readFileSync, existsSync } from 'fs';
7
+ import { optimizeContext } from './token-optimizer.js';
8
+ import { optimizeQuery } from './query-optimizer.js';
9
+ // Load .env from agent directory
10
+ try {
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ const agentDir = join(__dirname, '..');
14
+ config({ path: join(agentDir, '.env') });
15
+ }
16
+ catch {
17
+ // Fallback
18
+ }
19
+ config(); // Also try current directory
20
+ const cohere = new CohereClient({
21
+ token: process.env.COHERE_API_KEY || '',
22
+ });
23
+ // DB path: use agent/data if in agent directory, otherwise use current directory
24
+ function getDbPath() {
25
+ const __filename = fileURLToPath(import.meta.url);
26
+ const __dirname = dirname(__filename);
27
+ const agentDir = join(__dirname, '..');
28
+ // Check if we're in the agent directory structure
29
+ if (existsSync(join(agentDir, 'package.json'))) {
30
+ return join(agentDir, 'data', 'embeddings.sqlite');
31
+ }
32
+ // Otherwise use current directory
33
+ return join(process.cwd(), 'agent', 'data', 'embeddings.sqlite');
34
+ }
35
+ const DB_PATH = getDbPath();
36
+ function cosineSimilarity(a, b) {
37
+ if (a.length !== b.length)
38
+ return 0;
39
+ let dotProduct = 0;
40
+ let normA = 0;
41
+ let normB = 0;
42
+ for (let i = 0; i < a.length; i++) {
43
+ dotProduct += a[i] * b[i];
44
+ normA += a[i] * a[i];
45
+ normB += b[i] * b[i];
46
+ }
47
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
48
+ if (denominator === 0)
49
+ return 0;
50
+ return dotProduct / denominator;
51
+ }
52
+ /**
53
+ * Legacy search - kept for backward compatibility
54
+ * Use getIntelligentContext() for new code
55
+ */
56
+ export async function searchSimilar(query, topK = 15) {
57
+ // Embed the query
58
+ const response = await cohere.embed({
59
+ texts: [query],
60
+ model: 'embed-english-v3.0',
61
+ inputType: 'search_query',
62
+ });
63
+ const embeddings = Array.isArray(response.embeddings)
64
+ ? response.embeddings
65
+ : response.embeddings.embeddings || [];
66
+ const queryEmbedding = embeddings[0] || [];
67
+ // Load database
68
+ if (!existsSync(DB_PATH)) {
69
+ throw new Error('Embeddings database not found. Run "codehere index" first to build the search index.');
70
+ }
71
+ const SQL = await initSqlJs();
72
+ const buffer = readFileSync(DB_PATH);
73
+ const db = new SQL.Database(buffer);
74
+ // Query all embeddings
75
+ const stmt = db.prepare('SELECT * FROM embeddings');
76
+ const rows = [];
77
+ while (stmt.step()) {
78
+ const row = stmt.getAsObject();
79
+ rows.push({
80
+ id: row.id,
81
+ filepath: row.filepath,
82
+ chunkIndex: row.chunkIndex,
83
+ content: row.content,
84
+ embedding: row.embedding,
85
+ });
86
+ }
87
+ stmt.free();
88
+ // Calculate similarities
89
+ const results = [];
90
+ for (const row of rows) {
91
+ const chunkEmbedding = JSON.parse(row.embedding);
92
+ const similarity = cosineSimilarity(queryEmbedding, chunkEmbedding);
93
+ results.push({
94
+ chunk: {
95
+ id: row.id,
96
+ filepath: row.filepath,
97
+ chunkIndex: row.chunkIndex,
98
+ content: row.content,
99
+ embedding: chunkEmbedding,
100
+ },
101
+ score: similarity,
102
+ });
103
+ }
104
+ db.close();
105
+ // Sort by similarity and return top K
106
+ results.sort((a, b) => b.score - a.score);
107
+ return results.slice(0, topK).map(result => ({
108
+ filepath: result.chunk.filepath,
109
+ content: result.chunk.content,
110
+ score: result.score,
111
+ }));
112
+ }
113
+ /**
114
+ * Check if file is a source code file (not documentation)
115
+ */
116
+ function isSourceFile(filepath) {
117
+ const ext = filepath.split('.').pop()?.toLowerCase();
118
+ const sourceExtensions = ['js', 'jsx', 'ts', 'tsx', 'py', 'java', 'cpp', 'c', 'h', 'hpp', 'go', 'rs', 'rb', 'php', 'swift', 'kt', 'scala', 'sh', 'bash', 'zsh'];
119
+ return sourceExtensions.includes(ext || '');
120
+ }
121
+ /**
122
+ * Check if file is documentation
123
+ */
124
+ function isDocumentation(filepath) {
125
+ const ext = filepath.split('.').pop()?.toLowerCase();
126
+ const docExtensions = ['md', 'txt', 'rst', 'adoc'];
127
+ const docPatterns = ['readme', 'changelog', 'license', 'contributing', 'docs/', 'documentation'];
128
+ if (docExtensions.includes(ext || ''))
129
+ return true;
130
+ const lowerPath = filepath.toLowerCase();
131
+ return docPatterns.some(pattern => lowerPath.includes(pattern));
132
+ }
133
+ /**
134
+ * NEW: Intelligent search with AST-based understanding
135
+ * Uses searchSimilar internally to avoid circular dependency
136
+ */
137
+ export async function searchIntelligent(query, options = {}) {
138
+ // Optimize query first
139
+ const { optimizedQuery, strategy } = optimizeQuery(query);
140
+ // Use searchSimilar (no circular dependency)
141
+ const initialResults = await searchSimilar(optimizedQuery, 30);
142
+ if (initialResults.length === 0) {
143
+ return {
144
+ chunks: [],
145
+ tokenEstimate: 0,
146
+ reductionPercent: 0,
147
+ };
148
+ }
149
+ // Extract filename from query if mentioned
150
+ const queryLower = query.toLowerCase();
151
+ const filenameMatch = queryLower.match(/(\w+\.(js|ts|jsx|tsx|py|java|cpp|go|rs|rb|php|swift|kt|scala|sh|bash|zsh))/);
152
+ const mentionedFilename = filenameMatch ? filenameMatch[1] : null;
153
+ // Boost source files, penalize documentation, apply path heuristics
154
+ const boostedResults = initialResults.map(result => {
155
+ let score = result.score;
156
+ // HUGE boost if query mentions this exact file
157
+ if (mentionedFilename) {
158
+ const resultFilename = result.filepath.split('/').pop()?.toLowerCase();
159
+ if (resultFilename === mentionedFilename.toLowerCase()) {
160
+ score *= 3.0; // 200% boost for exact filename match
161
+ }
162
+ }
163
+ // Path heuristics: prefer src/ over test/ or node_modules/
164
+ const lowerPath = result.filepath.toLowerCase();
165
+ if (lowerPath.includes('src/') || lowerPath.startsWith('src/')) {
166
+ score *= 1.2; // 20% boost for src/ files
167
+ }
168
+ else if (lowerPath.includes('test/') || lowerPath.includes('__tests__/')) {
169
+ score *= 0.8; // 20% penalty for test files (unless explicitly asked)
170
+ }
171
+ else if (lowerPath.includes('node_modules/') || lowerPath.includes('dist/')) {
172
+ score *= 0.1; // 90% penalty for dependencies/build files
173
+ }
174
+ // Boost source files significantly
175
+ if (isSourceFile(result.filepath)) {
176
+ score *= 1.5; // 50% boost for source files
177
+ }
178
+ // Penalize documentation when query seems code-focused
179
+ const isCodeQuery = /function|class|import|export|def|const|let|var|interface|type/.test(queryLower);
180
+ if (isCodeQuery && isDocumentation(result.filepath)) {
181
+ score *= 0.3; // 70% penalty for docs when query is about code
182
+ }
183
+ return {
184
+ ...result,
185
+ score,
186
+ };
187
+ });
188
+ // Re-sort by boosted scores
189
+ boostedResults.sort((a, b) => b.score - a.score);
190
+ // Optimize context tokens
191
+ const optimized = optimizeContext(boostedResults, optimizedQuery, strategy.maxTokens, strategy.contextStrategy);
192
+ return {
193
+ chunks: optimized.chunks,
194
+ tokenEstimate: optimized.totalTokens,
195
+ reductionPercent: optimized.reductionPercent,
196
+ };
197
+ }
198
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Interactive Session System
3
+ * Seamless REPL-like interface for natural interaction
4
+ */
5
+ export interface SessionState {
6
+ history: Array<{
7
+ command: string;
8
+ response: string;
9
+ timestamp: string;
10
+ }>;
11
+ context: any;
12
+ }
13
+ /**
14
+ * Start interactive session
15
+ */
16
+ export declare function startSession(): Promise<void>;
17
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8BH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,OAAO,EAAE,GAAG,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAqElD"}