From 2e490ce6142d66623d09f42b980d0abec6a00d68 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:23:24 -0800 Subject: [PATCH 01/24] feat: add slackbot.skills.create method Co-Authored-By: Claude --- .changeset/slackbot-skills-create.md | 5 ++ packages/web-api/src/methods.ts | 12 ++++ packages/web-api/src/types/request/index.ts | 1 + .../web-api/src/types/request/slackbot.ts | 42 +++++++++++ .../response/SlackbotSkillsCreateResponse.ts | 54 ++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 70 +++++++++++++++++++ 7 files changed, 185 insertions(+) create mode 100644 .changeset/slackbot-skills-create.md create mode 100644 packages/web-api/src/types/request/slackbot.ts create mode 100644 packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts create mode 100644 packages/web-api/test/types/methods/slackbot.test-d.ts diff --git a/.changeset/slackbot-skills-create.md b/.changeset/slackbot-skills-create.md new file mode 100644 index 000000000..10b4f9647 --- /dev/null +++ b/.changeset/slackbot-skills-create.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.create`](https://docs.slack.dev/reference/methods/slackbot.skills.create) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 640249ff2..73a38ebfe 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -234,6 +234,7 @@ import type { SearchAllArguments, SearchFilesArguments, SearchMessagesArguments, + SlackbotSkillsCreateArguments, SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, SlackListsCreateArguments, @@ -518,6 +519,7 @@ import type { SearchAllResponse, SearchFilesResponse, SearchMessagesResponse, + SlackbotSkillsCreateResponse, SlackListsAccessDeleteResponse, SlackListsAccessSetResponse, SlackListsCreateResponse, @@ -2350,6 +2352,16 @@ export abstract class Methods extends EventEmitter { messages: bindApiCall(this, 'search.messages'), }; + public readonly slackbot = { + skills: { + /** + * @description Creates a skill from markdown instructions, or turns an existing canvas the caller owns into a skill. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.create `slackbot.skills.create` API reference}. + */ + create: bindApiCall(this, 'slackbot.skills.create'), + }, + }; + public readonly slackLists = { access: { /** diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index f38ebbf54..dc2253690 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -291,6 +291,7 @@ export type { SearchFilesArguments, SearchMessagesArguments, } from './search'; +export type { SlackbotSkillsCreateArguments } from './slackbot'; export type { SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts new file mode 100644 index 000000000..c671707fb --- /dev/null +++ b/packages/web-api/src/types/request/slackbot.ts @@ -0,0 +1,42 @@ +import type { TokenOverridable } from './common'; + +// https://docs.slack.dev/reference/methods/slackbot.skills.create +export type SlackbotSkillsCreateArguments = TokenOverridable & { + /** @description Human-readable label. Max 255 characters; not unique. */ + display_name: string; +} & ( + | { + /** @description Markdown body of the skill. Send exactly one of `instructions` or `canvas_id`. */ + instructions: string; + canvas_id?: never; + } + | { + instructions?: never; + /** @description Canvas the caller owns to turn into a skill. Send exactly one of `instructions` or `canvas_id`. */ + canvas_id: string; + } + ) & { + /** @description When Slackbot should use the skill. Max 400 characters. */ + description?: string; + /** @description One of the skill categories. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management'; + /** @description Max 200 characters. May contain `{skill}`, which becomes the skill mention. */ + example_prompt?: string; + /** + * @description Apps the skill needs, capped at the caller's MCP server limit. Declaring an app doesn't grant + * access to it. + */ + mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; + }; diff --git a/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts new file mode 100644 index 000000000..09a6e94c8 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsCreateResponse = WebAPICallResult & { + error?: string; + invalid_mcp_servers?: InvalidmcpServer[]; + needed?: string; + ok?: boolean; + provided?: string; + skill?: Skill; + warning?: string; +}; + +export interface InvalidmcpServer { + app_id?: string; + server_id?: string; + service_type?: string; +} + +export interface Skill { + access?: string; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + example_prompt?: string; + id?: string; + instructions?: string; + is_official?: boolean; + library_count?: number; + mcp_servers?: McpServer[]; + name?: string; + permalink?: string; + type?: string; + usage_count?: number; + visibility?: string; +} + +export interface McpServer { + app_id?: string; + display_name?: string; + is_available?: boolean; + server_id?: string; + service_type?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index fe0e41999..791c9b66d 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -292,6 +292,7 @@ export { RtmStartResponse } from './RtmStartResponse'; export { SearchAllResponse } from './SearchAllResponse'; export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; +export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; export { SlackListsAccessSetResponse } from './SlackListsAccessSetResponse'; export { SlackListsCreateResponse } from './SlackListsCreateResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts new file mode 100644 index 000000000..f41cee435 --- /dev/null +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -0,0 +1,70 @@ +import { expectAssignable, expectError } from 'tsd'; +import { WebClient } from '../../../src/WebClient'; + +const web = new WebClient('TOKEN'); + +// slackbot.skills.create +// -- sad path +expectError(web.slackbot.skills.create()); // lacking argument +expectError(web.slackbot.skills.create({})); // empty argument +expectError( + web.slackbot.skills.create({ + instructions: '# Purpose', // missing display_name + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', // missing instructions or canvas_id + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', + instructions: '# Purpose', // both instructions and canvas_id + canvas_id: 'F1234', + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', + instructions: '# Purpose', + category: 'cooking', // invalid category + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', + instructions: '# Purpose', + mcp_servers: ['A1234'], // mcp_servers are objects + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', + instructions: '# Purpose', + mcp_servers: [{ app_id: 'A1234' }], // missing service_type + }), +); +// -- happy path +expectAssignable>([ + { + display_name: 'Daily priorities', + instructions: '# Purpose\nSuggest the three most important things to work on today.', + }, +]); +expectAssignable>([ + { + display_name: 'Daily priorities', + canvas_id: 'F1234', + }, +]); +expectAssignable>([ + { + display_name: 'Daily priorities', + instructions: '# Purpose\nSuggest the three most important things to work on today.', + description: 'Reviews information from Slack and your calendar to suggest priorities for the day.', + category: 'productivity', + example_prompt: 'Run {skill} for today', + mcp_servers: [{ service_type: 'app', app_id: 'A1234', server_id: 'Amcp1234' }], + }, +]); From 2a3e5d861400c350751e2af8add6f7d6384460c9 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:23:39 -0800 Subject: [PATCH 02/24] feat: add slackbot.skills.info method Co-Authored-By: Claude --- .changeset/slackbot-skills-info.md | 5 ++ packages/web-api/src/methods.ts | 7 +++ packages/web-api/src/types/request/index.ts | 5 +- .../web-api/src/types/request/slackbot.ts | 6 +++ .../response/SlackbotSkillsInfoResponse.ts | 47 +++++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 11 +++++ 7 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 .changeset/slackbot-skills-info.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts diff --git a/.changeset/slackbot-skills-info.md b/.changeset/slackbot-skills-info.md new file mode 100644 index 000000000..260e61a98 --- /dev/null +++ b/.changeset/slackbot-skills-info.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.info`](https://docs.slack.dev/reference/methods/slackbot.skills.info) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 73a38ebfe..707f2b08b 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -235,6 +235,7 @@ import type { SearchFilesArguments, SearchMessagesArguments, SlackbotSkillsCreateArguments, + SlackbotSkillsInfoArguments, SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, SlackListsCreateArguments, @@ -520,6 +521,7 @@ import type { SearchFilesResponse, SearchMessagesResponse, SlackbotSkillsCreateResponse, + SlackbotSkillsInfoResponse, SlackListsAccessDeleteResponse, SlackListsAccessSetResponse, SlackListsCreateResponse, @@ -2359,6 +2361,11 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.create `slackbot.skills.create` API reference}. */ create: bindApiCall(this, 'slackbot.skills.create'), + /** + * @description Returns one Slackbot skill, including its instructions. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. + */ + info: bindApiCall(this, 'slackbot.skills.info'), }, }; diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index dc2253690..85a88c2f2 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -291,7 +291,10 @@ export type { SearchFilesArguments, SearchMessagesArguments, } from './search'; -export type { SlackbotSkillsCreateArguments } from './slackbot'; +export type { + SlackbotSkillsCreateArguments, + SlackbotSkillsInfoArguments, +} from './slackbot'; export type { SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index c671707fb..f5b22f555 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -40,3 +40,9 @@ export type SlackbotSkillsCreateArguments = TokenOverridable & { */ mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; }; + +// https://docs.slack.dev/reference/methods/slackbot.skills.info +export interface SlackbotSkillsInfoArguments extends TokenOverridable { + /** @description Skill to fetch: a canvas file ID or a `builtin:` reference. */ + skill_id: string; +} diff --git a/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts new file mode 100644 index 000000000..430e21eb1 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts @@ -0,0 +1,47 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsInfoResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + skill?: Skill; + warning?: string; +}; + +export interface Skill { + access?: string; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + example_prompt?: string; + id?: string; + instructions?: string; + is_official?: boolean; + library_count?: number; + mcp_servers?: McpServer[]; + name?: string; + permalink?: string; + type?: string; + usage_count?: number; + visibility?: string; +} + +export interface McpServer { + app_id?: string; + display_name?: string; + is_available?: boolean; + server_id?: string; + service_type?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 791c9b66d..740c55c52 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -293,6 +293,7 @@ export { SearchAllResponse } from './SearchAllResponse'; export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; +export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; export { SlackListsAccessSetResponse } from './SlackListsAccessSetResponse'; export { SlackListsCreateResponse } from './SlackListsCreateResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index f41cee435..221d1d9dc 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -68,3 +68,14 @@ expectAssignable>([ mcp_servers: [{ service_type: 'app', app_id: 'A1234', server_id: 'Amcp1234' }], }, ]); + +// slackbot.skills.info +// -- sad path +expectError(web.slackbot.skills.info()); // lacking argument +expectError(web.slackbot.skills.info({})); // empty argument +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + }, +]); From 9388e228ec6b14b6350ddd485d25fe0d88b9b2de Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:23:55 -0800 Subject: [PATCH 03/24] feat: add slackbot.skills.update method Co-Authored-By: Claude --- .changeset/slackbot-skills-update.md | 5 ++ packages/web-api/src/methods.ts | 7 +++ packages/web-api/src/types/request/index.ts | 1 + .../web-api/src/types/request/slackbot.ts | 31 +++++++++++ .../response/SlackbotSkillsUpdateResponse.ts | 54 +++++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 42 +++++++++++++++ 7 files changed, 141 insertions(+) create mode 100644 .changeset/slackbot-skills-update.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts diff --git a/.changeset/slackbot-skills-update.md b/.changeset/slackbot-skills-update.md new file mode 100644 index 000000000..626ef663b --- /dev/null +++ b/.changeset/slackbot-skills-update.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.update`](https://docs.slack.dev/reference/methods/slackbot.skills.update) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 707f2b08b..67ad8e158 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -236,6 +236,7 @@ import type { SearchMessagesArguments, SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsUpdateArguments, SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, SlackListsCreateArguments, @@ -522,6 +523,7 @@ import type { SearchMessagesResponse, SlackbotSkillsCreateResponse, SlackbotSkillsInfoResponse, + SlackbotSkillsUpdateResponse, SlackListsAccessDeleteResponse, SlackListsAccessSetResponse, SlackListsCreateResponse, @@ -2366,6 +2368,11 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. */ info: bindApiCall(this, 'slackbot.skills.info'), + /** + * @description Changes a Slackbot skill's instructions or metadata. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.update `slackbot.skills.update` API reference}. + */ + update: bindApiCall(this, 'slackbot.skills.update'), }, }; diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 85a88c2f2..96e214256 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -294,6 +294,7 @@ export type { export type { SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsUpdateArguments, } from './slackbot'; export type { SlackListsAccessDeleteArguments, diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index f5b22f555..bc7a881fc 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -46,3 +46,34 @@ export interface SlackbotSkillsInfoArguments extends TokenOverridable { /** @description Skill to fetch: a canvas file ID or a `builtin:` reference. */ skill_id: string; } + +// https://docs.slack.dev/reference/methods/slackbot.skills.update +export interface SlackbotSkillsUpdateArguments extends TokenOverridable { + /** @description Skill to change. */ + skill_id: string; + /** @description Human-readable label. Max 255 characters. */ + display_name?: string; + /** @description Markdown that replaces the whole document. */ + instructions?: string; + /** @description When Slackbot should use the skill. Max 400 characters. Send an empty string to clear. */ + description?: string; + /** @description One of the skill categories. Send an empty string to clear. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management' + | ''; + /** @description Max 200 characters. May contain `{skill}`. Send an empty string to clear. */ + example_prompt?: string; + /** @description Apps the skill needs. Replaces the whole list; send `[]` to clear. */ + mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; +} diff --git a/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts new file mode 100644 index 000000000..bedf5cbc0 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsUpdateResponse = WebAPICallResult & { + error?: string; + invalid_mcp_servers?: InvalidmcpServer[]; + needed?: string; + ok?: boolean; + provided?: string; + skill?: Skill; + warning?: string; +}; + +export interface InvalidmcpServer { + app_id?: string; + server_id?: string; + service_type?: string; +} + +export interface Skill { + access?: string; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + example_prompt?: string; + id?: string; + instructions?: string; + is_official?: boolean; + library_count?: number; + mcp_servers?: McpServer[]; + name?: string; + permalink?: string; + type?: string; + usage_count?: number; + visibility?: string; +} + +export interface McpServer { + app_id?: string; + display_name?: string; + is_available?: boolean; + server_id?: string; + service_type?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 740c55c52..3bd37fa38 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -294,6 +294,7 @@ export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; +export { SlackbotSkillsUpdateResponse } from './SlackbotSkillsUpdateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; export { SlackListsAccessSetResponse } from './SlackListsAccessSetResponse'; export { SlackListsCreateResponse } from './SlackListsCreateResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index 221d1d9dc..7757fbbf5 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -79,3 +79,45 @@ expectAssignable>([ skill_id: 'F1234', }, ]); + +// slackbot.skills.update +// -- sad path +expectError(web.slackbot.skills.update()); // lacking argument +expectError(web.slackbot.skills.update({})); // empty argument +expectError( + web.slackbot.skills.update({ + display_name: 'Daily priorities', // missing skill_id + }), +); +expectError( + web.slackbot.skills.update({ + skill_id: 'F1234', + category: 'cooking', // invalid category + }), +); +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + }, +]); +expectAssignable>([ + { + skill_id: 'F1234', + description: '', + category: '', + example_prompt: '', + mcp_servers: [], + }, +]); +expectAssignable>([ + { + skill_id: 'F1234', + display_name: 'Daily priorities', + instructions: '# Purpose\nSuggest the three most important things to work on today.', + description: 'Reviews information from Slack and your calendar to suggest priorities for the day.', + category: 'productivity', + example_prompt: 'Run {skill} for today', + mcp_servers: [{ service_type: 'app', app_id: 'A1234' }], + }, +]); From 671248b9a0192af55f0da983ad29869c2cdb9551 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:24:10 -0800 Subject: [PATCH 04/24] feat: add slackbot.skills.list method Co-Authored-By: Claude --- .changeset/slackbot-skills-list.md | 5 ++ packages/web-api/src/methods.ts | 10 ++++ packages/web-api/src/types/request/index.ts | 1 + .../web-api/src/types/request/slackbot.ts | 35 +++++++++++++ .../response/SlackbotSkillsListResponse.ts | 52 +++++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 24 +++++++++ 7 files changed, 128 insertions(+) create mode 100644 .changeset/slackbot-skills-list.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsListResponse.ts diff --git a/.changeset/slackbot-skills-list.md b/.changeset/slackbot-skills-list.md new file mode 100644 index 000000000..4c7f84f23 --- /dev/null +++ b/.changeset/slackbot-skills-list.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.list`](https://docs.slack.dev/reference/methods/slackbot.skills.list) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 67ad8e158..81b563c9c 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -236,6 +236,7 @@ import type { SearchMessagesArguments, SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, @@ -523,6 +524,7 @@ import type { SearchMessagesResponse, SlackbotSkillsCreateResponse, SlackbotSkillsInfoResponse, + SlackbotSkillsListResponse, SlackbotSkillsUpdateResponse, SlackListsAccessDeleteResponse, SlackListsAccessSetResponse, @@ -2368,6 +2370,14 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. */ info: bindApiCall(this, 'slackbot.skills.info'), + /** + * @description Lists Slackbot skills from the caller's point of view. Instructions are not included. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.list `slackbot.skills.list` API reference}. + */ + list: bindApiCallWithOptionalArgument( + this, + 'slackbot.skills.list', + ), /** * @description Changes a Slackbot skill's instructions or metadata. * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.update `slackbot.skills.update` API reference}. diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 96e214256..aed4ed407 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -294,6 +294,7 @@ export type { export type { SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, } from './slackbot'; export type { diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index bc7a881fc..19ef9559c 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -1,3 +1,5 @@ +import type { OptionalArgument } from '../helpers'; + import type { TokenOverridable } from './common'; // https://docs.slack.dev/reference/methods/slackbot.skills.create @@ -47,6 +49,39 @@ export interface SlackbotSkillsInfoArguments extends TokenOverridable { skill_id: string; } +// https://docs.slack.dev/reference/methods/slackbot.skills.list +export type SlackbotSkillsListArguments = OptionalArgument< + TokenOverridable & { + /** + * @description `library`: skills enabled for the caller, including auto-enabled skills and skills from skill + * sets. `owned`: skills the caller created. `catalog`: the organization's official skills. + */ + filter?: 'catalog' | 'library' | 'owned'; + /** @description Only return skills in this category. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management'; + /** + * @description Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` + * attribute returned by a previous request's `response_metadata`. Must be used with the same `filter` and + * `category`. + */ + cursor?: string; + /** @description The maximum number of skills to return. Fewer may be returned even when more remain. */ + limit?: number; + } +>; + // https://docs.slack.dev/reference/methods/slackbot.skills.update export interface SlackbotSkillsUpdateArguments extends TokenOverridable { /** @description Skill to change. */ diff --git a/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts new file mode 100644 index 000000000..70b003d47 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsListResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + response_metadata?: ResponseMetadata; + skills?: Skill[]; + warning?: string; +}; + +export interface ResponseMetadata { + next_cursor?: string; +} + +export interface Skill { + access?: string; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + example_prompt?: string; + id?: string; + instructions?: string; + is_official?: boolean; + library_count?: number; + mcp_servers?: McpServer[]; + name?: string; + permalink?: string; + type?: string; + usage_count?: number; + visibility?: string; +} + +export interface McpServer { + app_id?: string; + display_name?: string; + is_available?: boolean; + server_id?: string; + service_type?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 3bd37fa38..df445250c 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -294,6 +294,7 @@ export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; +export { SlackbotSkillsListResponse } from './SlackbotSkillsListResponse'; export { SlackbotSkillsUpdateResponse } from './SlackbotSkillsUpdateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; export { SlackListsAccessSetResponse } from './SlackListsAccessSetResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index 7757fbbf5..411168ea8 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -80,6 +80,30 @@ expectAssignable>([ }, ]); +// slackbot.skills.list +// -- sad path +expectError( + web.slackbot.skills.list({ + filter: 'shared', // invalid filter + }), +); +expectError( + web.slackbot.skills.list({ + category: 'cooking', // invalid category + }), +); +// -- happy path +expectAssignable>([]); // no arg is fine +expectAssignable>([{}]); // empty arg is fine +expectAssignable>([ + { + filter: 'owned', + category: 'engineering', + cursor: 'dGVhbTpDMDYxRkE1UEI=', + limit: 100, + }, +]); + // slackbot.skills.update // -- sad path expectError(web.slackbot.skills.update()); // lacking argument From b389a93c665e1031ef9ce45679e03a7842f3967b Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:24:26 -0800 Subject: [PATCH 05/24] feat: add slackbot.skills.library.add method Co-Authored-By: Claude --- .changeset/slackbot-skills-library-add.md | 5 +++++ packages/web-api/src/methods.ts | 12 ++++++++++++ packages/web-api/src/types/request/index.ts | 1 + packages/web-api/src/types/request/slackbot.ts | 6 ++++++ .../SlackbotSkillsLibraryAddResponse.ts | 17 +++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 11 +++++++++++ 7 files changed, 53 insertions(+) create mode 100644 .changeset/slackbot-skills-library-add.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts diff --git a/.changeset/slackbot-skills-library-add.md b/.changeset/slackbot-skills-library-add.md new file mode 100644 index 000000000..e7984512b --- /dev/null +++ b/.changeset/slackbot-skills-library-add.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.library.add`](https://docs.slack.dev/reference/methods/slackbot.skills.library.add) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 81b563c9c..4b5a35ee4 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -236,6 +236,7 @@ import type { SearchMessagesArguments, SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsLibraryAddArguments, SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, SlackListsAccessDeleteArguments, @@ -524,6 +525,7 @@ import type { SearchMessagesResponse, SlackbotSkillsCreateResponse, SlackbotSkillsInfoResponse, + SlackbotSkillsLibraryAddResponse, SlackbotSkillsListResponse, SlackbotSkillsUpdateResponse, SlackListsAccessDeleteResponse, @@ -2370,6 +2372,16 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. */ info: bindApiCall(this, 'slackbot.skills.info'), + library: { + /** + * @description Turns a skill on in the caller's Slackbot library. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.library.add `slackbot.skills.library.add` API reference}. + */ + add: bindApiCall( + this, + 'slackbot.skills.library.add', + ), + }, /** * @description Lists Slackbot skills from the caller's point of view. Instructions are not included. * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.list `slackbot.skills.list` API reference}. diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index aed4ed407..a5255bd44 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -294,6 +294,7 @@ export type { export type { SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsLibraryAddArguments, SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, } from './slackbot'; diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index 19ef9559c..d45996c33 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -49,6 +49,12 @@ export interface SlackbotSkillsInfoArguments extends TokenOverridable { skill_id: string; } +// https://docs.slack.dev/reference/methods/slackbot.skills.library.add +export interface SlackbotSkillsLibraryAddArguments extends TokenOverridable { + /** @description Skill to turn on for the caller. */ + skill_id: string; +} + // https://docs.slack.dev/reference/methods/slackbot.skills.list export type SlackbotSkillsListArguments = OptionalArgument< TokenOverridable & { diff --git a/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts new file mode 100644 index 000000000..2f1802bb2 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts @@ -0,0 +1,17 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsLibraryAddResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + warning?: string; +}; diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index df445250c..94d4ec718 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -294,6 +294,7 @@ export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; +export { SlackbotSkillsLibraryAddResponse } from './SlackbotSkillsLibraryAddResponse'; export { SlackbotSkillsListResponse } from './SlackbotSkillsListResponse'; export { SlackbotSkillsUpdateResponse } from './SlackbotSkillsUpdateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index 411168ea8..bb6d0fc8a 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -80,6 +80,17 @@ expectAssignable>([ }, ]); +// slackbot.skills.library.add +// -- sad path +expectError(web.slackbot.skills.library.add()); // lacking argument +expectError(web.slackbot.skills.library.add({})); // empty argument +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + }, +]); + // slackbot.skills.list // -- sad path expectError( From d80d382c840318f13773e76a2a213c327aae51ea Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:24:43 -0800 Subject: [PATCH 06/24] feat: add slackbot.skills.library.remove method Co-Authored-By: Claude --- .changeset/slackbot-skills-library-remove.md | 5 +++++ packages/web-api/src/methods.ts | 10 ++++++++++ packages/web-api/src/types/request/index.ts | 1 + packages/web-api/src/types/request/slackbot.ts | 6 ++++++ .../SlackbotSkillsLibraryRemoveResponse.ts | 17 +++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 11 +++++++++++ 7 files changed, 51 insertions(+) create mode 100644 .changeset/slackbot-skills-library-remove.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsLibraryRemoveResponse.ts diff --git a/.changeset/slackbot-skills-library-remove.md b/.changeset/slackbot-skills-library-remove.md new file mode 100644 index 000000000..157b36d97 --- /dev/null +++ b/.changeset/slackbot-skills-library-remove.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.library.remove`](https://docs.slack.dev/reference/methods/slackbot.skills.library.remove) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 4b5a35ee4..bd8c9919e 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -237,6 +237,7 @@ import type { SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, SlackbotSkillsLibraryAddArguments, + SlackbotSkillsLibraryRemoveArguments, SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, SlackListsAccessDeleteArguments, @@ -526,6 +527,7 @@ import type { SlackbotSkillsCreateResponse, SlackbotSkillsInfoResponse, SlackbotSkillsLibraryAddResponse, + SlackbotSkillsLibraryRemoveResponse, SlackbotSkillsListResponse, SlackbotSkillsUpdateResponse, SlackListsAccessDeleteResponse, @@ -2381,6 +2383,14 @@ export abstract class Methods extends EventEmitter { this, 'slackbot.skills.library.add', ), + /** + * @description Turns a skill off in the caller's Slackbot library. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.library.remove `slackbot.skills.library.remove` API reference}. + */ + remove: bindApiCall( + this, + 'slackbot.skills.library.remove', + ), }, /** * @description Lists Slackbot skills from the caller's point of view. Instructions are not included. diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index a5255bd44..9a56d7330 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -295,6 +295,7 @@ export type { SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, SlackbotSkillsLibraryAddArguments, + SlackbotSkillsLibraryRemoveArguments, SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, } from './slackbot'; diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index d45996c33..dc4d55bc8 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -55,6 +55,12 @@ export interface SlackbotSkillsLibraryAddArguments extends TokenOverridable { skill_id: string; } +// https://docs.slack.dev/reference/methods/slackbot.skills.library.remove +export interface SlackbotSkillsLibraryRemoveArguments extends TokenOverridable { + /** @description Skill to turn off for the caller. */ + skill_id: string; +} + // https://docs.slack.dev/reference/methods/slackbot.skills.list export type SlackbotSkillsListArguments = OptionalArgument< TokenOverridable & { diff --git a/packages/web-api/src/types/response/SlackbotSkillsLibraryRemoveResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsLibraryRemoveResponse.ts new file mode 100644 index 000000000..439f16ce9 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsLibraryRemoveResponse.ts @@ -0,0 +1,17 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsLibraryRemoveResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + warning?: string; +}; diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 94d4ec718..135e01682 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -295,6 +295,7 @@ export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; export { SlackbotSkillsLibraryAddResponse } from './SlackbotSkillsLibraryAddResponse'; +export { SlackbotSkillsLibraryRemoveResponse } from './SlackbotSkillsLibraryRemoveResponse'; export { SlackbotSkillsListResponse } from './SlackbotSkillsListResponse'; export { SlackbotSkillsUpdateResponse } from './SlackbotSkillsUpdateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index bb6d0fc8a..71c3a62e1 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -91,6 +91,17 @@ expectAssignable>([ }, ]); +// slackbot.skills.library.remove +// -- sad path +expectError(web.slackbot.skills.library.remove()); // lacking argument +expectError(web.slackbot.skills.library.remove({})); // empty argument +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + }, +]); + // slackbot.skills.list // -- sad path expectError( From 75fa5d84376b96ac63e8ed0c1328ce4da5c8d06d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:25:00 -0800 Subject: [PATCH 07/24] feat: add admin.slackbot.skills.list method Co-Authored-By: Claude --- .changeset/admin-slackbot-skills-list.md | 5 ++ packages/web-api/src/methods.ts | 14 ++++++ .../src/types/request/admin/slackbot.ts | 44 +++++++++++++++++ packages/web-api/src/types/request/index.ts | 1 + .../AdminSlackbotSkillsListResponse.ts | 43 +++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../types/methods/admin.slackbot.test-d.ts | 47 +++++++++++++++++++ 7 files changed, 155 insertions(+) create mode 100644 .changeset/admin-slackbot-skills-list.md create mode 100644 packages/web-api/src/types/request/admin/slackbot.ts create mode 100644 packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts create mode 100644 packages/web-api/test/types/methods/admin.slackbot.test-d.ts diff --git a/.changeset/admin-slackbot-skills-list.md b/.changeset/admin-slackbot-skills-list.md new file mode 100644 index 000000000..78fa73b4f --- /dev/null +++ b/.changeset/admin-slackbot-skills-list.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`admin.slackbot.skills.list`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.list) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index bd8c9919e..cdbef2bc1 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -62,6 +62,7 @@ import type { AdminRolesAddAssignmentsArguments, AdminRolesListAssignmentsArguments, AdminRolesRemoveAssignmentsArguments, + AdminSlackbotSkillsListArguments, AdminTeamsAdminsListArguments, AdminTeamsCreateArguments, AdminTeamsListArguments, @@ -353,6 +354,7 @@ import type { AdminRolesAddAssignmentsResponse, AdminRolesListAssignmentsResponse, AdminRolesRemoveAssignmentsResponse, + AdminSlackbotSkillsListResponse, AdminTeamsAdminsListResponse, AdminTeamsCreateResponse, AdminTeamsListResponse, @@ -1130,6 +1132,18 @@ export abstract class Methods extends EventEmitter { 'admin.roles.removeAssignments', ), }, + slackbot: { + skills: { + /** + * @description Lists metadata for Slackbot skills owned by an organization. + * @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.list `admin.slackbot.skills.list` API reference}. + */ + list: bindApiCallWithOptionalArgument( + this, + 'admin.slackbot.skills.list', + ), + }, + }, teams: { admins: { /** diff --git a/packages/web-api/src/types/request/admin/slackbot.ts b/packages/web-api/src/types/request/admin/slackbot.ts new file mode 100644 index 000000000..f9a494173 --- /dev/null +++ b/packages/web-api/src/types/request/admin/slackbot.ts @@ -0,0 +1,44 @@ +import type { OptionalArgument } from '../../helpers'; + +import type { TokenOverridable } from '../common'; + +// https://docs.slack.dev/reference/methods/admin.slackbot.skills.list +export type AdminSlackbotSkillsListArguments = OptionalArgument< + TokenOverridable & { + /** @description Only return skills in this category. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management'; + /** + * @description Continuation from the previous page. Keep all filters and sorting unchanged. Pages can be empty + * while a continuation remains; continue until next_cursor is empty. Changes during traversal may move results; + * pagination is not a snapshot. + */ + cursor?: string; + /** @description The maximum number of skills to return. Fewer may be returned even when more remain. */ + limit?: number; + /** @description Only return skills created by these users. Accepts U or W user IDs. */ + creator_ids?: string[]; + /** @description Filter by publication to the org catalog. */ + publish_status?: 'all' | 'published' | 'unpublished'; + /** @description Filter by org deployment, independently of publication. */ + auto_enabled_status?: 'all' | 'disabled' | 'enabled'; + /** + * @description Sort across the inventory. Name uses case-insensitive ordering. Unedited skills use their creation + * date for date_updated sorting. + */ + sort?: 'date_updated' | 'name' | 'usage_count'; + /** @description Sort direction; file ID breaks ties. */ + sort_dir?: 'asc' | 'desc'; + } +>; diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 9a56d7330..e09e02c47 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -74,6 +74,7 @@ export type { AdminRolesListAssignmentsArguments, AdminRolesRemoveAssignmentsArguments, } from './admin/roles'; +export type { AdminSlackbotSkillsListArguments } from './admin/slackbot'; export type { AdminTeamsAdminsListArguments, AdminTeamsCreateArguments, diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts new file mode 100644 index 000000000..84d77773a --- /dev/null +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts @@ -0,0 +1,43 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type AdminSlackbotSkillsListResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + response_metadata?: ResponseMetadata; + skills?: Skill[]; + warning?: string; +}; + +export interface ResponseMetadata { + next_cursor?: string; +} + +export interface Skill { + auto_enabled?: AutoEnabled; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + id?: string; + is_official?: boolean; + library_count?: number; + usage_count?: number; + visibility?: string; +} + +export interface AutoEnabled { + permission_type?: string; + usergroup_ids?: string[]; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 135e01682..898b206b2 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -66,6 +66,7 @@ export { AdminInviteRequestsListResponse } from './AdminInviteRequestsListRespon export { AdminRolesAddAssignmentsResponse } from './AdminRolesAddAssignmentsResponse'; export { AdminRolesListAssignmentsResponse } from './AdminRolesListAssignmentsResponse'; export { AdminRolesRemoveAssignmentsResponse } from './AdminRolesRemoveAssignmentsResponse'; +export { AdminSlackbotSkillsListResponse } from './AdminSlackbotSkillsListResponse'; export { AdminTeamsAdminsListResponse } from './AdminTeamsAdminsListResponse'; export { AdminTeamsCreateResponse } from './AdminTeamsCreateResponse'; export { AdminTeamsListResponse } from './AdminTeamsListResponse'; diff --git a/packages/web-api/test/types/methods/admin.slackbot.test-d.ts b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts new file mode 100644 index 000000000..33c62162e --- /dev/null +++ b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts @@ -0,0 +1,47 @@ +import { expectAssignable, expectError } from 'tsd'; +import { WebClient } from '../../../src/WebClient'; + +const web = new WebClient('TOKEN'); + +// admin.slackbot.skills.list +// -- sad path +expectError( + web.admin.slackbot.skills.list({ + category: 'cooking', // invalid category + }), +); +expectError( + web.admin.slackbot.skills.list({ + publish_status: 'draft', // invalid publish_status + }), +); +expectError( + web.admin.slackbot.skills.list({ + auto_enabled_status: 'on', // invalid auto_enabled_status + }), +); +expectError( + web.admin.slackbot.skills.list({ + sort: 'date_created', // invalid sort + }), +); +expectError( + web.admin.slackbot.skills.list({ + sort_dir: 'up', // invalid sort_dir + }), +); +// -- happy path +expectAssignable>([]); // no arg is fine +expectAssignable>([{}]); // empty arg is fine +expectAssignable>([ + { + category: 'productivity', + cursor: 'dXNlcjpVMDYxTkZUVDI=', + limit: 100, + creator_ids: ['U1234', 'W1234'], + publish_status: 'published', + auto_enabled_status: 'enabled', + sort: 'usage_count', + sort_dir: 'desc', + }, +]); From 083624caa64bf70aab113e467284dcf461681f99 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:25:17 -0800 Subject: [PATCH 08/24] feat: add admin.slackbot.skills.publish method Co-Authored-By: Claude --- .changeset/admin-slackbot-skills-publish.md | 5 ++++ packages/web-api/src/methods.ts | 10 ++++++++ .../src/types/request/admin/slackbot.ts | 6 +++++ packages/web-api/src/types/request/index.ts | 5 +++- .../AdminSlackbotSkillsPublishResponse.ts | 23 +++++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../types/methods/admin.slackbot.test-d.ts | 11 +++++++++ 7 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 .changeset/admin-slackbot-skills-publish.md create mode 100644 packages/web-api/src/types/response/AdminSlackbotSkillsPublishResponse.ts diff --git a/.changeset/admin-slackbot-skills-publish.md b/.changeset/admin-slackbot-skills-publish.md new file mode 100644 index 000000000..f94a9303b --- /dev/null +++ b/.changeset/admin-slackbot-skills-publish.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`admin.slackbot.skills.publish`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.publish) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index cdbef2bc1..7ce734df1 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -63,6 +63,7 @@ import type { AdminRolesListAssignmentsArguments, AdminRolesRemoveAssignmentsArguments, AdminSlackbotSkillsListArguments, + AdminSlackbotSkillsPublishArguments, AdminTeamsAdminsListArguments, AdminTeamsCreateArguments, AdminTeamsListArguments, @@ -355,6 +356,7 @@ import type { AdminRolesListAssignmentsResponse, AdminRolesRemoveAssignmentsResponse, AdminSlackbotSkillsListResponse, + AdminSlackbotSkillsPublishResponse, AdminTeamsAdminsListResponse, AdminTeamsCreateResponse, AdminTeamsListResponse, @@ -1142,6 +1144,14 @@ export abstract class Methods extends EventEmitter { this, 'admin.slackbot.skills.list', ), + /** + * @description Publishes Slackbot skills to an organization's catalog. + * @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.publish `admin.slackbot.skills.publish` API reference}. + */ + publish: bindApiCall( + this, + 'admin.slackbot.skills.publish', + ), }, }, teams: { diff --git a/packages/web-api/src/types/request/admin/slackbot.ts b/packages/web-api/src/types/request/admin/slackbot.ts index f9a494173..5c1f4b745 100644 --- a/packages/web-api/src/types/request/admin/slackbot.ts +++ b/packages/web-api/src/types/request/admin/slackbot.ts @@ -42,3 +42,9 @@ export type AdminSlackbotSkillsListArguments = OptionalArgument< sort_dir?: 'asc' | 'desc'; } >; + +// https://docs.slack.dev/reference/methods/admin.slackbot.skills.publish +export interface AdminSlackbotSkillsPublishArguments extends TokenOverridable { + /** @description One to 50 skill IDs. Successful items are not rolled back if other items fail. */ + skill_ids: string[]; +} diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index e09e02c47..0d3db2b7e 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -74,7 +74,10 @@ export type { AdminRolesListAssignmentsArguments, AdminRolesRemoveAssignmentsArguments, } from './admin/roles'; -export type { AdminSlackbotSkillsListArguments } from './admin/slackbot'; +export type { + AdminSlackbotSkillsListArguments, + AdminSlackbotSkillsPublishArguments, +} from './admin/slackbot'; export type { AdminTeamsAdminsListArguments, AdminTeamsCreateArguments, diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsPublishResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsPublishResponse.ts new file mode 100644 index 000000000..a548f452f --- /dev/null +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsPublishResponse.ts @@ -0,0 +1,23 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type AdminSlackbotSkillsPublishResponse = WebAPICallResult & { + error?: string; + failed_skills?: FailedSkill[]; + needed?: string; + ok?: boolean; + provided?: string; + warning?: string; +}; + +export interface FailedSkill { + error?: string; + skill_id?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 898b206b2..df83c5187 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -67,6 +67,7 @@ export { AdminRolesAddAssignmentsResponse } from './AdminRolesAddAssignmentsResp export { AdminRolesListAssignmentsResponse } from './AdminRolesListAssignmentsResponse'; export { AdminRolesRemoveAssignmentsResponse } from './AdminRolesRemoveAssignmentsResponse'; export { AdminSlackbotSkillsListResponse } from './AdminSlackbotSkillsListResponse'; +export { AdminSlackbotSkillsPublishResponse } from './AdminSlackbotSkillsPublishResponse'; export { AdminTeamsAdminsListResponse } from './AdminTeamsAdminsListResponse'; export { AdminTeamsCreateResponse } from './AdminTeamsCreateResponse'; export { AdminTeamsListResponse } from './AdminTeamsListResponse'; diff --git a/packages/web-api/test/types/methods/admin.slackbot.test-d.ts b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts index 33c62162e..d68cc4101 100644 --- a/packages/web-api/test/types/methods/admin.slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts @@ -45,3 +45,14 @@ expectAssignable>([ sort_dir: 'desc', }, ]); + +// admin.slackbot.skills.publish +// -- sad path +expectError(web.admin.slackbot.skills.publish()); // lacking argument +expectError(web.admin.slackbot.skills.publish({})); // empty argument +// -- happy path +expectAssignable>([ + { + skill_ids: ['F1234', 'F5678'], + }, +]); From 400ab1904172d2f018ae9246f36e2bb3623a42b4 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:25:34 -0800 Subject: [PATCH 09/24] feat: add admin.slackbot.skills.setAutoEnabled method Co-Authored-By: Claude --- .../admin-slackbot-skills-setautoenabled.md | 5 +++ packages/web-api/src/methods.ts | 10 +++++ .../src/types/request/admin/slackbot.ts | 13 ++++++ packages/web-api/src/types/request/index.ts | 1 + ...minSlackbotSkillsSetAutoEnabledResponse.ts | 21 ++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../types/methods/admin.slackbot.test-d.ts | 41 +++++++++++++++++++ 7 files changed, 92 insertions(+) create mode 100644 .changeset/admin-slackbot-skills-setautoenabled.md create mode 100644 packages/web-api/src/types/response/AdminSlackbotSkillsSetAutoEnabledResponse.ts diff --git a/.changeset/admin-slackbot-skills-setautoenabled.md b/.changeset/admin-slackbot-skills-setautoenabled.md new file mode 100644 index 000000000..025be326b --- /dev/null +++ b/.changeset/admin-slackbot-skills-setautoenabled.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`admin.slackbot.skills.setAutoEnabled`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.setAutoEnabled) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 7ce734df1..6edfccce6 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -64,6 +64,7 @@ import type { AdminRolesRemoveAssignmentsArguments, AdminSlackbotSkillsListArguments, AdminSlackbotSkillsPublishArguments, + AdminSlackbotSkillsSetAutoEnabledArguments, AdminTeamsAdminsListArguments, AdminTeamsCreateArguments, AdminTeamsListArguments, @@ -357,6 +358,7 @@ import type { AdminRolesRemoveAssignmentsResponse, AdminSlackbotSkillsListResponse, AdminSlackbotSkillsPublishResponse, + AdminSlackbotSkillsSetAutoEnabledResponse, AdminTeamsAdminsListResponse, AdminTeamsCreateResponse, AdminTeamsListResponse, @@ -1152,6 +1154,14 @@ export abstract class Methods extends EventEmitter { this, 'admin.slackbot.skills.publish', ), + /** + * @description Sets who a Slackbot skill is automatically turned on for. + * @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.setAutoEnabled `admin.slackbot.skills.setAutoEnabled` API reference}. + */ + setAutoEnabled: bindApiCall< + AdminSlackbotSkillsSetAutoEnabledArguments, + AdminSlackbotSkillsSetAutoEnabledResponse + >(this, 'admin.slackbot.skills.setAutoEnabled'), }, }, teams: { diff --git a/packages/web-api/src/types/request/admin/slackbot.ts b/packages/web-api/src/types/request/admin/slackbot.ts index 5c1f4b745..b4b840e37 100644 --- a/packages/web-api/src/types/request/admin/slackbot.ts +++ b/packages/web-api/src/types/request/admin/slackbot.ts @@ -48,3 +48,16 @@ export interface AdminSlackbotSkillsPublishArguments extends TokenOverridable { /** @description One to 50 skill IDs. Successful items are not rolled back if other items fail. */ skill_ids: string[]; } + +// https://docs.slack.dev/reference/methods/admin.slackbot.skills.setAutoEnabled +export interface AdminSlackbotSkillsSetAutoEnabledArguments extends TokenOverridable { + /** @description Canvas skill to deploy. */ + skill_id: string; + /** @description Deployment audience. */ + permission_type: 'everyone' | 'named_entities' | 'no_one'; + /** + * @description One to 100 user groups for named_entities. Duplicates count toward the input limit and are stored + * once. Omit for other permission types. + */ + usergroup_ids?: string[]; +} diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 0d3db2b7e..209f391b8 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -77,6 +77,7 @@ export type { export type { AdminSlackbotSkillsListArguments, AdminSlackbotSkillsPublishArguments, + AdminSlackbotSkillsSetAutoEnabledArguments, } from './admin/slackbot'; export type { AdminTeamsAdminsListArguments, diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsSetAutoEnabledResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsSetAutoEnabledResponse.ts new file mode 100644 index 000000000..7368cd843 --- /dev/null +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsSetAutoEnabledResponse.ts @@ -0,0 +1,21 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type AdminSlackbotSkillsSetAutoEnabledResponse = WebAPICallResult & { + error?: string; + invalid_usergroup_ids?: string[]; + needed?: string; + ok?: boolean; + permission_type?: string; + provided?: string; + skill_id?: string; + usergroup_ids?: string[]; + warning?: string; +}; diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index df83c5187..c8c10319c 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -68,6 +68,7 @@ export { AdminRolesListAssignmentsResponse } from './AdminRolesListAssignmentsRe export { AdminRolesRemoveAssignmentsResponse } from './AdminRolesRemoveAssignmentsResponse'; export { AdminSlackbotSkillsListResponse } from './AdminSlackbotSkillsListResponse'; export { AdminSlackbotSkillsPublishResponse } from './AdminSlackbotSkillsPublishResponse'; +export { AdminSlackbotSkillsSetAutoEnabledResponse } from './AdminSlackbotSkillsSetAutoEnabledResponse'; export { AdminTeamsAdminsListResponse } from './AdminTeamsAdminsListResponse'; export { AdminTeamsCreateResponse } from './AdminTeamsCreateResponse'; export { AdminTeamsListResponse } from './AdminTeamsListResponse'; diff --git a/packages/web-api/test/types/methods/admin.slackbot.test-d.ts b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts index d68cc4101..a0f4d879c 100644 --- a/packages/web-api/test/types/methods/admin.slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts @@ -56,3 +56,44 @@ expectAssignable>([ skill_ids: ['F1234', 'F5678'], }, ]); + +// admin.slackbot.skills.setAutoEnabled +// -- sad path +expectError(web.admin.slackbot.skills.setAutoEnabled()); // lacking argument +expectError(web.admin.slackbot.skills.setAutoEnabled({})); // empty argument +expectError( + web.admin.slackbot.skills.setAutoEnabled({ + permission_type: 'everyone', // missing skill_id + }), +); +expectError( + web.admin.slackbot.skills.setAutoEnabled({ + skill_id: 'F1234', // missing permission_type + }), +); +expectError( + web.admin.slackbot.skills.setAutoEnabled({ + skill_id: 'F1234', + permission_type: 'some_people', // invalid permission_type + }), +); +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + permission_type: 'everyone', + }, +]); +expectAssignable>([ + { + skill_id: 'F1234', + permission_type: 'named_entities', + usergroup_ids: ['S1234'], + }, +]); +expectAssignable>([ + { + skill_id: 'F1234', + permission_type: 'no_one', + }, +]); From 0ce941abd622a6ab821faba5a9820765b3167f6a Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:25:51 -0800 Subject: [PATCH 10/24] feat: add admin.slackbot.skills.unpublish method Co-Authored-By: Claude --- .changeset/admin-slackbot-skills-unpublish.md | 5 ++++ packages/web-api/src/methods.ts | 10 ++++++++ .../src/types/request/admin/slackbot.ts | 6 +++++ packages/web-api/src/types/request/index.ts | 1 + .../AdminSlackbotSkillsUnpublishResponse.ts | 23 +++++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../types/methods/admin.slackbot.test-d.ts | 11 +++++++++ 7 files changed, 57 insertions(+) create mode 100644 .changeset/admin-slackbot-skills-unpublish.md create mode 100644 packages/web-api/src/types/response/AdminSlackbotSkillsUnpublishResponse.ts diff --git a/.changeset/admin-slackbot-skills-unpublish.md b/.changeset/admin-slackbot-skills-unpublish.md new file mode 100644 index 000000000..69482fa81 --- /dev/null +++ b/.changeset/admin-slackbot-skills-unpublish.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`admin.slackbot.skills.unpublish`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.unpublish) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 6edfccce6..81e58e5d2 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -65,6 +65,7 @@ import type { AdminSlackbotSkillsListArguments, AdminSlackbotSkillsPublishArguments, AdminSlackbotSkillsSetAutoEnabledArguments, + AdminSlackbotSkillsUnpublishArguments, AdminTeamsAdminsListArguments, AdminTeamsCreateArguments, AdminTeamsListArguments, @@ -359,6 +360,7 @@ import type { AdminSlackbotSkillsListResponse, AdminSlackbotSkillsPublishResponse, AdminSlackbotSkillsSetAutoEnabledResponse, + AdminSlackbotSkillsUnpublishResponse, AdminTeamsAdminsListResponse, AdminTeamsCreateResponse, AdminTeamsListResponse, @@ -1162,6 +1164,14 @@ export abstract class Methods extends EventEmitter { AdminSlackbotSkillsSetAutoEnabledArguments, AdminSlackbotSkillsSetAutoEnabledResponse >(this, 'admin.slackbot.skills.setAutoEnabled'), + /** + * @description Removes Slackbot skills from the org catalog, preserving access, libraries, and deployments. + * @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.unpublish `admin.slackbot.skills.unpublish` API reference}. + */ + unpublish: bindApiCall( + this, + 'admin.slackbot.skills.unpublish', + ), }, }, teams: { diff --git a/packages/web-api/src/types/request/admin/slackbot.ts b/packages/web-api/src/types/request/admin/slackbot.ts index b4b840e37..5e6756b84 100644 --- a/packages/web-api/src/types/request/admin/slackbot.ts +++ b/packages/web-api/src/types/request/admin/slackbot.ts @@ -61,3 +61,9 @@ export interface AdminSlackbotSkillsSetAutoEnabledArguments extends TokenOverrid */ usergroup_ids?: string[]; } + +// https://docs.slack.dev/reference/methods/admin.slackbot.skills.unpublish +export interface AdminSlackbotSkillsUnpublishArguments extends TokenOverridable { + /** @description One to 50 skill IDs. Successful items are not rolled back if other items fail. */ + skill_ids: string[]; +} diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 209f391b8..a2c9a3ba6 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -78,6 +78,7 @@ export type { AdminSlackbotSkillsListArguments, AdminSlackbotSkillsPublishArguments, AdminSlackbotSkillsSetAutoEnabledArguments, + AdminSlackbotSkillsUnpublishArguments, } from './admin/slackbot'; export type { AdminTeamsAdminsListArguments, diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsUnpublishResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsUnpublishResponse.ts new file mode 100644 index 000000000..b18c3556f --- /dev/null +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsUnpublishResponse.ts @@ -0,0 +1,23 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type AdminSlackbotSkillsUnpublishResponse = WebAPICallResult & { + error?: string; + failed_skills?: FailedSkill[]; + needed?: string; + ok?: boolean; + provided?: string; + warning?: string; +}; + +export interface FailedSkill { + error?: string; + skill_id?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index c8c10319c..60de9dcca 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -69,6 +69,7 @@ export { AdminRolesRemoveAssignmentsResponse } from './AdminRolesRemoveAssignmen export { AdminSlackbotSkillsListResponse } from './AdminSlackbotSkillsListResponse'; export { AdminSlackbotSkillsPublishResponse } from './AdminSlackbotSkillsPublishResponse'; export { AdminSlackbotSkillsSetAutoEnabledResponse } from './AdminSlackbotSkillsSetAutoEnabledResponse'; +export { AdminSlackbotSkillsUnpublishResponse } from './AdminSlackbotSkillsUnpublishResponse'; export { AdminTeamsAdminsListResponse } from './AdminTeamsAdminsListResponse'; export { AdminTeamsCreateResponse } from './AdminTeamsCreateResponse'; export { AdminTeamsListResponse } from './AdminTeamsListResponse'; diff --git a/packages/web-api/test/types/methods/admin.slackbot.test-d.ts b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts index a0f4d879c..dd6f708f2 100644 --- a/packages/web-api/test/types/methods/admin.slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts @@ -97,3 +97,14 @@ expectAssignable>([ permission_type: 'no_one', }, ]); + +// admin.slackbot.skills.unpublish +// -- sad path +expectError(web.admin.slackbot.skills.unpublish()); // lacking argument +expectError(web.admin.slackbot.skills.unpublish({})); // empty argument +// -- happy path +expectAssignable>([ + { + skill_ids: ['F1234', 'F5678'], + }, +]); From 622624ca5e07ebfb6f24d6eda3c3f93ada69439e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:26:10 -0800 Subject: [PATCH 11/24] feat: add slackbot.skills.delete method Co-Authored-By: Claude --- .changeset/slackbot-skills-delete.md | 5 +++++ packages/web-api/src/methods.ts | 7 +++++++ packages/web-api/src/types/request/index.ts | 1 + packages/web-api/src/types/request/slackbot.ts | 6 ++++++ .../response/SlackbotSkillsDeleteResponse.ts | 17 +++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 11 +++++++++++ 7 files changed, 48 insertions(+) create mode 100644 .changeset/slackbot-skills-delete.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsDeleteResponse.ts diff --git a/.changeset/slackbot-skills-delete.md b/.changeset/slackbot-skills-delete.md new file mode 100644 index 000000000..4843a8b7d --- /dev/null +++ b/.changeset/slackbot-skills-delete.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.delete`](https://docs.slack.dev/reference/methods/slackbot.skills.delete) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 81e58e5d2..6dde54072 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -239,6 +239,7 @@ import type { SearchFilesArguments, SearchMessagesArguments, SlackbotSkillsCreateArguments, + SlackbotSkillsDeleteArguments, SlackbotSkillsInfoArguments, SlackbotSkillsLibraryAddArguments, SlackbotSkillsLibraryRemoveArguments, @@ -533,6 +534,7 @@ import type { SearchFilesResponse, SearchMessagesResponse, SlackbotSkillsCreateResponse, + SlackbotSkillsDeleteResponse, SlackbotSkillsInfoResponse, SlackbotSkillsLibraryAddResponse, SlackbotSkillsLibraryRemoveResponse, @@ -2413,6 +2415,11 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.create `slackbot.skills.create` API reference}. */ create: bindApiCall(this, 'slackbot.skills.create'), + /** + * @description Deletes a Slackbot skill and its canvas, and removes it from every library, skill set, and the org catalog. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.delete `slackbot.skills.delete` API reference}. + */ + delete: bindApiCall(this, 'slackbot.skills.delete'), /** * @description Returns one Slackbot skill, including its instructions. * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index a2c9a3ba6..d155111c2 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -299,6 +299,7 @@ export type { } from './search'; export type { SlackbotSkillsCreateArguments, + SlackbotSkillsDeleteArguments, SlackbotSkillsInfoArguments, SlackbotSkillsLibraryAddArguments, SlackbotSkillsLibraryRemoveArguments, diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index dc4d55bc8..af10b0c48 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -43,6 +43,12 @@ export type SlackbotSkillsCreateArguments = TokenOverridable & { mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; }; +// https://docs.slack.dev/reference/methods/slackbot.skills.delete +export interface SlackbotSkillsDeleteArguments extends TokenOverridable { + /** @description Skill to delete. */ + skill_id: string; +} + // https://docs.slack.dev/reference/methods/slackbot.skills.info export interface SlackbotSkillsInfoArguments extends TokenOverridable { /** @description Skill to fetch: a canvas file ID or a `builtin:` reference. */ diff --git a/packages/web-api/src/types/response/SlackbotSkillsDeleteResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsDeleteResponse.ts new file mode 100644 index 000000000..47b2f99f0 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsDeleteResponse.ts @@ -0,0 +1,17 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsDeleteResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + warning?: string; +}; diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 60de9dcca..fc42a4431 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -297,6 +297,7 @@ export { SearchAllResponse } from './SearchAllResponse'; export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; +export { SlackbotSkillsDeleteResponse } from './SlackbotSkillsDeleteResponse'; export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; export { SlackbotSkillsLibraryAddResponse } from './SlackbotSkillsLibraryAddResponse'; export { SlackbotSkillsLibraryRemoveResponse } from './SlackbotSkillsLibraryRemoveResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index 71c3a62e1..adeb83c6f 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -69,6 +69,17 @@ expectAssignable>([ }, ]); +// slackbot.skills.delete +// -- sad path +expectError(web.slackbot.skills.delete()); // lacking argument +expectError(web.slackbot.skills.delete({})); // empty argument +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + }, +]); + // slackbot.skills.info // -- sad path expectError(web.slackbot.skills.info()); // lacking argument From d6940d8a6f2aae1bf8ed252ec6beaa8175f7111f Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:59:28 -0800 Subject: [PATCH 12/24] chore(web-api): regenerate SlackbotSkillsCreateResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/SlackbotSkillsCreateResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts index 09a6e94c8..a905ce5d3 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts @@ -14,6 +14,7 @@ export type SlackbotSkillsCreateResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; skill?: Skill; warning?: string; }; @@ -24,6 +25,10 @@ export interface InvalidmcpServer { service_type?: string; } +export interface ResponseMetadata { + messages?: string[]; +} + export interface Skill { access?: string; category?: string; From a257224ffb5bce901024da283dec98de42496c57 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:59:36 -0800 Subject: [PATCH 13/24] chore(web-api): regenerate SlackbotSkillsInfoResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../web-api/src/types/response/SlackbotSkillsInfoResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts index 430e21eb1..6951d658e 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts @@ -13,10 +13,15 @@ export type SlackbotSkillsInfoResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; skill?: Skill; warning?: string; }; +export interface ResponseMetadata { + messages?: string[]; +} + export interface Skill { access?: string; category?: string; From ee357112d01e965e7d2b0808ffe3ef3ea0628efc Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:59:43 -0800 Subject: [PATCH 14/24] chore(web-api): regenerate SlackbotSkillsUpdateResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/SlackbotSkillsUpdateResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts index bedf5cbc0..d9f0ac45f 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts @@ -14,6 +14,7 @@ export type SlackbotSkillsUpdateResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; skill?: Skill; warning?: string; }; @@ -24,6 +25,10 @@ export interface InvalidmcpServer { service_type?: string; } +export interface ResponseMetadata { + messages?: string[]; +} + export interface Skill { access?: string; category?: string; From 0ea5bb16a90f7ff118a54c6733d4275946c37e10 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:59:52 -0800 Subject: [PATCH 15/24] chore(web-api): regenerate SlackbotSkillsListResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../web-api/src/types/response/SlackbotSkillsListResponse.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts index 70b003d47..012b80158 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts @@ -19,6 +19,7 @@ export type SlackbotSkillsListResponse = WebAPICallResult & { }; export interface ResponseMetadata { + messages?: string[]; next_cursor?: string; } From dcf9224a53e2ba12afeebbc9ebe423c9779e0634 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 23:00:01 -0800 Subject: [PATCH 16/24] chore(web-api): regenerate SlackbotSkillsLibraryAddResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/SlackbotSkillsLibraryAddResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts index 2f1802bb2..df8b9dc8d 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts @@ -13,5 +13,10 @@ export type SlackbotSkillsLibraryAddResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; warning?: string; }; + +export interface ResponseMetadata { + messages?: string[]; +} From b9dd87e1111e223b0ce8bdbbc4c7dfa6759d80f4 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 23:00:08 -0800 Subject: [PATCH 17/24] chore(web-api): regenerate SlackbotSkillsLibraryRemoveResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../types/response/SlackbotSkillsLibraryRemoveResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsLibraryRemoveResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsLibraryRemoveResponse.ts index 439f16ce9..6f53aff8d 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsLibraryRemoveResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsLibraryRemoveResponse.ts @@ -13,5 +13,10 @@ export type SlackbotSkillsLibraryRemoveResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; warning?: string; }; + +export interface ResponseMetadata { + messages?: string[]; +} From 290708eb0ce4d2911896bed5c02255ba38211f69 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 23:00:16 -0800 Subject: [PATCH 18/24] chore(web-api): regenerate AdminSlackbotSkillsListResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/AdminSlackbotSkillsListResponse.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts index 84d77773a..15f3ba0ab 100644 --- a/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts @@ -19,6 +19,7 @@ export type AdminSlackbotSkillsListResponse = WebAPICallResult & { }; export interface ResponseMetadata { + messages?: string[]; next_cursor?: string; } From d7aedc8a20ca0df976dece0194543b872019ed1e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 23:00:24 -0800 Subject: [PATCH 19/24] chore(web-api): regenerate AdminSlackbotSkillsPublishResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/AdminSlackbotSkillsPublishResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsPublishResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsPublishResponse.ts index a548f452f..4e346da65 100644 --- a/packages/web-api/src/types/response/AdminSlackbotSkillsPublishResponse.ts +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsPublishResponse.ts @@ -14,6 +14,7 @@ export type AdminSlackbotSkillsPublishResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; warning?: string; }; @@ -21,3 +22,7 @@ export interface FailedSkill { error?: string; skill_id?: string; } + +export interface ResponseMetadata { + messages?: string[]; +} From 9b39b16e4a59e565cfba448c928d665b3a91fd66 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 23:00:38 -0800 Subject: [PATCH 20/24] chore(web-api): regenerate AdminSlackbotSkillsSetAutoEnabledResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../response/AdminSlackbotSkillsSetAutoEnabledResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsSetAutoEnabledResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsSetAutoEnabledResponse.ts index 7368cd843..d1d6eaaed 100644 --- a/packages/web-api/src/types/response/AdminSlackbotSkillsSetAutoEnabledResponse.ts +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsSetAutoEnabledResponse.ts @@ -15,7 +15,12 @@ export type AdminSlackbotSkillsSetAutoEnabledResponse = WebAPICallResult & { ok?: boolean; permission_type?: string; provided?: string; + response_metadata?: ResponseMetadata; skill_id?: string; usergroup_ids?: string[]; warning?: string; }; + +export interface ResponseMetadata { + messages?: string[]; +} From 1acbc19dafc0447a570d0df36fb67a015f7558ba Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 23:00:46 -0800 Subject: [PATCH 21/24] chore(web-api): regenerate AdminSlackbotSkillsUnpublishResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../types/response/AdminSlackbotSkillsUnpublishResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsUnpublishResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsUnpublishResponse.ts index b18c3556f..3f25faa4a 100644 --- a/packages/web-api/src/types/response/AdminSlackbotSkillsUnpublishResponse.ts +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsUnpublishResponse.ts @@ -14,6 +14,7 @@ export type AdminSlackbotSkillsUnpublishResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; warning?: string; }; @@ -21,3 +22,7 @@ export interface FailedSkill { error?: string; skill_id?: string; } + +export interface ResponseMetadata { + messages?: string[]; +} From e13a7d767d1d077e3ff374d3565545f9495936fc Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 23:00:54 -0800 Subject: [PATCH 22/24] chore(web-api): regenerate SlackbotSkillsDeleteResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/SlackbotSkillsDeleteResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsDeleteResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsDeleteResponse.ts index 47b2f99f0..9ba01b387 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsDeleteResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsDeleteResponse.ts @@ -13,5 +13,10 @@ export type SlackbotSkillsDeleteResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; warning?: string; }; + +export interface ResponseMetadata { + messages?: string[]; +} From f081dce57d9ef74f0222ea85f58f247929a0275e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Thu, 12 Nov 2026 16:34:45 -0800 Subject: [PATCH 23/24] refactor: accept instructions or canvas_id as optional slackbot.skills.create arguments Leaves the exactly-one-of check to the API, which returns invalid_arguments, and the JSDoc. Also line-breaks the mcp_servers object type. Co-Authored-By: Claude --- .../web-api/src/types/request/slackbot.ts | 70 +++++++++---------- .../test/types/methods/slackbot.test-d.ts | 17 ++--- 2 files changed, 38 insertions(+), 49 deletions(-) diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index c671707fb..2734bd8e1 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -1,42 +1,38 @@ import type { TokenOverridable } from './common'; // https://docs.slack.dev/reference/methods/slackbot.skills.create -export type SlackbotSkillsCreateArguments = TokenOverridable & { +export interface SlackbotSkillsCreateArguments extends TokenOverridable { /** @description Human-readable label. Max 255 characters; not unique. */ display_name: string; -} & ( - | { - /** @description Markdown body of the skill. Send exactly one of `instructions` or `canvas_id`. */ - instructions: string; - canvas_id?: never; - } - | { - instructions?: never; - /** @description Canvas the caller owns to turn into a skill. Send exactly one of `instructions` or `canvas_id`. */ - canvas_id: string; - } - ) & { - /** @description When Slackbot should use the skill. Max 400 characters. */ - description?: string; - /** @description One of the skill categories. */ - category?: - | 'communication' - | 'customer_support' - | 'data_and_analytics' - | 'engineering' - | 'other' - | 'product_management' - | 'productivity' - | 'professional_development' - | 'project_management' - | 'sales' - | 'system' - | 'team_management'; - /** @description Max 200 characters. May contain `{skill}`, which becomes the skill mention. */ - example_prompt?: string; - /** - * @description Apps the skill needs, capped at the caller's MCP server limit. Declaring an app doesn't grant - * access to it. - */ - mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; - }; + /** @description Markdown body of the skill. Send exactly one of `instructions` or `canvas_id`. */ + instructions?: string; + /** @description Canvas the caller owns to turn into a skill. Send exactly one of `instructions` or `canvas_id`. */ + canvas_id?: string; + /** @description When Slackbot should use the skill. Max 400 characters. */ + description?: string; + /** @description One of the skill categories. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management'; + /** @description Max 200 characters. May contain `{skill}`, which becomes the skill mention. */ + example_prompt?: string; + /** + * @description Apps the skill needs, capped at the caller's MCP server limit. Declaring an app doesn't grant + * access to it. + */ + mcp_servers?: { + service_type: string; + app_id?: string; + server_id?: string; + }[]; +} diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index f41cee435..b10644bbb 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -12,18 +12,6 @@ expectError( instructions: '# Purpose', // missing display_name }), ); -expectError( - web.slackbot.skills.create({ - display_name: 'Daily priorities', // missing instructions or canvas_id - }), -); -expectError( - web.slackbot.skills.create({ - display_name: 'Daily priorities', - instructions: '# Purpose', // both instructions and canvas_id - canvas_id: 'F1234', - }), -); expectError( web.slackbot.skills.create({ display_name: 'Daily priorities', @@ -46,6 +34,11 @@ expectError( }), ); // -- happy path +expectAssignable>([ + { + display_name: 'Daily priorities', // the api requires exactly one of instructions or canvas_id + }, +]); expectAssignable>([ { display_name: 'Daily priorities', From d74ff884cc12a61a3389e744c1429455a736d910 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Thu, 12 Nov 2026 16:35:43 -0800 Subject: [PATCH 24/24] refactor: line-break the slackbot.skills.update mcp_servers object type Co-Authored-By: Claude --- packages/web-api/src/types/request/slackbot.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index 42a3c99ab..b02660638 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -70,5 +70,9 @@ export interface SlackbotSkillsUpdateArguments extends TokenOverridable { /** @description Max 200 characters. May contain `{skill}`. Send an empty string to clear. */ example_prompt?: string; /** @description Apps the skill needs. Replaces the whole list; send `[]` to clear. */ - mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; + mcp_servers?: { + service_type: string; + app_id?: string; + server_id?: string; + }[]; }