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:
parent
22619d137e
commit
66f8946ff1
@ -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 () => {
|
test("should not pass agent field when parentAgent is undefined", async () => {
|
||||||
// #given
|
// #given
|
||||||
const task: BackgroundTask = {
|
const task: BackgroundTask = {
|
||||||
|
|||||||
@ -639,12 +639,16 @@ Use \`background_output(task_id="${task.id}")\` to retrieve this result when rea
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Inject notification via session.prompt with noReply
|
// Inject notification via session.prompt with noReply
|
||||||
|
// Preserve parent session's model/agent context to prevent model switching
|
||||||
try {
|
try {
|
||||||
await this.client.session.prompt({
|
await this.client.session.prompt({
|
||||||
path: { id: task.parentSessionID },
|
path: { id: task.parentSessionID },
|
||||||
body: {
|
body: {
|
||||||
noReply: !allComplete, // Silent unless all complete
|
noReply: !allComplete,
|
||||||
agent: task.parentAgent,
|
...(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 }],
|
parts: [{ type: "text", text: notification }],
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user