@nervekit/tools 0.1.0 → 0.2.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 (88) hide show
  1. package/dist/execution/shell/bash.d.ts.map +1 -1
  2. package/dist/execution/shell/bash.js +12 -1
  3. package/dist/execution/shell/bash.js.map +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/package.json +2 -2
  9. package/dist/catalog/orchestration/process.tools.d.ts +0 -68
  10. package/dist/catalog/orchestration/process.tools.d.ts.map +0 -1
  11. package/dist/catalog/orchestration/process.tools.js +0 -96
  12. package/dist/catalog/orchestration/process.tools.js.map +0 -1
  13. package/dist/catalog/orchestration/subagent.tools.d.ts +0 -16
  14. package/dist/catalog/orchestration/subagent.tools.d.ts.map +0 -1
  15. package/dist/catalog/orchestration/subagent.tools.js +0 -25
  16. package/dist/catalog/orchestration/subagent.tools.js.map +0 -1
  17. package/dist/definitions.d.ts +0 -2
  18. package/dist/definitions.d.ts.map +0 -1
  19. package/dist/definitions.js +0 -2
  20. package/dist/definitions.js.map +0 -1
  21. package/dist/execution/atomic-write.d.ts +0 -2
  22. package/dist/execution/atomic-write.d.ts.map +0 -1
  23. package/dist/execution/atomic-write.js +0 -7
  24. package/dist/execution/atomic-write.js.map +0 -1
  25. package/dist/execution/bash.d.ts +0 -3
  26. package/dist/execution/bash.d.ts.map +0 -1
  27. package/dist/execution/bash.js +0 -133
  28. package/dist/execution/bash.js.map +0 -1
  29. package/dist/execution/common.d.ts +0 -2
  30. package/dist/execution/common.d.ts.map +0 -1
  31. package/dist/execution/common.js +0 -6
  32. package/dist/execution/common.js.map +0 -1
  33. package/dist/execution/dispatch.d.ts +0 -4
  34. package/dist/execution/dispatch.d.ts.map +0 -1
  35. package/dist/execution/dispatch.js +0 -54
  36. package/dist/execution/dispatch.js.map +0 -1
  37. package/dist/execution/edit.d.ts +0 -9
  38. package/dist/execution/edit.d.ts.map +0 -1
  39. package/dist/execution/edit.js +0 -175
  40. package/dist/execution/edit.js.map +0 -1
  41. package/dist/execution/file-mutation-queue.d.ts +0 -2
  42. package/dist/execution/file-mutation-queue.d.ts.map +0 -1
  43. package/dist/execution/file-mutation-queue.js +0 -19
  44. package/dist/execution/file-mutation-queue.js.map +0 -1
  45. package/dist/execution/filesystem/legacy-edit.d.ts +0 -9
  46. package/dist/execution/filesystem/legacy-edit.d.ts.map +0 -1
  47. package/dist/execution/filesystem/legacy-edit.js +0 -122
  48. package/dist/execution/filesystem/legacy-edit.js.map +0 -1
  49. package/dist/execution/find.d.ts +0 -3
  50. package/dist/execution/find.d.ts.map +0 -1
  51. package/dist/execution/find.js +0 -90
  52. package/dist/execution/find.js.map +0 -1
  53. package/dist/execution/list.d.ts +0 -3
  54. package/dist/execution/list.d.ts.map +0 -1
  55. package/dist/execution/list.js +0 -46
  56. package/dist/execution/list.js.map +0 -1
  57. package/dist/execution/path.d.ts +0 -7
  58. package/dist/execution/path.d.ts.map +0 -1
  59. package/dist/execution/path.js +0 -69
  60. package/dist/execution/path.js.map +0 -1
  61. package/dist/execution/read.d.ts +0 -3
  62. package/dist/execution/read.d.ts.map +0 -1
  63. package/dist/execution/read.js +0 -97
  64. package/dist/execution/read.js.map +0 -1
  65. package/dist/execution/search-utils.d.ts +0 -8
  66. package/dist/execution/search-utils.d.ts.map +0 -1
  67. package/dist/execution/search-utils.js +0 -110
  68. package/dist/execution/search-utils.js.map +0 -1
  69. package/dist/execution/search.d.ts +0 -3
  70. package/dist/execution/search.d.ts.map +0 -1
  71. package/dist/execution/search.js +0 -131
  72. package/dist/execution/search.js.map +0 -1
  73. package/dist/execution/truncate.d.ts +0 -21
  74. package/dist/execution/truncate.d.ts.map +0 -1
  75. package/dist/execution/truncate.js +0 -94
  76. package/dist/execution/truncate.js.map +0 -1
  77. package/dist/execution/web-fetch.d.ts +0 -3
  78. package/dist/execution/web-fetch.d.ts.map +0 -1
  79. package/dist/execution/web-fetch.js +0 -132
  80. package/dist/execution/web-fetch.js.map +0 -1
  81. package/dist/execution/web-search.d.ts +0 -3
  82. package/dist/execution/web-search.d.ts.map +0 -1
  83. package/dist/execution/web-search.js +0 -59
  84. package/dist/execution/web-search.js.map +0 -1
  85. package/dist/execution/write.d.ts +0 -3
  86. package/dist/execution/write.d.ts.map +0 -1
  87. package/dist/execution/write.js +0 -21
  88. package/dist/execution/write.js.map +0 -1
@@ -1,9 +0,0 @@
1
- import type { ToolExecutionContext, ToolExecutionResult } from "../types.js";
2
- type NormalizedEdit = {
3
- oldText: string;
4
- newText: string;
5
- };
6
- export declare function executeEdit(args: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolExecutionResult>;
7
- export declare function normalizeEditOperations(args: Record<string, unknown>): NormalizedEdit[];
8
- export {};
9
- //# sourceMappingURL=edit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/execution/edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAK7E,KAAK,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAG3D,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AAsHD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,cAAc,EAAE,CA2BlB"}
@@ -1,175 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import { writeTextFileAtomically } from "./atomic-write.js";
3
- import { withFileMutationQueue } from "./file-mutation-queue.js";
4
- import { resolveToolPath } from "./path.js";
5
- export async function executeEdit(args, context) {
6
- const path = resolveToolPath(context.cwd, args.path);
7
- const edits = normalizeEditOperations(args);
8
- return withFileMutationQueue(path, async () => {
9
- const raw = await readFile(path, "utf8");
10
- const bom = raw.startsWith("\uFEFF") ? "\uFEFF" : "";
11
- const withoutBom = bom ? raw.slice(1) : raw;
12
- const lineEnding = detectLineEnding(withoutBom);
13
- const content = normalizeLineEndings(withoutBom);
14
- const normalizedEdits = edits.map((edit) => ({
15
- oldText: normalizeLineEndings(edit.oldText),
16
- newText: normalizeLineEndings(edit.newText),
17
- }));
18
- const matches = normalizedEdits.map((edit, index) => findUniqueMatch(content, edit, index));
19
- const ordered = [...matches].sort((a, b) => a.start - b.start);
20
- for (let i = 1; i < ordered.length; i++) {
21
- const previous = ordered[i - 1];
22
- const current = ordered[i];
23
- if (!previous || !current)
24
- continue;
25
- if (current.start < previous.end) {
26
- throw new Error(`edits[${current.index}] overlaps edits[${previous.index}]; merge overlapping changes.`);
27
- }
28
- }
29
- let updated = content;
30
- for (const edit of [...ordered].reverse()) {
31
- updated = `${updated.slice(0, edit.start)}${edit.newText}${updated.slice(edit.end)}`;
32
- }
33
- if (updated === content) {
34
- throw new Error("Edit would not change the file.");
35
- }
36
- const restored = bom + restoreLineEndings(updated, lineEnding);
37
- await writeTextFileAtomically(path, restored);
38
- const contentMessage = `Edited file with ${edits.length} replacement(s).`;
39
- return {
40
- path,
41
- content: contentMessage,
42
- contentBlocks: [{ type: "text", text: contentMessage }],
43
- details: {
44
- diff: generateDiffString(content, updated),
45
- firstChangedLine: firstChangedLine(content, updated),
46
- lineEnding,
47
- bom: Boolean(bom),
48
- },
49
- };
50
- });
51
- }
52
- function findUniqueMatch(content, edit, index) {
53
- const first = content.indexOf(edit.oldText);
54
- if (first >= 0) {
55
- if (content.indexOf(edit.oldText, first + edit.oldText.length) >= 0) {
56
- throw new Error(`edits[${index}].oldText matched more than once; provide a unique region.`);
57
- }
58
- return { ...edit, index, start: first, end: first + edit.oldText.length };
59
- }
60
- const fuzzy = fuzzyFind(content, edit.oldText);
61
- if (!fuzzy)
62
- throw new Error(`edits[${index}].oldText was not found.`);
63
- if (fuzzy.duplicate) {
64
- throw new Error(`edits[${index}].oldText matched more than once; provide a unique region.`);
65
- }
66
- return { ...edit, index, start: fuzzy.start, end: fuzzy.end };
67
- }
68
- function fuzzyFind(content, needle) {
69
- const normalizedNeedle = normalizeForFuzzyMatch(needle);
70
- const lines = content.split("\n");
71
- const needleLineCount = needle.split("\n").length;
72
- const matches = [];
73
- const offsets = [];
74
- let offset = 0;
75
- for (const line of lines) {
76
- offsets.push(offset);
77
- offset += line.length + 1;
78
- }
79
- for (let line = 0; line < lines.length; line += 1) {
80
- for (let count = Math.max(1, needleLineCount - 1); count <= needleLineCount + 1; count += 1) {
81
- const chunk = lines.slice(line, line + count).join("\n");
82
- if (normalizeForFuzzyMatch(chunk) !== normalizedNeedle)
83
- continue;
84
- const start = offsets[line] ?? 0;
85
- const end = start + chunk.length;
86
- matches.push({ start, end });
87
- }
88
- }
89
- const first = matches[0];
90
- if (!first)
91
- return undefined;
92
- return { ...first, duplicate: matches.length > 1 };
93
- }
94
- function normalizeForFuzzyMatch(input) {
95
- return normalizeLineEndings(input)
96
- .replace(/[“”]/g, '"')
97
- .replace(/[‘’]/g, "'")
98
- .replace(/[–—]/g, "-")
99
- .split("\n")
100
- .map((line) => line.trimEnd())
101
- .join("\n")
102
- .trim();
103
- }
104
- function detectLineEnding(input) {
105
- const crlf = input.match(/\r\n/g)?.length ?? 0;
106
- const lf = input.match(/(?<!\r)\n/g)?.length ?? 0;
107
- return crlf > lf ? "\r\n" : "\n";
108
- }
109
- function normalizeLineEndings(input) {
110
- return input.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
111
- }
112
- function restoreLineEndings(input, lineEnding) {
113
- return lineEnding === "\n" ? input : input.replace(/\n/g, "\r\n");
114
- }
115
- function firstChangedLine(before, after) {
116
- const beforeLines = before.split("\n");
117
- const afterLines = after.split("\n");
118
- const length = Math.max(beforeLines.length, afterLines.length);
119
- for (let index = 0; index < length; index += 1) {
120
- if (beforeLines[index] !== afterLines[index])
121
- return index + 1;
122
- }
123
- return undefined;
124
- }
125
- function generateDiffString(before, after) {
126
- const line = firstChangedLine(before, after) ?? 1;
127
- const beforeLines = before.split("\n");
128
- const afterLines = after.split("\n");
129
- const start = Math.max(0, line - 3);
130
- const end = Math.min(Math.max(beforeLines.length, afterLines.length), line + 3);
131
- const output = [
132
- `@@ -${start + 1},${end - start} +${start + 1},${end - start} @@`,
133
- ];
134
- for (let index = start; index < end; index += 1) {
135
- const beforeLine = beforeLines[index];
136
- const afterLine = afterLines[index];
137
- if (beforeLine === afterLine)
138
- output.push(` ${beforeLine ?? ""}`);
139
- else {
140
- if (beforeLine !== undefined)
141
- output.push(`-${beforeLine}`);
142
- if (afterLine !== undefined)
143
- output.push(`+${afterLine}`);
144
- }
145
- }
146
- return output.join("\n");
147
- }
148
- export function normalizeEditOperations(args) {
149
- if (Array.isArray(args.edits)) {
150
- if (args.edits.length === 0) {
151
- throw new Error("Tool argument 'edits' must contain at least one edit.");
152
- }
153
- return args.edits.map((entry, index) => {
154
- if (!entry || typeof entry !== "object") {
155
- throw new Error(`edits[${index}] must be an object.`);
156
- }
157
- const edit = entry;
158
- if (typeof edit.oldText !== "string" || edit.oldText.length === 0) {
159
- throw new Error(`edits[${index}].oldText must be a non-empty string.`);
160
- }
161
- if (typeof edit.newText !== "string") {
162
- throw new Error(`edits[${index}].newText must be a string.`);
163
- }
164
- return { oldText: edit.oldText, newText: edit.newText };
165
- });
166
- }
167
- if (typeof args.oldText !== "string" || args.oldText.length === 0) {
168
- throw new Error("Tool argument 'oldText' must be a non-empty string.");
169
- }
170
- if (typeof args.newText !== "string") {
171
- throw new Error("Tool argument 'newText' must be a string.");
172
- }
173
- return [{ oldText: args.oldText, newText: args.newText }];
174
- }
175
- //# sourceMappingURL=edit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/execution/edit.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function withFileMutationQueue<T>(path: string, task: () => Promise<T>): Promise<T>;
2
- //# sourceMappingURL=file-mutation-queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-mutation-queue.d.ts","sourceRoot":"","sources":["../../src/execution/file-mutation-queue.ts"],"names":[],"mappings":"AAEA,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
@@ -1,19 +0,0 @@
1
- const queues = new Map();
2
- export async function withFileMutationQueue(path, task) {
3
- const previous = queues.get(path) ?? Promise.resolve();
4
- let release;
5
- const current = new Promise((resolve) => {
6
- release = resolve;
7
- });
8
- queues.set(path, previous.then(() => current, () => current));
9
- await previous.catch(() => undefined);
10
- try {
11
- return await task();
12
- }
13
- finally {
14
- release();
15
- if (queues.get(path) === current)
16
- queues.delete(path);
17
- }
18
- }
19
- //# sourceMappingURL=file-mutation-queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-mutation-queue.js","sourceRoot":"","sources":["../../src/execution/file-mutation-queue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,IAAsB;IAEtB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACvD,IAAI,OAAoB,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5C,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,GAAG,CACR,IAAI,EACJ,QAAQ,CAAC,IAAI,CACX,GAAG,EAAE,CAAC,OAAO,EACb,GAAG,EAAE,CAAC,OAAO,CACd,CACF,CAAC;IACF,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;QACV,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { ToolExecutionContext, ToolExecutionResult } from "../../types.js";
2
- type NormalizedLegacyEdit = {
3
- oldText: string;
4
- newText: string;
5
- };
6
- export declare function executeLegacyEdit(args: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolExecutionResult>;
7
- export declare function normalizeLegacyEditOperations(args: Record<string, unknown>): NormalizedLegacyEdit[];
8
- export {};
9
- //# sourceMappingURL=legacy-edit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"legacy-edit.d.ts","sourceRoot":"","sources":["../../../src/execution/filesystem/legacy-edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAahF,KAAK,oBAAoB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAOjE,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AA2DD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,oBAAoB,EAAE,CA2BxB"}
@@ -1,122 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import { writeTextFileAtomically } from "./atomic-write.js";
3
- import { withFileMutationQueue } from "./file-mutation-queue.js";
4
- import { resolveToolPath } from "./path.js";
5
- import { detectLineEnding, firstChangedLine, generateDiffString, normalizeForTrimmedMatch, normalizeLineEndings, restoreLineEndings, } from "./text-editing.js";
6
- export async function executeLegacyEdit(args, context) {
7
- const path = resolveToolPath(context.cwd, args.path);
8
- const edits = normalizeLegacyEditOperations(args);
9
- return withFileMutationQueue(path, async () => {
10
- const raw = await readFile(path, "utf8");
11
- const bom = raw.startsWith("\uFEFF") ? "\uFEFF" : "";
12
- const withoutBom = bom ? raw.slice(1) : raw;
13
- const lineEnding = detectLineEnding(withoutBom);
14
- const content = normalizeLineEndings(withoutBom);
15
- const normalizedEdits = edits.map((edit) => ({
16
- oldText: normalizeLineEndings(edit.oldText),
17
- newText: normalizeLineEndings(edit.newText),
18
- }));
19
- const matches = normalizedEdits.map((edit, index) => findUniqueMatch(content, edit, index));
20
- const ordered = [...matches].sort((a, b) => a.start - b.start);
21
- for (let i = 1; i < ordered.length; i++) {
22
- const previous = ordered[i - 1];
23
- const current = ordered[i];
24
- if (!previous || !current)
25
- continue;
26
- if (current.start < previous.end) {
27
- throw new Error(`edits[${current.index}] overlaps edits[${previous.index}]; merge overlapping changes.`);
28
- }
29
- }
30
- let updated = content;
31
- for (const edit of [...ordered].reverse()) {
32
- updated = `${updated.slice(0, edit.start)}${edit.newText}${updated.slice(edit.end)}`;
33
- }
34
- if (updated === content) {
35
- throw new Error("Legacy edit would not change the file.");
36
- }
37
- const restored = bom + restoreLineEndings(updated, lineEnding);
38
- await writeTextFileAtomically(path, restored);
39
- const contentMessage = `Edited file with ${edits.length} replacement(s).`;
40
- return {
41
- path,
42
- content: contentMessage,
43
- contentBlocks: [{ type: "text", text: contentMessage }],
44
- details: {
45
- diff: generateDiffString(content, updated),
46
- firstChangedLine: firstChangedLine(content, updated),
47
- lineEnding,
48
- bom: Boolean(bom),
49
- },
50
- };
51
- });
52
- }
53
- function findUniqueMatch(content, edit, index) {
54
- const first = content.indexOf(edit.oldText);
55
- if (first >= 0) {
56
- if (content.indexOf(edit.oldText, first + edit.oldText.length) >= 0) {
57
- throw new Error(`edits[${index}].oldText matched more than once; provide a unique region.`);
58
- }
59
- return { ...edit, index, start: first, end: first + edit.oldText.length };
60
- }
61
- const fuzzy = fuzzyFind(content, edit.oldText);
62
- if (!fuzzy)
63
- throw new Error(`edits[${index}].oldText was not found.`);
64
- if (fuzzy.duplicate) {
65
- throw new Error(`edits[${index}].oldText matched more than once; provide a unique region.`);
66
- }
67
- return { ...edit, index, start: fuzzy.start, end: fuzzy.end };
68
- }
69
- function fuzzyFind(content, needle) {
70
- const normalizedNeedle = normalizeForTrimmedMatch(needle);
71
- const lines = content.split("\n");
72
- const needleLineCount = needle.split("\n").length;
73
- const matches = [];
74
- const offsets = [];
75
- let offset = 0;
76
- for (const line of lines) {
77
- offsets.push(offset);
78
- offset += line.length + 1;
79
- }
80
- for (let line = 0; line < lines.length; line += 1) {
81
- for (let count = Math.max(1, needleLineCount - 1); count <= needleLineCount + 1; count += 1) {
82
- const chunk = lines.slice(line, line + count).join("\n");
83
- if (normalizeForTrimmedMatch(chunk) !== normalizedNeedle)
84
- continue;
85
- const start = offsets[line] ?? 0;
86
- const end = start + chunk.length;
87
- matches.push({ start, end });
88
- }
89
- }
90
- const first = matches[0];
91
- if (!first)
92
- return undefined;
93
- return { ...first, duplicate: matches.length > 1 };
94
- }
95
- export function normalizeLegacyEditOperations(args) {
96
- if (Array.isArray(args.edits)) {
97
- if (args.edits.length === 0) {
98
- throw new Error("Tool argument 'edits' must contain at least one edit.");
99
- }
100
- return args.edits.map((entry, index) => {
101
- if (!entry || typeof entry !== "object") {
102
- throw new Error(`edits[${index}] must be an object.`);
103
- }
104
- const edit = entry;
105
- if (typeof edit.oldText !== "string" || edit.oldText.length === 0) {
106
- throw new Error(`edits[${index}].oldText must be a non-empty string.`);
107
- }
108
- if (typeof edit.newText !== "string") {
109
- throw new Error(`edits[${index}].newText must be a string.`);
110
- }
111
- return { oldText: edit.oldText, newText: edit.newText };
112
- });
113
- }
114
- if (typeof args.oldText !== "string" || args.oldText.length === 0) {
115
- throw new Error("Tool argument 'oldText' must be a non-empty string.");
116
- }
117
- if (typeof args.newText !== "string") {
118
- throw new Error("Tool argument 'newText' must be a string.");
119
- }
120
- return [{ oldText: args.oldText, newText: args.newText }];
121
- }
122
- //# sourceMappingURL=legacy-edit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"legacy-edit.js","sourceRoot":"","sources":["../../../src/execution/filesystem/legacy-edit.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { ToolExecutionContext, ToolExecutionResult } from "../types.js";
2
- export declare function executeFind(args: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolExecutionResult>;
3
- //# sourceMappingURL=find.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/execution/find.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAY7E,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA0B9B"}
@@ -1,90 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { stat } from "node:fs/promises";
3
- import { relative } from "node:path";
4
- import { promisify } from "node:util";
5
- import { numberArg } from "./common.js";
6
- import { isErrnoException, pathNotFoundMessage, resolveToolPath, } from "./path.js";
7
- import { globToRegExp, walkFiles } from "./search-utils.js";
8
- import { truncateHead } from "./truncate.js";
9
- const execFileAsync = promisify(execFile);
10
- export async function executeFind(args, context) {
11
- if (typeof args.pattern !== "string" || args.pattern.length === 0) {
12
- throw new Error("Tool argument 'pattern' must be a non-empty string.");
13
- }
14
- const input = args.path ?? ".";
15
- const root = resolveToolPath(context.cwd, input);
16
- await stat(root).catch((error) => {
17
- if (isErrnoException(error) && error.code === "ENOENT") {
18
- throw new Error(pathNotFoundMessage("find", input, root));
19
- }
20
- throw error;
21
- });
22
- const limit = Math.min(numberArg(args.limit, 1000), 5000);
23
- const fd = await runFd(args.pattern, root, limit).catch(() => undefined);
24
- const paths = fd ?? (await fallbackFind(root, args.pattern, limit));
25
- const entries = paths
26
- .slice(0, limit)
27
- .map((path) => ({ path, kind: "file" }));
28
- const formatted = formatFind(paths, limit);
29
- return {
30
- path: root,
31
- entries,
32
- content: formatted.content,
33
- contentBlocks: [{ type: "text", text: formatted.content }],
34
- details: formatted.details,
35
- };
36
- }
37
- async function runFd(pattern, root, limit) {
38
- const fdArgs = [
39
- "--hidden",
40
- "--glob",
41
- "--type",
42
- "file",
43
- "--color=never",
44
- "--no-require-git",
45
- "--max-results",
46
- String(limit),
47
- ];
48
- let effectivePattern = pattern;
49
- if (pattern.includes("/")) {
50
- fdArgs.push("--full-path");
51
- if (!pattern.startsWith("/") && !pattern.startsWith("**/")) {
52
- effectivePattern = `**/${pattern}`;
53
- }
54
- }
55
- fdArgs.push("--", effectivePattern, root);
56
- const { stdout } = await execFileAsync("fd", fdArgs, {
57
- timeout: 30_000,
58
- maxBuffer: 1024 * 1024,
59
- });
60
- return stdout
61
- .split(/\r?\n/)
62
- .map((line) => line.trim())
63
- .filter(Boolean)
64
- .map((path) => (relative(root, path) || path).replaceAll("\\", "/"));
65
- }
66
- async function fallbackFind(root, pattern, limit) {
67
- const results = [];
68
- const regex = globToRegExp(pattern);
69
- await walkFiles(root, root, limit, async (_absolutePath, relativePath) => {
70
- if (regex.test(relativePath))
71
- results.push(relativePath.replaceAll("\\", "/"));
72
- }, () => results.length >= limit);
73
- return results;
74
- }
75
- function formatFind(paths, limit) {
76
- const lines = paths.slice(0, limit);
77
- if (lines.length === 0)
78
- lines.push("No files found.");
79
- if (paths.length >= limit) {
80
- lines.push("", `[Result limit ${limit} reached. Increase limit or refine the pattern for more results.]`);
81
- }
82
- const truncated = truncateHead(lines.join("\n"), {
83
- maxLines: Number.MAX_SAFE_INTEGER,
84
- });
85
- return {
86
- content: truncated.text,
87
- details: truncated.truncated ? { truncation: truncated } : undefined,
88
- };
89
- }
90
- //# sourceMappingURL=find.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/execution/find.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { ToolExecutionContext, ToolExecutionResult } from "../types.js";
2
- export declare function executeLs(args: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolExecutionResult>;
3
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/execution/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAS7E,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA2C9B"}
@@ -1,46 +0,0 @@
1
- import { readdir, stat } from "node:fs/promises";
2
- import { numberArg } from "./common.js";
3
- import { isErrnoException, pathNotFoundMessage, resolveToolPath, } from "./path.js";
4
- import { truncateHead } from "./truncate.js";
5
- export async function executeLs(args, context) {
6
- const input = args.path ?? ".";
7
- const root = resolveToolPath(context.cwd, input);
8
- const info = await stat(root).catch((error) => {
9
- if (isErrnoException(error) && error.code === "ENOENT") {
10
- throw new Error(pathNotFoundMessage("ls", input, root));
11
- }
12
- throw error;
13
- });
14
- if (!info.isDirectory())
15
- throw new Error("ls path is not a directory.");
16
- const limit = Math.min(numberArg(args.limit, 500), 5000);
17
- const dirEntries = await readdir(root, { withFileTypes: true });
18
- dirEntries.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
19
- const entries = [];
20
- for (const entry of dirEntries.slice(0, limit)) {
21
- entries.push({
22
- path: `${entry.name}${entry.isDirectory() ? "/" : ""}`,
23
- kind: entry.isDirectory()
24
- ? "directory"
25
- : entry.isFile()
26
- ? "file"
27
- : "other",
28
- });
29
- }
30
- let content = entries.map((entry) => entry.path).join("\n");
31
- if (dirEntries.length > entries.length) {
32
- content += `${content ? "\n\n" : ""}[...${dirEntries.length - entries.length} more entries. Increase limit to see more.]`;
33
- }
34
- const truncated = truncateHead(content, {
35
- maxLines: Number.MAX_SAFE_INTEGER,
36
- });
37
- content = truncated.text;
38
- return {
39
- path: root,
40
- entries,
41
- content,
42
- contentBlocks: [{ type: "text", text: content }],
43
- details: truncated.truncated ? { truncation: truncated } : undefined,
44
- };
45
- }
46
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/execution/list.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export declare function expandToolPathInput(input: string): string;
2
- export declare function resolveToCwd(cwd: string, input: string): string;
3
- export declare function resolveToolPath(cwd: string, input: unknown): string;
4
- export declare function isErrnoException(error: unknown): error is NodeJS.ErrnoException;
5
- export declare function pathNotFoundMessage(toolName: string, input: unknown, resolvedPath: string): string;
6
- export declare function resolveReadPath(cwd: string, input: unknown): Promise<string>;
7
- //# sourceMappingURL=path.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/execution/path.ts"],"names":[],"mappings":"AAMA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAKnE;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,MAAM,CAAC,cAAc,CAEhC;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,GACnB,MAAM,CAGR;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAOjB"}
@@ -1,69 +0,0 @@
1
- import { access } from "node:fs/promises";
2
- import { homedir } from "node:os";
3
- import { isAbsolute, resolve } from "node:path";
4
- const UNICODE_SPACES = /[\u00a0\u2007\u202f]/g;
5
- export function expandToolPathInput(input) {
6
- let path = input.trim().replace(UNICODE_SPACES, " ").normalize("NFC");
7
- if (path.startsWith("@"))
8
- path = path.slice(1);
9
- if (path === "~")
10
- return homedir();
11
- if (path.startsWith("~/") || path.startsWith("~\\")) {
12
- return resolve(homedir(), path.slice(2));
13
- }
14
- return path;
15
- }
16
- export function resolveToCwd(cwd, input) {
17
- const expanded = expandToolPathInput(input);
18
- return isAbsolute(expanded) ? resolve(expanded) : resolve(cwd, expanded);
19
- }
20
- export function resolveToolPath(cwd, input) {
21
- if (typeof input !== "string" || input.trim().length === 0) {
22
- throw new Error("Tool argument 'path' must be a non-empty string.");
23
- }
24
- return resolveToCwd(cwd, input);
25
- }
26
- export function isErrnoException(error) {
27
- return error instanceof Error && "code" in error;
28
- }
29
- export function pathNotFoundMessage(toolName, input, resolvedPath) {
30
- const label = typeof input === "string" ? JSON.stringify(input) : "path";
31
- return `${toolName} path not found: ${label} (resolved to ${resolvedPath}).`;
32
- }
33
- export async function resolveReadPath(cwd, input) {
34
- const initial = resolveToolPath(cwd, input);
35
- const candidates = readPathCandidates(initial);
36
- for (const candidate of candidates) {
37
- if (await exists(candidate))
38
- return candidate;
39
- }
40
- return initial;
41
- }
42
- function readPathCandidates(path) {
43
- const variants = new Set([
44
- path,
45
- path.normalize("NFC"),
46
- path.normalize("NFD"),
47
- ]);
48
- for (const value of [...variants]) {
49
- variants.add(value.replace(UNICODE_SPACES, " "));
50
- }
51
- // macOS screenshots sometimes use narrow no-break spaces before AM/PM.
52
- for (const value of [...variants]) {
53
- variants.add(value.replace(/ ([AP]M)(\.[^./]+)?$/u, "\u202f$1$2"));
54
- variants.add(value.replace(/\u202f([AP]M)(\.[^./]+)?$/u, " $1$2"));
55
- variants.add(value.replace(/[’‘]/g, "'"));
56
- variants.add(value.replace(/'/g, "’"));
57
- }
58
- return [...variants].filter((candidate) => candidate.length > 0);
59
- }
60
- async function exists(path) {
61
- try {
62
- await access(path);
63
- return true;
64
- }
65
- catch {
66
- return false;
67
- }
68
- }
69
- //# sourceMappingURL=path.js.map