Files
openclaw/src/acp/protocol-schema.test.ts
Alex Knight 6a8b4e422e Implement ACP bridge lifecycle handlers (#78880)
* Implement ACP bridge lifecycle handlers

* docs: add acp smoke evidence example

* docs: trim acp smoke example

* docs: remove acp pr plan file

* fix: tighten acp session list filters

---------

Co-authored-by: Alex Knight <15041791+amknight@users.noreply.github.com>
2026-05-08 06:26:36 +10:00

137 lines
2.8 KiB
TypeScript

import { PROTOCOL_VERSION } from "@agentclientprotocol/sdk";
import {
zCloseSessionRequest,
zInitializeRequest,
zListSessionsRequest,
zLoadSessionRequest,
zNewSessionRequest,
zPromptRequest,
zResumeSessionRequest,
zSessionNotification,
} from "@agentclientprotocol/sdk/dist/schema/zod.gen.js";
import { describe, expect, it } from "vitest";
type SchemaFixture = {
name: string;
schema: {
safeParse: (input: unknown) => { success: boolean };
};
valid: unknown;
invalid: unknown;
};
const fixtures: SchemaFixture[] = [
{
name: "initialize",
schema: zInitializeRequest,
valid: {
protocolVersion: PROTOCOL_VERSION,
clientCapabilities: {
fs: { readTextFile: false, writeTextFile: false },
terminal: false,
},
},
invalid: {
protocolVersion: "1",
clientCapabilities: {},
},
},
{
name: "session/new",
schema: zNewSessionRequest,
valid: {
cwd: "/tmp/openclaw",
mcpServers: [],
},
invalid: {
cwd: 42,
mcpServers: [],
},
},
{
name: "session/prompt",
schema: zPromptRequest,
valid: {
sessionId: "session-1",
prompt: [{ type: "text", text: "hello" }],
},
invalid: {
sessionId: "session-1",
prompt: [{ type: "text" }],
},
},
{
name: "session/update",
schema: zSessionNotification,
valid: {
sessionId: "session-1",
update: {
sessionUpdate: "agent_message_chunk",
content: { type: "text", text: "hello" },
},
},
invalid: {
update: {
sessionUpdate: "agent_message_chunk",
content: { type: "text", text: "hello" },
},
},
},
{
name: "session/list",
schema: zListSessionsRequest,
valid: {
cwd: "/tmp/openclaw",
cursor: null,
},
invalid: {
cwd: "/tmp/openclaw",
cursor: 123,
},
},
{
name: "session/load",
schema: zLoadSessionRequest,
valid: {
sessionId: "agent:main:work",
cwd: "/tmp/openclaw",
mcpServers: [],
},
invalid: {
sessionId: "agent:main:work",
mcpServers: [],
},
},
{
name: "session/resume",
schema: zResumeSessionRequest,
valid: {
sessionId: "agent:main:work",
cwd: "/tmp/openclaw",
mcpServers: [],
},
invalid: {
sessionId: "agent:main:work",
cwd: 42,
mcpServers: [],
},
},
{
name: "session/close",
schema: zCloseSessionRequest,
valid: {
sessionId: "agent:main:work",
},
invalid: {
sessionId: null,
},
},
];
describe("ACP SDK protocol schema fixtures", () => {
it.each(fixtures)("$name validates representative payloads", ({ schema, valid, invalid }) => {
expect(schema.safeParse(valid).success).toBe(true);
expect(schema.safeParse(invalid).success).toBe(false);
});
});