fix(opencode): filter session list by resolved instance directory#34842
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes a Windows-specific “sessions disappear from the sidebar” issue by ensuring session-list endpoints filter using the same canonical, middleware-resolved instance directory that session creation uses, so equivalent directory hints (e.g. trailing separators, / resolving to a drive root) consistently match stored rows without any DB/schema changes.
Changes:
- Update
GET /sessionto filter byInstanceState.directory(canonical instance directory) rather than the rawdirectoryquery string. - Update
GET /experimental/sessionto apply the same canonical-directory filtering behavior. - Add an HTTP-level regression test covering “create with one spelling, list with equivalent spelling” across both endpoints.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts | Session list filtering now uses the resolved instance directory to avoid raw-hint mismatches. |
| packages/opencode/src/server/routes/instance/httpapi/handlers/experimental.ts | Global experimental session listing now filters by the resolved instance directory when a directory hint is provided. |
| packages/opencode/test/server/httpapi-session.test.ts | Adds an end-to-end test that creates a session with a trailing-separator hint and verifies it is listable via both list endpoints using the same hint. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
3 tasks
6 tasks
LuisAlbertoMK
pushed a commit
to LuisAlbertoMK/opencode
that referenced
this pull request
Jul 3, 2026
LuisAlbertoMK
added a commit
to LuisAlbertoMK/opencode
that referenced
this pull request
Jul 3, 2026
- Cherry-pick 5 upstream commits: Cerebras reasoning (anomalyco#34826), session list filter (anomalyco#34842), copilot endpoints (anomalyco#34958), TUI debug dialog (anomalyco#35004), stats fix - Revert 2 incompatible commits: observability (anomalyco#35171) imports nonexistent modules; core layer rewrite (anomalyco#35175) breaks buildLayer callers - TUI tests 7/7 PASS, benchmark 616.4ms (-36.4% from Cycle 9) - Cycle 10 report + benchmark data + CYCLE.md update
Wiktor102
pushed a commit
to Wiktor102/opencode
that referenced
this pull request
Jul 5, 2026
github-actions Bot
added a commit
to wallentx/opencode-termux
that referenced
this pull request
Jul 6, 2026
* ci: Add Android build and publish workflow with APK artifact upload Signed-off-by: wallentx <william.allentx@gmail.com> * ci: Allow publish workflow to run with android_only input Signed-off-by: wallentx <william.allentx@gmail.com> * ci: Use github.token instead of committer output in publish workflow Signed-off-by: wallentx <william.allentx@gmail.com> * feat: Add aarch64-linux-android target to sidecar binaries Signed-off-by: wallentx <william.allentx@gmail.com> * ci: Simplify publish workflow and fix Android build conditions Signed-off-by: wallentx <william.allentx@gmail.com> * feat: Refactor app initialization and add WSL path conversion Signed-off-by: wallentx <william.allentx@gmail.com> * ci: Fix Android-only workflow condition and update dependencies Signed-off-by: wallentx <william.allentx@gmail.com> * sync release versions for v1.17.13 * chore: bump gitlab-ai-provider to 6.10.0 (anomalyco#34756) * chore: update nix node_modules hashes * feat(stats): redesign lab hero * feat(stats): add lab overview * feat(stats): redesign lab usage * feat(data): another redesigned lab section * feat(stats): use catalog descriptions * chore: generate * fix(stats): refine lab page tooltips * fix(stats): include locale header in vary (anomalyco#34789) * zen: new inference * fix(desktop): keep window tabs across app close (anomalyco#34807) * fix(app): stabilize session timeline layout continuity (anomalyco#34533) * feat(desktop): refine session tab preview popover (anomalyco#34792) * fix(ui): raise v2 tooltip layer (anomalyco#34455) Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> * chore: update nix node_modules hashes * fix(opencode): update Cerebras SDK reasoning replay (anomalyco#34826) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> * chore: update nix node_modules hashes * fix(app): resolve target session lineage outside router transition (anomalyco#34838) * chore: generate * fix(opencode): filter session list by resolved instance directory (anomalyco#34842) * fix(app): only allow \(...\) syntax for inline latex (anomalyco#34850) * test(opencode): cover Windows session list directory spellings (anomalyco#34857) * fix(app): scope session tab indicators to the tab's server (anomalyco#34861) * chore: generate * fix(app): clear original prompt after retarget (anomalyco#34863) * fix(app): seed session status before warming session info (anomalyco#34864) * feat(app): v2 review panel overhaul (anomalyco#31882) Co-authored-by: LukeParkerDev <10430890+Hona@users.noreply.github.com> * fix(app): keep terminal mounted when switching session tabs in a workspace (anomalyco#34852) Co-authored-by: Brendan Allan <git@brendonovich.dev> * fix(ui): resolve toast icon inside the toast component (anomalyco#34874) * fix(copilot): honor advertised model endpoints (anomalyco#34958) * fix(stats): polish lab pages * feat(stats): redesign model hero * chore: generate * feat(tui): add debug info dialog with copy to clipboard (anomalyco#35004) * zen: new inference * zen: new inference * feat(app): navigate tabs on mousedown in new layout (anomalyco#35042) * zen: new inference * zen: new inference * fix(app): keep v2 review pane mounted across session tab switches (anomalyco#35074) * feat: experimental codemode (anomalyco#34677) * chore: generate * fix(ci): setup Node 24 before bun install for node-gyp (anomalyco#35076) * revert: back out experimental codemode (anomalyco#35077) * feat(codemode): add confined execution package (anomalyco#35079) * chore: generate * chore: update nix node_modules hashes * chore: remove root node-gyp pin after Node 24 setup (anomalyco#35092) * feat(desktop): add recently closed projects to home (anomalyco#34926) * feat(app): align subagent UI with v2 (anomalyco#34931) Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> * chore: generate * feat(desktop): papercut fixes (anomalyco#34939) * refactor(opencode): expose MCP tools in native shape from the service (anomalyco#35103) * feat(app): improvements to model search (anomalyco#34954) * chore: generate * feat(opencode): add code-mode MCP adapter (anomalyco#35085) * chore: generate * chore: update nix node_modules hashes * feat(app): dropdown search fix (anomalyco#34961) Co-authored-by: Brendan Allan <git@brendonovich.dev> * fix(opencode): provide Observability beneath all route service graphs (anomalyco#35171) * chore: upgrade turbo (anomalyco#35173) * feat(stats): add model momentum section * chore: generate * fix(core): rewrite replacements while hoisting layers (anomalyco#35175) * fix(stats): link market share labs * chore: artifacts * chore: generate * feat(tui): render code-mode execute tool with child calls (anomalyco#35113) * refactor(opencode): fail the execute tool on program failure (anomalyco#35180) * fix(tui): align execute child calls with task indentation (anomalyco#35190) * refactor(core): move path resolve into fs service (anomalyco#35202) * feat(opencode): gate execute tool behind code mode flag (anomalyco#35185) * chore: generate * cleanup: tweak compaction prompt (anomalyco#35220) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> * fix(app): restore unfocused composer typing (anomalyco#35249) * fix(app): delay initial tab preview (anomalyco#35266) Co-authored-by: Jay <53023+jayair@users.noreply.github.com> * fix(desktop): stabilize esm shim injection (anomalyco#35270) * fix(app): match new session panel corners (anomalyco#35257) * tui: preserve spinner registration (anomalyco#35292) * feat: Add aarch64-linux-android target to sidecar binaries Signed-off-by: wallentx <william.allentx@gmail.com> * chore(ci): Improve workflow portability and add Android build support Signed-off-by: wallentx <william.allentx@gmail.com> * feat(ci): Add Android artifact build workflow and guidance Signed-off-by: wallentx <william.allentx@gmail.com> * fix(opencode): use NDK sysroot for Android artifact build * fix(opencode): pass Android NDK libc paths to Zig * fix(opencode): patch OpenTUI Android system libs * fix(opencode): rely on NDK libc config for Android * fix(opencode): resolve Android OpenTUI loader relatively * chore(ci): add Android Bun compile smoke target * fix(opencode): relocate Android Bun payload pointer * chore(ci): build Android Bun runtime from source * fix(ci): install LLVM for Android Bun source build * fix(ci): bootstrap LLVM 21 for Android Bun build * fix(ci): keep Bun Android build inside source tree * fix(ci): link Android NDK runtimes for Bun build * fix(ci): use Android strip for Bun runtime build * chore(termux): add release mirror workflows * chore(termux): align app token variables * chore(termux): use app client id input * chore(termux): fall back to github token * chore(termux): prepare v1.17.13 --------- Signed-off-by: wallentx <william.allentx@gmail.com> Co-authored-by: wallentx <william.allentx@gmail.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: James Long <longster@gmail.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.
What does this PR do?
Fixes the "sessions disappear from the sidebar" bug on Windows desktop (#34723) by making the session list filter use the same canonical directory that session create uses — with no database or schema changes.
Root cause (reproduced live against latest
devwith the desktop's exact wire values):x-opencode-directoryhint viaFSUtil.resolvewhen the instance boots (instance-store.ts), so a hint like/or a path with a trailing separator is stored in canonical form (e.g./resolves toC:\on Windows and the row storesC:/).ctx.query.directorystring into the exact-match SQL filter. Any hint whose spelling differs from its canonical form (/,C:, trailing separators, symlinked tmp dirs) creates sessions that the same hint can never list back.The desktop hits this when a global-project session is opened from Home:
project.worktree ?? session.directorypersists the global worktree sentinel"/"as a workspace. That workspace then listsdirectory=/(always[]) while creating sessions that resolve to the drive root — so every previous session "disappears" when a new one is created, and restarting doesn't help. This is a directory value mismatch; it is unrelated to the\vs/storage encoding fixed in #29666 (which is working correctly).Fix: the workspace-routing middleware already resolves the requested directory to select the instance. The list handlers now filter by that resolved instance directory instead of re-reading the raw query string, so
list(hint)always findscreate(hint)by construction:SessionHttpApi.list(GET /session)ExperimentalHttpApi.session(GET /experimental/session)Existing databases self-heal: previously invisible rows become listable immediately because only the comparison value changes, not the data.
Type of change
How did you verify your code works?
lists sessions created through an equivalent directory hint) exercising the full middleware + handler chain: create via a hint whose canonical form differs (trailing separator), then list with the same hint on both endpoints. Fails ondevwithReceived: [], passes with this change.POST /sessionwithx-opencode-directory: %2Ffollowed byGET /session?directory=%2F&roots=truereturned[]before this change and returns the created sessions after it;directory=C%3A%5Canddirectory=C%3A%2Fcontinue to work.bun test test/server/session-list.test.ts test/server/global-session-list.test.ts test/server/workspace-routing.test.ts test/server/httpapi-instance-context.test.ts test/server/httpapi-query-schema-drift.test.ts— 50/50 pass.bun typecheckinpackages/opencode— clean.Checklist
Issue for this PR
Fixes #34723