Merge pull request #3941 from code-yeongyu/fix/delegate-task-metadata

[codex] preserve native delegate task metadata
This commit is contained in:
YeonGyu-Kim
2026-05-11 13:20:10 +09:00
committed by GitHub
2 changed files with 32 additions and 1 deletions
+30
View File
@@ -92,4 +92,34 @@ describe("createToolExecuteAfterHandler", () => {
expect(output.title).toBe("stored title")
expect(output.metadata).toEqual({ sessionId: "ses_native", agent: "hephaestus" })
})
it("#given native session linkage without model #when stored metadata exists #then required task metadata is preserved", async () => {
// given
const model = { providerID: "openai", modelID: "gpt-5.5" }
storeToolMetadata("ses_parent", "call_model", {
title: "stored title",
metadata: { sessionId: "ses_stored", agent: "oracle", model },
})
const handler = createToolExecuteAfterHandler({
ctx: {} as never,
hooks: {} as never,
})
const output = {
title: "result",
output: "original output",
metadata: { sessionId: "ses_native", agent: "hephaestus" },
}
// when
await handler(
{ tool: "task", sessionID: "ses_parent", callID: "call_model" },
output
)
// then
expect(output.title).toBe("stored title")
expect(output.metadata).toEqual({ sessionId: "ses_native", agent: "hephaestus", model })
})
})
+2 -1
View File
@@ -59,12 +59,13 @@ export function createToolExecuteAfterHandler(args: {
}
if (stored.metadata) {
if (nativeSessionId) {
log("[tool-execute-after] Native output metadata already includes session linkage; skipping stored metadata overwrite", {
log("[tool-execute-after] Native output metadata already includes session linkage; preserving native metadata precedence", {
tool: input.tool,
sessionID: input.sessionID,
callID: input.callID ?? input.callId ?? input.call_id,
nativeSessionId,
})
output.metadata = { ...stored.metadata, ...output.metadata }
} else {
output.metadata = { ...output.metadata, ...stored.metadata }
}