From b6ecdc7b440d488b30c3163e30989360f3259f12 Mon Sep 17 00:00:00 2001 From: xyzhang626 <153179436+xyzhang626@users.noreply.github.com> Date: Sun, 22 Mar 2026 06:49:14 +0800 Subject: [PATCH] fix(hub): pass resumeSessionId when resuming session (#337) --- hub/src/sync/sessionModel.test.ts | 57 +++++++++++++++++++++++++++++++ hub/src/sync/syncEngine.ts | 1 + 2 files changed, 58 insertions(+) diff --git a/hub/src/sync/sessionModel.test.ts b/hub/src/sync/sessionModel.test.ts index 529cd1c9..32e11f64 100644 --- a/hub/src/sync/sessionModel.test.ts +++ b/hub/src/sync/sessionModel.test.ts @@ -180,4 +180,61 @@ describe('session model', () => { engine.stop() } }) + + it('passes resume session ID to rpc gateway when resuming claude session', async () => { + const store = new Store(':memory:') + const engine = new SyncEngine( + store, + {} as never, + new RpcRegistry(), + { broadcast() {} } as never + ) + + try { + const session = engine.getOrCreateSession( + 'session-claude-resume', + { + path: '/tmp/project', + host: 'localhost', + machineId: 'machine-1', + flavor: 'claude', + claudeSessionId: 'claude-session-1' + }, + null, + 'default', + 'sonnet' + ) + engine.getOrCreateMachine( + 'machine-1', + { host: 'localhost', platform: 'linux', happyCliVersion: '0.1.0' }, + null, + 'default' + ) + engine.handleMachineAlive({ machineId: 'machine-1', time: Date.now() }) + + let capturedResumeSessionId: string | undefined + ;(engine as any).rpcGateway.spawnSession = async ( + _machineId: string, + _directory: string, + _agent: string, + _model?: string, + _modelReasoningEffort?: string, + _yolo?: boolean, + _sessionType?: 'simple' | 'worktree', + _worktreeName?: string, + resumeSessionId?: string + ) => { + capturedResumeSessionId = resumeSessionId + return { type: 'success', sessionId: session.id } + } + ;(engine as any).waitForSessionActive = async () => true + + const result = await engine.resumeSession(session.id, 'default') + + expect(result).toEqual({ type: 'success', sessionId: session.id }) + expect(capturedResumeSessionId).toBe('claude-session-1') + } finally { + engine.stop() + } + }) }) diff --git a/hub/src/sync/syncEngine.ts b/hub/src/sync/syncEngine.ts index 6e159d6d..a55c6a60 100644 --- a/hub/src/sync/syncEngine.ts +++ b/hub/src/sync/syncEngine.ts @@ -385,6 +385,7 @@ export class SyncEngine { undefined, undefined, undefined, + undefined, resumeToken )