feat: include subagent in task_metadata when resuming sessions
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
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
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:")
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user