mirror of
https://github.com/sst/opencode.git
synced 2025-08-08 15:28:01 +00:00
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package tools
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
)
|
|
|
|
type ToolInfo struct {
|
|
Name string
|
|
Description string
|
|
Parameters map[string]any
|
|
Required []string
|
|
}
|
|
|
|
type toolResponseType string
|
|
|
|
const (
|
|
ToolResponseTypeText toolResponseType = "text"
|
|
ToolResponseTypeImage toolResponseType = "image"
|
|
)
|
|
|
|
type ToolResponse struct {
|
|
Type toolResponseType `json:"type"`
|
|
Content string `json:"content"`
|
|
Metadata string `json:"metadata,omitempty"`
|
|
IsError bool `json:"is_error"`
|
|
}
|
|
|
|
func NewTextResponse(content string) ToolResponse {
|
|
return ToolResponse{
|
|
Type: ToolResponseTypeText,
|
|
Content: content,
|
|
}
|
|
}
|
|
|
|
func WithResponseMetadata(response ToolResponse, metadata any) ToolResponse {
|
|
if metadata != nil {
|
|
metadataBytes, err := json.Marshal(metadata)
|
|
if err != nil {
|
|
return response
|
|
}
|
|
response.Metadata = string(metadataBytes)
|
|
}
|
|
return response
|
|
}
|
|
|
|
func NewTextErrorResponse(content string) ToolResponse {
|
|
return ToolResponse{
|
|
Type: ToolResponseTypeText,
|
|
Content: content,
|
|
IsError: true,
|
|
}
|
|
}
|
|
|
|
type ToolCall struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Input string `json:"input"`
|
|
}
|
|
|
|
type BaseTool interface {
|
|
Info() ToolInfo
|
|
Run(ctx context.Context, params ToolCall) (ToolResponse, error)
|
|
}
|