+ 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 "agent_create":
+ var args ToolAgentCreateArguments
+
+ err = toolDecodeArguments(arguments, &args)
+ switch {
+ case b.children == nil:
+ err = fmt.Errorf("unknown tool %q", name)
+ case err == nil:
+ output, err = b.children.Create(args.Name, args.Responsibility)
+ }
+ case "route", "unroute", "routes":
+ var args ToolRouteArguments
+
+ switch name {
+ case "routes":
+ err = toolDecodeArguments(arguments, &struct{}{})
+ case "unroute":
+ var source ToolRouteSourceArguments
+
+ err = toolDecodeArguments(arguments, &source)
+ args.Source = source.Source
+ default:
+ err = toolDecodeArguments(arguments, &args)
+ }
+
+ switch {
+ case b.routes == nil:
+ err = fmt.Errorf("unknown tool %q", name)
+ case err != nil:
+ case name == "routes":
+ output = b.routes.List()
+ case name == "route" && (b.messages == nil || b.messages.Child(b.agentName, args.Agent) == nil):
+ err = errors.New("the agent must be a child of the root")
+ default:
+ err = b.routes.Set(args.Source, args.Agent)
+ output = "Route removed."
+ if name == "route" {
+ output = "Route set."
+ }
+ }
+ case "tell":
+ var args ToolTellArguments
+
+ err = toolDecodeArguments(arguments, &args)
+ switch {
+ case b.runs == nil:
+ err = fmt.Errorf("unknown tool %q", name)
+ case err == nil && b.messages != nil && b.messages.Child(b.agentName, args.Name) != nil:
+ err = b.messages.Tell(b.agentName, args.Name, args.Message)
+ output = "Sent. " + args.Name + "'s reply will reach you as a message."
+ 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
+
+ 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, args.Image)
+ }
+ case "schedule_set":
+ var args ToolScheduleSetArguments
+
+ err = toolDecodeArguments(arguments, &args)
+ switch {
+ case b.schedules == nil:
+ err = fmt.Errorf("unknown tool %q", name)
+ case err == nil:
+ output, err = b.schedules.Set(args.Text, args.At, args.Cron)
+ }
+ case "schedule_list":
+ err = toolDecodeArguments(arguments, &struct{}{})
+ switch {
+ case b.schedules == nil:
+ err = fmt.Errorf("unknown tool %q", name)
+ case err == nil:
+ output = b.schedules.List()
+ }
+ case "schedule_remove":
+ var args ToolScheduleRemoveArguments
+
+ err = toolDecodeArguments(arguments, &args)
+ switch {
+ case b.schedules == nil:
+ err = fmt.Errorf("unknown tool %q", name)
+ case err == nil:
+ output, err = b.schedules.Remove(args.ID)
+ }