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,