When delegate-task resumes a session via session_id, the response task_metadata now includes a subagent field identifying which agent was running in the resumed session. This allows the parent agent to know what type of subagent it is continuing. - sync-continuation: uses resumeAgent extracted from session messages - background-continuation: uses task.agent from BackgroundTask object - Gracefully omits subagent when agent info is unavailable
96 lines
2.8 KiB
TypeScript
96 lines
2.8 KiB
TypeScript
const { describe, test, expect, mock } = require("bun:test")
|
|
|
|
describe("executeBackgroundContinuation - subagent metadata", () => {
|
|
test("includes subagent in task_metadata when task has agent", async () => {
|
|
//#given - mock manager.resume returning task with agent info
|
|
const mockManager = {
|
|
resume: async () => ({
|
|
id: "bg_task_001",
|
|
description: "oracle consultation",
|
|
agent: "oracle",
|
|
status: "running",
|
|
sessionID: "ses_resumed_123",
|
|
}),
|
|
}
|
|
|
|
const mockCtx = {
|
|
sessionID: "parent-session",
|
|
callID: "call-456",
|
|
metadata: mock(() => Promise.resolve()),
|
|
}
|
|
|
|
const mockExecutorCtx = {
|
|
manager: mockManager,
|
|
}
|
|
|
|
const parentContext = {
|
|
sessionID: "parent-session",
|
|
messageID: "msg-parent",
|
|
agent: "sisyphus",
|
|
}
|
|
|
|
const args = {
|
|
session_id: "ses_resumed_123",
|
|
prompt: "continue working",
|
|
description: "resume oracle",
|
|
load_skills: [],
|
|
run_in_background: true,
|
|
}
|
|
|
|
//#when - executeBackgroundContinuation completes
|
|
const { executeBackgroundContinuation } = require("./background-continuation")
|
|
const result = await executeBackgroundContinuation(args, mockCtx, mockExecutorCtx, parentContext)
|
|
|
|
//#then - task_metadata should contain subagent field
|
|
expect(result).toContain("<task_metadata>")
|
|
expect(result).toContain("subagent: oracle")
|
|
expect(result).toContain("session_id: ses_resumed_123")
|
|
})
|
|
|
|
test("omits subagent from task_metadata when task agent is undefined", async () => {
|
|
//#given - mock manager.resume returning task without agent
|
|
const mockManager = {
|
|
resume: async () => ({
|
|
id: "bg_task_002",
|
|
description: "unknown task",
|
|
agent: undefined,
|
|
status: "running",
|
|
sessionID: "ses_resumed_456",
|
|
}),
|
|
}
|
|
|
|
const mockCtx = {
|
|
sessionID: "parent-session",
|
|
callID: "call-789",
|
|
metadata: mock(() => Promise.resolve()),
|
|
}
|
|
|
|
const mockExecutorCtx = {
|
|
manager: mockManager,
|
|
}
|
|
|
|
const parentContext = {
|
|
sessionID: "parent-session",
|
|
messageID: "msg-parent",
|
|
agent: "sisyphus",
|
|
}
|
|
|
|
const args = {
|
|
session_id: "ses_resumed_456",
|
|
prompt: "continue",
|
|
description: "resume task",
|
|
load_skills: [],
|
|
run_in_background: true,
|
|
}
|
|
|
|
//#when - executeBackgroundContinuation completes without agent
|
|
const { executeBackgroundContinuation } = require("./background-continuation")
|
|
const result = await executeBackgroundContinuation(args, mockCtx, mockExecutorCtx, parentContext)
|
|
|
|
//#then - task_metadata should NOT contain subagent field
|
|
expect(result).toContain("<task_metadata>")
|
|
expect(result).toContain("session_id: ses_resumed_456")
|
|
expect(result).not.toContain("subagent:")
|
|
})
|
|
})
|