Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
4df948f
Add Sessions panel to right sidebar
lawrencecchen Apr 16, 2026
2ac2036
Use brand icons, draggable section reorder, header tweak
lawrencecchen Apr 16, 2026
f608583
Reorder gaps + cwd/branch/PR chips on session rows
lawrencecchen Apr 16, 2026
80c9be2
Group sessions by folder or agent + double-click resume
lawrencecchen Apr 16, 2026
f843cb1
Drop single-click open() on session rows; double-click resumes only
lawrencecchen Apr 16, 2026
450edec
Minimal session rows + smart placement + Codex title fix
lawrencecchen Apr 16, 2026
a414ff0
Inject per-session flags into resume command
lawrencecchen Apr 16, 2026
a7eaaa9
Per-section collapse + use live workspace cwd for resume placement
lawrencecchen Apr 16, 2026
bcc1a63
Show-more popover with search + draggable session rows
lawrencecchen Apr 16, 2026
c36c7f4
Wire session drag into bonsplit drop overlays
lawrencecchen Apr 16, 2026
e209aba
Use mirror Codable structs for session drag payload + log
lawrencecchen Apr 16, 2026
26b10f9
Mirror session drag payload onto the system .drag pasteboard
lawrencecchen Apr 16, 2026
ab6ae04
Defer to bonsplit on terminal hover + use Codex thread_name as title
lawrencecchen Apr 16, 2026
46b9691
Drop terminal-text fallback from session drag + tighten section padding
lawrencecchen Apr 16, 2026
4dd4843
Host Show-more popover in a real NSPopover so search field accepts focus
lawrencecchen Apr 16, 2026
906eada
Don't steal first responder from a text editor
lawrencecchen Apr 16, 2026
abbab88
Stop key-routing repair from stealing from popover text fields
lawrencecchen Apr 17, 2026
82b58b5
Async + cached search filter so typing isn't laggy
lawrencecchen Apr 17, 2026
071e178
Add bottom padding to Show-more popover scroll content
lawrencecchen Apr 17, 2026
7e47391
Make session rows equatable to skip body re-eval during scroll
lawrencecchen Apr 17, 2026
3808749
Show agent brand icon on each session row
lawrencecchen Apr 17, 2026
ce3b3b7
Bump per-agent session cap from 60 to 200
lawrencecchen Apr 17, 2026
064e1ee
Drop in-memory cap to 30; deep-search disk + DB on popover query
lawrencecchen Apr 17, 2026
fb8ea17
Paginate Show-more popover with load-more on scroll
lawrencecchen Apr 17, 2026
8f6a73e
Use rg to pre-filter session search when available + drop count badge
lawrencecchen Apr 17, 2026
5963881
Fix rg pipe-buffer deadlock: drain stdout before waitUntilExit
lawrencecchen Apr 17, 2026
874d494
Make rg search async + cancellable; drop Task.detached hop
lawrencecchen Apr 17, 2026
f42a674
DRY scan + search into one path; ensure empty-needle fast path
lawrencecchen Apr 17, 2026
3f97645
Show-more popover: instant cached page on open, no spinner flash
lawrencecchen Apr 17, 2026
0841e6a
Fix rg async deadlock: terminationHandler was registered after exit
lawrencecchen Apr 17, 2026
792ec58
Skip Codex envelope messages + reset popover state on each open
lawrencecchen Apr 17, 2026
a40fb2f
Stop infinite popover refresh + ship dark Codex icon variant
lawrencecchen Apr 17, 2026
d36dd69
Claude/Codex cwd-filter fast paths + per-agent timing logs
lawrencecchen Apr 17, 2026
c10e231
Use Codex's own state_5.sqlite for session metadata
lawrencecchen Apr 17, 2026
e4187cc
Parallelize Claude per-file reads + LRU cache + timing breakdown
lawrencecchen Apr 17, 2026
7efcb4e
SearchOutcome carries errors; popover shows them above the list
lawrencecchen Apr 17, 2026
0e23e85
Merge remote-tracking branch 'origin/main' into feat-session-index
lawrencecchen Apr 17, 2026
7c4c103
Virtualize popover list with NSTableView-backed List
lawrencecchen Apr 17, 2026
6ce48a4
Address review feedback batch
lawrencecchen Apr 17, 2026
e055b59
Revert popover to LazyVStack; fix unit-test mock signatures
lawrencecchen Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions Assets.xcassets/AgentIcons/Claude.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"images" : [
{ "idiom" : "universal", "filename" : "Claude.png", "scale" : "1x" },
{ "idiom" : "universal", "filename" : "Claude@2x.png", "scale" : "2x" },
{ "idiom" : "universal", "filename" : "Claude@3x.png", "scale" : "3x" }
],
"info" : { "author" : "xcode", "version" : 1 }
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets.xcassets/AgentIcons/Codex.imageset/Codex.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions Assets.xcassets/AgentIcons/Codex.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"images" : [
{ "idiom" : "universal", "filename" : "Codex.png", "scale" : "1x" },
{ "idiom" : "universal", "filename" : "Codex@2x.png", "scale" : "2x" },
{ "idiom" : "universal", "filename" : "Codex@3x.png", "scale" : "3x" },
{ "idiom" : "universal", "filename" : "Codex-dark.png", "scale" : "1x", "appearances" : [{"appearance":"luminosity","value":"dark"}] },
{ "idiom" : "universal", "filename" : "Codex-dark@2x.png", "scale" : "2x", "appearances" : [{"appearance":"luminosity","value":"dark"}] },
{ "idiom" : "universal", "filename" : "Codex-dark@3x.png", "scale" : "3x", "appearances" : [{"appearance":"luminosity","value":"dark"}] }
],
"info" : { "author" : "xcode", "version" : 1 }
}
1 change: 1 addition & 0 deletions Assets.xcassets/AgentIcons/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ "info": { "author": "xcode", "version": 1 }, "properties": { "provides-namespace": true } }
8 changes: 8 additions & 0 deletions Assets.xcassets/AgentIcons/OpenCode.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"images" : [
{ "idiom" : "universal", "filename" : "OpenCode.png", "scale" : "1x" },
{ "idiom" : "universal", "filename" : "OpenCode@2x.png", "scale" : "2x" },
{ "idiom" : "universal", "filename" : "OpenCode@3x.png", "scale" : "3x" }
],
"info" : { "author" : "xcode", "version" : 1 }
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions GhosttyTabs.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
/* Begin PBXBuildFile section */
FE001101 /* FileExplorerStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE001001 /* FileExplorerStore.swift */; };
FE001102 /* FileExplorerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE001002 /* FileExplorerView.swift */; };
FE003101 /* SessionIndexStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE003001 /* SessionIndexStore.swift */; };
FE003102 /* SessionIndexView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE003002 /* SessionIndexView.swift */; };
FE003103 /* RightSidebarPanelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE003003 /* RightSidebarPanelView.swift */; };
FE002101 /* FileExplorerRootResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE002001 /* FileExplorerRootResolverTests.swift */; };
FE002102 /* FileExplorerStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE002002 /* FileExplorerStoreTests.swift */; };
A5001001 /* cmuxApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5001011 /* cmuxApp.swift */; };
Expand Down Expand Up @@ -213,6 +216,9 @@
/* Begin PBXFileReference section */
FE001001 /* FileExplorerStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileExplorerStore.swift; sourceTree = "<group>"; };
FE001002 /* FileExplorerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileExplorerView.swift; sourceTree = "<group>"; };
FE003001 /* SessionIndexStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionIndexStore.swift; sourceTree = "<group>"; };
FE003002 /* SessionIndexView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionIndexView.swift; sourceTree = "<group>"; };
FE003003 /* RightSidebarPanelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RightSidebarPanelView.swift; sourceTree = "<group>"; };
FE002001 /* FileExplorerRootResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileExplorerRootResolverTests.swift; sourceTree = "<group>"; };
FE002002 /* FileExplorerStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileExplorerStoreTests.swift; sourceTree = "<group>"; };
A5001000 /* cmux.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = cmux.app; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -533,6 +539,9 @@
A5001655 /* CmuxDirectoryTrust.swift */,
FE001001 /* FileExplorerStore.swift */,
FE001002 /* FileExplorerView.swift */,
FE003001 /* SessionIndexStore.swift */,
FE003002 /* SessionIndexView.swift */,
FE003003 /* RightSidebarPanelView.swift */,
);
path = Sources;
sourceTree = "<group>";
Expand Down Expand Up @@ -864,6 +873,9 @@
A5001654 /* CmuxDirectoryTrust.swift in Sources */,
FE001101 /* FileExplorerStore.swift in Sources */,
FE001102 /* FileExplorerView.swift in Sources */,
FE003101 /* SessionIndexStore.swift in Sources */,
FE003102 /* SessionIndexView.swift in Sources */,
FE003103 /* RightSidebarPanelView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
Loading
Loading