diff --git a/.changeset/close-other-tabs.md b/.changeset/close-other-tabs.md
new file mode 100644
index 00000000000..a35c8e3ca6b
--- /dev/null
+++ b/.changeset/close-other-tabs.md
@@ -0,0 +1,5 @@
+---
+"kilo-code": minor
+---
+
+Support closing other Agent Manager tabs from the tab context menu.
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/ar.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/ar.ts
index 22b81da3b39..cd5f714e31c 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/ar.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/ar.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "جلسة للقراءة فقط",
"agentManager.session.noSessions": "لا توجد جلسات مفتوحة",
"agentManager.tab.close": "إغلاق",
+ "agentManager.tab.closeOthers": "إغلاق الآخرين",
"agentManager.tab.closeTab": "إغلاق علامة التبويب",
"agentManager.tab.forkSession": "تفريع الجلسة",
"agentManager.tab.terminal": "الطرفية",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/br.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/br.ts
index aec59b1bcf0..43508c5489e 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/br.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/br.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Sessão somente leitura",
"agentManager.session.noSessions": "Nenhuma sessão aberta",
"agentManager.tab.close": "Fechar",
+ "agentManager.tab.closeOthers": "Fechar outras",
"agentManager.tab.closeTab": "Fechar aba",
"agentManager.tab.forkSession": "Bifurcar sessão",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/bs.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/bs.ts
index d3b3ca7953b..02cd467db9e 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/bs.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/bs.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Sesija samo za čitanje",
"agentManager.session.noSessions": "Nema otvorenih sesija",
"agentManager.tab.close": "Zatvori",
+ "agentManager.tab.closeOthers": "Zatvori ostale",
"agentManager.tab.closeTab": "Zatvori karticu",
"agentManager.tab.forkSession": "Razdvoji sesiju",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/da.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/da.ts
index 194ad09be4a..086d759380a 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/da.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/da.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Skrivebeskyttet session",
"agentManager.session.noSessions": "Ingen åbne sessioner",
"agentManager.tab.close": "Luk",
+ "agentManager.tab.closeOthers": "Luk andre",
"agentManager.tab.closeTab": "Luk fane",
"agentManager.tab.forkSession": "Forgren session",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/de.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/de.ts
index f6643237ba9..872f5d43ff4 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/de.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/de.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Schreibgeschützte Sitzung",
"agentManager.session.noSessions": "Keine Sitzungen geöffnet",
"agentManager.tab.close": "Schließen",
+ "agentManager.tab.closeOthers": "Andere schließen",
"agentManager.tab.closeTab": "Tab schließen",
"agentManager.tab.forkSession": "Sitzung verzweigen",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/en.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/en.ts
index cc94798638a..3249785b6ae 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/en.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/en.ts
@@ -50,6 +50,7 @@ export const dict = {
"agentManager.session.noSessions": "No sessions open",
"agentManager.tab.close": "Close",
+ "agentManager.tab.closeOthers": "Close Others",
"agentManager.tab.closeTab": "Close tab",
"agentManager.tab.forkSession": "Fork Session",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/es.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/es.ts
index bfddc7036fd..e36b18c1622 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/es.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/es.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Sesión de solo lectura",
"agentManager.session.noSessions": "No hay sesiones abiertas",
"agentManager.tab.close": "Cerrar",
+ "agentManager.tab.closeOthers": "Cerrar otras",
"agentManager.tab.closeTab": "Cerrar pestaña",
"agentManager.tab.forkSession": "Bifurcar sesión",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/fr.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/fr.ts
index 435308590a4..6781bcf4c05 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/fr.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/fr.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Session en lecture seule",
"agentManager.session.noSessions": "Aucune session ouverte",
"agentManager.tab.close": "Fermer",
+ "agentManager.tab.closeOthers": "Fermer les autres",
"agentManager.tab.closeTab": "Fermer l'onglet",
"agentManager.tab.forkSession": "Dupliquer la session",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/it.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/it.ts
index 24e5636bb09..b2a02e4e4a5 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/it.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/it.ts
@@ -50,6 +50,7 @@ export const dict = {
"agentManager.session.noSessions": "Nessuna sessione aperta",
"agentManager.tab.close": "Chiudi",
+ "agentManager.tab.closeOthers": "Chiudi le altre",
"agentManager.tab.closeTab": "Chiudi scheda",
"agentManager.tab.forkSession": "Forka sessione",
"agentManager.tab.terminal": "Terminale",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/ja.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/ja.ts
index 4d37c64e2e3..cff88a4bb15 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/ja.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/ja.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "読み取り専用セッション",
"agentManager.session.noSessions": "開いているセッションがありません",
"agentManager.tab.close": "閉じる",
+ "agentManager.tab.closeOthers": "他を閉じる",
"agentManager.tab.closeTab": "タブを閉じる",
"agentManager.tab.forkSession": "セッションをフォーク",
"agentManager.tab.terminal": "ターミナル",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/ko.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/ko.ts
index f7d7e9a2d92..f25dc1818e9 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/ko.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/ko.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "읽기 전용 세션",
"agentManager.session.noSessions": "열린 세션 없음",
"agentManager.tab.close": "닫기",
+ "agentManager.tab.closeOthers": "다른 탭 닫기",
"agentManager.tab.closeTab": "탭 닫기",
"agentManager.tab.forkSession": "세션 포크",
"agentManager.tab.terminal": "터미널",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/nl.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/nl.ts
index 713c7349005..e351a332782 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/nl.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/nl.ts
@@ -50,6 +50,7 @@ export const dict = {
"agentManager.session.noSessions": "Geen open sessies",
"agentManager.tab.close": "Sluiten",
+ "agentManager.tab.closeOthers": "Andere sluiten",
"agentManager.tab.closeTab": "Tabblad sluiten",
"agentManager.tab.forkSession": "Sessie forken",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/no.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/no.ts
index a412c141caa..4ae4cf01c44 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/no.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/no.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Skrivebeskyttet økt",
"agentManager.session.noSessions": "Ingen åpne økter",
"agentManager.tab.close": "Lukk",
+ "agentManager.tab.closeOthers": "Lukk andre",
"agentManager.tab.closeTab": "Lukk fane",
"agentManager.tab.forkSession": "Forgrein økt",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/pl.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/pl.ts
index f985f44198b..342a3f4e1d7 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/pl.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/pl.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Sesja tylko do odczytu",
"agentManager.session.noSessions": "Brak otwartych sesji",
"agentManager.tab.close": "Zamknij",
+ "agentManager.tab.closeOthers": "Zamknij pozostałe",
"agentManager.tab.closeTab": "Zamknij kartę",
"agentManager.tab.forkSession": "Rozgałęź sesję",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/ru.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/ru.ts
index 4b5a8c9ee37..8954a0e01b7 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/ru.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/ru.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "Сессия только для чтения",
"agentManager.session.noSessions": "Нет открытых сессий",
"agentManager.tab.close": "Закрыть",
+ "agentManager.tab.closeOthers": "Закрыть остальные",
"agentManager.tab.closeTab": "Закрыть вкладку",
"agentManager.tab.forkSession": "Ответвить сессию",
"agentManager.tab.terminal": "Терминал",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/th.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/th.ts
index 26e20065593..3badc096bad 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/th.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/th.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "เซสชันอ่านอย่างเดียว",
"agentManager.session.noSessions": "ไม่มีเซสชันที่เปิดอยู่",
"agentManager.tab.close": "ปิด",
+ "agentManager.tab.closeOthers": "ปิดแท็บอื่น",
"agentManager.tab.closeTab": "ปิดแท็บ",
"agentManager.tab.forkSession": "แยกเซสชัน",
"agentManager.tab.terminal": "เทอร์มินัล",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/tr.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/tr.ts
index 4ac533f5f4b..24d5e641149 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/tr.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/tr.ts
@@ -50,6 +50,7 @@ export const dict = {
"agentManager.session.noSessions": "Açık oturum yok",
"agentManager.tab.close": "Kapat",
+ "agentManager.tab.closeOthers": "Diğerlerini kapat",
"agentManager.tab.closeTab": "Sekmeyi kapat",
"agentManager.tab.forkSession": "Oturumu Fork'la",
"agentManager.tab.terminal": "Terminal",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/uk.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/uk.ts
index f34fcafe5ce..5a853526233 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/uk.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/uk.ts
@@ -50,6 +50,7 @@ export const dict = {
"agentManager.session.noSessions": "Немає відкритих сесій",
"agentManager.tab.close": "Закрити",
+ "agentManager.tab.closeOthers": "Закрити інші",
"agentManager.tab.closeTab": "Закрити вкладку",
"agentManager.tab.forkSession": "Розгалужити сесію",
"agentManager.tab.terminal": "Термінал",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/zh.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/zh.ts
index fc4460778d5..70801afdcc3 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/zh.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/zh.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "只读会话",
"agentManager.session.noSessions": "没有打开的会话",
"agentManager.tab.close": "关闭",
+ "agentManager.tab.closeOthers": "关闭其他标签页",
"agentManager.tab.closeTab": "关闭标签页",
"agentManager.tab.forkSession": "复制会话",
"agentManager.tab.terminal": "终端",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/i18n/zht.ts b/packages/kilo-vscode/webview-ui/agent-manager/i18n/zht.ts
index 96e306580ae..3435eb35dbe 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/i18n/zht.ts
+++ b/packages/kilo-vscode/webview-ui/agent-manager/i18n/zht.ts
@@ -46,6 +46,7 @@ export const dict = {
"agentManager.session.readonly": "唯讀工作階段",
"agentManager.session.noSessions": "沒有開啟的工作階段",
"agentManager.tab.close": "關閉",
+ "agentManager.tab.closeOthers": "關閉其他分頁",
"agentManager.tab.closeTab": "關閉分頁",
"agentManager.tab.forkSession": "複製工作階段",
"agentManager.tab.terminal": "終端機",
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx b/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx
index 6d5a8393377..e47feb4ce03 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx
+++ b/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx
@@ -52,6 +52,7 @@ export const SortableTab: Component<{
onSelect: () => void
onMiddleClick: (e: MouseEvent) => void
onClose: () => void
+ onCloseOthers: () => void
onFork?: () => void
}> = (props) => {
const { t } = useLanguage()
@@ -130,6 +131,10 @@ export const SortableTab: Component<{
+
+
+ {t("agentManager.tab.closeOthers")}
+
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/tab-rendering.tsx b/packages/kilo-vscode/webview-ui/agent-manager/tab-rendering.tsx
index 9271a274d7c..04f5f6b219e 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/tab-rendering.tsx
+++ b/packages/kilo-vscode/webview-ui/agent-manager/tab-rendering.tsx
@@ -74,6 +74,7 @@ export function renderTab(id: string, deps: TabRenderDeps): JSX.Element {
onSelect: deps.activateTerminal,
onMiddleClick: deps.terminalMiddleClick,
onClose: deps.closeTerminal,
+ onCloseOthers: (target) => closeOthers(target, deps),
})
}
if (id === deps.REVIEW_TAB_ID) return renderReviewTab(deps)
@@ -141,11 +142,32 @@ function renderSessionTab(s: SessionInfo, deps: TabRenderDeps): JSX.Element {
}}
onMiddleClick={(e: MouseEvent) => deps.sessionMiddleClick(s.id, e)}
onClose={() => deps.sessionClose(s.id)}
+ onCloseOthers={() => closeOthers(s.id, deps)}
onFork={pending ? undefined : () => deps.sessionFork(s.id)}
/>
)
}
+function closeOthers(target: string, deps: TabRenderDeps) {
+ for (const id of deps.tabIds()) {
+ if (id === target) continue
+ if (isTerminalTabId(id)) {
+ deps.closeTerminal(id)
+ continue
+ }
+ if (id === deps.REVIEW_TAB_ID) {
+ deps.closeReview()
+ continue
+ }
+ deps.sessionClose(id)
+ }
+ if (isTerminalTabId(target)) {
+ deps.activateTerminal(target)
+ return
+ }
+ deps.selectSessionTab(target, deps.isPending(target))
+}
+
// Terminal-specific renderers (layer + add button) live in `./terminal/render.tsx`
// and are re-exported for convenience so AgentManagerApp.tsx has a single
// import point for tab rendering.
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/terminal/SortableTerminalTab.tsx b/packages/kilo-vscode/webview-ui/agent-manager/terminal/SortableTerminalTab.tsx
index 1c6c9164b89..6357374df9e 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/terminal/SortableTerminalTab.tsx
+++ b/packages/kilo-vscode/webview-ui/agent-manager/terminal/SortableTerminalTab.tsx
@@ -33,6 +33,7 @@ export const SortableTerminalTab: Component<{
onSelect: () => void
onMiddleClick: (e: MouseEvent) => void
onClose: (e: MouseEvent) => void
+ onCloseOthers: () => void
}> = (props) => {
const { t } = useLanguage()
const sortable = createSortable(props.id)
@@ -99,6 +100,10 @@ export const SortableTerminalTab: Component<{
+
+
+ {t("agentManager.tab.closeOthers")}
+
diff --git a/packages/kilo-vscode/webview-ui/agent-manager/terminal/render.tsx b/packages/kilo-vscode/webview-ui/agent-manager/terminal/render.tsx
index 2fe5e2c44a0..9c40371e22d 100644
--- a/packages/kilo-vscode/webview-ui/agent-manager/terminal/render.tsx
+++ b/packages/kilo-vscode/webview-ui/agent-manager/terminal/render.tsx
@@ -22,6 +22,7 @@ export interface TerminalTabRenderDeps {
onSelect: (id: string) => void
onMiddleClick: (id: string, e: MouseEvent) => void
onClose: (id: string) => void
+ onCloseOthers: (id: string) => void
}
/** Render the terminal entry inside the agent-manager tab bar ``. */
@@ -43,6 +44,7 @@ export function renderTerminalTab(deps: TerminalTabRenderDeps): JSX.Element {
e.stopPropagation()
deps.onClose(deps.id)
}}
+ onCloseOthers={() => deps.onCloseOthers(deps.id)}
/>
)
}