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 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAyEf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE;IACP,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,CAAC,CAgED;AAgDD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAkB7C"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Intelligent Planning & Execution System
3
+ * Agentic behavior for complex multi-step tasks
4
+ */
5
+ import { getEnhancedContext } from './context.js';
6
+ /**
7
+ * Decompose complex instruction into actionable tasks
8
+ */
9
+ export async function planTask(instruction, context) {
10
+ const tasks = [];
11
+ const dependencies = new Map();
12
+ // Analyze instruction to determine task type
13
+ const lowerInstruction = instruction.toLowerCase();
14
+ // Search/Query tasks
15
+ if (lowerInstruction.includes('find') || lowerInstruction.includes('search') || lowerInstruction.includes('where') || lowerInstruction.includes('how')) {
16
+ tasks.push({
17
+ id: 'task_1',
18
+ description: `Search codebase: ${instruction}`,
19
+ type: 'search',
20
+ dependencies: [],
21
+ status: 'pending',
22
+ });
23
+ }
24
+ // Edit tasks
25
+ if (lowerInstruction.includes('add') || lowerInstruction.includes('remove') || lowerInstruction.includes('change') || lowerInstruction.includes('update') || lowerInstruction.includes('fix')) {
26
+ if (context?.files && context.files.length > 1) {
27
+ // Multi-file refactor
28
+ tasks.push({
29
+ id: 'task_1',
30
+ description: `Refactor multiple files: ${instruction}`,
31
+ type: 'refactor',
32
+ dependencies: [],
33
+ status: 'pending',
34
+ });
35
+ }
36
+ else {
37
+ // Single file edit
38
+ tasks.push({
39
+ id: 'task_1',
40
+ description: `Edit file: ${instruction}`,
41
+ type: 'edit',
42
+ dependencies: [],
43
+ status: 'pending',
44
+ });
45
+ }
46
+ }
47
+ // Review tasks
48
+ if (lowerInstruction.includes('review') || lowerInstruction.includes('check') || lowerInstruction.includes('analyze')) {
49
+ tasks.push({
50
+ id: 'task_1',
51
+ description: `Review code: ${instruction}`,
52
+ type: 'review',
53
+ dependencies: [],
54
+ status: 'pending',
55
+ });
56
+ }
57
+ // If no specific type detected, create a search task first
58
+ if (tasks.length === 0) {
59
+ tasks.push({
60
+ id: 'task_1',
61
+ description: `Analyze: ${instruction}`,
62
+ type: 'analyze',
63
+ dependencies: [],
64
+ status: 'pending',
65
+ });
66
+ }
67
+ // Build dependency graph
68
+ for (const task of tasks) {
69
+ dependencies.set(task.id, task.dependencies);
70
+ }
71
+ return {
72
+ tasks,
73
+ estimatedSteps: tasks.length,
74
+ dependencies,
75
+ };
76
+ }
77
+ /**
78
+ * Execute a plan step by step
79
+ */
80
+ export async function executePlan(plan, context) {
81
+ const results = new Map();
82
+ const errors = [];
83
+ let completedTasks = 0;
84
+ // Execute tasks in dependency order
85
+ const taskQueue = [...plan.tasks];
86
+ const completed = new Set();
87
+ while (taskQueue.length > 0) {
88
+ const task = taskQueue.shift();
89
+ if (!task)
90
+ break;
91
+ // Check if dependencies are met
92
+ const depsMet = task.dependencies.every(dep => completed.has(dep));
93
+ if (!depsMet) {
94
+ // Re-queue for later
95
+ taskQueue.push(task);
96
+ continue;
97
+ }
98
+ // Execute task
99
+ task.status = 'in_progress';
100
+ try {
101
+ let result;
102
+ switch (task.type) {
103
+ case 'search':
104
+ result = await executeSearchTask(task, context);
105
+ break;
106
+ case 'edit':
107
+ result = await executeEditTask(task, context);
108
+ break;
109
+ case 'refactor':
110
+ result = await executeRefactorTask(task, context);
111
+ break;
112
+ case 'review':
113
+ result = await executeReviewTask(task, context);
114
+ break;
115
+ case 'analyze':
116
+ result = await executeAnalyzeTask(task, context);
117
+ break;
118
+ default:
119
+ throw new Error(`Unknown task type: ${task.type}`);
120
+ }
121
+ task.result = result;
122
+ task.status = 'completed';
123
+ results.set(task.id, result);
124
+ completed.add(task.id);
125
+ completedTasks++;
126
+ }
127
+ catch (error) {
128
+ task.status = 'failed';
129
+ task.error = error instanceof Error ? error.message : String(error);
130
+ errors.push({ task: task.id, error: task.error });
131
+ }
132
+ }
133
+ return {
134
+ success: errors.length === 0 && completedTasks === plan.tasks.length,
135
+ completedTasks,
136
+ results,
137
+ errors,
138
+ };
139
+ }
140
+ async function executeSearchTask(task, context) {
141
+ const enhancedContext = await getEnhancedContext(context.instruction || task.description, {
142
+ primaryChunks: 15,
143
+ relatedChunks: 5,
144
+ includeRelationships: true,
145
+ });
146
+ return [...enhancedContext.primaryChunks, ...enhancedContext.relatedChunks];
147
+ }
148
+ async function executeEditTask(task, context) {
149
+ // This would integrate with the edit system
150
+ // For now, return placeholder
151
+ return {
152
+ file: context.files?.[0] || 'unknown',
153
+ success: true,
154
+ };
155
+ }
156
+ async function executeRefactorTask(task, context) {
157
+ // This would integrate with the refactor system
158
+ return {
159
+ files: context.files || [],
160
+ success: true,
161
+ };
162
+ }
163
+ async function executeReviewTask(task, context) {
164
+ // This would integrate with the review system
165
+ return {
166
+ suggestions: [],
167
+ };
168
+ }
169
+ async function executeAnalyzeTask(task, context) {
170
+ const enhancedContext = await getEnhancedContext(context.instruction || task.description, {
171
+ primaryChunks: 20,
172
+ relatedChunks: 10,
173
+ includeRelationships: true,
174
+ });
175
+ return {
176
+ analysis: `Found ${enhancedContext.totalChunks} relevant chunks from ${enhancedContext.primaryChunks.length} files`,
177
+ };
178
+ }
179
+ /**
180
+ * Format plan for display
181
+ */
182
+ export function formatPlan(plan) {
183
+ let output = `Plan: ${plan.estimatedSteps} step(s)\n\n`;
184
+ for (const task of plan.tasks) {
185
+ const statusIcon = {
186
+ pending: '○',
187
+ in_progress: '⟳',
188
+ completed: '✓',
189
+ failed: '✗',
190
+ }[task.status];
191
+ output += `${statusIcon} [${task.type}] ${task.description}\n`;
192
+ if (task.dependencies.length > 0) {
193
+ output += ` Depends on: ${task.dependencies.join(', ')}\n`;
194
+ }
195
+ }
196
+ return output;
197
+ }
198
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PolicyResult, DiffStats } from './types.js';
2
+ export declare function checkPolicy(filepath: string, diffStats: DiffStats): PolicyResult;
3
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1D,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,GACnB,YAAY,CA2Bd"}
package/dist/policy.js ADDED
@@ -0,0 +1,26 @@
1
+ export function checkPolicy(filepath, diffStats) {
2
+ // Check 1: Maximum 50 changed lines
3
+ const totalChanges = diffStats.linesAdded + diffStats.linesRemoved;
4
+ if (totalChanges > 50) {
5
+ return {
6
+ allowed: false,
7
+ reason: `Change exceeds 50 line limit (${totalChanges} lines changed)`,
8
+ };
9
+ }
10
+ // Check 2: Restricted folders
11
+ if (filepath.includes('infra/') || filepath.includes('billing/')) {
12
+ return {
13
+ allowed: false,
14
+ reason: `File is in restricted folder: ${filepath}`,
15
+ };
16
+ }
17
+ // Check 3: Only one file can be changed
18
+ if (diffStats.filesChanged > 1) {
19
+ return {
20
+ allowed: false,
21
+ reason: `Patch edits ${diffStats.filesChanged} files (only 1 file allowed)`,
22
+ };
23
+ }
24
+ return { allowed: true };
25
+ }
26
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,SAAoB;IAEpB,oCAAoC;IACpC,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC;IACnE,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,iCAAiC,YAAY,iBAAiB;SACvE,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,iCAAiC,QAAQ,EAAE;SACpD,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,IAAI,SAAS,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,eAAe,SAAS,CAAC,YAAY,8BAA8B;SAC5E,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Query Understanding & Optimization System
3
+ * Classify intent, select strategy, optimize query, select best model
4
+ */
5
+ import type { QueryIntent } from './intelligent-retrieval.js';
6
+ export interface QueryStrategy {
7
+ intent: QueryIntent;
8
+ contextStrategy: 'function-level' | 'file-level' | 'relevant-only' | 'compressed';
9
+ maxTokens: number;
10
+ maxChunks: number;
11
+ includeRelationships: boolean;
12
+ includeCallGraph: boolean;
13
+ model?: string;
14
+ }
15
+ /**
16
+ * Optimize query for best results
17
+ */
18
+ export declare function optimizeQuery(query: string): {
19
+ optimizedQuery: string;
20
+ strategy: QueryStrategy;
21
+ keywords: string[];
22
+ symbols: string[];
23
+ };
24
+ /**
25
+ * Select best model for task (future: multi-model support)
26
+ */
27
+ export declare function selectModel(intent: QueryIntent, complexity: 'simple' | 'medium' | 'complex'): string;
28
+ /**
29
+ * Estimate query complexity
30
+ */
31
+ export declare function estimateComplexity(query: string, symbols: string[]): 'simple' | 'medium' | 'complex';
32
+ //# sourceMappingURL=query-optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-optimizer.d.ts","sourceRoot":"","sources":["../src/query-optimizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,gBAAgB,GAAG,YAAY,GAAG,eAAe,GAAG,YAAY,CAAC;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAaA;AA6LD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAIpG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAcpG"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Query Understanding & Optimization System
3
+ * Classify intent, select strategy, optimize query, select best model
4
+ */
5
+ import { classifyQueryIntent } from './intelligent-retrieval.js';
6
+ /**
7
+ * Optimize query for best results
8
+ */
9
+ export function optimizeQuery(query) {
10
+ const intent = classifyQueryIntent(query);
11
+ const keywords = extractKeywords(query);
12
+ const symbols = extractSymbols(query);
13
+ const optimizedQuery = enhanceQuery(query, intent, keywords, symbols);
14
+ const strategy = selectStrategy(intent, query);
15
+ return {
16
+ optimizedQuery,
17
+ strategy,
18
+ keywords,
19
+ symbols,
20
+ };
21
+ }
22
+ /**
23
+ * Extract keywords from query
24
+ */
25
+ function extractKeywords(query) {
26
+ // Remove common stop words
27
+ const stopWords = new Set([
28
+ 'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',
29
+ 'of', 'with', 'by', 'from', 'as', 'is', 'was', 'are', 'were', 'be',
30
+ 'been', 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will',
31
+ 'would', 'should', 'could', 'may', 'might', 'must', 'can', 'this',
32
+ 'that', 'these', 'those', 'what', 'which', 'who', 'whom', 'where',
33
+ 'when', 'why', 'how', 'does', 'do', 'is', 'are', 'was', 'were',
34
+ ]);
35
+ const words = query
36
+ .toLowerCase()
37
+ .replace(/[^\w\s]/g, ' ')
38
+ .split(/\s+/)
39
+ .filter(word => word.length > 2 && !stopWords.has(word));
40
+ return [...new Set(words)];
41
+ }
42
+ /**
43
+ * Extract symbol names from query
44
+ */
45
+ function extractSymbols(query) {
46
+ const patterns = [
47
+ /function\s+(\w+)/gi,
48
+ /class\s+(\w+)/gi,
49
+ /interface\s+(\w+)/gi,
50
+ /type\s+(\w+)/gi,
51
+ /const\s+(\w+)/gi,
52
+ /let\s+(\w+)/gi,
53
+ /var\s+(\w+)/gi,
54
+ /([A-Z][a-zA-Z0-9]+)/g, // Capitalized words (likely class names)
55
+ /([a-z][a-zA-Z0-9]*\(\))/g, // camelCase followed by () (likely function calls)
56
+ /`([^`]+)`/g, // Code in backticks
57
+ /'([^']+)'/g, // Code in single quotes
58
+ /"([^"]+)"/g, // Code in double quotes
59
+ ];
60
+ const symbols = new Set();
61
+ for (const pattern of patterns) {
62
+ const matches = query.matchAll(pattern);
63
+ for (const match of matches) {
64
+ if (match[1]) {
65
+ symbols.add(match[1]);
66
+ }
67
+ }
68
+ }
69
+ return Array.from(symbols);
70
+ }
71
+ /**
72
+ * Enhance query with context
73
+ */
74
+ function enhanceQuery(query, intent, keywords, symbols) {
75
+ let enhanced = query;
76
+ // Add intent-specific context
77
+ switch (intent) {
78
+ case 'explain':
79
+ if (!query.toLowerCase().includes('how') && !query.toLowerCase().includes('what')) {
80
+ enhanced = `Explain how ${query}`;
81
+ }
82
+ break;
83
+ case 'refactor':
84
+ if (!query.toLowerCase().includes('refactor')) {
85
+ enhanced = `Refactor: ${query}`;
86
+ }
87
+ break;
88
+ case 'debug':
89
+ if (!query.toLowerCase().includes('bug') && !query.toLowerCase().includes('error')) {
90
+ enhanced = `Debug: ${query}`;
91
+ }
92
+ break;
93
+ case 'find':
94
+ if (!query.toLowerCase().includes('find') && !query.toLowerCase().includes('where')) {
95
+ enhanced = `Find: ${query}`;
96
+ }
97
+ break;
98
+ }
99
+ // Add symbol context if symbols found
100
+ if (symbols.length > 0) {
101
+ enhanced += ` (symbols: ${symbols.join(', ')})`;
102
+ }
103
+ return enhanced;
104
+ }
105
+ /**
106
+ * Select optimal strategy based on intent
107
+ */
108
+ function selectStrategy(intent, query) {
109
+ const baseStrategy = {
110
+ intent,
111
+ contextStrategy: 'relevant-only',
112
+ maxTokens: 2000,
113
+ maxChunks: 10,
114
+ includeRelationships: true,
115
+ includeCallGraph: false,
116
+ };
117
+ switch (intent) {
118
+ case 'explain':
119
+ return {
120
+ ...baseStrategy,
121
+ contextStrategy: 'function-level',
122
+ maxTokens: 3000,
123
+ maxChunks: 15,
124
+ includeCallGraph: true, // Need call graph for explanations
125
+ };
126
+ case 'refactor':
127
+ return {
128
+ ...baseStrategy,
129
+ contextStrategy: 'file-level',
130
+ maxTokens: 4000,
131
+ maxChunks: 20,
132
+ includeRelationships: true,
133
+ includeCallGraph: true, // Need to understand dependencies
134
+ };
135
+ case 'debug':
136
+ return {
137
+ ...baseStrategy,
138
+ contextStrategy: 'relevant-only',
139
+ maxTokens: 2500,
140
+ maxChunks: 12,
141
+ includeRelationships: true,
142
+ includeCallGraph: false,
143
+ };
144
+ case 'implement':
145
+ return {
146
+ ...baseStrategy,
147
+ contextStrategy: 'compressed',
148
+ maxTokens: 3000,
149
+ maxChunks: 15,
150
+ includeRelationships: true,
151
+ includeCallGraph: false,
152
+ };
153
+ case 'find':
154
+ return {
155
+ ...baseStrategy,
156
+ contextStrategy: 'relevant-only',
157
+ maxTokens: 1500,
158
+ maxChunks: 8,
159
+ includeRelationships: false,
160
+ includeCallGraph: false,
161
+ };
162
+ case 'modify':
163
+ return {
164
+ ...baseStrategy,
165
+ contextStrategy: 'function-level',
166
+ maxTokens: 2000,
167
+ maxChunks: 10,
168
+ includeRelationships: true,
169
+ includeCallGraph: false,
170
+ };
171
+ default: // 'understand'
172
+ return {
173
+ ...baseStrategy,
174
+ contextStrategy: 'relevant-only',
175
+ maxTokens: 2000,
176
+ maxChunks: 10,
177
+ includeRelationships: true,
178
+ includeCallGraph: false,
179
+ };
180
+ }
181
+ }
182
+ /**
183
+ * Select best model for task (future: multi-model support)
184
+ */
185
+ export function selectModel(intent, complexity) {
186
+ // For now, always use Cohere
187
+ // Future: Use GPT-4 for complex tasks, Claude for reasoning, etc.
188
+ return 'cohere';
189
+ }
190
+ /**
191
+ * Estimate query complexity
192
+ */
193
+ export function estimateComplexity(query, symbols) {
194
+ const queryLength = query.length;
195
+ const symbolCount = symbols.length;
196
+ const hasMultipleConcepts = query.split(/\s+(and|or|but)\s+/i).length > 2;
197
+ if (queryLength < 50 && symbolCount === 0 && !hasMultipleConcepts) {
198
+ return 'simple';
199
+ }
200
+ if (queryLength < 200 && symbolCount < 3 && !hasMultipleConcepts) {
201
+ return 'medium';
202
+ }
203
+ return 'complex';
204
+ }
205
+ //# sourceMappingURL=query-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-optimizer.js","sourceRoot":"","sources":["../src/query-optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Multi-File Refactoring System
3
+ * Enterprise-grade cross-file operations
4
+ */
5
+ import type { DiffStats, PolicyResult } from './types.js';
6
+ export interface RefactorResult {
7
+ success: boolean;
8
+ filesChanged: string[];
9
+ totalChanges: DiffStats;
10
+ policyResults: Map<string, PolicyResult>;
11
+ errors: Array<{
12
+ file: string;
13
+ error: string;
14
+ }>;
15
+ }
16
+ /**
17
+ * Refactor multiple files with coordinated changes
18
+ */
19
+ export declare function refactorMultiFile(files: string[], instruction: string, options?: {
20
+ dryRun?: boolean;
21
+ maxFiles?: number;
22
+ }): Promise<RefactorResult>;
23
+ /**
24
+ * Find files matching pattern
25
+ */
26
+ export declare function findFilesByPattern(pattern: string, baseDir?: string): string[];
27
+ //# sourceMappingURL=refactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor.d.ts","sourceRoot":"","sources":["../src/refactor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,SAAS,CAAC;IACxB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL,OAAO,CAAC,cAAc,CAAC,CAkFzB;AAGD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAsB,GAAG,MAAM,EAAE,CAqC7F"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Multi-File Refactoring System
3
+ * Enterprise-grade cross-file operations
4
+ */
5
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { generateDiff } from './chat.js';
8
+ import { checkPolicy } from './policy.js';
9
+ import { applyUnifiedDiff, parseDiffStats } from './edit.js';
10
+ import { retryWithBackoff } from './error-handler.js';
11
+ /**
12
+ * Refactor multiple files with coordinated changes
13
+ */
14
+ export async function refactorMultiFile(files, instruction, options = {}) {
15
+ const { dryRun = false, maxFiles = 10 } = options;
16
+ if (files.length > maxFiles) {
17
+ throw new Error(`Too many files (${files.length}). Maximum is ${maxFiles}.`);
18
+ }
19
+ const results = {
20
+ success: false,
21
+ filesChanged: [],
22
+ totalChanges: {
23
+ linesAdded: 0,
24
+ linesRemoved: 0,
25
+ filesChanged: 0,
26
+ },
27
+ policyResults: new Map(),
28
+ errors: [],
29
+ };
30
+ // Process each file
31
+ for (const file of files) {
32
+ try {
33
+ const fullPath = join(process.cwd(), file);
34
+ if (!existsSync(fullPath)) {
35
+ results.errors.push({ file, error: 'File not found' });
36
+ continue;
37
+ }
38
+ const content = readFileSync(fullPath, 'utf-8');
39
+ // Generate diff for this file
40
+ const diff = await retryWithBackoff(() => generateDiff(content, instruction, file), {
41
+ maxRetries: 3,
42
+ operationName: `generateDiff:${file}`,
43
+ });
44
+ // Parse diff stats first
45
+ const diffStats = parseDiffStats(diff);
46
+ // Check policy
47
+ const policyResult = checkPolicy(file, diffStats);
48
+ results.policyResults.set(file, policyResult);
49
+ if (!policyResult.allowed) {
50
+ results.errors.push({
51
+ file,
52
+ error: policyResult.reason || 'Policy check failed',
53
+ });
54
+ continue;
55
+ }
56
+ // Apply diff if not dry run
57
+ if (!dryRun) {
58
+ const newContent = applyUnifiedDiff(content, diff);
59
+ writeFileSync(fullPath, newContent, 'utf-8');
60
+ results.filesChanged.push(file);
61
+ }
62
+ else {
63
+ results.filesChanged.push(file + ' (dry-run)');
64
+ }
65
+ // Calculate stats
66
+ const stats = parseDiffStats(diff);
67
+ results.totalChanges.linesAdded += stats.linesAdded;
68
+ results.totalChanges.linesRemoved += stats.linesRemoved;
69
+ results.totalChanges.filesChanged += 1;
70
+ }
71
+ catch (error) {
72
+ results.errors.push({
73
+ file,
74
+ error: error instanceof Error ? error.message : String(error),
75
+ });
76
+ }
77
+ }
78
+ // Success if at least one file changed and no critical errors
79
+ results.success = results.filesChanged.length > 0 && results.errors.length === 0;
80
+ return results;
81
+ }
82
+ /**
83
+ * Find files matching pattern
84
+ */
85
+ export function findFilesByPattern(pattern, baseDir = process.cwd()) {
86
+ // Simple glob pattern matching
87
+ // For production, consider using a proper glob library
88
+ const { readdirSync, statSync } = require('fs');
89
+ const { join, relative } = require('path');
90
+ const files = [];
91
+ const regex = new RegExp(pattern.replace(/\*/g, '.*'));
92
+ function walkDir(dir) {
93
+ try {
94
+ const entries = readdirSync(dir);
95
+ for (const entry of entries) {
96
+ const fullPath = join(dir, entry);
97
+ const relPath = relative(baseDir, fullPath);
98
+ // Skip common ignore patterns
99
+ if (relPath.includes('node_modules') || relPath.includes('.git')) {
100
+ continue;
101
+ }
102
+ const stat = statSync(fullPath);
103
+ if (stat.isDirectory()) {
104
+ walkDir(fullPath);
105
+ }
106
+ else if (stat.isFile() && regex.test(relPath)) {
107
+ files.push(relPath);
108
+ }
109
+ }
110
+ }
111
+ catch (error) {
112
+ // Skip directories we can't read
113
+ }
114
+ }
115
+ walkDir(baseDir);
116
+ return files;
117
+ }
118
+ //# sourceMappingURL=refactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor.js","sourceRoot":"","sources":["../src/refactor.ts"],"names":[],"mappings":"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"}