From 14eedd7f91ba27347ca8ad9039fb77479e6d66b8 Mon Sep 17 00:00:00 2001 From: Virgil Date: Wed, 1 Apr 2026 23:18:19 +0000 Subject: [PATCH] feat(cmd/api): dedupe sdk spec groups --- cmd/api/cmd_sdk.go | 7 +++++-- cmd/api/cmd_test.go | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/cmd/api/cmd_sdk.go b/cmd/api/cmd_sdk.go index 5d3afe6..24011cf 100644 --- a/cmd/api/cmd_sdk.go +++ b/cmd/api/cmd_sdk.go @@ -131,8 +131,11 @@ func sdkSpecBuilder(title, description, version, termsURL, contactName, contactU } func sdkSpecGroups() []goapi.RouteGroup { - bridge := goapi.NewToolBridge("/tools") - return append(goapi.RegisteredSpecGroups(), bridge) + groups := make([]goapi.RouteGroup, 0) + for group := range sdkSpecGroupsIter() { + groups = append(groups, group) + } + return groups } func sdkSpecGroupsIter() iter.Seq[goapi.RouteGroup] { diff --git a/cmd/api/cmd_test.go b/cmd/api/cmd_test.go index 145894a..6429d7f 100644 --- a/cmd/api/cmd_test.go +++ b/cmd/api/cmd_test.go @@ -589,3 +589,22 @@ func TestAPISDKCmd_Good_TempSpecUsesMetadataFlags(t *testing.T) { t.Fatalf("expected second server to be /, got %v", servers[1]) } } + +func TestAPISDKCmd_Good_SpecGroupsDeduplicateToolBridge(t *testing.T) { + snapshot := api.RegisteredSpecGroups() + api.ResetSpecGroups() + t.Cleanup(func() { + api.ResetSpecGroups() + api.RegisterSpecGroups(snapshot...) + }) + + api.RegisterSpecGroups(api.NewToolBridge("/tools")) + + groups := sdkSpecGroups() + if len(groups) != 1 { + t.Fatalf("expected the built-in tools bridge to be deduplicated, got %d groups", len(groups)) + } + if groups[0].BasePath() != "/tools" { + t.Fatalf("expected the remaining group to be /tools, got %s", groups[0].BasePath()) + } +}