Skip to content

fix(slack): keep the thread status indicator on assistant.threads.setStatus - #206

Merged
0xble merged 3 commits into
mainfrom
fix/slack-status-legacy
Sep 27, 2026
Merged

0xble merged 3 commits into
mainfrom
fix/slack-status-legacy

Conversation

@0xble

@0xble 0xble commented Sep 27, 2026

Copy link
Copy Markdown
Owner

Summary

Slack thread status ("is thinking…", live tool phrases, elapsed heartbeat) goes back to assistant.threads.setStatus, including the empty-string clear. Thread titles keep using agents.sessions.rename. Cherry-picked from upstream NousResearch/hermes-agent#110391 with authorship preserved (-x).

Motivation

Since slack-sdk 3.44 landed (fork bump to 3.44.1), _session_status_method routes status through agents.sessions.setStatus. That API takes a closed enum (active|processing|suspended|closed) and rejects every free-text status and the empty clear. The failure is debug-logged, so Slack users see no typing/status indicator at all. Io (LPG) has shown no indicator since its runtime picked this up. Upstream issue: #110374.

The alternative (#123457) keeps the new API and maps to processing/active, which drops custom status text and needs an explicit clear. That is a product change, so this PR takes the narrow restore until upstream decides.

Verification

  • scripts/run_tests.sh tests/gateway/test_slack.py: pass.
  • scripts/run_tests.sh tests/gateway/ -k slack: 728 passed, 0 failed, 2 skipped.
  • scripts/check_fork_patches.py --source-only: OK. Pre-push portable gate: pass.

Retirement

Drop this commit when upstream merges NousResearch#110391, NousResearch#123457, or an equivalent fix.

isair and others added 3 commits September 27, 2026 10:58
…Status

a5522f6 routed status through agents.sessions.setStatus whenever the
installed slack-sdk ships the typed method (>=3.44.0). That API accepts only
the closed enum active|processing|suspended|closed, while every Hermes call
site still sends the legacy free-text protocol: work-start phrases, per-tool
live_status updates, typing_status_text, and an empty string to clear. All of
them are rejected with invalid_arguments, and because status failures are
debug-logged by design the indicator vanished silently on every turn (NousResearch#110374).

Status now always uses the legacy method, which takes free text and auto-clears
on reply until its February 2027 deprecation. Titles keep using
agents.sessions.rename, which takes free text and was never affected.

Not migrated to the enum on purpose: processing does not auto-clear when the
app replies, so a turn ending without an explicit active would leave the
spinner up for up to an hour, re-opening the stuck-indicator class fixed by
 NousResearch#64621 / NousResearch#24117; and the new API has no equivalent for custom status text, so
adopting it drops live_status and typing_status_text. That trade is a product
decision, not a regression fix.

(cherry picked from commit 9b90259)
Fork-Patch: slack-status-legacy
@0xble
0xble merged commit e3926db into main Sep 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants