Get Process Conversation
Cache-first: if we already have a cached body for this conversation, serve it without an RPC. Writes (chat/stream completion + create_process_conversation) refresh the cache, so the cache stays current on the happy path. Clients can force a fresh fetch with ?refresh=1 (e.g. after a device-side import or when the user explicitly hits a sync button). Offline processes always serve from cache via the existing fallback.
?since_seq=N returns only the messages appended after index N in the cached history. Combined with the response's last_seq, clients can do efficient cursor-based catchup (e.g. SPA reconnecting its WebSocket sends since_seq=<last_value_we_saw> to fetch only messages it missed instead of replaying the entire 1-2 MB body). Append-only contract is guaranteed by the sidecar's trajectory.jsonl writer.
?tail=N returns only the last N messages (the default conversation open — the SPA no longer pulls the whole body just to show the bottom of the thread). ?before_seq=C&limit=M pages backward: the M messages immediately before index C (scroll-up). Both add earliest_seq (index of the first returned message) and has_more (older messages exist above) to the response so the client knows whether to keep paging. These are mutually exclusive with each other and take precedence over since_seq; sending none of them keeps the legacy full-body shape.
Path parameters
Query parameters
Headers
Response
Successful Response