Provide a durable turn-completion signal for resumed sessions
- Vorherrschende Sprache
- Shell
- Sterne
- 11.2k
- Forks
- 1.9k
- Ø Merge
- 14 Std. 16 Min.
- Gemergte PRs (30 T.)
- 6
Beschreibung
## Summary
When a client resumes or reconnects after missing the live event stream, there does not appear to be a documented way in the CLI/SDK to query whether the previous turn already completed successfully.
`session.idle` appears to be the canonical live "turn is done / session is now idle" signal, but because it is ephemeral and not persisted to `events.jsonl`, a reconnecting client that missed it has to infer completion from persisted artifacts and coarse session metadata.
## Current situation
A resumed client can currently combine:
- live events, **if** it was attached when they arrived,
- session metadata such as `ModifiedTime`, and
- persisted artifacts such as `~/.copilot/session-state//events.jsonl`.
However, none of the documented SDK APIs seem to provide a direct answer to: **did the previous turn already finish, or is it still in progress?**
For example:
- `GetStatusAsync()` exposes CLI/protocol status, not per-session turn state
- `ListSessionsAsync()` / `GetSessionMetadataAsync()` expose metadata, not turn completion state
- `assistant.turn_end` is persisted, but is not a reliable terminal signal because it can occur between tool rounds
## Why this matters
For restart/reconnect flows, clients need an authoritative answer to whether the last turn finished cleanly.
Without that, they have to resort to heuristics such as:
1. scanning the tail of `events.jsonl`,
2. checking file mtime / file growth, and
3. waiting on timeout/watchdog logic.
Those heuristics are inherently unreliable for long-running or tool-heavy turns and can produce both false positives and false negatives.
## Requested improvement
Any of the following would solve the underlying problem:
1. **Persist a durable completion marker to `events.jsonl`** — either by persisting the final `session.idle`, or by emitting a dedicated persisted event such as `session.turn_complete`
2. **Expose a documented session/turn status API** that a reconnecting client can call after resume
3. **Persist a final session status snapshot** that can be read after reconnect
The important point is not the exact mechanism; it is that resumed clients need some **authoritative, durable completion signal** instead of having to guess.
## Scope
- Affects the CLI event log under `~/.copilot/session-state//events.jsonl`
- Affects SDK/app clients that restore or reconnect sessions after restart, reconnect, or crash recovery
---
**Related downstream tracking issue:** https://github.com/PureWeen/PolyPilot/issues/538
Beitragsleitfaden
Rechercherichtung
Beginnen Sie damit, die dokumentierten Session-APIs nachzuverfolgen, einschließlich GetStatusAsync(), ListSessionsAsync() und GetSessionMetadataAsync(), zusammen mit dem persistierten events.jsonl-Log und der Verarbeitung von session.idle. Ermitteln Sie, welcher dauerhafte Mechanismus beantworten kann, ob der vorherige Turn nach einer erneuten Verbindung abgeschlossen wurde; abgeschlossen bedeutet, dass ein wiederaufgenommener Client ein maßgebliches Abschlussergebnis erhalten kann, ohne das Ende des Logs zu durchsuchen, mtime-Prüfungen oder Watchdog-Timeouts.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- shell
- Bereich
- api, cli
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100