// output, enough for toolClipCharacters/2 characters of 4 bytes.
toolClipBytes = 4 * toolClipCharacters / 2
- // toolShellWaitDelay is how long a command can keep its output open
+ // toolShellOutputTimeout is how long a command can keep its output open
// after it ends or after its kill.
- toolShellWaitDelay = 2 * time.Second
+ toolShellOutputTimeout = 2 * time.Second
)
// ToolLog is the log that the tools write their calls and results to.
// spawn and tell, the WhatsApp link for the WhatsApp tools, and the schedules
// for the schedule tools. Each permanent agent has the parent-child queue. Only
// the root has child creation and source routes. A child has neither of them
-// nor a WhatsApp link. The toolbox of a subagent has none of them, so these are
-// unknown tools there.
+// nor a WhatsApp link. Only the root can show images to the user. The toolbox
+// of a subagent has none of them, so these are unknown tools there.
type Toolbox struct {
log ToolLog
chat ToolChat
children *DaemonChildren
routes *Routes
images *ImageStore
+ imageShow *ImageShow
}
// Call logs the call of the tool name with its JSON arguments, makes the log
case err == nil:
output, err = b.runs.Tell(ctx, args.Name, args.Message)
}
+ case "image_show":
+ var args ToolImageShowArguments
+
+ err = toolDecodeArguments(arguments, &args)
+ switch {
+ case b.imageShow == nil:
+ err = fmt.Errorf("unknown tool %q", name)
+ case err == nil:
+ output, err = b.imageShow.Show(ctx, args.Image, args.Caption)
+ }
case "whatsapp_find":
var args ToolWhatsAppFindArguments
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)
+ output, err = b.whatsapp.Send(ctx, args.ID, args.Chat, args.Text, args.Image)
}
case "schedule_set":
var args ToolScheduleSetArguments
cmd.Cancel = func() error {
return syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
}
- cmd.WaitDelay = toolShellWaitDelay
+ cmd.WaitDelay = toolShellOutputTimeout
output := &ToolHeadTail{}
cmd.Stdout = output
Message string `json:"message"`
}
+// ToolImageShowArguments are the arguments of image_show.
+type ToolImageShowArguments struct {
+ Image string `json:"image"`
+ Caption string `json:"caption"`
+}
+
// 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"`
+ ID string `json:"id"`
+ Chat string `json:"chat"`
+ Text string `json:"text"`
+ Image string `json:"image"`
}
// ToolScheduleSetArguments are the arguments of schedule_set. Exactly one of At