llm: make Tool.Run return ToolOut
This is preliminary work towards
allowing tools to add additional information.
No functional changes (at least, that's the intent).
diff --git a/claudetool/browse/browse_test.go b/claudetool/browse/browse_test.go
index ff17055..d1b1eec 100644
--- a/claudetool/browse/browse_test.go
+++ b/claudetool/browse/browse_test.go
@@ -177,10 +177,11 @@
inputJSON, _ := json.Marshal(input)
// Call the tool
- result, err := navTool.Run(ctx, json.RawMessage(inputJSON))
- if err != nil {
- t.Fatalf("Error running navigate tool: %v", err)
+ toolOut := navTool.Run(ctx, json.RawMessage(inputJSON))
+ if toolOut.Error != nil {
+ t.Fatalf("Error running navigate tool: %v", toolOut.Error)
}
+ result := toolOut.LLMContent
// Verify the response is successful
resultText := result[0].Text
@@ -288,10 +289,11 @@
input := fmt.Sprintf(`{"path": "%s"}`, testImagePath)
// Run the tool
- result, err := readImageTool.Run(ctx, json.RawMessage(input))
- if err != nil {
- t.Fatalf("Read image tool failed: %v", err)
+ toolOut := readImageTool.Run(ctx, json.RawMessage(input))
+ if toolOut.Error != nil {
+ t.Fatalf("Read image tool failed: %v", toolOut.Error)
}
+ result := toolOut.LLMContent
// In the updated code, result is already a []llm.Content
contents := result
@@ -338,20 +340,22 @@
// Navigate to a simple page to ensure the browser is ready
navInput := json.RawMessage(`{"url": "about:blank"}`)
- content, err := tools.NewNavigateTool().Run(ctx, navInput)
- if err != nil {
- t.Fatalf("Navigation error: %v", err)
+ toolOut := tools.NewNavigateTool().Run(ctx, navInput)
+ if toolOut.Error != nil {
+ t.Fatalf("Navigation error: %v", toolOut.Error)
}
+ content := toolOut.LLMContent
if !strings.Contains(content[0].Text, "done") {
t.Fatalf("Expected done in navigation response, got: %s", content[0].Text)
}
// Check default viewport dimensions via JavaScript
evalInput := json.RawMessage(`{"expression": "({width: window.innerWidth, height: window.innerHeight})"}`)
- content, err = tools.NewEvalTool().Run(ctx, evalInput)
- if err != nil {
- t.Fatalf("Evaluation error: %v", err)
+ toolOut = tools.NewEvalTool().Run(ctx, evalInput)
+ if toolOut.Error != nil {
+ t.Fatalf("Evaluation error: %v", toolOut.Error)
}
+ content = toolOut.LLMContent
// Parse the result to verify dimensions
var response struct {
@@ -398,30 +402,33 @@
// Resize to mobile dimensions
resizeTool := tools.NewResizeTool()
input := json.RawMessage(`{"width": 375, "height": 667}`)
- content, err := resizeTool.Run(ctx, input)
- if err != nil {
- t.Fatalf("Error: %v", err)
+ toolOut := resizeTool.Run(ctx, input)
+ if toolOut.Error != nil {
+ t.Fatalf("Error: %v", toolOut.Error)
}
+ content := toolOut.LLMContent
if !strings.Contains(content[0].Text, "done") {
t.Fatalf("Expected done in response, got: %s", content[0].Text)
}
// Navigate to a test page and verify using JavaScript to get window dimensions
navInput := json.RawMessage(`{"url": "https://example.com"}`)
- content, err = tools.NewNavigateTool().Run(ctx, navInput)
- if err != nil {
- t.Fatalf("Error: %v", err)
+ toolOut = tools.NewNavigateTool().Run(ctx, navInput)
+ if toolOut.Error != nil {
+ t.Fatalf("Error: %v", toolOut.Error)
}
+ content = toolOut.LLMContent
if !strings.Contains(content[0].Text, "done") {
t.Fatalf("Expected done in response, got: %s", content[0].Text)
}
// Check dimensions via JavaScript
evalInput := json.RawMessage(`{"expression": "({width: window.innerWidth, height: window.innerHeight})"}`)
- content, err = tools.NewEvalTool().Run(ctx, evalInput)
- if err != nil {
- t.Fatalf("Error: %v", err)
+ toolOut = tools.NewEvalTool().Run(ctx, evalInput)
+ if toolOut.Error != nil {
+ t.Fatalf("Error: %v", toolOut.Error)
}
+ content = toolOut.LLMContent
// The dimensions might not be exactly what we set (browser chrome, etc.)
// but they should be close