Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Windows: global-project session path depends on server process drive, hides API-created sessions from desktop picker

Open Beginner friendly
#51,258 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
78/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
typescript
Domain
backend, desktop

Research direction

Read sessionPath in packages/opencode/src/session/session.ts, then inspect sessionListQuery() in packages/tui/src/context/sync.tsx and the path matching described in the issue. Verify that global-project sessions created on another Windows drive use the same path spelling and appear in the desktop /sessions picker; add or run the relevant session and TUI checks if available.

Written by the indexing model from the issue text.

Description

Problem

Sessions created through opencode web (or any API client) on Windows are invisible in the desktop TUI /sessions picker when the target directory is on a different drive than the server process's cwd — as long as the directory has no git repo (so the session lands in the global project).

Concrete case (v1.18.32, single shared opencode.db):

  • opencode web runs with cwd on C:.
  • Phone app creates a session with directory=D:\Work\ForAI\dsh-plugin-TTS, sends messages. The session is fully readable via GET /session and GET /session?directory=....
  • Desktop TUI opened in D:\Work\ForAI\dsh-plugin-TTS shows only an older session in its picker, never the new ones.

Root cause

packages/opencode/src/session/session.ts:

  1. sessionPath(worktree, cwd) = relative(resolve(worktree), cwd). For global-project sessions the worktree is /, and on Windows resolve("/") is the server process's drive root. Same directory string therefore stores a different path depending on who created it:
    • web on C: → path = "D:/Work/ForAI/dsh-plugin-TTS" (absolute, cross-drive fallback)
    • TUI on D: → path = "Work/ForAI/dsh-plugin-TTS" (relative)
  2. The TUI picker (packages/tui/src/context/sync.tsx → sessionListQuery()) queries session.list({ path }) with its own drive-relative spelling, and listByProject matches path verbatim (eq / LIKE path/%). The two spellings never match, so each side only ever sees sessions minted on its own drive.

Verified locally: GET /session?path=Work/ForAI/dsh-plugin-TTS&roots=true returns exactly the 1 old session; the same query with the absolute spelling returns exactly the 2 missing ones.

Side note explaining a related asymmetry: a phone app that lists sessions globally (no project_id/path filter) sees desktop-created sessions fine — the filtering only bites in the desktop picker direction. Also note git init does NOT help here: it moves the TUI query to a new project id while existing sessions stay global, hiding even more.

Suggested fix

In sessionPath, when the worktree is the global root ("/") and the session directory is a Windows drive-absolute path, anchor the relative computation at the session directory's own drive root (D:/) instead of the server process drive. That makes the stored path identical no matter which drive the server runs on, and identical to what a same-drive TUI queries. It is a no-op for same-drive sessions and for real (git) worktrees.

I can put up a PR for this if the approach sounds right.

Dominant language
TypeScript
Stars
210k
Forks
27.8k
Avg merge
8h 43m
Merged PRs (30d)
380

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from anomalyco/opencode

All issues in anomalyco/opencode

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.