From f26a9e8856ae26deaf6a3b64700da408ee5e2833 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Fri, 5 Jun 2026 16:08:20 +0000 Subject: [PATCH] chore: generate --- packages/core/src/location-layer.ts | 14 +-- packages/core/src/session.ts | 3 +- packages/core/src/session/run-coordinator.ts | 19 ++- packages/core/test/session-prompt.test.ts | 6 +- .../core/test/session-run-coordinator.test.ts | 4 +- .../core/test/session-runner-recorded.test.ts | 6 +- packages/core/test/session-runner.test.ts | 6 +- packages/sdk/js/src/v2/gen/types.gen.ts | 34 ++++++ packages/sdk/openapi.json | 114 ++++++++++++++++++ 9 files changed, 185 insertions(+), 21 deletions(-) diff --git a/packages/core/src/location-layer.ts b/packages/core/src/location-layer.ts index 31a3b6009..7a377067b 100644 --- a/packages/core/src/location-layer.ts +++ b/packages/core/src/location-layer.ts @@ -86,17 +86,9 @@ export class LocationServiceMap extends LayerMap.Service()(" Layer.provide(model), Layer.provide(skillGuidance), ) - return Layer.mergeAll( - services, - commits, - searches, - resources, - todos, - questions, - model, - runner, - builtInTools, - ).pipe(Layer.fresh) + return Layer.mergeAll(services, commits, searches, resources, todos, questions, model, runner, builtInTools).pipe( + Layer.fresh, + ) }, idleTimeToLive: "60 minutes", dependencies: [ diff --git a/packages/core/src/session.ts b/packages/core/src/session.ts index adb2e9cb7..9d8d0d7d8 100644 --- a/packages/core/src/session.ts +++ b/packages/core/src/session.ts @@ -409,7 +409,8 @@ export const layer = Layer.effect( sessionID, timestamp: yield* DateTime.now, }) - if (event.seq === undefined) return yield* Effect.die("Interrupt request event is missing aggregate sequence") + if (event.seq === undefined) + return yield* Effect.die("Interrupt request event is missing aggregate sequence") yield* execution.interrupt(sessionID, event.seq) }), ), diff --git a/packages/core/src/session/run-coordinator.ts b/packages/core/src/session/run-coordinator.ts index ecf47ac00..5068b913a 100644 --- a/packages/core/src/session/run-coordinator.ts +++ b/packages/core/src/session/run-coordinator.ts @@ -95,7 +95,10 @@ export const make = (options: { // Initial work retains immediate-start behavior but cannot run before ownership is published. // Observer-started successors yield once so synchronous drains cannot recurse on the JS stack. const owner = fork( - (successor ? Effect.yieldNow.pipe(Effect.andThen(drain)) : Deferred.await(ready).pipe(Effect.andThen(drain))).pipe( + (successor + ? Effect.yieldNow.pipe(Effect.andThen(drain)) + : Deferred.await(ready).pipe(Effect.andThen(drain)) + ).pipe( Effect.onExit((exit) => Effect.sync(() => settle(key, entry, demand, exit))), Effect.exit, Effect.asVoid, @@ -194,7 +197,12 @@ export const make = (options: { return entry?.stopping && entry.owner !== undefined ? Fiber.interrupt(entry.owner) : Effect.void if (seq !== undefined) interruptSeq.set(key, seq) if (entry?.owner === undefined) return Effect.void - if (seq !== undefined && entry.current._tag === "wake" && entry.current.seq !== undefined && entry.current.seq > seq) + if ( + seq !== undefined && + entry.current._tag === "wake" && + entry.current.seq !== undefined && + entry.current.seq > seq + ) return Effect.void if (entry.stopping) { entry.interruptSeq = maxSeq(entry.interruptSeq, seq) @@ -246,7 +254,12 @@ export const make = (options: { } function suppressPendingAtOrBefore(entry: Entry, seq: number | undefined) { - if (entry.pending?._tag === "wake" && seq !== undefined && entry.pending.seq !== undefined && entry.pending.seq > seq) + if ( + entry.pending?._tag === "wake" && + seq !== undefined && + entry.pending.seq !== undefined && + entry.pending.seq > seq + ) return entry.pending = undefined } diff --git a/packages/core/test/session-prompt.test.ts b/packages/core/test/session-prompt.test.ts index b58761ab5..d663cb715 100644 --- a/packages/core/test/session-prompt.test.ts +++ b/packages/core/test/session-prompt.test.ts @@ -578,7 +578,11 @@ describe("SessionV2.prompt", () => { wakeCalls.length = 0 wakeSeqs.length = 0 - const admitted = yield* session.prompt({ sessionID, prompt: new Prompt({ text: "Run explicitly" }), resume: true }) + const admitted = yield* session.prompt({ + sessionID, + prompt: new Prompt({ text: "Run explicitly" }), + resume: true, + }) expect(executionCalls).toEqual([]) expect(wakeCalls).toEqual([sessionID]) diff --git a/packages/core/test/session-run-coordinator.test.ts b/packages/core/test/session-run-coordinator.test.ts index a4adf5464..39fb5779d 100644 --- a/packages/core/test/session-run-coordinator.test.ts +++ b/packages/core/test/session-run-coordinator.test.ts @@ -325,9 +325,7 @@ describe("SessionRunCoordinator", () => { drain: () => Effect.sync(() => ++runs).pipe( Effect.flatMap((run) => - run === 1 - ? Deferred.succeed(firstStarted, undefined).pipe(Effect.andThen(Effect.never)) - : Effect.void, + run === 1 ? Deferred.succeed(firstStarted, undefined).pipe(Effect.andThen(Effect.never)) : Effect.void, ), ), }) diff --git a/packages/core/test/session-runner-recorded.test.ts b/packages/core/test/session-runner-recorded.test.ts index 8f4bebc2d..905d5a7f9 100644 --- a/packages/core/test/session-runner-recorded.test.ts +++ b/packages/core/test/session-runner-recorded.test.ts @@ -81,7 +81,11 @@ const execution = Layer.effect( SessionExecution.Service, SessionRunCoordinator.Service.pipe( Effect.map((coordinator) => - SessionExecution.Service.of({ resume: coordinator.run, wake: coordinator.wake, interrupt: coordinator.interrupt }), + SessionExecution.Service.of({ + resume: coordinator.run, + wake: coordinator.wake, + interrupt: coordinator.interrupt, + }), ), ), ).pipe(Layer.provide(coordinator)) diff --git a/packages/core/test/session-runner.test.ts b/packages/core/test/session-runner.test.ts index b36cae91a..61d8aa889 100644 --- a/packages/core/test/session-runner.test.ts +++ b/packages/core/test/session-runner.test.ts @@ -221,7 +221,11 @@ const execution = Layer.effect( SessionExecution.Service, SessionRunCoordinator.Service.pipe( Effect.map((coordinator) => - SessionExecution.Service.of({ resume: coordinator.run, wake: coordinator.wake, interrupt: coordinator.interrupt }), + SessionExecution.Service.of({ + resume: coordinator.run, + wake: coordinator.wake, + interrupt: coordinator.interrupt, + }), ), ), ).pipe(Layer.provide(coordinator)) diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 4d71b3c52..00a964406 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -21,6 +21,7 @@ export type Event = | EventSessionNextPrompted | EventSessionNextPromptAdmitted | EventSessionNextPromptPromoted + | EventSessionNextInterruptRequested | EventSessionNextContextUpdated | EventSessionNextSynthetic | EventSessionNextShellStarted @@ -868,6 +869,14 @@ export type GlobalEvent = { timeCreated: number } } + | { + id: string + type: "session.next.interrupt.requested" + properties: { + timestamp: number + sessionID: string + } + } | { id: string type: "session.next.context.updated" @@ -1626,6 +1635,7 @@ export type GlobalEvent = { | SyncEventSessionNextPrompted | SyncEventSessionNextPromptAdmitted | SyncEventSessionNextPromptPromoted + | SyncEventSessionNextInterruptRequested | SyncEventSessionNextContextUpdated | SyncEventSessionNextSynthetic | SyncEventSessionNextShellStarted @@ -3271,6 +3281,21 @@ export type SyncEventSessionNextPromptPromoted = { } } +export type SyncEventSessionNextInterruptRequested = { + type: "sync" + id: string + syncEvent: { + type: "session.next.interrupt.requested.1" + id: string + seq: number + aggregateID: string + data: { + timestamp: number + sessionID: string + } + } +} + export type SyncEventSessionNextContextUpdated = { type: "sync" id: string @@ -4381,6 +4406,15 @@ export type EventSessionNextPromptPromoted = { } } +export type EventSessionNextInterruptRequested = { + id: string + type: "session.next.interrupt.requested" + properties: { + timestamp: number + sessionID: string + } +} + export type EventSessionNextContextUpdated = { id: string type: "session.next.context.updated" diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 62296d37f..00c80c28d 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -12097,6 +12097,9 @@ { "$ref": "#/components/schemas/EventSessionNextPromptPromoted" }, + { + "$ref": "#/components/schemas/EventSessionNextInterruptRequested" + }, { "$ref": "#/components/schemas/EventSessionNextContextUpdated" }, @@ -14695,6 +14698,35 @@ "required": ["id", "type", "properties"], "additionalProperties": false }, + { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^evt_" + }, + "type": { + "type": "string", + "enum": ["session.next.interrupt.requested"] + }, + "properties": { + "type": "object", + "properties": { + "timestamp": { + "type": "number" + }, + "sessionID": { + "type": "string", + "pattern": "^ses" + } + }, + "required": ["timestamp", "sessionID"], + "additionalProperties": false + } + }, + "required": ["id", "type", "properties"], + "additionalProperties": false + }, { "type": "object", "properties": { @@ -17252,6 +17284,9 @@ { "$ref": "#/components/schemas/SyncEventSessionNextPromptPromoted" }, + { + "$ref": "#/components/schemas/SyncEventSessionNextInterruptRequested" + }, { "$ref": "#/components/schemas/SyncEventSessionNextContextUpdated" }, @@ -21983,6 +22018,56 @@ "required": ["type", "id", "syncEvent"], "additionalProperties": false }, + "SyncEventSessionNextInterruptRequested": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["sync"] + }, + "id": { + "type": "string", + "pattern": "^evt_" + }, + "syncEvent": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["session.next.interrupt.requested.1"] + }, + "id": { + "type": "string", + "pattern": "^evt_" + }, + "seq": { + "type": "number" + }, + "aggregateID": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "timestamp": { + "type": "number" + }, + "sessionID": { + "type": "string", + "pattern": "^ses" + } + }, + "required": ["timestamp", "sessionID"], + "additionalProperties": false + } + }, + "required": ["type", "id", "seq", "aggregateID", "data"], + "additionalProperties": false + } + }, + "required": ["type", "id", "syncEvent"], + "additionalProperties": false + }, "SyncEventSessionNextContextUpdated": { "type": "object", "properties": { @@ -25378,6 +25463,35 @@ "required": ["id", "type", "properties"], "additionalProperties": false }, + "EventSessionNextInterruptRequested": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^evt_" + }, + "type": { + "type": "string", + "enum": ["session.next.interrupt.requested"] + }, + "properties": { + "type": "object", + "properties": { + "timestamp": { + "type": "number" + }, + "sessionID": { + "type": "string", + "pattern": "^ses" + } + }, + "required": ["timestamp", "sessionID"], + "additionalProperties": false + } + }, + "required": ["id", "type", "properties"], + "additionalProperties": false + }, "EventSessionNextContextUpdated": { "type": "object", "properties": {