if subagentTestCall(call) {
w.WriteHeader(http.StatusBadRequest)
- _, _ = io.WriteString(w, subagentTestFullContext)
+ _, err := io.WriteString(w, subagentTestFullContext)
+ if err != nil {
+ panic(err)
+ }
return
}
require.Equal(t, "work: "+subagentReport(name, []string{"Reply 2."}), test.Log(t)[2])
_, err = runs.Tell(t.Context(), "BlueFox", "Hello.")
- require.EqualError(t, err, "no agent BlueFox")
+ require.EqualError(t, err, "open worker log: no agent BlueFox")
}
func TestStopEndsASubagentAndItsCommand(t *testing.T) {
events.WaitFor(t, "idle", 1)
require.Equal(t, []string{
"note: The daemon restarted, cutting BlueFox; nothing was lost: go on.",
- "work: " + subagentReport("BlueFox", []string{"failed: no agent BlueFox"}),
+ "work: " + subagentReport("BlueFox", []string{"failed: open worker log: no agent BlueFox"}),
"reply: a line",
}, subagentTestChat(t, memory))
require.Equal(t, subagentFailed, events.LastEvent("work").Status)
- require.Equal(t, "<3>subagent lost at restart name=BlueFox: no agent BlueFox\n", logs.String())
+ require.Equal(t, "<3>subagent lost at restart name=BlueFox: open worker log: no agent BlueFox\n", logs.String())
data, err := os.ReadFile(filepath.Join(agent.dir, subagentWorkFileName))
require.NoError(t, err)
require.JSONEq(t, `{"running": []}`, string(data))
}
+// subagentTestLastItem returns the last input item of call.
+func subagentTestLastItem(call ModelFakeCall) map[string]any {
+ input := call.body["input"].([]any)
+
+ return input[len(input)-1].(map[string]any)
+}
+
+// subagentTestCall tells if call is a call of a subagent.
+func subagentTestCall(call ModelFakeCall) bool {
+ instructions, _ := call.body["instructions"].(string)
+
+ return strings.HasPrefix(instructions, "You are a subagent")
+}
+
+// subagentTestText returns the text of the user message item, or "" for another
+// item.
+func subagentTestText(item map[string]any) string {
+ content, _ := item["content"].([]any)
+
+ var text strings.Builder
+
+ for _, part := range content {
+ value, _ := part.(map[string]any)["text"].(string)
+ text.WriteString(value)
+ }
+
+ return text.String()
+}
+
// subagentTestStart runs a loop of agent with its memory and subagents in the
// agent directory, as the daemon does. The returned function stops the loop and
// closes the files.
return lines
}
-
-// subagentTestCall tells if call is a call of a subagent.
-func subagentTestCall(call ModelFakeCall) bool {
- instructions, _ := call.body["instructions"].(string)
-
- return strings.HasPrefix(instructions, "You are a subagent")
-}
-
-// subagentTestLastItem returns the last input item of call.
-func subagentTestLastItem(call ModelFakeCall) map[string]any {
- input := call.body["input"].([]any)
-
- return input[len(input)-1].(map[string]any)
-}
-
-// subagentTestText returns the text of the user message item, or "" for another
-// item.
-func subagentTestText(item map[string]any) string {
- content, _ := item["content"].([]any)
-
- var text strings.Builder
-
- for _, part := range content {
- value, _ := part.(map[string]any)["text"].(string)
- text.WriteString(value)
- }
-
- return text.String()
-}