From 1f5e68abe6ad7e9c3fed39cc38e2c888e81e491a Mon Sep 17 00:00:00 2001 From: Bryan Frimin Date: Fri, 13 Mar 2026 19:34:07 +0100 Subject: [PATCH] Fix typeName panic for interface type parameters reflect.TypeOf on a nil interface value returns nil, causing a panic when Kind() is called. Use reflect.TypeFor[T]() instead, which resolves the type directly from the type parameter. Signed-off-by: Bryan Frimin --- pkg/agent/typed.go | 3 +-- pkg/agent/typed_test.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/pkg/agent/typed.go b/pkg/agent/typed.go index ee8e81b9c..47edd52f0 100644 --- a/pkg/agent/typed.go +++ b/pkg/agent/typed.go @@ -69,8 +69,7 @@ func RunTyped[T any]( } func typeName[T any]() string { - var zero T - t := reflect.TypeOf(zero) + t := reflect.TypeFor[T]() if t.Kind() == reflect.Pointer { t = t.Elem() } diff --git a/pkg/agent/typed_test.go b/pkg/agent/typed_test.go index c81f8939e..48d513de7 100644 --- a/pkg/agent/typed_test.go +++ b/pkg/agent/typed_test.go @@ -120,6 +120,24 @@ func TestTypeName(t *testing.T) { assert.Equal(t, "status", typeName[Status]()) }, ) + + t.Run( + "any interface returns output", + func(t *testing.T) { + t.Parallel() + + assert.Equal(t, "output", typeName[any]()) + }, + ) + + t.Run( + "named interface returns lowercased name", + func(t *testing.T) { + t.Parallel() + + assert.Equal(t, "error", typeName[error]()) + }, + ) } func TestRunTyped(t *testing.T) {