mirror of
https://github.com/stablyai/orca.git
synced 2026-10-01 08:01:56 +00:00
fix(agent-session): preserve handoff launch arguments
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { resolveAgentSessionResumeArgs } from './agent-session-resume-args'
|
||||
|
||||
describe('agent session resume arguments', () => {
|
||||
it('keeps the session creation arguments after mutable defaults change', () => {
|
||||
expect(
|
||||
resolveAgentSessionResumeArgs({
|
||||
persistedArgs: ['--model', 'claude-created'],
|
||||
defaultArgs: '--model claude-current',
|
||||
shell: 'posix'
|
||||
})
|
||||
).toBe("'--model' 'claude-created'")
|
||||
})
|
||||
|
||||
it('keeps an explicit empty snapshot when defaults are toggled off', () => {
|
||||
expect(
|
||||
resolveAgentSessionResumeArgs({
|
||||
persistedArgs: [],
|
||||
defaultArgs: '--dangerously-skip-permissions',
|
||||
shell: 'posix'
|
||||
})
|
||||
).toBe('')
|
||||
})
|
||||
|
||||
it('uses current defaults for legacy records without a snapshot', () => {
|
||||
expect(
|
||||
resolveAgentSessionResumeArgs({
|
||||
defaultArgs: '--dangerously-skip-permissions',
|
||||
shell: 'posix'
|
||||
})
|
||||
).toBe('--dangerously-skip-permissions')
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,17 @@
|
||||
import type { AgentSessionLaunchArgs } from '../../shared/agent-session-record'
|
||||
import { quoteStartupArg, type AgentStartupShell } from '../../shared/tui-agent-startup-shell'
|
||||
|
||||
export function resolveAgentSessionResumeArgs(input: {
|
||||
requestArgs?: string | null
|
||||
persistedArgs?: AgentSessionLaunchArgs
|
||||
defaultArgs?: string | null
|
||||
shell: AgentStartupShell
|
||||
}): string | null | undefined {
|
||||
if (input.requestArgs !== undefined) {
|
||||
return input.requestArgs
|
||||
}
|
||||
if (input.persistedArgs !== undefined) {
|
||||
return input.persistedArgs.map((arg) => quoteStartupArg(arg, input.shell)).join(' ')
|
||||
}
|
||||
return input.defaultArgs
|
||||
}
|
||||
@@ -562,6 +562,7 @@ describe('structured TUI launch tab binding', () => {
|
||||
sessionId: 'session-1',
|
||||
location: { workspaceId: WORKTREE_ID, executionHostId: 'local' },
|
||||
accountHome: { variable: 'CODEX_HOME', path: '/tmp/codex-home' },
|
||||
launchArgs: ['--search'],
|
||||
options: { model: 'gpt-5.6-terra', effort: 'medium' },
|
||||
providerHandleChain: [
|
||||
{ handle: { provider: 'codex', threadId: 'thread-1' }, observedAt: 1 }
|
||||
@@ -601,6 +602,7 @@ describe('structured TUI launch tab binding', () => {
|
||||
const launchCommand = spawn.mock.calls[0]?.[0]?.command
|
||||
expect(launchCommand).toContain("'-m' 'gpt-5.6-terra'")
|
||||
expect(launchCommand).toContain("'-c' 'model_reasoning_effort=medium'")
|
||||
expect(launchCommand).toContain("'--search'")
|
||||
expect(launchCommand).not.toContain('gpt-5.6-sol')
|
||||
expect(launchCommand).not.toContain('model_reasoning_effort=high')
|
||||
|
||||
|
||||
@@ -652,6 +652,7 @@ import {
|
||||
resolveTuiAgentLaunchEnv
|
||||
} from '../../shared/tui-agent-launch-defaults'
|
||||
import { resolveStartupShell, tokenizeStartupCommand } from '../../shared/tui-agent-startup-shell'
|
||||
import { resolveAgentSessionResumeArgs } from './agent-session-resume-args'
|
||||
import { resolveCodexStructuredAppServerArgs } from '../codex/codex-structured-app-server-args'
|
||||
import { resolveLocalWindowsAgentStartupShell } from '../../shared/windows-terminal-shell'
|
||||
import {
|
||||
@@ -11390,7 +11391,12 @@ export class OrcaRuntimeService {
|
||||
presentation: 'background'
|
||||
},
|
||||
{},
|
||||
{ spawnToken, providerRoot: record.accountHome.path, sessionId: record.sessionId }
|
||||
{
|
||||
spawnToken,
|
||||
providerRoot: record.accountHome.path,
|
||||
sessionId: record.sessionId,
|
||||
...(record.launchArgs !== undefined ? { launchArgs: record.launchArgs } : {})
|
||||
}
|
||||
)
|
||||
const terminal = launched.terminal
|
||||
let spawnedOwner: StructuredTuiOwner | null = null
|
||||
@@ -30088,7 +30094,12 @@ export class OrcaRuntimeService {
|
||||
async ensureAgentSession(
|
||||
request: RuntimeEnsureAgentSessionRequest,
|
||||
_caller: RuntimeAgentSessionRpcCaller = {},
|
||||
handoffAuthority?: { spawnToken: string; providerRoot: string; sessionId: string }
|
||||
handoffAuthority?: {
|
||||
spawnToken: string
|
||||
providerRoot: string
|
||||
sessionId: string
|
||||
launchArgs?: NonNullable<AgentSessionRecord['launchArgs']>
|
||||
}
|
||||
): Promise<RuntimeEnsureAgentSessionResult> {
|
||||
if (request.kind === 'automatic') {
|
||||
// Legacy renderer sleep records are migration evidence, not host authority.
|
||||
@@ -30132,10 +30143,12 @@ export class OrcaRuntimeService {
|
||||
agent: request.agent,
|
||||
providerSession: identity.providerSession,
|
||||
cmdOverrides: settings.agentCmdOverrides ?? {},
|
||||
agentArgs:
|
||||
request.agentArgs !== undefined
|
||||
? request.agentArgs
|
||||
: resolveTuiAgentLaunchArgs(request.agent, settings.agentDefaultArgs),
|
||||
agentArgs: resolveAgentSessionResumeArgs({
|
||||
requestArgs: request.agentArgs,
|
||||
persistedArgs: handoffAuthority?.launchArgs,
|
||||
defaultArgs: resolveTuiAgentLaunchArgs(request.agent, settings.agentDefaultArgs),
|
||||
shell: resolveStartupShell(platform, shell)
|
||||
}),
|
||||
agentEnv: {
|
||||
...resolveTuiAgentLaunchEnv(request.agent, settings.agentDefaultEnv),
|
||||
...(handoffAuthority && request.agent === 'codex'
|
||||
|
||||
Reference in New Issue
Block a user