hoomanjs 1.55.3 → 1.56.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 (85) hide show
  1. package/dist/acp/acp-agent.js +25 -2
  2. package/dist/acp/acp-agent.js.map +1 -1
  3. package/dist/acp/approvals.js +10 -3
  4. package/dist/acp/approvals.js.map +1 -1
  5. package/dist/acp/utils/tool-kind.js +1 -1
  6. package/dist/acp/utils/tool-kind.js.map +1 -1
  7. package/dist/acp/utils/tool-locations.js +12 -2
  8. package/dist/acp/utils/tool-locations.js.map +1 -1
  9. package/dist/chat/app.js +15 -0
  10. package/dist/chat/app.js.map +1 -1
  11. package/dist/chat/approvals.js +3 -0
  12. package/dist/chat/approvals.js.map +1 -1
  13. package/dist/chat/components/ApprovalPrompt.js +15 -4
  14. package/dist/chat/components/ApprovalPrompt.js.map +1 -1
  15. package/dist/chat/types.d.ts +1 -0
  16. package/dist/core/agent/gitignore-guard-plugin.js +12 -2
  17. package/dist/core/agent/gitignore-guard-plugin.js.map +1 -1
  18. package/dist/core/agent/index.js +11 -5
  19. package/dist/core/agent/index.js.map +1 -1
  20. package/dist/core/{prompts/session-mode.js → agent/session-mode-plugin.js} +2 -2
  21. package/dist/core/agent/session-mode-plugin.js.map +1 -0
  22. package/dist/core/approvals/allowlist.js +1 -1
  23. package/dist/core/approvals/allowlist.js.map +1 -1
  24. package/dist/core/approvals/intervention.d.ts +3 -0
  25. package/dist/core/approvals/intervention.js +16 -0
  26. package/dist/core/approvals/intervention.js.map +1 -1
  27. package/dist/core/filesystem/backend.d.ts +13 -0
  28. package/dist/core/filesystem/backend.js +2 -0
  29. package/dist/core/filesystem/backend.js.map +1 -0
  30. package/dist/core/filesystem/backends/index.d.ts +2 -0
  31. package/dist/core/filesystem/backends/index.js +3 -0
  32. package/dist/core/filesystem/backends/index.js.map +1 -0
  33. package/dist/core/filesystem/backends/local-fs-backend.d.ts +6 -0
  34. package/dist/core/filesystem/backends/local-fs-backend.js +17 -0
  35. package/dist/core/filesystem/backends/local-fs-backend.js.map +1 -0
  36. package/dist/core/filesystem/backends/remote-fs-backend.d.ts +12 -0
  37. package/dist/core/filesystem/backends/remote-fs-backend.js +20 -0
  38. package/dist/core/filesystem/backends/remote-fs-backend.js.map +1 -0
  39. package/dist/core/filesystem/edits/apply.d.ts +4 -0
  40. package/dist/core/filesystem/edits/apply.js +104 -0
  41. package/dist/core/filesystem/edits/apply.js.map +1 -0
  42. package/dist/core/filesystem/edits/types.d.ts +28 -0
  43. package/dist/core/filesystem/edits/types.js +2 -0
  44. package/dist/core/filesystem/edits/types.js.map +1 -0
  45. package/dist/core/filesystem/index.d.ts +12 -0
  46. package/dist/core/filesystem/index.js +12 -0
  47. package/dist/core/filesystem/index.js.map +1 -0
  48. package/dist/core/filesystem/registry.d.ts +4 -0
  49. package/dist/core/filesystem/registry.js +13 -0
  50. package/dist/core/filesystem/registry.js.map +1 -0
  51. package/dist/core/{tools/filesystem.d.ts → filesystem/tools.d.ts} +40 -8
  52. package/dist/core/{tools/filesystem.js → filesystem/tools.js} +65 -271
  53. package/dist/core/filesystem/tools.js.map +1 -0
  54. package/dist/core/modes/definitions.js +4 -4
  55. package/dist/core/modes/definitions.js.map +1 -1
  56. package/dist/core/prompts/modes/agent.md +1 -1
  57. package/dist/core/prompts/modes/ask.md +1 -1
  58. package/dist/core/prompts/modes/design.md +1 -1
  59. package/dist/core/prompts/modes/plan.md +1 -1
  60. package/dist/core/prompts/static/filesystem.md +2 -2
  61. package/dist/core/prompts/static/switch-mode.md +4 -2
  62. package/dist/core/state/tool-approvals.d.ts +1 -1
  63. package/dist/core/state/tool-approvals.js +31 -21
  64. package/dist/core/state/tool-approvals.js.map +1 -1
  65. package/dist/core/subagents/index.d.ts +1 -0
  66. package/dist/core/subagents/index.js +1 -0
  67. package/dist/core/subagents/index.js.map +1 -1
  68. package/dist/core/subagents/tool.d.ts +3 -0
  69. package/dist/core/subagents/tool.js +11 -0
  70. package/dist/core/subagents/tool.js.map +1 -1
  71. package/dist/core/subagents/usage.d.ts +12 -0
  72. package/dist/core/subagents/usage.js +23 -0
  73. package/dist/core/subagents/usage.js.map +1 -0
  74. package/dist/core/tools/index.d.ts +0 -1
  75. package/dist/core/tools/index.js +0 -1
  76. package/dist/core/tools/index.js.map +1 -1
  77. package/dist/core/tools/switch-mode.js +11 -5
  78. package/dist/core/tools/switch-mode.js.map +1 -1
  79. package/dist/index.d.ts +3 -2
  80. package/dist/index.js +3 -2
  81. package/dist/index.js.map +1 -1
  82. package/package.json +1 -1
  83. package/dist/core/prompts/session-mode.js.map +0 -1
  84. package/dist/core/tools/filesystem.js.map +0 -1
  85. /package/dist/core/{prompts/session-mode.d.ts → agent/session-mode-plugin.d.ts} +0 -0
@@ -1,12 +1,10 @@
1
- import { createHash } from "node:crypto";
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,44 @@ 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 EditSchema = z.object({
29
- oldText: z
30
- .string()
31
- .min(1)
32
- .describe("Exact text to find. Must match uniquely."),
33
- newText: z.string().describe("Replacement text."),
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("edit"),
38
+ content: z.string(),
39
+ insert_at: z.number().int().min(1),
40
+ replace_until: z.number().int().min(1).nullable().optional(),
41
+ expected_sha256: z.string().optional(),
42
+ })
43
+ .strict(),
44
+ z
45
+ .object({
46
+ path: z.string(),
47
+ mode: z.literal("rename"),
48
+ new_path: z.string(),
49
+ expected_sha256: z.string().optional(),
50
+ })
51
+ .strict(),
52
+ z
53
+ .object({
54
+ path: z.string(),
55
+ mode: z.literal("delete"),
56
+ expected_sha256: z.string().optional(),
57
+ })
58
+ .strict(),
59
+ ]);
35
60
  const textReadState = new Map();
36
61
  function toJsonValue(value) {
37
62
  return JSON.parse(JSON.stringify(value));
@@ -109,24 +134,6 @@ function globToRegExp(pattern) {
109
134
  function splitLines(content) {
110
135
  return content.split(/\r?\n/);
111
136
  }
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
137
  function makeLineExcerpt(content, offset = 1, limit = DEFAULT_READ_LIMIT) {
131
138
  const lines = splitLines(content);
132
139
  const totalLines = lines.length;
@@ -299,118 +306,6 @@ async function readBinaryFile(filePath, options) {
299
306
  metadata: options?.modality ?? null,
300
307
  });
301
308
  }
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
309
  async function walkDirectory(dirPath, options) {
415
310
  const results = [];
416
311
  const recursive = options?.recursive ?? false;
@@ -505,25 +400,9 @@ function createFilesystemSchema() {
505
400
  .optional()
506
401
  .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
402
  }),
508
- writeFile: z.object({
509
- path: z.string().describe("File path to write."),
510
- content: z.string().describe("Content to write."),
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."),
403
+ editFile: FileEditSchema,
404
+ editMultipleFiles: z.object({
405
+ edits: z.array(FileEditSchema).min(1).max(100),
527
406
  }),
528
407
  createDirectory: z.object({
529
408
  path: z.string().describe("Directory path to create."),
@@ -645,121 +524,36 @@ export function createFilesystemTools() {
645
524
  },
646
525
  }),
647
526
  tool({
648
- name: "write_file",
649
- description: "Write text content to a file. Can overwrite or append, and can create parent directories when requested.",
650
- inputSchema: schema.writeFile,
527
+ name: "edit_file",
528
+ description: "Create, overwrite, edit line ranges, rename, or delete one file.",
529
+ inputSchema: schema.editFile,
651
530
  callback: async (input, context) => {
652
- const filePath = normalizeUserPath(input.path);
653
- const backend = getTextFsBackend(context?.agent);
654
- // The host creates the file on write; only manage parents locally.
655
- if (!backend?.canWrite && (input.create_parents ?? true)) {
656
- await fs.mkdir(path.dirname(filePath), { recursive: true });
657
- }
658
- let oldContent = "";
659
- let fileExisted = false;
660
- try {
661
- oldContent = normalizeLineEndings(backend?.canRead
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
- });
531
+ const edit = input;
532
+ const normalized = {
533
+ ...edit,
534
+ path: normalizeUserPath(edit.path),
535
+ ...(edit.mode === "rename"
536
+ ? { new_path: normalizeUserPath(edit.new_path) }
537
+ : {}),
538
+ };
539
+ const result = await applyFileEdit(getFsBackend(context?.agent), normalized);
540
+ return toJsonValue(result);
697
541
  },
698
542
  }),
699
543
  tool({
700
- name: "edit_file",
701
- description: "Apply text replacements to a file. Prefer exact matches; whitespace, indentation, and line endings are tolerated when they don't make the target ambiguous. Fails if a target is missing or matches more than one place.",
702
- inputSchema: schema.editFile,
544
+ name: "edit_multiple_files",
545
+ description: "Apply ordered create, overwrite, line-range edit, rename, or delete operations to multiple files.",
546
+ inputSchema: schema.editMultipleFiles,
703
547
  callback: async (input, context) => {
704
- const filePath = normalizeUserPath(input.path);
705
- const backend = getTextFsBackend(context?.agent);
706
- // When the host owns the file (incl. unsaved edits) it is authoritative,
707
- // so we read through it and skip the local mtime staleness check.
708
- let rawOriginal;
709
- if (backend?.canRead) {
710
- rawOriginal = await backend.readTextFile(filePath);
711
- }
712
- else {
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
- });
548
+ const edits = input.edits.map((edit) => ({
549
+ ...edit,
550
+ path: normalizeUserPath(edit.path),
551
+ ...(edit.mode === "rename"
552
+ ? { new_path: normalizeUserPath(edit.new_path) }
553
+ : {}),
554
+ }));
555
+ const results = await applyFileEdits(getFsBackend(context?.agent), edits);
556
+ return toJsonValue({ edits: results, count: results.length });
763
557
  },
764
558
  }),
765
559
  tool({
@@ -851,4 +645,4 @@ export function createFilesystemTools() {
851
645
  }),
852
646
  ];
853
647
  }
854
- //# sourceMappingURL=filesystem.js.map
648
+ //# 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":"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"}
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 and can make use of any available tool to fulfil your current task.
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: produce previewable HTML design artifacts shaped by craft rules and the project's `DESIGN.md` (when present).
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 planning mode. **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.
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 `write_file`, `edit_file`, `create_directory`, `move_file`, and `get_file_info` for the corresponding focused operations.
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 — reproduce it exactly (no added escaping) in `edit_file` targets. With `binary: true`, media is returned as multimodal content blocks when the model supports them.
8
+ - Use `edit_file`, `edit_multiple_files`, `create_directory`, `move_file`, and `get_file_info` for the corresponding focused operations.
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`). It always requires explicit user approval via the **permission UI** (never auto-approved, never "always allow").
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:** Calling `switch_mode` already triggers the permission card. When that call returns successfully (e.g. `mode` matches your request), 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 new mode.
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 `write_file` / `edit_file` unless the destination path
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
  */