neoctl 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 (218) hide show
  1. package/README.md +146 -0
  2. package/dist/agents/agent-definition.d.ts +39 -0
  3. package/dist/agents/agent-definition.js +57 -0
  4. package/dist/agents/agent-definition.js.map +1 -0
  5. package/dist/agents/agent-tool.d.ts +38 -0
  6. package/dist/agents/agent-tool.js +336 -0
  7. package/dist/agents/agent-tool.js.map +1 -0
  8. package/dist/agents/local-agent-task.d.ts +52 -0
  9. package/dist/agents/local-agent-task.js +63 -0
  10. package/dist/agents/local-agent-task.js.map +1 -0
  11. package/dist/agents/smoke-agents.d.ts +1 -0
  12. package/dist/agents/smoke-agents.js +142 -0
  13. package/dist/agents/smoke-agents.js.map +1 -0
  14. package/dist/agents/team.d.ts +10 -0
  15. package/dist/agents/team.js +2 -0
  16. package/dist/agents/team.js.map +1 -0
  17. package/dist/app/app-state.d.ts +21 -0
  18. package/dist/app/app-state.js +24 -0
  19. package/dist/app/app-state.js.map +1 -0
  20. package/dist/context/compaction.d.ts +49 -0
  21. package/dist/context/compaction.js +334 -0
  22. package/dist/context/compaction.js.map +1 -0
  23. package/dist/context/context-manager.d.ts +53 -0
  24. package/dist/context/context-manager.js +98 -0
  25. package/dist/context/context-manager.js.map +1 -0
  26. package/dist/context/prompts.d.ts +22 -0
  27. package/dist/context/prompts.js +84 -0
  28. package/dist/context/prompts.js.map +1 -0
  29. package/dist/context/smoke-context.d.ts +1 -0
  30. package/dist/context/smoke-context.js +151 -0
  31. package/dist/context/smoke-context.js.map +1 -0
  32. package/dist/core/assistant-output-filter.d.ts +9 -0
  33. package/dist/core/assistant-output-filter.js +78 -0
  34. package/dist/core/assistant-output-filter.js.map +1 -0
  35. package/dist/core/context-metrics.d.ts +10 -0
  36. package/dist/core/context-metrics.js +77 -0
  37. package/dist/core/context-metrics.js.map +1 -0
  38. package/dist/core/message-pipeline.d.ts +10 -0
  39. package/dist/core/message-pipeline.js +138 -0
  40. package/dist/core/message-pipeline.js.map +1 -0
  41. package/dist/core/query-engine.d.ts +86 -0
  42. package/dist/core/query-engine.js +337 -0
  43. package/dist/core/query-engine.js.map +1 -0
  44. package/dist/core/query.d.ts +47 -0
  45. package/dist/core/query.js +408 -0
  46. package/dist/core/query.js.map +1 -0
  47. package/dist/core/run-agent.d.ts +48 -0
  48. package/dist/core/run-agent.js +150 -0
  49. package/dist/core/run-agent.js.map +1 -0
  50. package/dist/core/smoke-core-loop.d.ts +1 -0
  51. package/dist/core/smoke-core-loop.js +42 -0
  52. package/dist/core/smoke-core-loop.js.map +1 -0
  53. package/dist/core/state.d.ts +37 -0
  54. package/dist/core/state.js +31 -0
  55. package/dist/core/state.js.map +1 -0
  56. package/dist/index.d.ts +42 -0
  57. package/dist/index.js +43 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/model/communication-logger.d.ts +30 -0
  60. package/dist/model/communication-logger.js +218 -0
  61. package/dist/model/communication-logger.js.map +1 -0
  62. package/dist/model/config.d.ts +25 -0
  63. package/dist/model/config.js +65 -0
  64. package/dist/model/config.js.map +1 -0
  65. package/dist/model/context-window.d.ts +32 -0
  66. package/dist/model/context-window.js +76 -0
  67. package/dist/model/context-window.js.map +1 -0
  68. package/dist/model/credentials.d.ts +13 -0
  69. package/dist/model/credentials.js +19 -0
  70. package/dist/model/credentials.js.map +1 -0
  71. package/dist/model/env.d.ts +8 -0
  72. package/dist/model/env.js +36 -0
  73. package/dist/model/env.js.map +1 -0
  74. package/dist/model/errors.d.ts +42 -0
  75. package/dist/model/errors.js +74 -0
  76. package/dist/model/errors.js.map +1 -0
  77. package/dist/model/http-transport.d.ts +26 -0
  78. package/dist/model/http-transport.js +118 -0
  79. package/dist/model/http-transport.js.map +1 -0
  80. package/dist/model/model-gateway.d.ts +103 -0
  81. package/dist/model/model-gateway.js +15 -0
  82. package/dist/model/model-gateway.js.map +1 -0
  83. package/dist/model/model-metadata.json +677 -0
  84. package/dist/model/openai-adapter.d.ts +34 -0
  85. package/dist/model/openai-adapter.js +152 -0
  86. package/dist/model/openai-adapter.js.map +1 -0
  87. package/dist/model/openai-chat-mapper.d.ts +11 -0
  88. package/dist/model/openai-chat-mapper.js +114 -0
  89. package/dist/model/openai-chat-mapper.js.map +1 -0
  90. package/dist/model/openai-mappers.d.ts +21 -0
  91. package/dist/model/openai-mappers.js +261 -0
  92. package/dist/model/openai-mappers.js.map +1 -0
  93. package/dist/model/openai-responses-adapter.d.ts +2 -0
  94. package/dist/model/openai-responses-adapter.js +2 -0
  95. package/dist/model/openai-responses-adapter.js.map +1 -0
  96. package/dist/model/openai-responses-mapper.d.ts +11 -0
  97. package/dist/model/openai-responses-mapper.js +218 -0
  98. package/dist/model/openai-responses-mapper.js.map +1 -0
  99. package/dist/model/provider-adapter.d.ts +17 -0
  100. package/dist/model/provider-adapter.js +2 -0
  101. package/dist/model/provider-adapter.js.map +1 -0
  102. package/dist/model/provider-factory.d.ts +4 -0
  103. package/dist/model/provider-factory.js +29 -0
  104. package/dist/model/provider-factory.js.map +1 -0
  105. package/dist/model/retry-runner.d.ts +8 -0
  106. package/dist/model/retry-runner.js +28 -0
  107. package/dist/model/retry-runner.js.map +1 -0
  108. package/dist/model/smoke-openai.d.ts +1 -0
  109. package/dist/model/smoke-openai.js +44 -0
  110. package/dist/model/smoke-openai.js.map +1 -0
  111. package/dist/model/smoke-responses-mapper.d.ts +1 -0
  112. package/dist/model/smoke-responses-mapper.js +72 -0
  113. package/dist/model/smoke-responses-mapper.js.map +1 -0
  114. package/dist/model/sse-decoder.d.ts +5 -0
  115. package/dist/model/sse-decoder.js +79 -0
  116. package/dist/model/sse-decoder.js.map +1 -0
  117. package/dist/repl/clipboard.d.ts +14 -0
  118. package/dist/repl/clipboard.js +92 -0
  119. package/dist/repl/clipboard.js.map +1 -0
  120. package/dist/repl/commands.d.ts +38 -0
  121. package/dist/repl/commands.js +86 -0
  122. package/dist/repl/commands.js.map +1 -0
  123. package/dist/repl/index.d.ts +2 -0
  124. package/dist/repl/index.js +2836 -0
  125. package/dist/repl/index.js.map +1 -0
  126. package/dist/repl/markdown-renderer.d.ts +81 -0
  127. package/dist/repl/markdown-renderer.js +546 -0
  128. package/dist/repl/markdown-renderer.js.map +1 -0
  129. package/dist/repl/render.d.ts +2 -0
  130. package/dist/repl/render.js +45 -0
  131. package/dist/repl/render.js.map +1 -0
  132. package/dist/repl/status-line.d.ts +19 -0
  133. package/dist/repl/status-line.js +160 -0
  134. package/dist/repl/status-line.js.map +1 -0
  135. package/dist/safety/audit.d.ts +10 -0
  136. package/dist/safety/audit.js +2 -0
  137. package/dist/safety/audit.js.map +1 -0
  138. package/dist/safety/permissions.d.ts +10 -0
  139. package/dist/safety/permissions.js +2 -0
  140. package/dist/safety/permissions.js.map +1 -0
  141. package/dist/safety/sandbox.d.ts +6 -0
  142. package/dist/safety/sandbox.js +2 -0
  143. package/dist/safety/sandbox.js.map +1 -0
  144. package/dist/session/session-store.d.ts +98 -0
  145. package/dist/session/session-store.js +249 -0
  146. package/dist/session/session-store.js.map +1 -0
  147. package/dist/session/smoke-session.d.ts +1 -0
  148. package/dist/session/smoke-session.js +85 -0
  149. package/dist/session/smoke-session.js.map +1 -0
  150. package/dist/session/tool-result-memory.d.ts +64 -0
  151. package/dist/session/tool-result-memory.js +303 -0
  152. package/dist/session/tool-result-memory.js.map +1 -0
  153. package/dist/skills/skill-tool.d.ts +28 -0
  154. package/dist/skills/skill-tool.js +107 -0
  155. package/dist/skills/skill-tool.js.map +1 -0
  156. package/dist/skills/smoke-skills.d.ts +1 -0
  157. package/dist/skills/smoke-skills.js +60 -0
  158. package/dist/skills/smoke-skills.js.map +1 -0
  159. package/dist/tasks/task-store.d.ts +43 -0
  160. package/dist/tasks/task-store.js +150 -0
  161. package/dist/tasks/task-store.js.map +1 -0
  162. package/dist/tasks/task-tools.d.ts +31 -0
  163. package/dist/tasks/task-tools.js +232 -0
  164. package/dist/tasks/task-tools.js.map +1 -0
  165. package/dist/tools/builtins/echo-tool.d.ts +4 -0
  166. package/dist/tools/builtins/echo-tool.js +26 -0
  167. package/dist/tools/builtins/echo-tool.js.map +1 -0
  168. package/dist/tools/builtins/edit-tool.d.ts +30 -0
  169. package/dist/tools/builtins/edit-tool.js +423 -0
  170. package/dist/tools/builtins/edit-tool.js.map +1 -0
  171. package/dist/tools/builtins/exec-tool.d.ts +18 -0
  172. package/dist/tools/builtins/exec-tool.js +290 -0
  173. package/dist/tools/builtins/exec-tool.js.map +1 -0
  174. package/dist/tools/builtins/filesystem-tools.d.ts +16 -0
  175. package/dist/tools/builtins/filesystem-tools.js +306 -0
  176. package/dist/tools/builtins/filesystem-tools.js.map +1 -0
  177. package/dist/tools/builtins/grep-tool.d.ts +56 -0
  178. package/dist/tools/builtins/grep-tool.js +320 -0
  179. package/dist/tools/builtins/grep-tool.js.map +1 -0
  180. package/dist/tools/builtins/ripgrep-binary.d.ts +6 -0
  181. package/dist/tools/builtins/ripgrep-binary.js +51 -0
  182. package/dist/tools/builtins/ripgrep-binary.js.map +1 -0
  183. package/dist/tools/builtins/search-providers.d.ts +49 -0
  184. package/dist/tools/builtins/search-providers.js +240 -0
  185. package/dist/tools/builtins/search-providers.js.map +1 -0
  186. package/dist/tools/builtins/search-tool.d.ts +18 -0
  187. package/dist/tools/builtins/search-tool.js +171 -0
  188. package/dist/tools/builtins/search-tool.js.map +1 -0
  189. package/dist/tools/registry.d.ts +18 -0
  190. package/dist/tools/registry.js +69 -0
  191. package/dist/tools/registry.js.map +1 -0
  192. package/dist/tools/run-tool-use.d.ts +13 -0
  193. package/dist/tools/run-tool-use.js +113 -0
  194. package/dist/tools/run-tool-use.js.map +1 -0
  195. package/dist/tools/schema.d.ts +2 -0
  196. package/dist/tools/schema.js +61 -0
  197. package/dist/tools/schema.js.map +1 -0
  198. package/dist/tools/smoke-tool-system.d.ts +1 -0
  199. package/dist/tools/smoke-tool-system.js +204 -0
  200. package/dist/tools/smoke-tool-system.js.map +1 -0
  201. package/dist/tools/streaming-tool-executor.d.ts +19 -0
  202. package/dist/tools/streaming-tool-executor.js +89 -0
  203. package/dist/tools/streaming-tool-executor.js.map +1 -0
  204. package/dist/tools/tool-orchestration.d.ts +15 -0
  205. package/dist/tools/tool-orchestration.js +89 -0
  206. package/dist/tools/tool-orchestration.js.map +1 -0
  207. package/dist/tools/tool.d.ts +121 -0
  208. package/dist/tools/tool.js +4 -0
  209. package/dist/tools/tool.js.map +1 -0
  210. package/dist/types/events.d.ts +66 -0
  211. package/dist/types/events.js +2 -0
  212. package/dist/types/events.js.map +1 -0
  213. package/dist/types/messages.d.ts +57 -0
  214. package/dist/types/messages.js +42 -0
  215. package/dist/types/messages.js.map +1 -0
  216. package/package.json +49 -0
  217. package/scripts/copy-model-metadata.mjs +4 -0
  218. package/scripts/install-ripgrep.cjs +152 -0
@@ -0,0 +1,423 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ export const editTool = {
4
+ name: "edit",
5
+ aliases: ["replace"],
6
+ description: "Modify a text file by replacing oldString with newString. oldString must match uniquely unless replaceAll is true; LF/CRLF line-ending differences and straight/curly quote differences are tolerated. Use oldString='' only to create a new file.",
7
+ inputSchema: {
8
+ type: "object",
9
+ properties: {
10
+ path: { type: "string", description: "Absolute or cwd-relative path of the text file to modify." },
11
+ oldString: { type: "string", description: "Text to replace. LF/CRLF line-ending differences and straight/curly quote differences are tolerated. Use an empty string only when creating a new file." },
12
+ newString: { type: "string", description: "Replacement text. Must differ from oldString." },
13
+ replaceAll: { type: "boolean", description: "Replace every occurrence of oldString. Defaults to false." },
14
+ },
15
+ required: ["path", "oldString", "newString"],
16
+ additionalProperties: false,
17
+ },
18
+ metadata: {
19
+ readOnly: false,
20
+ concurrent: false,
21
+ visible: true,
22
+ requiresApproval: false,
23
+ destructive: true,
24
+ maxResultSizeChars: 100000,
25
+ searchHint: "edit text files by exact string replacement",
26
+ },
27
+ validate(input) {
28
+ const record = input;
29
+ return {
30
+ path: record.path ?? "",
31
+ oldString: record.oldString ?? "",
32
+ newString: record.newString ?? "",
33
+ replaceAll: record.replaceAll ?? false,
34
+ };
35
+ },
36
+ validateInput(input) {
37
+ if (!input.path.trim())
38
+ return { ok: false, message: "edit.path cannot be empty" };
39
+ if (input.oldString === input.newString)
40
+ return { ok: false, message: "edit.oldString and edit.newString must differ" };
41
+ return { ok: true, value: input };
42
+ },
43
+ isConcurrencySafe() {
44
+ return false;
45
+ },
46
+ async call(input, context) {
47
+ const target = resolveTarget(context, input.path);
48
+ const current = await readExistingText(target);
49
+ if (!current.exists) {
50
+ if (input.oldString !== "") {
51
+ return { ok: false, output: { error: `edit.path does not exist: ${target}. Use oldString='' to create a new file.` } };
52
+ }
53
+ return writeUpdatedText({
54
+ target,
55
+ before: "",
56
+ after: input.newString,
57
+ replacements: 1,
58
+ operation: "create",
59
+ encoding: "utf8",
60
+ lineEnding: detectLineEnding(input.newString),
61
+ });
62
+ }
63
+ if (input.oldString === "") {
64
+ if (current.content.trim() !== "")
65
+ return { ok: false, output: { error: "Cannot create file because edit.path already exists and is not empty", path: target } };
66
+ return writeUpdatedText({
67
+ target,
68
+ before: current.content,
69
+ after: input.newString,
70
+ replacements: 1,
71
+ operation: "edit",
72
+ encoding: current.encoding,
73
+ lineEnding: current.lineEnding,
74
+ });
75
+ }
76
+ const match = findActualString(current.content, input.oldString);
77
+ if (!match) {
78
+ return {
79
+ ok: false,
80
+ output: {
81
+ error: "String to replace not found in file",
82
+ path: target,
83
+ oldString: input.oldString,
84
+ },
85
+ };
86
+ }
87
+ const actualOldString = match.actual;
88
+ const matches = countOccurrences(current.content, actualOldString);
89
+ if (matches > 1 && !input.replaceAll) {
90
+ return {
91
+ ok: false,
92
+ output: {
93
+ error: `Found ${matches} matches of oldString, but replaceAll is false. Provide more context or set replaceAll=true.`,
94
+ path: target,
95
+ matches,
96
+ },
97
+ };
98
+ }
99
+ const actualNewString = adaptReplacementString(input.oldString, actualOldString, input.newString);
100
+ const after = input.replaceAll
101
+ ? current.content.replaceAll(actualOldString, actualNewString)
102
+ : replaceOne(current.content, actualOldString, actualNewString);
103
+ return writeUpdatedText({
104
+ target,
105
+ before: current.content,
106
+ after,
107
+ replacements: input.replaceAll ? matches : 1,
108
+ operation: "edit",
109
+ encoding: current.encoding,
110
+ lineEnding: current.lineEnding,
111
+ });
112
+ },
113
+ };
114
+ export const writeTool = {
115
+ name: "write",
116
+ aliases: ["overwrite"],
117
+ description: "Create or overwrite a text file with the provided full content.",
118
+ inputSchema: {
119
+ type: "object",
120
+ properties: {
121
+ path: { type: "string", description: "Absolute or cwd-relative path of the file to write." },
122
+ content: { type: "string", description: "Full text content to write." },
123
+ },
124
+ required: ["path", "content"],
125
+ additionalProperties: false,
126
+ },
127
+ metadata: {
128
+ readOnly: false,
129
+ concurrent: false,
130
+ visible: true,
131
+ requiresApproval: false,
132
+ destructive: true,
133
+ maxResultSizeChars: 100000,
134
+ searchHint: "create or overwrite text files",
135
+ },
136
+ validate(input) {
137
+ const record = input;
138
+ return {
139
+ path: record.path ?? "",
140
+ content: record.content ?? "",
141
+ };
142
+ },
143
+ validateInput(input) {
144
+ if (!input.path.trim())
145
+ return { ok: false, message: "write.path cannot be empty" };
146
+ return { ok: true, value: input };
147
+ },
148
+ isConcurrencySafe() {
149
+ return false;
150
+ },
151
+ async call(input, context) {
152
+ const target = resolveTarget(context, input.path);
153
+ const current = await readExistingText(target);
154
+ return writeUpdatedText({
155
+ target,
156
+ before: current.exists ? current.content : "",
157
+ after: input.content,
158
+ replacements: current.exists ? 1 : 0,
159
+ operation: current.exists ? "write" : "create",
160
+ encoding: current.exists ? current.encoding : "utf8",
161
+ lineEnding: current.exists ? current.lineEnding : detectLineEnding(input.content),
162
+ });
163
+ },
164
+ };
165
+ async function writeUpdatedText(input) {
166
+ await fs.mkdir(path.dirname(input.target), { recursive: true });
167
+ await fs.writeFile(input.target, encodeText(input.after, input.encoding));
168
+ const output = {
169
+ path: input.target,
170
+ operation: input.operation,
171
+ replacements: input.replacements,
172
+ bytesBefore: Buffer.byteLength(input.before),
173
+ bytesAfter: Buffer.byteLength(input.after),
174
+ lineEnding: input.lineEnding,
175
+ encoding: input.encoding,
176
+ patch: buildPatch(input.before, input.after),
177
+ };
178
+ return {
179
+ ok: true,
180
+ output,
181
+ summary: `${input.operation} ${input.target}, ${input.replacements} replacement(s), ${countChangedLines(output.patch).added} added/${countChangedLines(output.patch).removed} removed`,
182
+ };
183
+ }
184
+ async function readExistingText(target) {
185
+ const buffer = await fs.readFile(target).catch((error) => {
186
+ if (isNotFound(error))
187
+ return undefined;
188
+ throw error;
189
+ });
190
+ if (!buffer)
191
+ return { exists: false };
192
+ if (looksBinary(buffer))
193
+ throw new Error(`edit.path appears to be binary: ${target}`);
194
+ const encoding = detectEncoding(buffer);
195
+ const content = decodeText(buffer, encoding);
196
+ return {
197
+ exists: true,
198
+ content,
199
+ encoding,
200
+ lineEnding: detectLineEnding(content),
201
+ };
202
+ }
203
+ function resolveTarget(context, targetPath) {
204
+ const root = path.resolve(context.appState.snapshot().cwd ?? process.cwd());
205
+ return path.isAbsolute(targetPath) ? path.normalize(targetPath) : path.resolve(root, targetPath);
206
+ }
207
+ function findActualString(fileContent, searchString) {
208
+ if (fileContent.includes(searchString))
209
+ return { actual: searchString };
210
+ const normalizedSearch = normalizeForMatch(searchString);
211
+ const match = findNormalizedMatch(fileContent, normalizedSearch);
212
+ return match ? { actual: fileContent.slice(match.start, match.end) } : null;
213
+ }
214
+ function normalizeForMatch(value) {
215
+ return normalizeLineEndings(normalizeQuotes(value));
216
+ }
217
+ function normalizeLineEndings(value) {
218
+ return value.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
219
+ }
220
+ function findNormalizedMatch(fileContent, normalizedSearch) {
221
+ if (!normalizedSearch)
222
+ return null;
223
+ const indexMap = [];
224
+ let normalizedFile = "";
225
+ for (let index = 0; index < fileContent.length; index += 1) {
226
+ const char = fileContent[index];
227
+ if (char === "\r") {
228
+ normalizedFile += "\n";
229
+ indexMap.push(index);
230
+ if (fileContent[index + 1] === "\n")
231
+ index += 1;
232
+ continue;
233
+ }
234
+ normalizedFile += normalizeQuotes(char);
235
+ indexMap.push(index);
236
+ }
237
+ const normalizedIndex = normalizedFile.indexOf(normalizedSearch);
238
+ if (normalizedIndex < 0)
239
+ return null;
240
+ const normalizedEnd = normalizedIndex + normalizedSearch.length;
241
+ const start = indexMap[normalizedIndex];
242
+ const end = normalizedEnd < indexMap.length ? indexMap[normalizedEnd] : fileContent.length;
243
+ return { start, end };
244
+ }
245
+ const LEFT_SINGLE = "\u2018";
246
+ const RIGHT_SINGLE = "\u2019";
247
+ const LEFT_DOUBLE = "\u201c";
248
+ const RIGHT_DOUBLE = "\u201d";
249
+ function normalizeQuotes(value) {
250
+ return value
251
+ .replaceAll(LEFT_SINGLE, "'")
252
+ .replaceAll(RIGHT_SINGLE, "'")
253
+ .replaceAll(LEFT_DOUBLE, "\"")
254
+ .replaceAll(RIGHT_DOUBLE, "\"");
255
+ }
256
+ function adaptReplacementString(oldString, actualOldString, newString) {
257
+ let result = newString;
258
+ if (oldString !== actualOldString) {
259
+ result = preserveLineEndingStyle(oldString, actualOldString, result);
260
+ result = preserveQuoteStyle(actualOldString, result);
261
+ }
262
+ return result;
263
+ }
264
+ function preserveLineEndingStyle(oldString, actualOldString, newString) {
265
+ if (lineEndingPattern(oldString) !== "LF")
266
+ return newString;
267
+ const actualPattern = lineEndingPattern(actualOldString);
268
+ if (actualPattern === "CRLF")
269
+ return newString.replace(/(?<!\r)\n/g, "\r\n");
270
+ if (actualPattern === "CR")
271
+ return newString.replace(/\r?\n/g, "\r");
272
+ return newString;
273
+ }
274
+ function lineEndingPattern(value) {
275
+ const hasCrLf = /\r\n/.test(value);
276
+ const withoutCrLf = value.replace(/\r\n/g, "");
277
+ const hasLf = withoutCrLf.includes("\n");
278
+ const hasCr = withoutCrLf.includes("\r");
279
+ const kinds = [hasCrLf, hasLf, hasCr].filter(Boolean).length;
280
+ if (kinds === 0)
281
+ return "none";
282
+ if (kinds > 1)
283
+ return "mixed";
284
+ if (hasCrLf)
285
+ return "CRLF";
286
+ if (hasCr)
287
+ return "CR";
288
+ return "LF";
289
+ }
290
+ function preserveQuoteStyle(actualOldString, newString) {
291
+ let result = newString;
292
+ if (actualOldString.includes(LEFT_DOUBLE) || actualOldString.includes(RIGHT_DOUBLE))
293
+ result = applyCurlyQuotes(result, "\"", LEFT_DOUBLE, RIGHT_DOUBLE);
294
+ if (actualOldString.includes(LEFT_SINGLE) || actualOldString.includes(RIGHT_SINGLE))
295
+ result = applyCurlyQuotes(result, "'", LEFT_SINGLE, RIGHT_SINGLE);
296
+ return result;
297
+ }
298
+ function applyCurlyQuotes(value, quote, left, right) {
299
+ const chars = [...value];
300
+ return chars.map((char, index) => {
301
+ if (char !== quote)
302
+ return char;
303
+ const previous = chars[index - 1];
304
+ const next = chars[index + 1];
305
+ if (quote === "'" && previous && next && /\p{L}/u.test(previous) && /\p{L}/u.test(next))
306
+ return right;
307
+ return !previous || /[\s([{]/.test(previous) ? left : right;
308
+ }).join("");
309
+ }
310
+ function countOccurrences(value, search) {
311
+ if (!search)
312
+ return 0;
313
+ let count = 0;
314
+ let index = 0;
315
+ while (true) {
316
+ index = value.indexOf(search, index);
317
+ if (index < 0)
318
+ return count;
319
+ count += 1;
320
+ index += search.length;
321
+ }
322
+ }
323
+ function replaceOne(value, search, replacement) {
324
+ const index = value.indexOf(search);
325
+ if (index < 0)
326
+ return value;
327
+ return `${value.slice(0, index)}${replacement}${value.slice(index + search.length)}`;
328
+ }
329
+ function buildPatch(before, after) {
330
+ if (before === after)
331
+ return [];
332
+ const beforeLines = splitLinesForDiff(before);
333
+ const afterLines = splitLinesForDiff(after);
334
+ let prefix = 0;
335
+ while (prefix < beforeLines.length && prefix < afterLines.length && beforeLines[prefix] === afterLines[prefix])
336
+ prefix += 1;
337
+ let suffix = 0;
338
+ while (suffix < beforeLines.length - prefix &&
339
+ suffix < afterLines.length - prefix &&
340
+ beforeLines[beforeLines.length - 1 - suffix] === afterLines[afterLines.length - 1 - suffix]) {
341
+ suffix += 1;
342
+ }
343
+ const contextBefore = Math.min(3, prefix);
344
+ const oldStartIndex = prefix - contextBefore;
345
+ const newStartIndex = prefix - contextBefore;
346
+ const oldChangedEnd = beforeLines.length - suffix;
347
+ const newChangedEnd = afterLines.length - suffix;
348
+ const contextAfter = Math.min(3, suffix);
349
+ const oldEndIndex = oldChangedEnd + contextAfter;
350
+ const newEndIndex = newChangedEnd + contextAfter;
351
+ const lines = [];
352
+ for (let index = oldStartIndex; index < prefix; index += 1)
353
+ lines.push(` ${beforeLines[index]}`);
354
+ for (let index = prefix; index < oldChangedEnd; index += 1)
355
+ lines.push(`-${beforeLines[index]}`);
356
+ for (let index = prefix; index < newChangedEnd; index += 1)
357
+ lines.push(`+${afterLines[index]}`);
358
+ for (let index = oldChangedEnd; index < oldEndIndex; index += 1)
359
+ lines.push(` ${beforeLines[index]}`);
360
+ return [{
361
+ oldStart: oldStartIndex + 1,
362
+ oldLines: oldEndIndex - oldStartIndex,
363
+ newStart: newStartIndex + 1,
364
+ newLines: newEndIndex - newStartIndex,
365
+ lines,
366
+ }];
367
+ }
368
+ function splitLinesForDiff(value) {
369
+ if (value === "")
370
+ return [];
371
+ return value.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n");
372
+ }
373
+ function countChangedLines(patch) {
374
+ let added = 0;
375
+ let removed = 0;
376
+ for (const hunk of patch) {
377
+ for (const line of hunk.lines) {
378
+ if (line.startsWith("+"))
379
+ added += 1;
380
+ if (line.startsWith("-"))
381
+ removed += 1;
382
+ }
383
+ }
384
+ return { added, removed };
385
+ }
386
+ function detectEncoding(buffer) {
387
+ return buffer.length >= 2 && buffer[0] === 0xff && buffer[1] === 0xfe ? "utf16le" : "utf8";
388
+ }
389
+ function decodeText(buffer, encoding) {
390
+ const text = buffer.toString(encoding);
391
+ return text.replace(/^\uFEFF/, "");
392
+ }
393
+ function encodeText(text, encoding) {
394
+ if (encoding === "utf16le")
395
+ return Buffer.concat([Buffer.from([0xff, 0xfe]), Buffer.from(text, "utf16le")]);
396
+ return Buffer.from(text, "utf8");
397
+ }
398
+ function detectLineEnding(text) {
399
+ const crlf = /\r\n/.test(text);
400
+ const withoutCrlf = text.replace(/\r\n/g, "");
401
+ const lf = /\n/.test(withoutCrlf);
402
+ const cr = /\r/.test(withoutCrlf);
403
+ const count = [crlf, lf, cr].filter(Boolean).length;
404
+ if (count > 1)
405
+ return "mixed";
406
+ if (crlf)
407
+ return "CRLF";
408
+ if (lf)
409
+ return "LF";
410
+ if (cr)
411
+ return "CR";
412
+ return "none";
413
+ }
414
+ function looksBinary(buffer) {
415
+ const sample = buffer.subarray(0, Math.min(buffer.length, 8192));
416
+ if (detectEncoding(buffer) === "utf16le")
417
+ return false;
418
+ return sample.includes(0);
419
+ }
420
+ function isNotFound(error) {
421
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
422
+ }
423
+ //# sourceMappingURL=edit-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-tool.js","sourceRoot":"","sources":["../../../src/tools/builtins/edit-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Tool } from "../tool.js";
2
+ import { type TaskStore } from "../../tasks/task-store.js";
3
+ export type ExecShell = "auto" | "powershell" | "cmd" | "bash" | "sh";
4
+ export interface ExecToolInput {
5
+ command: string;
6
+ cwd?: string;
7
+ timeoutMs: number;
8
+ maxOutputChars: number;
9
+ shell: ExecShell;
10
+ env: Record<string, string>;
11
+ description?: string;
12
+ background?: boolean;
13
+ }
14
+ export interface ExecToolRuntime {
15
+ taskStore?: TaskStore;
16
+ }
17
+ export declare function createExecTool(runtime?: ExecToolRuntime): Tool<ExecToolInput>;
18
+ export declare const execTool: Tool<ExecToolInput>;