zelari-code 0.2.2 → 0.6.2

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 (126) hide show
  1. package/README.md +97 -2
  2. package/dist/agents/councilApi.js +7 -7
  3. package/dist/agents/councilApi.js.map +1 -1
  4. package/dist/agents/councilDirectives.js +3 -3
  5. package/dist/agents/promoteMember.js +2 -2
  6. package/dist/agents/roles.js +32 -32
  7. package/dist/agents/roles.js.map +1 -1
  8. package/dist/agents/skills/builtin/debugging.js +4 -4
  9. package/dist/agents/skills/builtin/debugging.js.map +1 -1
  10. package/dist/agents/skills/builtin/docs.js +13 -23
  11. package/dist/agents/skills/builtin/docs.js.map +1 -1
  12. package/dist/agents/skills/builtin/git-ops.js +3 -3
  13. package/dist/agents/skills/builtin/git-ops.js.map +1 -1
  14. package/dist/agents/skills/builtin/planning.js +4 -4
  15. package/dist/agents/skills/builtin/planning.js.map +1 -1
  16. package/dist/agents/skills/builtin/refactoring.js +3 -3
  17. package/dist/agents/skills/builtin/refactoring.js.map +1 -1
  18. package/dist/agents/skills/builtin/review.js +9 -9
  19. package/dist/agents/skills/builtin/review.js.map +1 -1
  20. package/dist/agents/skills/builtin/testing.js +3 -3
  21. package/dist/agents/skills/builtin/testing.js.map +1 -1
  22. package/dist/agents/tools.js +9 -2
  23. package/dist/agents/tools.js.map +1 -1
  24. package/dist/cli/app.js +94 -1861
  25. package/dist/cli/app.js.map +1 -1
  26. package/dist/cli/compaction.js.map +1 -1
  27. package/dist/cli/components/ChatStream.js +81 -14
  28. package/dist/cli/components/ChatStream.js.map +1 -1
  29. package/dist/cli/components/CollapsibleToolOutput.js +26 -3
  30. package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
  31. package/dist/cli/components/Header.js +20 -1
  32. package/dist/cli/components/Header.js.map +1 -1
  33. package/dist/cli/components/InputBar.js +34 -2
  34. package/dist/cli/components/InputBar.js.map +1 -1
  35. package/dist/cli/components/Sidebar.js +30 -10
  36. package/dist/cli/components/Sidebar.js.map +1 -1
  37. package/dist/cli/councilDispatcher.js +10 -2
  38. package/dist/cli/councilDispatcher.js.map +1 -1
  39. package/dist/cli/headless.js +137 -0
  40. package/dist/cli/headless.js.map +1 -0
  41. package/dist/cli/hooks/chatStats.js +28 -0
  42. package/dist/cli/hooks/chatStats.js.map +1 -0
  43. package/dist/cli/hooks/eventsToMessages.js +111 -0
  44. package/dist/cli/hooks/eventsToMessages.js.map +1 -0
  45. package/dist/cli/hooks/messageHelpers.js +125 -0
  46. package/dist/cli/hooks/messageHelpers.js.map +1 -0
  47. package/dist/cli/hooks/skillCompare.js +69 -0
  48. package/dist/cli/hooks/skillCompare.js.map +1 -0
  49. package/dist/cli/hooks/steer.js +28 -0
  50. package/dist/cli/hooks/steer.js.map +1 -0
  51. package/dist/cli/hooks/useBatchedMessages.js +67 -0
  52. package/dist/cli/hooks/useBatchedMessages.js.map +1 -0
  53. package/dist/cli/hooks/useChatTurn.js +363 -0
  54. package/dist/cli/hooks/useChatTurn.js.map +1 -0
  55. package/dist/cli/hooks/useSession.js +116 -0
  56. package/dist/cli/hooks/useSession.js.map +1 -0
  57. package/dist/cli/hooks/useSlashDispatch.js +303 -0
  58. package/dist/cli/hooks/useSlashDispatch.js.map +1 -0
  59. package/dist/cli/hooks/useTerminalSize.js +60 -0
  60. package/dist/cli/hooks/useTerminalSize.js.map +1 -0
  61. package/dist/cli/main.bundled.js +25212 -21722
  62. package/dist/cli/main.bundled.js.map +4 -4
  63. package/dist/cli/main.js +86 -2
  64. package/dist/cli/main.js.map +1 -1
  65. package/dist/cli/provider/openai-compatible.js +9 -2
  66. package/dist/cli/provider/openai-compatible.js.map +1 -1
  67. package/dist/cli/runHeadless.js +160 -0
  68. package/dist/cli/runHeadless.js.map +1 -0
  69. package/dist/cli/sessionManager.js +47 -1
  70. package/dist/cli/sessionManager.js.map +1 -1
  71. package/dist/cli/skillSuggest.js +1 -1
  72. package/dist/cli/slashCommands.js +72 -3
  73. package/dist/cli/slashCommands.js.map +1 -1
  74. package/dist/cli/slashHandlers/branch.js +57 -0
  75. package/dist/cli/slashHandlers/branch.js.map +1 -0
  76. package/dist/cli/slashHandlers/git.js +40 -0
  77. package/dist/cli/slashHandlers/git.js.map +1 -0
  78. package/dist/cli/slashHandlers/promoteMember.js +25 -0
  79. package/dist/cli/slashHandlers/promoteMember.js.map +1 -0
  80. package/dist/cli/slashHandlers/provider.js +199 -0
  81. package/dist/cli/slashHandlers/provider.js.map +1 -0
  82. package/dist/cli/slashHandlers/skills.js +82 -0
  83. package/dist/cli/slashHandlers/skills.js.map +1 -0
  84. package/dist/cli/slashHandlers/transcript.js +13 -0
  85. package/dist/cli/slashHandlers/transcript.js.map +1 -0
  86. package/dist/cli/slashHandlers/updater.js +40 -0
  87. package/dist/cli/slashHandlers/updater.js.map +1 -0
  88. package/dist/cli/slashHandlers/workspace.js +118 -0
  89. package/dist/cli/slashHandlers/workspace.js.map +1 -0
  90. package/dist/cli/toolRegistry.js +17 -8
  91. package/dist/cli/toolRegistry.js.map +1 -1
  92. package/dist/cli/utils/duration.js +34 -0
  93. package/dist/cli/utils/duration.js.map +1 -0
  94. package/dist/cli/wizard/firstRun.js +63 -0
  95. package/dist/cli/wizard/firstRun.js.map +1 -0
  96. package/dist/cli/wizard/index.js +150 -0
  97. package/dist/cli/wizard/index.js.map +1 -0
  98. package/dist/cli/wizard/runWizard.js +137 -0
  99. package/dist/cli/wizard/runWizard.js.map +1 -0
  100. package/dist/cli/wizard/useWizardState.js +151 -0
  101. package/dist/cli/wizard/useWizardState.js.map +1 -0
  102. package/dist/cli/workspace/agentsMd.js +314 -0
  103. package/dist/cli/workspace/agentsMd.js.map +1 -0
  104. package/dist/cli/workspace/index.js +24 -0
  105. package/dist/cli/workspace/index.js.map +1 -0
  106. package/dist/cli/workspace/paths.js +88 -0
  107. package/dist/cli/workspace/paths.js.map +1 -0
  108. package/dist/cli/workspace/postCouncilHook.js +38 -0
  109. package/dist/cli/workspace/postCouncilHook.js.map +1 -0
  110. package/dist/cli/workspace/storage.js +392 -0
  111. package/dist/cli/workspace/storage.js.map +1 -0
  112. package/dist/cli/workspace/stubs.js +528 -0
  113. package/dist/cli/workspace/stubs.js.map +1 -0
  114. package/dist/cli/workspace/toolRegistry.js +61 -0
  115. package/dist/cli/workspace/toolRegistry.js.map +1 -0
  116. package/dist/cli/workspace/types.js +10 -0
  117. package/dist/cli/workspace/types.js.map +1 -0
  118. package/dist/main/core/tools/builtin/_walk.js +129 -0
  119. package/dist/main/core/tools/builtin/_walk.js.map +1 -0
  120. package/dist/main/core/tools/builtin/diff.js +477 -0
  121. package/dist/main/core/tools/builtin/diff.js.map +1 -0
  122. package/dist/main/core/tools/builtin/listFiles.js +5 -43
  123. package/dist/main/core/tools/builtin/listFiles.js.map +1 -1
  124. package/dist/main/core/tools/builtin/search.js +120 -28
  125. package/dist/main/core/tools/builtin/search.js.map +1 -1
  126. package/package.json +10 -2
@@ -0,0 +1,129 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import path from 'node:path';
3
+ const REGEX_ESCAPE = /[.+^${}()|[\]\\]/g;
4
+ function escapeRegex(p) {
5
+ return p.replace(REGEX_ESCAPE, '\\$&');
6
+ }
7
+ function globToRegex(glob) {
8
+ // Convert glob pattern to anchored RegExp.
9
+ // Semantics:
10
+ // - `*` → any chars except `/` (one segment)
11
+ // - `**` → any chars including `/` (zero or more segments)
12
+ // - `**/` → zero or more dirs (must be followed by something or end)
13
+ // - `?` → any single char except `/`
14
+ // - `[abc]` → char class
15
+ // - everything else is literal (regex special chars auto-escaped)
16
+ let re = '';
17
+ for (let i = 0; i < glob.length; i++) {
18
+ const c = glob[i];
19
+ if (c === '*') {
20
+ if (glob[i + 1] === '*') {
21
+ if (glob[i + 2] === '/') {
22
+ // **/ → zero or more dirs. Skip both stars AND the slash.
23
+ re += '(?:.*/)?';
24
+ i += 2; // skip second * AND trailing /
25
+ }
26
+ else {
27
+ // ** at end (or **<not-slash>) → match anything
28
+ re += '.*';
29
+ i++; // skip second *
30
+ }
31
+ }
32
+ else {
33
+ // single * → match within one segment
34
+ re += '[^/]*';
35
+ }
36
+ }
37
+ else if (c === '?') {
38
+ re += '[^/]';
39
+ }
40
+ else if (c === '[') {
41
+ const end = glob.indexOf(']', i);
42
+ if (end === -1) {
43
+ re += escapeRegex(c);
44
+ }
45
+ else {
46
+ re += glob.slice(i, end + 1);
47
+ i = end;
48
+ }
49
+ }
50
+ else {
51
+ re += escapeRegex(c);
52
+ }
53
+ }
54
+ return new RegExp('^' + re + '$');
55
+ }
56
+ export function matchesAny(name, patterns) {
57
+ for (const p of patterns) {
58
+ const re = globToRegex(p);
59
+ if (re.test(name))
60
+ return true;
61
+ }
62
+ return false;
63
+ }
64
+ export const DEFAULT_EXCLUDES = [
65
+ 'node_modules',
66
+ '.git',
67
+ 'dist',
68
+ 'build',
69
+ '.next',
70
+ '__pycache__',
71
+ '.cache',
72
+ '.zelari', // v3-W workspace storage (never inspect)
73
+ '.venv',
74
+ 'coverage',
75
+ '.nyc_output',
76
+ ];
77
+ /**
78
+ * Walk a directory tree, collecting file/dir entries.
79
+ * Mutates {@link entries} in place (avoids large array allocations on deep trees).
80
+ *
81
+ * Depth semantics: depth=0 means "do NOT descend into subdirectories" (root
82
+ * entries only). depth=N means "descend at most N levels below root".
83
+ *
84
+ * The root directory itself is NOT added as an entry.
85
+ */
86
+ export async function walk(dir, baseRel, depth, maxDepth, exclude, entries, signal) {
87
+ if (depth > maxDepth)
88
+ return;
89
+ if (signal?.aborted)
90
+ return;
91
+ let dirents;
92
+ try {
93
+ dirents = await fs.readdir(dir, { withFileTypes: true });
94
+ }
95
+ catch {
96
+ return; // unreadable subdirectory — skip silently
97
+ }
98
+ if (signal?.aborted)
99
+ return;
100
+ for (const dirent of dirents) {
101
+ if (matchesAny(dirent.name, exclude))
102
+ continue;
103
+ const rel = baseRel ? `${baseRel}/${dirent.name}` : dirent.name;
104
+ const isDir = dirent.isDirectory();
105
+ entries.push({
106
+ name: rel,
107
+ type: isDir ? 'directory' : dirent.isFile() ? 'file' : 'other',
108
+ });
109
+ if (isDir && depth < maxDepth) {
110
+ await walk(path.join(dir, dirent.name), rel, depth + 1, maxDepth, exclude, entries, signal);
111
+ }
112
+ }
113
+ }
114
+ /**
115
+ * Filter a flat list of FileEntry to those whose relative path matches at
116
+ * least one of {@link include} globs (matched against forward-slash paths).
117
+ */
118
+ export function filterByInclude(entries, include) {
119
+ if (include.length === 0 || (include.length === 1 && include[0] === '*')) {
120
+ return entries.filter(e => e.type === 'file');
121
+ }
122
+ const regexes = include.map(globToRegex);
123
+ return entries.filter(e => {
124
+ if (e.type !== 'file')
125
+ return false;
126
+ return regexes.some(re => re.test(e.name));
127
+ });
128
+ }
129
+ //# sourceMappingURL=_walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_walk.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/_walk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,477 @@
1
+ import { z } from 'zod';
2
+ import { promises as fs } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { typedOk, typedErr } from '../toolTypes.js';
5
+ // ────────────────────────────────────────────────────────────────────────────
6
+ // LCS-based diff (simplified Myers)
7
+ // ────────────────────────────────────────────────────────────────────────────
8
+ function lcsTable(a, b) {
9
+ const m = a.length;
10
+ const n = b.length;
11
+ const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
12
+ for (let i = 1; i <= m; i++) {
13
+ for (let j = 1; j <= n; j++) {
14
+ if (a[i - 1] === b[j - 1]) {
15
+ dp[i][j] = dp[i - 1][j - 1] + 1;
16
+ }
17
+ else {
18
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
19
+ }
20
+ }
21
+ }
22
+ return dp;
23
+ }
24
+ function buildHunks(a, b) {
25
+ const dp = lcsTable(a, b);
26
+ const ops = [];
27
+ let i = a.length;
28
+ let j = b.length;
29
+ while (i > 0 && j > 0) {
30
+ if (a[i - 1] === b[j - 1]) {
31
+ ops.push({ kind: ' ', text: a[i - 1] });
32
+ i--;
33
+ j--;
34
+ }
35
+ else if (dp[i - 1][j] >= dp[i][j - 1]) {
36
+ ops.push({ kind: '-', text: a[i - 1] });
37
+ i--;
38
+ }
39
+ else {
40
+ ops.push({ kind: '+', text: b[j - 1] });
41
+ j--;
42
+ }
43
+ }
44
+ while (i > 0) {
45
+ ops.push({ kind: '-', text: a[i - 1] });
46
+ i--;
47
+ }
48
+ while (j > 0) {
49
+ ops.push({ kind: '+', text: b[j - 1] });
50
+ j--;
51
+ }
52
+ ops.reverse();
53
+ return groupIntoHunks(ops);
54
+ }
55
+ function groupIntoHunks(ops) {
56
+ const CONTEXT = 3;
57
+ const hunks = [];
58
+ let i = 0;
59
+ while (i < ops.length) {
60
+ // Skip leading context that's not adjacent to a change
61
+ while (i < ops.length && ops[i].kind === ' ')
62
+ i++;
63
+ if (i >= ops.length)
64
+ break;
65
+ // Found a change at index i. Walk back CONTEXT lines for leading context.
66
+ const start = Math.max(0, i - CONTEXT);
67
+ let oldStart = 0, newStart = 0;
68
+ // Compute line numbers
69
+ {
70
+ let ol = 0, nl = 0;
71
+ for (let k = 0; k < start; k++) {
72
+ if (ops[k].kind !== '+')
73
+ ol++;
74
+ if (ops[k].kind !== '-')
75
+ nl++;
76
+ }
77
+ oldStart = ol + 1; // 1-indexed
78
+ newStart = nl + 1;
79
+ }
80
+ const hunkOps = [];
81
+ // Leading context
82
+ for (let k = start; k < i; k++)
83
+ hunkOps.push(ops[k]);
84
+ // Body: consume changes + trailing CONTEXT, but stop if we hit 2*CONTEXT
85
+ // non-change lines (forces a new hunk).
86
+ let nonChangeStreak = 0;
87
+ while (i < ops.length) {
88
+ const op = ops[i];
89
+ hunkOps.push(op);
90
+ if (op.kind === ' ') {
91
+ nonChangeStreak++;
92
+ if (nonChangeStreak > 2 * CONTEXT) {
93
+ // Trim trailing CONTEXT and break
94
+ hunkOps.splice(hunkOps.length - CONTEXT, CONTEXT);
95
+ i++;
96
+ break;
97
+ }
98
+ }
99
+ else {
100
+ nonChangeStreak = 0;
101
+ }
102
+ i++;
103
+ }
104
+ // Compute hunk line counts
105
+ let oldLines = 0, newLines = 0;
106
+ for (const op of hunkOps) {
107
+ if (op.kind !== '+')
108
+ oldLines++;
109
+ if (op.kind !== '-')
110
+ newLines++;
111
+ }
112
+ hunks.push({ oldStart, oldLines, newStart, newLines, ops: hunkOps });
113
+ }
114
+ return hunks;
115
+ }
116
+ function formatUnified(hunks, oldLabel, newLabel) {
117
+ const lines = [`--- ${oldLabel}`, `+++ ${newLabel}`];
118
+ for (const h of hunks) {
119
+ lines.push(`@@ -${h.oldStart},${h.oldLines} +${h.newStart},${h.newLines} @@`);
120
+ for (const op of h.ops) {
121
+ lines.push(op.kind + op.text);
122
+ }
123
+ }
124
+ return lines.join('\n');
125
+ }
126
+ function parseUnified(raw) {
127
+ const lines = raw.split('\n');
128
+ if (lines.length < 2 || !lines[0].startsWith('--- ') || !lines[1].startsWith('+++ ')) {
129
+ throw new Error('Invalid unified diff: missing --- / +++ headers');
130
+ }
131
+ const oldLabel = lines[0].slice(4).trim();
132
+ const newLabel = lines[1].slice(4).trim();
133
+ const hunks = [];
134
+ let i = 2;
135
+ while (i < lines.length) {
136
+ const m = lines[i].match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
137
+ if (!m) {
138
+ i++;
139
+ continue;
140
+ }
141
+ const oldStart = parseInt(m[1], 10);
142
+ const oldLines = m[2] === undefined ? 1 : parseInt(m[2], 10);
143
+ const newStart = parseInt(m[3], 10);
144
+ const newLines = m[4] === undefined ? 1 : parseInt(m[4], 10);
145
+ i++;
146
+ const ops = [];
147
+ let consumedOld = 0, consumedNew = 0;
148
+ while (i < lines.length && (consumedOld < oldLines || consumedNew < newLines)) {
149
+ const ln = lines[i];
150
+ if (ln.length === 0) {
151
+ ops.push({ kind: ' ', text: '' });
152
+ consumedOld++;
153
+ consumedNew++;
154
+ i++;
155
+ continue;
156
+ }
157
+ const c = ln[0];
158
+ const text = ln.slice(1);
159
+ if (c === ' ') {
160
+ ops.push({ kind: ' ', text });
161
+ consumedOld++;
162
+ consumedNew++;
163
+ i++;
164
+ }
165
+ else if (c === '-') {
166
+ ops.push({ kind: '-', text });
167
+ consumedOld++;
168
+ i++;
169
+ }
170
+ else if (c === '+') {
171
+ ops.push({ kind: '+', text });
172
+ consumedNew++;
173
+ i++;
174
+ }
175
+ else {
176
+ // Malformed hunk body
177
+ break;
178
+ }
179
+ }
180
+ hunks.push({ oldStart, oldLines, newStart, newLines, ops });
181
+ }
182
+ return { oldLabel, newLabel, hunks };
183
+ }
184
+ // ────────────────────────────────────────────────────────────────────────────
185
+ // Patch application (with optional fuzzy whitespace match)
186
+ // ────────────────────────────────────────────────────────────────────────────
187
+ function normalizeWhitespace(s) {
188
+ return s.replace(/\s+/g, ' ').trim();
189
+ }
190
+ /**
191
+ * Apply ALL hunks to the original file lines in a single pass.
192
+ *
193
+ * Correct algorithm: each hunk's oldStart refers to the ORIGINAL file, not the
194
+ * post-previous-hunk state. We walk the file once, copying unmodified prefix
195
+ * and rewriting per-hunk regions. Atomic: if ANY hunk fails, no commits happen.
196
+ */
197
+ function applyAllHunks(originalLines, hunks, fuzzy) {
198
+ const out = [];
199
+ let fileIdx = 0; // pointer into originalLines
200
+ let hunksApplied = 0;
201
+ let hunksSkipped = 0;
202
+ let lastReason;
203
+ for (const hunk of hunks) {
204
+ const startIdx = hunk.oldStart - 1; // 0-indexed
205
+ if (startIdx < 0) {
206
+ hunksSkipped++;
207
+ lastReason = `oldStart ${hunk.oldStart} out of range (must be >= 1)`;
208
+ continue;
209
+ }
210
+ if (startIdx > originalLines.length) {
211
+ hunksSkipped++;
212
+ lastReason = `oldStart ${hunk.oldStart} beyond file end (length ${originalLines.length})`;
213
+ continue;
214
+ }
215
+ // Copy unmodified prefix
216
+ while (fileIdx < startIdx) {
217
+ out.push(originalLines[fileIdx]);
218
+ fileIdx++;
219
+ }
220
+ // Walk hunk ops against original file
221
+ let hunkFileIdx = fileIdx;
222
+ let hunkIdx = 0;
223
+ const hunkOut = [];
224
+ let hunkOk = true;
225
+ while (hunkIdx < hunk.ops.length) {
226
+ const op = hunk.ops[hunkIdx];
227
+ if (op.kind === ' ') {
228
+ const fileLine = originalLines[hunkFileIdx] ?? '';
229
+ if (fileLine === op.text || (fuzzy && normalizeWhitespace(fileLine) === normalizeWhitespace(op.text))) {
230
+ hunkOut.push(fileLine);
231
+ hunkFileIdx++;
232
+ hunkIdx++;
233
+ }
234
+ else {
235
+ lastReason = `Context mismatch at line ${hunkFileIdx + 1}: expected "${op.text.slice(0, 60)}", got "${fileLine.slice(0, 60)}"`;
236
+ hunkOk = false;
237
+ break;
238
+ }
239
+ }
240
+ else if (op.kind === '-') {
241
+ const fileLine = originalLines[hunkFileIdx] ?? '';
242
+ if (fileLine === op.text || (fuzzy && normalizeWhitespace(fileLine) === normalizeWhitespace(op.text))) {
243
+ hunkFileIdx++;
244
+ hunkIdx++;
245
+ }
246
+ else {
247
+ lastReason = `Delete mismatch at line ${hunkFileIdx + 1}: expected "${op.text.slice(0, 60)}", got "${fileLine.slice(0, 60)}"`;
248
+ hunkOk = false;
249
+ break;
250
+ }
251
+ }
252
+ else {
253
+ // '+'
254
+ hunkOut.push(op.text);
255
+ hunkIdx++;
256
+ }
257
+ }
258
+ if (!hunkOk) {
259
+ hunksSkipped++;
260
+ break; // atomic: stop on first failure
261
+ }
262
+ out.push(...hunkOut);
263
+ fileIdx = hunkFileIdx;
264
+ hunksApplied++;
265
+ }
266
+ // Copy remaining unmodified tail
267
+ while (fileIdx < originalLines.length) {
268
+ out.push(originalLines[fileIdx]);
269
+ fileIdx++;
270
+ }
271
+ return { lines: out, hunksApplied, hunksSkipped, lastReason };
272
+ }
273
+ // ────────────────────────────────────────────────────────────────────────────
274
+ // show_diff tool
275
+ // ────────────────────────────────────────────────────────────────────────────
276
+ const ShowDiffArgsSchema = z.object({
277
+ path: z.string().min(1),
278
+ proposedContent: z.string(),
279
+ contextLines: z.number().int().nonnegative().default(3),
280
+ });
281
+ export { ShowDiffArgsSchema };
282
+ export const showDiffTool = {
283
+ name: 'show_diff',
284
+ description: 'Show unified diff between current file content and proposed content. ' +
285
+ 'Read-only — does NOT modify the file. Use this to preview edits before applying ' +
286
+ 'with edit_file or apply_diff.',
287
+ permissions: ['read'],
288
+ timeoutMs: 15000,
289
+ inputSchema: ShowDiffArgsSchema,
290
+ execute: async (args, ctx) => {
291
+ try {
292
+ const absPath = path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path);
293
+ let current = '';
294
+ try {
295
+ current = await fs.readFile(absPath, 'utf-8');
296
+ }
297
+ catch (err) {
298
+ if (err.code !== 'ENOENT') {
299
+ return typedErr(err instanceof Error ? err.message : String(err));
300
+ }
301
+ // ENOENT → treat as empty file (creating new)
302
+ }
303
+ const a = current.split('\n');
304
+ const b = args.proposedContent.split('\n');
305
+ // Re-implement groupIntoHunks with custom CONTEXT for show_diff
306
+ const CONTEXT = args.contextLines;
307
+ const rawOps = [];
308
+ // Inline LCS — duplicated to honor custom CONTEXT (groupIntoHunks hard-codes 3).
309
+ const dp = lcsTable(a, b);
310
+ let i = a.length, j = b.length;
311
+ while (i > 0 && j > 0) {
312
+ if (a[i - 1] === b[j - 1]) {
313
+ rawOps.push({ kind: ' ', text: a[i - 1] });
314
+ i--;
315
+ j--;
316
+ }
317
+ else if (dp[i - 1][j] >= dp[i][j - 1]) {
318
+ rawOps.push({ kind: '-', text: a[i - 1] });
319
+ i--;
320
+ }
321
+ else {
322
+ rawOps.push({ kind: '+', text: b[j - 1] });
323
+ j--;
324
+ }
325
+ }
326
+ while (i > 0) {
327
+ rawOps.push({ kind: '-', text: a[i - 1] });
328
+ i--;
329
+ }
330
+ while (j > 0) {
331
+ rawOps.push({ kind: '+', text: b[j - 1] });
332
+ j--;
333
+ }
334
+ rawOps.reverse();
335
+ // Group with custom CONTEXT
336
+ const hunks = [];
337
+ let k = 0;
338
+ while (k < rawOps.length) {
339
+ while (k < rawOps.length && rawOps[k].kind === ' ')
340
+ k++;
341
+ if (k >= rawOps.length)
342
+ break;
343
+ const start = Math.max(0, k - CONTEXT);
344
+ let oldStart = 0, newStart = 0;
345
+ {
346
+ let ol = 0, nl = 0;
347
+ for (let q = 0; q < start; q++) {
348
+ if (rawOps[q].kind !== '+')
349
+ ol++;
350
+ if (rawOps[q].kind !== '-')
351
+ nl++;
352
+ }
353
+ oldStart = ol + 1;
354
+ newStart = nl + 1;
355
+ }
356
+ const hunkOps = [];
357
+ for (let q = start; q < k; q++)
358
+ hunkOps.push(rawOps[q]);
359
+ let nonChangeStreak = 0;
360
+ while (k < rawOps.length) {
361
+ const op = rawOps[k];
362
+ hunkOps.push(op);
363
+ if (op.kind === ' ') {
364
+ nonChangeStreak++;
365
+ if (nonChangeStreak > 2 * CONTEXT) {
366
+ hunkOps.splice(hunkOps.length - CONTEXT, CONTEXT);
367
+ k++;
368
+ break;
369
+ }
370
+ }
371
+ else {
372
+ nonChangeStreak = 0;
373
+ }
374
+ k++;
375
+ }
376
+ let oldLines = 0, newLines = 0;
377
+ for (const op of hunkOps) {
378
+ if (op.kind !== '+')
379
+ oldLines++;
380
+ if (op.kind !== '-')
381
+ newLines++;
382
+ }
383
+ hunks.push({ oldStart, oldLines, newStart, newLines, ops: hunkOps });
384
+ }
385
+ const diff = formatUnified(hunks, absPath, args.path);
386
+ const summaries = hunks.map(h => ({
387
+ oldStart: h.oldStart,
388
+ oldLines: h.oldLines,
389
+ newStart: h.newStart,
390
+ newLines: h.newLines,
391
+ added: h.ops.filter(o => o.kind === '+').length,
392
+ removed: h.ops.filter(o => o.kind === '-').length,
393
+ }));
394
+ const added = summaries.reduce((s, h) => s + h.added, 0);
395
+ const removed = summaries.reduce((s, h) => s + h.removed, 0);
396
+ return typedOk({
397
+ path: absPath,
398
+ diff,
399
+ hunks: summaries,
400
+ added,
401
+ removed,
402
+ unchanged: added === 0 && removed === 0,
403
+ });
404
+ }
405
+ catch (err) {
406
+ return typedErr(err instanceof Error ? err.message : String(err));
407
+ }
408
+ },
409
+ };
410
+ // ────────────────────────────────────────────────────────────────────────────
411
+ // apply_diff tool
412
+ // ────────────────────────────────────────────────────────────────────────────
413
+ const ApplyDiffArgsSchema = z.object({
414
+ path: z.string().min(1),
415
+ diff: z.string().min(1),
416
+ fuzzyMatch: z.boolean().default(false),
417
+ dryRun: z.boolean().default(false),
418
+ });
419
+ export { ApplyDiffArgsSchema };
420
+ export const applyDiffTool = {
421
+ name: 'apply_diff',
422
+ description: 'Apply a unified diff patch to a file. Parses ---/+++/@@ headers and applies each ' +
423
+ 'hunk sequentially. With fuzzyMatch=true, tolerates whitespace differences. ' +
424
+ 'With dryRun=true, returns the final content without writing. ' +
425
+ 'Atomic: if any hunk fails, no partial write occurs.',
426
+ permissions: ['write'],
427
+ timeoutMs: 15000,
428
+ inputSchema: ApplyDiffArgsSchema,
429
+ execute: async (args, ctx) => {
430
+ try {
431
+ const absPath = path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path);
432
+ let current = '';
433
+ try {
434
+ current = await fs.readFile(absPath, 'utf-8');
435
+ }
436
+ catch (err) {
437
+ if (err.code !== 'ENOENT') {
438
+ return typedErr(err instanceof Error ? err.message : String(err));
439
+ }
440
+ // ENOENT → empty file
441
+ }
442
+ let parsed;
443
+ try {
444
+ parsed = parseUnified(args.diff);
445
+ }
446
+ catch (err) {
447
+ return typedErr(`Parse failed: ${err instanceof Error ? err.message : String(err)}`);
448
+ }
449
+ if (parsed.hunks.length === 0) {
450
+ return typedErr('No hunks found in diff');
451
+ }
452
+ // Apply ALL hunks atomically against the ORIGINAL file. Each hunk's
453
+ // oldStart refers to the original file, not the post-previous-hunk state.
454
+ const originalLines = current.split('\n');
455
+ const result = applyAllHunks(originalLines, parsed.hunks, args.fuzzyMatch);
456
+ const finalContent = result.lines.join('\n');
457
+ const ok = result.hunksSkipped === 0;
458
+ if (ok && !args.dryRun) {
459
+ await fs.mkdir(path.dirname(absPath), { recursive: true });
460
+ await fs.writeFile(absPath, finalContent, 'utf-8');
461
+ }
462
+ return typedOk({
463
+ path: absPath,
464
+ applied: ok,
465
+ hunksApplied: result.hunksApplied,
466
+ hunksSkipped: result.hunksSkipped,
467
+ finalContent: args.dryRun || !ok ? '' : finalContent, // omit content on dryRun/skip to save tokens
468
+ dryRun: args.dryRun,
469
+ reason: ok ? undefined : result.lastReason,
470
+ });
471
+ }
472
+ catch (err) {
473
+ return typedErr(err instanceof Error ? err.message : String(err));
474
+ }
475
+ },
476
+ };
477
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/diff.ts"],"names":[],"mappings":"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"}