refactor(schema): declare event durability at definition level (#35172)
This commit is contained in:
parent
bd8d858bf7
commit
de476aa51b
53 changed files with 700 additions and 1165 deletions
|
|
@ -1,5 +1,15 @@
|
|||
import { describe, expect, test } from "bun:test"
|
||||
import { Agent, FileSystem, Form, Integration, Permission, Project, Reference, Session, Workspace } from "../src/index.js"
|
||||
import {
|
||||
Agent,
|
||||
FileSystem,
|
||||
Form,
|
||||
Integration,
|
||||
Permission,
|
||||
Project,
|
||||
Reference,
|
||||
Session,
|
||||
Workspace,
|
||||
} from "../src/index.js"
|
||||
import { EventManifest } from "../src/event-manifest.js"
|
||||
import { IdeEvent } from "../src/ide-event.js"
|
||||
import { SessionEvent } from "../src/session-event.js"
|
||||
|
|
@ -9,11 +19,11 @@ import { WorkspaceEvent } from "../src/workspace-event.js"
|
|||
|
||||
describe("public event manifest", () => {
|
||||
test("owns the complete public event surface", () => {
|
||||
expect(EventManifest.ServerDefinitions.filter((definition) => definition.type !== "agent.updated").length).toBe(86)
|
||||
expect(EventManifest.ServerDefinitions).toContain(Agent.Event.Updated)
|
||||
expect(EventManifest.ServerDefinitions.filter((definition) => definition.type === "agent.updated")).toEqual([
|
||||
Agent.Event.Updated,
|
||||
])
|
||||
expect(EventManifest.Definitions.filter((definition) => definition.type !== "agent.updated").length).toBe(101)
|
||||
expect(EventManifest.Definitions).toContain(Agent.Event.Updated)
|
||||
expect(EventManifest.Definitions.filter((definition) => definition.type === "agent.updated")).toEqual([
|
||||
Agent.Event.Updated,
|
||||
])
|
||||
|
|
@ -29,7 +39,9 @@ describe("public event manifest", () => {
|
|||
SessionV1.Event.Diff,
|
||||
SessionV1.Event.Error,
|
||||
])
|
||||
expect(Array.from(EventManifest.Latest.keys()).filter((type) => type !== "agent.updated").length).toBe(101)
|
||||
expect(Array.from(EventManifest.Latest.keys())).toEqual(
|
||||
EventManifest.Definitions.map((definition) => definition.type),
|
||||
)
|
||||
expect(EventManifest.Latest.get("agent.updated")).toBe(Agent.Event.Updated)
|
||||
expect(Agent.Event.Updated.durable).toBeUndefined()
|
||||
expect(EventManifest.Durable.has("agent.updated")).toBe(false)
|
||||
|
|
@ -62,4 +74,53 @@ describe("public event manifest", () => {
|
|||
expect(EventManifest.Durable.has("session.next.step.ended.1")).toBe(false)
|
||||
expect(EventManifest.Durable.get("session.next.step.ended.2")).toBe(SessionEvent.Step.Ended)
|
||||
})
|
||||
|
||||
test("derives durable definitions from explicit definition durability", () => {
|
||||
expect(Array.from(EventManifest.Durable.keys()).toSorted()).toEqual(
|
||||
[
|
||||
"session.created.1",
|
||||
"session.updated.1",
|
||||
"session.deleted.1",
|
||||
"message.updated.1",
|
||||
"message.removed.1",
|
||||
"message.part.updated.1",
|
||||
"message.part.removed.1",
|
||||
"session.next.agent.switched.1",
|
||||
"session.next.model.switched.1",
|
||||
"session.next.moved.1",
|
||||
"session.next.renamed.1",
|
||||
"session.next.forked.1",
|
||||
"session.next.prompted.1",
|
||||
"session.next.prompt.admitted.1",
|
||||
"session.next.context.updated.1",
|
||||
"session.next.synthetic.1",
|
||||
"session.next.skill.activated.1",
|
||||
"session.next.shell.started.1",
|
||||
"session.next.shell.ended.1",
|
||||
"session.next.step.started.1",
|
||||
"session.next.step.ended.2",
|
||||
"session.next.step.failed.2",
|
||||
"session.next.text.started.1",
|
||||
"session.next.text.ended.1",
|
||||
"session.next.tool.input.started.1",
|
||||
"session.next.tool.input.ended.1",
|
||||
"session.next.tool.called.1",
|
||||
"session.next.tool.progress.1",
|
||||
"session.next.tool.success.1",
|
||||
"session.next.tool.failed.1",
|
||||
"session.next.reasoning.started.1",
|
||||
"session.next.reasoning.ended.1",
|
||||
"session.next.retried.1",
|
||||
"session.next.compaction.started.1",
|
||||
"session.next.compaction.ended.1",
|
||||
"session.next.revert.staged.1",
|
||||
"session.next.revert.cleared.1",
|
||||
"session.next.revert.committed.1",
|
||||
].toSorted(),
|
||||
)
|
||||
expect(SessionEvent.DurableDefinitions).toEqual(
|
||||
SessionEvent.Definitions.filter((definition) => definition.durability === "durable"),
|
||||
)
|
||||
expect(EventManifest.Definitions.every((definition) => definition.durability !== undefined)).toBe(true)
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -6,17 +6,17 @@ import { EventLog } from "../src/event-log.js"
|
|||
describe("public event schemas", () => {
|
||||
test("definition is pure", () => {
|
||||
const definitions = Event.inventory()
|
||||
Event.define({ type: "test.pure", schema: { value: Schema.String } })
|
||||
Event.ephemeral({ type: "test.pure", schema: { value: Schema.String } })
|
||||
expect(definitions).toEqual([])
|
||||
})
|
||||
|
||||
test("latest selection is independent of declaration order", () => {
|
||||
const historical = Event.define({
|
||||
const historical = Event.durable({
|
||||
type: "test.versioned",
|
||||
durable: { aggregate: "id", version: 1 },
|
||||
schema: { id: Schema.String },
|
||||
})
|
||||
const current = Event.define({
|
||||
const current = Event.durable({
|
||||
type: "test.versioned",
|
||||
durable: { aggregate: "id", version: 2 },
|
||||
schema: { id: Schema.String, value: Schema.String },
|
||||
|
|
@ -27,13 +27,13 @@ describe("public event schemas", () => {
|
|||
})
|
||||
|
||||
test("durable definitions are indexed by type and version", () => {
|
||||
const definition = Event.define({
|
||||
const definition = Event.durable({
|
||||
type: "test.durable",
|
||||
durable: { aggregate: "id", version: 1 },
|
||||
schema: { id: Schema.String },
|
||||
})
|
||||
|
||||
expect(Event.durable([definition]).get("test.durable.1")).toBe(definition)
|
||||
expect(Event.durableMap([definition]).get("test.durable.1")).toBe(definition)
|
||||
})
|
||||
|
||||
test("synced marker encodes the captured watermark", () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue