fix: use runtime tools for approval auto-approval

- load runtime tools dynamically from Copilot CLI capabilities via tools.list
- merge runtime tools with configured MCP and LSP tools in the approval catalog
- keep a fallback builtin runtime tool list when capabilities are unavailable
- move approval-tool pruning to the app service so dynamic tools are not dropped on load
- update approval UI and docs to use the corrected runtime-tool model

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-03-24 20:16:11 +01:00
co-authored by Copilot
parent 4b7409368f
commit 130b114906
16 changed files with 255 additions and 87 deletions
@@ -37,6 +37,10 @@ public sealed class SidecarProtocolHostTests
JsonElement model = Assert.Single(models);
Assert.Equal("gpt-5.4", model.GetProperty("id").GetString());
Assert.Equal("medium", model.GetProperty("defaultReasoningEffort").GetString());
JsonElement[] runtimeTools = capabilities.GetProperty("runtimeTools").EnumerateArray().ToArray();
JsonElement runtimeTool = Assert.Single(runtimeTools);
Assert.Equal("web_fetch", runtimeTool.GetProperty("id").GetString());
Assert.Equal("web_fetch", runtimeTool.GetProperty("label").GetString());
JsonElement connection = capabilities.GetProperty("connection");
Assert.Equal("ready", connection.GetProperty("status").GetString());
Assert.Equal(@"C:\tools\copilot\copilot.exe", connection.GetProperty("copilotCliPath").GetString());
@@ -403,6 +407,15 @@ public sealed class SidecarProtocolHostTests
DefaultReasoningEffort = "medium",
},
],
RuntimeTools =
[
new SidecarRuntimeToolDto
{
Id = "web_fetch",
Label = "web_fetch",
Description = "Fetch content from the web.",
},
],
Connection = new SidecarConnectionDiagnosticsDto
{
Status = "ready",