Skip to content

Commit 0d7e061

Browse files
authored
fix(poolside): correct Linux default directory to .local/state/poolside (#1258)
Poolside stores trajectory files under the XDG state directory (~/.local/state/poolside/trajectories/), not the data directory. The merged PR #1241 used the wrong path, preventing session discovery. Co-authored-by: Stephen Cross <scross01@users.noreply.github.com>
1 parent 9145afd commit 0d7e061

7 files changed

Lines changed: 14 additions & 14 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ thread JSON files.
345345
| OpenHands CLI | `~/.openhands/conversations/` |
346346
| OhMyPi | `~/.omp/agent/sessions/` |
347347
| Pi | `~/.pi/agent/sessions/` |
348-
| Poolside | `~/Library/Application Support/poolside/trajectories/` (macOS), `~/.local/share/poolside/trajectories/` (Linux), `%APPDATA%\\poolside\\trajectories\\` (Windows) |
348+
| Poolside | `~/Library/Application Support/poolside/trajectories/` (macOS), `~/.local/state/poolside/trajectories/` (Linux), `%APPDATA%\\poolside\\trajectories\\` (Windows) |
349349
| Piebald | `~/.local/share/piebald/` |
350350
| Posit Assistant | `~/.posit/assistant/workspaces/` |
351351
| Positron Assistant | `~/Library/Application Support/Positron/User/` (macOS) |

docs/configuration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ can still be parsed.
264264
| OpenCode | `~/.local/share/opencode/` | SQLite DB or `storage/` JSON files |
265265
| OpenHands CLI | `~/.openhands/conversations/` | Per-conversation `base_state.json` + `events/*.json` |
266266
| Pi | `~/.pi/agent/sessions/` | JSONL per session |
267-
| Poolside | `~/Library/Application Support/poolside/trajectories/` (macOS), `~/.local/share/poolside/trajectories/` (Linux), `%APPDATA%\\poolside\\trajectories\\` (Windows) | NDJSON trajectory files |
267+
| Poolside | `~/Library/Application Support/poolside/trajectories/` (macOS), `~/.local/state/poolside/trajectories/` (Linux), `%APPDATA%\\poolside\\trajectories\\` (Windows) | NDJSON trajectory files |
268268
| Piebald | `~/.local/share/piebald/` | SQLite database (`app.db`) |
269269
| Posit Assistant | `~/.posit/assistant/workspaces/` | Per-conversation `conversation.json` tree plus `lm-messages.jsonl` transcript |
270270
| Positron Assistant | (platform-specific, see below) | JSON / JSONL per session |

internal/parser/poolside_provider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func newPoolsideProviderFactory(def AgentDef) ProviderFactory {
4545

4646
// poolsideTrajectoriesDir resolves the trajectories directory from a
4747
// provider root. The root may be either the application-data directory
48-
// (e.g. ~/.local/share/poolside) or the trajectories/ subdirectory
48+
// (e.g. ~/.local/state/poolside) or the trajectories/ subdirectory
4949
// itself (e.g. when passed by remote sync). When the root already
5050
// ends with a "trajectories" path component, it is returned as-is;
5151
// otherwise <root>/trajectories is appended.

internal/parser/poolside_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -793,13 +793,13 @@ func TestPoolsideTrajectoriesDir(t *testing.T) {
793793
}{
794794
{
795795
name: "application-data root appends trajectories",
796-
root: "/home/user/.local/share/poolside",
797-
expected: "/home/user/.local/share/poolside/trajectories",
796+
root: "/home/user/.local/state/poolside",
797+
expected: "/home/user/.local/state/poolside/trajectories",
798798
},
799799
{
800800
name: "trajectories directory used as-is",
801-
root: "/home/user/.local/share/poolside/trajectories",
802-
expected: "/home/user/.local/share/poolside/trajectories",
801+
root: "/home/user/.local/state/poolside/trajectories",
802+
expected: "/home/user/.local/state/poolside/trajectories",
803803
},
804804
{
805805
name: "relative trajectories used as-is",
@@ -808,8 +808,8 @@ func TestPoolsideTrajectoriesDir(t *testing.T) {
808808
},
809809
{
810810
name: "trajectories with trailing slash",
811-
root: "/home/user/.local/share/poolside/trajectories/",
812-
expected: "/home/user/.local/share/poolside/trajectories",
811+
root: "/home/user/.local/state/poolside/trajectories/",
812+
expected: "/home/user/.local/state/poolside/trajectories",
813813
},
814814
}
815815
for _, tt := range tests {

internal/parser/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -807,7 +807,7 @@ var Registry = []AgentDef{
807807
// macOS
808808
"Library/Application Support/poolside",
809809
// Linux
810-
".local/share/poolside",
810+
".local/state/poolside",
811811
// Windows
812812
"AppData/Roaming/poolside",
813813
},

internal/remotesync/resolve_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ func TestResolveTargetsMatchesSSHResolverForRepresentativeHome(t *testing.T) {
341341
windsurfWorkspaceDir := filepath.Join(windsurfWorkspaceRoot, "workspace-a")
342342
windsurfStateDB := filepath.Join(windsurfWorkspaceDir, parser.WindsurfStateDBName)
343343
windsurfWorkspaceJSON := filepath.Join(windsurfWorkspaceDir, "workspace.json")
344-
poolsideRoot := filepath.Join(home, ".local", "share", "poolside")
344+
poolsideRoot := filepath.Join(home, ".local", "state", "poolside")
345345
poolsideTrajectories := filepath.Join(poolsideRoot, "trajectories")
346346
require.NoError(t, os.MkdirAll(claudeDir, 0o755))
347347
require.NoError(t, os.MkdirAll(codexDir, 0o755))

internal/ssh/resolve_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ func TestResolveScriptKiloLegacyRejectsSymlinkedTaskDir(t *testing.T) {
713713
// remotesync.resolvePoolsideTarget.
714714
func TestResolveScriptPoolsideTargetsOnlyTrajectories(t *testing.T) {
715715
home := t.TempDir()
716-
poolsideRoot := filepath.Join(home, ".local", "share", "poolside")
716+
poolsideRoot := filepath.Join(home, ".local", "state", "poolside")
717717
trajectoriesDir := filepath.Join(poolsideRoot, "trajectories")
718718
settingsDir := filepath.Join(poolsideRoot, "settings")
719719
require.NoError(t, os.MkdirAll(trajectoriesDir, 0o755))
@@ -729,7 +729,7 @@ func TestResolveScriptPoolsideTargetsOnlyTrajectories(t *testing.T) {
729729

730730
records := resolveOutputRecords(string(out))
731731
trajectoriesSuffix := filepath.ToSlash(filepath.Join(
732-
".local", "share", "poolside", "trajectories"))
732+
".local", "state", "poolside", "trajectories"))
733733
assert.True(t, hasRecordWithPathSuffix(records,
734734
string(parser.AgentPoolside), trajectoriesSuffix),
735735
"only the trajectories/ subdirectory must be emitted as the target")
@@ -746,7 +746,7 @@ func TestResolveScriptPoolsideTargetsOnlyTrajectories(t *testing.T) {
746746
// not exist.
747747
func TestResolveScriptPoolsideSkipsRootWithoutTrajectories(t *testing.T) {
748748
home := t.TempDir()
749-
poolsideRoot := filepath.Join(home, ".local", "share", "poolside")
749+
poolsideRoot := filepath.Join(home, ".local", "state", "poolside")
750750
require.NoError(t, os.MkdirAll(poolsideRoot, 0o755))
751751

752752
out := runResolveScriptForTest(t, "HOME="+home)

0 commit comments

Comments
 (0)