/** * skills domain contract: read-only skill catalog lookup addressed by session. * The session's header cwd resolves to the canonical project root host-side — * the client never submits a raw path, and skill lookup never creates or * resumes an Agent. */ import type { SessionId } from '@deepseek-ai/dsh-session/types' import type { RpcRequest, RpcResponse } from './rpc.ts' /** Skill catalog row (wire projection of the host SkillSummary; provider/source vocabulary stays host-side). */ export interface SkillEntry { /** Kebab-case identifier the user references as `/name` in the composer. */ readonly name: string /** Short routing description. */ readonly description: string /** Optional extra routing guidance. */ readonly whenToUse?: string /** False marks a user-only skill (`disable-model-invocation`): invocable here, absent from the model catalog. */ readonly modelInvocable: boolean } /** * Skill-domain unary methods (the map key skill.* of RpcMethodMap). Listing * is the domain's only RPC: invocation itself is a plain `session.prompt` * whose leading `/name` token the host recognizes at the pre-step boundary * (`dsh-tool-skill` injects the rendered body there), so every client shares * one deterministic path with no dedicated invocation wire. */ export interface SkillsApi { /** Lists the user-invocable skill catalog for the session's project. */ list(request: RpcRequest<{ sessionId: SessionId }>): Promise> }