/** * host domain zod schemas (names derived from map keys). */ import { z } from 'zod' import type { DirectoryEntry } from './host.ts' import type { RequestPayload, ResponseValue } from './rpc-map.ts' import type { Wire } from './rpc.schema.ts' /** host.describe request payload (empty object literal). */ export const hostDescribeRequestSchema = z.object({}) satisfies z.ZodType>> /** host.describe response value. */ export const hostDescribeValueSchema = z.object({ version: z.string(), cwd: z.string(), provider: z.string().optional(), model: z.string().optional(), attachedSessions: z.number().int().nonnegative(), // Open string, not a literal union: unknown kinds must survive the wire so // a merge-added capability can advertise (the client hides the affordance). }) satisfies z.ZodType>> /** host.pickDirectory request payload (empty object literal). */ export const hostPickDirectoryRequestSchema = z.object({}) satisfies z.ZodType>> /** host.pickDirectory response value; null means the user cancelled. */ export const hostPickDirectoryValueSchema = z.object({ path: z.string().nullable(), }) satisfies z.ZodType>> /** Directory row shared by listing entries and breadcrumb crumbs. */ export const directoryEntrySchema = z.object({ name: z.string(), path: z.string(), hidden: z.boolean(), }) satisfies z.ZodType> /** host.listDirectory request payload; an absent path lists the home directory. */ export const hostListDirectoryRequestSchema = z.object({ path: z.string().optional(), }) satisfies z.ZodType>> /** host.listDirectory response value. */ export const hostListDirectoryValueSchema = z.object({ path: z.string(), home: z.string(), crumbs: z.array(directoryEntrySchema), entries: z.array(directoryEntrySchema), truncated: z.boolean(), }) satisfies z.ZodType>> /** host.createDirectory request payload: name must be one plain path segment. */ export const hostCreateDirectoryRequestSchema = z.object({ path: z.string(), name: z.string(), }).refine( payload => payload.name.trim() !== '' && payload.name !== '.' && payload.name !== '..' && !/[/\\]/.test(payload.name), { message: 'host.createDirectory requires a single non-blank path segment name' }, ) satisfies z.ZodType>> /** host.createDirectory response value: the created directory's absolute path. */ export const hostCreateDirectoryValueSchema = z.object({ path: z.string(), }) satisfies z.ZodType>> /** host.openPath request payload. */ export const hostOpenPathRequestSchema = z.object({ path: z.string().min(1), }) satisfies z.ZodType>> /** host.openPath response value. */ export const hostOpenPathValueSchema = z.object({ opened: z.literal(true), }) satisfies z.ZodType>>