Skip to content

fix(code): treat multi-line key-event pastes as one input - #3856

Merged
Mason Daugherty (mdrxy) merged 8 commits into
mainfrom
mdrxy/code/paste-burst-multiline
Jun 11, 2026
Merged

fix(code): treat multi-line key-event pastes as one input#3856
Mason Daugherty (mdrxy) merged 8 commits into
mainfrom
mdrxy/code/paste-burst-multiline

Conversation

@mdrxy

@mdrxy Mason Daugherty (mdrxy) commented Jun 10, 2026

Copy link
Copy Markdown
Member

Pasting multi-line text in the code TUI no longer splits into multiple messages on terminals that lack bracketed paste.


When a terminal lacks bracketed paste (common over SSH, in some tmux/multiplexer setups, and in several Windows/VS Code terminals), it replays a pasted clipboard as a rapid stream of Char and Enter key events rather than one paste event. The chat input's "Plain Enter submits" branch then fired on every embedded newline, splitting one paste into many submitted messages.

This broadens the existing paste-burst handling — which previously only triggered for quote-prefixed dropped-path payloads — to arm a short Enter-suppression window whenever a run of rapid keystrokes looks like a replayed paste. While that window is active, enter inserts a newline and extends the window instead of submitting, so the whole paste stays grouped. The approach mirrors Codex's PasteBurst. Slash-command context is exempt so /command dispatch keeps its normal Enter semantics. Text insertion is unchanged; only Enter behavior is gated.

Made by Open SWE

Terminals without bracketed paste replay a paste as rapid Char/Enter key
events, so each embedded newline submitted separately. Arm an
Enter-suppression window on rapid keystroke runs so in-paste newlines
insert instead of submitting, mirroring Codex's PasteBurst. Slash-command
context keeps Enter's submit/dispatch semantics.

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
@github-actions github-actions Bot added dcode Related to `deepagents-code` fix A bug fix (PATCH) internal User is a member of the `langchain-ai` GitHub organization size: S 50-199 LOC labels Jun 10, 2026
@mdrxy
Mason Daugherty (mdrxy) marked this pull request as ready for review June 10, 2026 23:48

@open-swe open-swe Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Open SWE Review: No issues found

Open SWE reviewed this PR and found no potential bugs to report.

Open in WebView Open SWE trace

@github-actions github-actions Bot added size: M 200-499 LOC and removed size: S 50-199 LOC labels Jun 11, 2026

@open-swe open-swe Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Open SWE Review found 1 potential issue.

Open in WebView Open SWE trace

Comment thread libs/code/deepagents_code/widgets/chat_input.py Outdated
@mdrxy
Mason Daugherty (mdrxy) merged commit 6bb15d4 into main Jun 11, 2026
45 of 47 checks passed
@mdrxy
Mason Daugherty (mdrxy) deleted the mdrxy/code/paste-burst-multiline branch June 11, 2026 02:31
Mason Daugherty (mdrxy) added a commit that referenced this pull request Jun 11, 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).

---

_Everything below this line will be the GitHub release body._

---


##
[0.1.13](deepagents-code==0.1.12...deepagents-code==0.1.13)
(2026-06-11)

### Features

* Pluggable third-party sandbox backends
([#3842](#3842))
([2b635a7](2b635a7))
* Auto-install ripgrep on first run
([#3348](#3348))
([fecf22b](fecf22b))
* `config` command and canonical config manifest
([#3763](#3763))
([79899a3](79899a3))
* Confirm modal for `/install --package`
([#3840](#3840))
([3d75026](3d75026))
* Copy focused input selection on `Ctrl+C`
([#3841](#3841))
([99f782c](99f782c))
* `[retries]` config
([#3772](#3772))
([9334d91](9334d91))
* Show connection state in the status bar
([#3710](#3710))
([3e3e8fe](3e3e8fe))
* Surface LangSmith tracing projects in `LocalContextMiddleware`
([#3836](#3836))
([676abec](676abec))

### Bug Fixes

* Add debug-log guidance for truncated startup errors
([#3849](#3849))
([cd1ef30](cd1ef30))
* Drop lock-key events so Caps Lock in iTerm2 doesn't type
([#3855](#3855))
([110f1a7](110f1a7))
* Hand pointer over splash tracing project link
([#3858](#3858))
([ea7dae5](ea7dae5))
* Keep terminal-default theme on Esc in `/theme` selector
([#3854](#3854))
([c3bc67b](c3bc67b))
* Preserve inherited `PYTHONPATH` for server subprocess
([#3833](#3833))
([4689569](4689569))
* Resolve interpreter PTC allowlist against the runtime tool registry
([#3845](#3845))
([c59a27e](c59a27e))
* Treat multi-line key-event pastes as one input
([#3856](#3856))
([6bb15d4](6bb15d4))

---

_Everything above this line will be the GitHub release body._

---

> [!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: Mason Daugherty <github@mdrxy.com>
Marcelo5444 pushed a commit to Marcelo5444/deepagents that referenced this pull request Jul 30, 2026
…ai#3856)

Pasting multi-line text in the `code` TUI no longer splits into multiple
messages on terminals that lack bracketed paste.

---

When a terminal lacks bracketed paste (common over SSH, in some
tmux/multiplexer setups, and in several Windows/VS Code terminals), it
replays a pasted clipboard as a rapid stream of `Char` and `Enter` key
events rather than one paste event. The chat input's "Plain Enter
submits" branch then fired on every embedded newline, splitting one
paste into many submitted messages.

This broadens the existing paste-burst handling — which previously only
triggered for quote-prefixed dropped-path payloads — to arm a short
Enter-suppression window whenever a run of rapid keystrokes looks like a
replayed paste. While that window is active, `enter` inserts a newline
and extends the window instead of submitting, so the whole paste stays
grouped. The approach mirrors Codex's `PasteBurst`. Slash-command
context is exempt so `/command` dispatch keeps its normal Enter
semantics. Text insertion is unchanged; only Enter behavior is gated.

Made by [Open SWE](https://openswe.vercel.app)

---------

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Marcelo5444 pushed a commit to Marcelo5444/deepagents that referenced this pull request Jul 30, 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).

---

_Everything below this line will be the GitHub release body._

---


##
[0.1.13](langchain-ai/deepagents@deepagents-code==0.1.12...deepagents-code==0.1.13)
(2026-06-11)

### Features

* Pluggable third-party sandbox backends
([langchain-ai#3842](langchain-ai#3842))
([2b635a7](langchain-ai@2b635a7))
* Auto-install ripgrep on first run
([langchain-ai#3348](langchain-ai#3348))
([fecf22b](langchain-ai@fecf22b))
* `config` command and canonical config manifest
([langchain-ai#3763](langchain-ai#3763))
([79899a3](langchain-ai@79899a3))
* Confirm modal for `/install --package`
([langchain-ai#3840](langchain-ai#3840))
([3d75026](langchain-ai@3d75026))
* Copy focused input selection on `Ctrl+C`
([langchain-ai#3841](langchain-ai#3841))
([99f782c](langchain-ai@99f782c))
* `[retries]` config
([langchain-ai#3772](langchain-ai#3772))
([9334d91](langchain-ai@9334d91))
* Show connection state in the status bar
([langchain-ai#3710](langchain-ai#3710))
([3e3e8fe](langchain-ai@3e3e8fe))
* Surface LangSmith tracing projects in `LocalContextMiddleware`
([langchain-ai#3836](langchain-ai#3836))
([676abec](langchain-ai@676abec))

### Bug Fixes

* Add debug-log guidance for truncated startup errors
([langchain-ai#3849](langchain-ai#3849))
([cd1ef30](langchain-ai@cd1ef30))
* Drop lock-key events so Caps Lock in iTerm2 doesn't type
([langchain-ai#3855](langchain-ai#3855))
([110f1a7](langchain-ai@110f1a7))
* Hand pointer over splash tracing project link
([langchain-ai#3858](langchain-ai#3858))
([ea7dae5](langchain-ai@ea7dae5))
* Keep terminal-default theme on Esc in `/theme` selector
([langchain-ai#3854](langchain-ai#3854))
([c3bc67b](langchain-ai@c3bc67b))
* Preserve inherited `PYTHONPATH` for server subprocess
([langchain-ai#3833](langchain-ai#3833))
([4689569](langchain-ai@4689569))
* Resolve interpreter PTC allowlist against the runtime tool registry
([langchain-ai#3845](langchain-ai#3845))
([c59a27e](langchain-ai@c59a27e))
* Treat multi-line key-event pastes as one input
([langchain-ai#3856](langchain-ai#3856))
([6bb15d4](langchain-ai@6bb15d4))

---

_Everything above this line will be the GitHub release body._

---

> [!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: Mason Daugherty <github@mdrxy.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dcode Related to `deepagents-code` fix A bug fix (PATCH) internal User is a member of the `langchain-ai` GitHub organization size: M 200-499 LOC

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant