feat: add "Open in IDE" integration for source files#260
Merged
Conversation
Source paths shown across the dashboard — the failing "Failed here" call stack, a run's test-case list and tree, the test-case and cluster pages, flaky lists, and the AI suggested-fix — are now clickable to open the file (and line) in the user's local editor. - New shared OpenInIdeLink wraps a path (or file:line:col string) with a hover chooser: VS Code, JetBrains via URL, JetBrains via the local server / IDE Remote Control plugin, plus an Auto action and copy actions. - Auto probes the detectable JetBrains local server first, then falls back to a single fire-and-forget vscode:// or jetbrains:// launch. - Preferences (method, the workspace root that maps a repo-relative path to an absolute one, VS Code flavor, JetBrains product/port) are a per-browser localStorage setting in useOpenInIde, edited via OpenInIdeSettingsModal (opened from the chooser and the user menu) — deliberately not the DB/env settings registry, since the source lives on the user's machine. - Pure URL/path builders live in app/utils/ide-links.ts (unit-tested); the file:line:col parser moves to #shared/parse-location, shared by server, demo and client. - Docs: new docs/ide-integration.md and an AGENTS.md "Clickable source paths" rule. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwFmhTdStCoo39HDDeZGHm
Contributor
Coverage Report for Reporter (./reporter)
File CoverageNo changed files found. |
Contributor
Coverage Report for Application (./application)
File Coverage
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Adds a comprehensive "Open in IDE" feature that lets users click any source path in the dashboard to jump directly to that file in their local editor. This bridges the gap between the web dashboard and local development workflows.
The feature supports three methods:
vscode://URL schemejetbrains://URL scheme (requires JetBrains Toolbox)An "Auto" mode probes the JetBrains local server first (the only detectable method) and falls back to a URL scheme launch.
All preferences (method, workspace root, IDE product/port) are stored per-browser in localStorage — never sent to the server — since the source mapping is inherently per-device. Users configure these once in a settings modal accessible from any source path or the user menu.
Implementation details
useOpenInIdecomposable: Manages preferences, resolves workspace roots (with per-project overrides for monorepos), and orchestrates the launch logic. Handles toast notifications for success/failure feedback.OpenInIdeLinkcomponent: A thin, reusable trigger that renders a source path with hover-revealed IDE controls (icon for default method, caret for chooser). Safe to drop into any component showing a file path.OpenInIdeSettingsModalcomponent: Global settings UI for configuring method, workspace root, VS Code flavor, JetBrains product/port, and per-project overrides.ide-linksutility: Pure URL builders for the three schemes, plus workspace-path joining. Kept free of Vue/DOM for unit testability.parseLocation: Moved from server-only toshared/so the browser, server, and demo router all parsefile:line:colstrings identically.How was it tested?
ide-links.test.ts)parseLocationtests updated to import from shared locationChecklist
feat(...))docs/ide-integration.md) with setup instructions and method comparisonhttps://claude.ai/code/session_01LwFmhTdStCoo39HDDeZGHm