From a5f2fbc9fdba4c51adcdbf6298088a323631f769 Mon Sep 17 00:00:00 2001 From: kirillk Date: Fri, 8 May 2026 12:52:00 -0400 Subject: [PATCH 1/9] feat(vscode): move Agent Manager tab bar new/search controls to left with separators --- .changeset/agent-manager-tab-controls.md | 5 +++ .../agent-manager/AgentManagerApp.tsx | 38 ++++++++++--------- .../agent-manager/CurrentTabsMenu.tsx | 2 +- .../agent-manager/agent-manager.css | 17 ++++++++- .../webview-ui/agent-manager/i18n/en.ts | 2 +- .../src/stories/agent-manager.stories.tsx | 38 +++++++++++-------- 6 files changed, 65 insertions(+), 37 deletions(-) create mode 100644 .changeset/agent-manager-tab-controls.md diff --git a/.changeset/agent-manager-tab-controls.md b/.changeset/agent-manager-tab-controls.md new file mode 100644 index 00000000000..8d9b184dd1e --- /dev/null +++ b/.changeset/agent-manager-tab-controls.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Move Agent Manager tab creation and search controls to the left side of the tab bar with clearer toolbar separators. diff --git a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx index 105073bb565..b5c370595e8 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx @@ -2646,6 +2646,26 @@ const AgentManagerContent: Component = () => {
+
+ {renderNewTabButton({ + contextSelected: () => selection() !== null, + kb, + newSessionLabel: t("agentManager.session.new"), + newTerminalLabel: t("agentManager.terminal.new"), + newSessionMenuLabel: t("agentManager.session.newSession"), + moreOptionsLabel: t("agentManager.tab.newOptions"), + onNewSession: handleAddSession, + onNewTerminal: () => termHandlers.requestNew(), + })} + +
@@ -2688,28 +2708,10 @@ const AgentManagerContent: Component = () => {
- {renderNewTabButton({ - contextSelected: () => selection() !== null, - kb, - newSessionLabel: t("agentManager.session.new"), - newTerminalLabel: t("agentManager.terminal.new"), - newSessionMenuLabel: t("agentManager.session.newSession"), - moreOptionsLabel: t("agentManager.tab.newOptions"), - onNewSession: handleAddSession, - onNewTerminal: () => termHandlers.requestNew(), - })}
- {(() => { const sel = () => selection() const isWorktree = () => typeof sel() === "string" && sel() !== LOCAL diff --git a/packages/kilo-vscode/webview-ui/agent-manager/CurrentTabsMenu.tsx b/packages/kilo-vscode/webview-ui/agent-manager/CurrentTabsMenu.tsx index 7dd919fb367..9ebe29d7382 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/CurrentTabsMenu.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/CurrentTabsMenu.tsx @@ -231,7 +231,7 @@ export const CurrentTabsMenu: Component = (props) => { return ( (
) +const MockTabsSearchButton = () => ( + +) + +const MockTabLeading = () => ( +
+
+ + + +
+ +
+) + export const TabBarMultipleTabs: Story = { name: "TabBar — multiple tabs with active", render: () => (
+
@@ -575,11 +596,6 @@ export const TabBarMultipleTabs: Story = {
-
- - - -
@@ -603,17 +619,13 @@ export const TabBarWithReviewTab: Story = { render: () => (
+
-
- - - -
@@ -630,16 +642,12 @@ export const TabBarSingleTab: Story = { render: () => (
+
-
- - - -
From 78e40436b63667a102337e2258c8c410e7249141 Mon Sep 17 00:00:00 2001 From: kirillk Date: Fri, 8 May 2026 13:19:07 -0400 Subject: [PATCH 2/9] fix(vscode): stabilize Agent Manager tab tooltips --- .../agent-manager/agent-manager.css | 18 +++ .../webview-ui/agent-manager/sortable-tab.tsx | 140 +++++++++--------- .../terminal/SortableTerminalTab.tsx | 64 ++++---- 3 files changed, 123 insertions(+), 99 deletions(-) diff --git a/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css b/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css index 749e862b2c3..8ee26321732 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css +++ b/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css @@ -1162,6 +1162,19 @@ button.am-section-toggle:hover .am-section-label { white-space: nowrap; } +.am-tab-title { + display: flex; + align-items: center; + gap: 5px; + min-width: 0; + width: 100%; +} + +.am-tab-tooltip[data-component="tooltip-trigger"] { + min-width: 0; + flex: 1; +} + .am-tab-close-wrap { display: inline-flex; align-items: center; @@ -1222,6 +1235,11 @@ button.am-section-toggle:hover .am-section-label { width: 100%; } +.am-tab-sortable > .am-tab, +.am-tab-sortable > [data-slot="context-menu-trigger"] > .am-tab { + height: 100%; +} + .am-tab-dragging { opacity: 0.25; } 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 a42ac1bead1..c4eb817ae87 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx @@ -66,45 +66,47 @@ export const SortableTab: Component<{ > - -
- - - - - - {props.tab.title || t("agentManager.session.untitled")} - - { - e.stopPropagation() - props.onClose() - }} - /> - -
-
+ + + + + + + {props.tab.title || t("agentManager.session.untitled")} + + + + { + e.stopPropagation() + props.onClose() + }} + /> + +
@@ -156,40 +158,42 @@ export const SortableReviewTab: Component<{ class={`am-tab-sortable ${sortable.isActiveDraggable ? "am-tab-dragging" : ""}`} data-tab-id={props.id} > - -
- - + + + + + {props.label} - {props.label} - - - -
-
+ + + + +
) } 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 86d8fc7eda8..3a56e38ad24 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/terminal/SortableTerminalTab.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/terminal/SortableTerminalTab.tsx @@ -45,40 +45,42 @@ export const SortableTerminalTab: Component<{ > - -
- - + + + + + {props.label} - {props.label} - - - -
-
+ + + + +
From 0aa908c7afe9f5e43c77ba157936511a7b959c9f Mon Sep 17 00:00:00 2001 From: kirillk Date: Fri, 8 May 2026 14:17:53 -0400 Subject: [PATCH 3/9] fix(vscode): keep Agent Manager add tab visible --- .changeset/agent-manager-tab-add-button.md | 5 +++ .../agent-manager/AgentManagerApp.tsx | 23 +++++++------ .../agent-manager/CurrentTabsMenu.tsx | 2 +- .../agent-manager/agent-manager.css | 34 ++++++++++++++----- .../webview-ui/agent-manager/sortable-tab.tsx | 12 ++++--- .../agent-manager/tab-rendering.tsx | 2 +- .../terminal/SortableTerminalTab.tsx | 6 ++-- 7 files changed, 57 insertions(+), 27 deletions(-) create mode 100644 .changeset/agent-manager-tab-add-button.md diff --git a/.changeset/agent-manager-tab-add-button.md b/.changeset/agent-manager-tab-add-button.md new file mode 100644 index 00000000000..93098cacf85 --- /dev/null +++ b/.changeset/agent-manager-tab-add-button.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Keep the Agent Manager new-tab button visible at the end of the tab row, separated by a divider, and show all tab tooltips above the tabs. diff --git a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx index b5c370595e8..0f48698222b 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx @@ -2647,16 +2647,6 @@ const AgentManagerContent: Component = () => {
- {renderNewTabButton({ - contextSelected: () => selection() !== null, - kb, - newSessionLabel: t("agentManager.session.new"), - newTerminalLabel: t("agentManager.terminal.new"), - newSessionMenuLabel: t("agentManager.session.newSession"), - moreOptionsLabel: t("agentManager.tab.newOptions"), - onNewSession: handleAddSession, - onNewTerminal: () => termHandlers.requestNew(), - })} {
+
+
+ {renderNewTabButton({ + contextSelected: () => selection() !== null, + kb, + newSessionLabel: t("agentManager.session.new"), + newTerminalLabel: t("agentManager.terminal.new"), + newSessionMenuLabel: t("agentManager.session.newSession"), + moreOptionsLabel: t("agentManager.tab.newOptions"), + onNewSession: handleAddSession, + onNewTerminal: () => termHandlers.requestNew(), + })} +
{(() => { const sel = () => selection() diff --git a/packages/kilo-vscode/webview-ui/agent-manager/CurrentTabsMenu.tsx b/packages/kilo-vscode/webview-ui/agent-manager/CurrentTabsMenu.tsx index 9ebe29d7382..cc09f7a5f1f 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/CurrentTabsMenu.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/CurrentTabsMenu.tsx @@ -237,7 +237,7 @@ export const CurrentTabsMenu: Component = (props) => { modal={false} class="am-tabs-menu" trigger={ - + diff --git a/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css b/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css index 8ee26321732..afe7ca7ff5d 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css +++ b/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css @@ -1028,7 +1028,6 @@ button.am-section-toggle:hover .am-section-label { border-bottom: 1px solid var(--border-weak-base); background: var(--surface-base); height: 36px; - padding: 0 4px; flex-shrink: 0; } @@ -1038,8 +1037,7 @@ button.am-section-toggle:hover .am-section-label { gap: 2px; flex-shrink: 0; align-self: stretch; - margin-right: 4px; - padding-right: 6px; + padding: 0 4px; border-right: 1px solid var(--border-weak-base); } @@ -1061,7 +1059,6 @@ button.am-section-toggle:hover .am-section-label { .am-tab-list-wrap { display: flex; align-items: stretch; - gap: 4px; min-width: 0; flex: 0 1 auto; max-width: 100%; @@ -1083,6 +1080,23 @@ button.am-section-toggle:hover .am-section-label { overflow: hidden; } +/* Fixed add-button area after the scrollable tab list */ +.am-tab-add-wrap { + display: flex; + align-items: center; + flex-shrink: 0; + align-self: stretch; + padding-right: 4px; +} + +.am-tab-add-separator { + width: 1px; + align-self: stretch; + margin-right: 4px; + background: var(--border-weak-base); + flex-shrink: 0; +} + /* Fade indicators for overflow */ .am-tab-fade { position: absolute; @@ -1120,18 +1134,21 @@ button.am-section-toggle:hover .am-section-label { font-size: var(--kilo-font-size-12); cursor: pointer; white-space: nowrap; - border: none; - border-bottom: 2px solid transparent; + border: 1px solid transparent; + border-bottom-width: 2px; + border-radius: 0; min-width: 0; width: 100%; height: 100%; transition: - background-color 120ms ease, + background 120ms ease, border-color 120ms ease, color 120ms ease; } -.am-tab:hover { +.am-tab:hover, +.am-tab:focus-visible { + background: var(--button-ghost-hover, var(--surface-base-hover, rgba(128, 128, 128, 0.2))); color: var(--text-base); } @@ -1310,7 +1327,6 @@ body.am-wt-dragging-active * { gap: 2px; flex-shrink: 0; align-self: stretch; - margin-left: 4px; padding-left: 6px; padding-right: 4px; border-left: 1px solid var(--border-weak-base); 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 c4eb817ae87..d86faa2b22f 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx @@ -74,7 +74,8 @@ export const SortableTab: Component<{ @@ -90,7 +91,8 @@ export const SortableTab: Component<{ @@ -166,7 +168,8 @@ export const SortableReviewTab: Component<{ @@ -180,7 +183,8 @@ export const SortableReviewTab: Component<{ 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 5c3cc24ecd3..89cc2a639ca 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/tab-rendering.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/tab-rendering.tsx @@ -174,7 +174,7 @@ export function renderNewTabButton(deps: NewTabButtonDeps): JSX.Element { return (
- + @@ -67,7 +68,8 @@ export const SortableTerminalTab: Component<{ From eb4ae71b660956687414b3d7554fb1c884e2a49d Mon Sep 17 00:00:00 2001 From: kirillk Date: Fri, 8 May 2026 14:47:27 -0400 Subject: [PATCH 4/9] fix(vscode): align Agent Manager tab tooltips --- .../kilo-vscode/webview-ui/agent-manager/agent-manager.css | 7 +++++++ .../kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx | 4 ++-- .../agent-manager/terminal/SortableTerminalTab.tsx | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css b/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css index afe7ca7ff5d..9950eb9fa0f 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css +++ b/packages/kilo-vscode/webview-ui/agent-manager/agent-manager.css @@ -1188,8 +1188,13 @@ button.am-section-toggle:hover .am-section-label { } .am-tab-tooltip[data-component="tooltip-trigger"] { + display: flex; + align-items: center; min-width: 0; + height: 100%; flex: 1; + padding-right: 27px; + margin-right: -27px; } .am-tab-close-wrap { @@ -1201,6 +1206,8 @@ button.am-section-toggle:hover .am-section-label { flex-shrink: 0; opacity: 0; pointer-events: none; + position: relative; + z-index: 1; transition: opacity 100ms ease; } 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 d86faa2b22f..b091952f615 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/sortable-tab.tsx @@ -74,7 +74,7 @@ export const SortableTab: Component<{ Date: Fri, 8 May 2026 18:50:47 +0000 Subject: [PATCH 5/9] chore: update kilo-vscode visual regression baselines --- .../agentmanager/tab-bar-multiple-tabs-chromium-linux.png | 4 ++-- .../agentmanager/tab-bar-single-tab-chromium-linux.png | 4 ++-- .../agentmanager/tab-bar-with-review-tab-chromium-linux.png | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-multiple-tabs-chromium-linux.png b/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-multiple-tabs-chromium-linux.png index d6b7e3dee6e..bb9315f963c 100644 --- a/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-multiple-tabs-chromium-linux.png +++ b/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-multiple-tabs-chromium-linux.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:483e73147bed34050ee35e60607c33c04d7e726b8f746921ad27e582cb5b19ee -size 2886 +oid sha256:441b4dc0afd70b69e17bd815722a722f8f9451d81ff8e0653d534576e6fcd4bb +size 2801 diff --git a/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-single-tab-chromium-linux.png b/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-single-tab-chromium-linux.png index fe9ea053966..bb1882734c4 100644 --- a/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-single-tab-chromium-linux.png +++ b/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-single-tab-chromium-linux.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b4687ed34fe06adb7e72797798b1f3602c225e9a36223842ea1c66eebea4601 -size 4794 +oid sha256:411c2572555a277382beffe579ac60ea8f027b7ede359823658dc3536418f79e +size 4718 diff --git a/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-with-review-tab-chromium-linux.png b/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-with-review-tab-chromium-linux.png index e3f811c4397..5837fb027f2 100644 --- a/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-with-review-tab-chromium-linux.png +++ b/packages/kilo-docs/public/img/screenshot-tests/kilo-vscode/visual-regression/agentmanager/tab-bar-with-review-tab-chromium-linux.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:980c9baf0edafa113956157a34eb00495aff55293b10fb4cbb86a8cb5b28e8c0 -size 2865 +oid sha256:d6c7a33e3db5608a25422deb62db8cf636e9d5f3ec2b1710dfc00cc02d3ffd0c +size 3219 From 1c12c0be9ea333b7b679a1441610bd363f444a95 Mon Sep 17 00:00:00 2001 From: kirillk Date: Fri, 8 May 2026 14:57:38 -0400 Subject: [PATCH 6/9] fix(vscode): address Agent Manager tab review --- .../agent-manager/AgentManagerApp.tsx | 28 ++++++++++--------- .../src/stories/agent-manager.stories.tsx | 11 +++++++- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx index 0f48698222b..71477796778 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx @@ -2701,19 +2701,21 @@ const AgentManagerContent: Component = () => {
-
-
- {renderNewTabButton({ - contextSelected: () => selection() !== null, - kb, - newSessionLabel: t("agentManager.session.new"), - newTerminalLabel: t("agentManager.terminal.new"), - newSessionMenuLabel: t("agentManager.session.newSession"), - moreOptionsLabel: t("agentManager.tab.newOptions"), - onNewSession: handleAddSession, - onNewTerminal: () => termHandlers.requestNew(), - })} -
+ +
+
+ {renderNewTabButton({ + contextSelected: () => selection() !== null, + kb, + newSessionLabel: t("agentManager.session.new"), + newTerminalLabel: t("agentManager.terminal.new"), + newSessionMenuLabel: t("agentManager.session.newSession"), + moreOptionsLabel: t("agentManager.tab.newOptions"), + onNewSession: handleAddSession, + onNewTerminal: () => termHandlers.requestNew(), + })} +
+
{(() => { const sel = () => selection() diff --git a/packages/kilo-vscode/webview-ui/src/stories/agent-manager.stories.tsx b/packages/kilo-vscode/webview-ui/src/stories/agent-manager.stories.tsx index 39279f8c601..e1f5d2dca22 100644 --- a/packages/kilo-vscode/webview-ui/src/stories/agent-manager.stories.tsx +++ b/packages/kilo-vscode/webview-ui/src/stories/agent-manager.stories.tsx @@ -574,12 +574,18 @@ const MockTabsSearchButton = () => ( const MockTabLeading = () => (
+ +
+) + +const MockTabAdd = () => ( +
+
-
) @@ -598,6 +604,7 @@ export const TabBarMultipleTabs: Story = {
+
+
@@ -650,6 +658,7 @@ export const TabBarSingleTab: Story = {
+