Adds a server-side "small model" capability: direct, cheap LLM calls that reuse the user's existing OpenCode provider logins — the mechanism OpenCode uses internally for titles and summaries but does not expose through the SDK or plugins. Zero new dependencies; plain fetch with per-provider wire formats, credentials never leave the server. Core (packages/web/server/lib/small-model): - Resolution mirrors OpenCode's session scoping: explicit settings override → small_model from the OpenCode config → family scan within the session's provider → the session's own model. The global provider scan only serves callers without a session context, and background callers forbid it entirely (restrictToPreferredProvider), so conversation content never reaches a provider the user didn't pick — explicit choices excepted. - Per-provider auth replicating OpenCode's plugin loaders: GitHub Copilot (device token as bearer, no exchange), ChatGPT plan via the codex Responses API (single-flight OAuth refresh written back to auth.json), Anthropic messages, Google generateContent, generic OpenAI-compatible. - OpenCode's free models (opencode/big-pickle, *-free) are never called directly; unauthenticated providers are skipped by design. - Prompt clamping to the model's catalog context limit; thinking disabled where a wire switch exists (Z.AI/GLM, MiniMax-M3, Gemini Flash); robust content parsing with a clear error when a thinking model spends its whol budget on reasoning. - Settings → Sessions gains a Small Model group: use-default checkbox plus an override picker limited to authenticated providers, persisted with web/desktop/VS Code sanitization parity. Consumers: - Session assist: a server-side watcher on the global SSE hub generates a short recap and one suggested follow-up after a session idles quietly fo a minute, stored on session metadata (openchamber.assist). Freshness is keyed to the last assistant message id, so new activity invalidates the payload everywhere with no extra writes. The chat shows the recap under the last message after five quiet minutes and the suggestion as a dismissible chip above the composer (tap fills the input, never sends). Gated by a new Chat setting (default on) that is a hard generation switch. Language is anchored to the conversation itself, with a script-mismatch guard against model/backend language hallucination. - TTS: a third input mode, summarized — long replies are condensed to spoken prose before playback on any TTS engine. - Git: commit-message and PR generation moved off the active chat session onto the small model fed with real diffs and the commit list (bodies included), with a session-transport fallback for free-model-only setups. - Notes: Add to notes distills long selections into 1-3 dense sentences preserving exact identifiers, with verbatim fallback on failure. Fixes along the way: - The global event watcher now starts unconditionally; it was gated behind the desktop-notify env, leaving the server-side event hub dead in packaged apps. - OpenCode re-emits message.updated for old user messages after idle; the watcher no longer mistakes those for new activity. - Session metadata merges from a fresh read right before the PATCH, so writes made during the generation window (suggestion dismissals, review links) are preserved; the assist runtime stops during graceful shutdown.
1846 lines
148 KiB
TypeScript
1846 lines
148 KiB
TypeScript
export const settingsDict = {
|
|
'settings.appearance.language.label': 'Language',
|
|
'settings.appearance.language.description': 'Choose the interface language.',
|
|
'settings.appearance.language.select': 'Select language',
|
|
'settings.window.description': 'OpenChamber settings window.',
|
|
'settings.view.home.title': 'Settings',
|
|
'settings.view.home.description': 'Jump to common pages.',
|
|
'settings.view.home.cards.providers.title': 'Providers',
|
|
'settings.view.home.cards.providers.description': 'Connect models + credentials',
|
|
'settings.view.home.cards.agents.title': 'Agents',
|
|
'settings.view.home.cards.agents.description': 'Prompts, tools, permissions',
|
|
'settings.view.home.cards.skillsCatalog.title': 'Skills Catalog',
|
|
'settings.view.home.cards.skillsCatalog.description': 'Install skills from catalogs',
|
|
'settings.view.home.cards.mcp.title': 'MCP',
|
|
'settings.view.home.cards.mcp.description': 'Configure MCP servers + connections',
|
|
'settings.view.home.cards.plugins.title': 'Plugins',
|
|
'settings.view.home.cards.plugins.description': 'Manage opencode plugins',
|
|
'settings.view.home.cards.usage.title': 'Usage',
|
|
'settings.view.home.cards.usage.description': 'Quota + spend visibility',
|
|
'settings.view.unavailable.title': 'Not available',
|
|
'settings.view.unavailable.description': 'This settings page is not available in this runtime.',
|
|
'settings.view.badge.beta': 'beta',
|
|
'settings.view.actions.reloadOpenCode': 'Reload OpenCode',
|
|
'settings.view.actions.reloadOpenCodeTooltip': 'Restart OpenCode and reload its configuration.',
|
|
'settings.view.actions.backToSettings': 'Back to Settings',
|
|
'settings.view.actions.closeSettings': 'Close settings',
|
|
'settings.view.actions.openSectionList': 'Open section list',
|
|
'settings.view.actions.closeSettingsWithShortcut': 'Close Settings ({shortcut}+,)',
|
|
'settings.view.actions.back': 'Back',
|
|
'settings.view.actions.resizeNavigation': 'Resize settings navigation',
|
|
'settings.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.page.projects.title': 'Projects',
|
|
'settings.page.remoteInstances.title': 'Remote Instances',
|
|
'settings.page.providers.title': 'Providers',
|
|
'settings.page.usage.title': 'Usage',
|
|
'settings.page.agents.title': 'Agents',
|
|
'settings.page.commands.title': 'Commands',
|
|
'settings.page.mcp.title': 'MCP',
|
|
'settings.page.plugins.title': 'Plugins',
|
|
'settings.page.skills.title': 'Skills',
|
|
'settings.page.skillsCatalog.title': 'Skills Catalog',
|
|
'settings.page.git.title': 'Git',
|
|
'settings.page.appearance.title': 'Appearance',
|
|
'settings.page.chat.title': 'Chat',
|
|
'settings.page.shortcuts.title': 'Shortcuts',
|
|
'settings.page.sessions.title': 'Sessions',
|
|
'settings.page.magicPrompts.title': 'Magic Prompts',
|
|
'settings.page.notifications.title': 'Notifications',
|
|
'settings.page.voice.title': 'Voice',
|
|
'settings.page.tunnel.title': 'Remote Tunnel',
|
|
'settings.page.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': 'Remote Tunnel',
|
|
'settings.openchamber.tunnel.description': 'Configure secure remote access with quick links or your own managed remote Cloudflare tunnel.',
|
|
'settings.openchamber.tunnel.note.serverSideEnforced': 'Secure tunnel access is enforced server-side.',
|
|
'settings.openchamber.tunnel.note.connectLinksOneTime': 'Connect links are one-time and are revoked when tunnel stops or connect-link TTL expires.',
|
|
'settings.openchamber.tunnel.note.cloudflareConnectorTarget': 'Cloudflare connector target:',
|
|
'settings.openchamber.tunnel.note.cloudflareConnectorTargetUse': 'For Cloudflare connector target, use',
|
|
'settings.openchamber.tunnel.note.tokensSavedPerTunnel': 'Tokens are saved per tunnel and reused from disk.',
|
|
'settings.openchamber.tunnel.note.customConfigUsed': 'Custom config file will be used when starting the tunnel.',
|
|
'settings.openchamber.tunnel.note.defaultConfigUsed': 'When empty, cloudflared uses its default config (~/.cloudflared/config.yml).',
|
|
'settings.openchamber.tunnel.note.managedRemoteRequiresDomain': 'Managed remote tunnels require a purchased domain in your Cloudflare account.',
|
|
'settings.openchamber.tunnel.note.managedLocalUsesConfig': 'Managed local tunnels use your local cloudflared configuration file.',
|
|
'settings.openchamber.tunnel.note.startModeAndGenerateLink': 'Start a {mode} tunnel and generate a one-time connect link. Do not close the app while this tunnel is in use.',
|
|
'settings.openchamber.tunnel.note.scanQrToConnect': 'Scan with your phone to connect.',
|
|
'settings.openchamber.tunnel.section.redeemedAccessLinks': 'Redeemed access links',
|
|
'settings.openchamber.tunnel.section.savedManagedRemoteTunnels': 'Saved managed remote tunnels',
|
|
'settings.openchamber.tunnel.notAvailable.cloudflaredNotFound': 'cloudflared not found',
|
|
'settings.openchamber.tunnel.notAvailable.dependencyNotFound': '{dependency} was not found.',
|
|
'settings.openchamber.tunnel.notAvailable.installHint': 'Install it to enable remote tunnel access:',
|
|
'settings.openchamber.tunnel.field.provider': 'Provider',
|
|
'settings.openchamber.tunnel.field.providerPlaceholder': 'Select provider',
|
|
'settings.openchamber.tunnel.field.tunnelType': 'Tunnel type',
|
|
'settings.openchamber.tunnel.field.connectLinkTtl': 'Connect link TTL',
|
|
'settings.openchamber.tunnel.field.tunnelSessionTtl': 'Tunnel session TTL',
|
|
'settings.openchamber.tunnel.field.hostnameLabel': 'Hostname:',
|
|
'settings.openchamber.tunnel.field.savedTokenAvailablePlaceholder': 'Saved token available (optional to replace)',
|
|
'settings.openchamber.tunnel.field.pasteTokenPlaceholder': 'Paste token for this tunnel',
|
|
'settings.openchamber.tunnel.field.newPresetNamePlaceholder': 'Tunnel name (e.g. Production)',
|
|
'settings.openchamber.tunnel.field.newPresetHostnamePlaceholder': 'Hostname (e.g. oc.example.com)',
|
|
'settings.openchamber.tunnel.field.newPresetTokenPlaceholder': 'Token',
|
|
'settings.openchamber.tunnel.field.managedRemoteTokenInfoAria': 'Managed remote tunnel token info',
|
|
'settings.openchamber.tunnel.field.configurationFile': 'Configuration file',
|
|
'settings.openchamber.tunnel.field.configurationFilePlaceholder': 'Using default cloudflared config',
|
|
'settings.openchamber.tunnel.field.managedRemoteTunnelToConnect': 'Managed remote tunnel to connect',
|
|
'settings.openchamber.tunnel.field.selectSavedTunnelPlaceholder': 'Select saved tunnel',
|
|
'settings.openchamber.tunnel.field.publicUrlHint': 'Public URL (not accessible without a token)',
|
|
'settings.openchamber.tunnel.field.connectLink': 'Connect link',
|
|
'settings.openchamber.tunnel.field.expires': 'Expires',
|
|
'settings.openchamber.tunnel.field.connectQrAlt': 'Tunnel connect QR code',
|
|
'settings.openchamber.tunnel.actions.removePresetAria': 'Remove {name}',
|
|
'settings.openchamber.tunnel.actions.saveToken': 'Save token',
|
|
'settings.openchamber.tunnel.actions.browseConfigFileAria': 'Browse config file',
|
|
'settings.openchamber.tunnel.actions.clearConfigFileAria': 'Clear config file',
|
|
'settings.openchamber.tunnel.actions.openManagedRemoteDocs': 'Check documentation on how to configure a managed remote tunnel',
|
|
'settings.openchamber.tunnel.actions.openManagedLocalDocs': 'Check documentation on managed local tunnel configuration',
|
|
'settings.openchamber.tunnel.actions.startTunnel': 'Start Tunnel',
|
|
'settings.openchamber.tunnel.actions.startingTunnel': 'Starting tunnel...',
|
|
'settings.openchamber.tunnel.actions.stopTunnel': 'Stop Tunnel',
|
|
'settings.openchamber.tunnel.actions.stopping': 'Stopping...',
|
|
'settings.openchamber.tunnel.actions.newConnectLink': 'New connect link',
|
|
'settings.openchamber.tunnel.actions.copied': 'Copied',
|
|
'settings.openchamber.tunnel.actions.retry': 'Retry',
|
|
'settings.openchamber.tunnel.option.moreProvidersSoon': 'More providers coming soon',
|
|
'settings.openchamber.tunnel.option.mode.quick.label': 'Quick',
|
|
'settings.openchamber.tunnel.option.mode.quick.tooltip': 'Quick Tunnel is best effort and uptime is not guaranteed.',
|
|
'settings.openchamber.tunnel.option.mode.managedRemote.label': 'Managed Remote',
|
|
'settings.openchamber.tunnel.option.mode.managedRemote.tooltip': 'Managed Remote uses your Cloudflare account and hostname for long-lived access.',
|
|
'settings.openchamber.tunnel.option.mode.managedLocal.label': 'Managed Local',
|
|
'settings.openchamber.tunnel.option.mode.managedLocal.tooltip': 'Managed Local uses your local cloudflared configuration file.',
|
|
'settings.openchamber.tunnel.warning.quickModeReliability': 'For more reliable long-lived access, switch to Managed Remote or Managed Local tunnel mode.',
|
|
'settings.openchamber.tunnel.warning.replacesActiveTunnel': 'Starting this tunnel replaces the active tunnel and revokes existing connect links and remote sessions.',
|
|
'settings.openchamber.tunnel.badge.quick': 'QUICK',
|
|
'settings.openchamber.tunnel.badge.remote': 'REMOTE',
|
|
'settings.openchamber.tunnel.badge.local': 'LOCAL',
|
|
'settings.openchamber.tunnel.state.loading': 'Loading',
|
|
'settings.openchamber.tunnel.state.expired': 'Expired',
|
|
'settings.openchamber.tunnel.state.revoked': 'Revoked',
|
|
'settings.openchamber.tunnel.state.inactive': 'Inactive',
|
|
'settings.openchamber.tunnel.state.noExpiry': 'No expiry',
|
|
'settings.openchamber.tunnel.state.never': 'Never',
|
|
'settings.openchamber.tunnel.state.tunnelReady': 'Tunnel ready',
|
|
'settings.openchamber.tunnel.session.redeemedAt': 'Redeemed {time}',
|
|
'settings.openchamber.tunnel.session.expiresIn': 'Expires in {remaining}',
|
|
'settings.openchamber.tunnel.session.inactiveWithReason': 'Inactive ({reason})',
|
|
'settings.openchamber.tunnel.error.invalidConfigExtension': 'Config file must use .yml, .yaml, or .json extension.',
|
|
'settings.openchamber.tunnel.tooltip.tokensSavedPath': 'Tokens are saved in ~/.config/openchamber/cloudflare-managed-remote-tunnels.json.',
|
|
'settings.openchamber.tunnel.empty.noManagedRemoteTunnels': 'No managed remote tunnels saved yet.',
|
|
'settings.openchamber.tunnel.toast.checkAvailabilityFailed': 'Failed to check tunnel availability',
|
|
'settings.openchamber.tunnel.toast.saveSettingsFailed': 'Failed to save tunnel settings',
|
|
'settings.openchamber.tunnel.toast.saveTtlFailed': 'Failed to save tunnel TTL settings',
|
|
'settings.openchamber.tunnel.toast.saveTokenFailed': 'Failed to save managed remote tunnel token',
|
|
'settings.openchamber.tunnel.toast.selectOrAddManagedRemoteFirst': 'Select or add a managed remote tunnel first',
|
|
'settings.openchamber.tunnel.toast.managedRemoteTokenRequiredBeforeStarting': 'Managed remote tunnel token is required before starting',
|
|
'settings.openchamber.tunnel.toast.addManagedRemoteTokenBeforeStarting': 'Add a managed remote tunnel token before starting',
|
|
'settings.openchamber.tunnel.toast.startFailed': 'Failed to start tunnel',
|
|
'settings.openchamber.tunnel.toast.startedButNoPublicUrl': 'Tunnel started but no public URL was returned',
|
|
'settings.openchamber.tunnel.toast.replacedTunnelSingleSingle': 'Replaced previous tunnel: revoked 1 link, invalidated 1 session.',
|
|
'settings.openchamber.tunnel.toast.replacedTunnelSingleManySessions': 'Replaced previous tunnel: revoked 1 link, invalidated {invalidatedSessionCount} sessions.',
|
|
'settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession': 'Replaced previous tunnel: revoked {revokedBootstrapCount} links, invalidated 1 session.',
|
|
'settings.openchamber.tunnel.toast.replacedTunnelManyMany': 'Replaced previous tunnel: revoked {revokedBootstrapCount} links, invalidated {invalidatedSessionCount} sessions.',
|
|
'settings.openchamber.tunnel.toast.linkReady': 'Tunnel link ready',
|
|
'settings.openchamber.tunnel.toast.stopped': 'Tunnel stopped',
|
|
'settings.openchamber.tunnel.toast.stopFailed': 'Failed to stop tunnel',
|
|
'settings.openchamber.tunnel.toast.connectLinkCopied': 'Connect link copied',
|
|
'settings.openchamber.tunnel.toast.copyUrlFailed': 'Failed to copy URL',
|
|
'settings.openchamber.tunnel.toast.saveSelectedManagedRemoteFailed': 'Failed to save selected managed remote tunnel',
|
|
'settings.openchamber.tunnel.toast.tunnelNameRequired': 'Tunnel name is required',
|
|
'settings.openchamber.tunnel.toast.managedRemoteHostnameRequired': 'Managed remote tunnel hostname is required',
|
|
'settings.openchamber.tunnel.toast.managedRemoteTokenRequired': 'Managed remote tunnel token is required',
|
|
'settings.openchamber.tunnel.toast.hostnameAlreadyExists': 'This hostname already exists',
|
|
'settings.openchamber.tunnel.toast.managedRemoteSaved': 'Managed remote tunnel saved',
|
|
'settings.openchamber.tunnel.toast.managedRemoteRemoved': 'Managed remote tunnel removed',
|
|
'settings.magicPrompts.sidebar.title': 'Magic Prompts',
|
|
'settings.magicPrompts.sidebar.description': 'Select a prompt template to edit.',
|
|
'settings.magicPrompts.sidebar.group.git': 'Git',
|
|
'settings.magicPrompts.sidebar.group.github': 'GitHub',
|
|
'settings.magicPrompts.sidebar.group.planning': 'Planning',
|
|
'settings.magicPrompts.sidebar.group.session': 'Session',
|
|
'settings.magicPrompts.sidebar.item.gitCommitGenerate': 'Commit Generation',
|
|
'settings.magicPrompts.sidebar.item.gitPrGenerate': 'PR Generation',
|
|
'settings.magicPrompts.sidebar.item.gitConflictResolve': 'Merge/Rebase Conflict Resolution',
|
|
'settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve': 'Cherry-pick Conflict Resolution',
|
|
'settings.magicPrompts.sidebar.item.githubPrReview': 'PR Review',
|
|
'settings.magicPrompts.sidebar.item.githubIssueReview': 'Issue Review',
|
|
'settings.magicPrompts.sidebar.item.githubPrFailedChecksReview': 'PR Failed Checks Review',
|
|
'settings.magicPrompts.sidebar.item.githubPrCommentsReview': 'PR Comments Review',
|
|
'settings.magicPrompts.sidebar.item.githubSinglePrCommentReview': 'Single PR Comment Review',
|
|
'settings.magicPrompts.sidebar.item.planTodo': 'Todo Planning',
|
|
'settings.magicPrompts.sidebar.item.planImprove': 'Improve Plan',
|
|
'settings.magicPrompts.sidebar.item.planImplement': 'Implement Plan',
|
|
'settings.magicPrompts.sidebar.item.sessionSummary': 'Session Summary',
|
|
'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': 'Workspace Review',
|
|
'settings.magicPrompts.sidebar.item.sessionExplore': 'Codebase Tour',
|
|
'settings.magicPrompts.sidebar.item.sessionFeaturePlan': 'Feature Planning',
|
|
'settings.magicPrompts.sidebar.item.sessionCatchUp': 'Catch Up',
|
|
'settings.magicPrompts.sidebar.item.sessionDebug': 'Debugging',
|
|
'settings.magicPrompts.sidebar.item.sessionWeigh': 'Weigh Options',
|
|
'settings.magicPrompts.sidebar.item.sessionFusion': 'Fusion',
|
|
'settings.remoteInstances.sidebar.title': 'Remote Instances',
|
|
'settings.remoteInstances.sidebar.total': 'Total {count}',
|
|
'settings.remoteInstances.sidebar.newSshInstanceName': 'New SSH connection',
|
|
'settings.remoteInstances.sidebar.actions.addSshInstance': 'Add SSH connection',
|
|
'settings.remoteInstances.sidebar.actions.connect': 'Connect',
|
|
'settings.remoteInstances.sidebar.actions.disconnect': 'Disconnect',
|
|
'settings.remoteInstances.sidebar.actions.retry': 'Retry',
|
|
'settings.remoteInstances.sidebar.actions.remove': 'Remove',
|
|
'settings.remoteInstances.sidebar.confirm.localPortInUseRetry': 'Local port is already in use. Pick a random free local port and retry?',
|
|
'settings.remoteInstances.sidebar.toast.createFailed': 'Failed to create SSH connection',
|
|
'settings.remoteInstances.sidebar.toast.retriedWithRandomPort': 'Retried with a random local port',
|
|
'settings.remoteInstances.sidebar.toast.connectFailed': 'Failed to connect instance',
|
|
'settings.remoteInstances.sidebar.toast.disconnectFailed': 'Failed to disconnect instance',
|
|
'settings.remoteInstances.sidebar.toast.retryFailed': 'Failed to retry connection',
|
|
'settings.remoteInstances.sidebar.toast.removeFailed': 'Failed to remove instance',
|
|
'settings.remoteInstances.direct.sidebarTitle': 'Server links',
|
|
'settings.remoteInstances.direct.sidebarDescription': 'Connect with a link or token',
|
|
'settings.remoteInstances.direct.title': 'Other OpenChamber servers',
|
|
'settings.remoteInstances.direct.description': 'Add another OpenChamber server by URL. Use this when the server is already running and you have a connection token.',
|
|
'settings.remoteInstances.direct.field.labelPlaceholder': 'Label (optional)',
|
|
'settings.remoteInstances.direct.field.urlPlaceholder': 'https://host:port',
|
|
'settings.remoteInstances.direct.field.tokenPlaceholder': 'Connection token (optional for trusted local servers)',
|
|
'settings.remoteInstances.direct.note': 'Connection tokens are saved on this device and used only when this app connects to that server.',
|
|
'settings.remoteInstances.direct.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 (optional)',
|
|
'settings.remoteInstances.clientAuth.actions.create': 'Create Token',
|
|
'settings.remoteInstances.clientAuth.actions.pair': 'Create Link',
|
|
'settings.remoteInstances.clientAuth.actions.revoke': 'Revoke',
|
|
'settings.remoteInstances.clientAuth.actions.clearRevoked': 'Clear revoked',
|
|
'settings.remoteInstances.clientAuth.qrAlt': 'OpenChamber connection QR code',
|
|
'settings.remoteInstances.clientAuth.pairingUrl': 'Connection link',
|
|
'settings.remoteInstances.clientAuth.createdToken': 'Copy this token now. For security, it will not be shown again.',
|
|
'settings.remoteInstances.clientAuth.state.loading': 'Loading tokens...',
|
|
'settings.remoteInstances.clientAuth.state.empty': 'No devices connected yet.',
|
|
'settings.remoteInstances.clientAuth.state.revoked': 'Revoked',
|
|
'settings.remoteInstances.clientAuth.state.thisDevice': 'This device',
|
|
'settings.remoteInstances.clientAuth.lastUsed': 'Last used {date}',
|
|
'settings.remoteInstances.clientAuth.neverUsed': 'Never used',
|
|
'settings.remoteInstances.sidebar.phase.ready': 'Ready',
|
|
'settings.remoteInstances.sidebar.phase.error': 'Error',
|
|
'settings.remoteInstances.sidebar.phase.reconnect': 'Reconnect',
|
|
'settings.remoteInstances.sidebar.phase.installing': 'Installing',
|
|
'settings.remoteInstances.sidebar.phase.updating': 'Updating',
|
|
'settings.remoteInstances.sidebar.phase.forwarding': 'Forwarding',
|
|
'settings.remoteInstances.sidebar.phase.starting': 'Starting',
|
|
'settings.remoteInstances.sidebar.phase.connecting': 'Connecting',
|
|
'settings.remoteInstances.sidebar.phase.idle': 'Idle',
|
|
'settings.remoteInstances.page.section.instance': 'Instance',
|
|
'settings.remoteInstances.page.section.instanceDescription': 'Choose the SSH command and a display name for this connection.',
|
|
'settings.remoteInstances.page.field.mode': 'Mode',
|
|
'settings.remoteInstances.page.field.modeHint': 'Choose whether OpenChamber should start the server for you, or connect to one that is already running.',
|
|
'settings.remoteInstances.page.field.modePlaceholder': 'Select mode',
|
|
'settings.remoteInstances.page.field.modeManaged': 'Start it for me',
|
|
'settings.remoteInstances.page.field.modeExternal': 'Already running',
|
|
'settings.remoteInstances.page.field.preferredRemotePort': 'Preferred remote port',
|
|
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port to use on the remote machine. Leave empty to choose one automatically.',
|
|
'settings.remoteInstances.page.field.keepServerRunning': 'Keep server running',
|
|
'settings.remoteInstances.page.field.keepServerRunningHint': 'Keep OpenChamber running on the remote machine after you disconnect.',
|
|
'settings.remoteInstances.page.field.bindHost': 'Bind host',
|
|
'settings.remoteInstances.page.field.bindHostHint': 'Where the local connection should listen. Use 127.0.0.1 or localhost unless you need LAN access.',
|
|
'settings.remoteInstances.page.field.preferredLocalPort': 'Preferred local port',
|
|
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Local port to open for this connection. Leave empty to choose one automatically.',
|
|
'settings.remoteInstances.page.field.forwardType': 'Forward type',
|
|
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
|
|
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
|
|
'settings.remoteInstances.page.field.auto': 'Auto',
|
|
'settings.remoteInstances.page.confirm.bindAllInterfaces': 'Binding to 0.0.0.0 exposes forwarded ports to your local network. Continue?',
|
|
'settings.remoteInstances.page.preview.localSocks5': '(local SOCKS5)',
|
|
'settings.remoteInstances.page.preview.local': '(local)',
|
|
'settings.remoteInstances.page.preview.remote': '(remote)',
|
|
'settings.remoteInstances.page.toast.openLocalEndpointFailed': 'Failed to open local address',
|
|
'settings.remoteInstances.page.toast.localUrlCopied': 'Local URL copied',
|
|
'settings.remoteInstances.page.actions.copyLocalUrl': 'Copy local URL',
|
|
'settings.remoteInstances.page.actions.open': 'Open',
|
|
'settings.remoteInstances.page.logsDialog.selectedInstanceFallback': 'Selected instance',
|
|
'settings.remoteInstances.page.patternDialog.descriptionWithHost': '{host} requires a concrete destination.',
|
|
'settings.remoteInstances.page.patternDialog.description': 'Enter destination.',
|
|
'settings.common.actions.cancel': 'Cancel',
|
|
'settings.common.actions.create': 'Create',
|
|
'settings.common.actions.delete': 'Delete',
|
|
'settings.common.actions.reset': 'Reset',
|
|
'settings.common.actions.rename': 'Rename',
|
|
'settings.common.actions.duplicate': 'Duplicate',
|
|
'settings.common.actions.import': 'Import',
|
|
'settings.common.actions.copyAll': 'Copy all',
|
|
'settings.common.actions.clear': 'Clear',
|
|
'settings.common.actions.saving': 'Saving...',
|
|
'settings.common.actions.saveChanges': 'Save Changes',
|
|
'settings.common.scope.global': 'Global',
|
|
'settings.common.scope.project': 'Project',
|
|
'settings.common.field.description': 'Description',
|
|
'settings.common.badge.new': 'New',
|
|
'settings.common.badge.modified': 'Modified',
|
|
'settings.common.permission.allow': 'Allow',
|
|
'settings.common.permission.ask': 'Ask',
|
|
'settings.common.permission.deny': 'Deny',
|
|
'settings.common.state.comingSoon': 'Coming soon...',
|
|
'settings.projects.actions.title': 'Actions',
|
|
'settings.projects.actions.description': 'Per-project commands shown in header next to project name.',
|
|
'settings.projects.actions.validation.fillNameAndCommand': 'Fill action name and command before saving.',
|
|
'settings.projects.actions.state.loading': 'Loading...',
|
|
'settings.projects.actions.state.empty': 'No actions configured yet.',
|
|
'settings.projects.actions.state.untitled': 'Untitled action',
|
|
'settings.projects.actions.state.noDesktopSshForwards': 'No enabled local SSH forwards available.',
|
|
'settings.projects.actions.field.selectIconAria': 'Select icon',
|
|
'settings.projects.actions.field.iconAria': 'Icon {icon}',
|
|
'settings.projects.actions.field.actionNamePlaceholder': 'Action name',
|
|
'settings.projects.actions.field.command': 'Command',
|
|
'settings.projects.actions.field.commandPlaceholder': 'e.g. bun run lint',
|
|
'settings.projects.actions.field.autoOpenUrl': 'Auto-open URL',
|
|
'settings.projects.actions.field.autoOpenUrlForAria': 'Auto-open URL for {title}',
|
|
'settings.projects.actions.field.autoOpenUrlDescription': 'Open URL from output or custom URL below',
|
|
'settings.projects.actions.field.overrideUrlPlaceholder': 'Override URL (optional)',
|
|
'settings.projects.actions.field.overrideUrlTooltip': 'If this field is filled, custom URL is used. If empty, app opens best URL from output.',
|
|
'settings.projects.actions.field.desktopSshForward': 'Desktop SSH forward',
|
|
'settings.projects.actions.field.useOutputManualUrl': 'Use output/manual URL',
|
|
'settings.projects.actions.actions.add': 'Add action',
|
|
'settings.projects.actions.actions.save': 'Save Actions',
|
|
'settings.projects.actions.toast.saveFailed': 'Failed to save actions',
|
|
'settings.projects.actions.toast.saved': 'Project actions saved',
|
|
'settings.openchamber.about.title': 'About OpenChamber',
|
|
'settings.openchamber.about.field.version': 'Version',
|
|
'settings.openchamber.about.field.openCodeVersion': 'OpenCode version',
|
|
'settings.openchamber.about.state.checking': 'Checking...',
|
|
'settings.openchamber.about.state.upToDate': 'Up to date',
|
|
'settings.openchamber.about.state.unknown': 'unknown',
|
|
'settings.openchamber.about.actions.checkUpdates': 'Check updates',
|
|
'settings.openchamber.about.actions.update': 'Update',
|
|
'settings.openchamber.about.actions.updateToVersion': 'Update to {version}',
|
|
'settings.openchamber.about.actions.checkForUpdates': 'Check for updates',
|
|
'settings.openchamber.about.toast.latestVersion': 'You are on the latest version',
|
|
'settings.agents.sidebar.title': 'Agents',
|
|
'settings.agents.sidebar.total': 'Total {count}',
|
|
'settings.agents.sidebar.empty.title': 'No agents configured',
|
|
'settings.agents.sidebar.empty.description': 'Use the + button above to create one',
|
|
'settings.agents.sidebar.section.builtIn': 'Built-in Agents',
|
|
'settings.agents.sidebar.section.custom': 'Custom Agents',
|
|
'settings.agents.sidebar.badge.system': 'system',
|
|
'settings.agents.sidebar.dialog.deleteTitle': 'Delete Agent',
|
|
'settings.agents.sidebar.dialog.resetTitle': 'Reset Agent',
|
|
'settings.agents.sidebar.dialog.deleteDescription': 'Are you sure you want to delete agent "{name}"?',
|
|
'settings.agents.sidebar.dialog.resetDescription': 'Are you sure you want to reset agent "{name}" to its default configuration?',
|
|
'settings.agents.sidebar.renameDialog.title': 'Rename Agent',
|
|
'settings.agents.sidebar.renameDialog.description': 'Enter a new name for the agent "@{name}"',
|
|
'settings.agents.sidebar.renameDialog.placeholder': 'New agent name...',
|
|
'settings.agents.sidebar.toast.builtInCannotDelete': 'Built-in agents cannot be deleted',
|
|
'settings.agents.sidebar.toast.agentDeleted': 'Agent "{name}" deleted successfully',
|
|
'settings.agents.sidebar.toast.agentReset': 'Agent "{name}" reset to default',
|
|
'settings.agents.sidebar.toast.deleteFailed': 'Failed to delete agent',
|
|
'settings.agents.sidebar.toast.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.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.behavior.page.title': 'Behavior',
|
|
'settings.behavior.page.warning.title': 'Global rules are combined with project rules',
|
|
'settings.behavior.page.warning.description': 'Changes made here update {path}. OpenCode also includes any project-level AGENTS.md rules when they exist.',
|
|
'settings.behavior.page.section.systemPrompt': 'Global AGENTS.md',
|
|
'settings.behavior.page.field.systemPromptPlaceholder': 'You are a helpful AI assistant...\n\nUse this space to define absolute rules for how the AI should behave across all sessions and providers.',
|
|
'settings.behavior.page.section.responseStyle': 'Response style',
|
|
'settings.behavior.page.responseStyle.tooltip': 'When enabled, these instructions guide how the assistant responds in each new conversation. They are sent with your first message and do not change your global AGENTS.md rules.',
|
|
'settings.behavior.page.responseStyle.enableAria': 'Enable response style instructions',
|
|
'settings.behavior.page.responseStyle.enable': 'Add response style instructions to new conversations',
|
|
'settings.behavior.page.responseStyle.preset': 'Preset',
|
|
'settings.behavior.page.responseStyle.option.concise': 'Concise',
|
|
'settings.behavior.page.responseStyle.option.detailed': 'Detailed',
|
|
'settings.behavior.page.responseStyle.option.mentor': 'Mentor',
|
|
'settings.behavior.page.responseStyle.option.pushback': 'Pushback',
|
|
'settings.behavior.page.responseStyle.option.noFiller': 'No filler',
|
|
'settings.behavior.page.responseStyle.option.matchEnergy': 'Match my energy',
|
|
'settings.behavior.page.responseStyle.option.warmPeer': 'Warm peer',
|
|
'settings.behavior.page.responseStyle.option.custom': 'Custom',
|
|
'settings.behavior.page.responseStyle.customPlaceholder': 'Write the instruction to add to the first message...',
|
|
'settings.behavior.page.toast.saved': 'Behavior saved successfully',
|
|
'settings.behavior.page.toast.saveFailed': 'Failed to save behavior',
|
|
'settings.commands.sidebar.title': 'Commands',
|
|
'settings.commands.sidebar.total': 'Total {count}',
|
|
'settings.commands.sidebar.empty.title': 'No commands configured',
|
|
'settings.commands.sidebar.empty.description': 'Use the + button above to create one',
|
|
'settings.commands.sidebar.section.builtIn': 'Built-in Commands',
|
|
'settings.commands.sidebar.section.custom': 'Custom Commands',
|
|
'settings.commands.sidebar.dialog.deleteTitle': 'Delete Command',
|
|
'settings.commands.sidebar.dialog.resetTitle': 'Reset Command',
|
|
'settings.commands.sidebar.dialog.deleteDescription': 'Are you sure you want to delete command "{name}"?',
|
|
'settings.commands.sidebar.dialog.resetDescription': 'Are you sure you want to reset command "{name}" to its default configuration?',
|
|
'settings.commands.sidebar.renameDialog.title': 'Rename Command',
|
|
'settings.commands.sidebar.renameDialog.description': 'Enter a new name for the command "/{name}"',
|
|
'settings.commands.sidebar.renameDialog.placeholder': 'New command name...',
|
|
'settings.commands.sidebar.toast.builtInCannotDelete': 'Built-in commands cannot be deleted',
|
|
'settings.commands.sidebar.toast.commandDeleted': 'Command "{name}" deleted successfully',
|
|
'settings.commands.sidebar.toast.commandReset': 'Command "{name}" reset to default',
|
|
'settings.commands.sidebar.toast.deleteFailed': 'Failed to delete command',
|
|
'settings.commands.sidebar.toast.resetFailed': 'Failed to reset command',
|
|
'settings.commands.sidebar.toast.commandNameRequired': 'Command name is required',
|
|
'settings.commands.sidebar.toast.commandExists': 'A command with this name already exists',
|
|
'settings.commands.sidebar.toast.removeOldAfterRenameFailed': 'Failed to remove old command after rename',
|
|
'settings.commands.sidebar.toast.renameFailed': 'Failed to rename command',
|
|
'settings.commands.page.toast.templateRequired': 'Command template is required',
|
|
'settings.commands.page.toast.created': 'Command created successfully',
|
|
'settings.commands.page.toast.updated': 'Command updated successfully',
|
|
'settings.commands.page.toast.createFailed': 'Failed to create command',
|
|
'settings.commands.page.toast.updateFailed': 'Failed to update command',
|
|
'settings.commands.page.toast.saveUnexpectedError': 'An error occurred while saving',
|
|
'settings.commands.page.empty.title': 'Select a command from the sidebar',
|
|
'settings.commands.page.empty.description': 'or create a new one',
|
|
'settings.commands.page.title.new': 'New Command',
|
|
'settings.commands.page.subtitle.new': 'Configure a new slash command',
|
|
'settings.commands.page.subtitle.edit': 'Edit command settings',
|
|
'settings.commands.page.section.identity': 'Identity',
|
|
'settings.commands.page.section.executionContext': 'Execution Context',
|
|
'settings.commands.page.section.template': 'Command Template',
|
|
'settings.commands.page.field.commandName': 'Command Name',
|
|
'settings.commands.page.field.commandNamePlaceholder': 'command-name',
|
|
'settings.commands.page.field.descriptionPlaceholder': 'What does this command do?',
|
|
'settings.commands.page.field.overrideAgent': 'Override Agent',
|
|
'settings.commands.page.field.templatePlaceholder': 'Your command template here...\n\nUse $ARGUMENTS to reference user input.\nUse !`shell command` to inject shell output.\nUse @filename to include file contents.',
|
|
'settings.commands.page.templateHint.userInput': 'user input',
|
|
'settings.commands.page.templateHint.shellOutput': 'shell output',
|
|
'settings.commands.page.templateHint.fileContents': 'file contents',
|
|
'settings.commands.agentSelector.title': 'Select agent',
|
|
'settings.commands.agentSelector.notSelected': 'Not selected',
|
|
'settings.commands.agentSelector.selectAgentPlaceholder': 'Select agent...',
|
|
'settings.gitIdentities.page.section.title': 'Identities',
|
|
'settings.gitIdentities.page.empty.title': 'No identities configured',
|
|
'settings.gitIdentities.page.empty.description': 'Create one to manage Git author settings per project',
|
|
'settings.gitIdentities.page.discoveredCredentials.title': 'Found in ~/.git-credentials',
|
|
'settings.gitIdentities.page.badge.default': 'default',
|
|
'settings.gitIdentities.page.actions.setAsDefault': 'Set as default',
|
|
'settings.gitIdentities.page.actions.unsetDefault': 'Unset default',
|
|
'settings.gitIdentities.page.actions.import': 'Import',
|
|
'settings.gitIdentities.page.toast.updateDefaultFailed': 'Failed to update default identity',
|
|
'settings.gitIdentities.page.toast.defaultUpdated': 'Default identity updated',
|
|
'settings.gitIdentities.page.toast.defaultUnset': 'Default identity unset',
|
|
'settings.gitIdentities.page.toast.profileDeleted': 'Profile "{name}" deleted',
|
|
'settings.gitIdentities.page.toast.deleteProfileFailed': 'Failed to delete profile',
|
|
'settings.gitIdentities.page.deleteDialog.title': 'Delete Profile',
|
|
'settings.gitIdentities.page.deleteDialog.description': 'Are you sure you want to delete "{name}"?',
|
|
'settings.gitIdentities.editor.title.importCredential': 'Import Credential',
|
|
'settings.gitIdentities.editor.title.newIdentity': 'New Identity',
|
|
'settings.gitIdentities.editor.title.globalIdentity': 'Global Identity',
|
|
'settings.gitIdentities.editor.title.editIdentity': 'Edit Identity',
|
|
'settings.gitIdentities.editor.description.globalReadOnly': 'System-wide Git identity (read-only)',
|
|
'settings.gitIdentities.editor.description.newProfile': 'Create a new Git identity profile',
|
|
'settings.gitIdentities.editor.description.editProfile': 'Edit identity profile settings',
|
|
'settings.gitIdentities.editor.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.renameLoadFailed': 'Failed to load skill details',
|
|
'settings.skills.sidebar.toast.removeOldAfterRenameFailed': 'Failed to remove old skill after rename',
|
|
'settings.skills.sidebar.toast.renameFailed': 'Failed to rename skill',
|
|
'settings.skills.sidebar.deleteDialog.title': 'Delete Skill',
|
|
'settings.skills.sidebar.deleteDialog.description': 'Are you sure you want to delete skill "{name}"?',
|
|
'settings.skills.sidebar.renameDialog.title': 'Rename Skill',
|
|
'settings.skills.sidebar.renameDialog.description': 'Enter a new name for the skill "{name}"',
|
|
'settings.skills.sidebar.renameDialog.placeholder': 'New skill name...',
|
|
'settings.skills.page.title.newSkill': 'New Skill',
|
|
'settings.skills.page.subtitle.newSkill': 'Configure a new skill',
|
|
'settings.skills.page.subtitle.skillLocation': '{location} skill',
|
|
'settings.skills.page.section.basicInformation': 'Basic Information',
|
|
'settings.skills.page.section.instructions': 'Instructions',
|
|
'settings.skills.page.section.supportingFiles': 'Supporting Files',
|
|
'settings.skills.page.field.skillNameLocation': 'Skill Name & Location',
|
|
'settings.skills.page.field.skillNameHint': 'Lowercase, numbers, hyphens',
|
|
'settings.skills.page.field.skillNamePlaceholder': 'skill-name',
|
|
'settings.skills.page.field.descriptionHint': 'The agent uses this to decide when to load the skill',
|
|
'settings.skills.page.field.descriptionPlaceholder': 'Brief description of what this skill does...',
|
|
'settings.skills.page.field.instructionsPlaceholder': 'Step-by-step instructions, guidelines, or reference content...',
|
|
'settings.skills.page.badge.claudeCompatible': 'Claude-compatible',
|
|
'settings.skills.page.badge.pending': 'pending',
|
|
'settings.skills.page.actions.addFile': 'Add File',
|
|
'settings.skills.page.actions.createSkill': 'Create Skill',
|
|
'settings.skills.page.actions.createFile': 'Create File',
|
|
'settings.skills.page.supportingFiles.empty': 'No supporting files. Use "Add File" to include reference materials.',
|
|
'settings.skills.page.loading.details': 'Loading skill details...',
|
|
'settings.skills.page.loading.fileContent': 'Loading file content...',
|
|
'settings.skills.page.empty.title': 'Select a skill from the sidebar',
|
|
'settings.skills.page.empty.description': 'or create a new one',
|
|
'settings.skills.page.deleteFileDialog.title': 'Delete Supporting File',
|
|
'settings.skills.page.deleteFileDialog.description': 'Are you sure you want to delete "{path}"?',
|
|
'settings.skills.page.fileDialog.titleEdit': 'Edit Supporting File',
|
|
'settings.skills.page.fileDialog.titleAdd': 'Add Supporting File',
|
|
'settings.skills.page.fileDialog.descriptionEdit': 'Modify the file content',
|
|
'settings.skills.page.fileDialog.descriptionAdd': 'Create a new file in the skill directory',
|
|
'settings.skills.page.fileDialog.field.filePath': 'File Path',
|
|
'settings.skills.page.fileDialog.field.filePathPlaceholder': 'example.md or docs/reference.txt',
|
|
'settings.skills.page.fileDialog.field.filePathHint': 'Relative path within the skill directory. Subdirectories will be created automatically.',
|
|
'settings.skills.page.fileDialog.field.content': 'Content',
|
|
'settings.skills.page.fileDialog.field.contentPlaceholder': 'File content...',
|
|
'settings.skills.page.toast.skillNameRequired': 'Skill name is required',
|
|
'settings.skills.page.toast.invalidSkillName': 'Skill name must be 1-64 lowercase alphanumeric characters with hyphens, cannot start or end with hyphen',
|
|
'settings.skills.page.toast.descriptionRequired': 'Description is required',
|
|
'settings.skills.page.toast.skillExists': 'A skill with this name already exists',
|
|
'settings.skills.page.toast.skillCreated': 'Skill created successfully',
|
|
'settings.skills.page.toast.skillUpdated': 'Skill updated successfully',
|
|
'settings.skills.page.toast.createSkillFailed': 'Failed to create skill',
|
|
'settings.skills.page.toast.updateSkillFailed': 'Failed to update skill',
|
|
'settings.skills.page.toast.saveUnexpectedError': 'An error occurred while saving',
|
|
'settings.skills.page.toast.loadFileContentFailed': 'Failed to load file content',
|
|
'settings.skills.page.toast.fileNameRequired': 'File name is required',
|
|
'settings.skills.page.toast.fileExists': 'A file with this name already exists',
|
|
'settings.skills.page.toast.noSkillSelected': 'No skill selected',
|
|
'settings.skills.page.toast.fileAdded': 'File "{path}" added',
|
|
'settings.skills.page.toast.fileCreated': 'File "{path}" created',
|
|
'settings.skills.page.toast.fileUpdated': 'File "{path}" updated',
|
|
'settings.skills.page.toast.fileRemoved': 'File "{path}" removed',
|
|
'settings.skills.page.toast.fileDeleted': 'File "{path}" deleted',
|
|
'settings.skills.page.toast.createFileFailed': 'Failed to create file',
|
|
'settings.skills.page.toast.updateFileFailed': 'Failed to update file',
|
|
'settings.skills.page.toast.deleteFileFailed': 'Failed to delete file',
|
|
'settings.skills.location.option.userOpencode.label': 'User / OpenCode',
|
|
'settings.skills.location.option.userOpencode.description': 'Global OpenCode config location',
|
|
'settings.skills.location.option.projectOpencode.label': 'Project / OpenCode',
|
|
'settings.skills.location.option.projectOpencode.description': 'Current project .opencode location',
|
|
'settings.skills.location.option.userClaude.label': 'User / Claude',
|
|
'settings.skills.location.option.userClaude.description': 'Global Claude skills location',
|
|
'settings.skills.location.option.projectClaude.label': 'Project / Claude',
|
|
'settings.skills.location.option.projectClaude.description': 'Current project .claude location',
|
|
'settings.skills.location.option.userAgents.label': 'User / Agents',
|
|
'settings.skills.location.option.userAgents.description': 'Global .agents compatibility location',
|
|
'settings.skills.location.option.projectAgents.label': 'Project / Agents',
|
|
'settings.skills.location.option.projectAgents.description': 'Current project .agents compatibility location',
|
|
'settings.skills.catalog.shared.field.repository': 'Repository',
|
|
'settings.skills.catalog.shared.field.repositoryPlaceholder': 'owner/repo or git@github.com:owner/repo.git',
|
|
'settings.skills.catalog.shared.field.optionalSubpath': 'Optional subpath',
|
|
'settings.skills.catalog.shared.field.subpathPlaceholder': 'e.g. skills',
|
|
'settings.skills.catalog.shared.field.targetLocation': 'Target location',
|
|
'settings.skills.catalog.shared.field.project': 'Project',
|
|
'settings.skills.catalog.shared.field.noProjects': 'No projects available',
|
|
'settings.skills.catalog.shared.field.chooseProjectPlaceholder': 'Choose project',
|
|
'settings.skills.catalog.shared.field.searchSkillsPlaceholder': 'Search skills…',
|
|
'settings.skills.catalog.shared.toast.repositoryRequired': 'Repository source is required',
|
|
'settings.skills.catalog.shared.toast.privateRepoNotSupportedVsCode': 'Private repositories are not supported in VS Code yet',
|
|
'settings.skills.catalog.shared.toast.foundSkills': 'Found {count} skill(s)',
|
|
'settings.skills.catalog.shared.noDescription': 'No description provided',
|
|
'settings.skills.catalog.shared.actions.scan': 'Scan',
|
|
'settings.skills.catalog.shared.actions.scanning': 'Scanning...',
|
|
'settings.skills.catalog.shared.actions.install': 'Install',
|
|
'settings.skills.catalog.shared.actions.installing': 'Installing...',
|
|
'settings.skills.catalog.shared.auth.title': 'Authentication required',
|
|
'settings.skills.catalog.shared.auth.description': 'Select a Git identity (SSH key)',
|
|
'settings.skills.catalog.shared.auth.chooseIdentity': 'Choose identity',
|
|
'settings.skills.catalog.shared.auth.footerHint': 'Configure identities in Settings - Git Identities.',
|
|
'settings.skills.catalog.shared.auth.footerHintArrow': 'Configure identities in Settings → Git Identities.',
|
|
'settings.skills.catalog.conflicts.title': 'Skills already exist',
|
|
'settings.skills.catalog.conflicts.description': 'Some selected skills are already installed in this scope. Choose whether to skip or overwrite them.',
|
|
'settings.skills.catalog.conflicts.count': '{count} conflict(s)',
|
|
'settings.skills.catalog.conflicts.installedIn': 'Installed in {scope} / {source}',
|
|
'settings.skills.catalog.conflicts.scope.user': 'user',
|
|
'settings.skills.catalog.conflicts.scope.project': 'project',
|
|
'settings.skills.catalog.conflicts.source.opencode': 'opencode',
|
|
'settings.skills.catalog.conflicts.source.agents': 'agents',
|
|
'settings.skills.catalog.conflicts.decision.skip': 'Skip',
|
|
'settings.skills.catalog.conflicts.decision.overwrite': 'Overwrite',
|
|
'settings.skills.catalog.conflicts.actions.skipAll': 'Skip all',
|
|
'settings.skills.catalog.conflicts.actions.overwriteAll': 'Overwrite all',
|
|
'settings.skills.catalog.conflicts.actions.continue': 'Continue',
|
|
'settings.skills.catalog.installSkill.title': 'Install skill',
|
|
'settings.skills.catalog.installSkill.descriptionPrefix': 'Install',
|
|
'settings.skills.catalog.installSkill.descriptionSuffix': 'into one of four target locations.',
|
|
'settings.skills.catalog.installSkill.field.destination': 'Destination',
|
|
'settings.skills.catalog.installSkill.field.project': 'Project',
|
|
'settings.skills.catalog.installSkill.field.noProjects': 'No projects available',
|
|
'settings.skills.catalog.installSkill.field.chooseProjectPlaceholder': 'Choose project',
|
|
'settings.skills.catalog.installSkill.actions.install': 'Install',
|
|
'settings.skills.catalog.installSkill.actions.installing': 'Installing...',
|
|
'settings.skills.catalog.installSkill.toast.installed': 'Skill installed successfully',
|
|
'settings.skills.catalog.installSkill.toast.authRequired': 'Authentication required',
|
|
'settings.skills.catalog.installSkill.toast.installFailed': 'Failed to install skill',
|
|
'settings.skills.catalog.add.title': 'Add skills catalog',
|
|
'settings.skills.catalog.add.descriptionPrefix': 'Add a Git repository as a new catalog source. OpenChamber will scan it for folders containing',
|
|
'settings.skills.catalog.add.descriptionSuffix': '.',
|
|
'settings.skills.catalog.add.field.catalogName': 'Catalog name',
|
|
'settings.skills.catalog.add.field.catalogNamePlaceholder': 'e.g. Team Skills',
|
|
'settings.skills.catalog.add.field.repository': 'Repository',
|
|
'settings.skills.catalog.add.field.optionalSubpath': 'Optional subpath',
|
|
'settings.skills.catalog.add.field.repositoryHint': 'Public repos work everywhere. Private repos require SSH identity (Desktop/Web only).',
|
|
'settings.skills.catalog.add.scanResult': 'Scan result: {count} skill(s) found',
|
|
'settings.skills.catalog.add.duplicateMessage': 'This catalog is already added.',
|
|
'settings.skills.catalog.add.actions.addCatalog': 'Add catalog',
|
|
'settings.skills.catalog.add.toast.repositoryRequired': 'Repository source is required',
|
|
'settings.skills.catalog.add.toast.authenticationRequiredScan': 'Authentication required. Select a Git identity and scan again.',
|
|
'settings.skills.catalog.add.toast.scanFailed': 'Failed to scan repository',
|
|
'settings.skills.catalog.add.toast.noSkillsFound': 'No skills found in this repository',
|
|
'settings.skills.catalog.add.toast.catalogNameRequired': 'Catalog name is required',
|
|
'settings.skills.catalog.add.toast.scanBeforeAdd': 'Scan the repository before adding this catalog',
|
|
'settings.skills.catalog.add.toast.catalogAlreadyExists': 'This catalog already exists',
|
|
'settings.skills.catalog.add.toast.catalogAdded': 'Catalog added',
|
|
'settings.skills.catalog.add.toast.saveFailed': 'Failed to save catalog',
|
|
'settings.skills.catalog.installFromRepo.title': 'Install from Git repository',
|
|
'settings.skills.catalog.installFromRepo.descriptionPrefix': 'Scan a repository for folders containing',
|
|
'settings.skills.catalog.installFromRepo.descriptionSuffix': ', then install selected skills.',
|
|
'settings.skills.catalog.installFromRepo.repositoryHintPrefix': 'For GitHub shorthand, you can add a subpath like',
|
|
'settings.skills.catalog.installFromRepo.authDescription': 'Select a Git identity (SSH key) that can access this repository.',
|
|
'settings.skills.catalog.installFromRepo.empty.noScanResultsTitle': 'No scan results yet',
|
|
'settings.skills.catalog.installFromRepo.empty.noScanResultsDescription': 'Scan a repository to discover skills',
|
|
'settings.skills.catalog.installFromRepo.actions.selectAll': 'Select all',
|
|
'settings.skills.catalog.installFromRepo.actions.selectNone': 'Select none',
|
|
'settings.skills.catalog.installFromRepo.actions.installSelected': 'Install selected',
|
|
'settings.skills.catalog.installFromRepo.badge.installed': 'installed ({scope}/{source})',
|
|
'settings.skills.catalog.installFromRepo.selectedCount': 'Selected: {selected} / {total}',
|
|
'settings.skills.catalog.installFromRepo.toast.authenticationRequiredScan': 'Authentication required. Select a Git identity and try scanning again.',
|
|
'settings.skills.catalog.installFromRepo.toast.authenticationRequiredInstall': 'Authentication required. Select a Git identity and try installing again.',
|
|
'settings.skills.catalog.installFromRepo.toast.scanFailed': 'Failed to scan repository',
|
|
'settings.skills.catalog.installFromRepo.toast.selectAtLeastOne': 'Select at least one skill to install',
|
|
'settings.skills.catalog.installFromRepo.toast.installedCount': 'Installed {count} skill(s)',
|
|
'settings.skills.catalog.installFromRepo.toast.installCompleted': 'Installation completed',
|
|
'settings.skills.catalog.installFromRepo.toast.installFailed': 'Failed to install skills',
|
|
'settings.skills.catalog.page.mode.manual': 'Manual',
|
|
'settings.skills.catalog.page.mode.external': 'External',
|
|
'settings.skills.catalog.page.title': 'Skills Catalog',
|
|
'settings.skills.catalog.page.section.sourceRepository': 'Source Repository',
|
|
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Select source',
|
|
'settings.skills.catalog.page.actions.refreshTitle': 'Refresh',
|
|
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Remove Catalog',
|
|
'settings.skills.catalog.page.actions.addCatalog': 'Add Catalog',
|
|
'settings.skills.catalog.page.actions.removeCatalog': 'Remove Catalog',
|
|
'settings.skills.catalog.page.actions.loadMoreSkills': 'Load More Skills',
|
|
'settings.skills.catalog.page.loading.catalog': 'Loading...',
|
|
'settings.skills.catalog.page.loading.skills': 'Loading skills...',
|
|
'settings.skills.catalog.page.loading.more': 'Loading...',
|
|
'settings.skills.catalog.page.foundCount': '{count} skill(s) found',
|
|
'settings.skills.catalog.page.error.catalogTitle': 'Catalog error',
|
|
'settings.skills.catalog.page.empty.noSkillsTitle': 'No skills found',
|
|
'settings.skills.catalog.page.empty.noSkillsDescription': 'Try a different search or refresh the catalog',
|
|
'settings.skills.catalog.page.badge.installed': 'installed ({scope})',
|
|
'settings.skills.catalog.page.badge.notInstallable': 'not installable',
|
|
'settings.skills.catalog.page.badge.unknown': 'unknown',
|
|
'settings.skills.catalog.page.byOwnerPrefix': 'by',
|
|
'settings.skills.catalog.page.removeDialog.title': 'Remove Catalog',
|
|
'settings.skills.catalog.page.removeDialog.description': 'Are you sure you want to remove this catalog?',
|
|
'settings.openchamber.passkeys.title': 'Passkeys',
|
|
'settings.openchamber.passkeys.field.currentDevice': 'Current device',
|
|
'settings.openchamber.passkeys.actions.add': 'Add passkey',
|
|
'settings.openchamber.passkeys.actions.cancelSetup': 'Cancel passkey setup',
|
|
'settings.openchamber.passkeys.actions.signOutEverywhere': 'Sign out everywhere',
|
|
'settings.openchamber.passkeys.actions.signingOut': 'Signing out…',
|
|
'settings.openchamber.passkeys.actions.removing': 'Removing…',
|
|
'settings.openchamber.passkeys.state.uiPasswordRequired': 'Passkeys are available only when the UI password lock is enabled.',
|
|
'settings.openchamber.passkeys.state.loading': 'Loading passkeys…',
|
|
'settings.openchamber.passkeys.state.noneSaved': 'No passkeys saved for this host yet.',
|
|
'settings.openchamber.passkeys.item.lastUsed': 'Last used {time}',
|
|
'settings.openchamber.passkeys.item.added': 'Added {time}',
|
|
'settings.openchamber.passkeys.time.neverUsed': 'Never used',
|
|
'settings.openchamber.passkeys.toast.loadFailed': 'Could not load passkeys.',
|
|
'settings.openchamber.passkeys.toast.enableUiPasswordFirst': 'Enable the UI password lock before adding passkeys.',
|
|
'settings.openchamber.passkeys.toast.added': 'Passkey added',
|
|
'settings.openchamber.passkeys.toast.setupCanceled': 'Passkey setup canceled',
|
|
'settings.openchamber.passkeys.toast.addFailed': 'Could not add passkey.',
|
|
'settings.openchamber.passkeys.toast.removed': 'Passkey removed',
|
|
'settings.openchamber.passkeys.toast.removeFailed': 'Could not remove passkey.',
|
|
'settings.openchamber.passkeys.toast.clearAuthFailed': 'Could not clear saved authentication.',
|
|
'settings.openchamber.sessionRetention.title': 'Session Retention',
|
|
'settings.openchamber.sessionRetention.tooltip': 'Automatically archive or delete inactive sessions based on last activity. Keeps the 5 most recent sessions.',
|
|
'settings.openchamber.sessionRetention.field.enableAutoCleanupAria': 'Enable auto-cleanup',
|
|
'settings.openchamber.sessionRetention.field.enableAutoCleanup': 'Enable Auto-Cleanup',
|
|
'settings.openchamber.sessionRetention.field.retentionPeriod': 'Retention Period',
|
|
'settings.openchamber.sessionRetention.field.retentionPeriodAria': 'Retention period in days',
|
|
'settings.openchamber.sessionRetention.field.days': 'days',
|
|
'settings.openchamber.sessionRetention.field.whenSessionsExpire': 'When sessions expire',
|
|
'settings.openchamber.sessionRetention.actions.resetRetentionAria': 'Reset retention period',
|
|
'settings.openchamber.sessionRetention.actions.runCleanupNow': 'Run cleanup now',
|
|
'settings.openchamber.sessionRetention.actions.cleaningUp': 'Cleaning up...',
|
|
'settings.openchamber.sessionRetention.action.archive': 'Archive',
|
|
'settings.openchamber.sessionRetention.action.delete': 'Delete',
|
|
'settings.openchamber.sessionRetention.manualCleanup.title': 'Manual Cleanup',
|
|
'settings.openchamber.sessionRetention.manualCleanup.eligibleArchiveNow': 'Eligible for archiving right now: {count}',
|
|
'settings.openchamber.sessionRetention.manualCleanup.eligibleDeleteNow': 'Eligible for deletion right now: {count}',
|
|
'settings.openchamber.sessionRetention.toast.noneEligibleArchive': 'No sessions eligible for archiving',
|
|
'settings.openchamber.sessionRetention.toast.noneEligibleDelete': 'No sessions eligible for deletion',
|
|
'settings.openchamber.sessionRetention.toast.archivedCount': 'Archived {count} session(s)',
|
|
'settings.openchamber.sessionRetention.toast.deletedCount': 'Deleted {count} session(s)',
|
|
'settings.openchamber.sessionRetention.toast.failedArchiveCount': 'Failed to archive {count} session(s)',
|
|
'settings.openchamber.sessionRetention.toast.failedDeleteCount': 'Failed to delete {count} session(s)',
|
|
'settings.openchamber.desktopNetwork.title': 'Desktop Network Access',
|
|
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': 'Start OpenChamber at login',
|
|
'settings.openchamber.desktopNetwork.field.launchAtLogin': 'Start OpenChamber when you log in',
|
|
'settings.openchamber.desktopNetwork.field.launchAtLoginDescription': 'Starts the app in the background without opening a window. Click the Dock icon to open it.',
|
|
'settings.openchamber.desktopNetwork.field.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.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.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.opencodeCli.tooltipPrefix': 'Optional absolute path to the',
|
|
'settings.openchamber.opencodeCli.tooltipSuffix': 'binary.',
|
|
'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode Binary Path',
|
|
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
|
|
'settings.openchamber.opencodeCli.field.showUpdateNotifications': 'Show OpenCode update notifications',
|
|
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': 'Show OpenCode update notifications',
|
|
'settings.openchamber.opencodeCli.actions.browseAria': 'Browse for OpenCode binary path',
|
|
'settings.openchamber.opencodeCli.actions.browse': 'Browse',
|
|
'settings.openchamber.opencodeCli.actions.saveAndReload': 'Save + Reload',
|
|
'settings.openchamber.opencodeCli.actions.restartingOpenCode': 'Restarting OpenCode…',
|
|
'settings.openchamber.opencodeCli.dialog.selectBinaryTitle': 'Select opencode binary',
|
|
'settings.openchamber.opencodeCli.tipPrefix': 'Tip: you can also use',
|
|
'settings.openchamber.opencodeCli.tipMiddle': 'env var, but this setting persists in',
|
|
'settings.mcp.sidebar.title': 'MCP Servers',
|
|
'settings.mcp.sidebar.total': 'Total {count}',
|
|
'settings.mcp.sidebar.actions.refreshStatusAria': 'Refresh MCP status',
|
|
'settings.mcp.sidebar.actions.refreshStatusTitle': 'Refresh MCP status',
|
|
'settings.mcp.sidebar.actions.addServerTitle': 'Add MCP server',
|
|
'settings.mcp.sidebar.actions.deleting': 'Deleting…',
|
|
'settings.mcp.sidebar.empty.title': 'No MCP servers configured',
|
|
'settings.mcp.sidebar.empty.description': 'Use the + button above to add one',
|
|
'settings.mcp.sidebar.group.projectServers': 'Project Servers',
|
|
'settings.mcp.sidebar.group.userServers': 'User Servers',
|
|
'settings.mcp.sidebar.serverType.localTitle': 'Local server',
|
|
'settings.mcp.sidebar.serverType.remoteTitle': 'Remote server',
|
|
'settings.mcp.sidebar.deleteDialog.title': 'Delete MCP Server',
|
|
'settings.mcp.sidebar.deleteDialog.descriptionPrefix': 'Are you sure you want to delete "{name}"? This will remove it from',
|
|
'settings.mcp.sidebar.toast.deleteFailed': 'Failed to delete MCP server',
|
|
'settings.mcp.sidebar.toast.serverDeleted': 'MCP server "{name}" deleted',
|
|
'settings.mcp.sidebar.toast.refreshListIfStale': 'Refresh the MCP list if the UI looks stale.',
|
|
'settings.plugins.sidebar.title': 'Plugins',
|
|
'settings.plugins.sidebar.total': 'Total {count}',
|
|
'settings.plugins.sidebar.actions.addTitle': 'Add plugin',
|
|
'settings.plugins.sidebar.actions.deleting': 'Deleting…',
|
|
'settings.plugins.sidebar.empty.title': 'No plugins configured',
|
|
'settings.plugins.sidebar.empty.description': 'Use the + button above to add one',
|
|
'settings.plugins.sidebar.group.userEntries': 'User config',
|
|
'settings.plugins.sidebar.group.userFiles': 'User plugin file',
|
|
'settings.plugins.sidebar.group.projectEntries': 'Project config',
|
|
'settings.plugins.sidebar.group.projectFiles': 'Project plugin file',
|
|
'settings.plugins.sidebar.kind.npm': 'npm package',
|
|
'settings.plugins.sidebar.kind.path': 'Local path',
|
|
'settings.plugins.sidebar.kind.file': 'Plugin file',
|
|
'settings.plugins.sidebar.deleteDialog.title': 'Delete plugin',
|
|
'settings.plugins.sidebar.deleteDialog.description': 'Are you sure you want to delete "{name}"?',
|
|
'settings.plugins.sidebar.toast.deleted': 'Plugin "{name}" deleted',
|
|
'settings.plugins.sidebar.toast.deleteFailed': 'Failed to delete plugin',
|
|
'settings.plugins.page.empty.select': 'Select a plugin to view or edit',
|
|
'settings.plugins.page.empty.add': 'Or click + to add a new plugin',
|
|
'settings.plugins.page.header.entry': 'Installed plugin',
|
|
'settings.plugins.page.header.file': 'Plugin file',
|
|
'settings.plugins.page.field.spec': 'Spec',
|
|
'settings.plugins.page.field.spec.placeholder': 'npm-package@version or /absolute/path',
|
|
'settings.plugins.page.field.options': 'Options (JSON)',
|
|
'settings.plugins.page.field.options.invalidJson': 'Invalid JSON',
|
|
'settings.plugins.page.field.fileName': 'Filename',
|
|
'settings.plugins.page.field.content': 'Content',
|
|
'settings.plugins.page.field.scope': 'Scope',
|
|
'settings.plugins.scope.user': 'User',
|
|
'settings.plugins.scope.project': 'Project',
|
|
'settings.plugins.page.action.save': 'Save',
|
|
'settings.plugins.page.action.discard': 'Discard',
|
|
'settings.plugins.dialog.add.title': 'Add plugin',
|
|
'settings.plugins.dialog.add.tab.npm': 'From npm',
|
|
'settings.plugins.dialog.add.tab.path': 'From local path',
|
|
'settings.plugins.dialog.add.tab.file': 'New file',
|
|
'settings.plugins.dialog.add.action.submit': 'Add',
|
|
'settings.plugins.dialog.add.action.cancel': 'Cancel',
|
|
'settings.plugins.toast.created': 'Plugin added',
|
|
'settings.plugins.toast.updated': 'Plugin updated',
|
|
'settings.plugins.toast.reloadFailed': 'opencode reload failed — restart required',
|
|
'settings.plugins.validation.fileName': 'Filename must be lowercase, end in .js / .ts / .mjs / .cjs',
|
|
'settings.plugins.validation.specRequired': 'Spec is required',
|
|
'settings.plugins.registry.badge.update.label': '↑ {version}',
|
|
'settings.plugins.registry.badge.update.tooltip': 'Update available: {current} → {latest}',
|
|
'settings.plugins.registry.badge.malformed.tooltip': 'Spec is malformed',
|
|
'settings.plugins.registry.badge.missingPackage.tooltip': 'Package {name} not found on npm',
|
|
'settings.plugins.registry.badge.missingVersion.tooltip': 'Version {version} of {name} not published',
|
|
'settings.plugins.registry.badge.pathMissing.tooltip': 'File not found: {path}',
|
|
'settings.plugins.registry.badge.pathUnreadable.tooltip': 'File not readable: {path}',
|
|
'settings.plugins.registry.badge.network.tooltip': 'Could not reach npm registry',
|
|
'settings.plugins.registry.banner.updateAvailable.title': 'Update available',
|
|
'settings.plugins.registry.banner.updateAvailable.description': '{current} → {latest}',
|
|
'settings.plugins.registry.banner.updateAvailable.action': 'Update to {latest}',
|
|
'settings.plugins.registry.banner.invalid.title': 'Invalid plugin',
|
|
'settings.plugins.registry.banner.invalid.malformed': 'Spec syntax is malformed',
|
|
'settings.plugins.registry.banner.invalid.missingPackage': 'Package not found on npm',
|
|
'settings.plugins.registry.banner.invalid.missingVersion': 'Version not published',
|
|
'settings.plugins.registry.banner.invalid.pathMissing': 'File does not exist',
|
|
'settings.plugins.registry.banner.invalid.pathUnreadable': 'File is not readable',
|
|
'settings.plugins.sidebar.actions.updateToLatest': 'Update to latest',
|
|
'settings.plugins.sidebar.actions.refresh': 'Check for updates',
|
|
'settings.plugins.sidebar.group.updatesAvailable_one': '{count} update available',
|
|
'settings.plugins.sidebar.group.updatesAvailable_other': '{count} updates available',
|
|
'settings.plugins.toast.updatedToLatest': 'Plugin updated to {version}',
|
|
'settings.plugins.toast.refreshing': 'Checking npm for updates…',
|
|
'settings.plugins.toast.refreshFailed': 'Could not check npm registry',
|
|
'settings.openchamber.keyboardShortcuts.title': 'Keyboard Shortcuts',
|
|
'settings.openchamber.keyboardShortcuts.actions.resetAll': 'Reset All',
|
|
'settings.openchamber.keyboardShortcuts.actions.overwrite': 'Overwrite',
|
|
'settings.openchamber.keyboardShortcuts.tooltip': 'Capture a new key combo, save it, and bindings will update immediately.',
|
|
'settings.openchamber.keyboardShortcuts.overwritePrompt': 'This combo is already used by another shortcut. Overwrite and clear that other mapping?',
|
|
'settings.openchamber.keyboardShortcuts.field.pressKeys': 'Press keys...',
|
|
'settings.openchamber.keyboardShortcuts.error.captureFirst': 'Capture a shortcut first.',
|
|
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'This shortcut can conflict with browser defaults. It is still saved.',
|
|
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': 'Go to line (files editor)',
|
|
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': 'Open command palette',
|
|
'settings.openchamber.keyboardShortcuts.action.focus_input.label': 'Focus input',
|
|
'settings.openchamber.keyboardShortcuts.action.open_settings.label': 'Open settings',
|
|
'settings.openchamber.keyboardShortcuts.action.toggle_terminal.label': 'Toggle terminal dock',
|
|
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': 'Toggle terminal expanded',
|
|
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'Toggle sidebar',
|
|
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': 'Toggle right sidebar',
|
|
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Open right sidebar Git tab',
|
|
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': 'Open right sidebar Files tab',
|
|
'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': 'Cycle right sidebar tab',
|
|
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'New session',
|
|
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'New worktree draft',
|
|
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'New Mini Chat window',
|
|
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'Open keyboard shortcuts',
|
|
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': 'Toggle plan context panel',
|
|
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'Toggle services menu',
|
|
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'Cycle services tab',
|
|
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': 'Cycle theme',
|
|
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': 'Cycle agent',
|
|
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'Cycle favorite model forward',
|
|
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_backward.label': 'Cycle favorite model backward',
|
|
'settings.openchamber.keyboardShortcuts.action.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.projects.sidebar.total': 'Total {count}',
|
|
'settings.projects.sidebar.actions.addProject': 'Add project',
|
|
'settings.projects.page.empty.noProjects': 'No projects available.',
|
|
'settings.projects.page.title.default': 'Project Settings',
|
|
'settings.projects.page.section.worktree': 'Worktree',
|
|
'settings.projects.page.field.projectName': 'Project Name',
|
|
'settings.projects.page.field.projectNamePlaceholder': 'Project name',
|
|
'settings.projects.page.field.accentColor': 'Accent Color',
|
|
'settings.projects.page.field.projectIcon': 'Project Icon',
|
|
'settings.projects.page.field.projectIconBackgroundAria': 'Project icon background color',
|
|
'settings.projects.page.field.clearIconBackgroundAria': 'Clear icon background',
|
|
'settings.projects.page.field.clearBackground': 'Clear background',
|
|
'settings.projects.page.field.none': 'None',
|
|
'settings.projects.page.field.preview': 'Preview',
|
|
'settings.projects.page.actions.uploadIcon': 'Upload Icon',
|
|
'settings.projects.page.actions.uploading': 'Uploading...',
|
|
'settings.projects.page.actions.discoverFavicon': 'Discover Favicon',
|
|
'settings.projects.page.actions.discovering': 'Discovering...',
|
|
'settings.projects.page.actions.removeProjectIcon': 'Remove Project Icon',
|
|
'settings.projects.page.actions.removing': 'Removing...',
|
|
'settings.projects.page.actions.undoRemove': 'Undo Remove',
|
|
'settings.projects.page.toast.uploadIconFailed': 'Failed to upload project icon',
|
|
'settings.projects.page.toast.iconUpdated': 'Project icon updated',
|
|
'settings.projects.page.toast.removeIconFailed': 'Failed to remove project icon',
|
|
'settings.projects.page.toast.iconRemoved': 'Project icon removed',
|
|
'settings.projects.page.toast.discoverIconFailed': 'Failed to discover project icon',
|
|
'settings.projects.page.toast.customIconAlreadySet': 'Custom icon already set for this project',
|
|
'settings.projects.page.toast.iconDiscovered': 'Project icon discovered',
|
|
'settings.usage.sidebar.title': 'Usage',
|
|
'settings.usage.sidebar.total': 'Total {count}',
|
|
'settings.usage.sidebar.actions.toggleAutoRefreshAria': 'Toggle auto refresh',
|
|
'settings.usage.sidebar.actions.refreshAria': 'Refresh usage',
|
|
'settings.usage.sidebar.actions.refreshTitle': 'Refresh usage',
|
|
'settings.usage.sidebar.tooltip.autoRefresh': 'Auto-refresh usage data at set interval',
|
|
'settings.usage.sidebar.field.intervalPlaceholder': 'Interval',
|
|
'settings.usage.sidebar.field.display': 'Display',
|
|
'settings.usage.sidebar.field.displayModePlaceholder': 'Display mode',
|
|
'settings.usage.sidebar.field.displayModeUsage': 'Usage',
|
|
'settings.usage.sidebar.field.displayModeRemaining': 'Quota remaining',
|
|
'settings.usage.sidebar.field.showPredictions': 'Show predictions',
|
|
'settings.usage.sidebar.status.notSet': 'Not set',
|
|
'settings.usage.page.empty.selectProvider': 'Select a provider to view usage details.',
|
|
'settings.usage.page.header.providerUsage': '{provider} Usage',
|
|
'settings.usage.page.header.refreshing': 'Refreshing usage...',
|
|
'settings.usage.page.header.lastUpdated': 'Last updated: {time}',
|
|
'settings.usage.page.options.showInHeaderAria': 'Show in header menu',
|
|
'settings.usage.page.options.showInHeader': 'Show in Header Menu',
|
|
'settings.usage.page.options.showInHeaderTooltip': 'When enabled, this provider\'s usage will be visible in the quick access dropdown menu in the app header.',
|
|
'settings.usage.page.state.noData': 'No usage data available yet.',
|
|
'settings.usage.page.state.refreshFailedTitle': 'Failed to refresh usage data',
|
|
'settings.usage.page.state.providerNotConfiguredTitle': 'Provider not configured',
|
|
'settings.usage.page.state.providerNotConfiguredDescription': 'Add credentials in the Providers tab to enable usage tracking.',
|
|
'settings.usage.page.section.modelQuotas': 'Model Quotas',
|
|
'settings.usage.page.section.otherModels': 'Other Models',
|
|
'settings.usage.page.state.noQuotaWindowsTitle': 'No quota windows reported',
|
|
'settings.usage.page.state.noQuotaWindowsDescription': 'This provider does not currently report any rate limits or usage quotas.',
|
|
'settings.usage.pace.status.onTrack': 'On track',
|
|
'settings.usage.pace.status.slightlyFast': 'Slightly fast',
|
|
'settings.usage.pace.status.tooFast': 'Too fast',
|
|
'settings.usage.pace.status.usedUp': 'Used up',
|
|
'settings.usage.pace.predictionTooltip': 'Predicted usage at window end based on current pace: {prediction}',
|
|
'settings.usage.pace.wait': 'Wait {duration}',
|
|
'settings.usage.pace.prediction': 'Pred: {prediction}',
|
|
'settings.usage.pace.rate': 'Pace: {rate}',
|
|
'settings.usage.pace.waitSeparator': ' · Wait ',
|
|
'settings.usage.pace.predictionLabel': 'Pred: ',
|
|
'settings.remoteInstances.page.title': 'Remote Instance',
|
|
'settings.remoteInstances.page.description': 'Connect to another machine over SSH and open OpenChamber there.',
|
|
'settings.remoteInstances.page.empty.selectInstance': 'Select an instance to view and edit its settings.',
|
|
'settings.remoteInstances.page.empty.noExtraForwards': 'No extra port forwards configured.',
|
|
'settings.remoteInstances.page.section.actions': 'Actions',
|
|
'settings.remoteInstances.page.section.actionsDescription': 'Connect, reconnect, view logs, or remove this connection.',
|
|
'settings.remoteInstances.page.section.remoteServer': 'OpenChamber on the remote machine',
|
|
'settings.remoteInstances.page.section.remoteServerDescription': 'Choose how OpenChamber should run after SSH connects.',
|
|
'settings.remoteInstances.page.section.mainTunnel': 'Local access',
|
|
'settings.remoteInstances.page.section.mainTunnelDescription': 'Choose the local address used to open this remote OpenChamber server.',
|
|
'settings.remoteInstances.page.section.authentication': 'Authentication',
|
|
'settings.remoteInstances.page.section.authenticationDescription': 'Optional credentials for SSH and the remote OpenChamber UI.',
|
|
'settings.remoteInstances.page.section.portForwards': 'Port Forwards',
|
|
'settings.remoteInstances.page.section.portForwardsDescription': 'Optional extra ports to make available through this SSH connection.',
|
|
'settings.remoteInstances.page.field.sshCommand': 'SSH command',
|
|
'settings.remoteInstances.page.field.sshCommandPlaceholder': 'ssh user@host',
|
|
'settings.remoteInstances.page.field.nickname': 'Nickname',
|
|
'settings.remoteInstances.page.field.nicknamePlaceholder': 'Work laptop',
|
|
'settings.remoteInstances.page.field.connectionTimeoutSeconds': 'Connection timeout (seconds)',
|
|
'settings.remoteInstances.page.field.installMethod': 'Install method',
|
|
'settings.remoteInstances.page.field.installMethodHint': 'How OpenChamber should be placed on the remote machine when this app starts it for you.',
|
|
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'Select install method',
|
|
'settings.remoteInstances.page.field.installMethodDownloadRelease': 'Download release',
|
|
'settings.remoteInstances.page.field.installMethodUploadBundle': 'Upload bundle',
|
|
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'Select bind host',
|
|
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH password (optional)',
|
|
'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'Enter SSH password',
|
|
'settings.remoteInstances.page.field.uiPasswordOptional': 'UI password (optional)',
|
|
'settings.remoteInstances.page.field.uiPasswordPlaceholder': 'Enter UI password',
|
|
'settings.remoteInstances.page.field.forwardTypeHint': 'Choose what kind of port access this SSH connection should provide.',
|
|
'settings.remoteInstances.page.field.typePlaceholder': 'Type',
|
|
'settings.remoteInstances.page.forwardType.local': 'Local (-L)',
|
|
'settings.remoteInstances.page.forwardType.remote': 'Remote (-R)',
|
|
'settings.remoteInstances.page.forwardType.dynamic': 'Dynamic (-D)',
|
|
'settings.remoteInstances.page.forwardTypeDescription.local': 'Open a local port that connects to something on the remote machine.',
|
|
'settings.remoteInstances.page.forwardTypeDescription.remote': 'Open a port on the remote machine that connects back to your computer.',
|
|
'settings.remoteInstances.page.forwardTypeDescription.dynamic': 'Open a local SOCKS proxy through the SSH connection.',
|
|
'settings.remoteInstances.page.actions.create': 'Create',
|
|
'settings.remoteInstances.page.actions.cancel': 'Cancel',
|
|
'settings.remoteInstances.page.actions.connecting': 'Connecting...',
|
|
'settings.remoteInstances.page.actions.reconnecting': 'Reconnecting...',
|
|
'settings.remoteInstances.page.actions.reconnectNow': 'Reconnect now',
|
|
'settings.remoteInstances.page.actions.logs': 'SSH Logs',
|
|
'settings.remoteInstances.page.actions.pickRandomPort': 'Pick random port',
|
|
'settings.remoteInstances.page.actions.enableForwardAria': 'Enable forward',
|
|
'settings.remoteInstances.page.actions.openLocal': 'Open local',
|
|
'settings.remoteInstances.page.actions.addForward': 'Add forward',
|
|
'settings.remoteInstances.page.import.sectionTitle': 'Saved SSH hosts',
|
|
'settings.remoteInstances.page.import.loading': 'Loading SSH hosts...',
|
|
'settings.remoteInstances.page.import.noneFound': 'No SSH hosts found.',
|
|
'settings.remoteInstances.page.import.noneAvailable': 'No SSH hosts available to import.',
|
|
'settings.remoteInstances.page.import.patternSuffix': '(pattern)',
|
|
'settings.remoteInstances.page.status.currentLocalUrl': 'Current local URL:',
|
|
'settings.remoteInstances.page.status.reconnectStale': 'Reconnection looks stuck. You can retry now.',
|
|
'settings.remoteInstances.page.logsDialog.title': 'SSH Logs',
|
|
'settings.remoteInstances.page.logsDialog.loading': 'Loading logs...',
|
|
'settings.remoteInstances.page.logsDialog.empty': 'No SSH logs yet.',
|
|
'settings.remoteInstances.page.patternDialog.title': 'Choose an SSH destination',
|
|
'settings.remoteInstances.page.patternDialog.destinationPlaceholder': 'user@host',
|
|
'settings.remoteInstances.page.phase.resolvingConfiguration': 'Resolving configuration',
|
|
'settings.remoteInstances.page.phase.checkingAuth': 'Checking authentication',
|
|
'settings.remoteInstances.page.phase.establishingSsh': 'Establishing SSH connection',
|
|
'settings.remoteInstances.page.phase.probingRemote': 'Checking remote machine',
|
|
'settings.remoteInstances.page.phase.installingOpenChamber': 'Installing OpenChamber',
|
|
'settings.remoteInstances.page.phase.updatingOpenChamber': 'Updating OpenChamber',
|
|
'settings.remoteInstances.page.phase.detectingServer': 'Detecting server',
|
|
'settings.remoteInstances.page.phase.startingServer': 'Starting server',
|
|
'settings.remoteInstances.page.phase.forwardingPorts': 'Forwarding ports',
|
|
'settings.remoteInstances.page.phase.reconnecting': 'Reconnecting',
|
|
'settings.remoteInstances.page.confirm.storeSshPasswordPlaintext': 'Store SSH password in plaintext on disk?',
|
|
'settings.remoteInstances.page.confirm.storeUiPasswordPlaintext': 'Store UI password in plaintext on disk?',
|
|
'settings.remoteInstances.page.confirm.removeInstance': 'Remove this remote instance?',
|
|
'settings.remoteInstances.page.toast.sshCommandRequired': 'SSH command is required',
|
|
'settings.remoteInstances.page.toast.saveFailed': 'Failed to save instance',
|
|
'settings.remoteInstances.page.toast.instanceSaved': 'Instance saved',
|
|
'settings.remoteInstances.page.toast.instanceCreated': 'Instance created',
|
|
'settings.remoteInstances.page.toast.destinationRequired': 'Destination is required',
|
|
'settings.remoteInstances.page.toast.noLogsToCopy': 'No logs to copy',
|
|
'settings.remoteInstances.page.toast.logsCopied': 'Logs copied',
|
|
'settings.remoteInstances.page.toast.logsCleared': 'Logs cleared',
|
|
'settings.remoteInstances.page.toast.clearLogsFailed': 'Failed to clear logs',
|
|
'settings.remoteInstances.page.toast.instanceUrlUnavailable': 'Instance URL is unavailable',
|
|
'settings.remoteInstances.page.toast.connectFailed': 'Failed to connect instance',
|
|
'settings.remoteInstances.page.toast.cancelConnectionFailed': 'Failed to cancel connection',
|
|
'settings.remoteInstances.page.toast.disconnectFailed': 'Failed to disconnect instance',
|
|
'settings.remoteInstances.page.toast.retryFailed': 'Failed to retry connection',
|
|
'settings.remoteInstances.page.toast.instanceRemoved': 'Instance removed',
|
|
'settings.remoteInstances.page.toast.removeInstanceFailed': 'Failed to remove instance',
|
|
'settings.openchamber.worktrees.state.selectProject': 'Select a project to manage worktrees.',
|
|
'settings.openchamber.worktrees.state.gitOnly': 'Worktree settings are only available for Git repositories.',
|
|
'settings.openchamber.worktrees.setup.title': 'Setup commands',
|
|
'settings.openchamber.worktrees.setup.tooltipPrefix': 'Run automatically inside the new worktree directory when a worktree is created. Use',
|
|
'settings.openchamber.worktrees.setup.tooltipSuffix': 'for the project root.',
|
|
'settings.openchamber.worktrees.setup.loading': 'Loading...',
|
|
'settings.openchamber.worktrees.setup.commandPlaceholder': 'e.g., bun install',
|
|
'settings.openchamber.worktrees.setup.removeCommandAria': 'Remove command',
|
|
'settings.openchamber.worktrees.setup.addCommand': 'Add command',
|
|
'settings.openchamber.worktrees.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.list.title': 'Existing worktrees',
|
|
'settings.openchamber.worktrees.list.tooltip': 'Worktrees live outside the repo (OpenCode-managed). Deleting a worktree also removes linked sessions.',
|
|
'settings.openchamber.worktrees.list.loading': 'Loading worktrees...',
|
|
'settings.openchamber.worktrees.list.empty': 'No worktrees found for this project',
|
|
'settings.openchamber.worktrees.list.detachedHead': 'Detached HEAD',
|
|
'settings.openchamber.worktrees.list.deleteWorktreeAria': 'Delete worktree {name}',
|
|
'settings.agents.modelSelector.title': 'Select model',
|
|
'settings.agents.modelSelector.searchPlaceholder': 'Search models',
|
|
'settings.agents.modelSelector.selectPlaceholder': 'Select model...',
|
|
'settings.agents.modelSelector.notSelected': 'Not selected',
|
|
'settings.agents.modelSelector.noModelOptional': 'No model (optional)',
|
|
'settings.agents.modelSelector.section.favorites': 'Favorites',
|
|
'settings.agents.modelSelector.section.recents': 'Recents',
|
|
'settings.agents.modelSelector.section.recent': 'Recent',
|
|
'settings.agents.modelSelector.badge.current': 'Current',
|
|
'settings.agents.modelSelector.actions.favorite': 'Favorite',
|
|
'settings.agents.modelSelector.actions.unfavorite': 'Unfavorite',
|
|
'settings.agents.modelSelector.actions.addToFavorites': 'Add to favorites',
|
|
'settings.agents.modelSelector.actions.removeFromFavorites': 'Remove from favorites',
|
|
'settings.agents.modelSelector.state.noModelsFound': 'No models found',
|
|
'settings.agents.modelSelector.keyboardHints': '↑↓ navigate • Enter select • Esc close',
|
|
'settings.providers.sidebar.title': 'Providers',
|
|
'settings.providers.sidebar.total': 'Total {count}',
|
|
'settings.providers.sidebar.actions.connectProviderAria': 'Connect provider',
|
|
'settings.providers.sidebar.actions.connectProviderTitle': 'Connect provider',
|
|
'settings.providers.sidebar.empty.title': 'No providers found',
|
|
'settings.providers.sidebar.empty.description': 'Check your OpenCode configuration',
|
|
'settings.providers.sidebar.section.userProviders': 'User Providers',
|
|
'settings.providers.sidebar.section.projectProviders': 'Project Providers',
|
|
'settings.providers.page.state.loading': 'Loading...',
|
|
'settings.providers.page.state.unableToLoadProviderList': 'Unable to load provider list',
|
|
'settings.providers.page.empty.noProvidersDetected': 'No providers detected',
|
|
'settings.providers.page.empty.checkOpenCodeConfiguration': 'Check your OpenCode configuration',
|
|
'settings.providers.page.empty.selectProviderFromSidebar': 'Select a provider from the sidebar',
|
|
'settings.providers.page.empty.reviewDetailsAndConfigureAuth': 'Review details and configure auth',
|
|
'settings.providers.page.connect.title': 'Connect Provider',
|
|
'settings.providers.page.connect.selectProviderTitle': 'Select Provider',
|
|
'settings.providers.page.connect.providerField': 'Provider',
|
|
'settings.providers.page.connect.selectProviderPlaceholder': 'Select provider',
|
|
'settings.providers.page.connect.searchProvidersPlaceholder': 'Search...',
|
|
'settings.providers.page.connect.noProvidersFound': 'No providers found',
|
|
'settings.providers.page.connect.allProvidersConnected': 'All providers connected.',
|
|
'settings.providers.page.auth.title': 'Authentication',
|
|
'settings.providers.page.auth.loadingMethods': 'Loading authentication methods...',
|
|
'settings.providers.page.auth.apiKeyLabel': 'API Key',
|
|
'settings.providers.page.auth.apiKeyTooltip': 'Keys are sent directly to OpenCode and never stored by OpenChamber.',
|
|
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
|
|
'settings.providers.page.auth.oauthMethodFallback': 'OAuth method {index}',
|
|
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': 'Paste authorization code',
|
|
'settings.providers.page.auth.connected': 'Connected',
|
|
'settings.providers.page.auth.useReconnectHint': '· Use Reconnect to update credentials',
|
|
'settings.providers.page.connectionDetails.title': 'Connection Details',
|
|
'settings.providers.page.connectionDetails.configuredIn': 'Configured in:',
|
|
'settings.providers.page.connectionDetails.noActiveSource': 'No active configuration source',
|
|
'settings.providers.page.connectionDetails.source.authCredentials': 'auth credentials',
|
|
'settings.providers.page.connectionDetails.source.userConfig': 'user config',
|
|
'settings.providers.page.connectionDetails.source.projectConfig': 'project config',
|
|
'settings.providers.page.connectionDetails.source.customConfig': 'custom config',
|
|
'settings.providers.page.models.title': 'Available Models',
|
|
'settings.providers.page.models.filterPlaceholder': 'Filter models...',
|
|
'settings.providers.page.models.noModelsMatchFilter': 'No models match this filter.',
|
|
'settings.providers.page.models.capability.toolCalling': 'Tool calling',
|
|
'settings.providers.page.models.capability.reasoning': 'Reasoning',
|
|
'settings.providers.page.models.capability.imageInput': 'Image input',
|
|
'settings.providers.page.models.tokenBadge.context': 'ctx',
|
|
'settings.providers.page.models.tokenBadge.output': 'out',
|
|
'settings.providers.page.models.actions.hideModelFromSelectors': 'Hide model from selectors',
|
|
'settings.providers.page.models.actions.showModelInSelectors': 'Show model in selectors',
|
|
'settings.providers.page.models.actions.hideModel': 'Hide model',
|
|
'settings.providers.page.models.actions.showModel': 'Show model',
|
|
'settings.providers.page.actions.saving': 'Saving...',
|
|
'settings.providers.page.actions.saveKey': 'Save Key',
|
|
'settings.providers.page.actions.connect': 'Connect',
|
|
'settings.providers.page.actions.copyCode': 'Copy Code',
|
|
'settings.providers.page.actions.open': 'Open',
|
|
'settings.providers.page.actions.copy': 'Copy',
|
|
'settings.providers.page.actions.complete': 'Complete',
|
|
'settings.providers.page.actions.hide': 'Hide',
|
|
'settings.providers.page.actions.reconnect': 'Reconnect',
|
|
'settings.providers.page.actions.disconnecting': 'Disconnecting...',
|
|
'settings.providers.page.actions.disconnect': 'Disconnect',
|
|
'settings.providers.page.actions.hideAll': 'Hide all',
|
|
'settings.providers.page.actions.showAll': 'Show all',
|
|
'settings.providers.page.toast.authMethodsLoadFailed': 'Failed to load provider authentication methods',
|
|
'settings.providers.page.toast.providerSourcesLoadFailed': 'Failed to load provider sources',
|
|
'settings.providers.page.toast.apiKeyRequired': 'API key is required',
|
|
'settings.providers.page.toast.apiKeySaveFailed': 'Failed to save API key',
|
|
'settings.providers.page.toast.apiKeySaved': 'API key saved',
|
|
'settings.providers.page.toast.oauthStartFailed': 'Failed to start OAuth flow',
|
|
'settings.providers.page.toast.oauthDetailsMissing': 'No OAuth details returned',
|
|
'settings.providers.page.toast.completeOAuthInBrowser': 'Complete the OAuth flow in your browser',
|
|
'settings.providers.page.toast.oauthCompleteFailed': 'Failed to complete OAuth flow',
|
|
'settings.providers.page.toast.oauthCompleted': 'OAuth connection completed',
|
|
'settings.providers.page.toast.oauthLinkCopied': 'OAuth link copied',
|
|
'settings.providers.page.toast.oauthLinkCopyFailed': 'Failed to copy OAuth link',
|
|
'settings.providers.page.toast.deviceCodeCopied': 'Device code copied',
|
|
'settings.providers.page.toast.deviceCodeCopyFailed': 'Failed to copy device code',
|
|
'settings.providers.page.toast.providerDisconnected': 'Provider disconnected',
|
|
'settings.providers.page.toast.providerDisconnectFailed': 'Failed to disconnect provider',
|
|
'settings.mcp.page.empty.selectServer': 'Select an MCP server from the sidebar',
|
|
'settings.mcp.page.empty.addNewOne': 'or add a new one',
|
|
'settings.mcp.page.header.newServer': 'New MCP Server',
|
|
'settings.mcp.page.header.configureNewServer': 'Configure a new MCP server',
|
|
'settings.mcp.page.header.transport': '{type} transport',
|
|
'settings.mcp.page.transport.local': 'Local · stdio',
|
|
'settings.mcp.page.transport.remote': 'Remote · SSE',
|
|
'settings.mcp.page.status.label.connected': 'Connected',
|
|
'settings.mcp.page.status.label.failed': 'Failed',
|
|
'settings.mcp.page.status.label.needsAuth': 'Needs auth',
|
|
'settings.mcp.page.status.label.needsRegistration': 'Needs registration',
|
|
'settings.mcp.page.status.description.connected': 'Connected and ready for OpenCode to discover tools and resources.',
|
|
'settings.mcp.page.status.description.failedDefault': 'OpenCode could not reach this MCP server.',
|
|
'settings.mcp.page.status.description.needsAuth': 'This remote MCP server requires authorization before it can connect.',
|
|
'settings.mcp.page.status.description.needsClientRegistrationDefault': 'This remote MCP server requires client registration before authorization can complete.',
|
|
'settings.mcp.page.status.description.disabled': 'This MCP server is disabled in configuration.',
|
|
'settings.mcp.page.status.description.default': 'Refresh or test the connection to load live runtime status.',
|
|
'settings.mcp.page.status.runtimeStatus': 'Runtime Status',
|
|
'settings.mcp.page.status.projectScopedTo': 'Project-scoped to {directory}',
|
|
'settings.mcp.page.status.userScoped': 'User-scoped configuration',
|
|
'settings.mcp.page.status.activeProject': 'the active project',
|
|
'settings.mcp.page.actions.connect': 'Connect',
|
|
'settings.mcp.page.actions.disconnect': 'Disconnect',
|
|
'settings.mcp.page.actions.authorize': 'Authorize',
|
|
'settings.mcp.page.actions.reauthorize': 'Reauthorize',
|
|
'settings.mcp.page.actions.clearAuth': 'Clear Auth',
|
|
'settings.mcp.page.actions.test': 'Test',
|
|
'settings.mcp.page.actions.testConnection': 'Test Connection',
|
|
'settings.mcp.page.actions.working': 'Working...',
|
|
'settings.mcp.page.actions.starting': 'Starting...',
|
|
'settings.mcp.page.actions.clearing': 'Clearing...',
|
|
'settings.mcp.page.actions.testing': 'Testing...',
|
|
'settings.mcp.page.actions.completing': 'Completing...',
|
|
'settings.mcp.page.actions.completeAuthorization': 'Complete Authorization',
|
|
'settings.mcp.page.actions.openInBrowser': 'Open in Browser',
|
|
'settings.mcp.page.actions.copyLink': 'Copy Link',
|
|
'settings.mcp.page.actions.deleting': 'Deleting…',
|
|
'settings.mcp.page.auth.authorizationUrl': 'Authorization URL',
|
|
'settings.mcp.page.auth.manualFallbackTitle': 'Manual Authorization Fallback',
|
|
'settings.mcp.page.auth.manualFallbackDescription': 'If the browser returns to a different machine or shows a callback URL with a code, paste that full URL or the raw code here.',
|
|
'settings.mcp.page.auth.callbackInputPlaceholder': 'Paste the callback URL or authorization code',
|
|
'settings.mcp.page.auth.waitingForOpenCode': 'Waiting for OpenCode to observe the completed browser authorization flow...',
|
|
'settings.mcp.page.server.title': 'Server',
|
|
'settings.mcp.page.server.name': 'Server Name',
|
|
'settings.mcp.page.server.namePlaceholder': 'my-mcp-server',
|
|
'settings.mcp.page.server.importJson': 'Import from JSON Snippet',
|
|
'settings.mcp.page.server.importJsonTitle': 'Import a full MCP server configuration from a JSON snippet',
|
|
'settings.mcp.page.server.enable': 'Enable Server',
|
|
'settings.mcp.page.server.enableAria': 'Enable server',
|
|
'settings.mcp.page.server.transportMode': 'Transport Mode',
|
|
'settings.mcp.page.connection.command': 'Command',
|
|
'settings.mcp.page.connection.serverUrl': 'Server URL',
|
|
'settings.mcp.page.connection.serverUrlPlaceholder': 'https://mcp.example.com/mcp',
|
|
'settings.mcp.page.connection.pasteCommand': 'Paste Command',
|
|
'settings.mcp.page.connection.pasteCommandTitle': 'Paste a local command from clipboard and auto-split',
|
|
'settings.mcp.page.connection.previewArgs': 'Preview ({count} args)',
|
|
'settings.mcp.page.advanced.title': 'Advanced Remote Options',
|
|
'settings.mcp.page.advanced.configure': 'Configure advanced options',
|
|
'settings.mcp.page.advanced.autoDetect': 'Auto-detect',
|
|
'settings.mcp.page.advanced.custom': 'Custom',
|
|
'settings.mcp.page.advanced.headers': 'headers',
|
|
'settings.mcp.page.advanced.timeoutMs': 'Timeout (ms)',
|
|
'settings.mcp.page.advanced.timeoutHint': 'Leave blank to use OpenCode\'s default MCP timeout.',
|
|
'settings.mcp.page.advanced.requestHeaders': 'Request Headers',
|
|
'settings.mcp.page.advanced.headerNamePlaceholder': 'Header-Name',
|
|
'settings.mcp.page.advanced.pasteHeaders': 'Paste headers',
|
|
'settings.mcp.page.advanced.pasteHeadersTitle': 'Paste KEY=VALUE header lines from clipboard',
|
|
'settings.mcp.page.advanced.oauthAutoDetection': 'Enable OAuth auto-detection',
|
|
'settings.mcp.page.advanced.oauthAutoDetectionAria': 'Enable OAuth auto-detection',
|
|
'settings.mcp.page.advanced.oauthClientIdPlaceholder': 'OAuth client ID',
|
|
'settings.mcp.page.advanced.oauthClientSecretPlaceholder': 'OAuth client secret',
|
|
'settings.mcp.page.advanced.oauthScopesPlaceholder': 'Scopes (space-delimited)',
|
|
'settings.mcp.page.advanced.oauthRedirectUriPlaceholder': 'Redirect URI',
|
|
'settings.mcp.page.advanced.oauthHint': 'Leave these fields blank to let OpenCode infer OAuth settings from the MCP server.',
|
|
'settings.mcp.page.advanced.oauthCallbackHint': 'Browser-based MCP authorization uses this callback URL when the redirect URI is blank:',
|
|
'settings.mcp.page.env.title': 'Environment Variables',
|
|
'settings.mcp.page.env.key': 'Key',
|
|
'settings.mcp.page.env.value': 'Value',
|
|
'settings.mcp.page.env.valuePlaceholder': 'value',
|
|
'settings.mcp.page.env.hide': 'Hide',
|
|
'settings.mcp.page.env.show': 'Show',
|
|
'settings.mcp.page.env.addVariable': 'Add variable',
|
|
'settings.mcp.page.env.addEnvironmentVariable': 'Add environment variable',
|
|
'settings.mcp.page.env.keyPlaceholder': 'API_KEY',
|
|
'settings.mcp.page.env.pasteEnv': 'Paste .env',
|
|
'settings.mcp.page.env.pasteEnvTitle': 'Paste KEY=VALUE lines from clipboard',
|
|
'settings.mcp.page.env.plainTextWarning': '⚠ Values are stored as plain text in opencode.json',
|
|
'settings.mcp.page.env.removeVariableAria': 'Remove variable',
|
|
'settings.mcp.page.importDialog.title': 'Import JSON Snippet',
|
|
'settings.mcp.page.importDialog.description': 'Paste a full MCP JSON snippet from docs or another config file. The parsed values will populate this form for review before saving.',
|
|
'settings.mcp.page.importDialog.pasteFromClipboard': 'Paste JSON from Clipboard',
|
|
'settings.mcp.page.deleteDialog.title': 'Delete "{name}"?',
|
|
'settings.mcp.page.deleteDialog.descriptionPrefix': 'This removes the server from',
|
|
'settings.mcp.page.deleteDialog.descriptionSuffix': 'OpenCode will need to reload.',
|
|
'settings.mcp.page.toast.clipboardReadFailed': 'Cannot read clipboard',
|
|
'settings.mcp.page.toast.configImported': 'MCP configuration imported',
|
|
'settings.mcp.page.toast.nameRequired': 'Name is required',
|
|
'settings.mcp.page.toast.serverNameExists': 'A server with this name already exists',
|
|
'settings.mcp.page.toast.localCommandRequired': 'Command cannot be empty for a local server',
|
|
'settings.mcp.page.toast.remoteUrlRequired': 'URL cannot be empty for a remote server',
|
|
'settings.mcp.page.toast.serverCreatedReloadFailed': 'MCP server created, but OpenCode reload failed.',
|
|
'settings.mcp.page.toast.savedReloadFailed': 'Saved, but OpenCode reload failed.',
|
|
'settings.mcp.page.toast.retryRefreshHint': 'Retry refresh or reopen Settings before authorizing this server.',
|
|
'settings.mcp.page.toast.serverCreatedReloading': 'MCP server created. OpenCode reloading…',
|
|
'settings.mcp.page.toast.savedReloading': 'Saved. OpenCode reloading…',
|
|
'settings.mcp.page.toast.saveFailed': 'Failed to save',
|
|
'settings.mcp.page.toast.unexpectedError': 'An error occurred',
|
|
'settings.mcp.page.toast.serverDeletedReloadFailed': '"{name}" deleted, but OpenCode reload failed',
|
|
'settings.mcp.page.toast.refreshListIfStale': 'Refresh the MCP list if the UI looks stale.',
|
|
'settings.mcp.page.toast.serverDeleted': '"{name}" deleted',
|
|
'settings.mcp.page.toast.deleteFailed': 'Failed to delete',
|
|
'settings.mcp.page.toast.disconnected': 'Disconnected',
|
|
'settings.mcp.page.toast.connected': 'Connected',
|
|
'settings.mcp.page.toast.connectionNeedsAuthorization': 'Connection requires authorization',
|
|
'settings.mcp.page.toast.connectionNeedsClientRegistration': 'Connection requires client registration',
|
|
'settings.mcp.page.toast.connectionFailed': 'Connection failed',
|
|
'settings.mcp.page.toast.connectionAttemptFinished': 'Connection attempt finished. Refresh status for details.',
|
|
'settings.mcp.page.toast.createServerBeforeLiveActions': 'Create the server before running live actions',
|
|
'settings.mcp.page.toast.saveBeforeLiveActions': 'Save changes before running live actions',
|
|
'settings.mcp.page.toast.refreshStatusFailed': 'Failed to refresh MCP status',
|
|
'settings.mcp.page.toast.oauthRedirectUrlBuildFailed': 'Unable to build MCP OAuth redirect URL',
|
|
'settings.mcp.page.toast.oauthBrowserCallbackSaveFailed': 'Failed to save the browser callback URL for MCP authorization',
|
|
'settings.mcp.page.toast.openCodeReloadFailedAfterCallbackSave': 'OpenCode reload failed after saving the browser callback URL',
|
|
'settings.mcp.page.toast.completeAuthorizationInBrowserWithPaste': 'Complete the MCP authorization flow in your browser, then paste the returned code or callback URL here',
|
|
'settings.mcp.page.toast.completeAuthorizationInBrowser': 'Complete the MCP authorization flow in your browser',
|
|
'settings.mcp.page.toast.openAuthorizationUrlFailed': 'Could not open the authorization URL automatically',
|
|
'settings.mcp.page.toast.authorizationStartFailed': 'Failed to start authorization',
|
|
'settings.mcp.page.toast.authSessionExpired': 'Authorization session expired or was cleared during reload. Click Authorize again.',
|
|
'settings.mcp.page.toast.savedAuthorizationRemoved': 'Saved MCP authorization was removed',
|
|
'settings.mcp.page.toast.clearAuthorizationFailed': 'Failed to clear authorization',
|
|
'settings.mcp.page.toast.authorizationUrlCopied': 'Authorization URL copied',
|
|
'settings.mcp.page.toast.authorizationUrlCopyFailed': 'Failed to copy authorization URL',
|
|
'settings.mcp.page.toast.pasteCallbackOrCodeFirst': 'Paste the callback URL or authorization code first',
|
|
'settings.mcp.page.toast.missingServerDetails': 'Missing MCP server details. Select the server again or paste the full callback URL.',
|
|
'settings.mcp.page.toast.authorizationCompleted': 'MCP authorization completed',
|
|
'settings.mcp.page.toast.authorizationCompletedFor': 'MCP authorization completed for {name}',
|
|
'settings.mcp.page.toast.authorizationCompleteFailed': 'Failed to complete MCP authorization',
|
|
'settings.mcp.page.toast.enableServerBeforeTest': 'Enable this server before testing the connection',
|
|
'settings.mcp.page.toast.connectionTestSucceeded': 'Connection test succeeded',
|
|
'settings.mcp.page.toast.connectionTestFailed': 'Connection test failed',
|
|
'settings.mcp.page.toast.connectionTestFinished': 'Connection test finished. Refresh status for details.',
|
|
'settings.mcp.page.toast.authorizationFailed': 'Authorization failed',
|
|
'settings.mcp.page.toast.authorizationStillInProgress': 'Authorization is still in progress in your browser. Paste the callback URL or code if needed.',
|
|
'settings.mcp.page.toast.noKeyValuePairsFound': 'No KEY=VALUE pairs found in clipboard',
|
|
'settings.mcp.page.toast.importedVariablesCount': 'Imported variables: {count}',
|
|
'settings.mcp.page.toast.pastedArgumentsCount': 'Pasted arguments: {count}',
|
|
'settings.shared.projectSelector.fallbackProject': 'Project',
|
|
'settings.shared.projectSelector.switchProjectAria': 'Switch project',
|
|
'settings.shared.projectSelector.switchProjectTitle': 'Switch project',
|
|
'settings.openchamber.defaults.title': 'Session Defaults',
|
|
'settings.openchamber.defaults.summaryPrefix': 'New sessions will start with:',
|
|
'settings.openchamber.defaults.summaryOpenCodeDefault': 'OpenCode agent default',
|
|
'settings.openchamber.defaults.field.defaultModel': 'Default Model',
|
|
'settings.openchamber.defaults.field.defaultThinking': 'Default Thinking',
|
|
'settings.openchamber.defaults.field.thinkingPlaceholder': 'Thinking',
|
|
'settings.openchamber.defaults.field.defaultAgent': 'Default Agent',
|
|
'settings.openchamber.defaults.field.showDeletionDialogAria': 'Show deletion dialog',
|
|
'settings.openchamber.defaults.field.showDeletionDialog': 'Show Deletion Dialog',
|
|
'settings.openchamber.defaults.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.field.openFilesPreviewAria': 'Open files in preview mode',
|
|
'settings.openchamber.defaults.field.openFilesPreview': 'Open files in preview mode',
|
|
'settings.openchamber.defaults.option.default': 'Default',
|
|
'settings.openchamber.defaults.option.defaultLowercase': 'default',
|
|
'settings.openchamber.git.title': 'Git Preferences',
|
|
'settings.openchamber.git.changesViewTitle': 'Changes View',
|
|
'settings.openchamber.git.changesViewAria': 'Git changes view mode',
|
|
'settings.openchamber.git.option.flatList': 'Flat List',
|
|
'settings.openchamber.git.option.treeView': 'Tree View',
|
|
'settings.openchamber.git.optionAria': 'Git changes view mode: {option}',
|
|
'settings.openchamber.git.enableGitmojiAria': 'Enable Gitmoji picker',
|
|
'settings.openchamber.git.enableGitmoji': 'Enable Gitmoji Picker',
|
|
'settings.openchamber.git.showGitignoredAria': 'Display gitignored files',
|
|
'settings.openchamber.git.showGitignored': 'Display Gitignored Files',
|
|
'settings.github.page.tooltip.connectAccount': 'Connect a GitHub account for in-app PR and issue workflows.',
|
|
'settings.github.page.avatarAlt.withLogin': '{login} avatar',
|
|
'settings.github.page.avatarAlt.fallback': 'GitHub avatar',
|
|
'settings.github.page.label.unknownUser': 'unknown',
|
|
'settings.github.page.label.scopes': 'Scopes: {value}',
|
|
'settings.github.page.label.otherAccounts': 'Other Accounts',
|
|
'settings.github.page.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.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, English). The model downloads automatically; no API key needed.',
|
|
'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.mobileLayout': 'Mobile Layout',
|
|
'settings.openchamber.visual.option.mobileLayout.default': 'Old',
|
|
'settings.openchamber.visual.option.mobileLayout.new': 'New',
|
|
'settings.openchamber.visual.section.localization': 'Localization',
|
|
'settings.openchamber.visual.section.spacingAndLayout': 'Spacing & Layout',
|
|
'settings.openchamber.visual.section.navigation': 'Navigation',
|
|
'settings.openchamber.visual.section.chatRenderMode': 'Chat Render Mode',
|
|
'settings.openchamber.visual.section.chatRenderModeAria': 'Chat render mode',
|
|
'settings.openchamber.visual.section.messageStreamTransport': 'Message Stream Transport',
|
|
'settings.openchamber.visual.section.activityDefault': 'Activity Default',
|
|
'settings.openchamber.visual.section.activityDefaultAria': 'Activity default mode',
|
|
'settings.openchamber.visual.section.showToolsOpenedByDefault': 'Show tools opened by default:',
|
|
'settings.openchamber.visual.section.userMessageRendering': 'User Message Rendering',
|
|
'settings.openchamber.visual.section.userMessageRenderingAria': 'User message rendering mode',
|
|
'settings.openchamber.visual.section.mermaidRendering': 'Mermaid Rendering',
|
|
'settings.openchamber.visual.section.mermaidRenderingAria': 'Mermaid rendering mode',
|
|
'settings.openchamber.visual.section.diffLayout': 'Diff Layout',
|
|
'settings.openchamber.visual.section.diffLayoutAria': 'Diff layout',
|
|
'settings.openchamber.visual.section.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.macVibrancy': 'Window transparency',
|
|
'settings.openchamber.visual.field.macVibrancyHint': 'Use the native macOS blur (vibrancy) behind the sidebar. Turn off for fully solid, opaque surfaces.',
|
|
'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.codeFont': 'Code Font',
|
|
'settings.openchamber.visual.field.selectCodeFontAria': 'Select code font',
|
|
'settings.openchamber.visual.actions.resetCodeFontAria': 'Reset code font',
|
|
'settings.openchamber.visual.actions.resetTerminalFontSizeAria': 'Reset terminal font size',
|
|
'settings.openchamber.visual.field.spacingDensity': 'Spacing Density',
|
|
'settings.openchamber.visual.actions.resetSpacingAria': 'Reset spacing',
|
|
'settings.openchamber.visual.field.inputBarOffset': 'Input Bar Offset',
|
|
'settings.openchamber.visual.field.inputBarOffsetTooltip': 'Raise input bar to avoid OS-level screen obstructions like home bars.',
|
|
'settings.openchamber.visual.actions.resetInputBarOffsetAria': 'Reset input bar offset',
|
|
'settings.openchamber.visual.field.terminalQuickKeysAria': 'Terminal quick keys',
|
|
'settings.openchamber.visual.field.terminalQuickKeys': 'Terminal Quick Keys',
|
|
'settings.openchamber.visual.field.terminalQuickKeysTooltip': 'Show Esc, Ctrl, Arrows in terminal view',
|
|
'settings.openchamber.visual.field.fileEditorKeymap': 'File editor keymap',
|
|
'settings.openchamber.visual.option.fileEditorKeymap.default': 'Default',
|
|
'settings.openchamber.visual.option.fileEditorKeymap.vim': 'Vim',
|
|
'settings.openchamber.visual.field.activityDefaultModeAria': 'Activity default mode: {option}',
|
|
'settings.openchamber.visual.field.showExpandedBashToolsAria': 'Show expanded bash tools',
|
|
'settings.openchamber.visual.field.showExpandedEditToolsAria': 'Show expanded edit tools',
|
|
'settings.openchamber.visual.field.bash': 'Bash',
|
|
'settings.openchamber.visual.field.editTools': 'Edit tools',
|
|
'settings.openchamber.visual.field.userMessageRenderingAria': 'User message rendering: {option}',
|
|
'settings.openchamber.visual.field.mermaidRenderingAria': 'Mermaid rendering: {option}',
|
|
'settings.openchamber.visual.field.diffLayoutAria': 'Diff layout: {option}',
|
|
'settings.openchamber.visual.field.sessionAssist': 'Generate Session Recap & Suggestion',
|
|
'settings.openchamber.visual.field.sessionAssistAria': 'Generate a recap and a suggested reply after the agent finishes',
|
|
'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.expandedEditorToolbarAria': 'Always show editor toolbar',
|
|
'settings.openchamber.visual.field.expandedEditorToolbar': 'Always show editor toolbar (docked under the file tabs)',
|
|
'settings.openchamber.visual.field.wideChatLayoutAria': 'Wide chat layout',
|
|
'settings.openchamber.visual.field.wideChatLayout': 'Wide Chat Layout',
|
|
'settings.openchamber.visual.field.showSplitAssistantMessageActionsAria': 'Inline assistant actions',
|
|
'settings.openchamber.visual.field.showSplitAssistantMessageActions': 'Inline Assistant Actions',
|
|
'settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip': 'Show Copy Answer, Save as image, and Read aloud on assistant text blocks that appear before later tool calls in the same response.',
|
|
'settings.openchamber.visual.field.showToolFileIconsAria': 'Show tool file icons',
|
|
'settings.openchamber.visual.field.showToolFileIcons': 'Show Tool File Icons',
|
|
'settings.openchamber.visual.field.showTurnChangedFilesAria': 'Show changed files for completed turns',
|
|
'settings.openchamber.visual.field.showTurnChangedFiles': 'Show Changed Files for Completed Turns',
|
|
'settings.openchamber.visual.field.showDotfilesAria': 'Show dotfiles',
|
|
'settings.openchamber.visual.field.showDotfiles': 'Show Dotfiles',
|
|
'settings.openchamber.visual.field.queueMessagesByDefaultAria': 'Queue messages by default',
|
|
'settings.openchamber.visual.field.queueMessagesByDefault': 'Queue Messages by Default',
|
|
'settings.openchamber.visual.field.queueMessagesByDefaultTooltip': 'When enabled, Enter queues messages. Use {modifier}+Enter to send.',
|
|
'settings.openchamber.visual.field.persistDraftMessagesAria': 'Persist draft messages',
|
|
'settings.openchamber.visual.field.persistDraftMessages': 'Persist Draft Messages',
|
|
'settings.openchamber.visual.field.enableSpellcheckInTextInputsAria': 'Enable spellcheck in text inputs',
|
|
'settings.openchamber.visual.field.enableSpellcheckInTextInputs': 'Enable Spellcheck in Text Inputs',
|
|
'settings.openchamber.visual.field.sendAnonymousUsageReportsAria': 'Send anonymous usage reports',
|
|
'settings.openchamber.visual.field.sendAnonymousUsageReports': 'Send anonymous usage reports',
|
|
'settings.openchamber.visual.field.sendAnonymousUsageReportsHint': 'Helps us understand which app versions are actively used so we can prioritize improvements. Only app version, platform, and runtime are collected - no personal data or code.',
|
|
'settings.openchamber.visual.option.themeMode.system': 'System',
|
|
'settings.openchamber.visual.option.themeMode.light': 'Light',
|
|
'settings.openchamber.visual.option.themeMode.dark': 'Dark',
|
|
'settings.openchamber.visual.option.diffLayout.dynamic.label': 'Dynamic',
|
|
'settings.openchamber.visual.option.diffLayout.dynamic.description': 'New inline, modified side-by-side.',
|
|
'settings.openchamber.visual.option.diffLayout.inline.label': 'Always inline',
|
|
'settings.openchamber.visual.option.diffLayout.inline.description': 'Show as a single unified view.',
|
|
'settings.openchamber.visual.option.diffLayout.sideBySide.label': 'Always side-by-side',
|
|
'settings.openchamber.visual.option.diffLayout.sideBySide.description': 'Compare original and modified files.',
|
|
'settings.openchamber.visual.option.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',
|
|
} as const;
|