feat(telegram): guest mode deliver_<token> media flow - #3
Closed
elphamale wants to merge 1 commit into
Closed
Conversation
Stacked on the two-phase reply foundation. Adds a token-backed staging flow for media in guest chats: native send_* wrappers stage files to TELEGRAM_HOME_CHANNEL to mint a Telegram file_id, on_processing_complete mints a short-lived deliver_<token> and edits the stub with a "tap to receive" button, and a new deliver_<token> query branch in _handle_guest_message_update answers immediately with the cached media (or a "something went wrong" result if the token is invalid/expired). tools/guest_mode_tool.py holds the token store (mint_token/resolve_token, 10-minute TTL, non-consuming resolve so repeat taps still work).
Owner
Author
|
Reopening directly against NousResearch/hermes-agent:main instead — stacking via a fork-internal base branch wasn't necessary. See replacement PR. |
elphamale
pushed a commit
that referenced
this pull request
Jul 20, 2026
elphamale
pushed a commit
that referenced
this pull request
Jul 25, 2026
…d curator The skill-authoring guide and curator prompt both reference descriptions as the primary discovery mechanism but never mentioned the 57-char system prompt truncation. Add explicit guidance: - Authoring guide: frontmatter docs, template comment, size limits, pitfall #3 with good/bad examples, verification checklist - Curator prompt: parenthetical noting the 57-char window when writing umbrella skill descriptions
elphamale
pushed a commit
that referenced
this pull request
Aug 3, 2026
… (re-review #3) The last_activity_at/description/provenance columns already live in SCHEMA_SQL and the column reconciler; existing DBs heal via the reconciler, but the version stamp must advance so downgrade/upgrade tooling sees the new layout. No version-literal test assertions exist (tests compare against the imported constant).
elphamale
pushed a commit
that referenced
this pull request
Aug 20, 2026
…age_id) Live-canary finding #3 (Alice, staging): the relay inbound leg is at-least-once. On WS re-handshake the connector replays its durable per-instance buffer; a long multi-tool turn (60-100s) straddling a quiet socket drop got its ORIGINAL inbound replayed after the turn finished, re-running the entire turn — the user saw the final answer posted 2-5x (each a separate execution, hence slightly different texts). Receipts: same msg text at history=0 in back-to-back sessions 121647/121840, no Slack-side retry on the connector (envelope dedupe never fired). Consumer-side idempotency: bounded FIFO seen-set (512) keyed by platform message identity; events without a message_id never dedupe (fail-open — dropping a real message is worse than rerunning one). No wire change; contract v1 untouched. Transplanted-from: victor-fork/feat/relay-slack-live-cards@73ce04ae75 (extracted for the rc.4 relay-fixes train; tests moved to a standalone file with no live-cards dependencies)
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.
Summary
mainon NousResearch/hermes-agentsend_*wrappers stage media toTELEGRAM_HOME_CHANNELin guest chats to mint a Telegramfile_idon_processing_completemints a short-liveddeliver_<token>and edits the stub with a "tap to receive" button instead of the plain text editdeliver_<token>query branch in_handle_guest_message_updateanswers immediately with the cached media (or a "something went wrong" result if the token is invalid/expired) — no stub, no edit cycletools/guest_mode_tool.pyholds the token store (mint_token/resolve_token, 10-minute TTL, non-consuming resolve so repeat taps still work)Test plan
tests/tools/test_guest_mode_tool.py— token mint/resolve/expiry coveragetests/gateway/test_telegram_guest_reply.pywith media-button OPC, valid-token, and expired-token branch tests_make_adapter()test helpers for the new_guest_turn_media/_guest_file_id_cacheinstance attributestests/ -k telegramsuite passes with no new regressions vs. a cleanmainbaseline🤖 Generated with Claude Code