fix(delegate-task): preserve native task metadata
This commit is contained in:
@@ -92,4 +92,34 @@ describe("createToolExecuteAfterHandler", () => {
|
|||||||
expect(output.title).toBe("stored title")
|
expect(output.title).toBe("stored title")
|
||||||
expect(output.metadata).toEqual({ sessionId: "ses_native", agent: "hephaestus" })
|
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 })
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -59,12 +59,13 @@ export function createToolExecuteAfterHandler(args: {
|
|||||||
}
|
}
|
||||||
if (stored.metadata) {
|
if (stored.metadata) {
|
||||||
if (nativeSessionId) {
|
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,
|
tool: input.tool,
|
||||||
sessionID: input.sessionID,
|
sessionID: input.sessionID,
|
||||||
callID: input.callID ?? input.callId ?? input.call_id,
|
callID: input.callID ?? input.callId ?? input.call_id,
|
||||||
nativeSessionId,
|
nativeSessionId,
|
||||||
})
|
})
|
||||||
|
output.metadata = { ...stored.metadata, ...output.metadata }
|
||||||
} else {
|
} else {
|
||||||
output.metadata = { ...output.metadata, ...stored.metadata }
|
output.metadata = { ...output.metadata, ...stored.metadata }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user