| 1 | package main |
| 2 | |
| 3 | import ( |
| 4 | "reasonix/internal/session" |
| 5 | "strconv" |
| 6 | ) |
| 7 | |
| 8 | // SessionActivityBaseline is an explicit owner observation. Query.Stat validates |
| 9 | // cold metadata against the log revision and schedules bounded asynchronous |
| 10 | // rebuilding when needed; the sidebar never replays the transcript itself. |
| 11 | type SessionActivityBaseline struct { |
| 12 | Ref session.SessionRef `json:"ref"` |
| 13 | ResultSequence uint64 `json:"resultSequence"` |
| 14 | EventVersion string `json:"eventVersion"` |
| 15 | LifecycleGeneration uint64 `json:"lifecycleGeneration"` |
| 16 | Complete bool `json:"complete"` |
| 17 | } |
| 18 | |
| 19 | func (a *App) GetSessionActivityBaseline(selector SessionSelector) (SessionActivityBaseline, error) { |
| 20 | target, err := a.resolveSessionTarget(selector) |
| 21 | if err != nil { |
| 22 | return SessionActivityBaseline{}, err |
| 23 | } |
| 24 | if target.SessionRef.SessionID == "" { |
| 25 | return SessionActivityBaseline{}, newSessionOperationError("unsupported", "This history source has no canonical result sequence.") |
| 26 | } |
| 27 | info, err := a.desktopSessionService("").Query().Stat(a.bootContext(), target.SessionRef) |
| 28 | if err != nil { |
| 29 | return SessionActivityBaseline{}, err |
| 30 | } |
| 31 | return SessionActivityBaseline{Ref: target.SessionRef, ResultSequence: info.ResultSequence, |
| 32 | EventVersion: strconv.FormatUint(info.EventSequence, 10), LifecycleGeneration: target.LifecycleGeneration, |
| 33 | Complete: info.MetadataStatus == session.MetadataReady && info.Error == ""}, nil |
| 34 | } |
| 35 |