From 68f5abefd07aaec89fe58ea1e8900f75f8f0e732 Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 00:31:38 +0000 Subject: [PATCH] fix(api): trim tool bridge tags Co-Authored-By: Virgil --- bridge.go | 4 ++-- bridge_test.go | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/bridge.go b/bridge.go index 114e7a6..4850e65 100644 --- a/bridge.go +++ b/bridge.go @@ -143,8 +143,8 @@ func (b *ToolBridge) snapshotTools() []boundTool { } func describeTool(desc ToolDescriptor, defaultTag string) RouteDescription { - tags := []string{desc.Group} - if desc.Group == "" { + tags := cleanTags([]string{desc.Group}) + if len(tags) == 0 { tags = []string{defaultTag} } return RouteDescription{ diff --git a/bridge_test.go b/bridge_test.go index 706f7eb..3b26b1f 100644 --- a/bridge_test.go +++ b/bridge_test.go @@ -154,6 +154,23 @@ func TestToolBridge_Good_Describe(t *testing.T) { } } +func TestToolBridge_Good_DescribeTrimsBlankGroup(t *testing.T) { + bridge := api.NewToolBridge("/tools") + bridge.Add(api.ToolDescriptor{ + Name: "file_read", + Description: "Read a file from disk", + Group: " ", + }, func(c *gin.Context) {}) + + descs := bridge.Describe() + if len(descs) != 1 { + t.Fatalf("expected 1 description, got %d", len(descs)) + } + if len(descs[0].Tags) != 1 || descs[0].Tags[0] != "tools" { + t.Fatalf("expected blank group to fall back to bridge tag, got %v", descs[0].Tags) + } +} + func TestToolBridge_Good_ValidatesRequestBody(t *testing.T) { gin.SetMode(gin.TestMode) engine := gin.New()