diff --git a/scripts/generate-swagger.ts b/scripts/generate-swagger.ts index 4f79d283..c959b05b 100644 --- a/scripts/generate-swagger.ts +++ b/scripts/generate-swagger.ts @@ -8,7 +8,7 @@ import * as path from "node:path"; * This is managed by Renovate and updated automatically when new versions are released. * renovate: datasource=github-releases depName=stacklok/toolhive-registry-server versioning=semver */ -const REGISTRY_SERVER_VERSION = "v0.6.2"; +const REGISTRY_SERVER_VERSION = "v0.6.3"; (async () => { const url = `https://raw.githubusercontent.com/stacklok/toolhive-registry-server/refs/tags/${REGISTRY_SERVER_VERSION}/docs/thv-registry-api/swagger.json`; diff --git a/src/generated/client/client.gen.ts b/src/generated/client/client.gen.ts index 302b0db4..916b96ff 100644 --- a/src/generated/client/client.gen.ts +++ b/src/generated/client/client.gen.ts @@ -46,7 +46,7 @@ export const createClient = (config: Config = {}): Client => { ...options, fetch: options.fetch ?? _config.fetch ?? globalThis.fetch, headers: mergeHeaders(_config.headers, options.headers), - serializedBody: undefined, + serializedBody: undefined as string | undefined, }; if (opts.security) { @@ -61,7 +61,9 @@ export const createClient = (config: Config = {}): Client => { } if (opts.body !== undefined && opts.bodySerializer) { - opts.serializedBody = opts.bodySerializer(opts.body); + opts.serializedBody = opts.bodySerializer(opts.body) as + | string + | undefined; } // remove Content-Type header if body is empty to avoid sending invalid requests @@ -242,8 +244,11 @@ export const createClient = (config: Config = {}): Client => { }); }; + const _buildUrl: Client["buildUrl"] = (options) => + buildUrl({ ..._config, ...options }); + return { - buildUrl, + buildUrl: _buildUrl, connect: makeMethodFn("CONNECT"), delete: makeMethodFn("DELETE"), get: makeMethodFn("GET"), diff --git a/src/generated/client/types.gen.ts b/src/generated/client/types.gen.ts index 31abc744..229af753 100644 --- a/src/generated/client/types.gen.ts +++ b/src/generated/client/types.gen.ts @@ -58,6 +58,7 @@ export interface RequestOptions< }>, Pick< ServerSentEventsOptions, + | "onRequest" | "onSseError" | "onSseEvent" | "sseDefaultRetryDelay" diff --git a/src/generated/core/bodySerializer.gen.ts b/src/generated/core/bodySerializer.gen.ts index 2ed9d6d4..6aadfde0 100644 --- a/src/generated/core/bodySerializer.gen.ts +++ b/src/generated/core/bodySerializer.gen.ts @@ -8,7 +8,7 @@ import type { export type QuerySerializer = (query: Record) => string; -export type BodySerializer = (body: any) => any; +export type BodySerializer = (body: unknown) => unknown; type QuerySerializerOptionsObject = { allowReserved?: boolean; @@ -51,12 +51,10 @@ const serializeUrlSearchParamsPair = ( }; export const formDataBodySerializer = { - bodySerializer: | Array>>( - body: T, - ): FormData => { + bodySerializer: (body: unknown): FormData => { const data = new FormData(); - Object.entries(body).forEach(([key, value]) => { + Object.entries(body as Record).forEach(([key, value]) => { if (value === undefined || value === null) { return; } @@ -72,19 +70,17 @@ export const formDataBodySerializer = { }; export const jsonBodySerializer = { - bodySerializer: (body: T): string => + bodySerializer: (body: unknown): string => JSON.stringify(body, (_key, value) => typeof value === "bigint" ? value.toString() : value, ), }; export const urlSearchParamsBodySerializer = { - bodySerializer: | Array>>( - body: T, - ): string => { + bodySerializer: (body: unknown): string => { const data = new URLSearchParams(); - Object.entries(body).forEach(([key, value]) => { + Object.entries(body as Record).forEach(([key, value]) => { if (value === undefined || value === null) { return; } diff --git a/src/generated/core/params.gen.ts b/src/generated/core/params.gen.ts index fb9f992a..28764e7b 100644 --- a/src/generated/core/params.gen.ts +++ b/src/generated/core/params.gen.ts @@ -96,7 +96,12 @@ interface Params { const stripEmptySlots = (params: Params) => { for (const [slot, value] of Object.entries(params)) { - if (value && typeof value === "object" && !Object.keys(value).length) { + if ( + value && + typeof value === "object" && + !Array.isArray(value) && + !Object.keys(value).length + ) { delete params[slot as Slot]; } } diff --git a/src/generated/index.ts b/src/generated/index.ts index f7e21913..866876ae 100644 --- a/src/generated/index.ts +++ b/src/generated/index.ts @@ -3,6 +3,7 @@ export { deleteExtensionV0RegistriesByRegistryName, deleteRegistryByRegistryNameV01ServersByServerNameVersionsByVersion, + deleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersion, getExtensionV0Registries, getExtensionV0RegistriesByRegistryName, getHealth, @@ -11,12 +12,17 @@ export { getRegistryByRegistryNameV01Servers, getRegistryByRegistryNameV01ServersByServerNameVersions, getRegistryByRegistryNameV01ServersByServerNameVersionsByVersion, + getRegistryByRegistryNameV01xDevToolhiveSkills, + getRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByName, + getRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersions, + getRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersion, getRegistryV01Servers, getRegistryV01ServersByServerNameVersions, getRegistryV01ServersByServerNameVersionsByVersion, getVersion, type Options, postByRegistryNameV01Publish, + postRegistryByRegistryNameV01xDevToolhiveSkills, postRegistryV01Publish, putExtensionV0RegistriesByRegistryName, } from "./sdk.gen"; @@ -32,6 +38,11 @@ export type { DeleteRegistryByRegistryNameV01ServersByServerNameVersionsByVersionErrors, DeleteRegistryByRegistryNameV01ServersByServerNameVersionsByVersionResponse, DeleteRegistryByRegistryNameV01ServersByServerNameVersionsByVersionResponses, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionData, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionError, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponse, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses, GetExtensionV0RegistriesByRegistryNameData, GetExtensionV0RegistriesByRegistryNameError, GetExtensionV0RegistriesByRegistryNameErrors, @@ -70,6 +81,26 @@ export type { GetRegistryByRegistryNameV01ServersErrors, GetRegistryByRegistryNameV01ServersResponse, GetRegistryByRegistryNameV01ServersResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameData, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameError, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameErrors, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameResponse, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionData, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionError, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponse, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsData, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsError, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsErrors, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsResponse, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsData, + GetRegistryByRegistryNameV01xDevToolhiveSkillsError, + GetRegistryByRegistryNameV01xDevToolhiveSkillsErrors, + GetRegistryByRegistryNameV01xDevToolhiveSkillsResponse, + GetRegistryByRegistryNameV01xDevToolhiveSkillsResponses, GetRegistryV01ServersByServerNameVersionsByVersionData, GetRegistryV01ServersByServerNameVersionsByVersionError, GetRegistryV01ServersByServerNameVersionsByVersionErrors, @@ -107,6 +138,8 @@ export type { InternalApiHealthResponse, InternalApiReadinessResponse, InternalApiVersionResponse, + InternalApiXSkillsSkillListMetadata, + InternalApiXSkillsSkillListResponse, ModelArgument, ModelArgumentType, ModelFormat, @@ -122,6 +155,11 @@ export type { PostByRegistryNameV01PublishErrors, PostByRegistryNameV01PublishResponse, PostByRegistryNameV01PublishResponses, + PostRegistryByRegistryNameV01xDevToolhiveSkillsData, + PostRegistryByRegistryNameV01xDevToolhiveSkillsError, + PostRegistryByRegistryNameV01xDevToolhiveSkillsErrors, + PostRegistryByRegistryNameV01xDevToolhiveSkillsResponse, + PostRegistryByRegistryNameV01xDevToolhiveSkillsResponses, PostRegistryV01PublishData, PostRegistryV01PublishError, PostRegistryV01PublishErrors, @@ -130,6 +168,10 @@ export type { PutExtensionV0RegistriesByRegistryNameErrors, PutExtensionV0RegistriesByRegistryNameResponse, PutExtensionV0RegistriesByRegistryNameResponses, + RegistrySkill, + RegistrySkillIcon, + RegistrySkillPackage, + RegistrySkillRepository, V0Metadata, V0RegistryExtensions, V0ResponseMeta, diff --git a/src/generated/sdk.gen.ts b/src/generated/sdk.gen.ts index 9fc6c3c2..fa25591b 100644 --- a/src/generated/sdk.gen.ts +++ b/src/generated/sdk.gen.ts @@ -9,6 +9,9 @@ import type { DeleteRegistryByRegistryNameV01ServersByServerNameVersionsByVersionData, DeleteRegistryByRegistryNameV01ServersByServerNameVersionsByVersionErrors, DeleteRegistryByRegistryNameV01ServersByServerNameVersionsByVersionResponses, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionData, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses, GetExtensionV0RegistriesByRegistryNameData, GetExtensionV0RegistriesByRegistryNameErrors, GetExtensionV0RegistriesByRegistryNameResponses, @@ -32,6 +35,18 @@ import type { GetRegistryByRegistryNameV01ServersData, GetRegistryByRegistryNameV01ServersErrors, GetRegistryByRegistryNameV01ServersResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameData, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameErrors, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionData, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsData, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsErrors, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsData, + GetRegistryByRegistryNameV01xDevToolhiveSkillsErrors, + GetRegistryByRegistryNameV01xDevToolhiveSkillsResponses, GetRegistryV01ServersByServerNameVersionsByVersionData, GetRegistryV01ServersByServerNameVersionsByVersionErrors, GetRegistryV01ServersByServerNameVersionsByVersionResponses, @@ -46,6 +61,9 @@ import type { PostByRegistryNameV01PublishData, PostByRegistryNameV01PublishErrors, PostByRegistryNameV01PublishResponses, + PostRegistryByRegistryNameV01xDevToolhiveSkillsData, + PostRegistryByRegistryNameV01xDevToolhiveSkillsErrors, + PostRegistryByRegistryNameV01xDevToolhiveSkillsResponses, PostRegistryV01PublishData, PostRegistryV01PublishErrors, PutExtensionV0RegistriesByRegistryNameData, @@ -414,6 +432,165 @@ export const getRegistryByRegistryNameV01ServersByServerNameVersionsByVersion = }, }); +/** + * List skills in registry + * + * List skills in a registry (paginated, latest versions). + */ +export const getRegistryByRegistryNameV01xDevToolhiveSkills = < + ThrowOnError extends boolean = false, +>( + options: Options< + GetRegistryByRegistryNameV01xDevToolhiveSkillsData, + ThrowOnError + >, +) => + (options.client ?? client).get< + GetRegistryByRegistryNameV01xDevToolhiveSkillsResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsErrors, + ThrowOnError + >({ + security: [{ name: "Authorization", type: "apiKey" }], + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills", + ...options, + headers: { + "Content-Type": "application/json", + ...options.headers, + }, + }); + +/** + * Publish skill + * + * Publish a skill version to the registry. + */ +export const postRegistryByRegistryNameV01xDevToolhiveSkills = < + ThrowOnError extends boolean = false, +>( + options: Options< + PostRegistryByRegistryNameV01xDevToolhiveSkillsData, + ThrowOnError + >, +) => + (options.client ?? client).post< + PostRegistryByRegistryNameV01xDevToolhiveSkillsResponses, + PostRegistryByRegistryNameV01xDevToolhiveSkillsErrors, + ThrowOnError + >({ + security: [{ name: "Authorization", type: "apiKey" }], + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills", + ...options, + headers: { + "Content-Type": "application/json", + ...options.headers, + }, + }); + +/** + * Get latest skill version + * + * Get the latest version of a skill by namespace and name. + */ +export const getRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByName = < + ThrowOnError extends boolean = false, +>( + options: Options< + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameData, + ThrowOnError + >, +) => + (options.client ?? client).get< + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameErrors, + ThrowOnError + >({ + security: [{ name: "Authorization", type: "apiKey" }], + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}", + ...options, + headers: { + "Content-Type": "application/json", + ...options.headers, + }, + }); + +/** + * List skill versions + * + * List all versions of a skill. + */ +export const getRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersions = + ( + options: Options< + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsData, + ThrowOnError + >, + ) => + (options.client ?? client).get< + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsErrors, + ThrowOnError + >({ + security: [{ name: "Authorization", type: "apiKey" }], + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions", + ...options, + headers: { + "Content-Type": "application/json", + ...options.headers, + }, + }); + +/** + * Delete skill version + * + * Delete a specific version of a skill from the registry. + */ +export const deleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersion = + ( + options: Options< + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionData, + ThrowOnError + >, + ) => + (options.client ?? client).delete< + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses, + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors, + ThrowOnError + >({ + security: [{ name: "Authorization", type: "apiKey" }], + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions/{version}", + ...options, + headers: { + "Content-Type": "application/json", + ...options.headers, + }, + }); + +/** + * Get specific skill version + * + * Get a specific version of a skill. + */ +export const getRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersion = + ( + options: Options< + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionData, + ThrowOnError + >, + ) => + (options.client ?? client).get< + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses, + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors, + ThrowOnError + >({ + security: [{ name: "Authorization", type: "apiKey" }], + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions/{version}", + ...options, + headers: { + "Content-Type": "application/json", + ...options.headers, + }, + }); + /** * Version information * diff --git a/src/generated/types.gen.ts b/src/generated/types.gen.ts index 640f99bc..89374833 100644 --- a/src/generated/types.gen.ts +++ b/src/generated/types.gen.ts @@ -245,6 +245,16 @@ export type InternalApiVersionResponse = { version?: string; }; +export type InternalApiXSkillsSkillListMetadata = { + count?: number; + nextCursor?: string; +}; + +export type InternalApiXSkillsSkillListResponse = { + metadata?: InternalApiXSkillsSkillListMetadata; + skills?: Array; +}; + export type ModelArgument = { isRepeated?: boolean; name?: string; @@ -342,6 +352,143 @@ export type ModelTransport = { }; }; +export type RegistrySkill = { + /** + * Meta is an opaque payload with extended meta data details of the skill. + */ + _meta?: { + [key: string]: unknown; + }; + /** + * AllowedTools is the list of tools that the skill is compatible with. + * This is experimental. + */ + allowedTools?: Array; + /** + * Compatibility is the environment requirements of the skill. + */ + compatibility?: string; + /** + * Description is the description of the skill. + */ + description?: string; + /** + * Icons is the list of icons for the skill. + */ + icons?: Array; + /** + * License is the SPDX license identifier of the skill. + */ + license?: string; + /** + * Metadata is the official metadata of the skill as reported in the + * SKILL.md file. + */ + metadata?: { + [key: string]: unknown; + }; + /** + * Name is the name of the skill. + * The format is that of identifiers, e.g. "my-skill". + */ + name?: string; + /** + * Namespace is the namespace of the skill. + * The format is reverse-DNS, e.g. "io.github.user". + */ + namespace?: string; + /** + * Packages is the list of packages for the skill. + */ + packages?: Array; + repository?: RegistrySkillRepository; + /** + * Status is the status of the skill. + * Can be one of "active", "deprecated", or "archived". + */ + status?: string; + /** + * Title is the title of the skill. + * This is for human consumption, not an identifier. + */ + title?: string; + /** + * Version is the version of the skill. + * Any non-empty string is valid, but ideally it should be either a + * semantic version or a commit hash. + */ + version?: string; +}; + +export type RegistrySkillIcon = { + /** + * Label is the label of the icon. + */ + label?: string; + /** + * Size is the size of the icon. + */ + size?: string; + /** + * Src is the source of the icon. + */ + src?: string; + /** + * Type is the type of the icon. + */ + type?: string; +}; + +export type RegistrySkillPackage = { + /** + * Commit is the commit of the package. + */ + commit?: string; + /** + * Digest is the digest of the package. + */ + digest?: string; + /** + * Identifier is the OCI identifier of the package. + */ + identifier?: string; + /** + * MediaType is the media type of the package. + */ + mediaType?: string; + /** + * Ref is the reference of the package. + */ + ref?: string; + /** + * RegistryType is the type of registry the package is from. + * Can be "oci" or "git". + */ + registryType?: string; + /** + * Subfolder is the subfolder of the package. + */ + subfolder?: string; + /** + * URL is the URL of the package. + */ + url?: string; +}; + +/** + * Repository is the source repository of the skill. + */ +export type RegistrySkillRepository = { + /** + * Type is the type of the repository. + */ + type?: string; + /** + * URL is the URL of the repository. + */ + url?: string; +}; + export type V0Metadata = { count?: number; nextCursor?: string; @@ -1123,6 +1270,386 @@ export type GetRegistryByRegistryNameV01ServersByServerNameVersionsByVersionResp export type GetRegistryByRegistryNameV01ServersByServerNameVersionsByVersionResponse = GetRegistryByRegistryNameV01ServersByServerNameVersionsByVersionResponses[keyof GetRegistryByRegistryNameV01ServersByServerNameVersionsByVersionResponses]; +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsData = { + body?: { + [key: string]: unknown; + }; + path: { + /** + * Registry name + */ + registryName: string; + }; + query?: { + /** + * Filter by name/description substring + */ + search?: string; + /** + * Filter by status (comma-separated, e.g. active,deprecated) + */ + status?: string; + /** + * Max results (default 50, max 100) + */ + limit?: number; + /** + * Pagination cursor + */ + cursor?: string; + }; + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills"; +}; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsErrors = { + /** + * Bad request + */ + 400: { + [key: string]: string; + }; + /** + * Internal server error + */ + 500: { + [key: string]: string; + }; +}; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsError = + GetRegistryByRegistryNameV01xDevToolhiveSkillsErrors[keyof GetRegistryByRegistryNameV01xDevToolhiveSkillsErrors]; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsResponses = { + /** + * List of skills + */ + 200: InternalApiXSkillsSkillListResponse; +}; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsResponse = + GetRegistryByRegistryNameV01xDevToolhiveSkillsResponses[keyof GetRegistryByRegistryNameV01xDevToolhiveSkillsResponses]; + +export type PostRegistryByRegistryNameV01xDevToolhiveSkillsData = { + /** + * Skill data + */ + body: + | { + [key: string]: unknown; + } + | RegistrySkill; + path: { + /** + * Registry name + */ + registryName: string; + }; + query?: never; + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills"; +}; + +export type PostRegistryByRegistryNameV01xDevToolhiveSkillsErrors = { + /** + * Bad request + */ + 400: { + [key: string]: string; + }; + /** + * Unauthorized + */ + 401: { + [key: string]: string; + }; + /** + * Not a managed registry + */ + 403: { + [key: string]: string; + }; + /** + * Version already exists + */ + 409: { + [key: string]: string; + }; + /** + * Internal server error + */ + 500: { + [key: string]: string; + }; +}; + +export type PostRegistryByRegistryNameV01xDevToolhiveSkillsError = + PostRegistryByRegistryNameV01xDevToolhiveSkillsErrors[keyof PostRegistryByRegistryNameV01xDevToolhiveSkillsErrors]; + +export type PostRegistryByRegistryNameV01xDevToolhiveSkillsResponses = { + /** + * Created + */ + 201: RegistrySkill; +}; + +export type PostRegistryByRegistryNameV01xDevToolhiveSkillsResponse = + PostRegistryByRegistryNameV01xDevToolhiveSkillsResponses[keyof PostRegistryByRegistryNameV01xDevToolhiveSkillsResponses]; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameData = + { + body?: { + [key: string]: unknown; + }; + path: { + /** + * Registry name + */ + registryName: string; + /** + * Skill namespace (reverse-DNS) + */ + namespace: string; + /** + * Skill name + */ + name: string; + }; + query?: never; + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}"; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameErrors = + { + /** + * Bad request + */ + 400: { + [key: string]: string; + }; + /** + * Skill not found + */ + 404: { + [key: string]: string; + }; + /** + * Internal server error + */ + 500: { + [key: string]: string; + }; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameError = + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameErrors[keyof GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameErrors]; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameResponses = + { + /** + * Skill details + */ + 200: RegistrySkill; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameResponse = + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameResponses[keyof GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameResponses]; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsData = + { + body?: { + [key: string]: unknown; + }; + path: { + /** + * Registry name + */ + registryName: string; + /** + * Skill namespace (reverse-DNS) + */ + namespace: string; + /** + * Skill name + */ + name: string; + }; + query?: never; + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions"; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsErrors = + { + /** + * Bad request + */ + 400: { + [key: string]: string; + }; + /** + * Skill not found + */ + 404: { + [key: string]: string; + }; + /** + * Internal server error + */ + 500: { + [key: string]: string; + }; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsError = + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsErrors[keyof GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsErrors]; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsResponses = + { + /** + * List of skill versions + */ + 200: InternalApiXSkillsSkillListResponse; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsResponse = + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsResponses[keyof GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsResponses]; + +export type DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionData = + { + body?: { + [key: string]: unknown; + }; + path: { + /** + * Registry name + */ + registryName: string; + /** + * Skill namespace (reverse-DNS) + */ + namespace: string; + /** + * Skill name + */ + name: string; + /** + * Skill version + */ + version: string; + }; + query?: never; + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions/{version}"; + }; + +export type DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors = + { + /** + * Bad request + */ + 400: { + [key: string]: string; + }; + /** + * Unauthorized + */ + 401: { + [key: string]: string; + }; + /** + * Not a managed registry + */ + 403: { + [key: string]: string; + }; + /** + * Skill version not found + */ + 404: { + [key: string]: string; + }; + /** + * Internal server error + */ + 500: { + [key: string]: string; + }; + }; + +export type DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionError = + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors[keyof DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors]; + +export type DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses = + { + /** + * No content + */ + 204: void; + }; + +export type DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponse = + DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses[keyof DeleteRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses]; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionData = + { + body?: { + [key: string]: unknown; + }; + path: { + /** + * Registry name + */ + registryName: string; + /** + * Skill namespace (reverse-DNS) + */ + namespace: string; + /** + * Skill name + */ + name: string; + /** + * Skill version + */ + version: string; + }; + query?: never; + url: "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions/{version}"; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors = + { + /** + * Bad request + */ + 400: { + [key: string]: string; + }; + /** + * Skill or version not found + */ + 404: { + [key: string]: string; + }; + /** + * Internal server error + */ + 500: { + [key: string]: string; + }; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionError = + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors[keyof GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionErrors]; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses = + { + /** + * Skill details + */ + 200: RegistrySkill; + }; + +export type GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponse = + GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses[keyof GetRegistryByRegistryNameV01xDevToolhiveSkillsByNamespaceByNameVersionsByVersionResponses]; + export type GetVersionData = { body?: never; path?: never; diff --git a/swagger.json b/swagger.json index 413ce1bb..a3a55093 100644 --- a/swagger.json +++ b/swagger.json @@ -316,6 +316,32 @@ }, "type": "object" }, + "internal_api_x_skills.SkillListMetadata": { + "properties": { + "count": { + "type": "integer" + }, + "nextCursor": { + "type": "string" + } + }, + "type": "object" + }, + "internal_api_x_skills.SkillListResponse": { + "properties": { + "metadata": { + "$ref": "#/components/schemas/internal_api_x_skills.SkillListMetadata" + }, + "skills": { + "items": { + "$ref": "#/components/schemas/registry.Skill" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, "model.Argument": { "properties": { "isRepeated": { @@ -539,6 +565,152 @@ }, "type": "object" }, + "registry.Skill": { + "properties": { + "_meta": { + "additionalProperties": {}, + "description": "Meta is an opaque payload with extended meta data details of the skill.", + "type": "object" + }, + "allowedTools": { + "description": "AllowedTools is the list of tools that the skill is compatible with.\nThis is experimental.", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + }, + "compatibility": { + "description": "Compatibility is the environment requirements of the skill.", + "type": "string" + }, + "description": { + "description": "Description is the description of the skill.", + "type": "string" + }, + "icons": { + "description": "Icons is the list of icons for the skill.", + "items": { + "$ref": "#/components/schemas/registry.SkillIcon" + }, + "type": "array", + "uniqueItems": false + }, + "license": { + "description": "License is the SPDX license identifier of the skill.", + "type": "string" + }, + "metadata": { + "additionalProperties": {}, + "description": "Metadata is the official metadata of the skill as reported in the\nSKILL.md file.", + "type": "object" + }, + "name": { + "description": "Name is the name of the skill.\nThe format is that of identifiers, e.g. \"my-skill\".", + "type": "string" + }, + "namespace": { + "description": "Namespace is the namespace of the skill.\nThe format is reverse-DNS, e.g. \"io.github.user\".", + "type": "string" + }, + "packages": { + "description": "Packages is the list of packages for the skill.", + "items": { + "$ref": "#/components/schemas/registry.SkillPackage" + }, + "type": "array", + "uniqueItems": false + }, + "repository": { + "$ref": "#/components/schemas/registry.SkillRepository" + }, + "status": { + "description": "Status is the status of the skill.\nCan be one of \"active\", \"deprecated\", or \"archived\".", + "type": "string" + }, + "title": { + "description": "Title is the title of the skill.\nThis is for human consumption, not an identifier.", + "type": "string" + }, + "version": { + "description": "Version is the version of the skill.\nAny non-empty string is valid, but ideally it should be either a\nsemantic version or a commit hash.", + "type": "string" + } + }, + "type": "object" + }, + "registry.SkillIcon": { + "properties": { + "label": { + "description": "Label is the label of the icon.", + "type": "string" + }, + "size": { + "description": "Size is the size of the icon.", + "type": "string" + }, + "src": { + "description": "Src is the source of the icon.", + "type": "string" + }, + "type": { + "description": "Type is the type of the icon.", + "type": "string" + } + }, + "type": "object" + }, + "registry.SkillPackage": { + "properties": { + "commit": { + "description": "Commit is the commit of the package.", + "type": "string" + }, + "digest": { + "description": "Digest is the digest of the package.", + "type": "string" + }, + "identifier": { + "description": "Identifier is the OCI identifier of the package.", + "type": "string" + }, + "mediaType": { + "description": "MediaType is the media type of the package.", + "type": "string" + }, + "ref": { + "description": "Ref is the reference of the package.", + "type": "string" + }, + "registryType": { + "description": "RegistryType is the type of registry the package is from.\nCan be \"oci\" or \"git\".", + "type": "string" + }, + "subfolder": { + "description": "Subfolder is the subfolder of the package.", + "type": "string" + }, + "url": { + "description": "URL is the URL of the package.", + "type": "string" + } + }, + "type": "object" + }, + "registry.SkillRepository": { + "description": "Repository is the source repository of the skill.", + "properties": { + "type": { + "description": "Type is the type of the repository.", + "type": "string" + }, + "url": { + "description": "URL is the URL of the repository.", + "type": "string" + } + }, + "type": "object" + }, "v0.Metadata": { "properties": { "count": { @@ -1944,6 +2116,665 @@ "tags": ["registry"] } }, + "/registry/{registryName}/v0.1/x/dev.toolhive/skills": { + "get": { + "description": "List skills in a registry (paginated, latest versions).", + "parameters": [ + { + "description": "Registry name", + "in": "path", + "name": "registryName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Filter by name/description substring", + "in": "query", + "name": "search", + "schema": { + "type": "string" + } + }, + { + "description": "Filter by status (comma-separated, e.g. active,deprecated)", + "in": "query", + "name": "status", + "schema": { + "type": "string" + } + }, + { + "description": "Max results (default 50, max 100)", + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + }, + { + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/internal_api_x_skills.SkillListResponse" + } + } + }, + "description": "List of skills" + }, + "400": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Bad request" + }, + "500": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "BearerAuth": [] + } + ], + "summary": "List skills in registry", + "tags": ["skills"] + }, + "post": { + "description": "Publish a skill version to the registry.", + "parameters": [ + { + "description": "Registry name", + "in": "path", + "name": "registryName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "type": "object" + }, + { + "$ref": "#/components/schemas/registry.Skill", + "summary": "body", + "description": "Skill data" + } + ] + } + } + }, + "description": "Skill data", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/registry.Skill" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Not a managed registry" + }, + "409": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Version already exists" + }, + "500": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "BearerAuth": [] + } + ], + "summary": "Publish skill", + "tags": ["skills"] + } + }, + "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}": { + "get": { + "description": "Get the latest version of a skill by namespace and name.", + "parameters": [ + { + "description": "Registry name", + "in": "path", + "name": "registryName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill namespace (reverse-DNS)", + "in": "path", + "name": "namespace", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill name", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/registry.Skill" + } + } + }, + "description": "Skill details" + }, + "400": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Bad request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Skill not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "BearerAuth": [] + } + ], + "summary": "Get latest skill version", + "tags": ["skills"] + } + }, + "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions": { + "get": { + "description": "List all versions of a skill.", + "parameters": [ + { + "description": "Registry name", + "in": "path", + "name": "registryName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill namespace (reverse-DNS)", + "in": "path", + "name": "namespace", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill name", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/internal_api_x_skills.SkillListResponse" + } + } + }, + "description": "List of skill versions" + }, + "400": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Bad request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Skill not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "BearerAuth": [] + } + ], + "summary": "List skill versions", + "tags": ["skills"] + } + }, + "/registry/{registryName}/v0.1/x/dev.toolhive/skills/{namespace}/{name}/versions/{version}": { + "delete": { + "description": "Delete a specific version of a skill from the registry.", + "parameters": [ + { + "description": "Registry name", + "in": "path", + "name": "registryName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill namespace (reverse-DNS)", + "in": "path", + "name": "namespace", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill name", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill version", + "in": "path", + "name": "version", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "204": { + "description": "No content" + }, + "400": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Not a managed registry" + }, + "404": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Skill version not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "BearerAuth": [] + } + ], + "summary": "Delete skill version", + "tags": ["skills"] + }, + "get": { + "description": "Get a specific version of a skill.", + "parameters": [ + { + "description": "Registry name", + "in": "path", + "name": "registryName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill namespace (reverse-DNS)", + "in": "path", + "name": "namespace", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill name", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Skill version", + "in": "path", + "name": "version", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/registry.Skill" + } + } + }, + "description": "Skill details" + }, + "400": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Bad request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Skill or version not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "BearerAuth": [] + } + ], + "summary": "Get specific skill version", + "tags": ["skills"] + } + }, "/version": { "get": { "description": "Get version information about the registry API",