Uh oh!
There was an error while loading. Please reload this page.
fix(desktop): "load more" button behavior in desktop sidebar - #8430
Conversation
Hey! Your PR title Please update it to start with one of:
Where See CONTRIBUTING.md for details. |
The following comment was made by an LLM, it may be inaccurate: Based on the search results, I found one potentially related PR: Related PR:
The other results (PR #4963 about pagination in modified files sidebar and other PRs) are less directly related to the specific "Load more" button and session filtering issue. |
Thanks for your contribution! This PR doesn't have a linked issue. All PRs must reference an existing issue. Please:
See CONTRIBUTING.md for details. |
Uh oh!
There was an error while loading. Please reload this page.
* sync * sync * Update Nix flake.lock and x86_64-linux hash * Update aarch64-darwin hash * fix(TUI): make tui work when OPENCODE_SERVER_PASSWORD is set (anomalyco#8179) * chore: generate * wip: black * docs: Update plan mode restrictions (anomalyco#8290) * docs: add 302ai provider (anomalyco#8142) * fix: add missing metadata() and ask() defintions to ToolContext type (anomalyco#8269) * fix(tui): track all timeouts in Footer to prevent memory leak (anomalyco#8255) * fix: deduplicate file refs in sent prompts (anomalyco#8303) * chore: generate * wip: black * wip: black * release: v1.1.17 * add fullscreen view to permission prompt * chore: generate * fix(desktop): correct health check endpoint URL to /global/health (anomalyco#8231) * feat(desktop): Adding Provider Icons (anomalyco#8215) * chore: generate * console: reduce desktop download cache ttl to 5 minutes * fix(github): add persist-credentials: false to workflow templates (anomalyco#8202) * release: v1.1.18 * fix(desktop): Revert provider icon on select model dialog (anomalyco#8245) * feat: add Undertale and Deltarune built-in themes (anomalyco#8240) * chore: generate * feat(desktop): Ask Question Tool Support (anomalyco#8232) * fix(mcp): close existing client before reassignment to prevent leaks (anomalyco#8253) * fix(state): delete key from recordsByKey on instance disposal (anomalyco#8252) * docs: document ~/.claude/CLAUDE.md compatibility behavior (anomalyco#8268) * feat: Add GitLab Duo Agentic Chat Provider Support (anomalyco#7333) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> * fix(cli): mcp auth duplicate radio button icon (anomalyco#8273) * Update Nix flake.lock and x86_64-linux hash * Update aarch64-darwin hash * tweak: ensure external dir and bash tool invocations render workdir details * tweak: external dir permission rendering in tui * add family to gpt 5.2 codex in codex plugin * fix(prompt-input): handle Shift+Enter before IME check to prevent stuck state (anomalyco#8275) * feat: add plan mode with enter/exit tools (anomalyco#8281) * chore: generate * test: fix plan agent test path from .opencode/plan/* to .opencode/plans/* * remove plan * fix: update User-Agent string to latest Chrome version in webfetch (anomalyco#8284) * fix: Add Plugin Mocks to Provider Tests (anomalyco#8276) * chore: generate * tweak: prompt for explore agent better * do not allow agent to ask custom-less questions * release: v1.1.19 * fix(TUI): make tui work when OPENCODE_SERVER_PASSWORD is set (anomalyco#8179) * chore: generate * docs: Update plan mode restrictions (anomalyco#8290) * docs: add 302ai provider (anomalyco#8142) * fix: add missing metadata() and ask() defintions to ToolContext type (anomalyco#8269) * fix(tui): track all timeouts in Footer to prevent memory leak (anomalyco#8255) * fix: deduplicate file refs in sent prompts (anomalyco#8303) * chore: generate * chore: generate * Update Nix flake.lock and x86_64-linux hash * Update aarch64-darwin hash * fix(session): skip duplicate system prompt for Codex OAuth sessions (anomalyco#8357) Co-authored-by: Claude <noreply@anthropic.com> * feat: show connected providers in /connect dialog (anomalyco#8351) * fix(opencode): fix docker image after sst rename in tips (anomalyco#8376) * chore: generate * ignore: update download stats 2026-01-14 * docs(prd): mark codex token refresh PR task as complete - PR created at #298 - Fix includes: write token refresh to openai provider ID, fallback to legacy codex entry - Tests pass (744 pass, 1 skip, 0 fail) * test(auth): verify backwards compatibility for OAuth metadata fields - Add test confirming minimal OAuth results (without optional email, name, plan, orgName fields) persist correctly in auth storage - All new metadata fields are optional in plugin types and auth schema - Provider auth handler uses conditional checks before setting optional fields - Verify 745 pass, 1 skip, 0 fail * chore(prd): mark extractUserInfo tasks as complete The extractUserInfo function is already implemented in codex.ts:92-105. It parses id_token, extracts email, name, and accountId from claims, and returns a UserInfo object. All tests pass. * chore(prd): mark OAuth callback integration tasks as complete OAuth callback already calls extractUserInfo(tokens) after token exchange and includes email, name, accountId in the success payload. * fix(app): file listing (anomalyco#8309) * chore(prd): mark normalizePlanType tasks as complete normalizePlanType function maps plan values to standardized tiers (free, plus, pro, team, enterprise, unknown) and handles case variations. * feat(server): add GET /auth/info/:providerID endpoint for account metadata - Added endpoint in server.ts that returns auth metadata (authenticated, type, email, plan, accountId) - Returns 404 with authenticated: false if provider not found - Generated openapi.json with new endpoint definition - Regenerated SDK with auth.info method and types (AuthInfoData, AuthInfoResponses) - Updated prd.json to mark SDK generation tasks as complete - Tests pass: 745 pass, 1 skip, 0 fail * chore(prd): mark PR merge and SDK tasks as complete - Marked "Merge PR before starting Phase 1" as complete (PR #298 already merged) - Updated verification steps for auth.info endpoint implementation * chore(prd): mark legacy codex cleanup task as complete - Verified migration copies codex to openai, Auth.remove('codex') available for manual cleanup - Removal is intentionally manual to prevent data loss if migration fails * chore: mark session complete * chore(prd): mark background task implementation as complete - Verified fetchChatGPTUserInfo background task at codex.ts:606-632 - Task spawns via 'void updatePlan().catch(() => {})' - non-blocking - Updates auth metadata via auth.set when plan/orgName retrieved - OAuth success returns immediately regardless of background task result * chore(prd): mark manifest.ts creation as complete - Verified manifest.ts exists with InstalledSkill and SkillManifest interfaces - Implements loadManifest, saveManifest, getInstalled, addInstalled, removeInstalled - Used by skill installer to track installed skills and their metadata * chore(prd): mark skill index and installer files as complete - Verified skill/index.ts exists with SkillIndex interface and caching logic - Implements loadIndex (cache with TTL), buildIndex (fetch and write), search (fuzzysort) - Verified skill/installer.ts exists with installSkill and uninstallSkill functions - Copies skill files to SKILLS_DIR and updates manifest with installed metadata * fix plan mode when not in git worktree * chore(prd): mark github fetcher as complete - Verified skill/fetcher/github.ts exists with 200 lines implementing git and tarball fetching - fetchRegistry() entry point with hasGit() check and tarball fallback - scanSkills() walks directories matching SKILL.md globs with minimatch - parseSkillFile() extracts YAML frontmatter for skill metadata * chore(prd): mark clawdhub and url fetchers as complete - Verified skill/fetcher/clawdhub.ts exists with stub fetchRegistry returning [] - Verified skill/fetcher/url.ts exists with stub fetchRegistry returning [] - Both are TODO stubs awaiting API contract confirmation and implementation * fix(ui): layout-bottom icons (anomalyco#8330) * fix(desktop): "load more" button behavior in desktop sidebar (anomalyco#8430) * chore: generate * release: v1.1.20 * sync: record last synced tag v1.1.20 * fix: suppress TS2589 type recursion error in server route chain --------- Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: Github Action <action@github.com> Co-authored-by: Leonidas <77194479+LeonMueller-OneAndOnly@users.noreply.github.com> Co-authored-by: Eduard Voiculescu <eduardvoiculescu95@gmail.com> Co-authored-by: ⌞L⌝ <151412975+mthezi@users.noreply.github.com> Co-authored-by: Daniel M Brasil <danielmbrasil@protonmail.com> Co-authored-by: Daniel Sauer <81422812+sauerdaniel@users.noreply.github.com> Co-authored-by: Felix Sanchez <felix.sanchez.dev@gmail.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Dax Raad <d@ironbay.co> Co-authored-by: usvimal <usvimal@gmail.com> Co-authored-by: Daniel Polito <danielbpolito@gmail.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: cmdr-chara <legend.alkalex07@gmail.com> Co-authored-by: Zeke Sikelianos <zeke@sikelianos.com> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: Dillon Mulroy <dillon.mulroy@gmail.com> Co-authored-by: Joe Harrison <22684038+josephbharrison@users.noreply.github.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Alan <alan.thiec@gmail.com> Co-authored-by: zerone0x <hi@trine.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com> Co-authored-by: Goni Zahavy <goni1993@gmail.com> Co-authored-by: Filip <34747899+neriousy@users.noreply.github.com> Co-authored-by: Andrew Jazbec <andrew@jazbec.io> Co-authored-by: Shane Bishop <71288697+shanebishop1@users.noreply.github.com>
What does this PR do?
Fixes#8426
This is what seemed to be happening:
When the client fetched sessions for a given project, it used the
/sessionendpoint. This endpoint did not filter by project/directory, so it was returning sessions that were not a part of the project connected to a given "load more" button. Then, this createMemo used the length of that list of sessions to determine pagination. So, even if a project only had one session, it could receive dozens of other sessions (from other projects).Another issue was that the frontend was filtering out non-root/child sessions here. Because the backend did not differentiate between root/child sessions, when the frontend received them, there were sometimes child sessions that counted toward the pagination limit, but then got filtered out, resulting in what looked like a no-op when clicking the load more button.
This PR checks a project's directory when pulling in its sessions and also filters out child sessions in the backend to make pagination calculations line up with actually-rendered sessions.
I feel that there are probably better long-term solutions for this, but this is a pretty small change and has been working fine for me. Would love to hear the team's perspective/ideas.
Before fix:
load_more_bug.mov
After fix:
load_more_fix.mov
How did you verify your code works?
Ran tests and manually verified that projects in different states (e.g. fresh vs. old/complex ones) worked as expected