From 0ce71174d5e8b742060994518246a4b46185e2aa Mon Sep 17 00:00:00 2001 From: Yesudeep Mangalapilly Date: Mon, 9 Feb 2026 13:35:14 -0800 Subject: [PATCH 1/2] fix(go/ai): move input.default into input map for DevUI compatibility The prompt metadata was placing DefaultInput as a top-level "defaultInput" key, but the DevUI expects it inside the input map as "default" (matching the dotprompt spec and the DevUI PromptFrontmatter schema). Move DefaultInput into input map and update the Render method to read from the new location with safe type assertions. Fixes #4536 --- go/ai/prompt.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/go/ai/prompt.go b/go/ai/prompt.go index 4d0151c4c8..89058ea936 100644 --- a/go/ai/prompt.go +++ b/go/ai/prompt.go @@ -105,15 +105,14 @@ func DefinePrompt(r api.Registry, name string, opts ...PromptOption) Prompt { baseName, variant, _ := strings.Cut(name, ".") promptMetadata := map[string]any{ - "name": baseName, - "description": p.Description, - "model": modelName, - "config": p.Config, - "input": map[string]any{"schema": p.InputSchema}, - "output": map[string]any{"schema": p.OutputSchema}, - "defaultInput": p.DefaultInput, - "tools": tools, - "maxTurns": p.MaxTurns, + "name": baseName, + "description": p.Description, + "model": modelName, + "config": p.Config, + "input": map[string]any{"schema": p.InputSchema, "default": p.DefaultInput}, + "output": map[string]any{"schema": p.OutputSchema}, + "tools": tools, + "maxTurns": p.MaxTurns, } if variant != "" { promptMetadata["variant"] = variant @@ -304,7 +303,9 @@ func (p *prompt) Render(ctx context.Context, input any) (*GenerateActionOptions, // TODO: This is hacky; we should have a helper that fetches the metadata. if input == nil { - input = p.Desc().Metadata["prompt"].(map[string]any)["defaultInput"] + if inputMeta, ok := p.Desc().Metadata["prompt"].(map[string]any)["input"].(map[string]any); ok { + input = inputMeta["default"] + } } return p.Run(ctx, input, nil) From 2af177fa867cb38b45dcedf7497afec153356644 Mon Sep 17 00:00:00 2001 From: Yesudeep Mangalapilly Date: Mon, 9 Feb 2026 13:42:17 -0800 Subject: [PATCH 2/2] fix(go/ai): chain type assertions to prevent panics from malformed metadata The previous code performed an unchecked type assertion on Metadata["prompt"] which could panic if the metadata structure was malformed. Use the value,ok pattern for both type assertions. Addresses review feedback on #4540. --- go/ai/prompt.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/go/ai/prompt.go b/go/ai/prompt.go index 89058ea936..b1e54028e8 100644 --- a/go/ai/prompt.go +++ b/go/ai/prompt.go @@ -303,8 +303,10 @@ func (p *prompt) Render(ctx context.Context, input any) (*GenerateActionOptions, // TODO: This is hacky; we should have a helper that fetches the metadata. if input == nil { - if inputMeta, ok := p.Desc().Metadata["prompt"].(map[string]any)["input"].(map[string]any); ok { - input = inputMeta["default"] + if promptMeta, ok := p.Desc().Metadata["prompt"].(map[string]any); ok { + if inputMeta, ok := promptMeta["input"].(map[string]any); ok { + input = inputMeta["default"] + } } }