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 a98505791..b02660638 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -41,3 +41,38 @@ 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..d9f0ac45f --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts @@ -0,0 +1,59 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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; + response_metadata?: ResponseMetadata; + skill?: Skill; + warning?: string; +}; + +export interface InvalidmcpServer { + app_id?: string; + server_id?: string; + service_type?: string; +} + +export interface ResponseMetadata { + messages?: 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 22c3b4e47..00647a102 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -72,3 +72,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' }], + }, +]);