TypeError: Cannot read properties of undefined (reading 'localeCompare') in sort operations #3973

Open
opened 2026-02-16 17:42:09 -05:00 by yindo · 1 comment
Owner

Originally created by @leprachuan on GitHub (Dec 29, 2025).

Originally assigned to: @rekram1-node on GitHub.

Description

Multiple sort operations in the web UI crash when sorting items with undefined/null values.

TypeError: Cannot read properties of undefined (reading 'localeCompare')

OpenCode version

v1.0.207+ (dev branch)

Steps to reproduce

Occurs intermittently when:

  • Data is still loading (async operations in progress)
  • Optional fields are missing (e.g., unnamed sessions, models without names)
  • Race conditions during UI state updates

Example from packages/app/src/context/sync.tsx:79:

sessions.sort((a, b) => a.id.localeCompare(b.id))
// Crashes if a.id is undefined

Affected files

  • packages/app/src/context/sync.tsx (lines 79, 83, 94)
  • packages/app/src/context/global-sync.tsx (lines 118, 344)
  • packages/app/src/pages/session.tsx (line 85)
  • packages/app/src/pages/layout.tsx (line 127)
  • packages/app/src/components/dialog-select-mcp.tsx (lines 16, 44)
  • packages/app/src/components/dialog-select-model.tsx (line 44)
  • packages/app/src/components/dialog-manage-models.tsx (line 18)
  • packages/app/src/components/dialog-select-model-unpaid.tsx (line 74)
  • packages/app/src/components/dialog-select-provider.tsx (line 27)
  • packages/ui/src/components/session-turn.tsx (line 109)
  • packages/console/app/src/routes/workspace/[id]/model-section.tsx (line 51)

Proposed fix

Add null coalescing to all localeCompare calls:

sessions.sort((a, b) => (a.id ?? "").localeCompare(b.id ?? ""))

Screenshot and/or share link

No response

Operating System

Linux/macOS/Windows (affects all platforms)

Terminal

Web UI (browser-based)

Originally created by @leprachuan on GitHub (Dec 29, 2025). Originally assigned to: @rekram1-node on GitHub. ### Description Multiple sort operations in the web UI crash when sorting items with undefined/null values. ``` TypeError: Cannot read properties of undefined (reading 'localeCompare') ``` ### OpenCode version v1.0.207+ (dev branch) ### Steps to reproduce Occurs intermittently when: - Data is still loading (async operations in progress) - Optional fields are missing (e.g., unnamed sessions, models without names) - Race conditions during UI state updates Example from `packages/app/src/context/sync.tsx:79`: ```typescript sessions.sort((a, b) => a.id.localeCompare(b.id)) // Crashes if a.id is undefined ``` ### Affected files - `packages/app/src/context/sync.tsx` (lines 79, 83, 94) - `packages/app/src/context/global-sync.tsx` (lines 118, 344) - `packages/app/src/pages/session.tsx` (line 85) - `packages/app/src/pages/layout.tsx` (line 127) - `packages/app/src/components/dialog-select-mcp.tsx` (lines 16, 44) - `packages/app/src/components/dialog-select-model.tsx` (line 44) - `packages/app/src/components/dialog-manage-models.tsx` (line 18) - `packages/app/src/components/dialog-select-model-unpaid.tsx` (line 74) - `packages/app/src/components/dialog-select-provider.tsx` (line 27) - `packages/ui/src/components/session-turn.tsx` (line 109) - `packages/console/app/src/routes/workspace/[id]/model-section.tsx` (line 51) ### Proposed fix Add null coalescing to all `localeCompare` calls: ```typescript sessions.sort((a, b) => (a.id ?? "").localeCompare(b.id ?? "")) ``` ### Screenshot and/or share link _No response_ ### Operating System Linux/macOS/Windows (affects all platforms) ### Terminal Web UI (browser-based)
Author
Owner

@github-actions[bot] commented on GitHub (Dec 29, 2025):

This issue might be a duplicate of existing issues. Please check:

  • #5510: --continue selects wrong session due to incorrect sort order in sync.tsx (includes localeCompare calls in sync.tsx)

Feel free to ignore if none of these address your specific case.

@github-actions[bot] commented on GitHub (Dec 29, 2025): This issue might be a duplicate of existing issues. Please check: - #5510: --continue selects wrong session due to incorrect sort order in sync.tsx (includes localeCompare calls in sync.tsx) Feel free to ignore if none of these address your specific case.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: anomalyco/opencode#3973