Files
openchamber/packages/ui/src/lib/i18n/messages/en.ts
T
9b52222ef1 Add folder-level revert action in Git changes tree (#1390)
* feat: add folder-level revert for git changes

* Fix bot comments. Fix confirmation dialog for mobile view.

* fix

---------

Co-authored-by: Konstantin Zolin <zolin_ka@vk.com>
Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-06-08 15:55:56 +03:00

2538 lines
164 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { settingsDict } from './en.settings';
export const dict = {
...settingsDict,
'common.loading': 'Loading...',
'common.unavailable': 'Unavailable',
'common.language.english': 'English',
'common.language.simplifiedChinese': 'Chinese (Simplified)',
'common.language.traditionalChinese': 'Chinese (Traditional)',
'common.language.ukrainian': 'Ukrainian',
'common.language.spanish': 'Spanish',
'common.language.brazilianPortuguese': 'Brazilian Portuguese',
'common.language.korean': 'Korean',
'common.language.polish': 'Polish',
'common.revealPath.finder': 'Reveal in Finder',
'common.revealPath.fileExplorer': 'Open in File Explorer',
'common.revealPath.fileManager': 'Open in File Manager',
'pwa.installPrompt.description': 'Install OpenChamber for quicker access',
'pwa.installPrompt.action': 'Install',
'pwa.installPrompt.dismiss': 'Dismiss',
'pwa.installPrompt.started': 'Install started',
'pwa.installPrompt.installed': 'OpenChamber installed',
'layout.mainTab.chat': 'Chat',
'layout.mainTab.plan': 'Plan',
'layout.mainTab.diff': 'Diff',
'layout.mainTab.files': 'Files',
'layout.mainTab.terminal': 'Terminal',
'layout.mainTab.context': 'Context',
'mobile.nav.aria': 'Mobile navigation',
'mobile.nav.changes': 'Changes',
'mobile.nav.settings': 'Settings',
'mobile.surface.closeAria': 'Close',
'mobile.header.openMenuAria': 'Open menu',
'mobile.menu.titleAria': 'Workspace tools',
'mobile.menu.files': 'Files',
'mobile.menu.changes': 'Changes',
'mobile.menu.settings': 'Settings',
'mobile.sessions.newChatCta': 'New chat in {project}',
'mobile.sessions.dateGroup.today': 'Today',
'mobile.sessions.dateGroup.yesterday': 'Yesterday',
'mobile.sessions.dateGroup.thisWeek': 'Earlier this week',
'mobile.sessions.dateGroup.older': 'Older',
'mobile.sessions.section.worktrees': 'Worktrees',
'mobile.sessions.section.otherProjects': 'Switch project',
'mobile.sessions.section.projects': 'Projects',
'mobile.sessions.empty.noProjectsTitle': 'No projects yet',
'mobile.sessions.empty.noProjectsDescription': 'Add a project to start chatting with your code.',
'mobile.sessions.empty.noSessionsTitle': 'No sessions yet',
'mobile.sessions.empty.noSessionsDescription': 'Start your first chat to see it here.',
'mobile.sessions.empty.searchTitle': 'No matches',
'mobile.sessions.empty.searchDescription': 'Try a different search term.',
'mobile.sessions.showArchived': 'Show archived ({count})',
'mobile.sessions.hideArchived': 'Hide archived',
'mobile.sessions.activeWorktreeAria': 'Active worktree',
'mobile.sessions.activeProjectAria': 'Active project',
'mobile.sessions.startNewChat': 'Start new chat',
'mobile.sessions.newChat': 'New chat',
'mobile.sessions.editOrder': 'Reorder projects',
'mobile.sessions.doneEditing': 'Done',
'mobile.sessions.editOrderHint': 'Drag the handle to reorder projects. Tap the check to finish.',
'mobile.sessions.editProjectAria': 'Edit {label}',
'mobile.sessions.dragHandleAria': 'Drag {label} to reorder',
'mobile.sessions.moveUpAria': 'Move {label} up',
'mobile.sessions.moveDownAria': 'Move {label} down',
'mobile.sessions.removeProjectAria': 'Remove {label}',
'mobile.sessions.cancelRemoveProjectAria': 'Cancel removing {label}',
'mobile.sessions.confirmRemoveProject': 'Close',
'mobile.sessions.confirmRemoveProjectAria': 'Confirm removing {label}',
'mobile.sessions.toast.projectRemoved': 'Removed {label}',
'mobile.sessions.archiveSessionAria': 'Archive {title}',
'mobile.sessions.cancelArchiveAria': 'Cancel archiving {title}',
'mobile.projectEdit.worktreesTitle': 'Worktrees',
'mobile.projectEdit.worktreesEmpty': 'No worktrees in this project yet.',
'mobile.projectEdit.reorderHint': 'Drag to reorder worktrees.',
'mobile.projectEdit.dragWorktreeAria': 'Drag {label} to reorder',
'mobile.projectEdit.deleteWorktreeAria': 'Remove worktree {label}',
'mobile.projectEdit.deleteWorktreeTitle': 'Remove worktree',
'mobile.projectEdit.deleteWorktreeConfirmButton': 'Remove',
'mobile.projectEdit.deleteWorktreeConfirm': 'Remove the worktree “{name}”? This can’t be undone.',
'mobile.projectEdit.deleteWorktreeDirty': 'This worktree has uncommitted changes that will be lost.',
'mobile.projectEdit.deleteWorktreeArchiveNote': '{count} attached session(s) will be archived.',
'mobile.projectEdit.deleteLocalBranch': 'Also delete local branch',
'mobile.projectEdit.deleteRemoteBranch': 'Also delete remote branch',
'mobile.sessions.showMore': 'Show {count} more',
'mobile.sessions.search.section.sessions': 'Sessions',
'mobile.sessions.search.section.archived': 'Archived',
'mobile.sessions.search.section.projects': 'Projects',
'mobile.sessions.clearSearchAria': 'Clear search',
'mobile.header.noProject': 'Select a project',
'mobile.header.activeSession': 'Active session',
'mobile.header.noSession': 'No active session',
'mobile.sessions.openSheetAria': 'Open sessions and projects',
'mobile.sessions.closeSheetAria': 'Close sessions and projects',
'mobile.sessions.sheet.title': 'Sessions',
'mobile.sessions.sheet.description': 'Switch projects, open sessions, or start a new chat.',
'mobile.sessions.search.placeholder': 'Search sessions',
'mobile.sessions.empty': 'No sessions found.',
'mobile.sessions.unassignedProject': 'Other sessions',
'mobile.sessions.newSessionAria': 'Start a new session in this project',
'mobile.sessions.untitled': 'Untitled session',
'mobile.sessions.project.sessionsSingle': '1 session',
'mobile.sessions.project.sessionsPlural': '{count} sessions',
'mobile.files.refreshAria': 'Refresh files',
'mobile.files.backToParentAria': 'Back to {name}',
'mobile.files.rootDirectory': 'Project files',
'mobile.files.search.placeholder': 'Search files',
'mobile.files.search.empty': 'No files found.',
'mobile.files.parentDirectory': 'Parent directory',
'mobile.files.empty.noDirectory': 'Select a project to browse files.',
'mobile.files.empty.directory': 'This directory is empty.',
'mobile.files.error.listFailed': 'Failed to load files',
'mobile.files.error.readUnavailable': 'File preview is unavailable in this runtime.',
'mobile.files.file.truncated': 'File preview truncated for mobile.',
'mobile.files.copyPathAria': 'Copy file path',
'mobile.files.copyContent': 'Copy content',
'mobile.files.copyContentAria': 'Copy file content',
'mobile.files.toast.pathCopied': 'Path copied',
'mobile.files.toast.contentCopied': 'Content copied',
'mobile.files.toast.copyFailed': 'Copy failed',
'mobile.changes.placeholder.title': 'Changes',
'mobile.changes.placeholder.description': 'Working-tree review, sync, and commit actions will live here.',
'mobile.changes.branchLabel': 'Branch: {branch}',
'mobile.changes.noRemote': 'No remote available',
'mobile.changes.cleanDescription': 'There are no changed files in this workspace.',
'mobile.changes.diffDetail.subtitle': 'Read-only diff',
'mobile.changes.diffDetail.loadFailed': 'Failed to load diff',
'mobile.changes.diffDetail.missingTitle': 'File is no longer changed',
'mobile.changes.diffDetail.missingDescription': 'Go back to Changes and refresh the list.',
'mobile.changes.diffDetail.imageUnavailable': 'Image diffs are not available in mobile Changes yet.',
'mobile.settings.placeholder.title': 'Settings',
'mobile.settings.placeholder.description': 'Focused mobile connection and app settings will live here.',
'layout.rightSidebar.git': 'Git',
'layout.rightSidebar.files': 'Files',
'layout.rightSidebar.context': 'Context',
'layout.services.instance': 'Instance',
'layout.services.usage': 'Usage',
'sessions.sidebar.header.actions.closeSessions': 'Close sessions',
'sessions.sidebar.header.actions.addProject': 'Add project',
'sessions.sidebar.header.actions.newSession': 'New session',
'sessions.sidebar.header.actions.newMultiRun': 'New multi-run',
'sessions.sidebar.header.actions.scheduledTasks': 'Scheduled tasks',
'sessions.scheduledTasks.dialog.title': 'Scheduled tasks',
'sessions.scheduledTasks.dialog.description': 'Server-side tasks that create a new session and send a configured prompt.',
'sessions.scheduledTasks.dialog.project.label': 'Project',
'sessions.scheduledTasks.dialog.project.placeholder': 'Select project',
'sessions.scheduledTasks.dialog.project.empty': 'No projects',
'sessions.scheduledTasks.dialog.actions.newTask': 'New task',
'sessions.scheduledTasks.dialog.actions.runNow': 'Run now',
'sessions.scheduledTasks.dialog.actions.edit': 'Edit',
'sessions.scheduledTasks.dialog.actions.editAria': 'Edit {taskName}',
'sessions.scheduledTasks.dialog.actions.deleteAria': 'Delete {taskName}',
'sessions.scheduledTasks.dialog.loading': 'Loading tasks...',
'sessions.scheduledTasks.dialog.empty.noTasks': 'No scheduled tasks yet.',
'sessions.scheduledTasks.dialog.empty.selectProject': 'Select a project to manage scheduled tasks.',
'sessions.scheduledTasks.dialog.error.chooseProjectFirst': 'Choose a project first',
'sessions.scheduledTasks.dialog.toast.loadFailed': 'Failed to load scheduled tasks',
'sessions.scheduledTasks.dialog.toast.saved': 'Scheduled task saved',
'sessions.scheduledTasks.dialog.toast.updateFailed': 'Failed to update task',
'sessions.scheduledTasks.dialog.toast.deleted': 'Scheduled task deleted',
'sessions.scheduledTasks.dialog.toast.deleteFailed': 'Failed to delete task',
'sessions.scheduledTasks.dialog.toast.started': 'Task started',
'sessions.scheduledTasks.dialog.toast.runFailed': 'Failed to run task',
'sessions.scheduledTasks.dialog.confirm.deleteTask': 'Delete scheduled task "{taskName}"?',
'sessions.scheduledTasks.dialog.schedule.daily': 'Daily {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': 'Daily {time} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': 'Weekly {days} {time}',
'sessions.scheduledTasks.dialog.schedule.weeklyWithTimezone': 'Weekly {days} {time} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.once': 'One-time {date} {time}',
'sessions.scheduledTasks.dialog.schedule.onceWithTimezone': 'One-time {date} {time} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.cron': 'Cron: {cron}',
'sessions.scheduledTasks.dialog.schedule.cronWithTimezone': 'Cron: {cron} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.unknownDate': 'Unknown date',
'sessions.scheduledTasks.dialog.schedule.weekdayShort.sun': 'Sun',
'sessions.scheduledTasks.dialog.schedule.weekdayShort.mon': 'Mon',
'sessions.scheduledTasks.dialog.schedule.weekdayShort.tue': 'Tue',
'sessions.scheduledTasks.dialog.schedule.weekdayShort.wed': 'Wed',
'sessions.scheduledTasks.dialog.schedule.weekdayShort.thu': 'Thu',
'sessions.scheduledTasks.dialog.schedule.weekdayShort.fri': 'Fri',
'sessions.scheduledTasks.dialog.schedule.weekdayShort.sat': 'Sat',
'sessions.scheduledTasks.dialog.schedule.weekdayShort.unknown': '?',
'sessions.scheduledTasks.dialog.relativeTime.inLessThanOneMinute': 'in <1m',
'sessions.scheduledTasks.dialog.relativeTime.justNow': 'just now',
'sessions.scheduledTasks.dialog.relativeTime.inMinutes': 'in {count}m',
'sessions.scheduledTasks.dialog.relativeTime.minutesAgo': '{count}m ago',
'sessions.scheduledTasks.dialog.relativeTime.inDuration': 'in {duration}',
'sessions.scheduledTasks.dialog.relativeTime.durationAgo': '{duration} ago',
'sessions.scheduledTasks.dialog.status.success': 'Success',
'sessions.scheduledTasks.dialog.status.error': 'Error',
'sessions.scheduledTasks.dialog.status.running': 'Running',
'sessions.scheduledTasks.dialog.status.idle': 'Idle',
'sessions.scheduledTasks.dialog.nextRun.label': 'Next',
'sessions.scheduledTasks.dialog.lastRun.label': 'Last run',
'sessions.scheduledTasks.dialog.lastRun.runningNow': 'running now',
'sessions.scheduledTasks.dialog.lastRun.never': 'never',
'sessions.scheduledTasks.dialog.taskToggle.enableAria': 'Enable {taskName}',
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': 'Pause {taskName}',
'sessions.scheduledTasks.dialog.taskToggle.enabled': 'Enabled',
'sessions.scheduledTasks.dialog.taskToggle.paused': 'Paused',
'sessions.scheduledTasks.editor.title.edit': 'Edit scheduled task',
'sessions.scheduledTasks.editor.title.new': 'New scheduled task',
'sessions.scheduledTasks.editor.description': 'Configure a server-side task that creates a new session and sends a prompt.',
'sessions.scheduledTasks.editor.taskName.label': 'Task name',
'sessions.scheduledTasks.editor.taskName.placeholder': 'Daily sync',
'sessions.scheduledTasks.editor.scheduleType.label': 'Schedule type',
'sessions.scheduledTasks.editor.scheduleType.daily': 'Daily',
'sessions.scheduledTasks.editor.scheduleType.weekly': 'Weekly',
'sessions.scheduledTasks.editor.scheduleType.once': 'One-time',
'sessions.scheduledTasks.editor.date.label': 'Date',
'sessions.scheduledTasks.editor.date.placeholder': 'Select date',
'sessions.scheduledTasks.editor.date.previousMonth': 'Previous month',
'sessions.scheduledTasks.editor.date.nextMonth': 'Next month',
'sessions.scheduledTasks.editor.date.jumpToToday': 'Jump to today',
'sessions.scheduledTasks.editor.date.today': 'Today',
'sessions.scheduledTasks.editor.time.label': 'Time',
'sessions.scheduledTasks.editor.time.hourAria': 'Hours',
'sessions.scheduledTasks.editor.time.minuteAria': 'Minutes',
'sessions.scheduledTasks.editor.time.periodAria': 'Period',
'sessions.scheduledTasks.editor.time.period.am': 'AM',
'sessions.scheduledTasks.editor.time.period.pm': 'PM',
'sessions.scheduledTasks.editor.times.label': 'Times',
'sessions.scheduledTasks.editor.times.add': 'Add time',
'sessions.scheduledTasks.editor.times.removeAria': 'Remove time',
'sessions.scheduledTasks.editor.timezone.label': 'Timezone',
'sessions.scheduledTasks.editor.weekdays.label': 'Weekdays',
'sessions.scheduledTasks.editor.model.label': 'Model',
'sessions.scheduledTasks.editor.thinkingLevel.label': 'Thinking level',
'sessions.scheduledTasks.editor.thinkingLevel.default': 'Default',
'sessions.scheduledTasks.editor.agent.label': 'Agent',
'sessions.scheduledTasks.editor.prompt.label': 'Prompt',
'sessions.scheduledTasks.editor.prompt.placeholder': 'Summarize open tasks and propose next actions',
'sessions.scheduledTasks.editor.enabled.aria': 'Enable task',
'sessions.scheduledTasks.editor.enabled.label': 'Enabled',
'sessions.scheduledTasks.editor.actions.closeAria': 'Close',
'sessions.scheduledTasks.editor.actions.cancel': 'Cancel',
'sessions.scheduledTasks.editor.actions.save': 'Save',
'sessions.scheduledTasks.editor.actions.saving': 'Saving...',
'sessions.scheduledTasks.editor.toast.saveFailed': 'Failed to save task',
'sessions.scheduledTasks.editor.validation.taskNameRequired': 'Task name is required',
'sessions.scheduledTasks.editor.validation.promptRequired': 'Prompt is required',
'sessions.scheduledTasks.editor.validation.modelRequired': 'Model is required',
'sessions.scheduledTasks.editor.validation.dateFormat': 'Date must use YYYY-MM-DD',
'sessions.scheduledTasks.editor.validation.timeFormat': 'Time must use HH:mm',
'sessions.scheduledTasks.editor.validation.atLeastOneTime': 'Add at least one valid time',
'sessions.scheduledTasks.editor.validation.atLeastOneWeekday': 'Select at least one weekday',
'sessions.scheduledTasks.editor.validation.timezoneRequired': 'Timezone is required',
'multirun.launcher.title': 'New Multi-Run',
'multirun.launcher.actions.closeEsc': 'Close (Esc)',
'multirun.launcher.actions.cancel': 'Cancel',
'multirun.launcher.actions.creating': 'Creating...',
'multirun.launcher.actions.startWithModelCount': 'Start ({count} models)',
'multirun.launcher.project.label': 'Project',
'multirun.launcher.project.placeholder': 'Select project',
'multirun.launcher.project.empty': 'Add a project first.',
'multirun.launcher.project.gitRequired': 'No worktree isolation: runs use the same directory.',
'multirun.launcher.groupName.label': 'Group name',
'multirun.launcher.groupName.info': 'Used for worktree directory and branch names',
'multirun.launcher.groupName.placeholder': 'feature-auth, bugfix-login',
'multirun.launcher.baseBranch.label': 'Base branch',
'multirun.launcher.baseBranch.info': 'New branch created from this base per model',
'multirun.launcher.isolateRuns.label': 'Isolate runs',
'multirun.launcher.agent.label': 'Agent',
'multirun.launcher.agent.info': 'Agent used for all runs. Defaults to your configured agent.',
'multirun.launcher.setupCommands.label': 'Setup commands',
'multirun.launcher.setupCommands.loading': 'Loading...',
'multirun.launcher.setupCommands.commandPlaceholder': 'bun install',
'multirun.launcher.setupCommands.removeCommandAria': 'Remove command',
'multirun.launcher.setupCommands.addCommand': 'Add command',
'multirun.launcher.prompt.label': 'Prompt',
'multirun.launcher.prompt.placeholder': 'Enter the prompt to send to all models...',
'multirun.launcher.attachments.attach': 'Attach',
'multirun.launcher.attachments.tooltip': 'Same files sent to all runs',
'multirun.launcher.models.label': 'Models',
'multirun.launcher.models.info': 'Select 2-{max} models. Same model can be added multiple times.',
'multirun.launcher.toast.fileTooLarge': 'File "{fileName}" is too large (max 10MB)',
'multirun.launcher.toast.attachFailed': 'Failed to attach "{fileName}"',
'multirun.launcher.toast.attachedSingle': 'Attached {count} file',
'multirun.launcher.toast.attachedPlural': 'Attached {count} files',
'multirun.modelMultiSelect.actions.addModel': 'Add model',
'multirun.modelMultiSelect.search.placeholder': 'Search models',
'multirun.modelMultiSelect.search.noResults': 'No models found',
'multirun.modelMultiSelect.sections.favorites': 'Favorites',
'multirun.modelMultiSelect.sections.recent': 'Recent',
'multirun.modelMultiSelect.variant.placeholder': 'Thinking',
'multirun.modelMultiSelect.variant.default': 'Default',
'multirun.modelMultiSelect.keyboard.hint': '↑↓ navigate • Enter select • Esc close',
'multirun.modelMultiSelect.validation.minOnly': 'Select at least {min} models.',
'multirun.modelMultiSelect.validation.minToMax': 'Select from {min} to {max} models.',
'multirun.agentSelector.placeholder': 'Select an agent',
'multirun.fusion.title': 'Run fusion',
'multirun.fusion.description': 'Combine the selected multi-run outputs into one stronger answer.',
'multirun.fusion.provider.placeholder': 'Provider',
'multirun.fusion.model.placeholder': 'Model',
'multirun.fusion.sources.label': 'Sources ({count})',
'multirun.fusion.actions.cancel': 'Cancel',
'multirun.fusion.actions.start': 'Start fusion',
'multirun.fusion.actions.starting': 'Starting...',
'multirun.fusion.toast.noOutputs': 'No assistant outputs found to fuse.',
'multirun.fusion.toast.failed': 'Failed to start fusion.',
'multirun.launcher.attachments.label': 'Files',
'multirun.launcher.actions.startWithRunCount': 'Start ({count} runs)',
'multirun.launcher.groups.addGroup': 'Add run group',
'multirun.launcher.groups.removeGroup': 'Remove group',
'multirun.launcher.groups.groupLabel': 'Run group {index}',
'multirun.launcher.groups.template.label': 'Template',
'multirun.launcher.groups.template.placeholder': 'Select a template...',
'multirun.launcher.groups.template.custom': 'Custom prompt',
'multirun.launcher.groups.prompt.label': 'Prompt',
'multirun.launcher.groups.prompt.placeholder': 'Enter the prompt for this group...',
'sessions.sidebar.header.actions.searchSessions': 'Search sessions',
'sessions.sidebar.header.actions.exitSelection': 'Exit selection',
'sessions.sidebar.header.actions.selectSessions': 'Select sessions',
'sessions.sidebar.header.actions.sessionDisplayMode': 'Session display mode',
'sessions.sidebar.header.displayMode.label': 'Display mode',
'sessions.sidebar.header.displayMode.default': 'Default',
'sessions.sidebar.header.displayMode.minimal': 'Minimal',
'sessions.sidebar.header.displayMode.showRecent': 'Show recent section',
'sessions.sidebar.header.displayMode.showArchived': 'Show archived sessions',
'sessions.sidebar.header.displayMode.collapseAll': 'Collapse all',
'sessions.sidebar.header.displayMode.expandAll': 'Expand all',
'sessions.sidebar.header.search.matchCountSingle': '{count} match',
'sessions.sidebar.header.search.matchCountPlural': '{count} matches',
'sessions.sidebar.header.search.escapeHint': 'Esc to clear',
'sessions.sidebar.header.search.placeholder': 'Search sessions...',
'sessions.sidebar.header.search.clear': 'Clear search',
'sessions.sidebar.footer.actions.settings': 'Settings',
'sessions.sidebar.footer.actions.shortcuts': 'Shortcuts',
'sessions.sidebar.footer.actions.aboutOpenChamber': 'About OpenChamber',
'sessions.sidebar.footer.actions.update': 'Update',
'sessions.sidebar.empty.noSessions.title': 'No sessions yet',
'sessions.sidebar.empty.noSessions.description': 'Create your first session to start coding.',
'sessions.sidebar.empty.noMatches.title': 'No matching sessions',
'sessions.sidebar.empty.noMatches.description': 'Try a different title, branch, folder, or path.',
'sessions.sidebar.activity.recentTitle': 'recent',
'sessions.switcher.openAria': 'Open session switcher',
'sessions.switcher.empty': 'No recent sessions',
'sessions.switcher.draftTitle': 'New session',
'sessions.sidebar.updateCheck.errorTitle': 'Failed to check for updates',
'sessions.sidebar.updateCheck.latestVersion': 'You are on the latest version',
'sessions.sidebar.directory.errorAddProjectTitle': 'Failed to add project',
'sessions.sidebar.directory.errorAddProjectDescription': 'Please select a valid directory.',
'sessions.sidebar.directory.errorSelectDirectoryTitle': 'Failed to select directory',
'sessions.sidebar.folder.newFolderName': 'New folder',
'sessions.sidebar.bulkActions.delete': 'Delete',
'sessions.sidebar.bulkActions.archive': 'Archive',
'sessions.sidebar.bulkActions.selectedCount': '{count} selected',
'sessions.sidebar.bulkActions.moveToFolder': 'Move to folder',
'sessions.sidebar.bulkActions.deletedSingle': 'Deleted {count} session',
'sessions.sidebar.bulkActions.deletedPlural': 'Deleted {count} sessions',
'sessions.sidebar.bulkActions.failedDeleteSingle': 'Failed to delete {count} session',
'sessions.sidebar.bulkActions.failedDeletePlural': 'Failed to delete {count} sessions',
'sessions.sidebar.bulkActions.archivedSingle': 'Archived {count} session',
'sessions.sidebar.bulkActions.archivedPlural': 'Archived {count} sessions',
'sessions.sidebar.bulkActions.failedArchiveSingle': 'Failed to archive {count} session',
'sessions.sidebar.bulkActions.failedArchivePlural': 'Failed to archive {count} sessions',
'sessions.sidebar.folders.none': 'No folders yet',
'sessions.sidebar.folders.newFolderEllipsis': 'New folder...',
'sessions.sidebar.folders.removeFromFolder': 'Remove from folder',
'sessions.sidebar.folders.moveToFolder': 'Move to folder',
'sessions.sidebar.project.actions.newWorktree': 'New worktree',
'sessions.sidebar.project.actions.newWorktreeEllipsis': 'New worktree...',
'sessions.sidebar.project.actions.projectMenu': 'Project menu',
'sessions.sidebar.project.actions.newSession': 'New session',
'sessions.sidebar.project.actions.closeProject': 'Close project',
'sessions.sidebar.project.actions.newDraftSession': 'New draft session',
'sessions.sidebar.session.menu.rename': 'Rename',
'sessions.sidebar.session.rename.save': 'Save session name',
'sessions.sidebar.session.rename.cancel': 'Cancel renaming session',
'sessions.sidebar.session.menu.unpin': 'Unpin session',
'sessions.sidebar.session.menu.pin': 'Pin session',
'sessions.sidebar.session.menu.share': 'Share',
'sessions.sidebar.session.menu.copied': 'Copied',
'sessions.sidebar.session.menu.copyLink': 'Copy link',
'sessions.sidebar.session.menu.unshare': 'Unshare',
'sessions.sidebar.session.menu.exportMarkdown': 'Export Markdown',
'sessions.sidebar.session.menu.runFusion': 'Run fusion',
'sessions.sidebar.session.menu.openInSidePanel': 'Open in Side Panel',
'sessions.sidebar.session.actions.openInEditor': 'Open in Editor',
'sessions.sidebar.session.menu.betaBadge': 'beta',
'sessions.sidebar.session.menu.label': 'Session menu',
'sessions.sidebar.session.untitled': 'Untitled Session',
'sessions.sidebar.session.export.nothingToExport': 'Nothing to export',
'sessions.sidebar.session.export.success': 'Session exported',
'sessions.sidebar.session.export.failedRevealPath': 'Failed to reveal path',
'sessions.sidebar.session.export.untitledSubagent': 'Untitled Sub-agent',
'sessions.sidebar.session.export.skippedSubtaskSingle': 'Exported session, but skipped {count} sub-agent task that could not be loaded.',
'sessions.sidebar.session.export.skippedSubtaskMany': 'Exported session, but skipped {count} sub-agent tasks that could not be loaded.',
'sessions.sidebar.session.export.dialog.title': 'Export Markdown',
'sessions.sidebar.session.export.dialog.descriptionSingle': 'This session has {count} sub-agent task. Include it in the export?',
'sessions.sidebar.session.export.dialog.descriptionMany': 'This session has {count} sub-agent tasks. Include them in the export?',
'sessions.sidebar.session.export.dialog.includeSubtasks': 'Include sub-agent tasks',
'sessions.sidebar.session.export.dialog.confirm': 'Export',
'sessions.sidebar.session.status.active': 'Session active',
'sessions.sidebar.session.status.unread': 'Unread updates',
'sessions.sidebar.session.status.pinned': 'Pinned session',
'sessions.sidebar.session.status.permissionRequired': 'Permission required',
'sessions.sidebar.session.subsessions.collapse': 'Collapse subsessions',
'sessions.sidebar.session.subsessions.expand': 'Expand subsessions',
'sessions.sidebar.dialogs.deleteSession.title': 'Delete session?',
'sessions.sidebar.dialogs.archiveSession.title': 'Archive session?',
'sessions.sidebar.dialogs.deleteSession.withOneSubtask': '"{sessionTitle}" and its {count} sub-task will be permanently deleted.',
'sessions.sidebar.dialogs.deleteSession.withManySubtasks': '"{sessionTitle}" and its {count} sub-tasks will be permanently deleted.',
'sessions.sidebar.dialogs.archiveSession.withOneSubtask': '"{sessionTitle}" and its {count} sub-task will be archived.',
'sessions.sidebar.dialogs.archiveSession.withManySubtasks': '"{sessionTitle}" and its {count} sub-tasks will be archived.',
'sessions.sidebar.dialogs.deleteSession.single': '"{sessionTitle}" will be permanently deleted.',
'sessions.sidebar.dialogs.archiveSession.single': '"{sessionTitle}" will be archived.',
'sessions.sidebar.dialogs.neverAsk': 'Never ask',
'sessions.sidebar.dialogs.cancel': 'Cancel',
'sessions.sidebar.dialogs.deleteSession.titleAction': 'Delete session',
'sessions.sidebar.dialogs.deleteSessions.titleAction': 'Delete sessions',
'sessions.sidebar.dialogs.deleteSessions.title': 'Delete sessions?',
'sessions.sidebar.dialogs.archiveSessions.title': 'Archive sessions?',
'sessions.sidebar.dialogs.deleteSessions.singleDescription': '{count} session will be permanently deleted.',
'sessions.sidebar.dialogs.deleteSessions.pluralDescription': '{count} sessions will be permanently deleted.',
'sessions.sidebar.dialogs.archiveSessions.singleDescription': '{count} session will be archived.',
'sessions.sidebar.dialogs.archiveSessions.pluralDescription': '{count} sessions will be archived.',
'sessions.sidebar.dialogs.deleteFolder.title': 'Delete folder?',
'sessions.sidebar.dialogs.deleteFolder.withOneSubfolder': '"{folderName}" will be deleted along with {count} sub-folder. Sessions inside will not be deleted.',
'sessions.sidebar.dialogs.deleteFolder.withManySubfolders': '"{folderName}" will be deleted along with {count} sub-folders. Sessions inside will not be deleted.',
'sessions.sidebar.dialogs.deleteFolder.withContentsNoSubfolders': '"{folderName}" will be deleted. Sessions inside will not be deleted.',
'sessions.sidebar.dialogs.deleteFolder.single': '"{folderName}" will be permanently deleted.',
'sessions.sidebar.dialogs.deleteResult.singleFailedToDelete': '{count} session could not be deleted.',
'sessions.sidebar.dialogs.deleteResult.manyFailedToDelete': '{count} sessions could not be deleted.',
'sessions.sidebar.dialogs.deleteResult.singleFailedToArchive': '{count} session could not be archived.',
'sessions.sidebar.dialogs.deleteResult.manyFailedToArchive': '{count} sessions could not be archived.',
'sessions.sidebar.dialogs.deleteResult.removedFromDate': 'Removed all sessions from {dateLabel}.',
'sessions.sidebar.dialogs.deleteResult.tryAgain': 'Please try again in a moment.',
'sessions.sidebar.dialogs.worktreeDelete.descriptionNoLinked': 'This removes the selected worktree.',
'sessions.sidebar.dialogs.worktreeDelete.descriptionOneLinked': 'This removes the selected worktree and archives {count} linked session.',
'sessions.sidebar.dialogs.worktreeDelete.descriptionManyLinked': 'This removes the selected worktree and archives {count} linked sessions.',
'sessions.sidebar.dialogs.sessionDelete.descriptionOne': 'This action permanently removes 1 session.',
'sessions.sidebar.dialogs.sessionDelete.descriptionOneWithDate': 'This action permanently removes 1 session from {dateLabel}.',
'sessions.sidebar.dialogs.sessionDelete.descriptionMany': 'This action permanently removes {count} sessions.',
'sessions.sidebar.dialogs.sessionDelete.descriptionManyWithDate': 'This action permanently removes {count} sessions from {dateLabel}.',
'sessions.sidebar.dialogs.sessionList.more': '+{count} more',
'sessions.sidebar.session.share.successTitle': 'Session shared',
'sessions.sidebar.session.share.successDescription': 'You can copy the link from the menu.',
'sessions.sidebar.session.share.error': 'Unable to share session',
'sessions.sidebar.session.share.copyUrlError': 'Failed to copy URL',
'sessions.sidebar.session.unshare.success': 'Session unshared',
'sessions.sidebar.session.unshare.error': 'Unable to unshare session',
'sessions.sidebar.session.delete.success': 'Session deleted',
'sessions.sidebar.session.delete.error': 'Failed to delete session',
'sessions.sidebar.session.archive.success': 'Session archived',
'sessions.sidebar.session.archive.error': 'Failed to archive session',
'sessions.sidebar.group.pr.checksPassed': '{success}/{total} checks passed',
'sessions.sidebar.group.pr.failingCount': '{count} failing',
'sessions.sidebar.group.pr.pendingCount': '{count} pending',
'sessions.sidebar.group.pr.conflictsOrBlocked': 'Conflicts or blocked',
'sessions.sidebar.group.pr.mergeable': 'Mergeable',
'sessions.sidebar.group.pr.mergeState': 'Merge state: {state}',
'sessions.sidebar.group.pr.status.merged': 'Merged',
'sessions.sidebar.group.pr.status.readyToMerge': 'Ready to merge',
'sessions.sidebar.group.pr.status.open': 'PR open',
'sessions.sidebar.group.pr.status.mergeConflicts': 'Merge conflicts',
'sessions.sidebar.group.pr.status.mergeBlocked': 'Merge blocked',
'sessions.sidebar.group.pr.status.draft': 'Draft PR',
'sessions.sidebar.group.pr.status.closed': 'Closed',
'sessions.sidebar.group.empty.noArchivedSessions': 'No archived sessions yet.',
'sessions.sidebar.group.empty.noSessionsInWorkspace': 'No sessions in this workspace yet.',
'sessions.sidebar.group.showMore': 'Show more sessions',
'sessions.sidebar.group.showMoreSingle': 'Show {count} more session',
'sessions.sidebar.group.showMorePlural': 'Show {count} more sessions',
'sessions.sidebar.group.showFewer': 'Show fewer sessions',
'sessions.sidebar.group.expandAria': 'Expand {label}',
'sessions.sidebar.group.collapseAria': 'Collapse {label}',
'sessions.sidebar.group.actions.deleteArchivedInGroupAria': 'Delete archived sessions in {label}',
'sessions.sidebar.group.actions.deleteArchivedSessions': 'Delete archived sessions',
'sessions.sidebar.group.actions.deleteGroupAria': 'Delete {label}',
'sessions.sidebar.group.actions.deleteWorktree': 'Delete worktree',
'sessions.sidebar.group.actions.newDraftInGroupAria': 'New draft session in {label}',
'sessions.sidebar.grouping.projectRoot': 'project root',
'sessions.sidebar.grouping.projectRootWithBranch': 'project root: {branch}',
'sessions.sidebar.grouping.archived': 'archived',
'sessions.sidebar.grouping.archivedDescription': 'Archived and unassigned sessions',
'sessions.sidebar.folderItem.expandAria': 'Expand folder {folderName}',
'sessions.sidebar.folderItem.collapseAria': 'Collapse folder {folderName}',
'sessions.sidebar.folderItem.namePlaceholder': 'Folder name',
'sessions.sidebar.folderItem.newSessionAria': 'New session in {folderName}',
'sessions.sidebar.folderItem.newSubfolderAria': 'New sub-folder in {folderName}',
'sessions.sidebar.folderItem.newSubfolder': 'New sub-folder',
'sessions.sidebar.folderItem.renameAria': 'Rename folder {folderName}',
'sessions.sidebar.folderItem.deleteArchivedInFolderAria': 'Delete archived sessions in folder {folderName}',
'sessions.sidebar.folderItem.deleteFolderAria': 'Delete folder {folderName}',
'sessions.sidebar.folderItem.emptyFolder': 'Empty folder',
'sessions.sidebar.sessionDialogs.ok': 'OK',
'sessions.sidebar.sessionDialogs.linkedSessionSingle': 'Linked session',
'sessions.sidebar.sessionDialogs.linkedSessionPlural': 'Linked sessions',
'sessions.sidebar.sessionDialogs.delete.note': 'Worktree directories stay intact. Subsessions linked to the selected sessions will also be removed.',
'sessions.sidebar.sessionDialogs.directory.errorSelectTitle': 'Failed to select directory',
'sessions.sidebar.sessionDialogs.directory.errorOpenTitle': 'Failed to open directory',
'sessions.sidebar.sessionDialogs.directory.errorOpenDescription': 'Desktop could not grant file access.',
'sessions.sidebar.sessionDialogs.directory.errorAddProjectTitle': 'Failed to add project',
'sessions.sidebar.sessionDialogs.directory.errorAddProjectDescription': 'Please select a valid directory path.',
'sessions.sidebar.sessionDialogs.worktree.errorRemoveTitle': 'Failed to remove worktree',
'sessions.sidebar.sessionDialogs.worktree.removedTitle': 'Worktree removed',
'sessions.sidebar.sessionDialogs.worktree.removed': 'Worktree removed.',
'sessions.sidebar.sessionDialogs.worktree.removedWithRemote': 'Worktree and remote branch removed.',
'sessions.sidebar.sessionDialogs.worktree.attachedArchived': 'Attached worktree archived.',
'sessions.sidebar.sessionDialogs.worktree.attachedArchivedPlural': 'Attached worktrees archived.',
'sessions.sidebar.sessionDialogs.worktree.archivedAndRemoteRemoved': 'Archived worktrees and removed remote branches.',
'sessions.sidebar.sessionDialogs.worktree.label': 'Worktree',
'sessions.sidebar.sessionDialogs.worktree.pathUnavailable': 'Worktree path unavailable.',
'sessions.sidebar.sessionDialogs.worktree.uncommittedWarning': 'Uncommitted changes will be discarded.',
'sessions.sidebar.sessionDialogs.actions.deleteRemoteBranch': 'Delete remote branch',
'sessions.sidebar.sessionDialogs.actions.remoteBranchInfoUnavailable': 'Remote branch info unavailable',
'sessions.sidebar.sessionDialogs.actions.deleteLocalBranch': 'Delete local branch',
'sessions.sidebar.sessionDialogs.actions.deleting': 'Deleting…',
'sessions.sidebar.sessionDialogs.actions.deleteWorktree': 'Delete worktree',
'gitView.branch.branchToMergeInto': 'Branch to merge into {branch}',
'gitView.branch.branchToRebaseOnto': 'Branch to rebase onto',
'gitView.branch.create': 'Create new branch...',
'gitView.branch.currentBadge': 'Current',
'gitView.branch.currentBranchFallback': 'current branch',
'gitView.branch.currentBranchTooltip': 'Current branch',
'gitView.branch.detachedHead': 'Detached HEAD',
'gitView.branch.dialogDescriptionPrefix': 'Choose how to bring another branch into',
'gitView.branch.empty': 'No branches found.',
'gitView.branch.localBranches': 'Local branches',
'gitView.branch.mergeDescription': 'Create a merge commit and preserve branch history.',
'gitView.branch.mergeRebase': 'Merge/Rebase',
'gitView.branch.mergeRebaseTooltip': 'Update this branch from another branch.',
'gitView.branch.mergingInProgress': 'Merging In Progress',
'gitView.branch.namePlaceholder': 'Branch name',
'gitView.branch.newBranchPlaceholder': 'New branch name',
'gitView.branch.noLocalBranches': 'No local branches',
'gitView.branch.noRemoteBranches': 'No remote branches',
'gitView.branch.operation': 'Operation',
'gitView.branch.operationCompleted': 'Operation Completed',
'gitView.branch.operationFailed': 'Operation Failed',
'gitView.branch.pushToPrefix': 'Push To Prefix',
'gitView.branch.pushToSuffix': 'Push To Suffix',
'gitView.branch.rebaseDescription': 'Replay your commits on top of the selected branch.',
'gitView.branch.rebasingInProgress': 'Rebasing In Progress',
'gitView.branch.remoteBranches': 'Remote branches',
'gitView.branch.renameTitle': 'Rename branch',
'gitView.branch.renameSave': 'Save branch name',
'gitView.branch.renameSaving': 'Saving branch name',
'gitView.branch.renameCancel': 'Cancel branch rename',
'gitView.branch.searchPlaceholder': 'Search branches...',
'gitView.branch.selectBranch': 'Select Branch',
'gitView.branch.summaryMergeInfix': 'into',
'gitView.branch.summaryMergePrefix': 'This will merge',
'gitView.branch.summaryRebaseInfix': 'onto',
'gitView.branch.summaryRebasePrefix': 'This will rebase',
'gitView.branch.updateDescriptionPrefix': 'Bring the latest changes into',
'gitView.branch.updateTitle': 'Update branch',
'gitView.changes.changedFilesAria': 'Changed files',
'gitView.changes.clearSelectionAria': 'Clear file selection',
'gitView.changes.collapseDirectoryAria': 'Collapse directory {path}',
'gitView.changes.expandDirectoryAria': 'Expand directory {path}',
'gitView.changes.revertAll': 'Revert all',
'gitView.changes.revertAllDescriptionPlural': 'Revert {count} changed files? This cannot be undone.',
'gitView.changes.revertAllDescriptionSingle': 'Revert {count} changed file? This cannot be undone.',
'gitView.changes.revertAllDialogTitle': 'Revert all changes?',
'gitView.changes.revertDirectoryAria': 'Revert changes in {path}',
'gitView.changes.revertDirectory': 'Revert folder',
'gitView.changes.revertDirectoryDescriptionPlural': 'This will discard local changes in {count} files under {path}.',
'gitView.changes.revertDirectoryDescriptionSingle': 'This will discard local changes in {count} file under {path}.',
'gitView.changes.revertDirectoryDialogTitle': 'Revert folder changes?',
'gitView.changes.revertDirectoryTooltip': 'Revert folder changes',
'gitView.changes.revertFileAria': 'Revert changes in {path}',
'gitView.changes.revertFileTooltip': 'Revert changes',
'gitView.changes.reverting': 'Reverting...',
'gitView.changes.selectAllAria': 'Select all files',
'gitView.changes.selectFileAria': 'Select {path}',
'gitView.changes.stagedTitle': 'Staged',
'gitView.changes.resizeSplitAria': 'Resize staged and unstaged changes',
'gitView.changes.stageAllAria': 'Stage all changes',
'gitView.changes.stageDirectoryAria': 'Stage all changes in {path}',
'gitView.changes.stageFileAria': 'Stage {path}',
'gitView.changes.title': 'Changes',
'gitView.changes.toggleDirectorySelectionAria': 'Toggle selection for {path}',
'gitView.changes.unstageAllAria': 'Unstage all changes',
'gitView.changes.unstageDirectoryAria': 'Unstage all changes in {path}',
'gitView.changes.unstageFileAria': 'Unstage {path}',
'gitView.commit.addGitmoji': 'Add gitmoji',
'gitView.commit.aiHighlights.insertAria': 'Insert aria label',
'gitView.commit.aiHighlights.insertTooltip': 'Insert tooltip',
'gitView.commit.aiHighlights.title': 'Highlights',
'gitView.commit.commit': 'Commit',
'gitView.commit.commitAria': 'Commit aria label',
'gitView.commit.committing': 'Committing...',
'gitView.commit.generate': 'Generate',
'gitView.commit.generateAria': 'Generate commit message',
'gitView.commit.messagePlaceholder': 'Commit message',
'gitView.commit.push': 'Commit & sync',
'gitView.commit.pushAria': 'Commit and sync',
'gitView.commit.pushing': 'Syncing...',
'gitView.commit.selectFilesHint': 'Select files in Changes to enable commit.',
'gitView.commit.stageFilesHint': 'Stage files to enable commit.',
'gitView.commit.title': 'Commit',
'gitView.common.cancel': 'Cancel',
'gitView.common.close': 'Close',
'gitView.common.done': 'Done',
'gitView.common.processing': 'Processing...',
'gitView.common.reset': 'Reset',
'gitView.conflict.abortOperation': 'Abort {operation}',
'gitView.conflict.conflictedFiles': 'Conflicted files:',
'gitView.conflict.continueLater': 'Continue later',
'gitView.conflict.detectedDescription': 'Resolve the {operation} conflicts to continue.',
'gitView.conflict.detectedTitle': '{operation} conflicts detected',
'gitView.conflict.errorLoadingDetails': 'Failed to load conflict details: {message}',
'gitView.conflict.headInfo': 'HEAD information:',
'gitView.conflict.loadFailed': 'Failed to load conflict details',
'gitView.conflict.loading': 'Loading conflict details...',
'gitView.conflict.noActiveSession': 'No active session',
'gitView.conflict.noActiveSessionDescription': 'Open or create a session to resolve conflicts.',
'gitView.conflict.resolveCurrentSession': 'Resolve in current session',
'gitView.conflict.resolveNewSession': 'Resolve in new session',
'gitView.empty.cleanDescription': 'All changes have been committed',
'gitView.empty.cleanTitle': 'Working tree clean',
'gitView.empty.pullBehindPlural': 'Pull {count} commits',
'gitView.empty.pullBehindSingle': 'Pull {count} commit',
'gitView.header.identityTooltip': 'Git identity',
'gitView.header.noIdentity': 'No identity',
'gitView.header.noProfiles': 'No profiles available to apply.',
'gitView.header.repositoryViews': 'Repository views',
'gitView.header.removeRemoteAria': 'Remove remote {name}',
'gitView.header.removeRemoteTitle': 'Remove remote {name}',
'gitView.header.upstreamSynced': 'synced',
'gitView.header.upstreamTooltip': 'Compared with {target}.',
'gitView.header.upstreamTooltipTracking': 'Compared with {target}. Primary sync badges still reflect {tracking}.',
'gitView.history.actions.cancelButton': 'Cancel',
'gitView.history.actions.checkout': 'Checkout',
'gitView.history.actions.checkoutConfirm': 'Check out this commit as detached HEAD?',
'gitView.history.actions.cherryPick': 'Cherry-pick',
'gitView.history.actions.cherryPickConfirm': 'Cherry-pick this commit onto the current branch?',
'gitView.history.actions.conflictToastDescription': 'Conflicts in: {files}. Resolve manually and commit, or abort with git cherry-pick/revert --abort.',
'gitView.history.actions.conflictToastTitle': 'Conflict',
'gitView.history.actions.confirmButton': 'Confirm',
'gitView.history.actions.createBranch': 'Create branch here',
'gitView.history.actions.createBranchConfirm': 'Create',
'gitView.history.actions.createBranchPlaceholder': 'Branch name',
'gitView.history.actions.detachedHead': 'Checked out (detached HEAD)',
'gitView.history.actions.merge': 'Merge into current',
'gitView.history.actions.mergeConfirm': 'Merge this commit into the current branch?',
'gitView.history.actions.rebase': 'Rebase onto this',
'gitView.history.actions.rebaseConfirm': 'Rebase current branch onto this commit?',
'gitView.history.actions.reset': 'Reset...',
'gitView.history.actions.resetHard': 'Hard — discard all changes',
'gitView.history.actions.resetHardConfirm': 'Hard reset — HEAD moves, all uncommitted changes permanently discarded.',
'gitView.history.actions.resetHardConfirmButton': 'Discard changes',
'gitView.history.actions.resetMixed': 'Mixed — unstage changes',
'gitView.history.actions.resetMixedConfirm': 'Mixed reset — HEAD moves, changes unstaged.',
'gitView.history.actions.resetSoft': 'Soft — keep staged',
'gitView.history.actions.resetSoftConfirm': 'Soft reset — HEAD moves, staged changes preserved.',
'gitView.history.actions.revert': 'Revert',
'gitView.history.actions.revertConfirm': 'Stage a revert of this commit?',
'gitView.history.binary': 'Binary',
'gitView.history.binaryNoDiff': 'Binary file — no diff available',
'gitView.history.commitsPlaceholder': 'Commits',
'gitView.history.copySha': 'Copy SHA',
'gitView.history.diffError': 'Failed to load diff. Click to retry.',
'gitView.history.largeDiffDescription': 'Rendering may be slow. You can still view the diff by clicking below.',
'gitView.history.largeDiffTitle': 'Large diff ({count} changed lines)',
'gitView.history.loadingDiff': 'Loading diff...',
'gitView.history.loadingFiles': 'Loading files...',
'gitView.history.loadMore': 'Load more',
'gitView.history.loadingMore': 'Loading...',
'gitView.history.logSize100': '100 commits',
'gitView.history.logSize25': '25 commits',
'gitView.history.logSize50': '50 commits',
'gitView.history.noCommits': 'No commits found',
'gitView.history.noFiles': 'No files',
'gitView.history.renamedNoDiff': 'Renamed file — diff not supported',
'gitView.history.renderDiffAnyway': 'Render anyway',
'gitView.history.title': 'History',
'gitView.graph.title': 'Graph',
'gitView.integrate.checking': 'Checking…',
'gitView.integrate.cherryPickAbortedToast': 'Cherry-pick aborted',
'gitView.integrate.cherryPickConflictDescription': 'Resolve the cherry-pick conflicts to continue.',
'gitView.integrate.cherryPickConflictToast': 'Cherry-pick conflicts detected',
'gitView.integrate.cherryPickContinueFailedToast': 'Failed to continue cherry-pick',
'gitView.integrate.cherryPickFinishedToast': 'Cherry-pick finished',
'gitView.integrate.commitsMovedDescriptionPlural': 'Moved {count} commits to {branch}.',
'gitView.integrate.commitsMovedDescriptionSingle': 'Moved {count} commit to {branch}.',
'gitView.integrate.commitsMovedToast': 'Commits moved',
'gitView.integrate.commitsToMove': 'Commits to move',
'gitView.integrate.conflictsInFiles': 'Conflicts in files',
'gitView.integrate.currentCommit': 'Current commit',
'gitView.integrate.currentSession': 'Current session',
'gitView.integrate.failedToMoveToast': 'Failed to move commits',
'gitView.integrate.moreFiles': 'More files',
'gitView.integrate.move': 'Move',
'gitView.integrate.moveCommits': 'Move commits',
'gitView.integrate.moving': 'Moving…',
'gitView.integrate.newSession': 'New session',
'gitView.integrate.noActiveSession': 'No active session',
'gitView.integrate.noActiveSessionDescription': 'Open or create a session to continue.',
'gitView.integrate.noCommitsToMove': 'No commits to move.',
'gitView.integrate.noCommitsToMoveToast': 'No commits to move',
'gitView.integrate.previewUnavailable': 'Preview unavailable',
'gitView.integrate.showAll': 'Show all',
'gitView.integrate.showLess': 'Show less',
'gitView.integrate.showingFirstCommits': 'Showing first commits',
'gitView.integrate.target': 'Target',
'gitView.integrate.title': 'Re-integrate commits',
'gitView.integrate.toMoveCount': 'To move',
'gitView.operation.abort': 'Abort',
'gitView.operation.continue': 'Continue',
'gitView.operation.inProgressTitle': '{operation} in progress',
'gitView.operation.merge': 'Merge',
'gitView.operation.mergeInProgressWithHead': 'Merging {head}',
'gitView.operation.mergingMessage': 'Merging: {message}',
'gitView.operation.rebase': 'Rebase',
'gitView.operation.rebaseInProgress': 'Rebase in progress',
'gitView.operation.rebasingOnto': 'Rebasing {headName} onto {onto}',
'gitView.operation.resolveConflictsHint': 'Resolve conflicts, then continue the operation.',
'gitView.operation.resolveWithAi': 'Resolve with AI',
'gitView.stash.confirmButton': '{operation}',
'gitView.stash.description': 'Stash your local changes before starting the {operation}.',
'gitView.stash.mergeWith': 'with',
'gitView.stash.rebaseOnto': 'onto',
'gitView.stash.restoreAfterOperation': 'Restore stashed changes after {operation}',
'gitView.stash.restoreAria': 'Restore stashed changes after operation',
'gitView.stash.stepRestore': 'Restore your stashed changes',
'gitView.stash.stepStash': 'Stash your uncommitted changes',
'gitView.stash.thisWill': 'This will:',
'gitView.stash.title': 'Uncommitted Changes',
'gitView.stashes.actions.apply': 'Apply',
'gitView.stashes.actions.drop': 'Drop',
'gitView.stashes.actions.pop': 'Pop',
'gitView.stashes.actions.stashCurrent': 'Stash current changes',
'gitView.stashes.actions.stashCurrentWithCount': 'Stash {count} files',
'gitView.stashes.confirm.drop': 'Drop {ref}?',
'gitView.stashes.description': 'Save, restore, and clean up Git stashes for this repository.',
'gitView.stashes.empty.list': 'No stashes yet.',
'gitView.stashes.empty.search': 'No matching stashes.',
'gitView.stashes.includeUntrackedHint': 'Untracked files are included automatically.',
'gitView.stashes.fileCount': '{count} files',
'gitView.stashes.fileCountLoading': 'counting files...',
'gitView.stashes.itemNumber': '#{number}',
'gitView.stashes.latestLabel': 'Latest',
'gitView.stashes.messagePlaceholder': 'Stash name',
'gitView.stashes.searchPlaceholder': 'Search stashes',
'gitView.stashes.title': 'Stashes',
'gitView.stashes.toast.applyFailed': 'Failed to apply stash',
'gitView.stashes.toast.applySuccess': 'Stash applied',
'gitView.stashes.toast.createFailed': 'Failed to stash changes',
'gitView.stashes.toast.created': 'Changes stashed',
'gitView.stashes.toast.dropFailed': 'Failed to drop stash',
'gitView.stashes.toast.dropSuccess': 'Stash dropped',
'gitView.stashes.toast.loadFailed': 'Failed to load stashes',
'gitView.stashes.toast.noChanges': 'No local changes to stash',
'gitView.stashes.toast.popFailed': 'Failed to pop stash',
'gitView.stashes.toast.popSuccess': 'Stash popped',
'gitView.stashes.untitled': 'Untitled stash',
'gitView.sync.fetch': 'Fetch',
'gitView.sync.fetchFromRemote': 'Fetch from {name}',
'gitView.sync.fetchTooltip': 'Fetch from remote',
'gitView.sync.commitOrStashTooltip': 'Commit or stash your changes before syncing',
'gitView.sync.moreActionsAria': 'More sync actions',
'gitView.sync.noRemoteTooltip': 'No remotes configured',
'gitView.sync.pull': 'Pull',
'gitView.sync.pullTooltip': 'Pull changes',
'gitView.sync.pullTooltipBehind': 'Pull changes ({count} behind)',
'gitView.sync.push': 'Push',
'gitView.sync.pushTooltip': 'Push changes',
'gitView.sync.pushTooltipAhead': 'Push changes ({count} ahead)',
'gitView.sync.sync': 'sync',
'gitView.sync.syncChanges': 'Sync Changes',
'gitView.sync.syncChangesTooltip': 'Sync Changes ({behind} down, {ahead} up)',
'gitView.sync.syncChangesWithCounts': 'Sync Changes {behind}↓ {ahead}↑',
'gitView.sync.syncCounts': '{behind}↓ {ahead}↑',
'gitView.branch.actionsUnavailable': 'Branch actions unavailable in this repository state',
'gitView.conflict.noDetailsAvailable': 'No conflict details available',
'gitView.empty.notGitRepository': 'This directory is not a Git repository',
'gitView.empty.notGitRepositoryDescription': 'Initialize Git in this directory or open a repository.',
'gitView.empty.selectSessionOrDirectory': 'Select a session or directory to view Git status',
'gitView.empty.worktreeFeaturesUnavailable': 'Worktree features are unavailable in this workspace mode.',
'gitView.empty.worktreeSetupDescription': 'Finishing worktree setup and preparing repository state.',
'gitView.empty.worktreeSetupInProgress': 'Worktree setup in progress',
'worktree.bootstrap.toast.failed': 'Worktree setup failed',
'worktree.bootstrap.toast.failedDescription': 'The worktree was created, but background setup did not finish.',
'worktree.bootstrap.toast.timeoutDescription': 'The worktree was created, but background setup timed out.',
'gitView.gitmoji.empty': 'No gitmoji found',
'gitView.gitmoji.searchPlaceholder': 'Search gitmoji...',
'gitView.gitmoji.title': 'Insert gitmoji',
'gitView.history.dialogDescription': 'Browse recent commits and inspect changed files.',
'gitView.loading.checkingRepository': 'Checking repository...',
'gitView.loading.loading': 'Loading...',
'gitView.pr.actions.add': 'Add',
'gitView.pr.actions.cancelEditing': 'Cancel editing',
'gitView.pr.actions.cancelEditingAria': 'Cancel PR editing',
'gitView.pr.actions.createPr': 'Create PR',
'gitView.pr.actions.edit': 'Edit',
'gitView.pr.actions.editPr': 'Edit PR',
'gitView.pr.actions.editPrAria': 'Edit pull request',
'gitView.pr.actions.hide': 'Hide',
'gitView.pr.actions.markReady': 'Mark ready',
'gitView.pr.actions.markReadyAria': 'Mark pull request ready for review',
'gitView.pr.actions.mergePr': 'Merge PR',
'gitView.pr.actions.mergePrAria': 'Merge pull request',
'gitView.pr.actions.openChecks': 'Open checks',
'gitView.pr.actions.openChecksAria': 'Open failed checks',
'gitView.pr.actions.openComments': 'Open comments',
'gitView.pr.actions.openCommentsAria': 'Open pull request comments',
'gitView.pr.actions.openOnGitHub': 'Open on GitHub',
'gitView.pr.actions.openOnGitHubAria': 'Open pull request on GitHub',
'gitView.pr.actions.openSettings': 'Open settings',
'gitView.pr.actions.repo': 'Repository',
'gitView.pr.actions.resolveFailedChecks': 'Resolve failed checks',
'gitView.pr.actions.resolveFailedChecksAria': 'Send failed checks to agent',
'gitView.pr.actions.savePr': 'Save PR',
'gitView.pr.actions.savePrAria': 'Save pull request changes',
'gitView.pr.actions.sendCommentToAgent': 'Send comment to agent',
'gitView.pr.actions.sendCommentToAgentAria': 'Send this comment to agent',
'gitView.pr.actions.sendToAgent': 'Send to agent',
'gitView.pr.actions.shareComments': 'Share comments',
'gitView.pr.actions.shareCommentsAria': 'Send pull request comments to agent',
'gitView.pr.actions.toggleDraftAria': 'Toggle draft state',
'gitView.pr.actions.refresh': 'Refresh PR status',
'gitView.pr.actions.refreshAria': 'Refresh pull request status',
'gitView.pr.additionalContext.added': 'Added',
'gitView.pr.additionalContext.hint': 'Add extra context for better review quality.',
'gitView.pr.additionalContext.optional': 'Optional',
'gitView.pr.additionalContext.title': 'Additional context',
'gitView.pr.checkDetails.empty': 'No check details available',
'gitView.pr.checkDetails.title': 'Failed check details',
'gitView.pr.checkingStatus': 'Checking pull request status...',
'gitView.pr.checks.label': 'checks',
'gitView.pr.checks.completedLabel': 'Completed',
'gitView.pr.checks.conclusionLabel': 'Conclusion',
'gitView.pr.checks.startedLabel': 'Started',
'gitView.pr.checks.statusLabel': 'Status',
'gitView.pr.checks.stepLabel': 'Step',
'gitView.pr.checks.steps': 'Steps',
'gitView.pr.comments.empty': 'No comments found',
'gitView.pr.comments.generalContext': 'General comment',
'gitView.pr.comments.reviewContext': 'Review comment',
'gitView.pr.comments.title': 'Comments',
'gitView.pr.comments.unknownAuthor': 'Unknown author',
'gitView.pr.createTitle': 'Create pull request',
'gitView.pr.draftMustBeReady': 'Draft PR must be marked ready before merge.',
'gitView.pr.field.baseBranch': 'Base branch',
'gitView.pr.field.description': 'Description',
'gitView.pr.field.draft': 'Draft',
'gitView.pr.field.title': 'Title',
'gitView.pr.githubNotConnected': 'GitHub is not connected',
'gitView.pr.loadingDescription': 'Loading description...',
'gitView.pr.mergeMethod.merge': 'Create a merge commit',
'gitView.pr.mergeMethod.rebase': 'Rebase and merge',
'gitView.pr.mergeMethod.squash': 'Squash and merge',
'gitView.pr.noDescription': 'No description',
'gitView.pr.noMergePermission': 'You do not have permission to merge this pull request.',
'gitView.pr.notMergeable': 'Not mergeable',
'gitView.pr.numberLabel': 'PR #{number}',
'gitView.pr.placeholder.additionalContext': 'Any constraints, rollout notes, or reviewer context...',
'gitView.pr.placeholder.description': 'Describe the change...',
'gitView.pr.placeholder.main': 'Summarize your pull request',
'gitView.pr.placeholder.selectBaseBranch': 'Select base branch',
'gitView.pr.placeholder.title': 'Pull request title',
'gitView.pr.placeholder.whatChanged': 'What changed and why?',
'gitView.pr.statusUnavailable': 'Pull request status unavailable',
'gitView.pr.toast.baseBranchRequired': 'Select a base branch',
'gitView.pr.toast.baseMustDifferFromHead': 'Base branch must differ from current branch',
'gitView.pr.toast.createPrFailed': 'Failed to create pull request',
'gitView.pr.toast.generateDescriptionFailed': 'Failed to generate pull request description',
'gitView.pr.toast.githubApiUnavailable': 'GitHub API is unavailable',
'gitView.pr.toast.loadCheckDetailsFailed': 'Failed to load check details',
'gitView.pr.toast.loadChecksFailed': 'Failed to load pull request checks',
'gitView.pr.toast.loadCommentsFailed': 'Failed to load comments',
'gitView.pr.toast.loadPrCommentsFailed': 'Failed to load pull request comments',
'gitView.pr.toast.markReadyFailed': 'Failed to mark pull request ready',
'gitView.pr.toast.markedReady': 'Pull request marked ready for review',
'gitView.pr.toast.mergeFailed': 'Failed to merge pull request',
'gitView.pr.toast.noActiveSession': 'No active chat session',
'gitView.pr.toast.noActiveSessionDescription': 'Open or create a chat session to send context to an agent.',
'gitView.pr.toast.noFailedChecks': 'No failed checks found',
'gitView.pr.toast.noModelSelected': 'Select a model first',
'gitView.pr.toast.noPrComments': 'No pull request comments found',
'gitView.pr.toast.prCreated': 'Pull request created',
'gitView.pr.toast.prMerged': 'Pull request merged',
'gitView.pr.toast.prNotMerged': 'Pull request was not merged',
'gitView.pr.toast.prUpdated': 'Pull request updated',
'gitView.pr.toast.sendMessageFailed': 'Failed to send message to agent',
'gitView.pr.toast.titleRequired': 'Title is required',
'gitView.pr.toast.updatePrFailed': 'Failed to update pull request',
'gitView.pullRequest.createHint': 'Create and manage pull requests from this branch.',
'gitView.pullRequest.availableOnFeatureBranches': 'Available when the current branch can open a pull request.',
'gitView.pullRequest.title': 'Pull request',
'gitView.tabs.commit': 'Commit',
'gitView.tabs.pr': 'PR',
'gitView.tabs.update': 'Update',
'gitView.tabs.worktree': 'Worktree',
'gitView.toast.abortOperationFailed': 'Failed to abort operation',
'gitView.toast.appliedIdentity': 'Applied identity: {name}',
'gitView.toast.applyIdentityFailed': 'Failed to apply identity',
'gitView.toast.branchCreatedLocally': 'Branch created locally, but failed to set upstream.',
'gitView.toast.cannotCheckout': 'Cannot checkout branch: {reason}',
'gitView.toast.cannotCreateBranch': 'Cannot create branch: {reason}',
'gitView.toast.cannotRemoveOriginRemote': 'Cannot remove the origin remote',
'gitView.toast.cannotRenameBranch': 'Cannot rename branch: {reason}',
'gitView.toast.checkedOut': 'Checked out {name}',
'gitView.toast.checkoutFailed': 'Failed to checkout {name}',
'gitView.toast.commitCreated': 'Commit created',
'gitView.toast.commitHashCopied': 'Commit hash copied',
'gitView.toast.continueOperationFailed': 'Failed to continue operation',
'gitView.toast.copyFailed': 'Failed to copy',
'gitView.toast.createBranchFailed': 'Failed to create branch',
'gitView.toast.createCommitFailed': 'Failed to create commit',
'gitView.toast.createdBranch': 'Created branch {name}',
'gitView.toast.enterCommitMessage': 'Enter a commit message',
'gitView.toast.fetchedFromRemote': 'Fetched from {name}',
'gitView.toast.generateCommitMessageFailed': 'Failed to generate commit message',
'gitView.toast.mergeAborted': 'Merge aborted',
'gitView.toast.mergeCompleted': 'Merge completed',
'gitView.toast.mergeConflictsDetected': 'Merge conflicts detected',
'gitView.toast.mergedIntoBranch': 'Merged {branch} into {currentBranch}',
'gitView.toast.pulledFilesPlural': 'Pulled {count} files from {name}',
'gitView.toast.pulledFilesSingle': 'Pulled {count} file from {name}',
'gitView.toast.pushedToUpstream': 'Pushed to {name}',
'gitView.toast.commitOrStashBeforeSync': 'Commit or stash your changes before syncing',
'gitView.toast.alreadyUpToDate': 'Already up to date',
'gitView.toast.syncedPulledPluralAndPushed': 'Pulled {count} files from {name} and pushed to upstream',
'gitView.toast.syncedPulledSingleAndPushed': 'Pulled {count} file from {name} and pushed to upstream',
'gitView.toast.syncedChanges': 'Synced changes',
'gitView.toast.rebaseAborted': 'Rebase aborted',
'gitView.toast.rebaseConflictsDetected': 'Rebase conflicts detected',
'gitView.toast.rebaseStepCompleted': 'Rebase step completed',
'gitView.toast.rebasedOntoBranch': 'Rebased {currentBranch} onto {branch}',
'gitView.toast.refreshRepositoryFailed': 'Failed to refresh repository',
'gitView.toast.remoteNameRequired': 'Remote name is required',
'gitView.toast.removedRemote': 'Removed remote {name}',
'gitView.toast.renameBranchFailed': 'Failed to rename {oldName} to {newName}',
'gitView.toast.renamedBranch': 'Renamed {oldName} to {newName}',
'gitView.toast.restoreStashFailed': 'Failed to restore stash',
'gitView.toast.restoreStashManually': 'Stash restored manually required',
'gitView.toast.revertFailed': 'Failed to revert changes',
'gitView.toast.revertedFile': 'Reverted {path}',
'gitView.toast.revertedFilesPlural': 'Reverted {count} files',
'gitView.toast.revertedFilesSingle': 'Reverted {count} file',
'gitView.toast.revertedSomePlural': 'Reverted {success} files, {failed} failed',
'gitView.toast.revertedSomeSingle': 'Reverted {success} file, {failed} failed',
'gitView.toast.stageFileFailed': 'Failed to stage changes',
'gitView.toast.stageFileToCommit': 'Stage at least one file to commit',
'gitView.toast.stageFileToDescribe': 'Stage at least one file to describe',
'gitView.toast.selectFileToCommit': 'Select at least one file to commit',
'gitView.toast.selectFileToDescribe': 'Select at least one file to describe',
'gitView.toast.stashedRestored': 'Stashed changes restored',
'gitView.toast.syncActionFailed': '{action} failed',
'gitView.toast.unstageFileFailed': 'Failed to unstage changes',
'gitView.toast.upstreamSet': 'Set upstream for {branch} to {remote}',
'gitView.worktree.availableInWorktreeMode': 'Available only in worktree mode',
'contextPanel.mode.chat': 'Chat',
'contextPanel.mode.files': 'Files',
'contextPanel.mode.diff': 'Diff',
'contextPanel.mode.stagedDiff': 'Staged Diff',
'contextPanel.mode.workingDiff': 'Working Diff',
'contextPanel.mode.plan': 'Plan',
'contextPanel.mode.context': 'Context',
'contextPanel.mode.preview': 'Preview',
'contextPanel.mode.browser': 'Browser',
'contextPanel.browser.open': 'Open browser panel',
'contextPanel.browser.addressAria': 'Browser address',
'contextPanel.browser.empty': 'Web browser',
'contextPanel.browser.emptyHint': 'Enter an address above to start browsing the web',
'contextPanel.browser.inspectUnavailable': 'This page cannot be inspected from the browser panel.',
'contextPanel.browser.trustNotice': 'Pages opened here run with full access to OpenChamber — needed for inspect and screenshots. Only open sites you trust: a malicious page could read your data or act on your behalf.',
'contextPanel.tab.closeTabAria': 'Close {label} tab',
'contextPanel.actions.collapsePanel': 'Collapse panel',
'contextPanel.actions.expandPanel': 'Expand panel',
'contextPanel.actions.closePanel': 'Close panel',
'contextPanel.actions.resizePanelAria': 'Resize context panel',
'contextPanel.iframe.sessionChatTitle': 'Session chat {sessionID}',
'contextPanel.preview.actions.reload': 'Reload preview',
'contextPanel.preview.actions.openExternal': 'Open in browser',
'contextPanel.preview.actions.retry': 'Retry',
'contextPanel.preview.iframeTitle': 'Preview',
'contextPanel.preview.invalidUrl': 'Preview needs a valid http(s) URL.',
'contextPanel.preview.empty': 'No preview URL',
'contextPanel.preview.loading': 'Connecting preview proxy...',
'contextPanel.preview.proxyError': 'Could not start preview proxy.',
'contextPanel.preview.upstreamUnreachable': 'Dev server is not responding.',
'contextPanel.preview.upstreamUnreachableHint': 'Make sure your dev server is still running, then retry.',
'contextPanel.preview.startingServer': 'Starting dev server...',
'contextPanel.preview.startingServerHint': 'Waiting for the server to accept connections.',
'contextPanel.preview.title': 'Preview',
'contextPanel.preview.description': 'Use Project Actions or a terminal Preview button to open a preview.',
'contextPanel.preview.startPreview': 'Start Preview',
'contextPanel.preview.starting': 'Starting...',
'contextPanel.preview.noDevServer': 'No dev server command found. Configure a project action or add a "dev" script to package.json.',
'contextPanel.preview.startFailed': 'Failed to start preview server.',
'contextPanel.preview.serverExited': 'Dev server exited unexpectedly.',
'contextPanel.preview.noUrlDetected': 'Dev server started, but no URL was detected in its output. Open the Preview terminal tab to check logs.',
'contextPanel.preview.serverExitedWithLog': 'Dev server exited unexpectedly. Last output:\n\n{log}',
'contextPanel.preview.noUrlDetectedWithLog': 'Dev server did not become reachable. Last output:\n\n{log}',
'contextPanel.preview.console.open': 'Open preview console',
'contextPanel.preview.console.waiting': 'Waiting for preview console',
'contextPanel.preview.console.title': 'Preview console',
'contextPanel.preview.console.attach': 'Attach',
'contextPanel.preview.console.copy': 'Copy',
'contextPanel.preview.console.clear': 'Clear',
'contextPanel.preview.console.empty': 'No preview console events yet.',
'contextPanel.preview.console.noFilteredEvents': 'No events match this filter.',
'contextPanel.preview.console.runtimeError': 'Runtime error',
'contextPanel.preview.console.copied': 'Preview console copied',
'contextPanel.preview.console.copyFailed': 'Failed to copy preview console',
'contextPanel.preview.console.attached': 'Preview console attached to chat',
'contextPanel.preview.console.attachNoSession': 'Open a chat session before attaching preview logs',
'contextPanel.preview.console.attachAnnotation': 'These are browser console logs from the dev server running for this project.',
'contextPanel.preview.inspect.toggle': 'Inspect preview element',
'contextPanel.preview.inspect.attached': 'Preview annotation attached to chat',
'contextPanel.preview.inspect.attachNoSession': 'Open a chat session before attaching preview annotations',
'contextPanel.preview.inspect.attachAnnotation': 'This is a selected DOM element from the in-app preview.',
'contextPanel.preview.inspect.attachAnnotationWithScreenshot': 'This is a selected DOM element from the in-app preview. A screenshot of the visible preview area with the selected element highlighted is attached.',
'contextPanel.preview.console.filter.all': 'All',
'contextPanel.preview.console.filter.errors': 'Errors',
'contextPanel.preview.console.filter.warnings': 'Warnings',
'contextPanel.preview.console.filter.logs': 'Logs',
'terminalView.preview.open': 'Preview',
'terminalView.preview.openTitle': 'Open preview pane',
'sidebarFilesTree.menu.rename': 'Rename',
'sidebarFilesTree.menu.copyPath': 'Copy Path',
'sidebarFilesTree.menu.save': 'Save',
'sidebarFilesTree.menu.newFile': 'New File',
'sidebarFilesTree.menu.newFolder': 'New Folder',
'sidebarFilesTree.menu.delete': 'Delete',
'sidebarFilesTree.toast.pathCopied': 'Path copied',
'sidebarFilesTree.toast.copyFailed': 'Copy failed',
'sidebarFilesTree.toast.revealFailed': 'Failed to reveal path',
'sidebarFilesTree.toast.filenameRequired': 'Filename is required',
'sidebarFilesTree.toast.writeNotSupported': 'Write not supported',
'sidebarFilesTree.toast.fileCreated': 'File created',
'sidebarFilesTree.toast.operationFailed': 'Operation failed',
'sidebarFilesTree.toast.folderNameRequired': 'Folder name is required',
'sidebarFilesTree.toast.folderCreated': 'Folder created',
'sidebarFilesTree.toast.nameRequired': 'Name is required',
'sidebarFilesTree.toast.renameNotSupported': 'Rename not supported',
'sidebarFilesTree.toast.renamedSuccessfully': 'Renamed successfully',
'sidebarFilesTree.toast.deleteNotSupported': 'Delete not supported',
'sidebarFilesTree.toast.deletedSuccessfully': 'Deleted successfully',
'sidebarFilesTree.search.placeholder': 'Search files...',
'sidebarFilesTree.search.clearAria': 'Clear search',
'sidebarFilesTree.actions.newFileTitle': 'New File',
'sidebarFilesTree.actions.newFolderTitle': 'New Folder',
'sidebarFilesTree.actions.refreshTitle': 'Refresh',
'sidebarFilesTree.actions.fileMenuTitle': 'File menu',
'sidebarFilesTree.state.searching': 'Searching...',
'sidebarFilesTree.state.loading': 'Loading...',
'sidebarFilesTree.dialog.createFile.title': 'Create File',
'sidebarFilesTree.dialog.createFolder.title': 'Create Folder',
'sidebarFilesTree.dialog.rename.title': 'Rename',
'sidebarFilesTree.dialog.delete.title': 'Delete',
'sidebarFilesTree.dialog.createFile.description': 'Create a new file in {path}',
'sidebarFilesTree.dialog.createFolder.description': 'Create a new folder in {path}',
'sidebarFilesTree.dialog.rename.description': 'Rename {name}',
'sidebarFilesTree.dialog.delete.description': 'Are you sure you want to delete {name}? This action cannot be undone.',
'sidebarFilesTree.dialog.rootFallback': 'root',
'sidebarFilesTree.dialog.rename.placeholder': 'New name',
'sidebarFilesTree.dialog.namePlaceholder': 'Name',
'sidebarFilesTree.dialog.cancel': 'Cancel',
'sidebarFilesTree.dialog.confirm': 'Confirm',
'sidebarFilesTree.dialog.delete.confirm': 'Delete',
'filesView.dialog.createFile.title': 'Create File',
'filesView.dialog.createFolder.title': 'Create Folder',
'filesView.dialog.rename.title': 'Rename',
'filesView.dialog.delete.title': 'Delete',
'filesView.dialog.createFile.description': 'Create a new file in {path}',
'filesView.dialog.createFolder.description': 'Create a new folder in {path}',
'filesView.dialog.rename.description': 'Rename {name}',
'filesView.dialog.delete.description': 'Are you sure you want to delete {name}? This action cannot be undone.',
'filesView.dialog.rootFallback': 'root',
'filesView.dialog.rename.placeholder': 'New name',
'filesView.dialog.namePlaceholder': 'Name',
'filesView.dialog.cancel': 'Cancel',
'filesView.dialog.confirm': 'Confirm',
'filesView.dialog.delete.confirm': 'Delete',
'filesView.editor.saving': 'Saving...',
'filesView.editor.saved': 'Saved',
'filesView.editor.autoSaveOn': 'Auto-save on',
'filesView.editor.manualSave': 'Manual save',
'filesView.editor.saveNowTitle': 'Save now ({shortcut}) - auto-saves after 1.5s',
'filesView.editor.saveNowManualTitle': 'Save now ({shortcut})',
'filesView.editor.saveAria': 'Save ({shortcut})',
'filesView.editor.openInDesktopApp': 'Open in desktop app',
'filesView.editor.refreshApps': 'Refresh Apps',
'filesView.editor.disableLineWrap': 'Disable line wrap',
'filesView.editor.enableLineWrap': 'Enable line wrap',
'filesView.editor.findInFile': 'Find in file',
'filesView.editor.goToLine': 'Go to line',
'filesView.editor.switchToTextView': 'Switch to Text View',
'filesView.editor.switchToTreeView': 'Switch to Tree View',
'filesView.toast.copyFailed': 'Copy failed',
'filesView.toast.openInAppFailed': 'Failed to open in {app}',
'filesView.toast.savingNotSupported': 'Saving not supported',
'filesView.toast.writeFileFailed': 'Failed to write file',
'filesView.toast.saveFailed': 'Save failed',
'filesView.editor.copyFileContents': 'Copy file contents',
'filesView.editor.copyFilePathTitle': 'Copy file path ({path})',
'filesView.editor.saveFile': 'Save file',
'filesView.editor.exitFullscreen': 'Exit fullscreen',
'filesView.editor.fullscreen': 'Fullscreen',
'filesView.unsaved.title': 'Unsaved changes',
'filesView.unsaved.description': 'Save your edits before continuing?',
'filesView.unsaved.saveChanges': 'Save changes',
'filesView.unsaved.discard': 'Discard',
'filesView.editor.back': 'Back',
'filesView.editor.openFilesAria': 'Open files',
'filesView.editor.closeFileAria': 'Close {name}',
'filesView.editor.selectFile': 'Select a file',
'filesView.editor.showControlsAria': 'Show editor controls',
'filesView.editor.controlsTitle': 'Editor controls',
'filesView.editor.pickFileFromTree': 'Pick a file from the tree.',
'filesView.state.loading': 'Loading...',
'filesView.state.openingFileAtChange': 'Opening file at change...',
'filesView.tree.search.placeholder': 'Search files...',
'filesView.tree.search.clearAria': 'Clear search',
'filesView.tree.search.searching': 'Searching...',
'filesView.tree.actions.newFileTitle': 'New File',
'filesView.tree.actions.newFolderTitle': 'New Folder',
'filesView.tree.actions.refreshTitle': 'Refresh',
'filesView.editor.imageAltFallback': 'Image',
'filesView.error.jsonViewerUnavailable': 'JSON viewer unavailable',
'filesView.error.switchToTextMode': 'Switch to text mode to view raw content.',
'filesView.warning.largeFilePreviewLimited': 'This file is large ({sizeKb}KB). Preview may be limited.',
'filesView.error.previewUnavailable': 'Preview unavailable',
'filesView.error.switchToEditMode': 'Switch to edit mode to fix the issue.',
'filesView.error.readFileFailed': 'Failed to read file',
'filesView.editor.htmlPreviewTitle': 'HTML Preview',
'contextUsage.aria.label': 'Context usage',
'contextUsage.mobile.title': 'Context Usage',
'contextUsage.mobile.usedTokens': 'Used tokens',
'contextUsage.mobile.contextLimit': 'Context limit',
'contextUsage.mobile.outputLimit': 'Output limit',
'contextUsage.mobile.usage': 'Usage',
'contextUsage.tooltip.usedTokens': 'Used tokens: {tokens}',
'contextUsage.tooltip.contextLimit': 'Context limit: {tokens}',
'contextUsage.tooltip.outputLimit': 'Output limit: {tokens}',
'contextSidebar.session.untitled': 'Untitled Session',
'contextSidebar.empty.openSession': 'Open a session to inspect context.',
'contextSidebar.section.context': 'Context',
'contextSidebar.section.lastAssistantMessage': 'Last Assistant Message',
'contextSidebar.section.rawMessages': 'Raw Messages',
'contextSidebar.context.percentUsed': '{percent}% used',
'contextSidebar.breakdown.user': 'User',
'contextSidebar.breakdown.assistant': 'Assistant',
'contextSidebar.breakdown.toolCalls': 'Tool Calls',
'contextSidebar.breakdown.other': 'Other',
'contextSidebar.stats.messages': 'Messages',
'contextSidebar.stats.user': 'User',
'contextSidebar.stats.assistant': 'Assistant',
'contextSidebar.stats.cost': 'Cost',
'contextSidebar.tokens.input': 'Input',
'contextSidebar.tokens.output': 'Output',
'contextSidebar.tokens.reasoning': 'Reasoning',
'contextSidebar.tokens.cacheRead': 'Cache Read',
'contextSidebar.tokens.cacheWrite': 'Cache Write',
'contextSidebar.actions.copyJson': 'Copy JSON',
'contextSidebar.actions.copy': 'Copy',
'contextSidebar.actions.copied': 'Copied',
'planView.file.defaultName': 'plan',
'planView.title.default': 'Plan',
'planView.error.saveFailed': 'Save failed',
'planView.error.previewUnavailable': 'Preview unavailable',
'planView.error.switchToEditMode': 'Switch to edit mode to fix the issue.',
'planView.error.writeFailed': 'Write failed',
'planView.error.writePlanFileFailed': 'Failed to write plan file ({status})',
'planView.actions.improvePlanAria': 'Improve plan',
'planView.actions.improve': 'Improve',
'planView.actions.implementPlanAria': 'Implement plan',
'planView.actions.implement': 'Implement',
'planView.actions.sendToNewSession': 'Send to new session',
'planView.actions.sendToNewWorktreeSession': 'Send to new worktree session',
'planView.actions.copyPlanContents': 'Copy plan contents',
'planView.state.loading': 'Loading...',
'diffView.binary.unavailable': 'Content of this file cannot be viewed.',
'diffView.change.untracked': 'Untracked file',
'diffView.change.new': 'New file',
'diffView.change.deleted': 'Deleted file',
'diffView.change.renamed': 'Renamed file',
'diffView.change.copied': 'Copied file',
'diffView.change.modified': 'Modified file',
'diffView.mode.single.label': 'Single file',
'diffView.mode.single.description': 'Show one file at a time',
'diffView.mode.stacked.label': 'All files',
'diffView.mode.stacked.description': 'Stack all modified files together',
'diffView.selector.selectFile': 'Select file',
'diffView.selector.viewMode': 'View mode',
'diffView.image.original': 'Original',
'diffView.image.modified': 'Modified',
'diffView.image.new': 'New',
'diffView.image.originalAlt': 'Original: {path}',
'diffView.image.modifiedAlt': 'Modified: {path}',
'diffView.section.files': 'Files',
'diffView.state.selectSessionDirectory': 'Select a session directory to view diffs',
'diffView.state.loadingRepositoryStatus': 'Loading repository status...',
'diffView.state.notGitRepository': 'Not a git repository. Use the Git tab to initialize or change directories.',
'diffView.state.cleanWorkingTree': 'Working tree clean, no changes to display',
'diffView.state.failedToLoadDiff': 'Failed to load diff',
'diffView.state.loadingDiff': 'Loading diff...',
'diffView.state.loadingChanges': 'Loading changes...',
'diffView.summary.changedFilesSingle': '{count} file changed',
'diffView.summary.changedFilesPlural': '{count} files changed',
'diffView.actions.retry': 'Retry',
'diffView.actions.disableLineWrap': 'Disable line wrap',
'diffView.actions.enableLineWrap': 'Enable line wrap',
'diffView.actions.openFileInEditorAtChange': 'Open this file in editor at change',
'diffView.actions.openFileAtFirstChangedLine': 'Open this file at first changed line',
'rightSidebar.contextNotesTodo.plan.defaultTitle': 'Plan',
'rightSidebar.contextNotesTodo.empty.selectProject': 'Select a project to add notes and todos.',
'rightSidebar.contextNotesTodo.notes.title': 'Quick notes - {project}',
'rightSidebar.contextNotesTodo.notes.placeholder': 'Capture context, reminders, or links',
'rightSidebar.contextNotesTodo.todo.title': 'Todo',
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count} item',
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count} items',
'rightSidebar.contextNotesTodo.todo.clearCompleted': 'Clear completed',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Add a todo',
'rightSidebar.contextNotesTodo.todo.addAria': 'Add todo',
'rightSidebar.contextNotesTodo.todo.empty': 'No todos yet. Add a small checklist for this project.',
'rightSidebar.contextNotesTodo.todo.actions.markComplete': 'Mark "{text}" complete',
'rightSidebar.contextNotesTodo.todo.actions.collapse': 'Collapse todo "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.expand': 'Expand todo "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.delete': 'Delete "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.send': 'Send "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.reorder': 'Reorder "{text}"',
'rightSidebar.contextNotesTodo.todo.resizeAria': 'Resize todo list',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': 'Send to current session',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': 'Send to new session',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': 'Send to new worktree session',
'rightSidebar.contextNotesTodo.plans.title': 'Plans',
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} file',
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} files',
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Import plan from file',
'rightSidebar.contextNotesTodo.plans.empty': 'No saved plans yet.',
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Delete plan',
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Delete plan "{title}"',
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': 'Send to new session',
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': 'Send to new worktree',
'rightSidebar.contextNotesTodo.sendDialog.variant.default': 'Default',
'rightSidebar.contextNotesTodo.sendDialog.actions.cancel': 'Cancel',
'rightSidebar.contextNotesTodo.sendDialog.actions.send': 'Send',
'rightSidebar.contextNotesTodo.sendDialog.actions.sending': 'Sending',
'rightSidebar.contextNotesTodo.toast.saveNotesFailed': 'Failed to save project notes',
'rightSidebar.contextNotesTodo.toast.loadNotesFailed': 'Failed to load project notes',
'rightSidebar.contextNotesTodo.toast.noActiveSession': 'No active session selected',
'rightSidebar.contextNotesTodo.toast.sentToCurrentSession': 'Todo sent to current session',
'rightSidebar.contextNotesTodo.toast.worktreeRequiresGitRepo': 'Worktree actions are only available for Git repositories',
'rightSidebar.contextNotesTodo.toast.createSessionFailed': 'Failed to create session',
'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'Todo sent to new session',
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'Todo sent to new worktree session',
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Failed to send todo',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Failed to delete plan',
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Plan file is empty',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Failed to import plan',
'rightSidebar.contextNotesTodo.toast.planImported': 'Plan imported',
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': 'Failed to read plan file',
'inlineComment.range.lines': 'Lines {start}-{end}',
'inlineComment.input.placeholder': 'Add a comment... (Cmd+Enter to save)',
'inlineComment.input.placeholderShort': 'Add a comment...',
'inlineComment.actions.cancel': 'Cancel',
'inlineComment.actions.save': 'Save',
'inlineComment.actions.comment': 'Comment',
'inlineComment.actions.showLess': 'Show less',
'inlineComment.actions.showMore': 'Show more',
'inlineComment.actions.editComment': 'Edit comment',
'inlineComment.actions.deleteComment': 'Delete comment',
'inlineComment.toast.selectSessionToSave': 'Select a session to save comment',
'header.github.connectedWithLogin': 'GitHub: {login}',
'header.github.connected': 'GitHub connected',
'header.github.avatarWithLogin': '{login} avatar',
'header.github.avatar': 'GitHub avatar',
'header.github.accountsTitle': 'GitHub Accounts',
'header.services.openWithCurrent': 'Open instance, usage and MCP (current: {current})',
'header.services.open': 'Open services, usage and MCP',
'header.services.tooltip.currentInstanceWithShortcuts': 'Current instance: {current} ({toggle}; next tab {nextTab})',
'header.services.tooltip.servicesWithShortcuts': 'Services ({toggle}; next tab {nextTab})',
'header.services.title': 'Services',
'header.services.viewAria': 'View services',
'header.services.closeAria': 'Close services',
'header.services.rateLimits': 'Rate limits',
'header.services.refreshRateLimitsAria': 'Refresh rate limits',
'header.services.noRateLimits': 'No rate limits available.',
'header.services.noRateLimitsReported': 'No rate limits reported.',
'header.services.remoteUpdate.title': 'Remote instance update',
'header.services.remoteUpdate.checking': 'Looking for updates...',
'header.services.remoteUpdate.upToDate': 'This instance is up to date.',
'header.services.remoteUpdate.available': 'Version {version} is available for this instance.',
'header.services.remoteUpdate.error': 'Failed to check remote instance updates',
'header.services.remoteUpdate.actions.open': 'Update',
'header.services.used': 'Used',
'header.services.remaining': 'Remaining',
'header.services.modelFamily.other': 'Other',
'header.services.shutdownDev': 'Stop OpenChamber',
'header.actions.openPlanAria': 'Open plan',
'header.actions.planWithShortcut': 'Plan ({shortcut})',
'header.actions.terminalPanelWithShortcut': 'Terminal panel ({shortcut})',
'header.actions.toggleTerminalPanelAria': 'Toggle terminal panel',
'terminalView.stream.processExitedMessage': '\r\n[Process exited{exitCodeSegment}{signalSegment}]\r\n',
'terminalView.stream.processExitedWithCode': ' with code {exitCode}',
'terminalView.stream.processExitedWithSignal': ' (signal {signal})',
'terminalView.error.sessionEnded': 'Terminal session ended',
'terminalView.error.connectionFailed': 'Connection failed: {message}',
'terminalView.error.startSessionFailed': 'Failed to start terminal session',
'terminalView.error.restartFailed': 'Failed to restart terminal',
'terminalView.error.sendInputFailed': 'Failed to send input',
'terminalView.empty.noWorkingDirectory': 'No working directory available for terminal.',
'terminalView.empty.selectSession': 'Select a session to open the terminal.',
'terminalView.empty.noWorkingDirectoryForSession': 'No working directory available for this session.',
'terminalView.actions.retry': 'Retry',
'terminalView.actions.hardRestart': 'Hard Restart',
'terminalView.actions.hardRestartTitle': 'Force kill and create fresh session',
'terminalView.quickKeys.escape': 'Esc',
'terminalView.quickKeys.tabAria': 'Tab',
'terminalView.quickKeys.controlLabel': 'Ctrl',
'terminalView.quickKeys.controlModifierAria': 'Control modifier',
'terminalView.quickKeys.commandModifierAria': 'Command modifier',
'terminalView.quickKeys.arrowUpAria': 'Arrow up',
'terminalView.quickKeys.arrowLeftAria': 'Arrow left',
'terminalView.quickKeys.arrowDownAria': 'Arrow down',
'terminalView.quickKeys.arrowRightAria': 'Arrow right',
'terminalView.quickKeys.enterAria': 'Enter',
'terminalView.tabs.closeTabTitle': 'Close tab',
'terminalView.tabs.newTabTitle': 'New tab',
'terminalView.bottomDock.resizeAria': 'Resize terminal panel',
'terminalView.bottomDock.restoreTitle': 'Restore terminal panel height',
'terminalView.bottomDock.restoreAria': 'Restore terminal panel height',
'terminalView.bottomDock.expandTitle': 'Expand terminal panel',
'terminalView.bottomDock.expandAria': 'Expand terminal panel',
'terminalView.bottomDock.closeTitle': 'Close terminal panel',
'terminalView.bottomDock.closeAria': 'Close terminal panel',
'terminalView.viewport.inputAria': 'Terminal input',
'directoryExplorerDialog.title': 'Add project directory',
'directoryExplorerDialog.description': 'Choose a folder to add as a project.',
'directoryExplorerDialog.toggle.showHidden': 'Show hidden',
'directoryExplorerDialog.pathInput.placeholder': 'Enter path or select from tree...',
'directoryExplorerDialog.actions.openingFinder': 'Opening...',
'directoryExplorerDialog.actions.openInFinder': 'Open in Finder',
'directoryExplorerDialog.actions.adding': 'Adding...',
'directoryExplorerDialog.actions.addProject': 'Add project',
'directoryExplorerDialog.actions.addLocalProject': 'Add local project',
'directoryExplorerDialog.actions.cloneRepository': 'Clone repository',
'directoryExplorerDialog.actions.cloneAndAdd': 'Clone & add',
'directoryExplorerDialog.actions.cloning': 'Cloning...',
'directoryExplorerDialog.actions.createAndAdd': 'Create & add',
'directoryExplorerDialog.actions.alreadyAdded': 'Already added',
'directoryExplorerDialog.clone.remoteUrlPlaceholder': 'Repository URL (HTTPS or SSH)',
'directoryExplorerDialog.browse.directories': 'Directories',
'directoryExplorerDialog.browse.loading': 'Loading directories...',
'directoryExplorerDialog.browse.empty': 'No matching directories.',
'directoryExplorerDialog.browse.parentDirectory': 'Parent directory',
'directoryExplorerDialog.browse.addedBadge': 'Added',
'directoryExplorerDialog.browse.quickAdd': 'Add',
'directoryExplorerDialog.footer.navigate': 'Navigate',
'directoryExplorerDialog.footer.select': 'Select',
'directoryExplorerDialog.footer.add': 'Add',
'directoryExplorerDialog.shortcut.enter': 'Enter',
'directoryExplorerDialog.toast.unableToAccessDirectory': 'Unable to access directory',
'directoryExplorerDialog.toast.desktopDeniedAccess': 'Desktop denied directory access.',
'directoryExplorerDialog.toast.failedToOpenDirectory': 'Failed to open directory',
'directoryExplorerDialog.toast.desktopCouldNotGrantAccess': 'Desktop could not grant file access.',
'directoryExplorerDialog.toast.failedToAddProject': 'Failed to add project',
'directoryExplorerDialog.toast.cloneUrlRequired': 'Enter a repository URL before cloning.',
'directoryExplorerDialog.toast.selectValidDirectoryPath': 'Please select a valid directory path.',
'directoryExplorerDialog.toast.failedToSelectDirectory': 'Failed to select directory',
'directoryExplorerDialog.toast.unknownError': 'Unknown error occurred.',
'directoryTree.actions.createNewDirectory': 'Create new directory',
'directoryTree.actions.pinDirectory': 'Pin directory',
'directoryTree.actions.unpinDirectory': 'Unpin directory',
'directoryTree.actions.createDirectory': 'Create directory',
'directoryTree.actions.cancel': 'Cancel',
'directoryTree.actions.selectWorkingDirectoryAria': 'Select working directory',
'directoryTree.state.locatingHomeDirectory': 'Locating home directory...',
'directoryTree.state.loading': 'Loading...',
'directoryTree.state.noDirectoriesFound': 'No directories found',
'directoryTree.section.pinned': 'Pinned',
'directoryTree.section.browse': 'Browse',
'aboutDialog.versionLabel': 'Version {version}',
'aboutDialog.openChamberVersionLabel': 'OpenChamber version {version}',
'aboutDialog.openCodeVersionLabel': 'OpenCode version {version}',
'aboutDialog.actions.copyDiagnostics': 'Copy diagnostics',
'aboutDialog.actions.preparingDiagnostics': 'Preparing diagnostics...',
'aboutDialog.actions.diagnosticsCopied': 'Diagnostics copied',
'aboutDialog.diagnosticsDescription': 'Includes OpenChamber state, OpenCode health, directories, and projects.',
'aboutDialog.footerNote': 'Made with love for the community',
'aboutDialog.toast.copyFailed': 'Copy failed',
'aboutDialog.toast.diagnosticsNotReady': 'Diagnostics not ready yet. Wait a second and retry.',
'aboutDialog.toast.diagnosticsCopied': 'Diagnostics copied',
'helpDialog.title': 'Keyboard Shortcuts',
'helpDialog.description': 'Use these keyboard shortcuts to navigate OpenChamber efficiently',
'helpDialog.section.navigationCommands': 'Navigation & Commands',
'helpDialog.section.sessionManagement': 'Session Management',
'helpDialog.section.panels': 'Panels',
'helpDialog.section.interface': 'Interface',
'helpDialog.item.openCommandPalette': 'Open Command Palette',
'helpDialog.item.showKeyboardShortcuts': 'Show Keyboard Shortcuts (this dialog)',
'helpDialog.item.toggleSessionSidebar': 'Toggle Session Sidebar',
'helpDialog.item.cycleAgent': 'Cycle Agent (chat input)',
'helpDialog.item.openModelSelector': 'Open Model Selector',
'helpDialog.item.navigateModels': 'Navigate Models (in picker)',
'helpDialog.item.adjustThinkingMode': 'Adjust Thinking Mode (in picker, when supported)',
'helpDialog.item.cycleThinkingVariant': 'Cycle Thinking Variant (global shortcut)',
'helpDialog.item.newWindow': 'New Window (desktop only)',
'helpDialog.item.createNewSession': 'Create New Session',
'helpDialog.item.createNewWorktreeDraft': 'Create New Worktree Draft',
'helpDialog.item.focusChatInput': 'Focus Chat Input',
'helpDialog.item.abortActiveRun': 'Abort active run (double press)',
'helpDialog.item.toggleRightSidebar': 'Toggle Right Sidebar',
'helpDialog.item.openRightSidebarGitTab': 'Open Right Sidebar Git Tab',
'helpDialog.item.openRightSidebarFilesTab': 'Open Right Sidebar Files Tab',
'helpDialog.item.cycleRightSidebarTab': 'Cycle Right Sidebar Tab',
'helpDialog.item.toggleTerminalDock': 'Toggle Terminal Dock',
'helpDialog.item.toggleTerminalExpanded': 'Toggle Terminal Expanded',
'helpDialog.item.togglePlanContextPanel': 'Toggle Plan Context Panel',
'helpDialog.item.cycleTheme': 'Cycle Theme (Light → Dark → System)',
'helpDialog.item.switchProject': 'Switch Project',
'helpDialog.item.toggleServicesMenu': 'Toggle Services Menu',
'helpDialog.item.cycleServicesTab': 'Cycle Services Tab',
'helpDialog.item.openSettings': 'Open Settings',
'helpDialog.keyCombiner.or': 'or',
'helpDialog.proTips.title': 'Pro Tips:',
'helpDialog.proTips.commandPalette': 'Use Command Palette ({shortcut}) to quickly access all actions',
'helpDialog.proTips.recentSessions': 'The 5 most recent sessions appear in the Command Palette',
'helpDialog.proTips.themeCycling': 'Theme cycling remembers your preference across sessions',
'header.actions.rightSidebarWithShortcut': 'Right sidebar ({shortcut})',
'header.actions.toggleRightSidebarAria': 'Toggle right sidebar',
'header.actions.openAppMenu': 'OpenChamber menu',
'header.actions.openAppMenuAria': 'Open OpenChamber menu',
'header.actions.openSessionsWithShortcut': 'Open sessions ({shortcut})',
'header.actions.openSessionsAria': 'Open sessions',
'header.actions.closeSessionsAria': 'Close sessions',
'header.actions.newSessionAria': 'New session',
'header.actions.newSessionWithShortcut': 'New session ({shortcut})',
'header.actions.backAria': 'Back',
'header.navigation.mainAria': 'Main navigation',
'header.sessions.title': 'Sessions',
'header.changes.availableAria': 'Changes available',
'session.githubIssuePicker.error.noActiveProject': 'No active project',
'session.githubIssuePicker.error.runtimeUnavailable': 'GitHub runtime API unavailable',
'session.githubIssuePicker.error.notConnected': 'GitHub not connected',
'session.githubIssuePicker.error.repoNotResolvable': 'Repo not resolvable',
'session.githubIssuePicker.error.repoMustBeGithub': 'origin remote must be a GitHub URL',
'session.githubIssuePicker.error.issueNotFound': 'Issue not found',
'session.githubIssuePicker.error.noModelSelected': 'No model selected',
'session.githubIssuePicker.toast.loadMoreFailed': 'Failed to load more issues',
'session.githubIssuePicker.toast.loadIssueDetailsFailed': 'Failed to load issue details',
'session.githubIssuePicker.toast.sendContextFailed': 'Failed to send issue context',
'session.githubIssuePicker.toast.sessionCreated': 'Session created from issue',
'session.githubIssuePicker.toast.startSessionFailed': 'Failed to start session',
'session.githubIssuePicker.title.select': 'Link GitHub Issue',
'session.githubIssuePicker.title.createSession': 'New Session From GitHub Issue',
'session.githubIssuePicker.description.select': 'Select an issue to link to this session.',
'session.githubIssuePicker.description.createSession': 'Seeds a new session with hidden issue context (title/body/labels/comments).',
'session.githubIssuePicker.searchPlaceholder': 'Search using GitHub code search syntax',
'session.githubIssuePicker.empty.noActiveProject': 'No active project selected.',
'session.githubIssuePicker.empty.runtimeUnavailable': 'GitHub runtime API unavailable.',
'session.githubIssuePicker.empty.notConnected': 'GitHub not connected. Connect your GitHub account in settings.',
'session.githubIssuePicker.empty.noIssuesFound': 'No issues found',
'session.githubIssuePicker.empty.noOpenIssuesFound': 'No open issues found',
'session.githubIssuePicker.loading.issues': 'Loading issues...',
'session.githubIssuePicker.loading.more': 'Loading...',
'session.githubIssuePicker.actions.openSettings': 'Open settings',
'session.githubIssuePicker.actions.useIssue': 'Use issue #{number}',
'session.githubIssuePicker.actions.openInGitHubAria': 'Open in GitHub',
'session.githubIssuePicker.actions.loadMore': 'Load more',
'session.githubIssuePicker.actions.sectionTitle': 'Actions',
'session.githubIssuePicker.actions.toggleWorktreeAria': 'Toggle worktree',
'session.githubIssuePicker.actions.createInWorktree': 'Create in worktree',
'session.githubIssuePicker.actions.openRepo': 'Open Repo',
'session.githubIssuePicker.actions.refresh': 'Refresh',
'session.githubPrPicker.error.noActiveProject': 'No active project',
'session.githubPrPicker.error.runtimeUnavailable': 'GitHub runtime API unavailable',
'session.githubPrPicker.error.notConnected': 'GitHub not connected',
'session.githubPrPicker.error.prNotFound': 'Pull request not found',
'session.githubPrPicker.error.repoNotResolvable': 'Repo not resolvable',
'session.githubPrPicker.error.repoMustBeGithub': 'origin remote must be a GitHub URL',
'session.githubPrPicker.toast.loadMoreFailed': 'Failed to load more pull requests',
'session.githubPrPicker.toast.loadDetailsFailed': 'Failed to load pull request details',
'session.githubPrPicker.title': 'Link GitHub Pull Request',
'session.githubPrPicker.description': 'Select a pull request to attach review context to this message.',
'session.githubPrPicker.searchPlaceholder': 'Search using GitHub code search syntax',
'session.githubPrPicker.includeDiffAria': 'Include PR diff in attached context',
'session.githubPrPicker.includeDiff': 'Include PR diff',
'session.githubPrPicker.empty.noActiveProject': 'No active project selected.',
'session.githubPrPicker.empty.runtimeUnavailable': 'GitHub runtime API unavailable.',
'session.githubPrPicker.empty.notConnected': 'GitHub not connected. Connect your GitHub account in settings.',
'session.githubPrPicker.empty.noPullRequestsFound': 'No pull requests found',
'session.githubPrPicker.empty.noOpenPullRequestsFound': 'No open pull requests found',
'session.githubPrPicker.loading.pullRequests': 'Loading pull requests...',
'session.githubPrPicker.loading.more': 'Loading...',
'session.githubPrPicker.actions.openSettings': 'Open settings',
'session.githubPrPicker.actions.usePullRequest': 'Use pull request #{number}',
'session.githubPrPicker.actions.openInGitHubAria': 'Open in GitHub',
'session.githubPrPicker.actions.loadMore': 'Load more',
'session.newWorktree.title': 'New Worktree',
'session.newWorktree.mode.newBranch': 'New Branch',
'session.newWorktree.mode.existingBranch': 'Existing Branch',
'session.newWorktree.selectBranch': 'Select Branch',
'session.newWorktree.chooseBranch': 'Choose a branch...',
'session.newWorktree.fetchBranches': 'Fetch branches',
'session.newWorktree.searchBranches': 'Search branches...',
'session.newWorktree.loadingBranches': 'Loading branches...',
'session.newWorktree.noBranchesFound': 'No branches found',
'session.newWorktree.matchingBranches': 'Matching branches',
'session.newWorktree.noMatchingBranches': 'No matching branches',
'session.newWorktree.localBranches': 'Local branches',
'session.newWorktree.remoteBranches': 'Remote branches',
'session.newWorktree.otherLocalBranches': 'Other local branches',
'session.newWorktree.otherRemoteBranches': 'Other remote branches',
'session.newWorktree.branchName': 'Branch Name',
'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature',
'session.newWorktree.actions.change': 'Change',
'session.newWorktree.actions.startFromGitHubIssuePr': 'Start from GitHub Issue/PR',
'session.newWorktree.usingPrBranch': 'Using PR branch: {branch}',
'session.newWorktree.fromIssue': 'From issue #{number}: {title}',
'session.newWorktree.worktreeDirectory': 'Worktree Directory',
'session.newWorktree.worktreeDirectoryPlaceholder': 'my-worktree-directory',
'session.newWorktree.resetToMatchBranchName': 'Reset to match branch name',
'session.newWorktree.sourceBranch': 'Source Branch',
'session.newWorktree.selectSourceBranch': 'Select Source Branch',
'session.newWorktree.selectSourceBranchPlaceholder': 'Select source branch...',
'session.newWorktree.newBranchFromSource': 'New branch will be created from {source}',
'session.newWorktree.issueNumber': 'Issue #{number}',
'session.newWorktree.prNumber': 'PR #{number}',
'session.newWorktree.includeDiffBadge': '+diff',
'session.newWorktree.newSessionTitle': 'New session',
'session.newWorktree.fromSource': 'from {source}',
'session.newWorktree.actions.cancel': 'Cancel',
'session.newWorktree.actions.creating': 'Creating...',
'session.newWorktree.actions.createWorktree': 'Create Worktree',
'session.newWorktree.actions.reset': 'Reset',
'session.newWorktree.error.noModelSelected': 'No model selected',
'session.newWorktree.error.noActiveProject': 'No active project',
'session.newWorktree.error.branchNameRequired': 'Branch name is required',
'session.newWorktree.error.worktreeDirectoryRequired': 'Worktree directory is required',
'session.newWorktree.error.sendGitHubContextFailed': 'Failed to send GitHub context',
'session.newWorktree.error.createWorktreeFailed': 'Failed to create worktree',
'session.newWorktree.toast.sessionFromIssue': 'Session created from issue',
'session.newWorktree.toast.sessionFromPr': 'Session created from PR',
'session.newWorktree.toast.worktreeCreated': 'Worktree created',
'session.newWorktree.toast.worktreeCreatedDescription': '{target} - bootstrapping in background',
'session.githubIntegration.title': 'Select from GitHub',
'session.githubIntegration.tabs.issues': 'Issues',
'session.githubIntegration.tabs.pullRequests': 'Pull Requests',
'session.githubIntegration.connect.title': 'Connect to GitHub',
'session.githubIntegration.connect.description': 'Link issues or pull requests to auto-fill worktree details',
'session.githubIntegration.connect.action': 'Connect GitHub',
'session.githubIntegration.search.issuesPlaceholder': 'Search using GitHub code search syntax',
'session.githubIntegration.search.prsPlaceholder': 'Search using GitHub code search syntax',
'session.githubIntegration.empty.noIssuesFound': 'No issues found',
'session.githubIntegration.empty.noPullRequestsFound': 'No pull requests found',
'session.githubIntegration.actions.loadMore': 'Load more',
'session.githubIntegration.actions.cancel': 'Cancel',
'session.githubIntegration.actions.select': 'Select',
'session.githubIntegration.selected.issueNumber': 'Issue #{number}',
'session.githubIntegration.selected.prNumber': 'PR #{number}',
'session.githubIntegration.includeDiffAria': 'Include PR diff in session context',
'session.githubIntegration.includeDiff': 'Include PR diff',
'session.githubIntegration.error.notConnected': 'GitHub not connected',
'session.githubIntegration.error.loadDataFailed': 'Failed to load data',
'session.githubIntegration.validation.branchAlreadyCheckedOut': 'Branch is already checked out in a worktree',
'session.githubIntegration.validation.branchAlreadyExists': 'Branch already exists locally',
'session.githubIntegration.validation.failed': 'Validation failed',
'chat.fileAttachment.toast.attachFailed': 'Failed to attach file',
'chat.fileAttachment.toast.someFilesSkipped': 'Some files were skipped:\n{summary}',
'chat.fileAttachment.toast.vscodePickFailed': 'Failed to pick files in VS Code',
'chat.fileAttachment.fileFallback': 'file',
'chat.fileAttachment.skippedFallback': 'skipped',
'chat.fileAttachment.actions.attachAria': 'Attach files',
'chat.fileAttachment.actions.attach': 'Attach files',
'chat.fileAttachment.actions.removeNamed': 'Remove {name}',
'chat.fileAttachment.actions.removeImage': 'Remove image',
'chat.fileAttachment.activeEditor.addFile': 'Add file:{name} to context',
'chat.fileAttachment.activeEditor.pinSelection': 'Pin selection to context',
'chat.fileAttachment.activeEditor.remove': 'Remove from context',
'chat.pendingChanges.fileCountSingle': '{count} file',
'chat.pendingChanges.fileCountPlural': '{count} files',
'chat.pendingChanges.changedInWorkspace': 'changed in workspace',
'chat.changedFiles.title': 'Changed files',
'chat.changedFiles.actions.openFileTitle': 'Open {path}',
'chat.emptyState.opencodeUnreachable': 'OpenCode is not reachable',
'chat.emptyState.startNewChat': 'Start a new chat',
'chat.emptyState.draftTitle': 'What are we working on?',
'chat.emptyState.draftTitleWithProject': 'What are we working on in {project}?',
'chat.draftPresets.explore.label': 'Explore the codebase',
'chat.draftPresets.catchup.label': 'Catch me up',
'chat.draftPresets.weigh.label': 'Weigh my options',
'chat.draftPresets.plan.label': 'Start feature planning',
'chat.draftPresets.debug.label': 'Debug an issue',
'chat.draftPresets.review.label': 'Review my changes',
'chat.draftStarters.add': 'Add a starter',
'chat.draftStarters.searchPlaceholder': 'Search commands and skills…',
'chat.draftStarters.empty': 'Nothing to add',
'chat.draftStarters.sectionBuiltIn': 'Built-in',
'chat.draftStarters.sectionCommands': 'Commands',
'chat.draftStarters.sectionSkills': 'Skills',
'chat.draftStarters.remove': 'Remove',
'chat.scrollToBottom.aria': 'Scroll to bottom',
'chat.timeline.relative.justNow': 'just now',
'chat.timeline.relative.minutesAgo': '{count}m ago',
'chat.timeline.relative.hoursAgo': '{count}h ago',
'chat.timeline.relative.daysAgo': '{count}d ago',
'chat.timeline.title': 'Conversation Timeline',
'chat.timeline.description': 'Navigate to any point in the conversation or fork a new session',
'chat.timeline.searchPlaceholder': 'Search messages...',
'chat.timeline.empty.search': 'No messages found',
'chat.timeline.empty.session': 'No messages in this session yet',
'chat.timeline.noTextContent': '[No text content]',
'chat.timeline.actions.title': 'Actions',
'chat.timeline.actions.revertFromHere': 'Revert from here',
'chat.timeline.actions.forkFromHere': 'Fork from here',
'chat.timeline.actions.previousTurn': 'Previous turn',
'chat.timeline.actions.latest': 'Latest',
'chat.timeline.help.clickMessage': 'Click on a message to scroll to it in the conversation',
'chat.timeline.help.undoToPoint': 'Undo to this point (message text will populate input)',
'chat.timeline.help.createSessionFromHere': 'Create a new session starting from here',
'chat.statusRow.todo.status.inProgress': 'In progress',
'chat.statusRow.todo.status.pending': 'Pending',
'chat.statusRow.todo.status.completed': 'Completed',
'chat.statusRow.todo.status.cancelled': 'Cancelled',
'chat.statusRow.todo.priority.high': 'High priority',
'chat.statusRow.todo.priority.medium': 'Medium priority',
'chat.statusRow.todo.priority.low': 'Low priority',
'chat.statusRow.actions.stopGeneratingAria': 'Stop generating',
'chat.statusRow.tasksTitle': 'Tasks',
'chat.statusRow.summary.activeLeft': '{active} active · {left} left',
'chat.statusRow.aborted': 'Aborted',
'chat.revertIndicator.redo': 'Redo',
'chat.revertIndicator.redoAria': 'Redo — restore reverted messages',
'chat.revertPopover.title': 'Reverted',
'chat.revertPopover.noTextContent': 'No text content',
'chat.revertPopover.forkFromHere': 'Fork from here',
'chat.revertPopover.forkFromMessage': 'Fork from this message',
'chat.revertPopover.restoreAll': 'Restore all',
'chat.revertPopover.restore': 'Restore',
'chat.revertPopover.revert': 'Revert',
'chat.revertPopover.fork': 'Fork',
'chat.revert.toast.undo': 'Reverted to {preview}',
'chat.revert.toast.redo': 'Redone',
'chat.revert.toast.restored': 'Restored all messages',
'chat.errorBoundary.title': 'Chat Error',
'chat.errorBoundary.description': 'The chat interface encountered an error. This might be due to a temporary network issue or corrupted message data.',
'chat.errorBoundary.sessionLabel': 'Session',
'chat.errorBoundary.detailsSummary': 'Error details',
'chat.errorBoundary.resetAction': 'Reset Chat',
'chat.errorBoundary.persistentHint': 'If the problem persists, try refreshing the page.',
'chat.autocomplete.tabs.commands': 'Commands',
'chat.autocomplete.tabs.agents': 'Agents',
'chat.autocomplete.tabs.files': 'Files',
'chat.autocomplete.keyboardHint': '↑↓ navigate • Enter select • Esc close',
'chat.commandAutocomplete.command.initDescription': 'Create/update AGENTS.md file',
'chat.commandAutocomplete.command.undoDescription': 'Undo the last message',
'chat.commandAutocomplete.command.redoDescription': 'Redo previously undone messages',
'chat.commandAutocomplete.command.timelineDescription': 'Open the conversation timeline',
'chat.commandAutocomplete.command.compactDescription': 'Compress session history using AI to reduce context size',
'chat.commandAutocomplete.command.summaryDescription': 'Non-destructive session summary. Optional topic hint after the command.',
'chat.commandAutocomplete.command.workspaceReviewDescription': 'Review the workspace diff for intent, correctness, and adequacy, graded by severity.',
'chat.commandAutocomplete.command.handoffReviewDescription': 'Create or reuse a separate review session from a generated handoff.',
'chat.commandAutocomplete.command.featurePlanDescription': 'Start a guided, back-and-forth planning session for a new feature.',
'chat.commandAutocomplete.command.catchUpDescription': 'Re-establish context: what you were doing and where to pick up.',
'chat.commandAutocomplete.command.debugDescription': 'Guided root-cause investigation for a bug before proposing a fix.',
'chat.commandAutocomplete.command.weighDescription': 'Weigh 2-3 approaches with trade-offs and a recommendation before you commit.',
'chat.commandAutocomplete.command.exploreDescription': 'Get oriented in this codebase: a high-level tour of the architecture and main parts.',
'chat.commandAutocomplete.badge.skill': 'skill',
'chat.commandAutocomplete.badge.command': 'command',
'chat.commandAutocomplete.badge.system': 'system',
'chat.commandAutocomplete.empty': 'No commands found',
'chat.agentMentionAutocomplete.badge.system': 'system',
'chat.agentMentionAutocomplete.empty': 'No agents found',
'chat.fileMentionAutocomplete.searchMoreAgents': 'Type to search more agents',
'chat.fileMentionAutocomplete.empty': 'No matches found',
'chat.queuedMessage.attachments': '+{count} file(s)',
'chat.queuedMessage.empty': '(empty)',
'chat.queuedMessage.title': 'Queued messages',
'chat.queuedMessage.edit': 'edit',
'chat.queuedMessage.send': 'send',
'chat.queuedMessage.removeAria': 'Remove from queue',
'chat.container.returnToParent.aria': 'Return to parent session',
'chat.container.returnToParent.titleNamed': 'Return to: {title}',
'chat.container.returnToParent.title': 'Return to parent session',
'chat.container.returnToParent.label': 'Parent',
'chat.container.readOnlySubagentPromptBanner': 'Subagent sessions cannot be prompted.',
'chat.unifiedControls.title': 'Controls',
'chat.unifiedControls.model.title': 'Model',
'chat.unifiedControls.model.noRecent': 'No recent models',
'chat.unifiedControls.model.moreAria': 'More models',
'chat.unifiedControls.effort.title': 'Effort',
'chat.unifiedControls.effort.moreAria': 'More effort options',
'chat.questionCard.summaryTab': 'Summary',
'chat.questionCard.noAnswer': '(no answer)',
'chat.questionCard.inputNeeded': 'Input needed',
'chat.questionCard.fromSubagent': 'From subagent',
'chat.questionCard.questionFallback': 'Question {index}',
'chat.questionCard.selectMultiple': 'Select multiple',
'chat.questionCard.recommended': 'recommended',
'chat.questionCard.other': 'Other…',
'chat.questionCard.yourAnswer': 'Your answer',
'chat.questionCard.submit': 'Submit',
'chat.questionCard.next': 'Next',
'chat.questionCard.dismiss': 'Dismiss',
'chat.questionCard.copyMarkdown': 'Copy as Markdown',
'chat.questionCard.copyJson': 'Copy as JSON',
'chat.questionCard.copiedMarkdown': 'Question copied as Markdown',
'chat.questionCard.copiedJson': 'Question copied as JSON',
'chat.questionCard.copyFailed': 'Failed to copy question',
'chat.questionCard.submitFailed': 'Failed to send response',
'chat.questionCard.dismissFailed': 'Failed to dismiss question',
'chat.questionCard.noLongerPending': 'This question is no longer waiting for a response.',
'chat.questionCard.tryAgain': 'Please try again in a moment.',
'chat.textSelection.toast.noProject': 'No project found for this session',
'chat.textSelection.toast.addToNotesFailed': 'Failed to add to notes',
'chat.textSelection.toast.addToNotesSuccess': 'Added selected text to notes',
'chat.textSelection.toast.addToNotesSummaryFailed': 'Could not summarize selection, added selected text to notes',
'chat.textSelection.actions.addToChat': 'Add to chat',
'chat.textSelection.actions.newSession': 'New session',
'chat.textSelection.actions.copy': 'Copy',
'chat.textSelection.actions.addToNotes': 'Add to notes',
'chat.textSelection.title.addToCurrentChat': 'Add to current chat',
'chat.textSelection.title.newSessionWithSelection': 'Create new session with selection',
'chat.textSelection.title.saveInsightToNotes': 'Save selected text to notes',
'chat.messageBody.actions.revertAria': 'Revert to this message',
'chat.messageBody.actions.revert': 'Revert from here',
'chat.messageBody.actions.forkAria': 'Fork from this message',
'chat.messageBody.actions.fork': 'Fork from here',
'chat.messageBody.actions.copyMessageAria': 'Copy message text',
'chat.messageBody.actions.copyMessage': 'Copy message',
'chat.messageBody.actions.openPreviewAria': 'Open preview',
'chat.messageBody.actions.openPreview': 'Open preview',
'chat.messageBody.actions.copyAnswer': 'Copy answer',
'chat.messageBody.actions.savingImage': 'Saving image...',
'chat.messageBody.actions.saveAsImage': 'Save as image',
'chat.messageBody.actions.saveAsPlan': 'Save as plan',
'chat.messageBody.actions.startNewSession': 'Start new session from this answer',
'chat.messageBody.actions.startNewMultiRun': 'Start new multi-run from this answer',
'chat.messageBody.forkDialog.instructions.label': 'Instructions',
'chat.messageBody.forkDialog.instructions.placeholder': 'Add instructions for the new session…',
'chat.messageBody.forkDialog.createWorktree': 'Create worktree',
'chat.generatedResult.actions.copy': 'Copy',
'chat.generatedResult.actions.copied': 'Copied',
'chat.generatedResult.commit.title': 'Generated commit message',
'chat.generatedResult.commit.highlights': 'Highlights',
'chat.generatedResult.pullRequest.title': 'Generated pull request',
'chat.generatedResult.pullRequest.titleLabel': 'Title',
'chat.generatedResult.pullRequest.bodyLabel': 'Body',
'chat.messageBody.tts.stopSpeaking': 'Stop speaking',
'chat.messageBody.tts.readAloud': 'Read aloud',
'chat.messageBody.tts.readAloudWithProvider': 'Read aloud ({provider} voice)',
'chat.messageBody.toast.noProject': 'No project found for this session',
'chat.messageBody.toast.savePlanFailed': 'Failed to save plan',
'chat.messageBody.toast.planSaved': 'Plan saved',
'chat.messageBody.toast.imageSaved': 'Image saved',
'chat.messageBody.toast.generateImageFailed': 'Failed to generate image',
'chat.chatInput.actions.commands': 'Commands',
'chat.chatInput.actions.attachFiles': 'Attach files',
'chat.chatInput.actions.addAttachment': 'Add attachment',
'chat.chatInput.actions.linkGithubIssue': 'Link GitHub Issue',
'chat.chatInput.actions.linkGithubPr': 'Link GitHub PR',
'chat.chatInput.actions.modelAgentSettings': 'Model and agent settings',
'chat.chatInput.actions.sendMessageAria': 'Send message',
'chat.chatInput.actions.queueMessageAria': 'Queue message',
'chat.chatInput.actions.stopGeneratingAria': 'Stop generating',
'chat.chatInput.focusMode.toggleAria': 'Toggle focus mode',
'chat.chatInput.focusMode.label': 'Focus mode',
'chat.chatInput.permissionAutoAccept.disable': 'Disable permission auto-accept',
'chat.chatInput.permissionAutoAccept.enable': 'Enable permission auto-accept',
'chat.chatInput.permissionAutoAccept.on': 'Permission auto-accept: on',
'chat.chatInput.permissionAutoAccept.off': 'Permission auto-accept: off',
'chat.chatInput.linked.byAuthor': 'by {author}',
'chat.chatInput.linked.issue.openInBrowserAria': 'Open issue in browser',
'chat.chatInput.linked.issue.removeAria': 'Remove linked issue',
'chat.chatInput.linked.pr.number': 'PR #{number}',
'chat.chatInput.linked.pr.openInBrowserAria': 'Open pull request in browser',
'chat.chatInput.linked.pr.removeAria': 'Remove linked pull request',
'chat.chatInput.placeholder.shell': 'Enter shell command...',
'chat.chatInput.placeholder.chat': '@ for files/agents; / for commands and skills; ! for shell; # for snippets',
'chat.chatInput.placeholder.chatCompact': 'Use @ / ! # for helpers',
'chat.chatInput.placeholder.selectSession': 'Select or create a session to start chatting',
'chat.snippetAutocomplete.action.addNew': '+ Add new snippet',
'chat.snippetAutocomplete.empty': 'No snippets found',
'chat.snippetAutocomplete.footer': '↑↓ navigate • Enter select • Esc close',
'snippets.source.global': 'global',
'snippets.source.project': 'project',
'chat.chatInput.toast.compactFailed': 'Failed to compact session',
'chat.chatInput.toast.summaryFailed': 'Failed to generate summary',
'chat.messageBody.actions.sendReviewFeedback': 'Send review feedback to implementing agent',
'chat.messageBody.actions.sendImplementationResponse': 'Send implementation response to reviewing agent',
'chat.chatInput.toast.reviewFailed': 'Failed to review changes',
'chat.chatInput.toast.planFeatureFailed': 'Failed to start feature planning',
'chat.chatInput.toast.catchUpFailed': 'Failed to catch up',
'chat.chatInput.toast.debugFailed': 'Failed to start debugging',
'chat.chatInput.toast.weighFailed': 'Failed to weigh options',
'chat.chatInput.toast.exploreFailed': 'Failed to start the tour',
'chat.chatInput.toast.attachmentsTooLarge': 'Attachments are too large to send. Please try reducing the number or size of images.',
'chat.chatInput.toast.sendAttachmentsFailed': 'Failed to send attachments. Try fewer files or smaller images.',
'chat.chatInput.toast.messageSendFailed': 'Message failed to send. Attachments restored.',
'chat.chatInput.toast.clipboardAttachFailed': 'Failed to attach image from clipboard',
'chat.chatInput.toast.addedFileMentions': 'Added {count} file mention(s)',
'chat.chatInput.toast.attachFileFailed': 'Failed to attach file',
'chat.chatInput.toast.attachNamedFailed': 'Failed to attach {name}',
'chat.chatInput.toast.someFilesSkipped': 'Some files were skipped:\n{summary}',
'chat.chatInput.toast.vscodePickFailed': 'Failed to pick files in VS Code',
'chat.chatInput.toast.openSessionFirst': 'Open a session first',
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': 'Failed to toggle permission auto-accept',
'chat.chatInput.reviewComments': 'Review comments:',
'chat.chatInput.reviewCommentsRemove': 'Remove review comments',
'chat.chatInput.devServerLogs': 'Dev Server logs:',
'chat.chatInput.devServerLogsRemove': 'Remove Dev Server logs',
'chat.chatInput.previewAnnotations': 'Preview annotations:',
'chat.chatInput.previewContext': 'Preview context:',
'chat.chatInput.previewContextRemove': 'Remove preview context',
'chat.chatInput.projectRoot': 'Project root',
'chat.chatInput.branch': 'Branch',
'chat.chatInput.worktrees': 'Worktrees',
'chat.chatInput.worktreeNew': '+ New',
'chat.chatInput.drop.insertMention': 'Drop to insert as mention',
'chat.chatInput.drop.attachFiles': 'Drop files here to attach',
'chat.chatInput.fileFallback': 'file',
'chat.mobileStatus.editProjects.title': 'Edit Projects',
'chat.mobileStatus.editProjects.footer': 'Drag items to reorder, or use arrows to move. Tap edit to change details.',
'chat.mobileStatus.editProjects.empty': 'No projects to edit',
'chat.mobileStatus.projects.empty': 'No projects',
'chat.mobileStatus.projects.addAria': 'Add project',
'chat.mobileStatus.projects.removeTitle': 'Remove Project',
'chat.mobileStatus.projects.removeDescriptionPrefix': 'Are you sure you want to remove',
'chat.mobileStatus.projects.cancel': 'Cancel',
'chat.mobileStatus.projects.remove': 'Remove',
'chat.mobileStatus.new': 'New',
'chat.mobileStatus.noSessionsInProject': 'No sessions in this project',
'chat.mobileStatus.swipeHint': '← Swipe here to open sidebars →',
'chat.mobileStatus.toast.addProjectFailed': 'Failed to add project',
'chat.mobileStatus.toast.selectValidDirectory': 'Please select a valid directory.',
'chat.mobileStatus.toast.selectDirectoryFailed': 'Failed to select directory',
'chat.toolOutputDialog.image.previousAria': 'Previous image',
'chat.toolOutputDialog.image.nextAria': 'Next image',
'chat.toolOutputDialog.image.closeAria': 'Close image preview',
'chat.toolOutputDialog.mermaid.missingSource': 'Missing Mermaid source URL.',
'chat.toolOutputDialog.mermaid.loadFailed': 'Unable to load Mermaid diagram.',
'chat.toolOutputDialog.mermaid.closeAria': 'Close diagram preview',
'chat.toolOutputDialog.mermaid.loading': 'Loading diagram...',
'chat.toolOutputDialog.mermaid.renderFailed': 'Unable to render Mermaid diagram.',
'chat.toolOutputDialog.mermaid.retry': 'Retry',
'chat.toolOutputDialog.commandCompleted': 'Command completed successfully',
'chat.toolOutputDialog.noOutputProduced': 'No output was produced',
'chat.toolPart.lspErrors': 'LSP errors',
'chat.toolPart.moreErrors': '+{count} more errors',
'chat.toolPart.error': 'Error:',
'chat.toolPart.awaitingResponse': 'Awaiting response...',
'chat.toolPart.noOutputProduced': 'No output produced',
'chat.toolPart.output': 'Output',
'chat.toolPart.showRawJson': 'Show raw JSON',
'chat.toolPart.showFormattedJson': 'Show formatted JSON',
'chat.toolPart.copyOutput': 'Copy output',
'chat.toolPart.copiedOutput': 'Copied output',
'chat.toolPart.copyOutputFailed': 'Failed to copy output',
'chat.toolPart.openSubtask': 'Open {type} subtask',
'chat.todo.total': 'Total',
'chat.todo.inProgress': 'In Progress',
'chat.todo.pending': 'Pending',
'chat.todo.completed': 'Completed',
'chat.todo.cancelled': 'Cancelled',
'chat.permissionCard.workingDirectory': 'Working Directory:',
'chat.permissionCard.timeout': 'Timeout:',
'chat.permissionCard.request': 'Request:',
'chat.permissionCard.headers': 'Headers:',
'chat.permissionCard.body': 'Body:',
'chat.permissionCard.action': 'Action:',
'chat.permissionCard.details': 'Details:',
'chat.permissionCard.patterns': 'Patterns:',
'chat.permissionToast.sessionFallback': 'Session',
'chat.permissionToast.permissionFallback': 'Permission details unavailable',
'chat.permissionToast.labels.session': 'Session:',
'chat.permissionToast.labels.permission': 'Permission:',
'chat.permissionToast.actions.once': 'Once',
'chat.permissionToast.actions.always': 'Always',
'chat.permissionToast.actions.deny': 'Deny',
'chat.permissionToast.actions.approveOnceAria': 'Approve once',
'chat.permissionToast.actions.approveOnceAriaWithSession': 'Approve once for {session}',
'chat.permissionToast.actions.approveAlwaysAria': 'Approve always',
'chat.permissionToast.actions.approveAlwaysAriaWithSession': 'Approve always for {session}',
'chat.permissionToast.actions.denyAria': 'Deny permission',
'chat.permissionToast.actions.denyAriaWithSession': 'Deny permission for {session}',
'chat.permissionRequest.required': 'Permission required:',
'chat.permissionRequest.actions.once': 'Once',
'chat.permissionRequest.actions.always': 'Always',
'chat.permissionRequest.actions.reject': 'Reject',
'chat.modelControls.provider': 'Provider',
'chat.modelControls.capability.toolCalling': 'Tool calling',
'chat.modelControls.capability.reasoning': 'Reasoning',
'chat.modelControls.modality.text': 'Text',
'chat.modelControls.modality.image': 'Image',
'chat.modelControls.modality.video': 'Video',
'chat.modelControls.modality.audio': 'Audio',
'chat.modelControls.modality.pdf': 'PDF',
'chat.modelControls.capabilities': 'Capabilities',
'chat.modelControls.modalities': 'Modalities',
'chat.modelControls.input': 'Input',
'chat.modelControls.output': 'Output',
'chat.modelControls.limits': 'Limits',
'chat.modelControls.context': 'Context',
'chat.modelControls.metadata': 'Metadata',
'chat.modelControls.knowledge': 'Knowledge',
'chat.modelControls.release': 'Release',
'chat.modelControls.mode': 'Mode',
'chat.modelControls.model': 'Model',
'chat.modelControls.temperature': 'Temperature',
'chat.modelControls.topP': 'Top P',
'chat.modelControls.permissions': 'Permissions',
'chat.modelControls.edit': 'Edit',
'chat.modelControls.bash': 'Bash',
'chat.modelControls.webFetch': 'WebFetch',
'chat.modelControls.customPrompt': 'Custom Prompt',
'chat.modelControls.selectModel': 'Select model',
'chat.modelControls.searchProvidersOrModels': 'Search providers or models',
'chat.modelControls.clearSearch': 'Clear search',
'chat.modelControls.current': 'Current',
'chat.modelControls.thinking': 'Thinking',
'chat.modelControls.default': 'Default',
'chat.modelControls.selectAgent': 'Select agent',
'chat.modelControls.costPerMillion': 'Cost ($/1M tokens)',
'chat.modelControls.metadataUnavailable': 'Model metadata unavailable.',
'chat.modelControls.addNewProvider': 'Add new provider',
'chat.modelControls.noAgentSelected': 'No agent selected.',
'chat.modelControls.resetToDefault': 'Reset to default',
'chat.modelControls.searchModels': 'Search models',
'chat.modelControls.searchAgents': 'Search agents',
'chat.modelControls.noModelsFound': 'No models found',
'chat.modelControls.favorites': 'Favorites',
'chat.modelControls.recent': 'Recent',
'chat.modelControls.addToFavorites': 'Add to favorites',
'chat.modelControls.removeFromFavorites': 'Remove from favorites',
'chat.modelControls.favoriteAria': 'Favorite',
'chat.modelControls.unfavoriteAria': 'Unfavorite',
'chat.modelControls.collapseProvider': 'Collapse provider',
'chat.modelControls.expandProvider': 'Expand provider',
'chat.modelControls.keyboardHint': '↑↓ navigate{thinking} • Enter select • Esc close',
'chat.modelControls.keyboardHintNavigate': '↑↓ navigate',
'chat.modelControls.keyboardHintSwitchAgent': '{shortcut} switch agent',
'chat.modelControls.keyboardHintThinking': '←→ thinking',
'chat.modelControls.showThinkingModes': 'Show thinking modes',
'chat.modelControls.hideThinkingModes': 'Hide thinking modes',
'chat.modelControls.moreThinkingModes': 'More thinking modes',
'chat.modelControls.noProvidersOrModelsFound': 'No providers or models match your search.',
'chat.modelControls.reorderFavoriteAria': 'Reorder favorite',
'chat.modelControls.reorderFavoriteTitle': 'Drag to reorder favorite',
'chat.modelControls.permissionLabel.custom': 'Custom',
'chat.modelControls.permissionLabel.allow': 'Allow',
'chat.modelControls.permissionLabel.deny': 'Deny',
'chat.modelControls.permissionLabel.ask': 'Ask',
'chat.modelControls.modeValue.primary': 'Primary',
'chat.modelControls.modeValue.subagent': 'Subagent',
'chat.modelControls.modeValue.all': 'All',
'chat.modelControls.modeValue.none': '—',
'chat.reasoningTrace.thinking': 'Thinking',
'chat.reasoningTrace.justification': 'Justification',
'chat.reasoningTrace.expandAria': 'Expand reasoning trace',
'chat.reasoningTrace.collapseAria': 'Collapse reasoning trace',
'chat.reasoningTrace.thought': 'Thought',
'chat.messageBody.subtask.title': 'Delegated task',
'chat.messageBody.subtask.hidePrompt': 'Hide prompt',
'chat.messageBody.subtask.showPrompt': 'Show prompt',
'chat.messageBody.subtask.openSession': 'Open subtask session',
'chat.messageBody.shellCommand.title': 'Shell command',
'chat.messageBody.shellCommand.hideOutput': 'Hide output',
'chat.messageBody.shellCommand.showOutput': 'Show output',
'chat.messageBody.shellCommand.copied': 'Copied',
'chat.messageBody.shellCommand.copyOutput': 'Copy output',
'commandPalette.title': 'Command Palette',
'commandPalette.description': 'Search files, sessions, and commands.',
'commandPalette.input.placeholder': 'Search files, sessions, commands...',
'commandPalette.empty.noResults': 'No results found.',
'commandPalette.empty.searchingFiles': 'Searching files...',
'commandPalette.item.newSession': 'New Session',
'commandPalette.item.newMiniChat': 'New Mini Chat Window',
'commandPalette.item.newWorktreeDraft': 'New Worktree Draft',
'commandPalette.item.addProject': 'Add Project',
'commandPalette.item.showSessionSwitcher': 'Show Session Switcher',
'commandPalette.item.toggleSidebar': 'Toggle Sidebar',
'commandPalette.item.toggleRightSidebar': 'Toggle Right Sidebar',
'commandPalette.item.showContextUsage': 'Show Context Usage',
'commandPalette.item.toggleTerminal': 'Toggle Terminal',
'commandPalette.item.openSettings': 'Open Settings...',
'commandPalette.session.untitled': 'Untitled Session',
'openCodeStatusDialog.title': 'OpenCode Status',
'openCodeStatusDialog.description': 'Inspect current OpenCode status and diagnostics.',
'openCodeStatusDialog.actions.copy': 'Copy',
'openCodeStatusDialog.empty.noData': 'No data.',
'openCodeStatusDialog.toast.copiedTitle': 'Copied',
'openCodeStatusDialog.toast.copiedDescription': 'Status copied to clipboard',
'openCodeStatusDialog.toast.copyFailed': 'Failed to copy status',
'saveProjectPlanDialog.title': 'Save Project Plan',
'saveProjectPlanDialog.description': 'Save this plan into your project as a Markdown file.',
'saveProjectPlanDialog.field.title': 'Title',
'saveProjectPlanDialog.field.titlePlaceholder': 'Plan title',
'saveProjectPlanDialog.field.contentPreview': 'Content preview',
'saveProjectPlanDialog.actions.cancel': 'Cancel',
'saveProjectPlanDialog.actions.save': 'Save',
'saveProjectPlanDialog.actions.saving': 'Saving...',
'branchPickerDialog.title': 'Branch Picker',
'branchPickerDialog.description.localBranchesForProject': 'Local branches for {project}',
'branchPickerDialog.description.selectProject': 'Select a project to view branches',
'branchPickerDialog.search.placeholder': 'Search branches...',
'branchPickerDialog.search.renameBranchPlaceholder': 'Rename branch',
'branchPickerDialog.state.noProjectSelected': 'No project selected',
'branchPickerDialog.state.loadingBranches': 'Loading branches...',
'branchPickerDialog.state.noMatchingBranches': 'No matching branches',
'branchPickerDialog.state.noBranchesFound': 'No branches found',
'branchPickerDialog.badge.head': 'HEAD',
'branchPickerDialog.badge.worktree': 'worktree',
'branchPickerDialog.actions.createWorktreeAria': 'Create worktree from branch',
'branchPickerDialog.actions.renameAria': 'Rename branch',
'branchPickerDialog.actions.deleteAria': 'Delete branch',
'branchPickerDialog.actions.deleteWorktreeAria': 'Remove worktree',
'branchPickerDialog.actions.confirmRenameAria': 'Confirm rename',
'branchPickerDialog.actions.cancelRenameAria': 'Cancel rename',
'branchPickerDialog.actions.confirmDeleteAria': 'Confirm delete branch',
'branchPickerDialog.actions.cancelDeleteAria': 'Cancel delete branch',
'branchPickerDialog.actions.deletePrompt': 'Delete',
'branchPickerDialog.actions.forceDeletePrompt': 'Force Delete',
'branchPickerDialog.tooltip.createWorktree': 'Create worktree',
'branchPickerDialog.tooltip.worktreeAlreadyExists': 'Worktree already exists',
'branchPickerDialog.tooltip.rename': 'Rename branch',
'branchPickerDialog.tooltip.renameDisabledForRoot': 'Cannot rename root branch',
'branchPickerDialog.tooltip.delete': 'Delete branch',
'branchPickerDialog.tooltip.deleteCurrentBranch': 'Cannot delete current branch',
'branchPickerDialog.tooltip.deleteDisabledForRoot': 'Cannot delete root branch',
'branchPickerDialog.tooltip.deleteWorktree': 'Remove worktree',
'branchPickerDialog.tooltip.deleteWorktreeRootProtected': 'Cannot remove root worktree',
'branchPickerDialog.toast.branchRenamed': 'Branch renamed',
'branchPickerDialog.toast.failedToRenameBranch': 'Failed to rename branch',
'branchPickerDialog.toast.branchDeleted': 'Branch deleted',
'branchPickerDialog.toast.branchNotMerged': 'Branch is not fully merged',
'branchPickerDialog.toast.confirmAgainToForceDelete': 'Confirm again to force delete',
'branchPickerDialog.toast.failedToDeleteBranch': 'Failed to delete branch',
'branchPickerDialog.toast.worktreeCreated': 'Worktree created',
'branchPickerDialog.toast.failedToCreateWorktree': 'Failed to create worktree',
'branchPickerDialog.error.failedToLoad': 'Failed to load branches',
'branchPickerDialog.error.renameRejected': 'Rename was rejected',
'branchPickerDialog.error.renameFailed': 'Failed to rename branch',
'branchPickerDialog.error.deleteRejected': 'Delete was rejected',
'branchPickerDialog.error.deleteFailed': 'Failed to delete branch',
'branchPickerDialog.error.createWorktreeFailed': 'Failed to create worktree',
'projectEditDialog.title': 'Edit project',
'projectEditDialog.field.name': 'Name',
'projectEditDialog.field.namePlaceholder': 'Project name',
'projectEditDialog.field.color': 'Color',
'projectEditDialog.field.icon': 'Icon',
'projectEditDialog.field.preview': 'Preview',
'projectEditDialog.field.iconBackground': 'Icon Background',
'projectEditDialog.field.iconBackgroundAria': 'Project icon background color',
'projectEditDialog.option.none': 'None',
'projectEditDialog.actions.uploadIcon': 'Upload Icon',
'projectEditDialog.actions.uploading': 'Uploading...',
'projectEditDialog.actions.discoverFavicon': 'Discover Favicon',
'projectEditDialog.actions.discovering': 'Discovering...',
'projectEditDialog.actions.removeProjectIcon': 'Remove Project Icon',
'projectEditDialog.actions.removing': 'Removing...',
'projectEditDialog.actions.undoRemove': 'Undo Remove',
'projectEditDialog.actions.clear': 'Clear',
'projectEditDialog.actions.cancel': 'Cancel',
'projectEditDialog.actions.save': 'Save',
'projectEditDialog.toast.failedToUploadIcon': 'Failed to upload project icon',
'projectEditDialog.toast.iconUpdated': 'Project icon updated',
'projectEditDialog.toast.failedToRemoveIcon': 'Failed to remove project icon',
'projectEditDialog.toast.iconRemoved': 'Project icon removed',
'projectEditDialog.toast.failedToDiscoverIcon': 'Failed to discover project icon',
'projectEditDialog.toast.customIconAlreadySet': 'Custom icon already set for this project',
'projectEditDialog.toast.iconDiscovered': 'Project icon discovered',
'agentManager.sidebar.search.placeholder': 'Search Agent Groups...',
'agentManager.sidebar.actions.newAgentGroup': 'New Agent Group',
'agentManager.sidebar.actions.more': '... More ({count})',
'agentManager.sidebar.actions.showLess': 'Show less',
'agentManager.sidebar.section.agentGroups': 'Agent Groups',
'agentManager.sidebar.state.loading': 'Loading...',
'agentManager.sidebar.state.noGroupsFound': 'No groups found',
'agentManager.sidebar.state.noGroupsYet': 'No agent groups yet',
'agentManager.sidebar.state.createToGetStarted': 'Create a new agent group to get started',
'agentManager.sidebar.item.modelCountSingle': '{count} model',
'agentManager.sidebar.item.modelCountPlural': '{count} models',
'agentManager.sidebar.item.groupMenuAria': 'Group menu',
'agentManager.sidebar.item.delete': 'Delete',
'agentManager.sidebar.relativeTime.now': 'now',
'agentManager.sidebar.relativeTime.minutes': '{count}m',
'agentManager.sidebar.relativeTime.hours': '{count}h',
'agentManager.sidebar.relativeTime.days': '{count}d',
'agentManager.sidebar.dialog.deleteGroupTitle': 'Delete agent group',
'agentManager.sidebar.dialog.deleteGroupDescription': 'Delete "{group}"? This removes all worktrees and sessions in this group.',
'agentManager.sidebar.dialog.cancel': 'Cancel',
'agentManager.sidebar.dialog.delete': 'Delete',
'agentManager.sidebar.dialog.deleting': 'Deleting...',
'agentManager.sidebar.toast.deletingGroup': 'Deleting "{group}"...',
'agentManager.sidebar.toast.deletedGroup': 'Deleted "{group}"',
'agentManager.sidebar.toast.failedToDeleteGroup': 'Failed to fully delete "{group}"',
'agentManager.detail.header.modelCountSingle': '{count} model',
'agentManager.detail.header.modelCountPlural': '{count} models',
'agentManager.detail.header.noBranch': 'No branch',
'agentManager.detail.actions.worktreeActionsAria': 'Worktree actions',
'agentManager.detail.actions.removeThisWorktree': 'Remove this worktree',
'agentManager.detail.actions.keepThisRemoveOthers': 'Leave this one, remove others',
'agentManager.detail.actions.copyWorktreePath': 'Copy Worktree Path',
'agentManager.detail.dialog.removeWorktreeTitle': 'Remove worktree',
'agentManager.detail.dialog.removeOtherWorktreesTitle': 'Remove other worktrees',
'agentManager.detail.dialog.removeWorktreeDescription': 'Remove "{label}"? This deletes all sessions in that worktree and removes the worktree itself.',
'agentManager.detail.dialog.removeOtherWorktreesDescription': 'Keep "{label}" and remove the other worktrees in "{group}".',
'agentManager.detail.dialog.cancel': 'Cancel',
'agentManager.detail.dialog.remove': 'Remove',
'agentManager.detail.dialog.removeOthers': 'Remove others',
'agentManager.detail.dialog.working': 'Working...',
'agentManager.detail.state.loadingSessionFor': 'Loading session for {label}',
'agentManager.detail.state.sessionId': 'Session ID: {id}',
'agentManager.detail.state.noSessionsInGroup': 'No sessions in this group',
'agentManager.detail.toast.noWorktreePath': 'No worktree path available',
'agentManager.detail.toast.worktreePathCopied': 'Worktree path copied',
'agentManager.detail.toast.failedToCopyPath': 'Failed to copy path',
'agentManager.detail.toast.removingWorktree': 'Removing worktree...',
'agentManager.detail.toast.removingOtherWorktrees': 'Removing other worktrees...',
'agentManager.detail.toast.failedToFullyRemoveWorktree': 'Failed to fully remove worktree',
'agentManager.detail.toast.worktreeRemoved': 'Worktree removed',
'agentManager.detail.toast.otherWorktreesRemoved': 'Removed other worktrees',
'agentManager.empty.groupName.label': 'Group Name',
'agentManager.empty.groupName.placeholder': 'e.g. feature-auth, bugfix-login',
'agentManager.empty.groupName.description': 'Used for worktree directory and branch naming',
'agentManager.empty.baseBranch.label': 'Base Branch',
'agentManager.empty.baseBranch.description': 'Creates new branches from {branch}',
'agentManager.empty.setupCommands.label': 'Setup commands',
'agentManager.empty.setupCommands.configured': '{count} configured',
'agentManager.empty.setupCommands.description': 'Commands run in each new worktree. Use $ROOT_PROJECT_PATH for project root.',
'agentManager.empty.setupCommands.loading': 'Loading...',
'agentManager.empty.setupCommands.commandPlaceholder': 'e.g., bun install',
'agentManager.empty.setupCommands.removeCommandAria': 'Remove command',
'agentManager.empty.setupCommands.addCommand': 'Add command',
'agentManager.empty.agent.label': 'Agent',
'agentManager.empty.agent.description': 'Defaults to your configured default agent',
'agentManager.empty.models.label': 'Models',
'agentManager.empty.models.addModel': 'Add model',
'agentManager.empty.models.selectedSingle': '{count} model selected',
'agentManager.empty.models.selectedPlural': '{count} models selected',
'agentManager.empty.prompt.label': 'Prompt',
'agentManager.empty.prompt.placeholder': 'Ask anything...',
'agentManager.empty.prompt.addAttachmentAria': 'Add attachment',
'agentManager.empty.actions.startAgentGroupAria': 'Start Agent Group',
'agentManager.empty.toast.fileTooLarge': 'File "{fileName}" is too large (max 10MB)',
'agentManager.empty.toast.failedToAttach': 'Failed to attach "{fileName}"',
'agentManager.empty.toast.attachedSingle': 'Attached {count} file',
'agentManager.empty.toast.attachedPlural': 'Attached {count} files',
'agentManager.empty.toast.failedToCreateGroup': 'Failed to create agent group',
'openInApp.actions.open': 'Open',
'openInApp.actions.openInAria': 'Open in {app}',
'openInApp.actions.chooseAppAria': 'Choose app to open',
'openInApp.actions.copyPath': 'Copy Path',
'openInApp.actions.refreshApps': 'Refresh Apps',
'openInApp.toast.pathCopied': 'Path copied to clipboard',
'projectActions.actions.addActionAria': 'Add action',
'projectActions.actions.addAction': 'Add action',
'projectActions.actions.addNewAction': 'Add new action',
'projectActions.actions.autoDiscover': 'Auto-discover',
'projectActions.actions.chooseActionAria': 'Choose project action',
'projectActions.actions.openPreview': 'Open Preview',
'projectActions.actions.runNamedAria': 'Run {name}',
'projectActions.actions.stopNamedAria': 'Stop {name}',
'projectActions.label.fallbackAction': 'Action',
'projectActions.toast.openedUrlFromOutput': 'Opened URL from action output',
'projectActions.toast.openedForwardedUrl': 'Opened forwarded URL',
'projectActions.toast.openedActionUrl': 'Opened action URL',
'projectActions.error.noActiveDirectory': 'No active directory',
'projectActions.error.noActiveDirectoryForAction': 'No active directory for action',
'projectActions.error.failedToCreateTerminalSession': 'Failed to create terminal session',
'projectActions.error.invalidCustomUrlFormat': 'Invalid custom URL format',
'projectActions.error.selectedDesktopSshForwardUnavailable': 'Selected desktop SSH forward is unavailable',
'projectActions.error.failedToRunAction': 'Failed to run action',
'mcpDropdown.title': 'MCP Servers',
'mcpDropdown.actions.refreshAria': 'Refresh',
'mcpDropdown.actions.openAria': 'MCP servers',
'mcpDropdown.statusAria': 'MCP status',
'mcpDropdown.status.unknown': 'Unknown',
'mcpDropdown.status.connected': 'Connected',
'mcpDropdown.status.failed': 'Failed: {error}',
'mcpDropdown.status.unknownError': 'Unknown error',
'mcpDropdown.status.needsAuth': 'Needs authentication',
'mcpDropdown.status.needsRegistration': 'Needs registration: {error}',
'mcpDropdown.empty.configureInConfig': 'Configure MCP servers in OpenCode config.',
'sessionAuth.error.rateLimitTitle': 'Too many attempts',
'sessionAuth.error.networkTitle': 'Unable to reach server',
'sessionAuth.error.rateLimitDescriptionSingle': 'Please wait {minutes} minute before trying again.',
'sessionAuth.error.rateLimitDescriptionPlural': 'Please wait {minutes} minutes before trying again.',
'sessionAuth.error.networkDescription': 'We could not verify the UI session. Check that the service is running and try again.',
'sessionAuth.error.retry': 'Retry',
'sessionAuth.error.passkeySetupFailed': 'Passkey setup failed.',
'sessionAuth.error.incorrectPassword': 'Incorrect password. Try again.',
'sessionAuth.error.unexpectedResponse': 'Unexpected response from server.',
'sessionAuth.error.networkRetry': 'Network error. Check connection and retry.',
'sessionAuth.error.passkeySignInCanceled': 'Passkey sign-in was canceled.',
'sessionAuth.error.enterPasswordForPasskey': 'Enter your password to add a passkey.',
'sessionAuth.locked.tunnelTitle': 'Tunnel access required',
'sessionAuth.locked.unlockTitle': 'Unlock OpenChamber',
'sessionAuth.locked.tunnelDescription': 'Open this tunnel using the one-time connect link from the desktop app.',
'sessionAuth.locked.passwordDescription': 'This session is password-protected.',
'sessionAuth.locked.hostSwitcherHint': 'Use Local if remote is unreachable.',
'sessionAuth.actions.cancelPasskey': 'Cancel passkey',
'sessionAuth.actions.usePasskey': 'Use passkey',
'sessionAuth.actions.unlockingAria': 'Unlocking',
'sessionAuth.actions.unlockAria': 'Unlock',
'sessionAuth.actions.trustDevice': 'Trust this device',
'sessionAuth.actions.trustDeviceAria': 'Trust this device',
'sessionAuth.actions.cancelPasskeySetup': 'Cancel passkey setup',
'sessionAuth.actions.addPasskey': 'Add passkey',
'sessionAuth.password.placeholder': 'Enter password',
'sessionAuth.toast.passkeyAdded': 'Passkey added',
'sessionAuth.toast.passkeySetupCanceled': 'Passkey setup canceled',
'desktopHostSwitcher.title': 'Instance',
'desktopHostSwitcher.description': 'Switch between Local and remote OpenChamber servers',
'desktopHostSwitcher.header.current': 'Current',
'desktopHostSwitcher.header.default': 'Default',
'desktopHostSwitcher.header.currentColon': 'Current:',
'desktopHostSwitcher.header.currentDefaultColon': 'Current default:',
'desktopHostSwitcher.status.connected': 'Connected',
'desktopHostSwitcher.status.authRequired': 'Auth required',
'desktopHostSwitcher.status.checking': 'Checking',
'desktopHostSwitcher.status.updateRecommended': 'Update recommended',
'desktopHostSwitcher.status.incompatible': 'Incompatible',
'desktopHostSwitcher.status.wrongService': 'Wrong service',
'desktopHostSwitcher.status.unreachable': 'Unreachable',
'desktopHostSwitcher.status.unknown': 'Unknown',
'desktopHostSwitcher.status.ping': ' · {ms}ms ping',
'desktopHostSwitcher.statusAria': 'Instance status',
'desktopHostSwitcher.sshPhase.ready': 'Ready',
'desktopHostSwitcher.sshPhase.error': 'Error',
'desktopHostSwitcher.sshPhase.reconnecting': 'Reconnecting',
'desktopHostSwitcher.sshPhase.resolvingConfig': 'Resolving config',
'desktopHostSwitcher.sshPhase.checkingAuth': 'Checking auth',
'desktopHostSwitcher.sshPhase.connectingSsh': 'Connecting SSH',
'desktopHostSwitcher.sshPhase.probingRemote': 'Probing remote',
'desktopHostSwitcher.sshPhase.installing': 'Installing',
'desktopHostSwitcher.sshPhase.updating': 'Updating',
'desktopHostSwitcher.sshPhase.detectingServer': 'Detecting server',
'desktopHostSwitcher.sshPhase.startingServer': 'Starting server',
'desktopHostSwitcher.sshPhase.forwardingPorts': 'Forwarding ports',
'desktopHostSwitcher.sshPhase.idle': 'Idle',
'desktopHostSwitcher.ssh.needInstancesHint': 'Need SSH instances? Manage them in Settings.',
'desktopHostSwitcher.ssh.instanceFallback': 'SSH instance',
'desktopHostSwitcher.ssh.connectingTo': 'Connecting to {host}',
'desktopHostSwitcher.actions.refresh': 'Refresh',
'desktopHostSwitcher.actions.refreshInstancesAria': 'Refresh instances',
'desktopHostSwitcher.actions.remoteSsh': 'Remote SSH',
'desktopHostSwitcher.actions.instanceActionsAria': 'Instance actions',
'desktopHostSwitcher.actions.edit': 'Edit',
'desktopHostSwitcher.actions.delete': 'Delete',
'desktopHostSwitcher.actions.connect': 'Connect',
'desktopHostSwitcher.actions.defaultInstanceAria': 'Default instance',
'desktopHostSwitcher.actions.setAsDefaultAria': 'Set as default',
'desktopHostSwitcher.actions.setAsDefault': 'Set as default',
'desktopHostSwitcher.actions.openInNewWindowAria': 'Open in new window',
'desktopHostSwitcher.actions.openInNewWindow': 'Open in new window',
'desktopHostSwitcher.actions.addInstance': 'Add instance',
'desktopHostSwitcher.actions.cancel': 'Cancel',
'desktopHostSwitcher.actions.save': 'Save',
'desktopHostSwitcher.actions.add': 'Add',
'desktopHostSwitcher.actions.switchToLocal': 'Switch to Local',
'desktopHostSwitcher.actions.retry': 'Retry',
'desktopHostSwitcher.actions.switchInstanceAria': 'Switch instance',
'desktopHostSwitcher.actions.switchInstance': 'Switch instance',
'desktopHostSwitcher.actions.switchToAria': 'Switch to {instance}',
'desktopHostSwitcher.field.labelPlaceholder': 'Label',
'desktopHostSwitcher.field.labelOptionalPlaceholder': 'Label (optional)',
'desktopHostSwitcher.field.urlPlaceholder': 'https://host:port',
'desktopHostSwitcher.state.limitedOnPage': 'Instance switcher is limited on this page. Use Local to recover.',
'desktopHostSwitcher.state.loading': 'Loading...',
'desktopHostSwitcher.state.instanceUnreachable': 'Instance unreachable',
'desktopHostSwitcher.edit.title': 'Edit instance',
'desktopHostSwitcher.add.title': 'Add instance',
'desktopHostSwitcher.error.failedToSave': 'Failed to save',
'desktopHostSwitcher.error.failedToLoad': 'Failed to load',
'desktopHostSwitcher.error.invalidUrl': 'Invalid URL (must be http/https)',
'desktopHostSwitcher.error.failedToOpenNewWindow': 'Failed to open new window',
'desktopHostSwitcher.instance.local': 'Local',
'desktopHostSwitcher.instance.fallback': 'Instance',
'desktopHostSwitcher.startup.title': 'Default SSH instance unavailable',
'desktopHostSwitcher.startup.connectingTo': 'Connecting to {host}...',
'desktopHostSwitcher.startup.failed': 'Failed to connect the default SSH instance.',
'desktopHostSwitcher.toast.sshConnected': 'SSH instance "{host}" connected',
'desktopHostSwitcher.toast.sshFailedToConnect': 'SSH instance "{host}" failed to connect',
'desktopHostSwitcher.toast.instanceUnreachable': 'Instance "{host}" is unreachable',
'miniChat.header.newSession': 'New session',
'miniChat.header.session': 'Session',
'miniChat.header.defaultAgent': 'Default agent',
'miniChat.header.noModel': 'No model',
'miniChat.status.busy': 'Running',
'miniChat.status.retry': 'Retrying',
'miniChat.status.idle': 'Idle',
'miniChat.actions.pin': 'Pin above other windows',
'miniChat.actions.unpin': 'Unpin window',
'miniChat.actions.pinAria': 'Pin Mini Chat window',
'miniChat.actions.unpinAria': 'Unpin Mini Chat window',
'miniChat.actions.openMain': 'Open in main window',
'miniChat.actions.openMainAria': 'Open session in main window',
'miniChat.unavailable.title': 'Session unavailable',
'miniChat.unavailable.description': 'This session could not be loaded. It may have been deleted, archived, or opened from a different project context.',
'sessions.sidebar.session.menu.openMiniChatWindow': 'Open in Mini Chat Window',
'header.actions.newMiniChat': 'New Mini Chat Window',
'header.actions.newMiniChatAria': 'Open a new Mini Chat window',
'header.actions.openSessionMiniChat': 'Open Session in Mini Chat',
'header.actions.openSessionMiniChatAria': 'Open current session in Mini Chat',
'header.windowControls.groupAria': 'Window controls',
'header.windowControls.minimize': 'Minimize window',
'header.windowControls.maximize': 'Maximize window',
'header.windowControls.restore': 'Restore window',
'header.windowControls.close': 'Close window',
'errorBoundary.title': 'Something went wrong',
'errorBoundary.description': 'The application encountered an unexpected error. This has been logged for debugging.',
'errorBoundary.state.unknownError': 'Unknown error',
'errorBoundary.state.componentStackLabel': 'Component stack:',
'errorBoundary.actions.errorDetails': 'Error details',
'errorBoundary.actions.tryAgain': 'Try again',
'errorBoundary.actions.copy': 'Copy',
'errorBoundary.actions.copied': 'Copied',
'jsonTreeView.error.emptyJson': 'Empty JSON content',
'jsonTreeView.error.invalidJson': 'Invalid JSON',
'jsonTreeView.error.invalidJsonTitle': 'Invalid JSON',
'jsonTreeView.actions.expandAll': 'Expand All',
'jsonTreeView.actions.collapseAll': 'Collapse All',
'numberInput.actions.decreaseAria': 'Decrease value',
'numberInput.actions.increaseAria': 'Increase value',
'goToLineDialog.field.linePlaceholderShort': 'Line',
'goToLineDialog.field.linePlaceholder': 'Line number',
'goToLineDialog.actions.go': 'Go',
'goToLineDialog.helper.editorUnavailable': 'Editor unavailable.',
'goToLineDialog.helper.currentLineRange': 'Current Line: {current}. Type a line number between 1 and {max} to navigate to.',
'goToLineDialog.helper.goToLine': 'Go to line {line}',
'dialog.common.actions.close': 'Close',
'filesView.toast.relativePathCopied': 'Relative path copied',
'filesView.tree.menu.copyRelativePath': 'Copy Relative Path',
'multiRun.branchSelector.placeholder.selectSourceBranch': 'Select source branch...',
'multiRun.branchSelector.status.loadingBranches': 'Loading branches...',
'multiRun.branchSelector.status.noBranchesFound': 'No branches found',
'multiRun.branchSelector.status.notInGitRepository': 'Not in a git repository.',
'multiRun.branchSelector.groups.localBranches': 'Local branches',
'multiRun.branchSelector.groups.remoteBranches': 'Remote branches',
'multiRun.window.actions.closeAria': 'Close multi-run',
'multiRun.window.description': 'OpenChamber Multi-Run window.',
'voice.status.idle': 'Voice Ready',
'voice.status.listening': 'Listening...',
'voice.status.processing': 'Processing...',
'voice.status.speaking': 'Speaking...',
'voice.status.error': 'Voice Error',
'voice.status.conversationModeActiveAria': 'Conversation mode active',
'voice.action.finishAndTranscribe': 'Finish and transcribe voice input',
'onboarding.common.actions.back': 'Back',
'onboarding.common.copyToClipboard': 'Copy to clipboard',
'onboarding.common.status.copiedToClipboard': 'Copied to clipboard',
'onboarding.chooser.title': 'Welcome to OpenChamber',
'onboarding.chooser.description': 'Choose how you want to connect to get started.',
'onboarding.chooser.tabs.localInstall': 'Local Install',
'onboarding.chooser.tabs.connectRemote': 'Connect Remote',
'onboarding.localSetup.title': 'Setting Up OpenCode',
'onboarding.localSetup.description': 'Install OpenCode CLI to continue.',
'onboarding.localSetup.dialog.selectOpencodeBinary': 'Select opencode binary',
'onboarding.localSetup.errors.cliNotReady': 'OpenCode CLI is not ready yet. Please confirm installation is complete and try again.',
'onboarding.localSetup.errors.detectionFailed': 'Detection failed',
'onboarding.localSetup.windows.title': 'Windows setup',
'onboarding.localSetup.windows.stepInstallWsl': 'Install OpenCode with the command below.',
'onboarding.localSetup.windows.stepInstallWslSuffix': '',
'onboarding.localSetup.windows.stepRunInstallInWsl': 'Run the install command below in a Windows terminal.',
'onboarding.localSetup.windows.stepSetBinaryPath': 'If OpenChamber does not detect OpenCode automatically, set the binary path below.',
'onboarding.localSetup.intro': 'OpenCode is the heart of OpenChamber — install it to get started.',
'onboarding.localSetup.docs.windows': 'OpenCode docs',
'onboarding.localSetup.docs.default': 'OpenCode docs',
'onboarding.localSetup.actions.checking': 'Checking…',
'onboarding.localSetup.actions.checkAndContinue': "I've completed installation, check and continue",
'onboarding.localSetup.actions.checkNow': 'Check now',
'onboarding.localSetup.helper.checkAndContinue': 'Click to check if OpenCode CLI is available. If successful, you\'ll automatically enter the main screen.',
'onboarding.localSetup.status.watching': 'Waiting for OpenCode',
'onboarding.localSetup.status.autoContinue': "We'll continue automatically once it's detected.",
'onboarding.localSetup.field.alreadyInstalled': 'Already installed? Set the OpenCode CLI path:',
'onboarding.localSetup.advanced.title': 'Set a custom binary path',
'onboarding.localSetup.troubleshoot.title': 'Having trouble?',
'onboarding.localSetup.actions.browse': 'Browse',
'onboarding.localSetup.actions.apply': 'Apply',
'onboarding.localSetup.helper.saveAndReload': 'Saves to OpenChamber settings and reloads OpenCode configuration.',
'onboarding.localSetup.remotePreference': 'Prefer to use a remote server?',
'onboarding.localSetup.actions.connectRemoteServer': 'Connect to Remote Server →',
'onboarding.localSetup.windows.hintInstallInWsl': 'On Windows, install and run OpenCode natively.',
'onboarding.localSetup.windows.hintDetectionFailed': 'If detection fails, set a native path such as opencode.cmd or opencode.exe.',
'onboarding.localSetup.hint.ensurePath': 'Already installed? Make sure opencode is in your PATH.',
'onboarding.localSetup.hint.setEnv': 'Or set OPENCODE_BINARY environment variable.',
'onboarding.localSetup.hint.missingRuntime': 'If you see "env: node: No such file or directory" or "env: bun: No such file or directory", install that runtime or ensure it is on PATH.',
'onboarding.remoteConnection.title': 'Connect to Remote Server',
'onboarding.remoteConnection.titleRecovery': 'Connect to a Different Server',
'onboarding.remoteConnection.description': 'Enter the address of an OpenChamber server to connect to.',
'onboarding.remoteConnection.field.serverAddress': 'Server Address',
'onboarding.remoteConnection.field.serverAddressPlaceholder': 'https://your-server.example.com:4096',
'onboarding.remoteConnection.field.nameOptional': 'Name (optional)',
'onboarding.remoteConnection.field.namePlaceholder': 'My Remote Server',
'onboarding.remoteConnection.errors.connectionTestFailed': 'Connection test failed',
'onboarding.remoteConnection.errors.failedToSaveConnection': 'Failed to save connection',
'onboarding.remoteConnection.status.connectedSuccessfully': 'Connected successfully ({latencyMs}ms)',
'onboarding.remoteConnection.status.authWarning': 'Server requires authentication. You can still connect.',
'onboarding.remoteConnection.status.connectionFailed': 'Connection Failed',
'onboarding.remoteConnection.status.suggestionsUnreachable': 'Suggestions: Check the server address, verify the server is running, or check your network connection.',
'onboarding.remoteConnection.status.suggestionsWrongService': 'Suggestions: Verify the URL points to an OpenChamber server, or contact the server administrator.',
'onboarding.remoteConnection.actions.testing': 'Testing…',
'onboarding.remoteConnection.actions.testConnection': 'Test Connection',
'onboarding.remoteConnection.actions.connectAndRestart': 'Connect & Restart',
'onboarding.remoteConnection.actions.whatToDo': 'What would you like to do?',
'onboarding.remoteConnection.actions.chooseDifferentServer': 'Choose Different Server',
'onboarding.remoteConnection.actions.useLocalInstead': 'Use Local Instead',
'onboarding.remoteConnection.probe.authMessage': 'Server requires authentication. You can still connect, but may need to provide credentials.',
'onboarding.remoteConnection.probe.updateRecommendedMessage': 'This instance is running a different OpenChamber version. You can connect, but update both apps if something does not work.',
'onboarding.remoteConnection.probe.incompatibleMessage': 'Server is running OpenChamber but is not compatible with this app version. Update OpenChamber on the server, then try again.',
'onboarding.remoteConnection.probe.wrongServiceMessage': 'Server responded but is not running OpenChamber. Verify the address points to an OpenChamber server.',
'onboarding.remoteConnection.probe.unreachableMessage': 'Server is unreachable. Check your network connection and verify the server address.',
'onboarding.desktopRecovery.localUnavailable.title': 'Local OpenCode Unavailable',
'onboarding.desktopRecovery.localUnavailable.description': 'OpenCode CLI could not be started or is not installed. Install OpenCode or connect to a remote server instead.',
'onboarding.desktopRecovery.localUnavailable.retry': 'Retry Local',
'onboarding.desktopRecovery.localUnavailable.useLocal': 'Set Up Local',
'onboarding.desktopRecovery.noDefaultConnection.title': 'No Default Connection',
'onboarding.desktopRecovery.noDefaultConnection.description': 'Your saved default connection could not be found. Choose how you want to connect.',
'onboarding.desktopRecovery.remoteUnreachable.title': 'Remote Server Unreachable',
'onboarding.desktopRecovery.remoteUnreachable.description': 'Could not connect to "{host}". Check your network connection and verify the server address.',
'onboarding.desktopRecovery.remoteUnreachable.retry': 'Retry Connection',
'onboarding.desktopRecovery.incompatibleServer.title': 'Incompatible Server',
'onboarding.desktopRecovery.incompatibleServer.description': 'The server at "{host}" is not running OpenChamber. Verify the address points to an OpenChamber server.',
'onboarding.desktopRecovery.remoteIncompatible.title': 'Server Update Required',
'onboarding.desktopRecovery.remoteIncompatible.description': 'The OpenChamber server at "{host}" is not compatible with this app version. Update OpenChamber on the server, then try again.',
'onboarding.desktopRecovery.common.useLocal': 'Use Local',
'onboarding.desktopRecovery.common.useRemote': 'Use Remote',
'onboarding.desktopRecovery.actions.retrying': 'Retrying…',
'onboarding.desktopRecovery.actions.retryConnection': 'Retry Connection',
'startup.initRecovery.title': 'Startup failed',
'startup.initRecovery.description': 'OpenChamber could not finish initialization. Check that the server is running, then retry.',
'startup.initRecovery.retry': 'Retry',
'startup.initRecovery.retrying': 'Retrying…',
'onboarding.desktopRecovery.placeholders.remoteServer': 'the remote server',
'onboarding.desktopRecovery.placeholders.unknownServer': 'unknown',
'vscodeLayout.title.chat': 'Chat',
'vscodeLayout.title.newSession': 'New session',
'vscodeLayout.title.sessions': 'Sessions',
'vscodeLayout.title.sessionFallback': 'Session',
'vscodeLayout.actions.backToSessionsAria': 'Back to sessions',
'vscodeLayout.actions.archiveAllAria': 'Archive all sessions',
'vscodeLayout.actions.archiveAllConfirm': 'Archive all',
'vscodeLayout.actions.archiveAllSuccess': 'Archived {count} session(s)',
'vscodeLayout.actions.archiveAllError': 'Failed to archive {count} session(s)',
'vscodeLayout.actions.cancel': 'Cancel',
'vscodeLayout.actions.newSessionAria': 'New session',
'vscodeLayout.actions.openAgentManagerAria': 'Open Agent Manager',
'vscodeLayout.actions.resizeSessionsSidebarAria': 'Resize sessions sidebar',
'vscodeLayout.actions.settingsAria': 'Settings',
'vscodeLayout.quota.title': 'Rate limits',
'vscodeLayout.quota.mode.used': 'Used',
'vscodeLayout.quota.mode.remaining': 'Remaining',
'vscodeLayout.quota.lastUpdated': 'Last updated {time}',
'vscodeLayout.quota.noRateLimitsAvailable': 'No rate limits available.',
'vscodeLayout.quota.noRateLimitsReported': 'No rate limits reported.',
'vscodeLayout.quota.actions.rateLimitsAria': 'Rate limits',
'vscodeLayout.quota.actions.showUsedAria': 'Show used quota',
'vscodeLayout.quota.actions.showRemainingAria': 'Show remaining quota',
'vscodeLayout.quota.actions.refreshAria': 'Refresh rate limits',
'updateDialog.header.updateAvailable': 'Update Available',
'updateDialog.header.updating': 'Updating OpenChamber...',
'updateDialog.changelog.title': "What's new",
'updateDialog.status.installingUpdate': 'Installing update...',
'updateDialog.status.serverRestarting': 'Server restarting...',
'updateDialog.status.waitingForServer': 'Waiting for server...',
'updateDialog.status.autoReloadHint': 'The page will reload automatically when the update is complete.',
'updateDialog.fallback.updateViaTerminal': 'Or update via terminal:',
'updateDialog.actions.copyCommand': 'Copy command',
'updateDialog.actions.copied': 'Copied!',
'updateDialog.status.downloadingPayload': 'Downloading update payload...',
'updateDialog.actions.downloadUpdate': 'Download Update',
'updateDialog.status.downloading': 'Downloading...',
'updateDialog.actions.restartToUpdate': 'Restart to Update',
'updateDialog.actions.updateNow': 'Update Now',
'updateDialog.status.updating': 'Updating...',
'updateDialog.error.updateFailed': 'Update failed',
'updateDialog.error.takingLonger': 'Update is taking longer than expected. Wait a bit and refresh, or run: openchamber update',
'opencodeUpdate.toast.available.title': 'OpenCode update',
'opencodeUpdate.toast.available.description': 'Version {version} available.',
'opencodeUpdate.toast.actions.update': 'Update',
'opencodeUpdate.toast.actions.dismiss': 'Dismiss',
'opencodeUpdate.toast.actions.reload': 'Reload OpenCode',
'opencodeUpdate.toast.upgrading.title': 'Updating OpenCode...',
'opencodeUpdate.toast.upgrading.description': 'Keep OpenChamber open.',
'opencodeUpdate.toast.updated.title': 'OpenCode updated',
'opencodeUpdate.toast.updated.description': 'Update installed.',
'opencodeUpdate.toast.updated.descriptionWithVersion': 'Version {version} installed.',
'opencodeUpdate.toast.failed.title': 'Could not update OpenCode',
'opencodeUpdate.toast.failed.description': 'The OpenCode upgrade failed.',
'opencodeUpdate.toast.reload.message': 'Restarting OpenCode...',
'memoryDebugPanel.title': 'Debug Panel',
'memoryDebugPanel.tabs.memory': 'Memory',
'memoryDebugPanel.tabs.streaming': 'Streaming',
'memoryDebugPanel.section.sessionsInMemory': 'Sessions in Memory',
'memoryDebugPanel.section.uiStreamingMetrics': 'UI Streaming Metrics',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code Bridge Metrics',
'memoryDebugPanel.section.noUiSamples': 'No UI streaming samples yet. Start a stream and keep this panel open.',
'memoryDebugPanel.section.noVscodeSamples': 'No VS Code bridge samples yet.',
'memoryDebugPanel.metric.totalMessages': 'Total Messages',
'memoryDebugPanel.metric.cachedSessions': 'Cached Sessions',
'memoryDebugPanel.metric.viewportWindow': 'Viewport Window',
'memoryDebugPanel.metric.zombieTimeout': 'Zombie Timeout',
'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total Requests',
'memoryDebugPanel.metric.metrics': 'Metrics',
'memoryDebugPanel.metric.samples': 'Samples',
'memoryDebugPanel.metric.lastUpdate': 'Last Update',
'memoryDebugPanel.metric.uiMetrics': 'UI Metrics',
'memoryDebugPanel.metric.vscodeMetrics': 'VS Code Metrics',
'memoryDebugPanel.metric.messageListRenders': 'MsgList Renders',
'memoryDebugPanel.metric.messageListStreamRenders': 'MsgList Stream Renders',
'memoryDebugPanel.metric.chatMessageRenders': 'ChatMessage Renders',
'memoryDebugPanel.metric.chatMessageStreamRenders': 'ChatMessage Stream Renders',
'memoryDebugPanel.metric.chatMessageStaticDuringStream': 'ChatMessage Static During Stream',
'memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn': 'ChatMessage Static Outside Active Turn',
'memoryDebugPanel.metric.messagesValue': '{count} messages',
'memoryDebugPanel.metric.minutesValue': '{count} minutes',
'memoryDebugPanel.metric.msgsValue': '{count} msgs',
'memoryDebugPanel.metric.countValue': 'count {value}',
'memoryDebugPanel.metric.avgValue': 'avg {value}',
'memoryDebugPanel.metric.maxValue': 'max {value}',
'memoryDebugPanel.metric.totalValue': 'total {value}',
'memoryDebugPanel.actions.logState': 'Log State',
'memoryDebugPanel.actions.copyJson': 'Copy JSON',
'memoryDebugPanel.tooltip.logCurrentState': 'Log current memory state to browser console',
'memoryDebugPanel.streaming.copy.copied': 'Streaming debug JSON copied',
'memoryDebugPanel.streaming.copy.failed': 'Failed to copy JSON',
'memoryDebugPanel.streaming.copy.hint': 'Copy exports both UI and VS Code streaming metrics as JSON',
'memoryDebugPanel.common.idle': 'idle',
'memoryDebugPanel.common.live': 'live',
'memoryDebugPanel.common.notAvailable': 'n/a',
'memoryDebugPanel.common.untitled': 'Untitled',
'directoryTree.field.newDirectoryPlaceholder': 'new_directory',
'textarea.resizeHandleAria': 'Resize textarea',
'sidebar.resize.leftPanelAria': 'Resize left panel',
'sidebar.resize.rightPanelAria': 'Resize right panel',
'mainLayout.mobile.closeDrawerAria': 'Close drawer',
'sortableTabsStrip.aria.tabs': 'Tabs',
'openChamberLogo.aria.logo': 'OpenChamber logo',
'markdownRenderer.table.actions.copyTitle': 'Copy table',
'markdownRenderer.table.actions.downloadTitle': 'Download table',
'markdownRenderer.table.toast.downloadedAsFormat': 'Table downloaded as {format}',
'markdownRenderer.mermaid.actions.copyTitle': 'Copy',
'markdownRenderer.mermaid.actions.copySourceTitle': 'Copy source',
'markdownRenderer.mermaid.actions.downloadSvgTitle': 'Download SVG',
'markdownRenderer.mermaid.toast.downloadFailed': 'Failed to download diagram',
} as const;
export type I18nKey = keyof typeof dict;