fix(background-agent): preserve parent model in notifyParentSession

Fixes model switching bug where sisyphus_task with category would
change the main session's model after completion.

- Add parentModel to session.prompt body in notifyParentSession
- Add test verifying model is included when parentModel is defined
This commit is contained in:
justsisyphus 2026-01-14 13:50:12 +09:00
parent 22619d137e
commit 66f8946ff1
2 changed files with 32 additions and 3 deletions

View File

@ -675,7 +675,32 @@ describe("LaunchInput.skillContent", () => {
})
})
describe("BackgroundManager.notifyParentSession - agent context preservation", () => {
describe("BackgroundManager.notifyParentSession - model/agent context preservation", () => {
test("should include model field in session.prompt when parentModel is defined", async () => {
// #given
const task: BackgroundTask = {
id: "task-with-model",
sessionID: "session-child",
parentSessionID: "session-parent",
parentMessageID: "msg-parent",
description: "task with model context",
prompt: "test",
agent: "explore",
status: "completed",
startedAt: new Date(),
completedAt: new Date(),
parentAgent: "Sisyphus",
parentModel: { providerID: "anthropic", modelID: "claude-opus-4-5" },
}
// #when
const promptBody = buildNotificationPromptBody(task)
// #then - model MUST be included when parentModel is defined
expect(promptBody.model).toEqual({ providerID: "anthropic", modelID: "claude-opus-4-5" })
expect(promptBody.agent).toBe("Sisyphus")
})
test("should not pass agent field when parentAgent is undefined", async () => {
// #given
const task: BackgroundTask = {

View File

@ -639,12 +639,16 @@ Use \`background_output(task_id="${task.id}")\` to retrieve this result when rea
}
// Inject notification via session.prompt with noReply
// Preserve parent session's model/agent context to prevent model switching
try {
await this.client.session.prompt({
path: { id: task.parentSessionID },
body: {
noReply: !allComplete, // Silent unless all complete
agent: task.parentAgent,
noReply: !allComplete,
...(task.parentAgent !== undefined ? { agent: task.parentAgent } : {}),
...(task.parentModel?.providerID && task.parentModel?.modelID
? { model: { providerID: task.parentModel.providerID, modelID: task.parentModel.modelID } }
: {}),
parts: [{ type: "text", text: notification }],
},
})