Skip to content

feat(dashboard): dock the agent board above the workspace - #19840

Closed
chanyang721 wants to merge 2 commits into
stablyai:mainfrom
chanyang721:feat/agent-dashboard-top-dock
Closed

chanyang721 wants to merge 2 commits into
stablyai:mainfrom
chanyang721:feat/agent-dashboard-top-dock

Conversation

@chanyang721

@chanyang721 chanyang721 commented Sep 10, 2026 •

Copy link
Copy Markdown

ELI5

Keep the existing Agent Dashboard above the workspace while using terminals or chats below it. The sidebar can stay closed, so monitoring agents no longer requires giving up workspace width or repeatedly reopening the dashboard.

What Changed

  • Add an opt-in Dock above workspace switch to the existing dashboard menu and Experimental settings, including settings search and English/Korean copy.
  • Share the existing in-window board body between the sidebar sheet and the new dock. Cards, filters, agent status, acknowledgement, and session navigation retain their existing implementations.
  • Keep the dock open while using the workspace, revealing an agent, or closing the sidebar. The existing dashboard toggle and close button still control visibility. Undocking from either the board menu or Experimental settings restores the sidebar sheet.
  • Hide the dock on the full-page Settings, Activity, and Space surfaces; restore it when returning to the workspace.
  • Bound the dock to min(360px, 45vh) and preserve the existing window controls and terminal tab spacing. Drag resizing is outside this change.

The experiment remains opt-in. The optional persisted docking preference defaults to false; the existing in-window/pop-out mode enum and dashboard visibility state remain unchanged.

Why

This extends the current dashboard rather than introducing another status model or monitoring screen. The implementation follows the existing shortcut routing from #15353 (d566737), shared workspace/session reveal path from #18403 (232d04f), and snapshot isolation established in #17497 (ad5ba25). It also keeps configuration in the experimental dashboard setting used by #18245.

Linked Issue

Fixes #19838

Visual Proof

Actual hidden Electron renderer captures using an isolated test repository and synthetic agent status; no images are committed.

Before — the existing sidebar companion sheet covers the workspace:

Before: sidebar dashboard

After — the same dashboard above the terminal, with the sidebar closed:

After: docked dashboard

Dark theme and the existing settings menu

Dark theme

Dock setting

Testing

  • I manually tested these changes locally — checks were agent-driven through Playwright/CDP; no human manual interaction run is claimed.
  • Automated tests added/updated, or explained why not below

Windows native Electron was exercised through Playwright/CDP, with all agent-launched apps using ORCA_BACKGROUND_LAUNCH=1. The author reviewed the actual screenshots; there was no foreground manual interaction test.

  • pnpm lint, pnpm typecheck, and pnpm build: passed. The build also verifies bundled skills and the projected web client.
  • pnpm run check:code-quality:changed: passed, with no new code-quality, type-aware, or React Doctor findings.
  • Review follow-up: direct Vitest execution with config/vitest.config.ts passed 575 tests across 74 suites, covering the dashboard/pop-out, sidebar host, settings, shortcut routing, snapshot isolation, and folder/remote behavior. New regression tests reproduced both reported bugs on the previous commit and pass with the fixes.
  • Electron E2E: the new spec covers docking/undocking through the actual settings control, keyboard activation, preserved terminal width, sidebar collapse, Escape, light/dark themes, and a 900×700 viewport. A 150 ms delayed status fixture checks that board search focus and text survive an arriving update; this is renderer timing coverage, not an SSH transport test.
  • Both Electron scenarios passed: the original docking/layout scenario and the added full-page navigation/Experimental settings scenario. The latter checks Activity/Space hiding and workspace restoration, then clicks the actual Experimental settings switch and Back to app button with the sidebar initially closed. Settings-page entry is fixture setup; this does not claim a native menu-accelerator test. Hidden renderer screenshots were also inspected.
  • pnpm test was attempted but its native-runtime preflight cannot rebuild node-pty on this machine because Visual Studio C++ build tools are absent. The direct scoped Vitest run is not a full-suite pass; CI still needs to run the standard suite.
  • macOS, Linux, physical SSH connections, and mobile devices were not exercised locally.

To reproduce: enable the experimental Agent Dashboard, open it, and turn on Dock above workspace in its settings menu. Use a terminal, collapse the sidebar, and switch workspaces. The board should remain above the workspace. Toggle docking off to return to the companion sheet; select Pop-out to retain the existing separate-window behavior.

AI Disclosure

Codex (GPT-6) assisted with implementation, code review, tests, and this description. The author reviewed the rendered preview. The review below is an AI self-review, not an independent human review.

Review

  • Review follow-up: addressed the full-page visibility finding and Experimental settings restoration finding. The shared docking control opens the sidebar before disabling docking, so both settings entry points preserve the open board.
  • UI/accessibility: reuses AgentKanbanBoard, SettingsSwitchRow, existing shadcn controls, theme tokens, typography, icons, and localized labels. The dock has a named region; keyboard switching and narrow/light/dark layouts were checked. Window chrome is reserved above it.
  • Cross-platform: adds renderer layout only, with no platform-specific paths, processes, or new keybindings. Uses the existing titlebar metric and dashboard shortcut handling. Native macOS/Linux verification remains outstanding.
  • Local/SSH/folder workspaces: retains useLiveDashboardSnapshot and revealDashboardAgent, including activateAndRevealWorkspace and execution-host identity. It does not replace remote execution authority or assume every workspace is a git worktree.
  • Agents/integrations/providers: uses the existing shared card and reveal contracts; no agent allowlist, provider-specific behavior, or git-provider dependency is added.
  • Performance: the thin dock gate only mounts the live board while visible. The sidebar sheet is not mounted concurrently, and the existing counts-only sidebar path is preserved. No new polling or background service is introduced.
  • Security/backwards compatibility: adds one optional boolean setting; no credentials, permissions, network endpoints, IPC opcodes, or enum values are added. Default behavior remains unchanged when the setting is absent.
  • Mobile/web: no mobile navigation change; the desktop renderer build and projected web-client verification pass. Device rendering was not tested.

Agent skill upstream boundary

  • Not applicable, or this change follows docs/reference/agent-skill-sharing-upstream-boundary.md and copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

No dependency, generated skill catalog, or release-version changes. Full native tests and untested platforms remain explicit validation gaps.

Author

Chanyang Lee (@chanyang721). X/Twitter: @HWHCBWDOAhUTNoZ.

Checklist

  • This PR is small and focused
  • I explained what changed and why (including ELI5)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred) — the standard full pnpm test run remains blocked by the missing Visual Studio C++ toolchain; scoped test passes do not satisfy this combined item.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No critical issues — one minor consistency gap flagged inline.

Reviewed changes

  • Docked board surface — new AgentDashboardDock rendered above the workbench, sharing the extracted AgentDashboardInWindowBoard body with the existing sidebar sheet.
  • Dock setting — new AgentDashboardDockSetting switch wired into the board settings menu and the Experimental settings pane, including search and en/ko copy.
  • Sidebar/shortcut coordination — AgentDashboardSidebarHost and the dashboard shortcut now leave the drawer alone while docked, so the dock persists through sidebar collapse, workspace-board open, and Escape.
  • Layout plumbing — the dock reserves titlebar chrome and collapses the tab strip's floating-header spacer via a --collapsed-sidebar-header-width override.
  • Settings + i18n + tests — one optional boolean setting, reworded modeCopy, and unit + e2e coverage for docking, terminal-width preservation, and delayed-status search-focus.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using DeepSeek Pro (free via Pullfrog for OSS) | 𝕏

@coderabbitai

coderabbitai Bot commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: 31228cce-b37d-489c-a5d7-7a5441f2cb1a

📥 Commits

Reviewing files that changed from the base of the PR and between 9a9fe82 and e282e80.

📒 Files selected for processing (6)
  • src/renderer/src/components/dashboard/AgentDashboardDock.test.tsx
  • src/renderer/src/components/dashboard/AgentDashboardDock.tsx
  • src/renderer/src/components/dashboard/AgentDashboardSettingsMenu.tsx
  • src/renderer/src/components/settings/AgentDashboardDockSetting.tsx
  • src/renderer/src/components/settings/AgentDashboardExperimentalSetting.test.tsx
  • tests/e2e/agent-dashboard-dock.spec.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review.


📝 Walkthrough

Walkthrough

Adds an opt-in experimentalAgentDashboardDocked setting. The Agent Dashboard can render above the workspace while the sidebar closes and workspace interactions continue. The in-window board is extracted into a shared component for drawer and docked rendering. Settings, translations, search metadata, sidebar coordination, shortcut behavior, unit tests, and end-to-end coverage are updated. Disabling docking reopens the existing sidebar sheet.

Merge Risk: ⚪ Minimal · up to e282e

This opt-in setting docks the Agent Dashboard above the workspace while preserving sidebar restoration and workspace use. Current merge-readiness risk is minimal.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 54.55% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 11 functions across 16 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The implementation satisfies the coding objectives in issue #19838. It adds opt-in docking, reuses the existing board, preserves workspace width, keeps the dock visible during workspace interactions, …
Out of Scope Changes check ✅ Passed The changes are related to the docking feature and its required integration. Settings, translations, layout coordination, shared component extraction, and automated tests support the linked issue with…
Title check ✅ Passed The title clearly and concisely describes the main change: docking the Agent Dashboard above the workspace.
Description check ✅ Passed The description is complete and relevant. It includes the required change summary, rationale, linked issue, visual proof, testing details, AI disclosure, review notes, compatibility considerations, an…
  • Fix all pre-merge checks with AI

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: bccb915a-1c2a-4266-9967-3ccdfa81dc37

📥 Commits

Reviewing files that changed from the base of the PR and between 4b4acf2 and 9a9fe82.

📒 Files selected for processing (17)
  • src/renderer/src/app-shell/AppWorkspaceShell.tsx
  • src/renderer/src/components/dashboard/AgentDashboardDock.test.tsx
  • src/renderer/src/components/dashboard/AgentDashboardDock.tsx
  • src/renderer/src/components/dashboard/AgentDashboardDrawer.tsx
  • src/renderer/src/components/dashboard/AgentDashboardInWindowBoard.tsx
  • src/renderer/src/components/dashboard/AgentDashboardSettingsMenu.tsx
  • src/renderer/src/components/settings/AgentDashboardDockSetting.tsx
  • src/renderer/src/components/settings/AgentDashboardExperimentalSetting.tsx
  • src/renderer/src/components/settings/experimental-search.ts
  • src/renderer/src/components/sidebar/AgentDashboardSidebarHost.test.tsx
  • src/renderer/src/components/sidebar/AgentDashboardSidebarHost.tsx
  • src/renderer/src/hooks/ipc-events/agent-dashboard-command.ts
  • src/renderer/src/hooks/useIpcEvents-agent-dashboard-shortcut.test.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/ko.json
  • src/shared/global-settings-types.ts
  • tests/e2e/agent-dashboard-dock.spec.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.

Comment on lines 99 to 105
]}
/>
</div>
<AgentDashboardDockSetting settings={settings} updateSettings={updateSettings} />
</div>
) : null}
</SearchableSetting>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Reopen the sidebar when disabling “Dock above workspace”.

The experimental settings page forwards the update without opening the sidebar. If the docked dashboard is open while the sidebar is closed, AgentDashboardSidebarHost clears agentDashboardDrawerOpen, so the dock disappears and the dashboard is not restored as a sidebar sheet. Match AgentDashboardSettingsMenu by calling setSidebarOpen(true) before applying the update.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes

This run reviewed the follow-up commit e282e80 ("fix(dashboard): preserve board visibility across navigation"), which addresses the full-page visibility gap and settings-page restoration gap flagged in the prior review.

  • Extended the full-page exclusion set — the dock's visible gate now also hides on activity and space, matching the showSidebar exclusions in useAppChromeLayout, so those pages are no longer pushed down by the board.
  • Centralized the sidebar-open handoff — the "open the sidebar before its host discards the undocked board" logic now lives in the shared AgentDashboardDockSetting switch, so undocking from both the board settings menu and the Experimental settings pane restores the sidebar sheet (the menu's now-redundant inline wrapper was removed).
  • Added regression coverage — a settings/activity/space visibility matrix in AgentDashboardDock.test.tsx, a settings-page undocking test in AgentDashboardExperimentalSetting.test.tsx, and an e2e scenario exercising activity/space hiding, workspace restoration, and settings-page undocking with the sidebar closed.

Pullfrog  | Fix it ➔ | View workflow run | Using DeepSeek Pro (free via Pullfrog for OSS) | 𝕏

@chanyang721

Copy link
Copy Markdown
Author

Closing this for now; it has drifted far behind main. I'll come back with smaller, focused PRs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Dock the existing Agent Dashboard above the workspace

1 participant