Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Comments

Close side panel

fix(tui): handle undefined agent.current() to prevent fatal TypeError#7689

Open
peremajoral wants to merge 1 commit intoanomalyco:devanomalyco/opencode:devfrom
peremajoral:fix/agent-current-undefinedperemajoral/opencode:fix/agent-current-undefinedCopy head branch name to clipboard
Open

fix(tui): handle undefined agent.current() to prevent fatal TypeError#7689
peremajoral wants to merge 1 commit intoanomalyco:devanomalyco/opencode:devfrom
peremajoral:fix/agent-current-undefinedperemajoral/opencode:fix/agent-current-undefinedCopy head branch name to clipboard

Conversation

@peremajoral
Copy link

Summary

Fixes the fatal error: TypeError: undefined is not an object (evaluating 'local.agent.current().name')

Root Cause

When the agents list is empty or the stored agent name doesn't match any available agent, local.agent.current() returns undefined. The code then crashes when accessing .name on undefined.

Affected locations:

  • packages/opencode/src/cli/cmd/tui/context/local.tsx - Source of the issue
  • packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx - 6 consumer locations
  • packages/opencode/src/cli/cmd/tui/component/dialog-agent.tsx - 1 consumer location

Changes

local.tsx

  • Line 41: agents()[0].nameagents()[0]?.name ?? "" for safe initialization
  • Line 57: Removed non-null assertion ! from current() return
  • Line 74: Added null check before setting agent store
  • Lines 181-185, 230, 256, 275, 370: Added null guards before accessing agent.current()

prompt/index.tsx

  • Added optional chaining with "build" fallback at all 6 locations:
    • Shell handler (line 537)
    • Command handler (line 558)
    • Prompt handler (line 574)
    • Highlight memo (line 694)
    • Spinner definition (line 705)
    • JSX display (line 936)

dialog-agent.tsx

  • Added optional chaining with empty string fallback

Testing

The fix adds defensive null checks that gracefully handle edge cases without changing normal behavior when agents are properly loaded.

When the agents list is empty or the stored agent name doesn't match any
available agent, local.agent.current() returns undefined. Accessing .name
on undefined causes TypeError: undefined is not an object.

Changes:
- local.tsx: Add optional chaining and null guards throughout
- prompt/index.tsx: Add optional chaining with build fallback
- dialog-agent.tsx: Add optional chaining with empty string fallback

Fixes: opentui: fatal: undefined is not an object
@github-actions
Copy link
Contributor

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@github-actions
Copy link
Contributor

The following comment was made by an LLM, it may be inaccurate:

No duplicate PRs found

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Morty Proxy This is a proxified and sanitized view of the page, visit original site.