fix(slack): pass token through native stream stop#573
Merged
Conversation
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
gr2m
approved these changes
Jun 1, 2026
19 tasks
patrick-chinchill
pushed a commit
to Chinchill-AI/chat-sdk-python
that referenced
this pull request
Jun 18, 2026
Port of upstream 999d268: SlackAdapter.stream() now passes the resolved bot token on every streamer.append() (markdown deltas and structured chunks) and on streamer.stop(), instead of only on the first append. Fixes not_authed from chat.startStream/chat.stopStream when a stream reaches stop() before a token-bearing append has flushed (e.g. fully buffered markdown). Composes with the existing multi-workspace plumbing: token is resolved once at stream entry via _get_token() (request-context installation token -> per-request resolved default -> static cache), then threaded through all streamer calls; a Python-only regression test locks the request-context token flowing through append and stop. https://claude.ai/code/session_013zwTcMek5rNqBTQvs2oF64
patrick-chinchill
added a commit
to Chinchill-AI/chat-sdk-python
that referenced
this pull request
Jun 18, 2026
,523,553,573) (#141) * feat(whatsapp): typing indicator support (vercel/chat#320) Port of upstream ffc43fc: - start_typing resolves the latest inbound message ID from the ThreadHistoryCache and posts a typing_indicator payload (which also marks the referenced message as read); no-ops with a warning when no inbound message context exists - Graph API default version bumped v21.0 -> v25.0 - _graph_api_request and the typing-indicator failure path raise AdapterError instead of RuntimeError/plain Error - new WhatsAppTypingIndicatorResponse TypedDict https://claude.ai/code/session_013zwTcMek5rNqBTQvs2oF64 * fix(gchat): collapse redundant autolink formatting for email links (vercel/chat#553) Port of upstream 177735a: when a link node's visible label equals its URL minus a mailto:/tel: scheme (e.g. an autolinked email address), from_ast emits the bare value as plain text instead of the verbose <url|text> form. Labels differing from the address keep <url|text>. The collapse sits between the linkText==url shortcut and this port's documented divergent branches (empty-label bare-URL emit and the text-(url) fallback for unsafe labels/URLs), matching upstream's check order; when it fires the output is plain text, so it never produces the malformed forms those divergences guard against. Our subset parser does not autolink bare emails/URLs (Known Limitations), so the ported collapse tests build the autolink-shaped node via the explicit markdown form, plus a Python-only round-trip test through the divergent <url|text> to_ast path. https://claude.ai/code/session_013zwTcMek5rNqBTQvs2oF64 * fix(slack): resolve reaction user display names (vercel/chat#523) Port of upstream b63c042: reaction events now resolve event.user.user_name / full_name / is_bot from the cached _lookup_user() (users.info) path instead of echoing the raw Slack user ID, falling back to the user ID (and is_bot=False) when lookup fails. Also completes the dispatch-key test's mock client/state contract (users_info + async state methods), mirroring the upstream test update - a bare AsyncMock's auto-children made users.info results async and leaked an orphaned coroutine through the new lookup. https://claude.ai/code/session_013zwTcMek5rNqBTQvs2oF64 * fix(slack): pass token through native stream stop (vercel/chat#573) Port of upstream 999d268: SlackAdapter.stream() now passes the resolved bot token on every streamer.append() (markdown deltas and structured chunks) and on streamer.stop(), instead of only on the first append. Fixes not_authed from chat.startStream/chat.stopStream when a stream reaches stop() before a token-bearing append has flushed (e.g. fully buffered markdown). Composes with the existing multi-workspace plumbing: token is resolved once at stream entry via _get_token() (request-context installation token -> per-request resolved default -> static cache), then threaded through all streamer calls; a Python-only regression test locks the request-context token flowing through append and stop. https://claude.ai/code/session_013zwTcMek5rNqBTQvs2oF64 * fix(slack): emit uploadedFileIds (camelCase) on raw to match upstream chat@4.30.0 Our Python-only "file-ids" surface (Slack-confirmed upload IDs exposed on RawMessage.raw so consumers can gate on actual delivery) was adopted upstream in chat@4.30.0, which emits the synthetic key as camelCase `uploadedFileIds`. We were emitting snake_case `uploaded_file_ids`, leaving a divergence at the serialization boundary. Rename the emitted dict key to `uploadedFileIds` so consumers reading the raw payload match the upstream/TS surface. The local variable stays snake_case (`uploaded_file_ids`) per the "snake_case internal, camelCase at boundary" rule; only the key merged into `raw` changes. Behavior is otherwise identical (None -> raw unchanged; empty list preserved as the zero-attachments signal). Updates the three Python-only tests that asserted the old key name (test_slack_api file-upload tests and the test_thread_faithful raw- propagation test, which uses Slack's surface as its example payload). https://claude.ai/code/session_013zwTcMek5rNqBTQvs2oF64 --------- Co-authored-by: Claude <noreply@anthropic.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
fixes #570
fixes Slack native streaming when the stream reaches
stop()before a token-bearing append has flushedSlackAdapter.stream()now passes the resolved bot token on everystreamer.append()and onstreamer.stop(), matching Slack's auth requirements and avoidingnot_authedresponses fromchat.startStream/chat.stopStreamadds regression coverage for buffered markdown streams and repeated structured chunk appends