feat(shared): define harness protocols

This commit is contained in:
Wenxin Duan
2026-09-07 15:23:12 +08:00
parent 98baf9aee7
commit e87c68f3ad
9 changed files with 380 additions and 1 deletions
+63
View File
@@ -0,0 +1,63 @@
import { describe, expect, it } from "vitest";
import * as shared from "../src/index.js";
function schema(): { parse(value: unknown): unknown; safeParse(value: unknown): { success: boolean } } {
const candidate = Reflect.get(shared, "HarnessEventSchema");
expect(candidate, "HarnessEventSchema must be exported").toBeDefined();
return candidate;
}
const base = {
eventId: "evt_1",
sessionId: "ses_1",
timestamp: "2026-09-07T00:00:00.000Z",
sequence: 1,
};
describe("HarnessEventSchema", () => {
it("accepts every required event discriminant", () => {
const payloads: Record<string, unknown> = {
"session.started": { cwd: "workspace/sessions/ses_1" },
"session.ended": { reason: "deleted" },
"user.message": { messageId: "msg_1", text: "hello", attachmentIds: [] },
"assistant.delta": { messageId: "msg_2", delta: "hel" },
"assistant.completed": { messageId: "msg_2" },
"skill.requested": { name: "ads-analysis", source: "project" },
"skill.loaded": { name: "ads-analysis", source: "project" },
"tool.requested": { toolCallId: "call_1", toolName: "mock_ads_metrics", arguments: {} },
"tool.completed": { toolCallId: "call_1", toolName: "mock_ads_metrics", result: {} },
"tool.failed": { toolCallId: "call_1", toolName: "mock_ads_metrics", error: "failed" },
"approval.required": { approvalId: "ap_1", toolCallId: "call_1", toolName: "save_report_draft", riskLevel: "medium", expiresAt: "2026-09-07T00:01:00.000Z", arguments: {} },
"approval.resolved": { approvalId: "ap_1", status: "approved" },
"attachment.uploaded": { attachmentId: "att_1", name: "creative.png", mediaType: "image/png", byteSize: 12, width: 1, height: 1 },
"attachment.rejected": { name: "bad.svg", reason: "UNSUPPORTED_IMAGE" },
"model.configured": { providerId: "openai", modelId: "gpt-image", supportsImages: true, source: "session" },
"model.validation_failed": { code: "MODEL_CONNECTION_FAILED", message: "Connection failed" },
"run.started": { modelId: "gpt-image" },
"run.cancelled": { reason: "user" },
"run.completed": { messageId: "msg_2" },
"run.failed": { code: "MODEL_ERROR", message: "Run failed" },
};
for (const [type, payload] of Object.entries(payloads)) {
expect(schema().safeParse({ ...base, type, payload }).success, type).toBe(true);
}
});
it("rejects a payload belonging to another discriminant", () => {
expect(schema().safeParse({
...base,
type: "assistant.delta",
payload: { approvalId: "ap_1" },
}).success).toBe(false);
});
it("requires a positive sequence", () => {
expect(schema().safeParse({
...base,
sequence: 0,
type: "session.started",
payload: { cwd: "workspace/sessions/ses_1" },
}).success).toBe(false);
});
});