Update trail watch for trail-wide events · Entire

Update trail watch for trail-wide events

0cad45f·

dipree·3w ago·2 files·+128 added/-44 removed

Sessions

8259670f86bdView transcript

Changes

2

17 unmodified lines

...
"github.com/spf13/cobra"

// SSE control events for the agent-native finding stream. Domain events
// (for example "session.started" or "comment.created") are emitted as their
// SSE control events for the trail-wide event stream. Domain events
// (for example "review.started" or "comment.created") are emitted as their
// code_review_events.event_type values.
const (
    sseEventReady     = "ready"
)

cmd := &cobra.Command{
    Use:   "watch [<number>]",
    Short: "Tail a trail's finding events live",
    Long: `Subscribe to the trail-scoped agent-native finding SSE stream and
print events as they arrive. Reconnects automatically when the server caps the
connection (~50s) and on transient network errors.`,
}

...

type reviewReadyPayload struct {
    TrailID string `json:"trail_id"`
    Cursor  int    `json:"cursor"`
}

type reviewStreamEvent struct {
    ID              any            `json:"id"`
    TrailID         string         `json:"trail_id"`
    ReviewSessionID *string        `json:"review_session_id"`
    ActorID         string         `json:"actor_id"`
    EventType       string         `json:"event_type"`
    TargetType      string         `json:"target_type"`
    TargetID        string         `json:"target_id"`
    Payload         map[string]any `json:"payload"`
    CreatedAt       time.Time      `json:"created_at"`
}

...

func printReadyEvent(w io.Writer, data string) {
    var p reviewReadyPayload
    if err := json.Unmarshal([]byte(data), &p); err == nil {
        parts := []string{"● connected"}
        if p.TrailID != "" {
            ...
        }
    }
}

...

func TestStreamOnce_PrintsReadyAndReviewEvents(t *testing.T) {
    frames := []string{
        "event: ready\ndata: {\"trail_id\":\"trl_1\",\"cursor\":0}\n\n",
        "id: 1\nevent: session.started\ndata: {...}
        ...
    }
    ...
}

...