X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/e1e48ba388c28105fff3b70c8ca02304f5d57f53..03ef0cf2e8b23ae3954a89883bde4bb557b9ccee:/tools.go diff --git a/tools.go b/tools.go index dd28ae0..7640dee 100644 --- a/tools.go +++ b/tools.go @@ -50,14 +50,15 @@ 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. +// The toolbox of the agent has the runs of its subagents for spawn and tell, +// and the WhatsApp link for the WhatsApp tools. The toolbox of a subagent has +// neither, so these are unknown tools there. type Toolbox struct { log ToolLog chat ToolChat subagents *Subagents runs *SubagentRuns + whatsapp *WhatsApp workdir string } @@ -152,6 +153,24 @@ func (b *Toolbox) run(ctx context.Context, name, arguments string) string { case err == nil: output, err = b.runs.Tell(ctx, args.Name, args.Message) } + case "whatsapp_find": + var args ToolWhatsAppFindArguments + err = toolDecodeArguments(arguments, &args) + switch { + case b.whatsapp == nil: + err = fmt.Errorf("unknown tool %q", name) + case err == nil: + output, err = b.whatsapp.Find(ctx, args.Name) + } + case "whatsapp_send": + var args ToolWhatsAppSendArguments + err = toolDecodeArguments(arguments, &args) + switch { + case b.whatsapp == nil: + err = fmt.Errorf("unknown tool %q", name) + case err == nil: + output, err = b.whatsapp.Send(ctx, args.ID, args.Chat, args.Text) + } default: err = fmt.Errorf("unknown tool %q", name) } @@ -393,6 +412,18 @@ type ToolTellArguments struct { Message string `json:"message"` } +// ToolWhatsAppFindArguments are the arguments of whatsapp_find. +type ToolWhatsAppFindArguments struct { + Name string `json:"name"` +} + +// ToolWhatsAppSendArguments are the arguments of whatsapp_send. +type ToolWhatsAppSendArguments struct { + ID string `json:"id"` + Chat string `json:"chat"` + Text string `json:"text"` +} + // ToolHeadTail keeps the first and the last toolClipBytes bytes written to it, // and counts the bytes between them that it drops. type ToolHeadTail struct {