Agents + bash
diff --git a/loop/anthropic.go b/loop/anthropic.go
index 8ff5d6b..e711d47 100644
--- a/loop/anthropic.go
+++ b/loop/anthropic.go
@@ -13,6 +13,7 @@
)
type AnthropicAgent struct {
+ pr PromptReader
reg tools.Registry
client anthropic.Client
}
@@ -35,13 +36,12 @@
for i, toolParam := range toolParams {
tools[i] = anthropic.ToolUnionParam{OfTool: &toolParam}
}
- k, err := json.MarshalIndent(todo, "", "\t")
- if err != nil {
- return err
- }
for {
+ todo.Lock()
items := findActionableItems(todo, "assistant")
if len(items) == 0 {
+ fmt.Println("## AGENT NO ITEMS")
+ todo.Unlock()
time.Sleep(30 * time.Second)
continue
}
@@ -50,7 +50,14 @@
for _, i := range items {
itemIds = append(itemIds, i.ID)
}
- messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(string(k))))
+ fmt.Println(todo.String())
+ fmt.Printf("-- AGENT START WORKING %s\n", strings.Join(itemIds, ", "))
+ b, err := json.MarshalIndent(todo, "", "\t")
+ if err != nil {
+ todo.Unlock()
+ break
+ }
+ messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(string(b))))
messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(
fmt.Sprintf("Work on TODO item: %s", strings.Join(itemIds, ", ")))))
for {
@@ -64,6 +71,7 @@
Tools: tools,
})
if err != nil {
+ todo.Unlock()
return err
}
fmt.Printf("--- STOP_REASON: %s\n", resp.StopReason)
@@ -75,12 +83,25 @@
case anthropic.TextBlock:
fmt.Printf("AI: %s\n", v.Text)
case anthropic.ToolUseBlock:
+ args := v.JSON.Input.Raw()
+ if v.Name == "bash_command" {
+ fmt.Printf("!!!!! %s: ", args)
+ p, err := a.pr.Read()
+ if err != nil {
+ todo.Unlock()
+ return err
+ }
+ if p != "OK" {
+ toolResults = append(toolResults, anthropic.NewToolResultBlock(v.ID, p, true))
+ continue
+ }
+ }
t := a.reg.Get(v.Name)
if t == nil {
toolResults = append(toolResults, anthropic.NewToolResultBlock(v.ID, fmt.Sprintf("unknown tool %q", v.Name), true))
continue
}
- args := v.JSON.Input.Raw()
+
fmt.Printf("CALLING TOOL: %s %s\n", v.Name, args)
out, err := t.Call(string(args))
if err != nil {
@@ -99,5 +120,7 @@
for _, i := range items {
i.AssignedTo = "user"
}
+ todo.Unlock()
}
+ return nil
}