@@ -3,6 +3,7 @@ package tools
@@ -10,8 +11,13 @@ import (
10 "charm.land/fantasy"
11 "charm.land/fantasy"
13−//go:embed web_search.md
14+//go:embed web_search.md.tpl
14−var webSearchToolDescription string
15+var webSearchDescriptionTmpl []byte
17+var webSearchDescriptionTpl = template.Must(
18+ template.New("webSearchDescription").
19+ Parse(string(webSearchDescriptionTmpl)),
16// NewWebSearchTool creates a web search tool for sub-agents (no permissions needed).
22// NewWebSearchTool creates a web search tool for sub-agents (no permissions needed).
17func NewWebSearchTool(client *http.Client) fantasy.AgentTool {
23func NewWebSearchTool(client *http.Client) fantasy.AgentTool {
@@ -29,7 +35,7 @@ func NewWebSearchTool(client *http.Client) fantasy.AgentTool {
30 return fantasy.NewParallelAgentTool(
36 return fantasy.NewParallelAgentTool(
31 WebSearchToolName,
37 WebSearchToolName,
32− webSearchToolDescription,
38+ renderToolDescription(webSearchDescriptionTpl),
33 func(ctx context.Context, params WebSearchParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
39 func(ctx context.Context, params WebSearchParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
34 if params.Query == "" {
40 if params.Query == "" {
35 return fantasy.NewTextErrorResponse("query is required"), nil
41 return fantasy.NewTextErrorResponse("query is required"), nil