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/review.d.ts
ADDED
|
@@ -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"}
|
package/dist/scaffold.js
ADDED
|
@@ -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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"}
|
package/dist/search.d.ts
ADDED
|
@@ -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"}
|