From eea9346e97193aeabbf8eea457c7262943138d69 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sun, 16 Nov 2025 19:59:48 -0500 Subject: [PATCH] core: fix session cancellation cleanup to prevent memory leaks in task tool --- packages/opencode/src/tool/task.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index d127fba38..8f27f570b 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -7,6 +7,7 @@ import { MessageV2 } from "../session/message-v2" import { Identifier } from "../id/id" import { Agent } from "../agent/agent" import { SessionPrompt } from "../session/prompt" +import { defer } from "@/util/defer" export const TaskTool = Tool.define("task", async () => { const agents = await Agent.list().then((x) => x.filter((a) => a.mode !== "primary")) @@ -61,9 +62,11 @@ export const TaskTool = Tool.define("task", async () => { providerID: msg.info.providerID, } - ctx.abort.addEventListener("abort", () => { + function cancel() { SessionPrompt.cancel(session.id) - }) + } + ctx.abort.addEventListener("abort", cancel) + using _ = defer(() => ctx.abort.removeEventListener("abort", cancel)) const promptParts = await SessionPrompt.resolvePromptParts(params.prompt) const result = await SessionPrompt.prompt({ messageID,