Repository navigation
Conversation
This was referenced Aug 11, 2026
BB-84C
force-pushed
the
fix/tui-event-directory-guards
branch
from
August 11, 2026 20:35
42e241c to
9dfcefc
Compare
…ctory The TUI subscribes to the control-plane global event stream (/global/event), which broadcasts events from every workspace attached to a shared server. The vcs.branch.updated handler only checked the workspace (always matching when workspaces are disabled), so the branch of any workspace's repository overwrote the statusline branch of every attached TUI. session.updated likewise upserted foreign sessions into the local session list. Guard both handlers on the event's directory against the TUI's own instance directory, which the event envelope already carries.
Contributor
|
Automated PR Cleanup Thank you for contributing to opencode. Due to the high volume of PRs from users and AI agents, we periodically close older PRs using automated criteria so maintainers can focus review time on the most active and community-supported contributions. This PR was closed because it matched the following cleanup criteria:
PRs created within the last month are not affected by this cleanup. If you believe this PR was closed incorrectly, or if you are still actively working on it, please leave a comment explaining why it should be reopened. A maintainer can review and reopen it if appropriate. Thanks again for taking the time to contribute. |
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.
Issue for this PR
Closes #39181
Type of change
What does this PR do?
The TUI subscribes to the control-plane global event stream (
/global/event), which broadcasts events from every workspace attached to a sharedopencode serve. Two handlers inpackages/tui/src/context/sync.tsxdid not use the event envelope'sdirectoryfield:vcs.branch.updatedonly checkedworkspace === project.workspace.current(). With experimental workspaces disabled both sides areundefined, so the guard always matched and the branch of any attached workspace's repository overwrote the statusline branch of every attached TUI. The branch does not even need to be switched inside a TUI — switching it externally (GitHub Desktop, shell) produces the same cross-workspace display contamination, since the fs watcher publishes through the same global stream (repro added in TUI statusline shows git branches from other workspaces when multiple TUIs attach to one shared server #41839).session.updatedupserted every received session into the local session list, so sessions belonging to other directories entered the store and could be picked/continued, routing subsequent requests by that session's directory.Both handlers now guard on the event's directory against the TUI's own instance directory (
project.instance.directory()), which the event envelope already carries for exactly this purpose. Thepackages/appevent consumer (server-sync.tsx) already routes events to per-directory stores by envelope directory, so no change is needed there.#39181 additionally documents a related fan-out for plugin-driven events (
tui.session.select,tui.toast.show,tui.command.execute,tui.prompt.append); that is not addressed here and remains tracked there.How did you verify your code works?
vcs.branch.updatedtest to cover the foreign-directory case (foreign directory + active workspace is now rejected; own directory + active workspace is applied).session.updatedevents from other directories do not enter the local session list, while events for the local directory do.bun test test/cli/cmd/tui/— 24 pass, 0 fail;tsgo --noEmitclean forpackages/tui.Checklist