@visorcraft/idlehands 2.2.24 → 2.2.26
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/agent/exec-helpers.js +77 -0
- package/dist/agent/exec-helpers.js.map +1 -1
- package/dist/agent/prompt-builder.js +7 -2
- package/dist/agent/prompt-builder.js.map +1 -1
- package/dist/agent/tool-loop-guard.js +107 -0
- package/dist/agent/tool-loop-guard.js.map +1 -1
- package/dist/agent.js +73 -12
- package/dist/agent.js.map +1 -1
- package/dist/anton/controller.js +50 -29
- package/dist/anton/controller.js.map +1 -1
- package/dist/anton/reporter.js +15 -0
- package/dist/anton/reporter.js.map +1 -1
- package/dist/bot/anton-run.js +3 -3
- package/dist/bot/anton-run.js.map +1 -1
- package/dist/cli/commands/anton.js +3 -3
- package/dist/cli/commands/anton.js.map +1 -1
- package/dist/harnesses.js +2 -2
- package/dist/harnesses.js.map +1 -1
- package/dist/tools/file-mutations.js +4 -1
- package/dist/tools/file-mutations.js.map +1 -1
- package/package.json +1 -1
|
@@ -102,4 +102,81 @@ export function readOnlyExecCacheable(content) {
|
|
|
102
102
|
return false;
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Normalize an exec command for signature comparison by stripping trailing
|
|
107
|
+
* output-filter pipes (| tail, | head, | grep, | sed, | awk, | cut, | sort, | uniq).
|
|
108
|
+
* This ensures commands like:
|
|
109
|
+
* `php artisan test --filter=X 2>&1 | tail -15`
|
|
110
|
+
* `php artisan test --filter=X 2>&1 | tail -50`
|
|
111
|
+
* produce the same normalized form for loop detection.
|
|
112
|
+
*/
|
|
113
|
+
export function normalizeExecCommandForSig(command) {
|
|
114
|
+
let cmd = String(command || '').trim();
|
|
115
|
+
if (!cmd)
|
|
116
|
+
return cmd;
|
|
117
|
+
// Strip trailing stderr redirects before pipe analysis
|
|
118
|
+
// e.g. "command 2>&1 | tail -5" → normalize the pipe part
|
|
119
|
+
// We want to keep 2>&1 that precede pipes but strip the output-filter pipes themselves.
|
|
120
|
+
// Iteratively strip trailing output-filter pipes.
|
|
121
|
+
// Match: | (tail|head|grep|sed|awk|cut|sort|uniq|wc|tr) [args...]
|
|
122
|
+
// But only when they appear at the end of the command (i.e., the last pipe segment).
|
|
123
|
+
const FILTER_PIPE_RE = /\s*\|\s*(?:tail|head|grep|egrep|fgrep|sed|awk|cut|sort|uniq|wc|tr)\b[^|]*$/i;
|
|
124
|
+
let prev = cmd;
|
|
125
|
+
for (let i = 0; i < 5; i++) {
|
|
126
|
+
const stripped = cmd.replace(FILTER_PIPE_RE, '').trim();
|
|
127
|
+
if (stripped === cmd || !stripped)
|
|
128
|
+
break;
|
|
129
|
+
cmd = stripped;
|
|
130
|
+
if (cmd === prev)
|
|
131
|
+
break;
|
|
132
|
+
prev = cmd;
|
|
133
|
+
}
|
|
134
|
+
return cmd;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Detect `sed -n 'N,Mp' file` patterns used as a substitute for read_file.
|
|
138
|
+
* Returns a redirect message if detected, or null if not a sed-as-read pattern.
|
|
139
|
+
*/
|
|
140
|
+
export function detectSedAsRead(command) {
|
|
141
|
+
const cmd = String(command || '').trim();
|
|
142
|
+
if (!cmd)
|
|
143
|
+
return null;
|
|
144
|
+
// Match: sed -n 'START,ENDp' FILE (with optional quotes around the range)
|
|
145
|
+
const match = cmd.match(/^\s*sed\s+-n\s+['"]?(\d+),(\d+)p['"]?\s+(.+)$/i);
|
|
146
|
+
if (!match)
|
|
147
|
+
return null;
|
|
148
|
+
const startLine = parseInt(match[1], 10);
|
|
149
|
+
const endLine = parseInt(match[2], 10);
|
|
150
|
+
const filePath = match[3].trim().replace(/['"]$/g, '');
|
|
151
|
+
const limit = endLine - startLine + 1;
|
|
152
|
+
return (`STOP: Do not use sed to read file sections. Use read_file instead:\n` +
|
|
153
|
+
` read_file({ path: "${filePath}", offset: ${startLine}, limit: ${limit} })\n` +
|
|
154
|
+
`This is faster, tracked by the read budget, and avoids unnecessary exec calls.`);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Extract the grep/search pattern from an exec grep command.
|
|
158
|
+
* Returns { pattern, paths } or null if not a grep command.
|
|
159
|
+
*/
|
|
160
|
+
export function extractGrepPattern(command) {
|
|
161
|
+
let cmd = String(command || '').trim();
|
|
162
|
+
if (!cmd)
|
|
163
|
+
return null;
|
|
164
|
+
// Strip leading cd && chains
|
|
165
|
+
cmd = cmd.replace(/^(\s*cd\s+[^;&|]+\s*(?:&&|;)\s*)+/i, '').trim();
|
|
166
|
+
// Match: grep [flags] "pattern" path(s)
|
|
167
|
+
// Common forms:
|
|
168
|
+
// grep -rn "pattern" path/
|
|
169
|
+
// grep -n "pattern" file
|
|
170
|
+
// grep -A5 "pattern" file
|
|
171
|
+
const grepMatch = cmd.match(/^\s*(?:grep|egrep|fgrep|rg)\s+(?:[-]\w+\s+)*(?:["']([^"']+)["']|(\S+))\s+(.+?)(?:\s*\|.*)?$/i);
|
|
172
|
+
if (!grepMatch)
|
|
173
|
+
return null;
|
|
174
|
+
const pattern = grepMatch[1] || grepMatch[2];
|
|
175
|
+
if (!pattern)
|
|
176
|
+
return null;
|
|
177
|
+
const pathStr = grepMatch[3].trim();
|
|
178
|
+
// Split paths on whitespace (simplified — doesn't handle quoted paths with spaces)
|
|
179
|
+
const paths = pathStr.split(/\s+/).filter((p) => !p.startsWith('-'));
|
|
180
|
+
return { pattern, paths };
|
|
181
|
+
}
|
|
105
182
|
//# sourceMappingURL=exec-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-helpers.js","sourceRoot":"","sources":["../../src/agent/exec-helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"exec-helpers.js","sourceRoot":"","sources":["../../src/agent/exec-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,13 @@ export class RulesSection {
|
|
|
30
30
|
- When running commands in a subdirectory, use exec's cwd parameter — NOT "cd /path && cmd". Each exec call is a fresh shell; cd does not persist.
|
|
31
31
|
- Batch work: read all files you need, then apply all edits, then verify.
|
|
32
32
|
- Be concise. Report what you changed and why.
|
|
33
|
-
- Do NOT read every file in a directory. Use search_files
|
|
34
|
-
- If search_files returns 0 matches, try a broader pattern or
|
|
33
|
+
- Do NOT read every file in a directory. Use search_files to locate relevant code first, then read only the files that match.
|
|
34
|
+
- If search_files returns 0 matches, try a broader pattern or a different search term.
|
|
35
|
+
- Prefer search_files over exec grep — it produces structured results and is tracked by the read budget. Use exec grep only as a last resort.
|
|
36
|
+
- Never use sed or awk via exec to read file sections. Use read_file with offset/limit parameters instead.
|
|
37
|
+
- When searching for a string, start at the broadest reasonable scope. Do not search a single file first and then progressively widen — search the project root or relevant subtree once.
|
|
38
|
+
- Do not re-run a test command that already passed unless you have made code changes since the last run.
|
|
39
|
+
- After reading a file, remember its contents. Do not re-read the same file unless you have edited it since the last read.
|
|
35
40
|
- Anton (the autonomous task runner) is ONLY activated when the user explicitly invokes /anton. Never self-activate as Anton or start processing task files on your own.`;
|
|
36
41
|
}
|
|
37
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/agent/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH,4EAA4E;AAE5E,MAAM,OAAO,eAAe;IAC1B,IAAI,GAAG,UAAU,CAAC;IAClB,KAAK,CAAC,IAAmB;QACvB,OAAO,gHAAgH,CAAC;IAC1H,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACvB,IAAI,GAAG,OAAO,CAAC;IACf,KAAK,CAAC,IAAmB;QACvB,OAAO
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/agent/prompt-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { createToolLoopState, detectToolCallLoop, getToolCallStats, hashToolCall, recordToolCall, recordToolCallOutcome, stableStringify, } from './tool-loop-detection.js';
|
|
4
|
+
import { normalizeExecCommandForSig } from './exec-helpers.js';
|
|
4
5
|
export class ToolLoopGuard {
|
|
5
6
|
loopState = createToolLoopState();
|
|
6
7
|
readCache = new Map();
|
|
8
|
+
/** Per-file content cache keyed by absolute path — survives non-consecutive reads. */
|
|
9
|
+
fileContentCache = new Map();
|
|
7
10
|
config;
|
|
8
11
|
recordByCallId = new Map();
|
|
9
12
|
telemetry = {
|
|
@@ -45,6 +48,16 @@ export class ToolLoopGuard {
|
|
|
45
48
|
return {};
|
|
46
49
|
}
|
|
47
50
|
computeSignature(toolName, args) {
|
|
51
|
+
// For exec calls, normalize the command by stripping trailing output-filter
|
|
52
|
+
// pipes so that `cmd 2>&1 | tail -15` and `cmd 2>&1 | tail -50` produce
|
|
53
|
+
// the same signature for loop detection purposes.
|
|
54
|
+
if (toolName === 'exec' && typeof args.command === 'string') {
|
|
55
|
+
const normalized = normalizeExecCommandForSig(args.command);
|
|
56
|
+
if (normalized !== args.command) {
|
|
57
|
+
const normalizedArgs = { ...args, command: normalized };
|
|
58
|
+
return hashToolCall(toolName, normalizedArgs).signature;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
48
61
|
return hashToolCall(toolName, args).signature;
|
|
49
62
|
}
|
|
50
63
|
prepareTurn(toolCalls) {
|
|
@@ -141,6 +154,70 @@ export class ToolLoopGuard {
|
|
|
141
154
|
resetReadFileFailureCount() {
|
|
142
155
|
this.telemetry.readFileFailures = 0;
|
|
143
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Check if a file has been read before and is unchanged (by mtime/size).
|
|
159
|
+
* Works across non-consecutive reads — unlike the signature-based readCache
|
|
160
|
+
* which only catches back-to-back identical calls.
|
|
161
|
+
* Returns cached content with a hint, or null if not cached/stale.
|
|
162
|
+
*/
|
|
163
|
+
async getFileContentCache(toolName, args, cwd) {
|
|
164
|
+
if (toolName !== 'read_file')
|
|
165
|
+
return null;
|
|
166
|
+
const filePath = typeof args.path === 'string' ? args.path.trim() : '';
|
|
167
|
+
if (!filePath)
|
|
168
|
+
return null;
|
|
169
|
+
const absPath = filePath.startsWith('/') ? filePath : path.resolve(cwd, filePath);
|
|
170
|
+
const cached = this.fileContentCache.get(absPath);
|
|
171
|
+
if (!cached)
|
|
172
|
+
return null;
|
|
173
|
+
// Check if file has changed since we cached it
|
|
174
|
+
try {
|
|
175
|
+
const stat = await fs.stat(absPath);
|
|
176
|
+
if (stat.mtimeMs !== cached.mtime || stat.size !== cached.size) {
|
|
177
|
+
// File changed — invalidate cache
|
|
178
|
+
this.fileContentCache.delete(absPath);
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
this.fileContentCache.delete(absPath);
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
this.telemetry.readCacheHits += 1;
|
|
187
|
+
return (`[CACHE HIT] File unchanged since previous read — returning cached content. Do NOT re-read this file unless you edit it first.\n\n` +
|
|
188
|
+
cached.content);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Store file content in the per-file cache after a successful read.
|
|
192
|
+
*/
|
|
193
|
+
async storeFileContentCache(toolName, args, cwd, content) {
|
|
194
|
+
if (toolName !== 'read_file')
|
|
195
|
+
return;
|
|
196
|
+
if (content.startsWith('ERROR:'))
|
|
197
|
+
return;
|
|
198
|
+
const filePath = typeof args.path === 'string' ? args.path.trim() : '';
|
|
199
|
+
if (!filePath)
|
|
200
|
+
return;
|
|
201
|
+
const absPath = filePath.startsWith('/') ? filePath : path.resolve(cwd, filePath);
|
|
202
|
+
try {
|
|
203
|
+
const stat = await fs.stat(absPath);
|
|
204
|
+
this.fileContentCache.set(absPath, {
|
|
205
|
+
content,
|
|
206
|
+
mtime: stat.mtimeMs,
|
|
207
|
+
size: stat.size,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// File doesn't exist or unreadable — don't cache
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Invalidate file content cache for a path that was just edited.
|
|
216
|
+
* Call this after any mutation tool (edit_file, write_file, etc.) completes.
|
|
217
|
+
*/
|
|
218
|
+
invalidateFileContentCache(absPath) {
|
|
219
|
+
this.fileContentCache.delete(absPath);
|
|
220
|
+
}
|
|
144
221
|
async getReadCacheReplay(toolName, args, cwd) {
|
|
145
222
|
if (!isReadCacheableTool(toolName))
|
|
146
223
|
return null;
|
|
@@ -255,4 +332,34 @@ async function getResourceVersion(absPath) {
|
|
|
255
332
|
export function stableToolArgsForTests(v) {
|
|
256
333
|
return stableStringify(v);
|
|
257
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Generate parameter mutation hints for read-only tools caught in loops.
|
|
337
|
+
* Helps the model understand how to read different content instead of repeating.
|
|
338
|
+
*/
|
|
339
|
+
export function getReadLoopHints(toolName, args) {
|
|
340
|
+
const hints = [];
|
|
341
|
+
if (toolName === "read_file" || toolName === "read_files") {
|
|
342
|
+
const hasOffset = "offset" in args && args.offset !== undefined;
|
|
343
|
+
const hasSearch = "search" in args && args.search !== undefined;
|
|
344
|
+
const limit = typeof args.limit === "number" ? args.limit : 100;
|
|
345
|
+
const currentOffset = typeof args.offset === "number" ? args.offset : 1;
|
|
346
|
+
if (!hasOffset && !hasSearch) {
|
|
347
|
+
hints.push(`Use offset=${limit + 1} to read the next section`);
|
|
348
|
+
hints.push(`Use search="keyword" to jump to specific content`);
|
|
349
|
+
}
|
|
350
|
+
else if (hasOffset && !hasSearch) {
|
|
351
|
+
hints.push(`Increase offset to ${currentOffset + limit} for the next section`);
|
|
352
|
+
hints.push(`Or use search="keyword" to find specific content`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
else if (toolName === "list_dir") {
|
|
356
|
+
hints.push(`Use recursive=true if you need subdirectory contents`);
|
|
357
|
+
hints.push(`Or filter results with grep/exec instead of re-reading`);
|
|
358
|
+
}
|
|
359
|
+
else if (toolName === "search_files") {
|
|
360
|
+
hints.push(`Adjust the pattern or path to find different results`);
|
|
361
|
+
hints.push(`Increase max_results if truncated`);
|
|
362
|
+
}
|
|
363
|
+
return hints;
|
|
364
|
+
}
|
|
258
365
|
//# sourceMappingURL=tool-loop-guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-loop-guard.js","sourceRoot":"","sources":["../../src/agent/tool-loop-guard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool-loop-guard.js","sourceRoot":"","sources":["../../src/agent/tool-loop-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -2,7 +2,7 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { DEFAULT_SUB_AGENT_RESULT_TOKEN_CAP, DEFAULT_SUB_AGENT_SYSTEM_PROMPT, MCP_TOOLS_REQUEST_TOKEN, } from './agent/constants.js';
|
|
4
4
|
import { AgentLoopBreak } from './agent/errors.js';
|
|
5
|
-
import { execRcShouldSignalFailure, looksLikeReadOnlyExecCommand, readOnlyExecCacheable, withCachedExecObservationHint, withReplayedExecHint, } from './agent/exec-helpers.js';
|
|
5
|
+
import { execRcShouldSignalFailure, looksLikeReadOnlyExecCommand, detectSedAsRead, extractGrepPattern, readOnlyExecCacheable, withCachedExecObservationHint, withReplayedExecHint, } from './agent/exec-helpers.js';
|
|
6
6
|
import { generateMinimalDiff, toolResultSummary, execCommandFromSig, formatDurationMs, looksLikePlanningNarration, capTextByApproxTokens, sanitizePathsInMessage, digestToolResult, } from './agent/formatting.js';
|
|
7
7
|
import { autoPickModel } from './agent/model-pick.js';
|
|
8
8
|
import { reviewArtifactKeys, looksLikeCodeReviewRequest, looksLikeReviewRetrievalRequest, retrievalAllowsStaleArtifact, parseReviewArtifactStalePolicy, parseReviewArtifact, reviewArtifactStaleReason, gitHead, normalizeModelsResponse, } from './agent/review-artifact.js';
|
|
@@ -15,7 +15,7 @@ import { LeakDetector } from './security/leak-detector.js';
|
|
|
15
15
|
import { PromptGuard } from './security/prompt-guard.js';
|
|
16
16
|
import { ResponseCache } from './agent/response-cache.js';
|
|
17
17
|
import { resilientCall } from './agent/resilient-provider.js';
|
|
18
|
-
import { ToolLoopGuard } from './agent/tool-loop-guard.js';
|
|
18
|
+
import { ToolLoopGuard, getReadLoopHints } from './agent/tool-loop-guard.js';
|
|
19
19
|
import { CaptureManager } from './agent/capture.js';
|
|
20
20
|
import { ClientPool } from './agent/client-pool.js';
|
|
21
21
|
import { ConversationBranch } from './agent/conversation-branch.js';
|
|
@@ -1993,6 +1993,8 @@ export async function createSession(opts) {
|
|
|
1993
1993
|
const blockedDirs = new Set();
|
|
1994
1994
|
// Same-search detection: track search= params across read_file calls
|
|
1995
1995
|
const searchTermFiles = new Map(); // search term → set of file paths
|
|
1996
|
+
// Widening grep pattern detection: track grep patterns across exec calls
|
|
1997
|
+
const grepPatternPaths = new Map(); // grep pattern → set of paths searched
|
|
1996
1998
|
// identical tool call signature counts across this ask() run
|
|
1997
1999
|
const sigCounts = new Map();
|
|
1998
2000
|
const toolNameByCallId = new Map();
|
|
@@ -2857,6 +2859,7 @@ export async function createSession(opts) {
|
|
|
2857
2859
|
lastEditedPath = absPath;
|
|
2858
2860
|
mutationVersion++;
|
|
2859
2861
|
suppressedTools.clear(); // file changed, re-enable all tools
|
|
2862
|
+
toolLoopGuard.invalidateFileContentCache(absPath);
|
|
2860
2863
|
},
|
|
2861
2864
|
});
|
|
2862
2865
|
// Tool-call argument parsing and validation logic
|
|
@@ -3081,7 +3084,7 @@ export async function createSession(opts) {
|
|
|
3081
3084
|
// Add helpful guidance
|
|
3082
3085
|
messages.push({
|
|
3083
3086
|
role: 'user',
|
|
3084
|
-
content: `[system] Tool loop detected: ${toolName} called ${sigCount}x with identical arguments.\n` +
|
|
3087
|
+
content: `[system] ⛔ STOP - Tool loop detected: ${toolName} called ${sigCount}x with identical arguments.\n` +
|
|
3085
3088
|
`args=${argsPreview}\n\n` +
|
|
3086
3089
|
`The same edit is being attempted repeatedly. This usually means:\n` +
|
|
3087
3090
|
`1. The edit already succeeded - verify by reading the file\n` +
|
|
@@ -3096,8 +3099,8 @@ export async function createSession(opts) {
|
|
|
3096
3099
|
console.error(`[tool-loop] warning: ${toolName} repeated ${sigCount}x. Next repeat will trigger recovery.`);
|
|
3097
3100
|
messages.push({
|
|
3098
3101
|
role: 'user',
|
|
3099
|
-
content: `[system] Warning: ${toolName} has been called ${sigCount} times with identical arguments. ` +
|
|
3100
|
-
`If this edit keeps failing, read the target file to verify its current state before trying again.`,
|
|
3102
|
+
content: `[system] ⚠️ Warning: ${toolName} has been called ${sigCount} times with identical arguments. ` +
|
|
3103
|
+
`If this edit keeps failing, read the target file to verify its current state before trying again. Next identical call will trigger recovery mode.`,
|
|
3101
3104
|
});
|
|
3102
3105
|
}
|
|
3103
3106
|
}
|
|
@@ -3110,7 +3113,7 @@ export async function createSession(opts) {
|
|
|
3110
3113
|
toollessRecoveryUsed = true;
|
|
3111
3114
|
messages.push({
|
|
3112
3115
|
role: 'user',
|
|
3113
|
-
content: '[system] Tool loop detected. Tools disabled.
|
|
3116
|
+
content: '[system] 🛑 Tool loop detected. Tools disabled for this turn. Analyze the situation using existing results and explain what went wrong before continuing.',
|
|
3114
3117
|
});
|
|
3115
3118
|
await emitTurnEnd({
|
|
3116
3119
|
turn: turns,
|
|
@@ -3215,6 +3218,38 @@ export async function createSession(opts) {
|
|
|
3215
3218
|
throw new Error(`exec: ${reason} — command: ${args.command}`);
|
|
3216
3219
|
}
|
|
3217
3220
|
}
|
|
3221
|
+
// ── Exec anti-pattern detection: sed-as-read and widening grep ──
|
|
3222
|
+
if (name === 'exec' && typeof args.command === 'string') {
|
|
3223
|
+
// Detect sed -n 'N,Mp' used as a substitute for read_file
|
|
3224
|
+
const sedRedirect = detectSedAsRead(args.command);
|
|
3225
|
+
if (sedRedirect) {
|
|
3226
|
+
await emitToolCall(callId, name, args);
|
|
3227
|
+
await emitToolResult({
|
|
3228
|
+
id: callId,
|
|
3229
|
+
name,
|
|
3230
|
+
success: false,
|
|
3231
|
+
summary: 'use read_file instead of sed',
|
|
3232
|
+
result: '',
|
|
3233
|
+
});
|
|
3234
|
+
return { id: callId, content: sedRedirect };
|
|
3235
|
+
}
|
|
3236
|
+
// Track widening grep patterns (same search string, expanding paths)
|
|
3237
|
+
const grepInfo = extractGrepPattern(args.command);
|
|
3238
|
+
if (grepInfo) {
|
|
3239
|
+
const key = grepInfo.pattern.toLowerCase();
|
|
3240
|
+
if (!grepPatternPaths.has(key))
|
|
3241
|
+
grepPatternPaths.set(key, new Set());
|
|
3242
|
+
for (const p of grepInfo.paths)
|
|
3243
|
+
grepPatternPaths.get(key).add(p);
|
|
3244
|
+
if (grepPatternPaths.get(key).size >= 3) {
|
|
3245
|
+
messages.push({
|
|
3246
|
+
role: 'user',
|
|
3247
|
+
content: `[system] You have searched for "${grepInfo.pattern}" across ${grepPatternPaths.get(key).size} different paths. ` +
|
|
3248
|
+
`Start with the broadest scope next time: search_files({ pattern: "${grepInfo.pattern}", path: "." })`,
|
|
3249
|
+
});
|
|
3250
|
+
}
|
|
3251
|
+
}
|
|
3252
|
+
}
|
|
3218
3253
|
if (isMutationTool(name) && typeof args.path === 'string') {
|
|
3219
3254
|
const absPath = args.path.startsWith('/')
|
|
3220
3255
|
? args.path
|
|
@@ -3253,7 +3288,7 @@ export async function createSession(opts) {
|
|
|
3253
3288
|
});
|
|
3254
3289
|
return {
|
|
3255
3290
|
id: callId,
|
|
3256
|
-
content: `STOP: Read budget exhausted (${cumulativeReadOnlyCalls}/${READ_BUDGET_HARD} calls). Do NOT read more files. Use search_files
|
|
3291
|
+
content: `STOP: Read budget exhausted (${cumulativeReadOnlyCalls}/${READ_BUDGET_HARD} calls). Do NOT read more files. Use search_files(pattern, path) to find what you need.`,
|
|
3257
3292
|
};
|
|
3258
3293
|
}
|
|
3259
3294
|
// Fix 2: Directory scan detection — counts unique files per dir (re-reads are OK)
|
|
@@ -3280,7 +3315,7 @@ export async function createSession(opts) {
|
|
|
3280
3315
|
});
|
|
3281
3316
|
return {
|
|
3282
3317
|
id: callId,
|
|
3283
|
-
content: `STOP: Directory scan detected — you've read ${uniqueCount} unique files from ${parentDir}/. Use search_files(pattern, '${parentDir}')
|
|
3318
|
+
content: `STOP: Directory scan detected — you've read ${uniqueCount} unique files from ${parentDir}/. Use search_files(pattern, '${parentDir}') instead of reading files individually.`,
|
|
3284
3319
|
};
|
|
3285
3320
|
}
|
|
3286
3321
|
}
|
|
@@ -3301,7 +3336,7 @@ export async function createSession(opts) {
|
|
|
3301
3336
|
});
|
|
3302
3337
|
return {
|
|
3303
3338
|
id: callId,
|
|
3304
|
-
content: `STOP: You've searched ${searchTermFiles.get(key).size} files for "${searchTerm}" one at a time. This is what search_files does in one call. Use: search_files(pattern="${searchTerm}", path=".")
|
|
3339
|
+
content: `STOP: You've searched ${searchTermFiles.get(key).size} files for "${searchTerm}" one at a time. This is what search_files does in one call. Use: search_files(pattern="${searchTerm}", path=".")`,
|
|
3305
3340
|
};
|
|
3306
3341
|
}
|
|
3307
3342
|
}
|
|
@@ -3374,6 +3409,16 @@ export async function createSession(opts) {
|
|
|
3374
3409
|
reusedCachedReadOnlyExec = true; // skip re-execution below
|
|
3375
3410
|
}
|
|
3376
3411
|
}
|
|
3412
|
+
// Per-file content cache: catches non-consecutive re-reads of unchanged files.
|
|
3413
|
+
// This fires even when the consecutive-repeat detector misses (interleaved calls).
|
|
3414
|
+
if (name === 'read_file' && !reusedCachedReadOnlyExec && !reusedCachedReadTool) {
|
|
3415
|
+
const fileReplay = await toolLoopGuard.getFileContentCache(name, args, ctx.cwd);
|
|
3416
|
+
if (fileReplay) {
|
|
3417
|
+
content = fileReplay;
|
|
3418
|
+
reusedCachedReadTool = true;
|
|
3419
|
+
cumulativeReadOnlyCalls++; // still counts toward budget
|
|
3420
|
+
}
|
|
3421
|
+
}
|
|
3377
3422
|
if (READ_FILE_CACHE_TOOLS.has(name) && repeatedReadFileSigs.has(sig)) {
|
|
3378
3423
|
const replay = await toolLoopGuard.getReadCacheReplay(name, args, ctx.cwd);
|
|
3379
3424
|
if (replay) {
|
|
@@ -3485,6 +3530,11 @@ export async function createSession(opts) {
|
|
|
3485
3530
|
const baseCwd = typeof args?.cwd === 'string' ? String(args.cwd) : ctx.cwd;
|
|
3486
3531
|
await toolLoopGuard.storeReadCache(name, args, baseCwd, content);
|
|
3487
3532
|
}
|
|
3533
|
+
// Store in per-file content cache for non-consecutive re-read detection
|
|
3534
|
+
if (name === 'read_file' && typeof content === 'string' && !content.startsWith('ERROR:')) {
|
|
3535
|
+
const baseCwd = typeof args?.cwd === 'string' ? String(args.cwd) : ctx.cwd;
|
|
3536
|
+
await toolLoopGuard.storeFileContentCache(name, args, baseCwd, content);
|
|
3537
|
+
}
|
|
3488
3538
|
if (name === 'exec') {
|
|
3489
3539
|
// Successful exec clears blocked-loop counters.
|
|
3490
3540
|
blockedExecAttemptsBySig.clear();
|
|
@@ -3538,11 +3588,22 @@ export async function createSession(opts) {
|
|
|
3538
3588
|
}
|
|
3539
3589
|
}
|
|
3540
3590
|
// Append a hint when a read-only tool is called consecutively with
|
|
3541
|
-
// identical arguments — the model may not realize the content
|
|
3591
|
+
// identical arguments — the model may not realize the content has not changed.
|
|
3542
3592
|
if (isReadOnlyToolDynamic(name)) {
|
|
3543
3593
|
const consec = consecutiveCounts.get(sig) ?? 0;
|
|
3544
3594
|
if (consec >= 2) {
|
|
3545
|
-
|
|
3595
|
+
const argsObj = toolLoopGuard.parseArgs(tc.function?.arguments ?? "{}");
|
|
3596
|
+
const hints = getReadLoopHints(name, argsObj);
|
|
3597
|
+
const hintBlock = hints.length > 0
|
|
3598
|
+
? `\n\nTo read different content, try:\n${hints.map(h => `- ${h}`).join("\n")}`
|
|
3599
|
+
: "";
|
|
3600
|
+
if (consec >= 4) {
|
|
3601
|
+
// Critical: disable the tool temporarily
|
|
3602
|
+
content = `Error: This exact ${name} call has been repeated ${consec} times with identical arguments and results. The tool is temporarily disabled. Use the information you already have, or try a different approach.${hintBlock}`;
|
|
3603
|
+
}
|
|
3604
|
+
else {
|
|
3605
|
+
content += `\n\n[WARNING: You have read this exact same resource ${consec}x consecutively with identical arguments. The content has NOT changed. Do NOT read it again. Use the information above and move on to the next step.]${hintBlock}`;
|
|
3606
|
+
}
|
|
3546
3607
|
}
|
|
3547
3608
|
}
|
|
3548
3609
|
// ── Early truncation pass ──────────────────────────────────
|
|
@@ -3814,7 +3875,7 @@ export async function createSession(opts) {
|
|
|
3814
3875
|
const callId = resolveCallId(tc);
|
|
3815
3876
|
results.push({
|
|
3816
3877
|
id: callId,
|
|
3817
|
-
content: `STOP: Per-turn read limit (${READ_ONLY_PER_TURN_CAP}). Use search_files
|
|
3878
|
+
content: `STOP: Per-turn read limit (${READ_ONLY_PER_TURN_CAP}). Use search_files(pattern, path) instead of reading files one by one.`,
|
|
3818
3879
|
});
|
|
3819
3880
|
}
|
|
3820
3881
|
if (cfg.verbose) {
|