export const en = { common: { back: "Back", loading: "Loading...", actions: { back: "Back", cancel: "Cancel", close: "Close", copy: "Copy", dismiss: "Dismiss", retry: "Retry", search: "Search", select: "Select", }, placeholders: { search: "Search...", }, empty: { noResults: "No results found", noOptionsMatchSearch: "No options match your search.", }, states: { loading: "Loading...", starting: "Starting...", copied: "Copied", copiedLabel: "Copied {{label}}", downloadComplete: "Download complete", downloadFailed: "Download failed", }, errors: { error: "Error", unableToSave: "Unable to save", nameRequired: "Name is required", daemonUnavailable: "Daemon unavailable", daemonClientUnavailable: "Daemon client unavailable", daemonClientDisconnected: "Daemon client is disconnected", noFileFound: "No file found for {{token}}", unexpectedDictationError: "An unexpected error occurred while handling dictation.", }, connectionStatus: { online: "Online", connecting: "Connecting", offline: "Offline", error: "Error", idle: "Idle", }, }, shell: { menu: { toggleSidebar: "Toggle sidebar", open: "Open menu", close: "Close menu", }, commandCenter: { placeholder: "Search commands, workspaces, and agents...", noMatches: "No matches", actions: "Actions", workspaces: "Workspaces", agents: "Agents", newAgent: "New agent", addProject: "Add project", home: "Home", modelGroupLabel: "Model", modelSearchKeywords: "switch model change model set model select model", }, }, composer: { placeholders: { desktop: "Message the agent, tag @files, or use /commands and /skills", mobile: "Message, @files, /commands", fallback: "Message...", }, input: { accessibilityLabel: "Message agent...", focusHint: "{{shortcut}} to focus", addAttachment: "Add attachment", interruptAgent: "Interrupt agent", queueMessage: "Queue message", sendAndInterrupt: "Send and interrupt", sendMessage: "Send message", queue: "Queue", send: "Send", }, cancel: { cancelingAgent: "Canceling agent", stopAgent: "Stop agent", interrupt: "Interrupt", }, voice: { enableVoiceMode: "Enable Voice mode", voiceMode: "Voice mode", unmuteVoiceMode: "Unmute Voice mode", muteVoiceMode: "Mute Voice mode", stopDictation: "Stop dictation", startDictation: "Start dictation", unmuteVoice: "Unmute voice", muteVoice: "Mute voice", dictation: "Dictation", interruptBeforeVoice: "Interrupt the agent before starting voice mode", }, attachments: { addImage: "Add image", addFile: "Upload file", addIssueOrPr: "Add issue or PR", addIssueOrPr_mr: "Add issue or MR", dropImagesHere: "Drop images here", dropFilesHere: "Drop files here", editQueuedMessage: "Edit queued message", sendQueuedMessageNow: "Send queued message now", openImage: "Open image attachment", removeImage: "Remove image attachment", removeFile: "Remove file attachment", openGithub: "Open {{kind}} {{number}}", removeGithub: "Remove {{kind}} {{number}}", element: "Element", openBrowserElement: "Open browser element attachment", removeBrowserElement: "Remove browser element attachment", openReview: "Open review attachment", removeReview: "Remove review attachment", }, errors: { failedToSend: "Failed to send message", failedToCreateAgent: "Failed to create agent", noHostSelected: "No host selected", initialPromptRequired: "Initial prompt is required", alreadyLoading: "Already loading", uploadFailed: "Failed to upload file", fileTooLarge: "{{fileName}} is too large (max {{size}})", }, clientCommands: { archiveAgent: "Archive the current agent", freshDraft: "Archive this agent and start a fresh draft", }, github: { searching: "Searching...", noResults: "No results found.", searchPlaceholder: "Search issues and PRs...", searchPlaceholder_mr: "Search issues and MRs...", title: "Attach issue or PR", title_mr: "Attach issue or MR", }, }, agentControls: { provider: { fallback: "Provider", select: "Select agent provider", }, thinking: { title: "Thinking", unknown: "Unknown", extraHigh: "Extra high", select: "Select thinking option", selectWithValue: "Select thinking option ({{value}})", }, model: { unknown: "Unknown model", }, features: { title: "Features", open: "Open agent features", on: "On", off: "Off", }, mode: { title: "Mode", searchPlaceholder: "Search modes...", selectWithValue: "Select agent mode ({{value}})", }, hints: { thinking: "Thinking mode", model: "Change model", mode: "Change mode", }, }, agentStream: { empty: "Start chatting with this agent...", scrollToBottom: "Scroll to bottom", permission: { plan: "Plan", required: "Permission Required", deny: "Deny", accept: "Accept", implement: "Implement", question: "How would you like to proceed?", proposedPlan: "Proposed plan", }, }, agentPanel: { states: { notFound: "Agent not found", failedToLoad: "Failed to load agent", reconnecting: "Reconnecting...", timelineSyncFailed: "Couldn't refresh agent history. Retrying…", archivingTitle: "Archiving agent...", archivingSubtitle: "Please wait while we archive this agent.", }, unavailable: { selectedHost: "Selected host", unknownHost: "Cannot open this agent because {{serverLabel}} is not configured on this device.", addHost: "Add the host in Settings or open an agent on a configured server to continue.", preparingSession: "Preparing {{serverLabel}} session...", connecting: "Connecting to {{serverLabel}}...", showSoon: "We will show this agent in a moment.", showWhenOnline: "We will show this agent once the host is online.", reconnectingTo: "Reconnecting to {{serverLabel}}...", showAgainWhenReachable: "We will show this agent again as soon as the host is reachable.", }, archived: { callout: "This agent is archived", unarchive: "Unarchive", }, }, sessions: { title: "History", empty: "No sessions yet", actions: { loadMore: "Load more", }, }, agentList: { fallbackTitle: "New session", dateSections: { recent: "Recent", today: "Today", yesterday: "Yesterday", thisWeek: "This week", thisMonth: "This month", older: "Older", }, status: { initializing: "Starting", idle: "Idle", running: "Running", error: "Error", closed: "Closed", }, badges: { archived: "Archived", pending: "{{count}} pending", attention: "Attention", }, archiveSheet: { hostOffline: "Host offline", runningAgent: "This agent is still running. Archiving it will stop the agent.", archive: "Archive", }, }, message: { actions: { copyCode: "Copy code", copyTurn: "Copy turn", copyMessage: "Copy message", forkMenu: "Fork chat", forkInNewTab: "Fork in a new tab", forkInNewWorkspace: "Fork in a new workspace", forkUnavailable: "Update the host to use this.", forkMissingWorkspace: "This agent is not in a workspace.", forkFailed: "Failed to fork chat", openFile: "Open file", copied: "Copied", }, attachments: { dismissImage: "Dismiss image", closeImage: "Close image", imageLoadFailed: "Couldn't load image", imageUnavailable: "Image unavailable", imagePreviewUnavailable: "Image preview unavailable.", imagePreviewLoadFailed: "Unable to load image preview.", review: "Review", commentsOne: "1 comment", commentsMany: "{{count}} comments", textAttachment: "Text attachment", text: "Text", file: "File", }, speak: { header: "Spoke", }, activity: { details: "Details", }, dictation: { start: "Start voice dictation", cancel: "Cancel dictation", retry: "Retry dictation", insert: "Insert transcription", insertAndSend: "Insert transcription and send", failed: "Dictation failed: {{error}}", failedRetry: "Dictation failed. Tap retry.", }, question: { submit: "Submit", next: "Next", answerPlaceholder: "Type your answer...", otherPlaceholder: "Other...", }, todo: { title: "Tasks", empty: "No tasks yet.", }, compaction: { loading: "Compacting...", auto: "Context automatically compacted", manual: "Context manually compacted", withTokens: "Context compacted ({{tokens}}K tokens)", completed: "Context compacted", }, }, importSession: { title: "Import session", filters: { all: "All", }, status: { connectHost: "Connect to a host to import sessions", updateHost: "Update the host to import sessions.", noProviders: "No importable providers are enabled.", loading: "Loading recent sessions...", failedAll: "Could not load recent sessions.", failedProviders: "Could not load sessions for {{providers}}.", failedImport: "Could not import selected session.", }, actions: { refresh: "Refresh sessions", }, preview: { untitledSession: "Untitled session", noPrompt: "No prompt preview", }, empty: { noRecent: "No recent sessions to import.", alreadyImported: "All recent sessions are already imported.", noProviderSessions: "No {{provider}} sessions found.", }, row: { importing: "Importing...", }, }, workspace: { route: { loading: "Loading workspace", connecting: "Connecting", hostOffline: "{{hostName}} is offline", cannotReachHost: "Cannot reach {{hostName}}", hostStatus: "Host status: {{status}}", needsHostUpgrade: "Update your host to restore this workspace", manageHost: "Manage host", recovery: { archivedTitle: "Workspace archived", restoreDescription: "{{workspaceName}} was archived and its worktree was removed. Restore branch {{branch}} to open it again.", unarchiveDescription: "{{workspaceName}} is archived. Unarchive it to open it again.", restoreAction: "Restore", unarchiveAction: "Unarchive", restoringTitle: "Restoring workspace", restoringAction: "Restoring...", unavailableTitle: "Workspace unavailable", checkFailedTitle: "Couldn't check workspace", }, }, hoverCard: { scriptsAccessibility: "Workspace scripts", copyPath: "Copy path", copyBranchName: "Copy branch name", copied: "Copied", }, fileActions: { openFile: "Open file", copyPath: "Copy path", download: "Download", addToChat: "Add to chat…", moreActions: "More actions", }, fileExplorer: { sort: { name: "Name", modified: "Modified", size: "Size", }, context: { size: "Size", modified: "Modified", }, actions: { back: "Back", retry: "Retry", refresh: "Refresh files", refreshing: "Refreshing files", hideHiddenFiles: "Hide hidden files", showHiddenFiles: "Show hidden files", }, empty: { noFiles: "No files", noVisibleFiles: "No visible files", }, states: { unavailable: "Workspace is unavailable", loading: "Loading files...", }, errors: { failedToListDirectory: "Failed to list directory", }, }, setup: { descriptor: { label: "Setup", completed: "Setup completed", failed: "Setup failed", workspace: "Workspace setup", }, status: { running: "Running", completed: "Completed", failed: "Failed", waiting: "Waiting for setup output", }, waiting: "Setting up workspace...", empty: { noCommands: "No setup commands ran for this workspace.", }, accessibility: { noCommands: "No setup commands ran for this workspace", log: "Workspace setup log", }, log: { noOutput: "No output", }, }, browser: { unavailable: { title: "Browser is desktop-only", subtitle: "Open this workspace in Electron to use the built-in browser.", }, session: "Browser session {{browserId}}", controls: { back: "Back", forward: "Forward", stopLoading: "Stop loading", refresh: "Refresh", browserUrl: "Browser URL", enterUrl: "Enter URL", openDevTools: "Open browser dev tools", cancelSelector: "Cancel element selector", annotateElement: "Annotate element", screenshotElement: "Screenshot element", screenshotCopied: "Copied screenshot to clipboard", elementCopied: "Copied element to clipboard", screenshotFailed: "Couldn't copy screenshot", }, annotate: { title: "Annotate element", placeholder: "Message to the agent about this element…", submit: "Attach", cancel: "Cancel", }, devices: { label: "Device size", responsive: "Responsive", }, errors: { failedToLoad: "Failed to load page", invalidUrl: "Invalid browser URL", unsupportedProtocol: "Blocked unsupported browser URL: {{protocol}}", }, }, terminal: { hostDisconnected: "Host is not connected", unableToSubscribe: "Unable to subscribe to terminal", }, tabs: { loading: "Loading...", modified: "Unsaved changes", loadingAgentTitle: "Loading agent title", emptyPane: "No tabs in this pane.", fallback: { newAgent: "New agent", setup: "Setup", workspaceSetup: "Workspace setup", terminal: "Terminal", browser: "Browser", agent: "Agent", workspace: "Workspace", }, switcher: { trigger: "Switch tabs ({{count}} open)", title: "Switch tab", searchPlaceholder: "Search tabs", }, menu: { openFor: "Open menu for {{label}}", copyResumeCommand: "Copy resume command", copyAgentId: "Copy agent id", copyTerminalId: "Copy terminal id", copyFilePath: "Copy file path", rename: "Rename", closeAbove: "Close tabs above", closeBelow: "Close tabs below", closeLeft: "Close to the left", closeRight: "Close to the right", closeOthers: "Close other tabs", reloadAgent: "Reload agent", reloadAgentTooltip: "Reload agent to update skills, MCPs or login status.", close: "Close", renameTerminal: "Rename terminal", renameAgent: "Rename agent", }, actions: { newAgent: "New agent", newTerminal: "New terminal", preparingTerminal: "Preparing terminal tab", preparingTerminalTooltip: "Preparing terminal...", newBrowser: "New browser", exitFocusMode: "Exit focus mode", splitRight: "Split pane right", splitDown: "Split pane down", terminalProfilesMenu: "Terminal profiles", editTerminalProfiles: "Edit profiles…", pinTarget: "Pin", unpinTarget: "Unpin", }, explorer: { open: "Open explorer", close: "Close explorer", toggle: "Toggle explorer", changes: "Changes", files: "Files", }, toasts: { copyFailed: "Copy failed", agentIdCopiedLabel: "Agent ID", terminalIdCopiedLabel: "Terminal ID", resumeCommandCopiedLabel: "resume command", filePathCopiedLabel: "File path", resumeIdUnavailable: "Resume ID not available", resumeCommandUnavailable: "Resume command not available", reloadingAgent: "Reloading agent...", reloadedAgent: "Reloaded agent", failedToReloadAgent: "Failed to reload agent", }, confirmations: { close: "Close", cancel: "Cancel", archive: "Archive", unsavedTitle: "Unsaved changes", unsavedMessage: "This tab has changes that have not been saved. Closing it will discard the draft.", closeWithoutSaving: "Close without saving", closePaneTitle: "Close pane?", bulkUnsaved: "{{count}} tab(s) have unsaved changes. Closing will discard those drafts.", closeTerminalTitle: "Close terminal?", closeTerminalMessage: "Any running process in this terminal will be stopped immediately.", archiveRunningAgentTitle: "Archive running agent?", archiveRunningAgentMessage: "This agent is still running. Archiving it will stop the agent and close the tab.", closeTabsLeftTitle: "Close tabs to the left?", closeTabsRightTitle: "Close tabs to the right?", closeOtherTabsTitle: "Close other tabs?", bulk: { all: "This will archive {{agents}} agent(s), close {{terminals}} terminal(s), and close {{tabs}} tab(s). Any running process in a closed terminal will be stopped immediately.", agentsAndTerminals: "This will archive {{agents}} agent(s) and close {{terminals}} terminal(s). Any running process in a closed terminal will be stopped immediately.", terminalsAndTabs: "This will close {{terminals}} terminal(s) and close {{tabs}} tab(s). Any running process in a closed terminal will be stopped immediately.", agentsAndTabs: "This will archive {{agents}} agent(s) and close {{tabs}} tab(s).", terminals: "This will close {{terminals}} terminal(s). Any running process in a closed terminal will be stopped immediately.", tabs: "This will close {{tabs}} tab(s).", agents: "This will archive {{agents}} agent(s).", }, }, }, header: { actions: { workspaceActions: "Workspace actions", newAgent: "New agent", newTerminal: "New terminal", newBrowser: "New browser tab", importSession: "Import session", copyPath: "Copy workspace path", copyBranchName: "Copy branch name", showSetup: "Show setup", }, toasts: { workspacePathUnavailable: "Workspace path is not available yet", branchNameUnavailable: "Branch name not available", terminalQueued: "Preparing workspace, opening terminal when ready...", workspacePathCopiedLabel: "Workspace path", branchNameCopiedLabel: "Branch name", }, }, scripts: { title: "Scripts", actions: { chooseUrl: "Choose URL", copyUrl: "Copy URL", openService: "View service", restart: "Restart", run: "Run", stop: "Stop", view: "View terminal", }, accessibility: { trigger: "Workspace scripts", openService: "View {{scriptName}} service", viewTerminal: "View {{scriptName}} terminal", runScript: "Run {{scriptName}} script", stopScript: "Stop {{scriptName}}", restartScript: "Restart {{scriptName}}", copyUrl: "Copy {{scriptName}} URL", chooseUrl: "Choose URL for {{scriptName}}", script: "{{scriptName}} script", }, routes: { public: "Reverse proxy", paseo: "Memorable", direct: "Direct", }, states: { exitCode: "exit {{code}}", startFailed: "Failed to start {{scriptName}}", stopFailed: "Failed to stop {{scriptName}}", }, }, git: { actions: { moreOptions: "More options", moreActions: "More actions", commit: { label: "Commit", pending: "Committing...", success: "Committed", }, pull: { label: "Pull", pending: "Pulling...", success: "Pulled", }, push: { label: "Push", pending: "Pushing...", success: "Pushed", }, pullAndPush: { label: "Pull and push", pending: "Pulling and pushing...", success: "Pulled and pushed", }, viewPr: "View PR", viewPr_mr: "View MR", createPr: { label: "Create PR", pending: "Creating PR...", success: "PR Created", label_mr: "Create MR", pending_mr: "Creating MR...", success_mr: "MR Created", }, mergeBranch: { label: "Merge locally", pending: "Merging...", success: "Merged", }, mergeFromBase: { label: "Update from {{baseRef}}", pending: "Updating...", success: "Updated", }, archive: { label: "Archive workspace", pending: "Archiving...", success: "Archived", }, mergePr: { squash: "Merge PR (squash)", merge: "Merge PR (merge)", rebase: "Merge PR (rebase)", pending: "Merging PR...", success: "PR merged", squash_mr: "Merge MR (squash)", merge_mr: "Merge MR (merge)", rebase_mr: "Merge MR (rebase)", pending_mr: "Merging MR...", success_mr: "MR merged", }, autoMerge: { enableSquash: "Auto merge (squash)", enableMerge: "Auto merge (merge)", enableRebase: "Auto merge (rebase)", enabled: "Auto-merge enabled", enabling: "Enabling auto-merge...", disabling: "Disabling auto-merge...", disabled: "Auto-merge disabled", }, unavailable: { viewPrNoForge: "View {{noun}} isn't available right now because {{brand}} isn't connected", pullNoRemote: "Pull isn't available here because this branch is not connected to a remote yet", pullDirty: "Pull isn't available while you have local changes so commit or stash them first", pullUpToDate: "Pull isn't available because this branch is already up to date", pushNoRemote: "Push isn't available here because this branch is not connected to a remote yet", pushBehind: "Push isn't available yet because there are newer changes to bring in first", pushNothing: "Push isn't available because there is nothing new to send", pullAndPushNoRemote: "Pull and push isn't available here because this branch is not connected to a remote yet", pullAndPushDirty: "Pull and push isn't available while you have local changes so commit or stash them first", pullAndPushNoIncoming: "Pull and push isn't available because there are no incoming changes to pull first", pullAndPushInSync: "Pull and push isn't available because this branch is already in sync", pullAndPushNothingToPush: "Pull and push isn't available because there is nothing new to send after pulling", createPrNoForge: "Create {{noun}} isn't available right now because {{brand}} isn't connected", createPrNoCommits: "Create PR isn't available because this branch doesn't have any new commits yet", mergeNoBase: "Merge isn't available because we couldn't determine the base branch", mergeDirty: "Merge isn't available while you have local changes so commit or stash them first", mergeNothing: "Merge isn't available because this branch doesn't have anything new to merge yet", updateNoBase: "Update isn't available because we couldn't determine the base branch", updateDirty: "Update isn't available while you have local changes so commit or stash them first", updateCurrent: "Update isn't available because this branch is already up to date with {{baseRef}}", mergePrNoGithub: "Merge PR isn't available right now because GitHub isn't connected", archiveNotWorktree: "Archive isn't available here because this workspace was not created as a Paseo worktree", mergePrNoForge: "Merge {{noun}} isn't available right now because {{brand}} isn't connected", mergePrMissing: "Merge PR isn't available because there isn't a pull request yet", mergePrDraft: "Merge PR isn't available because the pull request is still a draft", mergePrMerged: "Merge PR isn't available because the pull request is already merged", mergePrClosed: "Merge PR isn't available because the pull request is closed", mergePrConflicts: "Merge PR isn't available because the pull request has conflicts", mergePrQueue: "Merge PR isn't available here because this repository uses a merge queue", mergePrNotReady: "Merge {{noun}} isn't available until {{brand}} reports the {{noun}} is ready to merge", autoMergeCannotDisable: "Auto-merge is enabled, but this account can't disable it", }, toasts: { failedCommit: "Failed to commit", failedPull: "Failed to pull", failedPush: "Failed to push", failedPullAndPush: "Failed to pull and push", failedCreatePr: "Failed to create PR", failedMergePr: "Failed to merge PR", failedEnableAutoMerge: "Failed to enable auto-merge", failedDisableAutoMerge: "Failed to disable auto-merge", baseRefUnavailable: "Base ref unavailable", failedMerge: "Failed to merge", failedMergeFromBase: "Failed to merge from base", }, archiveWarning: { title: 'Archive "{{workspaceName}}"?', confirm: "Archive", cancel: "Cancel", uncommittedChanges: "Uncommitted changes", uncommittedChangesWithDiff: "Uncommitted changes ({{diffStat}})", addedLine: "{{count}} added line", addedLines: "{{count}} added lines", deletedLine: "{{count}} deleted line", deletedLines: "{{count}} deleted lines", unpushedCommit: "{{count}} unpushed commit", unpushedCommits: "{{count}} unpushed commits", }, }, diff: { openChangesTab: "Open Changes tab", closeChangesTab: "Close Changes tab", binaryFile: "Binary file", tooLarge: "Diff too large to display", unified: "Unified diff", split: "Side-by-side diff", switchToUnified: "Switch to unified diff", switchToSplit: "Switch to side-by-side diff", showTreeView: "Show folder tree", showFlatView: "Show flat file list", options: "Diff options", hideWhitespace: "Hide whitespace", showWhitespace: "Show whitespace", scrollLongLines: "Scroll long lines", wrapLongLines: "Wrap long lines", collapseAll: "Collapse all files", expandAll: "Expand all files", collapseAllFolders: "Collapse all folders", expandAllFolders: "Expand all folders", refreshing: "Refreshing", refresh: "Refresh", refreshState: "Refresh git and {{brand}} state", failedRefresh: "Failed to refresh git state.", emptyHiddenWhitespace: "No visible changes after hiding whitespace", emptyUncommitted: "No uncommitted changes", emptyAgainstBase: "No changes vs {{baseRef}}", checkingRepository: "Checking repository...", notRepository: "Not a git repository", diffMode: "Diff mode", uncommitted: "Uncommitted", committed: "Committed", branchUnknown: "Unknown", base: "base", newFile: "New", deletedFile: "Deleted", commits: { title: "Commits", countLabel: "{{count}} workspace commits", noneAhead: "No commits ahead of {{baseRef}} yet", fileDiffEmpty: "No changes to display", fileDiffError: "Failed to load file diff", loading: "Loading commits…", loadError: "Failed to load commits", empty: "No commits yet", }, }, openInEditor: { open: "Open", chooseEditor: "Choose editor", openIn: "Open workspace in {{target}}", openFileIn: "Open {{fileName}} in {{target}}", failedOpen: "Failed to open workspace", }, pr: { actions: { viewPullRequest: "View", openOn: "Open on {{brand}}", }, sections: { checks: "Checks", pipeline: "Pipeline", reviews: "Reviews", }, empty: { noJobs: "No jobs", loadingPipeline: "Loading pipeline…", pipelineJobsLoadFailed: "Could not load pipeline jobs", allowedToFail: "allowed to fail", }, approvals: "{{given}} of {{required}} approvals", accessibility: { pullRequest: "Pull request #{{number}}", pullRequest_mr: "Merge request !{{number}}", }, states: { draft: "Draft", merged: "Merged", closed: "Closed", open: "Open", }, activity: { commented: "Commented", approved: "Approved", requestedChanges: "Requested changes", reviewed: "Reviewed", }, time: { justNow: "just now", }, thread: { discussion: "Discussion thread", }, errors: { statusLoadFailed: "Unable to load pull request status", activityLoadFailed: "Unable to load pull request activity", }, }, forgeSetup: { installCli: "Install the {{cli}} CLI to use {{brand}} features.", signIn: "Run {{command}} to use {{brand}} features.", generic: "Set up {{brand}} on this host to use its features.", }, }, }, sidebar: { pinned: { title: "Pinned", }, host: { noHost: "No host", switchTitle: "Switch host", searchPlaceholder: "Search hosts...", }, actions: { addProject: "Add project", newWorkspace: "New workspace", hosts: "Hosts", home: "Home", settings: "Settings", closeSidebar: "Close sidebar", }, help: { trigger: "Help and support", sectionHelp: "Help", diagnostics: "Run diagnostics", shortcuts: "Keyboard shortcuts", reportIssue: "Report an issue", discord: "Discord", github: "Create GitHub issue", whatsNew: "What's new", version: "Paseo {{version}}", }, sections: { sessions: "History", schedules: "Schedules", }, worktreeSetup: { title: "Set up worktree scripts", description: "Add setup commands so new worktrees can install dependencies and prepare themselves automatically.", openProjectSettings: "Open project settings", }, project: { actions: { menu: "Project actions", openSettings: "Open project settings", openNewWindow: "Open in new window", openNewWindowFailed: "Couldn't open a new window", remove: "Remove project", removing: "Removing...", }, confirmations: { removeTitle: "Remove project?", removeMessage: 'Remove "{{projectName}}" from the sidebar?\n\nFiles on disk will not be changed.', removeConfirm: "Remove", cancel: "Cancel", }, toasts: { hostDisconnected: "Host is not connected", removeFailed: "Failed to remove some workspaces", updateHostToRemove: "Update the host to remove projects.", }, empty: { title: "No projects yet", description: "Add a project to get started", }, }, workspace: { status: { scriptsAvailable: "Scripts available", creating: "Creating...", }, actions: { menu: "Workspace actions", newWorkspace: "New workspace", showMore: "Show more", showLess: "Show less", createWorkspaceFor: "Create a new workspace for {{projectName}}", copyPath: "Copy path", copyBranchName: "Copy branch name", rename: "Rename workspace", pin: "Pin to top", unpin: "Unpin", archive: "Archive", archiveWorkspace: "Archive workspace", hideFromSidebar: "Hide from sidebar", archiving: "Archiving...", hiding: "Hiding...", }, confirmations: { hideTitle: "Hide workspace?", hideMessage: 'Hide "{{workspaceName}}" from the sidebar?\n\nFiles on disk will not be changed.', hideConfirm: "Hide", cancel: "Cancel", }, rename: { title: "Rename workspace", submit: "Rename", invalidBranchName: "Invalid branch name", }, toasts: { workspacePathUnavailable: "Workspace path not available", pathCopied: "Path copied", branchNameCopied: "Branch name copied", hostDisconnected: "Host is not connected", hideFailed: "Failed to hide workspace", archiveFailed: "Failed to archive workspace", }, }, }, newWorkspace: { title: "New workspace", create: "Create", isolation: { local: "Local", worktree: "New worktree", label: "Isolation", }, fields: { project: "Project", base: "Base", baseNotApplicable: "Not applicable", }, titlePlaceholder: "Title (optional)", errors: { hostDisconnected: "Host is not connected", createWorktreeFailed: "Failed to create worktree", composerStateRequired: "Composer state is required", selectModel: "Select a model", }, refPicker: { startingRef: "Starting ref", chooseStart: "Choose where to start from", intoBase: "into {{baseRef}}", searching: "Searching...", noMatchingRefs: "No matching refs.", searchPlaceholder: "Search branches and PRs", title: "Start from", }, }, desktop: { quitting: { title: "Quitting Paseo...", detail: "Stopping the local daemon.", }, daemon: { title: "Daemon", status: { title: "Status", builtInOnly: "Only the built-in desktop daemon is shown here", running: "running", notRunning: "not running", pid: "PID {{pid}}", }, management: { title: "Manage built-in daemon", hint: "Let Paseo start and stop the built-in daemon", pauseTitle: "Pause built-in daemon", pauseMessage: "This will stop the built-in daemon immediately. Running agents and terminals connected to the built-in daemon will be stopped.", pauseAndStop: "Pause and stop", registrationFailed: "Built-in daemon started, but Paseo could not save the localhost connection. Toggle daemon management off and on again, or add localhost manually.", pausedStopFailed: "Built-in daemon management was paused, but Paseo could not stop the daemon.", updateFailed: "Unable to update built-in daemon management.", }, keepRunning: { title: "Keep daemon running after quit", hint: "Daemon keeps running when you quit Paseo", }, logs: { title: "Log file", modalTitle: "Daemon logs", unavailable: "Log path unavailable", empty: "(log file is empty)", copied: "Log path copied.", copyFailed: "Unable to copy log path.", open: "Open logs", copyPath: "Copy path", }, fullStatus: { title: "Full status", modalTitle: "Daemon status", hint: "Runs `paseo daemon status` and shows the output", view: "View status", copied: "Status copied to clipboard.", fetchFailed: "Failed to fetch daemon status: {{message}}", }, advancedSettings: "Advanced settings", openAdvancedSettings: "Open advanced daemon settings", versionMismatch: "App and daemon versions don't match. Update both to the same version for the best experience.", loadFailed: "Unable to load desktop daemon status.", }, updates: { status: { checking: "Checking for app updates...", installing: "Installing app update...", upToDate: "App is up to date.", upToDateWithLastChecked: "Up to date. Last checked at {{time}}.", pending: "We'll let you know when the update is ready.", pendingWithLastChecked: "We'll let you know when the update is ready. Last checked at {{time}}.", pendingWithVersion: "Update found: {{version}}. Downloading...", pendingWithVersionAndLastChecked: "Update found: {{version}}. Downloading... Last checked at {{time}}.", availableWithVersion: "Update ready: {{version}}", availableWithVersionAndLastChecked: "Update ready: {{version}}. Last checked at {{time}}.", available: "An app update is ready to install.", availableWithLastChecked: "An app update is ready to install. Last checked at {{time}}.", installed: "App update installed. Restart required.", failed: "Failed to update app.", idle: "Update status has not been checked yet.", }, installError: "Unable to install the desktop app update.", callout: { installingTitle: "Installing update", failedTitle: "Update failed", availableTitle: "Update available", genericError: "Something went wrong.", whatsNew: "What's new", installingAction: "Installing...", installAndRestart: "Install & restart", installingDescription: "Installing and restarting...", versionReady: "{{version}} is ready to install.", newVersionReady: "A new version is ready to install.", restartWarning: "Upgrading the app will stop running agents and close terminal sessions.", }, }, settings: { loadFailed: "Unable to load desktop settings.", saveFailed: "Unable to save desktop settings.", }, rosetta: { title: "Download the Apple Silicon build", runningIntel: "You're running the Intel build of Paseo under Rosetta on Apple Silicon.", highCpu: "This causes high CPU usage. Download the Apple Silicon build to fix it.", download: "Download", }, permissions: { notifications: { allowed: "Notifications are allowed by the OS.", denied: "Notifications are denied in system settings.", notGranted: "Notifications have not been granted yet.", webOnly: "Desktop notification status is only available on web runtime.", supported: "Desktop notifications are supported.", unsupported: "Desktop notifications are not supported on this platform.", apiUnavailable: "Web Notification API is unavailable in this environment.", requestsWebOnly: "Desktop notification requests are only available on web runtime.", requestUnavailable: "Web Notification API requestPermission() is unavailable.", requestFailed: "Failed to request notification permission: {{message}}", unexpectedState: "Unexpected notification permission state: {{state}}", }, microphone: { webOnly: "Desktop microphone status is only available on web runtime.", navigatorUnavailable: "Navigator is unavailable in this environment.", granted: "Microphone access is granted.", denied: "Microphone access is denied in system settings.", notGranted: "Microphone permission has not been granted yet.", unexpectedState: "Unexpected microphone permission state: {{state}}", statusApiUnavailable: "Microphone status API is unavailable in this runtime. Use Request to check access.", queryFailed: "Failed to query microphone status: {{message}}", captureUnavailable: "Microphone capture is unavailable in this environment.", permissionApiUnavailable: "Permission status API is unavailable. Use Request to check access.", requestsWebOnly: "Desktop microphone requests are only available on web runtime.", captureApiUnavailable: "Microphone capture API is unavailable in this environment.", requestDenied: "Microphone permission was denied by the user or system.", noDevice: "No microphone device was found.", requestFailed: "Failed to request microphone permission: {{message}}", }, empty: { notifications: "Notification status has not been checked yet.", microphone: "Microphone status has not been checked yet.", }, testNotification: { title: "Paseo notification test", body: "If you can see this, desktop notifications work.", notDelivered: "Notification was not delivered. Check System Settings > Notifications.", failed: "Failed to send notification.", }, }, integrations: { cli: { statusFailed: "Unable to check CLI install status.", installFailed: "Unable to install the Paseo CLI.", }, skills: { statusFailed: "Unable to check orchestration skills status.", installFailed: "Unable to install orchestration skills.", updateFailed: "Unable to update orchestration skills.", uninstallFailed: "Unable to uninstall orchestration skills.", }, }, }, rootError: { kicker: "Something went wrong", title: "Paseo ran into a problem.", body: "Try again to reload the app. If this keeps happening, include the details below when you report it.", details: "Details", }, startup: { errorTitle: "Something went wrong", errorDescription: "The local server failed to start. If this keeps happening, please report the issue on GitHub and include the logs below.", logs: { loading: "Loading daemon logs...", unavailable: "No daemon logs available.", loadFailed: "Unable to load daemon logs: {{message}}", }, }, openProject: { tiles: { addProject: { title: "Add a project", description: "Open a folder on your machine", }, importSession: { title: "Import session", description: "Bring in recent external CLI sessions", }, setupProviders: { title: "Setup providers", description: "Configure Claude Code, Codex, and more", }, pairDevice: { title: "Pair device", description: "Connect your phone to this daemon", }, }, }, projectPicker: { placeholder: "Type to search...", browse: "Browse…", opening: "Opening project...", searching: "Searching...", empty: "Start typing a path", errors: { directory_not_found: "Directory not found.", open_failed: "Could not open project.", }, openPath: "Open path", }, branchSwitcher: { currentBranch: "Current branch: {{branchName}}. Press to switch branch.", placeholder: "Switch branch...", searchPlaceholder: "Filter branches...", empty: "No branches found.", title: "Switch branch", uncommittedTitle: "Uncommitted changes", uncommittedMessage: "You have uncommitted changes. Stash them before switching branches?", stashAndSwitch: "Stash & Switch", failedToStash: "Failed to stash changes", failedToSwitch: "Failed to switch branch", restoreStashTitle: "Restore stashed changes?", restoreStashMessage: "This branch has stashed changes from a previous session. Would you like to restore them?", restore: "Restore", later: "Later", stashRestored: "Stashed changes restored", }, agentAutocomplete: { searchingWorkspace: "Searching workspace...", loadingCommands: "Loading commands...", noFiles: "No files or directories found", noCommands: "No commands found", failedToLoad: "Failed to load", }, loadOlderHistory: { failed: "Couldn't load older history", }, imageAttachmentPicker: { permissionTitle: "Permission required", permissionMessage: "Please allow access to your photo library to attach images.", errorTitle: "Error", failedToSelect: "Failed to select image", dialogTitle: "Attach images", dialogFilterName: "Images", }, workspaceSetup: { title: "Create workspace", errors: { failedCreateWorktree: "Failed to create worktree", failedOpenProject: "Failed to open project", selectModel: "Select a model", hostDisconnected: "Host is not connected", pendingRequired: "No workspace setup is pending", composerStateRequired: "Workspace setup composer state is required", }, }, onboarding: { title: "Welcome to Paseo", subtitle: "Connect your computer to get started", actions: { settings: "Settings", }, }, modelSelector: { title: "Select provider", selectModel: "Select model", selectedModel: "Select model ({{model}})", loading: "Loading...", loadingShort: "Loading", loadingSelector: "Loading model selector...", error: "Error", defaultModel: "Default", favorites: "Favorites", favoriteModel: "Favorite model", unfavoriteModel: "Unfavorite model", modelCount: "{{count}} model", modelCountPlural: "{{count}} models", retry: "Retry", retrying: "Retrying...", noMatches: "No models match your search", searchPlaceholder: "Search models...", openProviderSettings: "Open {{provider}} settings", }, providerCatalog: { title: "Add provider", search: "Search providers", noProviders: "No providers found", actions: { add: "Add", adding: "Adding", installed: "Installed", cancel: "Cancel", installInstructions: "Install instructions", installInstructionsFor: "{{provider}} install instructions", }, errors: { unableToInstall: "Unable to install provider", }, }, providerSelection: { defaultModel: "Default", selectModel: "Select model", loading: "Loading...", error: "Error", unavailable: "Unavailable", unknownError: "Unknown error", readiness: { initialPromptRequired: "Initial prompt is required", noProviders: "No available providers on the selected host", modelDefaultsLoading: "Model defaults are still loading", noModelAvailable: "No model is available for the selected provider", workspaceDirectoryNotFound: "Workspace directory not found", hostDisconnected: "Host is not connected", }, }, pairing: { connectionMethods: { title: "Add connection", direct: { title: "Direct connection", description: "Local network or VPN.", }, scanQr: { title: "Scan QR code", description: "Encrypted relay connection.", }, pasteLink: { title: "Paste pairing link", description: "Encrypted relay connection.", }, }, direct: { title: "Direct connection", helper: "Enter the address of a Paseo server.", fields: { host: "Host", port: "Port", password: "Password", optional: "Optional", useSsl: "Use SSL", connectionUri: "Connection URI", }, advanced: { label: "Advanced", show: "Show advanced", hide: "Hide advanced", }, passwordVisibility: { show: "Show password", hide: "Hide password", }, actions: { cancel: "Cancel", connect: "Connect", connecting: "Connecting...", }, errors: { hostRequired: "Host is required", invalidPort: "Port must be between 1 and 65535", invalidConnection: "Invalid connection", failedTitle: "Connection failed", failedToConnect: "We failed to connect to {{endpoint}}.", noAdditionalDetails: "{{detail}} (no additional details provided)", timedOut: "Connection timed out. Check the host/port and your network.", refused: "Connection refused. Is the server running at this address?", hostNotFound: "Host not found. Check the hostname and try again.", hostUnreachable: "Host is unreachable. Check your network and firewall.", tlsError: "TLS error. Direct connections use SSL only when a TLS terminator is in front of the daemon.", unableToConnect: "Unable to connect. Check the host/port and that the daemon is reachable.", details: "Details: {{detail}}", }, }, link: { title: "Paste pairing link", helper: "Paste the pairing link from your server.", label: "Pairing link", errors: { required: "Paste a pairing link (.../#offer=...)", missingOffer: "Link must include #offer=...", emptyOffer: "Offer payload is empty", invalid: "Invalid pairing link", unableToPair: "Unable to pair host", }, alert: { failedTitle: "Pairing failed", }, actions: { cancel: "Cancel", pair: "Pair", pairing: "Pairing...", }, }, scan: { title: "Scan QR", webUnavailableTitle: "Not available on web", webUnavailableBody: 'QR scanning is not supported in the web build. Use "Paste link" instead.', backToSettings: "Back to Settings", cameraPermissionTitle: "Camera permission", cameraPermissionBody: "Allow camera access to scan the pairing QR code from your daemon.", grantPermission: "Grant permission", pairing: "Pairing...", unableToPair: "Unable to pair host", errorTitle: "Error", }, device: { loadingOffer: "Loading pairing offer...", failedToLoadOffer: "Failed to load pairing offer.", relayDisabled: "Relay is not enabled. Enable relay to pair a device.", unavailable: "Pairing offer unavailable.", hint: "Scan this QR code with Paseo on your phone, or copy the link below.", qrUnavailable: "QR code unavailable.", retry: "Retry", copy: "Copy", copied: "Copied", }, }, realtimeVoice: { actions: { mute: "Mute realtime voice", unmute: "Unmute realtime voice", stop: "Stop realtime voice and interrupt turn", }, }, rewind: { tooltip: "Rewind to this message", warning: "This action cannot be undone", actions: { conversation: "Rewind conversation", files: "Rewind files", both: "Rewind conversation and files", }, errors: { failed: "Failed to rewind agent", }, }, diffViewer: { empty: "No changes to display", }, serviceUrl: { title: "Open service URL", message: "Open {{url}}?", inPaseo: "In Paseo", externalBrowser: "External browser", dontAskAgain: "Don't ask again", }, downloads: { requestTokenFailed: "Failed to request download token.", hostUnavailable: "Download host is unavailable.", cancelled: "Download was cancelled.", failed: "Failed to download file.", shareFile: "Share file", shareFileNamed: "Share {{fileName}}", }, menu: { backdrop: "Menu backdrop", }, subagents: { detachAction: "Detach {{label}}", detachTooltip: "Detach subagent", archiveAction: "Archive {{label}}", archiveTooltip: "Archive subagent", archiveFinishedAction: "Archive finished subagents", archiveFinishedTooltip: "Archive finished", }, panels: { draft: { newAgent: "New Agent", creatingAgent: "Creating agent", }, file: { directoryMissing: "Workspace directory not found.", loading: "Loading file...", noPreview: "No preview available", binaryPreviewUnavailable: "Binary preview unavailable", failedToLoad: "Failed to load file", failedToLoadPreview: "Failed to load file preview", editor: { fileSize: "File size {{size}}", lines: "{{count}} lines", editorStatus: "Editor status {{status}}", unsavedChanges: "Unsaved changes", saving: "Saving...", saveFailed: "Save failed", changedOnDisk: "Changed on disk", vimMode: "Vim mode {{mode}}", cursor: "Line {{line}}, column {{column}}", preview: "Preview", source: "Source", unavailableTitle: "File unavailable on disk", conflictDescription: "The local buffer was preserved. Choose which version to keep.", overwrite: "Overwrite", reload: "Reload", reloadTitle: "Reload from disk?", reloadMessage: "Your local changes will be lost.", }, }, diff: { changesLabel: "Changes", changesSubtitle: "Working tree diff", commitSubtitle: "Commit diff", uncommittedSubtitle: "Uncommitted changes", baseSubtitle: "Compared with {{baseRef}}", directoryMissing: "Workspace directory not found.", empty: "No changes", loadError: "Failed to load diff", capabilityMissing: "Update the host to view commit diffs.", }, }, toolCallDetails: { error: "Error", empty: "No additional details available", subAgentActivity: "Sub-agent activity", input: "Input", output: "Output", }, toolCallGroup: { editedFiles: { one: "edited {{count}} file", other: "edited {{count}} files", }, commands: { one: "ran {{count}} command", other: "ran {{count}} commands", }, readFiles: { one: "read {{count}} file", other: "read {{count}} files", }, searches: { one: "searched {{count}} time", other: "searched {{count}} times", }, otherTools: { one: "used {{count}} other tool", other: "used {{count}} other tools", }, paseoCalls: { one: "called Paseo {{count}} time", other: "called Paseo {{count}} times", }, and: "and", }, renameModal: { rename: "Rename", saving: "Saving...", }, sidebarCallout: { dismiss: "Dismiss", }, contextWindow: { title: "Context window", used: "{{percentage}}% used", tokens: "{{used}} / {{max}} tokens", sessionCost: "Session cost {{cost}}", accessibility: "Context window {{percentage}}% used", }, review: { comment: { add: "Add review comment", edit: "Edit review comment", delete: "Delete review comment", label: "Review comment", placeholder: "Leave a comment", cancel: "Cancel", cancelAccessibility: "Cancel review comment", save: "Comment", saveAccessibility: "Save review comment", }, }, settings: { title: "Settings", loading: "Loading settings...", groups: { app: "App", host: "Host", }, hostPicker: { switchHost: "Switch host", local: "Local", }, backToWorkspace: "Back", addHost: "Add host", enableBuiltInDaemon: "Enable built-in daemon", projects: "Projects", projectList: { hostLoadFailed: "Couldn't load projects from host {{hostName}}: {{message}}", editProject: "Edit {{projectName}}", }, groupInfo: "About {{title}}", sections: { general: "General", appearance: "Appearance", editor: "Editor", shortcuts: "Shortcuts", integrations: "Integrations", permissions: "Permissions", diagnostics: "Diagnostics", about: "About", }, editor: { title: "Editor", vimKeybindings: "Vim keybindings", vimHint: "Applies to source files on web and desktop.", }, hostSections: { connections: "Connections", agents: "Agents", workspaces: "Workspaces", providers: "Providers", usage: "Usage", terminals: "Terminals", host: "Overview", }, general: { title: "General", browserData: { title: "Browser data", siteData: "Cookies and site data", description: "Browser tabs share sign-ins and site data across Paseo.", clear: "Clear browser data", clearing: "Clearing...", confirmTitle: "Clear browser data?", confirmMessage: "Sites will be signed out and open browser tabs will reload.", success: "Browser data cleared.", error: "Couldn't clear browser data.", }, defaultSend: { label: "Default send", descriptions: { interrupt: "When the agent is running, Enter interrupts. Command/Ctrl+Enter queues.", queue: "When the agent is running, Enter queues. Command/Ctrl+Enter submits.", }, options: { interrupt: "Interrupt", queue: "Queue", }, }, serviceUrls: { label: "Service URLs", description: "Where to open URLs from running scripts", options: { ask: "Ask", inApp: "In Paseo", external: "External browser", }, }, terminalScrollback: { label: "Terminal scrollback", description: "Lines kept in the built-in terminal buffer", accessibilityLabel: "Terminal scrollback lines", }, autoExpandReasoning: { label: "Always expand reasoning", description: "Show agent thinking and chain-of-thought blocks fully expanded by default", }, toolCallDetail: { label: "Tool call display", description: "How tool calls appear in the timeline", accessibilityLabel: "Select tool call display ({{value}})", options: { overview: "Summary", detailed: "Full detail", }, }, language: { label: "Language", description: "App language", options: { system: "System", ar: "Arabic", en: "English", es: "Spanish", fr: "French", ja: "Japanese", ptBR: "Brazilian Portuguese", ru: "Russian", zhCN: "Simplified Chinese", }, }, }, diagnostics: { title: "Diagnostics", testAudio: "Test audio", playTest: "Play test", playing: "Playing...", playbackFailed: "Playback failed: {{message}}", app: { title: "App diagnostic", rowTitle: "App diagnostic", rowHint: "Collect connection, daemon, provider, desktop, and log details", run: "Run", running: "Running diagnostic...", copyLabel: "diagnostic", copyAccessibility: "Copy diagnostic", copyFailed: "Failed to copy diagnostic", refreshAccessibility: "Refresh diagnostic", refreshingAccessibility: "Refreshing diagnostic", progress: { client: "Client", desktop: "Desktop", }, }, }, about: { title: "About", appVersion: "App version", thisDevice: "This device", connectedHosts: "Connected hosts", offline: "Offline", versionDiffers: "Version differs from this device", releaseChannel: { label: "Release channel", description: "Switch to Beta to get updates sooner and help shape them", stable: "Stable", beta: "Beta", }, updates: { label: "App updates", readyToInstall: "Ready to install: {{version}}", installTitle: "Install desktop update", installMessage: "This updates Paseo on this computer", installConfirm: "Install update", update: "Update", updateTo: "Update to {{version}}", installing: "Installing...", check: "Check", checking: "Checking...", alertTitle: "Error", alertMessage: "Unable to open the update confirmation dialog.", }, }, appearance: { theme: { title: "Theme", accessibilityLabel: "Theme: {{value}}", options: { light: "Light", dark: "Dark", zinc: "Zinc", midnight: "Midnight", claude: "Claude", ghostty: "Ghostty", auto: "System", }, }, detailLevel: { title: "Detail level", }, fonts: { title: "Fonts", systemDefault: "System default", interfaceFont: "Interface font", interfaceFontHint: "Used across the app. Leave empty for the system default", interfaceFontAccessibility: "Interface font family", interfaceSize: "Interface size", interfaceSizeAccessibility: "Interface font size", codeFont: "Code font", codeFontHint: "Used in code, diffs, and the terminal output. Leave empty for the system default", codeFontAccessibility: "Code font family", codeSize: "Code size", codeSizeAccessibility: "Code font size", }, syntax: { title: "Syntax", highlightTheme: "Highlight theme", highlightThemeHint: "Colors for code, independent of the app theme", highlightThemeAccessibility: "Highlight theme: {{value}}", previewAccessibility: "Live preview of the syntax theme and code font", }, }, shortcuts: { dialogTitle: "Shortcuts", searchPlaceholder: "Search shortcuts", unavailableOnMobile: "Keyboard shortcuts are only available on desktop", capturePrompt: "Press shortcut...", actions: { done: "Done", cancel: "Cancel", rebind: "Rebind", reset: "Reset", resetAll: "Reset all", }, sections: { navigation: "Navigation", tabsPanes: "Tabs & Panes", projects: "Projects", panels: "Panels", agentInput: "Agent Input", }, help: { openProject: "Open project", newWorkspace: "New workspace", newWorktree: "New worktree", archiveWorkspace: "Archive workspace", newTab: "New tab", closeCurrentTab: "Close current tab", jumpToWorkspace: "Jump to workspace", jumpToTab: "Jump to tab", previousWorkspace: "Previous workspace", nextWorkspace: "Next workspace", previousTab: "Previous tab", nextTab: "Next tab", splitPaneRight: "Split pane right", splitPaneDown: "Split pane down", focusPaneLeft: "Focus pane left", focusPaneRight: "Focus pane right", focusPaneUp: "Focus pane up", focusPaneDown: "Focus pane down", moveTabLeft: "Move tab left", moveTabRight: "Move tab right", moveTabUp: "Move tab up", moveTabDown: "Move tab down", closePane: "Close pane", newTerminal: "New terminal", toggleCommandCenter: "Toggle command center", showKeyboardShortcuts: "Show keyboard shortcuts", toggleLeftSidebar: "Toggle left sidebar", toggleRightSidebar: "Toggle right sidebar", toggleBothSidebars: "Toggle both sidebars", toggleSettings: "Toggle settings", toggleFocusMode: "Toggle focus mode", cycleTheme: "Cycle theme", focusMessageInput: "Focus message input", cycleAgentMode: "Cycle agent mode", toggleVoiceMode: "Toggle voice mode", startStopDictation: "Start/stop dictation", interruptAgent: "Interrupt agent", sendMessage: "Send message", queueMessage: "Queue message", muteUnmuteVoiceMode: "Mute/unmute voice mode", switchProject: "Switch project", }, helpNotes: { showKeyboardShortcuts: "Available when focus is not in a text field or terminal.", }, }, integrations: { title: "Integrations", docs: { cli: "CLI docs", skills: "Skills docs", openCli: "Open CLI documentation", openSkills: "Open skills documentation", }, commandLine: { title: "Command line", description: "Control and script agents from your terminal", }, skills: { title: "Orchestration skills", description: "Teach your agents to orchestrate through the CLI", updateAvailable: "Update available", updateTitle: "Update Paseo skills?", updateFallback: "Sync bundled skills to your machine.", uninstallTitle: "Uninstall Paseo skills?", uninstallMessage: "Removes all Paseo orchestration skills from ~/.agents, ~/.claude, ~/.codex.", }, actions: { install: "Install", installing: "Installing...", installed: "Installed", update: "Update", working: "Working...", uninstall: "Uninstall", }, operations: { add: "Add skill", update: "Update skill", delete: "Delete skill", }, }, permissions: { title: "Permissions", notifications: "Notifications", microphone: "Microphone", refresh: "Refresh", refreshing: "Refreshing...", refreshAccessibility: "Refresh desktop permissions", test: "Test", actions: { granted: "Granted", request: "Request", requesting: "Requesting...", busySuffix: "{{label}}...", }, }, host: { notFound: "Host not found", badges: { relay: "Relay", local: "Local", }, connections: { title: "Connections", removeTitle: "Remove connection", removeMessage: "Remove {{name}}? This cannot be undone.", removeAction: "Remove", removeErrorTitle: "Error", removeErrorMessage: "Unable to remove connection", timeout: "Timeout", }, pairDevices: { title: "Pair devices", rowTitle: "Pair a device", rowHint: "Scan a QR code or copy a link to connect your phone to this host", }, orchestration: { title: "Orchestration", unavailable: "Connect to this host to manage orchestration", enableTools: { title: "Enable Paseo tools", hint: "Agents will be able to manage worktrees, agents and schedules", accessibilityLabel: "Inject Paseo tools", }, systemPrompt: { title: "System prompt", hint: "Adds a system prompt to all agents", sheetTitle: "Append system prompt", accessibilityLabel: "Append system prompt", placeholder: "Always keep replies concise.", edit: "Edit", reset: "Reset", save: "Save", saving: "Saving...", }, }, agents: { unavailable: "Connect to this host to manage agents", }, workspaces: { unavailable: "Connect to this host to manage workspaces", }, terminalProfiles: { unavailable: "Connect to this host to manage terminal profiles", sectionTitle: "Terminal profiles", editProfile: "Edit profile", addProfileTitle: "Add terminal profile", editProfileTitle: "Edit terminal profile", namePlaceholder: "Claude Code", commandPlaceholder: "claude", argsPlaceholder: "--dangerously-skip-permissions", nameLabel: "Name", commandLabel: "Command", argsLabel: "Arguments", nameRequired: "Name is required", commandRequired: "Command is required", argsHint: "Space-separated arguments passed to the command", saving: "Saving...", remove: "Remove", removeConfirmTitle: "Remove profile?", removeConfirmMessage: 'Remove "{{name}}"?', moveUp: "Move up", moveDown: "Move down", save: "Save", emptyState: "No profiles yet. Add one to launch terminals with a specific command.", }, daemon: { rename: { editLabel: "Edit label", title: "Rename host", placeholder: "My Host", submit: "Rename", }, restart: { title: "Restart daemon", hint: "Restarts the daemon process. The app will reconnect automatically", confirm: "Restart", confirmTitle: "Restart {{name}}", confirmMessage: "This will restart the daemon. Agents running on it will keep going; the app will reconnect automatically.", restarting: "Restarting...", unableToReconnectTitle: "Unable to reconnect", unableToReconnectMessage: "{{name}} did not come back online. Please verify it restarted.", unavailableTitle: "Host unavailable", unavailableMessage: "This host is not connected. Wait for it to come online before restarting.", offlineTitle: "Host offline", offlineMessage: "This host is offline. Paseo reconnects automatically-wait until it's back online before restarting.", requestFailedTitle: "Error", requestFailedMessage: "Failed to send the restart request. Paseo reconnects automatically-try again once the host shows as online.", dialogFailedMessage: "Unable to open the restart confirmation dialog.", }, update: { desktopManagedHint: "This daemon is managed by Paseo Desktop. Update Paseo Desktop on the host.", title: "Update daemon", hint: "Update the daemon to the latest version and restart it", confirm: "Update", confirmTitle: "Update {{name}}", confirmMessage: "This will update the daemon to the latest version and restart it. Running agents will be briefly interrupted.", updating: "Updating...", phaseStarting: "Preparing update...", phaseDownloading: "Downloading packages...", phaseInstalling: "Installing...", phaseComplete: "Update complete, restarting...", unableToReconnectTitle: "Unable to reconnect", unableToReconnectMessage: "{{name}} did not come back online after updating. Please verify the daemon restarted.", unavailableTitle: "Host unavailable", unavailableMessage: "This host is not connected. Wait for it to come online before updating.", offlineTitle: "Host offline", offlineMessage: "This host is offline. Wait until it is back online before updating.", requestFailedTitle: "Update failed", requestFailedMessage: "Failed to update the daemon: {{error}}", dialogFailedMessage: "Unable to open the update confirmation dialog.", }, dangerZone: "Danger zone", remove: { title: "Remove host", localTitle: "Remove localhost connection", hint: "Removes this host and its saved connections from this device", localHint: "Removes localhost from this device and stops the built-in daemon", localConfirmTitle: "Remove localhost connection and stop daemon?", confirmMessage: "Remove {{name}}? This will delete its saved connections.", localConfirmMessage: "This will remove the localhost connection, turn off built-in daemon management, and stop the managed daemon. Remote hosts remain connected.", errorTitle: "Error", errorMessage: "Unable to remove host", localErrorMessage: "Unable to remove localhost connection", }, }, }, providers: { title: "Providers", addProvider: "Add provider", providerDetails: "{{name}} provider details", enableProvider: "Enable {{name}}", unavailable: "Connect to this host to see providers", loading: "Loading...", addErrorTitle: "Unable to add provider", updateErrorTitle: "Unable to update provider", actions: { menu: "{{name}} actions", remove: "Remove provider", removing: "Removing...", }, remove: { confirmTitle: "Remove {{name}}?", confirmMessage: "This deletes the provider entry from config.json. It cannot be undone.", confirm: "Remove", errorTitle: "Unable to remove provider", }, statuses: { disabled: "Disabled", loading: "Loading", error: "Error", available: "Available", notInstalled: "Not installed", }, models: { one: "1 model", many: "{{count}} models", addModel: "Add model", addCustomTitle: "Add custom model", modelId: "Model ID", modelIdPlaceholder: "e.g. openai/gpt-5", add: "Add", adding: "Adding...", failedToSave: "Failed to save model", removeModel: "Remove {{id}}", searchPlaceholder: "Search models", loading: "Loading models...", retry: "Retry", retrying: "Retrying...", noSearchMatches: "No models match your search", noneDetected: "No models detected", discovered: "Discovered", custom: "Custom models", updated: "Updated {{time}}", }, diagnostic: { title: "Diagnostic", button: "Diagnostic", refresh: "Refresh", refreshing: "Refreshing...", copyLabel: "diagnostic", copyAccessibility: "Copy diagnostic", copyFailed: "Failed to copy diagnostic", refreshAccessibility: "Refresh diagnostic", refreshingAccessibility: "Refreshing diagnostic", running: "Running diagnostic...", none: "No diagnostic available", failedToFetch: "Failed to fetch diagnostic", unknownError: "Unknown error", }, }, project: { noEditableTarget: "We don't have an editable copy of this project on any connected host.", backToProjects: "Back to projects", switchHost: "Switch host", rename: { renamedToast: "Project renamed", errorFallback: "Couldn't rename project", renameLabel: "Rename project", resetLabel: "Reset project name to default", projectNameLabel: "Project name", saveLabel: "Save project name", cancelLabel: "Cancel renaming", reset: "Reset", }, readFailures: { invalidTitle: "paseo.json couldn't be parsed", invalidDescription: "Fix the file on disk, then reload.", missingTitle: "This host doesn't have this project", missingWithHosts: "Switch to another host above, or reload.", missingSingleHost: "The selected host has no record of this project.", transportTitle: "Couldn't load paseo.json", transportFallback: "The host didn't respond.", failedTitle: "Couldn't load paseo.json", failedDescription: "Reload to try again.", }, worktree: { title: "Worktree lifecycle hooks", info: "Commands that run when a worktree is created or torn down for this project", docs: "Docs", docsTooltip: "See docs for more details and the environment variables available to these commands", setup: "Setup", setupAccessibility: "Worktree setup commands", teardown: "Teardown", teardownAccessibility: "Worktree teardown commands", }, scripts: { title: "Scripts", info: "Long-running services and one-off commands you can launch from any agent in this project", empty: "No scripts yet.", untitled: "Untitled script", port: "port {{port}}", menuAccessibility: "Open script menu", removeTitle: "Remove script?", removeMessage: "Remove {{name}}?", removeFallbackName: "this script", name: "Name", command: "Command", nameAccessibility: "Script name", commandAccessibility: "Script command", nameRequired: "Name is required", commandRequired: "Command is required", newScript: "New script", editScript: "Edit {{name}}", runAsService: "Run as a service", serviceHint: "Paseo supervises the process and assigns a port via $PASEO_PORT", actions: { add: "Add script", edit: "Edit", remove: "Remove", }, }, metadata: { title: "Metadata generation", info: "Project-specific instructions injected into the AI prompts Paseo uses to generate metadata - use them to enforce your team's conventions like branch naming, commit style, or PR format", branchName: "Branch names", branchNamePlaceholder: "Prefix branches with feat/ or fix/, mb/ for personal branches", commitMessage: "Commit messages", commitMessagePlaceholder: "Use Conventional Commits with a scope", pullRequest: "Pull requests", pullRequestPlaceholder: "Lead with a one-paragraph summary, include a Test plan section", }, writeFailures: { staleTitle: "Config changed on disk", staleDescription: "Reload to fetch the latest paseo.json before saving.", failedTitle: "Couldn't save paseo.json", failedDescription: "Try again, or reload the latest version from disk.", }, actions: { reload: "Reload", tryAgain: "Try again", save: "Save", saved: "Project saved", saving: "Saving...", cancel: "Cancel", }, }, }, } as const; type WidenStringLeaves = { [K in keyof T]: T[K] extends string ? string : WidenStringLeaves; }; export type TranslationResources = WidenStringLeaves;