import { z } from "zod"; // ── WebSocket RPC Method Names ─────────────────────────────────────── export const WS_METHODS = { // Provider methods (mirrors NativeApi.providers) providersStartSession: "providers.startSession", providersSendTurn: "providers.sendTurn", providersInterruptTurn: "providers.interruptTurn", providersRespondToRequest: "providers.respondToRequest", providersStopSession: "providers.stopSession", providersListSessions: "providers.listSessions", providersListCheckpoints: "providers.listCheckpoints", providersGetCheckpointDiff: "providers.getCheckpointDiff", providersRevertToCheckpoint: "providers.revertToCheckpoint", // Project registry methods projectsList: "projects.list", projectsAdd: "projects.add", projectsRemove: "projects.remove", projectsSearchEntries: "projects.searchEntries", projectsUpdateScripts: "projects.updateScripts", // Shell methods shellOpenInEditor: "shell.openInEditor", // Git methods gitPull: "git.pull", gitStatus: "git.status", gitRunStackedAction: "git.runStackedAction", gitListBranches: "git.listBranches", gitCreateWorktree: "git.createWorktree", gitRemoveWorktree: "git.removeWorktree", gitCreateBranch: "git.createBranch", gitCheckout: "git.checkout", gitInit: "git.init", // Terminal methods terminalOpen: "terminal.open", terminalWrite: "terminal.write", terminalResize: "terminal.resize", terminalClear: "terminal.clear", terminalRestart: "terminal.restart", terminalClose: "terminal.close", // Server meta serverGetConfig: "server.getConfig", serverUpsertKeybinding: "server.upsertKeybinding", // Server-authoritative state stateGetSnapshot: "state.getSnapshot", stateCreateThread: "state.createThread", stateDeleteThread: "state.deleteThread", stateMarkThreadVisited: "state.markThreadVisited", stateSetRuntimeMode: "state.setRuntimeMode", } as const; // ── Push Event Channels ────────────────────────────────────────────── export const WS_CHANNELS = { providerEvent: "providers.event", terminalEvent: "terminal.event", serverWelcome: "server.welcome", stateUpdated: "state.updated", } as const; // ── Client → Server (request) ──────────────────────────────────────── export const wsRequestSchema = z.object({ id: z.string().min(1), method: z.string().min(1), params: z.unknown().optional(), }); export type WsRequest = z.infer; // ── Server → Client (response to request) ──────────────────────────── export const wsResponseSchema = z.object({ id: z.string().min(1), result: z.unknown().optional(), error: z .object({ message: z.string(), }) .optional(), }); export type WsResponse = z.infer; // ── Server → Client (push event) ───────────────────────────────────── export const wsPushSchema = z.object({ type: z.literal("push"), channel: z.string().min(1), data: z.unknown(), }); export type WsPush = z.infer; // ── Union of all server → client messages ───────────────────────────── export type WsServerMessage = WsResponse | WsPush; // ── Server welcome payload ─────────────────────────────────────────── export const wsWelcomePayloadSchema = z.object({ cwd: z.string().min(1), projectName: z.string().min(1), }); export type WsWelcomePayload = z.infer;