Wrapped links leak OSC 8 escape markup in Ghostty
- Dominant language
- Shell
- Stars
- 11.2k
- Forks
- 1.9k
- Avg merge
- 14h 16m
- Merged PRs (30d)
- 6
Description
### Describe the bug
Long links in assistant Markdown sometimes render with the OSC 8 hyperlink control payload visible as text when the link wraps in Ghostty. The output is prefixed with text resembling:
```text
]8;;id=md-;https://example.com/a/very/long/path/https://example.com/a/very/long/path/
```
The saved assistant response contains only a valid plain URL, with no malformed Markdown or escape sequences. This indicates the corruption occurs in Copilot CLI's terminal rendering rather than in model output.
This appears related to the `1.0.68` changelog fix, "Preserve wrapped OSC 8 hyperlink IDs in terminal output," but still reproduces on `1.0.78`.
### Affected version
```text
GitHub Copilot CLI 1.0.78
```
### Steps to reproduce the behavior
1. Launch Copilot CLI in Ghostty.
2. Have an assistant response end with a bare URL long enough to wrap at the current terminal width.
3. Observe that the URL is preceded by visible OSC 8 payload text such as `]8;;id=md-...;` and may appear duplicated.
An affected session is:
```text
250a0930-cde5-4f39-bcdd-c40ef05656a0
```
The problem is visible in the final assistant response of that session.
### Expected behavior
The response should display one clean, clickable URL. OSC 8 control sequences and generated hyperlink IDs must never be visible, including when the URL wraps across terminal lines.
### Additional context
- Operating system: macOS (Darwin), Apple Silicon
- Terminal: Ghostty `1.3.2-main-+8252871b2`
- Environment: `TERM_PROGRAM=ghostty`, `TERM=xterm-ghostty`, `COLORTERM=truecolor`
- Workaround: launching with `FORCE_HYPERLINK=0 copilot` prevents OSC 8 hyperlinks from being emitted
- The local session event log records the assistant content as normal prose followed by a plain URL, confirming the malformed text is introduced during rendering
- Screenshot exists locally but was not attached because `gh issue create` does not support uploading issue-form attachments
Contributor guide
Research direction
Reproduce the issue by running Copilot CLI 1.0.78 in Ghostty with a long bare URL that wraps, using session 250a0930-cde5-4f39-bcdd-c40ef05656a0 as context. Compare the plain URL in the session event log with the terminal output and trace the OSC 8 rendering path; done means wrapped links display as one clean clickable URL without visible control payloads or duplicated text.
Written by the indexing model from the issue text.
Assessment
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100