@visorcraft/idlehands 1.3.3 → 1.3.5

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 (70) hide show
  1. package/README.md +28 -1
  2. package/dist/agent/formatting.js +1 -5
  3. package/dist/agent/formatting.js.map +1 -1
  4. package/dist/agent.js +130 -22
  5. package/dist/agent.js.map +1 -1
  6. package/dist/anton/controller.js +20 -1
  7. package/dist/anton/controller.js.map +1 -1
  8. package/dist/anton/reporter.js +2 -20
  9. package/dist/anton/reporter.js.map +1 -1
  10. package/dist/bot/auto-continue.js +24 -0
  11. package/dist/bot/auto-continue.js.map +1 -0
  12. package/dist/bot/commands.js +50 -0
  13. package/dist/bot/commands.js.map +1 -1
  14. package/dist/bot/discord-commands.js +833 -0
  15. package/dist/bot/discord-commands.js.map +1 -0
  16. package/dist/bot/discord-routing.js +1 -8
  17. package/dist/bot/discord-routing.js.map +1 -1
  18. package/dist/bot/discord.js +36 -789
  19. package/dist/bot/discord.js.map +1 -1
  20. package/dist/bot/session-manager.js +52 -0
  21. package/dist/bot/session-manager.js.map +1 -1
  22. package/dist/bot/telegram-commands.js +201 -0
  23. package/dist/bot/telegram-commands.js.map +1 -0
  24. package/dist/bot/telegram.js +32 -310
  25. package/dist/bot/telegram.js.map +1 -1
  26. package/dist/bot/ux/events.js +142 -0
  27. package/dist/bot/ux/events.js.map +1 -0
  28. package/dist/cli/commands/project.js +52 -0
  29. package/dist/cli/commands/project.js.map +1 -1
  30. package/dist/config.js +16 -0
  31. package/dist/config.js.map +1 -1
  32. package/dist/context.js +1 -3
  33. package/dist/context.js.map +1 -1
  34. package/dist/progress/ir.js +0 -3
  35. package/dist/progress/ir.js.map +1 -1
  36. package/dist/progress/tool-summary.js +1 -4
  37. package/dist/progress/tool-summary.js.map +1 -1
  38. package/dist/progress/turn-progress.js +1 -5
  39. package/dist/progress/turn-progress.js.map +1 -1
  40. package/dist/runtime/executor.js +1 -3
  41. package/dist/runtime/executor.js.map +1 -1
  42. package/dist/runtime/health.js +2 -1
  43. package/dist/runtime/health.js.map +1 -1
  44. package/dist/shared/async.js +5 -0
  45. package/dist/shared/async.js.map +1 -0
  46. package/dist/shared/config-utils.js +8 -0
  47. package/dist/shared/config-utils.js.map +1 -0
  48. package/dist/shared/format.js +19 -0
  49. package/dist/shared/format.js.map +1 -0
  50. package/dist/shared/math.js +5 -0
  51. package/dist/shared/math.js.map +1 -0
  52. package/dist/shared/strings.js +8 -0
  53. package/dist/shared/strings.js.map +1 -0
  54. package/dist/tools/patch.js +82 -0
  55. package/dist/tools/patch.js.map +1 -0
  56. package/dist/tools/path-safety.js +89 -0
  57. package/dist/tools/path-safety.js.map +1 -0
  58. package/dist/tools/undo.js +141 -0
  59. package/dist/tools/undo.js.map +1 -0
  60. package/dist/tools.js +11 -289
  61. package/dist/tools.js.map +1 -1
  62. package/dist/tui/controller.js +24 -1
  63. package/dist/tui/controller.js.map +1 -1
  64. package/dist/tui/event-bridge.js +1 -3
  65. package/dist/tui/event-bridge.js.map +1 -1
  66. package/dist/tui/render.js +1 -5
  67. package/dist/tui/render.js.map +1 -1
  68. package/dist/vault.js +1 -5
  69. package/dist/vault.js.map +1 -1
  70. package/package.json +1 -1
package/README.md CHANGED
@@ -25,10 +25,12 @@ Idle Hands is built for people who want an agent that can actually ship work, no
25
25
 
26
26
  Trifecta is the integrated core of Idle Hands:
27
27
 
28
- - **Vault** → persistent memory + notes (`/vault`, `/note`, `/notes`)
28
+ - **Vault** → persistent memory + notes (`/vault`, `/note`, `/notes`) + automatic turn action summaries
29
29
  - **Replay** → file checkpoints and rewind/diff (`/checkpoints`, `/rewind`, `/diff`, `/undo`)
30
30
  - **Lens** → structural compression/indexing for better context usage
31
31
 
32
+ Every tool-using turn is automatically summarized and persisted to the Vault, so the model can recall what it did — even after context compaction drops earlier messages. This is especially useful for local models with limited context windows.
33
+
32
34
  Runtime controls:
33
35
 
34
36
  ```bash
@@ -222,6 +224,31 @@ idlehands health --scan-ports 8000-8100
222
224
  idlehands health --scan-ports 8080,8081,9000
223
225
  ```
224
226
 
227
+ ## Tool loop auto-continue
228
+
229
+ When the agent hits a critical tool loop (repeated identical tool calls with no progress), Idle Hands now automatically retries instead of stopping and waiting for a manual "Continue" message.
230
+
231
+ - **All surfaces**: TUI, Telegram bot, Discord bot, and Anton all support auto-continue
232
+ - **User notification**: each retry sends a visible notice with error details and attempt count
233
+ - **Configurable**: up to 5 retries by default (max 10), fully disableable
234
+
235
+ ```json
236
+ {
237
+ "tool_loop_auto_continue": {
238
+ "enabled": true,
239
+ "max_retries": 5
240
+ }
241
+ }
242
+ ```
243
+
244
+ On each retry the user sees:
245
+ > ⚠️ Tool loop detected: {error details}
246
+ > 🔄 Automatically continuing the task. (retry 1 of 5)
247
+
248
+ After exhausting all retries, the error surfaces normally. Anton handles this internally without orchestrator involvement.
249
+
250
+ ---
251
+
225
252
  ## Documentation map
226
253
 
227
254
  - [Getting Started](https://visorcraft.github.io/IdleHands/guide/getting-started)
@@ -225,11 +225,7 @@ export function execCommandFromSig(sig) {
225
225
  return '';
226
226
  }
227
227
  }
228
- export function formatDurationMs(ms) {
229
- if (!Number.isFinite(ms) || ms <= 0)
230
- return '0.0s';
231
- return `${(ms / 1000).toFixed(1)}s`;
232
- }
228
+ export { formatDurationMs } from '../shared/format.js';
233
229
  export function looksLikePlanningNarration(text, finishReason) {
234
230
  const s = String(text ?? '')
235
231
  .trim()
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/agent/formatting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/agent/formatting.ts"],"names":[],"mappings":"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"}
package/dist/agent.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { normalizeApprovalMode } from './shared/config-utils.js';
1
2
  import { OpenAIClient } from './client.js';
2
3
  import { enforceContextBudget, stripThinking, estimateTokensFromMessages, estimateToolSchemaTokens } from './history.js';
3
4
  import * as tools from './tools.js';
@@ -194,16 +195,9 @@ const DEFAULT_SUB_AGENT_SYSTEM_PROMPT = `You are a focused coding sub-agent. Exe
194
195
  - Run verification commands when relevant.
195
196
  - Return a concise outcome summary.`;
196
197
  const DEFAULT_SUB_AGENT_RESULT_TOKEN_CAP = 4000;
197
- const APPROVAL_MODE_SET = new Set(['plan', 'reject', 'default', 'auto-edit', 'yolo']);
198
198
  const LSP_TOOL_NAMES = ['lsp_diagnostics', 'lsp_symbols', 'lsp_hover', 'lsp_definition', 'lsp_references'];
199
199
  const LSP_TOOL_NAME_SET = new Set(LSP_TOOL_NAMES);
200
200
  const FILE_MUTATION_TOOL_SET = new Set(['edit_file', 'edit_range', 'apply_patch', 'write_file', 'insert_file']);
201
- function normalizeApprovalMode(value) {
202
- if (typeof value !== 'string')
203
- return undefined;
204
- const mode = value.trim();
205
- return APPROVAL_MODE_SET.has(mode) ? mode : undefined;
206
- }
207
201
  /** Approval mode permissiveness ranking (lower = more restrictive). */
208
202
  const APPROVAL_MODE_RANK = { plan: 0, reject: 1, default: 2, 'auto-edit': 3, yolo: 4 };
209
203
  /**
@@ -542,6 +536,7 @@ function userDisallowsDelegation(content) {
542
536
  }
543
537
  export async function createSession(opts) {
544
538
  const cfg = opts.config;
539
+ const projectDir = cfg.dir ?? process.cwd();
545
540
  let client = opts.runtime?.client ?? new OpenAIClient(cfg.endpoint, opts.apiKey, cfg.verbose);
546
541
  if (typeof client.setVerbose === 'function') {
547
542
  client.setVerbose(cfg.verbose);
@@ -582,7 +577,7 @@ export async function createSession(opts) {
582
577
  allowedCapabilities: Array.isArray(hookCfg.allow_capabilities) ? hookCfg.allow_capabilities : undefined,
583
578
  context: () => ({
584
579
  sessionId,
585
- cwd: cfg.dir ?? process.cwd(),
580
+ cwd: projectDir,
586
581
  model,
587
582
  harness: harness.id,
588
583
  endpoint: cfg.endpoint,
@@ -598,7 +593,7 @@ export async function createSession(opts) {
598
593
  if (!opts.runtime?.hookManager && hookManager.isEnabled()) {
599
594
  const loadedPlugins = await loadHookPlugins({
600
595
  pluginPaths: Array.isArray(hookCfg.plugin_paths) ? hookCfg.plugin_paths : [],
601
- cwd: cfg.dir ?? process.cwd(),
596
+ cwd: projectDir,
602
597
  strict: hookCfg.strict === true,
603
598
  });
604
599
  for (const loaded of loadedPlugins) {
@@ -609,7 +604,7 @@ export async function createSession(opts) {
609
604
  model,
610
605
  harness: harness.id,
611
606
  endpoint: cfg.endpoint,
612
- cwd: cfg.dir ?? process.cwd(),
607
+ cwd: projectDir,
613
608
  });
614
609
  if (!cfg.i_know_what_im_doing && contextWindow > 131072) {
615
610
  console.warn('[warn] context_window is above 131072; this can increase memory usage and hurt throughput. Use --i-know-what-im-doing to proceed.');
@@ -664,7 +659,7 @@ export async function createSession(opts) {
664
659
  let lspManager = null;
665
660
  if (lspEnabled) {
666
661
  lspManager = new LspManager({
667
- rootPath: cfg.dir ?? process.cwd(),
662
+ rootPath: projectDir,
668
663
  severityThreshold: lspCfg?.diagnostic_severity_threshold ?? 1,
669
664
  quiet: Boolean(process.env.IDLEHANDS_QUIET_WARNINGS),
670
665
  });
@@ -704,7 +699,7 @@ export async function createSession(opts) {
704
699
  : undefined;
705
700
  if (vault) {
706
701
  // Scope vault entries by project directory to prevent cross-project context leaks
707
- vault.setProjectDir(cfg.dir ?? process.cwd());
702
+ vault.setProjectDir(projectDir);
708
703
  }
709
704
  if (vaultEnabled && !opts.runtime?.vault) {
710
705
  await vault?.init().catch((e) => {
@@ -733,14 +728,14 @@ export async function createSession(opts) {
733
728
  console.warn(`[warn] project context disabled for startup: ${e?.message ?? e}`);
734
729
  return '';
735
730
  });
736
- const gitCtx = await loadGitContext(cfg.dir ?? process.cwd()).catch((e) => {
731
+ const gitCtx = await loadGitContext(projectDir).catch((e) => {
737
732
  console.warn(`[warn] git context disabled for startup: ${e?.message ?? e}`);
738
733
  return '';
739
734
  });
740
735
  let freshIndexSummary = '';
741
736
  if (vault) {
742
737
  try {
743
- const keys = projectIndexKeys(cfg.dir ?? process.cwd());
738
+ const keys = projectIndexKeys(projectDir);
744
739
  const metaRow = await vault.getLatestByKey(keys.metaKey, 'system');
745
740
  if (metaRow?.value) {
746
741
  const meta = parseIndexMeta(metaRow.value);
@@ -1009,7 +1004,7 @@ export async function createSession(opts) {
1009
1004
  : (typeof defaults.system_prompt === 'string' && defaults.system_prompt.trim()
1010
1005
  ? defaults.system_prompt.trim()
1011
1006
  : DEFAULT_SUB_AGENT_SYSTEM_PROMPT);
1012
- const cwd = cfg.dir ?? process.cwd();
1007
+ const cwd = projectDir;
1013
1008
  const ctxFiles = await buildSubAgentContextBlock(cwd, args?.context_files);
1014
1009
  let delegatedInstruction = task;
1015
1010
  // Explicitly inject cwd into the delegated task so the sub-agent knows where to work.
@@ -1126,7 +1121,7 @@ export async function createSession(opts) {
1126
1121
  })
1127
1122
  : opts.confirm;
1128
1123
  return {
1129
- cwd: cfg.dir ?? process.cwd(),
1124
+ cwd: projectDir,
1130
1125
  noConfirm: cfg.no_confirm || cfg.approval_mode === 'yolo',
1131
1126
  dryRun: cfg.dry_run,
1132
1127
  mode: cfg.mode ?? 'code',
@@ -1150,7 +1145,7 @@ export async function createSession(opts) {
1150
1145
  const semantic = await lspManager.getSymbols(filePathRaw);
1151
1146
  if (!lens)
1152
1147
  return semantic;
1153
- const cwd = cfg.dir ?? process.cwd();
1148
+ const cwd = projectDir;
1154
1149
  const absPath = filePathRaw.startsWith('/') ? filePathRaw : path.resolve(cwd, filePathRaw);
1155
1150
  const body = await fs.readFile(absPath, 'utf8').catch(() => '');
1156
1151
  if (!body)
@@ -1879,6 +1874,35 @@ export async function createSession(opts) {
1879
1874
  };
1880
1875
  const finalizeAsk = async (text) => {
1881
1876
  const finalText = ensureInformativeAssistantText(text, { toolCalls, turns });
1877
+ // Auto-persist turn action summary to Vault so the model can recall what it did.
1878
+ if (vault && toolCalls > 0) {
1879
+ try {
1880
+ const actions = [];
1881
+ for (const [callId, name] of toolNameByCallId) {
1882
+ const args = toolArgsByCallId.get(callId) ?? {};
1883
+ actions.push(planModeSummary(name, args));
1884
+ }
1885
+ if (actions.length) {
1886
+ // Cap action list to prevent vault bloat on long sessions
1887
+ const MAX_SUMMARY_ACTIONS = 30;
1888
+ const cappedActions = actions.length > MAX_SUMMARY_ACTIONS
1889
+ ? [...actions.slice(0, MAX_SUMMARY_ACTIONS), `... and ${actions.length - MAX_SUMMARY_ACTIONS} more`]
1890
+ : actions;
1891
+ const userPrompt = lastAskInstructionText || '(unknown)';
1892
+ const userPromptSnippet = userPrompt.length > 120
1893
+ ? userPrompt.slice(0, 120) + '…'
1894
+ : userPrompt;
1895
+ const resultSnippet = finalText.length > 200
1896
+ ? finalText.slice(0, 200) + '…'
1897
+ : finalText;
1898
+ const summary = `User asked: ${userPromptSnippet}\nActions (${actions.length} tool calls, ${turns} turns):\n${cappedActions.map(a => `- ${a}`).join('\n')}\nResult: ${resultSnippet}`;
1899
+ await vault.upsertNote(`turn_summary_${askId}`, summary, 'system');
1900
+ }
1901
+ }
1902
+ catch {
1903
+ // best-effort — never block ask completion for summary persistence
1904
+ }
1905
+ }
1882
1906
  await hookManager.emit('ask_end', { askId, text: finalText, turns, toolCalls });
1883
1907
  return { text: finalText, turns, toolCalls };
1884
1908
  };
@@ -1886,7 +1910,6 @@ export async function createSession(opts) {
1886
1910
  lastAskInstructionText = rawInstructionText;
1887
1911
  lastCompactionReminderObjective = '';
1888
1912
  await hookManager.emit('ask_start', { askId, instruction: rawInstructionText });
1889
- const projectDir = cfg.dir ?? process.cwd();
1890
1913
  const reviewKeys = reviewArtifactKeys(projectDir);
1891
1914
  const retrievalRequested = looksLikeReviewRetrievalRequest(rawInstructionText);
1892
1915
  const shouldPersistReviewArtifact = looksLikeCodeReviewRequest(rawInstructionText) && !retrievalRequested;
@@ -2006,6 +2029,15 @@ export async function createSession(opts) {
2006
2029
  let repromptUsed = false;
2007
2030
  let readBudgetWarned = false;
2008
2031
  let noToolNudgeUsed = false;
2032
+ // ── Per-file mutation spiral detection ──
2033
+ // Track how many times the same file is mutated within a single ask().
2034
+ // When a file is edited too many times it usually means the model is in a
2035
+ // corruption spiral: edit → break → read → edit → break → ...
2036
+ const fileMutationCounts = new Map();
2037
+ const fileMutationWarned = new Set(); // per-file warning tracking
2038
+ const fileMutationBlocked = new Set(); // per-file hard block tracking
2039
+ const FILE_MUTATION_WARN_THRESHOLD = 4; // soft warning appended to result
2040
+ const FILE_MUTATION_BLOCK_THRESHOLD = 8; // hard block: refuse further edits
2009
2041
  // Track blocked command loops by exact reason+command signature.
2010
2042
  const blockedExecAttemptsBySig = new Map();
2011
2043
  // Cache successful read-only exec observations by exact signature.
@@ -2113,7 +2145,7 @@ export async function createSession(opts) {
2113
2145
  const reason = error instanceof Error ? error.message : String(error);
2114
2146
  // Strip absolute paths from failure messages to prevent cross-project leaks in vault.
2115
2147
  // Replace /home/.../project/file.ts with just file.ts (relative to cwd) or the basename.
2116
- const sanitized = sanitizePathsInMessage(`agent abort: ${contextLine ?? ''} ${reason}`, cfg.dir ?? process.cwd());
2148
+ const sanitized = sanitizePathsInMessage(`agent abort: ${contextLine ?? ''} ${reason}`, projectDir);
2117
2149
  const compact = lens ? await lens.summarizeFailureMessage(sanitized) : sanitized;
2118
2150
  try {
2119
2151
  await vault.note('agent failure', compact);
@@ -2841,7 +2873,14 @@ export async function createSession(opts) {
2841
2873
  }
2842
2874
  }
2843
2875
  if (FILE_MUTATION_TOOL_SET.has(name) && typeof args.path === 'string') {
2844
- const absPath = args.path.startsWith('/') ? args.path : `${cfg.dir ?? process.cwd()}/${args.path}`;
2876
+ const absPath = args.path.startsWith('/') ? args.path : path.resolve(projectDir, args.path);
2877
+ // ── Pre-dispatch: block edits to files in a mutation spiral ──
2878
+ if (fileMutationBlocked.has(absPath)) {
2879
+ const basename = path.basename(absPath);
2880
+ throw new Error(`${name}: BLOCKED — ${basename} has been edited ${fileMutationCounts.get(absPath) ?? '?'} times in this session and is likely corrupted. ` +
2881
+ `Restore it first with: exec { "command": "git checkout -- ${args.path}" } or exec { "command": "git restore ${args.path}" }, ` +
2882
+ 'then make ONE well-planned edit. If you cannot fix it, tell the user what went wrong.');
2883
+ }
2845
2884
  const pv = checkPathSafety(absPath);
2846
2885
  if (pv.tier === 'forbidden') {
2847
2886
  const reason = pv.reason || 'protected path';
@@ -2861,7 +2900,7 @@ export async function createSession(opts) {
2861
2900
  }
2862
2901
  // Fix 2: Directory scan detection — counts unique files per dir (re-reads are OK)
2863
2902
  if (filePath) {
2864
- const absFilePath = filePath.startsWith('/') ? filePath : path.resolve(cfg.dir ?? process.cwd(), filePath);
2903
+ const absFilePath = filePath.startsWith('/') ? filePath : path.resolve(projectDir, filePath);
2865
2904
  const parentDir = path.dirname(absFilePath);
2866
2905
  if (!readDirFiles.has(parentDir))
2867
2906
  readDirFiles.set(parentDir, new Set());
@@ -3075,7 +3114,7 @@ export async function createSession(opts) {
3075
3114
  const mutatedPath = typeof args.path === 'string' ? args.path : '';
3076
3115
  if (mutatedPath) {
3077
3116
  try {
3078
- const absPath = mutatedPath.startsWith('/') ? mutatedPath : path.join(cfg.dir ?? process.cwd(), mutatedPath);
3117
+ const absPath = mutatedPath.startsWith('/') ? mutatedPath : path.join(projectDir, mutatedPath);
3079
3118
  const fileText = await fs.readFile(absPath, 'utf8');
3080
3119
  await lspManager.ensureOpen(absPath, fileText);
3081
3120
  await lspManager.notifyDidSave(absPath, fileText);
@@ -3096,6 +3135,55 @@ export async function createSession(opts) {
3096
3135
  toolCallId: callId,
3097
3136
  result: content,
3098
3137
  });
3138
+ // ── Per-file mutation spiral detection ──
3139
+ // Track edits to the same file. If the model keeps editing the same file
3140
+ // over and over, it's likely in an edit→break→read→edit corruption spiral.
3141
+ if (FILE_MUTATION_TOOL_SET.has(name) && toolSuccess && typeof args.path === 'string') {
3142
+ const absPath = args.path.startsWith('/') ? args.path : path.resolve(projectDir, args.path);
3143
+ const basename = path.basename(absPath);
3144
+ // write_file = full rewrite. If the model is rewriting the file completely
3145
+ // after being warned, give it a fresh chance (reset counter to 1).
3146
+ if (name === 'write_file' && fileMutationCounts.has(absPath)) {
3147
+ fileMutationCounts.set(absPath, 1);
3148
+ fileMutationWarned.delete(absPath);
3149
+ fileMutationBlocked.delete(absPath);
3150
+ }
3151
+ else {
3152
+ const count = (fileMutationCounts.get(absPath) ?? 0) + 1;
3153
+ fileMutationCounts.set(absPath, count);
3154
+ if (count >= FILE_MUTATION_BLOCK_THRESHOLD) {
3155
+ // Mark for pre-dispatch blocking on subsequent edits
3156
+ fileMutationBlocked.add(absPath);
3157
+ content += `\n\n⚠️ BLOCKED: You have edited ${basename} ${count} times. Further edits to this file are now blocked. ` +
3158
+ `Restore it with: exec { "command": "git checkout -- ${args.path}" }, then make ONE complete edit.`;
3159
+ }
3160
+ else if (count >= FILE_MUTATION_WARN_THRESHOLD && !fileMutationWarned.has(absPath)) {
3161
+ fileMutationWarned.add(absPath);
3162
+ content += `\n\n⚠️ WARNING: You have edited ${basename} ${count} times. ` +
3163
+ 'If the file is broken, STOP making incremental fixes. ' +
3164
+ `Restore it with: exec { "command": "git checkout -- ${args.path}" }, ` +
3165
+ 'read the original file carefully, then make ONE complete edit. Do NOT continue patching.';
3166
+ }
3167
+ }
3168
+ }
3169
+ // ── Detect file restores via exec (git checkout/restore) ──
3170
+ // If the model restores a file via git, reset that file's mutation counter
3171
+ // so it gets a fresh chance after recovery.
3172
+ if (name === 'exec' && toolSuccess && typeof args.command === 'string') {
3173
+ const cmd = args.command;
3174
+ const restoreMatch = cmd.match(/git\s+(?:checkout|restore)\s+(?:--\s+)?(\S+)/);
3175
+ if (restoreMatch) {
3176
+ const restoredFile = restoreMatch[1];
3177
+ const absRestored = restoredFile.startsWith('/')
3178
+ ? restoredFile
3179
+ : path.resolve(projectDir, restoredFile);
3180
+ if (fileMutationCounts.has(absRestored)) {
3181
+ fileMutationCounts.set(absRestored, 0);
3182
+ fileMutationWarned.delete(absRestored);
3183
+ fileMutationBlocked.delete(absRestored);
3184
+ }
3185
+ }
3186
+ }
3099
3187
  return { id: callId, content };
3100
3188
  };
3101
3189
  const results = [];
@@ -3283,6 +3371,26 @@ export async function createSession(opts) {
3283
3371
  'Only continue with additional commands if the user explicitly requested extra demos/cleanup.',
3284
3372
  });
3285
3373
  }
3374
+ // ── Per-file mutation spiral: post-turn system nudge ──
3375
+ // If any file was just blocked this turn, inject ONE system message.
3376
+ // fileMutationBlocked entries are only added when hitting BLOCK_THRESHOLD,
3377
+ // so this naturally fires once per file (subsequent edits are pre-dispatch blocked).
3378
+ for (const blockedPath of fileMutationBlocked) {
3379
+ const count = fileMutationCounts.get(blockedPath) ?? 0;
3380
+ // Only inject if the block was triggered THIS turn (count == BLOCK_THRESHOLD exactly)
3381
+ if (count === FILE_MUTATION_BLOCK_THRESHOLD) {
3382
+ const basename = path.basename(blockedPath);
3383
+ messages.push({
3384
+ role: 'user',
3385
+ content: `[system] CRITICAL: ${basename} has been edited ${count} times and is likely corrupted. ` +
3386
+ 'Further edits to this file are now BLOCKED. ' +
3387
+ `Restore it with: exec { "command": "git checkout -- ${basename}" }, ` +
3388
+ 'then make ONE complete, well-planned edit. ' +
3389
+ 'If you cannot fix it in one edit, tell the user what went wrong and ask for guidance.',
3390
+ });
3391
+ break; // one message is enough
3392
+ }
3393
+ }
3286
3394
  // ── Escalating cumulative read budget (§ anti-scan guardrails) ──
3287
3395
  // Warn zone: append warnings to each read result when approaching the hard cap
3288
3396
  if (!readBudgetWarned && cumulativeReadOnlyCalls > READ_BUDGET_WARN && cumulativeReadOnlyCalls <= READ_BUDGET_HARD) {