8d89a762fb
Cada tool ahora vive en su propio subpackage dentro de tools/ (clock, file, http, knowledgetools, matrix, memorytools, ssh, weather) en lugar de archivos planos en el paquete raíz tools/. Esto mejora la organización, permite imports selectivos y reduce acoplamiento entre tools. El paquete tools/ raíz conserva los tipos base (Def, Param, Result, ToolFunc, Tool, Registry). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
// Package tools defines tool specifications (pure) and their execution functions (impure).
|
|
// Each tool is a pair: Def (pure data) + ToolFunc (impure execution).
|
|
// To add a new tool, create a file in this package and register it in the agent builder.
|
|
package tools
|
|
|
|
import "context"
|
|
|
|
// Def is the pure specification of a tool — only data, no side effects.
|
|
type Def struct {
|
|
Name string
|
|
Description string
|
|
Parameters []Param
|
|
}
|
|
|
|
// Param describes a single parameter accepted by a tool.
|
|
type Param struct {
|
|
Name string
|
|
Type string // "string", "number", "boolean", "integer", "object", "array"
|
|
Description string
|
|
Required bool
|
|
}
|
|
|
|
// Result holds the outcome of executing a tool.
|
|
type Result struct {
|
|
Output string
|
|
Err error
|
|
}
|
|
|
|
// ToolFunc is the impure function that actually executes the tool.
|
|
type ToolFunc func(ctx context.Context, args map[string]any) Result
|
|
|
|
// Tool bundles a pure definition with its impure implementation.
|
|
type Tool struct {
|
|
Def Def
|
|
Exec ToolFunc
|
|
}
|
|
|
|
// GetString extracts a string argument by name, returning "" if missing or wrong type.
|
|
func GetString(args map[string]any, key string) string {
|
|
v, ok := args[key]
|
|
if !ok {
|
|
return ""
|
|
}
|
|
s, ok := v.(string)
|
|
if !ok {
|
|
return ""
|
|
}
|
|
return s
|
|
}
|
|
|
|
// GetInt extracts an integer argument by name, returning 0 if missing or wrong type.
|
|
func GetInt(args map[string]any, key string) int {
|
|
v, ok := args[key]
|
|
if !ok {
|
|
return 0
|
|
}
|
|
switch n := v.(type) {
|
|
case float64:
|
|
return int(n)
|
|
case int:
|
|
return n
|
|
default:
|
|
return 0
|
|
}
|
|
}
|