@visorcraft/idlehands 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Context-aware tool result truncation.
3
+ *
4
+ * Prevents oversized tool results from blowing out the context window
5
+ * by pre-truncating before they enter history.
6
+ */
7
+ // Constants
8
+ const DEFAULT_MAX_SINGLE_RESULT_SHARE = 0.4; // 40% of context max
9
+ const MIN_KEEP_CHARS = 1000;
10
+ const CHARS_PER_TOKEN = 4;
11
+ // Use same format as lens.compactRaw for consistency
12
+ const TRUNCATION_NOTICE_PREFIX = '\n[truncated, ';
13
+ const TRUNCATION_NOTICE_SUFFIX = ' chars total]';
14
+ /**
15
+ * Build truncation notice with total char count (matches lens.compactRaw format).
16
+ */
17
+ function makeTruncationNotice(totalChars) {
18
+ return `${TRUNCATION_NOTICE_PREFIX}${totalChars}${TRUNCATION_NOTICE_SUFFIX}`;
19
+ }
20
+ /**
21
+ * Truncate text to a target length, trying to break at newlines.
22
+ */
23
+ function truncateText(text, maxChars, originalLength) {
24
+ if (text.length <= maxChars) {
25
+ return text;
26
+ }
27
+ const notice = makeTruncationNotice(originalLength);
28
+ if (maxChars <= notice.length) {
29
+ return notice;
30
+ }
31
+ const bodyBudget = maxChars - notice.length;
32
+ if (bodyBudget <= MIN_KEEP_CHARS) {
33
+ return text.slice(0, MIN_KEEP_CHARS) + notice;
34
+ }
35
+ // Try to break at a newline
36
+ let cutPoint = bodyBudget;
37
+ const newlinePos = text.lastIndexOf('\n', bodyBudget);
38
+ if (newlinePos > bodyBudget * 0.7) {
39
+ cutPoint = newlinePos;
40
+ }
41
+ return text.slice(0, cutPoint) + notice;
42
+ }
43
+ /**
44
+ * Calculate max chars for a single tool result based on context window.
45
+ */
46
+ function calculateMaxChars(contextWindow, config) {
47
+ const share = config?.maxSingleResultShare ?? DEFAULT_MAX_SINGLE_RESULT_SHARE;
48
+ const maxTokens = Math.floor(contextWindow * share);
49
+ return maxTokens * CHARS_PER_TOKEN;
50
+ }
51
+ /**
52
+ * Truncate a tool result if it exceeds the context budget.
53
+ *
54
+ * @param content - The tool result content
55
+ * @param contextWindow - Context window size in tokens
56
+ * @param config - Optional configuration overrides
57
+ * @returns Object with truncated content and metadata
58
+ */
59
+ export function truncateToolResultContent(content, contextWindow, config) {
60
+ const originalLength = content.length;
61
+ const maxChars = calculateMaxChars(contextWindow, config);
62
+ if (originalLength <= maxChars) {
63
+ return { content, truncated: false, originalLength };
64
+ }
65
+ const truncated = truncateText(content, maxChars, originalLength);
66
+ return {
67
+ content: truncated,
68
+ truncated: true,
69
+ originalLength,
70
+ };
71
+ }
72
+ /**
73
+ * Get content from a tool message.
74
+ */
75
+ function getToolResultContent(msg) {
76
+ const content = msg.content;
77
+ if (typeof content === 'string')
78
+ return content;
79
+ if (Array.isArray(content)) {
80
+ return content
81
+ .filter((p) => p.type === 'text')
82
+ .map((p) => p.text)
83
+ .join('\n');
84
+ }
85
+ return '';
86
+ }
87
+ /**
88
+ * Enforce context budget on tool result messages.
89
+ * Returns messages with oversized tool results truncated.
90
+ */
91
+ export function enforceToolResultBudget(messages, contextWindow, config) {
92
+ const maxChars = calculateMaxChars(contextWindow, config);
93
+ return messages.map(msg => {
94
+ if (msg.role !== 'tool')
95
+ return msg;
96
+ const content = getToolResultContent(msg);
97
+ if (content.length <= maxChars)
98
+ return msg;
99
+ const truncated = truncateText(content, maxChars, content.length);
100
+ return { ...msg, content: truncated };
101
+ });
102
+ }
103
+ //# sourceMappingURL=context-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget.js","sourceRoot":"","sources":["../../src/agent/context-budget.ts"],"names":[],"mappings":"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"}
@@ -223,6 +223,79 @@ function consecutiveOutcomeStreak(history, signature, outcomeHash) {
223
223
  }
224
224
  return count;
225
225
  }
226
+ /**
227
+ * Detect alternating A→B→A→B... ping-pong patterns in tool call history.
228
+ * Returns detection result with count, tool names, and whether results show no progress.
229
+ */
230
+ function detectPingPongPattern(history) {
231
+ if (history.length < 4) {
232
+ return { detected: false, count: 0, noProgressEvidence: false };
233
+ }
234
+ // Get the last two distinct signatures
235
+ const last = history[history.length - 1];
236
+ let otherSignature;
237
+ let otherToolName;
238
+ for (let i = history.length - 2; i >= 0; i--) {
239
+ const rec = history[i];
240
+ if (rec.signature !== last.signature) {
241
+ otherSignature = rec.signature;
242
+ otherToolName = rec.toolName;
243
+ break;
244
+ }
245
+ }
246
+ if (!otherSignature || !otherToolName) {
247
+ return { detected: false, count: 0, noProgressEvidence: false };
248
+ }
249
+ // Count alternating pattern from the end
250
+ let alternatingCount = 0;
251
+ let expectedSignature = last.signature;
252
+ const resultsBySignature = new Map();
253
+ for (let i = history.length - 1; i >= 0; i--) {
254
+ const rec = history[i];
255
+ // Check if this matches the expected alternating signature
256
+ if (rec.signature === expectedSignature) {
257
+ alternatingCount++;
258
+ // Track result hashes for no-progress detection
259
+ if (rec.resultHash) {
260
+ const existing = resultsBySignature.get(rec.signature) ?? new Set();
261
+ existing.add(rec.resultHash);
262
+ resultsBySignature.set(rec.signature, existing);
263
+ }
264
+ // Flip expected signature
265
+ expectedSignature = expectedSignature === last.signature ? otherSignature : last.signature;
266
+ }
267
+ else if (rec.signature === otherSignature && expectedSignature === last.signature) {
268
+ // Allow the pattern to start with either signature
269
+ alternatingCount++;
270
+ if (rec.resultHash) {
271
+ const existing = resultsBySignature.get(rec.signature) ?? new Set();
272
+ existing.add(rec.resultHash);
273
+ resultsBySignature.set(rec.signature, existing);
274
+ }
275
+ expectedSignature = last.signature;
276
+ }
277
+ else {
278
+ // Pattern broken
279
+ break;
280
+ }
281
+ }
282
+ if (alternatingCount < 4) {
283
+ return { detected: false, count: 0, noProgressEvidence: false };
284
+ }
285
+ // Check for "no progress" - each signature should have only 1 unique result hash
286
+ const sigAResults = resultsBySignature.get(last.signature);
287
+ const sigBResults = resultsBySignature.get(otherSignature);
288
+ const noProgressEvidence = (sigAResults?.size === 1 || !sigAResults) &&
289
+ (sigBResults?.size === 1 || !sigBResults) &&
290
+ (sigAResults?.size ?? 0) + (sigBResults?.size ?? 0) >= 2;
291
+ return {
292
+ detected: true,
293
+ count: alternatingCount,
294
+ toolA: last.toolName,
295
+ toolB: otherToolName,
296
+ noProgressEvidence,
297
+ };
298
+ }
226
299
  export function detectToolCallLoop(state, toolName, params, config) {
227
300
  const cfg = normalizeConfig(config);
228
301
  const policy = resolvePolicyForTool(cfg, toolName);
@@ -265,32 +338,30 @@ export function detectToolCallLoop(state, toolName, params, config) {
265
338
  count,
266
339
  };
267
340
  }
341
+ // Enhanced ping-pong detection: check for alternating patterns A→B→A→B...
342
+ // No longer requires read-only tools; checks longer history; escalates to critical
268
343
  if (policy.detectors.pingPong && state.history.length >= 4) {
269
- const tail = state.history.slice(-4);
270
- const [a, b, c, d] = tail;
271
- // Ping-pong: A→B→A→B with same outcomes each time
272
- // But only flag if at least one is a read-only tool (avoid false positives on legitimate edit patterns)
273
- const readOnlyTools = new Set(['read_file', 'read_files', 'list_dir', 'search_files', 'exec']);
274
- const isAReadOnly = readOnlyTools.has(a.toolName);
275
- const isBReadOnly = readOnlyTools.has(b.toolName);
276
- const hasReadOnly = isAReadOnly || isBReadOnly;
277
- if (hasReadOnly &&
278
- a.signature === c.signature &&
279
- b.signature === d.signature &&
280
- a.signature !== b.signature &&
281
- a.resultHash &&
282
- b.resultHash &&
283
- c.resultHash &&
284
- d.resultHash &&
285
- a.resultHash === c.resultHash &&
286
- b.resultHash === d.resultHash) {
344
+ const pingPong = detectPingPongPattern(state.history);
345
+ if (pingPong.detected && pingPong.noProgressEvidence) {
346
+ // Escalate to critical after 6+ alternations with no progress
347
+ if (pingPong.count >= 6) {
348
+ return {
349
+ level: 'critical',
350
+ detector: 'ping_pong',
351
+ message: `Critical ping-pong loop: alternating between ${pingPong.toolA} and ${pingPong.toolB} (${pingPong.count}x) with no progress`,
352
+ signature,
353
+ argsHash,
354
+ count: pingPong.count,
355
+ };
356
+ }
357
+ // Warning for 4+ alternations
287
358
  return {
288
359
  level: 'warning',
289
360
  detector: 'ping_pong',
290
- message: `Detected ping-pong tool loop between ${a.toolName} and ${b.toolName}`,
361
+ message: `Detected ping-pong tool loop between ${pingPong.toolA} and ${pingPong.toolB} (${pingPong.count}x)`,
291
362
  signature,
292
363
  argsHash,
293
- count: 4,
364
+ count: pingPong.count,
294
365
  };
295
366
  }
296
367
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-loop-detection.js","sourceRoot":"","sources":["../../src/agent/tool-loop-detection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-loop-detection.js","sourceRoot":"","sources":["../../src/agent/tool-loop-detection.ts"],"names":[],"mappings":"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"}
package/dist/agent.js CHANGED
@@ -17,6 +17,7 @@ import { loadProjectContext } from './context.js';
17
17
  import { loadGitContext, isGitDirty, stashWorkingTree } from './git.js';
18
18
  import { selectHarness } from './harnesses.js';
19
19
  import { enforceContextBudget, stripThinking, estimateTokensFromMessages, estimateToolSchemaTokens, } from './history.js';
20
+ import { truncateToolResultContent } from './agent/context-budget.js';
20
21
  import { HookManager, loadHookPlugins } from './hooks/index.js';
21
22
  import { projectIndexKeys, parseIndexMeta, isFreshIndex, indexSummaryLine } from './indexer.js';
22
23
  import { LensStore } from './lens.js';
@@ -2469,18 +2470,40 @@ export async function createSession(opts) {
2469
2470
  }
2470
2471
  continue;
2471
2472
  }
2472
- // Default behavior for mutating/other tools: break on repeated identical signature.
2473
+ // Improved handling of mutating tool loops - gradual recovery instead of immediate error
2474
+ const sigCount = sigCounts.get(sig) ?? 0;
2473
2475
  const loopThreshold = harness.quirks.loopsOnToolError ? 2 : 3;
2474
- if ((sigCounts.get(sig) ?? 0) >= loopThreshold) {
2476
+ if (sigCount >= loopThreshold) {
2475
2477
  const argsObj = sigMetaBySig.get(sig)?.args ?? {};
2476
2478
  const argsRaw = JSON.stringify(argsObj);
2477
2479
  const argsPreview = argsRaw.length > 220 ? argsRaw.slice(0, 220) + '…' : argsRaw;
2478
- throw new Error(`tool ${toolName}: identical call repeated ${loopThreshold}x across turns; breaking loop. ` +
2479
- `args=${argsPreview}\n` +
2480
- `Hint: you repeated the same tool call ${loopThreshold} times with identical arguments. ` +
2481
- `If the call succeeded, move on to the next step. ` +
2482
- `If it failed, check that all required parameters are present and correct. ` +
2483
- `For write_file/edit_file/apply_patch/edit_range, ensure required args are present (content/old_text/new_text/patch/files/start_line/end_line/replacement).`);
2480
+ // At threshold: trigger toolless recovery instead of throwing error
2481
+ // This gives the model a chance to think and try a different approach
2482
+ console.error(`[tool-loop] critical: ${toolName} repeated ${sigCount}x with same args. Triggering recovery turn.`);
2483
+ shouldForceToollessRecovery = true;
2484
+ // Poison this specific tool signature to prevent re-execution
2485
+ poisonedToolSigs.add(sig);
2486
+ // Add helpful guidance
2487
+ messages.push({
2488
+ role: 'user',
2489
+ content: `[system] Tool loop detected: ${toolName} called ${sigCount}x with identical arguments.\n` +
2490
+ `args=${argsPreview}\n\n` +
2491
+ `The same edit is being attempted repeatedly. This usually means:\n` +
2492
+ `1. The edit already succeeded - verify by reading the file\n` +
2493
+ `2. The old_text doesn't match - read the file to see actual content\n` +
2494
+ `3. A different approach is needed\n\n` +
2495
+ `Do NOT repeat the same edit. Read the file first, then decide on next steps.`,
2496
+ });
2497
+ continue;
2498
+ }
2499
+ // At sigCount === loopThreshold - 1: inject early warning
2500
+ if (sigCount === loopThreshold - 1) {
2501
+ console.error(`[tool-loop] warning: ${toolName} repeated ${sigCount}x. Next repeat will trigger recovery.`);
2502
+ messages.push({
2503
+ role: 'user',
2504
+ content: `[system] Warning: ${toolName} has been called ${sigCount} times with identical arguments. ` +
2505
+ `If this edit keeps failing, read the target file to verify its current state before trying again.`,
2506
+ });
2484
2507
  }
2485
2508
  }
2486
2509
  // Update consecutive tracking: save this turn's signatures for next turn comparison.
@@ -2523,11 +2546,26 @@ export async function createSession(opts) {
2523
2546
  catch {
2524
2547
  // Respect harness retry limit for malformed JSON (§4i)
2525
2548
  malformedCount++;
2549
+ // Detect if the model is outputting diff/patch format instead of JSON
2550
+ const looksLikeDiff = /^[\s"]*---\s+a\/|^\+\+\+\s+b\/|^@@\s+-\d+/m.test(rawArgs);
2551
+ const looksLikePatch = /^diff\s+--git|^Index:|^\*\*\*\s+/m.test(rawArgs);
2526
2552
  if (malformedCount > harness.toolCalls.retryOnMalformed) {
2527
2553
  // Break the outer loop — this model won't self-correct
2528
- throw new AgentLoopBreak(`tool ${name}: malformed JSON exceeded retry limit (${harness.toolCalls.retryOnMalformed}): ${rawArgs.slice(0, 200)}`);
2554
+ const hint = looksLikeDiff || looksLikePatch
2555
+ ? ' The model is outputting diff/patch format instead of JSON. This may be a model compatibility issue.'
2556
+ : '';
2557
+ throw new AgentLoopBreak(`tool ${name}: malformed JSON exceeded retry limit (${harness.toolCalls.retryOnMalformed}): ${rawArgs.slice(0, 200)}${hint}`);
2529
2558
  }
2530
- throw new ToolError('invalid_args', `tool ${name}: arguments not valid JSON`, false, 'Return a valid JSON object for function.arguments.', { raw: rawArgs.slice(0, 200) });
2559
+ // Give specific guidance based on the error pattern
2560
+ let hint = 'Return a valid JSON object for function.arguments.';
2561
+ if (looksLikeDiff || looksLikePatch) {
2562
+ hint =
2563
+ 'ERROR: You output a diff/patch format instead of JSON. ' +
2564
+ 'Tool arguments must be a JSON object like {"path": "file.txt", "old_text": "...", "new_text": "..."}. ' +
2565
+ 'Do NOT use unified diff format (--- a/ +++ b/ @@). ' +
2566
+ 'Use the exact JSON schema required by the tool.';
2567
+ }
2568
+ throw new ToolError('invalid_args', `tool ${name}: arguments not valid JSON`, false, hint, { raw: rawArgs.slice(0, 200) });
2531
2569
  }
2532
2570
  if (args == null || typeof args !== 'object' || Array.isArray(args)) {
2533
2571
  throw new ValidationError([
@@ -2952,7 +2990,13 @@ export async function createSession(opts) {
2952
2990
  }
2953
2991
  }
2954
2992
  }
2955
- return { id: callId, content };
2993
+ // Context-aware truncation: cap oversized tool results before returning
2994
+ // to prevent blowing out the context window on subsequent LLM calls.
2995
+ const truncated = truncateToolResultContent(content, contextWindow);
2996
+ if (truncated.truncated && cfg.verbose) {
2997
+ console.warn(`[context-budget] truncated ${name} result: ${content.length} → ${truncated.content.length} chars`);
2998
+ }
2999
+ return { id: callId, content: truncated.content };
2956
3000
  };
2957
3001
  const results = [];
2958
3002
  let invalidArgsThisTurn = false;