{ "action.clear": "clear state", "action.forget": "Delete lane", "action.purge": "delete history", "action.reset": "reset worktree", "action.start": "start", "action.stop": "stop", "actionError": "Lane action failed: {{message}}", "actionErrorUnknown": "Unknown error", "actions.agentsInstall": "Install agents", "actions.agentsInstallResult": "Installed: {{files}}", "actions.busy": "…", "actions.mcpSync": "Sync MCP", "actions.mcpSyncResult": "Synced: {{servers}}", "actions.syncCheck": "Check dev sync", "actions.syncCheckClean": "DEV_DELTA: {{count}} file(s), overlap: {{overlap}}", "actions.syncCheckCollision": "Migration collision: {{file}} → rename to {{suggestion}}", "actions.tools": "Tools", "actions.writeDocs": "Create/update readme file", "actions.writeDocsHint": "Opens this lane's terminal and runs /sg-all:sg-md-writing there: creates CLAUDE.md/AGENTS.md if missing, or updates them concisely if they already exist.", "actions.writeDocsResult": "Started — see this lane's terminal.", "add": "Add lane", "addLane": "Create a lane from a working directory", "addLaneBaseLabel": "Branch to fork from", "addLaneBranchBusy": "{{branch}} — already checked out at {{path}}", "addLaneBranchExistingHint": "The worktree checks this branch out as it is — no new branch, no base.", "addLaneBranchExistingLabel": "Branch to check out", "addLaneBranchHintAuto": "Leave empty to let the server name the branch from the title.", "addLaneBranchLabel": "New branch name", "addLaneBranchModeCurrent": "Current branch", "addLaneBranchModeCurrentHint": "Work straight on this repo's checked-out branch (main) — no worktree, no fork. Switches to Repo mode.", "addLaneBranchModeExisting": "Existing branch", "addLaneBranchModeNew": "New branch", "addLaneBranchPlaceholder": "Automatic — named from the title", "addLaneNoBranches": "This repo has no commits yet, so a worktree has nothing to branch from. Add it as a Repo lane: commit first, then publish it from the Changes panel.", "addLaneNoBranchesUseRepo": "Use as a Repo lane", "addLaneNoFreeBranches": "Every branch in this repo is already checked out in a worktree. Create a new branch instead.", "addLaneExists": "This folder already has a lane: #{{id}} {{title}}. It is selected; pick another folder to add a new one.", "addLaneNotARepo": "Not a git repository (or no read access) yet.", "addLaneProvisionFailed": "Worktree provisioning failed or timed out — the lane exists but auto-setup was skipped. Check the lane's git facts, then run agents/mcp setup manually.", "addLaneRepoHint": "An existing git repo. The dashboard creates a new worktree for the lane, not a folder you pick.", "addLaneRepoHintAdopt": "An existing directory. The dashboard tracks it as-is — no worktree, no new branch.", "addLaneRepoLabel": "Source repository", "addLaneRepoLabelAdopt": "Directory", "addLaneRouterCustom": "AI Router", "addLaneRouterEmptyHint": "No router profile saved yet — add one under Settings › AI Router.", "addLaneRouterHint": "Native talks to the vendor's own API. An AI Router profile is written into this lane's own config when it is created.", "addLaneRouterLabel": "Model endpoint", "addLaneRouterLoading": "Loading router profiles…", "addLaneRouterNative": "Native", "addLaneRouterProfileLabel": "Router profile", "addLaneSetupAgents": "Agents", "addLaneSetupClose": "Close", "addLaneSetupMcp": "MCP servers", "addLaneSetupProfile": "Profile", "addLaneSetupRouter": "Model endpoint", "addLaneSetupTitle": "Setup", "addLaneTitleLabel": "Title", "addLaneTitlePlaceholder": "Optional", "addLaneToolClaude": "Claude Code", "addLaneToolCodex": "Codex", "addLaneToolHint": "Which CLI drives this lane. Cannot be changed later.", "addLaneWorktreeDetached": "(detached)", "addLaneWorktreesMore": "+{{count}} more", "addLaneWorktreesTitle": "Worktrees of this repo ({{count}})", "browse.button": "Browse", "browse.empty": "This folder is empty.", "browse.select": "Select this folder", "browse.title": "Browse for a folder", "changes.back": "All files", "changes.bin": "bin", "changes.binary": "Binary file — not shown.", "changes.collapse": "Collapse the changes panel", "changes.collapseAll": "Collapse every file", "changes.collapseAllFolders": "Collapse all folders", "changes.collapseContext": "Show fewer surrounding lines", "changes.collapseFile": "Collapse {{path}}", "changes.commitPlaceholder": "Commit message", "changes.commitStaged": "Commit {{count}} staged", "changes.conflicted": "conflict", "changes.discard": "Discard this file's changes", "changes.discardConfirm": "Click again to discard — this cannot be undone", "changes.empty.branch": "This branch matches its base.", "changes.empty.commit": "This commit changed no files.", "changes.empty.work": "Nothing uncommitted.", "changes.expand": "Show the changes panel", "changes.expandAll": "Expand every file", "changes.expandAllFolders": "Expand all folders", "changes.expandContext": "Show more surrounding lines", "changes.expandFile": "Expand {{path}}", "changes.fileGone": "That file no longer has changes in this range.", "changes.fileTruncated": "Diff cut short — open the file in an editor for the rest.", "changes.layout.split": "Side-by-side", "changes.layout.unified": "Unified", "changes.loading": "Reading the working copy…", "changes.mode.browse": "Files", "changes.mode.history": "History", "changes.mode.overview": "Overview", "changes.mode.review": "Review", "changes.noCommits": "No commits yet.", "changes.noHunks": "No textual change.", "changes.noMatches": "No tracked file matches.", "changes.openFile": "Open {{path}}", "changes.quickOpen": "Find a file by path…", "changes.range.branch": "vs base", "changes.range.branchHint": "base...HEAD — everything this lane's branch adds on top of its base", "changes.range.work": "Uncommitted", "changes.range.workHint": "Working tree vs HEAD — what has been touched and not committed", "changes.refresh": "Refresh", "changes.resize": "Resize the changes panel (next: {{size}})", "changes.size.compact": "Narrow", "changes.size.half": "Medium", "changes.size.full": "Full screen", "changes.stageAll": "Stage all ({{count}})", "changes.unstageAll": "Unstage all ({{count}})", "changes.dropEdits": "Discard your unsaved edits to this file?", "changes.stagedGroup": "Staged Changes", "changes.unstagedGroup": "Changes", "changes.stage": "Stage this file", "changes.title": "Changes", "changes.truncated": "Some changes were left out to keep this panel responsive.", "changes.unavailable": "This lane's directory is not a readable git repository.", "changes.unstage": "Unstage this file", "changes.wholeFile": "Whole file", "confirmRemoveCancel": "Cancel", "confirmRemoveConfirm": "Remove", "confirmRemoveMessage": "This action cannot be undone.", "confirmRemoveTitle": "Remove lane?", "countDead": "dead", "countNeedsYou": "need you", "countRunning": "running", "countTotal": "lanes", "destructive.blocked.adopted": "This is an adopted directory and cannot be changed by a worktree action.", "destructive.blocked.missing": "The lane directory is missing, so this action cannot continue.", "destructive.blocked.unreadable": "The lane directory cannot be read as a Git worktree, so this action cannot continue.", "destructive.cancel": "Cancel", "destructive.count.bytesEstimate": "Estimated space freed", "destructive.count.dirty": "Modified files", "destructive.count.events": "Events", "destructive.count.head": "HEAD", "destructive.count.sessions": "Sessions", "destructive.count.tokenRows": "Token rows", "destructive.count.unpushed": "Unpushed commits", "destructive.count.untracked": "Untracked files", "destructive.force": "I understand these unpushed commits will be discarded.", "destructive.loading": "Loading current facts…", "destructive.notice.activeSessionSkipped": "One or more sessions in this lane are still active and will be kept, not purged.", "destructive.notice.adopted": "This lane points at a directory you own. Only the dashboard's record of it is dropped — the directory and its files are left untouched.", "destructive.notice.missing": "The lane directory is already gone. Deleting the lane drops the dashboard's record only; nothing on disk and no Git record is touched.", "destructive.notice.unreadable": "The lane directory cannot be read as a Git worktree. That changes nothing here: only the dashboard's record is deleted, the directory is never touched.", "destructive.purge.confirm": "Purge history", "destructive.purge.message": "Approve the current counts before deleting stored session history.", "destructive.purge.title": "Purge lane history?", "destructive.remove.confirm": "Delete lane record", "destructive.remove.message": "Only the dashboard's record of this lane is deleted. Its working tree, its branch and its database are left exactly as they are — delete them yourself if you want them gone.", "destructive.remove.title": "Delete lane record?", "destructive.reset.confirm": "Reset worktree", "destructive.reset.message": "Approve the current counts before resetting this worktree.", "destructive.reset.survives": "Gitignored files such as node_modules and .env are kept; untracked files are deleted.", "destructive.reset.title": "Reset managed worktree?", "destructive.warning.no-remote": "No Git remote is configured, so nothing here is backed up remotely. You can still proceed.", "empty.body": "A lane is one working directory the dashboard follows — its pipeline, sessions and terminal. Click anywhere on this card to add one, or from a terminal:", "empty.title": "No lanes yet", "features.archived": "archived", "features.live": "Live", "features.viewingArchived": "Viewing archived feature \"{{slug}}\" — the lane keeps running; this is a read-only snapshot.", "git.filesHeading_one": "{{count}} file changed", "git.filesHeading_other": "{{count}} files changed", "git.filesMore_one": "… and {{count}} more file", "git.filesMore_other": "… and {{count}} more files", "git.noDelta": "new", "git.uncommitted": "{{dirty}} modified · {{untracked}} untracked", "gitBar.branchCreate": "Create", "gitBar.branchCreateHint": "Create this branch without switching to it", "gitBar.branchDelete": "Delete", "gitBar.branchDeleteHint": "Delete the selected branch (refused if it has unmerged commits)", "gitBar.branchNewPlaceholder": "New branch name…", "gitBar.fetch": "Fetch", "gitBar.fetchHint": "git fetch --all --prune", "gitBar.errNoRemote": "No remote to push to or pull from. Add one, or set this branch's upstream, in a terminal.", "gitBar.inSync": "in sync", "gitBar.newLane": "New lane here", "gitBar.newLaneHeld": "Already checked out at {{path}} — git allows one worktree per branch", "gitBar.newLaneHint": "Open Add lane for a sibling worktree on the selected branch", "gitBar.noCommits": "no commits yet", "gitBar.noUpstream": "not pushed", "gitBar.publish": "Publish…", "gitBar.publishApply": "Publish", "gitBar.publishBranch": "Publish branch", "gitBar.publishBranchHint": "git push -u origin HEAD — this branch has no upstream yet", "gitBar.publishHint": "Add a remote named origin and push this branch to it (git remote add origin + git push -u origin HEAD)", "gitBar.publishUrl": "Remote URL: https://host/owner/repo.git or git@host:owner/repo.git", "gitBar.pull": "Pull", "gitBar.pullHint": "git pull --ff-only — refuses instead of merging when the branch has diverged", "gitBar.push": "Push", "gitBar.pushHint": "git push -u origin HEAD", "gitBar.switch": "Branch", "gitBar.switchApply": "Switch branch", "gitBar.switchCurrent": "current", "gitBar.switchDirty": "Commit or discard the uncommitted changes first", "gitBar.switchHint": "Switch this worktree to another local branch", "gitBar.switchLabel": "Switch branch…", "gitBar.unbornHint": "Commit first, then publish this repo to a remote.", "kind.adopted": "adopted", "kind.managed": "managed", "laneDetail.hide": "Hide details", "laneDetail.show": "Lane details", "locks.held_one": "{{count}} lock held", "locks.held_other": "{{count}} locks held", "mode.repo": "Repo", "mode.repoHint": "Adopt this directory as a lane, as-is — no worktree, no new branch.", "mode.worktree": "Worktree", "mode.worktreeHint": "Provision a new git worktree + branch from a source repo.", "moreActions": "More actions", "pipelinePicker.label": "Pipeline template", "pipelinePicker.stageMismatch": "Stage \"{{stage}}\" matches no node in \"{{pipeline}}\" — declare one of: {{nodes}}", "preflightError": "Could not load the current lane facts.", "preflightErrorWithMessage": "Could not load the current lane facts: {{message}}", "proof.ticketReport": "Task report", "renameLabel": "Rename this lane", "reorderHint": "Drag to reorder · Alt+←/→", "router.applied": "Applied.", "router.appliedRestart": "Applied, but the session running in this lane still uses the old models — restart it to take effect.", "router.label": "Model", "router.restart": "Restart", "router.restarted": "Session restarted with the new router.", "runtime.boot": "▶ up", "runtime.busy.down": "stopping…", "runtime.busy.up": "booting…", "runtime.down": "down", "runtime.healthy": "healthy", "runtime.partial": "partial", "runtime.slot": "slot {{slot}}", "runtime.steppedAsideTitle": "Stepped aside from {{expected}}, which was already in use", "runtime.stop": "■ down", "runtime.toggleTitle": "Boot or stop this lane's own application stack (separate from its Claude run)", "splitView.emptyPane": "No lane selected for this pane.", "splitView.paneCount": "{{count}} pane", "splitView.paneLaneLabel": "Pane lane selector", "splitView.pickLane": "Pick a lane", "status.failed": "failed", "status.idle": "idle", "status.provisioning": "provisioning", "status.running": "running", "statusDead": "DEAD", "title": "Lanes", "tooltipStart": "Spawn a conversation-mode run with no initial prompt; driven from CLI or via message", "worktrees.heading_one": "{{count}} worktree", "worktrees.heading_other": "{{count}} worktrees", "changes.stageHunk": "Stage this hunk", "changes.undoHunk": "Undo this hunk", "changes.undoHunkConfirm": "Click again to undo this hunk — this cannot be undone", "changes.stageHunkShort": "Keep", "changes.undoHunkShort": "Undo", "changes.undoHunkShortConfirm": "Confirm undo", "changes.edit": "Edit", "changes.save": "Save", "changes.cancelEdit": "Cancel", "changes.editorLabel": "Edit {{path}}", "changes.prevHunk": "Previous change", "changes.nextHunk": "Next change", "changes.hunkOf": "{{n}} of {{total}}", "changes.noEditBinary": "Binary file — not editable here", "changes.noEditTooBig": "Too large to edit here (over 1 MB)", "changes.noEdit": "Not editable here", "gitBar.loginTitle": "Git needs a login for {{host}}", "gitBar.loginRejected": "The server rejected that username or token.", "gitBar.loginUser": "Username", "gitBar.loginPassword": "Password or access token", "gitBar.loginRemember": "Remember for everyone using this AgentHub", "gitBar.loginTokenHint": "On Gitea: Settings → Applications → Generate token, with repository read/write.", "gitBar.loginInsecure": "This dashboard is on plain http — the token crosses the network unencrypted.", "gitBar.loginSubmit": "Log in and retry", "gitBar.loginCancel": "Cancel", "gitBar.merge": "Merge into current", "gitBar.mergeHint": "Merge the selected branch into the branch this lane is on", "gitBar.mergeUpstream": "Merge {{upstream}}", "gitBar.mergeUpstreamHint": "The branch has diverged from its upstream: merge it in (conflicts are resolved in the Changes panel)", "gitBar.mergeConfirm": "Merge {{branch}} into {{current}}? Files in this lane change now — if an agent is working in this lane, let it finish first.", "gitBar.mergeConflicts": "Merge stopped on {{count}} conflicted file(s) — resolve them in the list below.", "gitBar.merging": "A merge is in progress: finish or abort it first", "changes.conflictsGroup": "Merge conflicts", "changes.mergeBanner": "Merge in progress — {{count}} file(s) still conflicted", "changes.mergeReady": "Merge in progress — every conflict is resolved", "changes.mergeCommit": "Complete merge", "changes.mergeAbort": "Abort merge", "changes.mergeAbortConfirm": "Click again to abort the merge", "changes.takeOurs": "Keep mine", "changes.takeTheirs": "Take theirs", "changes.markResolved": "Mark resolved (after editing out the markers)" }