1package ext
2
3import (
4 "encoding/json"
5 "reflect"
6 "testing"
7 "time"
8
9 "github.com/patriceckhart/zot/packages/agent/extproto"
10)
11
12func TestLifecycleEventFields(t *testing.T) {
13 h := newHarness("lifecycle")
14 defer h.hostW.Close()
15 names := []string{"user_prompt_submit", "tool_result", "session_end", "pre_compact", "post_compact", "subagent_start", "subagent_stop", "permission_decision"}
16 received := make(chan Event, len(names))
17 for _, name := range names {
18 h.ext.On(name, func(e Event) { received <- e })
19 }
20 go h.ext.Run()
21 h.handshake(t)
22 count, estimate, executed := 0, 10, false
23 result := &extproto.EventResult{Content: []extproto.ContentBlock{{Type: "text", Text: "output"}}, IsError: true, Truncated: true}
24 for _, name := range names {
25 h.sendToExt(t, extproto.EventFromHost{Type: "event", Event: name, SessionID: "session", AgentRunID: "run", CWD: "/work", Sequence: 42, Queued: true, ImageCount: 1, Status: "blocked", Reason: "reason", Source: "policy", Decision: "denied", Stage: "pre_execution", Result: result, Executed: &executed, CompactionID: "compact", MessageCount: &count, TokenEstimate: &estimate, AgentID: "child", Name: "reviewer", ToolID: "call", ToolName: "bash", ToolArgs: json.RawMessage(`{}`), Text: "prompt"})
26 select {
27 case e := <-received:
28 want := Event{Name: name, SessionID: "session", AgentRunID: "run", CWD: "/work", Sequence: 42, Queued: true, ImageCount: 1, Status: "blocked", Reason: "reason", Source: "policy", Decision: "denied", Stage: "pre_execution", Result: result, Executed: &executed, CompactionID: "compact", MessageCount: &count, TokenEstimate: &estimate, AgentID: "child", AgentName: "reviewer", ToolID: "call", ToolName: "bash", ToolArgs: json.RawMessage(`{}`), Text: "prompt"}
29 if !reflect.DeepEqual(e, want) {
30 t.Fatalf("event = %+v, want %+v", e, want)
31 }
32 case <-time.After(time.Second):
33 t.Fatal("missing event")
34 }
35 }
36}