Conversation
This was referenced Aug 28, 2026
Contributor
Author
|
Closing this cumulative prototype now that #97681 captures the user contract, safety boundaries, and phased landing plan against the rebuilt Bot Mode tree. Its useful layer can be re-cut as a narrow current-main contribution after the foundation direction is agreed. |
9 tasks
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.
What this fixes
Group Chats can keep working after Desktop closes, including when their Bots
live on different Hermes gateways. Files were the missing part: a screenshot,
PDF, or document could not follow that work across gateways, so the same Group
Chat behaved differently depending on where its Bots happened to run.
This change makes file sharing part of autonomous Group Chats. Attach once in
the normal composer and every Bot selected for that message receives the same
verified file on its own gateway before its turn starts. No proprietary cloud
or public download URL sits between them.
If one gateway is too old, Hermes keeps the draft and names the gateway that
needs an update. It never drops the file, sends a text-only substitute, or
quietly gives only some Bots the attachment.
User flow
the same turn and the file remains available from room history.
The ordinary one-gateway and Desktop-driven paths keep their existing UX.
How the safety boundary works
recipients when the message is accepted.
admission, using a short-lived room/member/profile-scoped grant.
partial, or replayed batch cannot start a different run.
nor the scoped grant can be forwarded elsewhere.
carries bytes, local paths, API keys, or public URLs.
backstop.
Text-only RoomLink remains compatible with older gateways. File sharing is
enabled only after every participating gateway advertises the complete binary
contract.
Stack
This is the file-sharing increment on top of the autonomous Group Chat stack:
The commits stay separated so the same-gateway storage/UI work can be reviewed
or cherry-picked without the cross-gateway transfer.
Related: #89995 tracks gateway-hosted Group Chats. #89758 independently adds a
file-manager reveal affordance for data-URL attachment chips; this stack keeps
its transport and lazy viewer separate and should rebase onto that final chip
surface if it lands first.
Validation
Current implementation-head checks:
service, stop/restart, and two-gateway scoped transport
git diff --checkpassedconflicting writers converge without partial blobs
Before moving out of draft, the stack will also receive:
mainseparate-network multi-gateway Group Chats
duplicate delivery, stop, history, preview, and download checks with hashes
attachment-state crops
Deliberate boundaries
This does not create public file URLs, a general gateway file API, new network
topology, or a cloud relay. It does not change Group Chat ownership or speaker
policy. General attachment-chip presentation remains compatible with the
ongoing #89758 work.