fix(handoff): preserve tmux session by setting remain-on-exit before kill
When gt handoff killed pane processes before respawning, the pane would be destroyed (since remain-on-exit defaults to off), causing respawn-pane to fail with "can't find pane" error. Fix: Set remain-on-exit=on before killing processes, so the pane survives process death and can be respawned. This restores tmux session reuse on handoffs. Changes: - Add SetRemainOnExit method to tmux package - Call SetRemainOnExit(true) before KillPaneProcesses in: - Local handoff (runHandoff) - Remote handoff (handoffRemoteSession) - Mayor attach respawn (runMayorAttach) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1385,6 +1385,19 @@ func (t *Tmux) ClearHistory(pane string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// SetRemainOnExit controls whether a pane stays around after its process exits.
|
||||
// When on, the pane remains with "[Exited]" status, allowing respawn-pane to restart it.
|
||||
// When off (default), the pane is destroyed when its process exits.
|
||||
// This is essential for handoff: set on before killing processes, so respawn-pane works.
|
||||
func (t *Tmux) SetRemainOnExit(pane string, on bool) error {
|
||||
value := "on"
|
||||
if !on {
|
||||
value = "off"
|
||||
}
|
||||
_, err := t.run("set-option", "-t", pane, "remain-on-exit", value)
|
||||
return err
|
||||
}
|
||||
|
||||
// SwitchClient switches the current tmux client to a different session.
|
||||
// Used after remote recycle to move the user's view to the recycled session.
|
||||
func (t *Tmux) SwitchClient(targetSession string) error {
|
||||
|
||||
Reference in New Issue
Block a user