Skip to content

fix: support precheck dependency detection in worktrees#252

Merged
mattleaverton merged 2 commits intomainfrom
fix/precheck-worktree
Mar 30, 2026
Merged

fix: support precheck dependency detection in worktrees#252
mattleaverton merged 2 commits intomainfrom
fix/precheck-worktree

Conversation

@mattleaverton
Copy link
Copy Markdown
Collaborator

Summary

  • Use createRequire instead of existsSync for dependency checking in scripts/precheck.ts
  • Allows worktrees to resolve dependencies from the parent checkout's node_modules

Separated from #247 (browser pane screenshots).

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

Use createRequire instead of existsSync for dependency checking, so
worktrees can resolve deps from the parent checkout's node_modules.

Separated from #247 (browser pane screenshots).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
mattleaverton added a commit that referenced this pull request Mar 30, 2026
Remove ToolStrip simplification (in #251), test rewrites (in #249),
precheck worktree fix (in #252), and .opencode config. This PR now
contains only the TabsView device-centric card grid redesign.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
mattleaverton added a commit that referenced this pull request Mar 30, 2026
…flow (#248)

* fix(mcp): validate params and reject unknown parameters with helpful hints

When called with unrecognized params (e.g. new-tab with url), the MCP
tool now returns an error listing valid parameters. A specific hint
suggests open-browser when url is passed to new-tab. Help text updated
to clarify the distinction between new-tab and open-browser, with a new
playbook for opening URLs.

* docs: add trycycle title search plan

* docs: tighten title-search implementation plan

* docs: fix title search subdir implementation plan

* docs: tighten title search implementation plan

* docs: add title search subdir test plan

* feat: extend title search with subdirectory matches

* refactor: track applied sidebar search state

* feat: finalize applied sidebar search behavior

* fix: honor applied sidebar search state

* test: remove remaining skipped coverage

* fix: sync sidebar search controls with requested state

* fix: restore sidebar request state contract

* fix: hide sidebar search chrome during browse refresh

* fix: preserve visible sidebar refresh state

* docs: revise title search implementation plan

* docs: fix trycycle title-search plan

* docs: refocus title-search implementation plan

* docs: revise title-search subdir test plan

* refactor: split sidebar replacement and refresh commits

* fix: refresh sidebar results by visible identity

* test: lock refresh drift regressions

* test: lock direct refresh regressions

* fix: preserve sidebar search debounce on stale commits

* docs: add plan for fixing tool strip showTools toggle

* fix: make tool strip toggle session-only, controlled by showTools prop

- Remove localStorage persistence for tool strip expanded state
- ToolStrip now uses local useState initialized from showTools prop
- ToolBlocks inherit initial expanded state from showTools
- Remove autoExpandAbove/completedToolOffset props (no longer needed)
- All toggle state is session-only, resets on page refresh

* fix: remove dead code from AgentChatView and browserPreferencesPersistence

* fix: always show tool strip chevron, showTools only controls default state

* plan: clickable terminal URLs with context menu integration

Add implementation plan for making terminal URLs clickable (opening in
browser panes) with right-click context menu support for open in pane,
open in tab, open in browser, and copy URL.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* plan: improve clickable-terminal-urls plan with verified code references

Reviewed all source files referenced by the plan against the actual
codebase and corrected several issues:

- Fix ILinkHandler hover/leave signatures (need range param for OSC 8)
- Add explicit wrapperRef JSX attachment instructions for outer div
- Fix test file reference to canonical path (components/context-menu/)
- Add useMemo dependency array update note for ContextMenuProvider
- Clarify link provider registration order for priority
- Note cleanup needs for both hoveredUrl map and data attribute
- Add context-menu-utils.test.ts to new files list
- Document picker vs direct browser pane design decision

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* plan: refine clickable-terminal-urls plan after code verification

- Remove unnecessary empty hover/leave stubs on file path links
- Note pre-existing mock staleness in menu-defs.test.ts (6 missing actions)
- Add docs/index.html update step per repo rules
- Add timing safety note for wrapperRef in hover callbacks
- Clarify ContextMenuProvider action wiring locations and imports
- Add balanced parenthesis edge case for URL detection tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* plan: fix xterm link provider priority order and test file references

Corrects three factual errors in the implementation plan:
1. xterm.js link provider priority is first-registered=highest (not last)
2. menu-defs.test.ts does not exist yet (was incorrectly labeled "update existing")
3. Removes context-menu-constants.ts from modified files list (no changes needed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test-plan: concrete enumerated test plan for clickable terminal URLs

58 new tests across 8 files plus updates to 2 existing test files,
aligned to the implementation plan's TDD phases. Covers hover state
tracking, URL detection, left-click behavior, context menu integration,
multi-pane integration, and browser-use E2E smoke testing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add terminal-hovered-url and url-utils utility modules with tests

Phase 1 of clickable terminal URLs: module-level map for tracking hovered
URLs per pane, and findUrls utility for detecting http/https URLs in
terminal output text.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: URL click opens browser pane, add hover/leave tracking and URL link provider

- Left-click on OSC 8 links and detected URLs now opens a browser pane
  (split right) instead of window.open
- Warning modal confirm also opens browser pane instead of window.open
- Add hover/leave callbacks to OSC 8 linkHandler for tracking hovered URL
- Register URL link provider (after file path provider) to detect plain
  http/https URLs in terminal output
- Track hovered URL in module-level map and data-hovered-url DOM attribute
- Clear hover state on terminal dispose and tab hide
- Update existing link warning and keyboard tests for new behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add URL context menu items for terminal panes

- Add hoveredUrl optional field to terminal ContextTarget
- Parse hoveredUrl from dataset in parseContextTarget
- Add URL-specific menu items (Open in pane/tab/browser, Copy URL) to
  terminal context menu when hovering a URL
- Add openUrlInPane, openUrlInTab, openUrlInBrowser, copyUrl actions
  to ContextMenuProvider
- Add tests for context-menu-utils and menu-defs URL behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add integration tests for URL click and context menu

- terminal-url-link-click: verifies URL click in nested pane opens
  browser pane on the correct branch (both plain URL and OSC 8 paths)
- terminal-url-context-menu: verifies URL context menu items appear
  when hovering a URL, are absent without hover, and "Open URL in pane"
  creates a browser pane split

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add hidden state cleanup test for hovered URL

Verifies that when a terminal tab becomes hidden, the hovered URL
module state and DOM attribute are cleared.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: update file link test to capture first provider, not last

With the new URL link provider registered after the file path provider,
the existing test mock was capturing the URL provider instead of the
file path provider. Fixed by only storing the first registered provider.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: fix lint issues in url-utils and TerminalView cleanup

- Remove unnecessary escape in url-utils regex character class
- Capture wrapperRef.current in local variable before cleanup to satisfy
  react-hooks/exhaustive-deps rule

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: balanced parens in URL detection, scheme validation on OSC 8 links, docs update

- URL detection now preserves balanced parentheses (e.g. Wikipedia URLs)
  while still stripping unbalanced trailing parens
- OSC 8 linkHandler.activate validates http/https scheme before opening
  browser panes; non-http schemes fall back to window.open
- Added clickable URLs feature to docs/index.html feature list

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: add button guard to prevent right/middle-click link activation

Prevents non-left-click from triggering link activation on OSC 8 links,
file path links, and URL links. Adds tests for right-click and middle-click.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: gitignore opencode MCP state and ephemeral files

Align .opencode/.gitignore with upstream best practices: add plans/,
package-lock.json, and .freshell-mcp-state.json. Remove the transient
MCP state file from tracking.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: defer terminal link pane splits

* refactor: tighten terminal link split deferral

* fix: support precheck in worktrees

* fix: type queued terminal pane splits as pane inputs

* ci: add client typecheck workflow

* feat: redesign TabsView with device-centric card grid layout

Replace flat list layout with a compact card grid organized by device.
Key changes:
- Device-centric grouping: local tabs first, then remote by device
- Compact card grid (auto-fill 220px min) with colored left borders
- Right-click context menus with Jump/Pull/Open pane/Copy actions
- Segmented controls for status and scope filters
- Hover-to-reveal action labels on cards
- Collapsible "Recently closed" section
- Pane type icons with distinct colors for visual scanning
- Click-to-act: click card to jump (local) or pull (remote/closed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: update TabsView tests for redesigned component

Update all 4 test files to match the new device-centric card grid layout:
- Tests now click tab cards directly instead of finding "Open copy" buttons
- Section headings updated for device-centric grouping
- New tests for: device grouping, context menus, segmented filters,
  pane kind icons, multi-pane context menu items
- Explicit cleanup between tests to prevent DOM leakage

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* revert: remove unrelated changes from TabsView redesign PR

Remove ToolStrip simplification (in #251), test rewrites (in #249),
precheck worktree fix (in #252), and .opencode config. This PR now
contains only the TabsView device-centric card grid redesign.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Dan Shapiro <dan@example.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Matt Leaverton <mattleaverton@gmail.com>
@mattleaverton mattleaverton merged commit 1dc6ad9 into main Mar 30, 2026
1 check passed
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