You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Duplicate tool names: the second copy still cannot be selected or inspected — #1961 fixed rendering but not selection identity #2001
Found by Copilot reviewing the v2.2.0 milestone merge (#1993), verified against the code. Follow-on to #1957 / #1961.
#1961 fixed the rendering half of the duplicate-tool-name problem: rows are now keyed by source position, so filtering no longer orphans a child during reconciliation. But everything downstream of the key still identifies a tool by tool.name, so a tools/list that repeats a name is still not fully inspectable:
clients/web/src/components/groups/ToolControls/ToolControls.tsx:170 — selected={tool.name === selectedName}, so both duplicates highlight at once.
:172 — onClick is guarded by if (tool.name !== selectedName), so once either copy is selected, clicking the other is a no-op.
clients/web/src/components/screens/ToolsScreen/ToolsScreen.tsx:165-166 — tools.find((t) => t.name === selectedToolName) always resolves to the first match, so the detail panel can never show the second copy even if selection did change.
Net: with duplicate-tool-names-http.json loaded, the second get_weather / echo renders in the sidebar (that part now works) but cannot be opened. Two tools with the same name and different schemas are indistinguishable in the UI.
Expected
Each rendered row is independently selectable, and the detail panel shows that row's tool.
Suggested shape
Thread the same stable per-row identity ToolControls already computes for key through selection state — selectedToolKey rather than selectedToolName — in ToolControls, ToolsScreen's ui state, and the tools.find(...) lookups (:166 and :174).
onCallTool must keep sending the protocol name (selectedTool.name, ToolsScreen.tsx:260) — the wire identity is genuinely the duplicated name, and only the UI identity needs to be unique.
Repro
test-servers/configs/duplicate-tool-names-http.json, default (legacy) era. Click the trailing get_weather row after selecting the leading one.
Severity 3 — a real feature is broken with no workaround: the second duplicate is un-inspectable. Held at 3 rather than 4 because duplicate tool names are an uncommon server shape
Urgency 2 — wanted eventually; nothing is blocked on it
Activity
cliffhall commentedon Aug 12, 2026
Triage: Priority Medium (total 6)
buglabelBoard: #28, Status
Todo, milestone v2.3.0.fix(web): drop a pre-#2001 selectedToolName on OAuth resume
docs(spec): describe tool selection by row key, not name
fix(web): key tool selection by row identity, not name
fix: key resource list rows by position so duplicate URIs cannot collide