diff --git a/packages/opencode/src/share/share-next.ts b/packages/opencode/src/share/share-next.ts index 384027436f..a386211dc6 100644 --- a/packages/opencode/src/share/share-next.ts +++ b/packages/opencode/src/share/share-next.ts @@ -272,7 +272,7 @@ export const layer = Layer.effect( log.info("full sync", { sessionID }) const info = yield* session.get(sessionID) const diffs = yield* session.diff(sessionID) - const messages = yield* Effect.sync(() => Array.from(MessageV2.stream(sessionID))) + const messages = yield* session.messages({ sessionID }) const models = yield* Effect.forEach( Array.from( new Map( diff --git a/packages/opencode/src/tool/plan.ts b/packages/opencode/src/tool/plan.ts index d5195376b3..af206f66a5 100644 --- a/packages/opencode/src/tool/plan.ts +++ b/packages/opencode/src/tool/plan.ts @@ -6,16 +6,9 @@ import { Session } from "@/session/session" import { MessageV2 } from "../session/message-v2" import { Provider } from "@/provider/provider" import { InstanceState } from "@/effect/instance-state" -import { type SessionID, MessageID, PartID } from "../session/schema" +import { MessageID, PartID } from "../session/schema" import EXIT_DESCRIPTION from "./plan-exit.txt" -function getLastModel(sessionID: SessionID) { - for (const item of MessageV2.stream(sessionID)) { - if (item.info.role === "user" && item.info.model) return item.info.model - } - return undefined -} - export const Parameters = Schema.Struct({}) export const PlanExitTool = Tool.define( @@ -51,7 +44,10 @@ export const PlanExitTool = Tool.define( if (answers[0]?.[0] === "No") yield* new Question.RejectedError() - const model = getLastModel(ctx.sessionID) ?? (yield* provider.defaultModel()) + const messages = yield* session.messages({ sessionID: ctx.sessionID }).pipe(Effect.orDie) + const lastUser = messages.findLast((item) => item.info.role === "user" && item.info.model) + const model = + lastUser?.info.role === "user" && lastUser.info.model ? lastUser.info.model : yield* provider.defaultModel() const msg: MessageV2.User = { id: MessageID.ascending(), diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index c4d5bf7f4a..d3572c1c4f 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -86,7 +86,7 @@ export const TaskTool = Tool.define( ], })) - const msg = yield* Effect.sync(() => MessageV2.get({ sessionID: ctx.sessionID, messageID: ctx.messageID })) + const msg = yield* MessageV2.getEffect({ sessionID: ctx.sessionID, messageID: ctx.messageID }).pipe(Effect.orDie) if (msg.info.role !== "assistant") return yield* Effect.fail(new Error("Not an assistant message")) const model = next.model ?? {