hoomanjs 1.55.3 → 1.57.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.
- package/dist/acp/acp-agent.js +25 -2
- package/dist/acp/acp-agent.js.map +1 -1
- package/dist/acp/approvals.js +10 -3
- package/dist/acp/approvals.js.map +1 -1
- package/dist/acp/utils/tool-kind.js +1 -1
- package/dist/acp/utils/tool-kind.js.map +1 -1
- package/dist/acp/utils/tool-locations.js +12 -2
- package/dist/acp/utils/tool-locations.js.map +1 -1
- package/dist/chat/app.js +15 -0
- package/dist/chat/app.js.map +1 -1
- package/dist/chat/approvals.js +3 -0
- package/dist/chat/approvals.js.map +1 -1
- package/dist/chat/components/ApprovalPrompt.js +15 -4
- package/dist/chat/components/ApprovalPrompt.js.map +1 -1
- package/dist/chat/types.d.ts +1 -0
- package/dist/core/agent/gitignore-guard-plugin.js +12 -2
- package/dist/core/agent/gitignore-guard-plugin.js.map +1 -1
- package/dist/core/agent/index.js +11 -5
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/{prompts/session-mode.js → agent/session-mode-plugin.js} +2 -2
- package/dist/core/agent/session-mode-plugin.js.map +1 -0
- package/dist/core/approvals/allowlist.js +1 -1
- package/dist/core/approvals/allowlist.js.map +1 -1
- package/dist/core/approvals/intervention.d.ts +3 -0
- package/dist/core/approvals/intervention.js +16 -0
- package/dist/core/approvals/intervention.js.map +1 -1
- package/dist/core/filesystem/backend.d.ts +13 -0
- package/dist/core/filesystem/backend.js +2 -0
- package/dist/core/filesystem/backend.js.map +1 -0
- package/dist/core/filesystem/backends/index.d.ts +2 -0
- package/dist/core/filesystem/backends/index.js +3 -0
- package/dist/core/filesystem/backends/index.js.map +1 -0
- package/dist/core/filesystem/backends/local-fs-backend.d.ts +6 -0
- package/dist/core/filesystem/backends/local-fs-backend.js +17 -0
- package/dist/core/filesystem/backends/local-fs-backend.js.map +1 -0
- package/dist/core/filesystem/backends/remote-fs-backend.d.ts +12 -0
- package/dist/core/filesystem/backends/remote-fs-backend.js +20 -0
- package/dist/core/filesystem/backends/remote-fs-backend.js.map +1 -0
- package/dist/core/filesystem/edits/apply.d.ts +4 -0
- package/dist/core/filesystem/edits/apply.js +131 -0
- package/dist/core/filesystem/edits/apply.js.map +1 -0
- package/dist/core/filesystem/edits/types.d.ts +36 -0
- package/dist/core/filesystem/edits/types.js +2 -0
- package/dist/core/filesystem/edits/types.js.map +1 -0
- package/dist/core/filesystem/index.d.ts +12 -0
- package/dist/core/filesystem/index.js +12 -0
- package/dist/core/filesystem/index.js.map +1 -0
- package/dist/core/filesystem/registry.d.ts +4 -0
- package/dist/core/filesystem/registry.js +13 -0
- package/dist/core/filesystem/registry.js.map +1 -0
- package/dist/core/{tools/filesystem.d.ts → filesystem/tools.d.ts} +0 -19
- package/dist/core/{tools/filesystem.js → filesystem/tools.js} +90 -273
- package/dist/core/filesystem/tools.js.map +1 -0
- package/dist/core/modes/definitions.js +4 -4
- package/dist/core/modes/definitions.js.map +1 -1
- package/dist/core/prompts/modes/agent.md +1 -1
- package/dist/core/prompts/modes/ask.md +1 -1
- package/dist/core/prompts/modes/design.md +1 -1
- package/dist/core/prompts/modes/plan.md +1 -1
- package/dist/core/prompts/static/filesystem.md +2 -2
- package/dist/core/prompts/static/switch-mode.md +4 -2
- package/dist/core/state/tool-approvals.d.ts +1 -1
- package/dist/core/state/tool-approvals.js +31 -21
- package/dist/core/state/tool-approvals.js.map +1 -1
- package/dist/core/subagents/index.d.ts +1 -0
- package/dist/core/subagents/index.js +1 -0
- package/dist/core/subagents/index.js.map +1 -1
- package/dist/core/subagents/tool.d.ts +3 -0
- package/dist/core/subagents/tool.js +11 -0
- package/dist/core/subagents/tool.js.map +1 -1
- package/dist/core/subagents/usage.d.ts +12 -0
- package/dist/core/subagents/usage.js +23 -0
- package/dist/core/subagents/usage.js.map +1 -0
- package/dist/core/tools/index.d.ts +0 -1
- package/dist/core/tools/index.js +0 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/switch-mode.js +11 -5
- package/dist/core/tools/switch-mode.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/prompts/session-mode.js.map +0 -1
- package/dist/core/tools/filesystem.js.map +0 -1
- /package/dist/core/{prompts/session-mode.d.ts → agent/session-mode-plugin.d.ts} +0 -0
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { applyFileEdit, applyFileEdits, getFsBackend, } from "./index.js";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { tool, TextBlock, } from "@strands-agents/sdk";
|
|
5
5
|
import { normalizeUserPath } from "../utils/normalize-user-path.js";
|
|
6
6
|
import { resolveAgentInstructionsForFile } from "../prompts/runtime/agents.js";
|
|
7
|
-
import { setFileToolDisplay, } from "../state/file-tool-display.js";
|
|
8
7
|
import { readAttachmentAsBlocksOrBase64, } from "../utils/attachments.js";
|
|
9
|
-
import { findReplacementSpan, unescapeModelText, } from "../utils/edit-replace.js";
|
|
10
8
|
import { getLlmModality } from "../state/llm-modality.js";
|
|
11
9
|
import { z } from "zod";
|
|
12
10
|
import { createGitignorePredicate } from "../utils/gitignore.js";
|
|
@@ -21,17 +19,66 @@ export function getTextFsBackend(agent) {
|
|
|
21
19
|
const DEFAULT_READ_LIMIT = 250;
|
|
22
20
|
const DEFAULT_MAX_READ_BYTES = 1024 * 1024;
|
|
23
21
|
const DEFAULT_TREE_DEPTH = 4;
|
|
24
|
-
const SNIPPET_RADIUS = 3;
|
|
25
22
|
const FAST_READ_MAX_BYTES = 10 * 1024 * 1024;
|
|
26
23
|
const STREAM_HIGH_WATER_MARK = 512 * 1024;
|
|
27
24
|
const runtimeResolvedAgentInstructionPaths = new WeakMap();
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
.
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
const FileEditSchema = z.discriminatedUnion("mode", [
|
|
26
|
+
z
|
|
27
|
+
.object({
|
|
28
|
+
path: z.string(),
|
|
29
|
+
mode: z.literal("write"),
|
|
30
|
+
content: z.string(),
|
|
31
|
+
expected_sha256: z.string().optional(),
|
|
32
|
+
})
|
|
33
|
+
.strict(),
|
|
34
|
+
z
|
|
35
|
+
.object({
|
|
36
|
+
path: z.string(),
|
|
37
|
+
mode: z.literal("replace"),
|
|
38
|
+
old_text: z
|
|
39
|
+
.string()
|
|
40
|
+
.min(1)
|
|
41
|
+
.describe("Small, unique text block to replace."),
|
|
42
|
+
new_text: z.string().describe("Replacement text."),
|
|
43
|
+
replace_all: z
|
|
44
|
+
.boolean()
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Replace every exact occurrence. A tolerant fallback replaces one unique match."),
|
|
47
|
+
expected_sha256: z.string().optional(),
|
|
48
|
+
})
|
|
49
|
+
.strict(),
|
|
50
|
+
z
|
|
51
|
+
.object({
|
|
52
|
+
path: z.string(),
|
|
53
|
+
mode: z.literal("edit"),
|
|
54
|
+
content: z.string(),
|
|
55
|
+
insert_at: z.number().int().min(1).describe("1-based first line."),
|
|
56
|
+
replace_until: z
|
|
57
|
+
.number()
|
|
58
|
+
.int()
|
|
59
|
+
.min(1)
|
|
60
|
+
.nullable()
|
|
61
|
+
.optional()
|
|
62
|
+
.describe("Inclusive last line to replace. Omit to insert before insert_at."),
|
|
63
|
+
expected_sha256: z.string().optional(),
|
|
64
|
+
})
|
|
65
|
+
.strict(),
|
|
66
|
+
z
|
|
67
|
+
.object({
|
|
68
|
+
path: z.string(),
|
|
69
|
+
mode: z.literal("rename"),
|
|
70
|
+
new_path: z.string(),
|
|
71
|
+
expected_sha256: z.string().optional(),
|
|
72
|
+
})
|
|
73
|
+
.strict(),
|
|
74
|
+
z
|
|
75
|
+
.object({
|
|
76
|
+
path: z.string(),
|
|
77
|
+
mode: z.literal("delete"),
|
|
78
|
+
expected_sha256: z.string().optional(),
|
|
79
|
+
})
|
|
80
|
+
.strict(),
|
|
81
|
+
]);
|
|
35
82
|
const textReadState = new Map();
|
|
36
83
|
function toJsonValue(value) {
|
|
37
84
|
return JSON.parse(JSON.stringify(value));
|
|
@@ -109,33 +156,17 @@ function globToRegExp(pattern) {
|
|
|
109
156
|
function splitLines(content) {
|
|
110
157
|
return content.split(/\r?\n/);
|
|
111
158
|
}
|
|
112
|
-
function normalizeLineEndings(content) {
|
|
113
|
-
return content.replaceAll("\r\n", "\n");
|
|
114
|
-
}
|
|
115
|
-
function detectLineEndings(content) {
|
|
116
|
-
return content.includes("\r\n") ? "CRLF" : "LF";
|
|
117
|
-
}
|
|
118
|
-
function restoreLineEndings(content, lineEndings) {
|
|
119
|
-
if (lineEndings === "LF") {
|
|
120
|
-
return content;
|
|
121
|
-
}
|
|
122
|
-
return normalizeLineEndings(content).split("\n").join("\r\n");
|
|
123
|
-
}
|
|
124
|
-
function countLines(content) {
|
|
125
|
-
if (content.length === 0) {
|
|
126
|
-
return 0;
|
|
127
|
-
}
|
|
128
|
-
return splitLines(content).length;
|
|
129
|
-
}
|
|
130
159
|
function makeLineExcerpt(content, offset = 1, limit = DEFAULT_READ_LIMIT) {
|
|
131
160
|
const lines = splitLines(content);
|
|
132
161
|
const totalLines = lines.length;
|
|
133
162
|
const startIndex = Math.max(0, offset - 1);
|
|
134
163
|
const selected = lines.slice(startIndex, startIndex + limit);
|
|
164
|
+
const hasSelection = selected.length > 0;
|
|
165
|
+
const emptyBoundary = Math.min(Math.max(1, offset), totalLines);
|
|
135
166
|
return {
|
|
136
167
|
content: selected.join("\n"),
|
|
137
|
-
startLine: startIndex + 1,
|
|
138
|
-
endLine: startIndex + selected.length,
|
|
168
|
+
startLine: hasSelection ? startIndex + 1 : emptyBoundary,
|
|
169
|
+
endLine: hasSelection ? startIndex + selected.length : emptyBoundary,
|
|
139
170
|
totalLines,
|
|
140
171
|
truncated: startIndex + selected.length < totalLines,
|
|
141
172
|
};
|
|
@@ -299,118 +330,6 @@ async function readBinaryFile(filePath, options) {
|
|
|
299
330
|
metadata: options?.modality ?? null,
|
|
300
331
|
});
|
|
301
332
|
}
|
|
302
|
-
function snippetAroundChange(content, index, replacementLength) {
|
|
303
|
-
const before = content.slice(0, index);
|
|
304
|
-
const startLine = Math.max(0, countLines(before) - SNIPPET_RADIUS);
|
|
305
|
-
const endLine = countLines(before) + replacementLength + SNIPPET_RADIUS;
|
|
306
|
-
const lines = splitLines(content);
|
|
307
|
-
return lines.slice(startLine, endLine).join("\n");
|
|
308
|
-
}
|
|
309
|
-
function lineNumberForIndex(content, index) {
|
|
310
|
-
let line = 1;
|
|
311
|
-
for (let i = 0; i < index; i += 1) {
|
|
312
|
-
if (content[i] === "\n") {
|
|
313
|
-
line += 1;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
return line;
|
|
317
|
-
}
|
|
318
|
-
function buildPatchHunk(original, oldText, newText, index) {
|
|
319
|
-
const originalLines = splitLines(original);
|
|
320
|
-
const oldLines = splitLines(oldText);
|
|
321
|
-
const newLines = splitLines(newText);
|
|
322
|
-
const changedLine = lineNumberForIndex(original, index);
|
|
323
|
-
const contextStart = Math.max(1, changedLine - SNIPPET_RADIUS);
|
|
324
|
-
const oldStart = contextStart;
|
|
325
|
-
const newStart = contextStart;
|
|
326
|
-
const prefixContext = originalLines.slice(contextStart - 1, changedLine - 1);
|
|
327
|
-
const oldEnd = changedLine + oldLines.length - 1;
|
|
328
|
-
const suffixContext = originalLines.slice(oldEnd, Math.min(originalLines.length, oldEnd + SNIPPET_RADIUS));
|
|
329
|
-
const lines = [
|
|
330
|
-
...prefixContext.map((line) => ` ${line}`),
|
|
331
|
-
...oldLines.map((line) => `-${line}`),
|
|
332
|
-
...newLines.map((line) => `+${line}`),
|
|
333
|
-
...suffixContext.map((line) => ` ${line}`),
|
|
334
|
-
];
|
|
335
|
-
return {
|
|
336
|
-
oldStart,
|
|
337
|
-
oldLines: prefixContext.length + oldLines.length + suffixContext.length,
|
|
338
|
-
newStart,
|
|
339
|
-
newLines: prefixContext.length + newLines.length + suffixContext.length,
|
|
340
|
-
lines,
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
function patchLines(content) {
|
|
344
|
-
return content.length === 0 ? [] : splitLines(content);
|
|
345
|
-
}
|
|
346
|
-
function buildContentPatchHunks(original, edited) {
|
|
347
|
-
const oldLines = patchLines(original);
|
|
348
|
-
const newLines = patchLines(edited);
|
|
349
|
-
let prefix = 0;
|
|
350
|
-
while (prefix < oldLines.length &&
|
|
351
|
-
prefix < newLines.length &&
|
|
352
|
-
oldLines[prefix] === newLines[prefix]) {
|
|
353
|
-
prefix += 1;
|
|
354
|
-
}
|
|
355
|
-
let oldEnd = oldLines.length - 1;
|
|
356
|
-
let newEnd = newLines.length - 1;
|
|
357
|
-
while (oldEnd >= prefix &&
|
|
358
|
-
newEnd >= prefix &&
|
|
359
|
-
oldLines[oldEnd] === newLines[newEnd]) {
|
|
360
|
-
oldEnd -= 1;
|
|
361
|
-
newEnd -= 1;
|
|
362
|
-
}
|
|
363
|
-
if (oldEnd < prefix && newEnd < prefix) {
|
|
364
|
-
return [];
|
|
365
|
-
}
|
|
366
|
-
const contextStart = Math.max(0, prefix - SNIPPET_RADIUS);
|
|
367
|
-
const oldSuffixStart = oldEnd + 1;
|
|
368
|
-
const oldSuffixEnd = Math.min(oldLines.length, oldSuffixStart + SNIPPET_RADIUS);
|
|
369
|
-
const prefixContext = oldLines.slice(contextStart, prefix);
|
|
370
|
-
const removed = oldLines.slice(prefix, oldEnd + 1);
|
|
371
|
-
const added = newLines.slice(prefix, newEnd + 1);
|
|
372
|
-
const suffixContext = oldLines.slice(oldSuffixStart, oldSuffixEnd);
|
|
373
|
-
return [
|
|
374
|
-
{
|
|
375
|
-
oldStart: contextStart + 1,
|
|
376
|
-
oldLines: prefixContext.length + removed.length + suffixContext.length,
|
|
377
|
-
newStart: contextStart + 1,
|
|
378
|
-
newLines: prefixContext.length + added.length + suffixContext.length,
|
|
379
|
-
lines: [
|
|
380
|
-
...prefixContext.map((line) => ` ${line}`),
|
|
381
|
-
...removed.map((line) => `-${line}`),
|
|
382
|
-
...added.map((line) => `+${line}`),
|
|
383
|
-
...suffixContext.map((line) => ` ${line}`),
|
|
384
|
-
],
|
|
385
|
-
},
|
|
386
|
-
];
|
|
387
|
-
}
|
|
388
|
-
function applyEdits(original, edits) {
|
|
389
|
-
let current = original;
|
|
390
|
-
const replacements = [];
|
|
391
|
-
for (const edit of edits) {
|
|
392
|
-
// Compare against the file's normalized (LF) form so line endings never
|
|
393
|
-
// cause a spurious mismatch. The tolerant matcher returns the exact span
|
|
394
|
-
// present in the file, which we splice and diff for byte-accurate output.
|
|
395
|
-
const oldText = normalizeLineEndings(edit.oldText);
|
|
396
|
-
let newText = normalizeLineEndings(edit.newText);
|
|
397
|
-
const { index, text: matched } = findReplacementSpan(current, oldText);
|
|
398
|
-
// If the target only matched after unescaping (the model over-escaped its
|
|
399
|
-
// JSON tool arguments), the replacement carries the same over-escaping.
|
|
400
|
-
if (matched !== oldText && matched === unescapeModelText(oldText)) {
|
|
401
|
-
newText = unescapeModelText(newText);
|
|
402
|
-
}
|
|
403
|
-
const previous = current;
|
|
404
|
-
current =
|
|
405
|
-
current.slice(0, index) + newText + current.slice(index + matched.length);
|
|
406
|
-
replacements.push({
|
|
407
|
-
index,
|
|
408
|
-
snippet: snippetAroundChange(current, index, countLines(newText)),
|
|
409
|
-
hunk: buildPatchHunk(previous, matched, newText, index),
|
|
410
|
-
});
|
|
411
|
-
}
|
|
412
|
-
return { content: current, replacements };
|
|
413
|
-
}
|
|
414
333
|
async function walkDirectory(dirPath, options) {
|
|
415
334
|
const results = [];
|
|
416
335
|
const recursive = options?.recursive ?? false;
|
|
@@ -505,25 +424,9 @@ function createFilesystemSchema() {
|
|
|
505
424
|
.optional()
|
|
506
425
|
.describe("Read each path as binary. Images, videos, and documents become multimodal content blocks (when the model supports them); other binaries come back as base64. Offset/limit are ignored when binary is true."),
|
|
507
426
|
}),
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
append: z.boolean().optional().describe("Append instead of overwrite."),
|
|
512
|
-
create_parents: z
|
|
513
|
-
.boolean()
|
|
514
|
-
.optional()
|
|
515
|
-
.describe("Create parent directories if needed."),
|
|
516
|
-
}),
|
|
517
|
-
editFile: z.object({
|
|
518
|
-
path: z.string().describe("File path to edit."),
|
|
519
|
-
edits: z
|
|
520
|
-
.array(EditSchema)
|
|
521
|
-
.min(1)
|
|
522
|
-
.describe("Exact text replacements to apply in order."),
|
|
523
|
-
dry_run: z
|
|
524
|
-
.boolean()
|
|
525
|
-
.optional()
|
|
526
|
-
.describe("Preview edits without writing the file."),
|
|
427
|
+
editFile: FileEditSchema,
|
|
428
|
+
editMultipleFiles: z.object({
|
|
429
|
+
edits: z.array(FileEditSchema).min(1).max(100),
|
|
527
430
|
}),
|
|
528
431
|
createDirectory: z.object({
|
|
529
432
|
path: z.string().describe("Directory path to create."),
|
|
@@ -645,121 +548,35 @@ export function createFilesystemTools() {
|
|
|
645
548
|
},
|
|
646
549
|
}),
|
|
647
550
|
tool({
|
|
648
|
-
name: "
|
|
649
|
-
description: "
|
|
650
|
-
inputSchema: schema.writeFile,
|
|
551
|
+
name: "edit_file",
|
|
552
|
+
description: "Create, overwrite, replace text, edit line ranges, rename, or delete one file. Prefer mode 'replace' with a small unique old_text/new_text block for existing text; use mode 'edit' when exact line positions are more convenient.",
|
|
651
553
|
callback: async (input, context) => {
|
|
652
|
-
const
|
|
653
|
-
const
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
? await backend.readTextFile(filePath)
|
|
663
|
-
: await fs.readFile(filePath, "utf8"));
|
|
664
|
-
fileExisted = true;
|
|
665
|
-
}
|
|
666
|
-
catch {
|
|
667
|
-
oldContent = "";
|
|
668
|
-
}
|
|
669
|
-
const newContent = input.append
|
|
670
|
-
? `${oldContent}${normalizeLineEndings(input.content)}`
|
|
671
|
-
: normalizeLineEndings(input.content);
|
|
672
|
-
if (backend?.canWrite) {
|
|
673
|
-
await backend.writeTextFile(filePath, input.append ? `${oldContent}${input.content}` : input.content);
|
|
674
|
-
}
|
|
675
|
-
else if (input.append) {
|
|
676
|
-
await fs.appendFile(filePath, input.content, "utf8");
|
|
677
|
-
}
|
|
678
|
-
else {
|
|
679
|
-
await fs.writeFile(filePath, input.content, "utf8");
|
|
680
|
-
}
|
|
681
|
-
const structuredPatch = buildContentPatchHunks(oldContent, newContent);
|
|
682
|
-
if (structuredPatch.length > 0) {
|
|
683
|
-
if (context) {
|
|
684
|
-
setFileToolDisplay(context.agent.appState, context.toolUse.toolUseId, {
|
|
685
|
-
structuredPatch,
|
|
686
|
-
path: filePath,
|
|
687
|
-
oldText: fileExisted ? oldContent : null,
|
|
688
|
-
newText: newContent,
|
|
689
|
-
});
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
return toJsonValue({
|
|
693
|
-
path: filePath,
|
|
694
|
-
appended: input.append ?? false,
|
|
695
|
-
bytes_written: Buffer.byteLength(input.content, "utf8"),
|
|
696
|
-
});
|
|
554
|
+
const edit = input;
|
|
555
|
+
const normalized = {
|
|
556
|
+
...edit,
|
|
557
|
+
path: normalizeUserPath(edit.path),
|
|
558
|
+
...(edit.mode === "rename"
|
|
559
|
+
? { new_path: normalizeUserPath(edit.new_path) }
|
|
560
|
+
: {}),
|
|
561
|
+
};
|
|
562
|
+
const result = await applyFileEdit(getFsBackend(context?.agent), normalized);
|
|
563
|
+
return toJsonValue(result);
|
|
697
564
|
},
|
|
698
565
|
}),
|
|
699
566
|
tool({
|
|
700
|
-
name: "
|
|
701
|
-
description: "Apply
|
|
702
|
-
inputSchema: schema.
|
|
567
|
+
name: "edit_multiple_files",
|
|
568
|
+
description: "Apply ordered create, overwrite, text-replacement, line-range edit, rename, or delete operations. Operations run sequentially and may target the same file.",
|
|
569
|
+
inputSchema: schema.editMultipleFiles,
|
|
703
570
|
callback: async (input, context) => {
|
|
704
|
-
const
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
const stat = await statFile(filePath);
|
|
714
|
-
const previousRead = textReadState.get(filePath);
|
|
715
|
-
rawOriginal = await fs.readFile(filePath, "utf8");
|
|
716
|
-
const original = normalizeLineEndings(rawOriginal);
|
|
717
|
-
if (previousRead && stat.mtimeMs > previousRead.mtimeMs) {
|
|
718
|
-
const fullReadWasUnchanged = !previousRead.isPartial && previousRead.content === original;
|
|
719
|
-
if (!fullReadWasUnchanged) {
|
|
720
|
-
throw new Error("File changed since it was last read. Read the file again before editing.");
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
const lineEndings = detectLineEndings(rawOriginal);
|
|
725
|
-
const original = normalizeLineEndings(rawOriginal);
|
|
726
|
-
const edited = applyEdits(original, input.edits);
|
|
727
|
-
const contentToWrite = restoreLineEndings(edited.content, lineEndings);
|
|
728
|
-
if (!input.dry_run) {
|
|
729
|
-
if (backend?.canWrite) {
|
|
730
|
-
await backend.writeTextFile(filePath, contentToWrite);
|
|
731
|
-
}
|
|
732
|
-
else {
|
|
733
|
-
await fs.writeFile(filePath, contentToWrite, "utf8");
|
|
734
|
-
const updatedStat = await fs.stat(filePath);
|
|
735
|
-
textReadState.set(filePath, {
|
|
736
|
-
content: edited.content,
|
|
737
|
-
mtimeMs: updatedStat.mtimeMs,
|
|
738
|
-
offset: 1,
|
|
739
|
-
limit: undefined,
|
|
740
|
-
isPartial: false,
|
|
741
|
-
});
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
|
-
if (context) {
|
|
745
|
-
setFileToolDisplay(context.agent.appState, context.toolUse.toolUseId, {
|
|
746
|
-
previews: edited.replacements.map((item) => item.snippet),
|
|
747
|
-
structuredPatch: edited.replacements.map((item) => item.hunk),
|
|
748
|
-
path: filePath,
|
|
749
|
-
oldText: original,
|
|
750
|
-
newText: edited.content,
|
|
751
|
-
});
|
|
752
|
-
}
|
|
753
|
-
return toJsonValue({
|
|
754
|
-
path: filePath,
|
|
755
|
-
dry_run: input.dry_run ?? false,
|
|
756
|
-
edits_applied: input.edits.length,
|
|
757
|
-
changed: edited.content !== original,
|
|
758
|
-
sha256_before: createHash("sha256").update(original).digest("hex"),
|
|
759
|
-
sha256_after: createHash("sha256")
|
|
760
|
-
.update(edited.content)
|
|
761
|
-
.digest("hex"),
|
|
762
|
-
});
|
|
571
|
+
const edits = input.edits.map((edit) => ({
|
|
572
|
+
...edit,
|
|
573
|
+
path: normalizeUserPath(edit.path),
|
|
574
|
+
...(edit.mode === "rename"
|
|
575
|
+
? { new_path: normalizeUserPath(edit.new_path) }
|
|
576
|
+
: {}),
|
|
577
|
+
}));
|
|
578
|
+
const results = await applyFileEdits(getFsBackend(context?.agent), edits);
|
|
579
|
+
return toJsonValue({ edits: results, count: results.length });
|
|
763
580
|
},
|
|
764
581
|
}),
|
|
765
582
|
tool({
|
|
@@ -851,4 +668,4 @@ export function createFilesystemTools() {
|
|
|
851
668
|
}),
|
|
852
669
|
];
|
|
853
670
|
}
|
|
854
|
-
//# sourceMappingURL=
|
|
671
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/core/filesystem/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,8 +26,8 @@ export const MODE_DEFINITIONS = [
|
|
|
26
26
|
"grep",
|
|
27
27
|
"read_file",
|
|
28
28
|
"read_multiple_files",
|
|
29
|
-
"write_file",
|
|
30
29
|
"edit_file",
|
|
30
|
+
"edit_multiple_files",
|
|
31
31
|
"create_directory",
|
|
32
32
|
"move_file",
|
|
33
33
|
"ask_user",
|
|
@@ -62,8 +62,8 @@ export const MODE_DEFINITIONS = [
|
|
|
62
62
|
"grep",
|
|
63
63
|
"read_file",
|
|
64
64
|
"read_multiple_files",
|
|
65
|
-
"write_file",
|
|
66
65
|
"edit_file",
|
|
66
|
+
"edit_multiple_files",
|
|
67
67
|
"ask_user",
|
|
68
68
|
"search_tools",
|
|
69
69
|
"activate_tools",
|
|
@@ -96,8 +96,8 @@ export const MODE_DEFINITIONS = [
|
|
|
96
96
|
"grep",
|
|
97
97
|
"read_file",
|
|
98
98
|
"read_multiple_files",
|
|
99
|
-
"write_file",
|
|
100
99
|
"edit_file",
|
|
100
|
+
"edit_multiple_files",
|
|
101
101
|
"ask_user",
|
|
102
102
|
"search_tools",
|
|
103
103
|
"activate_tools",
|
|
@@ -127,8 +127,8 @@ export const MODE_DEFINITIONS = [
|
|
|
127
127
|
"grep",
|
|
128
128
|
"read_file",
|
|
129
129
|
"read_multiple_files",
|
|
130
|
-
"write_file",
|
|
131
130
|
"edit_file",
|
|
131
|
+
"edit_multiple_files",
|
|
132
132
|
"ask_user",
|
|
133
133
|
"search_tools",
|
|
134
134
|
"activate_tools",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/core/modes/definitions.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,6BAA6B;QAC1C,KAAK,EAAE;YACL,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,4BAA4B;YAC5B,eAAe;YACf,2BAA2B;YAC3B,cAAc;YACd,OAAO;YACP,iBAAiB;YACjB,OAAO;YACP,OAAO;YACP,cAAc;YACd,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,gBAAgB;YAChB,eAAe;YACf,gBAAgB;YAChB,MAAM;YACN,WAAW;YACX,qBAAqB;YACrB,
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/core/modes/definitions.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,6BAA6B;QAC1C,KAAK,EAAE;YACL,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,4BAA4B;YAC5B,eAAe;YACf,2BAA2B;YAC3B,cAAc;YACd,OAAO;YACP,iBAAiB;YACjB,OAAO;YACP,OAAO;YACP,cAAc;YACd,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,gBAAgB;YAChB,eAAe;YACf,gBAAgB;YAChB,MAAM;YACN,WAAW;YACX,qBAAqB;YACrB,WAAW;YACX,qBAAqB;YACrB,kBAAkB;YAClB,WAAW;YACX,UAAU;YACV,cAAc;YACd,gBAAgB;YAChB,aAAa;SACd;KACF;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,eAAe;QAC7B,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE;YACL,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,4BAA4B;YAC5B,eAAe;YACf,2BAA2B;YAC3B,cAAc;YACd,OAAO;YACP,iBAAiB;YACjB,OAAO;YACP,cAAc;YACd,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,gBAAgB;YAChB,eAAe;YACf,gBAAgB;YAChB,MAAM;YACN,WAAW;YACX,qBAAqB;YACrB,WAAW;YACX,qBAAqB;YACrB,UAAU;YACV,cAAc;YACd,gBAAgB;YAChB,aAAa;SACd;KACF;IACD;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,cAAc;QAC5B,WAAW,EAAE,kDAAkD;QAC/D,KAAK,EAAE;YACL,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,4BAA4B;YAC5B,eAAe;YACf,2BAA2B;YAC3B,cAAc;YACd,OAAO;YACP,iBAAiB;YACjB,OAAO;YACP,cAAc;YACd,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,gBAAgB;YAChB,eAAe;YACf,gBAAgB;YAChB,MAAM;YACN,WAAW;YACX,qBAAqB;YACrB,WAAW;YACX,qBAAqB;YACrB,UAAU;YACV,cAAc;YACd,gBAAgB;YAChB,aAAa;SACd;KACF;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,iBAAiB;QAC/B,WAAW,EACT,gEAAgE;QAClE,KAAK,EAAE;YACL,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,4BAA4B;YAC5B,eAAe;YACf,2BAA2B;YAC3B,cAAc;YACd,OAAO;YACP,iBAAiB;YACjB,cAAc;YACd,kBAAkB;YAClB,gBAAgB;YAChB,eAAe;YACf,gBAAgB;YAChB,MAAM;YACN,WAAW;YACX,qBAAqB;YACrB,WAAW;YACX,qBAAqB;YACrB,UAAU;YACV,cAAc;YACd,gBAAgB;YAChB,aAAa;YACb,gBAAgB;YAChB,qBAAqB;YACrB,eAAe;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,OAAO,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;AAChD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAiB;IAChD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,cAAc;IAK5B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,EAAE,KAAK,CAAC,EAAE;QACf,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## Agent mode
|
|
2
2
|
|
|
3
|
-
You are in **agent** mode
|
|
3
|
+
You are in **agent** mode; this is the authoritative active session mode. Do not call `switch_mode` with `mode: "agent"`; continue directly. You can make use of any available tool to fulfil your current task.
|
|
4
4
|
|
|
5
5
|
For HTML design artifacts (prototypes, decks, Figma-derived layouts), prefer **`switch_mode`** to **design** so craft rules, `DESIGN.md`, and the `hooman-design` skill apply.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## Ask mode
|
|
2
2
|
|
|
3
|
-
You are in **ask** mode: a narrowed tool surface for exploration, research, and answering questions.
|
|
3
|
+
You are in **ask** mode; this is the authoritative active session mode. Do not call `switch_mode` with `mode: "ask"`; continue directly. This mode has a narrowed tool surface for exploration, research, and answering questions.
|
|
4
4
|
|
|
5
5
|
- Prefer inspection and analysis over changing the repo or runtime.
|
|
6
6
|
- Explain architecture, behavior, APIs, trade-offs, options, and risks from what you can inspect.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## Design mode
|
|
2
2
|
|
|
3
|
-
You are in **design** mode:
|
|
3
|
+
You are in **design** mode; this is the authoritative active session mode. Do not call `switch_mode` with `mode: "design"`; continue the design workflow directly. Produce previewable HTML design artifacts shaped by craft rules and the project's `DESIGN.md` (when present).
|
|
4
4
|
|
|
5
5
|
Follow the **strict phased workflow** in the `hooman-design` skill (`references/workflow.md`). Do not skip phases.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## Planning mode
|
|
2
2
|
|
|
3
|
-
You are in
|
|
3
|
+
You are in **plan** mode; this is the authoritative active session mode. Do not call `switch_mode` with `mode: "plan"` unless you intentionally need a brand-new plan document and pass `fresh: true`. **Do not implement here.** Implementation begins only once the user approves your `switch_mode` proposal to leave plan (typically to `agent`); approving it is their go-ahead.
|
|
4
4
|
|
|
5
5
|
**Plan file:** {{#if (lookup state 'hooman.planFile')}}{{lookup state 'hooman.planFile'}}{{else}}—{{/if}}
|
|
6
6
|
|
|
@@ -5,7 +5,7 @@ You have access to filesystem tools for reading, writing, editing, moving, listi
|
|
|
5
5
|
- Prefer filesystem tools over `shell` when the task is mainly about file contents, directory structure, or metadata.
|
|
6
6
|
- Use `read_file` for one known file, `read_multiple_files` for several known files, `grep` for exact text or symbols, and `list_directory` or `directory_tree` for structure discovery.
|
|
7
7
|
- Prefer `read_multiple_files` with `binary: true` when reviewing several screenshots or other media files in one call (e.g. design-review `reviews/*.png`).
|
|
8
|
-
- Use `
|
|
9
|
-
- `read_file` and `read_multiple_files` return file content verbatim as plain text in text mode. Bracketed `[...]` lines carry metadata: a leading line for partial reads (line range and how to read more) and a trailing `[AGENTS.md instructions ...]` block with file-scoped project instructions; treat the latter as additional project instructions when relevant. Everything else is the file's own text —
|
|
8
|
+
- Use `edit_file` for one change and `edit_multiple_files` for several ordered changes. Prefer `mode: "replace"` with a small unique `old_text`/`new_text` block for modifying existing text; use line-range `mode: "edit"` when positions are clearer. Batch operations run sequentially and may target the same file.
|
|
9
|
+
- `read_file` and `read_multiple_files` return file content verbatim as plain text in text mode. Bracketed `[...]` lines carry metadata: a leading line for partial reads (line range and how to read more) and a trailing `[AGENTS.md instructions ...]` block with file-scoped project instructions; treat the latter as additional project instructions when relevant. Everything else is the file's own text — use the returned line numbers with `edit_file` edit-mode ranges. With `binary: true`, media is returned as multimodal content blocks when the model supports them.
|
|
10
10
|
- Prefer bounded reads for long files, and batch independent file reads or searches when supported.
|
|
11
11
|
- Prefer the narrowest operation that solves the task, read before editing when that reduces risk, and be careful with overwrites, renames, and broad recursive changes.
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
## Switching mode
|
|
2
2
|
|
|
3
|
-
You have a `switch_mode` tool to propose changing the session mode (`agent`, `ask`, `plan`, or `design`).
|
|
3
|
+
You have a `switch_mode` tool to propose changing the session mode (`agent`, `ask`, `plan`, or `design`). Real mode changes and fresh-plan requests require explicit user approval via the **permission UI** (never "always allow"); redundant same-mode no-ops continue without prompting.
|
|
4
4
|
|
|
5
|
-
**Critical:**
|
|
5
|
+
**Critical:** The injected mode-specific prompt states the session's active mode and is authoritative. Check it before calling `switch_mode`. Do not request the mode you are already in; continue directly instead. The only meaningful same-mode request is `plan` → `plan` with `fresh: true`, which proposes replacing the active plan document with a new one.
|
|
6
|
+
|
|
7
|
+
Calling `switch_mode` already triggers the permission card. When that call returns successfully, the user has already approved — **do not** ask again in chat ("please approve…", "say Done…", "confirm the switch…"). Continue immediately with the next tool calls for the active mode.
|
|
6
8
|
|
|
7
9
|
- Use **`plan`** for multi-step, ambiguous, or high-risk work: call `switch_mode` with `mode: "plan"` before exploring or implementing, then follow the plan-mode instructions that arrive with it. Leaving plan (e.g. to `agent`) is a proposal — the user approving the permission card is their go-ahead to implement. After an approved leave, briefly confirm the approach and begin implementing without re-asking; never implement while still in plan mode.
|
|
8
10
|
- Use **`design`** for HTML design artifacts (prototypes, decks, dashboards, Figma-derived layouts): call `switch_mode` with `mode: "design"` before writing under `.hooman/design/`, then follow the design-mode instructions that arrive with it (craft rules, `DESIGN.md`, visual QA). After an approved switch, activate the `hooman-design` skill and stay in design mode until the artifact is reviewed; for unrestricted implementation or shell work, switch back to **agent**.
|
|
@@ -10,7 +10,7 @@ type AgentLike = {
|
|
|
10
10
|
export declare const SWITCH_MODE_TOOL = "switch_mode";
|
|
11
11
|
export declare const INTERNAL_ALWAYS_ALLOWED: Set<string>;
|
|
12
12
|
/**
|
|
13
|
-
* In plan mode, reject
|
|
13
|
+
* In plan mode, reject file edits unless their destination paths
|
|
14
14
|
* is under the plans directory, and reject `fetch` with `save_as` entirely.
|
|
15
15
|
* Runs before any “always allow” grant.
|
|
16
16
|
*/
|