fix(code): make reject-with-feedback discoverable in approval menu - #5260
Merged
Mason Daugherty (mdrxy) merged 6 commits intoAug 3, 2026
Merged
Conversation
The approval menu only advertised the free-text rejection path while the Reject row was highlighted, and `Tab` was a hard no-op anywhere else — so the users on the `y`/`n` quick-key fast path never saw it. "Amend" also read like `git commit --amend` rather than feedback sent to the model. Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
…h-feedback-discoverability # Conflicts: # libs/code/deepagents_code/tui/widgets/approval.py
Mason Daugherty (mdrxy)
marked this pull request as ready for review
August 3, 2026 18:47
…open The approval menu gates its arrow keys on `_reason_input_active`, but not `y`/`a`/`1`/`2`/`3` or Enter. Clicking the menu body while the reason field is open moves focus off the `Input` without closing it -- `on_blur` deliberately stops re-trapping focus during reason mode so the `Input` can hold it, and nothing handles the reverse direction. In that state the quick keys read as menu commands, so a single `y` approves the very call the user is typing a rejection for, and Enter sends a bare reject that discards the typed text. Reachable before this branch, but only for users who knew to arrow onto Reject and press Tab. Advertising Tab on every prompt makes reason mode the common path, so close it here: - `on_focus` hands focus back to the reason input, so the field being open and the field being focused stop diverging. The `Input` is constructed with `select_on_focus=False` -- Textual's default would select the whole reason on the way back, making the next keystroke replace it. - `_handle_selection` refuses to decide while the flag is set. Every quick key and Enter path funnels through it, so one guard covers the actions that exist and the ones added later. - Enter submits the typed reason instead of falling through to a reason-less reject, honoring the `Enter submit` hint the footer shows at that moment. Also mirror `tab` at App level alongside the other advertised approval keys. It needs `priority=True`, unlike its siblings: `Screen.BINDINGS` already binds `tab -> app.focus_next` and resolves before the app, so a plain mirror would never fire. `check_action` steps it aside unless an approval is pending and the chat input is unfocused, keeping focus traversal and chat-input completion intact everywhere else.
Signed-off-by: Mason Daugherty <github@mdrxy.com>
Mason Daugherty (mdrxy)
deleted the
mdrxy/code/reject-with-feedback-discoverability
branch
August 3, 2026 20:50
Johannes du Plessis (johannes117)
pushed a commit
that referenced
this pull request
Aug 4, 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.52](deepagents-code==0.1.51...deepagents-code==0.1.52) (2026-08-04) ### Features - Hooks v2 is now generally available, with support for loading hooks from installed plugins. ([#5307](#5307), [#5198](#5198)) - Auto approval classifier configuration now supports selecting the classifier model and setting a review timeout. ([#5205](#5205), [#5302](#5302)) - HITL rejection reasons are now framed for the model, and the approval menu makes reject-with-feedback easier to discover. ([#5259](#5259), [#5260](#5260)) - Added a tri-state `DEEPAGENTS_CODE_ONBOARDING` environment variable. ([#5301](#5301)) - The `/model` footer Ctrl+N hint now follows the current display mode. ([#5247](#5247)) - The price catalog now refreshes hourly in the background. ([#5264](#5264)) - Updated recommendations to include DeepSeek V4 Flash 0731. ([#5244](#5244)) ### Bug Fixes - Fixed several Hooks v2 lifecycle issues: session-end teardown is now bounded, hooks refresh after cwd switches, malformed hook resumes are handled, hook stops surface without agent errors, and unused `SessionEndCause` members were removed. ([#5248](#5248), [#5249](#5249), [#5233](#5233), [#5276](#5276), [#5240](#5240)) - `PreCompact` now fires before auto-compaction. ([#5277](#5277)) _End release notes preview._ --- > [!NOTE] > A **New Contributors** section is 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 2). --------- 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.
Makes the free-text rejection path discoverable, and stops the quick keys resolving an approval while the reason field is open.
Discoverability. The
Tabhint only rendered while Reject was highlighted, andTabwas a no-op from every other row — so users deciding withy/nfrom the default Approve row never saw it. The hint is now unconditional and readsTab reject with feedback(amendread likegit commit --amend), andTabmoves the cursor to Reject before opening the field. Adds a splash tip, and mirrorstabat App level like the other approval keys — withpriority=True, sinceScreenalready bindstab -> focus_nextand would otherwise win.check_actionsteps it aside outside an approval so focus traversal is unaffected.Quick keys. Arrow keys were gated on
_reason_input_active;y/a/1/2/3and Enter were not. Clicking the menu body moves focus off the reasonInputwithout closing it, and thereyapproved the call being rejected while Enter sent a bare reject that dropped the typed text. Nowon_focushands focus back (withselect_on_focus=False, or the next keystroke would replace the reason),_handle_selectionrefuses to decide while the field is open, and Enter submits what was typed.Escstill cancels without deciding.Made by Open SWE
References