import { describe, expect, it } from "vitest"; import { EventType, Route } from "./protocol"; describe("protocol", () => { it("PROTOCOL_VERSION is 1", async () => { const mod = await import("./protocol"); expect(mod.PROTOCOL_VERSION).toBe(1); }); it("EventType mirrors PROTOCOL.md", () => { expect(EventType.Hello).toBe("hello"); expect(EventType.MessageStart).toBe("message_start"); expect(EventType.MessageUpdate).toBe("message_update"); expect(EventType.MessageEnd).toBe("message_end"); expect(EventType.ToolExecutionStart).toBe("tool_execution_start"); expect(EventType.ToolExecutionUpdate).toBe("tool_execution_update"); expect(EventType.ToolExecutionEnd).toBe("tool_execution_end"); expect(EventType.AgentStart).toBe("agent_start"); expect(EventType.AgentEnd).toBe("agent_end"); expect(EventType.AgentSettled).toBe("agent_settled"); expect(EventType.SessionInfo).toBe("session_info"); expect(EventType.ErrorNotice).toBe("error_notice"); expect(EventType.Bye).toBe("bye"); }); it("Route constants", () => { expect(Route.Sessions).toBe("/api/sessions"); expect(Route.Spawn).toBe("/api/spawn"); expect(Route.SpawnStatus).toBe("/api/spawn/status"); expect(Route.GitlabStatus).toBe("/api/gitlab/status"); expect(Route.GitlabConnect).toBe("/api/gitlab/connect"); expect(Route.GitlabRepos).toBe("/api/gitlab/repos"); expect(Route.ModelCatalog).toBe("/api/model-catalog"); expect(Route.Repos).toBe("/api/repos"); expect(Route.Stats).toBe("/api/stats"); }); it("session routes interpolate and encode ids", () => { expect(Route.SessionEvents("abc")).toBe("/api/sessions/abc/events"); expect(Route.SessionPrompt("abc")).toBe("/api/sessions/abc/prompt"); expect(Route.SessionAbort("abc")).toBe("/api/sessions/abc/abort"); expect(Route.SessionContainer("abc")).toBe("/api/sessions/abc/container"); expect(Route.Session("abc")).toBe("/api/sessions/abc"); expect(Route.SessionModel("abc")).toBe("/api/sessions/abc/model"); expect(Route.SessionStats("abc")).toBe("/api/sessions/abc/stats"); expect(Route.RepoImage("g/p")).toBe("/api/repos/g/p/image"); expect(Route.RepoPrepare("g/p")).toBe("/api/repos/g/p/prepare"); expect(Route.SessionEvents("a/b c")).toBe("/api/sessions/a%2Fb%20c/events"); }); });