From e87e875d720ea8ed257e83f2f1836b58ba781882 Mon Sep 17 00:00:00 2001 From: DullJZ <79080562+DullJZ@users.noreply.github.com> Date: Thu, 16 Jul 2026 12:26:19 +0800 Subject: [PATCH] feat(opencode): accept -s/--session as resume aliases (#1042) Map OpenCode-native session flags to resumeSessionId so `hapi opencode -s ` restores the session like --resume. --- cli/src/commands/agentCommandOptions.test.ts | 24 ++++++++++++++++++++ cli/src/commands/agentCommandOptions.ts | 7 ++++++ 2 files changed, 31 insertions(+) diff --git a/cli/src/commands/agentCommandOptions.test.ts b/cli/src/commands/agentCommandOptions.test.ts index f70c3e4a..e0702cb1 100644 --- a/cli/src/commands/agentCommandOptions.test.ts +++ b/cli/src/commands/agentCommandOptions.test.ts @@ -68,6 +68,30 @@ describe('parseRemoteAgentCommandOptions', () => { expect(() => parseRemoteAgentCommandOptions(['--model'], OPENCODE_PERMISSION_MODES)).toThrow('Missing --model value') expect(() => parseRemoteAgentCommandOptions(['--model-reasoning-effort'], OPENCODE_PERMISSION_MODES)).toThrow('Missing --model-reasoning-effort value') }) + + it('accepts OpenCode-native -s / --session as resume aliases', () => { + expect(parseRemoteAgentCommandOptions( + ['-s', 'opencode-sess-1'], + OPENCODE_PERMISSION_MODES + ).resumeSessionId).toBe('opencode-sess-1') + + expect(parseRemoteAgentCommandOptions( + ['--session', 'opencode-sess-2'], + OPENCODE_PERMISSION_MODES + ).resumeSessionId).toBe('opencode-sess-2') + }) + + it('rejects -s / --session with no value', () => { + expect(() => parseRemoteAgentCommandOptions(['-s'], OPENCODE_PERMISSION_MODES)).toThrow('Missing -s value') + expect(() => parseRemoteAgentCommandOptions(['--session'], OPENCODE_PERMISSION_MODES)).toThrow('Missing --session value') + }) + + it('a later -s overrides a prior --resume (last-write-wins)', () => { + expect(parseRemoteAgentCommandOptions( + ['--resume', 'first', '-s', 'second'], + OPENCODE_PERMISSION_MODES + ).resumeSessionId).toBe('second') + }) }) describe('parseRemoteAgentCommandOptions — pi flavor', () => { diff --git a/cli/src/commands/agentCommandOptions.ts b/cli/src/commands/agentCommandOptions.ts index f7e8b29c..a8041e06 100644 --- a/cli/src/commands/agentCommandOptions.ts +++ b/cli/src/commands/agentCommandOptions.ts @@ -43,6 +43,13 @@ export function parseRemoteAgentCommandOptions) + const sessionId = args[++i] + if (!sessionId) { + throw new Error(`Missing ${arg} value`) + } + options.resumeSessionId = sessionId } else if (arg === '--session-id') { // Pi uses --session-id for exact session resume (RPC mode) const sessionId = args[++i]