Merge pull request #12279 from Kilo-Org/change-agent-manager-plus-default

fix(agent-manager): open worktree dialog by default
This commit is contained in:
Marius
2026-07-17 11:03:40 +02:00
committed by GitHub
30 changed files with 168 additions and 87 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"kilo-code": patch
---
Open the Agent Manager new-worktree dialog from primary actions and keyboard shortcuts, with an explicit quick-create action in its dropdown.
@@ -35,7 +35,7 @@ Parallel work pays off when sessions are **independent** — neither one's outpu
Every productive worktree session follows the same rhythm:
1. **Create a worktree** (`Cmd+N` / `Ctrl+N`) and describe the task.
1. **Open a new worktree dialog** (`Cmd+N` / `Ctrl+N`), then describe the task.
2. **Let the agent run.** Switch to another worktree, another session, or step away.
3. **Verify manually.** Before you trust "all tests pass", run the app with the run script (`Cmd+E` / `Ctrl+E`) or open the worktree's terminal (`Cmd+/` / `Ctrl+/`) and run the tests yourself.
4. **Review the diff** (`Cmd+D` / `Ctrl+D`). Drop inline comments, then **Send to chat** to feed them back to the agent.
@@ -48,7 +48,7 @@ The single biggest lever on this loop is **keeping each worktree's scope small**
### 1. Side quest
Something unrelated came up while you are mid-task. Create a new worktree for it (`Cmd+N`), let the agent work, review when it is done. Your main work is unaffected.
Something unrelated came up while you are mid-task. Open a new worktree dialog for it (`Cmd+N`), let the agent work, review when it is done. Your main work is unaffected.
### 2. Build a skeleton, then split the work
@@ -64,7 +64,7 @@ This mirrors how a human team works: agree the API contract first, then split ba
For genuinely hard tasks where you do not know which approach will work:
1. Open the advanced new-worktree dialog (`Cmd+Shift+N` / `Ctrl+Shift+N`) and pick 24 versions.
1. Open the new-worktree dialog (`Cmd+N` / `Ctrl+N`) and pick 24 versions.
2. Optionally assign a different model to each.
3. Review the diffs side by side, pick the winner, apply it, discard the rest.
@@ -76,7 +76,7 @@ A related pattern: use the sidebar as an investigation surface. Start two or thr
### 5. A worktree per bug
For a day of small fixes: one worktree per bug (`Cmd+N`), one branch per fix, merge each quickly so none drift. Close the worktree when the fix lands.
For a day of small fixes: one worktree per bug. Use `Cmd+N` to configure each worktree or `Cmd+Shift+N` to create one immediately from the default branch, merge each quickly so none drift. Close the worktree when the fix lands.
### 6. Multiple sessions on one branch
@@ -225,8 +225,9 @@ Merge the most foundational one first. Then, in each remaining worktree, ask the
| Situation | Where |
|---|---|
| Small, interactive task | Sidebar |
| Long task, want to do something else meanwhile | New worktree (`Cmd+N`) |
| Two or three approaches, pick the winner | Multi-version (`Cmd+Shift+N`) |
| Long task, want to do something else meanwhile | Configure a new worktree (`Cmd+N`) |
| Quick task on the default base branch | Create a new worktree (`Cmd+Shift+N`) |
| Two or three approaches, pick the winner | Configure multi-version worktrees (`Cmd+N`) |
| Sidebar task outgrew the sidebar | Continue in Worktree |
| Separate conversation on the same branch | New tab (`Cmd+T`) |
| Long conversation, want a fresh context on same branch | New tab, summarize |
@@ -69,7 +69,7 @@ The extension uses `gh` to automatically discover PRs for each worktree branch.
2. **Branch name**`gh pr view <branch>` matches same-repo branches pushed to origin
3. **HEAD commit SHA**`gh pr list --search "<sha>"` as a last resort, matching PRs whose head ref points to the exact same commit
You can also import a PR directly from the advanced new worktree dialog: open the **New Worktree** dropdown and select **Advanced**, or press `Cmd+Shift+N` (macOS) / `Ctrl+Shift+N` (Windows/Linux), switch to the **Import** tab, then paste the GitHub PR URL. The branch is checked out and the badge appears automatically.
You can also import a PR directly from the new worktree dialog: click **New Worktree** or press `Cmd+N` (macOS) / `Ctrl+N` (Windows/Linux), switch to the **Import** tab, then paste the GitHub PR URL. The branch is checked out and the badge appears automatically.
#### Badge colors
@@ -106,12 +106,14 @@ PR badges update automatically in the background. The active worktree refreshes
### Creating a New Worktree Session
1. Click **New Worktree** or press `Cmd+N` (macOS) / `Ctrl+N` (Windows/Linux) to create a new worktree
1. Click **New Worktree** or press `Cmd+N` (macOS) / `Ctrl+N` (Windows/Linux) to open the new worktree dialog
2. Enter a branch name (or let Kilo generate one)
3. Type your first message to start the agent
3. Type your first message, then create the worktree
A new git worktree is created from your current branch. The agent works in isolation — your main branch is unaffected.
To create a worktree immediately from the default base branch, press `Cmd+Shift+N` (macOS) / `Ctrl+Shift+N` (Windows/Linux).
### Multi-Version Mode
You can run up to 4 parallel implementations of the same prompt across separate worktrees:
@@ -352,8 +354,8 @@ Closing a managed worktree removes it from Agent Manager, deletes its `.kilo/wor
| Shortcut (macOS) | Shortcut (Windows/Linux) | Action |
|---|---|---|
| `Cmd+Shift+M` | `Ctrl+Shift+M` | Open / focus Agent Manager (works from anywhere) |
| `Cmd+N` | `Ctrl+N` | New worktree |
| `Cmd+Shift+N` | `Ctrl+Shift+N` | New worktree (advanced options) |
| `Cmd+N` | `Ctrl+N` | Configure a new worktree |
| `Cmd+Shift+N` | `Ctrl+Shift+N` | Create a new worktree immediately |
| `Cmd+Shift+O` | `Ctrl+Shift+O` | Import/open worktree |
| `Cmd+Shift+W` | `Ctrl+Shift+W` | Close current worktree |
| `Cmd+T` | `Ctrl+T` | New tab (session) in worktree |
+16 -7
View File
@@ -291,6 +291,11 @@
},
{
"command": "kilo-code.new.agentManager.newWorktree",
"title": "Agent Manager: Configure New Worktree",
"category": "Kilo Code"
},
{
"command": "kilo-code.new.agentManager.quickWorktree",
"title": "Agent Manager: New Worktree",
"category": "Kilo Code"
},
@@ -311,7 +316,7 @@
},
{
"command": "kilo-code.new.agentManager.advancedWorktree",
"title": "Agent Manager: Advanced New Worktree",
"title": "Agent Manager: Configure New Worktree",
"category": "Kilo Code"
},
{
@@ -472,6 +477,10 @@
"command": "kilo-code.new.sidebarTitle.kiloClawOpen",
"when": "false"
},
{
"command": "kilo-code.new.agentManager.advancedWorktree",
"when": "false"
},
{
"command": "kilo-code.new.sidebarTitle.marketplaceButtonClicked",
"when": "false"
@@ -713,6 +722,12 @@
"mac": "cmd+n",
"when": "activeWebviewPanelId == 'kilo-code.new.AgentManagerPanel'"
},
{
"command": "kilo-code.new.agentManager.quickWorktree",
"key": "ctrl+shift+n",
"mac": "cmd+shift+n",
"when": "activeWebviewPanelId == 'kilo-code.new.AgentManagerPanel'"
},
{
"command": "kilo-code.new.agentManager.openWorktree",
"key": "ctrl+shift+o",
@@ -731,12 +746,6 @@
"mac": "cmd+shift+w",
"when": "activeWebviewPanelId == 'kilo-code.new.AgentManagerPanel'"
},
{
"command": "kilo-code.new.agentManager.advancedWorktree",
"key": "ctrl+shift+n",
"mac": "cmd+shift+n",
"when": "activeWebviewPanelId == 'kilo-code.new.AgentManagerPanel'"
},
{
"command": "kilo-code.new.agentManager.jumpTo1",
"key": "ctrl+1",
+3
View File
@@ -498,6 +498,9 @@ export function activate(context: vscode.ExtensionContext) {
vscode.commands.registerCommand("kilo-code.new.agentManager.newWorktree", () => {
agentManagerProvider.postMessage({ type: "action", action: "newWorktree" })
}),
vscode.commands.registerCommand("kilo-code.new.agentManager.quickWorktree", () => {
agentManagerProvider.postMessage({ type: "action", action: "quickWorktree" })
}),
vscode.commands.registerCommand("kilo-code.new.agentManager.openWorktree", () => {
agentManagerProvider.postMessage({ type: "action", action: "openWorktree" })
}),
@@ -270,6 +270,89 @@ describe("Agent Manager Model Picker", () => {
})
})
describe("Agent Manager Worktree Actions", () => {
it("opens the configuration dialog from the primary plus action", () => {
const source = fs.readFileSync(path.join(ROOT, "webview-ui/agent-manager/WorktreeSectionActions.tsx"), "utf-8")
const start = source.indexOf('<div class="am-split-button">')
const end = source.indexOf("</div>", start)
const actions = source.slice(start, end)
expect(start).toBeGreaterThanOrEqual(0)
expect(end).toBeGreaterThan(start)
expect(actions).toContain("onClick={props.onNew}")
expect(actions).toContain('keybind={props.bindings.newWorktree ?? ""}')
expect(actions).toContain("<DropdownMenu.Item onSelect={props.onCreate}>")
expect(actions).toContain('props.t("sidebar.session.newWorktree.from")')
expect(actions).toContain('props.bindings.quickWorktree ?? ""')
expect(actions).not.toContain("onSelect={props.onNew}")
})
it("opens the configuration dialog from the new-worktree shortcut", () => {
const source = fs.readFileSync(TSX_FILE, "utf-8")
const start = source.indexOf('else if (msg.action === "newWorktree")')
const end = source.indexOf('else if (msg.action === "quickWorktree")', start)
const action = source.slice(start, end)
expect(start).toBeGreaterThanOrEqual(0)
expect(end).toBeGreaterThan(start)
expect(action).toContain("showNewWorktreeDialog()")
})
it("creates a worktree from the quick-worktree shortcut", () => {
const source = fs.readFileSync(TSX_FILE, "utf-8")
const start = source.indexOf('else if (msg.action === "quickWorktree")')
const end = source.indexOf('else if (msg.action === "openWorktree")', start)
const action = source.slice(start, end)
expect(start).toBeGreaterThanOrEqual(0)
expect(end).toBeGreaterThan(start)
expect(action).toContain("handleCreateWorktree()")
})
it("registers distinct dialog and quick-create worktree shortcuts", () => {
const manifest = JSON.parse(fs.readFileSync(path.join(ROOT, "package.json"), "utf-8")) as {
contributes: { keybindings: { command: string; key?: string; mac?: string }[] }
}
const source = fs.readFileSync(TSX_FILE, "utf-8")
const dialog = manifest.contributes.keybindings.find(
(item) => item.command === "kilo-code.new.agentManager.newWorktree",
)
const quick = manifest.contributes.keybindings.find(
(item) => item.command === "kilo-code.new.agentManager.quickWorktree",
)
expect(dialog).toMatchObject({ key: "ctrl+n", mac: "cmd+n" })
expect(quick).toMatchObject({ key: "ctrl+shift+n", mac: "cmd+shift+n" })
expect(source).toContain('newWorktree: isMac ? "⌘N" : "Ctrl+N"')
expect(source).toContain('quickWorktree: isMac ? "⌘⇧N" : "Ctrl+Shift+N"')
})
it("forwards the quick-worktree command to immediate creation", () => {
const source = fs.readFileSync(path.join(ROOT, "src/extension.ts"), "utf-8")
const start = source.indexOf('vscode.commands.registerCommand("kilo-code.new.agentManager.quickWorktree"')
const end = source.indexOf('vscode.commands.registerCommand("kilo-code.new.agentManager.openWorktree"', start)
const command = source.slice(start, end)
expect(start).toBeGreaterThanOrEqual(0)
expect(end).toBeGreaterThan(start)
expect(command).toContain('agentManagerProvider.postMessage({ type: "action", action: "quickWorktree" })')
})
it("shows the same mapping in the keyboard shortcuts dialog", () => {
const source = fs.readFileSync(path.join(ROOT, "webview-ui/agent-manager/shortcuts.ts"), "utf-8")
expect(source).toContain('t("agentManager.shortcuts.advancedWorktree"), binding: bindings.newWorktree')
expect(source).toContain('t("agentManager.shortcuts.newWorktree"), binding: bindings.quickWorktree')
})
it("does not attribute the new-worktree shortcut to session promotion", () => {
const source = fs.readFileSync(path.join(ROOT, "webview-ui/agent-manager/UnassignedSessionsSection.tsx"), "utf-8")
expect(source).toContain('<Tooltip value={t("agentManager.session.openInWorktree")}')
expect(source).not.toContain("TooltipKeybind")
})
})
// ---------------------------------------------------------------------------
// Provider message routing — static-analysis regression tests
//
@@ -203,7 +203,7 @@ const defaultBindings: Record<string, string> = {
newTab: isMac ? "⌘T" : "Ctrl+T",
closeTab: isMac ? "⌘W" : "Ctrl+W",
newWorktree: isMac ? "⌘N" : "Ctrl+N",
advancedWorktree: isMac ? "⌘⇧N" : "Ctrl+Shift+N",
quickWorktree: isMac ? "⌘⇧N" : "Ctrl+Shift+N",
closeWorktree: isMac ? "⌘⇧W" : "Ctrl+Shift+W",
openWorktree: isMac ? "⌘⇧O" : "Ctrl+Shift+O",
openPR: isMac ? "⌘⇧R" : "Ctrl+Shift+R",
@@ -1106,11 +1106,12 @@ const AgentManagerContent: Component = () => {
} else setSidePanel((prev) => (prev === "diff" ? null : "diff"))
} else if (msg.action === "newTab") handleNewTabForCurrentSelection()
else if (msg.action === "closeTab") closeActiveTab()
else if (msg.action === "newWorktree") handleNewWorktreeOrPromote()
else if (msg.action === "newWorktree") showNewWorktreeDialog()
else if (msg.action === "quickWorktree") handleCreateWorktree()
else if (msg.action === "openWorktree") openWorktreeDirectory()
else if (msg.action === "openPR") openSelectedPR()
else if (msg.action === "runScript") runSelected()
else if (msg.action === "advancedWorktree") showAdvancedWorktreeDialog()
else if (msg.action === "advancedWorktree") showNewWorktreeDialog()
else if (msg.action === "closeWorktree") closeSelectedWorktree()
else if (msg.action === "showShortcuts") handleShowKeyboardShortcuts()
else if (msg.action === "focusInput") window.dispatchEvent(new Event("focusPrompt"))
@@ -1850,8 +1851,7 @@ const AgentManagerContent: Component = () => {
}
const createWorktree = metrics.click("new_worktree", "worktrees", handleCreateWorktree)
// Advanced worktree dialog — opens a full dialog with prompt, versions, model, mode
const showAdvancedWorktreeDialog = () => {
const showNewWorktreeDialog = () => {
if (!loaded()) return
expandSidebar()
dialog.show(() => <NewWorktreeDialog onClose={() => dialog.close()} defaultBaseBranch={repoDefaultBranch()} />)
@@ -2184,18 +2184,6 @@ const AgentManagerContent: Component = () => {
}
}
// Cmd+N: if an unassigned session is selected, promote it; otherwise create a new worktree
const handleNewWorktreeOrPromote = () => {
if (!loaded()) return
const sel = selection()
const sid = session.currentSessionID()
if (sel === null && sid && !worktreeSessionIds().has(sid)) {
vscode.postMessage({ type: "agentManager.promoteSession", sessionId: sid })
return
}
handleCreateWorktree()
}
// Close the currently selected worktree with a confirmation dialog
const closeSelectedWorktree = () => {
const sel = selection()
@@ -2322,7 +2310,7 @@ const AgentManagerContent: Component = () => {
onRef={(value) => (sidebarSearchMenu = value)}
onSelect={focusSidebarSearchItem}
onCreate={createWorktree}
onAdvanced={showAdvancedWorktreeDialog}
onNew={showNewWorktreeDialog}
onSection={newSection}
onShortcuts={metrics.click("keyboard_shortcuts", "worktrees_header", handleShowKeyboardShortcuts)}
onSetup={setupScript}
@@ -2559,7 +2547,7 @@ const AgentManagerContent: Component = () => {
)
})()}
<Show when={worktrees().length === 0}>
<button class="am-worktree-create" onClick={createWorktree}>
<button class="am-worktree-create" onClick={showNewWorktreeDialog}>
<Icon name="plus" size="small" />
<span>{t("agentManager.worktree.new")}</span>
</button>
@@ -2574,7 +2562,6 @@ const AgentManagerContent: Component = () => {
loaded={sessionsLoaded}
collapsed={sessionsCollapsed}
active={() => (selection() === null ? session.currentSessionID() : undefined)}
keybind={() => kb().newWorktree ?? ""}
onToggle={toggleSessions}
onSelect={selectUnassigned}
onPromote={promoteSession}
@@ -2,7 +2,7 @@ import { For, Show, type Accessor, type Component } from "solid-js"
import { ContextMenu } from "@kilocode/kilo-ui/context-menu"
import { Icon } from "@kilocode/kilo-ui/icon"
import { IconButton } from "@kilocode/kilo-ui/icon-button"
import { TooltipKeybind } from "@kilocode/kilo-ui/tooltip"
import { Tooltip } from "@kilocode/kilo-ui/tooltip"
import type { SessionInfo } from "../src/types/messages"
import { useLanguage } from "../src/context/language"
import { formatRelativeDate } from "../src/utils/date"
@@ -12,7 +12,6 @@ interface Props {
loaded: Accessor<boolean>
collapsed: Accessor<boolean>
active: Accessor<string | undefined>
keybind: Accessor<string>
onToggle: () => void
onSelect: (id: string) => void
onPromote: (id: string) => void
@@ -70,11 +69,7 @@ export const UnassignedSessionsSection: Component<Props> = (props) => {
</span>
<span class="am-item-time">{formatRelativeDate(session.updatedAt)}</span>
<div class="am-item-promote">
<TooltipKeybind
title={t("agentManager.session.openInWorktree")}
keybind={props.keybind()}
placement="right"
>
<Tooltip value={t("agentManager.session.openInWorktree")} placement="right">
<IconButton
icon="branch"
size="small"
@@ -82,7 +77,7 @@ export const UnassignedSessionsSection: Component<Props> = (props) => {
label={t("agentManager.session.openInWorktree")}
onClick={(event: MouseEvent) => promote(session.id, event)}
/>
</TooltipKeybind>
</Tooltip>
</div>
</button>
</ContextMenu.Trigger>
@@ -22,7 +22,7 @@ interface WorktreeSectionActionsProps {
onRef: (ref: SidebarSearchMenuRef) => void
onSelect: (item: SidebarSearchItem) => void
onCreate: () => void
onAdvanced: () => void
onNew: () => void
onSection: () => void
onShortcuts: () => void
onSetup: () => void
@@ -48,14 +48,19 @@ export const WorktreeSectionActions: Component<WorktreeSectionActionsProps> = (p
/>
<Show when={props.git}>
<div class="am-split-button">
<IconButton
icon="plus"
size="small"
variant="ghost"
label={props.t("agentManager.worktree.new")}
onClick={props.onCreate}
disabled={!props.loaded}
/>
<TooltipKeybind
title={props.t("agentManager.shortcuts.advancedWorktree")}
keybind={props.bindings.newWorktree ?? ""}
>
<IconButton
icon="plus"
size="small"
variant="ghost"
label={props.t("agentManager.worktree.new")}
onClick={props.onNew}
disabled={!props.loaded}
/>
</TooltipKeybind>
<DropdownMenu gutter={4} placement="bottom-end">
<DropdownMenu.Trigger
class="am-split-arrow"
@@ -76,16 +81,7 @@ export const WorktreeSectionActions: Component<WorktreeSectionActionsProps> = (p
</span>
</DropdownMenu.ItemLabel>
<span class="am-menu-shortcut">
{parseBindingTokens(props.bindings.newWorktree ?? "").map((token) => (
<kbd class="am-menu-key">{token}</kbd>
))}
</span>
</DropdownMenu.Item>
<DropdownMenu.Item onSelect={props.onAdvanced}>
<Icon name="settings-gear" size="small" />
<DropdownMenu.ItemLabel>{props.t("agentManager.dialog.configureWorktree")}</DropdownMenu.ItemLabel>
<span class="am-menu-shortcut">
{parseBindingTokens(props.bindings.advancedWorktree ?? "").map((token) => (
{parseBindingTokens(props.bindings.quickWorktree ?? "").map((token) => (
<kbd class="am-menu-key">{token}</kbd>
))}
</span>
+1 -1
View File
@@ -78,9 +78,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "العنصر السابق",
"agentManager.shortcuts.nextItem": "العنصر التالي",
"agentManager.shortcuts.newWorktree": "Worktree جديد",
"agentManager.shortcuts.advancedWorktree": "تكوين worktree جديد",
"agentManager.shortcuts.openWorktree": "فتح Worktree",
"agentManager.shortcuts.openPR": "فتح طلب السحب",
"agentManager.shortcuts.advancedWorktree": "تكوين worktree جديد",
"agentManager.shortcuts.deleteWorktree": "حذف Worktree",
"agentManager.shortcuts.previousTab": "علامة التبويب السابقة",
"agentManager.shortcuts.nextTab": "علامة التبويب التالية",
+1 -1
View File
@@ -80,9 +80,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Item anterior",
"agentManager.shortcuts.nextItem": "Próximo item",
"agentManager.shortcuts.newWorktree": "Novo Worktree",
"agentManager.shortcuts.advancedWorktree": "Configurar novo worktree",
"agentManager.shortcuts.openWorktree": "Abrir Worktree",
"agentManager.shortcuts.openPR": "Abrir PR",
"agentManager.shortcuts.advancedWorktree": "Configurar novo worktree",
"agentManager.shortcuts.deleteWorktree": "Excluir Worktree",
"agentManager.shortcuts.previousTab": "Aba anterior",
"agentManager.shortcuts.nextTab": "Próxima aba",
+1 -1
View File
@@ -80,9 +80,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Prethodni element",
"agentManager.shortcuts.nextItem": "Sljedeći element",
"agentManager.shortcuts.newWorktree": "Novi Worktree",
"agentManager.shortcuts.advancedWorktree": "Konfiguriši novi worktree",
"agentManager.shortcuts.openWorktree": "Otvori worktree",
"agentManager.shortcuts.openPR": "Otvori PR",
"agentManager.shortcuts.advancedWorktree": "Konfiguriši novi worktree",
"agentManager.shortcuts.deleteWorktree": "Obriši Worktree",
"agentManager.shortcuts.previousTab": "Prethodna kartica",
"agentManager.shortcuts.nextTab": "Sljedeća kartica",
+1 -1
View File
@@ -81,9 +81,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Forrige element",
"agentManager.shortcuts.nextItem": "Næste element",
"agentManager.shortcuts.newWorktree": "Nyt Worktree",
"agentManager.shortcuts.advancedWorktree": "Konfigurer nyt worktree",
"agentManager.shortcuts.openWorktree": "Åbn Worktree",
"agentManager.shortcuts.openPR": "Åbn PR",
"agentManager.shortcuts.advancedWorktree": "Konfigurer nyt worktree",
"agentManager.shortcuts.deleteWorktree": "Slet Worktree",
"agentManager.shortcuts.previousTab": "Forrige fane",
"agentManager.shortcuts.nextTab": "Næste fane",
@@ -81,9 +81,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Vorheriges Element",
"agentManager.shortcuts.nextItem": "Nächstes Element",
"agentManager.shortcuts.newWorktree": "Neuer Worktree",
"agentManager.shortcuts.advancedWorktree": "Neuen Worktree konfigurieren",
"agentManager.shortcuts.openWorktree": "Worktree öffnen",
"agentManager.shortcuts.openPR": "Pull Request öffnen",
"agentManager.shortcuts.advancedWorktree": "Neuen Worktree konfigurieren",
"agentManager.shortcuts.deleteWorktree": "Worktree löschen",
"agentManager.shortcuts.previousTab": "Vorheriger Tab",
"agentManager.shortcuts.nextTab": "Nächster Tab",
@@ -84,9 +84,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Previous item",
"agentManager.shortcuts.nextItem": "Next item",
"agentManager.shortcuts.newWorktree": "New worktree",
"agentManager.shortcuts.advancedWorktree": "Configure new worktree",
"agentManager.shortcuts.openWorktree": "Open worktree",
"agentManager.shortcuts.openPR": "Open pull request",
"agentManager.shortcuts.advancedWorktree": "Configure new worktree",
"agentManager.shortcuts.deleteWorktree": "Delete worktree",
"agentManager.shortcuts.previousTab": "Previous tab",
"agentManager.shortcuts.nextTab": "Next tab",
+1 -1
View File
@@ -80,9 +80,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Elemento anterior",
"agentManager.shortcuts.nextItem": "Siguiente elemento",
"agentManager.shortcuts.newWorktree": "Nuevo Worktree",
"agentManager.shortcuts.advancedWorktree": "Configurar nuevo worktree",
"agentManager.shortcuts.openWorktree": "Abrir Worktree",
"agentManager.shortcuts.openPR": "Abrir pull request",
"agentManager.shortcuts.advancedWorktree": "Configurar nuevo worktree",
"agentManager.shortcuts.deleteWorktree": "Eliminar Worktree",
"agentManager.shortcuts.previousTab": "Pestaña anterior",
"agentManager.shortcuts.nextTab": "Siguiente pestaña",
+1 -1
View File
@@ -80,9 +80,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Élément précédent",
"agentManager.shortcuts.nextItem": "Élément suivant",
"agentManager.shortcuts.newWorktree": "Nouveau Worktree",
"agentManager.shortcuts.advancedWorktree": "Configurer un nouveau worktree",
"agentManager.shortcuts.openWorktree": "Ouvrir le worktree",
"agentManager.shortcuts.openPR": "Ouvrir la pull request",
"agentManager.shortcuts.advancedWorktree": "Configurer un nouveau worktree",
"agentManager.shortcuts.deleteWorktree": "Supprimer le Worktree",
"agentManager.shortcuts.previousTab": "Onglet précédent",
"agentManager.shortcuts.nextTab": "Onglet suivant",
+1 -1
View File
@@ -85,9 +85,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Elemento precedente",
"agentManager.shortcuts.nextItem": "Elemento successivo",
"agentManager.shortcuts.newWorktree": "Nuovo worktree",
"agentManager.shortcuts.advancedWorktree": "Configura nuovo worktree",
"agentManager.shortcuts.openWorktree": "Apri worktree",
"agentManager.shortcuts.openPR": "Apri pull request",
"agentManager.shortcuts.advancedWorktree": "Configura nuovo worktree",
"agentManager.shortcuts.deleteWorktree": "Elimina worktree",
"agentManager.shortcuts.previousTab": "Scheda precedente",
"agentManager.shortcuts.nextTab": "Scheda successiva",
+1 -1
View File
@@ -80,9 +80,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "前の項目",
"agentManager.shortcuts.nextItem": "次の項目",
"agentManager.shortcuts.newWorktree": "新しいWorktree",
"agentManager.shortcuts.advancedWorktree": "新規 worktree の構成",
"agentManager.shortcuts.openWorktree": "Worktreeを開く",
"agentManager.shortcuts.openPR": "PRを開く",
"agentManager.shortcuts.advancedWorktree": "新規 worktree の構成",
"agentManager.shortcuts.deleteWorktree": "Worktreeを削除",
"agentManager.shortcuts.previousTab": "前のタブ",
"agentManager.shortcuts.nextTab": "次のタブ",
+1 -1
View File
@@ -79,9 +79,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "이전 항목",
"agentManager.shortcuts.nextItem": "다음 항목",
"agentManager.shortcuts.newWorktree": "새 Worktree",
"agentManager.shortcuts.advancedWorktree": "새 worktree 구성",
"agentManager.shortcuts.openWorktree": "Worktree 열기",
"agentManager.shortcuts.openPR": "PR 열기",
"agentManager.shortcuts.advancedWorktree": "새 worktree 구성",
"agentManager.shortcuts.deleteWorktree": "Worktree 삭제",
"agentManager.shortcuts.previousTab": "이전 탭",
"agentManager.shortcuts.nextTab": "다음 탭",
+1 -1
View File
@@ -84,9 +84,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Vorig item",
"agentManager.shortcuts.nextItem": "Volgend item",
"agentManager.shortcuts.newWorktree": "Nieuwe worktree",
"agentManager.shortcuts.advancedWorktree": "Nieuwe worktree configureren",
"agentManager.shortcuts.openWorktree": "Worktree openen",
"agentManager.shortcuts.openPR": "Pull request openen",
"agentManager.shortcuts.advancedWorktree": "Nieuwe worktree configureren",
"agentManager.shortcuts.deleteWorktree": "Worktree verwijderen",
"agentManager.shortcuts.previousTab": "Vorig tabblad",
"agentManager.shortcuts.nextTab": "Volgend tabblad",
+1 -1
View File
@@ -79,9 +79,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Forrige element",
"agentManager.shortcuts.nextItem": "Neste element",
"agentManager.shortcuts.newWorktree": "Nytt Worktree",
"agentManager.shortcuts.advancedWorktree": "Konfigurer nytt worktree",
"agentManager.shortcuts.openWorktree": "Åpne Worktree",
"agentManager.shortcuts.openPR": "Åpne pull request",
"agentManager.shortcuts.advancedWorktree": "Konfigurer nytt worktree",
"agentManager.shortcuts.deleteWorktree": "Slett Worktree",
"agentManager.shortcuts.previousTab": "Forrige fane",
"agentManager.shortcuts.nextTab": "Neste fane",
+1 -1
View File
@@ -80,9 +80,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Poprzedni element",
"agentManager.shortcuts.nextItem": "Następny element",
"agentManager.shortcuts.newWorktree": "Nowy Worktree",
"agentManager.shortcuts.advancedWorktree": "Skonfiguruj nowe worktree",
"agentManager.shortcuts.openWorktree": "Otwórz Worktree",
"agentManager.shortcuts.openPR": "Otwórz pull request",
"agentManager.shortcuts.advancedWorktree": "Skonfiguruj nowe worktree",
"agentManager.shortcuts.deleteWorktree": "Usuń Worktree",
"agentManager.shortcuts.previousTab": "Poprzednia karta",
"agentManager.shortcuts.nextTab": "Następna karta",
+1 -1
View File
@@ -80,9 +80,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Предыдущий элемент",
"agentManager.shortcuts.nextItem": "Следующий элемент",
"agentManager.shortcuts.newWorktree": "Новый Worktree",
"agentManager.shortcuts.advancedWorktree": "Настроить новое worktree",
"agentManager.shortcuts.openWorktree": "Открыть Worktree",
"agentManager.shortcuts.openPR": "Открыть PR",
"agentManager.shortcuts.advancedWorktree": "Настроить новое worktree",
"agentManager.shortcuts.deleteWorktree": "Удалить Worktree",
"agentManager.shortcuts.previousTab": "Предыдущая вкладка",
"agentManager.shortcuts.nextTab": "Следующая вкладка",
+1 -1
View File
@@ -76,9 +76,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "รายการก่อนหน้า",
"agentManager.shortcuts.nextItem": "รายการถัดไป",
"agentManager.shortcuts.newWorktree": "Worktree ใหม่",
"agentManager.shortcuts.advancedWorktree": "กำหนดค่า worktree ใหม่",
"agentManager.shortcuts.openWorktree": "เปิด Worktree",
"agentManager.shortcuts.openPR": "เปิด Pull Request",
"agentManager.shortcuts.advancedWorktree": "กำหนดค่า worktree ใหม่",
"agentManager.shortcuts.deleteWorktree": "ลบ Worktree",
"agentManager.shortcuts.previousTab": "แท็บก่อนหน้า",
"agentManager.shortcuts.nextTab": "แท็บถัดไป",
+1 -1
View File
@@ -85,9 +85,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Önceki öğe",
"agentManager.shortcuts.nextItem": "Sonraki öğe",
"agentManager.shortcuts.newWorktree": "Yeni worktree",
"agentManager.shortcuts.advancedWorktree": "Yeni worktree yapılandır",
"agentManager.shortcuts.openWorktree": "Worktree aç",
"agentManager.shortcuts.openPR": "Pull request'i aç",
"agentManager.shortcuts.advancedWorktree": "Yeni worktree yapılandır",
"agentManager.shortcuts.deleteWorktree": "Worktree'yi sil",
"agentManager.shortcuts.previousTab": "Önceki sekme",
"agentManager.shortcuts.nextTab": "Sonraki sekme",
+1 -1
View File
@@ -86,9 +86,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "Попередній елемент",
"agentManager.shortcuts.nextItem": "Наступний елемент",
"agentManager.shortcuts.newWorktree": "Нове робоче дерево",
"agentManager.shortcuts.advancedWorktree": "Налаштувати нове worktree",
"agentManager.shortcuts.openWorktree": "Відкрити робоче дерево",
"agentManager.shortcuts.openPR": "Відкрити PR",
"agentManager.shortcuts.advancedWorktree": "Налаштувати нове worktree",
"agentManager.shortcuts.deleteWorktree": "Видалити робоче дерево",
"agentManager.shortcuts.previousTab": "Попередня вкладка",
"agentManager.shortcuts.nextTab": "Наступна вкладка",
+1 -1
View File
@@ -76,9 +76,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "上一项",
"agentManager.shortcuts.nextItem": "下一项",
"agentManager.shortcuts.newWorktree": "新建 Worktree",
"agentManager.shortcuts.advancedWorktree": "配置新 worktree",
"agentManager.shortcuts.openWorktree": "打开 Worktree",
"agentManager.shortcuts.openPR": "打开 PR",
"agentManager.shortcuts.advancedWorktree": "配置新 worktree",
"agentManager.shortcuts.deleteWorktree": "删除 Worktree",
"agentManager.shortcuts.previousTab": "上一个标签页",
"agentManager.shortcuts.nextTab": "下一个标签页",
+1 -1
View File
@@ -76,9 +76,9 @@ export const dict = {
"agentManager.shortcuts.previousItem": "上一個項目",
"agentManager.shortcuts.nextItem": "下一個項目",
"agentManager.shortcuts.newWorktree": "新建 Worktree",
"agentManager.shortcuts.advancedWorktree": "配置新 worktree",
"agentManager.shortcuts.openWorktree": "開啟 Worktree",
"agentManager.shortcuts.openPR": "開啟 PR",
"agentManager.shortcuts.advancedWorktree": "配置新 worktree",
"agentManager.shortcuts.deleteWorktree": "刪除 Worktree",
"agentManager.shortcuts.previousTab": "上一個分頁",
"agentManager.shortcuts.nextTab": "下一個分頁",
@@ -32,8 +32,8 @@ export function buildShortcutCategories(
shortcuts: [
{ label: t("agentManager.shortcuts.previousItem"), binding: bindings.previousSession ?? "" },
{ label: t("agentManager.shortcuts.nextItem"), binding: bindings.nextSession ?? "" },
{ label: t("agentManager.shortcuts.newWorktree"), binding: bindings.newWorktree ?? "" },
{ label: t("agentManager.shortcuts.advancedWorktree"), binding: bindings.advancedWorktree ?? "" },
{ label: t("agentManager.shortcuts.advancedWorktree"), binding: bindings.newWorktree ?? "" },
{ label: t("agentManager.shortcuts.newWorktree"), binding: bindings.quickWorktree ?? "" },
{ label: t("agentManager.shortcuts.deleteWorktree"), binding: bindings.closeWorktree ?? "" },
{ label: t("agentManager.shortcuts.openWorktree"), binding: bindings.openWorktree ?? "" },
{ label: t("agentManager.shortcuts.openPR"), binding: bindings.openPR ?? "" },