+20
-3
@@ -79,9 +79,26 @@ to adopt while every session's sidecar is still on disk. Recovery makes a
|
||||
second pass over those sidecars and registers each as a `Dormant` session
|
||||
(#162) — id, name, cwd, command, worktree and `created_at` intact. A dormant
|
||||
session has no pane and no PTY bridge: it cannot be attached to, typed into or
|
||||
resized, and neither watcher pass touches it. It is a record of what was
|
||||
running, and the only thing left to do with one is dismiss it, which removes
|
||||
the sidecar so the next recovery does not bring it back.
|
||||
resized, and neither watcher pass touches it.
|
||||
|
||||
A dormant session is brought back with `POST /api/sessions/:id/resume` (#166),
|
||||
which respawns tmux under the **same** uuid and sidecar — `metadata.name`,
|
||||
`created_at`, `env` and worktree ownership all survive, and only the tmux
|
||||
session and the PTY bridge are new. The command is the matching spawn preset's
|
||||
`resume_command` with `{agent_session}` filled in from the session's own
|
||||
`agent_session_id`, so an agent comes back inside its old conversation; a
|
||||
session with no matching preset, no `resume_command`, or no reported
|
||||
conversation id is respawned on the command it was created with. `Session::command`
|
||||
always keeps that original command, so a second resume resolves the same preset.
|
||||
Resume is refused with `409` for a session that is already running
|
||||
(`already_running`) and for one whose `cwd` has disappeared (`cwd_missing`) —
|
||||
neither is something a respawn could fix. The other thing to do with a dormant
|
||||
session is dismiss it, which removes the sidecar so the next recovery does not
|
||||
bring it back.
|
||||
|
||||
Attaching to a session that has no bridge answers `409 not_attachable`, not
|
||||
`404 unknown_session`: the session exists, and a client that cannot tell "gone"
|
||||
from "not running" cannot offer the resume.
|
||||
|
||||
`SessionStatus` is a wire type, so from this build forward it deserializes
|
||||
leniently on both clients: a spelling the client does not know reads as `Dead`
|
||||
|
||||
Reference in New Issue
Block a user