Skip to content

Commit b0dc8e4

Browse files
authored
fix(session): use typed message reads in tools (anomalyco#27280)
1 parent 596f241 commit b0dc8e4

3 files changed

Lines changed: 7 additions & 11 deletions

File tree

packages/opencode/src/share/share-next.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ export const layer = Layer.effect(
272272
log.info("full sync", { sessionID })
273273
const info = yield* session.get(sessionID)
274274
const diffs = yield* session.diff(sessionID)
275-
const messages = yield* Effect.sync(() => Array.from(MessageV2.stream(sessionID)))
275+
const messages = yield* session.messages({ sessionID })
276276
const models = yield* Effect.forEach(
277277
Array.from(
278278
new Map(

packages/opencode/src/tool/plan.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,9 @@ import { Session } from "@/session/session"
66
import { MessageV2 } from "../session/message-v2"
77
import { Provider } from "@/provider/provider"
88
import { InstanceState } from "@/effect/instance-state"
9-
import { type SessionID, MessageID, PartID } from "../session/schema"
9+
import { MessageID, PartID } from "../session/schema"
1010
import EXIT_DESCRIPTION from "./plan-exit.txt"
1111

12-
function getLastModel(sessionID: SessionID) {
13-
for (const item of MessageV2.stream(sessionID)) {
14-
if (item.info.role === "user" && item.info.model) return item.info.model
15-
}
16-
return undefined
17-
}
18-
1912
export const Parameters = Schema.Struct({})
2013

2114
export const PlanExitTool = Tool.define(
@@ -51,7 +44,10 @@ export const PlanExitTool = Tool.define(
5144

5245
if (answers[0]?.[0] === "No") yield* new Question.RejectedError()
5346

54-
const model = getLastModel(ctx.sessionID) ?? (yield* provider.defaultModel())
47+
const messages = yield* session.messages({ sessionID: ctx.sessionID }).pipe(Effect.orDie)
48+
const lastUser = messages.findLast((item) => item.info.role === "user" && item.info.model)
49+
const model =
50+
lastUser?.info.role === "user" && lastUser.info.model ? lastUser.info.model : yield* provider.defaultModel()
5551

5652
const msg: MessageV2.User = {
5753
id: MessageID.ascending(),

packages/opencode/src/tool/task.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export const TaskTool = Tool.define(
8686
],
8787
}))
8888

89-
const msg = yield* Effect.sync(() => MessageV2.get({ sessionID: ctx.sessionID, messageID: ctx.messageID }))
89+
const msg = yield* MessageV2.getEffect({ sessionID: ctx.sessionID, messageID: ctx.messageID }).pipe(Effect.orDie)
9090
if (msg.info.role !== "assistant") return yield* Effect.fail(new Error("Not an assistant message"))
9191

9292
const model = next.model ?? {

0 commit comments

Comments
 (0)