Skip to content

feat(mirror): render Kitty image placeholders inline using snapshot pane images - #193

Closed
Codder13 wants to merge 4 commits into
AltanS:mainfrom
Codder13:feature/mirror-image-placeholders
Closed

Codder13 wants to merge 4 commits into
AltanS:mainfrom
Codder13:feature/mirror-image-placeholders

Conversation

@Codder13

@Codder13 Codder13 commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Fixes #180. Follow-up to #181.

Summary

Addresses the maintainer feedback on #181 regarding terminal mirror image placeholder rendering without polling /api/pane/:id/history on each tick:

  • PaneReadResponse: Extended with optional images?: readonly string[] carrying image URLs referenced in the pane's active session.
  • Bridge server: readPane extracts recent image URLs from the pane's journal store and includes them in the response.
  • Web UI & AnsiOutput: Flowed from paneLoader into AgentChat and AnsiOutput. Kitty Unicode placeholder clusters (U+10EEEE) render inline preview cards linked to /api/blobs/<hash> rather than generic [Image] text tags.
  • Tests: Added unit tests in bridge/server.test.ts and component tests in web/src/components/ansi-output.test.tsx.

@github-actions github-actions Bot added area: bridge Bun/TS bridge — Herdr socket, state engine, polling, REST area: journal Conversation history read from the agent's own session log area: web Phone PWA — UI, mirror, composer, service worker labels Sep 8, 2026
@AltanS

AltanS commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Thanks Denis, this lands, and it ships in 1.7.0. Your three commits are on main with your authorship, and two commits sit on top of them: the pane read carries no image field and the bridge does no journal work on the poll path, the web asks the history route once when a placeholder appears instead; a placeholder is matched to a picture by order and the card says so, since the Kitty image id in the diacritics maps to nothing in the journal; only a journal blob or inline image bytes are loaded, never a web address from the log; and blobs/<hash> crosses the pack link as a forwarded read, so a member's images work through the lead. Your diagnosis of the placeholder character and the omp alias were right on both points and are in as you wrote them. Credit is in the changelog under both PR numbers, and both PRs close when the tag is out.

@AltanS

AltanS commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Thanks Codder13, this is in 1.7.0 too, cherry-picked with your authorship kept. The inline placeholders from the snapshot images are what made the whole of issue 180 work on a phone, and the changelog names you for it. Closing this PR because the commits are on main, not because anything was left out. The ideas we did not take yet, Kitty image ids from the diacritics as cluster identity and an in-page lightbox, are written down as follow-ups and stay open for a later release.

@AltanS AltanS closed this Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: bridge Bun/TS bridge — Herdr socket, state engine, polling, REST area: journal Conversation history read from the agent's own session log area: web Phone PWA — UI, mirror, composer, service worker

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Kitty Image Protocol not rendering images in the PWA but it does render them in local Herdr instance

2 participants