Make composer selection reactive and move Automation/Plugin rows into plugins - #4502
Merged
ymichael merged 10 commits intoSep 29, 2026
Merged
Conversation
ymichael
force-pushed
the
bb/expose-reactive-composer-selection-thr_p2z4un62de
branch
from
September 29, 2026 19:14
2b30fd3 to
4e3b595
Compare
Queued-message and sent-message editors now report their picker values as composer.selection, provider rows apply to every composer kind, and plugin plus-menu rows are no longer hidden by the sent-message editor's customization suppression. This restores main's Plan/Goal/Automation/Plugin placement. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ymichael
marked this pull request as ready for review
September 29, 2026 21:50
Drop the visible menu-row field, and return Plan/Goal to core rows driven by the provider's composerActions declaration as on main. Codex and Claude Code no longer ship app entries, and the artifact-test staging change they needed is reverted. Automation and Plugin stay plugin-owned. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Plan, Goal, Automation, and Plugin rows now put their command or prompt at the start of the draft, replacing a leading command pill. Core applies the rule to Plan/Goal; Automations and BB Guide apply it with composer.replace. This removes experimental_applyCommand, the Plugin prompt action in core, and the cursor-based replacement and dedupe logic from #194. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The Automation row now starts the draft with "Create a new bb automation to" like the Plugin row. Core no longer offers /automation in autocomplete, converts it on paste, or expands /automation and /loop pills on send, so the prompt-action helper, the automation action kind, and client-core's automation-prompt module are removed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ymichael
deleted the
bb/expose-reactive-composer-selection-thr_p2z4un62de
branch
September 29, 2026 22:41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Human comments
What was wrong
After #4474, plugins could write composer picker settings but could not reactively read them. The Automation and Plugin creation rows were also hard-coded in the core
+menu, so the plugins that own those features could not contribute them. The menu's command rows edited the draft relative to the cursor (replacing a preceding action or a half-typed command, skipping duplicates), which plugins cannot reproduce because they cannot see the cursor.What changed
composer.selection: ComposerSelection | null, with stable snapshots and subscriptions inuseComposeranduseComposers. It reports the thread (including handoff) and new-thread pickers, and the read-only pickers of queued-message and sent-message editors: the thread's provider with the queued message's or the thread composer's settings. Composers without pickers return null.setSelectionretains partial updates./goalis passed to Codex as text, so the start is the only position that matters. This removes the cursor-based replacement and duplicate logic from [codex] Replace prompt plus menu PR #194; a half-typed/plis no longer replaced. Skills still inserts its trigger at the cursor because it opens the skills picker.composer.replace; there is no new composer method. Core applies the same rule to its provider-declared Plan/Goal rows. Explicit menu-row icons now take precedence over plugin branding, so both rows keep their original icons.+menu rows are exempt from its customization suppression, while actions, banners, send-menu rows, and rich text remain suppressed there./automationmacro from core: it is no longer offered in slash autocomplete, converted on paste, or expanded to the automation sentence on send (along with the legacy/loopalias). Core no longer knows about Automations. An unsent local draft that already holds an/automationpill now sends it as literal text.selection. Automations and BB Guide require SDK 0.6.0 forreplace. Updated the Plugin Guide, authoring references, and API audit. These are client-local changes; no database, server/daemon wire, or CLI changes.How you verified
pnpm exec turbo run test --filter=@bb/appon the promptbox, plugin, embedded-chat, thread-detail, and lib suites plus useCommandSuggestions: 1931 passed. Covers the prefix rule (existing text, later pills shifting, replacing a leading command, repeated clicks), core/plugin row order and icons in new-thread, thread, and queued-message composers, menu rows re-rendering on selection changes, queued and sent-message selections (including a bottom handoff), and plus-menu rows under suppression.🤖 Generated with Claude Code