Repository navigation
fix(tui): expand pasted text placeholders literally - #33700
Closed
itsybitsybootsy wants to merge 1 commit into
Closed
itsybitsybootsy wants to merge 1 commit into
itsybitsybootsy wants to merge 1 commit into
Conversation
result.replace with a string replacement treated $ sequences in pasted text ($$, $&, $`, $') as patterns, corrupting pasted code when expanding [Pasted ~N lines] placeholders for clipboard copy and the editor. Use a function replacement so the text is inserted verbatim, and route the editor command through the same helper.
This was referenced Jul 15, 2026
Contributor
|
Automated PR Cleanup Thank you for contributing to opencode. Due to the high volume of PRs from users and AI agents, we periodically close older PRs using automated criteria so maintainers can focus review time on the most active and community-supported contributions. This PR was closed because it matched the following cleanup criteria:
PRs created within the last month are not affected by this cleanup. If you believe this PR was closed incorrectly, or if you are still actively working on it, please leave a comment explaining why it should be reopened. A maintainer can review and reopen it if appropriate. Thanks again for taking the time to contribute. |
hunterchristian
added a commit
to chipp-ai/opencode
that referenced
this pull request
Sep 23, 2026
A pasted [Pasted ~N lines] placeholder in the prompt can now be expanded to its full content and collapsed back -- click it, or run "Expand/collapse pasted text" (prompt.paste.toggle) from the palette or a keybind. Ported from upstream anomalyco#8501 (325 reactions -- the highest of any issue found across a full survey of this repo's open issues). A trivial 1-file fix already merged upstream as anomalyco#39920 isn't even on this fork's history and is a one-way, no-collapse expand anyway, not the real ask. Richer attempts were all closed by the automated PR-cleanup bot and never reviewed: - PR anomalyco#41813 "paste expand toggle" is the primary source: a pasted- text part remembers its original placeholder so it can collapse again, the chip is swapped by deleting its extmark, replacing the selected text, and recreating the extmark over the new text. - PR anomalyco#33700 fixed a real, separate bug reused as-is: expandPastedTextPlaceholders substituted text back in via String.replace(str, str2), which treats $&/$$/etc. in the pasted text as special replacement patterns and silently corrupts it -- fixed by passing a replacer function instead of a literal string. - PR anomalyco#37052 contributed only the idea of a palette command to expand chips (its own version was one-way, expand-all); this fork's version is a proper per-chip toggle. New: older saved prompts with no stored placeholder can still be expanded (anomalyco#41813's version would lock them collapsed-only). Two pure functions (togglePastedText, replaceVirtualExtmarkText) were extracted into packages/tui/src/prompt/part.ts so anomalyco#41813's logic is unit- testable outside the full Prompt component. Known gaps: the full Prompt component's mouse-click path has no automated test (no existing fixture mounts it with SDK/sync/route providers -- checked manually against a bare textarea instead); clicking a chip's very last character can miss the same way it does in anomalyco#41813; an expanded chip is viewable but not editable in place. New tests in packages/tui/test/prompt/part.test.ts and a new packages/tui/test/prompt/paste-toggle.test.tsx (using this repo's existing testRender/mockMouse helpers). Verified against this fork's current dev (not just the agent's own stale worktree base): bun typecheck clean; full packages/tui suite 215 pass. Co-Authored-By: Claude Sonnet 5 <[email protected]>
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.
Issue for this PR
Closes #33699
Type of change
What does this PR do?
expandPastedTextPlaceholdersre-inflates a[Pasted ~N lines]placeholder withresult.replace(marker, part.text). When the second argument is a string,replacetreats$sequences in it as patterns, so pasted text containing$$,$&,$`, or$'came back changed.$&was the worst case: it re-inserted the placeholder string itself into the user's code.Passing a function instead (
() => part.text) inserts the text verbatim.The "open editor" command had its own copy of the old loop, so I pointed it at the same helper. The submit path was already safe (it uses the range-based
expandTrackedPastedText).How did you verify your code works?
Added tests in
packages/tui/test/prompt/part.test.tsfor$$,$&,$`,$', a repeated placeholder, and a non-pasted part. They fail on the old code and pass with the fix. The tui test suite has no new failures andtsgo --noEmitis clean.Screenshots / recordings
Not a UI change.
Checklist