feat(code): open footer pickers with ctrl+click - #5611
Merged
Mason Daugherty (mdrxy) merged 5 commits intoAug 18, 2026
Conversation
Make the footer model and effort separate click targets that reuse the existing picker flows. Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Mason Daugherty (mdrxy)
marked this pull request as ready for review
August 18, 2026 20:35
Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Address review findings on the status-bar Ctrl+click targets.
Click handling:
- Ignore non-left buttons. Textual synthesizes `Click` for any button, so
Ctrl+right-click opened a picker.
- Ignore chained clicks. One `Click` arrives per release, so a Ctrl+double-click
opened two stacked modals, or submitted `/effort` twice.
Model action:
- Route `action_open_model_selector` through `_submit_input("/model")` instead of
calling `_show_model_selector` directly. The direct call skipped the exiting
and thread-switch guards and left the startup tip mounted. `/model` is
`IMMEDIATE_UI`, so the bare form still bypasses the queue.
Types and docs:
- Annotate the `Style.meta` lookup in `_picker_target` so the `PickerTarget`
return type is checked rather than an unverified claim about `Any`.
- Derive `_PICKER_STYLES` from `PickerTarget` and assert both picker mappings
stay total, so a new member cannot `KeyError` at render or click time.
- Document the `_PICKER_*` constants, matching the other constants in the file,
and record why the model and effort actions take different paths.
- Take the effort text in `_clickable_content` instead of a rung flag.
- Rename `modifier_target` to `_ctrl_hint_target`; nothing outside reads it.
Tests:
- Assert the action strings resolve on `DeepAgentsApp`. Textual only logs a
missing action, so a rename would have made Ctrl+click a silent no-op.
- Cover `event.stop()` with an app-level click counter: a plain click must still
reach the handler that refocuses the chat input, a picker click must not.
- Read picker metadata from `render_line` rather than `render`, and cover a
hover moving between the two spans, which repaints only because the hint
reactive asks it to.
- Cover the remaining truncation rungs, `on_leave`, and the off-target hover.
ctrl+click
Mason Daugherty (mdrxy)
deleted the
mdrxy/code/clickable-footer-model-effort
branch
August 18, 2026 22:08
Mason Daugherty (mdrxy)
pushed a commit
that referenced
this pull request
Aug 19, 2026
> [!CAUTION] > Merging this PR will automatically publish to **PyPI** and create a **GitHub release**. For the full release process, see [`.github/RELEASING.md`](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md). --- _Release notes preview: keep this section in sync with the package `CHANGELOG.md`. Publish reads the merged CHANGELOG via `release.yml`, not this PR description — keep them aligned anyway so the PR stays an accurate historical record for reviewers and anyone returning later._ --- ## [0.1.58](deepagents-code==0.1.57...deepagents-code==0.1.58) (2026-08-19) ### Breaking Changes - `deepagents-code` now requires Python 3.12 or newer. ([#5603](#5603)) ### Features - Added OpenRouter `z-ai/glm-5.3` to the model switcher. ([#5641](#5641)) - Added support for re-authenticating MCP servers from the viewer. ([#5637](#5637)) - Footer pickers can now be opened with `ctrl+click`. ([#5611](#5611)) - Resume hints now account for `TERM_PROGRAM` support before showing terminal-specific guidance. ([#5580](#5580)) ### Fixes - Completed the `dcode config` command surface. ([#5581](#5581)) - Made `/offload` interruptible. ([#5590](#5590)) - Improved chat and footer UI behavior: rapid typing stays visible, double-click collapses a resized chat input, and the MCP footer wraps on narrow windows. ([#5424](#5424), [#5578](#5578), [#5651](#5651)) - Captured stdio MCP server stderr in the logger. ([#5610](#5610)) - Drained hook pipes after timeout. ([#5606](#5606)) - Grouped resume trace rounds. ([#5593](#5593)) - Omitted web-search prompt guidance when web search is unavailable. ([#5602](#5602)) - Resolved message pointer shapes per cell. ([#5592](#5592)) _End release notes preview._ --- > [!NOTE] > A **community contributors** list and a **Special thanks** section (crediting the users who filed the issues this release's PRs closed) are appended to the GitHub release notes automatically at publish time (see [Release Pipeline](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md#release-pipeline), step 3). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: langchain-oss-automated-triage[bot] <248757908+langchain-oss-automated-triage[bot]@users.noreply.github.com>
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.
Model and reasoning-effort labels in the footer can now open their existing pickers with Ctrl+click.
The modifier guard prevents ordinary footer clicks from opening a modal. Ctrl-modified pointer movement underlines only the target under the pointer; the hint clears on the next unmodified movement or when the pointer leaves, matching the modifier information terminal mouse events provide. Effort selection enters the existing
/effortqueue so it cannot overtake pending prompts, and width-aware truncation removes hidden hit targets.Made by Open SWE