@@ -51,6 +51,10 @@ let currentAbort = null;
5151// Counter for generating unique approval request IDs.
5252let approvalCounter = 0 ;
5353
54+ // Track whether we've completed at least one query (for continue support).
55+ let hasCompletedQuery = false ;
56+ let lastSessionId = null ;
57+
5458// ── Stdin reader ─────────────────────────────────────────────────────────────
5559
5660const rl = createInterface ( { input : process . stdin , terminal : false } ) ;
@@ -131,9 +135,13 @@ async function handleQuery(cmd) {
131135
132136 if ( model ) options . model = model ;
133137
134- // Resume support: pass the previous session ID.
135- if ( sessionId ) {
138+ // Session continuity:
139+ // - If we have a sessionId from a previous app launch, resume it
140+ // - If we already completed a query in this sidecar process, continue it
141+ if ( sessionId && ! hasCompletedQuery ) {
136142 options . resume = sessionId ;
143+ } else if ( hasCompletedQuery ) {
144+ options . continue = true ;
137145 }
138146
139147 // canUseTool callback — sends approval requests to Rust, waits for response
@@ -240,6 +248,8 @@ async function handleQuery(cmd) {
240248 } ) ;
241249 }
242250
251+ hasCompletedQuery = true ;
252+ lastSessionId = capturedSessionId ;
243253 emit ( { type : "turn_completed" , sessionId : capturedSessionId || "" } ) ;
244254 turnEmitted = true ;
245255 continue ;
@@ -316,6 +326,8 @@ async function handleQuery(cmd) {
316326
317327 // Make sure we always emit turn_completed so the Rust side knows we're done.
318328 if ( ! turnEmitted ) {
329+ hasCompletedQuery = true ;
330+ lastSessionId = capturedSessionId ;
319331 emit ( { type : "turn_completed" , sessionId : capturedSessionId || "" } ) ;
320332 }
321333 }
0 commit comments