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 b02660638..6609acb2c 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 @@ -42,6 +44,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..012b80158 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts @@ -0,0 +1,53 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 { + messages?: string[]; + 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 00647a102..aa0d40588 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -73,6 +73,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