commands.schema.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. /**
  2. * commands domain zod schemas (names derived from map keys: commandListRequestSchema /
  3. * commandListValueSchema / commandExecuteRequestSchema / commandExecuteValueSchema).
  4. */
  5. import { z } from 'zod'
  6. import type { RequestPayload, ResponseValue } from './rpc-map.ts'
  7. import type { Wire } from './rpc.schema.ts'
  8. import { sessionIdSchema } from './sessions.schema.ts'
  9. import type { CommandDescriptor } from './commands.ts'
  10. /** CommandDescriptor row of command.list. */
  11. export const commandDescriptorSchema = z.object({
  12. name: z.string().min(1),
  13. description: z.string(),
  14. input: z.object({ hint: z.string() }).optional(),
  15. }) satisfies z.ZodType<Wire<CommandDescriptor>>
  16. /** command.list request payload. */
  17. export const commandListRequestSchema = z.object({
  18. sessionId: sessionIdSchema,
  19. }) satisfies z.ZodType<Wire<RequestPayload<'command.list'>>>
  20. /** command.list response value. */
  21. export const commandListValueSchema = z.object({
  22. commands: z.array(commandDescriptorSchema),
  23. }) satisfies z.ZodType<Wire<ResponseValue<'command.list'>>>
  24. /** command.execute request payload. */
  25. export const commandExecuteRequestSchema = z.object({
  26. sessionId: sessionIdSchema,
  27. line: z.string(),
  28. }) satisfies z.ZodType<Wire<RequestPayload<'command.execute'>>>
  29. /** command.execute response value: pure admission — outcomes ride the logged lifecycle events; commandId (present exactly when matched) correlates with them. */
  30. export const commandExecuteValueSchema = z.object({
  31. matched: z.boolean(),
  32. commandId: z.string().min(1).optional(),
  33. }) satisfies z.ZodType<Wire<ResponseValue<'command.execute'>>>