[PR #9871] feat: add /reload slash command #13251

Open
opened 2026-02-16 18:18:07 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/anomalyco/opencode/pull/9871

State: open
Merged: No


Summary

Implements a /reload slash command that allows users to reload all configuration files (opencode.jsonc, .opencode/) and plugins without restarting the TUI. Also includes fixes for graceful session interruption and cleanup during reload.

https://github.com/user-attachments/assets/7e14c446-80bc-4a81-b092-94b08ae120e7

https://github.com/user-attachments/assets/eb8140be-d770-4b26-be41-9d9536088fcd

Changes

/reload Command

  • packages/opencode/src/server/routes/config.ts - Added POST /config/reload endpoint that reloads configurations and restarts instances
  • packages/opencode/src/command/index.ts - Added RELOAD: "reload" to builtin commands
  • packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx - Special handling for /reload command with toast notification
  • packages/sdk/js/src/v2/gen/sdk.gen.ts - Added reload() method to SDK Config class

Graceful Session Interruption on Reload

  • packages/opencode/src/session/message-v2.ts - Extended AbortedError schema with optional reason field
  • packages/opencode/src/session/prompt.ts - cancel() accepts optional reason, passes to AbortController
  • packages/opencode/src/cli/cmd/tui/routes/session/index.tsx - TUI shows "interrupted (config reload)" when aborted due to reload

Fix: QUEUED Messages Bug After Reload

When messages were sent during config reload, they could create incomplete assistant messages (with time.completed = undefined), causing subsequent messages to appear as "QUEUED" in the TUI.

  • packages/opencode/src/session/index.ts - Added Session.drainIncomplete() to complete orphaned assistant messages
  • packages/opencode/src/server/routes/config.ts - Run drainIncomplete() AFTER disposeAll() to catch late messages
  • packages/opencode/src/cli/cmd/tui/worker.ts - Added drainIncomplete() call (was missing)
  • packages/opencode/src/session/prompt.ts - Disposal handler completes incomplete messages before aborting

Testing

  • packages/opencode/test/server/config-reload.test.ts - 11 integration tests covering:
    • Config reload endpoint behavior
    • SessionPrompt.cancel with reason
    • Incomplete message cleanup on reload
    • MessageV2.fromError abort handling

Closes #6719

**Original Pull Request:** https://github.com/anomalyco/opencode/pull/9871 **State:** open **Merged:** No --- ## Summary Implements a `/reload` slash command that allows users to reload all configuration files (opencode.jsonc, .opencode/) and plugins without restarting the TUI. Also includes fixes for graceful session interruption and cleanup during reload. https://github.com/user-attachments/assets/7e14c446-80bc-4a81-b092-94b08ae120e7 https://github.com/user-attachments/assets/eb8140be-d770-4b26-be41-9d9536088fcd ## Changes ### `/reload` Command - **packages/opencode/src/server/routes/config.ts** - Added POST `/config/reload` endpoint that reloads configurations and restarts instances - **packages/opencode/src/command/index.ts** - Added `RELOAD: "reload"` to builtin commands - **packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx** - Special handling for `/reload` command with toast notification - **packages/sdk/js/src/v2/gen/sdk.gen.ts** - Added `reload()` method to SDK Config class ### Graceful Session Interruption on Reload - **packages/opencode/src/session/message-v2.ts** - Extended `AbortedError` schema with optional `reason` field - **packages/opencode/src/session/prompt.ts** - `cancel()` accepts optional reason, passes to AbortController - **packages/opencode/src/cli/cmd/tui/routes/session/index.tsx** - TUI shows "interrupted (config reload)" when aborted due to reload ### Fix: QUEUED Messages Bug After Reload When messages were sent during config reload, they could create incomplete assistant messages (with `time.completed = undefined`), causing subsequent messages to appear as "QUEUED" in the TUI. - **packages/opencode/src/session/index.ts** - Added `Session.drainIncomplete()` to complete orphaned assistant messages - **packages/opencode/src/server/routes/config.ts** - Run `drainIncomplete()` AFTER `disposeAll()` to catch late messages - **packages/opencode/src/cli/cmd/tui/worker.ts** - Added `drainIncomplete()` call (was missing) - **packages/opencode/src/session/prompt.ts** - Disposal handler completes incomplete messages before aborting ## Testing - **packages/opencode/test/server/config-reload.test.ts** - 11 integration tests covering: - Config reload endpoint behavior - SessionPrompt.cancel with reason - Incomplete message cleanup on reload - MessageV2.fromError abort handling Closes #6719
yindo added the pull-request label 2026-02-16 18:18:07 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: anomalyco/opencode#13251