Uh oh!
There was an error while loading. Please reload this page.
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. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
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 |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
waleedlatif1
commented
Jun 10, 2026
waleedlatif1
commented
Jun 10, 2026
@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
Uh oh!
There was an error while loading. Please reload this page.
…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
waleedlatif1
commented
Jun 10, 2026
waleedlatif1
commented
Jun 10, 2026
@cursor review |
Uh oh!
There was an error while loading. Please reload this page.
…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.
waleedlatif1
commented
Jun 10, 2026
waleedlatif1
commented
Jun 10, 2026
@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.
waleedlatif1
commented
Jun 10, 2026
@greptile addressed in 966ec8a — narrowed the |
waleedlatif1
commented
Jun 10, 2026
waleedlatif1
commented
Jun 10, 2026
@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.
Uh oh!
There was an error while loading. Please reload this page.
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