fix: filter internal runtime tools

Exclude internal runtime tools from sidecar capability discovery so they do not surface in the approval tool catalog.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-03-26 19:23:48 +01:00
co-authored by Copilot
parent f15b1aedb1
commit a1a044e7ca
2 changed files with 24 additions and 2 deletions
@@ -16,6 +16,13 @@ public sealed class SidecarProtocolHost
private const string ResolveApprovalCommandType = "resolve-approval";
private const string ResolveUserInputCommandType = "resolve-user-input";
private const string AskUserToolName = "ask_user";
private static readonly HashSet<string> ExcludedRuntimeToolNames = new(StringComparer.OrdinalIgnoreCase)
{
AskUserToolName,
"report_intent",
"task_complete",
"exit_plan_mode",
};
private static readonly string[] AuthenticationErrorIndicators =
[
@@ -460,7 +467,7 @@ public sealed class SidecarProtocolHost
{
string? toolName = string.IsNullOrWhiteSpace(tool.Name) ? null : tool.Name.Trim();
return toolName is not null
&& !string.Equals(toolName, AskUserToolName, StringComparison.OrdinalIgnoreCase);
&& !ExcludedRuntimeToolNames.Contains(toolName);
}
private static bool IsReasoningEffort(string? value)
@@ -517,7 +517,7 @@ public sealed class SidecarProtocolHostTests
}
[Fact]
public void MapRuntimeTools_ExcludesAskUserAndDeduplicatesByName()
public void MapRuntimeTools_ExcludesInternalToolsAndDeduplicatesByName()
{
IReadOnlyList<SidecarRuntimeToolDto> runtimeTools = SidecarProtocolHost.MapRuntimeTools(
[
@@ -527,6 +527,21 @@ public sealed class SidecarProtocolHostTests
Description = "Ask the user a question.",
},
new Tool
{
Name = "report_intent",
Description = "Report current intent.",
},
new Tool
{
Name = "task_complete",
Description = "Signal task completion.",
},
new Tool
{
Name = "exit_plan_mode",
Description = "Exit plan mode.",
},
new Tool
{
Name = " web_fetch ",
Description = " Fetch content from the web. ",