feat: rich workspace switching, filterable pickers, and grouped repo list - #148
feat: rich workspace switching, filterable pickers, and grouped repo list#148hewigovens wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fbfe125aea
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
fbfe125 to
b99f410
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b99f4101b5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
b99f410 to
30e8921
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 30e892105b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
30e8921 to
3c45357
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3c45357a46
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
3c45357 to
2016567
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2016567db6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
2016567 to
6a2b536
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6a2b536f80
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
6a2b536 to
94fe40a
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 94fe40a726
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
94fe40a to
5f701d1
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5f701d1bb4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
5f701d1 to
4a14f43
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4a14f43528
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
4a14f43 to
5c24409
Compare
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
5c24409 to
c517b68
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c517b683a4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
c517b68 to
16ae6a3
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 16ae6a3d1d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
16ae6a3 to
484de39
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 484de397e8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
484de39 to
54d0cfb
Compare
There was a problem hiding this comment.
💡 Codex Review
When another process forgets this workspace while a mutation or raw-jj task is in flight, this path closes the window without calling prepareForRemoval(). Tasks registered by runRepoTask/awaitRepoTask retain the view model and repository after the view disappears, so they can finish a stale mutation or start its completion refresh against the workspace that was just forgotten; route this close through an awaitable shutdown barrier before releasing the window. agents/code-review.mdL19-L22
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
54d0cfb to
0892a05
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0892a0538c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
0892a05 to
83fbb8b
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 83fbb8bfcd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
f453208 to
9cc23e4
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9cc23e44c7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| Err(CoreError::Internal { | ||
| message: | ||
| "workspace list kept changing while roots were resolving; refresh and try again" | ||
| .to_owned(), |
There was a problem hiding this comment.
Preserve workspace rows when listing never stabilizes
When external jj operations advance the head during all three root-resolution attempts, this new error reaches the DAG-rebase refresh path, where RepoViewModel+Rebase.swift:43 converts it to [] and line 71 publishes that empty list. The workspace picker can therefore remain empty after an otherwise successful rebase because watcher refreshes arriving during the rebase are dropped. Fresh evidence beyond the earlier refresh-path finding is that this separate rebase result path still discards the error; make its workspace result optional and retain the previous rows, as the main refresh path now does. agents/code-review.mdL19-L22
Useful? React with 👍 / 👎.
…list Enrich core workspace listing with per-workspace status read from the in-memory view, cached operation-scoped path resolution, and primary repository discovery without snapshotting sibling working copies. Replace the repository title menu, status-bar workspace picker, and bookmark picker with filterable anchored panels that provide rich workspace rows, grouped bookmark sections, repository switching, and creation actions. Group recent workspace checkouts beneath their primary repository and keep unresolved entries available while lookups complete. Harden workspace forget and deletion by binding actions to the listed operation and root, quiescing every matching window and repository task, atomically quarantining delete targets, and publishing guarded forget operations safely across the SwiftUI and GPUI shells.
9cc23e4 to
85b311c
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 85b311c8a5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| } | ||
| if let Some(op_id) = cache_op_id | ||
| && let Some(path) = self.workspace_paths.read().unwrap().path(op_id, name) | ||
| && Path::new(path).is_dir() |
There was a problem hiding this comment.
Revalidate cached workspace ownership before reuse
When a cached checkout is renamed or removed and an unrelated directory is created at the same path without publishing a jj operation, this is_dir() check accepts the replacement and reports is_path_resolved = true; the workspace picker can then open an unrelated repository or directory as the registered workspace. Fresh evidence beyond the earlier operation-generation cache issue is the filesystem-only replacement covered by workspace_removal_guard_rejects_a_replaced_checkout_directory, which does not change the operation ID. Cache and verify the checkout identity or confirm that its .jj metadata still carries the expected workspace name and repository before reusing the path. agents/code-review.mdL33-L36
Useful? React with 👍 / 👎.
Stacked on #146. Closes the picker/navigator direction discussed in #145.
Core
workspace_listnow reads workspace names and each workspace's committed@from the in-memory view — description, recency, conflicts, and changed-file counts with zero snapshots of sibling checkouts — replacing the N+1jjsubprocess pattern (paths resolved once per name and cached, purged when a workspace disappears).workspace_primary_rootresolves any checkout to its primary repo via the.jj/repomarker; exposed through UniFFI for both shells.SwiftUI shell
repo / workspacetoolbar control replaces the repo title menu and the status-bar workspace picker: a shared PickerPanel (anchored non-activating panel, instant open, filter field, palette-style keyboard nav) with rich workspace rows, repositories, and global actions. The bookmark picker adopts the same component with Tracked/Local Only sections and a New Bookmark button.default+ siblings as rows); pinning a workspace keeps it top-level.Tests
GPUI parity gaps (rich dropdown, grouped list) are tracked in agents/shell-parity.md.