diff --git a/packages/simulation/src/backend/control.ts b/packages/simulation/src/backend/control.ts index e52c8296f6..f5baa817be 100644 --- a/packages/simulation/src/backend/control.ts +++ b/packages/simulation/src/backend/control.ts @@ -29,7 +29,7 @@ function parseRequest(input: string | Buffer) { } async function handle(socket: ControlSocket, request: SimulationProtocol.JsonRpc.Request): Promise { - switch (request.method) { + switch (SimulationProtocol.Backend.decodeMethod(request.method)) { case "llm.attach": { socket.data.unsubscribe?.() socket.data.unsubscribe = SimulationLLMExchange.subscribe((exchange) => { @@ -62,7 +62,6 @@ async function handle(socket: ControlSocket, request: SimulationProtocol.JsonRpc case "network.log": return { entries: SimulationNetwork.log() } } - throw new Error(`Unknown simulation control method: ${request.method}`) } export function start(endpoint: string) { diff --git a/packages/simulation/src/protocol/index.ts b/packages/simulation/src/protocol/index.ts index e480a62b43..b70e440e53 100644 --- a/packages/simulation/src/protocol/index.ts +++ b/packages/simulation/src/protocol/index.ts @@ -111,6 +111,17 @@ export namespace Frontend { } export namespace Backend { + export const Method = Schema.Literals([ + "llm.attach", + "llm.chunk", + "llm.finish", + "llm.disconnect", + "llm.pending", + "network.log", + ]) + export type Method = Schema.Schema.Type + export const decodeMethod = Schema.decodeUnknownSync(Method) + export const Item = Schema.Union([ Schema.Struct({ type: Schema.Literal("textDelta"), text: Schema.String }), Schema.Struct({ type: Schema.Literal("reasoningDelta"), text: Schema.String }),