fix(task): align background output task_id with opencode contract
This commit is contained in:
parent
5cbf7828f0
commit
acf4c46439
@ -102,7 +102,55 @@ describeFn("executeBackgroundTask output/session metadata compatibility", () =>
|
|||||||
//#then - output and metadata should include canonical session linkage
|
//#then - output and metadata should include canonical session linkage
|
||||||
expectFn(result).toContain("<task_metadata>")
|
expectFn(result).toContain("<task_metadata>")
|
||||||
expectFn(result).toContain("session_id: ses_sub_123")
|
expectFn(result).toContain("session_id: ses_sub_123")
|
||||||
|
expectFn(result).toContain("task_id: ses_sub_123")
|
||||||
|
expectFn(result).toContain("Background Task ID: bg_resolved")
|
||||||
expectFn(metadataCalls).toHaveLength(1)
|
expectFn(metadataCalls).toHaveLength(1)
|
||||||
expectFn(metadataCalls[0].metadata.sessionId).toBe("ses_sub_123")
|
expectFn(metadataCalls[0].metadata.sessionId).toBe("ses_sub_123")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
testFn("captures late-resolved session id and emits synced metadata", async () => {
|
||||||
|
//#given - background task session id appears after launch via manager polling
|
||||||
|
const metadataCalls: any[] = []
|
||||||
|
let reads = 0
|
||||||
|
const manager = {
|
||||||
|
launch: async () => ({
|
||||||
|
id: "bg_late",
|
||||||
|
sessionID: undefined,
|
||||||
|
description: "Late session",
|
||||||
|
agent: "explore",
|
||||||
|
status: "running",
|
||||||
|
}),
|
||||||
|
getTask: () => {
|
||||||
|
reads += 1
|
||||||
|
return reads >= 2 ? { sessionID: "ses_late_123" } : undefined
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await executeBackgroundTask(
|
||||||
|
{
|
||||||
|
description: "Late session",
|
||||||
|
prompt: "check",
|
||||||
|
run_in_background: true,
|
||||||
|
load_skills: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sessionID: "ses_parent",
|
||||||
|
callID: "call_3",
|
||||||
|
metadata: async (value: any) => metadataCalls.push(value),
|
||||||
|
abort: new AbortController().signal,
|
||||||
|
},
|
||||||
|
{ manager },
|
||||||
|
{ sessionID: "ses_parent", messageID: "msg_3" },
|
||||||
|
"explore",
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
)
|
||||||
|
|
||||||
|
//#then - late session id still propagates to task metadata contract
|
||||||
|
expectFn(result).toContain("session_id: ses_late_123")
|
||||||
|
expectFn(result).toContain("task_id: ses_late_123")
|
||||||
|
expectFn(metadataCalls).toHaveLength(1)
|
||||||
|
expectFn(metadataCalls[0].metadata.sessionId).toBe("ses_late_123")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -78,12 +78,12 @@ export async function executeBackgroundTask(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const taskMetadataBlock = sessionId
|
const taskMetadataBlock = sessionId
|
||||||
? `\n\n<task_metadata>\nsession_id: ${sessionId}\n</task_metadata>`
|
? `\n\n<task_metadata>\nsession_id: ${sessionId}\ntask_id: ${sessionId}\n</task_metadata>`
|
||||||
: ""
|
: ""
|
||||||
|
|
||||||
return `Background task launched.
|
return `Background task launched.
|
||||||
|
|
||||||
Task ID: ${task.id}
|
Background Task ID: ${task.id}
|
||||||
Description: ${task.description}
|
Description: ${task.description}
|
||||||
Agent: ${task.agent}${args.category ? ` (category: ${args.category})` : ""}
|
Agent: ${task.agent}${args.category ? ` (category: ${args.category})` : ""}
|
||||||
Status: ${task.status}
|
Status: ${task.status}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user