Skip to content

Commit 3b0e05d

Browse files
committed
core: persist v2 assistant execution metadata
1 parent 1760bc3 commit 3b0e05d

6 files changed

Lines changed: 18 additions & 3 deletions

File tree

packages/opencode/src/session/processor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ export const layer: Layer.Layer<
437437
SyncEvent.run(SessionEvent.Step.Started.Sync, {
438438
id: SessionEvent.ID.create(),
439439
sessionID: ctx.sessionID,
440+
agent: input.assistantMessage.agent,
440441
model: {
441442
id: ctx.model.id,
442443
providerID: ctx.model.providerID,
@@ -464,7 +465,7 @@ export const layer: Layer.Layer<
464465
// TODO(v2): Temporary dual-write while migrating session messages to v2 events.
465466
SyncEvent.run(SessionEvent.Step.Ended.Sync, {
466467
sessionID: ctx.sessionID,
467-
reason: value.finishReason,
468+
finish: value.finishReason,
468469
cost: usage.cost,
469470
tokens: usage.tokens,
470471
snapshot: completedSnapshot,

packages/opencode/src/v2/session-event.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export namespace Step {
5252
schema: {
5353
...Base,
5454
id: ID,
55+
agent: Schema.String,
5556
model: Schema.Struct({
5657
id: Schema.String,
5758
providerID: Schema.String,
@@ -67,7 +68,7 @@ export namespace Step {
6768
aggregate: "sessionID",
6869
schema: {
6970
...Base,
70-
reason: Schema.String,
71+
finish: Schema.String,
7172
cost: Schema.Number,
7273
tokens: Schema.Struct({
7374
input: Schema.Number,

packages/opencode/src/v2/session-message-updater.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ export function update<Result>(adapter: Adapter<Result>, event: SessionEvent.Eve
8282
adapter.updateAssistant(
8383
produce(currentAssistant, (draft) => {
8484
draft.time.completed = event.data.timestamp
85+
draft.finish = event.data.finish
8586
draft.cost = event.data.cost
8687
draft.tokens = event.data.tokens
8788
if (event.data.snapshot) draft.snapshot = { ...draft.snapshot, end: event.data.snapshot }

packages/opencode/src/v2/session-message.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,14 @@ export type AssistantContent = Schema.Schema.Type<typeof AssistantContent>
123123
export class Assistant extends Schema.Class<Assistant>("Session.Message.Assistant")({
124124
...Base,
125125
type: Schema.Literal("assistant"),
126+
agent: Schema.String,
127+
model: SessionEvent.Step.Started.fields.data.fields.model,
126128
content: AssistantContent.pipe(Schema.Array),
127129
snapshot: Schema.Struct({
128130
start: Schema.String.pipe(Schema.optional),
129131
end: Schema.String.pipe(Schema.optional),
130132
}).pipe(Schema.optional),
133+
finish: Schema.String.pipe(Schema.optional),
131134
cost: Schema.Number.pipe(Schema.optional),
132135
tokens: Schema.Struct({
133136
input: Schema.Number,
@@ -148,6 +151,8 @@ export class Assistant extends Schema.Class<Assistant>("Session.Message.Assistan
148151
return new Assistant({
149152
id: event.data.id,
150153
type: "assistant",
154+
agent: event.data.agent,
155+
model: event.data.model,
151156
time: {
152157
created: event.data.timestamp,
153158
},

packages/opencode/test/server/httpapi-session.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ describe("session HttpApi", () => {
175175
const message = new SessionMessage.Assistant({
176176
id: SessionMessage.ID.create(),
177177
type: "assistant",
178+
agent: "build",
179+
model: { id: "model", providerID: "provider" },
178180
time: { created: DateTime.makeUnsafe(1) },
179181
content: [],
180182
})
@@ -189,6 +191,8 @@ describe("session HttpApi", () => {
189191
time_created: 1,
190192
data: {
191193
time: { created: 1 },
194+
agent: message.agent,
195+
model: message.model,
192196
content: message.content,
193197
} as NonNullable<typeof SessionMessageTable.$inferInsert["data"]>,
194198
},

packages/opencode/test/v2/session-message-updater.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ test("step snapshots carry over to assistant messages", () => {
1414
id: SessionEvent.ID.create(),
1515
sessionID,
1616
timestamp: DateTime.makeUnsafe(1),
17+
agent: "build",
1718
model: { id: "model", providerID: "provider" },
1819
snapshot: "before",
1920
},
@@ -24,7 +25,7 @@ test("step snapshots carry over to assistant messages", () => {
2425
data: {
2526
sessionID,
2627
timestamp: DateTime.makeUnsafe(2),
27-
reason: "stop",
28+
finish: "stop",
2829
cost: 0,
2930
tokens: {
3031
input: 1,
@@ -39,6 +40,7 @@ test("step snapshots carry over to assistant messages", () => {
3940
expect(state.messages[0]?.type).toBe("assistant")
4041
if (state.messages[0]?.type !== "assistant") return
4142
expect(state.messages[0].snapshot).toEqual({ start: "before", end: "after" })
43+
expect(state.messages[0].finish).toBe("stop")
4244
})
4345

4446
test("text ended populates assistant text content", () => {
@@ -51,6 +53,7 @@ test("text ended populates assistant text content", () => {
5153
id: SessionEvent.ID.create(),
5254
sessionID,
5355
timestamp: DateTime.makeUnsafe(1),
56+
agent: "build",
5457
model: { id: "model", providerID: "provider" },
5558
},
5659
} satisfies SessionEvent.Event)

0 commit comments

Comments
 (0)