feat(slack): assistant thread ops, paginated history/replies, and permalink#4934
Conversation
… permalink - New tools: slack_set_status, slack_set_title, slack_set_suggested_prompts (assistant.threads.*), slack_get_channel_history + slack_get_thread_replies (paginated conversations.history/replies via directExecution), slack_get_permalink - Wire all six as Slack block operations with subBlocks, conditions, params, outputs - Add scopes: assistant:write, im:history, mpim:read, mpim:history (+ consent labels) - Add manifest capabilities: action_read_history, action_assistant - Fix invite_to_conversation no_user error code; widen DM history scope hints - Regenerate tool docs and integrations catalog
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Read APIs: Slack AI assistant threads: Smaller fixes: The Slack block gains matching operations, UI fields (pagination, status, prompts, etc.), and param mapping for all six tools. Reviewed by Cursor Bugbot for commit 966ec8a. Configure here. |
Greptile SummaryThis PR adds six new Slack tools — three
Confidence Score: 4/5Safe to merge for all new assistant-thread and permalink operations, but DM/MPIM channel history reads will remain broken for OAuth users until the three missing scopes are added to the grant. The new tool implementations are well-structured — pagination, retry logic, input normalization, and error messages are all correct. The OAuth grant received assistant:write but still omits im:history, mpim:read, and mpim:history, which were explicitly called out in the PR description. Users who connect via OAuth and call get_channel_history or get_thread_replies against a DM or group-DM channel will hit missing_scope, be told to reconnect with those scopes, and then find that reconnecting still does not grant them — leaving them stuck. apps/sim/lib/oauth/oauth.ts — the three history scopes for DM and MPIM channels need to be added to the Slack OAuth grant before DM/MPIM paginated reads work end-to-end. Important Files Changed
Reviews (5): Last reviewed commit: "fix(slack): narrow set_status missing_sc..." | Re-trigger Greptile |
|
@greptile |
|
@cursor review |
… hints, reject empty suggested prompts - get_thread_replies: identify thread parent by ts === thread_ts instead of assuming index 0, so cursor-resumed pages (which omit the parent) no longer mislabel a reply as the parent - get_channel_history + get_thread_replies: include im:history/mpim:history in the missing_scope hint to match the OAuth grant and DM/MPIM reads - set_suggested_prompts: throw a clear error when no valid prompt is provided instead of silently calling Slack with an empty prompts array
…history scopes - Add resolvePositiveInt helper and use it for limit/maxPages in get_channel_history and get_thread_replies, so a non-numeric value (e.g. from an LLM) no longer becomes NaN and silently disables pagination (returning an empty success) - Remove im:history/mpim:read/mpim:history from the Slack OAuth grant — the Slack app does not have these scopes; assistant:write is the only added scope - Drop the explanatory inline comment in get_thread_replies
|
@greptile |
|
@cursor review |
…ed mode Matches the existing paginationCursor convention in the block — keeps the basic UI focused on channel + time filters while pagination internals live under advanced.
|
@greptile |
|
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 5d1fa8b. Configure here.
A user hitting missing_scope on set_status already has chat:write (long granted); the scope they actually need is assistant:write, which is also what set_title/set_suggested_prompts point to. Narrow the hint to assistant:write for accurate, consistent guidance.
|
@greptile addressed in 966ec8a — narrowed the |
|
@greptile |
|
@cursor review |
|
Makes sense — actionable error hints should point to what the user is actually missing, not enumerate all scopes that technically satisfy the requirement. Since |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 966ec8a. Configure here.
Summary
slack_set_status,slack_set_title,slack_set_suggested_prompts(assistant.threads.*) — covering the full Slack AI app thread APIslack_get_channel_historyandslack_get_thread_replies— paginatedconversations.history/conversations.repliesthat follownext_cursorinternally (withRetry-Afterhandling) instead of one page at a timeslack_get_permalink(chat.getPermalink)assistant:write,im:history,mpim:read,mpim:history(+ consent-modal labels) and manifest capabilitiesaction_read_history/action_assistantinvite_to_conversationto handle Slack's documentedno_usererror code; widen DM history scope hints onget_message/get_threadType of Change
Testing
Full
/validate-integrationaudit of all ~35 Slack tools against the live Slack Web API docs — no critical endpoint/method/field/response misalignments.tsc --noEmitclean,bun run lintclean,bun run check:api-validationpasses.Note:
list_canvasesfiltersfiles.listwithtypes=canvas, which isn't a documentedtypesvalue (Slack listsspacesfor canvases). This is pre-existing and unverified against a live workspace, so it's left unchanged — worth a follow-up check.Checklist