Skip to content

fix(web): remember editor selections before opening folders - #19078

Merged
Yash-Singh1 merged 1 commit into
mainfrom
t3/fix-open-folder-in-zed
Oct 13, 2026
Merged

Yash-Singh1 merged 1 commit into
mainfrom
t3/fix-open-folder-in-zed

Conversation

@Yash-Singh1

Copy link
Copy Markdown
Collaborator

Problem

Choosing an editor in the folder picker immediately opened the folder, leaving no way to set a preference without launching it. On macOS, a zed executable earlier on PATH could also point to OpenZFS instead of the Zed editor.

Change

In the toolbar picker, selecting an editor now saves it as the preferred editor; the menu picker still opens the folder. On macOS, editor lookup checks the Zed app bundle before PATH candidates.

Scope and approval

This is a focused fix for editor selection and launch behavior. No prior issue or discussion was needed.

Verification

Added picker tests for saving the preference in local and remote modes, and a server test for selecting the macOS Zed bundle when another zed is on PATH. Tests were added but not run.

- Select an editor in the picker without immediately opening the workspace
- Prefer the macOS Zed app bundle over a conflicting `zed` on PATH
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 13, 2026
@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 13, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 9003267

Macroscope's review found this PR approvable — This is a narrowly scoped editor-launch bug fix: toolbar selections are remembered without opening a folder, while menu launches remain unchanged, and macOS Zed resolution avoids a PATH name collision. Regression coverage covers both UI modes and the bundle-selection scenario.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 13, 2026

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Team
  • Run ID: c6b8ee27-f5e9-4aa9-bdfb-ac20876a235f
📥 Commits

Reviewing files that changed from the base of the PR and between 98a6246 and 9003267.

📒 Files selected for processing (4)
  • apps/server/src/process/externalLauncher.test.ts
  • apps/web/src/components/chat/OpenInPicker.test.tsx
  • apps/web/src/components/chat/OpenInPicker.tsx
  • packages/shared/src/editor.ts

Included review availability: This review used your included allowance. 8 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 10 reviews per hour.

📝 Walkthrough

The changes update editor selection behavior in the chat picker and change macOS Zed command resolution to check app-bundle candidates before PATH commands.

Changes: Editor picker selection

Layer / File(s) Summary
Editor selection and launch behavior
apps/web/src/components/chat/OpenInPicker.tsx, apps/web/src/components/chat/OpenInPicker.test.tsx
Selecting an editor opens it only in menu presentation. Other presentations save it as the preferred editor. Tests cover local-exec and remote-links launch actions.

macOS Zed command resolution

Layer / File(s) Summary
Zed candidate priority and launch validation
packages/shared/src/editor.ts, apps/server/src/process/externalLauncher.test.ts
On macOS, Zed app-bundle candidates are checked before PATH commands. Tests verify bundle-based launches for directory and file targets when a PATH executable is also present.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant OpenInPicker
  participant PreferredEditorHook
  participant LocalCommand
  participant SSHEditorURL
  User->>OpenInPicker: Select VS Code
  OpenInPicker->>PreferredEditorHook: Save preferred editor
  User->>OpenInPicker: Click open
  alt local-exec mode
    OpenInPicker->>LocalCommand: Run editor command
  else remote-links mode
    OpenInPicker->>SSHEditorURL: Open remote editor URL
  end
Loading

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to 90032

No actionable merge-blocking risk is established. Run the added tests as part of normal validation before merging.

Pre-merge checks · Passed 4
Passed Passed checks (4 passed)
Check name Status Explanation
Title check Passed The title is concise, specific, and accurately describes the primary web behavior change.
Description check Passed The description includes all required sections, explains the problem and fix, provides scope rationale, and lists the verification coverage and test status. It does not include before/after screenshot…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@Yash-Singh1
Yash-Singh1 merged commit a47decf into main Oct 13, 2026
33 checks passed
@Yash-Singh1
Yash-Singh1 deleted the t3/fix-open-folder-in-zed branch October 13, 2026 15:07
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 4.9 KiB 5.0 KiB +23 B (+0.5%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB +23 B (+1.9%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 20.8 KiB 20.9 KiB +41 B (+0.2%) 29.3 KiB ✅
Codex Live turn messages 1 2 +1 (+100.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.2 KiB 21.2 KiB 0 B (0.0%) 29.3 KiB ✅
Claude Live turn messages 2 2 0 (0.0%) 8 ✅

Baseline: 98a6246 · PR result: 9003267 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

vedprakash2302 added a commit to vedprakash2302/Cody that referenced this pull request Oct 13, 2026
- The feature branch starts from upstream main, so this also brings in upstream pingdotgg#19078 and pingdotgg#19077. pingdotgg#19078 changes OpenInPicker's menu clicks; Cody's Tailscale SSH login and hint stay in the remote-open path.
- personal-fixes.json: adds the scheduled task thread options test.
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 13, 2026
## What's Changed
* fix(web): remember editor selections before opening folders by @Yash-Singh1 in pingdotgg/t3code#19078
* fix(ci): retry Cursor webhook HTTP 400s on main by @Yash-Singh1 in pingdotgg/t3code#19077
* fix(web): let context handoff details use the available width by @Yash-Singh1 in pingdotgg/t3code#19098
* fix(server): snoozed threads allow queued automatic wakes by @Yash-Singh1 in pingdotgg/t3code#19099
* fix(web): merge button fits its label and animates width changes by @flamboh in pingdotgg/t3code#18478
* fix(web): Cmd+Enter creates the new project while an option is highlighted by @SunkenInTime in pingdotgg/t3code#18901
* fix(pi): queue turn-start prompts when native work is running by @StiensWout in pingdotgg/t3code#18639
* fix(pi): load T3 tool schemas for completion gateways by @StiensWout in pingdotgg/t3code#18643
* fix(devices): report agent tool startup failures by @PixPMusic in pingdotgg/t3code#18502
* fix(web): settings warn when an environment silently drops a setting by @flamboh in pingdotgg/t3code#18334
* fix(desktop): stop unsolicited Messages code autofill by @StiensWout in pingdotgg/t3code#19118
* feat(chat): show pending context handoff when selecting a model by @maria-rcks in pingdotgg/t3code#18369
* fix(server): collect SQLite planner statistics when the database opens by @otavio in pingdotgg/t3code#18471
* fix(server): failed threads no longer scan every tool item for errors by @realhasanshoaib in pingdotgg/t3code#18628
* fix(web): keep clone folder names readable in the setup project picker by @tachytelicdetonation in pingdotgg/t3code#12474
* fix(composer): allow slash skill search within messages by @Bil0000 in pingdotgg/t3code#19107

## New Contributors
* @tachytelicdetonation made their first contribution in pingdotgg/t3code#12474

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261013.3066...v0.0.46-nightly.20261013.3080

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261013.3080
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 13, 2026
## What's Changed
* fix(web): remember editor selections before opening folders by @Yash-Singh1 in pingdotgg/t3code#19078
* fix(ci): retry Cursor webhook HTTP 400s on main by @Yash-Singh1 in pingdotgg/t3code#19077
* fix(web): let context handoff details use the available width by @Yash-Singh1 in pingdotgg/t3code#19098
* fix(server): snoozed threads allow queued automatic wakes by @Yash-Singh1 in pingdotgg/t3code#19099
* fix(web): merge button fits its label and animates width changes by @flamboh in pingdotgg/t3code#18478
* fix(web): Cmd+Enter creates the new project while an option is highlighted by @SunkenInTime in pingdotgg/t3code#18901
* fix(pi): queue turn-start prompts when native work is running by @StiensWout in pingdotgg/t3code#18639
* fix(pi): load T3 tool schemas for completion gateways by @StiensWout in pingdotgg/t3code#18643
* fix(devices): report agent tool startup failures by @PixPMusic in pingdotgg/t3code#18502
* fix(web): settings warn when an environment silently drops a setting by @flamboh in pingdotgg/t3code#18334
* fix(desktop): stop unsolicited Messages code autofill by @StiensWout in pingdotgg/t3code#19118
* feat(chat): show pending context handoff when selecting a model by @maria-rcks in pingdotgg/t3code#18369
* fix(server): collect SQLite planner statistics when the database opens by @otavio in pingdotgg/t3code#18471
* fix(server): failed threads no longer scan every tool item for errors by @realhasanshoaib in pingdotgg/t3code#18628
* fix(web): keep clone folder names readable in the setup project picker by @tachytelicdetonation in pingdotgg/t3code#12474
* fix(composer): allow slash skill search within messages by @Bil0000 in pingdotgg/t3code#19107

## New Contributors
* @tachytelicdetonation made their first contribution in pingdotgg/t3code#12474

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261013.3066...v0.0.46-nightly.20261013.3080

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261013.3080
aorwall added a commit to aorwall/t3code that referenced this pull request Oct 14, 2026
Merges `pingdotgg/t3code` up to `6002c5c68c` (42 commits, base
`5070a83a32`), using a merge commit. No open merge PR to stack on; this
branches from `main` at `882bb0a638`.

## Resolution

- **`package.json`** (conflict): dropped upstream's `tsc-rs` 0.6.0 bump
(pingdotgg#19187). The fork removed `tsc-rs`, and the `tsc-rs` tripwire holds
that. New path-policy entry: `root-package-json` (`decide`).
- **`pnpm-lock.yaml`** (conflict, `theirs`): took upstream's copy. Its
seven `tsc-rs@0.6.0` entries fail `minimumReleaseAge` before resolution
can prune them, so I stripped them and let `install.mjs` re-derive the
rest. The fork edges (`moatless-api`, `mermaid`) are back, and `verify
--only lockfile` passes.
- 14 other files that both sides touched merged without conflict.
`duplicate-adds` and `resolution-check` are both clean.
`FilePreviewPanel.tsx` (`decide`) took upstream's `threadRef` prop and
kept both fork deltas. The two unlisted files now have `converged`
entries: `terminal-drawer-open-in-editor` and `thread-shell-subtasks`.
In `threadShell.ts`, upstream's `isChildRunLive` and the fork's listing
filter merged together correctly.
- File counts: 136 files landed, against 136 in the upstream range. The
only differences are `package.json` (missing, because its one upstream
change was the dropped bump) and `docs/fork/inventory.json` (extra,
fork-only). The fork delta is 809 files.
- **Script fix:** Moatless replaced its dispatch match arms with a
`MethodTable` (moatless#1138). Because of that,
`unsupported-methods.mjs` found no arms and exited 2. It now reads
`.detached`/`.session`/`.stream` registrations and follows handlers
passed by name. Result: ADD 0, DROP 0, KEEP 2 (`vcs.switchRef`,
`git.preparePullRequestThread`), which matches `gaps.md`.

## Verification

`verify.mjs`: these checks pass: duplicate-adds, tripwires,
resolution-check, unsupported-methods (after the fix), lockfile, fmt,
lint, typecheck, build. `test` fails. Each of the failing files also
failed when run alone, and they are the same five files as in the
2026-10-13 merge, all caused by the sandbox: shared `AgentScope`, server
`ServerBrowserPage` (no Playwright browser), `AcpAdapterV2`,
`OrchestratorReplayFixtures`, and `OpenCodeServerLedger`.

## Usable as-is

- Full-screen visual replies with zoom (pingdotgg#17561). Links inside HTML
renders open the way chat links do (pingdotgg#18897). App shortcuts keep working
after you click into an HTML render (pingdotgg#18898).
- Touch-scrolling in terminal output (pingdotgg#11305). Fixed: answering a
question reset the editor caret (pingdotgg#11337). Links in agent questions are
now clickable (pingdotgg#19197).
- Fixed: "Subagent needs input" stayed after the subagent finished
(pingdotgg#18996). This is client-side and uses `activityRunStatus` with a
fallback to `status`.
- Slash skill search now works mid-message (pingdotgg#19107). Fixed: removing a
project opened a new thread for it (pingdotgg#15864). Settings now warn when an
environment silently drops a setting (pingdotgg#18334).
- Smaller fixes: context handoff details use the available width
(pingdotgg#19098), pace icon alignment (pingdotgg#18580), tool-call collection perf
(pingdotgg#18853), git file paths keep whitespace in the contract schema
(pingdotgg#12465), Android beta links (pingdotgg#18955).
- Pending context-handoff preview when you pick a model (pingdotgg#18369). It is
computed on the client from `server.providers`
(`requiresNewThreadForModelChange`, `continuation.groupKey`). If
Moatless does not report those fields, the preview shows a handoff on
every provider switch.

## Unsupported in Moatless / needs implementation

- Delegated tasks in separate worktrees (pingdotgg#19102): `isolation:
"worktree"` on the orchestrator MCP `delegate_task`, and
`workspaceStrategy` on the child-launch command. Moatless does not
create worktrees (`FEATURES.worktreeSelection`).
- These land behind flags that are already gated: scheduled-task dialog
fix (pingdotgg#18940, `scheduledTasks`), PR merge/auto-merge button sizing
(pingdotgg#18478, pingdotgg#19111, `pullRequestSurface`), remembering editor selections
(pingdotgg#19078, `openInEditor`), device tool startup failures (pingdotgg#18502,
`deviceHub`), npm "update everything" (pingdotgg#18709, `serverUpdateBanner`),
clone folder names in the welcome wizard (pingdotgg#12474), Cmd+Enter
create-project in the palette (pingdotgg#18901).
- No new RPC methods (ADD 0).

## Backend behavior to consider reproducing in Moatless

I added these to the "Runtime fixes upstream made to its own server"
entry in `docs/fork/gaps.md`:
- Worktree isolation for delegated tasks (pingdotgg#19102).
- Snoozed threads still take queued automatic wakes (pingdotgg#19099).
- Indexed failed-thread error lookup (pingdotgg#18628).
- SQLite: no fsync on every commit, and planner stats collected on open
(pingdotgg#19205, pingdotgg#18471).
- Distinct CI checks with overlapping names (pingdotgg#19162).
- Bitbucket short-hash heads in review guides (pingdotgg#18900).
- Webhook template backtracking (pingdotgg#19160).
- OpenCode timeout formatting (pingdotgg#12469).
- Pi tool schemas and turn-start queueing (pingdotgg#18643, pingdotgg#18639).
- Usage hubs without a host, and Antigravity accounts deduplicated
(pingdotgg#11368, pingdotgg#19207).
- Haiku 5.5 as the default for background text generation (pingdotgg#18781).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---
Moatless task:
https://moatless.soaplabstest.com/tasks/db18f6dc-70c1-4d89-ada7-cd4b4f19a247
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews size:S 10-29 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants