From 7a66eae586717bcad1e7fc1ae929d29f6bc677d2 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 3 Jun 2026 03:11:53 +0000 Subject: [PATCH] chore: generate --- packages/opencode/src/background/job.ts | 70 +++++++++++-------------- packages/opencode/src/tool/task.ts | 18 +++---- 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/packages/opencode/src/background/job.ts b/packages/opencode/src/background/job.ts index 8179c7328e0..0e0c3874308 100644 --- a/packages/opencode/src/background/job.ts +++ b/packages/opencode/src/background/job.ts @@ -103,43 +103,38 @@ export const layer = Layer.effect( ) { const completed_at = yield* Clock.currentTimeMillis const s = yield* InstanceState.get(state) - const result = yield* SynchronizedRef.modify( - s.jobs, - (jobs): readonly [FinishResult, Map] => { - const job = jobs.get(id) - if (!job) return [{}, jobs] - if (job.token !== token) return [{}, jobs] - if (job.info.status !== "running") return [{ info: snapshot(job) }, jobs] - const pending = job.pending - 1 - const output = Exit.isSuccess(exit) && (!job.output || sequence > job.output.sequence) + const result = yield* SynchronizedRef.modify(s.jobs, (jobs): readonly [FinishResult, Map] => { + const job = jobs.get(id) + if (!job) return [{}, jobs] + if (job.token !== token) return [{}, jobs] + if (job.info.status !== "running") return [{ info: snapshot(job) }, jobs] + const pending = job.pending - 1 + const output = + Exit.isSuccess(exit) && (!job.output || sequence > job.output.sequence) ? { sequence, text: exit.value } : job.output - if (Exit.isSuccess(exit) && pending > 0) { - return [{}, new Map(jobs).set(id, { ...job, pending, output })] - } - const status: Exclude = Exit.isSuccess(exit) - ? "completed" - : Cause.hasInterruptsOnly(exit.cause) - ? "cancelled" - : "error" - const next = { - ...job, - pending: 0, - output, - info: { - ...job.info, - status, - completed_at, - ...(output ? { output: output.text } : {}), - ...(Exit.isFailure(exit) ? { error: errorText(Cause.squash(exit.cause)) } : {}), - }, - } - return [ - { info: snapshot(next), done: job.done, scope: job.scope }, - new Map(jobs).set(id, next), - ] - }, - ) + if (Exit.isSuccess(exit) && pending > 0) { + return [{}, new Map(jobs).set(id, { ...job, pending, output })] + } + const status: Exclude = Exit.isSuccess(exit) + ? "completed" + : Cause.hasInterruptsOnly(exit.cause) + ? "cancelled" + : "error" + const next = { + ...job, + pending: 0, + output, + info: { + ...job.info, + status, + completed_at, + ...(output ? { output: output.text } : {}), + ...(Exit.isFailure(exit) ? { error: errorText(Cause.squash(exit.cause)) } : {}), + }, + } + return [{ info: snapshot(next), done: job.done, scope: job.scope }, new Map(jobs).set(id, next)] + }) if (result.info && result.done) yield* Deferred.succeed(result.done, result.info).pipe(Effect.ignore) if (result.scope) { yield* Scope.close(result.scope, Exit.void).pipe(Effect.forkIn(s.scope, { startImmediately: true })) @@ -265,10 +260,7 @@ export const layer = Layer.effect( completed_at, }, } - return [ - { info: snapshot(next), done: job.done, scope: job.scope }, - new Map(jobs).set(id, next), - ] + return [{ info: snapshot(next), done: job.done, scope: job.scope }, new Map(jobs).set(id, next)] }, ) if (result.info && result.done) yield* Deferred.succeed(result.done, result.info).pipe(Effect.ignore) diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index 2324f79ff63..be36e8db93c 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -257,16 +257,14 @@ export const TaskTool = Tool.define( metadata, run: runTask(), }) - yield* background - .wait({ id: info.id }) - .pipe( - Effect.flatMap((result) => { - if (result.info?.status === "completed") return inject("completed", result.info.output ?? "") - if (result.info?.status === "error") return inject("error", result.info.error ?? "") - return Effect.void - }), - Effect.forkIn(scope, { startImmediately: true }), - ) + yield* background.wait({ id: info.id }).pipe( + Effect.flatMap((result) => { + if (result.info?.status === "completed") return inject("completed", result.info.output ?? "") + if (result.info?.status === "error") return inject("error", result.info.error ?? "") + return Effect.void + }), + Effect.forkIn(scope, { startImmediately: true }), + ) return { title: params.description,