refactor(protocol): define current event surface
This commit is contained in:
parent
a267222080
commit
6ad5ce39be
3 changed files with 53 additions and 6 deletions
|
|
@ -54,6 +54,6 @@ const make = (definitions: ReadonlyArray<Definition>) => {
|
||||||
|
|
||||||
export const makeEventGroup = (definitions: ReadonlyArray<Definition>) => make(definitions).group
|
export const makeEventGroup = (definitions: ReadonlyArray<Definition>) => make(definitions).group
|
||||||
|
|
||||||
const event = make(EventManifest.ServerDefinitions)
|
const event = make(EventManifest.CurrentServerDefinitions)
|
||||||
export const EventGroup = event.group
|
export const EventGroup = event.group
|
||||||
export type Event = typeof event.schema.Type
|
export type Event = typeof event.schema.Type
|
||||||
|
|
|
||||||
33
packages/protocol/test/event-boundary.test.ts
Normal file
33
packages/protocol/test/event-boundary.test.ts
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
import { expect, test } from "bun:test"
|
||||||
|
import { EventManifest } from "@opencode-ai/schema/event-manifest"
|
||||||
|
import { SessionV1 } from "@opencode-ai/schema/session-v1"
|
||||||
|
|
||||||
|
test("current Protocol events exclude V1-only session events", () => {
|
||||||
|
const current = new Set<string>(EventManifest.CurrentServerDefinitions.map((definition) => definition.type))
|
||||||
|
const v1Only = SessionV1.Event.Definitions.filter((definition) => definition.durable !== undefined).map(
|
||||||
|
(definition) => definition.type,
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(v1Only).toEqual([
|
||||||
|
"session.created",
|
||||||
|
"session.updated",
|
||||||
|
"session.deleted",
|
||||||
|
"message.updated",
|
||||||
|
"message.removed",
|
||||||
|
"message.part.updated",
|
||||||
|
"message.part.removed",
|
||||||
|
])
|
||||||
|
expect(v1Only.filter((type) => current.has(type))).toEqual([])
|
||||||
|
expect(current.has("session.next.prompted")).toBe(true)
|
||||||
|
expect(current.has("permission.v2.asked")).toBe(true)
|
||||||
|
expect(current.has("question.v2.asked")).toBe(true)
|
||||||
|
expect(current.has("command.executed")).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("compatibility server inventory retains V1 events", () => {
|
||||||
|
const compatibility = new Set(EventManifest.ServerDefinitions.map((definition) => definition.type))
|
||||||
|
|
||||||
|
expect(compatibility.has("session.created")).toBe(true)
|
||||||
|
expect(compatibility.has("message.updated")).toBe(true)
|
||||||
|
expect(compatibility.has("message.part.updated")).toBe(true)
|
||||||
|
})
|
||||||
|
|
@ -34,13 +34,21 @@ import { WorktreeEvent } from "./worktree-event"
|
||||||
const sessionV1DurableDefinitions = SessionV1.Event.Definitions.filter((definition) => definition.durable !== undefined)
|
const sessionV1DurableDefinitions = SessionV1.Event.Definitions.filter((definition) => definition.durable !== undefined)
|
||||||
const sessionV1LiveDefinitions = SessionV1.Event.Definitions.filter((definition) => definition.durable === undefined)
|
const sessionV1LiveDefinitions = SessionV1.Event.Definitions.filter((definition) => definition.durable === undefined)
|
||||||
|
|
||||||
const coreDefinitions = Event.inventory(...sessionV1DurableDefinitions, ...SessionEvent.Definitions)
|
const currentCoreDefinitions = Event.inventory(...SessionEvent.Definitions)
|
||||||
|
const compatibilityCoreDefinitions = Event.inventory(...sessionV1DurableDefinitions, ...currentCoreDefinitions)
|
||||||
|
|
||||||
const foundationDefinitions = Event.inventory(
|
const currentFoundationDefinitions = Event.inventory(
|
||||||
...ModelsDev.Event.Definitions,
|
...ModelsDev.Event.Definitions,
|
||||||
...Integration.Event.Definitions,
|
...Integration.Event.Definitions,
|
||||||
...Catalog.Event.Definitions,
|
...Catalog.Event.Definitions,
|
||||||
...coreDefinitions,
|
...currentCoreDefinitions,
|
||||||
|
)
|
||||||
|
|
||||||
|
const compatibilityFoundationDefinitions = Event.inventory(
|
||||||
|
...ModelsDev.Event.Definitions,
|
||||||
|
...Integration.Event.Definitions,
|
||||||
|
...Catalog.Event.Definitions,
|
||||||
|
...compatibilityCoreDefinitions,
|
||||||
)
|
)
|
||||||
|
|
||||||
const featureDefinitions = Event.inventory(
|
const featureDefinitions = Event.inventory(
|
||||||
|
|
@ -54,14 +62,20 @@ const featureDefinitions = Event.inventory(
|
||||||
...Question.Event.Definitions,
|
...Question.Event.Definitions,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
export const CurrentServerDefinitions = Event.inventory(
|
||||||
|
...currentFoundationDefinitions,
|
||||||
|
...featureDefinitions,
|
||||||
|
...SessionTodo.Event.Definitions,
|
||||||
|
)
|
||||||
|
|
||||||
export const ServerDefinitions = Event.inventory(
|
export const ServerDefinitions = Event.inventory(
|
||||||
...foundationDefinitions,
|
...compatibilityFoundationDefinitions,
|
||||||
...featureDefinitions,
|
...featureDefinitions,
|
||||||
...SessionTodo.Event.Definitions,
|
...SessionTodo.Event.Definitions,
|
||||||
)
|
)
|
||||||
|
|
||||||
export const Definitions = Event.inventory(
|
export const Definitions = Event.inventory(
|
||||||
...foundationDefinitions,
|
...compatibilityFoundationDefinitions,
|
||||||
...sessionV1LiveDefinitions,
|
...sessionV1LiveDefinitions,
|
||||||
...InstallationEvent.Definitions,
|
...InstallationEvent.Definitions,
|
||||||
...featureDefinitions,
|
...featureDefinitions,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue