Files
hermes-agent/agent
Siddharth Balyan 2f1fabd4bf P24 part 1: MEDIA: parsed once in the backend; ::preview deleted (#129257)
* MEDIA: tags parsed once, in the backend; clients get clean text plus attachments

tui_gateway runs the gateway's extract_media on the live stream (a tag's
line is held until it completes, then the file goes out on that delta),
on message.interim/message.complete, and on history through the shared
history projection (session.resume and the REST messages route). The wire
contract gets an attachments list on message.delta/interim/complete,
TranscriptMessage and InflightTurn.

Desktop renders attachments as data parts (media player or file card, HTML
included) and in group rooms; the TUI lists them as link rows. The three
renderer MEDIA: parsers (chat parts, speech text, Artifacts) and the TUI
MEDIA line parser are deleted. Stored rows keep their raw tags.

* Delete the ::preview directive and its prompt text

The inline HTML widget, its registration and its hidden-turn talk-back go;
an HTML file delivered with MEDIA: is a normal file card with preview. The
desktop and TUI platform hints now describe attachments. The
transcript.directives area stays for ::onboarding and ::ask.

* MEDIA stream splitter works per line; group mirrors and sync keep files; TUI shows a file row when its line completes

- MediaStreamSplitter splits each completed line once, carrying code-fence state, so
  prose that says "media:", blank-line runs and [[audio_as_voice]] no longer stall
  the stream, and cost stays linear in reply length.
- The partial-tag hold applies only at a token start (or to an upper-case prefix),
  so words like "stream" are not held.
- Subagent child mirrors stream through a splitter too, flushed at tool and end.
- Group rooms: externally written rows and the ui_meta sync copy carry attachments;
  the echo guard compares files as well as text.
- TUI: a delta that brings a new file seals the text so far with its file row.
2026-09-30 18:17:57 +05:30
..
…
…
…
…
…
…
…