From b4bad02c8b1ac6be975d733206f0bde1e71990ad Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 24 Jun 2026 23:20:13 -0400 Subject: [PATCH] test(protocol): verify event group boundary --- packages/protocol/test/event-boundary.test.ts | 8 ++++++++ packages/schema/src/event-manifest.ts | 19 +++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/protocol/test/event-boundary.test.ts b/packages/protocol/test/event-boundary.test.ts index f25a67951f..b61b8a9b9d 100644 --- a/packages/protocol/test/event-boundary.test.ts +++ b/packages/protocol/test/event-boundary.test.ts @@ -1,6 +1,11 @@ import { expect, test } from "bun:test" import { EventManifest } from "@opencode-ai/schema/event-manifest" import { SessionV1 } from "@opencode-ai/schema/session-v1" +import { HttpApi, OpenApi } from "effect/unstable/httpapi" +import { EventGroup } from "../src/groups/event" + +const currentOpenApi = OpenApi.fromApi(HttpApi.make("test").add(EventGroup)) +const currentEventOpenApi = JSON.stringify(currentOpenApi.components.schemas?.V2Event) test("current Protocol events exclude V1-only session events", () => { const current = new Set(EventManifest.CurrentServerDefinitions.map((definition) => definition.type)) @@ -22,6 +27,9 @@ test("current Protocol events exclude V1-only session events", () => { expect(current.has("permission.v2.asked")).toBe(true) expect(current.has("question.v2.asked")).toBe(true) expect(current.has("command.executed")).toBe(false) + expect(currentEventOpenApi).toContain("session.next.prompted") + expect(currentEventOpenApi).not.toContain("message.updated") + expect(currentEventOpenApi).not.toContain("message.part.updated") }) test("compatibility server inventory retains V1 events", () => { diff --git a/packages/schema/src/event-manifest.ts b/packages/schema/src/event-manifest.ts index 498e098cc3..bf530f7e1d 100644 --- a/packages/schema/src/event-manifest.ts +++ b/packages/schema/src/event-manifest.ts @@ -37,18 +37,10 @@ const sessionV1LiveDefinitions = SessionV1.Event.Definitions.filter((definition) const currentCoreDefinitions = Event.inventory(...SessionEvent.Definitions) const compatibilityCoreDefinitions = Event.inventory(...sessionV1DurableDefinitions, ...currentCoreDefinitions) -const currentFoundationDefinitions = Event.inventory( +const foundationDefinitions = Event.inventory( ...ModelsDev.Event.Definitions, ...Integration.Event.Definitions, ...Catalog.Event.Definitions, - ...currentCoreDefinitions, -) - -const compatibilityFoundationDefinitions = Event.inventory( - ...ModelsDev.Event.Definitions, - ...Integration.Event.Definitions, - ...Catalog.Event.Definitions, - ...compatibilityCoreDefinitions, ) const featureDefinitions = Event.inventory( @@ -63,19 +55,22 @@ const featureDefinitions = Event.inventory( ) export const CurrentServerDefinitions = Event.inventory( - ...currentFoundationDefinitions, + ...foundationDefinitions, + ...currentCoreDefinitions, ...featureDefinitions, ...SessionTodo.Event.Definitions, ) export const ServerDefinitions = Event.inventory( - ...compatibilityFoundationDefinitions, + ...foundationDefinitions, + ...compatibilityCoreDefinitions, ...featureDefinitions, ...SessionTodo.Event.Definitions, ) export const Definitions = Event.inventory( - ...compatibilityFoundationDefinitions, + ...foundationDefinitions, + ...compatibilityCoreDefinitions, ...sessionV1LiveDefinitions, ...InstallationEvent.Definitions, ...featureDefinitions,