Snippets, Agents, Commands, Plugins and Skills were desktop-only, even though the composer already reads snippets and slash commands and the chat lets you pick an agent: you could use those features from a phone but not manage them. They render through the same page and sidebar components, so the mobile settings surface only had to stop filtering them out. Making them usable needed the drill-down to be real. A split page opens its own list on mobile, but back from an item jumped all the way out to the settings root, and a separate header button was the only way back to the list — except on Skills, which had a hand-rolled exception. Turn that exception into the rule: back walks nav → page list → item in reverse on every split page, browser and system history follow the same path, and the extra header button goes away because back now does its job. The Android hardware button asks Settings to step up before the shell closes it. MCP, Providers, Usage and Magic Prompts inherit the same navigation. Testing: package type-check, lint, settings suites under the isolated runner; walked all six pages plus MCP in a browser at 390px (list → item → back to list → back to root, no horizontal overflow). The hardware back button needs a device check.
2276 lines
190 KiB
TypeScript
2276 lines
190 KiB
TypeScript
import { linearIntegrationI18n } from './linear-integration.i18n';
|
||
export const settingsDict = {
|
||
'settings.openchamber.visual.field.alwaysShowScrollbars': 'Always show scrollbars',
|
||
'settings.openchamber.visual.field.alwaysShowScrollbarsHint': 'Keep scrollbars visible even when the pointer is outside the scrollable area. Applies on this device only.',
|
||
'settings.providers.page.openCodeGo.title': 'OpenCode Go usage tracking',
|
||
'settings.providers.page.openCodeGo.description': 'Connect the OpenCode Go dashboard to show rolling, weekly, and monthly quota.',
|
||
'settings.providers.page.openCodeGo.workspaceId': 'Workspace ID',
|
||
'settings.providers.page.openCodeGo.authCookie': 'Auth cookie',
|
||
'settings.providers.page.openCodeGo.apiKey': 'API key',
|
||
'settings.providers.page.openCodeGo.help': 'Copy the workspace ID from the dashboard URL and the auth cookie from your browser developer tools. OpenChamber never scans browser cookie storage.',
|
||
'settings.providers.page.openCodeGo.save': 'Save and validate',
|
||
'settings.providers.page.openCodeGo.replace': 'Replace',
|
||
'settings.providers.page.openCodeGo.validate': 'Validate',
|
||
'settings.providers.page.openCodeGo.delete': 'Delete',
|
||
'settings.providers.page.quotaCredentials.saved': '{provider} credentials saved.',
|
||
'settings.providers.page.quotaCredentials.accessToken': 'Access token',
|
||
'settings.providers.page.quotaCredentials.usageToken': 'Usage API token',
|
||
'settings.providers.page.quotaCredentials.exeDevTokenInstructions': 'Run this command in your terminal, then paste the token below. It can only read LLM credit usage and expires after 30 days.',
|
||
'settings.providers.page.quotaCredentials.refreshToken': 'Refresh token',
|
||
'settings.providers.page.quotaCredentials.tokenPlaceholder': 'Paste token',
|
||
'settings.providers.page.openCodeGo.saveFailed': 'Could not validate OpenCode Go credentials.',
|
||
'settings.providers.page.openCodeGo.valid': 'OpenCode Go credentials are valid.',
|
||
'settings.providers.page.openCodeGo.invalid': 'OpenCode Go credentials are invalid or expired.',
|
||
'settings.providers.page.openCodeGo.deleted': 'OpenCode Go credentials deleted.',
|
||
'settings.providers.page.openCodeGo.deleteFailed': 'Could not delete OpenCode Go credentials.',
|
||
'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.applyAndRestartOpenCode': 'Apply & Restart',
|
||
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': 'Apply 1 pending configuration change and restart OpenCode.',
|
||
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': 'Apply {count} pending configuration changes and restart OpenCode.',
|
||
'settings.view.pendingRestart.applying': 'Restarting...',
|
||
'settings.view.pendingRestart.applied': 'OpenCode restarted with pending configuration changes.',
|
||
'settings.view.pendingRestart.applyFailed': 'Failed to apply configuration changes.',
|
||
'settings.view.pendingRestart.manualRestartRequired': 'Saved on disk. Restart your connected OpenCode server to apply the changes.',
|
||
'settings.view.pendingRestart.saved': 'Saved. Restart OpenCode to apply.',
|
||
'settings.view.pendingRestart.confirm.title': 'Apply & restart?',
|
||
'settings.view.pendingRestart.confirm.description': 'Restarting OpenCode will stop any running chats. Your saved configuration changes will take effect after the restart.',
|
||
'settings.view.pendingRestart.confirm.dontShowAgain': 'Don\'t show this again',
|
||
'settings.view.pendingRestart.confirm.cancel': 'Cancel',
|
||
'settings.view.actions.backToSettings': 'Back to Settings',
|
||
'settings.view.actions.closeSettings': 'Close settings',
|
||
'settings.view.actions.closeSettingsWithShortcut': 'Close Settings ({shortcut}+,)',
|
||
'settings.view.actions.back': 'Back',
|
||
'settings.view.actions.resizeNavigation': 'Resize settings navigation',
|
||
'settings.view.search.placeholder': 'Search settings',
|
||
'settings.view.search.aria': 'Search settings',
|
||
'settings.view.search.clear': 'Clear settings search',
|
||
'settings.view.search.noResults': 'No matching settings',
|
||
'settings.view.nav.group.general': 'OpenChamber',
|
||
'settings.view.nav.group.projects': 'Workspace',
|
||
'settings.view.nav.group.opencode': 'OpenCode',
|
||
'settings.view.nav.group.content': 'Library',
|
||
'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.appearance.description': 'Customize how OpenChamber looks and feels.',
|
||
'settings.page.chat.title': 'Chat',
|
||
'settings.page.chat.description': 'Configure how messages and tools are displayed.',
|
||
'settings.page.shortcuts.title': 'Shortcuts',
|
||
'settings.page.shortcuts.description': 'Customize keyboard shortcuts.',
|
||
'settings.page.general.title': 'General',
|
||
'settings.page.general.description': 'App startup, security, connection, and privacy.',
|
||
'settings.page.sessions.title': 'Sessions',
|
||
'settings.page.sessions.description': 'Set defaults and retention for sessions.',
|
||
'settings.page.magicPrompts.title': 'Magic Prompts',
|
||
'settings.page.notifications.title': 'Notifications',
|
||
'settings.page.notifications.description': 'Choose when and how you get notified.',
|
||
'settings.page.voice.title': 'Voice',
|
||
'settings.page.voice.description': 'Configure speech and dictation.',
|
||
'settings.page.tunnel.title': 'External Tunnel',
|
||
'settings.page.tunnel.description': 'Expose this instance over a remote tunnel.',
|
||
'settings.page.about.title': 'About',
|
||
'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': 'External 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.sessionCraftGoal': 'Goal Crafting',
|
||
'settings.magicPrompts.page.group.sessionCraftGoal.title': 'Goal Crafting',
|
||
'settings.magicPrompts.page.group.sessionCraftGoal.description': 'Prompts used by the /craft-goal slash command: visible user message + hidden instructions. Turns an idea or task into a clear, evidence-verifiable Goal through guided discovery.',
|
||
'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': 'Servers this app can switch to. Import a pairing link from the other server, or add one by address.',
|
||
'settings.remoteInstances.direct.addDialog.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.headers.title': 'Additional headers',
|
||
'settings.remoteInstances.direct.headers.description': 'Optional HTTP headers for desktop API requests. Authorization is reserved for the connection token.',
|
||
'settings.remoteInstances.direct.headers.field.namePlaceholder': 'Header name',
|
||
'settings.remoteInstances.direct.headers.field.valuePlaceholder': 'Header value',
|
||
'settings.remoteInstances.direct.headers.actions.add': 'Add header',
|
||
'settings.remoteInstances.direct.headers.removeAria': 'Remove header',
|
||
'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 — e.g. My iPhone',
|
||
'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.qrEnlarge': 'Enlarge QR code',
|
||
'settings.remoteInstances.clientAuth.qrScanHint': 'Scan this with the OpenChamber app on your other device. It is single-use and expires.',
|
||
'settings.remoteInstances.clientAuth.qrDialogTitle': 'Scan to connect',
|
||
'settings.remoteInstances.clientAuth.actions.addDevice': 'Add a device',
|
||
'settings.remoteInstances.clientAuth.actions.copied': 'Copied',
|
||
'settings.remoteInstances.clientAuth.addDevice.transportLabel': 'Where will you use this device?',
|
||
'settings.remoteInstances.clientAuth.addDevice.subtitle': 'Create a one-time QR code that connects another device to this server.',
|
||
'settings.remoteInstances.clientAuth.addDevice.transport.local': 'This computer only',
|
||
'settings.remoteInstances.clientAuth.addDevice.transport.localHint': 'For apps running on this same machine.',
|
||
'settings.remoteInstances.clientAuth.addDevice.transport.lan': 'Home network only',
|
||
'settings.remoteInstances.clientAuth.addDevice.transport.lanHint': 'Connects directly over your Wi-Fi. Does not work away from this network.',
|
||
'settings.remoteInstances.clientAuth.addDevice.transport.relay': 'Anywhere',
|
||
'settings.remoteInstances.clientAuth.addDevice.transport.relayHint': 'Works at home and away. Away traffic goes through OpenChamber Private Relay — an end-to-end encrypted tunnel. No setup needed.',
|
||
'settings.remoteInstances.clientAuth.addDevice.fallback.relay': 'Also allow the encrypted relay when away from home',
|
||
'settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal': 'Prefer the direct home connection when available',
|
||
'settings.remoteInstances.clientAuth.addDevice.create': 'Create QR code',
|
||
'settings.remoteInstances.clientAuth.addDevice.done': 'Done',
|
||
'settings.remoteInstances.clientAuth.addDevice.connectedToast': 'Device connected.',
|
||
'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.state.pending': 'Waiting to connect…',
|
||
'settings.remoteInstances.clientAuth.state.viaRelay': 'Relay',
|
||
'settings.remoteInstances.clientAuth.state.connectedDirect': 'Connected · Local network',
|
||
'settings.remoteInstances.clientAuth.state.connectedRelay': 'Connected · Relay',
|
||
'settings.remoteInstances.clientAuth.lastUsed': 'Last used {date}',
|
||
'settings.remoteInstances.clientAuth.neverUsed': 'Never used',
|
||
'settings.remoteInstances.relay.title': 'OpenChamber Relay',
|
||
'settings.remoteInstances.relay.autoHint': 'Turns on automatically when you pair a device over the relay.',
|
||
'settings.remoteInstances.relay.description': 'Let your other devices connect from anywhere without opening ports. Traffic is end-to-end encrypted — the relay cannot read it.',
|
||
'settings.remoteInstances.relay.enableHint': 'Nothing is shared until you enable the relay on this server.',
|
||
'settings.remoteInstances.relay.actions.enable': 'Enable Relay',
|
||
'settings.remoteInstances.relay.actions.disable': 'Disable',
|
||
'settings.remoteInstances.relay.confirm.disable': 'Disable the relay? Devices connected through it will be disconnected immediately.',
|
||
'settings.remoteInstances.relay.state.loading': 'Checking relay status...',
|
||
'settings.remoteInstances.relay.state.disabled': 'Disabled',
|
||
'settings.remoteInstances.relay.state.connecting': 'Connecting',
|
||
'settings.remoteInstances.relay.state.connected': 'Connected',
|
||
'settings.remoteInstances.relay.state.reconnecting': 'Reconnecting',
|
||
'settings.remoteInstances.relay.state.error': 'Error',
|
||
'settings.remoteInstances.relay.status.clientsOne': '{count} device connected',
|
||
'settings.remoteInstances.relay.status.clientsMany': '{count} devices connected',
|
||
'settings.remoteInstances.relay.pair.title': 'Pair a device',
|
||
'settings.remoteInstances.relay.pair.labelPlaceholder': 'Device name (optional)',
|
||
'settings.remoteInstances.relay.pair.includeToken': 'Include access token (one-scan pairing)',
|
||
'settings.remoteInstances.relay.pair.noTokenHint': 'Without a token, the device signs in with this server’s UI password after connecting.',
|
||
'settings.remoteInstances.relay.pair.generate': 'Create pairing link',
|
||
'settings.remoteInstances.relay.pair.requiresConnected': 'Pairing becomes available once the relay is connected.',
|
||
'settings.remoteInstances.relay.pair.linkLabel': 'Pairing link',
|
||
'settings.remoteInstances.relay.pair.warning': 'This link grants access to this server. Do not share it.',
|
||
'settings.remoteInstances.relay.pair.qrAlt': 'Relay pairing QR code',
|
||
'settings.remoteInstances.relay.pair.showQr': 'Show QR code',
|
||
'settings.remoteInstances.relay.pair.qrDialogTitle': 'Scan to pair',
|
||
'settings.remoteInstances.relay.pair.qrDialogDescription': 'Scan this QR code with the OpenChamber app on your other device.',
|
||
'settings.remoteInstances.relay.pair.manageHint': 'Manage or revoke paired devices in the “Connect to this server” list above.',
|
||
'settings.remoteInstances.relay.toast.enableFailed': 'Failed to enable relay',
|
||
'settings.remoteInstances.relay.toast.disableFailed': 'Failed to disable relay',
|
||
'settings.remoteInstances.relay.toast.offerFailed': 'Failed to create pairing link',
|
||
'settings.remoteInstances.relay.toast.linkCopied': 'Pairing link copied',
|
||
'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': 'Port on the remote machine',
|
||
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port OpenChamber uses on the remote machine. Leave empty to choose one automatically.',
|
||
'settings.remoteInstances.page.field.keepServerRunning': 'Keep server running',
|
||
'settings.remoteInstances.page.field.keepServerRunningHint': 'Leave the remote server running after you disconnect. When off, it is stopped on disconnect and started again the next time you connect.',
|
||
'settings.remoteInstances.page.field.bindHost': 'Reachable from',
|
||
'settings.remoteInstances.page.field.bindHostHint': 'Who can open the forwarded address on this computer. The remote machine itself stays reachable only through the SSH tunnel either way.',
|
||
'settings.remoteInstances.page.field.preferredLocalPort': 'Port on this computer',
|
||
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Port opened on this computer for the tunnel. 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.infoAria': 'More information',
|
||
'settings.common.actions.cancel': 'Cancel',
|
||
'settings.common.actions.create': 'Create',
|
||
'settings.common.actions.delete': 'Delete',
|
||
'settings.openchamber.appLinks.title': 'Trusted app links',
|
||
'settings.openchamber.appLinks.info': 'Links listed here open without asking again on this device. Other app links always ask before opening.',
|
||
'settings.openchamber.appLinks.empty': 'No trusted app links on this device. Choose "Trust and open" when opening a link to add it here.',
|
||
'settings.openchamber.appLinks.removeAria': 'Remove trusted {scheme} links',
|
||
'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.status.saved': 'Saved',
|
||
'settings.common.status.saveFailed': 'Save failed',
|
||
'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.shared.badge': 'In repo',
|
||
'settings.projects.shared.actionsFromRepo': 'Stored in the repository ({path}). Everyone who pulls it gets these.',
|
||
'settings.projects.shared.commandsFromRepo': 'Run first, stored in the repository ({path})',
|
||
'settings.projects.shared.invalid': 'The project config in {path} could not be read: {reason}',
|
||
'settings.projects.shared.trusted': 'Repository commands trusted on this instance',
|
||
'settings.projects.shared.resetTrust': 'Reset trust',
|
||
'settings.projects.shared.title': 'Repository config',
|
||
'settings.projects.shared.description': 'Setup stored in the repository itself, so everyone who pulls it gets the same actions, setup commands, starters, and plans. Nothing is written there until you move an item into it.',
|
||
'settings.projects.shared.file': 'File',
|
||
'settings.projects.shared.status.missing': 'Not in the repository yet',
|
||
'settings.projects.shared.status.ok': 'In the repository',
|
||
'settings.projects.shared.plansDir': 'Plans folder',
|
||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||
'settings.projects.shared.plansDirInfo': 'Where repository plans live, relative to the repository. Empty means .openchamber/plans. A custom folder such as docs/plans replaces the default entirely: only that folder is read and written. Move existing files yourself when you change it.',
|
||
'settings.projects.shared.plansDirAria': 'Repository plans folder',
|
||
'settings.projects.shared.actions.share': 'Move to repository',
|
||
'settings.projects.shared.actions.showTitle': 'Shows this repository action in your menu again.',
|
||
'settings.projects.shared.actions.hideTitle': 'Hides this repository action from your menu only; the repository is not changed.',
|
||
'settings.projects.shared.actions.makePersonalTitle': 'Removes it from the repository and keeps it only in your settings on this instance.',
|
||
'settings.projects.shared.actions.shareTitle': 'Stores it in {path} inside the repository, so everyone who pulls the repository gets it. It leaves your personal settings.',
|
||
'settings.projects.shared.actions.shareAfterSave': 'Saves your edits first, then move',
|
||
'settings.projects.shared.actions.makePersonal': 'Move to my settings',
|
||
'settings.projects.shared.actions.hide': 'Hide for me',
|
||
'settings.projects.shared.actions.show': 'Show',
|
||
'settings.projects.shared.hiddenBadge': 'Hidden',
|
||
'settings.projects.shared.replaceMode': 'Use only my setup commands, skip the repository\'s',
|
||
'settings.projects.shared.replaceModeAria': 'Use only my setup commands, skip the repository\'s',
|
||
'settings.projects.shared.toast.shareFailed': 'Failed to update the repository config',
|
||
'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.runIn.label': 'Run in',
|
||
'settings.projects.actions.runIn.info': 'Choose where this action runs when started from a linked worktree.',
|
||
'settings.projects.actions.runIn.project': 'Parent checkout',
|
||
'settings.projects.actions.runIn.worktree': 'Current worktree',
|
||
'settings.projects.actions.runIn.aria': 'Working directory for this action',
|
||
'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.field.instanceUrls': 'Instance URLs',
|
||
'settings.openchamber.about.field.applicationUrl': 'Application',
|
||
'settings.openchamber.about.field.tunnelUrl': 'Tunnel',
|
||
'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.definitionNotFound': 'Agent definition not found. Nothing was changed.',
|
||
'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.sidebar.toast.agentRenamed': 'Agent renamed to "{name}"',
|
||
'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.toast.savedManualRestart': 'Saved to disk. Restart your connected OpenCode server to apply the changes.',
|
||
'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.permissionsEditor.sectionInfo': 'Edits this agent\'s own permission rules exactly as stored in its config. "Inherit" keeps a key unset so global config and defaults apply.',
|
||
'settings.agents.page.permissionsEditor.defaultLabel': 'Default for all tools',
|
||
'settings.agents.page.permissionsEditor.defaultAria': 'Default permission for all tools',
|
||
'settings.agents.page.permissionsEditor.defaultInfo': 'The agent-level fallback (the * key). Applies to any tool without its own rule.',
|
||
'settings.agents.page.permissionsEditor.effectiveHint': '→ {action}',
|
||
'settings.agents.page.permissionsEditor.ruleCount': '{count} rules',
|
||
'settings.agents.page.permissionsEditor.keyAria': 'Permission for {key}',
|
||
'settings.agents.page.permissionsEditor.patternPlaceholder': 'Pattern, e.g. rm -rf * or /path/**',
|
||
'settings.agents.page.permissionsEditor.patternActionAria': 'Action for {key} pattern',
|
||
'settings.agents.page.permissionsEditor.customKeyPlaceholder': 'Custom permission key…',
|
||
'settings.agents.page.permissionsEditor.sessionRulesTitle': 'Session-granted (not saved)',
|
||
'settings.agents.page.permissionsEditor.sessionRulesInfo': 'Rules granted during live sessions (e.g. "always allow" answers). They apply right now but are not part of the saved config and disappear on restart.',
|
||
'settings.agents.page.permissionsEditor.action.default': 'Default',
|
||
'settings.agents.page.permissionsEditor.action.inherit': 'Inherit',
|
||
'settings.agents.page.permissionsEditor.action.allow': 'Allow',
|
||
'settings.agents.page.permissionsEditor.action.ask': 'Ask',
|
||
'settings.agents.page.permissionsEditor.action.deny': 'Deny',
|
||
'settings.agents.page.permissionsEditor.actions.save': 'Save permissions',
|
||
'settings.agents.page.permissionsEditor.actions.discard': 'Discard',
|
||
'settings.agents.page.permissionsEditor.actions.addRule': 'Add rule',
|
||
'settings.agents.page.permissionsEditor.actions.addKey': 'Add key',
|
||
'settings.agents.page.permissionsEditor.actions.removeRuleAria': 'Remove rule',
|
||
'settings.agents.page.permissionsEditor.actions.retry': 'Retry',
|
||
'settings.agents.page.permissionsEditor.state.loadFailed': 'Could not load the agent permission config.',
|
||
'settings.agents.page.permissionsEditor.toast.saved': 'Permissions saved',
|
||
'settings.agents.page.permissionsEditor.toast.savedRestartRequired': 'Permissions saved — restart the OpenCode server to apply',
|
||
'settings.agents.page.permissionsEditor.toast.saveFailed': 'Failed to save permissions',
|
||
'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.variant': 'Thinking Variant',
|
||
'settings.agents.page.field.variantTooltip': 'Controls the thinking/reasoning depth for this agent. Maps to provider-specific parameters (e.g. Anthropic variant, OpenAI reasoning effort).',
|
||
'settings.agents.page.field.variantHint': 'e.g. high, max, low',
|
||
'settings.agents.page.field.variantPlaceholder': 'default',
|
||
'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.page.behavior.description': 'Guide how the agent responds.',
|
||
'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.section.systemPromptOptimization': 'System prompt optimization',
|
||
'settings.behavior.page.systemPromptOptimization.enable': 'Optimize system prompt size',
|
||
'settings.behavior.page.systemPromptOptimization.enableAria': 'Optimize OpenCode system prompt size',
|
||
'settings.behavior.page.systemPromptOptimization.info': 'Reduces the system prompt by an estimated 40% for the build and plan agents. Other agents are not changed. This can remove custom definitions that override build or plan, so do not enable it for workflows that customize those agents. Restarting OpenCode applies the change.',
|
||
'settings.behavior.page.systemPromptOptimization.restarting': 'Restarting OpenCode to apply system prompt optimization…',
|
||
'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.section.commitSigning': 'Commit signing',
|
||
'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.signCommits': 'Sign commits with this identity',
|
||
'settings.gitIdentities.editor.field.signingKey': 'Signing key',
|
||
'settings.gitIdentities.editor.field.signingKeyPlaceholder': '~/.ssh/id_ed25519.pub',
|
||
'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.signingKeyRequired': 'Signing key is required when commit signing is enabled',
|
||
'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.renameFailed': 'Failed to rename skill',
|
||
'settings.skills.sidebar.toast.skillRenamed': 'Skill renamed to "{name}"',
|
||
'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.subtitle': 'Install ready-made skills from curated repositories, or add your own source.',
|
||
'settings.skills.catalog.page.section.sources': 'Sources',
|
||
'settings.skills.catalog.page.searchAllPlaceholder': 'Search skills across all sources…',
|
||
'settings.skills.catalog.page.search.clear': 'Clear search',
|
||
'settings.skills.catalog.page.source.skillsCount': '{count} skills',
|
||
'settings.skills.catalog.page.source.stars': '{count} stars',
|
||
'settings.skills.catalog.page.source.updated': 'Updated {time}',
|
||
'settings.skills.catalog.page.source.addOwnTitle': 'Add your own source',
|
||
'settings.skills.catalog.page.source.addOwnDescription': 'Any Git repository with skills',
|
||
'settings.skills.catalog.page.source.viewRepo': 'Open repository on GitHub',
|
||
'settings.skills.catalog.page.skill.viewOnGithub': 'View skill on GitHub',
|
||
'settings.skills.catalog.page.list.searchTitle': 'Search results',
|
||
'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.loading.catalog': 'Loading...',
|
||
'settings.skills.catalog.page.loading.skills': 'Loading skills...',
|
||
'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.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.windowControlsPosition': 'Window controls position',
|
||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': 'Choose where minimize, maximize, and close buttons appear. Defaults to the right.',
|
||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': 'Window controls position',
|
||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': 'Left',
|
||
'settings.openchamber.desktopNetwork.option.windowControlsRight': 'Right',
|
||
'settings.openchamber.desktopNetwork.field.windowControls': 'Window controls',
|
||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'Style',
|
||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'Window controls style',
|
||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': 'Classic',
|
||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': 'Traffic lights',
|
||
'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. Use the desktop status icon to open it.',
|
||
'settings.openchamber.desktopNetwork.field.macMenuBarAria': 'Show OpenChamber in the macOS menu bar',
|
||
'settings.openchamber.desktopNetwork.field.macMenuBar': 'Show OpenChamber in the menu bar',
|
||
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': 'Requires an app restart. When off, OpenChamber does not create the menu bar item or run its session, approval, and usage updates.',
|
||
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'Close OpenChamber to the system tray',
|
||
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'Close to the system tray',
|
||
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Keeps OpenChamber running in the system tray when the main window is closed. Minimizing still leaves the window in the taskbar.',
|
||
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'Keep computer awake while OpenChamber is running',
|
||
'settings.openchamber.desktopNetwork.field.keepAwake': 'Keep computer awake while OpenChamber is running',
|
||
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': 'Prevents system sleep so phones can keep reaching this app. The screen can still turn off.',
|
||
'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.desktopNetwork.field.passwordRequiredWarning': 'LAN access requires a Desktop UI Password. Until one is set, the desktop app starts local-only.',
|
||
'settings.openchamber.desktopPassword.field.password': 'Desktop UI Password',
|
||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'No password required',
|
||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': 'Password set. Type a new one to replace it.',
|
||
'settings.openchamber.desktopPassword.actions.removePassword': 'Remove password',
|
||
'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.desktopNetwork.error.minimizeToTrayUnsupported': 'System tray background mode is not supported on this system',
|
||
'settings.openchamber.desktopNetwork.error.minimizeToTraySaveFailed': 'Failed to update system tray setting',
|
||
'settings.openchamber.desktopNetwork.error.keepAwakeUnsupported': 'Preventing sleep is not supported on this system',
|
||
'settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed': 'Failed to update keep awake setting',
|
||
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
|
||
'settings.openchamber.tools.title': 'OpenChamber Tools',
|
||
'settings.openchamber.tools.field.agentControlTool': 'Agent control tool',
|
||
'settings.openchamber.tools.field.agentControlToolAria': 'Enable the agent control tool',
|
||
'settings.openchamber.tools.field.agentControlToolInfo': 'Let agents orchestrate your work from chat: spin up sessions and worktrees, delegate prompts to other agents, and manage scheduled tasks. Adds a small tool description to each session. Applies after OpenCode restarts.',
|
||
'settings.openchamber.tools.field.agentWebTool': 'OpenChamber Web tool',
|
||
'settings.openchamber.tools.field.agentWebToolAria': 'Enable the OpenChamber Web tool',
|
||
'settings.openchamber.tools.field.agentWebToolInfo': 'Let agents look at and interact with the page in OpenChamber\'s browser panel: open a URL, read the page, click, type, scroll, and switch between mobile and desktop layouts. Adds a small tool description to each session. Applies after OpenCode restarts.',
|
||
'settings.openchamber.tools.field.agentMemoryTool': 'Agent memory tool',
|
||
'settings.openchamber.tools.field.agentMemoryToolAria': 'Agent memory tool',
|
||
'settings.openchamber.tools.field.agentMemoryToolInfo': 'Let agents keep what they learn across sessions, in two stores: what is true about you, and what is true about each project. Sessions are given the stored titles so the agent can read an entry when it is relevant. Turning this off removes the tool, the Memory tab, and the session index. Applies after OpenCode restarts.',
|
||
'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. You can still save it.',
|
||
'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.add_selection_to_chat.label': 'Add selection to chat',
|
||
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'Toggle sidebar',
|
||
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': 'Switch session tab',
|
||
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
|
||
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': 'Switch context panel surface',
|
||
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
|
||
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'New session',
|
||
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': 'Previous session',
|
||
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': 'Next session',
|
||
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': 'Rename current session',
|
||
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': 'Toggle permission auto-accept',
|
||
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': 'Close session tab',
|
||
'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_services_menu.label': 'Toggle services menu',
|
||
'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.open_model_selector.label': 'Open model selector',
|
||
'settings.openchamber.keyboardShortcuts.action.expand_input.label': 'Expand input',
|
||
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': 'Open conversation timeline',
|
||
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': 'Toggle prompt navigator',
|
||
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': 'This sequence shares a contextual prefix with {action}. That action takes priority while its context is active.',
|
||
'settings.openchamber.keyboardShortcuts.category.session': 'Session Controls',
|
||
'settings.openchamber.keyboardShortcuts.category.models': 'Models & Agents',
|
||
'settings.openchamber.keyboardShortcuts.category.panels': 'Panels & Tools',
|
||
'settings.openchamber.keyboardShortcuts.category.navigation': 'Navigation',
|
||
'settings.openchamber.keyboardShortcuts.category.application': 'Application',
|
||
'settings.openchamber.keyboardShortcuts.actions.edit': 'Edit',
|
||
'settings.openchamber.keyboardShortcuts.actions.confirm': 'Confirm',
|
||
'settings.openchamber.keyboardShortcuts.dialog.title': 'Edit {action}',
|
||
'settings.openchamber.keyboardShortcuts.dialog.instructions': 'Press up to two key combinations, with at most three keys each. After the first, wait up to 3 seconds for a second combination. Use Confirm to apply or Cancel to discard. Backspace removes the last one.',
|
||
'settings.openchamber.keyboardShortcuts.dialog.firstChord': 'First combination',
|
||
'settings.openchamber.keyboardShortcuts.dialog.secondChord': 'Second combination',
|
||
'settings.openchamber.keyboardShortcuts.dialog.recording': 'Press keys…',
|
||
'settings.openchamber.keyboardShortcuts.unassigned': 'Unassigned',
|
||
'settings.openchamber.keyboardShortcuts.error.prefixConflict': 'This conflicts with the sequence used by {action}. Choose a different combination.',
|
||
'settings.openchamber.keyboardShortcuts.error.exactConflict': 'This combination is already used by {action}.',
|
||
'settings.openchamber.keyboardShortcuts.error.internalConflict': 'This combination conflicts with a built-in shortcut, which cannot be replaced.',
|
||
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': 'Open draft project picker',
|
||
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': 'Open draft worktree picker',
|
||
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': 'Open recent sessions',
|
||
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': 'Voice input',
|
||
'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.projectModel': 'Project Model',
|
||
'settings.projects.page.field.projectThinking': 'Project Thinking',
|
||
'settings.projects.page.section.chatDefaults': 'Defaults for new chats',
|
||
'settings.projects.page.section.chatDefaultsDescription': 'Used when starting a new chat in this project. Falls back to the global defaults when unset. Thinking appears only for models that offer levels.',
|
||
'settings.projects.page.field.projectNamePlaceholder': 'Project name',
|
||
'settings.projects.page.option.thinkingDefault': 'Model default',
|
||
'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.projects.page.toast.saveFailed': 'Failed to save project settings',
|
||
'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.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.header.lastUpdatedWithPlan': 'Plan: {plan} · Last updated: {time}',
|
||
'settings.usage.page.options.showInWorkStatusAria': 'Show in work status panel',
|
||
'settings.usage.page.options.showInWorkStatus': 'Show in Work Status Panel',
|
||
'settings.usage.page.options.showInWorkStatusTooltip': 'When enabled, this provider\'s usage will be visible in the work status panel.',
|
||
'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': 'Access from this computer',
|
||
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber runs on the remote machine. These settings only control the address on this computer that forwards to it through the SSH tunnel.',
|
||
'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.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.addDialog.description': 'Pick a host from your SSH config, or type the connection yourself.',
|
||
'settings.remoteInstances.page.addDialog.sourceLabel': 'Where the connection comes from',
|
||
'settings.remoteInstances.page.addDialog.tab.saved': 'From SSH config',
|
||
'settings.remoteInstances.page.addDialog.tab.manual': 'Type it myself',
|
||
'settings.remoteInstances.page.addDialog.searchPlaceholder': 'Search hosts',
|
||
'settings.remoteInstances.page.addDialog.emptySaved': 'No hosts found in your SSH config. Type the connection yourself instead.',
|
||
'settings.remoteInstances.page.addDialog.searchEmpty': 'No host matches this search.',
|
||
'settings.remoteInstances.page.addDialog.use': 'Use',
|
||
'settings.remoteInstances.page.state.notConnected': 'Not connected',
|
||
'settings.remoteInstances.page.state.connecting': 'Connecting',
|
||
'settings.remoteInstances.page.state.ready': 'Connected',
|
||
'settings.remoteInstances.page.state.problem': 'Needs attention',
|
||
'settings.remoteInstances.page.section.advanced': 'Advanced settings',
|
||
'settings.remoteInstances.page.section.advancedHint': 'Ports, install method, passwords and extra forwards. The defaults work for most connections.',
|
||
'settings.remoteInstances.page.field.installMethodAuto': 'Automatic',
|
||
'settings.remoteInstances.page.error.hint.noRuntime': 'The remote machine has neither bun nor npm. Install one of them there, or switch this connection to "Already running".',
|
||
'settings.remoteInstances.page.error.hint.noOpencode': 'The opencode CLI is not installed on the remote machine. Install it there (see opencode.ai), then connect again.',
|
||
'settings.remoteInstances.page.error.action.setUiPassword': 'Set UI password',
|
||
'settings.remoteInstances.page.error.action.pickRandomPort': 'Use another local port',
|
||
'settings.remoteInstances.page.error.action.setRemotePort': 'Set the remote port',
|
||
'settings.remoteInstances.page.validation.externalPortRequired': 'Set a remote port first. In "Already running" mode OpenChamber needs to know which port the server listens on.',
|
||
'settings.remoteInstances.page.empty.noInstances': 'No SSH connections yet.',
|
||
'settings.remoteInstances.page.field.uiPasswordRequired': 'UI password (required)',
|
||
'settings.remoteInstances.page.field.uiPasswordMissingForLan': 'Required while the remote server is reachable on its network.',
|
||
'settings.remoteInstances.page.field.remoteLanAccess': 'Reachable on the remote network',
|
||
'settings.remoteInstances.page.field.remoteLanAccessHint': 'Also let other devices on the remote machine’s network open this OpenChamber directly, without the SSH tunnel. A UI password is required.',
|
||
'settings.remoteInstances.page.field.remoteLanAccessWarning': 'Anyone on that network can reach the remote OpenChamber. It is protected only by the UI password below.',
|
||
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': 'Set a UI password first. Publishing the remote OpenChamber to its network without one would leave it open to every device there.',
|
||
'settings.remoteInstances.page.field.bindHostOption.loopback': 'Only this computer (127.0.0.1)',
|
||
'settings.remoteInstances.page.field.bindHostOption.localhost': 'Only this computer (localhost)',
|
||
'settings.remoteInstances.page.field.bindHostOption.lan': 'Any device on my network (0.0.0.0)',
|
||
'settings.remoteInstances.page.field.sshPasswordHint': 'Only needed when this host asks for a password instead of accepting an SSH key.',
|
||
'settings.remoteInstances.page.field.uiPasswordHintManaged': 'Password to protect the remote OpenChamber UI. OpenChamber sets it on the server it starts for you.',
|
||
'settings.remoteInstances.page.field.uiPasswordHintExternal': 'Password of the OpenChamber server already running on the remote machine, used to sign in to it.',
|
||
'settings.remoteInstances.page.tunnelPreview.caption': 'This connection forwards:',
|
||
'settings.remoteInstances.page.empty.noInstancesWithOneImport': 'No SSH connections yet. 1 host is available to import from your SSH config.',
|
||
'settings.remoteInstances.page.empty.noInstancesWithImports': 'No SSH connections yet. {count} hosts are available to import from your SSH config.',
|
||
'settings.remoteInstances.page.state.loadingInstances': 'Loading connections...',
|
||
'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.setup.waitForCommands': 'Wait for setup commands before creating or sending a session',
|
||
'settings.openchamber.worktrees.setup.waitForCommandsAria': 'Wait for Worktree setup commands before creating or sending a session',
|
||
'settings.openchamber.worktrees.setup.toast.saveFailed': 'Failed to save worktree setup commands',
|
||
'settings.openchamber.worktrees.list.title': 'Existing worktrees',
|
||
'settings.openchamber.worktrees.list.tooltip': 'Deleting a worktree also removes its 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.custom.optionLabel': 'Other / Custom',
|
||
'settings.providers.page.custom.title': 'Custom provider',
|
||
'settings.providers.page.custom.editTitle': 'Edit custom provider',
|
||
'settings.providers.page.custom.description': 'Add a provider with a base URL, credentials, model list, and supported API protocol. Saved to OpenCode config for use in chat.',
|
||
'settings.providers.page.custom.field.providerID.label': 'Provider ID',
|
||
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
|
||
'settings.providers.page.custom.field.providerID.info': 'Lowercase letters, numbers, hyphens, and underscores. Used as the OpenCode provider id.',
|
||
'settings.providers.page.custom.field.name.label': 'Display name',
|
||
'settings.providers.page.custom.field.name.placeholder': 'My Provider',
|
||
'settings.providers.page.custom.field.name.info': 'Shown in the provider and model pickers.',
|
||
'settings.providers.page.custom.field.protocol.label': 'API protocol',
|
||
'settings.providers.page.custom.field.protocol.info': 'Choose the request format implemented by this API.',
|
||
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
|
||
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
|
||
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
|
||
'settings.providers.page.custom.field.baseURL.label': 'Base URL',
|
||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||
'settings.providers.page.custom.field.baseURL.info': 'OpenAI-compatible API base URL. Must start with http:// or https://.',
|
||
'settings.providers.page.custom.field.apiKey.label': 'API key',
|
||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... or {env:VAR_NAME}',
|
||
'settings.providers.page.custom.field.apiKey.info': 'Stored in OpenCode auth, not by OpenChamber. Use {env:VAR_NAME} to read a key from the environment instead.',
|
||
'settings.providers.page.custom.field.apiKey.editInfo': 'Leave blank to keep the existing credential, or enter a new key / {env:VAR_NAME}.',
|
||
'settings.providers.page.custom.field.apiKey.editPlaceholder': 'Leave blank to keep existing key',
|
||
'settings.providers.page.custom.models.title': 'Models',
|
||
'settings.providers.page.custom.models.idLabel': 'Model ID',
|
||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||
'settings.providers.page.custom.models.nameLabel': 'Model name',
|
||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||
'settings.providers.page.custom.models.add': 'Add model',
|
||
'settings.providers.page.custom.models.remove': 'Remove model',
|
||
'settings.providers.page.custom.headers.title': 'Headers',
|
||
'settings.providers.page.custom.headers.description': 'Optional request headers sent with every call.',
|
||
'settings.providers.page.custom.headers.keyLabel': 'Header name',
|
||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||
'settings.providers.page.custom.headers.valueLabel': 'Header value',
|
||
'settings.providers.page.custom.headers.valuePlaceholder': 'value',
|
||
'settings.providers.page.custom.headers.add': 'Add header',
|
||
'settings.providers.page.custom.headers.remove': 'Remove header',
|
||
'settings.providers.page.custom.actions.back': 'Back',
|
||
'settings.providers.page.custom.actions.save': 'Save provider',
|
||
'settings.providers.page.custom.actions.update': 'Update provider',
|
||
'settings.providers.page.custom.error.providerID.required': 'Provider ID is required',
|
||
'settings.providers.page.custom.error.providerID.format': 'Use lowercase letters, numbers, hyphens, or underscores',
|
||
'settings.providers.page.custom.error.providerID.exists': 'A provider with this ID is already connected',
|
||
'settings.providers.page.custom.error.name.required': 'Display name is required',
|
||
'settings.providers.page.custom.error.baseURL.required': 'Base URL is required',
|
||
'settings.providers.page.custom.error.baseURL.format': 'Base URL must start with http:// or https://',
|
||
'settings.providers.page.custom.error.required': 'Required',
|
||
'settings.providers.page.custom.error.duplicate': 'Duplicate',
|
||
'settings.providers.page.custom.error.apiKey.required': 'API key or {env:VAR_NAME} is required',
|
||
'settings.providers.page.custom.authFailure.configAfterAuth': 'Credentials were saved, but the provider config was not. Fix the error and try again, or disconnect to clear the partial save.',
|
||
'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.oauth.starting': 'Starting authorization…',
|
||
'settings.providers.page.auth.oauth.waiting': 'Waiting for authorization…',
|
||
'settings.providers.page.auth.oauth.waitingHint': 'Finish signing in in your browser. Keep this page open — the connection completes on its own.',
|
||
'settings.providers.page.auth.oauth.codeHint': 'Copy the authorization code from your browser and paste it here.',
|
||
'settings.providers.page.auth.oauth.deviceCodeLabel': 'Device code',
|
||
'settings.providers.page.auth.oauth.linkLabel': 'Authorization link',
|
||
'settings.providers.page.auth.oauth.promptRequired': 'Fill in “{field}” to continue',
|
||
'settings.providers.page.auth.oauth.error.sessionExpired': 'The authorization request expired. Connect again to restart it.',
|
||
'settings.providers.page.auth.oauth.error.codeRequired': 'This provider needs the authorization code from your browser.',
|
||
'settings.providers.page.auth.oauth.error.declined': 'Authorization was declined or did not complete.',
|
||
'settings.providers.page.auth.oauth.error.invalidInput': 'The details you entered were rejected.',
|
||
'settings.providers.page.auth.connected': 'Connected',
|
||
'settings.providers.page.auth.incomplete': 'Credentials missing',
|
||
'settings.providers.page.auth.incompleteHint': '· Add an API key or {env:VAR} before using this provider in chat',
|
||
'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.continue': 'Continue',
|
||
'settings.providers.page.actions.cancel': 'Cancel',
|
||
'settings.providers.page.actions.tryAgain': 'Try again',
|
||
'settings.providers.page.actions.hide': 'Hide',
|
||
'settings.providers.page.actions.reconnect': 'Reconnect',
|
||
'settings.providers.page.actions.edit': 'Edit',
|
||
'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.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.providers.page.toast.customProviderSaved': '{provider} connected',
|
||
'settings.providers.page.toast.customProviderSaveFailed': 'Failed to save custom 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.label.awaitingRestart': 'Awaiting restart',
|
||
'settings.mcp.page.status.description.awaitingRestart': 'This server is saved but not applied yet. Use Apply & Restart to load it into OpenCode — connect and authorization become available after that.',
|
||
'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.smallModel.title': 'Small Model',
|
||
'settings.openchamber.defaults.smallModel.description': 'A cheap model for quick utility tasks like short recaps and summaries.',
|
||
'settings.openchamber.defaults.smallModel.useDefault': 'Use default small model',
|
||
'settings.openchamber.defaults.smallModel.useDefaultAria': 'Use default small model',
|
||
'settings.openchamber.defaults.smallModel.overrideModel': 'Override model',
|
||
'settings.openchamber.defaults.walkthroughModel.title': 'Changes Walkthrough Model',
|
||
'settings.openchamber.defaults.walkthroughModel.description': 'The AI review of your changes needs structured output and room for a whole diff, which a cheap small model often cannot give. Models the catalog reports as unable to produce structured output are hidden from this picker. Leave it unset and the small model is used.',
|
||
'settings.openchamber.defaults.walkthroughModel.overrideModel': 'Walkthrough model',
|
||
'settings.openchamber.defaults.walkthroughModel.usesSmallModel': 'Small model',
|
||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'Open previewable files in preview mode',
|
||
'settings.openchamber.defaults.field.openFilesPreview': 'Open previewable 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.accountSource.oauth': 'OAuth',
|
||
'settings.github.page.accountSource.cli': 'CLI',
|
||
'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.github.page.oauth.title': 'GitHub OAuth Token',
|
||
'settings.github.page.ghCli.title': 'GitHub CLI Token',
|
||
'settings.github.page.ghCli.activeDescription': 'Authenticated via the gh CLI',
|
||
'settings.github.page.ghCli.fallbackDescription': 'Available as fallback if OpenChamber auth is removed',
|
||
'settings.github.page.ghCli.disabledDescription': 'Installed but not used as a fallback',
|
||
'settings.github.page.ghCli.actions.disable': 'Disable',
|
||
'settings.github.page.ghCli.actions.enable': 'Enable',
|
||
'settings.github.page.toast.ghCliEnabled': 'gh CLI fallback enabled',
|
||
'settings.github.page.toast.ghCliDisabled': 'gh CLI fallback disabled',
|
||
'settings.github.page.toast.ghCliUpdateFailed': 'Failed to update gh CLI setting',
|
||
'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.speechRecognition': 'Speech Recognition',
|
||
'settings.voice.page.field.enableVoiceInput': 'Enable voice input',
|
||
'settings.voice.page.field.enableVoiceInputAria': 'Enable voice input (dictation)',
|
||
'settings.voice.page.section.playbackAndSummary': 'Playback',
|
||
'settings.voice.page.field.provider': 'Provider',
|
||
'settings.voice.page.provider.browser': 'Browser',
|
||
'settings.voice.page.provider.openai': 'OpenAI',
|
||
'settings.voice.page.provider.custom': 'Custom',
|
||
'settings.voice.page.provider.say': 'Say',
|
||
'settings.voice.page.provider.server': 'Server',
|
||
'settings.voice.page.provider.local': 'Local',
|
||
'settings.voice.page.tooltip.sttLocal': 'On-device transcription on the OpenChamber server. Models download automatically; no API key needed.',
|
||
'settings.voice.page.tooltip.localTts': 'On-device synthesis on the OpenChamber server (Kokoro for English; models for other languages download on first use). No API key needed.',
|
||
'settings.voice.page.field.followTextLanguage': 'Match the voice to the language of the text',
|
||
'settings.voice.page.field.followTextLanguageAria': 'Match the voice to the language of the text',
|
||
'settings.voice.page.field.followTextLanguageInfo': 'When a reply is in another language, a voice for that language is used: a matching macOS voice, or a local model that downloads on first use.',
|
||
'settings.voice.page.stt.model.parakeetV2': 'Parakeet v2 (English)',
|
||
'settings.voice.page.stt.model.parakeetV3': 'Parakeet v3 (25 European languages)',
|
||
'settings.voice.page.stt.model.whisperBase': 'Whisper base (multilingual)',
|
||
'settings.voice.page.stt.model.whisperTiny': 'Whisper tiny (multilingual)',
|
||
'settings.voice.page.stt.badge.bestForEnglish': 'Best for English',
|
||
'settings.voice.page.stt.badge.bestForMultilingual': 'Best for multilingual',
|
||
'settings.voice.page.stt.meta.accuracy': 'Accuracy',
|
||
'settings.voice.page.stt.meta.speed': 'Speed',
|
||
'settings.voice.page.stt.modelInstalled': 'Model installed',
|
||
'settings.voice.page.stt.modelDownloading': 'Downloading model...',
|
||
'settings.voice.page.stt.modelDownloadingProgress': 'Downloading model... {percent}%',
|
||
'settings.voice.page.stt.modelNotInstalled': 'Model not downloaded',
|
||
'settings.voice.page.stt.modelDownload': 'Download',
|
||
'settings.voice.page.stt.modelDelete': 'Delete model',
|
||
'settings.voice.page.stt.modelRetry': 'Retry',
|
||
'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.voice.page.field.ttsInputModeSummarized': 'summarized',
|
||
'settings.openchamber.visual.section.colorMode': 'Color Mode',
|
||
'settings.openchamber.visual.section.colorModeAndTheme': 'Color mode & Theme',
|
||
'settings.openchamber.visual.section.localization': 'Localization',
|
||
'settings.openchamber.visual.section.spacingAndLayout': 'Spacing & Layout',
|
||
'settings.openchamber.visual.section.densityAndType': 'Density & type',
|
||
'settings.openchamber.visual.section.appInstall': 'App install',
|
||
'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.chatDisplay': 'Display',
|
||
'settings.openchamber.visual.section.chatMessageOptions': 'Message options',
|
||
'settings.openchamber.visual.section.chatFeatures': 'Features',
|
||
'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.sessionAssistance': 'Session Assistance',
|
||
'settings.openchamber.visual.section.reasoning': 'Reasoning',
|
||
'settings.openchamber.visual.section.streaming': 'Streaming',
|
||
'settings.openchamber.visual.field.streamingAutoFollow': 'Follow new content while streaming',
|
||
'settings.openchamber.visual.field.streamingAutoFollowAria': 'Automatically follow new content while a response streams',
|
||
'settings.openchamber.visual.field.streamingAutoFollowInfo': 'While a reply streams in, the view keeps gliding to the newest content. Turn this off to keep the view still and scroll manually; sending a message while scrolled up then also leaves the view where it is.',
|
||
'settings.openchamber.visual.section.messageAppearance': 'Message Appearance',
|
||
'settings.openchamber.visual.section.toolsAndFiles': 'Tools & Files',
|
||
'settings.openchamber.visual.section.composer': 'Composer',
|
||
'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.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.dockBadge': 'Dock badge',
|
||
'settings.openchamber.visual.field.dockBadgeHint': 'Show a count of chats with unseen activity on the macOS dock icon.',
|
||
'settings.openchamber.visual.actions.saveAndRestart': 'Save & restart',
|
||
'settings.openchamber.visual.actions.restarting': 'Restarting…',
|
||
'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.terminalShell': 'Terminal Shell',
|
||
'settings.openchamber.visual.field.terminalShellAria': 'Select terminal shell',
|
||
'settings.openchamber.visual.field.terminalShellHint': 'Restart the terminal to apply this change to the current session.',
|
||
'settings.openchamber.visual.field.terminalLoginShell': 'Start as login shell',
|
||
'settings.openchamber.visual.option.terminalShell.auto': 'Auto',
|
||
'settings.openchamber.visual.field.editorFontSize': 'Editor 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.actions.resetEditorFontSizeAria': 'Reset editor 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.sessionTabsGroup': 'Session tabs',
|
||
'settings.openchamber.visual.field.sessionTabs': 'Show sessions as tabs in the header',
|
||
'settings.openchamber.visual.field.sessionTabsAria': 'Toggle session tabs in the header',
|
||
'settings.openchamber.visual.field.sessionTabsInfo': 'Sessions you open line up as tabs in the header. Turning this off restores the plain session title.',
|
||
'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.sessionRecap': 'Generate Session Recap',
|
||
'settings.openchamber.visual.field.sessionRecapAria': 'Generate a recap after the agent finishes',
|
||
'settings.openchamber.visual.field.sessionSuggestion': 'Generate Next User Message Suggestion',
|
||
'settings.openchamber.visual.field.sessionSuggestionAria': 'Generate a suggested next user message after the agent finishes',
|
||
'settings.openchamber.visual.field.sessionGoal': 'Enable Session Goals',
|
||
'settings.openchamber.visual.field.sessionGoalAria': 'Keep the session working toward a goal automatically',
|
||
'settings.openchamber.visual.goal.sectionTitle': 'Goal',
|
||
'settings.openchamber.visual.goal.budgetLabel': 'Default token budget',
|
||
'settings.openchamber.visual.goal.budgetAria': 'Apply a default token budget to new goals',
|
||
'settings.openchamber.visual.goal.description': 'Arm the target button in the composer and the next message becomes a goal: the agent keeps working toward it automatically, audited by the small model, even while you are away.',
|
||
'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.collapsibleUserMessagesAria': 'Collapse long user messages',
|
||
'settings.openchamber.visual.field.collapsibleUserMessages': 'Collapse Long User Messages',
|
||
'settings.openchamber.visual.field.stickyUserHeaderAria': 'Sticky user header',
|
||
'settings.openchamber.visual.field.stickyUserHeader': 'Sticky User Header',
|
||
'settings.openchamber.visual.field.promptNavigatorEnabledAria': 'Prompt navigator',
|
||
'settings.openchamber.visual.field.promptNavigatorEnabled': 'Prompt Navigator',
|
||
'settings.openchamber.visual.field.autoSaveEnabledAria': 'Auto-save files',
|
||
'settings.openchamber.visual.field.autoSaveEnabled': 'Auto-save files',
|
||
'settings.openchamber.visual.field.autoSaveEnabledInfo': 'Automatically save file edits after you stop typing. Disable to require manual save.',
|
||
'settings.openchamber.visual.field.wideChatLayoutAria': 'Wide chat layout',
|
||
'settings.openchamber.visual.field.wideChatLayout': 'Wide Chat Layout',
|
||
'settings.openchamber.visual.field.codeBlockLineWrapAria': 'Wrap code block lines',
|
||
'settings.openchamber.visual.field.codeBlockLineWrap': 'Wrap Code Block Lines',
|
||
'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.allowPromptingSubagentSessionsAria': 'Allow prompting subagent sessions',
|
||
'settings.openchamber.visual.field.allowPromptingSubagentSessions': 'Allow Prompting Subagent Sessions',
|
||
'settings.openchamber.visual.field.draftStartersVisible': 'Show Starters on New Session Screen',
|
||
'settings.openchamber.visual.field.draftStartersVisibleAria': 'Show starters on the new session screen',
|
||
'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.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.largeTextPaste': 'Large text paste',
|
||
'settings.openchamber.visual.field.largeTextPasteHint': 'When pasting more than about 2,000 characters or 25 lines, choose whether to attach the text as a file, paste it inline, or ask each time.',
|
||
'settings.openchamber.visual.field.enterToSend': 'Send shortcut',
|
||
'settings.openchamber.visual.field.enterToSendHint': 'Choose the send shortcut for the standard composer. In the expanded composer, Enter always adds a new line and Ctrl/Cmd+Enter sends.',
|
||
'settings.openchamber.visual.option.enterToSend.enter.label': 'Send with Enter',
|
||
'settings.openchamber.visual.option.enterToSend.modifier.label': 'Send with Ctrl/Cmd+Enter',
|
||
'settings.openchamber.visual.field.largeTextPasteAria': 'Large text paste behavior',
|
||
'settings.openchamber.visual.field.largeTextPasteOptionAria': 'Large text paste: {option}',
|
||
'settings.openchamber.visual.option.largeTextPaste.ask.label': 'Ask each time',
|
||
'settings.openchamber.visual.option.largeTextPaste.attach.label': 'Attach as file',
|
||
'settings.openchamber.visual.option.largeTextPaste.inline.label': 'Paste inline',
|
||
'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.system.description': 'Follow system setting',
|
||
'settings.openchamber.visual.option.themeMode.light': 'Light',
|
||
'settings.openchamber.visual.option.themeMode.light.description': 'Always use light appearance',
|
||
'settings.openchamber.visual.option.themeMode.dark': 'Dark',
|
||
'settings.openchamber.visual.option.themeMode.dark.description': 'Always use dark appearance',
|
||
'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.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.',
|
||
'chat.message.userText.collapseAria': 'Collapse user message',
|
||
'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',
|
||
'settings.openchamber.visual.section.followUpBehavior': 'Follow-up behavior',
|
||
'settings.openchamber.visual.section.followUpBehaviorAria': 'Follow-up behavior',
|
||
'settings.openchamber.visual.field.followUpBehaviorAria': 'Follow-up behavior: {option}',
|
||
'settings.openchamber.visual.field.followUpBehaviorDescription': 'Choose what happens when you press Enter on a follow-up message while the agent is still responding.',
|
||
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'Steer',
|
||
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'Queue',
|
||
'settings.openchamber.visual.field.inputHistoryScope': 'Input history scope',
|
||
'settings.openchamber.visual.field.inputHistoryScopeDescription': 'Choose whether submitted prompts are recalled across all projects connected to this runtime or only in the current session.',
|
||
'settings.openchamber.visual.section.inputHistoryScopeAria': 'Input history scope',
|
||
'settings.openchamber.visual.option.inputHistoryScope.global.label': 'All projects',
|
||
'settings.openchamber.visual.option.inputHistoryScope.session.label': 'Current session',
|
||
'settings.openchamber.visual.field.inputHistoryLimit': 'Prompts to remember',
|
||
'settings.openchamber.visual.field.inputHistoryLimitDescription': 'Lowering this number removes older prompts from your history.',
|
||
'settings.openchamber.visual.field.inputHistoryLimitAria': 'Prompts to remember',
|
||
'settings.openchamber.visual.field.inputHistoryLimitUnit': 'prompts',
|
||
...linearIntegrationI18n.en,
|
||
'settings.page.integrations.title': 'Integrations',
|
||
'settings.page.integrations.description': 'Connect GitHub and Linear so OpenChamber can work with your issues and pull requests.',
|
||
} as const;
|