Skip to content

feat(client): Charm v2 migration and OSC 8 hyperlinks#104

Merged
Cod-e-Codes merged 5 commits into
mainfrom
feat/charm-v2-osc8-hyperlinks
Jun 17, 2026
Merged

feat(client): Charm v2 migration and OSC 8 hyperlinks#104
Cod-e-Codes merged 5 commits into
mainfrom
feat/charm-v2-osc8-hyperlinks

Conversation

@Cod-e-Codes

@Cod-e-Codes Cod-e-Codes commented Jun 16, 2026

Copy link
Copy Markdown
Owner

Summary

  • Migrate the client TUI to Charm v2 (bubbletea/bubbles/lipgloss v2): tea.View, KeyPressMsg, setter APIs, and alt-screen background handling.
  • Add OSC 8 hyperlinks for wrapped transcript URLs ([BUG] Wrapped transcript URLs open truncated link on mouse click #103), with ASCII-normalized hrefs so click-to-open works on wrapped long URLs.
  • Route mouse wheel and scroll keys through the active viewport; guard overlays and scope read-receipt flush to the chat transcript.
  • Rework main chrome: full-width composer aligned with header/footer, black transcript base, shift-held mouse passthrough for terminal text selection, and multiline composer behavior (Ctrl+J via textarea.Update, arrow keys in multiline).
  • Fix composer background painting in placeholder and multiline modes so rows stay filled without hiding the virtual cursor.

Closes #103

Test plan

  • Connect on Windows Terminal; verify header/footer/composer alignment and solid input bar (empty, typing, and multiline)
  • Ctrl+J multiline: cursor visible, blinks, scroll follows; Up/Down move within composer when multiline
  • Shift+drag selects transcript text; click OSC 8 URL opens correct href (including wrapped long URLs)
  • Mouse wheel scrolls chat, help, and user list as appropriate
  • go test ./... and cd plugin/sdk && go test ./...

Upgrade Bubble Tea, Bubbles, and Lip Gloss to charm.land/*/v2 (tea.View,
KeyPressMsg, bubbles setters). Wrapped URL segments emit OSC 8 hyperlinks
with the full href on every fragment, addressing #103; manual click-to-open
remains as fallback on terminals without OSC 8.

Fix post-migration regressions: mouse wheel scroll routes to the active
viewport (help, DB menu, chat, modals); help/DB overlays block chat typing
indicators, URL clicks, and read-receipt flush; DB menu viewport resizes with
the terminal. Admin panel and plugin store enable mouse mode for wheel scroll.

Update ARCHITECTURE, CHANGELOG, TESTING, ROADMAP, agent skills, and tests.
Non-breaking hyphens used for wrap breakpoints were leaking into OSC 8
href attributes, producing Cod%E2%80%91e%E2%80%91Codes URLs on click.
Normalize hrefs via normalizeURLHyphens before emitting hyperlinks.
Use a single Input background for the full-width composer, route Ctrl+J
through textarea.Update for cursor tracking, and delegate arrow keys to
the composer when multiline.
…rsor

Paint full-width input background per composer line and only flatten
empty bubbles buffer rows before typing. Multiline rows keep the virtual
cursor and blink; placeholder buffer rows stay solid grey instead of
alt-screen black.
@Cod-e-Codes Cod-e-Codes added documentation Improvements or additions to documentation enhancement New feature or request dependencies Pull requests that update a dependency file go Pull requests that update go code labels Jun 16, 2026
Remove unused cursor style aliases left after v2 textinput styling,
replace deprecated lipgloss Style.Copy with Faint chaining, and avoid
string concatenation in strings.Builder.WriteString.
@Cod-e-Codes Cod-e-Codes merged commit 82ad0e3 into main Jun 17, 2026
6 checks passed
@Cod-e-Codes Cod-e-Codes deleted the feat/charm-v2-osc8-hyperlinks branch June 17, 2026 00:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation enhancement New feature or request go Pull requests that update go code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] Wrapped transcript URLs open truncated link on mouse click

1 participant