DashboardopencodeSession 0Grbjx9dOi2s

Session 0Grbjx9dOi2s

Full ID: 0Grbjx9dOi2sheF9O
Messages: 60
Distillations: 7
Time range: 2026-09-15 22:29:13 — 2026-09-15 22:57:13

Conversation (60 messages)

Final read-only narrow audit in /home/byk/Code/opencode; no recall; no edits/tests/build/commit/services. Inspect current files. Verify two prior blockers are closed: (1) exact resume:true retry of an already-promoted prompt cannot wake/execute an unrelated resume:false input across normal, defect, and concurrent paths; SessionInput.admit shouldWake semantics and regression adequacy. (2) checked-in packages/sdk/openapi.json and packages/sdk/js generated contracts include optional PromptAdmitted.requestExecution and PromptExecutionRequested in public/durable/sync unions as required. Also check no public generated artifact obviously omitted. Return findings with exact file:line and sequence, or PASS with residual gaps. Never empty.

gateway · 2026-09-15 22:29:13
result
Found 65 matches
/home/byk/Code/opencode/packages/schema/test/event-manifest.test.ts:
  Line 53:       SessionEvent.PromptExecutionRequested,


/home/byk/Code/opencode/packages/schema/src/session-event.ts:
  Line 94: export const PromptAdmitted = Event.define({

  Line 99:     requestExecution: Schema.Boolean.pipe(optional),

  Line 102: export type PromptAdmitted = typeof PromptAdmitted.Type

  Line 104: export const PromptExecutionRequested = Event.define({

  Line 112: export type PromptExecutionRequested = typeof PromptExecutionRequested.Type

  Line 489:   PromptAdmitted,

  Line 490:   PromptExecutionRequested,

  Line 523:   PromptAdmitted,

  Line 524:   PromptExecutionRequested,


/home/byk/Code/opencode/packages/core/test/session-runner.test.ts:
  Line 705:         requestExecution: true,


/home/byk/Code/opencode/packages/core/test/session-projector.test.ts:
  Line 633:         requestExecution: true,

  Line 880:         requestExecution: false,

  Line 1356:         ...
gateway · 2026-09-15 22:32:36
result
<path>/home/byk/Code/opencode/packages/core/src/session/input.ts</path>
<type>file</type>
<content>
1: export * as SessionInput from "./input"
2: 
3: import { and, asc, eq, isNull, lte } from "drizzle-orm"
4: import { DateTime, Effect, Schema } from "effect"
5: import { Admitted, Delivery } from "@opencode-ai/schema/session-input"
6: import type { Database } from "../database/database"
7: import { EventV2 } from "../event"
8: import { SessionEvent } from "./event"
9: import { SessionMessage } from "./message"
10: import { Prompt } from "./prompt"
11: import { SessionSchema } from "./schema"
12: import { SessionInputTable, SessionMessageTable, SessionRecoveryTable } from "./sql"
13: 
14: type DatabaseService = Database.Interface["db"]
15: 
16: export { Admitted, Delivery }
17: 
18: const decodePrompt = Schema.decodeUnknownSync(Prompt)
19: const encodePrompt = Schema.encodeSync(Prompt)
20: 
21: export const decode = (value: unknown) => Schema.decodeUnknownOption(Prompt)(value)
22: 
23: ...
gateway · 2026-09-15 22:33:33
result
<path>/home/byk/Code/opencode/packages/core/test/session-prompt.test.ts</path>
<type>file</type>
<content>
340:         prompt: Prompt.make({ text: "Promote this prompt" }),
341:       })
342:       yield* SessionInput.promoteSteers(db, events, sessionID, Number.MAX_SAFE_INTEGER)
343:       yield* session.prompt({
344:         sessionID,
345:         id: pendingID,
346:         prompt: Prompt.make({ text: "Keep this prompt pending" }),
347:         resume: false,
348:       })
349:       wakeCalls.length = 0
350: 
351:       yield* session.prompt({
352:         sessionID,
353:         id: messageID,
354:         prompt: Prompt.make({ text: "Promote this prompt" }),
355:         resume: true,
356:       })
357: 
358:       expect(wakeCalls).toEqual([])
359:       expect(yield* db.select().from(SessionInputTable).where(eq(SessionInputTable.id, messageID)).get()).toMatchObject(
360:         {
361:           promoted_seq: 1,
362:           wake_pending: false,
363:         },
364:       ...
gateway · 2026-09-15 22:34:06
result
<path>/home/byk/Code/opencode/packages/core/test/session-prompt.test.ts</path>
<type>file</type>
<content>
260:         prompt: Prompt.make({ text: "Fix the failing tests" }),
261:         resume: false,
262:       })
263: 
264:       executionCalls.length = 0
265:       wakeCalls.length = 0
266:       yield* session.resume(sessionID)
267: 
268:       expect(yield* session.messages({ sessionID })).toEqual([])
269:       expect(yield* admitted(message.id)).not.toHaveProperty("promotedSeq")
270:       expect(executionCalls).toEqual([sessionID])
271:       expect(wakeCalls).toEqual([])
272:     }),
273:   )
274: 
275:   it.effect("records distinct messages when the ID is omitted", () =>
276:     Effect.gen(function* () {
277:       yield* setup
278:       const session = yield* SessionV2.Service
279:       const input = { sessionID, prompt: Prompt.make({ text: "Fix the failing tests" }), resume: false }
280: 
281:       const first = yield* session.prompt(input)
282:       const second = ...
gateway · 2026-09-15 22:34:12
result
Found 52 matches
/home/byk/Code/opencode/packages/core/test/session-execution-local.test.ts:
  Line 151:       yield* execution.resume(sessionID).pipe(Effect.catchDefect(() => Effect.void))


/home/byk/Code/opencode/packages/core/test/session-runner.test.ts:
  Line 149:       defect: Tool.make({

  Line 153:         execute: () => Effect.die("unexpected tool defect"),

  Line 972:       expect(requests[0]?.tools.map((tool) => tool.name)).toEqual(["echo", "defect"])

  Line 1856:       expect(requests[0]?.tools.map((tool) => tool.name)).toEqual(["echo", "defect"])

  Line 2935:       const defect = new Error("fail after prompt promotion")

  Line 2937:       yield* events.project(SessionEvent.Prompted, () => (fail ? Effect.die(defect) : Effect.void))

  Line 2940:       expect(yield* session.resume(sessionID).pipe(Effect.catchDefect(Effect.succeed))).toBe(defect)

  Line 2956:   it.effect("does not strand a committed promotion when a post-commit listener defects", () =>

  Line 3154:   ...
gateway · 2026-09-15 22:34:25
result
<path>/home/byk/Code/opencode/packages/core/src/session.ts</path>
<type>file</type>
<content>
330:           .from(SessionMessageTable)
331:           .where(where)
332:           .orderBy(order === "asc" ? asc(SessionMessageTable.seq) : desc(SessionMessageTable.seq))
333:         const rows = yield* (input.limit === undefined ? query.all() : query.limit(input.limit).all()).pipe(
334:           Effect.orDie,
335:         )
336:         return yield* Effect.forEach(direction === "previous" ? rows.toReversed() : rows, decode)
337:       }),
338:       message: Effect.fn("V2Session.message")(function* (input) {
339:         const stored = yield* store.message(input.messageID)
340:         return stored?.sessionID === input.sessionID ? stored.message : undefined
341:       }),
342:       context: Effect.fn("V2Session.context")(function* (sessionID) {
343:         yield* result.get(sessionID)
344:         return yield* store.context(sessionID)
345:       }),
346:       events: (input) ...
gateway · 2026-09-15 22:34:43
result
<path>/home/byk/Code/opencode/packages/core/test/session-prompt.test.ts</path>
<type>file</type>
<content>
1: import { describe, expect } from "bun:test"
2: import { DateTime, Effect, Fiber, Layer, Stream } from "effect"
3: import { asc, eq } from "drizzle-orm"
4: import { Database } from "@opencode-ai/core/database/database"
5: import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
6: import { LayerNode } from "@opencode-ai/core/effect/layer-node"
7: import { EventV2 } from "@opencode-ai/core/event"
8: import { EventTable } from "@opencode-ai/core/event/sql"
9: import { SessionEvent } from "@opencode-ai/core/session/event"
10: import { Project } from "@opencode-ai/core/project"
11: import { ProjectTable } from "@opencode-ai/core/project/sql"
12: import { AbsolutePath } from "@opencode-ai/core/schema"
13: import { SessionV2 } from "@opencode-ai/core/session"
14: import { Prompt } from "@opencode-ai/core/session/prompt"
15: import { SessionMessage } from ...
gateway · 2026-09-15 22:34:58
result
<path>/home/byk/Code/opencode/packages/core/src/session/input.ts</path>
<type>file</type>
<content>
232: export const projectPrompted = Effect.fn("SessionInput.projectPrompted")(function* (
233:   db: DatabaseService,
234:   input: {
235:     readonly id: SessionMessage.ID
236:     readonly sessionID: SessionSchema.ID
237:     readonly prompt: Prompt
238:     readonly delivery: Delivery
239:     readonly timeCreated: DateTime.Utc
240:     readonly promotedSeq: number
241:   },
242: ) {
243:   const updated = yield* db
244:     .update(SessionInputTable)
245:     .set({ promoted_seq: input.promotedSeq, wake_pending: false })
246:     .where(
247:       and(
248:         eq(SessionInputTable.id, input.id),
249:         eq(SessionInputTable.session_id, input.sessionID),
250:         isNull(SessionInputTable.promoted_seq),
251:       ),
252:     )
253:     .returning()
254:     .get()
255:     .pipe(Effect.orDie)
256:   if (updated) {
257:     const stored = fromRow(updated)
258:     if ...
gateway · 2026-09-15 22:35:09
result
No files found
gateway · 2026-09-15 22:35:29
result
/home/byk/Code/opencode/packages/core/src/event.ts
gateway · 2026-09-15 22:35:38
result
Found 13 matches
/home/byk/Code/opencode/packages/core/src/event.ts:
  Line 127:   readonly publish: <D extends Definition>(

  Line 140:     options?: { readonly publish?: boolean; readonly ownerID?: string; readonly strictOwner?: boolean },

  Line 144:     options?: { readonly publish?: boolean; readonly ownerID?: string; readonly strictOwner?: boolean },

  Line 357:                       (wake) => PubSub.publish(wake, undefined),

  Line 369:       function publishEvent<D extends Definition>(definition: D, event: Payload<D>, commit?: PublishOptions["commit"]) {

  Line 414:           if (typed) yield* PubSub.publish(typed, event)

  Line 415:           yield* PubSub.publish(pubsub.all, event)

  Line 419:       function publish<D extends Definition>(definition: D, data: Data<D>, options?: PublishOptions) {

  Line 427:           return yield* publishEvent(

  Line 443:         options?: { readonly publish?: boolean; readonly ownerID?: string; readonly strictOwner?: boolean },

  ...
gateway · 2026-09-15 22:35:54
result
<path>/home/byk/Code/opencode/packages/core/src/event.ts</path>
<type>file</type>
<content>
340:                                 id: event.id,
341:                                 aggregate_id: aggregateID,
342:                                 seq,
343:                                 type: versionedType(definition.type, durable.version),
344:                                 data: encoded,
345:                               },
346:                             ])
347:                             .run()
348:                             .pipe(Effect.orDie)
349:                           return { aggregateID, seq }
350:                         }),
351:                       { behavior: "immediate" },
352:                     )
353:                     .pipe(Effect.orDie)
354:                   if (committed) {
355:                     yield* Effect.forEach(
356:                       pubsub.durable.get(committed.aggregateID) ?? [],
357:                       (wake) => PubSub.publish(wake, ...
gateway · 2026-09-15 22:36:03
result
<path>/home/byk/Code/opencode/packages/core/src/event.ts</path>
<type>file</type>
<content>
245:                             .from(EventSequenceTable)
246:                             .where(eq(EventSequenceTable.aggregate_id, aggregateID))
247:                             .get()
248:                             .pipe(Effect.orDie)
249:                           const latest = row?.seq ?? -1
250:                           const encoded = Schema.encodeUnknownSync(definition.data)(event.data) as Record<
251:                             string,
252:                             unknown
253:                           >
254:                           if (input?.strictOwner && row?.ownerID && row.ownerID !== input.ownerID) {
255:                             yield* Effect.die(
256:                               new InvalidDurableEventError({
257:                                 type: event.type,
258:                                 message: `Replay owner mismatch for aggregate ${aggregateID}: ...
gateway · 2026-09-15 22:36:33
result
<path>/home/byk/Code/opencode/packages/schema/src/session-event.ts</path>
<type>file</type>
<content>
80:     ...Base,
81:     location: Location.Ref,
82:     subdirectory: RelativePath.pipe(optional),
83:   },
84: })
85: export type Moved = typeof Moved.Type
86: 
87: export const Prompted = Event.define({
88:   type: "session.next.prompted",
89:   ...options,
90:   schema: PromptFields,
91: })
92: export type Prompted = typeof Prompted.Type
93: 
94: export const PromptAdmitted = Event.define({
95:   type: "session.next.prompt.admitted",
96:   ...options,
97:   schema: {
98:     ...PromptFields,
99:     requestExecution: Schema.Boolean.pipe(optional),
100:   },
101: })
102: export type PromptAdmitted = typeof PromptAdmitted.Type
103: 
104: export const PromptExecutionRequested = Event.define({
105:   type: "session.next.prompt.execution_requested",
106:   ...options,
107:   schema: {
108:     ...Base,
109:     messageID: SessionMessage.ID,
110:   },
111: })
112: export type ...
gateway · 2026-09-15 22:36:51
result
<path>/home/byk/Code/opencode/packages/schema/src/session-event.ts</path>
<type>file</type>
<content>
460:       ...Base,
461:       messageID: SessionMessage.ID,
462:       reason: Started.data.fields.reason,
463:       text: Schema.String,
464:       recent: Schema.String,
465:     },
466:   })
467:   export type Ended = typeof Ended.Type
468: }
469: 
470: export namespace RevertEvent {
471:   export const Staged = Event.define({
472:     type: "session.next.revert.staged",
473:     ...options,
474:     schema: { ...Base, revert: Revert.State },
475:   })
476:   export const Cleared = Event.define({ type: "session.next.revert.cleared", ...options, schema: Base })
477:   export const Committed = Event.define({
478:     type: "session.next.revert.committed",
479:     ...options,
480:     schema: { ...Base, messageID: SessionMessage.ID },
481:   })
482: }
483: 
484: export const DurableDefinitions = Event.inventory(
485:   AgentSwitched,
486:   ModelSwitched,
487:   Moved,
488:   ...
gateway · 2026-09-15 22:37:07
result
<path>/home/byk/Code/opencode/packages/schema/src/session-event.ts</path>
<type>file</type>
<content>
518: export const Definitions = Event.inventory(
519:   AgentSwitched,
520:   ModelSwitched,
521:   Moved,
522:   Prompted,
523:   PromptAdmitted,
524:   PromptExecutionRequested,
525:   ContextUpdated,
526:   Synthetic,
527:   Shell.Started,
528:   Shell.Ended,
529:   Step.Started,
530:   Step.Ended,
531:   Step.Failed,
532:   Step.Interrupted,
533:   Step.Recovered,
534:   Text.Started,
535:   Text.Delta,
536:   Text.Ended,
537:   Reasoning.Started,
538:   Reasoning.Delta,
539:   Reasoning.Ended,
540:   Tool.Input.Started,
541:   Tool.Input.Delta,
542:   Tool.Input.Ended,
543:   Tool.Called,
544:   Tool.Progress,
545:   Tool.Success,
546:   Tool.Failed,
547:   Retried,
548:   Compaction.Started,
549:   Compaction.Delta,
550:   Compaction.Ended,
551:   RevertEvent.Staged,
552:   RevertEvent.Cleared,
553:   RevertEvent.Committed,
554: )
555: 
556: export const Durable = ...
gateway · 2026-09-15 22:37:23
result
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/sdk.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/client.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/client/utils.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/client/types.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/client/client.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/core/utils.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/core/types.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/core/serverSentEvents.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/core/queryKeySerializer.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/core/pathSerializer.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/core/params.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/core/bodySerializer.gen.ts
/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/core/auth.gen.ts
/...
gateway · 2026-09-15 22:37:38
result
/home/byk/Code/opencode/packages/client/src/generated/types.ts
/home/byk/Code/opencode/packages/client/src/generated/index.ts
/home/byk/Code/opencode/packages/client/src/generated/client.ts
/home/byk/Code/opencode/packages/client/src/generated/client-error.ts
/home/byk/Code/opencode/packages/client/src/generated/.httpapi-codegen.json
/home/byk/Code/opencode/packages/client/src/generated-effect/index.ts
/home/byk/Code/opencode/packages/client/src/generated-effect/client.ts
/home/byk/Code/opencode/packages/client/src/generated-effect/client-error.ts
/home/byk/Code/opencode/packages/client/src/generated-effect/.httpapi-codegen.json
gateway · 2026-09-15 22:38:01
result
No files found
gateway · 2026-09-15 22:38:06
result
<path>/home/byk/Code/opencode/packages/client/src/generated/types.ts</path>
<type>file</type>
<content>
1: import type { OpenCodeEventEncoded } from "@opencode-ai/protocol/groups/event"
2: 
3: export type JsonValue =
4:   | null
5:   | boolean
6:   | number
7:   | string
8:   | ReadonlyArray<JsonValue>
9:   | { readonly [key: string]: JsonValue }
10: 
11: export type UnauthorizedError = { readonly _tag: "UnauthorizedError"; readonly message: string }
12: export const isUnauthorizedError = (value: unknown): value is UnauthorizedError =>
13:   typeof value === "object" && value !== null && "_tag" in value && value["_tag"] === "UnauthorizedError"
14: 
15: export type InvalidRequestError = {
16:   readonly _tag: "InvalidRequestError"
17:   readonly message: string
18:   readonly kind?: string | undefined
19:   readonly field?: string | undefined
20: }
21: export const isInvalidRequestError = (value: unknown): value is InvalidRequestError =>
22:   typeof value === "object" && value !== ...
gateway · 2026-09-15 22:38:36
result
Found 4 matches
/home/byk/Code/opencode/packages/protocol/src/groups/event.ts:
  Line 56: export type OpenCodeEventEncoded = typeof OpenCodeEvent.Encoded


/home/byk/Code/opencode/packages/protocol/src/groups/session.ts:
  Line 23: import { SessionEvent } from "@opencode-ai/schema/session-event"

  Line 311:           data: Schema.Array(SessionEvent.Durable),

  Line 332:         success: HttpApiSchema.StreamSse({ data: SessionEvent.Durable }),
gateway · 2026-09-15 22:38:50
result
<path>/home/byk/Code/opencode/packages/protocol/src/groups/event.ts</path>
<type>file</type>
<content>
1: import { Event } from "@opencode-ai/schema/event"
2: import { EventManifest } from "@opencode-ai/schema/event-manifest"
3: import { Location } from "@opencode-ai/schema/location"
4: import type { Definition } from "@opencode-ai/schema/event"
5: import { Schema } from "effect"
6: import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi"
7: 
8: const fields = {
9:   id: Event.ID,
10:   metadata: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),
11:   durable: Schema.optional(Schema.Struct({ aggregateID: Schema.String, seq: Schema.Int, version: Schema.Int })),
12:   location: Schema.optional(Location.Ref),
13: }
14: 
15: const schema = <const Definitions extends ReadonlyArray<Definition>>(definitions: Definitions) =>
16:   Schema.Union([
17:     ...definitions,
18:     ...(definitions.some((definition) => definition.type === ...
gateway · 2026-09-15 22:38:55
result
<path>/home/byk/Code/opencode/packages/schema/src/event-manifest.ts</path>
<type>file</type>
<content>
1: export * as EventManifest from "./event-manifest"
2: 
3: import { Catalog } from "./catalog"
4: import { Durable } from "./durable-event-manifest"
5: import { Event } from "./event"
6: import { FileSystem } from "./filesystem"
7: import { FileSystemWatcher } from "./filesystem-watcher"
8: import { InstallationEvent } from "./installation-event"
9: import { Integration } from "./integration"
10: import { LegacyEvent } from "./legacy-event"
11: import { LspEvent } from "./lsp-event"
12: import { McpEvent } from "./mcp-event"
13: import { ModelsDev } from "./models-dev"
14: import { Permission } from "./permission"
15: import { PermissionV1 } from "./permission-v1"
16: import { Plugin } from "./plugin"
17: import { Project } from "./project"
18: import { ProjectDirectories } from "./project-directories"
19: import { Pty } from "./pty"
20: import { Question } from "./question"
21: ...
gateway · 2026-09-15 22:39:18
result
<path>/home/byk/Code/opencode/packages/schema/src/durable-event-manifest.ts</path>
<type>file</type>
<content>
1: export * as DurableEventManifest from "./durable-event-manifest"
2: 
3: import { Event } from "./event"
4: import { SessionEvent } from "./session-event"
5: import { SessionV1 } from "./session-v1"
6: 
7: export const SessionDurable = {
8:   definitions: Event.durable(SessionEvent.DurableDefinitions),
9:   schema: SessionEvent.Durable,
10: } as const
11: 
12: export const Durable = Event.durable([
13:   ...SessionV1.Event.Definitions.filter((definition) => definition.durable !== undefined),
14:   ...SessionEvent.DurableDefinitions,
15: ])

(End of file - total 15 lines)
</content>
gateway · 2026-09-15 22:39:28
result
Found 4 matches
/home/byk/Code/opencode/packages/sdk/openapi.json:
  Line 17919:                     "enum": ["session.next.prompt.execution_requested"]

  Line 25740:                 "enum": ["session.next.prompt.execution_requested.1"]

  Line 28622:             "enum": ["session.next.prompt.execution_requested"]

  Line 34831:             "enum": ["session.next.prompt.execution_requested"]
gateway · 2026-09-15 22:39:39
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
17865:                 "additionalProperties": false
17866:               },
17867:               {
17868:                 "type": "object",
17869:                 "properties": {
17870:                   "id": {
17871:                     "type": "string",
17872:                     "pattern": "^evt_"
17873:                   },
17874:                   "type": {
17875:                     "type": "string",
17876:                     "enum": ["session.next.prompt.admitted"]
17877:                   },
17878:                   "properties": {
17879:                     "type": "object",
17880:                     "properties": {
17881:                       "timestamp": {
17882:                         "type": "number"
17883:                       },
17884:                       "sessionID": {
17885:                         "type": "string",
17886:                         "pattern": ...
gateway · 2026-09-15 22:39:52
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
17780:                       },
17781:                       "model": {
17782:                         "$ref": "#/components/schemas/ModelRef"
17783:                       }
17784:                     },
17785:                     "required": ["timestamp", "sessionID", "messageID", "model"],
17786:                     "additionalProperties": false
17787:                   }
17788:                 },
17789:                 "required": ["id", "type", "properties"],
17790:                 "additionalProperties": false
17791:               },
17792:               {
17793:                 "type": "object",
17794:                 "properties": {
17795:                   "id": {
17796:                     "type": "string",
17797:                     "pattern": "^evt_"
17798:                   },
17799:                   "type": {
17800:                     "type": "string",
17801:                     ...
gateway · 2026-09-15 22:40:04
result
Found 2 matches
/home/byk/Code/opencode/packages/sdk/openapi.json:
  Line 15261:       "Event": {

  Line 24152:       "V2Event": {
gateway · 2026-09-15 22:40:21
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
15250:         "x-codeSamples": [
15251:           {
15252:             "lang": "js",
15253:             "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.connect({\n  ...\n})"
15254:           }
15255:         ]
15256:       }
15257:     }
15258:   },
15259:   "components": {
15260:     "schemas": {
15261:       "Event": {
15262:         "anyOf": [
15263:           {
15264:             "$ref": "#/components/schemas/EventModels-devRefreshed"
15265:           },
15266:           {
15267:             "$ref": "#/components/schemas/EventIntegrationUpdated"
15268:           },
15269:           {
15270:             "$ref": "#/components/schemas/EventIntegrationConnectionUpdated"
15271:           },
15272:           {
15273:             "$ref": "#/components/schemas/EventCatalogUpdated"
15274:           },
15275:           ...
gateway · 2026-09-15 22:40:46
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
23785:           },
23786:           "message": {
23787:             "type": "string"
23788:           },
23789:           "ref": {
23790:             "type": "string"
23791:           }
23792:         },
23793:         "required": ["_tag", "message"],
23794:         "additionalProperties": false
23795:       },
23796:       "SessionDurableEvent": {
23797:         "oneOf": [
23798:           {
23799:             "$ref": "#/components/schemas/SessionNextAgentSwitched"
23800:           },
23801:           {
23802:             "$ref": "#/components/schemas/SessionNextModelSwitched"
23803:           },
23804:           {
23805:             "$ref": "#/components/schemas/SessionNextMoved"
23806:           },
23807:           {
23808:             "$ref": "#/components/schemas/SessionNextPrompted"
23809:           },
23810:           {
23811:             "$ref": ...
gateway · 2026-09-15 22:40:56
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
24145:             "required": ["sessionID", "requestID"],
24146:             "additionalProperties": false
24147:           }
24148:         },
24149:         "required": ["id", "type", "data"],
24150:         "additionalProperties": false
24151:       },
24152:       "V2Event": {
24153:         "anyOf": [
24154:           {
24155:             "$ref": "#/components/schemas/Models-devRefreshed"
24156:           },
24157:           {
24158:             "$ref": "#/components/schemas/IntegrationUpdated"
24159:           },
24160:           {
24161:             "$ref": "#/components/schemas/IntegrationConnectionUpdated"
24162:           },
24163:           {
24164:             "$ref": "#/components/schemas/CatalogUpdated"
24165:           },
24166:           {
24167:             "$ref": "#/components/schemas/SessionCreated"
24168:           },
24169:           {
24170:             "$ref": ...
gateway · 2026-09-15 22:41:20
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
25645:                     "type": "string",
25646:                     "enum": ["steer", "queue"]
25647:                   }
25648:                 },
25649:                 "required": ["timestamp", "sessionID", "messageID", "prompt", "delivery"],
25650:                 "additionalProperties": false
25651:               }
25652:             },
25653:             "required": ["type", "id", "seq", "aggregateID", "data"],
25654:             "additionalProperties": false
25655:           }
25656:         },
25657:         "required": ["type", "id", "syncEvent"],
25658:         "additionalProperties": false
25659:       },
25660:       "SyncEventSessionNextPromptAdmitted": {
25661:         "type": "object",
25662:         "properties": {
25663:           "type": {
25664:             "type": "string",
25665:             "enum": ["sync"]
25666:           },
25667:           "id": {
25668:             ...
gateway · 2026-09-15 22:41:48
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
25724:       "SyncEventSessionNextPromptExecution_requested": {
25725:         "type": "object",
25726:         "properties": {
25727:           "type": {
25728:             "type": "string",
25729:             "enum": ["sync"]
25730:           },
25731:           "id": {
25732:             "type": "string",
25733:             "pattern": "^evt_"
25734:           },
25735:           "syncEvent": {
25736:             "type": "object",
25737:             "properties": {
25738:               "type": {
25739:                 "type": "string",
25740:                 "enum": ["session.next.prompt.execution_requested.1"]
25741:               },
25742:               "id": {
25743:                 "type": "string",
25744:                 "pattern": "^evt_"
25745:               },
25746:               "seq": {
25747:                 "type": "number"
25748:               },
25749:               ...
gateway · 2026-09-15 22:42:17
result
Found 2 matches
/home/byk/Code/opencode/packages/sdk/openapi.json:
  Line 20580:                 "$ref": "#/components/schemas/SyncEventSessionNextPromptExecution_requested"

  Line 25724:       "SyncEventSessionNextPromptExecution_requested": {
gateway · 2026-09-15 22:42:36
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
20535:                   }
20536:                 },
20537:                 "required": ["id", "type", "properties"],
20538:                 "additionalProperties": false
20539:               },
20540:               {
20541:                 "$ref": "#/components/schemas/EventServerInstanceDisposed"
20542:               },
20543:               {
20544:                 "$ref": "#/components/schemas/SyncEventSessionCreated"
20545:               },
20546:               {
20547:                 "$ref": "#/components/schemas/SyncEventSessionUpdated"
20548:               },
20549:               {
20550:                 "$ref": "#/components/schemas/SyncEventSessionDeleted"
20551:               },
20552:               {
20553:                 "$ref": "#/components/schemas/SyncEventMessageUpdated"
20554:               },
20555:               {
20556:                 "$ref": ...
gateway · 2026-09-15 22:43:06
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
20470:                     "required": ["name"],
20471:                     "additionalProperties": false
20472:                   }
20473:                 },
20474:                 "required": ["id", "type", "properties"],
20475:                 "additionalProperties": false
20476:               },
20477:               {
20478:                 "type": "object",
20479:                 "properties": {
20480:                   "id": {
20481:                     "type": "string",
20482:                     "pattern": "^evt_"
20483:                   },
20484:                   "type": {
20485:                     "type": "string",
20486:                     "enum": ["worktree.failed"]
20487:                   },
20488:                   "properties": {
20489:                     "type": "object",
20490:                     "properties": {
20491:                       "message": {
20492:             ...
gateway · 2026-09-15 22:43:21
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
28535:                 "enum": ["steer", "queue"]
28536:               }
28537:             },
28538:             "required": ["timestamp", "sessionID", "messageID", "prompt", "delivery"],
28539:             "additionalProperties": false
28540:           }
28541:         },
28542:         "required": ["id", "type", "data"],
28543:         "additionalProperties": false
28544:       },
28545:       "SessionNextPromptAdmitted": {
28546:         "type": "object",
28547:         "properties": {
28548:           "id": {
28549:             "type": "string",
28550:             "pattern": "^evt_"
28551:           },
28552:           "metadata": {
28553:             "type": "object"
28554:           },
28555:           "type": {
28556:             "type": "string",
28557:             "enum": ["session.next.prompt.admitted"]
28558:           },
28559:           "durable": {
28560:             "type": ...
gateway · 2026-09-15 22:43:27
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
28640:           "location": {
28641:             "$ref": "#/components/schemas/LocationRef"
28642:           },
28643:           "data": {
28644:             "type": "object",
28645:             "properties": {
28646:               "timestamp": {
28647:                 "type": "number"
28648:               },
28649:               "sessionID": {
28650:                 "type": "string",
28651:                 "pattern": "^ses"
28652:               },
28653:               "messageID": {
28654:                 "type": "string",
28655:                 "pattern": "^msg_"
28656:               }
28657:             },
28658:             "required": ["timestamp", "sessionID", "messageID"],
28659:             "additionalProperties": false
28660:           }
28661:         },
28662:         "required": ["id", "type", "data"],
28663:         "additionalProperties": false
28664:       },
28665:       ...
gateway · 2026-09-15 22:43:33
result
<path>/home/byk/Code/opencode/packages/sdk/openapi.json</path>
<type>file</type>
<content>
34765:                 "$ref": "#/components/schemas/Prompt"
34766:               },
34767:               "delivery": {
34768:                 "type": "string",
34769:                 "enum": ["steer", "queue"]
34770:               }
34771:             },
34772:             "required": ["timestamp", "sessionID", "messageID", "prompt", "delivery"],
34773:             "additionalProperties": false
34774:           }
34775:         },
34776:         "required": ["id", "type", "properties"],
34777:         "additionalProperties": false
34778:       },
34779:       "EventSessionNextPromptAdmitted": {
34780:         "type": "object",
34781:         "properties": {
34782:           "id": {
34783:             "type": "string",
34784:             "pattern": "^evt_"
34785:           },
34786:           "type": {
34787:             "type": "string",
34788:             "enum": ...
gateway · 2026-09-15 22:43:55
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
1: // This file is auto-generated by @hey-api/openapi-ts
2: 
3: export type ClientOptions = {
4:   baseUrl: `${string}://${string}` | (string & {})
5: }
6: 
7: export type Event =
8:   | EventModelsDevRefreshed
9:   | EventIntegrationUpdated
10:   | EventIntegrationConnectionUpdated
11:   | EventCatalogUpdated
12:   | EventSessionCreated
13:   | EventSessionUpdated
14:   | EventSessionDeleted
15:   | EventMessageUpdated
16:   | EventMessageRemoved
17:   | EventMessagePartUpdated
18:   | EventMessagePartRemoved
19:   | EventSessionNextAgentSwitched
20:   | EventSessionNextModelSwitched
21:   | EventSessionNextMoved
22:   | EventSessionNextPrompted
23:   | EventSessionNextPromptAdmitted
24:   | EventSessionNextPromptExecutionRequested
25:   | EventSessionNextContextUpdated
26:   | EventSessionNextSynthetic
27:   | EventSessionNextShellStarted
28:   | EventSessionNextShellEnded
29:   ...
gateway · 2026-09-15 22:44:02
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
845:         id: string
846:         type: "session.next.moved"
847:         properties: {
848:           timestamp: number
849:           sessionID: string
850:           location: LocationRef
851:           subdirectory?: string
852:         }
853:       }
854:     | {
855:         id: string
856:         type: "session.next.prompted"
857:         properties: {
858:           timestamp: number
859:           sessionID: string
860:           messageID: string
861:           prompt: Prompt
862:           delivery: "steer" | "queue"
863:         }
864:       }
865:     | {
866:         id: string
867:         type: "session.next.prompt.admitted"
868:         properties: {
869:           timestamp: number
870:           sessionID: string
871:           messageID: string
872:           prompt: Prompt
873:           delivery: "steer" | "queue"
874:           requestExecution?: ...
gateway · 2026-09-15 22:44:09
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
760:         id: string
761:         type: "catalog.updated"
762:         properties: {
763:           [key: string]: unknown
764:         }
765:       }
766:     | {
767:         id: string
768:         type: "session.created"
769:         properties: {
770:           sessionID: string
771:           info: Session
772:         }
773:       }
774:     | {
775:         id: string
776:         type: "session.updated"
777:         properties: {
778:           sessionID: string
779:           info: Session
780:         }
781:       }
782:     | {
783:         id: string
784:         type: "session.deleted"
785:         properties: {
786:           sessionID: string
787:           info: Session
788:         }
789:       }
790:     | {
791:         id: string
792:         type: "message.updated"
793:         properties: {
794:           sessionID: string
795:           info: Message
796: ...
gateway · 2026-09-15 22:44:26
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
700:    * Display text (1-5 words, concise)
701:    */
702:   label: string
703:   /**
704:    * Explanation of choice
705:    */
706:   description: string
707: }
708: 
709: export type QuestionInfo = {
710:   /**
711:    * Complete question
712:    */
713:   question: string
714:   /**
715:    * Very short label (max 30 chars)
716:    */
717:   header: string
718:   /**
719:    * Available choices
720:    */
721:   options: Array<QuestionOption>
722:   multiple?: boolean
723:   custom?: boolean
724: }
725: 
726: export type QuestionTool = {
727:   messageID: string
728:   callID: string
729: }
730: 
731: export type QuestionAnswer = Array<string>
732: 
733: export type GlobalEvent = {
734:   directory: string
735:   project?: string
736:   workspace?: string
737:   payload:
738:     | {
739:         id: string
740:         type: "models-dev.refreshed"
741:         properties: ...
gateway · 2026-09-15 22:44:34
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
1625:         type: "server.connected"
1626:         properties: {
1627:           [key: string]: unknown
1628:         }
1629:       }
1630:     | {
1631:         id: string
1632:         type: "global.disposed"
1633:         properties: {
1634:           [key: string]: unknown
1635:         }
1636:       }
1637:     | EventServerInstanceDisposed
1638:     | SyncEventSessionCreated
1639:     | SyncEventSessionUpdated
1640:     | SyncEventSessionDeleted
1641:     | SyncEventMessageUpdated
1642:     | SyncEventMessageRemoved
1643:     | SyncEventMessagePartUpdated
1644:     | SyncEventMessagePartRemoved
1645:     | SyncEventSessionNextAgentSwitched
1646:     | SyncEventSessionNextModelSwitched
1647:     | SyncEventSessionNextMoved
1648:     | SyncEventSessionNextPrompted
1649:     | SyncEventSessionNextPromptAdmitted
1650:     | SyncEventSessionNextPromptExecutionRequested
1651:     ...
gateway · 2026-09-15 22:44:43
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
1590:           name: string
1591:         }
1592:       }
1593:     | {
1594:         id: string
1595:         type: "workspace.failed"
1596:         properties: {
1597:           message: string
1598:         }
1599:       }
1600:     | {
1601:         id: string
1602:         type: "workspace.status"
1603:         properties: {
1604:           workspaceID: string
1605:           status: "connected" | "connecting" | "disconnected" | "error"
1606:         }
1607:       }
1608:     | {
1609:         id: string
1610:         type: "worktree.ready"
1611:         properties: {
1612:           name: string
1613:           branch?: string
1614:         }
1615:       }
1616:     | {
1617:         id: string
1618:         type: "worktree.failed"
1619:         properties: {
1620:           message: string
1621:         }
1622:       }
1623:     | {
1624:         id: string
1625:         ...
gateway · 2026-09-15 22:45:25
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
2768:   sessionID: string
2769:   messageID: string
2770:   message: string
2771: }
2772: 
2773: export type UnknownError1 = {
2774:   _tag: "UnknownError"
2775:   message: string
2776:   ref?: string
2777: }
2778: 
2779: export type SessionDurableEvent =
2780:   | SessionNextAgentSwitched
2781:   | SessionNextModelSwitched
2782:   | SessionNextMoved
2783:   | SessionNextPrompted
2784:   | SessionNextPromptAdmitted
2785:   | SessionNextPromptExecutionRequested
2786:   | SessionNextContextUpdated
2787:   | SessionNextSynthetic
2788:   | SessionNextShellStarted
2789:   | SessionNextShellEnded
2790:   | SessionNextStepStarted
2791:   | SessionNextStepEnded
2792:   | SessionNextStepFailed
2793:   | SessionNextStepInterrupted
2794:   | SessionNextStepRecovered
2795:   | SessionNextTextStarted
2796:   | SessionNextTextEnded
2797:   | SessionNextToolInputStarted
2798:   | ...
gateway · 2026-09-15 22:47:15
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
3400:   id: string
3401:   syncEvent: {
3402:     type: "session.next.prompted.1"
3403:     id: string
3404:     seq: number
3405:     aggregateID: string
3406:     data: {
3407:       timestamp: number
3408:       sessionID: string
3409:       messageID: string
3410:       prompt: Prompt
3411:       delivery: "steer" | "queue"
3412:     }
3413:   }
3414: }
3415: 
3416: export type SyncEventSessionNextPromptAdmitted = {
3417:   type: "sync"
3418:   id: string
3419:   syncEvent: {
3420:     type: "session.next.prompt.admitted.1"
3421:     id: string
3422:     seq: number
3423:     aggregateID: string
3424:     data: {
3425:       timestamp: number
3426:       sessionID: string
3427:       messageID: string
3428:       prompt: Prompt
3429:       delivery: "steer" | "queue"
3430:       requestExecution?: boolean
3431:     }
3432:   }
3433: }
3434: 
3435: export type ...
gateway · 2026-09-15 22:49:03
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
4325:   metadata?: {
4326:     [key: string]: unknown
4327:   }
4328:   type: "session.next.prompted"
4329:   durable?: {
4330:     aggregateID: string
4331:     seq: number
4332:     version: number
4333:   }
4334:   location?: LocationRef
4335:   data: {
4336:     timestamp: number
4337:     sessionID: string
4338:     messageID: string
4339:     prompt: Prompt
4340:     delivery: "steer" | "queue"
4341:   }
4342: }
4343: 
4344: export type SessionNextPromptAdmitted = {
4345:   id: string
4346:   metadata?: {
4347:     [key: string]: unknown
4348:   }
4349:   type: "session.next.prompt.admitted"
4350:   durable?: {
4351:     aggregateID: string
4352:     seq: number
4353:     version: number
4354:   }
4355:   location?: LocationRef
4356:   data: {
4357:     timestamp: number
4358:     sessionID: string
4359:     messageID: string
4360:     prompt: Prompt
4361:     delivery: ...
gateway · 2026-09-15 22:51:19
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/gen/types.gen.ts</path>
<type>file</type>
<content>
6438:     location: LocationRef
6439:     subdirectory?: string
6440:   }
6441: }
6442: 
6443: export type EventSessionNextPrompted = {
6444:   id: string
6445:   type: "session.next.prompted"
6446:   properties: {
6447:     timestamp: number
6448:     sessionID: string
6449:     messageID: string
6450:     prompt: Prompt
6451:     delivery: "steer" | "queue"
6452:   }
6453: }
6454: 
6455: export type EventSessionNextPromptAdmitted = {
6456:   id: string
6457:   type: "session.next.prompt.admitted"
6458:   properties: {
6459:     timestamp: number
6460:     sessionID: string
6461:     messageID: string
6462:     prompt: Prompt
6463:     delivery: "steer" | "queue"
6464:     requestExecution?: boolean
6465:   }
6466: }
6467: 
6468: export type EventSessionNextPromptExecutionRequested = {
6469:   id: string
6470:   type: "session.next.prompt.execution_requested"
6471:   properties: ...
gateway · 2026-09-15 22:52:19
result
<path>/home/byk/Code/opencode/packages/sdk/js/package.json</path>
<type>file</type>
<content>
1: {
2:   "$schema": "https://json.schemastore.org/package.json",
3:   "name": "@opencode-ai/sdk",
4:   "version": "1.18.30",
5:   "type": "module",
6:   "license": "MIT",
7:   "scripts": {
8:     "test": "bun test",
9:     "typecheck": "tsgo --noEmit",
10:     "build": "bun ./script/build.ts"
11:   },
12:   "exports": {
13:     ".": "./src/index.ts",
14:     "./client": "./src/client.ts",
15:     "./server": "./src/server.ts",
16:     "./v2": "./src/v2/index.ts",
17:     "./v2/client": "./src/v2/client.ts",
18:     "./v2/gen/client": "./src/v2/gen/client/index.ts",
19:     "./v2/server": "./src/v2/server.ts",
20:     "./v2/types": "./src/v2/gen/types.gen.ts"
21:   },
22:   "files": [
23:     "dist"
24:   ],
25:   "devDependencies": {
26:     "@hey-api/openapi-ts": "0.90.10",
27:     "@tsconfig/node22": "catalog:",
28:     "@types/cross-spawn": "catalog:",
29:     "@types/node": ...
gateway · 2026-09-15 22:53:26
result
<path>/home/byk/Code/opencode/packages/sdk/js/script/build.ts</path>
<type>file</type>
<content>
1: #!/usr/bin/env bun
2: import { fileURLToPath } from "url"
3: 
4: const dir = fileURLToPath(new URL("..", import.meta.url))
5: process.chdir(dir)
6: 
7: import { $ } from "bun"
8: import path from "path"
9: 
10: import { createClient } from "@hey-api/openapi-ts"
11: 
12: const opencode = path.resolve(dir, "../../opencode")
13: 
14: await $`bun dev generate > ${dir}/openapi.json`.cwd(opencode)
15: 
16: const document = (await Bun.file("./openapi.json").json()) as {
17:   components?: { schemas?: Record<string, unknown> }
18:   [key: string]: unknown
19: }
20: const schemas = document.components?.schemas
21: if (schemas) {
22:   const reachable = new Set<string>()
23:   const visit = (value: unknown) => {
24:     if (Array.isArray(value)) {
25:       value.forEach(visit)
26:       return
27:     }
28:     if (typeof value !== "object" || value === null) return
29:     for (const [key, ...
gateway · 2026-09-15 22:54:01
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/index.ts</path>
<type>file</type>
<content>
1: export * from "./client.js"
2: export * from "./server.js"
3: 
4: import { createOpencodeClient } from "./client.js"
5: import { createOpencodeServer } from "./server.js"
6: import type { ServerOptions } from "./server.js"
7: 
8: export * as data from "./data.js"
9: 
10: export async function createOpencode(options?: ServerOptions) {
11:   const server = await createOpencodeServer({
12:     ...options,
13:   })
14: 
15:   const client = createOpencodeClient({
16:     baseUrl: server.url,
17:   })
18: 
19:   return {
20:     client,
21:     server,
22:   }
23: }

(End of file - total 23 lines)
</content>
gateway · 2026-09-15 22:54:17
result
<path>/home/byk/Code/opencode/packages/sdk/js/src/v2/client.ts</path>
<type>file</type>
<content>
1: export * from "./gen/types.gen.js"
2: export type { FileSystemEntry as LocationFileSystemEntry } from "./gen/types.gen.js"
3: 
4: import { createClient } from "./gen/client/client.gen.js"
5: import { type Config } from "./gen/client/types.gen.js"
6: import { OpencodeClient } from "./gen/sdk.gen.js"
7: import { wrapClientError } from "../error-interceptor.js"
8: export { type Config as OpencodeClientConfig, OpencodeClient }
9: 
10: function pick(value: string | null, fallback?: string, encode?: (value: string) => string) {
11:   if (!value) return
12:   if (!fallback) return value
13:   if (value === fallback) return fallback
14:   if (encode && value === encode(fallback)) return fallback
15:   return value
16: }
17: 
18: function rewrite(request: Request, values: { directory?: string; workspace?: string }) {
19:   if (request.method !== "GET" && request.method !== "HEAD") return ...
gateway · 2026-09-15 22:54:25
result
No files found
gateway · 2026-09-15 22:54:53
result
<path>/home/byk/Code/opencode/packages/client/src/generated-effect/client.ts</path>
<type>file</type>
<content>
1: // Generated by @opencode-ai/httpapi-codegen. Do not edit.
2: import { Effect, Stream, Schema } from "effect"
3: import { Sse } from "effect/unstable/encoding"
4: import { HttpClientError } from "effect/unstable/http"
5: import { HttpApiClient } from "effect/unstable/httpapi"
6: import { ClientApi } from "../contract"
7: import { ClientError } from "./client-error"
8: 
9: type RawClient = HttpApiClient.ForApi<typeof ClientApi>
10: 
11: const mapClientError = <E>(error: E) =>
12:   HttpClientError.isHttpClientError(error) || Schema.isSchemaError(error) || Sse.Retry.is(error)
13:     ? new ClientError({ cause: error })
14:     : error
15: 
16: const Endpoint0_0 = (raw: RawClient["server.health"]) => () =>
17:   raw["health.get"]({}).pipe(Effect.mapError(mapClientError))
18: 
19: const adaptGroup0 = (raw: RawClient["server.health"]) => ({ get: Endpoint0_0(raw) })
20: 
21: ...
gateway · 2026-09-15 22:55:01
result
<path>/home/byk/Code/opencode/packages/schema/test/event-manifest.test.ts</path>
<type>file</type>
<content>
35:     expect(EventManifest.Latest.get("session.next.step.ended")).toBe(SessionEvent.Step.Ended)
36:     expect(EventManifest.Latest.get("todo.updated")).toBe(SessionTodo.Event.Updated)
37:     expect(EventManifest.Latest.get("project.updated")).toBe(Project.Event.Updated)
38:     expect(Project.Event.Definitions).toEqual([Project.Event.Updated])
39:     expect(FileSystem.Event.Definitions).toEqual([FileSystem.Event.Edited])
40:     expect(Integration.Event.Definitions).toEqual([Integration.Event.Updated, Integration.Event.ConnectionUpdated])
41:     expect(Permission.Event.Definitions).toEqual([Permission.Event.Asked, Permission.Event.Replied])
42:     expect(Reference.Event.Definitions).toEqual([Reference.Event.Updated])
43:     expect(EventManifest.Latest.has("ide.installed")).toBe(false)
44:     expect(IdeEvent.Definitions).toEqual([IdeEvent.Installed])
45:     ...
gateway · 2026-09-15 22:55:14
result
No files found
gateway · 2026-09-15 22:55:21
result
<path>/home/byk/Code/opencode/packages/core/src/session/projector.ts</path>
<type>file</type>
<content>
360:         yield* SessionInput.projectPrompted(db, {
361:           id: event.data.messageID,
362:           sessionID: event.data.sessionID,
363:           prompt: event.data.prompt,
364:           delivery: event.data.delivery,
365:           timeCreated: event.data.timestamp,
366:           promotedSeq: event.durable.seq,
367:         })
368:         yield* run(db, event)
369:       }),
370:     )
371:     yield* events.project(SessionEvent.PromptAdmitted, (event) =>
372:       Effect.gen(function* () {
373:         if (event.durable === undefined) return yield* Effect.die("Durable Session event is missing aggregate sequence")
374:         yield* SessionInput.projectAdmitted(db, {
375:           admittedSeq: event.durable.seq,
376:           id: event.data.messageID,
377:           sessionID: event.data.sessionID,
378:           prompt: event.data.prompt,
379:           ...
gateway · 2026-09-15 22:57:13

PASS

Both prior blockers are closed by the current files.

1. Promoted exact retry

  • SessionInput.admit derives shouldWake from the retried input, not Session-wide pending work (packages/core/src/session/input.ts:54-59).
  • requestExecution queries the exact (messageID, sessionID) row and returns false when that input is promoted (packages/core/src/session/input.ts:108-120).
  • If promotion races the execution-request event, the projector updates only an unpromoted exact row (packages/core/src/session/input.ts:209-229), and the final exact-row reread returns false after promotion (packages/core/src/session/input.ts:151-169).
  • The publish-defect recovery path also delegates to this same exact-row check (packages/core/src/session/input.ts:88-99).
  • SessionV2.prompt calls execution.wake only when this returned value is true (packages/core/src/session.ts:368-384).

Therefore an already-promoted exact retry cannot treat an unrelated pending resume:false input as execution intent.

The focused regression creates that exact unrelated-input condition and asserts no wake plus unchanged rows (packages/core/test/session-prompt.test.ts:330-371). Concurrent execution-request deduplication is also covered (packages/core/test/session-prompt.test.ts:440-485).

2. Generated contracts

packages/sdk/openapi.json contains:

  • Public union references for both events (packages/sdk/openapi.json:15309-15313, packages/sdk/openapi.json:24200-24204).
  • Durable union references (packages/sdk/openapi.json:23811-23815).
  • Sync union references (packages/sdk/openapi.json:20577-20580).
  • Optional requestExecution in public/durable/sync forms (packages/sdk/openapi.json:17899-17903, packages/sdk/openapi.json:25660-25714, packages/sdk/openapi.json:28545-28604, packages/sdk/openapi.json:34779-34816).
  • Full PromptExecutionRequested forms (packages/sdk/openapi.json:17910-17941, packages/sdk/openapi.json:25724-25776, ...
gpt-5.6-sol · 2026-09-15 22:57:13 · ~771 tokens

Distillations (7)

Gen 0 2026-09-16 00:45:53 · 2467 tokens

Date: Sep 15, 2026 * 🟡 (22:51) Generated `SessionNextPromptExecutionRequested` in `packages/sdk/js/src/v2/gen/types.gen.ts:4366-4383` has `id: string`, optional arbitrary `metadata`, type `"session.next.prompt.execution_requested"`, optional durable metadata (`aggregateID: string`, `seq: number`, `version: number`), optional `location?: LocationRef`, and data fields `timestamp: number`, `session…

Gen 0 2026-09-16 00:44:59 · 1262 tokens

Date: Sep 15, 2026 * 🟡 (22:41) The generated `V2Event` union in `packages/sdk/openapi.json:24152-24229` includes `$ref` entries in order for `SessionNextPrompted`, `SessionNextPromptAdmitted`, `SessionNextPromptExecution_requested`, `SessionNextContextUpdated`, `SessionNextSynthetic`, `SessionNextShellStarted`, `SessionNextShellEnded`, `SessionNextStepStarted`, `SessionNextStepEnded`, `SessionNe…

Gen 0 2026-09-15 22:41:13 · 514 tokens

Date: Sep 15, 2026 * 🟡 (22:39) `packages/schema/src/durable-event-manifest.ts:7-10` defines `SessionDurable` with `definitions: Event.durable(SessionEvent.DurableDefinitions)` and `schema: SessionEvent.Durable`. * 🟡 (22:39) `packages/schema/src/durable-event-manifest.ts:12-15` defines the combined `Durable` manifest from durable-filtered `SessionV1.Event.Definitions` followed by all `SessionEve…

Gen 0 2026-09-15 22:40:57 · 842 tokens

Date: Sep 15, 2026 * 🟡 (22:36) Inspection of durable replay in `packages/core/src/event.ts:245-353` showed replay ownership and divergence handling: `strictOwner` with a conflicting stored `ownerID` dies with `InvalidDurableEventError`; replay at `input.seq <= latest` is accepted only when stored `id`, versioned event type, and encoded data all match exactly, and may claim a previously null owne…

Gen 0 2026-09-15 22:40:36 · 1563 tokens

Date: Sep 15, 2026 * 🔴 (22:34) User established the regression requirement: “never arms durable wake for a conflicting execution retry.” In `packages/core/test/session-prompt.test.ts:514-553`, reusing `messageID` with a different prompt and `resume: true` must return `Session.PromptConflictError`, leave `wake_pending: false`, record `0` `SessionEvent.PromptExecutionRequested` events before and a…

Gen 0 2026-09-15 22:39:58 · 897 tokens

Date: Sep 15, 2026 * 🟡 (22:32) Read-only search found 65 matches for `PromptAdmitted`, `requestExecution`, and `PromptExecutionRequested` across schema, core implementation/tests, checked-in OpenAPI, and generated JS SDK artifacts in `/home/byk/Code/opencode`. * 🟡 (22:32) `packages/schema/src/session-event.ts` defines `PromptAdmitted` at lines 94-102 with optional `requestExecution: Schema.Bool…

Gen 0 2026-09-15 22:39:38 · 260 tokens

Date: Sep 15, 2026 * 🔴 [requested-review] (22:29) User requested a final narrow read-only audit of the current files in `/home/byk/Code/opencode`, with no recall and no edits, tests, builds, commits, or service operations. * 🟡 (22:29) User asked to verify blocker 1 is closed: an exact `resume:true` retry of an already-promoted prompt must not wake or execute an unrelated `resume:false` input ac…