blob: 8e903a2fc0c063ca85216909324fe3278d4b2f08 [file] [log] [blame]
package loop
import (
"fmt"
"time"
)
type Agent interface {
Run(todo *ToDo) error
}
type UserAgent struct {
pr PromptReader
}
func (a *UserAgent) Run(todo *ToDo) error {
for {
items := findActionableItems(todo, "user")
if len(items) == 0 {
time.Sleep(30 * time.Second)
continue
}
for _, i := range items {
fmt.Printf("YOU %s %s: ", i.ID, i.Title)
comment, err := a.pr.Read()
if err != nil {
return err
}
i.Discussion = append(i.Discussion, Comment{
Author: "user",
Comment: comment,
})
i.AssignedTo = "assistant"
}
}
}
func findActionableItems(todo *ToDo, assignedTo string) []*ToDo {
for _, i := range todo.Items {
ret := findActionableItems(i, assignedTo)
if len(ret) > 0 {
return ret
}
}
if todo.AssignedTo == assignedTo && !todo.Done {
return []*ToDo{todo}
}
return nil
}