X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/6e3e9c5c10f3d35bae7e9846334974a09418aef7..cb514b662bcf9d90b2cf02789c989f777d774d3f:/tools.go diff --git a/tools.go b/tools.go index 5329446..dd28ae0 100644 --- a/tools.go +++ b/tools.go @@ -50,10 +50,14 @@ type ToolChat interface { // message. The call is durable before its tool runs, so the log never misses an // action outside the agent. Commands and files run as the user in the working // directory, with no sandbox. Zoom with a name reads the log of a subagent. +// The toolbox of the agent has the runs of its subagents for spawn and tell. +// The toolbox of a subagent has none, so spawn and tell are unknown tools +// there. type Toolbox struct { log ToolLog chat ToolChat subagents *Subagents + runs *SubagentRuns workdir string } @@ -130,6 +134,24 @@ func (b *Toolbox) run(ctx context.Context, name, arguments string) string { if err == nil { output, err = b.edit(args.Path, args.Old, args.New) } + case "spawn": + var args ToolSpawnArguments + err = toolDecodeArguments(arguments, &args) + switch { + case b.runs == nil: + err = fmt.Errorf("unknown tool %q", name) + case err == nil: + output, err = b.runs.Spawn(ctx, args.Tasks, args.Effort) + } + case "tell": + var args ToolTellArguments + err = toolDecodeArguments(arguments, &args) + switch { + case b.runs == nil: + err = fmt.Errorf("unknown tool %q", name) + case err == nil: + output, err = b.runs.Tell(ctx, args.Name, args.Message) + } default: err = fmt.Errorf("unknown tool %q", name) } @@ -358,6 +380,19 @@ type ToolEditArguments struct { New string `json:"new"` } +// ToolSpawnArguments are the arguments of spawn. A nil Effort is the effort of +// the agent. +type ToolSpawnArguments struct { + Tasks []string `json:"tasks"` + Effort *string `json:"effort"` +} + +// ToolTellArguments are the arguments of tell. +type ToolTellArguments struct { + Name string `json:"name"` + Message string `json:"message"` +} + // ToolHeadTail keeps the first and the last toolClipBytes bytes written to it, // and counts the bytes between them that it drops. type ToolHeadTail struct {