Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
80c9e5a
feat(agents): store each agent's permission itself instead of typing …
brennanb2025 Oct 21, 2026
71544ab
fix(agents): say the all-agents switch resets agents set separately; …
brennanb2025 Oct 21, 2026
270236f
test(agents): the one-time move returns every launch-profile field
brennanb2025 Oct 21, 2026
54f46d1
Fix permission carrier ownership and surface-specific defaults
brennanb2025 Oct 21, 2026
37b91cd
Preserve uncertain permission operands and name the option inventory
brennanb2025 Oct 21, 2026
5b31751
Check env entries without indexing typed agent maps
brennanb2025 Oct 21, 2026
35670d9
Combine Chat permission capability imports
brennanb2025 Oct 21, 2026
1fb4abf
Use folder execution-host platform for permission environment
brennanb2025 Oct 21, 2026
81c7b53
Preserve launch map replacement and acknowledge permission saves
brennanb2025 Oct 21, 2026
553fb6b
Keep permission feedback fallbacks statically discoverable
brennanb2025 Oct 21, 2026
6d2b5eb
Provide preload platform to Agents settings render tests
brennanb2025 Oct 21, 2026
bd67b0f
Preserve Gemini approval arguments under Full access
brennanb2025 Oct 21, 2026
603acb5
Merge origin/main into agent-permission-one-setting
brennanb2025 Oct 21, 2026
3dfafae
fix(settings): retain complete environment edits through save outcomes
brennanb2025 Oct 21, 2026
c45c7ff
fix(settings): narrow local failure scope and preserve host messages
brennanb2025 Oct 21, 2026
3b9e8f5
fix(settings): retire argument drafts after acknowledged saves
brennanb2025 Oct 21, 2026
2e764e6
fix(settings): keep Goose environment editable after reset
brennanb2025 Oct 21, 2026
57184ac
fix(settings): show resolved arguments for legacy hosts
brennanb2025 Oct 21, 2026
205f2b5
Merge remote-tracking branch 'origin/main' into brennanb2025/agent-pe…
brennanb2025 Oct 21, 2026
70a4dfb
Merge remote-tracking branch 'origin/main' into brennanb2025/agent-pe…
brennanb2025 Oct 22, 2026
bd3885c
Merge remote-tracking branch 'origin/main' into brennanb2025/agent-pe…
brennanb2025 Oct 23, 2026
acc97b1
Preserve pending environment resets and bound launch settings work
brennanb2025 Oct 23, 2026
c08545c
Keep optional settings fallback in repository metadata reads
brennanb2025 Oct 23, 2026
604be89
Read repository visibility defaults through the raw settings fixtures
brennanb2025 Oct 23, 2026
7cb53b8
Prepare whole Environment edits and retire unchanged drafts
brennanb2025 Oct 23, 2026
3799da6
Keep Environment settings transitions in an acyclic module
brennanb2025 Oct 23, 2026
df7b551
Update raw settings reader test fixtures
brennanb2025 Oct 23, 2026
b2a4a8b
Place test fixture safety notes on assertion starts
brennanb2025 Oct 23, 2026
3a8478c
test: pin permission settings work and recovery contracts
brennanb2025 Oct 23, 2026
64a3fcc
test: type permission settings work fixtures
brennanb2025 Oct 23, 2026
d219453
test: cover migrated permission inputs and captured CLI grammar
brennanb2025 Oct 23, 2026
155f39c
test: preserve typed permissions in WSL Claude restarts
brennanb2025 Oct 23, 2026
53310be
Merge origin/main to resolve structured Codex launch comment conflict
brennanb2025 Oct 23, 2026
5ce5078
Merge origin/main to resolve settings integration conflicts
brennanb2025 Oct 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions config/vitest.performance.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import baseConfig from './vitest.config'
import { nodeRuntimePool } from './scripts/vitest-node-runtime-pool'

const contracts = [
'src/shared/tui-agent-permission-choice.test.ts',
'src/renderer/src/components/settings/agent-permission-conversion-persistence.test.tsx',
'src/main/runtime/rpc/methods/repo.test.ts',
'src/renderer/src/components/tab-bar/use-new-tab-agent-menu-host-preferences.test.tsx',
'src/main/sqlite/sync-database.test.ts',
'src/main/runtime/orchestration/db/row-column-lists.test.ts',
'src/shared/native-chat-tool-attribution-allocation.test.ts',
Expand Down
4 changes: 2 additions & 2 deletions mobile/src/session/ai-vault-resume-launch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@ export function buildMobileAiVaultResumeLaunch(args: {
cmdOverrides,
platform: args.hostPlatform,
shell,
agentArgs: resolveTuiAgentLaunchArgs(args.session.agent, args.settings?.agentDefaultArgs),
agentEnv: resolveTuiAgentLaunchEnv(args.session.agent, args.settings?.agentDefaultEnv),
agentArgs: resolveTuiAgentLaunchArgs(args.session.agent, args.settings),
agentEnv: resolveTuiAgentLaunchEnv(args.session.agent, args.settings, args.hostPlatform),
...(args.session.agent === 'omp' && resumeFilePath
? { ompResumeFilePath: resumeFilePath }
: {})
Expand Down
8 changes: 2 additions & 6 deletions src/main/codex/codex-structured-launch-args.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { CODEX_PERMISSION_CONFIG_ROOTS } from '../../shared/agent-permission-args'
import { parseTomlKeyPath } from './config-toml-key-path'
import { StructuredAgentArgumentsError } from '../native-chat/structured-agent-arguments-error'

Expand Down Expand Up @@ -60,12 +61,7 @@ function inlineValue(token: string, option: string): string | undefined {

function isPermissionConfig(value: string): boolean {
const key = parseTomlKeyPath(value)?.segments[0]
return (
key === 'approval_policy' ||
key === 'sandbox_mode' ||
key === 'approvals_reviewer' ||
key === 'sandbox_workspace_write'
)
return CODEX_PERMISSION_CONFIG_ROOTS.some((root) => root === key)
}

/** Accept only root CLI options; Orca sets permissions on the thread RPC. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ const launchSettings = new Set([
'agentCmdOverrides',
'agentDefaultArgs',
'agentDefaultEnv',
'agentPermissionDefault',
'agentPermissionOverrides',
'nativeChatInheritShellEnvironment',
'nativeChatShellEnvironmentVariables',
'terminalWindowsShell',
Expand Down
12 changes: 6 additions & 6 deletions src/main/native-chat/structured-agent-configured-args.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
import type { GlobalSettings } from '../../shared/global-settings-types'
import { resolveTuiAgentLaunchArgs } from '../../shared/tui-agent-launch-defaults'
import {
resolveTuiAgentLaunchArgs,
type AgentLaunchProfileSettings
} from '../../shared/tui-agent-launch-defaults'
import { tokenizeStartupCommand } from '../../shared/tui-agent-startup-shell'
import { resolveLocalWindowsAgentStartupShell } from '../../shared/windows-terminal-shell'

/** Use the same grouping rules as terminal launches before the provider filters its owned flags. */
export function structuredAgentConfiguredArgs(
agent: string,
settings: Partial<Pick<GlobalSettings, 'agentDefaultArgs' | 'terminalWindowsShell'>>,
settings: AgentLaunchProfileSettings & Partial<Pick<GlobalSettings, 'terminalWindowsShell'>>,
platform: NodeJS.Platform = process.platform
): string[] {
const shell =
Expand All @@ -15,10 +18,7 @@ export function structuredAgentConfiguredArgs(
isRemote: false,
terminalWindowsShell: settings.terminalWindowsShell
}) ?? 'posix'
const parsed = tokenizeStartupCommand(
resolveTuiAgentLaunchArgs(agent, settings.agentDefaultArgs),
shell
)
const parsed = tokenizeStartupCommand(resolveTuiAgentLaunchArgs(agent, settings), shell)
if (!parsed.ok) {
throw new Error(`${agent} Arguments are invalid: ${parsed.error}`)
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/orcad/orcad-account-services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ export function createOrcadAccountServices(args: {
prepareCodexCatalogProbeHome: (homePath) =>
codexRuntimeHome.prepareHostCodexHomeForReadOnlyAppServer(
homePath,
resolveTuiAgentLaunchEnv('codex', store.getSettings().agentDefaultEnv)
resolveTuiAgentLaunchEnv('codex', store.getSettings())
),
prepareAiVaultSessionResume: (resumeArgs) =>
prepareCodexAiVaultSessionResume(resumeArgs, {
Expand Down
14 changes: 8 additions & 6 deletions src/main/persistence-settings-update.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { composeAgentLaunchProfile } from '../shared/tui-agent-launch-defaults'
import {
closeTestStores,
testState,
Expand Down Expand Up @@ -459,12 +460,12 @@ describe('Store', () => {
)
const store = await createStore()

expect(store.getSettings().agentDefaultArgs).toMatchObject({
expect(composeAgentLaunchProfile(store.getSettings()).agentDefaultArgs).toMatchObject({
claude: '--dangerously-skip-permissions',
codex: '--dangerously-bypass-approvals-and-sandbox',
cursor: '--yolo'
})
expect(store.getSettings().agentDefaultEnv).toMatchObject({
expect(composeAgentLaunchProfile(store.getSettings()).agentDefaultEnv).toMatchObject({
goose: { GOOSE_MODE: 'auto' }
})
expect(store.getSettings().agentYoloDefaultsMigrated).toBe(true)
Expand All @@ -484,9 +485,10 @@ describe('Store', () => {
)
const store = await createStore()

expect(store.getSettings().agentDefaultArgs?.codex).toBe('')
expect(store.getSettings().agentDefaultEnv?.goose).toEqual({})
expect(store.getSettings().agentDefaultArgs?.claude).toBe('--dangerously-skip-permissions')
const launched = composeAgentLaunchProfile(store.getSettings())
expect(launched.agentDefaultArgs.codex).toBe('')
expect(launched.agentDefaultEnv.goose).toEqual({})
expect(launched.agentDefaultArgs.claude).toBe('--dangerously-skip-permissions')
})

it('removes unsupported TUI skip-permissions args from migrated profiles', async () => {
Expand All @@ -508,7 +510,7 @@ describe('Store', () => {

expect(store.getSettings().agentDefaultArgs?.opencode).toBe('--model opencode/gpt-5')
expect(store.getSettings().agentDefaultArgs?.kilo).toBe('')
expect(store.getSettings().agentDefaultArgs?.codex).toBe(
expect(composeAgentLaunchProfile(store.getSettings()).agentDefaultArgs.codex).toBe(
'--dangerously-bypass-approvals-and-sandbox'
)
expect((readDataFile() as PersistedState).settings.agentDefaultArgs?.opencode).toBe(
Expand Down
14 changes: 2 additions & 12 deletions src/main/persistence/applying-settings/settings-update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ import { retireAtRestCommandSettings } from '../../native-chat/agent-session-wir
import { normalizeDisabledTuiAgents } from '../../../shared/tui-agent-selection'
import { normalizeNativeChatProviderChoices } from '../../../shared/native-chat-providers'
import { resolveNestedWorkerMaxDepth } from '../../../shared/nested-worker-depth'
import {
normalizeTuiAgentArgsRecord,
normalizeTuiAgentEnvRecord
} from '../../../shared/tui-agent-launch-defaults'
import { sanitizeAgentLaunchProfileUpdates } from '../../../shared/tui-agent-launch-defaults'
import { normalizeTerminalQuickCommands } from '../../../shared/terminal-quick-commands'
import { assertTerminalQuickCommandsStorable } from '../../../shared/terminal-quick-command-prompt-limit'
import { normalizeTerminalCustomThemes } from '../../../shared/terminal-custom-themes'
Expand Down Expand Up @@ -111,14 +108,7 @@ export function updateSettings(
})
}
}
if ('agentDefaultArgs' in updates) {
sanitizedUpdates.agentDefaultArgs = normalizeTuiAgentArgsRecord(updates.agentDefaultArgs)
sanitizedUpdates.agentYoloDefaultsMigrated = true
}
if ('agentDefaultEnv' in updates) {
sanitizedUpdates.agentDefaultEnv = normalizeTuiAgentEnvRecord(updates.agentDefaultEnv)
sanitizedUpdates.agentYoloDefaultsMigrated = true
}
sanitizeAgentLaunchProfileUpdates(sanitizedUpdates, updates)
if ('terminalQuickCommands' in updates) {
const terminalQuickCommands = normalizeTerminalQuickCommands(updates.terminalQuickCommands)
// Every local and paired save lands here, so this is where an unstorable list is refused.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { homedir } from 'node:os'
import { describe, expect, it } from 'vitest'
import { describe, expect, it, vi } from 'vitest'
import { getDefaultPersistedState } from '../../../shared/constants'
import { normalizeLoadedGlobalSettings } from './normalize-loaded-global-settings'
import { prepareLoadedTerminalSettings } from './prepare-loaded-terminal-settings'
import { prepareLoadedProfileSettings } from './prepare-loaded-profile-settings'
import type { GlobalSettings } from '../../../shared/global-settings-types'
import type { PersistedState } from '../../../shared/persisted-state-types'
import { applyAgentPermissionMode } from '../../../shared/tui-agent-permissions'
import { resolveAgentPermission } from '../../../shared/tui-agent-permission-choice'
import { resolveTuiAgentLaunchArgs } from '../../../shared/tui-agent-launch-defaults'

// Simulates a profile created before the dedicated Experimental switch was persisted.
function normalizeLegacyProfile(overrides: Record<string, unknown>): PersistedState['settings'] {
Expand Down Expand Up @@ -142,6 +144,112 @@ describe('chat appearance settings', () => {
})

describe('the new-chat permission setting', () => {
it.each<{
name: string
saved: Partial<GlobalSettings>
raw: string[]
choices: string[]
chat: string
terminal: string[]
}>([
{
name: 'mixed terminal permissions before the Chat seed exists',
saved: {
agentYoloDefaultsMigrated: true,
agentDefaultArgs: {
claude: '--dangerously-skip-permissions --model sonnet',
codex: '--approve-for-me --config tui.animations=false'
}
},
raw: ['--model sonnet', '--config tui.animations=false'],
choices: ['full-access', 'auto'],
chat: 'ask',
terminal: [
'--dangerously-skip-permissions --model sonnet',
'--approve-for-me --config tui.animations=false'
]
},
{
name: 'explicit empty Arguments with saved Chat defaults',
saved: {
agentYoloDefaultsMigrated: true,
agentDefaultArgs: { claude: '', codex: '' },
nativeChatPermissionMode: 'auto'
},
raw: ['', ''],
choices: ['own', 'own'],
chat: 'auto',
terminal: ['', '']
},
{
name: 'Claude plan text owned by the user',
saved: {
agentYoloDefaultsMigrated: true,
agentDefaultArgs: { claude: '--permission-mode plan --model sonnet', codex: '' },
nativeChatPermissionMode: 'accept-edits'
},
raw: ['--permission-mode plan --model sonnet', ''],
choices: ['own', 'own'],
chat: 'accept-edits',
terminal: ['--permission-mode plan --model sonnet', '']
},
{
name: 'legacy yolo defaults before either migration',
saved: { agentYoloDefaultsMigrated: false, agentDefaultArgs: {} },
raw: ['', ''],
choices: ['full-access', 'full-access'],
chat: 'full-access',
terminal: ['--dangerously-skip-permissions', '--dangerously-bypass-approvals-and-sandbox']
}
])(
'loads and reloads $name through the real profile pipeline',
({ saved, raw, choices, chat, terminal }) => {
const defaults = getDefaultPersistedState(homedir())
const parsed: PersistedState = {
...defaults,
settings: {
...defaults.settings,
agentPermissionDefault: undefined,
agentPermissionOverrides: undefined,
nativeChatPermissionMode: undefined,
agentNativeChatPermissionModes: { claude: 'ask', codex: 'auto' },
agentDefaultEnv: { claude: { QA_LOADER_NOTE: 'preserved' } },
...saved
}
}
const needsSave = vi.fn()
const profile = prepareLoadedProfileSettings(parsed, defaults, needsSave)
const loaded = normalizeLoadedGlobalSettings(
parsed,
prepareLoadedTerminalSettings(parsed, needsSave),
profile
)
expect(needsSave).toHaveBeenCalled()
expect(loaded.agentYoloDefaultsMigrated).toBe(true)
expect(loaded.agentPermissionDefault).toBeDefined()
expect(loaded.nativeChatPermissionMode).toBe(chat)
expect(loaded.agentNativeChatPermissionModes).toEqual({ claude: 'ask', codex: 'auto' })
expect(loaded.agentDefaultEnv?.claude).toEqual({ QA_LOADER_NOTE: 'preserved' })
expect(
(['claude', 'codex'] as const).map((agent) => loaded.agentDefaultArgs?.[agent])
).toEqual(raw)
expect(
(['claude', 'codex'] as const).map((agent) => resolveAgentPermission(agent, loaded).choice)
).toEqual(choices)
expect(
(['claude', 'codex'] as const).map((agent) => resolveTuiAgentLaunchArgs(agent, loaded))
).toEqual(terminal)
const reloaded: PersistedState = { ...parsed, settings: JSON.parse(JSON.stringify(loaded)) }
expect(
normalizeLoadedGlobalSettings(
reloaded,
prepareLoadedTerminalSettings(reloaded, needsSave),
prepareLoadedProfileSettings(reloaded, defaults, needsSave)
)
).toEqual(loaded)
}
)

it.each([
['manual', 'ask'],
['yolo', 'full-access']
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ export function normalizeLoadedGlobalSettings(
stampPrimarySelectionTerminalDefaults,
migratedDisabledTuiAgents,
migratedAgentYoloDefaults,
migratedAgentPermission,
migratedWindowsRuntimeDefault,
migratedLocalAccountRuntime,
loadedCompactWorktreeCards,
Expand Down Expand Up @@ -139,7 +140,8 @@ export function normalizeLoadedGlobalSettings(
nativeChatShellEnvironmentVariables: normalizeNativeChatShellEnvironmentVariables(
parsed.settings?.nativeChatShellEnvironmentVariables
),
// Why: the next settings save stores the seed; until then a reload derives the same one.
// Why: the next settings save stores the seed; until then a reload derives the same one. Read
// from the Arguments as saved, before their permission flags moved into the stored choice.
agentNativeChatPermissionModes: normalizeAgentNativeChatPermissionModes(
parsed.settings?.agentNativeChatPermissionModes
),
Expand All @@ -159,6 +161,7 @@ export function normalizeLoadedGlobalSettings(
),
disabledTuiAgents: migratedDisabledTuiAgents,
...migratedAgentYoloDefaults,
...migratedAgentPermission,
claudeAgentTeamsDefaultDisabledMigrated: true,
sshRemoteCliControlExistingHostsMigrated: true,
openInApplications: normalizeOpenInApplications(parsed.settings?.openInApplications, {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import { normalizeTerminalCursorStyleDefault } from '../../../shared/terminal-cu
import { normalizeTerminalLineHeight } from '../../../shared/terminal-line-height-settings'
import { migratePortugueseUiLanguageOnLoad } from '../../../shared/portuguese-ui-language-migration'
import { migrateAgentYoloDefaults } from '../applying-settings/terminal-settings-migrations'
import { hasTypedAgentPermission } from '../../../shared/tui-agent-permission-choice'
import { migrateAgentPermissionChoice } from '../../../shared/tui-agent-permission-lift'
import {
normalizeLoadedOnboardingState,
normalizeNotificationSettings,
Expand Down Expand Up @@ -49,6 +51,8 @@ export type PreparedLoadedProfileSettings = {
GlobalSettings,
'agentDefaultArgs' | 'agentDefaultEnv' | 'agentYoloDefaultsMigrated'
>
/** The same launch profile with permissions moved into the stored choice; this is what's saved. */
migratedAgentPermission: ReturnType<typeof migrateAgentPermissionChoice>
migratedWindowsRuntimeDefault: GlobalSettings['localWindowsRuntimeDefault']
migratedLocalAccountRuntime: GlobalSettings['localAccountRuntime']
loadedCompactWorktreeCards: boolean
Expand Down Expand Up @@ -146,8 +150,17 @@ export function prepareLoadedProfileSettings(
}
const migratedDisabledTuiAgents = normalizeDisabledTuiAgents(parsed.settings?.disabledTuiAgents)
const migratedAgentYoloDefaults = migrateAgentYoloDefaults(parsed.settings)
const migratedAgentPermission = migrateAgentPermissionChoice(
{
...migratedAgentYoloDefaults,
agentPermissionDefault: parsed.settings?.agentPermissionDefault,
agentPermissionOverrides: parsed.settings?.agentPermissionOverrides
},
process.platform
)
if (
parsed.settings?.agentYoloDefaultsMigrated !== true ||
!hasTypedAgentPermission(parsed.settings) ||
parsed.settings?.agentDefaultArgs?.devin !==
migratedAgentYoloDefaults.agentDefaultArgs?.devin ||
hasUnsupportedTuiAgentArgs('opencode', parsed.settings?.agentDefaultArgs?.opencode) ||
Expand Down Expand Up @@ -257,6 +270,7 @@ export function prepareLoadedProfileSettings(
stampPrimarySelectionTerminalDefaults,
migratedDisabledTuiAgents,
migratedAgentYoloDefaults,
migratedAgentPermission,
migratedWindowsRuntimeDefault,
migratedLocalAccountRuntime,
loadedCompactWorktreeCards,
Expand Down
2 changes: 1 addition & 1 deletion src/main/preflight/codex-workspace-relative-path.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ describe.skipIf(process.platform === 'win32')('workspace-relative Codex selectio
const sources = {
resolveCommand: (options?: { pathEnv?: string | null; homePath?: string }) =>
resolveStructuredAgentCommand('codex', settings, options),
resolveAgentLaunchEnv: () => resolveTuiAgentLaunchEnv('codex', settings.agentDefaultEnv)
resolveAgentLaunchEnv: () => resolveTuiAgentLaunchEnv('codex', settings)
}
const environment = createStructuredAgentEnvironmentResolvers(sources)
const record: AgentSessionRecord = {
Expand Down
8 changes: 8 additions & 0 deletions src/main/runtime/agent-launch-settings-rollback.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ export function agentLaunchSettingsRollbackUpdates(
Object.is(current.agentDefaultEnv, applied.agentDefaultEnv)
? { agentDefaultEnv: before.agentDefaultEnv ?? {} }
: {}),
...(Object.hasOwn(updates, 'agentPermissionDefault') &&
Object.is(current.agentPermissionDefault, applied.agentPermissionDefault)
? { agentPermissionDefault: before.agentPermissionDefault }
: {}),
...(Object.hasOwn(updates, 'agentPermissionOverrides') &&
Object.is(current.agentPermissionOverrides, applied.agentPermissionOverrides)
? { agentPermissionOverrides: before.agentPermissionOverrides ?? {} }
: {}),
...(Object.hasOwn(updates, 'agentNativeChatPermissionModes') &&
Object.is(current.agentNativeChatPermissionModes, applied.agentNativeChatPermissionModes)
? { agentNativeChatPermissionModes: before.agentNativeChatPermissionModes ?? {} }
Expand Down
2 changes: 1 addition & 1 deletion src/main/runtime/orca-runtime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class OrcaRuntimeService extends OrcaRuntimeSidebarBase {
(this.authoritativeWindowId !== null &&
this.authoritativeWindowId !== HEADLESS_RUNTIME_WINDOW_ID &&
this.store?.getUI?.().sidebarOpen !== false),
hostLabelOverrides: () => getHostDisplayLabelOverrides(this.getClientSettings())
hostLabelOverrides: () => getHostDisplayLabelOverrides(this.requireStore().getSettings())
})
: null
// Switch point: the phone's icon source.
Expand Down
Loading
Loading