@agentick/sandbox 0.2.1 → 0.4.1

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Agentick Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -111,6 +111,14 @@ import { Shell, ReadFile, WriteFile, EditFile } from "@agentick/sandbox";
111
111
  <ReadFile />
112
112
  <MyAgent />
113
113
  </Sandbox>
114
+
115
+ // Override descriptions via JSX props
116
+ <Sandbox provider={provider}>
117
+ <Shell description="Run commands. Prefer one-liners. Avoid interactive programs." />
118
+ <EditFile description="Apply surgical edits. Include enough surrounding context to uniquely match." />
119
+ <ReadFile />
120
+ <MyAgent />
121
+ </Sandbox>
114
122
  ```
115
123
 
116
124
  ### Tree Scoping
@@ -130,24 +138,52 @@ Multiple sandboxes in the same tree work naturally. Each tool accesses its neare
130
138
 
131
139
  ## Edit Utilities
132
140
 
133
- Surgical code editing with 3-level matching that recovers from trailing whitespace, indentation mismatch, and CRLF/LF differences.
141
+ Surgical code editing with 3-level matching that recovers from trailing whitespace, indentation mismatch, and CRLF/LF differences. Supports replace, delete, insert, and range modes.
134
142
 
135
143
  ### `applyEdits(source, edits)`
136
144
 
137
- Pure transform, no I/O. Matching strategy per edit (in order):
145
+ Pure transform, no I/O.
146
+
147
+ **Modes** (detected by field presence, precedence: range > insert > delete > replace):
148
+
149
+ | Mode | Fields | Description |
150
+ | ------------------- | -------------------------- | ------------------------------------------------------------------------- |
151
+ | Replace | `old`, `new` | Find `old`, replace with `new` |
152
+ | Delete | `old`, `delete: true` | Find `old`, remove it (trailing newline auto-consumed for complete lines) |
153
+ | Insert before/after | `old`, `insert`, `content` | Insert `content` relative to anchor `old` |
154
+ | Insert start/end | `insert`, `content` | Prepend/append `content` to file |
155
+ | Range | `from`, `to`, `content` | Replace everything from `from` through `to` (inclusive) |
156
+
157
+ **Matching strategy** per anchor (in order):
138
158
 
139
159
  1. Exact byte match
140
160
  2. Line-normalized (trailing whitespace stripped)
141
- 3. Indent-adjusted (leading whitespace baseline stripped)
161
+ 3. Indent-adjusted (leading whitespace baseline stripped, replacement re-indented)
142
162
 
143
163
  ```typescript
144
164
  import { applyEdits } from "@agentick/sandbox";
145
165
 
146
- const result = applyEdits(source, [
147
- { old: "return 1;", new: "return 2;" },
148
- { old: "oldName", new: "newName", all: true },
166
+ // Replace
167
+ applyEdits(source, [{ old: "return 1;", new: "return 2;" }]);
168
+
169
+ // Rename (all occurrences)
170
+ applyEdits(source, [{ old: "oldName", new: "newName", all: true }]);
171
+
172
+ // Delete
173
+ applyEdits(source, [{ old: "// TODO: remove this\n", delete: true }]);
174
+
175
+ // Insert after anchor
176
+ applyEdits(source, [
177
+ { old: "import { foo } from 'foo';", insert: "after", content: "import { bar } from 'bar';" },
178
+ ]);
179
+
180
+ // Append to file
181
+ applyEdits(source, [{ insert: "end", content: "export default main;" }]);
182
+
183
+ // Range replacement (replace function body)
184
+ applyEdits(source, [
185
+ { from: "function old() {", to: "} // old", content: "function new() {\n return 42;\n}" },
149
186
  ]);
150
- // result.content, result.applied, result.changes
151
187
  ```
152
188
 
153
189
  ### `editFile(path, edits)`
@@ -157,7 +193,26 @@ File wrapper. Reads, applies edits, writes atomically (temp + rename).
157
193
  ```typescript
158
194
  import { editFile } from "@agentick/sandbox";
159
195
 
160
- await editFile("/path/to/file.ts", [{ old: "const x = 1;", new: "const x = 42;" }]);
196
+ await editFile("/path/to/file.ts", [
197
+ { old: "const x = 1;", new: "const x = 42;" },
198
+ { old: "debugLog()", delete: true },
199
+ { insert: "end", content: "\nexport default main;" },
200
+ ]);
201
+ ```
202
+
203
+ ### `Edit` interface
204
+
205
+ ```typescript
206
+ interface Edit {
207
+ old?: string; // Text to find (replace, delete, insert before/after)
208
+ new?: string; // Replacement text (replace mode)
209
+ all?: boolean; // Apply to all occurrences (default: false)
210
+ delete?: boolean; // Delete matched text (sugar for new: "")
211
+ insert?: "before" | "after" | "start" | "end"; // Insert mode
212
+ content?: string; // Content to insert or range replacement
213
+ from?: string; // Range start boundary (inclusive)
214
+ to?: string; // Range end boundary (inclusive)
215
+ }
161
216
  ```
162
217
 
163
218
  ## Types
@@ -165,14 +220,14 @@ await editFile("/path/to/file.ts", [{ old: "const x = 1;", new: "const x = 42;"
165
220
  ```typescript
166
221
  import type {
167
222
  // Core types
168
- SandboxHandle, // Runtime handle: exec, readFile, writeFile, editFile, destroy
223
+ Sandbox, // Runtime handle: exec, readFile, writeFile, editFile, destroy
169
224
  SandboxProvider, // Factory: name, create, restore?, destroy?
170
225
  SandboxCreateOptions, // Passed to provider.create()
171
226
  SandboxConfig, // Component-level config
172
227
  SandboxSnapshot, // Serializable state for persistence
173
228
 
174
229
  // Execution
175
- ExecOptions, // Per-command: cwd, env, timeout
230
+ ExecOptions, // Per-command: cwd, env, timeout, onOutput
176
231
  ExecResult, // Output: stdout, stderr, exitCode
177
232
  OutputChunk, // Streaming: stream, data
178
233
 
@@ -182,9 +237,10 @@ import type {
182
237
  ResourceLimits, // Constraints: memory, cpu, timeout, disk, maxProcesses
183
238
 
184
239
  // Edit
185
- Edit, // { old, new, all? }
240
+ Edit, // { old?, new?, all?, delete?, insert?, content?, from?, to? }
186
241
  EditResult, // { content, applied, changes }
187
242
  EditChange, // { line, removed, added }
243
+ EditError, // Error with editIndex + diagnostic context
188
244
  } from "@agentick/sandbox";
189
245
  ```
190
246
 
package/dist/edit.d.ts CHANGED
@@ -4,15 +4,27 @@
4
4
  * LLM-driven code editing with layered matching that recovers from
5
5
  * trailing whitespace, indentation mismatch, and CRLF/LF differences.
6
6
  *
7
+ * Supports replace, delete, insert (before/after/start/end), and range modes.
8
+ *
7
9
  * Pure transform (`applyEdits`) + file wrapper (`editFile`) with atomic writes.
8
10
  */
9
11
  export interface Edit {
10
- /** Exact string to find in the source. */
11
- old: string;
12
- /** Replacement string. Empty string deletes the match. */
13
- new: string;
14
- /** Replace ALL occurrences. Default false — requires unique match. */
12
+ /** Text to find. Required for replace, delete, insert before/after. */
13
+ old?: string;
14
+ /** Replacement text. Required for replace mode. */
15
+ new?: string;
16
+ /** Replace/delete/insert ALL occurrences. Default false. */
15
17
  all?: boolean;
18
+ /** Delete the matched text (sugar for new: ""). */
19
+ delete?: boolean;
20
+ /** Insert position. "before"/"after" use old as anchor. "start"/"end" target file boundaries. */
21
+ insert?: "before" | "after" | "start" | "end";
22
+ /** Content to insert or range replacement. Required for insert and range modes. */
23
+ content?: string;
24
+ /** Start boundary for range replacement (inclusive). */
25
+ from?: string;
26
+ /** End boundary for range replacement (inclusive). */
27
+ to?: string;
16
28
  }
17
29
  export interface EditChange {
18
30
  /** 1-based line where the change starts. */
@@ -35,16 +47,25 @@ export declare class EditError extends Error {
35
47
  readonly detail?: {
36
48
  closest?: string;
37
49
  line?: number;
50
+ context?: string[];
38
51
  } | undefined;
39
52
  constructor(message: string, editIndex: number, detail?: {
40
53
  closest?: string;
41
54
  line?: number;
55
+ context?: string[];
42
56
  } | undefined);
43
57
  }
44
58
  /**
45
59
  * Apply edits to a source string. Pure function, no I/O.
46
60
  *
47
- * Matching strategy per edit (in order):
61
+ * Mode detection (by field presence, precedence: range > insert > delete > replace):
62
+ * - Range: `from` + `to` + `content` — replace block between markers (inclusive)
63
+ * - Insert before/after: `old` + `insert` + `content` — insert relative to anchor
64
+ * - Insert start/end: `insert` + `content` — prepend/append to file
65
+ * - Delete: `old` + `delete: true` — remove matched text
66
+ * - Replace: `old` + `new` — find and replace
67
+ *
68
+ * Matching strategy per anchor (in order):
48
69
  * 1. Exact byte match
49
70
  * 2. Line-normalized (trailing whitespace stripped)
50
71
  * 3. Indent-adjusted (leading whitespace baseline stripped, new indentation adjusted)
@@ -52,7 +73,7 @@ export declare class EditError extends Error {
52
73
  * Multi-edit: all matches resolved against original source,
53
74
  * validated for overlap, applied bottom-to-top.
54
75
  *
55
- * @throws EditError on match failure or overlapping edits
76
+ * @throws EditError on match failure, validation error, or overlapping edits
56
77
  */
57
78
  export declare function applyEdits(source: string, edits: Edit[]): EditResult;
58
79
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../src/edit.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,IAAI;IACnB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,SAAU,SAAQ,KAAK;aAGhB,SAAS,EAAE,MAAM;aACjB,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;gBAF5D,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,YAAA;CAK/D;AAyHD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAsJpE;AAID;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAmB/E"}
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../src/edit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,IAAI;IAEnB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,iGAAiG;IACjG,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IAC9C,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,SAAU,SAAQ,KAAK;aAGhB,SAAS,EAAE,MAAM;aACjB,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;gBAFhF,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,YAAA;CAKnF;AA8gBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAoGpE;AAID;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAmB/E"}
package/dist/edit.js CHANGED
@@ -4,6 +4,8 @@
4
4
  * LLM-driven code editing with layered matching that recovers from
5
5
  * trailing whitespace, indentation mismatch, and CRLF/LF differences.
6
6
  *
7
+ * Supports replace, delete, insert (before/after/start/end), and range modes.
8
+ *
7
9
  * Pure transform (`applyEdits`) + file wrapper (`editFile`) with atomic writes.
8
10
  */
9
11
  import { readFile, writeFile, rename, unlink } from "node:fs/promises";
@@ -80,9 +82,9 @@ function findAll(source, needle) {
80
82
  return positions;
81
83
  }
82
84
  /** Slide `needle` lines over `haystack` lines, comparing with `cmp`. */
83
- function slideMatch(haystackLines, needleLines, cmp) {
85
+ function slideMatch(haystackLines, needleLines, cmp, startFrom = 0) {
84
86
  const windowSize = needleLines.length;
85
- for (let i = 0; i <= haystackLines.length - windowSize; i++) {
87
+ for (let i = startFrom; i <= haystackLines.length - windowSize; i++) {
86
88
  let match = true;
87
89
  for (let j = 0; j < windowSize; j++) {
88
90
  if (!cmp(haystackLines[i + j], needleLines[j])) {
@@ -117,11 +119,298 @@ function adjustIndent(oldStr, matchedStr, newStr) {
117
119
  })
118
120
  .join("\n");
119
121
  }
122
+ /**
123
+ * Smart line deletion: when deleting text that occupies complete lines
124
+ * (starts at beginning of a line), also consume the line separator to
125
+ * avoid leaving blank lines behind.
126
+ *
127
+ * Only applies when the match starts at position 0 or right after a `\n`.
128
+ * Partial-line deletions (match starts mid-line) are not affected.
129
+ */
130
+ function smartLineDeletion(source, start, end) {
131
+ // Skip if the matched text already includes its own line boundary
132
+ if (end > start && source[end - 1] === "\n")
133
+ return { start, end };
134
+ const startsAtLineBegin = start === 0 || source[start - 1] === "\n";
135
+ if (!startsAtLineBegin)
136
+ return { start, end };
137
+ // Prefer consuming trailing newline
138
+ if (end < source.length && source[end] === "\n") {
139
+ return { start, end: end + 1 };
140
+ }
141
+ // At end of file: consume preceding newline instead
142
+ if (start > 0 && source[start - 1] === "\n") {
143
+ return { start: start - 1, end };
144
+ }
145
+ return { start, end };
146
+ }
147
+ /**
148
+ * Build context snippet around a source line for error diagnostics.
149
+ * Shows 2 lines before and after, with `>` marker on the target line.
150
+ */
151
+ function buildContextSnippet(sourceLines, targetLine0) {
152
+ const contextLines = [];
153
+ const start = Math.max(0, targetLine0 - 2);
154
+ const end = Math.min(sourceLines.length - 1, targetLine0 + 2);
155
+ for (let i = start; i <= end; i++) {
156
+ const lineNum = (i + 1).toString().padStart(4);
157
+ const marker = i === targetLine0 ? " > " : " ";
158
+ contextLines.push(`${marker}${lineNum} | ${sourceLines[i]}`);
159
+ }
160
+ return contextLines;
161
+ }
162
+ /**
163
+ * Find anchor text using 3-strategy matching (exact -> line-normalized -> indent-adjusted).
164
+ * Returns array of matches. Callers validate uniqueness / all-mode.
165
+ */
166
+ function findAnchor(source, sourceLines, starts, needle, editIndex, options) {
167
+ const searchFrom = options?.searchFrom ?? 0;
168
+ const useAll = options?.all ?? false;
169
+ // ── Strategy 1: Exact match ──
170
+ const positions = findAll(source, needle);
171
+ const filteredPositions = positions.filter((p) => p >= searchFrom);
172
+ if (filteredPositions.length > 0) {
173
+ if (useAll) {
174
+ return filteredPositions.map((pos) => ({
175
+ start: pos,
176
+ end: pos + needle.length,
177
+ matchedText: source.slice(pos, pos + needle.length),
178
+ }));
179
+ }
180
+ if (filteredPositions.length === 1) {
181
+ return [
182
+ {
183
+ start: filteredPositions[0],
184
+ end: filteredPositions[0] + needle.length,
185
+ matchedText: source.slice(filteredPositions[0], filteredPositions[0] + needle.length),
186
+ },
187
+ ];
188
+ }
189
+ // Multiple matches, not all mode — error
190
+ const lines = filteredPositions.map((p) => lineAtOffset(starts, p));
191
+ throw new EditError(`Edit ${editIndex}: ${filteredPositions.length} matches found (lines ${lines.join(", ")}). ` +
192
+ `Include more surrounding context to disambiguate, or use all: true.`, editIndex);
193
+ }
194
+ // all: true edits only use exact match — skip fallbacks
195
+ if (useAll) {
196
+ return [];
197
+ }
198
+ const needleLines = needle.split("\n");
199
+ const startLineIdx = searchFrom === 0 ? 0 : Math.max(0, lineAtOffset(starts, searchFrom) - 1); // 0-indexed
200
+ // ── Strategy 2: Line-normalized (strip trailing WS) ──
201
+ const normSourceLines = sourceLines.map((l) => l.trimEnd());
202
+ const normNeedleLines = needleLines.map((l) => l.trimEnd());
203
+ const normHit = slideMatch(normSourceLines, normNeedleLines, (a, b) => a === b, startLineIdx);
204
+ if (normHit !== null) {
205
+ const { start, end } = lineRange(source, starts, sourceLines, normHit, normHit + needleLines.length - 1);
206
+ return [{ start, end, matchedText: source.slice(start, end) }];
207
+ }
208
+ // ── Strategy 3: Indent-adjusted (strip indent baseline, compare shapes) ──
209
+ const baseIndent = minIndent(needleLines);
210
+ const strippedNeedle = needleLines.map((l) => (l.trim() === "" ? "" : l.slice(baseIndent)));
211
+ for (let si = startLineIdx; si <= sourceLines.length - needleLines.length; si++) {
212
+ const window = sourceLines.slice(si, si + needleLines.length);
213
+ const windowIndent = minIndent(window);
214
+ const strippedWindow = window.map((l) => (l.trim() === "" ? "" : l.slice(windowIndent)));
215
+ if (strippedNeedle.every((line, j) => line === strippedWindow[j])) {
216
+ const { start, end } = lineRange(source, starts, sourceLines, si, si + needleLines.length - 1);
217
+ return [{ start, end, matchedText: source.slice(start, end) }];
218
+ }
219
+ }
220
+ return [];
221
+ }
222
+ /**
223
+ * Throw a diagnostic error when anchor text cannot be found.
224
+ */
225
+ function throwNoMatch(needle, editIndex, sourceLines, label = "old") {
226
+ const needleLines = needle.split("\n");
227
+ const firstLine = needleLines[0].trim();
228
+ let closestLine0 = -1;
229
+ for (let j = 0; j < sourceLines.length; j++) {
230
+ if (sourceLines[j].includes(firstLine)) {
231
+ closestLine0 = j;
232
+ break;
233
+ }
234
+ }
235
+ const context = closestLine0 >= 0 ? buildContextSnippet(sourceLines, closestLine0) : undefined;
236
+ const contextDisplay = context ? "\n Closest partial match:\n" + context.join("\n") : "";
237
+ const hint = "\n Hint: re-read the file to get current content.";
238
+ throw new EditError(`Edit ${editIndex}: no match found for ${label}.` +
239
+ (closestLine0 >= 0 ? ` First line appears near line ${closestLine0 + 1}.` : "") +
240
+ `\n Looking for: "${firstLine.slice(0, 80)}"` +
241
+ contextDisplay +
242
+ hint, editIndex, closestLine0 >= 0
243
+ ? { closest: sourceLines[closestLine0], line: closestLine0 + 1, context }
244
+ : undefined);
245
+ }
246
+ // ── Mode Validation ─────────────────────────────────────────────────────────
247
+ function validateReplace(edit, i) {
248
+ if (edit.old === undefined || edit.old.length === 0) {
249
+ throw new EditError(`Edit ${i}: old string is required for replace mode and cannot be empty.`, i);
250
+ }
251
+ if (edit.new === undefined) {
252
+ throw new EditError(`Edit ${i}: new string is required for replace mode.`, i);
253
+ }
254
+ }
255
+ function validateDelete(edit, i) {
256
+ if (edit.old === undefined || edit.old.length === 0) {
257
+ throw new EditError(`Edit ${i}: old string is required for delete mode and cannot be empty.`, i);
258
+ }
259
+ }
260
+ function validateInsertAnchor(edit, i) {
261
+ if (edit.old === undefined || edit.old.length === 0) {
262
+ throw new EditError(`Edit ${i}: old string is required as anchor for insert ${edit.insert} mode.`, i);
263
+ }
264
+ if (edit.content === undefined) {
265
+ throw new EditError(`Edit ${i}: content is required for insert mode.`, i);
266
+ }
267
+ }
268
+ function validateInsertBoundary(edit, i) {
269
+ if (edit.content === undefined) {
270
+ throw new EditError(`Edit ${i}: content is required for insert ${edit.insert} mode.`, i);
271
+ }
272
+ }
273
+ function validateRange(edit, i) {
274
+ if (edit.from === undefined) {
275
+ throw new EditError(`Edit ${i}: from is required for range mode.`, i);
276
+ }
277
+ if (edit.to === undefined) {
278
+ throw new EditError(`Edit ${i}: to is required for range mode.`, i);
279
+ }
280
+ if (edit.content === undefined) {
281
+ throw new EditError(`Edit ${i}: content is required for range mode.`, i);
282
+ }
283
+ }
284
+ // ── Mode Handlers ───────────────────────────────────────────────────────────
285
+ function handleReplace(edit, i, source, sourceLines, starts, replacements) {
286
+ const old = edit.old.replace(/\r\n/g, "\n");
287
+ const neu = edit.new.replace(/\r\n/g, "\n");
288
+ const matches = findAnchor(source, sourceLines, starts, old, i, { all: edit.all });
289
+ if (matches.length === 0) {
290
+ if (edit.all)
291
+ return; // no-op for all: true
292
+ throwNoMatch(old, i, sourceLines);
293
+ }
294
+ for (const match of matches) {
295
+ // For indent-adjusted matches, adjust the replacement indentation
296
+ const adjusted = match.matchedText !== old ? adjustIndent(old, match.matchedText, neu) : neu;
297
+ let { start, end } = { start: match.start, end: match.end };
298
+ // Smart line deletion when replacement is empty (delete via replace mode)
299
+ if (adjusted === "") {
300
+ ({ start, end } = smartLineDeletion(source, start, end));
301
+ }
302
+ replacements.push({ start, end, content: adjusted, editIndex: i });
303
+ }
304
+ }
305
+ function handleDelete(edit, i, source, sourceLines, starts, replacements) {
306
+ const old = edit.old.replace(/\r\n/g, "\n");
307
+ const matches = findAnchor(source, sourceLines, starts, old, i, { all: edit.all });
308
+ if (matches.length === 0) {
309
+ if (edit.all)
310
+ return;
311
+ throwNoMatch(old, i, sourceLines);
312
+ }
313
+ for (const match of matches) {
314
+ const { start, end } = smartLineDeletion(source, match.start, match.end);
315
+ replacements.push({ start, end, content: "", editIndex: i });
316
+ }
317
+ }
318
+ function handleInsertAnchor(edit, i, source, sourceLines, starts, replacements) {
319
+ const old = edit.old.replace(/\r\n/g, "\n");
320
+ const content = edit.content.replace(/\r\n/g, "\n");
321
+ const matches = findAnchor(source, sourceLines, starts, old, i, { all: edit.all });
322
+ if (matches.length === 0) {
323
+ if (edit.all)
324
+ return;
325
+ throwNoMatch(old, i, sourceLines);
326
+ }
327
+ for (const match of matches) {
328
+ // Adjust content indentation to match anchor
329
+ const adjusted = match.matchedText !== old ? adjustIndent(old, match.matchedText, content) : content;
330
+ if (edit.insert === "before") {
331
+ replacements.push({
332
+ start: match.start,
333
+ end: match.end,
334
+ content: adjusted + "\n" + match.matchedText,
335
+ editIndex: i,
336
+ });
337
+ }
338
+ else {
339
+ replacements.push({
340
+ start: match.start,
341
+ end: match.end,
342
+ content: match.matchedText + "\n" + adjusted,
343
+ editIndex: i,
344
+ });
345
+ }
346
+ }
347
+ }
348
+ function handleInsertBoundary(edit, i, source, replacements) {
349
+ const content = edit.content.replace(/\r\n/g, "\n");
350
+ if (edit.insert === "start") {
351
+ if (source.length === 0) {
352
+ replacements.push({ start: 0, end: 0, content, editIndex: i });
353
+ }
354
+ else {
355
+ // Avoid double-newline: if content already ends with \n, don't add separator
356
+ const sep = content.endsWith("\n") ? "" : "\n";
357
+ replacements.push({ start: 0, end: 0, content: content + sep, editIndex: i });
358
+ }
359
+ }
360
+ else {
361
+ if (source.length === 0) {
362
+ replacements.push({ start: source.length, end: source.length, content, editIndex: i });
363
+ }
364
+ else {
365
+ // Avoid double-newline: if source already ends with \n, don't add separator
366
+ const sep = source.endsWith("\n") ? "" : "\n";
367
+ replacements.push({
368
+ start: source.length,
369
+ end: source.length,
370
+ content: sep + content,
371
+ editIndex: i,
372
+ });
373
+ }
374
+ }
375
+ }
376
+ function handleRange(edit, i, source, sourceLines, starts, replacements) {
377
+ const from = edit.from.replace(/\r\n/g, "\n");
378
+ const to = edit.to.replace(/\r\n/g, "\n");
379
+ const content = edit.content.replace(/\r\n/g, "\n");
380
+ const fromMatches = findAnchor(source, sourceLines, starts, from, i);
381
+ if (fromMatches.length === 0) {
382
+ throwNoMatch(from, i, sourceLines, "from");
383
+ }
384
+ const fromMatch = fromMatches[0];
385
+ const toMatches = findAnchor(source, sourceLines, starts, to, i, {
386
+ searchFrom: fromMatch.end,
387
+ });
388
+ if (toMatches.length === 0) {
389
+ const fromLine = lineAtOffset(starts, fromMatch.start);
390
+ throw new EditError(`Edit ${i}: 'to' marker not found after 'from' (matched at line ${fromLine}).` +
391
+ `\n Looking for: "${to.split("\n")[0].trim().slice(0, 80)}"` +
392
+ "\n Hint: re-read the file to get current content.", i);
393
+ }
394
+ const toMatch = toMatches[0];
395
+ replacements.push({
396
+ start: fromMatch.start,
397
+ end: toMatch.end,
398
+ content,
399
+ editIndex: i,
400
+ });
401
+ }
120
402
  // ── Core: Pure Transform ─────────────────────────────────────────────────────
121
403
  /**
122
404
  * Apply edits to a source string. Pure function, no I/O.
123
405
  *
124
- * Matching strategy per edit (in order):
406
+ * Mode detection (by field presence, precedence: range > insert > delete > replace):
407
+ * - Range: `from` + `to` + `content` — replace block between markers (inclusive)
408
+ * - Insert before/after: `old` + `insert` + `content` — insert relative to anchor
409
+ * - Insert start/end: `insert` + `content` — prepend/append to file
410
+ * - Delete: `old` + `delete: true` — remove matched text
411
+ * - Replace: `old` + `new` — find and replace
412
+ *
413
+ * Matching strategy per anchor (in order):
125
414
  * 1. Exact byte match
126
415
  * 2. Line-normalized (trailing whitespace stripped)
127
416
  * 3. Indent-adjusted (leading whitespace baseline stripped, new indentation adjusted)
@@ -129,7 +418,7 @@ function adjustIndent(oldStr, matchedStr, newStr) {
129
418
  * Multi-edit: all matches resolved against original source,
130
419
  * validated for overlap, applied bottom-to-top.
131
420
  *
132
- * @throws EditError on match failure or overlapping edits
421
+ * @throws EditError on match failure, validation error, or overlapping edits
133
422
  */
134
423
  export function applyEdits(source, edits) {
135
424
  if (edits.length === 0)
@@ -141,82 +430,33 @@ export function applyEdits(source, edits) {
141
430
  const replacements = [];
142
431
  for (let i = 0; i < edits.length; i++) {
143
432
  const edit = edits[i];
144
- if (edit.old.length === 0) {
145
- throw new EditError(`Edit ${i}: old string cannot be empty.`, i);
433
+ // ── Mode: Range ──
434
+ if (edit.from !== undefined || edit.to !== undefined) {
435
+ validateRange(edit, i);
436
+ handleRange(edit, i, source, sourceLines, starts, replacements);
437
+ continue;
146
438
  }
147
- const old = edit.old.replace(/\r\n/g, "\n");
148
- const neu = edit.new.replace(/\r\n/g, "\n");
149
- // ── Strategy 1: Exact match ──────────────────────────────────────────
150
- const positions = findAll(source, old);
151
- if (positions.length > 0) {
152
- if (edit.all) {
153
- for (const pos of positions) {
154
- replacements.push({ start: pos, end: pos + old.length, content: neu, editIndex: i });
155
- }
156
- }
157
- else if (positions.length === 1) {
158
- replacements.push({
159
- start: positions[0],
160
- end: positions[0] + old.length,
161
- content: neu,
162
- editIndex: i,
163
- });
439
+ // ── Mode: Insert ──
440
+ if (edit.insert !== undefined) {
441
+ if (edit.insert === "start" || edit.insert === "end") {
442
+ validateInsertBoundary(edit, i);
443
+ handleInsertBoundary(edit, i, source, replacements);
164
444
  }
165
445
  else {
166
- const lines = positions.map((p) => lineAtOffset(starts, p));
167
- throw new EditError(`Edit ${i}: ${positions.length} matches found (lines ${lines.join(", ")}). ` +
168
- `Include more surrounding context to disambiguate, or use all: true.`, i);
446
+ validateInsertAnchor(edit, i);
447
+ handleInsertAnchor(edit, i, source, sourceLines, starts, replacements);
169
448
  }
170
449
  continue;
171
450
  }
172
- // all: true edits only use exact match — skip fallbacks
173
- if (edit.all) {
174
- // Zero matches with all: true is a no-op, not an error
175
- continue;
176
- }
177
- const oldLines = old.split("\n");
178
- // ── Strategy 2: Line-normalized (strip trailing WS) ──────────────────
179
- const normSourceLines = sourceLines.map((l) => l.trimEnd());
180
- const normOldLines = oldLines.map((l) => l.trimEnd());
181
- const normHit = slideMatch(normSourceLines, normOldLines, (a, b) => a === b);
182
- if (normHit !== null) {
183
- const { start, end } = lineRange(source, starts, sourceLines, normHit, normHit + oldLines.length - 1);
184
- replacements.push({ start, end, content: neu, editIndex: i });
451
+ // ── Mode: Delete ──
452
+ if (edit.delete) {
453
+ validateDelete(edit, i);
454
+ handleDelete(edit, i, source, sourceLines, starts, replacements);
185
455
  continue;
186
456
  }
187
- // ── Strategy 3: Indent-adjusted (strip indent baseline, compare shapes)
188
- const indentHit = (() => {
189
- const baseIndent = minIndent(oldLines);
190
- const strippedNeedle = oldLines.map((l) => (l.trim() === "" ? "" : l.slice(baseIndent)));
191
- for (let si = 0; si <= sourceLines.length - oldLines.length; si++) {
192
- const window = sourceLines.slice(si, si + oldLines.length);
193
- const windowIndent = minIndent(window);
194
- const strippedWindow = window.map((l) => (l.trim() === "" ? "" : l.slice(windowIndent)));
195
- if (strippedNeedle.every((line, j) => line === strippedWindow[j])) {
196
- return si;
197
- }
198
- }
199
- return null;
200
- })();
201
- if (indentHit !== null) {
202
- const { start, end } = lineRange(source, starts, sourceLines, indentHit, indentHit + oldLines.length - 1);
203
- const matched = source.slice(start, end);
204
- const adjusted = adjustIndent(old, matched, neu);
205
- replacements.push({ start, end, content: adjusted, editIndex: i });
206
- continue;
207
- }
208
- // ── No match — diagnostic error ──────────────────────────────────────
209
- const firstLine = oldLines[0].trim();
210
- let closestLine = -1;
211
- for (let j = 0; j < sourceLines.length; j++) {
212
- if (sourceLines[j].includes(firstLine)) {
213
- closestLine = j + 1;
214
- break;
215
- }
216
- }
217
- throw new EditError(`Edit ${i}: no match found` +
218
- (closestLine > 0 ? ` (first line appears near line ${closestLine})` : "") +
219
- `. First line: "${firstLine.slice(0, 80)}"`, i, closestLine > 0 ? { closest: sourceLines[closestLine - 1], line: closestLine } : undefined);
457
+ // ── Mode: Replace (default) ──
458
+ validateReplace(edit, i);
459
+ handleReplace(edit, i, source, sourceLines, starts, replacements);
220
460
  }
221
461
  // ── Validate no overlaps ───────────────────────────────────────────────
222
462
  const sorted = [...replacements].sort((a, b) => a.start - b.start);
package/dist/edit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../src/edit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../src/edit.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -29,9 +29,14 @@ export declare const WriteFile: import("@agentick/core/tool").RunnableToolClass<
29
29
  export declare const EditFile: import("@agentick/core/tool").RunnableToolClass<{
30
30
  path: string;
31
31
  edits: {
32
- old: string;
33
- new: string;
32
+ old?: string | undefined;
33
+ new?: string | undefined;
34
34
  all?: boolean | undefined;
35
+ delete?: boolean | undefined;
36
+ insert?: "start" | "end" | "before" | "after" | undefined;
37
+ content?: string | undefined;
38
+ from?: string | undefined;
39
+ to?: string | undefined;
35
40
  }[];
36
41
  }>;
37
42
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,eAAO,MAAM,KAAK;;EAehB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ;;EAWnB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;EAYpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;EA6BnB,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,eAAO,MAAM,KAAK;;EAehB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ;;EAWnB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;EAYpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;EAqFnB,CAAC"}
package/dist/tools.js CHANGED
@@ -65,19 +65,66 @@ export const WriteFile = createTool({
65
65
  */
66
66
  export const EditFile = createTool({
67
67
  name: "edit_file",
68
- description: "Apply surgical edits to a file. Each edit specifies an old string to find and a new string to replace it with.",
68
+ description: `Apply surgical text edits to a file. Supports replace, delete, insert, and range operations.
69
+
70
+ MODES:
71
+ - Replace: { old: "target text", new: "replacement" } — find and replace
72
+ - Delete: { old: "text to remove", delete: true } — find and delete (trailing newline auto-consumed for complete lines)
73
+ - Insert: { old: "anchor", insert: "after", content: "new lines" } — insert before/after anchor
74
+ - Append: { insert: "end", content: "new content" } — append to end of file
75
+ - Prepend: { insert: "start", content: "new content" } — prepend to start of file
76
+ - Rename: { old: "name", new: "newName", all: true } — replace every occurrence
77
+ - Range: { from: "start marker", to: "end marker", content: "replacement" } — replace block between markers (inclusive)
78
+
79
+ MATCHING:
80
+ - old/from/to must uniquely match one location (unless all: true)
81
+ - Include 1-3 surrounding lines of context for unique identification
82
+ - Whitespace-tolerant: trailing whitespace and indentation differences handled automatically
83
+ - Multi-line matching supported — include complete lines for best results
84
+ - Copy exact text from the file — do not retype from memory
85
+
86
+ BEST PRACTICES:
87
+ - Prefer multiple small, focused edits over one large edit
88
+ - Use insert mode for adding imports, methods, config entries, or test cases
89
+ - Use range mode for replacing function bodies or large blocks — only match boundaries, not entire content
90
+ - Use all: true only for variable/function renames
91
+ - For text files only (code, config, markdown, JSON, YAML, TOML, HTML, CSV, etc.)
92
+ - NOT for binary files (images, audio, PDFs) — use write_file for full replacement or shell for transformations`,
69
93
  input: z.object({
70
94
  path: z.string().describe("Path to the file to edit."),
71
95
  edits: z
72
96
  .array(z.object({
73
- old: z.string().describe("Exact string to find in the file."),
74
- new: z.string().describe("Replacement string. Empty string deletes the match."),
97
+ old: z
98
+ .string()
99
+ .optional()
100
+ .describe("Text to find. Required for replace, delete, and insert before/after. In insert mode, this is the anchor (not replaced)."),
101
+ new: z
102
+ .string()
103
+ .optional()
104
+ .describe("Replacement text. Required for replace. Use delete: true instead of new: '' for clarity."),
75
105
  all: z
76
106
  .boolean()
77
107
  .optional()
78
- .describe("Replace all occurrences. Default: false (requires unique match)."),
108
+ .describe("Apply to all occurrences. Default: false (requires unique match)."),
109
+ delete: z.boolean().optional().describe("Delete the matched text. Sugar for new: ''."),
110
+ insert: z
111
+ .enum(["before", "after", "start", "end"])
112
+ .optional()
113
+ .describe("Insert mode. 'before'/'after' insert content relative to anchor (old). 'start'/'end' prepend/append to file."),
114
+ content: z
115
+ .string()
116
+ .optional()
117
+ .describe("Content to insert (insert mode) or replacement content (range mode)."),
118
+ from: z
119
+ .string()
120
+ .optional()
121
+ .describe("Start boundary for range replacement (inclusive). Used with 'to'."),
122
+ to: z
123
+ .string()
124
+ .optional()
125
+ .describe("End boundary for range replacement (inclusive). Everything from 'from' through 'to' is replaced with 'content'."),
79
126
  }))
80
- .describe("Array of edits to apply."),
127
+ .describe("Array of edits to apply. All edits resolved against original content, applied atomically."),
81
128
  }),
82
129
  use: () => ({ sandbox: useSandbox() }),
83
130
  handler: async ({ path, edits }, deps) => {
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentick/sandbox",
3
- "version": "0.2.1",
3
+ "version": "0.4.1",
4
4
  "description": "Sandbox primitive layer for Agentick — types, context, component, and pre-built tools",
5
5
  "keywords": [
6
6
  "agent",
@@ -18,31 +18,29 @@
18
18
  "dist"
19
19
  ],
20
20
  "type": "module",
21
- "main": "src/index.ts",
21
+ "main": "./dist/index.js",
22
22
  "exports": {
23
23
  ".": {
24
- "types": "./src/index.ts",
24
+ "types": "./dist/index.d.ts",
25
25
  "import": "./dist/index.js"
26
26
  },
27
27
  "./testing": {
28
- "types": "./src/testing.ts",
28
+ "types": "./dist/testing.d.ts",
29
29
  "import": "./dist/testing.js"
30
30
  }
31
31
  },
32
32
  "publishConfig": {
33
- "access": "public",
34
- "exports": {
35
- ".": {
36
- "types": "./dist/index.d.ts",
37
- "import": "./dist/index.js"
38
- },
39
- "./testing": {
40
- "types": "./dist/testing.d.ts",
41
- "import": "./dist/testing.js"
42
- }
43
- },
44
- "main": "./dist/index.js",
45
- "types": "./dist/index.d.ts"
33
+ "access": "public"
34
+ },
35
+ "dependencies": {
36
+ "react": "^19.0.0",
37
+ "zod": "^4.3.6",
38
+ "@agentick/core": "0.4.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/react": "^19.2.13",
42
+ "typescript": "^5.7.3",
43
+ "vitest": "^4.0.18"
46
44
  },
47
45
  "scripts": {
48
46
  "build": "tsc -p tsconfig.build.json",
@@ -52,14 +50,5 @@
52
50
  "clean": "rm -rf dist",
53
51
  "dev": "tsc --watch"
54
52
  },
55
- "dependencies": {
56
- "@agentick/core": "workspace:*",
57
- "react": "^19.0.0",
58
- "zod": "^4.3.6"
59
- },
60
- "devDependencies": {
61
- "@types/react": "^19.2.13",
62
- "typescript": "^5.7.3",
63
- "vitest": "^4.0.18"
64
- }
65
- }
53
+ "types": "./dist/index.d.ts"
54
+ }
package/src/index.ts DELETED
@@ -1,40 +0,0 @@
1
- /**
2
- * @agentick/sandbox - Sandbox primitive layer
3
- *
4
- * Types, context, component, and pre-built tools for sandboxed execution.
5
- */
6
-
7
- // ── Types ────────────────────────────────────────────────────────────────────
8
- export type {
9
- Sandbox as SandboxHandle,
10
- SandboxProvider,
11
- SandboxCreateOptions,
12
- SandboxConfig,
13
- SandboxSnapshot,
14
- ExecOptions,
15
- ExecResult,
16
- OutputChunk,
17
- Mount,
18
- Permissions,
19
- ResourceLimits,
20
- NetworkRule,
21
- ProxiedRequest,
22
- } from "./types";
23
-
24
- // ── Edit Types & Utilities ───────────────────────────────────────────────────
25
- export { applyEdits, editFile, EditError } from "./edit";
26
- export type { Edit, EditResult, EditChange } from "./edit";
27
-
28
- // ── Context & Hook ───────────────────────────────────────────────────────────
29
- export { SandboxContext, useSandbox } from "./context";
30
-
31
- // ── Component ────────────────────────────────────────────────────────────────
32
- export { Sandbox } from "./component";
33
- export type { SandboxProps } from "./component";
34
-
35
- // ── Tools ────────────────────────────────────────────────────────────────────
36
- export { Shell, ReadFile, WriteFile, EditFile } from "./tools";
37
-
38
- // ── Testing ──────────────────────────────────────────────────────────────────
39
- // Import from "@agentick/sandbox/testing" — not re-exported here to avoid
40
- // pulling vitest into production bundles.