@visorcraft/idlehands 2.3.4 → 3.0.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.
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Tool Schema Optimizer
3
+ *
4
+ * Provides additional schema optimization beyond the basic caching:
5
+ * - Description truncation for token savings
6
+ * - Lazy tool loading based on context
7
+ * - Schema deduplication across sessions
8
+ * - Dynamic slim mode based on turn context
9
+ */
10
+ import crypto from 'node:crypto';
11
+ /**
12
+ * Hash a schema for deduplication.
13
+ */
14
+ function hashSchema(schema) {
15
+ const content = JSON.stringify(schema);
16
+ return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);
17
+ }
18
+ /**
19
+ * Estimate token count for a schema (rough approximation).
20
+ */
21
+ function estimateSchemaTokens(schema) {
22
+ const json = JSON.stringify(schema);
23
+ // Rough estimate: ~4 chars per token for JSON
24
+ return Math.ceil(json.length / 4);
25
+ }
26
+ /**
27
+ * Truncate a description string, preserving the first sentence.
28
+ */
29
+ function truncateDescription(desc, maxLen) {
30
+ if (!desc || desc.length <= maxLen)
31
+ return desc;
32
+ // Try to end at a sentence boundary
33
+ const firstSentence = desc.match(/^[^.!?]+[.!?]/)?.[0];
34
+ if (firstSentence && firstSentence.length <= maxLen) {
35
+ return firstSentence;
36
+ }
37
+ // Otherwise truncate at word boundary
38
+ const truncated = desc.slice(0, maxLen);
39
+ const lastSpace = truncated.lastIndexOf(' ');
40
+ if (lastSpace > maxLen * 0.7) {
41
+ return truncated.slice(0, lastSpace) + '...';
42
+ }
43
+ return truncated + '...';
44
+ }
45
+ /**
46
+ * Create a slim version of a tool schema for token efficiency.
47
+ */
48
+ export function slimSchema(schema, opts) {
49
+ const options = {
50
+ truncateDescriptions: opts?.truncateDescriptions ?? true,
51
+ maxDescriptionLength: opts?.maxDescriptionLength ?? 100,
52
+ removeExamples: opts?.removeExamples ?? true,
53
+ removeOptionalParams: opts?.removeOptionalParams ?? false,
54
+ contextAware: opts?.contextAware ?? false,
55
+ };
56
+ const slim = {
57
+ type: schema.type,
58
+ function: {
59
+ name: schema.function.name,
60
+ description: schema.function.description,
61
+ parameters: JSON.parse(JSON.stringify(schema.function.parameters)),
62
+ },
63
+ };
64
+ // Truncate function description
65
+ if (options.truncateDescriptions && slim.function.description) {
66
+ let desc = slim.function.description;
67
+ // Remove examples (text after "Example:" or "Examples:")
68
+ if (options.removeExamples) {
69
+ desc = desc.replace(/\s*Examples?:[\s\S]*$/i, '');
70
+ }
71
+ slim.function.description = truncateDescription(desc, options.maxDescriptionLength);
72
+ }
73
+ // Truncate parameter descriptions
74
+ if (options.truncateDescriptions && slim.function.parameters?.properties) {
75
+ for (const [key, prop] of Object.entries(slim.function.parameters.properties)) {
76
+ if (typeof prop === 'object' && prop !== null && 'description' in prop) {
77
+ prop.description = truncateDescription(prop.description, options.maxDescriptionLength / 2);
78
+ }
79
+ }
80
+ }
81
+ // Remove optional parameters
82
+ if (options.removeOptionalParams && slim.function.parameters) {
83
+ const params = slim.function.parameters;
84
+ const required = new Set(params.required || []);
85
+ const properties = params.properties || {};
86
+ for (const key of Object.keys(properties)) {
87
+ if (!required.has(key)) {
88
+ delete properties[key];
89
+ }
90
+ }
91
+ }
92
+ return slim;
93
+ }
94
+ /**
95
+ * Tools that are essential and should never be slimmed aggressively.
96
+ */
97
+ const ESSENTIAL_TOOLS = new Set([
98
+ 'read_file',
99
+ 'edit_file',
100
+ 'write_file',
101
+ 'exec',
102
+ 'list_dir',
103
+ 'search_files',
104
+ ]);
105
+ /**
106
+ * Tools that can be deferred until explicitly needed.
107
+ */
108
+ const DEFERRABLE_TOOLS = new Set([
109
+ 'spawn_task',
110
+ 'undo_file',
111
+ 'vault_store',
112
+ 'vault_search',
113
+ 'vault_delete',
114
+ 'lsp_diagnostics',
115
+ 'lsp_hover',
116
+ 'lsp_definition',
117
+ 'lsp_references',
118
+ ]);
119
+ /**
120
+ * Select tools based on context and turn history.
121
+ */
122
+ export function selectToolsForContext(allTools, context) {
123
+ const { usedTools, message, firstTurn, fastLane } = context;
124
+ // Fast lane: minimal tool set
125
+ if (fastLane) {
126
+ return allTools.filter(t => ESSENTIAL_TOOLS.has(t.function.name) &&
127
+ !DEFERRABLE_TOOLS.has(t.function.name));
128
+ }
129
+ // First turn: include everything except deferrable
130
+ if (firstTurn) {
131
+ return allTools.filter(t => !DEFERRABLE_TOOLS.has(t.function.name));
132
+ }
133
+ // Message hints: include tools that might be needed
134
+ const includedNames = new Set();
135
+ // Always include essential tools
136
+ for (const name of ESSENTIAL_TOOLS) {
137
+ includedNames.add(name);
138
+ }
139
+ // Include previously used tools (likely to be used again)
140
+ if (usedTools) {
141
+ for (const name of usedTools) {
142
+ includedNames.add(name);
143
+ }
144
+ }
145
+ // Message-based hints
146
+ if (message) {
147
+ const lower = message.toLowerCase();
148
+ if (lower.includes('undo') || lower.includes('revert')) {
149
+ includedNames.add('undo_file');
150
+ }
151
+ if (lower.includes('spawn') || lower.includes('background') || lower.includes('parallel')) {
152
+ includedNames.add('spawn_task');
153
+ }
154
+ if (lower.includes('vault') || lower.includes('secret') || lower.includes('credential')) {
155
+ includedNames.add('vault_store');
156
+ includedNames.add('vault_search');
157
+ }
158
+ if (lower.includes('diagnostic') || lower.includes('error') || lower.includes('lint')) {
159
+ includedNames.add('lsp_diagnostics');
160
+ }
161
+ if (lower.includes('definition') || lower.includes('go to')) {
162
+ includedNames.add('lsp_definition');
163
+ }
164
+ }
165
+ return allTools.filter(t => includedNames.has(t.function.name));
166
+ }
167
+ /**
168
+ * Optimize a list of schemas and return stats.
169
+ */
170
+ export function optimizeSchemas(schemas, opts) {
171
+ const originalTokens = schemas.reduce((sum, s) => sum + estimateSchemaTokens(s), 0);
172
+ const optimized = schemas.map(s => slimSchema(s, opts));
173
+ const optimizedTokens = optimized.reduce((sum, s) => sum + estimateSchemaTokens(s), 0);
174
+ const savings = originalTokens - optimizedTokens;
175
+ return {
176
+ schemas: optimized,
177
+ stats: {
178
+ originalTokens,
179
+ optimizedTokens,
180
+ savings,
181
+ savingsPercent: originalTokens > 0 ? (savings / originalTokens) * 100 : 0,
182
+ },
183
+ };
184
+ }
185
+ /**
186
+ * Schema cache with deduplication across sessions.
187
+ */
188
+ export class SchemaCache {
189
+ cache = new Map();
190
+ hashToSchema = new Map();
191
+ /**
192
+ * Get or create an optimized schema.
193
+ */
194
+ getOrCreate(original, opts) {
195
+ const key = `${original.function.name}:${JSON.stringify(opts || {})}`;
196
+ const cached = this.cache.get(key);
197
+ if (cached)
198
+ return cached.schema;
199
+ const optimized = slimSchema(original, opts);
200
+ const hash = hashSchema(optimized);
201
+ // Check if we already have this exact schema
202
+ const existing = this.hashToSchema.get(hash);
203
+ if (existing) {
204
+ this.cache.set(key, { schema: existing, hash });
205
+ return existing;
206
+ }
207
+ this.hashToSchema.set(hash, optimized);
208
+ this.cache.set(key, { schema: optimized, hash });
209
+ return optimized;
210
+ }
211
+ /**
212
+ * Clear the cache.
213
+ */
214
+ clear() {
215
+ this.cache.clear();
216
+ this.hashToSchema.clear();
217
+ }
218
+ /**
219
+ * Get cache stats.
220
+ */
221
+ stats() {
222
+ return {
223
+ entries: this.cache.size,
224
+ uniqueSchemas: this.hashToSchema.size,
225
+ };
226
+ }
227
+ }
228
+ //# sourceMappingURL=schema-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-optimizer.js","sourceRoot":"","sources":["../../src/agent/schema-optimizer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
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
+ import { normalizeExecCommandForSig, normalizeTestCommandForSig } from './exec-helpers.js';
5
5
  export class ToolLoopGuard {
6
6
  loopState = createToolLoopState();
7
7
  readCache = new Map();
@@ -68,10 +68,16 @@ export class ToolLoopGuard {
68
68
  if (toolName === 'apply_patch' && Array.isArray(args.files)) {
69
69
  return hashToolCall(toolName, { files: args.files }).signature;
70
70
  }
71
- // For exec calls, normalize the command by stripping trailing output-filter
72
- // pipes so that `cmd 2>&1 | tail -15` and `cmd 2>&1 | tail -50` produce
73
- // the same signature for loop detection purposes.
71
+ // For exec calls, normalize the command for loop detection.
72
+ // 1. Test commands: normalize to framework + filter (e.g., "php artisan test --filter=Foo")
73
+ // 2. General commands: strip trailing output-filter pipes (tail/head/grep)
74
74
  if (toolName === 'exec' && typeof args.command === 'string') {
75
+ // Try test command normalization first (more specific)
76
+ const testNormalized = normalizeTestCommandForSig(args.command);
77
+ if (testNormalized) {
78
+ return hashToolCall(toolName, { command: testNormalized }).signature;
79
+ }
80
+ // Fall back to general exec normalization
75
81
  const normalized = normalizeExecCommandForSig(args.command);
76
82
  if (normalized !== args.command) {
77
83
  const normalizedArgs = { ...args, command: normalized };
@@ -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
@@ -534,7 +534,7 @@ export async function createSession(opts) {
534
534
  console.error(`\x1b[33m Consider using a different model or updating llama.cpp.\x1b[0m`);
535
535
  }
536
536
  }
537
- catch { }
537
+ catch { /* JSON parse may fail on malformed LLM output */ }
538
538
  }
539
539
  }
540
540
  // Phase 9: sys-eager — inject full system snapshot into first message
@@ -1289,6 +1289,7 @@ export async function createSession(opts) {
1289
1289
  let runtimeRoutingModules = null;
1290
1290
  let runtimeRoutingUnavailable = false;
1291
1291
  let runtimeModelIdsCache = null;
1292
+ let runtimeModelThinkingModeCache = null;
1292
1293
  const loadRuntimeRoutingModules = async () => {
1293
1294
  if (runtimeRoutingUnavailable)
1294
1295
  return null;
@@ -1319,10 +1320,14 @@ export async function createSession(opts) {
1319
1320
  try {
1320
1321
  const runtimes = await mods.store.loadRuntimes();
1321
1322
  runtimeModelIdsCache = new Set(runtimes.models.filter((m) => m.enabled !== false).map((m) => m.id));
1323
+ runtimeModelThinkingModeCache = new Map(runtimes.models
1324
+ .filter((m) => m.enabled !== false)
1325
+ .map((m) => [m.id, m.thinking_mode]));
1322
1326
  return runtimeModelIdsCache;
1323
1327
  }
1324
1328
  catch {
1325
1329
  runtimeModelIdsCache = new Set();
1330
+ runtimeModelThinkingModeCache = new Map();
1326
1331
  return runtimeModelIdsCache;
1327
1332
  }
1328
1333
  };
@@ -1332,6 +1337,9 @@ export async function createSession(opts) {
1332
1337
  throw new Error('Runtime routing is unavailable in this build/environment');
1333
1338
  const runtimes = await mods.store.loadRuntimes();
1334
1339
  runtimeModelIdsCache = new Set(runtimes.models.filter((m) => m.enabled !== false).map((m) => m.id));
1340
+ runtimeModelThinkingModeCache = new Map(runtimes.models
1341
+ .filter((m) => m.enabled !== false)
1342
+ .map((m) => [m.id, m.thinking_mode]));
1335
1343
  const modelExists = runtimes.models.some((m) => m.enabled !== false && m.id === runtimeModelId);
1336
1344
  if (!modelExists) {
1337
1345
  throw new Error(`Runtime model not found or disabled: ${runtimeModelId}`);
@@ -1366,6 +1374,35 @@ export async function createSession(opts) {
1366
1374
  const wireCaptureHook = () => {
1367
1375
  attachCaptureHook(client);
1368
1376
  };
1377
+ const getRuntimeModelThinkingMode = async (runtimeModelId) => {
1378
+ if (!runtimeModelThinkingModeCache) {
1379
+ await loadRuntimeModelIds();
1380
+ }
1381
+ return runtimeModelThinkingModeCache?.get(runtimeModelId);
1382
+ };
1383
+ const applyThinkingDirectiveToMessages = (input, mode) => {
1384
+ if (!mode || mode === 'default')
1385
+ return input;
1386
+ const directive = mode === 'no_think' ? '/no_think' : '/think';
1387
+ let lastUserIdx = -1;
1388
+ for (let i = input.length - 1; i >= 0; i--) {
1389
+ if (input[i]?.role === 'user') {
1390
+ lastUserIdx = i;
1391
+ break;
1392
+ }
1393
+ }
1394
+ if (lastUserIdx < 0)
1395
+ return input;
1396
+ const target = input[lastUserIdx];
1397
+ if (!target || typeof target.content !== 'string')
1398
+ return input;
1399
+ const text = String(target.content);
1400
+ if (text.startsWith('/no_think') || text.startsWith('/think'))
1401
+ return input;
1402
+ const cloned = input.slice();
1403
+ cloned[lastUserIdx] = { ...target, content: `${directive}\n${text}` };
1404
+ return cloned;
1405
+ };
1369
1406
  wireCaptureHook();
1370
1407
  const replayEnabled = cfg.trifecta?.enabled !== false && cfg.trifecta?.replay?.enabled !== false;
1371
1408
  const replay = replayEnabled ? (opts.runtime?.replay ?? new ReplayStore()) : undefined;
@@ -2476,8 +2513,12 @@ export async function createSession(opts) {
2476
2513
  }
2477
2514
  }
2478
2515
  if (!resp) {
2516
+ const runtimeThinkingMode = primaryUsesRuntimeModel && primaryRoute?.model
2517
+ ? await getRuntimeModelThinkingMode(primaryRoute.model)
2518
+ : undefined;
2519
+ const effectiveMessages = applyThinkingDirectiveToMessages(messages, runtimeThinkingMode);
2479
2520
  const chatOptsBase = {
2480
- messages,
2521
+ messages: effectiveMessages,
2481
2522
  tools: toolsForTurn,
2482
2523
  tool_choice: toolChoiceForTurn,
2483
2524
  temperature,
@@ -2840,7 +2881,7 @@ export async function createSession(opts) {
2840
2881
  try {
2841
2882
  argCount = Object.keys(parseJsonArgs(argStr)).length;
2842
2883
  }
2843
- catch { }
2884
+ catch { /* JSON parse may fail on malformed LLM output */ }
2844
2885
  }
2845
2886
  if (!byName.has(n))
2846
2887
  byName.set(n, []);
@@ -3862,7 +3903,7 @@ export async function createSession(opts) {
3862
3903
  }
3863
3904
  }
3864
3905
  }
3865
- catch { }
3906
+ catch { /* JSON parse may fail on malformed LLM output */ }
3866
3907
  }
3867
3908
  else if (name === 'search_files') {
3868
3909
  const lines = content.split('\n').filter(Boolean);
@@ -3883,7 +3924,7 @@ export async function createSession(opts) {
3883
3924
  }
3884
3925
  }
3885
3926
  }
3886
- catch { }
3927
+ catch { /* JSON parse may fail on malformed LLM output */ }
3887
3928
  }
3888
3929
  resultEvent.success = toolSuccess;
3889
3930
  if (!toolSuccess && name === 'exec' && typeof resultEvent.execRc === 'number') {
@@ -4035,7 +4076,7 @@ export async function createSession(opts) {
4035
4076
  try {
4036
4077
  parsedArgs = parseJsonArgs(tc.function.arguments ?? '{}');
4037
4078
  }
4038
- catch { }
4079
+ catch { /* JSON parse may fail on malformed LLM output */ }
4039
4080
  const cmd = tc.function.name === 'exec'
4040
4081
  ? String(parsedArgs?.command ?? '')
4041
4082
  : String(parsedArgs?.task ?? '');