[feat] add CrossDesk MCP with remote desktop panels

This commit is contained in:
dijunkun
2026-11-03 02:44:55 +08:00
parent 2fab61871e
commit f57b4cc4e3
40 changed files with 6325 additions and 28 deletions
+46
View File
@@ -0,0 +1,46 @@
import { z } from "zod";
import { parse, uiConnect, Failure, type Data } from "./common.js";
import { Sessions, type View } from "./sessions.js";
export const uiSchemas = {
ready: z.strictObject({}),
devices: z.strictObject({}),
status: z.strictObject({}),
connect: uiConnect,
video_open: z.strictObject({}),
control: z.strictObject({
operation: z.enum(["pause", "resume", "disconnect"]),
}),
};
export type UIAction = keyof typeof uiSchemas;
export async function uiAction(
sessions: Sessions,
view: View,
name: string,
args: unknown,
signal?: AbortSignal,
): Promise<Data> {
if (!Object.hasOwn(uiSchemas, name)) throw new Failure("UNKNOWN_ACTION");
const p = parse(uiSchemas[name as UIAction], args) as Data;
view.lastSeen = Date.now();
switch (name) {
case "ready":
view.ready = true;
return sessions.describe(view);
case "devices": {
const config = await sessions.store.config();
return {
devices: await sessions.store.list(),
defaults: { server: config.server, port: config.port },
};
}
case "status":
return sessions.status(undefined, view.id);
case "connect":
return sessions.connectUI(view, p, signal);
case "control":
return sessions.viewerControl(view, p.operation);
default:
throw new Failure("UNKNOWN_ACTION");
}
}