sam-coder-cli 1.0.0 → 1.0.3
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/bin/agi-cli.js +2 -1
- package/package.json +1 -1
- package/ai-assistant-0.0.1.vsix +0 -0
- package/bin/agi-cli.js.bak +0 -352
- package/dist/agentUtils.js +0 -539
- package/dist/agentUtils.js.map +0 -1
- package/dist/aiAssistantViewProvider.js +0 -2098
- package/dist/aiAssistantViewProvider.js.map +0 -1
- package/dist/extension.js +0 -117
- package/dist/extension.js.map +0 -1
- package/dist/fetch-polyfill.js +0 -9
- package/dist/fetch-polyfill.js.map +0 -1
- package/out/agentUtils.d.ts +0 -28
- package/out/agentUtils.d.ts.map +0 -1
- package/out/agentUtils.js +0 -539
- package/out/agentUtils.js.map +0 -1
- package/out/aiAssistantViewProvider.d.ts +0 -58
- package/out/aiAssistantViewProvider.d.ts.map +0 -1
- package/out/aiAssistantViewProvider.js +0 -2098
- package/out/aiAssistantViewProvider.js.map +0 -1
- package/out/extension.d.ts +0 -4
- package/out/extension.d.ts.map +0 -1
- package/out/extension.js +0 -117
- package/out/extension.js.map +0 -1
- package/out/fetch-polyfill.d.ts +0 -11
- package/out/fetch-polyfill.d.ts.map +0 -1
- package/out/fetch-polyfill.js +0 -9
- package/out/fetch-polyfill.js.map +0 -1
- package/src/agentUtils.ts +0 -583
- package/src/aiAssistantViewProvider.ts +0 -2264
- package/src/cliAgentUtils.js +0 -73
- package/src/extension.ts +0 -112
- package/src/fetch-polyfill.ts +0 -11
- package/tsconfig.json +0 -24
- package/webpack.config.js +0 -45
package/dist/agentUtils.js
DELETED
|
@@ -1,539 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.AgentUtils = void 0;
|
|
27
|
-
const vscode = __importStar(require("vscode"));
|
|
28
|
-
const fs = __importStar(require("fs"));
|
|
29
|
-
const path = __importStar(require("path"));
|
|
30
|
-
const util = __importStar(require("util"));
|
|
31
|
-
const cp = __importStar(require("child_process"));
|
|
32
|
-
const os = __importStar(require("os"));
|
|
33
|
-
const fetch_polyfill_1 = require("./fetch-polyfill");
|
|
34
|
-
// Promisified versions of functions
|
|
35
|
-
const readFile = util.promisify(fs.readFile);
|
|
36
|
-
const writeFile = util.promisify(fs.writeFile);
|
|
37
|
-
const mkdir = util.promisify(fs.mkdir);
|
|
38
|
-
const exec = util.promisify(cp.exec);
|
|
39
|
-
class AgentUtils {
|
|
40
|
-
constructor() {
|
|
41
|
-
this._outputChannel = vscode.window.createOutputChannel('AI Assistant Agent');
|
|
42
|
-
this._workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;
|
|
43
|
-
}
|
|
44
|
-
// Log to output channel
|
|
45
|
-
log(message) {
|
|
46
|
-
this._outputChannel.appendLine(`[${new Date().toLocaleTimeString()}] ${message}`);
|
|
47
|
-
}
|
|
48
|
-
// Show the output channel
|
|
49
|
-
showOutputChannel() {
|
|
50
|
-
this._outputChannel.show();
|
|
51
|
-
}
|
|
52
|
-
// Read a file with optional path resolution
|
|
53
|
-
async readFile(filePath, maxTokens) {
|
|
54
|
-
try {
|
|
55
|
-
// Check if we need to resolve from workspace root
|
|
56
|
-
const resolvedPath = this._resolveFilePath(filePath);
|
|
57
|
-
let content = await readFile(resolvedPath, 'utf8');
|
|
58
|
-
// If maxTokens is specified, ensure the content is within limits
|
|
59
|
-
if (maxTokens && maxTokens > 0) {
|
|
60
|
-
// Estimate token count (roughly 4 chars per token)
|
|
61
|
-
const estimatedTokens = Math.ceil(content.length / 4);
|
|
62
|
-
if (estimatedTokens > maxTokens) {
|
|
63
|
-
this.log(`File content exceeds token limit (est. ${estimatedTokens} tokens). Truncating to ~${maxTokens} tokens.`);
|
|
64
|
-
// Calculate how much content to keep (roughly)
|
|
65
|
-
const keepChars = maxTokens * 4;
|
|
66
|
-
const halfKeep = Math.floor(keepChars / 2);
|
|
67
|
-
// Keep beginning and ending portions for context, with a message in the middle
|
|
68
|
-
const firstPart = content.substring(0, halfKeep);
|
|
69
|
-
const lastPart = content.substring(content.length - halfKeep);
|
|
70
|
-
content = `${firstPart}\n\n[...Content truncated to fit within ${maxTokens} token limit...]\n\n${lastPart}`;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return content;
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
this.log(`Error reading file: ${error instanceof Error ? error.message : String(error)}`);
|
|
77
|
-
throw error;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// Write to a file with optional path resolution and directory creation
|
|
81
|
-
async writeFile(filePath, content) {
|
|
82
|
-
try {
|
|
83
|
-
const resolvedPath = this._resolveFilePath(filePath);
|
|
84
|
-
const dirPath = path.dirname(resolvedPath);
|
|
85
|
-
// Ensure directory exists
|
|
86
|
-
if (!fs.existsSync(dirPath)) {
|
|
87
|
-
await mkdir(dirPath, { recursive: true });
|
|
88
|
-
}
|
|
89
|
-
await writeFile(resolvedPath, content);
|
|
90
|
-
this.log(`File written: ${resolvedPath}`);
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
this.log(`Error writing file: ${error instanceof Error ? error.message : String(error)}`);
|
|
94
|
-
throw error;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Run a command and get output
|
|
98
|
-
async runCommand(command) {
|
|
99
|
-
try {
|
|
100
|
-
this.log(`Running command: ${command}`);
|
|
101
|
-
const { stdout, stderr } = await exec(command, {
|
|
102
|
-
cwd: this._workspaceRoot,
|
|
103
|
-
maxBuffer: 1024 * 1024 * 5 // 5MB
|
|
104
|
-
});
|
|
105
|
-
if (stderr) {
|
|
106
|
-
this.log(`Command stderr: ${stderr}`);
|
|
107
|
-
}
|
|
108
|
-
return stdout;
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
this.log(`Error running command: ${error instanceof Error ? error.message : String(error)}`);
|
|
112
|
-
throw error;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
// Search files in workspace
|
|
116
|
-
async searchFiles(pattern) {
|
|
117
|
-
try {
|
|
118
|
-
this.log(`Searching files with pattern: ${pattern}`);
|
|
119
|
-
return await vscode.workspace.findFiles(pattern);
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
this.log(`Error searching files: ${error instanceof Error ? error.message : String(error)}`);
|
|
123
|
-
throw error;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// Search for text in files
|
|
127
|
-
async searchText(searchText) {
|
|
128
|
-
try {
|
|
129
|
-
this.log(`Searching for text: ${searchText}`);
|
|
130
|
-
// Use the built-in search API in VSCode
|
|
131
|
-
const results = await vscode.commands.executeCommand('vscode.executeTextSearchCommand', {
|
|
132
|
-
pattern: searchText
|
|
133
|
-
});
|
|
134
|
-
return results || [];
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
this.log(`Error searching text: ${error instanceof Error ? error.message : String(error)}`);
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// Execute a series of agent actions
|
|
142
|
-
async executeActions(actions) {
|
|
143
|
-
const results = [];
|
|
144
|
-
// Get the max tokens from configuration
|
|
145
|
-
const config = vscode.workspace.getConfiguration('aiAssistant');
|
|
146
|
-
const maxTokens = config.get('maxTokens') || 120000;
|
|
147
|
-
for (const action of actions) {
|
|
148
|
-
try {
|
|
149
|
-
let result;
|
|
150
|
-
switch (action.type) {
|
|
151
|
-
case 'read':
|
|
152
|
-
result = await this.readFile(action.data.path, maxTokens);
|
|
153
|
-
break;
|
|
154
|
-
case 'write':
|
|
155
|
-
await this.writeFile(action.data.path, action.data.content);
|
|
156
|
-
result = { success: true };
|
|
157
|
-
break;
|
|
158
|
-
case 'search':
|
|
159
|
-
if (action.data.type === 'files') {
|
|
160
|
-
result = await this.searchFiles(action.data.pattern);
|
|
161
|
-
}
|
|
162
|
-
else if (action.data.type === 'text') {
|
|
163
|
-
result = await this.searchText(action.data.text);
|
|
164
|
-
}
|
|
165
|
-
break;
|
|
166
|
-
case 'command':
|
|
167
|
-
result = await this.runCommand(action.data.command);
|
|
168
|
-
break;
|
|
169
|
-
case 'execute':
|
|
170
|
-
result = await this.executeCode(action.data.language, action.data.code);
|
|
171
|
-
break;
|
|
172
|
-
case 'analyze':
|
|
173
|
-
// This is for code analysis, we'll pass it to the AI
|
|
174
|
-
result = action.data;
|
|
175
|
-
break;
|
|
176
|
-
case 'browse':
|
|
177
|
-
result = await this.browseWeb(action.data.query, action.data.numResults);
|
|
178
|
-
break;
|
|
179
|
-
case 'edit':
|
|
180
|
-
result = await this.editFile(action.data.path, action.data.edits);
|
|
181
|
-
break;
|
|
182
|
-
case 'stop':
|
|
183
|
-
// Just a signal to stop, no actual execution needed
|
|
184
|
-
result = { stopped: true };
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
|
-
results.push({
|
|
188
|
-
...action,
|
|
189
|
-
result
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
catch (error) {
|
|
193
|
-
results.push({
|
|
194
|
-
...action,
|
|
195
|
-
result: { error: error instanceof Error ? error.message : String(error) }
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
return results;
|
|
200
|
-
}
|
|
201
|
-
// Execute code in different languages
|
|
202
|
-
async executeCode(language, code) {
|
|
203
|
-
try {
|
|
204
|
-
this.log(`Executing ${language} code`);
|
|
205
|
-
// Create a temporary file to execute
|
|
206
|
-
const extension = this._getFileExtension(language);
|
|
207
|
-
if (!extension) {
|
|
208
|
-
throw new Error(`Unsupported language: ${language}`);
|
|
209
|
-
}
|
|
210
|
-
const tempDir = path.join(this._workspaceRoot || os.tmpdir(), '.ai-assistant-temp');
|
|
211
|
-
if (!fs.existsSync(tempDir)) {
|
|
212
|
-
await mkdir(tempDir, { recursive: true });
|
|
213
|
-
}
|
|
214
|
-
const tempFile = path.join(tempDir, `code_${Date.now()}${extension}`);
|
|
215
|
-
await writeFile(tempFile, code);
|
|
216
|
-
// Execute the code based on language
|
|
217
|
-
let command = '';
|
|
218
|
-
switch (language.toLowerCase()) {
|
|
219
|
-
case 'js':
|
|
220
|
-
case 'javascript':
|
|
221
|
-
command = `node "${tempFile}"`;
|
|
222
|
-
break;
|
|
223
|
-
case 'ts':
|
|
224
|
-
case 'typescript':
|
|
225
|
-
command = `npx ts-node "${tempFile}"`;
|
|
226
|
-
break;
|
|
227
|
-
case 'py':
|
|
228
|
-
case 'python':
|
|
229
|
-
command = `python "${tempFile}"`;
|
|
230
|
-
break;
|
|
231
|
-
case 'bash':
|
|
232
|
-
case 'sh':
|
|
233
|
-
// Make sure the file is executable on Unix systems
|
|
234
|
-
if (process.platform !== 'win32') {
|
|
235
|
-
await util.promisify(fs.chmod)(tempFile, '755');
|
|
236
|
-
}
|
|
237
|
-
command = process.platform === 'win32' ? `bash "${tempFile}"` : `"${tempFile}"`;
|
|
238
|
-
break;
|
|
239
|
-
default:
|
|
240
|
-
throw new Error(`Execution of ${language} is not supported`);
|
|
241
|
-
}
|
|
242
|
-
// Execute and capture output
|
|
243
|
-
const result = await this.runCommand(command);
|
|
244
|
-
// Clean up the temp file
|
|
245
|
-
try {
|
|
246
|
-
fs.unlinkSync(tempFile);
|
|
247
|
-
}
|
|
248
|
-
catch (e) {
|
|
249
|
-
// Ignore cleanup errors
|
|
250
|
-
}
|
|
251
|
-
return result;
|
|
252
|
-
}
|
|
253
|
-
catch (error) {
|
|
254
|
-
this.log(`Error executing code: ${error instanceof Error ? error.message : String(error)}`);
|
|
255
|
-
throw error;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
// Browse the web
|
|
259
|
-
async browseWeb(query, numResults = 5) {
|
|
260
|
-
try {
|
|
261
|
-
this.log(`Searching the web for: ${query}`);
|
|
262
|
-
// Using DuckDuckGo which doesn't require an API key
|
|
263
|
-
return await this.duckDuckGoSearch(query, numResults);
|
|
264
|
-
}
|
|
265
|
-
catch (error) {
|
|
266
|
-
this.log(`Error browsing web: ${error instanceof Error ? error.message : String(error)}`);
|
|
267
|
-
// Return an error object
|
|
268
|
-
return {
|
|
269
|
-
query,
|
|
270
|
-
error: `Search failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
271
|
-
results: []
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
// DuckDuckGo search (no API key required)
|
|
276
|
-
async duckDuckGoSearch(query, numResults = 5) {
|
|
277
|
-
try {
|
|
278
|
-
this.log(`Performing DuckDuckGo search for: ${query}`);
|
|
279
|
-
// Using DuckDuckGo HTML search which doesn't require API keys
|
|
280
|
-
const searchUrl = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`;
|
|
281
|
-
const response = await (0, fetch_polyfill_1.fetch)(searchUrl, {
|
|
282
|
-
headers: {
|
|
283
|
-
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
if (!response.ok) {
|
|
287
|
-
throw new Error(`Search request failed: ${response.statusText}`);
|
|
288
|
-
}
|
|
289
|
-
const html = await response.text();
|
|
290
|
-
// Extract search results from HTML
|
|
291
|
-
const results = [];
|
|
292
|
-
const titleRegex = /<a class="result__a" href="(.*?)".*?>(.*?)<\/a>/g;
|
|
293
|
-
const snippetRegex = /<a class="result__snippet".*?>(.*?)<\/a>/g;
|
|
294
|
-
let match;
|
|
295
|
-
let index = 0;
|
|
296
|
-
// Extract titles and URLs
|
|
297
|
-
const titles = [];
|
|
298
|
-
while ((match = titleRegex.exec(html)) !== null && index < numResults) {
|
|
299
|
-
titles.push({
|
|
300
|
-
url: match[1],
|
|
301
|
-
title: this._decodeHtmlEntities(match[2])
|
|
302
|
-
});
|
|
303
|
-
index++;
|
|
304
|
-
}
|
|
305
|
-
// Extract snippets
|
|
306
|
-
const snippets = [];
|
|
307
|
-
while ((match = snippetRegex.exec(html)) !== null && snippets.length < numResults) {
|
|
308
|
-
snippets.push(this._decodeHtmlEntities(match[1]));
|
|
309
|
-
}
|
|
310
|
-
// Combine results
|
|
311
|
-
for (let i = 0; i < Math.min(titles.length, snippets.length); i++) {
|
|
312
|
-
results.push({
|
|
313
|
-
title: titles[i].title,
|
|
314
|
-
url: titles[i].url,
|
|
315
|
-
snippet: snippets[i]
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
return {
|
|
319
|
-
query,
|
|
320
|
-
results: results.slice(0, numResults)
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
catch (error) {
|
|
324
|
-
this.log(`Error in DuckDuckGo search: ${error instanceof Error ? error.message : String(error)}`);
|
|
325
|
-
// Return a basic error result
|
|
326
|
-
return {
|
|
327
|
-
query,
|
|
328
|
-
error: `Search failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
329
|
-
results: []
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
// Utility function to decode HTML entities in search results
|
|
334
|
-
_decodeHtmlEntities(html) {
|
|
335
|
-
return html
|
|
336
|
-
.replace(/</g, '<')
|
|
337
|
-
.replace(/>/g, '>')
|
|
338
|
-
.replace(/"/g, '"')
|
|
339
|
-
.replace(/'/g, "'")
|
|
340
|
-
.replace(/&/g, '&')
|
|
341
|
-
.replace(/<[^>]*>/g, ''); // Strip HTML tags
|
|
342
|
-
}
|
|
343
|
-
// Get recent terminal output
|
|
344
|
-
async getTerminalOutput(maxLines = 20) {
|
|
345
|
-
try {
|
|
346
|
-
// Check if there are any terminals
|
|
347
|
-
const terminals = vscode.window.terminals;
|
|
348
|
-
if (terminals.length === 0) {
|
|
349
|
-
return "No active terminals";
|
|
350
|
-
}
|
|
351
|
-
// Get the active terminal or the most recently created one
|
|
352
|
-
const activeTerminal = vscode.window.activeTerminal || terminals[terminals.length - 1];
|
|
353
|
-
// Create a new terminal that will execute a command to retrieve the history
|
|
354
|
-
// We can't directly access terminal buffer, so we use a workaround
|
|
355
|
-
let historyCommand = '';
|
|
356
|
-
if (process.platform === 'win32') {
|
|
357
|
-
// Windows
|
|
358
|
-
historyCommand = 'doskey /history';
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
// Unix-like (Linux/macOS)
|
|
362
|
-
historyCommand = 'cat ~/.bash_history | tail -n ' + maxLines;
|
|
363
|
-
}
|
|
364
|
-
// Execute command and capture output
|
|
365
|
-
try {
|
|
366
|
-
const output = await this.runCommand(historyCommand);
|
|
367
|
-
return `Terminal "${activeTerminal.name}" recent history:\n${output}`;
|
|
368
|
-
}
|
|
369
|
-
catch (error) {
|
|
370
|
-
// Fall back to just listing available terminals
|
|
371
|
-
const terminalInfo = terminals.map(t => `- ${t.name}`).join('\n');
|
|
372
|
-
return `Available terminals:\n${terminalInfo}\n(Unable to retrieve terminal history)`;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
catch (error) {
|
|
376
|
-
this.log(`Error getting terminal output: ${error instanceof Error ? error.message : String(error)}`);
|
|
377
|
-
return "Error retrieving terminal information";
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
// Get file extension for a language
|
|
381
|
-
_getFileExtension(language) {
|
|
382
|
-
const langMap = {
|
|
383
|
-
'js': '.js',
|
|
384
|
-
'javascript': '.js',
|
|
385
|
-
'ts': '.ts',
|
|
386
|
-
'typescript': '.ts',
|
|
387
|
-
'py': '.py',
|
|
388
|
-
'python': '.py',
|
|
389
|
-
'bash': '.sh',
|
|
390
|
-
'sh': '.sh',
|
|
391
|
-
'rb': '.rb',
|
|
392
|
-
'ruby': '.rb',
|
|
393
|
-
'ps1': '.ps1',
|
|
394
|
-
'powershell': '.ps1'
|
|
395
|
-
};
|
|
396
|
-
return langMap[language.toLowerCase()] || null;
|
|
397
|
-
}
|
|
398
|
-
// Resolve a file path (relative to workspace root if needed)
|
|
399
|
-
_resolveFilePath(filePath) {
|
|
400
|
-
if (path.isAbsolute(filePath)) {
|
|
401
|
-
return filePath;
|
|
402
|
-
}
|
|
403
|
-
else if (this._workspaceRoot) {
|
|
404
|
-
return path.join(this._workspaceRoot, filePath);
|
|
405
|
-
}
|
|
406
|
-
// If no workspace root is available, use the current directory
|
|
407
|
-
this.log('Warning: No workspace root available, using current directory');
|
|
408
|
-
return path.join(process.cwd(), filePath);
|
|
409
|
-
}
|
|
410
|
-
// Edit a file at specific positions
|
|
411
|
-
async editFile(filePath, edits) {
|
|
412
|
-
try {
|
|
413
|
-
this.log(`Editing file: ${filePath}`);
|
|
414
|
-
const resolvedPath = this._resolveFilePath(filePath);
|
|
415
|
-
// Check if file exists, if not create it with empty content
|
|
416
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
417
|
-
this.log(`File does not exist: ${filePath}, creating it`);
|
|
418
|
-
await writeFile(resolvedPath, '');
|
|
419
|
-
}
|
|
420
|
-
const originalContent = await readFile(resolvedPath, 'utf8');
|
|
421
|
-
let newContent = originalContent;
|
|
422
|
-
const editResults = [];
|
|
423
|
-
// Apply edits (operations can be of different types)
|
|
424
|
-
if (Array.isArray(edits.operations)) {
|
|
425
|
-
for (const operation of edits.operations) {
|
|
426
|
-
switch (operation.type) {
|
|
427
|
-
case 'replace':
|
|
428
|
-
// Replace content between specific lines or by pattern
|
|
429
|
-
if (operation.startLine && operation.endLine) {
|
|
430
|
-
// Line-based replacement
|
|
431
|
-
const lines = newContent.split('\n');
|
|
432
|
-
const startIdx = Math.max(0, operation.startLine - 1); // Convert to 0-based
|
|
433
|
-
const endIdx = Math.min(lines.length, operation.endLine); // Convert to 0-based
|
|
434
|
-
const beforeLines = lines.slice(0, startIdx);
|
|
435
|
-
const afterLines = lines.slice(endIdx);
|
|
436
|
-
// Replace the specified lines with new content
|
|
437
|
-
newContent = [...beforeLines, operation.newText, ...afterLines].join('\n');
|
|
438
|
-
editResults.push({
|
|
439
|
-
operation: 'replace',
|
|
440
|
-
startLine: operation.startLine,
|
|
441
|
-
endLine: operation.endLine,
|
|
442
|
-
success: true
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
else if (operation.pattern) {
|
|
446
|
-
// Pattern-based replacement
|
|
447
|
-
const regex = new RegExp(operation.pattern, operation.flags || 'g');
|
|
448
|
-
const oldContent = newContent;
|
|
449
|
-
newContent = newContent.replace(regex, operation.replacement || '');
|
|
450
|
-
editResults.push({
|
|
451
|
-
operation: 'replace',
|
|
452
|
-
pattern: operation.pattern,
|
|
453
|
-
occurrences: (oldContent.match(regex) || []).length,
|
|
454
|
-
success: true
|
|
455
|
-
});
|
|
456
|
-
}
|
|
457
|
-
break;
|
|
458
|
-
case 'insert':
|
|
459
|
-
// Insert at specific line
|
|
460
|
-
if (operation.line) {
|
|
461
|
-
const lines = newContent.split('\n');
|
|
462
|
-
const insertIdx = Math.min(lines.length, Math.max(0, operation.line - 1)); // Convert to 0-based
|
|
463
|
-
lines.splice(insertIdx, 0, operation.text);
|
|
464
|
-
newContent = lines.join('\n');
|
|
465
|
-
editResults.push({
|
|
466
|
-
operation: 'insert',
|
|
467
|
-
line: operation.line,
|
|
468
|
-
success: true
|
|
469
|
-
});
|
|
470
|
-
}
|
|
471
|
-
else if (operation.position === 'start') {
|
|
472
|
-
// Insert at start of file
|
|
473
|
-
newContent = operation.text + newContent;
|
|
474
|
-
editResults.push({
|
|
475
|
-
operation: 'insert',
|
|
476
|
-
position: 'start',
|
|
477
|
-
success: true
|
|
478
|
-
});
|
|
479
|
-
}
|
|
480
|
-
else if (operation.position === 'end') {
|
|
481
|
-
// Insert at end of file
|
|
482
|
-
newContent = newContent + operation.text;
|
|
483
|
-
editResults.push({
|
|
484
|
-
operation: 'insert',
|
|
485
|
-
position: 'end',
|
|
486
|
-
success: true
|
|
487
|
-
});
|
|
488
|
-
}
|
|
489
|
-
break;
|
|
490
|
-
case 'delete':
|
|
491
|
-
// Delete specific lines
|
|
492
|
-
if (operation.startLine && operation.endLine) {
|
|
493
|
-
const lines = newContent.split('\n');
|
|
494
|
-
const startIdx = Math.max(0, operation.startLine - 1); // Convert to 0-based
|
|
495
|
-
const endIdx = Math.min(lines.length, operation.endLine); // Convert to 0-based
|
|
496
|
-
const beforeLines = lines.slice(0, startIdx);
|
|
497
|
-
const afterLines = lines.slice(endIdx);
|
|
498
|
-
newContent = [...beforeLines, ...afterLines].join('\n');
|
|
499
|
-
editResults.push({
|
|
500
|
-
operation: 'delete',
|
|
501
|
-
startLine: operation.startLine,
|
|
502
|
-
endLine: operation.endLine,
|
|
503
|
-
success: true
|
|
504
|
-
});
|
|
505
|
-
}
|
|
506
|
-
break;
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
else if (typeof edits === 'string') {
|
|
511
|
-
// Simple replacement of the entire file
|
|
512
|
-
newContent = edits;
|
|
513
|
-
editResults.push({
|
|
514
|
-
operation: 'replace-all',
|
|
515
|
-
success: true
|
|
516
|
-
});
|
|
517
|
-
}
|
|
518
|
-
// Write the updated content back to the file
|
|
519
|
-
await writeFile(resolvedPath, newContent);
|
|
520
|
-
this.log(`File edited successfully: ${resolvedPath}`);
|
|
521
|
-
return {
|
|
522
|
-
success: true,
|
|
523
|
-
path: filePath,
|
|
524
|
-
operations: editResults,
|
|
525
|
-
diff: {
|
|
526
|
-
before: originalContent.length,
|
|
527
|
-
after: newContent.length,
|
|
528
|
-
changeSize: newContent.length - originalContent.length
|
|
529
|
-
}
|
|
530
|
-
};
|
|
531
|
-
}
|
|
532
|
-
catch (error) {
|
|
533
|
-
this.log(`Error editing file: ${error instanceof Error ? error.message : String(error)}`);
|
|
534
|
-
throw error;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
exports.AgentUtils = AgentUtils;
|
|
539
|
-
//# sourceMappingURL=agentUtils.js.map
|
package/dist/agentUtils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agentUtils.js","sourceRoot":"","sources":["../src/agentUtils.ts"],"names":[],"mappings":"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"}
|