diff --git a/src/features/chat/ui/toolbar.tsx b/src/features/chat/ui/toolbar.tsx
index 067e4764..e4bd6de8 100644
--- a/src/features/chat/ui/toolbar.tsx
+++ b/src/features/chat/ui/toolbar.tsx
@@ -39,13 +39,6 @@ function Toolbar({ model, actions }: { model: ToolbarViewModel; actions: Toolbar
<>
-
+
@@ -86,7 +86,7 @@ function RuntimeButtons({ model, actions }: { model: ToolbarViewModel; actions:
return (
<>
{
diff --git a/tests/features/chat/ui/renderers/toolbar.test.ts b/tests/features/chat/ui/renderers/toolbar.test.ts
index c6c8882a..bb8f1d82 100644
--- a/tests/features/chat/ui/renderers/toolbar.test.ts
+++ b/tests/features/chat/ui/renderers/toolbar.test.ts
@@ -30,8 +30,8 @@ describe("toolbar renderer decisions", () => {
expect(parent.querySelector(".codex-panel__runtime-area")).toBeNull();
expect(parent.querySelector(".codex-panel__runtime-strip")).toBeNull();
expect([...expectPresent(navButtons).children].map((button) => button.getAttribute("aria-label"))).toEqual([
- "Start new chat",
"Show thread list",
+ "Start new chat",
"Toggle plan mode",
"Toggle auto-review",
"Toggle fast mode",
@@ -40,6 +40,7 @@ describe("toolbar renderer decisions", () => {
]);
const newChatButton = parent.querySelector(".codex-panel__new-chat");
expect(newChatButton?.getAttribute("aria-label")).toBe("Start new chat");
+ expect(newChatButton?.dataset["icon"]).toBe("messages-square");
expect(newChatButton?.classList.contains("nav-action-button")).toBe(true);
expect(newChatButton?.disabled).toBe(false);
newChatButton?.click();
@@ -60,6 +61,7 @@ describe("toolbar renderer decisions", () => {
expect(toggleHistory).toHaveBeenCalled();
const planButton = parent.querySelector(".codex-panel__plan-toggle");
expect(planButton?.getAttribute("aria-label")).toBe("Toggle plan mode");
+ expect(planButton?.dataset["icon"]).toBe("list-todo");
expect(planButton?.getAttribute("aria-pressed")).toBe("false");
expect(planButton?.classList.contains("codex-panel__runtime-icon")).toBe(true);
const autoReviewButton = parent.querySelector(".codex-panel__auto-review-toggle");
@@ -89,6 +91,7 @@ describe("toolbar renderer decisions", () => {
expect(parent.querySelector(".codex-panel__status-menu-toggle")?.getAttribute("aria-label")).toBe("Hide panel menu");
expect(parent.querySelector(".codex-panel__status-menu-toggle")?.classList.contains("is-active")).toBe(true);
expect(parent.querySelector(".codex-panel__runtime-model")?.getAttribute("aria-label")).toBe("Change model and reasoning effort");
+ expect(parent.querySelector(".codex-panel__runtime-model")?.dataset["icon"]).toBe("bot");
expect(parent.querySelector(".codex-panel__runtime-model")?.classList.contains("is-active")).toBe(true);
expect(parent.querySelector(".codex-panel__runtime-model")?.classList.contains("nav-action-button")).toBe(true);
});
diff --git a/tests/features/threads-view/renderer.test.ts b/tests/features/threads-view/renderer.test.ts
index 3a669365..612c49d0 100644
--- a/tests/features/threads-view/renderer.test.ts
+++ b/tests/features/threads-view/renderer.test.ts
@@ -172,6 +172,7 @@ describe("threads view renderer decisions", () => {
const openNewPanel = expectPresent(parent.querySelector('[aria-label="Open new panel"]'));
expect(openNewPanel.classList.contains("codex-panel-threads__toolbar-button")).toBe(true);
expect(openNewPanel.classList.contains("codex-panel-threads__row-button")).toBe(false);
+ expect(openNewPanel.dataset["icon"]).toBe("message-square-plus");
openNewPanel.click();
expect(actions.openNewPanel).toHaveBeenCalledOnce();
const rename = expectPresent(parent.querySelector('[aria-label="Rename thread"]'));
diff --git a/tests/features/threads-view/view.test.ts b/tests/features/threads-view/view.test.ts
index 9215da58..635d7b06 100644
--- a/tests/features/threads-view/view.test.ts
+++ b/tests/features/threads-view/view.test.ts
@@ -78,6 +78,12 @@ describe("CodexThreadsView", () => {
namingMock.generateThreadTitleWithCodex.mockReset();
});
+ it("uses a distinct thread view icon", async () => {
+ const view = await threadsView();
+
+ expect(view.getIcon()).toBe("list-video");
+ });
+
it("renders thread list from app-server history", async () => {
connectionMock.state.client = clientFixture({
listThreads: vi.fn().mockResolvedValue({ data: [threadFixture({ id: "thread", preview: "Thread preview" })] }),