gui/pkg/chat/tool_handler_example_test.go

48 lines
1.1 KiB
Go
Raw Normal View History

package chat
import (
"context"
"fmt"
"strings"
guimcp "forge.lthn.ai/core/gui/pkg/mcp"
)
type exampleToolExecutor struct{}
func (exampleToolExecutor) Manifest() []guimcp.ToolDescriptor {
return []guimcp.ToolDescriptor{{
Name: "layout_suggest",
Description: "Suggest a layout",
InputSchema: map[string]any{"type": "object"},
}}
}
func (exampleToolExecutor) ManifestText() string {
return "Available MCP tools:\n- layout_suggest: Suggest a layout"
}
func (exampleToolExecutor) CallTool(_ context.Context, name string, _ map[string]any) (string, error) {
if name == "layout_suggest" {
return `{"mode":"left-right"}`, nil
}
return "", nil
}
func ExampleNewToolCallHandler() {
handler := NewToolCallHandler(exampleToolExecutor{})
result, err := handler.OnToolCall(context.Background(), ToolCall{
ID: "call-1",
Name: "layout_suggest",
Arguments: map[string]any{"window_count": 2},
})
fmt.Println(err == nil)
fmt.Println(result)
fmt.Println(strings.Contains(handler.BuildToolManifest(), "layout_suggest"))
// Output:
// true
// {"mode":"left-right"}
// true
}