From 1979a7a134cc9a8e5d51dc39432f05f71698b46c Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 10 Apr 2026 22:54:48 -0400 Subject: [PATCH] refactor(tool): use Session.Service directly in TaskTool instead of facade --- packages/opencode/src/tool/task.ts | 68 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index a8e7a8d69c0e..881b64fb363c 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -36,6 +36,7 @@ export const TaskTool = Tool.define( Effect.gen(function* () { const agent = yield* Agent.Service const config = yield* Config.Service + const sessions = yield* Session.Service const run = Effect.fn("TaskTool.execute")(function* (params: z.infer, ctx: Tool.Context) { const cfg = yield* config.get() @@ -62,44 +63,41 @@ export const TaskTool = Tool.define( const taskID = params.task_id const session = taskID - ? yield* Effect.promise(() => { - const id = SessionID.make(taskID) - return Session.get(id).catch(() => undefined) - }) + ? yield* sessions.get(SessionID.make(taskID)).pipe( + Effect.catchCause(() => Effect.succeed(undefined)), + ) : undefined const nextSession = session ?? - (yield* Effect.promise(() => - Session.create({ - parentID: ctx.sessionID, - title: params.description + ` (@${next.name} subagent)`, - permission: [ - ...(canTodo - ? [] - : [ - { - permission: "todowrite" as const, - pattern: "*" as const, - action: "deny" as const, - }, - ]), - ...(canTask - ? [] - : [ - { - permission: id, - pattern: "*" as const, - action: "deny" as const, - }, - ]), - ...(cfg.experimental?.primary_tools?.map((item) => ({ - pattern: "*", - action: "allow" as const, - permission: item, - })) ?? []), - ], - }), - )) + (yield* sessions.create({ + parentID: ctx.sessionID, + title: params.description + ` (@${next.name} subagent)`, + permission: [ + ...(canTodo + ? [] + : [ + { + permission: "todowrite" as const, + pattern: "*" as const, + action: "deny" as const, + }, + ]), + ...(canTask + ? [] + : [ + { + permission: id, + pattern: "*" as const, + action: "deny" as const, + }, + ]), + ...(cfg.experimental?.primary_tools?.map((item) => ({ + pattern: "*", + action: "allow" as const, + permission: item, + })) ?? []), + ], + })) const msg = yield* Effect.sync(() => MessageV2.get({ sessionID: ctx.sessionID, messageID: ctx.messageID })) if (msg.info.role !== "assistant") return yield* Effect.fail(new Error("Not an assistant message"))