Releases: slackapi/node-slack-sdk
@slack/webhook@7.0.7
Patch Changes
- 370cf22: chore(deps): bump axios to ^1.13.5
@slack/web-api@7.14.1
Patch Changes
- 370cf22: chore(deps): bump axios to ^1.13.5
@slack/web-api@7.14.0
Agent Thinking Steps: Display Tasks/Tools, Plans, and Markdown Text
🍿 Preview: Display as Plan
2026-02-11-thinking-steps-js-display-mode-plan.mov
🍿 Preview: Display as Timeline
2026-02-11-thinking-steps-js-display-mode-timeline.mov
📺 Chat Stream with 2 Display Mode
- Plan Display Mode
- Timeline Display Mode
👾 Chat Stream Structured Content
Now, you can display a mixture of structured content called "chunks":
- 🔠 Markdown Text Block to format your text with standard markdown
- ☑️ Task Card Block to display a single task, representing an AI Tool Call or general action
- 🗒️ Plan Block to display a collection of related tasks
- 📚 URL Sources Element to display references within a task card block
Available in:
- 🔌 API Methods:
chat.startStream,chat.appendStream, andchat.stopStream - 🛟 Chat Stream Helper:
const stream = new ChatStreamer(...);,stream.append(...)
📖 Documentation
- Announcements
- Guides
- Block Kit
- References
- API Methods: chat.startStream, chat.appendStream, and chat.stopStream
- Node SDK Reference
🍿 Getting Started
$ slack create
# → AI Agent App
# → Bolt for JavaScript
# Bolt for PythonMinor Changes
-
1fbce32: feat: add thinking steps support to streaming methods
chat.appendStream,chat.startStream, andchat.stopStreamnow accept achunksparameter for streaming structured content including markdown text, plan updates, and task updates.Related PRs:
- #2467 - accept chunks as arguments to chat.{start,append,stop}Stream methods
- #2470 - accept chunks as arguments to chat stream helper
- #2479 - add task display mode option to start of chat streams
- #2481 - export the chat streamer and related options from the package
Example
const stream = new ChatStreamer(client, client.logger, { channel: CHANNEL_ID, thread_ts: threadTs, }); await stream.append({ chunks: [ { type: "markdown_text", text: "**Hello!** I am starting to process your request...\n\n", }, ], }); await stream.append({ chunks: [ { type: "plan_update", title: "Processing tasks...", }, { type: "task_update", id: "task-1", title: "Fetching data from API", status: "complete", output: "Successfully retrieved 42 records", }, ], }); await stream.stop({ chunks: [ { type: "markdown_text", text: "\n\n---\n\n✅ **All tasks completed successfully!**\n", }, ], });
Patch Changes
@slack/types@2.20.0
Minor Changes
-
f1fb7bf: feat: add thinking steps types
Added types for Thinking Steps features:
- Block types:
PlanBlockandTaskCardfor displaying task progress in messages - Chunk types:
MarkdownTextChunk,PlanUpdateChunk,TaskUpdateChunkfor streaming - Source types:
UrlSourceElementsfor displaying sources within task cards
Related PRs:
- #2471 - add task_card and plan blocks
Example
await client.chat.postMessage({ channel: CHANNEL_ID, text: "Task progress update", blocks: [ { type: "plan", plan_id: "plan-123", title: "My Task", tasks: [ { type: "task_card", task_id: "task-124", title: "Task 1", status: "complete", }, { type: "task_card", task_id: "task-125", title: "Task 2", status: "pending", }, ], }, ], });
- Block types:
@slack/cli-hooks@1.3.0
Minor Changes
-
0abdc91: feat(cli-hooks): add default app and manifest watch config
This package now provides default watch configurations for automatic file watching during
slack run. The CLI will restart your app server when source files change and reinstall your app when the manifest changes.Requirements: These features require Slack CLI v3.12.0+ with file watching support.
Default Configuration
The following watch settings are provided automatically when using this package:
{ "config": { "watch": { "app": { "filter-regex": "\\.js$", "paths": ["."] }, "manifest": { "paths": ["manifest.json"] } } } }- app: Watches for JavaScript file changes to restart the app server
- manifest: Watches the manifest file for changes to reinstall the app
Note: Manifest watching requires a local manifest source in your
.slack/config.jsonfile. Remote manifests will not be updated on file changes.{ "manifest": { "source": "local" } }Custom Configurations
You can override these defaults in your
.slack/hooks.jsonfile to reduce the paths searched or change the file patterns. Read Watch Configurations for more options.TypeScript Development
TypeScript developers should run
tsc --watchin a separate terminal during development. This compiles.tsfiles to.json changes, and the default watch configuration will detect changes to the compileddist/*.jsfiles and restart the app server. This approach works best with the default settings.
Patch Changes
@slack/cli-test@2.2.1
Patch Changes
-
9318ec9: build(cli-test): document the compatible version of slack cli with each release
The minimum supported Slack CLI version is now documented in the README instead of being encoded in the package version using build metadata (e.g.
+cli.2.32.2). Build metadata is stripped by npm during publish, causing version conflicts with previously published versions and breaking the automated release workflow.
@slack/web-api@7.13.0
What's Changed
👾 Enhancements
🍿 Expand for a slackLists API method example
const list = await app.client.slackLists.create({
name: 'Test List - SlackLists API',
description_blocks: [
{
type: 'rich_text',
elements: [
{
type: 'rich_text_section',
elements: [
{
type: 'text',
text: 'List to keep track of tasks!',
},
],
},
],
},
],
schema: [
{
key: 'task_name',
name: 'Task Name',
type: 'text',
is_primary_column: true,
},
{
key: 'due_date',
name: 'Due Date',
type: 'date',
},
{
key: 'status',
name: 'Status',
type: 'select',
options: {
choices: [
{ value: 'not_started', label: 'Not Started', color: 'red' },
{ value: 'in_progress', label: 'In Progress', color: 'yellow' },
{ value: 'completed', label: 'Completed', color: 'green' },
],
},
},
{
key: 'assignee',
name: 'Assignee',
type: 'user',
},
],
});
console.log('List created:', list);
const listId = list.list_id;
// extract column IDs from the response (map key -> id)
const keyToId = {};
if (list.list_metadata?.schema) {
for (const col of list.list_metadata.schema) {
keyToId[col.key] = col.id;
}
}
const taskNameColId = keyToId['task_name'];
console.log('Column IDs:', keyToId);
const response = await app.client.slackLists.access.set({
list_id: listId,
access_level: 'write',
user_ids: ['U09G4FG3TRN'],
});
console.log('Access set:', response);
const createItemResponse = await app.client.slackLists.items.create({
list_id: listId,
initial_fields: [
{
column_id: taskNameColId,
rich_text: [
{
type: 'rich_text',
elements: [
{
type: 'rich_text_section',
elements: [
{
type: 'text',
text: 'CLI app unlink command',
},
],
},
],
},
],
},
],
});
console.log('Item created:', createItemResponse);
const itemId = createItemResponse.id;
if (itemId) {
await app.client.slackLists.items.info({
list_id: listId,
id: itemId,
include_is_subscribed: true,
});
console.log('Item info retrieved');
await app.client.slackLists.items.update({
list_id: listId,
cells: [
{
row_id: itemId,
column_id: taskNameColId,
checkbox: true,
},
],
});
console.log('Item updated');
}
const listItemsResponse = await app.client.slackLists.items.list({
list_id: listId,
limit: 50,
});
console.log('Items listed:', listItemsResponse);
const downloadStartResponse = await app.client.slackLists.download.start({
list_id: listId,
include_archived: false,
});
console.log('Download started:', downloadStartResponse);
const jobId = downloadStartResponse.job_id;
if (jobId) {
await app.client.slackLists.download.get({
list_id: listId,
job_id: jobId,
});
console.log('Download status retrieved');
}
if (itemId) {
await app.client.slackLists.items.delete({
list_id: listId,
id: itemId,
});
console.log('Item deleted');
}
await app.client.slackLists.items.deleteMultiple({
list_id: listId,
ids: ['item1', 'item2'],
});
console.log('Multiple items deleted');
await app.client.slackLists.access.delete({
list_id: listId,
user_ids: ['U09G4FG3TRN'],
});
console.log('Access removed');📚 Documentation
- docs(maintainers): update release steps with recent examples by @mwbrooks in #2442
- docs: fixes broken links in docs sidebar by @lukegalbraithrussell in #2444
- docs(web-api): note the chat stream buffer size default by @zimeg in #2418
🧰 Maintenance
New Contributors
Full Changelog: https://github.com/slackapi/node-slack-sdk/compare/@slack/types@2.19.0...@slack/web-api@7.13.0
Milestone: https://github.com/slackapi/node-slack-sdk/milestone/159
npm Release: https://www.npmjs.com/package/@slack/web-api/v/7.13.0
@slack/types@2.19.0
What's Changed
👾 Enhancements
feat(types): add underline to rich text section block element in #2414 - Thanks @zimeg!
feat(types): add table block in #2426 - Thanks @zimeg!
feat(types): update work object types in #2431 - Thanks @vegeris!
📚 Documentation
docs: link to streaming methods and context actions block reference in #2429 - Thanks @zimeg!
docs(types): remove note of maximum length for raw_text in #2440 - Thanks @zimeg!
🧰 Maintenance
chore(types): release @slack/types@2.19.0 in #2441 - Thanks @mwbrooks!
Full Changelog: https://github.com/slackapi/node-slack-sdk/compare/@slack/types@2.18.0...@slack/types@2.19.0
Milestone: https://github.com/slackapi/node-slack-sdk/milestone/158?closed=1
npm Release: https://www.npmjs.com/package/@slack/types/v/2.19.0
@slack/web-api@7.12.0
What's Changed
👾 Enhancements
- feat: add support to @slack/web-api for work objects by @vegeris in #2231
- web-api(fix): Update SearchMessagesArguments to support cursor pagination by @vegeris in #2361
🧰 Maintenance
📚 Changelog
https://docs.slack.dev/changelog/2025/10/22/work-objects/
Package: https://www.npmjs.com/package/@slack/web-api@7.12.0
Full Changelog: https://github.com/slackapi/node-slack-sdk/compare/@slack/web-api@7.11.0...@slack/web-api@7.12.0
Milestone: https://github.com/slackapi/node-slack-sdk/milestone/156?closed=1
@slack/types@2.18.0
What's Changed
👾 Enhancements
🧰 Maintenance
📚 Changelog
https://docs.slack.dev/changelog/2025/10/22/work-objects/
Package: https://www.npmjs.com/package/@slack/types/v/2.18.0
Full Changelog: https://github.com/slackapi/node-slack-sdk/compare/@slack/types@2.17.0...@slack/types@2.18.0
Milestone: https://github.com/slackapi/node-slack-sdk/milestone/157?closed=1