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
|
@@ -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"}
|
package/dist/planner.js
ADDED
|
@@ -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":"AAAA;;;GAGG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAqBlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,WAAmB,EACnB,OAIC;IAED,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEjD,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAEnD,qBAAqB;IACrB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvJ,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,oBAAoB,WAAW,EAAE;YAC9C,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,aAAa;IACb,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9L,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,sBAAsB;YACtB,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,QAAQ;gBACZ,WAAW,EAAE,4BAA4B,WAAW,EAAE;gBACtD,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,EAAE;gBAChB,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,QAAQ;gBACZ,WAAW,EAAE,cAAc,WAAW,EAAE;gBACxC,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,EAAE;gBAChB,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACtH,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,gBAAgB,WAAW,EAAE;YAC1C,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,YAAY,WAAW,EAAE;YACtC,IAAI,EAAE,SAAS;YACf,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,KAAK;QACL,cAAc,EAAE,KAAK,CAAC,MAAM;QAC5B,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAU,EACV,OAIC;IAOD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IACvC,MAAM,MAAM,GAA2C,EAAE,CAAC;IAC1D,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,oCAAoC;IACpC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,MAAM;QAEjB,gCAAgC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,qBAAqB;YACrB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,eAAe;QACf,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC5B,IAAI,CAAC;YACH,IAAI,MAAW,CAAC;YAEhB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,QAAQ;oBACX,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAChD,MAAM;gBACR,KAAK,MAAM;oBACT,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,UAAU;oBACb,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAClD,MAAM;gBACR,KAAK,QAAQ;oBACX,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAChD,MAAM;gBACR,KAAK,SAAS;oBACZ,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACjD,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,cAAc,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;QACpE,cAAc;QACd,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAU,EAAE,OAAY;IACvD,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;QACxF,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,eAAe,CAAC,aAAa,EAAE,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,OAAY;IACrD,4CAA4C;IAC5C,8BAA8B;IAC9B,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS;QACrC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAU,EAAE,OAAY;IACzD,gDAAgD;IAChD,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAU,EAAE,OAAY;IACvD,8CAA8C;IAC9C,OAAO;QACL,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,OAAY;IACxD,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;QACxF,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,SAAS,eAAe,CAAC,WAAW,yBAAyB,eAAe,CAAC,aAAa,CAAC,MAAM,QAAQ;KACpH,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,IAAI,MAAM,GAAG,SAAS,IAAI,CAAC,cAAc,cAAc,CAAC;IAExD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,GAAG;YACZ,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE,GAAG;YACd,MAAM,EAAE,GAAG;SACZ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEf,MAAM,IAAI,GAAG,UAAU,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC;QAC/D,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,kBAAkB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/policy.d.ts
ADDED
|
@@ -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"}
|
package/dist/refactor.js
ADDED
|
@@ -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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"}
|