github / github/copilot-cli

Provide a durable turn-completion signal for resumed sessions

Offen
#2,596 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area:non-interactive area: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

Beitragsleitfaden öffnen

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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.