X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/3cdbd017da9ae7a7045f4272f16d4b262fd01c79..c781f79f3c8cb9a7577ee1574d196988da2719b3:/tools.go diff --git a/tools.go b/tools.go index 9f2905a..94885ff 100644 --- a/tools.go +++ b/tools.go @@ -72,6 +72,113 @@ type Toolbox struct { imageShow *ImageShow } +// ToolZoomArguments are the arguments of zoom. A Name that is not nil names the +// child whose view or the subagent whose whole log zoom gives. ID and N are +// then not used. +type ToolZoomArguments struct { + ID int `json:"id"` + N int `json:"n"` + Name *string `json:"name"` +} + +// ToolDateArguments are the arguments of date. +type ToolDateArguments struct { + ID int `json:"id"` +} + +// ToolShellArguments are the arguments of shell. +type ToolShellArguments struct { + Command string `json:"command"` +} + +// ToolPathArguments are the arguments of read. +type ToolPathArguments struct { + Path string `json:"path"` +} + +// ToolWriteArguments are the arguments of write. +type ToolWriteArguments struct { + Path string `json:"path"` + Text string `json:"text"` +} + +// ToolEditArguments are the arguments of edit. +type ToolEditArguments struct { + Path string `json:"path"` + Old string `json:"old"` + 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"` +} + +// ToolAgentCreateArguments are the arguments of agent_create. +type ToolAgentCreateArguments struct { + Name string `json:"name"` + Responsibility string `json:"responsibility"` +} + +// ToolRouteArguments are the arguments of route. +type ToolRouteArguments struct { + Source string `json:"source"` + Agent string `json:"agent"` +} + +// ToolRouteSourceArguments are the arguments of unroute. +type ToolRouteSourceArguments struct { + Source string `json:"source"` +} + +// ToolTellArguments are the arguments of tell. +type ToolTellArguments struct { + Name string `json:"name"` + 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"` + Image string `json:"image"` +} + +// ToolScheduleSetArguments are the arguments of schedule_set. Exactly one of At +// and Cron is not nil. +type ToolScheduleSetArguments struct { + Text string `json:"text"` + At *string `json:"at"` + Cron *string `json:"cron"` +} + +// ToolScheduleRemoveArguments are the arguments of schedule_remove. +type ToolScheduleRemoveArguments struct { + ID int `json:"id"` +} + +// ToolHeadTail keeps the first and the last toolClipBytes bytes written to it, +// and counts the bytes between them that it drops. +type ToolHeadTail struct { + head []byte + tail []byte + dropped int +} + // Call logs the call of the tool name with its JSON arguments, makes the log // durable, runs the tool, and logs its clipped text. It returns that text or // the text and image parts of a single-message zoom. Pixels never enter the @@ -260,7 +367,7 @@ func (b *Toolbox) run(ctx context.Context, name, arguments string) string { 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 @@ -387,9 +494,11 @@ func (b *Toolbox) shell(ctx context.Context, command string) string { cmd.SysProcAttr = &syscall.SysProcAttr{ Setpgid: true, } + cmd.Cancel = func() error { return syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL) } + cmd.WaitDelay = toolShellOutputTimeout output := &ToolHeadTail{} @@ -493,112 +602,6 @@ func (b *Toolbox) path(path string) string { return filepath.Join(b.workdir, path) } -// ToolZoomArguments are the arguments of zoom. A Name that is not nil names the -// child whose view or the subagent whose whole log zoom gives. ID and N are -// then not used. -type ToolZoomArguments struct { - ID int `json:"id"` - N int `json:"n"` - Name *string `json:"name"` -} - -// ToolDateArguments are the arguments of date. -type ToolDateArguments struct { - ID int `json:"id"` -} - -// ToolShellArguments are the arguments of shell. -type ToolShellArguments struct { - Command string `json:"command"` -} - -// ToolPathArguments are the arguments of read. -type ToolPathArguments struct { - Path string `json:"path"` -} - -// ToolWriteArguments are the arguments of write. -type ToolWriteArguments struct { - Path string `json:"path"` - Text string `json:"text"` -} - -// ToolEditArguments are the arguments of edit. -type ToolEditArguments struct { - Path string `json:"path"` - Old string `json:"old"` - 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"` -} - -// ToolAgentCreateArguments are the arguments of agent_create. -type ToolAgentCreateArguments struct { - Name string `json:"name"` - Responsibility string `json:"responsibility"` -} - -// ToolRouteArguments are the arguments of route. -type ToolRouteArguments struct { - Source string `json:"source"` - Agent string `json:"agent"` -} - -// ToolRouteSourceArguments are the arguments of unroute. -type ToolRouteSourceArguments struct { - Source string `json:"source"` -} - -// ToolTellArguments are the arguments of tell. -type ToolTellArguments struct { - Name string `json:"name"` - 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"` -} - -// ToolScheduleSetArguments are the arguments of schedule_set. Exactly one of At -// and Cron is not nil. -type ToolScheduleSetArguments struct { - Text string `json:"text"` - At *string `json:"at"` - Cron *string `json:"cron"` -} - -// ToolScheduleRemoveArguments are the arguments of schedule_remove. -type ToolScheduleRemoveArguments struct { - ID int `json:"id"` -} - -// ToolHeadTail keeps the first and the last toolClipBytes bytes written to it, -// and counts the bytes between them that it drops. -type ToolHeadTail struct { - head []byte - tail []byte - dropped int -} - // String returns the output, clipped when it is too long. Invalid UTF-8 becomes // the replacement character. func (h *ToolHeadTail) String() string {