0d53752c49
Invocation is an ordinary session.prompt again: the pre-step gesture boundary makes it deterministic host-side for every front end, so the dedicated RPC (handler, wire schema, error codes, client face, fixtures) and ui-skill's claim machinery are net deletions. The menu keeps decision 21 exactly — a pick lands literal /name text — plus the user-only marker from skill.list's modelInvocable flag.
29 lines
948 B
TypeScript
29 lines
948 B
TypeScript
/**
|
|
* skills domain zod schemas (names derived from map keys: skillListRequestSchema /
|
|
* skillListValueSchema).
|
|
*/
|
|
|
|
import { z } from 'zod'
|
|
import type { RequestPayload, ResponseValue } from './rpc-map.ts'
|
|
import type { Wire } from './rpc.schema.ts'
|
|
import { sessionIdSchema } from './sessions.schema.ts'
|
|
import type { SkillEntry } from './skills.ts'
|
|
|
|
/** SkillEntry row of skill.list. */
|
|
export const skillEntrySchema = z.object({
|
|
name: z.string().min(1),
|
|
description: z.string(),
|
|
whenToUse: z.string().optional(),
|
|
modelInvocable: z.boolean(),
|
|
}) satisfies z.ZodType<Wire<SkillEntry>>
|
|
|
|
/** skill.list request payload. */
|
|
export const skillListRequestSchema = z.object({
|
|
sessionId: sessionIdSchema,
|
|
}) satisfies z.ZodType<Wire<RequestPayload<'skill.list'>>>
|
|
|
|
/** skill.list response value. */
|
|
export const skillListValueSchema = z.object({
|
|
skills: z.array(skillEntrySchema),
|
|
}) satisfies z.ZodType<Wire<ResponseValue<'skill.list'>>>
|