From 2e9e3199339e2fbdfbc030dacf57e253eb760419 Mon Sep 17 00:00:00 2001 From: Zhafron Kautsar Date: Mon, 12 Jan 2026 20:43:24 -0500 Subject: [PATCH 1/2] refactor(kiro): simplify tool size compression logic The code refactors the tool building process in initializeAuth to handle description truncation and size limits more efficiently. It introduces per-tool description truncation using a fixed max length, and simplifies the compression logic by removing the iterative description adjustment loop. This improves code clarity and performance. --- src/providers/claude/claude-kiro.js | 49 +++++++++++++---------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/src/providers/claude/claude-kiro.js b/src/providers/claude/claude-kiro.js index 2faf407..4e39075 100644 --- a/src/providers/claude/claude-kiro.js +++ b/src/providers/claude/claude-kiro.js @@ -747,7 +747,8 @@ async initializeAuth(forceRefresh = false) { // 所有工具都被过滤掉了,不添加 tools 上下文 console.log('[Kiro] All tools were filtered out'); } else { - const TARGET_SIZE = 20000; + const MAX_DESCRIPTION_LENGTH = 9216; + const TARGET_TOTAL_SIZE = 200000; const simplifySchema = (schema) => { if (!schema || typeof schema !== 'object') return { type: 'object' }; @@ -765,12 +766,18 @@ async initializeAuth(forceRefresh = false) { return result; }; - const buildTools = (maxDescLen, useSimplifiedSchema) => { - return filteredTools.map(tool => { + const buildToolsWithPerToolTruncation = (useSimplifiedSchema) => { + let truncatedCount = 0; + const tools = filteredTools.map(tool => { let desc = tool.description || ""; - if (maxDescLen !== null && desc.length > maxDescLen) { - desc = desc.substring(0, maxDescLen) + "..."; + const originalLength = desc.length; + + if (desc.length > MAX_DESCRIPTION_LENGTH) { + desc = desc.substring(0, MAX_DESCRIPTION_LENGTH) + "..."; + truncatedCount++; + console.log(`[Kiro] Truncated tool '${tool.name}' description: ${originalLength} -> ${desc.length} chars`); } + return { toolSpecification: { name: tool.name, @@ -783,37 +790,25 @@ async initializeAuth(forceRefresh = false) { } }; }); + + if (truncatedCount > 0) { + console.log(`[Kiro] Truncated ${truncatedCount} tool description(s) to max ${MAX_DESCRIPTION_LENGTH} chars`); + } + + return tools; }; // 先尝试原始大小 - let kiroTools = buildTools(null, false); + let kiroTools = buildToolsWithPerToolTruncation(false); let size = JSON.stringify(kiroTools).length; const originalSize = size; // 超过限制则压缩 - if (size > TARGET_SIZE) { + if (size > TARGET_TOTAL_SIZE) { + console.log(`[Kiro] Total tools size ${size} exceeds target ${TARGET_TOTAL_SIZE}, simplifying schemas...`); // 简化 schema - kiroTools = buildTools(null, true); + kiroTools = buildToolsWithPerToolTruncation(true); size = JSON.stringify(kiroTools).length; - - // 缩短描述 - if (size > TARGET_SIZE) { - const ratio = TARGET_SIZE / size; - const totalDescLen = tools.reduce((sum, t) => sum + (t.description || "").length, 0); - const avgDescLen = totalDescLen / tools.length; - let targetDescLen = Math.floor(avgDescLen * ratio * 0.8); - targetDescLen = Math.max(50, Math.min(500, targetDescLen)); - - kiroTools = buildTools(targetDescLen, true); - size = JSON.stringify(kiroTools).length; - - while (size > TARGET_SIZE && targetDescLen > 50) { - targetDescLen = Math.floor(targetDescLen * 0.7); - targetDescLen = Math.max(50, targetDescLen); - kiroTools = buildTools(targetDescLen, true); - size = JSON.stringify(kiroTools).length; - } - } console.log(`[Kiro] Tools compressed: ${originalSize} -> ${size} bytes (${filteredTools.length} tools)`); } From debe3ec33d425fd86dd0e8f0569bedb2122f80a8 Mon Sep 17 00:00:00 2001 From: Zhafron Kautsar Date: Mon, 12 Jan 2026 20:50:43 -0500 Subject: [PATCH 2/2] refactor(kiro): remove schema simplification and size-based compression Eliminated the two-stage compression system that attempted to preserve original tool schemas and only simplified when exceeding size limits. The provider now applies consistent description truncation for all tools without conditional schema processing or size calculations. Removed: - TARGET_TOTAL_SIZE constant and size checking logic - simplifySchema helper function - Conditional schema simplification based on total size This change reduces complexity and ensures uniform handling of tool descriptions regardless of total payload size. --- src/providers/claude/claude-kiro.js | 81 ++++++++--------------------- 1 file changed, 22 insertions(+), 59 deletions(-) diff --git a/src/providers/claude/claude-kiro.js b/src/providers/claude/claude-kiro.js index 4e39075..a85a144 100644 --- a/src/providers/claude/claude-kiro.js +++ b/src/providers/claude/claude-kiro.js @@ -748,68 +748,31 @@ async initializeAuth(forceRefresh = false) { console.log('[Kiro] All tools were filtered out'); } else { const MAX_DESCRIPTION_LENGTH = 9216; - const TARGET_TOTAL_SIZE = 200000; - const simplifySchema = (schema) => { - if (!schema || typeof schema !== 'object') return { type: 'object' }; - const result = { type: schema.type || 'object' }; - if (schema.properties && typeof schema.properties === 'object') { - result.properties = {}; - for (const [key, value] of Object.entries(schema.properties)) { - result.properties[key] = { type: value.type || 'string' }; - if (value.enum) result.properties[key].enum = value.enum; - } + let truncatedCount = 0; + const kiroTools = filteredTools.map(tool => { + let desc = tool.description || ""; + const originalLength = desc.length; + + if (desc.length > MAX_DESCRIPTION_LENGTH) { + desc = desc.substring(0, MAX_DESCRIPTION_LENGTH) + "..."; + truncatedCount++; + console.log(`[Kiro] Truncated tool '${tool.name}' description: ${originalLength} -> ${desc.length} chars`); } - if (schema.required && Array.isArray(schema.required) && schema.required.length > 0) { - result.required = schema.required; - } - return result; - }; - - const buildToolsWithPerToolTruncation = (useSimplifiedSchema) => { - let truncatedCount = 0; - const tools = filteredTools.map(tool => { - let desc = tool.description || ""; - const originalLength = desc.length; - - if (desc.length > MAX_DESCRIPTION_LENGTH) { - desc = desc.substring(0, MAX_DESCRIPTION_LENGTH) + "..."; - truncatedCount++; - console.log(`[Kiro] Truncated tool '${tool.name}' description: ${originalLength} -> ${desc.length} chars`); - } - - return { - toolSpecification: { - name: tool.name, - description: desc, - inputSchema: { - json: useSimplifiedSchema - ? simplifySchema(tool.input_schema) - : (tool.input_schema || {}) - } + + return { + toolSpecification: { + name: tool.name, + description: desc, + inputSchema: { + json: tool.input_schema || {} } - }; - }); - - if (truncatedCount > 0) { - console.log(`[Kiro] Truncated ${truncatedCount} tool description(s) to max ${MAX_DESCRIPTION_LENGTH} chars`); - } - - return tools; - }; - - // 先尝试原始大小 - let kiroTools = buildToolsWithPerToolTruncation(false); - let size = JSON.stringify(kiroTools).length; - const originalSize = size; - - // 超过限制则压缩 - if (size > TARGET_TOTAL_SIZE) { - console.log(`[Kiro] Total tools size ${size} exceeds target ${TARGET_TOTAL_SIZE}, simplifying schemas...`); - // 简化 schema - kiroTools = buildToolsWithPerToolTruncation(true); - size = JSON.stringify(kiroTools).length; - console.log(`[Kiro] Tools compressed: ${originalSize} -> ${size} bytes (${filteredTools.length} tools)`); + } + }; + }); + + if (truncatedCount > 0) { + console.log(`[Kiro] Truncated ${truncatedCount} tool description(s) to max ${MAX_DESCRIPTION_LENGTH} chars`); } toolsContext = { tools: kiroTools };