From eff60ba7f6257d75d8bab09872f0f3f87f72ef24 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 31 Oct 2026 18:30:11 +0000 Subject: [PATCH 1/2] test(provider-acp): reproduce #28230 Kiro @-scoped MCP titles losing T3 identity These tests reproduce #28230: Kiro titles T3 MCP calls @t3-code/ with rawInput { tool_id, arguments } and no _meta, and extractMcpToolCallIdentity returns undefined for them. Co-Authored-By: Claude Opus 5.5 --- .../provider-acp/src/server/runtimeModel.test.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/provider-acp/src/server/runtimeModel.test.ts b/packages/provider-acp/src/server/runtimeModel.test.ts index b278c9e71bed0..042df5584cc96 100644 --- a/packages/provider-acp/src/server/runtimeModel.test.ts +++ b/packages/provider-acp/src/server/runtimeModel.test.ts @@ -1369,6 +1369,20 @@ describe("extractMcpToolCallIdentity", () => { } }); + it("recovers T3 identity from Kiro's @-scoped titles", () => { + for (const tool of ["html_render", "t3_thread_read", "delegate_task"]) { + const toolCall = toolCallFromUpdate({ + sessionUpdate: "tool_call", + toolCallId: "kiro-1", + kind: "other", + title: `@t3-code/${tool}`, + status: "pending", + rawInput: { tool_id: `t3-code::${tool}`, arguments: { threadId: "thread-1" } }, + }); + expect(extractMcpToolCallIdentity(toolCall), tool).toEqual({ server: "t3-code", tool }); + } + }); + it("does not claim an agent's own tool that shares a T3 tool name", () => { const toolCall = toolCallFromUpdate({ sessionUpdate: "tool_call", From e9c4e8f12cec16b6ef74d29dc2d33efbfb8b50c9 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 31 Oct 2026 18:33:28 +0000 Subject: [PATCH 2/2] fix(provider-acp): recognise Kiro's @-scoped T3 MCP tool titles Kiro titles T3 MCP calls "@t3-code/" with no _meta, so the title matcher missed them: html_render pages never showed and every T3 call was stored as a generic dynamic tool. Allow an optional leading "@" on the T3 title pattern; the known T3 tool inventory still gates the match. Fixes pingdotgg/t3code#28230 Co-Authored-By: Claude Opus 5.5 --- packages/provider-acp/src/server/runtimeModel.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/provider-acp/src/server/runtimeModel.ts b/packages/provider-acp/src/server/runtimeModel.ts index 9a34f7fa40573..8a683bf93616b 100644 --- a/packages/provider-acp/src/server/runtimeModel.ts +++ b/packages/provider-acp/src/server/runtimeModel.ts @@ -1063,9 +1063,9 @@ function acpMcpFallbackInput(value: string | undefined): Record return undefined; } -// Known T3 inventory gates matches, so server-name separators can stay loose. +// Known T3 inventory gates matches, so server-name separators can stay loose. Kiro titles "@t3-code/". const T3_MCP_TITLE_CALL = - /^(?:mcp[-_]{1,2})?t3[-_ ]?code[-_.:/ ]{1,3}(?[A-Za-z0-9][A-Za-z0-9_.-]*)(?::.*)?$/i; + /^(?:@|mcp[-_]{1,2})?t3[-_ ]?code[-_.:/ ]{1,3}(?[A-Za-z0-9][A-Za-z0-9_.-]*)(?::.*)?$/i; const T3_MCP_TITLE_SUFFIX_CALL = /^(?[A-Za-z0-9][A-Za-z0-9_.-]*?)(?: \(t3[-_ ]?code MCP Server\)(?::|$)|[-_.]t3[-_ ]?code$)/i;