Files
openchamber/packages/ui/src/lib/i18n/messages/en.settings.ts
T
yangyaofeiandBohdan Triapitsyn ba95e13b36 feat(tts): add TTS buttons to PlanView and FilesView markdown preview with configurable input mode (#1443)
Add TTS controls to markdown preview surfaces so users can listen to plans
and markdown files directly from the preview toolbar.

Changes:
- Add read-aloud / stop buttons to PlanView markdown preview.
- Add read-aloud / stop buttons to FilesView markdown preview for markdown files.
- Respect the existing showMessageTTSButtons preference in both preview views.
- Add a persisted ttsInputMode setting with sanitized/raw modes.
- Keep sanitized mode as the default for backward compatibility.
- Allow raw markdown only for server TTS providers that can handle markdown.
- Always use sanitized text for browser and macOS say fallback paths.
- Add Voice Settings controls for TTS input mode.
- Add i18n keys for the new preview buttons and setting labels.
- Merge latest main and preserve newer FilesView toolbar/editor changes.

Validation:
- bun test packages/ui/src/stores/useConfigStore.test.ts packages/ui/src/components/chat/message/parts/ToolPart.test.ts packages/web/server/lib/tts/routes.test.js
- bun run type-check
- bun run lint
- git diff --check

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-06-08 19:31:21 +03:00

1769 lines
142 KiB
TypeScript

export const settingsDict = {
'settings.appearance.language.label': 'Language',
'settings.appearance.language.description': 'Choose the interface language.',
'settings.appearance.language.select': 'Select language',
'settings.window.description': 'OpenChamber settings window.',
'settings.view.home.title': 'Settings',
'settings.view.home.description': 'Jump to common pages.',
'settings.view.home.cards.providers.title': 'Providers',
'settings.view.home.cards.providers.description': 'Connect models + credentials',
'settings.view.home.cards.agents.title': 'Agents',
'settings.view.home.cards.agents.description': 'Prompts, tools, permissions',
'settings.view.home.cards.skillsCatalog.title': 'Skills Catalog',
'settings.view.home.cards.skillsCatalog.description': 'Install skills from catalogs',
'settings.view.home.cards.mcp.title': 'MCP',
'settings.view.home.cards.mcp.description': 'Configure MCP servers + connections',
'settings.view.home.cards.plugins.title': 'Plugins',
'settings.view.home.cards.plugins.description': 'Manage opencode plugins',
'settings.view.home.cards.usage.title': 'Usage',
'settings.view.home.cards.usage.description': 'Quota + spend visibility',
'settings.view.unavailable.title': 'Not available',
'settings.view.unavailable.description': 'This settings page is not available in this runtime.',
'settings.view.badge.beta': 'beta',
'settings.view.actions.reloadOpenCode': 'Reload OpenCode',
'settings.view.actions.reloadOpenCodeTooltip': 'Restart OpenCode and reload its configuration.',
'settings.view.actions.backToSettings': 'Back to Settings',
'settings.view.actions.closeSettings': 'Close settings',
'settings.view.actions.openSectionList': 'Open section list',
'settings.view.actions.closeSettingsWithShortcut': 'Close Settings ({shortcut}+,)',
'settings.view.actions.back': 'Back',
'settings.view.actions.resizeNavigation': 'Resize settings navigation',
'settings.page.projects.title': 'Projects',
'settings.page.remoteInstances.title': 'Remote Instances',
'settings.page.providers.title': 'Providers',
'settings.page.usage.title': 'Usage',
'settings.page.agents.title': 'Agents',
'settings.page.commands.title': 'Commands',
'settings.page.mcp.title': 'MCP',
'settings.page.plugins.title': 'Plugins',
'settings.page.skills.title': 'Skills',
'settings.page.skillsCatalog.title': 'Skills Catalog',
'settings.page.git.title': 'Git',
'settings.page.appearance.title': 'Appearance',
'settings.page.chat.title': 'Chat',
'settings.page.shortcuts.title': 'Shortcuts',
'settings.page.sessions.title': 'Sessions',
'settings.page.magicPrompts.title': 'Magic Prompts',
'settings.page.notifications.title': 'Notifications',
'settings.page.voice.title': 'Voice',
'settings.page.tunnel.title': 'Remote Tunnel',
'settings.page.snippets.title': 'Snippets',
'settings.snippets.sidebar.title': 'Snippets',
'settings.snippets.sidebar.total': 'Total: {count}',
'settings.snippets.sidebar.actions.create': 'Create snippet',
'settings.snippets.sidebar.actions.more': 'More actions for {name}',
'settings.snippets.sidebar.toast.deleted': 'Snippet deleted',
'settings.snippets.sidebar.toast.deleteFailed': 'Failed to delete snippet',
'settings.snippets.sidebar.dialog.deleteTitle': 'Delete snippet?',
'settings.snippets.sidebar.dialog.deleteDescription': 'This will permanently delete #{name}.',
'settings.snippets.page.empty.title': 'Select a snippet',
'settings.snippets.page.empty.description': 'Choose a snippet from the sidebar to edit it.',
'settings.snippets.page.title.new': 'New snippet',
'settings.snippets.page.field.namePlaceholder': 'snippet-name',
'settings.snippets.page.field.descriptionPlaceholder': 'What this snippet does',
'settings.snippets.page.field.aliases': 'Aliases',
'settings.snippets.page.field.aliasesPlaceholder': 'safe, careful',
'settings.snippets.page.field.content': 'Content',
'settings.snippets.page.field.contentPlaceholder': 'Snippet markdown...',
'settings.snippets.page.hint': 'Use #name in prompts. Supports aliases and prepend/append blocks compatible with opencode-snippets.',
'settings.snippets.page.toast.nameRequired': 'Snippet name is required',
'settings.snippets.page.toast.contentRequired': 'Snippet content is required',
'settings.snippets.page.toast.saveFailed': 'Failed to save snippet',
'settings.snippets.page.toast.saved': 'Snippet saved',
'settings.page.promptTemplates.title': 'Prompt Templates',
'settings.promptTemplates.sidebar.title': 'Prompt Templates',
'settings.promptTemplates.sidebar.total': 'Total: {count}',
'settings.promptTemplates.sidebar.empty.title': 'No prompt templates',
'settings.promptTemplates.sidebar.empty.description': 'Create a prompt template to get started.',
'settings.promptTemplates.sidebar.toast.deleted': 'Template "{name}" deleted',
'settings.promptTemplates.sidebar.toast.deleteFailed': 'Failed to delete template',
'settings.promptTemplates.sidebar.toast.nameRequired': 'Template name is required',
'settings.promptTemplates.sidebar.toast.renamed': 'Template renamed',
'settings.promptTemplates.sidebar.toast.renameFailed': 'Failed to rename template',
'settings.promptTemplates.sidebar.dialog.deleteTitle': 'Delete template?',
'settings.promptTemplates.sidebar.dialog.deleteDescription': 'This will permanently delete "{name}". This action cannot be undone.',
'settings.promptTemplates.sidebar.renameDialog.title': 'Rename template',
'settings.promptTemplates.sidebar.renameDialog.description': 'Enter a new name for "{name}".',
'settings.promptTemplates.sidebar.renameDialog.placeholder': 'Template name',
'settings.promptTemplates.sidebar.badge.default': 'default',
'settings.promptTemplates.page.empty.title': 'Select a template',
'settings.promptTemplates.page.empty.description': 'Choose a template from the sidebar to edit it.',
'settings.promptTemplates.page.title.new': 'New template',
'settings.promptTemplates.page.subtitle.edit': 'Edit template',
'settings.promptTemplates.page.subtitle.new': 'Create a new prompt template',
'settings.promptTemplates.page.section.identity': 'Identity',
'settings.promptTemplates.page.field.name': 'Name',
'settings.promptTemplates.page.field.namePlaceholder': 'Template name',
'settings.promptTemplates.page.section.template': 'Template',
'settings.promptTemplates.page.field.templatePlaceholder': 'Enter the prompt template text...',
'settings.promptTemplates.page.templateHint': 'This text will be prepended to the user\'s prompt when selected in a multi-run group.',
'settings.promptTemplates.page.toast.nameRequired': 'Template name is required',
'settings.promptTemplates.page.toast.updated': 'Template updated',
'settings.promptTemplates.page.toast.updateFailed': 'Failed to update template',
'settings.promptTemplates.page.toast.created': 'Template created',
'settings.promptTemplates.page.toast.createFailed': 'Failed to create template',
'settings.promptTemplates.page.toast.saveUnexpectedError': 'An unexpected error occurred while saving',
'settings.openchamber.tunnel.title': 'Remote Tunnel',
'settings.openchamber.tunnel.description': 'Configure secure remote access with quick links or your own managed remote Cloudflare tunnel.',
'settings.openchamber.tunnel.note.serverSideEnforced': 'Secure tunnel access is enforced server-side.',
'settings.openchamber.tunnel.note.connectLinksOneTime': 'Connect links are one-time and are revoked when tunnel stops or connect-link TTL expires.',
'settings.openchamber.tunnel.note.cloudflareConnectorTarget': 'Cloudflare connector target:',
'settings.openchamber.tunnel.note.cloudflareConnectorTargetUse': 'For Cloudflare connector target, use',
'settings.openchamber.tunnel.note.tokensSavedPerTunnel': 'Tokens are saved per tunnel and reused from disk.',
'settings.openchamber.tunnel.note.customConfigUsed': 'Custom config file will be used when starting the tunnel.',
'settings.openchamber.tunnel.note.defaultConfigUsed': 'When empty, cloudflared uses its default config (~/.cloudflared/config.yml).',
'settings.openchamber.tunnel.note.managedRemoteRequiresDomain': 'Managed remote tunnels require a purchased domain in your Cloudflare account.',
'settings.openchamber.tunnel.note.managedLocalUsesConfig': 'Managed local tunnels use your local cloudflared configuration file.',
'settings.openchamber.tunnel.note.startModeAndGenerateLink': 'Start a {mode} tunnel and generate a one-time connect link. Do not close the app while this tunnel is in use.',
'settings.openchamber.tunnel.note.scanQrToConnect': 'Scan with your phone to connect.',
'settings.openchamber.tunnel.section.redeemedAccessLinks': 'Redeemed access links',
'settings.openchamber.tunnel.section.savedManagedRemoteTunnels': 'Saved managed remote tunnels',
'settings.openchamber.tunnel.notAvailable.cloudflaredNotFound': 'cloudflared not found',
'settings.openchamber.tunnel.notAvailable.dependencyNotFound': '{dependency} was not found.',
'settings.openchamber.tunnel.notAvailable.installHint': 'Install it to enable remote tunnel access:',
'settings.openchamber.tunnel.field.provider': 'Provider',
'settings.openchamber.tunnel.field.providerPlaceholder': 'Select provider',
'settings.openchamber.tunnel.field.tunnelType': 'Tunnel type',
'settings.openchamber.tunnel.field.connectLinkTtl': 'Connect link TTL',
'settings.openchamber.tunnel.field.tunnelSessionTtl': 'Tunnel session TTL',
'settings.openchamber.tunnel.field.hostnameLabel': 'Hostname:',
'settings.openchamber.tunnel.field.savedTokenAvailablePlaceholder': 'Saved token available (optional to replace)',
'settings.openchamber.tunnel.field.pasteTokenPlaceholder': 'Paste token for this tunnel',
'settings.openchamber.tunnel.field.newPresetNamePlaceholder': 'Tunnel name (e.g. Production)',
'settings.openchamber.tunnel.field.newPresetHostnamePlaceholder': 'Hostname (e.g. oc.example.com)',
'settings.openchamber.tunnel.field.newPresetTokenPlaceholder': 'Token',
'settings.openchamber.tunnel.field.managedRemoteTokenInfoAria': 'Managed remote tunnel token info',
'settings.openchamber.tunnel.field.configurationFile': 'Configuration file',
'settings.openchamber.tunnel.field.configurationFilePlaceholder': 'Using default cloudflared config',
'settings.openchamber.tunnel.field.managedRemoteTunnelToConnect': 'Managed remote tunnel to connect',
'settings.openchamber.tunnel.field.selectSavedTunnelPlaceholder': 'Select saved tunnel',
'settings.openchamber.tunnel.field.publicUrlHint': 'Public URL (not accessible without a token)',
'settings.openchamber.tunnel.field.connectLink': 'Connect link',
'settings.openchamber.tunnel.field.expires': 'Expires',
'settings.openchamber.tunnel.field.connectQrAlt': 'Tunnel connect QR code',
'settings.openchamber.tunnel.actions.removePresetAria': 'Remove {name}',
'settings.openchamber.tunnel.actions.saveToken': 'Save token',
'settings.openchamber.tunnel.actions.browseConfigFileAria': 'Browse config file',
'settings.openchamber.tunnel.actions.clearConfigFileAria': 'Clear config file',
'settings.openchamber.tunnel.actions.openManagedRemoteDocs': 'Check documentation on how to configure a managed remote tunnel',
'settings.openchamber.tunnel.actions.openManagedLocalDocs': 'Check documentation on managed local tunnel configuration',
'settings.openchamber.tunnel.actions.startTunnel': 'Start Tunnel',
'settings.openchamber.tunnel.actions.startingTunnel': 'Starting tunnel...',
'settings.openchamber.tunnel.actions.stopTunnel': 'Stop Tunnel',
'settings.openchamber.tunnel.actions.stopping': 'Stopping...',
'settings.openchamber.tunnel.actions.newConnectLink': 'New connect link',
'settings.openchamber.tunnel.actions.copied': 'Copied',
'settings.openchamber.tunnel.actions.retry': 'Retry',
'settings.openchamber.tunnel.option.moreProvidersSoon': 'More providers coming soon',
'settings.openchamber.tunnel.option.mode.quick.label': 'Quick',
'settings.openchamber.tunnel.option.mode.quick.tooltip': 'Quick Tunnel is best effort and uptime is not guaranteed.',
'settings.openchamber.tunnel.option.mode.managedRemote.label': 'Managed Remote',
'settings.openchamber.tunnel.option.mode.managedRemote.tooltip': 'Managed Remote uses your Cloudflare account and hostname for long-lived access.',
'settings.openchamber.tunnel.option.mode.managedLocal.label': 'Managed Local',
'settings.openchamber.tunnel.option.mode.managedLocal.tooltip': 'Managed Local uses your local cloudflared configuration file.',
'settings.openchamber.tunnel.warning.quickModeReliability': 'For more reliable long-lived access, switch to Managed Remote or Managed Local tunnel mode.',
'settings.openchamber.tunnel.warning.replacesActiveTunnel': 'Starting this tunnel replaces the active tunnel and revokes existing connect links and remote sessions.',
'settings.openchamber.tunnel.badge.quick': 'QUICK',
'settings.openchamber.tunnel.badge.remote': 'REMOTE',
'settings.openchamber.tunnel.badge.local': 'LOCAL',
'settings.openchamber.tunnel.state.loading': 'Loading',
'settings.openchamber.tunnel.state.expired': 'Expired',
'settings.openchamber.tunnel.state.revoked': 'Revoked',
'settings.openchamber.tunnel.state.inactive': 'Inactive',
'settings.openchamber.tunnel.state.noExpiry': 'No expiry',
'settings.openchamber.tunnel.state.never': 'Never',
'settings.openchamber.tunnel.state.tunnelReady': 'Tunnel ready',
'settings.openchamber.tunnel.session.redeemedAt': 'Redeemed {time}',
'settings.openchamber.tunnel.session.expiresIn': 'Expires in {remaining}',
'settings.openchamber.tunnel.session.inactiveWithReason': 'Inactive ({reason})',
'settings.openchamber.tunnel.error.invalidConfigExtension': 'Config file must use .yml, .yaml, or .json extension.',
'settings.openchamber.tunnel.tooltip.tokensSavedPath': 'Tokens are saved in ~/.config/openchamber/cloudflare-managed-remote-tunnels.json.',
'settings.openchamber.tunnel.empty.noManagedRemoteTunnels': 'No managed remote tunnels saved yet.',
'settings.openchamber.tunnel.toast.checkAvailabilityFailed': 'Failed to check tunnel availability',
'settings.openchamber.tunnel.toast.saveSettingsFailed': 'Failed to save tunnel settings',
'settings.openchamber.tunnel.toast.saveTtlFailed': 'Failed to save tunnel TTL settings',
'settings.openchamber.tunnel.toast.saveTokenFailed': 'Failed to save managed remote tunnel token',
'settings.openchamber.tunnel.toast.selectOrAddManagedRemoteFirst': 'Select or add a managed remote tunnel first',
'settings.openchamber.tunnel.toast.managedRemoteTokenRequiredBeforeStarting': 'Managed remote tunnel token is required before starting',
'settings.openchamber.tunnel.toast.addManagedRemoteTokenBeforeStarting': 'Add a managed remote tunnel token before starting',
'settings.openchamber.tunnel.toast.startFailed': 'Failed to start tunnel',
'settings.openchamber.tunnel.toast.startedButNoPublicUrl': 'Tunnel started but no public URL was returned',
'settings.openchamber.tunnel.toast.replacedTunnelSingleSingle': 'Replaced previous tunnel: revoked 1 link, invalidated 1 session.',
'settings.openchamber.tunnel.toast.replacedTunnelSingleManySessions': 'Replaced previous tunnel: revoked 1 link, invalidated {invalidatedSessionCount} sessions.',
'settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession': 'Replaced previous tunnel: revoked {revokedBootstrapCount} links, invalidated 1 session.',
'settings.openchamber.tunnel.toast.replacedTunnelManyMany': 'Replaced previous tunnel: revoked {revokedBootstrapCount} links, invalidated {invalidatedSessionCount} sessions.',
'settings.openchamber.tunnel.toast.linkReady': 'Tunnel link ready',
'settings.openchamber.tunnel.toast.stopped': 'Tunnel stopped',
'settings.openchamber.tunnel.toast.stopFailed': 'Failed to stop tunnel',
'settings.openchamber.tunnel.toast.connectLinkCopied': 'Connect link copied',
'settings.openchamber.tunnel.toast.copyUrlFailed': 'Failed to copy URL',
'settings.openchamber.tunnel.toast.saveSelectedManagedRemoteFailed': 'Failed to save selected managed remote tunnel',
'settings.openchamber.tunnel.toast.tunnelNameRequired': 'Tunnel name is required',
'settings.openchamber.tunnel.toast.managedRemoteHostnameRequired': 'Managed remote tunnel hostname is required',
'settings.openchamber.tunnel.toast.managedRemoteTokenRequired': 'Managed remote tunnel token is required',
'settings.openchamber.tunnel.toast.hostnameAlreadyExists': 'This hostname already exists',
'settings.openchamber.tunnel.toast.managedRemoteSaved': 'Managed remote tunnel saved',
'settings.openchamber.tunnel.toast.managedRemoteRemoved': 'Managed remote tunnel removed',
'settings.magicPrompts.sidebar.title': 'Magic Prompts',
'settings.magicPrompts.sidebar.description': 'Select a prompt template to edit.',
'settings.magicPrompts.sidebar.group.git': 'Git',
'settings.magicPrompts.sidebar.group.github': 'GitHub',
'settings.magicPrompts.sidebar.group.planning': 'Planning',
'settings.magicPrompts.sidebar.group.session': 'Session',
'settings.magicPrompts.sidebar.item.gitCommitGenerate': 'Commit Generation',
'settings.magicPrompts.sidebar.item.gitPrGenerate': 'PR Generation',
'settings.magicPrompts.sidebar.item.gitConflictResolve': 'Merge/Rebase Conflict Resolution',
'settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve': 'Cherry-pick Conflict Resolution',
'settings.magicPrompts.sidebar.item.githubPrReview': 'PR Review',
'settings.magicPrompts.sidebar.item.githubIssueReview': 'Issue Review',
'settings.magicPrompts.sidebar.item.githubPrFailedChecksReview': 'PR Failed Checks Review',
'settings.magicPrompts.sidebar.item.githubPrCommentsReview': 'PR Comments Review',
'settings.magicPrompts.sidebar.item.githubSinglePrCommentReview': 'Single PR Comment Review',
'settings.magicPrompts.sidebar.item.planTodo': 'Todo Planning',
'settings.magicPrompts.sidebar.item.planImprove': 'Improve Plan',
'settings.magicPrompts.sidebar.item.planImplement': 'Implement Plan',
'settings.magicPrompts.sidebar.item.sessionSummary': 'Session Summary',
'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': 'Workspace Review',
'settings.magicPrompts.sidebar.item.sessionExplore': 'Codebase Tour',
'settings.magicPrompts.sidebar.item.sessionFeaturePlan': 'Feature Planning',
'settings.magicPrompts.sidebar.item.sessionCatchUp': 'Catch Up',
'settings.magicPrompts.sidebar.item.sessionDebug': 'Debugging',
'settings.magicPrompts.sidebar.item.sessionWeigh': 'Weigh Options',
'settings.magicPrompts.sidebar.item.sessionFusion': 'Fusion',
'settings.remoteInstances.sidebar.title': 'Remote Instances',
'settings.remoteInstances.sidebar.total': 'Total {count}',
'settings.remoteInstances.sidebar.newSshInstanceName': 'New SSH connection',
'settings.remoteInstances.sidebar.actions.addSshInstance': 'Add SSH connection',
'settings.remoteInstances.sidebar.actions.connect': 'Connect',
'settings.remoteInstances.sidebar.actions.disconnect': 'Disconnect',
'settings.remoteInstances.sidebar.actions.retry': 'Retry',
'settings.remoteInstances.sidebar.actions.remove': 'Remove',
'settings.remoteInstances.sidebar.confirm.localPortInUseRetry': 'Local port is already in use. Pick a random free local port and retry?',
'settings.remoteInstances.sidebar.toast.createFailed': 'Failed to create SSH connection',
'settings.remoteInstances.sidebar.toast.retriedWithRandomPort': 'Retried with a random local port',
'settings.remoteInstances.sidebar.toast.connectFailed': 'Failed to connect instance',
'settings.remoteInstances.sidebar.toast.disconnectFailed': 'Failed to disconnect instance',
'settings.remoteInstances.sidebar.toast.retryFailed': 'Failed to retry connection',
'settings.remoteInstances.sidebar.toast.removeFailed': 'Failed to remove instance',
'settings.remoteInstances.direct.sidebarTitle': 'Server links',
'settings.remoteInstances.direct.sidebarDescription': 'Connect with a link or token',
'settings.remoteInstances.direct.title': 'Other OpenChamber servers',
'settings.remoteInstances.direct.description': 'Add another OpenChamber server by URL. Use this when the server is already running and you have a connection token.',
'settings.remoteInstances.direct.field.labelPlaceholder': 'Label (optional)',
'settings.remoteInstances.direct.field.urlPlaceholder': 'https://host:port',
'settings.remoteInstances.direct.field.tokenPlaceholder': 'Connection token (optional for trusted local servers)',
'settings.remoteInstances.direct.note': 'Connection tokens are saved on this device and used only when this app connects to that server.',
'settings.remoteInstances.direct.actions.add': 'Add Server',
'settings.remoteInstances.direct.import.description': 'Paste a connection link from another OpenChamber server.',
'settings.remoteInstances.direct.import.placeholder': 'openchamber://connect?...',
'settings.remoteInstances.direct.import.action': 'Import Link',
'settings.remoteInstances.direct.error.invalidConnectLink': 'Invalid OpenChamber connection link.',
'settings.remoteInstances.direct.state.loading': 'Loading instances...',
'settings.remoteInstances.direct.state.empty': 'No other servers added yet.',
'settings.remoteInstances.clientAuth.title': 'Connect to this server',
'settings.remoteInstances.clientAuth.description': 'Create a secure link or token so OpenChamber Desktop can connect to this server.',
'settings.remoteInstances.clientAuth.field.labelPlaceholder': 'Device name (optional)',
'settings.remoteInstances.clientAuth.actions.create': 'Create Token',
'settings.remoteInstances.clientAuth.actions.pair': 'Create Link',
'settings.remoteInstances.clientAuth.actions.revoke': 'Revoke',
'settings.remoteInstances.clientAuth.actions.clearRevoked': 'Clear revoked',
'settings.remoteInstances.clientAuth.qrAlt': 'OpenChamber connection QR code',
'settings.remoteInstances.clientAuth.pairingUrl': 'Connection link',
'settings.remoteInstances.clientAuth.createdToken': 'Copy this token now. For security, it will not be shown again.',
'settings.remoteInstances.clientAuth.state.loading': 'Loading tokens...',
'settings.remoteInstances.clientAuth.state.empty': 'No devices connected yet.',
'settings.remoteInstances.clientAuth.state.revoked': 'Revoked',
'settings.remoteInstances.clientAuth.state.thisDevice': 'This device',
'settings.remoteInstances.clientAuth.lastUsed': 'Last used {date}',
'settings.remoteInstances.clientAuth.neverUsed': 'Never used',
'settings.remoteInstances.sidebar.phase.ready': 'Ready',
'settings.remoteInstances.sidebar.phase.error': 'Error',
'settings.remoteInstances.sidebar.phase.reconnect': 'Reconnect',
'settings.remoteInstances.sidebar.phase.installing': 'Installing',
'settings.remoteInstances.sidebar.phase.updating': 'Updating',
'settings.remoteInstances.sidebar.phase.forwarding': 'Forwarding',
'settings.remoteInstances.sidebar.phase.starting': 'Starting',
'settings.remoteInstances.sidebar.phase.connecting': 'Connecting',
'settings.remoteInstances.sidebar.phase.idle': 'Idle',
'settings.remoteInstances.page.section.instance': 'Instance',
'settings.remoteInstances.page.section.instanceDescription': 'Choose the SSH command and a display name for this connection.',
'settings.remoteInstances.page.field.mode': 'Mode',
'settings.remoteInstances.page.field.modeHint': 'Choose whether OpenChamber should start the server for you, or connect to one that is already running.',
'settings.remoteInstances.page.field.modePlaceholder': 'Select mode',
'settings.remoteInstances.page.field.modeManaged': 'Start it for me',
'settings.remoteInstances.page.field.modeExternal': 'Already running',
'settings.remoteInstances.page.field.preferredRemotePort': 'Preferred remote port',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port to use on the remote machine. Leave empty to choose one automatically.',
'settings.remoteInstances.page.field.keepServerRunning': 'Keep server running',
'settings.remoteInstances.page.field.keepServerRunningHint': 'Keep OpenChamber running on the remote machine after you disconnect.',
'settings.remoteInstances.page.field.bindHost': 'Bind host',
'settings.remoteInstances.page.field.bindHostHint': 'Where the local connection should listen. Use 127.0.0.1 or localhost unless you need LAN access.',
'settings.remoteInstances.page.field.preferredLocalPort': 'Preferred local port',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Local port to open for this connection. Leave empty to choose one automatically.',
'settings.remoteInstances.page.field.forwardType': 'Forward type',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.auto': 'Auto',
'settings.remoteInstances.page.confirm.bindAllInterfaces': 'Binding to 0.0.0.0 exposes forwarded ports to your local network. Continue?',
'settings.remoteInstances.page.preview.localSocks5': '(local SOCKS5)',
'settings.remoteInstances.page.preview.local': '(local)',
'settings.remoteInstances.page.preview.remote': '(remote)',
'settings.remoteInstances.page.toast.openLocalEndpointFailed': 'Failed to open local address',
'settings.remoteInstances.page.toast.localUrlCopied': 'Local URL copied',
'settings.remoteInstances.page.actions.copyLocalUrl': 'Copy local URL',
'settings.remoteInstances.page.actions.open': 'Open',
'settings.remoteInstances.page.logsDialog.selectedInstanceFallback': 'Selected instance',
'settings.remoteInstances.page.patternDialog.descriptionWithHost': '{host} requires a concrete destination.',
'settings.remoteInstances.page.patternDialog.description': 'Enter destination.',
'settings.common.actions.cancel': 'Cancel',
'settings.common.actions.create': 'Create',
'settings.common.actions.delete': 'Delete',
'settings.common.actions.reset': 'Reset',
'settings.common.actions.rename': 'Rename',
'settings.common.actions.duplicate': 'Duplicate',
'settings.common.actions.import': 'Import',
'settings.common.actions.copyAll': 'Copy all',
'settings.common.actions.clear': 'Clear',
'settings.common.actions.saving': 'Saving...',
'settings.common.actions.saveChanges': 'Save Changes',
'settings.common.scope.global': 'Global',
'settings.common.scope.project': 'Project',
'settings.common.field.description': 'Description',
'settings.common.badge.new': 'New',
'settings.common.badge.modified': 'Modified',
'settings.common.permission.allow': 'Allow',
'settings.common.permission.ask': 'Ask',
'settings.common.permission.deny': 'Deny',
'settings.common.state.comingSoon': 'Coming soon...',
'settings.projects.actions.title': 'Actions',
'settings.projects.actions.description': 'Per-project commands shown in header next to project name.',
'settings.projects.actions.validation.fillNameAndCommand': 'Fill action name and command before saving.',
'settings.projects.actions.state.loading': 'Loading...',
'settings.projects.actions.state.empty': 'No actions configured yet.',
'settings.projects.actions.state.untitled': 'Untitled action',
'settings.projects.actions.state.noDesktopSshForwards': 'No enabled local SSH forwards available.',
'settings.projects.actions.field.selectIconAria': 'Select icon',
'settings.projects.actions.field.iconAria': 'Icon {icon}',
'settings.projects.actions.field.actionNamePlaceholder': 'Action name',
'settings.projects.actions.field.command': 'Command',
'settings.projects.actions.field.commandPlaceholder': 'e.g. bun run lint',
'settings.projects.actions.field.autoOpenUrl': 'Auto-open URL',
'settings.projects.actions.field.autoOpenUrlForAria': 'Auto-open URL for {title}',
'settings.projects.actions.field.autoOpenUrlDescription': 'Open URL from output or custom URL below',
'settings.projects.actions.field.overrideUrlPlaceholder': 'Override URL (optional)',
'settings.projects.actions.field.overrideUrlTooltip': 'If this field is filled, custom URL is used. If empty, app opens best URL from output.',
'settings.projects.actions.field.desktopSshForward': 'Desktop SSH forward',
'settings.projects.actions.field.useOutputManualUrl': 'Use output/manual URL',
'settings.projects.actions.actions.add': 'Add action',
'settings.projects.actions.actions.save': 'Save Actions',
'settings.projects.actions.toast.saveFailed': 'Failed to save actions',
'settings.projects.actions.toast.saved': 'Project actions saved',
'settings.openchamber.about.title': 'About OpenChamber',
'settings.openchamber.about.field.version': 'Version',
'settings.openchamber.about.field.openCodeVersion': 'OpenCode version',
'settings.openchamber.about.state.checking': 'Checking...',
'settings.openchamber.about.state.upToDate': 'Up to date',
'settings.openchamber.about.state.unknown': 'unknown',
'settings.openchamber.about.actions.checkUpdates': 'Check updates',
'settings.openchamber.about.actions.update': 'Update',
'settings.openchamber.about.actions.updateToVersion': 'Update to {version}',
'settings.openchamber.about.actions.checkForUpdates': 'Check for updates',
'settings.openchamber.about.toast.latestVersion': 'You are on the latest version',
'settings.agents.sidebar.title': 'Agents',
'settings.agents.sidebar.total': 'Total {count}',
'settings.agents.sidebar.empty.title': 'No agents configured',
'settings.agents.sidebar.empty.description': 'Use the + button above to create one',
'settings.agents.sidebar.section.builtIn': 'Built-in Agents',
'settings.agents.sidebar.section.custom': 'Custom Agents',
'settings.agents.sidebar.badge.system': 'system',
'settings.agents.sidebar.dialog.deleteTitle': 'Delete Agent',
'settings.agents.sidebar.dialog.resetTitle': 'Reset Agent',
'settings.agents.sidebar.dialog.deleteDescription': 'Are you sure you want to delete agent "{name}"?',
'settings.agents.sidebar.dialog.resetDescription': 'Are you sure you want to reset agent "{name}" to its default configuration?',
'settings.agents.sidebar.renameDialog.title': 'Rename Agent',
'settings.agents.sidebar.renameDialog.description': 'Enter a new name for the agent "@{name}"',
'settings.agents.sidebar.renameDialog.placeholder': 'New agent name...',
'settings.agents.sidebar.toast.builtInCannotDelete': 'Built-in agents cannot be deleted',
'settings.agents.sidebar.toast.agentDeleted': 'Agent "{name}" deleted successfully',
'settings.agents.sidebar.toast.agentReset': 'Agent "{name}" reset to default',
'settings.agents.sidebar.toast.deleteFailed': 'Failed to delete agent',
'settings.agents.sidebar.toast.resetFailed': 'Failed to reset agent',
'settings.agents.sidebar.toast.agentNameRequired': 'Agent name is required',
'settings.agents.sidebar.toast.agentExists': 'An agent with this name already exists',
'settings.agents.sidebar.toast.removeOldAfterRenameFailed': 'Failed to remove old agent after rename',
'settings.agents.sidebar.toast.renameFailed': 'Failed to rename agent',
'settings.agents.page.toast.permissionNameRequired': 'Permission name is required',
'settings.agents.page.toast.created': 'Agent created successfully',
'settings.agents.page.toast.updated': 'Agent updated successfully',
'settings.agents.page.toast.createFailed': 'Failed to create agent',
'settings.agents.page.toast.updateFailed': 'Failed to update agent',
'settings.agents.page.toast.saveUnexpectedError': 'An error occurred while saving',
'settings.agents.page.empty.title': 'Select an agent from the sidebar',
'settings.agents.page.empty.description': 'or create a new one',
'settings.agents.page.title.new': 'New Agent',
'settings.agents.page.subtitle.new': 'Configure a new assistant persona',
'settings.agents.page.subtitle.edit': 'Edit agent settings',
'settings.agents.page.section.identityRole': 'Identity & Role',
'settings.agents.page.section.modelParameters': 'Model & Parameters',
'settings.agents.page.section.systemPrompt': 'System Prompt',
'settings.agents.page.section.toolPermissions': 'Tool Permissions',
'settings.agents.page.field.agentName': 'Agent Name',
'settings.agents.page.field.agentNamePlaceholder': 'agent-name',
'settings.agents.page.field.scopePlaceholder': 'Scope',
'settings.agents.page.field.descriptionPlaceholder': 'What does this agent do?',
'settings.agents.page.field.mode': 'Mode',
'settings.agents.page.field.modeTooltip': 'Primary vs Subagent visibility',
'settings.agents.page.field.overrideModel': 'Override Model',
'settings.agents.page.field.temperature': 'Temperature',
'settings.agents.page.field.temperatureTooltip': 'Controls randomness. Higher = creative, Lower = focused.',
'settings.agents.page.field.temperatureRange': '0.0 to 2.0',
'settings.agents.page.field.clearTemperatureAria': 'Clear temperature override',
'settings.agents.page.field.topP': 'Top P',
'settings.agents.page.field.topPTooltip': 'Nucleus sampling diversity. Lower = likely tokens only.',
'settings.agents.page.field.topPRange': '0.0 to 1.0',
'settings.agents.page.field.clearTopPAria': 'Clear top p override',
'settings.agents.page.field.systemPromptPlaceholder': 'You are an expert coding assistant...',
'settings.agents.page.mode.primary': 'Primary',
'settings.agents.page.mode.subagent': 'Subagent',
'settings.agents.page.mode.all': 'All',
'settings.agents.page.permissions.defaultLabel': 'Default',
'settings.agents.page.permissions.hideEditor': 'Hide Editor',
'settings.agents.page.permissions.advancedEditor': 'Advanced Editor',
'settings.agents.page.permissions.globalSummary': 'Global: {summary}',
'settings.agents.page.permissions.rulesSummary': 'Rules: {summary}',
'settings.agents.page.permissions.globalDefault': 'Global Default',
'settings.agents.page.permissions.pattern': 'Pattern',
'settings.agents.page.permissions.addCustomRule': 'Add Custom Rule',
'settings.agents.page.permissions.permissionPlaceholder': 'Permission...',
'settings.agents.page.permissions.patternPlaceholder': 'Pattern (e.g. *)',
'settings.page.behavior.title': 'Behavior',
'settings.behavior.page.title': 'Behavior',
'settings.behavior.page.warning.title': 'Global rules are combined with project rules',
'settings.behavior.page.warning.description': 'Changes made here update {path}. OpenCode also includes any project-level AGENTS.md rules when they exist.',
'settings.behavior.page.section.systemPrompt': 'Global AGENTS.md',
'settings.behavior.page.field.systemPromptPlaceholder': 'You are a helpful AI assistant...\n\nUse this space to define absolute rules for how the AI should behave across all sessions and providers.',
'settings.behavior.page.section.responseStyle': 'Response style',
'settings.behavior.page.responseStyle.tooltip': 'When enabled, these instructions guide how the assistant responds in each new conversation. They are sent with your first message and do not change your global AGENTS.md rules.',
'settings.behavior.page.responseStyle.enableAria': 'Enable response style instructions',
'settings.behavior.page.responseStyle.enable': 'Add response style instructions to new conversations',
'settings.behavior.page.responseStyle.preset': 'Preset',
'settings.behavior.page.responseStyle.option.concise': 'Concise',
'settings.behavior.page.responseStyle.option.detailed': 'Detailed',
'settings.behavior.page.responseStyle.option.mentor': 'Mentor',
'settings.behavior.page.responseStyle.option.pushback': 'Pushback',
'settings.behavior.page.responseStyle.option.noFiller': 'No filler',
'settings.behavior.page.responseStyle.option.matchEnergy': 'Match my energy',
'settings.behavior.page.responseStyle.option.warmPeer': 'Warm peer',
'settings.behavior.page.responseStyle.option.custom': 'Custom',
'settings.behavior.page.responseStyle.customPlaceholder': 'Write the instruction to add to the first message...',
'settings.behavior.page.toast.saved': 'Behavior saved successfully',
'settings.behavior.page.toast.saveFailed': 'Failed to save behavior',
'settings.commands.sidebar.title': 'Commands',
'settings.commands.sidebar.total': 'Total {count}',
'settings.commands.sidebar.empty.title': 'No commands configured',
'settings.commands.sidebar.empty.description': 'Use the + button above to create one',
'settings.commands.sidebar.section.builtIn': 'Built-in Commands',
'settings.commands.sidebar.section.custom': 'Custom Commands',
'settings.commands.sidebar.dialog.deleteTitle': 'Delete Command',
'settings.commands.sidebar.dialog.resetTitle': 'Reset Command',
'settings.commands.sidebar.dialog.deleteDescription': 'Are you sure you want to delete command "{name}"?',
'settings.commands.sidebar.dialog.resetDescription': 'Are you sure you want to reset command "{name}" to its default configuration?',
'settings.commands.sidebar.renameDialog.title': 'Rename Command',
'settings.commands.sidebar.renameDialog.description': 'Enter a new name for the command "/{name}"',
'settings.commands.sidebar.renameDialog.placeholder': 'New command name...',
'settings.commands.sidebar.toast.builtInCannotDelete': 'Built-in commands cannot be deleted',
'settings.commands.sidebar.toast.commandDeleted': 'Command "{name}" deleted successfully',
'settings.commands.sidebar.toast.commandReset': 'Command "{name}" reset to default',
'settings.commands.sidebar.toast.deleteFailed': 'Failed to delete command',
'settings.commands.sidebar.toast.resetFailed': 'Failed to reset command',
'settings.commands.sidebar.toast.commandNameRequired': 'Command name is required',
'settings.commands.sidebar.toast.commandExists': 'A command with this name already exists',
'settings.commands.sidebar.toast.removeOldAfterRenameFailed': 'Failed to remove old command after rename',
'settings.commands.sidebar.toast.renameFailed': 'Failed to rename command',
'settings.commands.page.toast.templateRequired': 'Command template is required',
'settings.commands.page.toast.created': 'Command created successfully',
'settings.commands.page.toast.updated': 'Command updated successfully',
'settings.commands.page.toast.createFailed': 'Failed to create command',
'settings.commands.page.toast.updateFailed': 'Failed to update command',
'settings.commands.page.toast.saveUnexpectedError': 'An error occurred while saving',
'settings.commands.page.empty.title': 'Select a command from the sidebar',
'settings.commands.page.empty.description': 'or create a new one',
'settings.commands.page.title.new': 'New Command',
'settings.commands.page.subtitle.new': 'Configure a new slash command',
'settings.commands.page.subtitle.edit': 'Edit command settings',
'settings.commands.page.section.identity': 'Identity',
'settings.commands.page.section.executionContext': 'Execution Context',
'settings.commands.page.section.template': 'Command Template',
'settings.commands.page.field.commandName': 'Command Name',
'settings.commands.page.field.commandNamePlaceholder': 'command-name',
'settings.commands.page.field.descriptionPlaceholder': 'What does this command do?',
'settings.commands.page.field.overrideAgent': 'Override Agent',
'settings.commands.page.field.templatePlaceholder': 'Your command template here...\n\nUse $ARGUMENTS to reference user input.\nUse !`shell command` to inject shell output.\nUse @filename to include file contents.',
'settings.commands.page.templateHint.userInput': 'user input',
'settings.commands.page.templateHint.shellOutput': 'shell output',
'settings.commands.page.templateHint.fileContents': 'file contents',
'settings.commands.agentSelector.title': 'Select agent',
'settings.commands.agentSelector.notSelected': 'Not selected',
'settings.commands.agentSelector.selectAgentPlaceholder': 'Select agent...',
'settings.gitIdentities.page.section.title': 'Identities',
'settings.gitIdentities.page.empty.title': 'No identities configured',
'settings.gitIdentities.page.empty.description': 'Create one to manage Git author settings per project',
'settings.gitIdentities.page.discoveredCredentials.title': 'Found in ~/.git-credentials',
'settings.gitIdentities.page.badge.default': 'default',
'settings.gitIdentities.page.actions.setAsDefault': 'Set as default',
'settings.gitIdentities.page.actions.unsetDefault': 'Unset default',
'settings.gitIdentities.page.actions.import': 'Import',
'settings.gitIdentities.page.toast.updateDefaultFailed': 'Failed to update default identity',
'settings.gitIdentities.page.toast.defaultUpdated': 'Default identity updated',
'settings.gitIdentities.page.toast.defaultUnset': 'Default identity unset',
'settings.gitIdentities.page.toast.profileDeleted': 'Profile "{name}" deleted',
'settings.gitIdentities.page.toast.deleteProfileFailed': 'Failed to delete profile',
'settings.gitIdentities.page.deleteDialog.title': 'Delete Profile',
'settings.gitIdentities.page.deleteDialog.description': 'Are you sure you want to delete "{name}"?',
'settings.gitIdentities.editor.title.importCredential': 'Import Credential',
'settings.gitIdentities.editor.title.newIdentity': 'New Identity',
'settings.gitIdentities.editor.title.globalIdentity': 'Global Identity',
'settings.gitIdentities.editor.title.editIdentity': 'Edit Identity',
'settings.gitIdentities.editor.description.globalReadOnly': 'System-wide Git identity (read-only)',
'settings.gitIdentities.editor.description.newProfile': 'Create a new Git identity profile',
'settings.gitIdentities.editor.description.editProfile': 'Edit identity profile settings',
'settings.gitIdentities.editor.field.profileName': 'Profile Name',
'settings.gitIdentities.editor.field.profileNamePlaceholder': 'Work Profile, Personal, etc.',
'settings.gitIdentities.editor.field.color': 'Color',
'settings.gitIdentities.editor.field.icon': 'Icon',
'settings.gitIdentities.editor.field.userName': 'User Name',
'settings.gitIdentities.editor.field.userNameTooltip': 'The name that will appear in Git commit messages.',
'settings.gitIdentities.editor.field.userNamePlaceholder': 'John Doe',
'settings.gitIdentities.editor.field.emailAddress': 'Email Address',
'settings.gitIdentities.editor.field.emailAddressTooltip': 'Should match your email in GitHub/GitLab for proper attribution.',
'settings.gitIdentities.editor.field.emailAddressPlaceholder': 'john@example.com',
'settings.gitIdentities.editor.field.authMethod': 'Auth Method',
'settings.gitIdentities.editor.field.authToken': 'Token',
'settings.gitIdentities.editor.field.sshKeyPath': 'SSH Key Path',
'settings.gitIdentities.editor.field.sshKeyPathTooltip': 'Optional path to private key. e.g. ~/.ssh/id_ed25519',
'settings.gitIdentities.editor.field.sshKeyPathPlaceholder': '~/.ssh/id_ed25519',
'settings.gitIdentities.editor.field.host': 'Host',
'settings.gitIdentities.editor.field.hostTooltip': 'Token will be read from ~/.git-credentials for this host.',
'settings.gitIdentities.editor.field.hostPlaceholder': 'github.com',
'settings.gitIdentities.editor.actions.close': 'Close',
'settings.gitIdentities.editor.actions.create': 'Create',
'settings.gitIdentities.editor.actions.save': 'Save',
'settings.gitIdentities.editor.toast.userNameEmailRequired': 'User name and email are required',
'settings.gitIdentities.editor.toast.hostRequiredForToken': 'Host is required for token-based authentication',
'settings.gitIdentities.editor.toast.profileCreated': 'Profile created',
'settings.gitIdentities.editor.toast.profileUpdated': 'Profile updated',
'settings.gitIdentities.editor.toast.createProfileFailed': 'Failed to create profile',
'settings.gitIdentities.editor.toast.updateProfileFailed': 'Failed to update profile',
'settings.gitIdentities.editor.toast.saveUnexpectedError': 'An error occurred while saving',
'settings.gitIdentities.editor.toast.profileDeleted': 'Profile deleted',
'settings.gitIdentities.editor.toast.deleteProfileFailed': 'Failed to delete profile',
'settings.gitIdentities.editor.toast.deleteUnexpectedError': 'An error occurred while deleting',
'settings.skills.sidebar.title': 'Skills',
'settings.skills.sidebar.total': 'Total {count}',
'settings.skills.sidebar.section.project': 'Project Skills',
'settings.skills.sidebar.section.user': 'User Skills',
'settings.skills.sidebar.empty.title': 'No skills configured',
'settings.skills.sidebar.empty.description': 'Use the + button above to create one',
'settings.skills.sidebar.badge.claude': 'claude',
'settings.skills.sidebar.badge.agents': 'agents',
'settings.skills.sidebar.badge.opencode': 'opencode',
'settings.skills.sidebar.toast.skillDeleted': 'Skill "{name}" deleted successfully',
'settings.skills.sidebar.toast.deleteSkillFailed': 'Failed to delete skill',
'settings.skills.sidebar.toast.duplicateLoadFailed': 'Failed to load skill details for duplication',
'settings.skills.sidebar.toast.renameLoadFailed': 'Failed to load skill details',
'settings.skills.sidebar.toast.removeOldAfterRenameFailed': 'Failed to remove old skill after rename',
'settings.skills.sidebar.toast.renameFailed': 'Failed to rename skill',
'settings.skills.sidebar.deleteDialog.title': 'Delete Skill',
'settings.skills.sidebar.deleteDialog.description': 'Are you sure you want to delete skill "{name}"?',
'settings.skills.sidebar.renameDialog.title': 'Rename Skill',
'settings.skills.sidebar.renameDialog.description': 'Enter a new name for the skill "{name}"',
'settings.skills.sidebar.renameDialog.placeholder': 'New skill name...',
'settings.skills.page.title.newSkill': 'New Skill',
'settings.skills.page.subtitle.newSkill': 'Configure a new skill',
'settings.skills.page.subtitle.skillLocation': '{location} skill',
'settings.skills.page.section.basicInformation': 'Basic Information',
'settings.skills.page.section.instructions': 'Instructions',
'settings.skills.page.section.supportingFiles': 'Supporting Files',
'settings.skills.page.field.skillNameLocation': 'Skill Name & Location',
'settings.skills.page.field.skillNameHint': 'Lowercase, numbers, hyphens',
'settings.skills.page.field.skillNamePlaceholder': 'skill-name',
'settings.skills.page.field.descriptionHint': 'The agent uses this to decide when to load the skill',
'settings.skills.page.field.descriptionPlaceholder': 'Brief description of what this skill does...',
'settings.skills.page.field.instructionsPlaceholder': 'Step-by-step instructions, guidelines, or reference content...',
'settings.skills.page.badge.claudeCompatible': 'Claude-compatible',
'settings.skills.page.badge.pending': 'pending',
'settings.skills.page.actions.addFile': 'Add File',
'settings.skills.page.actions.createSkill': 'Create Skill',
'settings.skills.page.actions.createFile': 'Create File',
'settings.skills.page.supportingFiles.empty': 'No supporting files. Use "Add File" to include reference materials.',
'settings.skills.page.loading.details': 'Loading skill details...',
'settings.skills.page.loading.fileContent': 'Loading file content...',
'settings.skills.page.empty.title': 'Select a skill from the sidebar',
'settings.skills.page.empty.description': 'or create a new one',
'settings.skills.page.deleteFileDialog.title': 'Delete Supporting File',
'settings.skills.page.deleteFileDialog.description': 'Are you sure you want to delete "{path}"?',
'settings.skills.page.fileDialog.titleEdit': 'Edit Supporting File',
'settings.skills.page.fileDialog.titleAdd': 'Add Supporting File',
'settings.skills.page.fileDialog.descriptionEdit': 'Modify the file content',
'settings.skills.page.fileDialog.descriptionAdd': 'Create a new file in the skill directory',
'settings.skills.page.fileDialog.field.filePath': 'File Path',
'settings.skills.page.fileDialog.field.filePathPlaceholder': 'example.md or docs/reference.txt',
'settings.skills.page.fileDialog.field.filePathHint': 'Relative path within the skill directory. Subdirectories will be created automatically.',
'settings.skills.page.fileDialog.field.content': 'Content',
'settings.skills.page.fileDialog.field.contentPlaceholder': 'File content...',
'settings.skills.page.toast.skillNameRequired': 'Skill name is required',
'settings.skills.page.toast.invalidSkillName': 'Skill name must be 1-64 lowercase alphanumeric characters with hyphens, cannot start or end with hyphen',
'settings.skills.page.toast.descriptionRequired': 'Description is required',
'settings.skills.page.toast.skillExists': 'A skill with this name already exists',
'settings.skills.page.toast.skillCreated': 'Skill created successfully',
'settings.skills.page.toast.skillUpdated': 'Skill updated successfully',
'settings.skills.page.toast.createSkillFailed': 'Failed to create skill',
'settings.skills.page.toast.updateSkillFailed': 'Failed to update skill',
'settings.skills.page.toast.saveUnexpectedError': 'An error occurred while saving',
'settings.skills.page.toast.loadFileContentFailed': 'Failed to load file content',
'settings.skills.page.toast.fileNameRequired': 'File name is required',
'settings.skills.page.toast.fileExists': 'A file with this name already exists',
'settings.skills.page.toast.noSkillSelected': 'No skill selected',
'settings.skills.page.toast.fileAdded': 'File "{path}" added',
'settings.skills.page.toast.fileCreated': 'File "{path}" created',
'settings.skills.page.toast.fileUpdated': 'File "{path}" updated',
'settings.skills.page.toast.fileRemoved': 'File "{path}" removed',
'settings.skills.page.toast.fileDeleted': 'File "{path}" deleted',
'settings.skills.page.toast.createFileFailed': 'Failed to create file',
'settings.skills.page.toast.updateFileFailed': 'Failed to update file',
'settings.skills.page.toast.deleteFileFailed': 'Failed to delete file',
'settings.skills.location.option.userOpencode.label': 'User / OpenCode',
'settings.skills.location.option.userOpencode.description': 'Global OpenCode config location',
'settings.skills.location.option.projectOpencode.label': 'Project / OpenCode',
'settings.skills.location.option.projectOpencode.description': 'Current project .opencode location',
'settings.skills.location.option.userClaude.label': 'User / Claude',
'settings.skills.location.option.userClaude.description': 'Global Claude skills location',
'settings.skills.location.option.projectClaude.label': 'Project / Claude',
'settings.skills.location.option.projectClaude.description': 'Current project .claude location',
'settings.skills.location.option.userAgents.label': 'User / Agents',
'settings.skills.location.option.userAgents.description': 'Global .agents compatibility location',
'settings.skills.location.option.projectAgents.label': 'Project / Agents',
'settings.skills.location.option.projectAgents.description': 'Current project .agents compatibility location',
'settings.skills.catalog.shared.field.repository': 'Repository',
'settings.skills.catalog.shared.field.repositoryPlaceholder': 'owner/repo or git@github.com:owner/repo.git',
'settings.skills.catalog.shared.field.optionalSubpath': 'Optional subpath',
'settings.skills.catalog.shared.field.subpathPlaceholder': 'e.g. skills',
'settings.skills.catalog.shared.field.targetLocation': 'Target location',
'settings.skills.catalog.shared.field.project': 'Project',
'settings.skills.catalog.shared.field.noProjects': 'No projects available',
'settings.skills.catalog.shared.field.chooseProjectPlaceholder': 'Choose project',
'settings.skills.catalog.shared.field.searchSkillsPlaceholder': 'Search skills…',
'settings.skills.catalog.shared.toast.repositoryRequired': 'Repository source is required',
'settings.skills.catalog.shared.toast.privateRepoNotSupportedVsCode': 'Private repositories are not supported in VS Code yet',
'settings.skills.catalog.shared.toast.foundSkills': 'Found {count} skill(s)',
'settings.skills.catalog.shared.noDescription': 'No description provided',
'settings.skills.catalog.shared.actions.scan': 'Scan',
'settings.skills.catalog.shared.actions.scanning': 'Scanning...',
'settings.skills.catalog.shared.actions.install': 'Install',
'settings.skills.catalog.shared.actions.installing': 'Installing...',
'settings.skills.catalog.shared.auth.title': 'Authentication required',
'settings.skills.catalog.shared.auth.description': 'Select a Git identity (SSH key)',
'settings.skills.catalog.shared.auth.chooseIdentity': 'Choose identity',
'settings.skills.catalog.shared.auth.footerHint': 'Configure identities in Settings - Git Identities.',
'settings.skills.catalog.shared.auth.footerHintArrow': 'Configure identities in Settings → Git Identities.',
'settings.skills.catalog.conflicts.title': 'Skills already exist',
'settings.skills.catalog.conflicts.description': 'Some selected skills are already installed in this scope. Choose whether to skip or overwrite them.',
'settings.skills.catalog.conflicts.count': '{count} conflict(s)',
'settings.skills.catalog.conflicts.installedIn': 'Installed in {scope} / {source}',
'settings.skills.catalog.conflicts.scope.user': 'user',
'settings.skills.catalog.conflicts.scope.project': 'project',
'settings.skills.catalog.conflicts.source.opencode': 'opencode',
'settings.skills.catalog.conflicts.source.agents': 'agents',
'settings.skills.catalog.conflicts.decision.skip': 'Skip',
'settings.skills.catalog.conflicts.decision.overwrite': 'Overwrite',
'settings.skills.catalog.conflicts.actions.skipAll': 'Skip all',
'settings.skills.catalog.conflicts.actions.overwriteAll': 'Overwrite all',
'settings.skills.catalog.conflicts.actions.continue': 'Continue',
'settings.skills.catalog.installSkill.title': 'Install skill',
'settings.skills.catalog.installSkill.descriptionPrefix': 'Install',
'settings.skills.catalog.installSkill.descriptionSuffix': 'into one of four target locations.',
'settings.skills.catalog.installSkill.field.destination': 'Destination',
'settings.skills.catalog.installSkill.field.project': 'Project',
'settings.skills.catalog.installSkill.field.noProjects': 'No projects available',
'settings.skills.catalog.installSkill.field.chooseProjectPlaceholder': 'Choose project',
'settings.skills.catalog.installSkill.actions.install': 'Install',
'settings.skills.catalog.installSkill.actions.installing': 'Installing...',
'settings.skills.catalog.installSkill.toast.installed': 'Skill installed successfully',
'settings.skills.catalog.installSkill.toast.authRequired': 'Authentication required',
'settings.skills.catalog.installSkill.toast.installFailed': 'Failed to install skill',
'settings.skills.catalog.add.title': 'Add skills catalog',
'settings.skills.catalog.add.descriptionPrefix': 'Add a Git repository as a new catalog source. OpenChamber will scan it for folders containing',
'settings.skills.catalog.add.descriptionSuffix': '.',
'settings.skills.catalog.add.field.catalogName': 'Catalog name',
'settings.skills.catalog.add.field.catalogNamePlaceholder': 'e.g. Team Skills',
'settings.skills.catalog.add.field.repository': 'Repository',
'settings.skills.catalog.add.field.optionalSubpath': 'Optional subpath',
'settings.skills.catalog.add.field.repositoryHint': 'Public repos work everywhere. Private repos require SSH identity (Desktop/Web only).',
'settings.skills.catalog.add.scanResult': 'Scan result: {count} skill(s) found',
'settings.skills.catalog.add.duplicateMessage': 'This catalog is already added.',
'settings.skills.catalog.add.actions.addCatalog': 'Add catalog',
'settings.skills.catalog.add.toast.repositoryRequired': 'Repository source is required',
'settings.skills.catalog.add.toast.authenticationRequiredScan': 'Authentication required. Select a Git identity and scan again.',
'settings.skills.catalog.add.toast.scanFailed': 'Failed to scan repository',
'settings.skills.catalog.add.toast.noSkillsFound': 'No skills found in this repository',
'settings.skills.catalog.add.toast.catalogNameRequired': 'Catalog name is required',
'settings.skills.catalog.add.toast.scanBeforeAdd': 'Scan the repository before adding this catalog',
'settings.skills.catalog.add.toast.catalogAlreadyExists': 'This catalog already exists',
'settings.skills.catalog.add.toast.catalogAdded': 'Catalog added',
'settings.skills.catalog.add.toast.saveFailed': 'Failed to save catalog',
'settings.skills.catalog.installFromRepo.title': 'Install from Git repository',
'settings.skills.catalog.installFromRepo.descriptionPrefix': 'Scan a repository for folders containing',
'settings.skills.catalog.installFromRepo.descriptionSuffix': ', then install selected skills.',
'settings.skills.catalog.installFromRepo.repositoryHintPrefix': 'For GitHub shorthand, you can add a subpath like',
'settings.skills.catalog.installFromRepo.authDescription': 'Select a Git identity (SSH key) that can access this repository.',
'settings.skills.catalog.installFromRepo.empty.noScanResultsTitle': 'No scan results yet',
'settings.skills.catalog.installFromRepo.empty.noScanResultsDescription': 'Scan a repository to discover skills',
'settings.skills.catalog.installFromRepo.actions.selectAll': 'Select all',
'settings.skills.catalog.installFromRepo.actions.selectNone': 'Select none',
'settings.skills.catalog.installFromRepo.actions.installSelected': 'Install selected',
'settings.skills.catalog.installFromRepo.badge.installed': 'installed ({scope}/{source})',
'settings.skills.catalog.installFromRepo.selectedCount': 'Selected: {selected} / {total}',
'settings.skills.catalog.installFromRepo.toast.authenticationRequiredScan': 'Authentication required. Select a Git identity and try scanning again.',
'settings.skills.catalog.installFromRepo.toast.authenticationRequiredInstall': 'Authentication required. Select a Git identity and try installing again.',
'settings.skills.catalog.installFromRepo.toast.scanFailed': 'Failed to scan repository',
'settings.skills.catalog.installFromRepo.toast.selectAtLeastOne': 'Select at least one skill to install',
'settings.skills.catalog.installFromRepo.toast.installedCount': 'Installed {count} skill(s)',
'settings.skills.catalog.installFromRepo.toast.installCompleted': 'Installation completed',
'settings.skills.catalog.installFromRepo.toast.installFailed': 'Failed to install skills',
'settings.skills.catalog.page.mode.manual': 'Manual',
'settings.skills.catalog.page.mode.external': 'External',
'settings.skills.catalog.page.title': 'Skills Catalog',
'settings.skills.catalog.page.section.sourceRepository': 'Source Repository',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Select source',
'settings.skills.catalog.page.actions.refreshTitle': 'Refresh',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Remove Catalog',
'settings.skills.catalog.page.actions.addCatalog': 'Add Catalog',
'settings.skills.catalog.page.actions.removeCatalog': 'Remove Catalog',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Load More Skills',
'settings.skills.catalog.page.loading.catalog': 'Loading...',
'settings.skills.catalog.page.loading.skills': 'Loading skills...',
'settings.skills.catalog.page.loading.more': 'Loading...',
'settings.skills.catalog.page.foundCount': '{count} skill(s) found',
'settings.skills.catalog.page.error.catalogTitle': 'Catalog error',
'settings.skills.catalog.page.empty.noSkillsTitle': 'No skills found',
'settings.skills.catalog.page.empty.noSkillsDescription': 'Try a different search or refresh the catalog',
'settings.skills.catalog.page.badge.installed': 'installed ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'not installable',
'settings.skills.catalog.page.badge.unknown': 'unknown',
'settings.skills.catalog.page.byOwnerPrefix': 'by',
'settings.skills.catalog.page.removeDialog.title': 'Remove Catalog',
'settings.skills.catalog.page.removeDialog.description': 'Are you sure you want to remove this catalog?',
'settings.openchamber.passkeys.title': 'Passkeys',
'settings.openchamber.passkeys.field.currentDevice': 'Current device',
'settings.openchamber.passkeys.actions.add': 'Add passkey',
'settings.openchamber.passkeys.actions.cancelSetup': 'Cancel passkey setup',
'settings.openchamber.passkeys.actions.signOutEverywhere': 'Sign out everywhere',
'settings.openchamber.passkeys.actions.signingOut': 'Signing out…',
'settings.openchamber.passkeys.actions.removing': 'Removing…',
'settings.openchamber.passkeys.state.uiPasswordRequired': 'Passkeys are available only when the UI password lock is enabled.',
'settings.openchamber.passkeys.state.loading': 'Loading passkeys…',
'settings.openchamber.passkeys.state.noneSaved': 'No passkeys saved for this host yet.',
'settings.openchamber.passkeys.item.lastUsed': 'Last used {time}',
'settings.openchamber.passkeys.item.added': 'Added {time}',
'settings.openchamber.passkeys.time.neverUsed': 'Never used',
'settings.openchamber.passkeys.toast.loadFailed': 'Could not load passkeys.',
'settings.openchamber.passkeys.toast.enableUiPasswordFirst': 'Enable the UI password lock before adding passkeys.',
'settings.openchamber.passkeys.toast.added': 'Passkey added',
'settings.openchamber.passkeys.toast.setupCanceled': 'Passkey setup canceled',
'settings.openchamber.passkeys.toast.addFailed': 'Could not add passkey.',
'settings.openchamber.passkeys.toast.removed': 'Passkey removed',
'settings.openchamber.passkeys.toast.removeFailed': 'Could not remove passkey.',
'settings.openchamber.passkeys.toast.clearAuthFailed': 'Could not clear saved authentication.',
'settings.openchamber.sessionRetention.title': 'Session Retention',
'settings.openchamber.sessionRetention.tooltip': 'Automatically archive or delete inactive sessions based on last activity. Keeps the 5 most recent sessions.',
'settings.openchamber.sessionRetention.field.enableAutoCleanupAria': 'Enable auto-cleanup',
'settings.openchamber.sessionRetention.field.enableAutoCleanup': 'Enable Auto-Cleanup',
'settings.openchamber.sessionRetention.field.retentionPeriod': 'Retention Period',
'settings.openchamber.sessionRetention.field.retentionPeriodAria': 'Retention period in days',
'settings.openchamber.sessionRetention.field.days': 'days',
'settings.openchamber.sessionRetention.field.whenSessionsExpire': 'When sessions expire',
'settings.openchamber.sessionRetention.actions.resetRetentionAria': 'Reset retention period',
'settings.openchamber.sessionRetention.actions.runCleanupNow': 'Run cleanup now',
'settings.openchamber.sessionRetention.actions.cleaningUp': 'Cleaning up...',
'settings.openchamber.sessionRetention.action.archive': 'Archive',
'settings.openchamber.sessionRetention.action.delete': 'Delete',
'settings.openchamber.sessionRetention.manualCleanup.title': 'Manual Cleanup',
'settings.openchamber.sessionRetention.manualCleanup.eligibleArchiveNow': 'Eligible for archiving right now: {count}',
'settings.openchamber.sessionRetention.manualCleanup.eligibleDeleteNow': 'Eligible for deletion right now: {count}',
'settings.openchamber.sessionRetention.toast.noneEligibleArchive': 'No sessions eligible for archiving',
'settings.openchamber.sessionRetention.toast.noneEligibleDelete': 'No sessions eligible for deletion',
'settings.openchamber.sessionRetention.toast.archivedCount': 'Archived {count} session(s)',
'settings.openchamber.sessionRetention.toast.deletedCount': 'Deleted {count} session(s)',
'settings.openchamber.sessionRetention.toast.failedArchiveCount': 'Failed to archive {count} session(s)',
'settings.openchamber.sessionRetention.toast.failedDeleteCount': 'Failed to delete {count} session(s)',
'settings.openchamber.desktopNetwork.title': 'Desktop Network Access',
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': 'Start OpenChamber at login',
'settings.openchamber.desktopNetwork.field.launchAtLogin': 'Start OpenChamber when you log in',
'settings.openchamber.desktopNetwork.field.launchAtLoginDescription': 'Starts the app in the background without opening a window. Click the Dock icon to open it.',
'settings.openchamber.desktopNetwork.field.allowLanAccessAria': 'Allow LAN access to desktop sidecar',
'settings.openchamber.desktopNetwork.field.allowLanAccess': 'Let other devices on your local network open this app',
'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': 'Restarts the app so phones, tablets, and other computers on your Wi-Fi can open it.',
'settings.openchamber.desktopNetwork.field.warning': 'Warning: while enabled, the app is reachable by anyone on the same local network.',
'settings.openchamber.desktopPassword.field.password': 'Desktop UI Password',
'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'No password required',
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber asks after restart, then when the login session expires: after 12 hours, or 7 days with Trust this device. Leave empty to disable login.',
'settings.openchamber.desktopNetwork.hint.openAfterRestart': 'After restart, open from another device: ',
'settings.openchamber.desktopNetwork.hint.openNow': 'Open from another device: ',
'settings.openchamber.desktopNetwork.actions.saveAndRestart': 'Save + Restart',
'settings.openchamber.desktopNetwork.error.loadFailed': 'Failed to load desktop settings',
'settings.openchamber.desktopNetwork.error.saveFailed': 'Failed to save desktop settings',
'settings.openchamber.desktopNetwork.error.savedRestartFailed': 'Saved, but failed to restart app',
'settings.openchamber.desktopNetwork.error.launchAtLoginUnsupported': 'Launch at login is not supported on this system',
'settings.openchamber.desktopNetwork.error.launchAtLoginSaveFailed': 'Failed to update launch at login setting',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.opencodeCli.tooltipPrefix': 'Optional absolute path to the',
'settings.openchamber.opencodeCli.tooltipSuffix': 'binary.',
'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode Binary Path',
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
'settings.openchamber.opencodeCli.field.showUpdateNotifications': 'Show OpenCode update notifications',
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': 'Show OpenCode update notifications',
'settings.openchamber.opencodeCli.actions.browseAria': 'Browse for OpenCode binary path',
'settings.openchamber.opencodeCli.actions.browse': 'Browse',
'settings.openchamber.opencodeCli.actions.saveAndReload': 'Save + Reload',
'settings.openchamber.opencodeCli.actions.restartingOpenCode': 'Restarting OpenCode…',
'settings.openchamber.opencodeCli.dialog.selectBinaryTitle': 'Select opencode binary',
'settings.openchamber.opencodeCli.tipPrefix': 'Tip: you can also use',
'settings.openchamber.opencodeCli.tipMiddle': 'env var, but this setting persists in',
'settings.mcp.sidebar.title': 'MCP Servers',
'settings.mcp.sidebar.total': 'Total {count}',
'settings.mcp.sidebar.actions.refreshStatusAria': 'Refresh MCP status',
'settings.mcp.sidebar.actions.refreshStatusTitle': 'Refresh MCP status',
'settings.mcp.sidebar.actions.addServerTitle': 'Add MCP server',
'settings.mcp.sidebar.actions.deleting': 'Deleting…',
'settings.mcp.sidebar.empty.title': 'No MCP servers configured',
'settings.mcp.sidebar.empty.description': 'Use the + button above to add one',
'settings.mcp.sidebar.group.projectServers': 'Project Servers',
'settings.mcp.sidebar.group.userServers': 'User Servers',
'settings.mcp.sidebar.serverType.localTitle': 'Local server',
'settings.mcp.sidebar.serverType.remoteTitle': 'Remote server',
'settings.mcp.sidebar.deleteDialog.title': 'Delete MCP Server',
'settings.mcp.sidebar.deleteDialog.descriptionPrefix': 'Are you sure you want to delete "{name}"? This will remove it from',
'settings.mcp.sidebar.toast.deleteFailed': 'Failed to delete MCP server',
'settings.mcp.sidebar.toast.serverDeleted': 'MCP server "{name}" deleted',
'settings.mcp.sidebar.toast.refreshListIfStale': 'Refresh the MCP list if the UI looks stale.',
'settings.plugins.sidebar.title': 'Plugins',
'settings.plugins.sidebar.total': 'Total {count}',
'settings.plugins.sidebar.actions.addTitle': 'Add plugin',
'settings.plugins.sidebar.actions.deleting': 'Deleting…',
'settings.plugins.sidebar.empty.title': 'No plugins configured',
'settings.plugins.sidebar.empty.description': 'Use the + button above to add one',
'settings.plugins.sidebar.group.userEntries': 'User config',
'settings.plugins.sidebar.group.userFiles': 'User plugin file',
'settings.plugins.sidebar.group.projectEntries': 'Project config',
'settings.plugins.sidebar.group.projectFiles': 'Project plugin file',
'settings.plugins.sidebar.kind.npm': 'npm package',
'settings.plugins.sidebar.kind.path': 'Local path',
'settings.plugins.sidebar.kind.file': 'Plugin file',
'settings.plugins.sidebar.deleteDialog.title': 'Delete plugin',
'settings.plugins.sidebar.deleteDialog.description': 'Are you sure you want to delete "{name}"?',
'settings.plugins.sidebar.toast.deleted': 'Plugin "{name}" deleted',
'settings.plugins.sidebar.toast.deleteFailed': 'Failed to delete plugin',
'settings.plugins.page.empty.select': 'Select a plugin to view or edit',
'settings.plugins.page.empty.add': 'Or click + to add a new plugin',
'settings.plugins.page.header.entry': 'Installed plugin',
'settings.plugins.page.header.file': 'Plugin file',
'settings.plugins.page.field.spec': 'Spec',
'settings.plugins.page.field.spec.placeholder': 'npm-package@version or /absolute/path',
'settings.plugins.page.field.options': 'Options (JSON)',
'settings.plugins.page.field.options.invalidJson': 'Invalid JSON',
'settings.plugins.page.field.fileName': 'Filename',
'settings.plugins.page.field.content': 'Content',
'settings.plugins.page.field.scope': 'Scope',
'settings.plugins.scope.user': 'User',
'settings.plugins.scope.project': 'Project',
'settings.plugins.page.action.save': 'Save',
'settings.plugins.page.action.discard': 'Discard',
'settings.plugins.dialog.add.title': 'Add plugin',
'settings.plugins.dialog.add.tab.npm': 'From npm',
'settings.plugins.dialog.add.tab.path': 'From local path',
'settings.plugins.dialog.add.tab.file': 'New file',
'settings.plugins.dialog.add.action.submit': 'Add',
'settings.plugins.dialog.add.action.cancel': 'Cancel',
'settings.plugins.toast.created': 'Plugin added',
'settings.plugins.toast.updated': 'Plugin updated',
'settings.plugins.toast.reloadFailed': 'opencode reload failed — restart required',
'settings.plugins.validation.fileName': 'Filename must be lowercase, end in .js / .ts / .mjs / .cjs',
'settings.plugins.validation.specRequired': 'Spec is required',
'settings.plugins.registry.badge.update.label': '↑ {version}',
'settings.plugins.registry.badge.update.tooltip': 'Update available: {current} → {latest}',
'settings.plugins.registry.badge.malformed.tooltip': 'Spec is malformed',
'settings.plugins.registry.badge.missingPackage.tooltip': 'Package {name} not found on npm',
'settings.plugins.registry.badge.missingVersion.tooltip': 'Version {version} of {name} not published',
'settings.plugins.registry.badge.pathMissing.tooltip': 'File not found: {path}',
'settings.plugins.registry.badge.pathUnreadable.tooltip': 'File not readable: {path}',
'settings.plugins.registry.badge.network.tooltip': 'Could not reach npm registry',
'settings.plugins.registry.banner.updateAvailable.title': 'Update available',
'settings.plugins.registry.banner.updateAvailable.description': '{current} → {latest}',
'settings.plugins.registry.banner.updateAvailable.action': 'Update to {latest}',
'settings.plugins.registry.banner.invalid.title': 'Invalid plugin',
'settings.plugins.registry.banner.invalid.malformed': 'Spec syntax is malformed',
'settings.plugins.registry.banner.invalid.missingPackage': 'Package not found on npm',
'settings.plugins.registry.banner.invalid.missingVersion': 'Version not published',
'settings.plugins.registry.banner.invalid.pathMissing': 'File does not exist',
'settings.plugins.registry.banner.invalid.pathUnreadable': 'File is not readable',
'settings.plugins.sidebar.actions.updateToLatest': 'Update to latest',
'settings.plugins.sidebar.actions.refresh': 'Check for updates',
'settings.plugins.sidebar.group.updatesAvailable_one': '{count} update available',
'settings.plugins.sidebar.group.updatesAvailable_other': '{count} updates available',
'settings.plugins.toast.updatedToLatest': 'Plugin updated to {version}',
'settings.plugins.toast.refreshing': 'Checking npm for updates…',
'settings.plugins.toast.refreshFailed': 'Could not check npm registry',
'settings.openchamber.keyboardShortcuts.title': 'Keyboard Shortcuts',
'settings.openchamber.keyboardShortcuts.actions.resetAll': 'Reset All',
'settings.openchamber.keyboardShortcuts.actions.overwrite': 'Overwrite',
'settings.openchamber.keyboardShortcuts.tooltip': 'Capture a new key combo, save it, and bindings will update immediately.',
'settings.openchamber.keyboardShortcuts.overwritePrompt': 'This combo is already used by another shortcut. Overwrite and clear that other mapping?',
'settings.openchamber.keyboardShortcuts.field.pressKeys': 'Press keys...',
'settings.openchamber.keyboardShortcuts.error.captureFirst': 'Capture a shortcut first.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'This shortcut can conflict with browser defaults. It is still saved.',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': 'Go to line (files editor)',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': 'Open command palette',
'settings.openchamber.keyboardShortcuts.action.focus_input.label': 'Focus input',
'settings.openchamber.keyboardShortcuts.action.open_settings.label': 'Open settings',
'settings.openchamber.keyboardShortcuts.action.toggle_terminal.label': 'Toggle terminal dock',
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': 'Toggle terminal expanded',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'Toggle sidebar',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': 'Toggle right sidebar',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Open right sidebar Git tab',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': 'Open right sidebar Files tab',
'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': 'Cycle right sidebar tab',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'New session',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'New worktree draft',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'New Mini Chat window',
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'Open keyboard shortcuts',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': 'Toggle plan context panel',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'Toggle services menu',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'Cycle services tab',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': 'Cycle theme',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': 'Cycle agent',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'Cycle favorite model forward',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_backward.label': 'Cycle favorite model backward',
'settings.openchamber.keyboardShortcuts.action.expand_input.label': 'Expand input',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': 'Open conversation timeline',
'settings.projects.sidebar.total': 'Total {count}',
'settings.projects.sidebar.actions.addProject': 'Add project',
'settings.projects.page.empty.noProjects': 'No projects available.',
'settings.projects.page.title.default': 'Project Settings',
'settings.projects.page.section.worktree': 'Worktree',
'settings.projects.page.field.projectName': 'Project Name',
'settings.projects.page.field.projectNamePlaceholder': 'Project name',
'settings.projects.page.field.accentColor': 'Accent Color',
'settings.projects.page.field.projectIcon': 'Project Icon',
'settings.projects.page.field.projectIconBackgroundAria': 'Project icon background color',
'settings.projects.page.field.clearIconBackgroundAria': 'Clear icon background',
'settings.projects.page.field.clearBackground': 'Clear background',
'settings.projects.page.field.none': 'None',
'settings.projects.page.field.preview': 'Preview',
'settings.projects.page.actions.uploadIcon': 'Upload Icon',
'settings.projects.page.actions.uploading': 'Uploading...',
'settings.projects.page.actions.discoverFavicon': 'Discover Favicon',
'settings.projects.page.actions.discovering': 'Discovering...',
'settings.projects.page.actions.removeProjectIcon': 'Remove Project Icon',
'settings.projects.page.actions.removing': 'Removing...',
'settings.projects.page.actions.undoRemove': 'Undo Remove',
'settings.projects.page.toast.uploadIconFailed': 'Failed to upload project icon',
'settings.projects.page.toast.iconUpdated': 'Project icon updated',
'settings.projects.page.toast.removeIconFailed': 'Failed to remove project icon',
'settings.projects.page.toast.iconRemoved': 'Project icon removed',
'settings.projects.page.toast.discoverIconFailed': 'Failed to discover project icon',
'settings.projects.page.toast.customIconAlreadySet': 'Custom icon already set for this project',
'settings.projects.page.toast.iconDiscovered': 'Project icon discovered',
'settings.usage.sidebar.title': 'Usage',
'settings.usage.sidebar.total': 'Total {count}',
'settings.usage.sidebar.actions.toggleAutoRefreshAria': 'Toggle auto refresh',
'settings.usage.sidebar.actions.refreshAria': 'Refresh usage',
'settings.usage.sidebar.actions.refreshTitle': 'Refresh usage',
'settings.usage.sidebar.tooltip.autoRefresh': 'Auto-refresh usage data at set interval',
'settings.usage.sidebar.field.intervalPlaceholder': 'Interval',
'settings.usage.sidebar.field.display': 'Display',
'settings.usage.sidebar.field.displayModePlaceholder': 'Display mode',
'settings.usage.sidebar.field.displayModeUsage': 'Usage',
'settings.usage.sidebar.field.displayModeRemaining': 'Quota remaining',
'settings.usage.sidebar.field.showPredictions': 'Show predictions',
'settings.usage.sidebar.status.notSet': 'Not set',
'settings.usage.page.empty.selectProvider': 'Select a provider to view usage details.',
'settings.usage.page.header.providerUsage': '{provider} Usage',
'settings.usage.page.header.refreshing': 'Refreshing usage...',
'settings.usage.page.header.lastUpdated': 'Last updated: {time}',
'settings.usage.page.options.showInHeaderAria': 'Show in header menu',
'settings.usage.page.options.showInHeader': 'Show in Header Menu',
'settings.usage.page.options.showInHeaderTooltip': 'When enabled, this provider\'s usage will be visible in the quick access dropdown menu in the app header.',
'settings.usage.page.state.noData': 'No usage data available yet.',
'settings.usage.page.state.refreshFailedTitle': 'Failed to refresh usage data',
'settings.usage.page.state.providerNotConfiguredTitle': 'Provider not configured',
'settings.usage.page.state.providerNotConfiguredDescription': 'Add credentials in the Providers tab to enable usage tracking.',
'settings.usage.page.section.modelQuotas': 'Model Quotas',
'settings.usage.page.section.otherModels': 'Other Models',
'settings.usage.page.state.noQuotaWindowsTitle': 'No quota windows reported',
'settings.usage.page.state.noQuotaWindowsDescription': 'This provider does not currently report any rate limits or usage quotas.',
'settings.usage.pace.status.onTrack': 'On track',
'settings.usage.pace.status.slightlyFast': 'Slightly fast',
'settings.usage.pace.status.tooFast': 'Too fast',
'settings.usage.pace.status.usedUp': 'Used up',
'settings.usage.pace.predictionTooltip': 'Predicted usage at window end based on current pace: {prediction}',
'settings.usage.pace.wait': 'Wait {duration}',
'settings.usage.pace.prediction': 'Pred: {prediction}',
'settings.usage.pace.rate': 'Pace: {rate}',
'settings.usage.pace.waitSeparator': ' · Wait ',
'settings.usage.pace.predictionLabel': 'Pred: ',
'settings.remoteInstances.page.title': 'Remote Instance',
'settings.remoteInstances.page.description': 'Connect to another machine over SSH and open OpenChamber there.',
'settings.remoteInstances.page.empty.selectInstance': 'Select an instance to view and edit its settings.',
'settings.remoteInstances.page.empty.noExtraForwards': 'No extra port forwards configured.',
'settings.remoteInstances.page.section.actions': 'Actions',
'settings.remoteInstances.page.section.actionsDescription': 'Connect, reconnect, view logs, or remove this connection.',
'settings.remoteInstances.page.section.remoteServer': 'OpenChamber on the remote machine',
'settings.remoteInstances.page.section.remoteServerDescription': 'Choose how OpenChamber should run after SSH connects.',
'settings.remoteInstances.page.section.mainTunnel': 'Local access',
'settings.remoteInstances.page.section.mainTunnelDescription': 'Choose the local address used to open this remote OpenChamber server.',
'settings.remoteInstances.page.section.authentication': 'Authentication',
'settings.remoteInstances.page.section.authenticationDescription': 'Optional credentials for SSH and the remote OpenChamber UI.',
'settings.remoteInstances.page.section.portForwards': 'Port Forwards',
'settings.remoteInstances.page.section.portForwardsDescription': 'Optional extra ports to make available through this SSH connection.',
'settings.remoteInstances.page.field.sshCommand': 'SSH command',
'settings.remoteInstances.page.field.sshCommandPlaceholder': 'ssh user@host',
'settings.remoteInstances.page.field.nickname': 'Nickname',
'settings.remoteInstances.page.field.nicknamePlaceholder': 'Work laptop',
'settings.remoteInstances.page.field.connectionTimeoutSeconds': 'Connection timeout (seconds)',
'settings.remoteInstances.page.field.installMethod': 'Install method',
'settings.remoteInstances.page.field.installMethodHint': 'How OpenChamber should be placed on the remote machine when this app starts it for you.',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'Select install method',
'settings.remoteInstances.page.field.installMethodDownloadRelease': 'Download release',
'settings.remoteInstances.page.field.installMethodUploadBundle': 'Upload bundle',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'Select bind host',
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH password (optional)',
'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'Enter SSH password',
'settings.remoteInstances.page.field.uiPasswordOptional': 'UI password (optional)',
'settings.remoteInstances.page.field.uiPasswordPlaceholder': 'Enter UI password',
'settings.remoteInstances.page.field.forwardTypeHint': 'Choose what kind of port access this SSH connection should provide.',
'settings.remoteInstances.page.field.typePlaceholder': 'Type',
'settings.remoteInstances.page.forwardType.local': 'Local (-L)',
'settings.remoteInstances.page.forwardType.remote': 'Remote (-R)',
'settings.remoteInstances.page.forwardType.dynamic': 'Dynamic (-D)',
'settings.remoteInstances.page.forwardTypeDescription.local': 'Open a local port that connects to something on the remote machine.',
'settings.remoteInstances.page.forwardTypeDescription.remote': 'Open a port on the remote machine that connects back to your computer.',
'settings.remoteInstances.page.forwardTypeDescription.dynamic': 'Open a local SOCKS proxy through the SSH connection.',
'settings.remoteInstances.page.actions.create': 'Create',
'settings.remoteInstances.page.actions.cancel': 'Cancel',
'settings.remoteInstances.page.actions.connecting': 'Connecting...',
'settings.remoteInstances.page.actions.reconnecting': 'Reconnecting...',
'settings.remoteInstances.page.actions.reconnectNow': 'Reconnect now',
'settings.remoteInstances.page.actions.logs': 'SSH Logs',
'settings.remoteInstances.page.actions.pickRandomPort': 'Pick random port',
'settings.remoteInstances.page.actions.enableForwardAria': 'Enable forward',
'settings.remoteInstances.page.actions.openLocal': 'Open local',
'settings.remoteInstances.page.actions.addForward': 'Add forward',
'settings.remoteInstances.page.import.sectionTitle': 'Saved SSH hosts',
'settings.remoteInstances.page.import.loading': 'Loading SSH hosts...',
'settings.remoteInstances.page.import.noneFound': 'No SSH hosts found.',
'settings.remoteInstances.page.import.noneAvailable': 'No SSH hosts available to import.',
'settings.remoteInstances.page.import.patternSuffix': '(pattern)',
'settings.remoteInstances.page.status.currentLocalUrl': 'Current local URL:',
'settings.remoteInstances.page.status.reconnectStale': 'Reconnection looks stuck. You can retry now.',
'settings.remoteInstances.page.logsDialog.title': 'SSH Logs',
'settings.remoteInstances.page.logsDialog.loading': 'Loading logs...',
'settings.remoteInstances.page.logsDialog.empty': 'No SSH logs yet.',
'settings.remoteInstances.page.patternDialog.title': 'Choose an SSH destination',
'settings.remoteInstances.page.patternDialog.destinationPlaceholder': 'user@host',
'settings.remoteInstances.page.phase.resolvingConfiguration': 'Resolving configuration',
'settings.remoteInstances.page.phase.checkingAuth': 'Checking authentication',
'settings.remoteInstances.page.phase.establishingSsh': 'Establishing SSH connection',
'settings.remoteInstances.page.phase.probingRemote': 'Checking remote machine',
'settings.remoteInstances.page.phase.installingOpenChamber': 'Installing OpenChamber',
'settings.remoteInstances.page.phase.updatingOpenChamber': 'Updating OpenChamber',
'settings.remoteInstances.page.phase.detectingServer': 'Detecting server',
'settings.remoteInstances.page.phase.startingServer': 'Starting server',
'settings.remoteInstances.page.phase.forwardingPorts': 'Forwarding ports',
'settings.remoteInstances.page.phase.reconnecting': 'Reconnecting',
'settings.remoteInstances.page.confirm.storeSshPasswordPlaintext': 'Store SSH password in plaintext on disk?',
'settings.remoteInstances.page.confirm.storeUiPasswordPlaintext': 'Store UI password in plaintext on disk?',
'settings.remoteInstances.page.confirm.removeInstance': 'Remove this remote instance?',
'settings.remoteInstances.page.toast.sshCommandRequired': 'SSH command is required',
'settings.remoteInstances.page.toast.saveFailed': 'Failed to save instance',
'settings.remoteInstances.page.toast.instanceSaved': 'Instance saved',
'settings.remoteInstances.page.toast.instanceCreated': 'Instance created',
'settings.remoteInstances.page.toast.destinationRequired': 'Destination is required',
'settings.remoteInstances.page.toast.noLogsToCopy': 'No logs to copy',
'settings.remoteInstances.page.toast.logsCopied': 'Logs copied',
'settings.remoteInstances.page.toast.logsCleared': 'Logs cleared',
'settings.remoteInstances.page.toast.clearLogsFailed': 'Failed to clear logs',
'settings.remoteInstances.page.toast.instanceUrlUnavailable': 'Instance URL is unavailable',
'settings.remoteInstances.page.toast.connectFailed': 'Failed to connect instance',
'settings.remoteInstances.page.toast.cancelConnectionFailed': 'Failed to cancel connection',
'settings.remoteInstances.page.toast.disconnectFailed': 'Failed to disconnect instance',
'settings.remoteInstances.page.toast.retryFailed': 'Failed to retry connection',
'settings.remoteInstances.page.toast.instanceRemoved': 'Instance removed',
'settings.remoteInstances.page.toast.removeInstanceFailed': 'Failed to remove instance',
'settings.openchamber.worktrees.state.selectProject': 'Select a project to manage worktrees.',
'settings.openchamber.worktrees.state.gitOnly': 'Worktree settings are only available for Git repositories.',
'settings.openchamber.worktrees.setup.title': 'Setup commands',
'settings.openchamber.worktrees.setup.tooltipPrefix': 'Run automatically inside the new worktree directory when a worktree is created. Use',
'settings.openchamber.worktrees.setup.tooltipSuffix': 'for the project root.',
'settings.openchamber.worktrees.setup.loading': 'Loading...',
'settings.openchamber.worktrees.setup.commandPlaceholder': 'e.g., bun install',
'settings.openchamber.worktrees.setup.removeCommandAria': 'Remove command',
'settings.openchamber.worktrees.setup.addCommand': 'Add command',
'settings.openchamber.worktrees.list.title': 'Existing worktrees',
'settings.openchamber.worktrees.list.tooltip': 'Worktrees live outside the repo (OpenCode-managed). Deleting a worktree also removes linked sessions.',
'settings.openchamber.worktrees.list.loading': 'Loading worktrees...',
'settings.openchamber.worktrees.list.empty': 'No worktrees found for this project',
'settings.openchamber.worktrees.list.detachedHead': 'Detached HEAD',
'settings.openchamber.worktrees.list.deleteWorktreeAria': 'Delete worktree {name}',
'settings.agents.modelSelector.title': 'Select model',
'settings.agents.modelSelector.searchPlaceholder': 'Search models',
'settings.agents.modelSelector.selectPlaceholder': 'Select model...',
'settings.agents.modelSelector.notSelected': 'Not selected',
'settings.agents.modelSelector.noModelOptional': 'No model (optional)',
'settings.agents.modelSelector.section.favorites': 'Favorites',
'settings.agents.modelSelector.section.recents': 'Recents',
'settings.agents.modelSelector.section.recent': 'Recent',
'settings.agents.modelSelector.badge.current': 'Current',
'settings.agents.modelSelector.actions.favorite': 'Favorite',
'settings.agents.modelSelector.actions.unfavorite': 'Unfavorite',
'settings.agents.modelSelector.actions.addToFavorites': 'Add to favorites',
'settings.agents.modelSelector.actions.removeFromFavorites': 'Remove from favorites',
'settings.agents.modelSelector.state.noModelsFound': 'No models found',
'settings.agents.modelSelector.keyboardHints': '↑↓ navigate • Enter select • Esc close',
'settings.providers.sidebar.title': 'Providers',
'settings.providers.sidebar.total': 'Total {count}',
'settings.providers.sidebar.actions.connectProviderAria': 'Connect provider',
'settings.providers.sidebar.actions.connectProviderTitle': 'Connect provider',
'settings.providers.sidebar.empty.title': 'No providers found',
'settings.providers.sidebar.empty.description': 'Check your OpenCode configuration',
'settings.providers.sidebar.section.userProviders': 'User Providers',
'settings.providers.sidebar.section.projectProviders': 'Project Providers',
'settings.providers.page.state.loading': 'Loading...',
'settings.providers.page.state.unableToLoadProviderList': 'Unable to load provider list',
'settings.providers.page.empty.noProvidersDetected': 'No providers detected',
'settings.providers.page.empty.checkOpenCodeConfiguration': 'Check your OpenCode configuration',
'settings.providers.page.empty.selectProviderFromSidebar': 'Select a provider from the sidebar',
'settings.providers.page.empty.reviewDetailsAndConfigureAuth': 'Review details and configure auth',
'settings.providers.page.connect.title': 'Connect Provider',
'settings.providers.page.connect.selectProviderTitle': 'Select Provider',
'settings.providers.page.connect.providerField': 'Provider',
'settings.providers.page.connect.selectProviderPlaceholder': 'Select provider',
'settings.providers.page.connect.searchProvidersPlaceholder': 'Search...',
'settings.providers.page.connect.noProvidersFound': 'No providers found',
'settings.providers.page.connect.allProvidersConnected': 'All providers connected.',
'settings.providers.page.auth.title': 'Authentication',
'settings.providers.page.auth.loadingMethods': 'Loading authentication methods...',
'settings.providers.page.auth.apiKeyLabel': 'API Key',
'settings.providers.page.auth.apiKeyTooltip': 'Keys are sent directly to OpenCode and never stored by OpenChamber.',
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
'settings.providers.page.auth.oauthMethodFallback': 'OAuth method {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': 'Paste authorization code',
'settings.providers.page.auth.connected': 'Connected',
'settings.providers.page.auth.useReconnectHint': '· Use Reconnect to update credentials',
'settings.providers.page.connectionDetails.title': 'Connection Details',
'settings.providers.page.connectionDetails.configuredIn': 'Configured in:',
'settings.providers.page.connectionDetails.noActiveSource': 'No active configuration source',
'settings.providers.page.connectionDetails.source.authCredentials': 'auth credentials',
'settings.providers.page.connectionDetails.source.userConfig': 'user config',
'settings.providers.page.connectionDetails.source.projectConfig': 'project config',
'settings.providers.page.connectionDetails.source.customConfig': 'custom config',
'settings.providers.page.models.title': 'Available Models',
'settings.providers.page.models.filterPlaceholder': 'Filter models...',
'settings.providers.page.models.noModelsMatchFilter': 'No models match this filter.',
'settings.providers.page.models.capability.toolCalling': 'Tool calling',
'settings.providers.page.models.capability.reasoning': 'Reasoning',
'settings.providers.page.models.capability.imageInput': 'Image input',
'settings.providers.page.models.tokenBadge.context': 'ctx',
'settings.providers.page.models.tokenBadge.output': 'out',
'settings.providers.page.models.actions.hideModelFromSelectors': 'Hide model from selectors',
'settings.providers.page.models.actions.showModelInSelectors': 'Show model in selectors',
'settings.providers.page.models.actions.hideModel': 'Hide model',
'settings.providers.page.models.actions.showModel': 'Show model',
'settings.providers.page.actions.saving': 'Saving...',
'settings.providers.page.actions.saveKey': 'Save Key',
'settings.providers.page.actions.connect': 'Connect',
'settings.providers.page.actions.copyCode': 'Copy Code',
'settings.providers.page.actions.open': 'Open',
'settings.providers.page.actions.copy': 'Copy',
'settings.providers.page.actions.complete': 'Complete',
'settings.providers.page.actions.hide': 'Hide',
'settings.providers.page.actions.reconnect': 'Reconnect',
'settings.providers.page.actions.disconnecting': 'Disconnecting...',
'settings.providers.page.actions.disconnect': 'Disconnect',
'settings.providers.page.actions.hideAll': 'Hide all',
'settings.providers.page.actions.showAll': 'Show all',
'settings.providers.page.toast.authMethodsLoadFailed': 'Failed to load provider authentication methods',
'settings.providers.page.toast.providerSourcesLoadFailed': 'Failed to load provider sources',
'settings.providers.page.toast.apiKeyRequired': 'API key is required',
'settings.providers.page.toast.apiKeySaveFailed': 'Failed to save API key',
'settings.providers.page.toast.apiKeySaved': 'API key saved',
'settings.providers.page.toast.oauthStartFailed': 'Failed to start OAuth flow',
'settings.providers.page.toast.oauthDetailsMissing': 'No OAuth details returned',
'settings.providers.page.toast.completeOAuthInBrowser': 'Complete the OAuth flow in your browser',
'settings.providers.page.toast.oauthCompleteFailed': 'Failed to complete OAuth flow',
'settings.providers.page.toast.oauthCompleted': 'OAuth connection completed',
'settings.providers.page.toast.oauthLinkCopied': 'OAuth link copied',
'settings.providers.page.toast.oauthLinkCopyFailed': 'Failed to copy OAuth link',
'settings.providers.page.toast.deviceCodeCopied': 'Device code copied',
'settings.providers.page.toast.deviceCodeCopyFailed': 'Failed to copy device code',
'settings.providers.page.toast.providerDisconnected': 'Provider disconnected',
'settings.providers.page.toast.providerDisconnectFailed': 'Failed to disconnect provider',
'settings.mcp.page.empty.selectServer': 'Select an MCP server from the sidebar',
'settings.mcp.page.empty.addNewOne': 'or add a new one',
'settings.mcp.page.header.newServer': 'New MCP Server',
'settings.mcp.page.header.configureNewServer': 'Configure a new MCP server',
'settings.mcp.page.header.transport': '{type} transport',
'settings.mcp.page.transport.local': 'Local · stdio',
'settings.mcp.page.transport.remote': 'Remote · SSE',
'settings.mcp.page.status.label.connected': 'Connected',
'settings.mcp.page.status.label.failed': 'Failed',
'settings.mcp.page.status.label.needsAuth': 'Needs auth',
'settings.mcp.page.status.label.needsRegistration': 'Needs registration',
'settings.mcp.page.status.description.connected': 'Connected and ready for OpenCode to discover tools and resources.',
'settings.mcp.page.status.description.failedDefault': 'OpenCode could not reach this MCP server.',
'settings.mcp.page.status.description.needsAuth': 'This remote MCP server requires authorization before it can connect.',
'settings.mcp.page.status.description.needsClientRegistrationDefault': 'This remote MCP server requires client registration before authorization can complete.',
'settings.mcp.page.status.description.disabled': 'This MCP server is disabled in configuration.',
'settings.mcp.page.status.description.default': 'Refresh or test the connection to load live runtime status.',
'settings.mcp.page.status.runtimeStatus': 'Runtime Status',
'settings.mcp.page.status.projectScopedTo': 'Project-scoped to {directory}',
'settings.mcp.page.status.userScoped': 'User-scoped configuration',
'settings.mcp.page.status.activeProject': 'the active project',
'settings.mcp.page.actions.connect': 'Connect',
'settings.mcp.page.actions.disconnect': 'Disconnect',
'settings.mcp.page.actions.authorize': 'Authorize',
'settings.mcp.page.actions.reauthorize': 'Reauthorize',
'settings.mcp.page.actions.clearAuth': 'Clear Auth',
'settings.mcp.page.actions.test': 'Test',
'settings.mcp.page.actions.testConnection': 'Test Connection',
'settings.mcp.page.actions.working': 'Working...',
'settings.mcp.page.actions.starting': 'Starting...',
'settings.mcp.page.actions.clearing': 'Clearing...',
'settings.mcp.page.actions.testing': 'Testing...',
'settings.mcp.page.actions.completing': 'Completing...',
'settings.mcp.page.actions.completeAuthorization': 'Complete Authorization',
'settings.mcp.page.actions.openInBrowser': 'Open in Browser',
'settings.mcp.page.actions.copyLink': 'Copy Link',
'settings.mcp.page.actions.deleting': 'Deleting…',
'settings.mcp.page.auth.authorizationUrl': 'Authorization URL',
'settings.mcp.page.auth.manualFallbackTitle': 'Manual Authorization Fallback',
'settings.mcp.page.auth.manualFallbackDescription': 'If the browser returns to a different machine or shows a callback URL with a code, paste that full URL or the raw code here.',
'settings.mcp.page.auth.callbackInputPlaceholder': 'Paste the callback URL or authorization code',
'settings.mcp.page.auth.waitingForOpenCode': 'Waiting for OpenCode to observe the completed browser authorization flow...',
'settings.mcp.page.server.title': 'Server',
'settings.mcp.page.server.name': 'Server Name',
'settings.mcp.page.server.namePlaceholder': 'my-mcp-server',
'settings.mcp.page.server.importJson': 'Import from JSON Snippet',
'settings.mcp.page.server.importJsonTitle': 'Import a full MCP server configuration from a JSON snippet',
'settings.mcp.page.server.enable': 'Enable Server',
'settings.mcp.page.server.enableAria': 'Enable server',
'settings.mcp.page.server.transportMode': 'Transport Mode',
'settings.mcp.page.connection.command': 'Command',
'settings.mcp.page.connection.serverUrl': 'Server URL',
'settings.mcp.page.connection.serverUrlPlaceholder': 'https://mcp.example.com/mcp',
'settings.mcp.page.connection.pasteCommand': 'Paste Command',
'settings.mcp.page.connection.pasteCommandTitle': 'Paste a local command from clipboard and auto-split',
'settings.mcp.page.connection.previewArgs': 'Preview ({count} args)',
'settings.mcp.page.advanced.title': 'Advanced Remote Options',
'settings.mcp.page.advanced.configure': 'Configure advanced options',
'settings.mcp.page.advanced.autoDetect': 'Auto-detect',
'settings.mcp.page.advanced.custom': 'Custom',
'settings.mcp.page.advanced.headers': 'headers',
'settings.mcp.page.advanced.timeoutMs': 'Timeout (ms)',
'settings.mcp.page.advanced.timeoutHint': 'Leave blank to use OpenCode\'s default MCP timeout.',
'settings.mcp.page.advanced.requestHeaders': 'Request Headers',
'settings.mcp.page.advanced.headerNamePlaceholder': 'Header-Name',
'settings.mcp.page.advanced.pasteHeaders': 'Paste headers',
'settings.mcp.page.advanced.pasteHeadersTitle': 'Paste KEY=VALUE header lines from clipboard',
'settings.mcp.page.advanced.oauthAutoDetection': 'Enable OAuth auto-detection',
'settings.mcp.page.advanced.oauthAutoDetectionAria': 'Enable OAuth auto-detection',
'settings.mcp.page.advanced.oauthClientIdPlaceholder': 'OAuth client ID',
'settings.mcp.page.advanced.oauthClientSecretPlaceholder': 'OAuth client secret',
'settings.mcp.page.advanced.oauthScopesPlaceholder': 'Scopes (space-delimited)',
'settings.mcp.page.advanced.oauthRedirectUriPlaceholder': 'Redirect URI',
'settings.mcp.page.advanced.oauthHint': 'Leave these fields blank to let OpenCode infer OAuth settings from the MCP server.',
'settings.mcp.page.advanced.oauthCallbackHint': 'Browser-based MCP authorization uses this callback URL when the redirect URI is blank:',
'settings.mcp.page.env.title': 'Environment Variables',
'settings.mcp.page.env.key': 'Key',
'settings.mcp.page.env.value': 'Value',
'settings.mcp.page.env.valuePlaceholder': 'value',
'settings.mcp.page.env.hide': 'Hide',
'settings.mcp.page.env.show': 'Show',
'settings.mcp.page.env.addVariable': 'Add variable',
'settings.mcp.page.env.addEnvironmentVariable': 'Add environment variable',
'settings.mcp.page.env.keyPlaceholder': 'API_KEY',
'settings.mcp.page.env.pasteEnv': 'Paste .env',
'settings.mcp.page.env.pasteEnvTitle': 'Paste KEY=VALUE lines from clipboard',
'settings.mcp.page.env.plainTextWarning': '⚠ Values are stored as plain text in opencode.json',
'settings.mcp.page.env.removeVariableAria': 'Remove variable',
'settings.mcp.page.importDialog.title': 'Import JSON Snippet',
'settings.mcp.page.importDialog.description': 'Paste a full MCP JSON snippet from docs or another config file. The parsed values will populate this form for review before saving.',
'settings.mcp.page.importDialog.pasteFromClipboard': 'Paste JSON from Clipboard',
'settings.mcp.page.deleteDialog.title': 'Delete "{name}"?',
'settings.mcp.page.deleteDialog.descriptionPrefix': 'This removes the server from',
'settings.mcp.page.deleteDialog.descriptionSuffix': 'OpenCode will need to reload.',
'settings.mcp.page.toast.clipboardReadFailed': 'Cannot read clipboard',
'settings.mcp.page.toast.configImported': 'MCP configuration imported',
'settings.mcp.page.toast.nameRequired': 'Name is required',
'settings.mcp.page.toast.serverNameExists': 'A server with this name already exists',
'settings.mcp.page.toast.localCommandRequired': 'Command cannot be empty for a local server',
'settings.mcp.page.toast.remoteUrlRequired': 'URL cannot be empty for a remote server',
'settings.mcp.page.toast.serverCreatedReloadFailed': 'MCP server created, but OpenCode reload failed.',
'settings.mcp.page.toast.savedReloadFailed': 'Saved, but OpenCode reload failed.',
'settings.mcp.page.toast.retryRefreshHint': 'Retry refresh or reopen Settings before authorizing this server.',
'settings.mcp.page.toast.serverCreatedReloading': 'MCP server created. OpenCode reloading…',
'settings.mcp.page.toast.savedReloading': 'Saved. OpenCode reloading…',
'settings.mcp.page.toast.saveFailed': 'Failed to save',
'settings.mcp.page.toast.unexpectedError': 'An error occurred',
'settings.mcp.page.toast.serverDeletedReloadFailed': '"{name}" deleted, but OpenCode reload failed',
'settings.mcp.page.toast.refreshListIfStale': 'Refresh the MCP list if the UI looks stale.',
'settings.mcp.page.toast.serverDeleted': '"{name}" deleted',
'settings.mcp.page.toast.deleteFailed': 'Failed to delete',
'settings.mcp.page.toast.disconnected': 'Disconnected',
'settings.mcp.page.toast.connected': 'Connected',
'settings.mcp.page.toast.connectionNeedsAuthorization': 'Connection requires authorization',
'settings.mcp.page.toast.connectionNeedsClientRegistration': 'Connection requires client registration',
'settings.mcp.page.toast.connectionFailed': 'Connection failed',
'settings.mcp.page.toast.connectionAttemptFinished': 'Connection attempt finished. Refresh status for details.',
'settings.mcp.page.toast.createServerBeforeLiveActions': 'Create the server before running live actions',
'settings.mcp.page.toast.saveBeforeLiveActions': 'Save changes before running live actions',
'settings.mcp.page.toast.refreshStatusFailed': 'Failed to refresh MCP status',
'settings.mcp.page.toast.oauthRedirectUrlBuildFailed': 'Unable to build MCP OAuth redirect URL',
'settings.mcp.page.toast.oauthBrowserCallbackSaveFailed': 'Failed to save the browser callback URL for MCP authorization',
'settings.mcp.page.toast.openCodeReloadFailedAfterCallbackSave': 'OpenCode reload failed after saving the browser callback URL',
'settings.mcp.page.toast.completeAuthorizationInBrowserWithPaste': 'Complete the MCP authorization flow in your browser, then paste the returned code or callback URL here',
'settings.mcp.page.toast.completeAuthorizationInBrowser': 'Complete the MCP authorization flow in your browser',
'settings.mcp.page.toast.openAuthorizationUrlFailed': 'Could not open the authorization URL automatically',
'settings.mcp.page.toast.authorizationStartFailed': 'Failed to start authorization',
'settings.mcp.page.toast.authSessionExpired': 'Authorization session expired or was cleared during reload. Click Authorize again.',
'settings.mcp.page.toast.savedAuthorizationRemoved': 'Saved MCP authorization was removed',
'settings.mcp.page.toast.clearAuthorizationFailed': 'Failed to clear authorization',
'settings.mcp.page.toast.authorizationUrlCopied': 'Authorization URL copied',
'settings.mcp.page.toast.authorizationUrlCopyFailed': 'Failed to copy authorization URL',
'settings.mcp.page.toast.pasteCallbackOrCodeFirst': 'Paste the callback URL or authorization code first',
'settings.mcp.page.toast.missingServerDetails': 'Missing MCP server details. Select the server again or paste the full callback URL.',
'settings.mcp.page.toast.authorizationCompleted': 'MCP authorization completed',
'settings.mcp.page.toast.authorizationCompletedFor': 'MCP authorization completed for {name}',
'settings.mcp.page.toast.authorizationCompleteFailed': 'Failed to complete MCP authorization',
'settings.mcp.page.toast.enableServerBeforeTest': 'Enable this server before testing the connection',
'settings.mcp.page.toast.connectionTestSucceeded': 'Connection test succeeded',
'settings.mcp.page.toast.connectionTestFailed': 'Connection test failed',
'settings.mcp.page.toast.connectionTestFinished': 'Connection test finished. Refresh status for details.',
'settings.mcp.page.toast.authorizationFailed': 'Authorization failed',
'settings.mcp.page.toast.authorizationStillInProgress': 'Authorization is still in progress in your browser. Paste the callback URL or code if needed.',
'settings.mcp.page.toast.noKeyValuePairsFound': 'No KEY=VALUE pairs found in clipboard',
'settings.mcp.page.toast.importedVariablesCount': 'Imported variables: {count}',
'settings.mcp.page.toast.pastedArgumentsCount': 'Pasted arguments: {count}',
'settings.shared.projectSelector.fallbackProject': 'Project',
'settings.shared.projectSelector.switchProjectAria': 'Switch project',
'settings.shared.projectSelector.switchProjectTitle': 'Switch project',
'settings.openchamber.defaults.title': 'Session Defaults',
'settings.openchamber.defaults.summaryPrefix': 'New sessions will start with:',
'settings.openchamber.defaults.summaryOpenCodeDefault': 'OpenCode agent default',
'settings.openchamber.defaults.field.defaultModel': 'Default Model',
'settings.openchamber.defaults.field.defaultThinking': 'Default Thinking',
'settings.openchamber.defaults.field.thinkingPlaceholder': 'Thinking',
'settings.openchamber.defaults.field.defaultAgent': 'Default Agent',
'settings.openchamber.defaults.field.showDeletionDialogAria': 'Show deletion dialog',
'settings.openchamber.defaults.field.showDeletionDialog': 'Show Deletion Dialog',
'settings.openchamber.defaults.field.openFilesPreviewAria': 'Open files in preview mode',
'settings.openchamber.defaults.field.openFilesPreview': 'Open files in preview mode',
'settings.openchamber.defaults.option.default': 'Default',
'settings.openchamber.defaults.option.defaultLowercase': 'default',
'settings.openchamber.git.title': 'Git Preferences',
'settings.openchamber.git.changesViewTitle': 'Changes View',
'settings.openchamber.git.changesViewAria': 'Git changes view mode',
'settings.openchamber.git.option.flatList': 'Flat List',
'settings.openchamber.git.option.treeView': 'Tree View',
'settings.openchamber.git.optionAria': 'Git changes view mode: {option}',
'settings.openchamber.git.enableGitmojiAria': 'Enable Gitmoji picker',
'settings.openchamber.git.enableGitmoji': 'Enable Gitmoji Picker',
'settings.openchamber.git.showGitignoredAria': 'Display gitignored files',
'settings.openchamber.git.showGitignored': 'Display Gitignored Files',
'settings.github.page.tooltip.connectAccount': 'Connect a GitHub account for in-app PR and issue workflows.',
'settings.github.page.avatarAlt.withLogin': '{login} avatar',
'settings.github.page.avatarAlt.fallback': 'GitHub avatar',
'settings.github.page.label.unknownUser': 'unknown',
'settings.github.page.label.scopes': 'Scopes: {value}',
'settings.github.page.label.otherAccounts': 'Other Accounts',
'settings.github.page.actions.disconnect': 'Disconnect',
'settings.github.page.actions.connect': 'Connect GitHub',
'settings.github.page.actions.switchTo': 'Switch to',
'settings.github.page.actions.addAccount': 'Add Account',
'settings.github.page.actions.openGithub': 'Open GitHub',
'settings.github.page.status.notConnected': 'Not Connected',
'settings.github.page.status.active': 'Active',
'settings.github.page.flow.title': 'Authorize OpenChamber',
'settings.github.page.flow.description': 'In GitHub, enter the following code to authorize this device:',
'settings.github.page.flow.waiting': 'Waiting for approval… (auto-refresh)',
'settings.github.page.toast.startConnectFailed': 'Failed to start GitHub connect',
'settings.github.page.toast.connected': 'GitHub connected',
'settings.github.page.toast.authorizationFailed': 'GitHub authorization failed',
'settings.github.page.toast.disconnected': 'GitHub disconnected',
'settings.github.page.toast.disconnectFailed': 'Failed to disconnect GitHub',
'settings.github.page.toast.accountSwitched': 'GitHub account switched',
'settings.github.page.toast.accountSwitchFailed': 'Failed to switch GitHub account',
'settings.notifications.page.delivery.title': 'Notification Delivery',
'settings.notifications.page.delivery.enableAria': 'Enable notifications',
'settings.notifications.page.delivery.enableLabel': 'Enable Notifications',
'settings.notifications.page.delivery.focusedAria': 'Notify while app is focused',
'settings.notifications.page.delivery.focusedLabel': 'Notify While App is Focused',
'settings.notifications.page.delivery.testAction': 'Send test notification',
'settings.notifications.page.delivery.browserPermissionHint': 'Your browser may ask for permission the first time.',
'settings.notifications.page.delivery.permissionDenied': 'Notification permission denied. Enable it in your browser settings.',
'settings.notifications.page.delivery.permissionGrantedButDisabled': 'Permission granted, but notifications are disabled.',
'settings.notifications.page.delivery.vscodeHint': 'When enabled, notifications are delivered through VS Code native notifications.',
'settings.notifications.page.events.title': 'Notification Events',
'settings.notifications.page.events.completionAria': 'Agent completion',
'settings.notifications.page.events.completionLabel': 'Agent Completion',
'settings.notifications.page.events.subtaskAria': 'Subagent completion',
'settings.notifications.page.events.subtaskLabel': 'Subagent Completion',
'settings.notifications.page.events.errorAria': 'Agent errors',
'settings.notifications.page.events.errorLabel': 'Agent Errors',
'settings.notifications.page.events.questionAria': 'Agent questions',
'settings.notifications.page.events.questionLabel': 'Agent Questions',
'settings.notifications.page.template.title': 'Notification Templates',
'settings.notifications.page.template.variablesLabel': 'Variables:',
'settings.notifications.page.template.event.completion': 'completion',
'settings.notifications.page.template.event.subtask': 'Subagent Completion',
'settings.notifications.page.template.event.error': 'error',
'settings.notifications.page.template.event.question': 'question',
'settings.notifications.page.template.field.title': 'Title',
'settings.notifications.page.template.field.message': 'Message',
'settings.notifications.page.template.defaults.completion.title': '{agent_name} is ready',
'settings.notifications.page.template.defaults.completion.message': '{model_name} completed the task',
'settings.notifications.page.template.defaults.error.title': 'Tool error',
'settings.notifications.page.template.defaults.error.message': '{last_message}',
'settings.notifications.page.template.defaults.question.title': 'Input needed',
'settings.notifications.page.template.defaults.question.message': '{last_message}',
'settings.notifications.page.template.defaults.subtask.title': '{agent_name} is ready',
'settings.notifications.page.template.defaults.subtask.message': '{model_name} completed the task',
'settings.notifications.page.summary.title': 'AI Summarization',
'settings.notifications.page.summary.toggleAria': 'Summarize last message',
'settings.notifications.page.summary.toggleLabel': 'Summarize Last Message',
'settings.notifications.page.summary.requiresTemplateVariable': 'Requires',
'settings.notifications.page.summary.modelLabel': 'Summarization Model',
'settings.notifications.page.summary.modelTooltip': 'Used for notification and voice summaries.',
'settings.notifications.page.summary.notSelected': 'Not selected',
'settings.notifications.page.summary.thresholdLabel': 'Threshold',
'settings.notifications.page.summary.thresholdHint': 'Messages longer than this will be summarized',
'settings.notifications.page.summary.resetThresholdAria': 'Reset threshold',
'settings.notifications.page.summary.lengthLabel': 'Length',
'settings.notifications.page.summary.lengthHint': 'Target character length of the summary',
'settings.notifications.page.summary.resetLengthAria': 'Reset summary length',
'settings.notifications.page.summary.maxLengthLabel': 'Max Length',
'settings.notifications.page.summary.maxLengthHint': 'Truncate {last_message} to this length',
'settings.notifications.page.summary.resetMaxLengthAria': 'Reset max message length',
'settings.notifications.page.push.title': 'Background Push Notifications',
'settings.notifications.page.push.enableAria': 'Enable push notifications',
'settings.notifications.page.push.enableLabel': 'Enable push notifications',
'settings.notifications.page.push.unsupportedHint': 'Push not supported. Desktop Chrome/Edge and Android support push. iOS requires an installed PWA.',
'settings.notifications.page.push.supportedHint': 'Receive alerts via your operating system background service',
'settings.notifications.page.push.loadingAria': 'Loading',
'settings.notifications.page.toast.permissionDenied.title': 'Notification permission denied',
'settings.notifications.page.toast.permissionDenied.description': 'Please enable notifications in your browser settings.',
'settings.notifications.page.toast.permissionDenied.enableInBrowser': 'Enable notifications in your browser settings.',
'settings.notifications.page.toast.requestPermissionFailed': 'Failed to request notification permission',
'settings.notifications.page.toast.notificationsApiUnavailable': 'Notifications API not available',
'settings.notifications.page.toast.testNotificationSent': 'Test notification sent successfully',
'settings.notifications.page.toast.testNotificationFailed': 'Failed to send test notification',
'settings.notifications.page.toast.pushUnsupported': 'Push notifications not supported',
'settings.notifications.page.toast.pushApiUnavailable': 'Push API not available',
'settings.notifications.page.toast.pushKeyLoadFailed': 'Failed to load push key',
'settings.notifications.page.toast.enableBackgroundFailed': 'Failed to enable background notifications',
'settings.notifications.page.toast.backgroundEnabled': 'Background notifications enabled',
'settings.notifications.page.toast.backgroundDisabled': 'Background notifications disabled',
'settings.notifications.page.testNotification.title': 'Test Notification',
'settings.notifications.page.testNotification.body': 'This is a test notification from OpenChamber.',
'settings.voice.page.section.voiceSetup': 'Voice Setup',
'settings.voice.page.section.speechRecognition': 'Speech Recognition',
'settings.voice.page.section.playbackAndSummary': 'Playback',
'settings.voice.page.field.enableVoiceModeAria': 'Enable voice mode',
'settings.voice.page.field.enableVoiceMode': 'Enable Voice Mode',
'settings.voice.page.field.provider': 'Provider',
'settings.voice.page.provider.browser': 'Browser',
'settings.voice.page.provider.custom': 'Custom',
'settings.voice.page.provider.say': 'Say',
'settings.voice.page.provider.server': 'Server',
'settings.voice.page.provider.wasm': 'Local',
'settings.voice.page.stt.wasmModel': 'Whisper Model',
'settings.voice.page.stt.wasmLoaded': 'Model loaded, ready',
'settings.voice.page.stt.wasmDownloading': 'Downloading model...',
'settings.voice.page.stt.wasmLoading': 'Loading model...',
'settings.voice.page.stt.wasmNotLoaded': 'Model will load on first voice use',
'settings.voice.page.stt.wasmDownload': 'Load',
'settings.voice.page.stt.wasmRetry': 'Retry',
'settings.voice.page.tooltip.browser': 'Free, offline, limited mobile support.',
'settings.voice.page.tooltip.openai': 'High quality, mobile ready, needs API key.',
'settings.voice.page.tooltip.custom': 'OpenAI-compatible server (for example Kokoro).',
'settings.voice.page.tooltip.say': 'macOS native. Fast, free, offline.',
'settings.voice.page.tooltip.sttBrowser': 'Web Speech API (Chrome/Edge). Free, no setup.',
'settings.voice.page.tooltip.sttServer': 'OpenAI-compatible Whisper server. Better accuracy, any language.',
'settings.voice.page.field.apiKey': 'API Key',
'settings.voice.page.field.apiKeyHintUsingConfig': 'Using key from configuration',
'settings.voice.page.field.apiKeyHintRequired': 'OpenAI TTS requires an API key',
'settings.voice.page.field.apiKeyHintProvide': 'Provide your OpenAI key',
'settings.voice.page.field.serverUrl': 'Server URL',
'settings.voice.page.field.serverUrlHint': 'Base URL of the OpenAI-compatible TTS server',
'settings.voice.page.field.model': 'Model',
'settings.voice.page.field.voice': 'Voice',
'settings.voice.page.field.voiceIdentifierHint': 'Voice identifier supported by the server',
'settings.voice.page.field.configuredAbove': 'Configured above',
'settings.voice.page.actions.preview': 'Preview',
'settings.voice.page.field.selectVoicePlaceholder': 'Select voice',
'settings.voice.page.field.auto': 'Auto',
'settings.voice.page.field.speechRate': 'Speech Rate',
'settings.voice.page.field.speechPitch': 'Speech Pitch',
'settings.voice.page.field.speechVolume': 'Speech Volume',
'settings.voice.page.field.language': 'Language',
'settings.voice.page.field.selectLanguagePlaceholder': 'Select language',
'settings.voice.page.field.sttBrowserSupportError': 'MediaRecorder or AudioContext is not available in this browser. Server STT may not work.',
'settings.voice.page.field.sttServerUrlHint': 'Base URL of the Whisper-compatible server',
'settings.voice.page.field.sttLanguageHint': 'BCP-47 code (for example en, fr). Leave blank for auto-detect.',
'settings.voice.page.field.silenceThreshold': 'Silence Threshold',
'settings.voice.page.field.silenceHold': 'Silence Hold',
'settings.voice.page.field.transcribeOnStopAria': 'Transcribe when stopping recording',
'settings.voice.page.field.transcribeOnStop': 'Transcribe on Stop',
'settings.voice.page.field.millisecondsUnit': 'ms',
'settings.voice.page.field.messageReadAloudButtonAria': 'Message read aloud button',
'settings.voice.page.field.messageReadAloudButton': 'Read message aloud button',
'settings.voice.page.field.summarizeBeforePlaybackAria': 'Summarize before playback',
'settings.voice.page.field.summarizeBeforePlayback': 'Summarize Before Playback',
'settings.voice.page.field.summarizeVoiceModeResponsesAria': 'Summarize voice mode responses',
'settings.voice.page.field.summarizeVoiceModeResponses': 'Summarize Voice Mode Responses',
'settings.voice.page.field.summarizationThreshold': 'Summarization Threshold',
'settings.voice.page.field.summaryMaxLength': 'Summary Max Length',
'settings.voice.page.hint.shiftClickPrefix': 'Press',
'settings.voice.page.hint.shiftClickSuffix': 'on the mic button to toggle continuous mode',
'settings.voice.page.preview.browserVoiceFallback': 'your browser voice',
'settings.voice.page.preview.voiceLine': 'Hello! I\'m {voiceName}. This is how I sound.',
'settings.voice.page.preview.customServerLine': 'Hello! This is a preview of the custom TTS server.',
'settings.voice.page.field.ttsInputMode': 'TTS Input Mode',
'settings.voice.page.field.ttsInputModeSanitized': 'Sanitized',
'settings.voice.page.field.ttsInputModeRaw': 'Raw Markdown',
'settings.openchamber.visual.section.colorMode': 'Color Mode',
'settings.openchamber.visual.section.mobileLayout': 'Mobile Layout',
'settings.openchamber.visual.option.mobileLayout.default': 'Old',
'settings.openchamber.visual.option.mobileLayout.new': 'New',
'settings.openchamber.visual.section.localization': 'Localization',
'settings.openchamber.visual.section.spacingAndLayout': 'Spacing & Layout',
'settings.openchamber.visual.section.navigation': 'Navigation',
'settings.openchamber.visual.section.chatRenderMode': 'Chat Render Mode',
'settings.openchamber.visual.section.chatRenderModeAria': 'Chat render mode',
'settings.openchamber.visual.section.messageStreamTransport': 'Message Stream Transport',
'settings.openchamber.visual.section.activityDefault': 'Activity Default',
'settings.openchamber.visual.section.activityDefaultAria': 'Activity default mode',
'settings.openchamber.visual.section.showToolsOpenedByDefault': 'Show tools opened by default:',
'settings.openchamber.visual.section.userMessageRendering': 'User Message Rendering',
'settings.openchamber.visual.section.userMessageRenderingAria': 'User message rendering mode',
'settings.openchamber.visual.section.mermaidRendering': 'Mermaid Rendering',
'settings.openchamber.visual.section.mermaidRenderingAria': 'Mermaid rendering mode',
'settings.openchamber.visual.section.diffLayout': 'Diff Layout',
'settings.openchamber.visual.section.diffLayoutAria': 'Diff layout',
'settings.openchamber.visual.section.diffViewMode': 'Diff View Mode',
'settings.openchamber.visual.section.diffViewModeAria': 'Diff view mode',
'settings.openchamber.visual.section.privacy': 'Privacy',
'settings.openchamber.visual.field.lightTheme': 'Light Theme',
'settings.openchamber.visual.field.darkTheme': 'Dark Theme',
'settings.openchamber.visual.field.selectLightThemeAria': 'Select light theme',
'settings.openchamber.visual.field.selectDarkThemeAria': 'Select dark theme',
'settings.openchamber.visual.field.selectThemePlaceholder': 'Select theme',
'settings.openchamber.visual.field.timeFormat': 'Time Format',
'settings.openchamber.visual.field.weekStartsOn': 'Week Starts On',
'settings.openchamber.visual.field.selectTimeFormatAria': 'Select time format',
'settings.openchamber.visual.field.selectWeekStartAria': 'Select week start',
'settings.openchamber.visual.actions.reloadThemes': 'Reload themes',
'settings.openchamber.visual.actions.reloadingThemes': 'Reloading themes...',
'settings.openchamber.visual.field.themeImportInfoAria': 'Theme import info',
'settings.openchamber.visual.field.themeImportInfoTooltip': 'Import custom themes from ~/.config/openchamber/themes/',
'settings.openchamber.visual.field.installAppName': 'Install App Name',
'settings.openchamber.visual.field.installAppNameHint': 'Used by PWA installation process.',
'settings.openchamber.visual.field.pwaInstallAppNameAria': 'PWA install app name',
'settings.openchamber.visual.actions.resetInstallAppNameAria': 'Reset install app name',
'settings.openchamber.visual.field.installOrientation': 'Install Orientation',
'settings.openchamber.visual.field.installOrientationHint': 'Used by the installed web app. Reinstall the PWA after changing this.',
'settings.openchamber.visual.field.pwaInstallOrientationAria': 'PWA install orientation',
'settings.openchamber.visual.field.selectOrientationPlaceholder': 'Select orientation',
'settings.openchamber.visual.actions.resetInstallOrientationAria': 'Reset install orientation',
'settings.openchamber.visual.field.mobileKeyboardMode': 'Mobile Keyboard Behavior',
'settings.openchamber.visual.field.mobileKeyboardModeHint': 'Default browser behavior is safest. Resize content asks supported browsers to shrink the app when the on-screen keyboard opens.',
'settings.openchamber.visual.field.mobileKeyboardModeAria': 'Mobile keyboard behavior',
'settings.openchamber.visual.field.selectMobileKeyboardModePlaceholder': 'Select keyboard behavior',
'settings.openchamber.visual.actions.resetMobileKeyboardModeAria': 'Reset mobile keyboard behavior',
'settings.openchamber.visual.field.interfaceFontSize': 'Interface Font Size',
'settings.openchamber.visual.field.interfaceFont': 'Interface Font',
'settings.openchamber.visual.field.selectInterfaceFontAria': 'Select interface font',
'settings.openchamber.visual.actions.resetInterfaceFontAria': 'Reset interface font',
'settings.openchamber.visual.field.fontSizePercentageAria': 'Font size percentage',
'settings.openchamber.visual.actions.resetFontSizeAria': 'Reset font size',
'settings.openchamber.visual.field.terminalFontSize': 'Terminal Font Size',
'settings.openchamber.visual.field.codeFont': 'Code Font',
'settings.openchamber.visual.field.selectCodeFontAria': 'Select code font',
'settings.openchamber.visual.actions.resetCodeFontAria': 'Reset code font',
'settings.openchamber.visual.actions.resetTerminalFontSizeAria': 'Reset terminal font size',
'settings.openchamber.visual.field.spacingDensity': 'Spacing Density',
'settings.openchamber.visual.actions.resetSpacingAria': 'Reset spacing',
'settings.openchamber.visual.field.inputBarOffset': 'Input Bar Offset',
'settings.openchamber.visual.field.inputBarOffsetTooltip': 'Raise input bar to avoid OS-level screen obstructions like home bars.',
'settings.openchamber.visual.actions.resetInputBarOffsetAria': 'Reset input bar offset',
'settings.openchamber.visual.field.terminalQuickKeysAria': 'Terminal quick keys',
'settings.openchamber.visual.field.terminalQuickKeys': 'Terminal Quick Keys',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': 'Show Esc, Ctrl, Arrows in terminal view',
'settings.openchamber.visual.field.fileEditorKeymap': 'File editor keymap',
'settings.openchamber.visual.option.fileEditorKeymap.default': 'Default',
'settings.openchamber.visual.option.fileEditorKeymap.vim': 'Vim',
'settings.openchamber.visual.field.activityDefaultModeAria': 'Activity default mode: {option}',
'settings.openchamber.visual.field.showExpandedBashToolsAria': 'Show expanded bash tools',
'settings.openchamber.visual.field.showExpandedEditToolsAria': 'Show expanded edit tools',
'settings.openchamber.visual.field.bash': 'Bash',
'settings.openchamber.visual.field.editTools': 'Edit tools',
'settings.openchamber.visual.field.userMessageRenderingAria': 'User message rendering: {option}',
'settings.openchamber.visual.field.mermaidRenderingAria': 'Mermaid rendering: {option}',
'settings.openchamber.visual.field.diffLayoutAria': 'Diff layout: {option}',
'settings.openchamber.visual.field.diffViewModeAria': 'Diff view mode: {option}',
'settings.openchamber.visual.field.showReasoningTracesAria': 'Show reasoning traces',
'settings.openchamber.visual.field.showReasoningTraces': 'Show Reasoning Traces',
'settings.openchamber.visual.field.collapsibleThinkingBlocksAria': 'Enable collapsible reasoning blocks',
'settings.openchamber.visual.field.collapsibleThinkingBlocks': 'Enable Collapsible Reasoning Blocks',
'settings.openchamber.visual.field.stickyUserHeaderAria': 'Sticky user header',
'settings.openchamber.visual.field.stickyUserHeader': 'Sticky User Header',
'settings.openchamber.visual.field.wideChatLayoutAria': 'Wide chat layout',
'settings.openchamber.visual.field.wideChatLayout': 'Wide Chat Layout',
'settings.openchamber.visual.field.showSplitAssistantMessageActionsAria': 'Inline assistant actions',
'settings.openchamber.visual.field.showSplitAssistantMessageActions': 'Inline Assistant Actions',
'settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip': 'Show Copy Answer, Save as image, and Read aloud on assistant text blocks that appear before later tool calls in the same response.',
'settings.openchamber.visual.field.showToolFileIconsAria': 'Show tool file icons',
'settings.openchamber.visual.field.showToolFileIcons': 'Show Tool File Icons',
'settings.openchamber.visual.field.showTurnChangedFilesAria': 'Show changed files for completed turns',
'settings.openchamber.visual.field.showTurnChangedFiles': 'Show Changed Files for Completed Turns',
'settings.openchamber.visual.field.showMobileStatusBarAria': 'Show mobile status bar',
'settings.openchamber.visual.field.showMobileStatusBar': 'Show Mobile Status Bar',
'settings.openchamber.visual.field.showDotfilesAria': 'Show dotfiles',
'settings.openchamber.visual.field.showDotfiles': 'Show Dotfiles',
'settings.openchamber.visual.field.queueMessagesByDefaultAria': 'Queue messages by default',
'settings.openchamber.visual.field.queueMessagesByDefault': 'Queue Messages by Default',
'settings.openchamber.visual.field.queueMessagesByDefaultTooltip': 'When enabled, Enter queues messages. Use {modifier}+Enter to send.',
'settings.openchamber.visual.field.persistDraftMessagesAria': 'Persist draft messages',
'settings.openchamber.visual.field.persistDraftMessages': 'Persist Draft Messages',
'settings.openchamber.visual.field.enableSpellcheckInTextInputsAria': 'Enable spellcheck in text inputs',
'settings.openchamber.visual.field.enableSpellcheckInTextInputs': 'Enable Spellcheck in Text Inputs',
'settings.openchamber.visual.field.sendAnonymousUsageReportsAria': 'Send anonymous usage reports',
'settings.openchamber.visual.field.sendAnonymousUsageReports': 'Send anonymous usage reports',
'settings.openchamber.visual.field.sendAnonymousUsageReportsHint': 'Helps us understand which app versions are actively used so we can prioritize improvements. Only app version, platform, and runtime are collected - no personal data or code.',
'settings.openchamber.visual.option.themeMode.system': 'System',
'settings.openchamber.visual.option.themeMode.light': 'Light',
'settings.openchamber.visual.option.themeMode.dark': 'Dark',
'settings.openchamber.visual.option.diffLayout.dynamic.label': 'Dynamic',
'settings.openchamber.visual.option.diffLayout.dynamic.description': 'New inline, modified side-by-side.',
'settings.openchamber.visual.option.diffLayout.inline.label': 'Always inline',
'settings.openchamber.visual.option.diffLayout.inline.description': 'Show as a single unified view.',
'settings.openchamber.visual.option.diffLayout.sideBySide.label': 'Always side-by-side',
'settings.openchamber.visual.option.diffLayout.sideBySide.description': 'Compare original and modified files.',
'settings.openchamber.visual.option.diffViewMode.single.label': 'Single file',
'settings.openchamber.visual.option.diffViewMode.single.description': 'Show one file at a time.',
'settings.openchamber.visual.option.diffViewMode.stacked.label': 'All files',
'settings.openchamber.visual.option.diffViewMode.stacked.description': 'Stack all changed files together.',
'settings.openchamber.visual.option.mermaidRendering.svg.label': 'SVG',
'settings.openchamber.visual.option.mermaidRendering.svg.description': 'Render diagrams as scalable graphics.',
'settings.openchamber.visual.option.mermaidRendering.ascii.label': 'ASCII',
'settings.openchamber.visual.option.mermaidRendering.ascii.description': 'Render diagrams as text blocks.',
'settings.openchamber.visual.option.pwaOrientation.system.label': 'Follow system',
'settings.openchamber.visual.option.pwaOrientation.system.description': 'Respect the device rotation setting.',
'settings.openchamber.visual.option.pwaOrientation.portrait.label': 'Portrait lock',
'settings.openchamber.visual.option.pwaOrientation.portrait.description': 'Install the app locked to portrait.',
'settings.openchamber.visual.option.pwaOrientation.landscape.label': 'Landscape lock',
'settings.openchamber.visual.option.pwaOrientation.landscape.description': 'Install the app locked to landscape.',
'settings.openchamber.visual.option.mobileKeyboardMode.native.label': 'Follow browser',
'settings.openchamber.visual.option.mobileKeyboardMode.native.description': 'Use the browser default for panning and viewport changes when the keyboard opens.',
'settings.openchamber.visual.option.mobileKeyboardMode.resizeContent.label': 'Resize content',
'settings.openchamber.visual.option.mobileKeyboardMode.resizeContent.description': 'Ask supported browsers to shrink the app layout instead of relying only on panning.',
'settings.openchamber.visual.option.userMessageRendering.markdown.label': 'Markdown',
'settings.openchamber.visual.option.userMessageRendering.markdown.description': 'Render user text with markdown formatting.',
'settings.openchamber.visual.option.userMessageRendering.plain.label': 'Plain text',
'settings.openchamber.visual.option.userMessageRendering.plain.description': 'Render user text with preserved whitespace and links.',
'settings.openchamber.visual.option.chatRenderMode.sorted.label': 'Sorted',
'settings.openchamber.visual.option.chatRenderMode.sorted.description': 'Render completed assistant messages without live streaming.',
'settings.openchamber.visual.option.chatRenderMode.live.label': 'Live',
'settings.openchamber.visual.option.chatRenderMode.live.description': 'Stream assistant text and tools as they arrive.',
'settings.openchamber.visual.option.messageTransport.auto.label': 'Auto',
'settings.openchamber.visual.option.messageTransport.auto.description': 'Prefer WebSocket and fall back to SSE if needed.',
'settings.openchamber.visual.option.messageTransport.ws.label': 'WebSocket',
'settings.openchamber.visual.option.messageTransport.ws.description': 'Use WebSocket for message streaming.',
'settings.openchamber.visual.option.messageTransport.sse.label': 'SSE',
'settings.openchamber.visual.option.messageTransport.sse.description': 'Use Server-Sent Events for message streaming.',
'settings.openchamber.visual.option.activityRenderMode.collapsed.label': 'Collapsed',
'settings.openchamber.visual.option.activityRenderMode.collapsed.description': 'Keep Activity collapsed by default.',
'settings.openchamber.visual.option.activityRenderMode.summary.label': 'Expanded',
'settings.openchamber.visual.option.activityRenderMode.summary.description': 'Expand Activity by default.',
'settings.openchamber.visual.option.timeFormat.auto.label': 'Auto',
'settings.openchamber.visual.option.timeFormat.auto.description': 'Use system locale preference.',
'settings.openchamber.visual.option.timeFormat.24h.label': '24-hour',
'settings.openchamber.visual.option.timeFormat.24h.description': 'Show time as 14:15.',
'settings.openchamber.visual.option.timeFormat.12h.label': '12-hour',
'settings.openchamber.visual.option.timeFormat.12h.description': 'Show time as 02:15 PM.',
'settings.openchamber.visual.option.weekStart.auto.label': 'Auto',
'settings.openchamber.visual.option.weekStart.auto.description': 'Use locale week start.',
'settings.openchamber.visual.option.weekStart.monday.label': 'Monday',
'settings.openchamber.visual.option.weekStart.sunday.label': 'Sunday',
'settings.magicPrompts.page.loading.aria': 'Loading',
'settings.magicPrompts.page.loading.text': 'Loading Magic Prompts...',
'settings.magicPrompts.page.block.visiblePrompt': 'Visible Prompt',
'settings.magicPrompts.page.block.instructions': 'Instructions',
'settings.magicPrompts.page.group.gitCommitGenerate.title': 'Commit Generation',
'settings.magicPrompts.page.group.gitCommitGenerate.description': 'Prompts used for commit message generation: visible user message + hidden instructions.',
'settings.magicPrompts.page.group.gitPrGenerate.title': 'PR Generation',
'settings.magicPrompts.page.group.gitPrGenerate.description': 'Prompts used for PR title/body generation: visible user message + hidden instructions.',
'settings.magicPrompts.page.group.githubPrReview.title': 'PR Review',
'settings.magicPrompts.page.group.githubPrReview.description': 'Prompts used for PR review flow: visible user message + hidden instruction payload.',
'settings.magicPrompts.page.group.githubIssueReview.title': 'Issue Review',
'settings.magicPrompts.page.group.githubIssueReview.description': 'Prompts used for issue review flow: visible user message + hidden instruction payload.',
'settings.magicPrompts.page.group.githubPrFailedChecksReview.title': 'PR Failed Checks Review',
'settings.magicPrompts.page.group.githubPrFailedChecksReview.description': 'Prompts used for PR failed checks analysis.',
'settings.magicPrompts.page.group.githubPrCommentsReview.title': 'PR Comments Review',
'settings.magicPrompts.page.group.githubPrCommentsReview.description': 'Prompts used for PR comments analysis.',
'settings.magicPrompts.page.group.githubSinglePrCommentReview.title': 'Single PR Comment Review',
'settings.magicPrompts.page.group.githubSinglePrCommentReview.description': 'Prompts used for single PR comment analysis.',
'settings.magicPrompts.page.group.gitConflictResolve.title': 'Merge/Rebase Conflict Resolution',
'settings.magicPrompts.page.group.gitConflictResolve.description': 'Prompts used when resolving merge/rebase conflicts with AI.',
'settings.magicPrompts.page.group.gitCherrypickConflictResolve.title': 'Cherry-pick Conflict Resolution',
'settings.magicPrompts.page.group.gitCherrypickConflictResolve.description': 'Prompts used when resolving cherry-pick conflicts in integrate flow.',
'settings.magicPrompts.page.group.planImprove.title': 'Improve Plan',
'settings.magicPrompts.page.group.planImprove.description': 'Hidden prompt used when sending a saved plan into an improve flow.',
'settings.magicPrompts.page.group.planTodo.title': 'Todo Planning',
'settings.magicPrompts.page.group.planTodo.description': 'Hidden prompt used when sending a todo into a new planning session.',
'settings.magicPrompts.page.group.planImplement.title': 'Implement Plan',
'settings.magicPrompts.page.group.planImplement.description': 'Hidden prompt used when sending a saved plan into an implement flow.',
'settings.magicPrompts.page.group.sessionSummary.title': 'Session Summary',
'settings.magicPrompts.page.group.sessionSummary.description': 'Prompts used by the /summary slash command: visible user message + hidden instructions. Non-destructive - does not compact session history.',
'settings.magicPrompts.page.group.sessionWorkspaceReview.title': 'Workspace Review',
'settings.magicPrompts.page.group.sessionExplore.title': 'Codebase Tour',
'settings.magicPrompts.page.group.sessionExplore.description': 'Prompts used by the /explore slash command: visible user message + hidden instructions. Investigates the repository and gives a structured orientation — the big picture, main modules, how they connect, and where to start — rather than a file-by-file dump.',
'settings.magicPrompts.page.group.sessionWorkspaceReview.description': 'Prompts used by the /workspace-review slash command: visible user message + hidden instructions. Reviews the workspace diff for whether it achieves its intent and is correct and adequate, classifying findings by severity.',
'settings.magicPrompts.page.group.sessionFeaturePlan.title': 'Feature Planning',
'settings.magicPrompts.page.group.sessionFeaturePlan.description': 'Prompts used by the /plan-feature slash command: visible user message + hidden instructions. Runs a guided dialogue that researches the code and asks clarifying questions in small batches before producing an implementation plan.',
'settings.magicPrompts.page.group.sessionCatchUp.title': 'Catch Up',
'settings.magicPrompts.page.group.sessionCatchUp.description': 'Prompts used by the /catch-up slash command: visible user message + hidden instructions. Builds branch-aware context — the branch\'s commits, its PR, and uncommitted work together — to understand what you were doing, then gives a digestible summary and a product-focused next step.',
'settings.magicPrompts.page.group.sessionDebug.title': 'Debugging',
'settings.magicPrompts.page.group.sessionDebug.description': 'Prompts used by the /debug slash command: visible user message + hidden instructions. Runs a guided root-cause investigation — captures the symptom, forms hypotheses, checks them against the code, and confirms the cause before proposing a fix.',
'settings.magicPrompts.page.group.sessionWeigh.title': 'Weigh Options',
'settings.magicPrompts.page.group.sessionWeigh.description': 'Prompts used by the /weigh slash command: visible user message + hidden instructions. Investigates the code, then lays out 2-3 distinct approaches with trade-offs and a recommendation — without writing a plan or code.',
'settings.magicPrompts.page.group.sessionFusion.title': 'Fusion',
'settings.magicPrompts.page.group.sessionFusion.description': 'Prompts used when combining multi-run outputs into one final answer: visible user message + hidden instructions before source results.',
'settings.magicPrompts.page.actions.resetting': 'Resetting...',
'settings.magicPrompts.page.actions.resetAllOverrides': 'Reset All Overrides',
'settings.magicPrompts.page.actions.resetToDefault': 'Reset to Default',
'settings.magicPrompts.page.actions.save': 'Save',
'settings.magicPrompts.page.placeholdersLabel': 'Placeholders:',
'settings.magicPrompts.page.validation.visiblePromptRequired': 'Visible prompt cannot be empty.',
'settings.magicPrompts.page.status.unsavedChanges': 'Unsaved changes',
'settings.magicPrompts.page.status.usingSavedOverride': 'Using saved override',
'settings.magicPrompts.page.status.usingBuiltinDefault': 'Using built-in default',
'settings.magicPrompts.page.toast.loadFailed': 'Failed to load Magic Prompts',
'settings.magicPrompts.page.toast.visiblePromptRequired': 'Visible prompt cannot be empty',
'settings.magicPrompts.page.toast.saved': 'Magic prompt saved',
'settings.magicPrompts.page.toast.saveFailed': 'Failed to save magic prompt',
'settings.magicPrompts.page.toast.resetSuccess': 'Prompt reset to default',
'settings.magicPrompts.page.toast.resetFailed': 'Failed to reset prompt',
'settings.magicPrompts.page.toast.resetAllSuccess': 'All prompt overrides reset',
'settings.magicPrompts.page.toast.resetAllFailed': 'Failed to reset all prompts',
} as const;