/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/protocol/src/groups/event.ts
56 строк
2 KB
Kit Langton
feat(sdk): expose live event stream (#34098)
26 июн 2026, 22:16
Не верифицирован
26 июн 2026, 22:16
42e6b7d
Код
Авторство
О чём код?
import { Event } from "@opencode-ai/schema/event" import { EventManifest } from "@opencode-ai/schema/event-manifest" import { Location } from "@opencode-ai/schema/location" import type { Definition } from "@opencode-ai/schema/event" import { Schema } from "effect" import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi" const fields = { id: Event.ID, metadata: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)), durable: Schema.optional(Schema.Struct({ aggregateID: Schema.String, seq: Schema.Int, version: Schema.Int })), location: Schema.optional(Location.Ref), } const schema = <const Definitions extends ReadonlyArray<Definition>>(definitions: Definitions) => Schema.Union([ ...definitions, ...(definitions.some((definition) => definition.type === "server.connected") ? [] : [ Schema.Struct({ ...fields, type: Schema.Literal("server.connected"), data: Schema.Struct({}), }).annotate({ identifier: "V2Event.server.connected" }), ]), ]).annotate({ identifier: "V2Event" }) const make = <const Definitions extends ReadonlyArray<Definition>>(definitions: Definitions) => { const EventSchema = schema(definitions) return { schema: EventSchema, group: HttpApiGroup.make("server.event") .add( HttpApiEndpoint.get("event.subscribe", "/api/event", { success: HttpApiSchema.StreamSse({ data: EventSchema }), }).annotateMerge( OpenApi.annotations({ identifier: "v2.event.subscribe", summary: "Subscribe to events", description: "Subscribe to native event payloads for the server.", }), ), ) .annotateMerge(OpenApi.annotations({ title: "events", description: "Experimental event stream route." })), } } export const makeEventGroup = <const Definitions extends ReadonlyArray<Definition>>(definitions: Definitions) => make(definitions).group const event = make(EventManifest.ServerDefinitions) export const EventGroup = event.group export const OpenCodeEvent = event.schema export type OpenCodeEvent = typeof OpenCodeEvent.Type export type OpenCodeEventEncoded = typeof OpenCodeEvent.Encoded