diff --git a/src/features/background-agent/manager.ts b/src/features/background-agent/manager.ts index 9b34192fd..f2343d575 100644 --- a/src/features/background-agent/manager.ts +++ b/src/features/background-agent/manager.ts @@ -1,5 +1,4 @@ -import { existsSync, readdirSync } from "node:fs" -import { join } from "node:path" + import type { PluginInput } from "@opencode-ai/plugin" import type { BackgroundTask, @@ -9,10 +8,7 @@ import type { import { log } from "../../shared/logger" import { ConcurrencyManager } from "./concurrency" import type { BackgroundTaskConfig } from "../../config/schema" -import { - findNearestMessageWithFields, - MESSAGE_STORAGE, -} from "../hook-message-injector" + import { subagentSessions } from "../claude-code-session-state" import { getTaskToastManager } from "../task-toast-manager" @@ -44,20 +40,6 @@ interface Todo { id: string } -function getMessageDir(sessionID: string): string | null { - if (!existsSync(MESSAGE_STORAGE)) return null - - const directPath = join(MESSAGE_STORAGE, sessionID) - if (existsSync(directPath)) return directPath - - for (const dir of readdirSync(MESSAGE_STORAGE)) { - const sessionPath = join(MESSAGE_STORAGE, dir, sessionID) - if (existsSync(sessionPath)) return sessionPath - } - - return null -} - export class BackgroundManager { private tasks: Map private notifications: Map @@ -456,18 +438,15 @@ export class BackgroundManager { } try { - const messageDir = getMessageDir(task.parentSessionID) - const prevMessage = messageDir ? findNearestMessageWithFields(messageDir) : null - - const modelContext = task.parentModel ?? prevMessage?.model - const modelField = modelContext?.providerID && modelContext?.modelID - ? { providerID: modelContext.providerID, modelID: modelContext.modelID } + // Use only parentModel - don't fallback to prevMessage.model + // This prevents accidentally changing parent session's model + const modelField = task.parentModel?.providerID && task.parentModel?.modelID + ? { providerID: task.parentModel.providerID, modelID: task.parentModel.modelID } : undefined await this.client.session.prompt({ path: { id: task.parentSessionID }, body: { - agent: prevMessage?.agent, model: modelField, parts: [{ type: "text", text: message }], }, diff --git a/src/hooks/todo-continuation-enforcer.ts b/src/hooks/todo-continuation-enforcer.ts index 9f843f06c..4c5fa6949 100644 --- a/src/hooks/todo-continuation-enforcer.ts +++ b/src/hooks/todo-continuation-enforcer.ts @@ -205,18 +205,14 @@ export function createTodoContinuationEnforcer( const prompt = `${CONTINUATION_PROMPT}\n\n[Status: ${todos.length - freshIncompleteCount}/${todos.length} completed, ${freshIncompleteCount} remaining]` - const modelField = prevMessage?.model?.providerID && prevMessage?.model?.modelID - ? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID } - : undefined - try { - log(`[${HOOK_NAME}] Injecting continuation`, { sessionID, agent: prevMessage?.agent, model: modelField, incompleteCount: freshIncompleteCount }) + log(`[${HOOK_NAME}] Injecting continuation`, { sessionID, agent: prevMessage?.agent, incompleteCount: freshIncompleteCount }) + // Don't pass model - let OpenCode use session's existing lastModel await ctx.client.session.prompt({ path: { id: sessionID }, body: { agent: prevMessage?.agent, - model: modelField, parts: [{ type: "text", text: prompt }], }, query: { directory: ctx.directory },