Skip to content

Comments

chore: merge develop into main#13

Open
randlee wants to merge 68 commits intomainfrom
develop
Open

chore: merge develop into main#13
randlee wants to merge 68 commits intomainfrom
develop

Conversation

@randlee
Copy link
Owner

@randlee randlee commented Jan 25, 2026

Summary

  • merge current develop changes into main

Testing

  • not run (merge PR)

randlee and others added 30 commits January 25, 2026 13:17
docs: fix requirements last-updated year
- Sprint 1.5 Workspace Tabs & Configuration complete (PR #12)
- Phase 1 now 95% complete (pending PR merge)
- Added session notes for 2026-01-25
- Updated effort summary and next steps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Architecture blueprint for Sprint 2.1 and 2.2:
- Zed dependencies strategy (git deps, v0.220.3)
- Settings/theme migration to Zed systems
- TerminalPane component design
- Build sequence with 7 phases

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sprint 2.1 Phase 1: Add Zed crates as git dependencies (v0.220.3):
- settings: Zed settings system (GPL-3.0)
- theme: Zed theme system (GPL-3.0)
- terminal: Core terminal emulation with alacritty_terminal (GPL-3.0)
- ui: Pre-built GPUI components (GPL-3.0)
- collections, util: Zed utilities (Apache-2.0)

License updated to GPL-3.0-or-later due to Zed dependencies.
All 58 tests passing, clippy clean.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sprint 2.1 Phase 2-3 implementation:

- Add settings_adapter.rs to register TerminalSettings with Zed's
  SettingsStore for terminal configuration management
- Add theme_adapter.rs to initialize Zed's theme system and provide
  theme access utilities
- Update main.rs to initialize Zed systems in correct order:
  settings::init() → settings_adapter::init() → theme_adapter::init()
- Migrate workspace.rs from custom Theme global to Zed's ActiveTheme
  trait pattern using cx.theme()
- Mark legacy settings/theme modules as deprecated with dead_code allow

This prepares the foundation for terminal pane integration in Sprint 2.2.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add TerminalPane component wrapping Zed's Terminal crate
- Add TerminalTab for managing individual terminal sessions
- Integrate TerminalPane into WorkspaceView replacing placeholder
- Wire up terminal spawning with workspace root as working directory
- Handle terminal events (title changes, close, wakeup, bell)
- Add basic terminal content rendering from TerminalContent cells
- Add keystroke-to-terminal input conversion using Zed's key mappings
- Support multiple terminal tabs with tab bar and new tab button

Sprint 2.2 deliverables complete:
- src/terminal/pane.rs (~360 lines)
- src/terminal/tab.rs (~67 lines)
- Updated src/terminal/mod.rs
- Integrated into src/ui/workspace.rs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix import line formatting (cargo fmt)
- Mark Sprint 2.1 and 2.2 as complete in design doc
- Update success criteria and build sequence

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Phase 1 marked complete
- Phase 2 at 66% (Sprint 2.1 ✅, Sprint 2.2 ✅)
- Sprint 2.3 (URL Recognition) pending
- Updated current status with session details
- Effort summary: ~28-32 hours used

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…tion

feat: Sprint 2.1 - Add Zed terminal infrastructure dependencies
- PR #14 merged (was pending)
- 63 tests passing (was 60)
- Added per-workspace terminal persistence details
- CI passing on all platforms (macOS, Linux, Windows)
- Updated Session 5 effort to ~8 hours

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Comprehensive architecture analysis of Zed's hyperlink system
- 4-phase implementation blueprint leveraging existing Zed code
- Data flow diagrams for mouse events and URL opening
- Testing plan and risk assessment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Align code snippets with per-workspace terminal architecture
- Add warning about noisy path regexes
- Clarify modifier key handling (Cmd on macOS, Ctrl on Windows/Linux)
- Update hover state clearing logic

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 1 of Sprint 2.3 - URL Recognition & Clicking
- Add DEFAULT_PATH_REGEXES constant with file path patterns
- Pass regex patterns to TerminalBuilder for URL detection
- Zed's terminal crate handles the actual regex matching

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 2 & 3 of Sprint 2.3 - URL Recognition & Clicking

Mouse event wiring (Phase 2):
- Add handle_mouse_move, handle_mouse_down, handle_mouse_up methods
- Wire GPUI mouse events to Zed terminal handlers
- Forward events for hyperlink detection and click handling

Event handling (Phase 3):
- Handle TerminalEvent::Open to launch URLs in browser
- Handle TerminalEvent::NewNavigationTarget for hover state
- Add open crate for cross-platform URL launching

Ctrl/Cmd+click on URLs now opens them in the default browser.
Zed's terminal crate handles URL detection internally.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix #1: CloseTerminal now closes correct tab by matching terminal entity
  instead of always removing active tab
- Fix #4: PathLike targets now open files with default app (line:col stripped)
- Fix #5: Subscriptions stored in TerminalTab, auto-dropped when tab removed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…tion

fix(terminal): per-workspace sessions and input handling
feat(terminal): Sprint 2.3 - URL Recognition & Clicking
randlee and others added 30 commits January 27, 2026 11:41
- Add ResizeDragState and drag handling for pane dividers
- Implement render_divider with 6px hitbox and col-resize cursor
- Add flex_basis layout with configurable pane_ratios
- Double-click divider to reset ratios to default (1:2:1)
- Enforce MIN_PANE_WIDTH (150px) during resize
- Ratios persist via existing debounced save mechanism

Terminal hardening (ARCH-CODEX review fixes):
- Add minimum-width guard (2 columns) to prevent alacritty crashes
- Fix Alt+key handling to send ESC prefix for shell shortcuts
- Remove unused terminal snapshot code (dead code cleanup)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: add resizable panes with draggable dividers
- Add hovered_url field to TerminalPane to cache navigation target state
- Update handle_navigation_target to store URL on hover events
- Show pointer cursor when hovering over clickable URLs
- Display URL footer bar at bottom of terminal when hovering
- Add regex pattern tests for path/URL recognition

This completes Sprint 2.3 Phase 4 (Visual Hover Effects) by providing
visual feedback when users hover over clickable URLs in the terminal.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
High severity fixes:
- Add empty content guard to mouse handlers to prevent index panics
- Move mouse handlers from pane root to terminal content element only
  (prevents tab bar interactions from triggering terminal mouse events)

Medium severity fixes:
- Focus terminal on mouse down to ensure modifier keys work correctly
- Clear hover state when secondary modifier (Cmd/Ctrl) is released
  (uses modifiers.secondary() for cross-platform compatibility)

Also refactored render_terminal_content to render_terminal_content_inner
returning Stateful<Div> to allow chaining mouse handlers on the element.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
QA gate passed: 73/73 tests, clippy clean, all builds pass.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Resolve conflicts by integrating Sprint 2.3 hover state features
with develop's TerminalElement improvements:
- Keep hovered_url field and caching logic
- Use TerminalElement for rendering (from develop)
- Add hover footer overlay on TerminalElement container
- Maintain modifier clearing in handle_mouse_move
- Add regex pattern tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat(terminal): Sprint 2.3 URL recognition with hover state
Sprint 2.3 (URL Recognition & Clicking) completed:
- Hover state with visual feedback (pointer cursor + URL footer)
- Mouse event handling with empty content guards
- ARCH-CODEX review findings addressed
- PR #21 merged

Phase 2 now 100% complete. Ready for Phase 3 (File Browser).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add FileBrowserPane component with:
- Per-workspace state management using HashMap
- Virtualized tree rendering with gpui::uniform_list
- Keyboard navigation (Up/Down/Left/Right/Enter/Space)
- Binary search utilities for O(log n) expand/collapse operations
- Context menu builder for file operations
- Entry rendering with git status indicator support

Workspace integration:
- FileBrowserPane integrated into WorkspaceView left pane
- OpenInTerminal event spawns terminal tab in selected directory
- Workspace switching updates file browser state

New modules:
- file_browser/pane.rs - Main component (519 lines)
- file_browser/state.rs - Tree state utilities (299 lines)
- file_browser/render.rs - Entry rendering (201 lines)
- file_browser/context_menu.rs - Menu builder (133 lines)
- file_browser/mod.rs - Module exports and actions (40 lines)

Tests: 31 file browser tests, 107 total (all passing)
Clippy: Zero warnings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Phase 3 now In Progress
- Sprint 3.1 PR #22 pending review
- Added implementation status tracking for Wave 2 completion

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Three bugs fixed in file browser pane:

1. Expand/collapse non-functional (pane.rs:156)
   - Added `all_entries` field to store complete tree
   - Added `rebuild_visible_entries()` method to filter based on expansion
   - Now called after toggling expand/collapse

2. Keyboard navigation off-by-one (pane.rs:188, 216)
   - Fixed `move_selection_down` to select index 0 when no selection
   - Fixed `move_selection_up` to select last entry when no selection
   - Changed from `unwrap_or(0)` to explicit match handling

3. Wrong parent selection (pane.rs:297)
   - Fixed `collapse_selected_entry` to scan backwards from current index
   - Previously scanned from end of list, finding wrong parent
   - Now uses `.take(current_index)` before `.rev()`

Added 5 new unit tests covering these fixes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Address all clippy warnings in src/file_browser/pane.rs:
- Remove redundant clone on all_entries field initialization
- Replace vec! with array literals for static test data
- Refactor match expressions to use Option::map_or and map_or_else
- Apply cargo fmt for consistent code style

All CI gates now pass:
- clippy: no warnings
- tests: 112/112 passed
- fmt: formatting correct

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The x11 crate requires libx11-dev to build on Linux. Added to both
the test job and clippy job Linux dependency installation steps.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The terminal pane was rendering with 0 height because of missing height
constraints in the flex layout chain.

Changes:
- render_content: use size_full() instead of w_full() to provide height
- All pane wrappers: add h_full() to stretch vertically in flex row
- Terminal pane container: use size_full() instead of flex_1()
- Remove overflow_hidden() from outer container (was collapsing height)
- Add proper wrapper around terminal_pane with flex_1/min_h_0/overflow_hidden

The issue was that using flex_1() with overflow_hidden() on the terminal
pane container caused height to collapse to 0. Using size_full() and
moving overflow_hidden() to an inner wrapper resolves this.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
fix: terminal pane layout - ensure proper height propagation
Adds a project-level slash command to run cargo clean on the main repo
and all registered git worktrees. Supports --worktrees-only to skip
the main repo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.

1 participant