import { Type } from "@sinclair/typebox"; import { NonEmptyString } from "./primitives.js"; const WizardRunStatusSchema = Type.Union([ Type.Literal("running"), Type.Literal("done"), Type.Literal("cancelled"), Type.Literal("error"), ]); export const WizardStartParamsSchema = Type.Object( { mode: Type.Optional(Type.Union([Type.Literal("local"), Type.Literal("remote")])), workspace: Type.Optional(Type.String()), }, { additionalProperties: false }, ); export const WizardAnswerSchema = Type.Object( { stepId: NonEmptyString, value: Type.Optional(Type.Unknown()), }, { additionalProperties: false }, ); export const WizardNextParamsSchema = Type.Object( { sessionId: NonEmptyString, answer: Type.Optional(WizardAnswerSchema), }, { additionalProperties: false }, ); const WizardSessionIdParamsSchema = Type.Object( { sessionId: NonEmptyString, }, { additionalProperties: false }, ); export const WizardCancelParamsSchema = WizardSessionIdParamsSchema; export const WizardStatusParamsSchema = WizardSessionIdParamsSchema; export const WizardStepOptionSchema = Type.Object( { value: Type.Unknown(), label: NonEmptyString, hint: Type.Optional(Type.String()), }, { additionalProperties: false }, ); export const WizardStepSchema = Type.Object( { id: NonEmptyString, type: Type.Union([ Type.Literal("note"), Type.Literal("select"), Type.Literal("text"), Type.Literal("confirm"), Type.Literal("multiselect"), Type.Literal("progress"), Type.Literal("action"), ]), title: Type.Optional(Type.String()), message: Type.Optional(Type.String()), options: Type.Optional(Type.Array(WizardStepOptionSchema)), initialValue: Type.Optional(Type.Unknown()), placeholder: Type.Optional(Type.String()), sensitive: Type.Optional(Type.Boolean()), executor: Type.Optional(Type.Union([Type.Literal("gateway"), Type.Literal("client")])), }, { additionalProperties: false }, ); const WizardResultFields = { done: Type.Boolean(), step: Type.Optional(WizardStepSchema), status: Type.Optional(WizardRunStatusSchema), error: Type.Optional(Type.String()), }; export const WizardNextResultSchema = Type.Object(WizardResultFields, { additionalProperties: false, }); export const WizardStartResultSchema = Type.Object( { sessionId: NonEmptyString, ...WizardResultFields, }, { additionalProperties: false }, ); export const WizardStatusResultSchema = Type.Object( { status: WizardRunStatusSchema, error: Type.Optional(Type.String()), }, { additionalProperties: false }, );