fix: dedup suffix chunks in terminal IME re-emission#772
Merged
Conversation
The onData dedup safety net used `lastCommittedText.startsWith(data)`, which only matched prefix chunks. When xterm split a committed IME phrase like "你好世界" into "你好" + "世界" across two onData calls, the suffix chunk slipped through and duplicated into the PTY. Track a consumed-prefix pointer on SessionEntry that advances as chunks are absorbed. Reset it when `instance.lastCommitTime` changes so prior-chunk state doesn't leak across commits. Suffix chunks now match against the remainder of the committed text. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Owner
Author
|
✅ VERIFIED — The audit finding is resolved. The diff adds |
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.
Closes #768
Summary
onDataIME dedup usedlastCommittedText.startsWith(data), which blocked prefix chunks but let suffix chunks slip through when xterm split a commit like"你好世界"into"你好" + "世界".lastCommittedConsumed+lastSeenCommitTime) onSessionEntryso each chunk is matched against the remainder oflastCommittedText, and the pointer resets when a new commit lands.Test plan
pnpm test src/components/Terminal— 282 tests, all pass (includes 4 new#768tests covering: split suffix blocking, unrelated text passthrough after full consumption, pointer reset across commits, and data longer than remainder)pnpm check:all— 17855 tests pass, build succeeds