From dd3c71e3d5c8c1b9b23bcf3fdbc34dc306a80570 Mon Sep 17 00:00:00 2001
From: Adam Malczewski <github@tradam.dev>
Date: Mon, 1 Jun 2026 09:14:30 +0900
Subject: feat(sidebar): add Debug panel with copy-conversation action

New "Debug" panel option in the sidebar, grouping dev-facing actions.
Currently exposes the Copy-conversation button (ported from the old
header). Leaves room for additional debug actions without re-cluttering
the header.

The Copy action wraps `tabStore.copyConversation()` and shows a
"Copied"/"Failed" affordance for 1.5s, matching the previous header
behavior.
---
 packages/frontend/src/lib/components/SidebarPanel.svelte | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'packages/frontend/src/lib/components/SidebarPanel.svelte')

diff --git a/packages/frontend/src/lib/components/SidebarPanel.svelte b/packages/frontend/src/lib/components/SidebarPanel.svelte
index 206ed09..66fa6a4 100644
--- a/packages/frontend/src/lib/components/SidebarPanel.svelte
+++ b/packages/frontend/src/lib/components/SidebarPanel.svelte
@@ -4,6 +4,7 @@ import type { CacheStats, KeyInfo, LogEntry, TaskItem } from "../types.js";
 import CacheRatePanel from "./CacheRatePanel.svelte";
 import ClaudeReset from "./ClaudeReset.svelte";
 import ConfigPanel from "./ConfigPanel.svelte";
+import DebugPanel from "./DebugPanel.svelte";
 import KeyUsage from "./KeyUsage.svelte";
 import ModelSelector from "./ModelSelector.svelte";
 import ModelStatus from "./ModelStatus.svelte";
@@ -95,6 +96,7 @@ const viewOptions = [
 	"Skills",
 	"Tools",
 	"Settings",
+	"Debug",
 ];
 
 function addPanel() {
@@ -181,6 +183,8 @@ function contentClass(_selected: string): string {
 					<ToolPermissions entries={permissionLog} {apiBase} />
 				{:else if panel.selected === "Settings"}
 					<SettingsPanel {keys} {apiBase} />
+				{:else if panel.selected === "Debug"}
+					<DebugPanel />
 				{/if}
 			</div>
 		</div>
-- 
cgit v1.2.3


From 5ea668d5490226e78958c6e72b348da9f097ac88 Mon Sep 17 00:00:00 2001
From: Adam Malczewski <github@tradam.dev>
Date: Mon, 1 Jun 2026 09:45:43 +0900
Subject: a11y(sidebar): label the remove-panel button for screen readers
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Gemini review nit. The ✕ button on each sidebar slot (idx > 0) was
read by screen readers as "multiplication sign" or "cross". Adds
aria-label="Remove panel" so the action is announced clearly.

Also gitignore claude-report.md (Gemini review artifact, not source).
---
 .gitignore                                               | 3 +++
 packages/frontend/src/lib/components/SidebarPanel.svelte | 1 +
 2 files changed, 4 insertions(+)

(limited to 'packages/frontend/src/lib/components/SidebarPanel.svelte')

diff --git a/.gitignore b/.gitignore
index 51c3006..960e309 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,6 @@ packaging/electron/pkg/
 packaging/electron/*.pkg.tar.zst
 packaging/electron/*.tar.zst
 packages/frontend/release/
+
+# Code-review artifacts
+claude-report.md
diff --git a/packages/frontend/src/lib/components/SidebarPanel.svelte b/packages/frontend/src/lib/components/SidebarPanel.svelte
index 66fa6a4..491b1bd 100644
--- a/packages/frontend/src/lib/components/SidebarPanel.svelte
+++ b/packages/frontend/src/lib/components/SidebarPanel.svelte
@@ -139,6 +139,7 @@ function contentClass(_selected: string): string {
 					<button
 						type="button"
 						class="btn btn-sm btn-ghost btn-square shrink-0"
+						aria-label="Remove panel"
 						onclick={() => {
 							panels = panels.filter((p) => p.id !== panel.id);
 						}}
-- 
cgit v1.2.3

