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,55 @@
1
+ /**
2
+ * AST-Based Code Understanding System
3
+ * Deep code analysis for 10X effectiveness
4
+ */
5
+ import * as ts from 'typescript';
6
+ export interface CodeSymbol {
7
+ name: string;
8
+ kind: 'function' | 'class' | 'interface' | 'type' | 'variable' | 'enum' | 'method' | 'property';
9
+ filepath: string;
10
+ line: number;
11
+ column: number;
12
+ signature?: string;
13
+ returnType?: string;
14
+ parameters?: Array<{
15
+ name: string;
16
+ type: string;
17
+ }>;
18
+ isExported: boolean;
19
+ isPrivate: boolean;
20
+ docComment?: string;
21
+ }
22
+ export interface CodeRelationship {
23
+ from: string;
24
+ to: string;
25
+ type: 'calls' | 'imports' | 'extends' | 'implements' | 'uses' | 'defines';
26
+ filepath: string;
27
+ line: number;
28
+ }
29
+ export interface CodeAnalysis {
30
+ filepath: string;
31
+ symbols: CodeSymbol[];
32
+ relationships: CodeRelationship[];
33
+ imports: string[];
34
+ exports: string[];
35
+ dependencies: string[];
36
+ dependents: string[];
37
+ ast?: ts.SourceFile;
38
+ }
39
+ /**
40
+ * Parse TypeScript/JavaScript file to AST
41
+ */
42
+ export declare function parseFile(filepath: string, content?: string): CodeAnalysis | null;
43
+ /**
44
+ * Build call graph from multiple files
45
+ */
46
+ export declare function buildCallGraph(analyses: CodeAnalysis[]): Map<string, CodeRelationship[]>;
47
+ /**
48
+ * Find all symbols that call a given function
49
+ */
50
+ export declare function findCallers(functionName: string, callGraph: Map<string, CodeRelationship[]>): string[];
51
+ /**
52
+ * Find all symbols called by a given function
53
+ */
54
+ export declare function findCallees(functionName: string, callGraph: Map<string, CodeRelationship[]>): string[];
55
+ //# sourceMappingURL=ast-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-parser.d.ts","sourceRoot":"","sources":["../src/ast-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CA2HjF;AAgOD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CA8BxF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,CAUtG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,CAKtG"}
@@ -0,0 +1,331 @@
1
+ /**
2
+ * AST-Based Code Understanding System
3
+ * Deep code analysis for 10X effectiveness
4
+ */
5
+ import { readFileSync } from 'fs';
6
+ import { extname } from 'path';
7
+ import * as ts from 'typescript';
8
+ /**
9
+ * Parse TypeScript/JavaScript file to AST
10
+ */
11
+ export function parseFile(filepath, content) {
12
+ const ext = extname(filepath).toLowerCase();
13
+ // Only parse TypeScript/JavaScript files
14
+ if (!['.ts', '.tsx', '.js', '.jsx'].includes(ext)) {
15
+ return null;
16
+ }
17
+ try {
18
+ const fileContent = content || readFileSync(filepath, 'utf-8');
19
+ // Create TypeScript compiler host
20
+ const compilerOptions = {
21
+ target: ts.ScriptTarget.Latest,
22
+ module: ts.ModuleKind.ESNext,
23
+ jsx: ts.JsxEmit.React,
24
+ allowJs: true,
25
+ checkJs: false,
26
+ skipLibCheck: true,
27
+ };
28
+ // Parse to AST
29
+ const sourceFile = ts.createSourceFile(filepath, fileContent, ts.ScriptTarget.Latest, true, ext === '.tsx' || ext === '.jsx' ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
30
+ const symbols = [];
31
+ const relationships = [];
32
+ const imports = [];
33
+ const exports = [];
34
+ const dependencies = [];
35
+ // Visit AST nodes
36
+ function visit(node, parent) {
37
+ // Extract imports
38
+ if (ts.isImportDeclaration(node)) {
39
+ const moduleSpecifier = node.moduleSpecifier;
40
+ if (ts.isStringLiteral(moduleSpecifier)) {
41
+ imports.push(moduleSpecifier.text);
42
+ dependencies.push(moduleSpecifier.text);
43
+ }
44
+ }
45
+ // Extract exports
46
+ if (ts.isExportDeclaration(node)) {
47
+ const moduleSpecifier = node.moduleSpecifier;
48
+ if (moduleSpecifier && ts.isStringLiteral(moduleSpecifier)) {
49
+ exports.push(moduleSpecifier.text);
50
+ }
51
+ }
52
+ // Extract functions
53
+ if (ts.isFunctionDeclaration(node) && node.name) {
54
+ const symbol = extractFunctionSymbol(node, filepath, sourceFile);
55
+ if (symbol)
56
+ symbols.push(symbol);
57
+ }
58
+ // Extract methods (in classes)
59
+ if (ts.isMethodDeclaration(node) && node.name) {
60
+ const symbol = extractMethodSymbol(node, filepath, sourceFile);
61
+ if (symbol)
62
+ symbols.push(symbol);
63
+ }
64
+ // Extract classes
65
+ if (ts.isClassDeclaration(node) && node.name) {
66
+ const symbol = extractClassSymbol(node, filepath, sourceFile);
67
+ if (symbol)
68
+ symbols.push(symbol);
69
+ }
70
+ // Extract interfaces
71
+ if (ts.isInterfaceDeclaration(node) && node.name) {
72
+ const symbol = extractInterfaceSymbol(node, filepath, sourceFile);
73
+ if (symbol)
74
+ symbols.push(symbol);
75
+ }
76
+ // Extract type aliases
77
+ if (ts.isTypeAliasDeclaration(node) && node.name) {
78
+ const symbol = extractTypeSymbol(node, filepath, sourceFile);
79
+ if (symbol)
80
+ symbols.push(symbol);
81
+ }
82
+ // Extract variables (const, let, var)
83
+ if ((ts.isVariableDeclaration(node) || ts.isVariableStatement(node)) && parent) {
84
+ const symbol = extractVariableSymbol(node, filepath, sourceFile);
85
+ if (symbol)
86
+ symbols.push(symbol);
87
+ }
88
+ // Extract function calls
89
+ if (ts.isCallExpression(node)) {
90
+ const callRelationship = extractCallRelationship(node, filepath, sourceFile);
91
+ if (callRelationship)
92
+ relationships.push(callRelationship);
93
+ }
94
+ // Extract property access
95
+ if (ts.isPropertyAccessExpression(node)) {
96
+ const propRelationship = extractPropertyRelationship(node, filepath, sourceFile);
97
+ if (propRelationship)
98
+ relationships.push(propRelationship);
99
+ }
100
+ // Recursively visit children
101
+ ts.forEachChild(node, (child) => visit(child, node));
102
+ }
103
+ visit(sourceFile);
104
+ return {
105
+ filepath,
106
+ symbols,
107
+ relationships,
108
+ imports,
109
+ exports,
110
+ dependencies: [...new Set(dependencies)],
111
+ dependents: [],
112
+ ast: sourceFile,
113
+ };
114
+ }
115
+ catch (error) {
116
+ console.warn(`Failed to parse ${filepath}: ${error instanceof Error ? error.message : String(error)}`);
117
+ return null;
118
+ }
119
+ }
120
+ function extractFunctionSymbol(node, filepath, sourceFile) {
121
+ if (!node.name)
122
+ return null;
123
+ const name = node.name.text;
124
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
125
+ const parameters = node.parameters.map(p => ({
126
+ name: p.name ? (ts.isIdentifier(p.name) ? p.name.text : '') : '',
127
+ type: p.type ? sourceFile.text.substring(p.type.getStart(), p.type.getEnd()) : 'any',
128
+ }));
129
+ const returnType = node.type
130
+ ? sourceFile.text.substring(node.type.getStart(), node.type.getEnd())
131
+ : undefined;
132
+ const signature = `${name}(${parameters.map(p => `${p.name}: ${p.type}`).join(', ')})${returnType ? `: ${returnType}` : ''}`;
133
+ const isExported = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword));
134
+ const isPrivate = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.PrivateKeyword));
135
+ const docComment = ts.getLeadingCommentRanges(sourceFile.text, node.getFullStart())
136
+ ?.map(range => sourceFile.text.substring(range.pos, range.end))
137
+ .join('\n');
138
+ return {
139
+ name,
140
+ kind: 'function',
141
+ filepath,
142
+ line: line + 1,
143
+ column: character + 1,
144
+ signature,
145
+ returnType,
146
+ parameters,
147
+ isExported,
148
+ isPrivate,
149
+ docComment,
150
+ };
151
+ }
152
+ function extractMethodSymbol(node, filepath, sourceFile) {
153
+ if (!node.name || !ts.isIdentifier(node.name))
154
+ return null;
155
+ const name = node.name.text;
156
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
157
+ const parameters = node.parameters.map(p => ({
158
+ name: p.name ? (ts.isIdentifier(p.name) ? p.name.text : '') : '',
159
+ type: p.type ? sourceFile.text.substring(p.type.getStart(), p.type.getEnd()) : 'any',
160
+ }));
161
+ const returnType = node.type
162
+ ? sourceFile.text.substring(node.type.getStart(), node.type.getEnd())
163
+ : undefined;
164
+ const signature = `${name}(${parameters.map(p => `${p.name}: ${p.type}`).join(', ')})${returnType ? `: ${returnType}` : ''}`;
165
+ const isExported = false; // Methods are not exported directly
166
+ const isPrivate = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.PrivateKeyword));
167
+ return {
168
+ name,
169
+ kind: 'method',
170
+ filepath,
171
+ line: line + 1,
172
+ column: character + 1,
173
+ signature,
174
+ returnType,
175
+ parameters,
176
+ isExported,
177
+ isPrivate,
178
+ };
179
+ }
180
+ function extractClassSymbol(node, filepath, sourceFile) {
181
+ if (!node.name)
182
+ return null;
183
+ const name = node.name.text;
184
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
185
+ const isExported = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword));
186
+ return {
187
+ name,
188
+ kind: 'class',
189
+ filepath,
190
+ line: line + 1,
191
+ column: character + 1,
192
+ isExported,
193
+ isPrivate: false,
194
+ };
195
+ }
196
+ function extractInterfaceSymbol(node, filepath, sourceFile) {
197
+ if (!node.name)
198
+ return null;
199
+ const name = node.name.text;
200
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
201
+ const isExported = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword));
202
+ return {
203
+ name,
204
+ kind: 'interface',
205
+ filepath,
206
+ line: line + 1,
207
+ column: character + 1,
208
+ isExported,
209
+ isPrivate: false,
210
+ };
211
+ }
212
+ function extractTypeSymbol(node, filepath, sourceFile) {
213
+ if (!node.name)
214
+ return null;
215
+ const name = node.name.text;
216
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
217
+ const isExported = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword));
218
+ return {
219
+ name,
220
+ kind: 'type',
221
+ filepath,
222
+ line: line + 1,
223
+ column: character + 1,
224
+ isExported,
225
+ isPrivate: false,
226
+ };
227
+ }
228
+ function extractVariableSymbol(node, filepath, sourceFile) {
229
+ let decl;
230
+ if (ts.isVariableStatement(node)) {
231
+ if (node.declarationList.declarations.length === 0)
232
+ return null;
233
+ decl = node.declarationList.declarations[0];
234
+ }
235
+ else {
236
+ decl = node;
237
+ }
238
+ if (!decl.name || !ts.isIdentifier(decl.name))
239
+ return null;
240
+ const name = decl.name.text;
241
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(decl.getStart());
242
+ const isExported = ts.isVariableStatement(node)
243
+ ? !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword))
244
+ : false;
245
+ return {
246
+ name,
247
+ kind: 'variable',
248
+ filepath,
249
+ line: line + 1,
250
+ column: character + 1,
251
+ isExported,
252
+ isPrivate: false,
253
+ };
254
+ }
255
+ function extractCallRelationship(node, filepath, sourceFile) {
256
+ if (!ts.isIdentifier(node.expression))
257
+ return null;
258
+ const functionName = node.expression.text;
259
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
260
+ return {
261
+ from: 'current-context', // Will be resolved later
262
+ to: functionName,
263
+ type: 'calls',
264
+ filepath,
265
+ line: line + 1,
266
+ };
267
+ }
268
+ function extractPropertyRelationship(node, filepath, sourceFile) {
269
+ if (!ts.isIdentifier(node.name))
270
+ return null;
271
+ const propertyName = node.name.text;
272
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
273
+ return {
274
+ from: 'current-context',
275
+ to: propertyName,
276
+ type: 'uses',
277
+ filepath,
278
+ line: line + 1,
279
+ };
280
+ }
281
+ /**
282
+ * Build call graph from multiple files
283
+ */
284
+ export function buildCallGraph(analyses) {
285
+ const callGraph = new Map();
286
+ for (const analysis of analyses) {
287
+ for (const symbol of analysis.symbols) {
288
+ const calls = [];
289
+ for (const rel of analysis.relationships) {
290
+ if (rel.from === 'current-context' || rel.from === symbol.name) {
291
+ // Find the target symbol
292
+ const targetSymbol = analyses
293
+ .flatMap(a => a.symbols)
294
+ .find(s => s.name === rel.to);
295
+ if (targetSymbol) {
296
+ calls.push({
297
+ ...rel,
298
+ from: symbol.name,
299
+ });
300
+ }
301
+ }
302
+ }
303
+ if (calls.length > 0) {
304
+ callGraph.set(symbol.name, calls);
305
+ }
306
+ }
307
+ }
308
+ return callGraph;
309
+ }
310
+ /**
311
+ * Find all symbols that call a given function
312
+ */
313
+ export function findCallers(functionName, callGraph) {
314
+ const callers = [];
315
+ for (const [caller, calls] of callGraph.entries()) {
316
+ if (calls.some(c => c.to === functionName && c.type === 'calls')) {
317
+ callers.push(caller);
318
+ }
319
+ }
320
+ return callers;
321
+ }
322
+ /**
323
+ * Find all symbols called by a given function
324
+ */
325
+ export function findCallees(functionName, callGraph) {
326
+ const calls = callGraph.get(functionName);
327
+ if (!calls)
328
+ return [];
329
+ return calls.filter(c => c.type === 'calls').map(c => c.to);
330
+ }
331
+ //# sourceMappingURL=ast-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-parser.js","sourceRoot":"","sources":["../src/ast-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Benchmark Testing Framework
3
+ * Compare CodeHere with Claude Code on real scenarios
4
+ */
5
+ export interface BenchmarkResult {
6
+ scenario: string;
7
+ agent: 'codehere' | 'claude-code';
8
+ success: boolean;
9
+ accuracy: number;
10
+ speed: number;
11
+ completeness: number;
12
+ codeQuality: number;
13
+ understanding: number;
14
+ errors: string[];
15
+ notes: string;
16
+ }
17
+ export interface BenchmarkScenario {
18
+ name: string;
19
+ description: string;
20
+ setup: () => Promise<{
21
+ filepath: string;
22
+ content: string;
23
+ }>;
24
+ test: (filepath: string) => Promise<BenchmarkResult>;
25
+ cleanup: (filepath: string) => Promise<void>;
26
+ }
27
+ /**
28
+ * Scenario 1: Simple Function Rename
29
+ */
30
+ export declare const scenario1: BenchmarkScenario;
31
+ /**
32
+ * Scenario 2: Explain Code
33
+ */
34
+ export declare const scenario2: BenchmarkScenario;
35
+ /**
36
+ * Run all benchmarks
37
+ */
38
+ export declare function runBenchmarks(): Promise<BenchmarkResult[]>;
39
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,GAAG,aAAa,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACrD,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,iBA0FvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,iBA6EvB,CAAC;AAcF;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAgBhE"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Benchmark Testing Framework
3
+ * Compare CodeHere with Claude Code on real scenarios
4
+ */
5
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
6
+ import { generateAndApplyEdit } from './edit.js';
7
+ import { chatWithContext } from './chat.js';
8
+ import { searchIntelligent } from './search.js';
9
+ /**
10
+ * Scenario 1: Simple Function Rename
11
+ */
12
+ export const scenario1 = {
13
+ name: 'Simple Function Rename',
14
+ description: 'Rename function calculateSum to addNumbers',
15
+ setup: async () => {
16
+ const filepath = 'test/benchmark_scenario1.js';
17
+ const content = `function calculateSum(a, b) {
18
+ return a + b;
19
+ }
20
+
21
+ function otherFunction() {
22
+ return calculateSum(1, 2);
23
+ }
24
+
25
+ module.exports = { calculateSum, otherFunction };
26
+ `;
27
+ writeFileSync(filepath, content, 'utf-8');
28
+ return { filepath, content };
29
+ },
30
+ test: async (filepath) => {
31
+ const startTime = Date.now();
32
+ try {
33
+ const result = await generateAndApplyEdit(filepath, 'Rename function calculateSum to addNumbers');
34
+ const speed = (Date.now() - startTime) / 1000;
35
+ if (!result.success) {
36
+ return {
37
+ scenario: 'Simple Function Rename',
38
+ agent: 'codehere',
39
+ success: false,
40
+ accuracy: 0,
41
+ speed,
42
+ completeness: 0,
43
+ codeQuality: 0,
44
+ understanding: 0,
45
+ errors: [result.error || 'Unknown error'],
46
+ notes: 'Edit failed',
47
+ };
48
+ }
49
+ // Verify the result
50
+ const newContent = readFileSync(filepath, 'utf-8');
51
+ const hasNewName = newContent.includes('function addNumbers');
52
+ const hasOldName = newContent.includes('function calculateSum');
53
+ const hasNewExport = newContent.includes('addNumbers');
54
+ const hasOldExport = newContent.includes('calculateSum');
55
+ const isValidSyntax = checkSyntax(newContent);
56
+ // Calculate scores
57
+ const accuracy = (hasNewName && !hasOldName && hasNewExport && !hasOldExport) ? 100 : 0;
58
+ const completeness = (hasNewName && hasNewExport) ? 100 : 50;
59
+ const codeQuality = isValidSyntax ? 100 : 0;
60
+ const understanding = (hasNewName && !hasOldName) ? 100 : 50;
61
+ return {
62
+ scenario: 'Simple Function Rename',
63
+ agent: 'codehere',
64
+ success: result.success,
65
+ accuracy,
66
+ speed,
67
+ completeness,
68
+ codeQuality,
69
+ understanding,
70
+ errors: isValidSyntax ? [] : ['Syntax error'],
71
+ notes: `Renamed: ${hasNewName}, Exports: ${hasNewExport}`,
72
+ };
73
+ }
74
+ catch (error) {
75
+ return {
76
+ scenario: 'Simple Function Rename',
77
+ agent: 'codehere',
78
+ success: false,
79
+ accuracy: 0,
80
+ speed: (Date.now() - startTime) / 1000,
81
+ completeness: 0,
82
+ codeQuality: 0,
83
+ understanding: 0,
84
+ errors: [error instanceof Error ? error.message : String(error)],
85
+ notes: 'Exception thrown',
86
+ };
87
+ }
88
+ },
89
+ cleanup: async (filepath) => {
90
+ if (existsSync(filepath)) {
91
+ // Restore original or delete
92
+ }
93
+ },
94
+ };
95
+ /**
96
+ * Scenario 2: Explain Code
97
+ */
98
+ export const scenario2 = {
99
+ name: 'Explain Code',
100
+ description: 'Explain what a function does',
101
+ setup: async () => {
102
+ const filepath = 'test/benchmark_scenario2.js';
103
+ const content = `function complexFunction(arr) {
104
+ if (!Array.isArray(arr) || arr.length === 0) return null;
105
+
106
+ const result = arr
107
+ .filter(x => x > 0)
108
+ .map(x => x * 2)
109
+ .reduce((sum, x) => sum + x, 0);
110
+
111
+ return result > 100 ? result : null;
112
+ }
113
+ `;
114
+ writeFileSync(filepath, content, 'utf-8');
115
+ return { filepath, content };
116
+ },
117
+ test: async (filepath) => {
118
+ const startTime = Date.now();
119
+ try {
120
+ const searchResult = await searchIntelligent(`What does complexFunction in ${filepath} do?`);
121
+ const response = await chatWithContext(`What does complexFunction in ${filepath} do?`, searchResult.chunks);
122
+ const speed = (Date.now() - startTime) / 1000;
123
+ // Check if response mentions key concepts
124
+ const mentionsFilter = response.toLowerCase().includes('filter');
125
+ const mentionsMap = response.toLowerCase().includes('map');
126
+ const mentionsReduce = response.toLowerCase().includes('reduce');
127
+ const mentionsNull = response.toLowerCase().includes('null');
128
+ const mentionsArray = response.toLowerCase().includes('array');
129
+ const accuracy = (mentionsFilter && mentionsMap && mentionsReduce) ? 100 : 50;
130
+ const completeness = (mentionsFilter && mentionsMap && mentionsReduce && mentionsNull) ? 100 : 75;
131
+ const understanding = (mentionsArray && (mentionsFilter || mentionsMap)) ? 100 : 50;
132
+ return {
133
+ scenario: 'Explain Code',
134
+ agent: 'codehere',
135
+ success: true,
136
+ accuracy,
137
+ speed,
138
+ completeness,
139
+ codeQuality: 0, // N/A for explanations
140
+ understanding,
141
+ errors: [],
142
+ notes: `Response length: ${response.length} chars`,
143
+ };
144
+ }
145
+ catch (error) {
146
+ return {
147
+ scenario: 'Explain Code',
148
+ agent: 'codehere',
149
+ success: false,
150
+ accuracy: 0,
151
+ speed: (Date.now() - startTime) / 1000,
152
+ completeness: 0,
153
+ codeQuality: 0,
154
+ understanding: 0,
155
+ errors: [error instanceof Error ? error.message : String(error)],
156
+ notes: 'Exception thrown',
157
+ };
158
+ }
159
+ },
160
+ cleanup: async (filepath) => {
161
+ if (existsSync(filepath)) {
162
+ // Cleanup
163
+ }
164
+ },
165
+ };
166
+ /**
167
+ * Check JavaScript syntax
168
+ */
169
+ function checkSyntax(content) {
170
+ try {
171
+ new Function(content);
172
+ return true;
173
+ }
174
+ catch {
175
+ return false;
176
+ }
177
+ }
178
+ /**
179
+ * Run all benchmarks
180
+ */
181
+ export async function runBenchmarks() {
182
+ const results = [];
183
+ // Run scenario 1
184
+ const setup1 = await scenario1.setup();
185
+ const result1 = await scenario1.test(setup1.filepath);
186
+ results.push(result1);
187
+ await scenario1.cleanup(setup1.filepath);
188
+ // Run scenario 2
189
+ const setup2 = await scenario2.setup();
190
+ const result2 = await scenario2.test(setup2.filepath);
191
+ results.push(result2);
192
+ await scenario2.cleanup(setup2.filepath);
193
+ return results;
194
+ }
195
+ //# sourceMappingURL=benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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"}