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/ui.js
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import cliProgress from 'cli-progress';
|
|
4
|
+
import boxen from 'boxen';
|
|
5
|
+
import Table from 'cli-table3';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { join, dirname } from 'path';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
// Professional color scheme - subtle and enterprise-ready
|
|
10
|
+
export const colors = {
|
|
11
|
+
success: chalk.green,
|
|
12
|
+
error: chalk.red,
|
|
13
|
+
warning: chalk.yellow,
|
|
14
|
+
info: chalk.blue,
|
|
15
|
+
dim: chalk.dim,
|
|
16
|
+
bold: chalk.bold,
|
|
17
|
+
cyan: chalk.cyan,
|
|
18
|
+
magenta: chalk.magenta,
|
|
19
|
+
yellow: chalk.yellow,
|
|
20
|
+
red: chalk.red,
|
|
21
|
+
green: chalk.green,
|
|
22
|
+
gray: chalk.gray,
|
|
23
|
+
blue: chalk.blue,
|
|
24
|
+
};
|
|
25
|
+
// Professional status symbols (ASCII only - enterprise-ready)
|
|
26
|
+
export const symbols = {
|
|
27
|
+
success: '✓',
|
|
28
|
+
error: '✗',
|
|
29
|
+
warning: '⚠',
|
|
30
|
+
info: '→',
|
|
31
|
+
processing: '⟳',
|
|
32
|
+
arrow: '→',
|
|
33
|
+
dot: '•',
|
|
34
|
+
check: '✓',
|
|
35
|
+
cross: '✗',
|
|
36
|
+
pipe: '│',
|
|
37
|
+
dash: '─',
|
|
38
|
+
plus: '+',
|
|
39
|
+
minus: '-',
|
|
40
|
+
bullet: '•',
|
|
41
|
+
};
|
|
42
|
+
// Spinner helper - minimal text only
|
|
43
|
+
export function createSpinner(text) {
|
|
44
|
+
return ora({
|
|
45
|
+
text: colors.dim(text),
|
|
46
|
+
spinner: 'dots',
|
|
47
|
+
color: 'cyan',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Progress bar helper - clean and minimal
|
|
51
|
+
export function createProgressBar(total, format) {
|
|
52
|
+
const bar = new cliProgress.SingleBar({
|
|
53
|
+
format: format || colors.dim('Progress') + ' |{bar}| ' + colors.cyan('{percentage}%') + ' | {value}/{total}',
|
|
54
|
+
barCompleteChar: '\u2588',
|
|
55
|
+
barIncompleteChar: '\u2591',
|
|
56
|
+
hideCursor: true,
|
|
57
|
+
clearOnComplete: true,
|
|
58
|
+
}, cliProgress.Presets.shades_classic);
|
|
59
|
+
bar.start(total, 0);
|
|
60
|
+
return bar;
|
|
61
|
+
}
|
|
62
|
+
// Professional box helper - minimal borders
|
|
63
|
+
export function createBox(content, options) {
|
|
64
|
+
return boxen(content, {
|
|
65
|
+
padding: { top: 0, bottom: 0, left: 1, right: 1 },
|
|
66
|
+
margin: { top: 0, bottom: 1, left: 0, right: 0 },
|
|
67
|
+
borderStyle: 'single',
|
|
68
|
+
borderColor: 'gray',
|
|
69
|
+
...options,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Professional banner - clean and minimal
|
|
73
|
+
export function createBanner(title, subtitle) {
|
|
74
|
+
const width = Math.max(title.length, subtitle?.length || 0) + 4;
|
|
75
|
+
const top = '┌' + '─'.repeat(width - 2) + '┐';
|
|
76
|
+
const bottom = '└' + '─'.repeat(width - 2) + '┘';
|
|
77
|
+
const titleLine = '│ ' + colors.bold(title) + ' '.repeat(width - title.length - 3) + '│';
|
|
78
|
+
let banner = `\n${colors.gray(top)}\n${colors.gray(titleLine)}\n`;
|
|
79
|
+
if (subtitle) {
|
|
80
|
+
const subtitleLine = '│ ' + colors.dim(subtitle) + ' '.repeat(width - subtitle.length - 3) + '│';
|
|
81
|
+
banner += `${colors.gray(subtitleLine)}\n`;
|
|
82
|
+
}
|
|
83
|
+
banner += `${colors.gray(bottom)}\n`;
|
|
84
|
+
return banner;
|
|
85
|
+
}
|
|
86
|
+
// Separator - clean line
|
|
87
|
+
export function separator(char = '─', length = 60) {
|
|
88
|
+
return colors.dim(char.repeat(length));
|
|
89
|
+
}
|
|
90
|
+
// Success message - professional
|
|
91
|
+
export function success(message) {
|
|
92
|
+
return colors.green(symbols.success + ' ' + message);
|
|
93
|
+
}
|
|
94
|
+
// Error message - professional
|
|
95
|
+
export function error(message) {
|
|
96
|
+
return colors.red(symbols.error + ' ' + message);
|
|
97
|
+
}
|
|
98
|
+
// Warning message - professional
|
|
99
|
+
export function warning(message) {
|
|
100
|
+
return colors.yellow(symbols.warning + ' ' + message);
|
|
101
|
+
}
|
|
102
|
+
// Info message - professional
|
|
103
|
+
export function info(message) {
|
|
104
|
+
return colors.blue(symbols.info + ' ' + message);
|
|
105
|
+
}
|
|
106
|
+
// Create professional table - minimal styling
|
|
107
|
+
export function createTable(headers, rows) {
|
|
108
|
+
const table = new Table({
|
|
109
|
+
head: headers.map(h => colors.bold(h)),
|
|
110
|
+
style: {
|
|
111
|
+
head: [],
|
|
112
|
+
border: ['gray'],
|
|
113
|
+
compact: false,
|
|
114
|
+
},
|
|
115
|
+
chars: {
|
|
116
|
+
'top': '─',
|
|
117
|
+
'top-mid': '┬',
|
|
118
|
+
'top-left': '┌',
|
|
119
|
+
'top-right': '┐',
|
|
120
|
+
'bottom': '─',
|
|
121
|
+
'bottom-mid': '┴',
|
|
122
|
+
'bottom-left': '└',
|
|
123
|
+
'bottom-right': '┘',
|
|
124
|
+
'left': '│',
|
|
125
|
+
'left-mid': '├',
|
|
126
|
+
'mid': '─',
|
|
127
|
+
'mid-mid': '┼',
|
|
128
|
+
'right': '│',
|
|
129
|
+
'right-mid': '┤',
|
|
130
|
+
'middle': '│',
|
|
131
|
+
},
|
|
132
|
+
colWidths: headers.map((_, i) => {
|
|
133
|
+
const maxWidth = Math.max(headers[i].length, ...rows.map(row => (row[i] || '').length));
|
|
134
|
+
return Math.min(maxWidth + 2, 50);
|
|
135
|
+
}),
|
|
136
|
+
});
|
|
137
|
+
rows.forEach(row => table.push(row));
|
|
138
|
+
return table;
|
|
139
|
+
}
|
|
140
|
+
// Format file path - subtle
|
|
141
|
+
export function formatPath(path) {
|
|
142
|
+
return colors.cyan(path);
|
|
143
|
+
}
|
|
144
|
+
// Format number - bold
|
|
145
|
+
export function formatNumber(num) {
|
|
146
|
+
return colors.bold(num.toString());
|
|
147
|
+
}
|
|
148
|
+
// Format percentage - subtle
|
|
149
|
+
export function formatPercent(value, total) {
|
|
150
|
+
if (total !== undefined) {
|
|
151
|
+
const percent = Math.round((value / total) * 100);
|
|
152
|
+
return colors.dim(`${percent}%`);
|
|
153
|
+
}
|
|
154
|
+
// If just a percentage value (0-100)
|
|
155
|
+
return colors.dim(`${value.toFixed(1)}%`);
|
|
156
|
+
}
|
|
157
|
+
// Format score (for search results) - color by relevance
|
|
158
|
+
export function formatScore(score) {
|
|
159
|
+
const percent = Math.round(score * 100);
|
|
160
|
+
if (percent >= 50)
|
|
161
|
+
return colors.green(`${percent}%`);
|
|
162
|
+
if (percent >= 30)
|
|
163
|
+
return colors.yellow(`${percent}%`);
|
|
164
|
+
return colors.dim(`${percent}%`);
|
|
165
|
+
}
|
|
166
|
+
// Professional section header
|
|
167
|
+
export function sectionHeader(title) {
|
|
168
|
+
console.log(colors.bold(title));
|
|
169
|
+
console.log(separator());
|
|
170
|
+
}
|
|
171
|
+
// Print empty line
|
|
172
|
+
export function newline(count = 1) {
|
|
173
|
+
for (let i = 0; i < count; i++) {
|
|
174
|
+
console.log();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Status indicator
|
|
178
|
+
export function statusIndicator(status) {
|
|
179
|
+
const map = {
|
|
180
|
+
success: colors.green(symbols.success),
|
|
181
|
+
error: colors.red(symbols.error),
|
|
182
|
+
warning: colors.yellow(symbols.warning),
|
|
183
|
+
info: colors.blue(symbols.info),
|
|
184
|
+
processing: colors.cyan(symbols.processing),
|
|
185
|
+
};
|
|
186
|
+
return map[status];
|
|
187
|
+
}
|
|
188
|
+
// Gradient logo for "codehere" - coral → purple → blue
|
|
189
|
+
export function createCodehereLogo() {
|
|
190
|
+
const text = 'codehere';
|
|
191
|
+
const letters = text.split('');
|
|
192
|
+
// Color stops: coral → purple → blue
|
|
193
|
+
// RGB values for smooth gradient
|
|
194
|
+
const colorStops = [
|
|
195
|
+
{ r: 255, g: 127, b: 102 }, // coral
|
|
196
|
+
{ r: 255, g: 140, b: 120 }, // light coral
|
|
197
|
+
{ r: 230, g: 150, b: 180 }, // coral-purple
|
|
198
|
+
{ r: 200, g: 160, b: 200 }, // purple
|
|
199
|
+
{ r: 180, g: 170, b: 220 }, // light purple
|
|
200
|
+
{ r: 150, g: 180, b: 240 }, // purple-blue
|
|
201
|
+
{ r: 120, g: 190, b: 255 }, // light blue
|
|
202
|
+
{ r: 100, g: 180, b: 255 }, // blue
|
|
203
|
+
];
|
|
204
|
+
// Map each letter to a color
|
|
205
|
+
const coloredLetters = letters.map((letter, index) => {
|
|
206
|
+
const colorIndex = Math.floor((index / (letters.length - 1)) * (colorStops.length - 1));
|
|
207
|
+
const color = colorStops[colorIndex];
|
|
208
|
+
// Use chalk's rgb for gradient effect
|
|
209
|
+
return chalk.rgb(color.r, color.g, color.b)(letter);
|
|
210
|
+
});
|
|
211
|
+
return coloredLetters.join('');
|
|
212
|
+
}
|
|
213
|
+
// Welcome message with logo
|
|
214
|
+
export function createWelcomeMessage() {
|
|
215
|
+
const logo = createCodehereLogo();
|
|
216
|
+
const version = 'v0.1.0';
|
|
217
|
+
const tagline = 'AI-powered coding assistant';
|
|
218
|
+
return `
|
|
219
|
+
${colors.bold(logo)} ${colors.dim(version)}
|
|
220
|
+
${colors.dim(tagline)}
|
|
221
|
+
`;
|
|
222
|
+
}
|
|
223
|
+
// Helper to get visual length (strip ANSI codes)
|
|
224
|
+
function visualLength(str) {
|
|
225
|
+
// Remove ANSI escape codes
|
|
226
|
+
return str.replace(/\u001b\[[0-9;]*m/g, '').length;
|
|
227
|
+
}
|
|
228
|
+
// Enhanced welcome message for interactive session
|
|
229
|
+
export function createSessionWelcome() {
|
|
230
|
+
const logo = createCodehereLogo();
|
|
231
|
+
const version = 'v0.1.0';
|
|
232
|
+
// Check if indexed
|
|
233
|
+
let isIndexed = false;
|
|
234
|
+
try {
|
|
235
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
236
|
+
const __dirname = dirname(__filename);
|
|
237
|
+
const agentDir = join(__dirname, '..');
|
|
238
|
+
const dbPath = join(agentDir, 'data', 'embeddings.sqlite');
|
|
239
|
+
isIndexed = existsSync(dbPath);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
// Ignore errors - will default to not indexed
|
|
243
|
+
}
|
|
244
|
+
const width = 54;
|
|
245
|
+
const greeting = 'Hello there, code here!';
|
|
246
|
+
// Use subtle blue-gray for borders (like Claude Code)
|
|
247
|
+
const borderColor = chalk.hex('#6B7280'); // Subtle gray-blue
|
|
248
|
+
// Helper to create a line with proper padding
|
|
249
|
+
const createLine = (content) => {
|
|
250
|
+
const contentVisual = visualLength(content);
|
|
251
|
+
// Total width = left border (2) + content + padding + right border (2)
|
|
252
|
+
// So: width = 2 + contentVisual + padding + 2
|
|
253
|
+
// padding = width - contentVisual - 4
|
|
254
|
+
const padding = Math.max(0, width - contentVisual - 4);
|
|
255
|
+
return borderColor('│ ') + content + ' '.repeat(padding) + borderColor(' │\n');
|
|
256
|
+
};
|
|
257
|
+
// Calculate visual lengths (without ANSI codes)
|
|
258
|
+
const logoVisual = visualLength(logo);
|
|
259
|
+
const versionVisual = visualLength(version);
|
|
260
|
+
let welcomeBox = '';
|
|
261
|
+
welcomeBox += borderColor('┌' + '─'.repeat(width - 2) + '┐\n');
|
|
262
|
+
// Header line with logo and version
|
|
263
|
+
const headerContent = colors.bold(logo) + ' ' + colors.dim(version);
|
|
264
|
+
welcomeBox += createLine(headerContent);
|
|
265
|
+
welcomeBox += borderColor('│') + ' '.repeat(width - 2) + borderColor('│\n');
|
|
266
|
+
// Greeting line
|
|
267
|
+
welcomeBox += createLine(greeting);
|
|
268
|
+
welcomeBox += borderColor('│') + ' '.repeat(width - 2) + borderColor('│\n');
|
|
269
|
+
// Tips section
|
|
270
|
+
const tipsHeader = 'Tips for getting started:';
|
|
271
|
+
welcomeBox += createLine(colors.yellow(tipsHeader));
|
|
272
|
+
if (!isIndexed) {
|
|
273
|
+
const tip1 = ' Run "index" to build your codebase search index';
|
|
274
|
+
welcomeBox += createLine(colors.dim(tip1));
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
const tip1 = ' Try asking: "How does authentication work?"';
|
|
278
|
+
welcomeBox += createLine(colors.dim(tip1));
|
|
279
|
+
}
|
|
280
|
+
const tip2 = ' Type "help" to see all available commands';
|
|
281
|
+
welcomeBox += createLine(colors.dim(tip2));
|
|
282
|
+
welcomeBox += borderColor('│') + ' '.repeat(width - 2) + borderColor('│\n');
|
|
283
|
+
// Quick examples
|
|
284
|
+
const examplesHeader = 'Quick examples:';
|
|
285
|
+
welcomeBox += createLine(colors.cyan(examplesHeader));
|
|
286
|
+
const example1 = ' • explain src/index.ts';
|
|
287
|
+
welcomeBox += createLine(colors.dim(example1));
|
|
288
|
+
const example2 = ' • fix src/utils.js "Add error handling"';
|
|
289
|
+
welcomeBox += createLine(colors.dim(example2));
|
|
290
|
+
const example3 = ' • review src/auth.ts';
|
|
291
|
+
welcomeBox += createLine(colors.dim(example3));
|
|
292
|
+
welcomeBox += borderColor('└' + '─'.repeat(width - 2) + '┘');
|
|
293
|
+
return welcomeBox;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify_db.d.ts","sourceRoot":"","sources":["../src/verify_db.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import initSqlJs from 'sql.js';
|
|
2
|
+
import { readFileSync, existsSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
const DB_PATH = join(process.cwd(), 'agent', 'data', 'embeddings.sqlite');
|
|
5
|
+
async function verifyDatabase() {
|
|
6
|
+
if (!existsSync(DB_PATH)) {
|
|
7
|
+
console.error('Database file not found');
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
const SQL = await initSqlJs();
|
|
11
|
+
const buffer = readFileSync(DB_PATH);
|
|
12
|
+
const db = new SQL.Database(buffer);
|
|
13
|
+
// Count total chunks
|
|
14
|
+
const countStmt = db.prepare('SELECT COUNT(*) as count FROM embeddings');
|
|
15
|
+
countStmt.step();
|
|
16
|
+
const count = countStmt.getAsObject();
|
|
17
|
+
const totalChunks = count.count;
|
|
18
|
+
countStmt.free();
|
|
19
|
+
// Count unique files
|
|
20
|
+
const filesStmt = db.prepare('SELECT COUNT(DISTINCT filepath) as count FROM embeddings');
|
|
21
|
+
filesStmt.step();
|
|
22
|
+
const files = filesStmt.getAsObject();
|
|
23
|
+
const totalFiles = files.count;
|
|
24
|
+
filesStmt.free();
|
|
25
|
+
// Get sample row
|
|
26
|
+
const sampleStmt = db.prepare('SELECT * FROM embeddings LIMIT 1');
|
|
27
|
+
sampleStmt.step();
|
|
28
|
+
const sample = sampleStmt.getAsObject();
|
|
29
|
+
sampleStmt.free();
|
|
30
|
+
// Parse embedding
|
|
31
|
+
let embeddingLength = 0;
|
|
32
|
+
if (sample.embedding) {
|
|
33
|
+
try {
|
|
34
|
+
const embedding = JSON.parse(sample.embedding);
|
|
35
|
+
embeddingLength = embedding.length;
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
console.error('Error parsing embedding:', e);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
console.log('Database Verification:');
|
|
42
|
+
console.log(` Total chunks: ${totalChunks}`);
|
|
43
|
+
console.log(` Total files: ${totalFiles}`);
|
|
44
|
+
console.log(` Sample row:`);
|
|
45
|
+
console.log(` Filepath: ${sample.filepath}`);
|
|
46
|
+
console.log(` Chunk index: ${sample.chunkIndex}`);
|
|
47
|
+
console.log(` Content preview: ${sample.content.substring(0, 100)}...`);
|
|
48
|
+
console.log(` Embedding vector length: ${embeddingLength}`);
|
|
49
|
+
db.close();
|
|
50
|
+
}
|
|
51
|
+
verifyDatabase();
|
|
52
|
+
//# sourceMappingURL=verify_db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify_db.js","sourceRoot":"","sources":["../src/verify_db.ts"],"names":[],"mappings":"AAAA,OAAO,SAAuB,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAE1E,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpC,qBAAqB;IACrB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IACzE,SAAS,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAS,CAAC;IAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAe,CAAC;IAC1C,SAAS,CAAC,IAAI,EAAE,CAAC;IAEjB,qBAAqB;IACrB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC;IACzF,SAAS,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAS,CAAC;IAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAe,CAAC;IACzC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEjB,iBAAiB;IACjB,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAClE,UAAU,CAAC,IAAI,EAAE,CAAC;IAClB,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAS,CAAC;IAC/C,UAAU,CAAC,IAAI,EAAE,CAAC;IAElB,kBAAkB;IAClB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAmB,CAAa,CAAC;YACrE,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,wBAAyB,MAAM,CAAC,OAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,gCAAgC,eAAe,EAAE,CAAC,CAAC;IAE/D,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,cAAc,EAAE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "codehere",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AI-powered coding assistant with local embeddings and semantic search",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"codehere": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"templates",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"CHANGELOG.md",
|
|
16
|
+
"CONTRIBUTING.md",
|
|
17
|
+
"ARCHITECTURE.md"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"start": "node dist/index.js",
|
|
22
|
+
"dev": "tsx src/index.ts",
|
|
23
|
+
"test": "tsx tests/edit.test.ts"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"coding-assistant",
|
|
27
|
+
"ai",
|
|
28
|
+
"semantic-search",
|
|
29
|
+
"cohere",
|
|
30
|
+
"typescript",
|
|
31
|
+
"cli-tool",
|
|
32
|
+
"code-analysis",
|
|
33
|
+
"embeddings",
|
|
34
|
+
"vector-search",
|
|
35
|
+
"sqlite"
|
|
36
|
+
],
|
|
37
|
+
"author": {
|
|
38
|
+
"name": "Muhammad Ega",
|
|
39
|
+
"url": "https://github.com/muhammadegaa"
|
|
40
|
+
},
|
|
41
|
+
"license": "MIT",
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "https://github.com/muhammadegaa/codehere.git"
|
|
45
|
+
},
|
|
46
|
+
"bugs": {
|
|
47
|
+
"url": "https://github.com/muhammadegaa/codehere/issues"
|
|
48
|
+
},
|
|
49
|
+
"homepage": "https://github.com/muhammadegaa/codehere#readme",
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"boxen": "^8.0.1",
|
|
52
|
+
"chalk": "^5.3.0",
|
|
53
|
+
"cli-progress": "^3.12.0",
|
|
54
|
+
"cli-table3": "^0.6.5",
|
|
55
|
+
"cohere-ai": "^7.7.0",
|
|
56
|
+
"commander": "^11.1.0",
|
|
57
|
+
"diff": "^5.1.0",
|
|
58
|
+
"dotenv": "^16.3.1",
|
|
59
|
+
"ora": "^7.0.1",
|
|
60
|
+
"sql.js": "^1.10.3",
|
|
61
|
+
"tiktoken": "^1.0.10"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@types/cli-progress": "^3.11.5",
|
|
65
|
+
"@types/diff": "^5.0.8",
|
|
66
|
+
"@types/node": "^20.10.6",
|
|
67
|
+
"@types/sql.js": "^1.4.8",
|
|
68
|
+
"tsx": "^4.7.0",
|
|
69
|
+
"typescript": "^5.9.3"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Metadata } from 'next';
|
|
2
|
+
|
|
3
|
+
export const metadata: Metadata = {
|
|
4
|
+
title: 'Next.js App',
|
|
5
|
+
description: 'Generated by CodeHere',
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export default function RootLayout({
|
|
9
|
+
children,
|
|
10
|
+
}: {
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}) {
|
|
13
|
+
return (
|
|
14
|
+
<html lang="en">
|
|
15
|
+
<body>{children}</body>
|
|
16
|
+
</html>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Simple Next.js page
|
|
2
|
+
export default function Home() {
|
|
3
|
+
return (
|
|
4
|
+
<main className="flex min-h-screen flex-col items-center justify-center p-24">
|
|
5
|
+
<h1 className="text-4xl font-bold mb-4">Welcome</h1>
|
|
6
|
+
<p className="text-lg text-gray-600">This is a simple Next.js page.</p>
|
|
7
|
+
</main>
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "next-page",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "next dev",
|
|
7
|
+
"build": "next build",
|
|
8
|
+
"start": "next start"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"react": "^18.2.0",
|
|
12
|
+
"react-dom": "^18.2.0",
|
|
13
|
+
"next": "^14.0.0"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@types/node": "^20.0.0",
|
|
17
|
+
"@types/react": "^18.2.0",
|
|
18
|
+
"@types/react-dom": "^18.2.0",
|
|
19
|
+
"typescript": "^5.0.0"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Simple Node.js API server
|
|
2
|
+
const http = require('http');
|
|
3
|
+
|
|
4
|
+
// In-memory store
|
|
5
|
+
const items = [];
|
|
6
|
+
|
|
7
|
+
// Health check endpoint
|
|
8
|
+
function handleHealth(req, res) {
|
|
9
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
10
|
+
res.end(JSON.stringify({ status: 'ok' }));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Get all items
|
|
14
|
+
function handleGetItems(req, res) {
|
|
15
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
16
|
+
res.end(JSON.stringify(items));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Create item
|
|
20
|
+
function handlePostItem(req, res) {
|
|
21
|
+
let body = '';
|
|
22
|
+
req.on('data', chunk => {
|
|
23
|
+
body += chunk.toString();
|
|
24
|
+
});
|
|
25
|
+
req.on('end', () => {
|
|
26
|
+
try {
|
|
27
|
+
const item = JSON.parse(body);
|
|
28
|
+
item.id = items.length + 1;
|
|
29
|
+
items.push(item);
|
|
30
|
+
res.writeHead(201, { 'Content-Type': 'application/json' });
|
|
31
|
+
res.end(JSON.stringify(item));
|
|
32
|
+
} catch (error) {
|
|
33
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
34
|
+
res.end(JSON.stringify({ error: 'Invalid JSON' }));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Router
|
|
40
|
+
const server = http.createServer((req, res) => {
|
|
41
|
+
if (req.method === 'GET' && req.url === '/health') {
|
|
42
|
+
handleHealth(req, res);
|
|
43
|
+
} else if (req.method === 'GET' && req.url === '/items') {
|
|
44
|
+
handleGetItems(req, res);
|
|
45
|
+
} else if (req.method === 'POST' && req.url === '/items') {
|
|
46
|
+
handlePostItem(req, res);
|
|
47
|
+
} else {
|
|
48
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
49
|
+
res.end(JSON.stringify({ error: 'Not found' }));
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const PORT = process.env.PORT || 3000;
|
|
54
|
+
server.listen(PORT, () => {
|
|
55
|
+
console.log(`Server running on http://localhost:${PORT}`);
|
|
56
|
+
});
|
|
57
|
+
|