Uh oh!
There was an error while loading. Please reload this page.
fix(app): restore queued follow-up (Queue/Steer) setting in web UI - #44117
fix(app): restore queued follow-up (Queue/Steer) setting in web UI#44117chaosmanage wants to merge 4 commits into
Conversation
Commit ae7e2eb removed queued follow-ups by coercing the persisted general.followup setting to "steer" (accessor, setter, and a rewrite effect) and deleting the settings row. All downstream machinery survived: the per-session queue store, flush-when-idle effect, queued-messages dock, and the composer shouldQueue/onQueue wiring. Revert the coercion and restore the row in both the legacy panel and the v2 General tab (the default dialog) so Queue mode is reachable again.
chaosmanage
commented
Aug 22, 2026
Due-diligence on why reverting ae7e2eb should be safe — posting here so maintainers can correct me if there was a non-obvious reason:
If queue mode was disabled for a reason I couldn't find (e.g., a UX problem or a subtle send-path bug from that era), I'd appreciate a pointer — happy to close this in favor of the fuller treatment in #33247 instead. |
Thanks for updating your PR! It now meets our contributing guidelines. 👍 |
chaosmanage
commented
Aug 22, 2026
Heads up for maintainers: the required checks (typecheck, unit/e2e, nix-eval) are sitting at |
Co-authored-by: OpenCode <opencode@users.noreply.github.com>
Thanks for updating your PR! It now meets our contributing guidelines. 👍 |
Issue for this PR
Closes#44108
Type of change
What does this PR do?
This fixes the web UI (
opencode web, everything inpackages/app). TUI/CLI are not touched. Since commit ae7e2eb, sending a message while the agent is busy in the web UI always steers into the current run, because queued follow-ups were disabled there: the persistedgeneral.followupsetting was coerced to"steer"in the accessor, setter, and a rewrite effect, and the settings row was deleted.The queue machinery itself was never removed from the web app — the per-session persisted queue store, the flush-when-idle effect, the queued-messages dock, and the composer
shouldQueue/onQueuewiring inpages/session.tsxall still work as soon as the setting can be"queue"again.So this PR:
packages/app/src/context/settings.tsx(exact inverse of ae7e2eb's hunk)packages/app/src/components/settings-general.tsx(also verbatim from before)packages/app/src/components/settings-v2/general.tsx(the default dialog), following the existingLanguageSetting/ShellSettingpattern, since v2 never had the rowAfter this, users can pick General → Follow-up behavior → Queue in the web UI settings, and busy-session messages will queue up FIFO and run after the current turn finishes instead of steering.
The i18n keys were never removed, so no translation changes are needed. #33247 covers the broader redesign (per-message modes, wrap/halt-steer); this intentionally stays minimal and can be closed if that lands first.
How did you verify your code works?
Two of the three hunks are byte-for-byte reverses of a previously working, shipped implementation, so behavior matches the pre-ae7e2eb Queue mode. I did not run the app locally; please lean on CI for typecheck/tests/i18n parity.
Screenshots / recordings
Settings-only UI change restoring a previously existing row; happy to attach a recording if useful for review.
Checklist