50 lines
1.8 KiB
Go
50 lines
1.8 KiB
Go
package agents
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"g.fc.run/misc/byre/internal/api"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestForkPoint(t *testing.T) {
|
||
|
|
s1, s2 := "s1", "s2"
|
||
|
|
ev := func(seq int64, sess *string, kind string, payload map[string]any) api.Event {
|
||
|
|
return api.Event{Seq: seq, AgentSessionId: sess, Kind: kind, Payload: payload}
|
||
|
|
}
|
||
|
|
events := []api.Event{
|
||
|
|
ev(1, &s1, "user.message", map[string]any{"text": "go"}),
|
||
|
|
ev(2, &s1, "agent.message", map[string]any{"text": "on it", "vendor_uuid": "u-msg"}),
|
||
|
|
ev(3, &s1, "agent.tool_call", map[string]any{"id": "a", "vendor_uuid": "u-call-a"}),
|
||
|
|
ev(4, &s1, "agent.tool_call", map[string]any{"id": "b", "vendor_uuid": "u-call-b"}),
|
||
|
|
ev(5, &s1, "agent.tool_call", map[string]any{"id": "x", "parent_tool_use_id": "b"}),
|
||
|
|
ev(6, nil, "snapshot.created", map[string]any{"n": 1}),
|
||
|
|
ev(7, &s1, "agent.tool_result", map[string]any{"tool_use_id": "a", "vendor_uuid": "u-res-a"}),
|
||
|
|
ev(8, &s2, "agent.tool_result", map[string]any{"tool_use_id": "b", "vendor_uuid": "u-other"}),
|
||
|
|
ev(9, &s1, "agent.tool_result", map[string]any{"tool_use_id": "b", "vendor_uuid": "u-res-b"}),
|
||
|
|
ev(10, &s1, "agent.message", map[string]any{"text": "done", "vendor_uuid": "u-done"}),
|
||
|
|
ev(11, &s1, "turn.ended", map[string]any{}),
|
||
|
|
ev(12, &s1, "user.message", map[string]any{"text": "more"}),
|
||
|
|
ev(13, &s1, "agent.tool_call", map[string]any{"id": "c", "vendor_uuid": "u-call-c"}),
|
||
|
|
ev(14, &s1, "agent.tool_result", map[string]any{"tool_use_id": "c", "vendor_uuid": "u-res-c"}),
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, c := range []struct {
|
||
|
|
seq int64
|
||
|
|
want string
|
||
|
|
}{
|
||
|
|
{1, ""},
|
||
|
|
{2, "u-msg"},
|
||
|
|
{3, "u-res-b"},
|
||
|
|
{5, "u-res-b"},
|
||
|
|
{9, "u-res-b"},
|
||
|
|
{11, "u-done"},
|
||
|
|
{12, "u-done"},
|
||
|
|
{13, "u-res-c"},
|
||
|
|
} {
|
||
|
|
got := forkPoint(events, s1, c.seq)
|
||
|
|
if got != c.want {
|
||
|
|
t.Errorf("forkPoint at seq %d = %q, want %q", c.seq, got, c.want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|