diff --git a/control.go b/control.go index fdf4feb..0ec0792 100644 --- a/control.go +++ b/control.go @@ -142,6 +142,7 @@ type PushNotifyPayload struct { NavSessionID string `json:"nav_session_id,omitempty"` Type string `json:"type"` Summary string `json:"summary"` + ApprovalID string `json:"approval_id,omitempty"` NotificationID string `json:"notification_id,omitempty"` TraceID string `json:"trace_id,omitempty"` CreatedAtUnixMS int64 `json:"created_at_unix_ms,omitempty"` diff --git a/protocol_test.go b/protocol_test.go index da9eefb..b748e81 100644 --- a/protocol_test.go +++ b/protocol_test.go @@ -137,11 +137,39 @@ func TestPushNotifyPayloadBackwardCompatible(t *testing.T) { t.Fatalf("legacy optional fields = id:%q trace:%q created:%d attempt:%d, want zero values", got.NotificationID, got.TraceID, got.CreatedAtUnixMS, got.Attempt) } + if got.ApprovalID != "" { + t.Fatalf("legacy ApprovalID = %q, want empty", got.ApprovalID) + } if got.Type != "question" || got.Summary != "AgentD has a question" || got.NavSessionID != "agent-session-1" { t.Fatalf("legacy payload decoded incorrectly: %+v", got) } } +func TestPushNotifyPayloadCarriesApprovalID(t *testing.T) { + t.Parallel() + + payload := protocol.PushNotifyPayload{ + NavSessionID: "agent-session-1", + Type: "approval_request", + Summary: "AgentD needs your approval", + ApprovalID: "approval-123", + } + raw, err := json.Marshal(payload) + if err != nil { + t.Fatalf("marshal PushNotifyPayload: %v", err) + } + if !bytes.Contains(raw, []byte(`"approval_id":"approval-123"`)) { + t.Fatalf("PushNotifyPayload JSON = %s, want approval_id", raw) + } + var got protocol.PushNotifyPayload + if err := json.Unmarshal(raw, &got); err != nil { + t.Fatalf("unmarshal PushNotifyPayload: %v", err) + } + if got.ApprovalID != payload.ApprovalID { + t.Fatalf("ApprovalID = %q, want %q", got.ApprovalID, payload.ApprovalID) + } +} + func TestPushNotifyResultPayloadRoundtrip(t *testing.T) { t.Parallel()