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.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.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.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.', '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.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.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.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 aria label', 'gitView.changes.expandDirectoryAria': 'Expand Directory aria label', 'gitView.changes.revertAll': 'Revert all', 'gitView.changes.revertAllDescriptionPlural': 'Revert All Description Plural', 'gitView.changes.revertAllDescriptionSingle': 'Revert All Description Single', 'gitView.changes.revertAllDialogTitle': 'Revert all changes?', 'gitView.changes.revertFileAria': 'Revert File aria label', 'gitView.changes.revertFileTooltip': 'Revert changes', 'gitView.changes.reverting': 'Reverting...', 'gitView.changes.selectAllAria': 'Select all files', 'gitView.changes.selectFileAria': 'Select File aria label', 'gitView.changes.title': 'Changes', 'gitView.changes.toggleDirectorySelectionAria': 'Toggle Directory Selection aria label', '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.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': 'Detected Description', 'gitView.conflict.detectedTitle': 'Detected Title', 'gitView.conflict.errorLoadingDetails': 'Error Loading Details', 'gitView.conflict.headInfo': 'HEAD information:', 'gitView.conflict.loadFailed': 'Load Failed', 'gitView.conflict.loading': 'Loading conflict details...', 'gitView.conflict.noActiveSession': 'No Active Session', 'gitView.conflict.noActiveSessionDescription': 'No Active Session Description', '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.removeRemoteAria': 'Remove Remote aria label', 'gitView.header.removeRemoteTitle': 'Remove Remote Title', 'gitView.history.binary': 'Binary', 'gitView.history.binaryNoDiff': 'Binary file — no diff available', 'gitView.history.commitsPlaceholder': 'Commits Placeholder', '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.logSize100': 'Log Size100', 'gitView.history.logSize25': 'Log Size25', 'gitView.history.logSize50': 'Log Size50', '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.integrate.checking': 'Checking…', 'gitView.integrate.cherryPickAbortedToast': 'Cherry Pick Aborted Toast', 'gitView.integrate.cherryPickConflictDescription': 'Cherry Pick Conflict Description', 'gitView.integrate.cherryPickConflictToast': 'Cherry Pick Conflict Toast', 'gitView.integrate.cherryPickContinueFailedToast': 'Cherry Pick Continue Failed Toast', 'gitView.integrate.cherryPickFinishedToast': 'Cherry Pick Finished Toast', 'gitView.integrate.commitsMovedDescriptionPlural': 'Commits Moved Description Plural', 'gitView.integrate.commitsMovedDescriptionSingle': 'Commits Moved Description Single', 'gitView.integrate.commitsMovedToast': 'Commits Moved Toast', '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 Toast', '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': 'No Active Session Description', 'gitView.integrate.noCommitsToMove': 'No commits to move.', 'gitView.integrate.noCommitsToMoveToast': 'No Commits To Move Toast', '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 Count', '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': 'Confirm Button', 'gitView.stash.description': 'Description', 'gitView.stash.mergeWith': 'Merge With', 'gitView.stash.rebaseOnto': 'Rebase Onto', 'gitView.stash.restoreAfterOperation': 'Restore After Operation', 'gitView.stash.restoreAria': 'Restore aria label', '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', '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 upstream', '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.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.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.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.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.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.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.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.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.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.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 by title or #123, or paste issue URL', '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 by title or #123, or paste pull request URL', '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 issues or enter #123...', 'session.githubIntegration.search.prsPlaceholder': 'Search PRs or enter #456...', '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.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 current workspace changes for high-signal issues only.', 'chat.commandAutocomplete.badge.skill': 'skill', '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.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.textSelection.toast.noProject': 'No project found for this session', 'chat.textSelection.toast.addToNotesFailed': 'Failed to add to notes', 'chat.textSelection.toast.addToNotesSuccess': 'Added distilled insight 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 distilled insight 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.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; ! for shell', 'chat.chatInput.placeholder.selectSession': 'Select or create a session to start chatting', 'chat.chatInput.toast.compactFailed': 'Failed to compact session', 'chat.chatInput.toast.summaryFailed': 'Failed to generate summary', 'chat.chatInput.toast.reviewFailed': 'Failed to review changes', '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.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.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.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', '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 (WSL recommended)', 'onboarding.localSetup.windows.stepInstallWsl': 'Install WSL (if needed) with', 'onboarding.localSetup.windows.stepInstallWslSuffix': 'in PowerShell.', 'onboarding.localSetup.windows.stepRunInstallInWsl': 'Run the install command below inside your WSL 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 Windows + WSL 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 in WSL for best compatibility.', 'onboarding.localSetup.windows.hintDetectionFailed': 'If detection fails, set a native path (opencode.cmd/opencode.exe), wsl.exe, or wsl:/usr/local/bin/opencode.', '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.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.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.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 available', 'opencodeUpdate.toast.available.description': 'Version {version} is ready to install.', 'opencodeUpdate.toast.actions.update': 'Update', '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': 'Reload OpenCode to start using the updated version.', 'opencodeUpdate.toast.updated.descriptionWithVersion': 'Version {version} is installed. Reload OpenCode to use it.', '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;