feat(settings): one Agent accounts page and a sentence-case settings nav

AI provider accounts becomes Agent accounts: a page whose first part is This computer (or the
selected host), holding the existing provider accounts, switching and usage. renderAccountsSettingsSection
takes additionalSections so other parts can be added below it with AgentAccountsSubsection. The
section id stays 'accounts', so every deep link keeps working.

The Settings nav, its group labels and the matching section titles move to sentence case
(Orca account, Computer use, SSH hosts, ...). In-app, CLI and docs references to
'AI Provider Accounts' now say 'Agent accounts'.
This commit is contained in:
Neil
2026-11-10 17:09:34 -08:00
parent c58ffc0042
commit 62aedf90f0
22 changed files with 177 additions and 111 deletions
@@ -8,7 +8,7 @@ Orca can remember more than one Antigravity CLI (`agy`) account and switch betwe
## Save accounts
1. Run `agy` in a terminal on the machine that runs your agents and complete its browser sign-in.
1. Open **Settings → AI Provider Accounts → Antigravity** and click **Save current account**.
1. Open **Settings → Agent accounts → Antigravity** and click **Save current account**.
1. To add another account, run `/logout` inside `agy`, sign in with the next account, click **Refresh accounts**, then **Save current account** again.
1. Repeat for each account.
@@ -6,7 +6,7 @@ Running multiple Codex accounts to maximize tokens is common. Orca lets you add
## Add accounts
1. Open [Settings → AI Provider Accounts → Codex](/docs/settings#ai-provider-accounts).
1. Open [Settings → Agent accounts → Codex](/docs/settings#agent-accounts).
1. Click **Add Account** and finish the Codex sign-in in your browser.
1. Repeat for each account. Every account Orca adds keeps its own sign-in context, so adding one never signs another out.
@@ -38,5 +38,5 @@ For managed Codex accounts, Orca mirrors settings from your real `~/.codex/confi
## Other providers
- **Claude Code** accounts are added the same way under **Settings → AI Provider Accounts → Claude**, and switching applies to the next Claude you start.
- **Claude Code** accounts are added the same way under **Settings → Agent accounts → Claude**, and switching applies to the next Claude you start.
- **Antigravity** works differently: it switches one shared `agy` login rather than running isolated accounts. See [Antigravity accounts](/docs/agents/antigravity-accounts).
+1 -1
View File
@@ -65,7 +65,7 @@ Settings are grouped into panes. Everything here is searchable with `Cmd-,` then
- **Keep computer awake** — **On** (stay awake continuously), **Agent** (stay awake while an agent is working), or **Off**. The same control lives on the desktop status bar as **Caffeinate** (coffee icon). Hidden on paired web clients.
- **Skill freshness** — the Agents pane and skill cards still show full status. Sidebar navigation only badges skills that need action (**Update available**, **Needs attention** / review); healthy, loading, and optional not-installed rows stay quiet. Use **Update** in the dialog to refresh global skills in the background (no terminal). Progress appears on the status bar; closing the dialog does not cancel the run. See [Orca skills](/docs/cli/skills#keep-skills-up-to-date).
## AI Provider Accounts
## Agent accounts
- Optional saved accounts per provider. Without any, Orca uses your existing logins.
- **Claude** and **Codex** — **Add Account** signs in a separate, isolated account; switching applies to new sessions. See [Hot-swap Codex accounts](/docs/agents/codex-hot-swap).
+1 -1
View File
@@ -38,7 +38,7 @@ export function formatAccountsBlock(label: string, block: AccountsBlock): string
const lines = block.accounts.map(
(account) =>
` ${account.id} ${account.email}${activeAccountIds.has(account.id) ? ' (active)' : ''}${
account.needsSignIn ? ' (sign in again in Orca Settings > AI Provider Accounts)' : ''
account.needsSignIn ? ' (sign in again in Orca Settings > Agent accounts)' : ''
}`
)
return `Managed ${label} accounts (${block.accounts.length}):\n${system}\n${lines.join('\n')}`
+1 -1
View File
@@ -295,7 +295,7 @@ export async function selectAgentAccount(ctx: HandlerContext): Promise<void> {
if (agent === 'claude' && query === 'system' && getWslAccountTarget(ctx.cwd)) {
throw new RuntimeClientError(
'invalid_argument',
'Select the Claude system default for a WSL distro in Orca Settings > AI Provider Accounts.'
'Select the Claude system default for a WSL distro in Orca Settings > Agent accounts.'
)
}
const provider = providerAccounts(ctx, agent)
+1 -1
View File
@@ -15,7 +15,7 @@ export const ACCOUNT_COMMAND_SPECS: CommandSpec[] = [
'OpenCode 2 uses `opencode auth login --standalone` in private XDG directories. Devin uses `devin auth login --force-manual-token-flow`.',
'Use --integration <id> to skip the OpenCode integration picker; --label names the saved OpenCode or Devin profile.',
'Use --method <id> and repeated --answer <key=value> to pass OpenCode its login method and form answers, so sign-in can finish without an interactive terminal.',
'Antigravity accounts are saved from the current `agy` login in Orca Settings > AI Provider Accounts.',
'Antigravity accounts are saved from the current `agy` login in Orca Settings > Agent accounts.',
'OpenCode and Devin profiles apply to new explicit host agent launches. Direct SSH relay and Windows-hosted WSL selection are not supported; run the command on a headless Orca runtime on that host.',
'Sign in with the account you want to add (e.g. use a private/incognito browser window for a second account).',
'--agent defaults to claude. Requires the Orca runtime to be running on this machine.'
@@ -102,7 +102,7 @@ function SwitchPromptDialog({ prompt }: { prompt: ClaudeAccountSwitchPrompt }):
<span className="block text-xs text-muted-foreground">
{t(
'accounts.claude.switchSessions.dontAskAgainHint',
'You can turn this off in Settings → AI Provider Accounts.'
'You can turn this off in Settings → Agent accounts.'
)}
</span>
</span>
@@ -0,0 +1,30 @@
import type React from 'react'
type AgentAccountsSubsectionProps = {
id: string
title: React.ReactNode
description?: React.ReactNode
children: React.ReactNode
}
/** One part of Settings → Agent accounts (this computer, other hosts, …). Builds can add their own
* parts through renderAccountsSettingsSection's `additionalSections`. */
export function AgentAccountsSubsection({
id,
title,
description,
children
}: AgentAccountsSubsectionProps): React.JSX.Element {
const titleId = `${id}-title`
return (
<section id={id} aria-labelledby={titleId} className="scroll-mt-8 space-y-5">
<div className="space-y-1 border-b border-border/60 pb-3">
<h3 id={titleId} className="text-lg font-semibold leading-tight text-foreground">
{title}
</h3>
{description ? <p className="text-sm text-muted-foreground">{description}</p> : null}
</div>
{children}
</section>
)
}
@@ -14,9 +14,9 @@ export const SETTINGS_NAV_GROUPS = [
{
id: 'capabilities',
titleKey: 'auto.components.settings.Settings.23c6874fdf',
titleDefault: 'AI Capabilities'
titleDefault: 'AI capabilities'
},
{ id: 'setup', titleKey: 'auto.components.settings.Settings.9abb9be3bc', titleDefault: 'Set Up' },
{ id: 'setup', titleKey: 'auto.components.settings.Settings.9abb9be3bc', titleDefault: 'Set up' },
{
id: 'workflows',
titleKey: 'auto.components.settings.Settings.e1578cd4bc',
@@ -30,12 +30,12 @@ export const SETTINGS_NAV_GROUPS = [
{
id: 'remote',
titleKey: 'auto.components.settings.Settings.23931df7e8',
titleDefault: 'Remote Hosts'
titleDefault: 'Remote hosts'
},
{
id: 'security',
titleKey: 'auto.components.settings.Settings.084d8fac5b',
titleDefault: 'Privacy & Security'
titleDefault: 'Privacy & security'
},
{
id: 'advanced',
@@ -1,4 +1,5 @@
import { AccountsPane } from '../accounts/AccountsPane'
import { AgentAccountsSubsection } from '../accounts/AgentAccountsSubsection'
import { getProviderAccountsOwnerKey } from '@/runtime/provider-accounts/observations/runtime-provider-accounts-client'
import { AgentsPane } from '../agents/AgentsPane'
import { AgentDefaultSurfaceSection } from '../agents/surfaces/AgentDefaultSurfaceSection'
@@ -50,64 +51,94 @@ export function renderAgentsSettingsSection(
)
}
/**
* Settings → Agent accounts: one page for agent sign-ins. "This computer" (or the host picked in the
* scope picker) holds provider accounts, switching and usage; `additionalSections` lets a build add
* more parts below it, each an AgentAccountsSubsection.
*/
export function renderAccountsSettingsSection(
context: SettingsRenderContext,
t: Translate = translate
t: Translate = translate,
additionalSections?: React.ReactNode
): React.JSX.Element {
const { model, navigation, terminal, view } = context
const wslHostDistro = wslHostDistroForTarget(
model.settingsHostScope.target,
model.runtimeEnvironments
)
const { model, navigation, view } = context
const isLocalScope = model.settingsHostScope.target.kind === 'local'
return (
<SettingsSection
id="accounts"
grouped
title={t('auto.components.settings.Settings.4198aae333', 'AI provider accounts')}
title={t('auto.components.settings.Settings.4198aae333', 'Agent accounts')}
description={t(
'auto.components.settings.Settings.21f09426ea',
'Optional. Orca works with your existing provider logins; add accounts only if you want Orca to help switch between them.'
'settings.agentAccounts.pageDescription',
'Sign-ins, account switching and usage for your agents.'
)}
searchEntries={navigation.getSectionSearchEntries('accounts')}
>
{!view.isSectionMounted('accounts') ? null : !model.settingsHostScope.available ? (
<SettingsHostScopeUnavailableNotice />
) : wslHostDistro ? (
// A WSL host's orcad has no account services; this desktop owns its distro's accounts.
<AccountsPane
key={wslHostDistro ?? getProviderAccountsOwnerKey(model.settingsHostScope.target)}
nativeAccounts={model.nativeAccounts}
onAccountLocationChange={model.releaseNativeAccounts}
settings={model.settings}
updateSettings={model.updateSettings}
updateSettingsOrThrow={model.updateSettingsOrThrow}
hostScope={LOCAL_SETTINGS_HOST_SCOPE}
wslHostDistro={wslHostDistro}
wslSupportedPlatform={terminal.localWslSupportedPlatform}
wslAvailable={terminal.localWindowsRuntimeCapabilities.wslAvailable}
wslDistros={terminal.localWindowsRuntimeCapabilities.wslDistros}
wslCapabilitiesLoading={terminal.localWindowsRuntimeCapabilities.isLoading}
/>
) : (
<AccountsPane
key={wslHostDistro ?? getProviderAccountsOwnerKey(model.settingsHostScope.target)}
nativeAccounts={model.nativeAccounts}
onAccountLocationChange={model.releaseNativeAccounts}
settings={model.settings}
updateSettings={model.updateSettings}
updateSettingsOrThrow={model.updateSettingsOrThrow}
hostScope={model.settingsHostScope}
wslSupportedPlatform={terminal.runtimeWslSupportedPlatform}
wslAvailable={terminal.windowsTerminalCapabilities.wslAvailable}
wslDistros={terminal.windowsTerminalCapabilities.wslDistros}
wslCapabilitiesLoading={terminal.windowsTerminalCapabilities.isLoading}
accountOwnerPlatform={terminal.windowsTerminalCapabilities.hostPlatform}
/>
)}
{view.isSectionMounted('accounts') ? (
<>
<AgentAccountsSubsection
id="accounts-this-host"
title={
isLocalScope
? t('settings.agentAccounts.thisComputer', 'This computer')
: t('settings.agentAccounts.selectedHost', 'Selected host')
}
description={t(
'auto.components.settings.Settings.21f09426ea',
'Optional. Orca works with your existing provider logins; add accounts only if you want Orca to help switch between them.'
)}
>
{renderProviderAccountsPane(context)}
</AgentAccountsSubsection>
{additionalSections}
</>
) : null}
</SettingsSection>
)
}
function renderProviderAccountsPane(context: SettingsRenderContext): React.JSX.Element {
const { model, terminal } = context
const wslHostDistro = wslHostDistroForTarget(
model.settingsHostScope.target,
model.runtimeEnvironments
)
return !model.settingsHostScope.available ? (
<SettingsHostScopeUnavailableNotice />
) : wslHostDistro ? (
// A WSL host's orcad has no account services; this desktop owns its distro's accounts.
<AccountsPane
key={wslHostDistro ?? getProviderAccountsOwnerKey(model.settingsHostScope.target)}
nativeAccounts={model.nativeAccounts}
onAccountLocationChange={model.releaseNativeAccounts}
settings={model.settings}
updateSettings={model.updateSettings}
updateSettingsOrThrow={model.updateSettingsOrThrow}
hostScope={LOCAL_SETTINGS_HOST_SCOPE}
wslHostDistro={wslHostDistro}
wslSupportedPlatform={terminal.localWslSupportedPlatform}
wslAvailable={terminal.localWindowsRuntimeCapabilities.wslAvailable}
wslDistros={terminal.localWindowsRuntimeCapabilities.wslDistros}
wslCapabilitiesLoading={terminal.localWindowsRuntimeCapabilities.isLoading}
/>
) : (
<AccountsPane
key={wslHostDistro ?? getProviderAccountsOwnerKey(model.settingsHostScope.target)}
nativeAccounts={model.nativeAccounts}
onAccountLocationChange={model.releaseNativeAccounts}
settings={model.settings}
updateSettings={model.updateSettings}
updateSettingsOrThrow={model.updateSettingsOrThrow}
hostScope={model.settingsHostScope}
wslSupportedPlatform={terminal.runtimeWslSupportedPlatform}
wslAvailable={terminal.windowsTerminalCapabilities.wslAvailable}
wslDistros={terminal.windowsTerminalCapabilities.wslDistros}
wslCapabilitiesLoading={terminal.windowsTerminalCapabilities.isLoading}
accountOwnerPlatform={terminal.windowsTerminalCapabilities.hostPlatform}
/>
)
}
export function renderOrchestrationSettingsSection(
context: SettingsRenderContext,
t: Translate = translate
@@ -90,7 +90,7 @@ export function renderDeveloperPermissionsSettingsSection(
<SettingsSection
id="developer-permissions"
grouped
title={t('auto.components.settings.Settings.65660d4548', 'macOS Permissions')}
title={t('auto.components.settings.Settings.65660d4548', 'macOS permissions')}
description={t(
'auto.components.settings.Settings.9b83cc62c2',
'macOS privacy access for terminal-launched developer tools.'
@@ -21,7 +21,7 @@ export function renderOrcaAccountSettingsSection(
return model.showDesktopOnlySettings ? (
<SettingsSection
id="orca-account"
title={t('auto.components.settings.orcaAccount.title', 'Orca Account')}
title={t('auto.components.settings.orcaAccount.title', 'Orca account')}
description={t(
'auto.components.settings.orcaAccount.description',
'Share work instantly and reach your desktop from Orca Mobile wherever you are.'
@@ -223,7 +223,7 @@ export function renderSessionHistorySettingsSection(
<SettingsSection
id="session-history"
grouped
title={t('sessionHistory.settings.title', 'Agent Session Search')}
title={t('sessionHistory.settings.title', 'Agent session search')}
description={t(
'sessionHistory.settings.description',
'Search everything your agents have said and done, on this computer and on any paired Orca server.'
@@ -197,7 +197,7 @@ export function getProviderUsageErrorMessage(
case 'missing-credentials':
return t(
'accounts.claude.usageSignInMessage',
'The selected Claude account needs you to sign in again. Open Settings > AI Provider Accounts, or choose System default.'
'The selected Claude account needs you to sign in again. Open Settings > Agent accounts, or choose System default.'
)
case 'server':
case 'parse':
@@ -51,10 +51,10 @@ export function buildCapabilitySettingsSections(
},
{
id: 'accounts',
title: t('auto.hooks.useSettingsNavigationMetadata.f70ac54d38', 'AI Provider Accounts'),
title: t('auto.hooks.useSettingsNavigationMetadata.f70ac54d38', 'Agent accounts'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.b1c2f8b0ac',
'Optional account switching and usage setup for Claude, Codex, Gemini, OpenCode Go, MiniMax, and Grok.'
'Sign-ins, account switching and usage for Claude, Codex, Gemini, OpenCode Go, MiniMax, and Grok.'
),
icon: UserCog,
searchEntries: getAccountsPaneSearchEntries(),
@@ -94,7 +94,7 @@ export function buildCapabilitySettingsSections(
? [
{
id: 'computer-use',
title: t('auto.hooks.useSettingsNavigationMetadata.b35e92364b', 'Computer Use'),
title: t('auto.hooks.useSettingsNavigationMetadata.b35e92364b', 'Computer use'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.0059bd17f3',
'Enable agents to control any app on your computer.'
@@ -129,7 +129,7 @@ export function buildSetupSettingsSections(
? [
{
id: 'orca-account',
title: t('auto.components.settings.orcaAccount.title', 'Orca Account'),
title: t('auto.components.settings.orcaAccount.title', 'Orca account'),
description: t(
'auto.components.settings.orcaAccount.description',
'Share work instantly and reach your desktop from Orca Mobile wherever you are.'
@@ -66,7 +66,7 @@ export function buildInterfaceSettingsSections(
},
{
id: 'input',
title: t('auto.hooks.useSettingsNavigationMetadata.0c6ee88a5f', 'Input & Editing'),
title: t('auto.hooks.useSettingsNavigationMetadata.0c6ee88a5f', 'Input & editing'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.1f452cbd4c',
'Selection and editing behavior.'
@@ -106,7 +106,7 @@ export function buildInterfaceSettingsSections(
},
{
id: 'stats',
title: t('auto.hooks.useSettingsNavigationMetadata.d72a58b5b9', 'Stats & Usage'),
title: t('auto.hooks.useSettingsNavigationMetadata.d72a58b5b9', 'Stats & usage'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.b351014180',
'Orca stats plus Claude, Codex, OpenCode, Muse token analytics and Grok subscription usage.'
@@ -46,7 +46,7 @@ export function buildRemoteSettingsSections(
? [
{
id: 'ssh',
title: t('auto.hooks.useSettingsNavigationMetadata.94a5afe910', 'SSH Hosts'),
title: t('auto.hooks.useSettingsNavigationMetadata.94a5afe910', 'SSH hosts'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.31e57d1c70',
'Use existing machines over SSH for files, terminals, Git, and workspaces.'
@@ -59,7 +59,7 @@ export function buildRemoteSettingsSections(
: []),
{
id: 'servers',
title: t('auto.hooks.useSettingsNavigationMetadata.de0c2907a1', 'Remote Orca Servers'),
title: t('auto.hooks.useSettingsNavigationMetadata.de0c2907a1', 'Remote Orca servers'),
description: isWebClient
? 'Connect this browser to a saved Orca server.'
: 'Run Orca on another machine and work on it from here.',
@@ -71,7 +71,7 @@ export function buildRemoteSettingsSections(
? [
{
id: 'developer-permissions',
title: t('auto.hooks.useSettingsNavigationMetadata.d91ae31fbd', 'macOS Permissions'),
title: t('auto.hooks.useSettingsNavigationMetadata.d91ae31fbd', 'macOS permissions'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.65ec7d1968',
'macOS privacy access for terminal-launched developer tools.'
@@ -84,7 +84,7 @@ export function buildRemoteSettingsSections(
: []),
{
id: 'privacy',
title: t('auto.hooks.useSettingsNavigationMetadata.3618579df6', 'Privacy & Telemetry'),
title: t('auto.hooks.useSettingsNavigationMetadata.3618579df6', 'Privacy & telemetry'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.8400cfe1c1',
'Anonymous usage data and telemetry controls.'
@@ -113,7 +113,7 @@ export function buildRemoteSettingsSections(
? [
{
id: 'dev',
title: t('auto.hooks.useSettingsNavigationMetadata.dev', 'Dev Tools'),
title: t('auto.hooks.useSettingsNavigationMetadata.dev', 'Dev tools'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.devDescription',
'Dev-only tools for exercising UI states.'
@@ -59,7 +59,7 @@ export function buildWorkflowSettingsSections(
},
{
id: 'share-skills',
title: t('auto.hooks.useSettingsNavigationMetadata.shareSkillsTitle', 'Share Skills'),
title: t('auto.hooks.useSettingsNavigationMetadata.shareSkillsTitle', 'Share skills'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.shareSkillsDescription',
'Share your skills with an unlisted link. Anyone who has it can install them.'
@@ -72,7 +72,7 @@ export function buildWorkflowSettingsSections(
},
{
id: 'session-history',
title: t('sessionHistory.settings.title', 'Agent Session Search'),
title: t('sessionHistory.settings.title', 'Agent session search'),
description: t(
'sessionHistory.settings.description',
'Search everything your agents have said and done, on this computer and on any paired Orca server.'
@@ -91,7 +91,7 @@ export function buildWorkflowSettingsSections(
},
{
id: 'git',
title: t('auto.hooks.useSettingsNavigationMetadata.09607cb0fe', 'Git & Source Control'),
title: t('auto.hooks.useSettingsNavigationMetadata.09607cb0fe', 'Git & source control'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.ab4b21b58e',
'Branch naming, base refs, and Git AI Author.'
@@ -107,7 +107,7 @@ export function buildWorkflowSettingsSections(
},
{
id: 'tasks',
title: t('auto.hooks.useSettingsNavigationMetadata.85f4fd7710', 'Task Sources'),
title: t('auto.hooks.useSettingsNavigationMetadata.85f4fd7710', 'Task sources'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.tasksDescription',
'Connect providers, install the Linear skill, and choose what appears in Tasks.'
@@ -129,7 +129,7 @@ export function buildWorkflowSettingsSections(
},
{
id: 'quick-commands',
title: t('auto.hooks.useSettingsNavigationMetadata.3fc3db144f', 'Quick Commands'),
title: t('auto.hooks.useSettingsNavigationMetadata.3fc3db144f', 'Quick commands'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.42ae40842f',
'Saved terminal commands, scoped globally or per project.'
@@ -157,7 +157,7 @@ export function buildWorkflowSettingsSections(
? [
{
id: 'mobile-emulator',
title: t('auto.hooks.useSettingsNavigationMetadata.1e761cff2b', 'Mobile Emulator'),
title: t('auto.hooks.useSettingsNavigationMetadata.1e761cff2b', 'Mobile emulator'),
description: t(
'auto.hooks.useSettingsNavigationMetadata.3d65d3f1b9',
'Configure mobile emulator support for Orca and coding agents.'
@@ -170,7 +170,7 @@ export function buildWorkflowSettingsSections(
: []),
{
id: 'floating-workspace',
title: t('auto.hooks.useSettingsNavigationMetadata.65b19f5bde', 'Floating Workspace'),
title: t('auto.hooks.useSettingsNavigationMetadata.65b19f5bde', 'Floating workspace'),
description: showDesktopOnlySettings
? t(
'auto.hooks.useSettingsNavigationMetadata.2d0659f6f0',
+4 -4
View File
@@ -698,11 +698,11 @@
"hourlyWarning": "Hourly builds ship straight from main with no test gate, and the Windows ones are unsigned. Keep a stable build handy."
},
"Settings": {
"084d8fac5b": "Privacy & Security",
"23931df7e8": "Remote Hosts",
"23c6874fdf": "AI Capabilities",
"084d8fac5b": "Privacy & security",
"23931df7e8": "Remote hosts",
"23c6874fdf": "AI capabilities",
"8bd117d669": "Interface",
"9abb9be3bc": "Set Up",
"9abb9be3bc": "Set up",
"e1578cd4bc": "Workflows"
},
"SshPane": {
+31 -26
View File
@@ -1342,6 +1342,11 @@
"settings": "Settings",
"label": "Settings breadcrumb",
"close": "Close settings"
},
"agentAccounts": {
"pageDescription": "Sign-ins, account switching and usage for your agents.",
"thisComputer": "This computer",
"selectedHost": "Selected host"
}
},
"menu": {
@@ -2303,38 +2308,38 @@
"e338c507c1": "Low-level compatibility settings for troubleshooting.",
"580a04cd81": "Advanced",
"8400cfe1c1": "Anonymous usage data and telemetry controls.",
"3618579df6": "Privacy & Telemetry",
"3618579df6": "Privacy & telemetry",
"65ec7d1968": "macOS privacy access for terminal-launched developer tools.",
"d91ae31fbd": "macOS Permissions",
"d91ae31fbd": "macOS permissions",
"95a1886d94": "Control terminals and agents from your phone.",
"1cd25673df": "Mobile",
"31e57d1c70": "Use existing machines over SSH for files, terminals, Git, and workspaces.",
"94a5afe910": "SSH Hosts",
"94a5afe910": "SSH hosts",
"40d80bad8a": "Beta",
"de0c2907a1": "Remote Orca Servers",
"de0c2907a1": "Remote Orca servers",
"b351014180": "Orca stats plus Claude, Codex, OpenCode, Muse token analytics and Grok subscription usage.",
"d72a58b5b9": "Stats & Usage",
"d72a58b5b9": "Stats & usage",
"dcd0d9b74f": "Keyboard shortcuts for common actions.",
"94295ebfb3": "Shortcuts",
"7682607591": "Native desktop notifications for agent and terminal events.",
"2eece16ad1": "Notifications",
"1f452cbd4c": "Selection and editing behavior.",
"0c6ee88a5f": "Input & Editing",
"0c6ee88a5f": "Input & editing",
"b11a5a48a2": "Theme, zoom, app and terminal appearance, sidebars, and status bar.",
"93d88d20bf": "Appearance",
"2d0659f6f0": "Global terminal, browser, and markdown tabs.",
"65b19f5bde": "Floating Workspace",
"65b19f5bde": "Floating workspace",
"3d65d3f1b9": "Configure mobile emulator support for Orca and coding agents.",
"1e761cff2b": "Mobile Emulator",
"1e761cff2b": "Mobile emulator",
"e815fd01bd": "Home page, link routing, and session cookies.",
"8c197f74a1": "Browser",
"42ae40842f": "Saved terminal commands, scoped globally or per project.",
"3fc3db144f": "Quick Commands",
"3fc3db144f": "Quick commands",
"c33bfd664c": "Shells, renderer, sessions, and terminal behavior.",
"a9fb10afca": "Terminal",
"85f4fd7710": "Task Sources",
"85f4fd7710": "Task sources",
"ab4b21b58e": "Branch naming, base refs, and Git AI Author.",
"09607cb0fe": "Git & Source Control",
"09607cb0fe": "Git & source control",
"33a5e1d597": "Connect GitHub, GitLab, Linear, and source-hosting services.",
"2b043783ef": "Integrations",
"2cd4ea75da": "Workspace defaults, app setup, and maintenance.",
@@ -2348,15 +2353,15 @@
"8ac3de82f5": "Local speech-to-text dictation with on-device models.",
"6a50cdcd7c": "Voice",
"0059bd17f3": "Enable agents to control any app on your computer.",
"b35e92364b": "Computer Use",
"b35e92364b": "Computer use",
"cd50cec5d7": "Coordinate multiple coding agents through Orca.",
"58a868e8e4": "Orchestration",
"7c79d3b7bf": "Optional",
"b1c2f8b0ac": "Optional account switching and usage setup for Claude, Codex, Gemini, OpenCode Go, MiniMax, and Grok.",
"f70ac54d38": "AI Provider Accounts",
"b1c2f8b0ac": "Sign-ins, account switching and usage for Claude, Codex, Gemini, OpenCode Go, MiniMax, and Grok.",
"f70ac54d38": "Agent accounts",
"4121f7a0a2": "Manage AI agents, set a default, and customize commands.",
"b49abbd2f7": "Agents",
"dev": "Dev Tools",
"dev": "Dev tools",
"devDescription": "Dev-only tools for exercising UI states.",
"devBadge": "Dev",
"devSearchNotificationPlayground": "Notification playground",
@@ -2376,7 +2381,7 @@
"artifactsDescription": "Share HTML and Markdown files with your team and manage their public links.",
"automationsTitle": "Automations",
"automationsDescription": "Schedule agent work and choose whether Automations appears in the sidebar.",
"shareSkillsTitle": "Share Skills",
"shareSkillsTitle": "Share skills",
"shareSkillsDescription": "Share your skills with an unlisted link. Anyone who has it can install them.",
"floatingWorkspaceWebDescription": "Global terminal and markdown tabs."
},
@@ -9301,7 +9306,7 @@
"1c87f8d024": "Advanced",
"c1b43dc4e2": "Anonymous usage data and telemetry controls.",
"9b83cc62c2": "macOS privacy access for terminal-launched developer tools.",
"65660d4548": "macOS Permissions",
"65660d4548": "macOS permissions",
"c6c01ac209": "Control terminals and agents from your phone.",
"c40dadaac8": "Mobile",
"c2ee313198": "Use existing machines over SSH for files, terminals, Git, and workspaces.",
@@ -9339,12 +9344,12 @@
"acc7bbdefd": "Press ESC again to exit settings",
"43b68e10f0": "You have unsaved AI settings. Leaving will discard them.",
"17bdee4ff1": "Discard unsaved AI settings?",
"084d8fac5b": "Privacy & Security",
"23931df7e8": "Remote Hosts",
"084d8fac5b": "Privacy & security",
"23931df7e8": "Remote hosts",
"8bd117d669": "Interface",
"e1578cd4bc": "Workflows",
"9abb9be3bc": "Set Up",
"23c6874fdf": "AI Capabilities",
"9abb9be3bc": "Set up",
"23c6874fdf": "AI capabilities",
"65358016ea": "Discard",
"devDescription": "Dev-only tools for exercising UI states.",
"linearTitle": "Linear",
@@ -9358,7 +9363,7 @@
"022effa46f": "Remote Orca servers",
"d09b9d8f00": "Git & source control",
"3eac6fb97f": "Dev tools",
"4198aae333": "AI provider accounts",
"4198aae333": "Agent accounts",
"3f3e11cb5d": "Computer use",
"084f34826d": "Stats & usage",
"742ca66ea6": "Privacy & telemetry",
@@ -12746,7 +12751,7 @@
"signOut": "Sign out",
"signInAgain": "Sign in again",
"signIn": "Sign in to Orca",
"title": "Orca Account",
"title": "Orca account",
"description": "Share work instantly and reach your desktop from Orca Mobile wherever you are.",
"searchDescription": "Sign in or out of the account used by Artifacts and Orca Relay.",
"benefitsTitle": "Included with your account",
@@ -22511,7 +22516,7 @@
"cleared": "Search data cleared.",
"clearError": "Could not clear search data. Try again.",
"webUnsupported": "Turn on session search from the Orca desktop app on that computer.",
"title": "Agent Session Search",
"title": "Agent session search",
"description": "Search everything your agents have said and done, on this computer and on any paired Orca server.",
"searchDescription": "Turn on session search for this computer and paired servers, or clear search data.",
"indexComputers": "Search inside sessions",
@@ -22849,7 +22854,7 @@
"signInRequired": "Sign in again to use this account",
"signInAgain": "Sign in again",
"usageSignInLabel": "Sign in again",
"usageSignInMessage": "The selected Claude account needs you to sign in again. Open Settings > AI Provider Accounts, or choose System default.",
"usageSignInMessage": "The selected Claude account needs you to sign in again. Open Settings > Agent accounts, or choose System default.",
"signIn": "Sign in",
"moreSignInOptions": "More sign-in options",
"copySignInLink": "Copy sign-in link instead",
@@ -22858,7 +22863,7 @@
"switchSessions": {
"title": "Switched to {{account}}",
"dontAskAgain": "Don't ask again (restart automatically)",
"dontAskAgainHint": "You can turn this off in Settings → AI Provider Accounts.",
"dontAskAgainHint": "You can turn this off in Settings → Agent accounts.",
"keep": "Keep as is",
"restartOne": "Restart session",
"listLabel": "Claude sessions to restart",
@@ -28,5 +28,5 @@ export function hostAccountLaunchEnvFor(
}
export function hostAccountsManagedByDesktopMessage(wslDistro: string): string {
return `Accounts for this WSL host are managed in the Orca desktop app: Settings → AI Provider Accounts, with the ${wslDistro} (WSL) host selected.`
return `Accounts for this WSL host are managed in the Orca desktop app: Settings → Agent accounts, with the ${wslDistro} (WSL) host selected.`
}
+1 -1
View File
@@ -369,7 +369,7 @@ export type GlobalSettings = GlobalSettingsBase & {
minimaxUsageModels: string
/** MiniMax account region; defaults to overseas for existing users. */
minimaxEndpoint: MiniMaxEndpoint
/** GLM Coding Plan site whose API key is saved in AI Provider Accounts; defaults to the international Z.AI console. */
/** GLM Coding Plan site whose API key is saved in Agent accounts; defaults to the international Z.AI console. */
zcodePlanSite?: ZcodePlanSite
/** Extract OAuth credentials from the local Gemini CLI for rate-limit fetching. Off by default (explicit opt-in). */
geminiCliOAuthEnabled: boolean
+2 -2
View File
@@ -76,8 +76,8 @@ async function openSshHostSettings(page: Page): Promise<void> {
await dismissTransientAnnouncement(page)
const sshSection = page.locator('[data-settings-section="ssh"]')
await expect(sshSection).toBeVisible({ timeout: 10_000 })
// Why: section chrome uses "SSH Hosts"; the pane body catalog string is "Targets".
await expect(sshSection.getByRole('heading', { name: 'SSH Hosts' })).toBeVisible()
// Why: section chrome uses "SSH hosts"; the pane body catalog string is "Targets".
await expect(sshSection.getByRole('heading', { name: 'SSH hosts' })).toBeVisible()
await expect(sshSection.getByRole('button', { name: 'Add host' })).toBeVisible({
timeout: 10_000
})