import { type HttpMethod } from "./naming.js"; import type { ToolcraftConfig } from "./config.js"; type OpenApiOperation = OpenApiOperationObject | OpenApiReferenceObject; type OpenApiOperationMap = Partial>; type OpenApiParameterLocation = "path" | "query" | "header" | "cookie"; type OpenApiScalarType = "string" | "number" | "integer" | "boolean"; type OpenApiSchemaType = OpenApiScalarType | "object" | "array"; type OpenApiJsonSchemaType = OpenApiSchemaType | "null"; export type GeneratedRequestLocation = Exclude; export interface OpenApiTagObject { name: string; description?: string; } export interface OpenApiDocument { openapi?: string; info?: { title?: string; version?: string; }; servers?: OpenApiServerObject[]; security?: OpenApiSecurityRequirementObject[]; tags?: OpenApiTagObject[]; paths?: Record; components?: { securitySchemes?: Record; parameters?: Record; requestBodies?: Record; responses?: Record; schemas?: Record; }; } export interface OpenApiPathItemObject extends OpenApiOperationMap { parameters?: OpenApiParameter[]; } export interface OpenApiOperationObject { tags?: string[]; summary?: string; description?: string; operationId?: string; security?: OpenApiSecurityRequirementObject[]; servers?: OpenApiServerObject[]; parameters?: OpenApiParameter[]; requestBody?: OpenApiRequestBodyObject | OpenApiReferenceObject; responses?: Record; } export type OpenApiParameter = OpenApiParameterObject | OpenApiReferenceObject; export interface OpenApiParameterObject { name: string; in: OpenApiParameterLocation; required?: boolean; description?: string; content?: Record; explode?: boolean; schema?: OpenApiSchemaObject | OpenApiReferenceObject; style?: string; } export interface OpenApiRequestBodyObject { description?: string; required?: boolean; content?: Record; } export interface OpenApiResponseObject { description?: string; content?: Record; } export interface OpenApiMediaTypeObject { schema?: OpenApiSchemaObject | OpenApiReferenceObject; example?: unknown; examples?: Record; } export interface OpenApiSchemaObject { type?: OpenApiJsonSchemaType | readonly OpenApiJsonSchemaType[]; additionalProperties?: boolean | OpenApiSchemaObject | OpenApiReferenceObject; allOf?: Array; anyOf?: Array; description?: string; default?: unknown; enum?: unknown[]; format?: string; items?: OpenApiSchemaObject | OpenApiReferenceObject; maxItems?: number; maximum?: number; maxLength?: number; minItems?: number; minimum?: number; minLength?: number; nullable?: boolean; oneOf?: Array; pattern?: string; required?: string[]; properties?: Record; readOnly?: boolean; writeOnly?: boolean; } export interface OpenApiReferenceObject { $ref: string; } interface OpenApiServerObject { url: string; description?: string; } type OpenApiSecurityRequirementObject = Record; export interface GenerateOptions { specSha: string; brand?: string; config?: ToolcraftConfig; } export interface GeneratedFile { path: string; contents: string; } export interface GeneratedSkill { name: string; contents: string; } export interface GeneratedCommand { noun: string; verb: string; topLevel: boolean; exportName: string; filePath: string; operationId: string; description?: string; examples?: GeneratedCommandExample[]; method: string; path: string; auth: "required" | "none"; responseMode: "json" | "text" | "binary"; accept: string; baseUrl?: string; bodyMode?: "json" | "form" | "raw" | "base64" | "multipart"; contentType?: string; multipartBinaryFields?: readonly string[]; idempotencyHeader?: string; rawResponse?: boolean; confirm: boolean; positional: string[]; params: GeneratedParam[]; paramsSchemaOptions?: GeneratedObjectSchemaOptions; preflightBlocks: GeneratedPreflightBlock[]; requestFields: GeneratedRequestField[]; sectionRenders: GeneratedRequestSectionRenders; optionalSections: ReadonlySet>; } export interface GeneratedParam { paramName: string; sourceName: string; location: "path" | "query" | "header" | "body" | "transport"; description?: string; longAliases?: string[]; shortFlag?: string; scope?: readonly [GeneratedParamScope, ...GeneratedParamScope[]]; global?: boolean; optional: boolean; definition: GeneratedParamDefinition; } interface GeneratedCommandExample { title: string; params: Record; } interface GeneratedParamDefinitionMetadata { additionalProperties?: boolean; defaultValue?: unknown; format?: string; jsonType?: "integer"; maxItems?: number; maximum?: number; maxLength?: number; minItems?: number; minimum?: number; minLength?: number; nullable?: boolean; pattern?: string; requiredScopes?: readonly [GeneratedParamScope, ...GeneratedParamScope[]]; } interface GeneratedScalarParamDefinition extends GeneratedParamDefinitionMetadata { kind: "string" | "number" | "boolean"; } interface GeneratedEnumParamDefinition extends GeneratedParamDefinitionMetadata { kind: "enum"; enumValues: readonly [GeneratedEnumValue, ...GeneratedEnumValue[]]; } interface GeneratedArrayParamDefinition extends GeneratedParamDefinitionMetadata { kind: "array"; itemDefinition: GeneratedParamDefinition; } interface GeneratedJsonParamDefinition extends GeneratedParamDefinitionMetadata { kind: "json"; } interface GeneratedObjectParamDefinition extends GeneratedParamDefinitionMetadata { kind: "object"; properties: readonly GeneratedObjectPropertyDefinition[]; } interface GeneratedObjectPropertyDefinition { name: string; optional: boolean; definition: GeneratedParamDefinition; } export type GeneratedParamDefinition = GeneratedScalarParamDefinition | GeneratedEnumParamDefinition | GeneratedArrayParamDefinition | GeneratedObjectParamDefinition | GeneratedJsonParamDefinition; type GeneratedParamScope = "cli" | "mcp" | "sdk"; type GeneratedEnumValue = string | number | boolean; export type GeneratedValueReference = { kind: "param"; paramName: string; } | { kind: "resolved"; resolvedName: string; }; export type GeneratedValueExpression = { kind: "reference"; reference: GeneratedValueReference; } | { kind: "emptyObject"; } | { kind: "queryArray"; reference: GeneratedValueReference; serialization: QueryArraySerialization; }; export interface GeneratedRequestField { location: Exclude; omitWhenUndefinedReference: GeneratedValueReference; wireName: string; value: GeneratedValueExpression; } export type GeneratedRequestSectionRender = "inline" | "wrapped"; export type GeneratedRequestSectionRenders = Partial<{ [K in GeneratedRequestLocation]: K extends "body" ? GeneratedRequestSectionRender : "wrapped"; }>; export interface GeneratedObjectSchemaOptions { additionalProperties?: boolean; } interface RenderSchemaOptionsInput { definition: GeneratedParamDefinition; description?: string; longAliases?: string[]; shortFlag?: string; scope?: readonly [GeneratedParamScope, ...GeneratedParamScope[]]; global?: boolean; } export type GeneratedPreflightBlock = { kind: "scalar-null"; paramName: string; nullParamName: string; resolvedName: string; required: boolean; } | { kind: "array"; paramName: string; jsonParamName: string; nullParamName?: string; resolvedName: string; definition: Extract; required: boolean; }; interface SchemaOptionEntry { key: string; value: unknown; } type QueryArraySerialization = "repeat" | "brackets" | "comma" | "pipe"; export declare function generate(document: OpenApiDocument, options: GenerateOptions): GeneratedFile[]; export declare function generateSkill(document: OpenApiDocument, options?: { commandName?: string | undefined; config?: ToolcraftConfig | undefined; }): GeneratedSkill; export declare function collectGeneratedCommands(document: OpenApiDocument, config?: ToolcraftConfig): GeneratedCommand[]; export declare function collectGeneratedCommand(document: OpenApiDocument, path: string, method: HttpMethod): GeneratedCommand; export declare function collectSchemaOptionEntries(param: RenderSchemaOptionsInput): SchemaOptionEntry[]; export declare function collectTagDescriptions(document: OpenApiDocument): Map; export {};