diff --git a/main_test.go b/main_test.go index b4fd0d4..762cc96 100644 --- a/main_test.go +++ b/main_test.go @@ -1161,9 +1161,23 @@ func TestALRunSubagent(t *testing.T) { } func TestALSubagentDepthLimit(t *testing.T) { - // depth >= MAX_DEPTH must not spawn an HTTP request at all + // depth >= MAX_DEPTH must not spawn a child request; the LLM gets the + // depth-limit tool result and is expected to acknowledge and finish. + var n int + var mu sync.Mutex srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte(`{"choices":[{"message":{"role":"assistant","content":null,"tool_calls":[{"id":"c1","type":"function","function":{"name":"run_subagent","arguments":"{\"prompt\":\"deep\"}"}}]}}]}`)) + mu.Lock() + n++ + cur := n + mu.Unlock() + switch cur { + case 1: + w.Write([]byte(`{"choices":[{"message":{"role":"assistant","content":null,"tool_calls":[{"id":"c1","type":"function","function":{"name":"run_subagent","arguments":"{\"prompt\":\"deep\"}"}}]}}]}`)) + case 2: + w.Write([]byte(`{"choices":[{"message":{"role":"assistant","content":"done"}}]}`)) + default: + t.Errorf("unexpected request #%d (child must not be spawned)", cur) + } })) defer srv.Close() @@ -1175,6 +1189,12 @@ func TestALSubagentDepthLimit(t *testing.T) { if err != nil { t.Fatalf("AL: %v", err) } + if n != 2 { + t.Errorf("expected exactly 2 LLM requests, got %d", n) + } + if got := last(msgs); got != "done" { + t.Errorf("last = %q, want done", got) + } found := false for _, m := range msgs { if m.Role == "tool" && m.Content != nil && strings.Contains(*m.Content, "depth limit") {