@ariacode/cli 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 (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +404 -0
  3. package/dist/actions.d.ts +271 -0
  4. package/dist/actions.js +1809 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/agent.d.ts +26 -0
  7. package/dist/agent.js +182 -0
  8. package/dist/agent.js.map +1 -0
  9. package/dist/app.d.ts +14 -0
  10. package/dist/app.js +83 -0
  11. package/dist/app.js.map +1 -0
  12. package/dist/cli.d.ts +12 -0
  13. package/dist/cli.js +157 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +170 -0
  16. package/dist/config.js +291 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/context.d.ts +58 -0
  19. package/dist/context.js +44 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/parser.d.ts +39 -0
  22. package/dist/parser.js +323 -0
  23. package/dist/parser.js.map +1 -0
  24. package/dist/prompts/ask.md +20 -0
  25. package/dist/prompts/explore.md +38 -0
  26. package/dist/prompts/patch.md +27 -0
  27. package/dist/prompts/plan.md +41 -0
  28. package/dist/prompts/prompts/ask.md +20 -0
  29. package/dist/prompts/prompts/explore.md +38 -0
  30. package/dist/prompts/prompts/patch.md +27 -0
  31. package/dist/prompts/prompts/plan.md +41 -0
  32. package/dist/prompts/prompts/review.md +33 -0
  33. package/dist/prompts/review.md +33 -0
  34. package/dist/provider.d.ts +148 -0
  35. package/dist/provider.js +486 -0
  36. package/dist/provider.js.map +1 -0
  37. package/dist/repo.d.ts +22 -0
  38. package/dist/repo.js +154 -0
  39. package/dist/repo.js.map +1 -0
  40. package/dist/safety.d.ts +48 -0
  41. package/dist/safety.js +140 -0
  42. package/dist/safety.js.map +1 -0
  43. package/dist/storage.d.ts +133 -0
  44. package/dist/storage.js +300 -0
  45. package/dist/storage.js.map +1 -0
  46. package/dist/tools.d.ts +70 -0
  47. package/dist/tools.js +654 -0
  48. package/dist/tools.js.map +1 -0
  49. package/dist/ui.d.ts +203 -0
  50. package/dist/ui.js +410 -0
  51. package/dist/ui.js.map +1 -0
  52. package/package.json +73 -0
package/dist/tools.js ADDED
@@ -0,0 +1,654 @@
1
+ import { z } from "zod";
2
+ import * as fs from "node:fs";
3
+ import * as nodePath from "node:path";
4
+ import { validatePath, validateFileSize, validatePatchSize } from "./safety.js";
5
+ import { createPatch } from "diff";
6
+ import { randomUUID } from "node:crypto";
7
+ import { execFileSync } from "node:child_process";
8
+ import ignore from "ignore";
9
+ /**
10
+ * Max number of proposed diffs stored in memory
11
+ * Prevents unbounded memory growth
12
+ */
13
+ const MAX_PROPOSED_DIFFS = 100;
14
+ /**
15
+ * TTL for proposed diffs in milliseconds (30 minutes)
16
+ */
17
+ const PROPOSED_DIFF_TTL_MS = 30 * 60 * 1000;
18
+ /**
19
+ * In-memory storage for proposed diffs
20
+ * Maps diffId to diff data with creation timestamp
21
+ * Evicts entries beyond MAX_PROPOSED_DIFFS or older than PROPOSED_DIFF_TTL_MS
22
+ */
23
+ const proposedDiffs = new Map();
24
+ /**
25
+ * Evict expired or excess diffs from the cache
26
+ */
27
+ function evictStaleDiffs() {
28
+ const now = Date.now();
29
+ // Remove expired entries
30
+ for (const [id, entry] of proposedDiffs) {
31
+ if (now - entry.createdAt > PROPOSED_DIFF_TTL_MS) {
32
+ proposedDiffs.delete(id);
33
+ }
34
+ }
35
+ // If still over limit, remove oldest entries
36
+ if (proposedDiffs.size > MAX_PROPOSED_DIFFS) {
37
+ const sorted = [...proposedDiffs.entries()].sort((a, b) => a[1].createdAt - b[1].createdAt);
38
+ const toRemove = sorted.slice(0, sorted.length - MAX_PROPOSED_DIFFS);
39
+ for (const [id] of toRemove) {
40
+ proposedDiffs.delete(id);
41
+ }
42
+ }
43
+ }
44
+ /**
45
+ * read_file tool
46
+ * Reads file content by path with safety validation
47
+ * Requirements: 8.1, 8.7, 8.8
48
+ */
49
+ export const readFileTool = {
50
+ name: "read_file",
51
+ description: "Read the contents of a file at the specified path",
52
+ isMutation: false,
53
+ inputSchema: z.object({
54
+ path: z.string().describe("Path to the file to read (relative to project root)"),
55
+ }),
56
+ async execute(input, ctx, config) {
57
+ try {
58
+ const { path: filePath } = this.inputSchema.parse(input);
59
+ // Validate path is within project root
60
+ validatePath(filePath, ctx.projectRoot);
61
+ // Resolve to absolute path
62
+ const absolutePath = nodePath.resolve(ctx.projectRoot, filePath);
63
+ // Check file size limit
64
+ validateFileSize(absolutePath, config.safety.maxFileSizeKb);
65
+ // Read file content
66
+ const content = fs.readFileSync(absolutePath, "utf-8");
67
+ return {
68
+ success: true,
69
+ data: {
70
+ path: filePath,
71
+ content,
72
+ },
73
+ };
74
+ }
75
+ catch (error) {
76
+ return {
77
+ success: false,
78
+ error: error instanceof Error ? error.message : String(error),
79
+ };
80
+ }
81
+ },
82
+ };
83
+ /**
84
+ * Load .gitignore patterns from project root
85
+ */
86
+ function loadGitignorePatterns(projectRoot) {
87
+ const ig = ignore();
88
+ // Always exclude these patterns
89
+ ig.add([
90
+ "node_modules",
91
+ ".git",
92
+ ".env",
93
+ ".env.*",
94
+ ]);
95
+ // Load .gitignore if it exists
96
+ const gitignorePath = nodePath.join(projectRoot, ".gitignore");
97
+ if (fs.existsSync(gitignorePath)) {
98
+ const gitignoreContent = fs.readFileSync(gitignorePath, "utf-8");
99
+ ig.add(gitignoreContent);
100
+ }
101
+ return ig;
102
+ }
103
+ /**
104
+ * Recursively list directory contents
105
+ */
106
+ function listDirectoryRecursive(dirPath, projectRoot, ig, currentDepth, maxDepth) {
107
+ if (currentDepth > maxDepth) {
108
+ return [];
109
+ }
110
+ const entries = [];
111
+ try {
112
+ const items = fs.readdirSync(dirPath, { withFileTypes: true });
113
+ for (const item of items) {
114
+ const fullPath = nodePath.join(dirPath, item.name);
115
+ const relativePath = nodePath.relative(projectRoot, fullPath);
116
+ // Check if ignored
117
+ if (ig.ignores(relativePath)) {
118
+ continue;
119
+ }
120
+ if (item.isDirectory()) {
121
+ entries.push(relativePath + "/");
122
+ // Recurse into subdirectory
123
+ const subEntries = listDirectoryRecursive(fullPath, projectRoot, ig, currentDepth + 1, maxDepth);
124
+ entries.push(...subEntries);
125
+ }
126
+ else if (item.isFile()) {
127
+ entries.push(relativePath);
128
+ }
129
+ }
130
+ }
131
+ catch (error) {
132
+ // Skip directories we can't read
133
+ }
134
+ return entries;
135
+ }
136
+ /**
137
+ * list_directory tool
138
+ * Lists directory contents with optional recursion
139
+ * Requirements: 8.2, 8.6, 23.2, 23.3
140
+ */
141
+ export const listDirectoryTool = {
142
+ name: "list_directory",
143
+ description: "List the contents of a directory with optional recursion",
144
+ isMutation: false,
145
+ inputSchema: z.object({
146
+ path: z.string().default(".").describe("Path to the directory (relative to project root)"),
147
+ recursive: z.boolean().default(false).describe("Whether to list recursively"),
148
+ maxDepth: z.number().int().positive().default(3).describe("Maximum depth for recursive listing"),
149
+ }),
150
+ async execute(input, ctx, _config) {
151
+ try {
152
+ const { path: dirPath, recursive, maxDepth } = this.inputSchema.parse(input);
153
+ // Validate path is within project root
154
+ validatePath(dirPath, ctx.projectRoot);
155
+ // Resolve to absolute path
156
+ const absolutePath = nodePath.resolve(ctx.projectRoot, dirPath);
157
+ // Check if directory exists
158
+ if (!fs.existsSync(absolutePath)) {
159
+ return {
160
+ success: false,
161
+ error: `Directory not found: ${dirPath}`,
162
+ };
163
+ }
164
+ if (!fs.statSync(absolutePath).isDirectory()) {
165
+ return {
166
+ success: false,
167
+ error: `Path is not a directory: ${dirPath}`,
168
+ };
169
+ }
170
+ // Load gitignore patterns
171
+ const ig = loadGitignorePatterns(ctx.projectRoot);
172
+ let entries;
173
+ if (recursive) {
174
+ entries = listDirectoryRecursive(absolutePath, ctx.projectRoot, ig, 0, maxDepth);
175
+ }
176
+ else {
177
+ // Non-recursive listing
178
+ const items = fs.readdirSync(absolutePath, { withFileTypes: true });
179
+ entries = [];
180
+ for (const item of items) {
181
+ const fullPath = nodePath.join(absolutePath, item.name);
182
+ const relativePath = nodePath.relative(ctx.projectRoot, fullPath);
183
+ // Check if ignored
184
+ if (ig.ignores(relativePath)) {
185
+ continue;
186
+ }
187
+ if (item.isDirectory()) {
188
+ entries.push(relativePath + "/");
189
+ }
190
+ else if (item.isFile()) {
191
+ entries.push(relativePath);
192
+ }
193
+ }
194
+ }
195
+ return {
196
+ success: true,
197
+ data: {
198
+ path: dirPath,
199
+ entries: entries.sort(),
200
+ },
201
+ };
202
+ }
203
+ catch (error) {
204
+ return {
205
+ success: false,
206
+ error: error instanceof Error ? error.message : String(error),
207
+ };
208
+ }
209
+ },
210
+ };
211
+ /**
212
+ * search_code tool
213
+ * Searches code using ripgrep with gitignore support
214
+ * Requirements: 8.3, 22.3
215
+ */
216
+ export const searchCodeTool = {
217
+ name: "search_code",
218
+ description: "Search for code patterns using ripgrep",
219
+ isMutation: false,
220
+ inputSchema: z.object({
221
+ query: z.string().describe("Search query (regex pattern)"),
222
+ path: z.string().default(".").describe("Path to search within (relative to project root)"),
223
+ maxResults: z.number().int().positive().default(50).describe("Maximum number of results to return"),
224
+ }),
225
+ async execute(input, ctx, _config) {
226
+ try {
227
+ const { query, path: searchPath, maxResults } = this.inputSchema.parse(input);
228
+ // Validate path is within project root
229
+ validatePath(searchPath, ctx.projectRoot);
230
+ // Resolve to absolute path
231
+ const absolutePath = nodePath.resolve(ctx.projectRoot, searchPath);
232
+ // Check if path exists
233
+ if (!fs.existsSync(absolutePath)) {
234
+ return {
235
+ success: false,
236
+ error: `Path not found: ${searchPath}`,
237
+ };
238
+ }
239
+ // Use ripgrep for search via execFileSync (no shell — prevents command injection)
240
+ const rgArgs = [
241
+ "--json",
242
+ `--max-count=${maxResults}`,
243
+ "--ignore-case",
244
+ query,
245
+ absolutePath,
246
+ ];
247
+ let output;
248
+ try {
249
+ output = execFileSync("rg", rgArgs, {
250
+ encoding: "utf-8",
251
+ maxBuffer: 10 * 1024 * 1024, // 10MB buffer
252
+ cwd: ctx.projectRoot,
253
+ });
254
+ }
255
+ catch (error) {
256
+ // ripgrep exits with code 1 when no matches found
257
+ if (error.status === 1) {
258
+ return {
259
+ success: true,
260
+ data: {
261
+ query,
262
+ path: searchPath,
263
+ results: [],
264
+ },
265
+ };
266
+ }
267
+ // Check if ripgrep is not installed
268
+ if (error.message.includes("command not found") || error.message.includes("not recognized")) {
269
+ return {
270
+ success: false,
271
+ error: "ripgrep (rg) is not installed. Please install it to use code search.",
272
+ };
273
+ }
274
+ throw error;
275
+ }
276
+ // Parse JSON output
277
+ const lines = output.trim().split("\n");
278
+ const results = [];
279
+ for (const line of lines) {
280
+ if (!line)
281
+ continue;
282
+ try {
283
+ const parsed = JSON.parse(line);
284
+ if (parsed.type === "match") {
285
+ const relativePath = nodePath.relative(ctx.projectRoot, parsed.data.path.text);
286
+ results.push({
287
+ file: relativePath,
288
+ line: parsed.data.line_number,
289
+ column: parsed.data.submatches[0]?.start || 0,
290
+ text: parsed.data.lines.text.trim(),
291
+ });
292
+ if (results.length >= maxResults) {
293
+ break;
294
+ }
295
+ }
296
+ }
297
+ catch (parseError) {
298
+ // Skip invalid JSON lines
299
+ continue;
300
+ }
301
+ }
302
+ return {
303
+ success: true,
304
+ data: {
305
+ query,
306
+ path: searchPath,
307
+ results: results.slice(0, maxResults),
308
+ },
309
+ };
310
+ }
311
+ catch (error) {
312
+ return {
313
+ success: false,
314
+ error: error instanceof Error ? error.message : String(error),
315
+ };
316
+ }
317
+ },
318
+ };
319
+ /**
320
+ * read_package_json tool
321
+ * Reads and parses package.json from project root
322
+ * Requirements: 8.4
323
+ */
324
+ export const readPackageJsonTool = {
325
+ name: "read_package_json",
326
+ description: "Read and parse the package.json file from the project root",
327
+ isMutation: false,
328
+ inputSchema: z.object({}),
329
+ async execute(_input, ctx, _config) {
330
+ try {
331
+ const packageJsonPath = nodePath.join(ctx.projectRoot, "package.json");
332
+ // Check if package.json exists
333
+ if (!fs.existsSync(packageJsonPath)) {
334
+ return {
335
+ success: false,
336
+ error: "package.json not found in project root",
337
+ };
338
+ }
339
+ // Read and parse package.json
340
+ const content = fs.readFileSync(packageJsonPath, "utf-8");
341
+ const packageJson = JSON.parse(content);
342
+ return {
343
+ success: true,
344
+ data: packageJson,
345
+ };
346
+ }
347
+ catch (error) {
348
+ return {
349
+ success: false,
350
+ error: error instanceof Error ? error.message : String(error),
351
+ };
352
+ }
353
+ },
354
+ };
355
+ /**
356
+ * read_prisma_schema tool
357
+ * Reads prisma/schema.prisma if Prisma is detected
358
+ * Requirements: 8.5
359
+ */
360
+ export const readPrismaSchemaTool = {
361
+ name: "read_prisma_schema",
362
+ description: "Read the Prisma schema file if Prisma is detected in the project",
363
+ isMutation: false,
364
+ inputSchema: z.object({}),
365
+ async execute(_input, ctx, _config) {
366
+ try {
367
+ // Check for Prisma schema at standard location
368
+ const prismaSchemaPath = nodePath.join(ctx.projectRoot, "prisma", "schema.prisma");
369
+ if (!fs.existsSync(prismaSchemaPath)) {
370
+ return {
371
+ success: false,
372
+ error: "Prisma schema not found. Prisma may not be configured in this project.",
373
+ };
374
+ }
375
+ // Read schema content
376
+ const content = fs.readFileSync(prismaSchemaPath, "utf-8");
377
+ return {
378
+ success: true,
379
+ data: {
380
+ path: "prisma/schema.prisma",
381
+ content,
382
+ },
383
+ };
384
+ }
385
+ catch (error) {
386
+ return {
387
+ success: false,
388
+ error: error instanceof Error ? error.message : String(error),
389
+ };
390
+ }
391
+ },
392
+ };
393
+ /**
394
+ * Calculate risk level based on file changes
395
+ */
396
+ function calculateRiskLevel(files) {
397
+ let riskScore = 0;
398
+ for (const file of files) {
399
+ // High risk patterns
400
+ if (file.path.includes("package.json"))
401
+ riskScore += 3;
402
+ if (file.path.includes("prisma/schema.prisma"))
403
+ riskScore += 3;
404
+ if (file.path.includes(".env"))
405
+ riskScore += 5;
406
+ if (file.path.includes("config"))
407
+ riskScore += 2;
408
+ if (file.path.includes("database") || file.path.includes("db"))
409
+ riskScore += 2;
410
+ // Check for deletions
411
+ const oldLines = file.oldContent.split("\n").length;
412
+ const newLines = file.newContent.split("\n").length;
413
+ const deletionRatio = oldLines > 0 ? (oldLines - newLines) / oldLines : 0;
414
+ if (deletionRatio > 0.5)
415
+ riskScore += 2; // More than 50% deleted
416
+ if (deletionRatio > 0.8)
417
+ riskScore += 3; // More than 80% deleted
418
+ }
419
+ if (riskScore >= 5)
420
+ return "high";
421
+ if (riskScore >= 2)
422
+ return "medium";
423
+ return "low";
424
+ }
425
+ /**
426
+ * Determine if changes are reversible
427
+ * All file modifications are reversible when old content is preserved for rollback.
428
+ * New file creations are reversible via deletion.
429
+ */
430
+ function isReversible(files) {
431
+ // All changes tracked by propose_diff are reversible because we store oldContent
432
+ // for rollback. New files (oldContent === "") can be deleted, and modifications
433
+ // can be restored from the stored oldContent.
434
+ return files.every((file) => file.oldContent !== undefined && file.newContent !== undefined);
435
+ }
436
+ /**
437
+ * Shell-escape a file path for use in rollback hint commands
438
+ */
439
+ function shellEscape(s) {
440
+ return "'" + s.replace(/'/g, "'\\''") + "'";
441
+ }
442
+ /**
443
+ * Generate rollback hints for the changes
444
+ */
445
+ function generateRollbackHints(files) {
446
+ const hints = [];
447
+ // Git-based rollback
448
+ hints.push("git checkout -- " + files.map(f => shellEscape(f.path)).join(" "));
449
+ // Individual file rollbacks
450
+ for (const file of files) {
451
+ if (file.oldContent === "") {
452
+ // New file - can be deleted
453
+ hints.push(`rm ${shellEscape(file.path)}`);
454
+ }
455
+ else if (file.newContent === "") {
456
+ // Deleted file - restore from git
457
+ hints.push(`git checkout -- ${shellEscape(file.path)}`);
458
+ }
459
+ }
460
+ return hints;
461
+ }
462
+ /**
463
+ * propose_diff tool
464
+ * Generates a unified diff without applying changes
465
+ * Requirements: 11.4, 11.5
466
+ */
467
+ export const proposeDiffTool = {
468
+ name: "propose_diff",
469
+ description: "Generate a unified diff for proposed file changes without applying them",
470
+ isMutation: false, // This tool only proposes, doesn't mutate
471
+ inputSchema: z.object({
472
+ files: z.array(z.object({
473
+ path: z.string().describe("Path to the file (relative to project root)"),
474
+ oldContent: z.string().describe("Current content of the file (empty string for new files)"),
475
+ newContent: z.string().describe("Proposed new content of the file"),
476
+ })).min(1).describe("Array of files to change"),
477
+ }),
478
+ async execute(input, ctx, config) {
479
+ try {
480
+ const { files } = this.inputSchema.parse(input);
481
+ // Validate all paths
482
+ for (const file of files) {
483
+ validatePath(file.path, ctx.projectRoot);
484
+ }
485
+ // Check patch size limit
486
+ validatePatchSize(files.length, config.safety.maxFilesPerPatch);
487
+ // Generate unified diffs for each file
488
+ const diffs = [];
489
+ for (const file of files) {
490
+ const diff = createPatch(file.path, file.oldContent, file.newContent, "current", "proposed");
491
+ diffs.push({
492
+ path: file.path,
493
+ diff,
494
+ });
495
+ }
496
+ // Calculate risk level
497
+ const riskLevel = calculateRiskLevel(files);
498
+ // Determine reversibility
499
+ const reversible = isReversible(files);
500
+ // Generate rollback hints
501
+ const rollbackHints = generateRollbackHints(files);
502
+ // Generate unique diff ID
503
+ const diffId = randomUUID();
504
+ // Build mutation summary
505
+ const summary = {
506
+ action: "apply_diff",
507
+ affectedFiles: files.map((f) => f.path),
508
+ commandsToRun: [],
509
+ migrations: [],
510
+ riskLevel,
511
+ reversible,
512
+ rollbackHints,
513
+ diffId,
514
+ };
515
+ // Evict stale diffs before storing new one
516
+ evictStaleDiffs();
517
+ // Store the diff for later application
518
+ proposedDiffs.set(diffId, { files, summary, createdAt: Date.now() });
519
+ return {
520
+ success: true,
521
+ data: {
522
+ diffId,
523
+ diffs,
524
+ summary,
525
+ },
526
+ };
527
+ }
528
+ catch (error) {
529
+ return {
530
+ success: false,
531
+ error: error instanceof Error ? error.message : String(error),
532
+ };
533
+ }
534
+ },
535
+ };
536
+ /**
537
+ * apply_diff tool
538
+ * Applies a previously proposed diff atomically
539
+ * Requirements: 11.10, 11.11, 11.12, 11.13
540
+ */
541
+ export const applyDiffTool = {
542
+ name: "apply_diff",
543
+ description: "Apply a previously proposed diff to the filesystem",
544
+ isMutation: true,
545
+ inputSchema: z.object({
546
+ diffId: z.string().uuid().describe("ID of the previously proposed diff"),
547
+ }),
548
+ async execute(input, ctx, config) {
549
+ try {
550
+ const { diffId } = this.inputSchema.parse(input);
551
+ // Retrieve stored diff
552
+ const stored = proposedDiffs.get(diffId);
553
+ if (!stored) {
554
+ return {
555
+ success: false,
556
+ error: `Diff not found: ${diffId}. Please use propose_diff first.`,
557
+ };
558
+ }
559
+ const { files, summary } = stored;
560
+ // Validate all paths again (safety check)
561
+ for (const file of files) {
562
+ validatePath(file.path, ctx.projectRoot);
563
+ }
564
+ // Check patch size limit again
565
+ validatePatchSize(files.length, config.safety.maxFilesPerPatch);
566
+ // Apply changes atomically (all or nothing)
567
+ const backups = [];
568
+ try {
569
+ // First, create backups of existing files
570
+ for (const file of files) {
571
+ const absolutePath = nodePath.resolve(ctx.projectRoot, file.path);
572
+ if (fs.existsSync(absolutePath)) {
573
+ const currentContent = fs.readFileSync(absolutePath, "utf-8");
574
+ backups.push({ path: absolutePath, content: currentContent });
575
+ }
576
+ else {
577
+ backups.push({ path: absolutePath, content: null });
578
+ }
579
+ }
580
+ // Apply all changes
581
+ for (const file of files) {
582
+ const absolutePath = nodePath.resolve(ctx.projectRoot, file.path);
583
+ if (file.newContent === "") {
584
+ // Delete file
585
+ if (fs.existsSync(absolutePath)) {
586
+ fs.unlinkSync(absolutePath);
587
+ }
588
+ }
589
+ else {
590
+ // Create or update file
591
+ // Ensure directory exists
592
+ const dir = nodePath.dirname(absolutePath);
593
+ if (!fs.existsSync(dir)) {
594
+ fs.mkdirSync(dir, { recursive: true });
595
+ }
596
+ fs.writeFileSync(absolutePath, file.newContent, "utf-8");
597
+ }
598
+ }
599
+ // Success - remove the diff from storage
600
+ proposedDiffs.delete(diffId);
601
+ return {
602
+ success: true,
603
+ data: {
604
+ diffId,
605
+ affectedFiles: summary.affectedFiles,
606
+ rollbackHints: summary.rollbackHints,
607
+ },
608
+ };
609
+ }
610
+ catch (error) {
611
+ // Rollback on failure
612
+ for (const backup of backups) {
613
+ try {
614
+ if (backup.content === null) {
615
+ // File didn't exist before, delete it
616
+ if (fs.existsSync(backup.path)) {
617
+ fs.unlinkSync(backup.path);
618
+ }
619
+ }
620
+ else {
621
+ // Restore original content
622
+ fs.writeFileSync(backup.path, backup.content, "utf-8");
623
+ }
624
+ }
625
+ catch (rollbackError) {
626
+ // Log rollback error but continue
627
+ console.error(`Failed to rollback ${backup.path}:`, rollbackError);
628
+ }
629
+ }
630
+ throw new Error(`Failed to apply diff: ${error}. Changes have been rolled back.`);
631
+ }
632
+ }
633
+ catch (error) {
634
+ return {
635
+ success: false,
636
+ error: error instanceof Error ? error.message : String(error),
637
+ };
638
+ }
639
+ },
640
+ };
641
+ /**
642
+ * Tool registry
643
+ * All available tools for the agent
644
+ */
645
+ export const allTools = [
646
+ readFileTool,
647
+ listDirectoryTool,
648
+ searchCodeTool,
649
+ readPackageJsonTool,
650
+ readPrismaSchemaTool,
651
+ proposeDiffTool,
652
+ applyDiffTool,
653
+ ];
654
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}