jiva-core 0.3.3-dev.dc3cf03 → 0.3.4-dev.3c78d8b

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 (118) hide show
  1. package/README.md +232 -570
  2. package/dist/code/agent.d.ts +105 -0
  3. package/dist/code/agent.d.ts.map +1 -0
  4. package/dist/code/agent.js +697 -0
  5. package/dist/code/agent.js.map +1 -0
  6. package/dist/code/file-lock.d.ts +15 -0
  7. package/dist/code/file-lock.d.ts.map +1 -0
  8. package/dist/code/file-lock.js +36 -0
  9. package/dist/code/file-lock.js.map +1 -0
  10. package/dist/code/lsp/client.d.ts +30 -0
  11. package/dist/code/lsp/client.d.ts.map +1 -0
  12. package/dist/code/lsp/client.js +181 -0
  13. package/dist/code/lsp/client.js.map +1 -0
  14. package/dist/code/lsp/language.d.ts +12 -0
  15. package/dist/code/lsp/language.d.ts.map +1 -0
  16. package/dist/code/lsp/language.js +145 -0
  17. package/dist/code/lsp/language.js.map +1 -0
  18. package/dist/code/lsp/manager.d.ts +39 -0
  19. package/dist/code/lsp/manager.d.ts.map +1 -0
  20. package/dist/code/lsp/manager.js +108 -0
  21. package/dist/code/lsp/manager.js.map +1 -0
  22. package/dist/code/lsp/server.d.ts +15 -0
  23. package/dist/code/lsp/server.d.ts.map +1 -0
  24. package/dist/code/lsp/server.js +78 -0
  25. package/dist/code/lsp/server.js.map +1 -0
  26. package/dist/code/tools/bash.d.ts +3 -0
  27. package/dist/code/tools/bash.d.ts.map +1 -0
  28. package/dist/code/tools/bash.js +110 -0
  29. package/dist/code/tools/bash.js.map +1 -0
  30. package/dist/code/tools/edit.d.ts +11 -0
  31. package/dist/code/tools/edit.d.ts.map +1 -0
  32. package/dist/code/tools/edit.js +459 -0
  33. package/dist/code/tools/edit.js.map +1 -0
  34. package/dist/code/tools/glob.d.ts +3 -0
  35. package/dist/code/tools/glob.d.ts.map +1 -0
  36. package/dist/code/tools/glob.js +62 -0
  37. package/dist/code/tools/glob.js.map +1 -0
  38. package/dist/code/tools/grep.d.ts +3 -0
  39. package/dist/code/tools/grep.d.ts.map +1 -0
  40. package/dist/code/tools/grep.js +147 -0
  41. package/dist/code/tools/grep.js.map +1 -0
  42. package/dist/code/tools/index.d.ts +31 -0
  43. package/dist/code/tools/index.d.ts.map +1 -0
  44. package/dist/code/tools/index.js +9 -0
  45. package/dist/code/tools/index.js.map +1 -0
  46. package/dist/code/tools/read.d.ts +3 -0
  47. package/dist/code/tools/read.d.ts.map +1 -0
  48. package/dist/code/tools/read.js +120 -0
  49. package/dist/code/tools/read.js.map +1 -0
  50. package/dist/code/tools/spawn.d.ts +3 -0
  51. package/dist/code/tools/spawn.d.ts.map +1 -0
  52. package/dist/code/tools/spawn.js +49 -0
  53. package/dist/code/tools/spawn.js.map +1 -0
  54. package/dist/code/tools/write.d.ts +3 -0
  55. package/dist/code/tools/write.d.ts.map +1 -0
  56. package/dist/code/tools/write.js +82 -0
  57. package/dist/code/tools/write.js.map +1 -0
  58. package/dist/core/agent-interface.d.ts +54 -0
  59. package/dist/core/agent-interface.d.ts.map +1 -0
  60. package/dist/core/agent-interface.js +8 -0
  61. package/dist/core/agent-interface.js.map +1 -0
  62. package/dist/core/client-agent.d.ts.map +1 -1
  63. package/dist/core/client-agent.js +26 -3
  64. package/dist/core/client-agent.js.map +1 -1
  65. package/dist/core/config.d.ts +144 -17
  66. package/dist/core/config.d.ts.map +1 -1
  67. package/dist/core/config.js +25 -1
  68. package/dist/core/config.js.map +1 -1
  69. package/dist/core/conversation-manager.d.ts +4 -1
  70. package/dist/core/conversation-manager.d.ts.map +1 -1
  71. package/dist/core/conversation-manager.js +47 -17
  72. package/dist/core/conversation-manager.js.map +1 -1
  73. package/dist/core/dual-agent.d.ts +3 -10
  74. package/dist/core/dual-agent.d.ts.map +1 -1
  75. package/dist/core/dual-agent.js +53 -119
  76. package/dist/core/dual-agent.js.map +1 -1
  77. package/dist/core/manager-agent.d.ts +30 -0
  78. package/dist/core/manager-agent.d.ts.map +1 -1
  79. package/dist/core/manager-agent.js +114 -14
  80. package/dist/core/manager-agent.js.map +1 -1
  81. package/dist/core/worker-agent.d.ts +12 -2
  82. package/dist/core/worker-agent.d.ts.map +1 -1
  83. package/dist/core/worker-agent.js +254 -67
  84. package/dist/core/worker-agent.js.map +1 -1
  85. package/dist/index.d.ts +3 -0
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +2 -0
  88. package/dist/index.js.map +1 -1
  89. package/dist/interfaces/cli/index.js +146 -25
  90. package/dist/interfaces/cli/index.js.map +1 -1
  91. package/dist/interfaces/cli/repl.d.ts +8 -2
  92. package/dist/interfaces/cli/repl.d.ts.map +1 -1
  93. package/dist/interfaces/cli/repl.js +39 -3
  94. package/dist/interfaces/cli/repl.js.map +1 -1
  95. package/dist/interfaces/cli/setup-wizard.d.ts.map +1 -1
  96. package/dist/interfaces/cli/setup-wizard.js +92 -0
  97. package/dist/interfaces/cli/setup-wizard.js.map +1 -1
  98. package/dist/interfaces/http/routes/chat.js +2 -2
  99. package/dist/interfaces/http/routes/chat.js.map +1 -1
  100. package/dist/interfaces/http/session-manager.d.ts +7 -4
  101. package/dist/interfaces/http/session-manager.d.ts.map +1 -1
  102. package/dist/interfaces/http/session-manager.js +56 -15
  103. package/dist/interfaces/http/session-manager.js.map +1 -1
  104. package/dist/models/base.d.ts +8 -0
  105. package/dist/models/base.d.ts.map +1 -1
  106. package/dist/models/harmony.d.ts +7 -1
  107. package/dist/models/harmony.d.ts.map +1 -1
  108. package/dist/models/harmony.js +21 -3
  109. package/dist/models/harmony.js.map +1 -1
  110. package/dist/models/krutrim.d.ts +31 -1
  111. package/dist/models/krutrim.d.ts.map +1 -1
  112. package/dist/models/krutrim.js +55 -11
  113. package/dist/models/krutrim.js.map +1 -1
  114. package/dist/models/orchestrator.d.ts +24 -0
  115. package/dist/models/orchestrator.d.ts.map +1 -1
  116. package/dist/models/orchestrator.js +40 -6
  117. package/dist/models/orchestrator.js.map +1 -1
  118. package/package.json +8 -5
@@ -0,0 +1,459 @@
1
+ /**
2
+ * Edit tool — multi-strategy text replacement with LSP diagnostics.
3
+ *
4
+ * The replacement strategies are ported from opencode (https://github.com/sst/opencode),
5
+ * which in turn sourced them from cline and gemini-cli.
6
+ */
7
+ import path from 'path';
8
+ import fs from 'fs';
9
+ import { createTwoFilesPatch, diffLines } from 'diff';
10
+ import { fileLock } from '../file-lock.js';
11
+ const MAX_DIAGNOSTICS = 20;
12
+ export const EditFileTool = {
13
+ name: 'edit_file',
14
+ description: `Replace an exact string in a file with a new string.
15
+
16
+ REQUIRED PARAMETERS — ALL THREE are mandatory, never omit any:
17
+ • file_path — absolute path to the file to edit
18
+ • old_string — the EXACT text to find (must match the file exactly)
19
+ • new_string — the REPLACEMENT text (what replaces old_string)
20
+
21
+ IMPORTANT: You MUST provide BOTH old_string AND new_string in every call.
22
+ Omitting new_string will fail with a validation error. new_string is never optional —
23
+ it is the text that replaces old_string in the file.
24
+
25
+ Rules:
26
+ - ALWAYS read the file with read_file before editing — never edit blindly.
27
+ - old_string must exactly match the file content (whitespace, indentation, line endings).
28
+ - Include enough surrounding context in old_string to make the match unique.
29
+ - If old_string is empty (""), the file is created with new_string as its content.
30
+ - The edit FAILS if old_string is not found in the file — check the content first.
31
+ - Use replace_all: true to replace every occurrence of old_string at once.
32
+ - Prefer small, targeted edits over rewriting large sections.
33
+ - LSP errors (if any) are reported after the edit so you can fix them immediately.
34
+
35
+ Returns a diff of the changes made, plus any LSP errors detected.`,
36
+ parameters: {
37
+ type: 'object',
38
+ properties: {
39
+ file_path: {
40
+ type: 'string',
41
+ description: 'Absolute path to the file to edit',
42
+ },
43
+ old_string: {
44
+ type: 'string',
45
+ description: 'The exact text to replace (empty string to create a new file)',
46
+ },
47
+ new_string: {
48
+ type: 'string',
49
+ description: 'The replacement text',
50
+ },
51
+ replace_all: {
52
+ type: 'boolean',
53
+ description: 'Replace all occurrences of old_string (default: false)',
54
+ },
55
+ },
56
+ required: ['file_path', 'old_string', 'new_string'],
57
+ },
58
+ async execute(args, ctx) {
59
+ const rawPath = args.file_path;
60
+ const filePath = path.isAbsolute(rawPath) ? rawPath : path.resolve(ctx.workspaceDir, rawPath);
61
+ const oldString = args.old_string;
62
+ const newString = args.new_string;
63
+ const replaceAll = args.replace_all ?? false;
64
+ if (oldString === newString) {
65
+ return 'Error: old_string and new_string are identical — no change made.';
66
+ }
67
+ return fileLock.withLock(filePath, async () => {
68
+ let contentBefore = '';
69
+ let contentAfter = '';
70
+ if (oldString === '') {
71
+ // Create / overwrite file
72
+ contentAfter = newString;
73
+ try {
74
+ const dir = path.dirname(filePath);
75
+ fs.mkdirSync(dir, { recursive: true });
76
+ fs.writeFileSync(filePath, newString, 'utf-8');
77
+ }
78
+ catch (e) {
79
+ return `Error writing file: ${e instanceof Error ? e.message : String(e)}`;
80
+ }
81
+ }
82
+ else {
83
+ // Read existing file
84
+ try {
85
+ contentBefore = fs.readFileSync(filePath, 'utf-8');
86
+ }
87
+ catch {
88
+ return `Error: File not found: ${filePath}`;
89
+ }
90
+ // Normalize line endings for matching
91
+ const ending = detectLineEnding(contentBefore);
92
+ const normalizedOld = convertLineEnding(normalizeLineEndings(oldString), ending);
93
+ const normalizedNew = convertLineEnding(normalizeLineEndings(newString), ending);
94
+ let result;
95
+ try {
96
+ result = replace(contentBefore, normalizedOld, normalizedNew, replaceAll);
97
+ }
98
+ catch (e) {
99
+ return `Error: ${e instanceof Error ? e.message : String(e)}`;
100
+ }
101
+ contentAfter = result;
102
+ try {
103
+ fs.writeFileSync(filePath, contentAfter, 'utf-8');
104
+ }
105
+ catch (e) {
106
+ return `Error writing file: ${e instanceof Error ? e.message : String(e)}`;
107
+ }
108
+ }
109
+ // Build diff
110
+ const diff = trimDiff(createTwoFilesPatch(filePath, filePath, normalizeLineEndings(contentBefore), normalizeLineEndings(contentAfter)));
111
+ // Count changes
112
+ let additions = 0;
113
+ let deletions = 0;
114
+ for (const change of diffLines(contentBefore, contentAfter)) {
115
+ if (change.added)
116
+ additions += change.count ?? 0;
117
+ if (change.removed)
118
+ deletions += change.count ?? 0;
119
+ }
120
+ // Notify LSP and collect diagnostics
121
+ let diagnosticsOutput = '';
122
+ try {
123
+ await ctx.lsp.touchFile(filePath);
124
+ const errors = ctx.lsp.getErrorsForFile(filePath);
125
+ if (errors) {
126
+ diagnosticsOutput = `\n\nLSP errors detected — please fix:\n<diagnostics file="${filePath}">\n${errors}\n</diagnostics>`;
127
+ }
128
+ }
129
+ catch {
130
+ // LSP errors should not block the edit result
131
+ }
132
+ const relPath = path.relative(ctx.workspaceDir, filePath);
133
+ return `Edit applied to ${relPath} (+${additions}/-${deletions} lines).\n\n${diff}${diagnosticsOutput}`;
134
+ });
135
+ },
136
+ };
137
+ function levenshtein(a, b) {
138
+ if (a === '' || b === '')
139
+ return Math.max(a.length, b.length);
140
+ const matrix = Array.from({ length: a.length + 1 }, (_, i) => Array.from({ length: b.length + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)));
141
+ for (let i = 1; i <= a.length; i++) {
142
+ for (let j = 1; j <= b.length; j++) {
143
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
144
+ matrix[i][j] = Math.min(matrix[i - 1][j] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j - 1] + cost);
145
+ }
146
+ }
147
+ return matrix[a.length][b.length];
148
+ }
149
+ const SimpleReplacer = function* (_content, find) {
150
+ yield find;
151
+ };
152
+ const LineTrimmedReplacer = function* (content, find) {
153
+ const originalLines = content.split('\n');
154
+ const searchLines = find.split('\n');
155
+ if (searchLines[searchLines.length - 1] === '')
156
+ searchLines.pop();
157
+ for (let i = 0; i <= originalLines.length - searchLines.length; i++) {
158
+ let matches = true;
159
+ for (let j = 0; j < searchLines.length; j++) {
160
+ if (originalLines[i + j].trim() !== searchLines[j].trim()) {
161
+ matches = false;
162
+ break;
163
+ }
164
+ }
165
+ if (matches) {
166
+ let start = 0;
167
+ for (let k = 0; k < i; k++)
168
+ start += originalLines[k].length + 1;
169
+ let end = start;
170
+ for (let k = 0; k < searchLines.length; k++) {
171
+ end += originalLines[i + k].length;
172
+ if (k < searchLines.length - 1)
173
+ end += 1;
174
+ }
175
+ yield content.substring(start, end);
176
+ }
177
+ }
178
+ };
179
+ const SINGLE_CANDIDATE_THRESHOLD = 0.0;
180
+ const MULTIPLE_CANDIDATES_THRESHOLD = 0.3;
181
+ const BlockAnchorReplacer = function* (content, find) {
182
+ const originalLines = content.split('\n');
183
+ const searchLines = find.split('\n');
184
+ if (searchLines.length < 3)
185
+ return;
186
+ if (searchLines[searchLines.length - 1] === '')
187
+ searchLines.pop();
188
+ const firstLine = searchLines[0].trim();
189
+ const lastLine = searchLines[searchLines.length - 1].trim();
190
+ const candidates = [];
191
+ for (let i = 0; i < originalLines.length; i++) {
192
+ if (originalLines[i].trim() !== firstLine)
193
+ continue;
194
+ for (let j = i + 2; j < originalLines.length; j++) {
195
+ if (originalLines[j].trim() === lastLine) {
196
+ candidates.push({ startLine: i, endLine: j });
197
+ break;
198
+ }
199
+ }
200
+ }
201
+ if (candidates.length === 0)
202
+ return;
203
+ const computeSimilarity = (startLine, endLine) => {
204
+ const actualSize = endLine - startLine + 1;
205
+ const linesToCheck = Math.min(searchLines.length - 2, actualSize - 2);
206
+ if (linesToCheck <= 0)
207
+ return 1.0;
208
+ let sim = 0;
209
+ for (let j = 1; j < searchLines.length - 1 && j < actualSize - 1; j++) {
210
+ const orig = originalLines[startLine + j].trim();
211
+ const srch = searchLines[j].trim();
212
+ const maxLen = Math.max(orig.length, srch.length);
213
+ if (maxLen === 0)
214
+ continue;
215
+ sim += (1 - levenshtein(orig, srch) / maxLen) / linesToCheck;
216
+ if (sim >= SINGLE_CANDIDATE_THRESHOLD)
217
+ break;
218
+ }
219
+ return sim;
220
+ };
221
+ const extractMatch = (startLine, endLine) => {
222
+ let start = 0;
223
+ for (let k = 0; k < startLine; k++)
224
+ start += originalLines[k].length + 1;
225
+ let end = start;
226
+ for (let k = startLine; k <= endLine; k++) {
227
+ end += originalLines[k].length;
228
+ if (k < endLine)
229
+ end += 1;
230
+ }
231
+ return content.substring(start, end);
232
+ };
233
+ if (candidates.length === 1) {
234
+ const { startLine, endLine } = candidates[0];
235
+ if (computeSimilarity(startLine, endLine) >= SINGLE_CANDIDATE_THRESHOLD) {
236
+ yield extractMatch(startLine, endLine);
237
+ }
238
+ return;
239
+ }
240
+ let best = null;
241
+ let maxSim = -1;
242
+ for (const { startLine, endLine } of candidates) {
243
+ const sim = computeSimilarity(startLine, endLine);
244
+ if (sim > maxSim) {
245
+ maxSim = sim;
246
+ best = { startLine, endLine };
247
+ }
248
+ }
249
+ if (maxSim >= MULTIPLE_CANDIDATES_THRESHOLD && best) {
250
+ yield extractMatch(best.startLine, best.endLine);
251
+ }
252
+ };
253
+ const WhitespaceNormalizedReplacer = function* (content, find) {
254
+ const norm = (t) => t.replace(/\s+/g, ' ').trim();
255
+ const normalizedFind = norm(find);
256
+ const lines = content.split('\n');
257
+ for (const line of lines) {
258
+ if (norm(line) === normalizedFind) {
259
+ yield line;
260
+ continue;
261
+ }
262
+ const normLine = norm(line);
263
+ if (normLine.includes(normalizedFind)) {
264
+ const words = find.trim().split(/\s+/);
265
+ if (words.length > 0) {
266
+ const pattern = words.map((w) => w.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('\\s+');
267
+ try {
268
+ const m = line.match(new RegExp(pattern));
269
+ if (m)
270
+ yield m[0];
271
+ }
272
+ catch { /* invalid regex */ }
273
+ }
274
+ }
275
+ }
276
+ const findLines = find.split('\n');
277
+ if (findLines.length > 1) {
278
+ for (let i = 0; i <= lines.length - findLines.length; i++) {
279
+ const block = lines.slice(i, i + findLines.length);
280
+ if (norm(block.join('\n')) === normalizedFind)
281
+ yield block.join('\n');
282
+ }
283
+ }
284
+ };
285
+ const IndentationFlexibleReplacer = function* (content, find) {
286
+ const removeIndent = (text) => {
287
+ const lines = text.split('\n');
288
+ const nonEmpty = lines.filter((l) => l.trim().length > 0);
289
+ if (nonEmpty.length === 0)
290
+ return text;
291
+ const min = Math.min(...nonEmpty.map((l) => { const m = l.match(/^(\s*)/); return m ? m[1].length : 0; }));
292
+ return lines.map((l) => (l.trim().length === 0 ? l : l.slice(min))).join('\n');
293
+ };
294
+ const normalizedFind = removeIndent(find);
295
+ const contentLines = content.split('\n');
296
+ const findLines = find.split('\n');
297
+ for (let i = 0; i <= contentLines.length - findLines.length; i++) {
298
+ const block = contentLines.slice(i, i + findLines.length).join('\n');
299
+ if (removeIndent(block) === normalizedFind)
300
+ yield block;
301
+ }
302
+ };
303
+ const EscapeNormalizedReplacer = function* (content, find) {
304
+ const unescape = (s) => s.replace(/\\(n|t|r|'|"|`|\\|\n|\$)/g, (_, c) => {
305
+ switch (c) {
306
+ case 'n': return '\n';
307
+ case 't': return '\t';
308
+ case 'r': return '\r';
309
+ case '\\': return '\\';
310
+ case '\n': return '\n';
311
+ default: return c;
312
+ }
313
+ });
314
+ const unescapedFind = unescape(find);
315
+ if (content.includes(unescapedFind)) {
316
+ yield unescapedFind;
317
+ return;
318
+ }
319
+ const lines = content.split('\n');
320
+ const findLines = unescapedFind.split('\n');
321
+ for (let i = 0; i <= lines.length - findLines.length; i++) {
322
+ const block = lines.slice(i, i + findLines.length).join('\n');
323
+ if (unescape(block) === unescapedFind)
324
+ yield block;
325
+ }
326
+ };
327
+ const TrimmedBoundaryReplacer = function* (content, find) {
328
+ const trimmedFind = find.trim();
329
+ if (trimmedFind === find)
330
+ return;
331
+ if (content.includes(trimmedFind)) {
332
+ yield trimmedFind;
333
+ return;
334
+ }
335
+ const lines = content.split('\n');
336
+ const findLines = find.split('\n');
337
+ for (let i = 0; i <= lines.length - findLines.length; i++) {
338
+ const block = lines.slice(i, i + findLines.length).join('\n');
339
+ if (block.trim() === trimmedFind)
340
+ yield block;
341
+ }
342
+ };
343
+ const ContextAwareReplacer = function* (content, find) {
344
+ const findLines = find.split('\n');
345
+ if (findLines.length < 3)
346
+ return;
347
+ if (findLines[findLines.length - 1] === '')
348
+ findLines.pop();
349
+ const contentLines = content.split('\n');
350
+ const firstLine = findLines[0].trim();
351
+ const lastLine = findLines[findLines.length - 1].trim();
352
+ for (let i = 0; i < contentLines.length; i++) {
353
+ if (contentLines[i].trim() !== firstLine)
354
+ continue;
355
+ for (let j = i + 2; j < contentLines.length; j++) {
356
+ if (contentLines[j].trim() !== lastLine)
357
+ continue;
358
+ const blockLines = contentLines.slice(i, j + 1);
359
+ if (blockLines.length !== findLines.length)
360
+ break;
361
+ let matching = 0;
362
+ let total = 0;
363
+ for (let k = 1; k < blockLines.length - 1; k++) {
364
+ const b = blockLines[k].trim();
365
+ const f = findLines[k].trim();
366
+ if (b.length > 0 || f.length > 0) {
367
+ total++;
368
+ if (b === f)
369
+ matching++;
370
+ }
371
+ }
372
+ if (total === 0 || matching / total >= 0.5) {
373
+ yield blockLines.join('\n');
374
+ break;
375
+ }
376
+ break;
377
+ }
378
+ }
379
+ };
380
+ const MultiOccurrenceReplacer = function* (content, find) {
381
+ let start = 0;
382
+ while (true) {
383
+ const idx = content.indexOf(find, start);
384
+ if (idx === -1)
385
+ break;
386
+ yield find;
387
+ start = idx + find.length;
388
+ }
389
+ };
390
+ /** Apply the first matching replacement strategy. */
391
+ export function replace(content, oldString, newString, replaceAll = false) {
392
+ if (oldString === newString)
393
+ throw new Error('No changes: old_string and new_string are identical.');
394
+ let notFound = true;
395
+ for (const replacer of [
396
+ SimpleReplacer,
397
+ LineTrimmedReplacer,
398
+ BlockAnchorReplacer,
399
+ WhitespaceNormalizedReplacer,
400
+ IndentationFlexibleReplacer,
401
+ EscapeNormalizedReplacer,
402
+ TrimmedBoundaryReplacer,
403
+ ContextAwareReplacer,
404
+ MultiOccurrenceReplacer,
405
+ ]) {
406
+ for (const search of replacer(content, oldString)) {
407
+ const idx = content.indexOf(search);
408
+ if (idx === -1)
409
+ continue;
410
+ notFound = false;
411
+ if (replaceAll)
412
+ return content.replaceAll(search, newString);
413
+ const lastIdx = content.lastIndexOf(search);
414
+ if (idx !== lastIdx)
415
+ continue; // ambiguous match
416
+ return content.substring(0, idx) + newString + content.substring(idx + search.length);
417
+ }
418
+ }
419
+ if (notFound) {
420
+ throw new Error('Could not find old_string in the file. It must match exactly (whitespace, indentation, line endings).');
421
+ }
422
+ throw new Error('Found multiple matches for old_string. Provide more surrounding context to make it unique.');
423
+ }
424
+ // ─── Utilities ────────────────────────────────────────────────────────────────
425
+ function normalizeLineEndings(text) {
426
+ return text.replaceAll('\r\n', '\n');
427
+ }
428
+ function detectLineEnding(text) {
429
+ return text.includes('\r\n') ? '\r\n' : '\n';
430
+ }
431
+ function convertLineEnding(text, ending) {
432
+ return ending === '\n' ? text : text.replaceAll('\n', '\r\n');
433
+ }
434
+ function trimDiff(diff) {
435
+ const lines = diff.split('\n');
436
+ const contentLines = lines.filter((l) => (l.startsWith('+') || l.startsWith('-') || l.startsWith(' ')) &&
437
+ !l.startsWith('---') && !l.startsWith('+++'));
438
+ if (contentLines.length === 0)
439
+ return diff;
440
+ let min = Infinity;
441
+ for (const line of contentLines) {
442
+ const content = line.slice(1);
443
+ if (content.trim().length > 0) {
444
+ const m = content.match(/^(\s*)/);
445
+ if (m)
446
+ min = Math.min(min, m[1].length);
447
+ }
448
+ }
449
+ if (min === Infinity || min === 0)
450
+ return diff;
451
+ return lines.map((line) => {
452
+ if ((line.startsWith('+') || line.startsWith('-') || line.startsWith(' ')) &&
453
+ !line.startsWith('---') && !line.startsWith('+++')) {
454
+ return line[0] + line.slice(1 + min);
455
+ }
456
+ return line;
457
+ }).join('\n');
458
+ }
459
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/code/tools/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ICodeTool } from './index.js';
2
+ export declare const GlobTool: ICodeTool;
3
+ //# sourceMappingURL=glob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../../src/code/tools/glob.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,YAAY,CAAC;AAE7D,eAAO,MAAM,QAAQ,EAAE,SA8DtB,CAAC"}
@@ -0,0 +1,62 @@
1
+ import path from 'path';
2
+ import fs from 'fs';
3
+ export const GlobTool = {
4
+ name: 'glob',
5
+ description: `Find files matching a glob pattern.
6
+
7
+ Examples:
8
+ - "**/*.ts" — all TypeScript files
9
+ - "src/**/*.test.ts" — all test files under src/
10
+ - "*.json" — JSON files in the workspace root
11
+
12
+ Returns file paths relative to the workspace directory, sorted by modification time (newest first).`,
13
+ parameters: {
14
+ type: 'object',
15
+ properties: {
16
+ pattern: {
17
+ type: 'string',
18
+ description: 'Glob pattern to match (e.g. "**/*.ts", "src/**/*.js")',
19
+ },
20
+ cwd: {
21
+ type: 'string',
22
+ description: 'Directory to search in (default: workspace root)',
23
+ },
24
+ },
25
+ required: ['pattern'],
26
+ },
27
+ async execute(args, ctx) {
28
+ const pattern = args.pattern;
29
+ const cwd = args.cwd
30
+ ? (path.isAbsolute(args.cwd) ? args.cwd : path.resolve(ctx.workspaceDir, args.cwd))
31
+ : ctx.workspaceDir;
32
+ try {
33
+ // Use Node.js built-in glob (available in Node 22+) or fall back to manual walk
34
+ const { glob } = await import('glob');
35
+ const matches = await glob(pattern, {
36
+ cwd,
37
+ nodir: false,
38
+ ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**', '**/.next/**'],
39
+ });
40
+ if (matches.length === 0) {
41
+ return `No files found matching pattern: ${pattern}`;
42
+ }
43
+ // Sort by mtime (newest first)
44
+ const withMtime = matches
45
+ .map((f) => {
46
+ try {
47
+ const stat = fs.statSync(path.join(cwd, f));
48
+ return { file: f, mtime: stat.mtimeMs };
49
+ }
50
+ catch {
51
+ return { file: f, mtime: 0 };
52
+ }
53
+ })
54
+ .sort((a, b) => b.mtime - a.mtime);
55
+ return withMtime.map((f) => f.file).join('\n');
56
+ }
57
+ catch (e) {
58
+ return `Error: ${e instanceof Error ? e.message : String(e)}`;
59
+ }
60
+ },
61
+ };
62
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../../src/code/tools/glob.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE;;;;;;;oGAOqF;IAElG,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uDAAuD;aACrE;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kDAAkD;aAChE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IAED,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAoB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;YAClB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAa,CAAC,CAAC;YACjH,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QAErB,IAAI,CAAC;YACH,gFAAgF;YAChF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;gBAClC,GAAG;gBACH,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAC;aAC1E,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,oCAAoC,OAAO,EAAE,CAAC;YACvD,CAAC;YAED,+BAA+B;YAC/B,MAAM,SAAS,GAAG,OAAO;iBACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5C,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC/B,CAAC;YACH,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAErC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ICodeTool } from './index.js';
2
+ export declare const GrepTool: ICodeTool;
3
+ //# sourceMappingURL=grep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../../src/code/tools/grep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,YAAY,CAAC;AAU7D,eAAO,MAAM,QAAQ,EAAE,SA2EtB,CAAC"}