Skip to content
Prev Previous commit
Next Next commit
refactor: simplify session runtime contracts
  • Loading branch information
kitlangton committed Jun 25, 2026
commit 9305264bf6b5df810ad20b0549721ff24f885b80
7 changes: 4 additions & 3 deletions packages/core/src/session/runner/to-llm-message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ const toolResult = (tool: SessionMessage.AssistantTool, providerMetadata: Provid
const assistant = (message: SessionMessage.Assistant, model: Model) => {
const sameModel =
String(message.model.providerID) === String(model.provider) && String(message.model.id) === String(model.id)
const reuseProviderMetadata = sameModel && message.finish !== "error"
const reuseProviderMetadata = sameModel && message.error === undefined
const content = message.content.flatMap((item): ContentPart[] => {
if (item.type === "text") return [{ type: "text", text: item.text }]
if (item.type === "reasoning")
Expand All @@ -86,11 +86,12 @@ const assistant = (message: SessionMessage.Assistant, model: Model) => {
? [{ type: "text", text: item.text }]
: []
const call = toolCall(item, reuseProviderMetadata ? item.provider?.metadata : undefined)
if (item.provider?.executed !== true) return [call]
const result = toolResult(
item,
reuseProviderMetadata ? (item.provider?.resultMetadata ?? item.provider?.metadata) : undefined,
reuseProviderMetadata ? (item.provider.resultMetadata ?? item.provider.metadata) : undefined,
)
return item.provider?.executed === true && result ? [call, result] : [call]
return result ? [call, result] : [call]
})
const meaningful = content.filter((part) => {
if (part.type === "text") return part.text !== ""
Expand Down
5 changes: 1 addition & 4 deletions packages/protocol/src/groups/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,6 @@ const SessionsQueryFields = {
search: Schema.optional(Schema.String),
}

const SessionEventSchema: Schema.Codec<typeof SessionEvent.Durable.Type, typeof SessionEvent.Durable.Encoded> =
Schema.make(SessionEvent.Durable.ast)

const SessionsDirectoryQuery = Schema.Struct({
...SessionsQueryFields,
directory: AbsolutePath,
Expand Down Expand Up @@ -282,7 +279,7 @@ export const makeSessionGroup = <I extends HttpApiMiddleware.AnyId, S>(sessionLo
query: {
after: Schema.NumberFromString.pipe(Schema.decodeTo(NonNegativeInt), Schema.optional),
},
success: HttpApiSchema.StreamSse({ data: SessionEventSchema }),
success: HttpApiSchema.StreamSse({ data: SessionEvent.Durable }),
error: SessionNotFoundError,
})
.middleware(sessionLocationMiddleware)
Expand Down