From 90f0aa174dddc3b9cf63401fe3638b81c468e437 Mon Sep 17 00:00:00 2001 From: jonny Date: Thu, 9 Apr 2026 12:18:00 +0000 Subject: [PATCH] fix(tui): support /resume to bypass session picker - Extract resumeById callback from inline onSelect handler - /resume with no arg opens picker (unchanged behavior) - /resume resumes directly, skipping the picker --- ui-tui/src/app.tsx | 54 +++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/ui-tui/src/app.tsx b/ui-tui/src/app.tsx index 25c87205c..91f45eabf 100644 --- a/ui-tui/src/app.tsx +++ b/ui-tui/src/app.tsx @@ -465,6 +465,33 @@ export function App({ gw }: { gw: GatewayClient }) { [rpc, sys] ) + const resumeById = useCallback( + (id: string) => { + setPicker(false) + setStatus('resuming…') + gw.request('session.resume', { cols: colsRef.current, session_id: id }) + .then((r: any) => { + resetSession() + setSid(r.session_id) + setInfo(r.info ?? null) + const resumed = toTranscriptMessages(r.messages) + + if (r.info?.usage) { + setUsage(prev => ({ ...prev, ...r.info.usage })) + } + + setMessages(resumed) + setHistoryItems(r.info ? [introMsg(r.info), ...resumed] : resumed) + setStatus('ready') + }) + .catch((e: Error) => { + sys(`error: ${e.message}`) + setStatus('ready') + }) + }, + [gw, sys] + ) + // ── Paste pipeline ─────────────────────────────────────────────── const listPasteIds = useCallback((text: string) => { @@ -1344,7 +1371,8 @@ export function App({ gw }: { gw: GatewayClient }) { return true case 'resume': - setPicker(true) + if (arg) resumeById(arg) + else setPicker(true) return true @@ -2012,29 +2040,7 @@ export function App({ gw }: { gw: GatewayClient }) { setPicker(false)} - onSelect={id => { - setPicker(false) - setStatus('resuming…') - gw.request('session.resume', { cols: colsRef.current, session_id: id }) - .then((r: any) => { - resetSession() - setSid(r.session_id) - setInfo(r.info ?? null) - const resumed = toTranscriptMessages(r.messages) - - if (r.info?.usage) { - setUsage(prev => ({ ...prev, ...r.info.usage })) - } - - setMessages(resumed) - setHistoryItems(r.info ? [introMsg(r.info), ...resumed] : resumed) - setStatus('ready') - }) - .catch((e: Error) => { - sys(`error: ${e.message}`) - setStatus('ready') - }) - }} + onSelect={resumeById} t={theme} />