fix(relay): restore streaming delivery, Slack command parity, and status clearing (salvage of #69716) - #69747
Merged
Merged
Conversation
…ng-delivery # Conflicts: # gateway/relay/adapter.py # tests/gateway/relay/test_relay_adapter.py
Contributor
૮ >ﻌ< ა ci reviewran on 16e65a2 debug infoCI timingsCI timings · View jobWall time 9m27s vs 9m19s (+1.4%). 10 job(s) slower, 10 faster,
|
randlee
pushed a commit
to randlee/hermes-agent
that referenced
this pull request
Aug 11, 2026
…tus clearing (salvage of NousResearch#69716) (NousResearch#69747) * fix(gateway): restore relay streaming delivery * fix(relay): route Slack parent commands before session gates * fix(relay): clear Slack typing status after turns --------- Co-authored-by: Victor Kyriazakos <victor@rocketfueldev.com>
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
Salvage of #69716 (@victor-kyriazakos) over current
main, resolving the collision with #69721 which mergedsend_typingtwenty minutes after that PR opened. The contributor's three commits are carried as-is (authorship preserved in history); the merge commit reconciles the overlap.Restores relay-delivered Slack presentation and command parity:
_adapter_for_source()routes presentation callbacks (streamed edits, typing, tool progress) fordelivered_via_upstream_relayevents through the process-levelRelayAdapterinstead of a possibly-absent native platform adapter. Source identity, authz, and session semantics are unchanged; registered transport-adapter provenance stays highest priority (multiplexed-profile behavior preserved).edit_messageover relay: newop="edit"frames with_with_scope()+ Phase 1.5 platform tag, mirroringsend().stop_typing()emits an empty-contenttypingframe, Slack-gated (one-shot platforms are untouched)./hermesparent-command normalization at the wire boundary, matching the native Slack adapter (subcommand map,compact → /compress, free-form text passthrough,/hermes→/help). Non-Slack relay events unchanged.What the salvage changes vs. #69716
send_typing(from feat(relay): egress typing indicators through the connector (op="typing") #69721) — it wraps the frame in try/except ("typing is cosmetic, never breaks a turn"); dropped the PR's unguarded duplicate.stop_typingfor parity, plus a regression test that a transport failure at end-of-turn does not raise.typingrow now documentscontent?, with a semantics note (empty string = Slack status clear) — the lockstep edit feat(relay): egress typing indicators through the connector (op="typing") #69721 set precedent for.send_typingtest (superseded by main's five-test suite for the shipped implementation).Operational flag — deploy order
gateway-gateway #154 must deploy before this reaches any hosted gateway. A connector predating #154 hardcodes
status: "is typing…"for the typing op, so an empty clear frame would set the status instead of clearing it — a permanently stuck "is typing…" after every turn. The reverse order is safe. This is noted in thestop_typingdocstring and the contract doc.Verification
tests/gateway/relay/full suite: 188 passed (includes the merged adapter + contract-doc conformance).test_multiplex_profile_authz.py+test_stream_consumer.py+test_slack_relay_parent_command.py: 144 passed.ruff checkclean on all touched files;git diff --checkclean; no conflict markers.PYTHONPATHpinned to the checkout.Credit
All substantive work by @victor-kyriazakos in #69716; his commits are carried directly. The relay-delivered flows were exercised by the original author against a real shared Slack connector deployment (see #69716's verification section).
Infographic