返回 DeepSeek-Reasonix
recovery_status_test.go
根目录 / internal / control / recovery_status_test.go
1 package control
2
3 import (
4 "testing"
5
6 "reasonix/internal/agent"
7 "reasonix/internal/event"
8 "reasonix/internal/provider"
9 "reasonix/internal/tool"
10 )
11
12 func TestUnknownToolEffectIsFactOnlyInterruptedStatus(t *testing.T) {
13 a := agent.New(nil, tool.NewRegistry(), agent.NewSession("system"), agent.Options{}, event.Discard)
14 a.Session().Add(provider.Message{Role: provider.RoleAssistant, ToolCalls: []provider.ToolCall{{
15 ID: "external-1",
16 Name: "external_write",
17 Recovery: &provider.ToolCallRecord{
18 Identity: provider.ActionIdentity{AttemptID: "attempt-1", CallID: "external-1", CanonicalTool: "external_write"},
19 State: provider.ToolRunUnknown,
20 },
21 }}})
22 c := &Controller{executor: a}
23 done := event.Event{Cancelled: true}
24
25 c.applyToolRecoveryTurnStatus(&done, nil)
26
27 if done.Recovery == nil || done.Recovery.State != "unknown" || done.Recovery.Reason != "tool_effect_unconfirmed" {
28 t.Fatalf("recovery = %+v, want fact-only unknown status", done.Recovery)
29 }
30 if done.Recovery.RequiresUserDecision {
31 t.Fatal("unknown tool effect must not require a recovery decision")
32 }
33 if got := terminalTurnStatus(done); got != event.TurnInterrupted {
34 t.Fatalf("terminal status = %q, want %q", got, event.TurnInterrupted)
35 }
36 }
37
37 lines GO