Files
oh-my-openagent/src/tools/delegate-task/background-continuation.test.ts
YeonGyu-Kim 95aa7595f8 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
2026-02-12 19:09:15 +09:00

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:")
})
})