From 135fc5dcea3e26391a1afc50b7e0c56b91757aef Mon Sep 17 00:00:00 2001 From: Wolfgang Schoenberger <221313372+wolfiesch@users.noreply.github.com> Date: Sat, 18 Jul 2026 04:21:58 -0700 Subject: [PATCH] test(protocol): preserve provider transport diagnostics --- packages/protocol/test/reexport.test.ts | 102 ++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/packages/protocol/test/reexport.test.ts b/packages/protocol/test/reexport.test.ts index 6fd3818c..2629e64f 100644 --- a/packages/protocol/test/reexport.test.ts +++ b/packages/protocol/test/reexport.test.ts @@ -35,6 +35,24 @@ function rawSession(liveState?: unknown): Record { }; } +const providerTransport = Object.freeze({ + provider: "openai-codex", + configuredPolicy: "auto", + websocketPreferred: true, + lastTransport: "websocket", + websocketDisabled: false, + websocketConnected: true, + fallbackCount: 0, + canAppend: true, + prewarmed: true, + hasSessionState: true, + hasTurnState: true, + fullContextRequests: 1, + deltaRequests: 12, + inputJsonBytes: 64_512, + lastInputJsonBytes: 2_048, +}); + describe("@omp/protocol app-wire facade", () => { it("re-exports the frozen protocol version and decoders", () => { expect(PROTOCOL_VERSION).toBe("omp-app/1"); @@ -154,6 +172,90 @@ describe("@omp/protocol app-wire facade", () => { }); }); + it("preserves additive provider transport evidence through list decoders", () => { + const sessions = [ + decodeServerFrame({ + v: "omp-app/1", + type: "sessions", + hostId: "host-a", + cursor: { epoch: "epoch-1", seq: 2 }, + sessions: [rawSession({ providerTransport })], + }), + decodeSessions({ + v: "omp-app/1", + type: "sessions", + cursor: { epoch: "epoch-1", seq: 3 }, + sessions: [rawSession({ providerTransport })], + }), + decodeSessionListResult({ + cursor: { epoch: "epoch-1", seq: 4 }, + sessions: [rawSession({ providerTransport })], + }), + ]; + + for (const decoded of sessions) { + expect(decoded).toMatchObject({ + sessions: [{ liveState: { providerTransport } }], + }); + } + }); + + it("preserves additive provider transport evidence through deltas and responses", () => { + const session = rawSession({ providerTransport }); + + expect( + decodeServerFrame({ + v: "omp-app/1", + type: "session.delta", + hostId: "host-a", + sessionId: "session-a", + cursor: { epoch: "epoch-1", seq: 5 }, + revision: "rev-2", + upsert: session, + }), + ).toMatchObject({ + type: "session.delta", + upsert: { liveState: { providerTransport } }, + }); + + expect( + decodeServerFrame({ + v: "omp-app/1", + type: "response", + requestId: "request-list-provider-transport", + hostId: "host-a", + ok: true, + command: "session.list", + result: { + cursor: { epoch: "epoch-1", seq: 6 }, + sessions: [session], + }, + }), + ).toMatchObject({ + type: "response", + result: { + sessions: [{ liveState: { providerTransport } }], + }, + }); + + expect( + decodeServerFrame({ + v: "omp-app/1", + type: "response", + requestId: "request-create-provider-transport", + hostId: "host-a", + ok: true, + command: "session.create", + result: { session }, + }), + ).toMatchObject({ + type: "response", + result: { + session: { liveState: { providerTransport } }, + }, + }); + }); + it("preserves unknown control markers in deltas and typed command results", () => { const future = rawSession({ sessionControl: { mode: "future-mode", version: 2 } }); expect(