Skip to content

feat(claxedo): colored dot indicators in workspace bar#13638

Closed
kyashrathore wants to merge 21 commits into
anomalyco:devfrom
kyashrathore:dev
Closed

feat(claxedo): colored dot indicators in workspace bar#13638
kyashrathore wants to merge 21 commits into
anomalyco:devfrom
kyashrathore:dev

Conversation

@kyashrathore

Copy link
Copy Markdown
Contributor

Summary

  • Add a colored dot next to each workspace name in the workspace bar, using the same worktree color as the tab group bottom borders
  • Remove the hover-only branch icon tooltip from tabs — the dot makes workspace identity visible at a glance
  • Extract DARK_WORKTREE_COLORS and brightenWorktreeColor() to module scope for reuse

Test plan

  • Verify colored dots appear next to workspace names in the workspace bar
  • Confirm dot colors match the tab group bottom border colors
  • Check dark mode brightening applies correctly to dots
  • Verify the hover branch icon no longer appears on tabs

🤖 Generated with Claude Code

Yash Rathore and others added 21 commits February 14, 2026 20:06
The sharedTerminalCache used params.dir (URL parameter) as workspace key,
causing cross-SDK contamination when multiple TerminalProviders (route-level
and per-DirectoryScope) shared entries with different SDK directories. This
made terminal POST use the project root directory while WebSocket connect
used the correct worktree directory, resulting in "Session not found" (1008).

Fix: use base64Encode(sdk.directory) instead of params.dir so each
TerminalProvider scopes to its own SDK's directory.

Also includes:
- Workspace creation: loading state, wait for bootstrap before navigating
- ClaxedoLayout: eager sync init, stale URL session ID cleanup
- Workspace bar: popover manager replacing hold-to-delete
- Stale worktree cleanup for orphaned sidebar entries
- PTY: mkdir cwd for new worktrees, session retention after exit
- Server: improved error logging
- Agent hooks: atomic file writes via temp file
- Xterm: fix dispose order (renderer before xterm)
- Desktop build: disable updater/signing without credentials
- Dev-local: --print-logs flag, tauri config merge order fix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The xterm WebGL renderer showed garbled text when clicking the original
terminal pane after a split. Root cause: focusing a pane only updated
state (focusInTab) without dispatching opencode:terminal-fit, so xterm
never ran fit()+refresh() to repaint with correct dimensions.

Three fixes applied:
- Dispatch opencode:terminal-fit on pane focus (onPointerDown)
- FlatPaneRenderer: use <For> with stable leaf IDs instead of recursive
  <Show keyed> tree, preventing terminal remount on split
- Font-nudge on significant (>20%) container width change in
  ResizeObserver, not just 0→visible transitions
- Wire terminalResizeSuspended flag in drag handlers
- Dispatch terminal-fit on workspace-level split toggle

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… route dir

handleNewTerminal was reading activeWorkspaceId() from the URL, which
stays stale after workspace-bar switches. Now GroupPanel resolves dir
from wt.default() and handleNewTerminal navigates before requestCreate
so the route-level TerminalProvider's sdk.directory matches pendingDir.

handleNewSession now finds the group whose worktree.default matches
workspaceDir instead of always using topTabs, so sidebar-triggered
sessions land in the correct split panel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tab bar now scrolls the active tab into view when it changes (e.g., new
tab created off-screen). Adds data-tab-id attribute on SortableTab and a
createEffect that calls scrollIntoView on activeId change.

Worktree color indicators switched from border-b to inset box-shadow so
they render inside the element box and aren't clipped by overflow-hidden
on parent containers (was invisible on web, visible on desktop Tauri).

Dark mode worktree colors updated to brighter variants with full palette
coverage (teal, amber, indigo added).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…-metrics test

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…orMap type

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…panels

Two bugs in split panel session creation:

1. Empty secondary panel auto-created a session on any click because the
   "ensure active tab" effect fired when topTabs.activeId() was null.
   Fix: return a "__split_empty__" sentinel from topTabs.activeId() when
   the focused group is empty and in split mode, so the guard holds.

2. The "+" button created sessions in the wrong group when both panels
   shared the same worktree — groups().find() always returned the first
   match (primary). Fix: split.groups() now returns the focused group
   first so find() naturally prefers it. Added split.orderedGroups() for
   rendering and keyboard navigation that need creation order.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add compact prompt dock for review panel overlay
- Fix Windows crash: path separator mismatch in override resolver plugin
- Fix all URL.pathname → fileURLToPath() across vite configs and scripts
- Replace icon-button diff style toggles with RadioGroup
- Fix session panel visibility for new/empty sessions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The eventFetch condition only used platform.fetch for HTTP non-loopback,
skipping HTTPS entirely. On cloud (HTTPS), this meant the SSE connection
had no auth headers, causing perpetual "event stream error" failures.

Changed condition from `http: && !loopback` to just `!loopback` so
platform.fetch (which carries JWT on web, handles CORS on desktop)
is used for all non-loopback connections regardless of protocol.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… messages on review close

Move compact floating prompt from inside per-tab containers to the
review area root so it renders regardless of file tree tab or active
tab state. Add reactive guard that restores panelMode when the review
panel closes while messages are hidden, preventing an empty layout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The local setup wizard dialog is no longer needed. shouldShowLocalSetup
now always returns false, preventing the dialog from ever appearing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On Windows, `path.join()` produces backslash paths (`C:\Users\...`) while
Vite's alias system uses forward slashes (`C:/Users/...`). Rollup treats
these as different modules, causing SolidJS contexts to be duplicated in
the bundle. This results in the runtime error:
"Server context must be used within a context provider"

Changes:
- Normalize override paths in `overrideMap` using `normalizePath()` to
  prevent duplicate module bundling on Windows (critical fix — also
  affects CI release builds on windows-latest)
- Replace `new URL(import.meta.url).pathname` with `import.meta.dir` in
  build scripts (the former produces `/C:/Users/...` on Windows which
  breaks `path.resolve`)
- Add GNU Rust toolchain detection and sidecar mapping for local
  development with `x86_64-pc-windows-gnu`
- Copy sidecar binary to both GNU and MSVC target names on Windows to
  handle Tauri bundler target mismatch
- Support `--skip-sidecar` flag to skip sidecar build AND bundling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: Windows build support — path normalization and GNU toolchain
- Disable onboarding/local-setup dialog
- Compact prompt visible on all review tabs, auto-restore messages on review close
- Windows build support — path normalization and GNU toolchain
- Use platform.fetch for SSE event stream on non-loopback URLs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ace bar

Makes it immediately obvious which tabs belong to which workspace by
showing a small colored dot before each workspace name, matching the
worktree color used for tab group bottom borders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@kyashrathore

Copy link
Copy Markdown
Contributor Author

Opened on wrong repo by mistake, closing.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant