Skip to content

Commit 2767895

Browse files
committed
fix(opencode): preserve InstanceRef context in prompt_async fork
1 parent 6718865 commit 2767895

2 files changed

Lines changed: 14 additions & 12 deletions

File tree

build_opencode.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ set -euo pipefail
1414
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
1515
cd "$SCRIPT_DIR/packages/opencode"
1616

17-
bun run build -- --single --skip-install
17+
bun run build -- --single --skip-install --skip-embed-web-ui

packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { SessionSummary } from "@/session/summary"
1616
import { Todo } from "@/session/todo"
1717
import { MessageID, PartID, SessionID } from "@/session/schema"
1818
import { NamedError } from "@opencode-ai/core/util/error"
19+
import { attach } from "@/effect/run-service"
1920
import { Cause, Effect, Option, Schema, Scope } from "effect"
2021
import * as Stream from "effect/Stream"
2122
import { HttpServerRequest, HttpServerResponse } from "effect/unstable/http"
@@ -311,18 +312,19 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
311312
payload: typeof PromptPayload.Type
312313
}) {
313314
yield* requireSession(ctx.params.sessionID)
314-
yield* promptSvc.prompt({ ...ctx.payload, sessionID: ctx.params.sessionID }).pipe(
315-
Effect.catchCause((cause) =>
316-
Effect.gen(function* () {
317-
yield* Effect.logError("prompt_async failed", { sessionID: ctx.params.sessionID, cause })
318-
yield* events.publish(Session.Event.Error, {
319-
sessionID: ctx.params.sessionID,
320-
error: new NamedError.Unknown({ message: Cause.pretty(cause) }).toObject(),
321-
})
322-
}),
315+
yield* attach(
316+
promptSvc.prompt({ ...ctx.payload, sessionID: ctx.params.sessionID }).pipe(
317+
Effect.catchCause((cause) =>
318+
Effect.gen(function* () {
319+
yield* Effect.logError("prompt_async failed", { sessionID: ctx.params.sessionID, cause })
320+
yield* events.publish(Session.Event.Error, {
321+
sessionID: ctx.params.sessionID,
322+
error: new NamedError.Unknown({ message: Cause.pretty(cause) }).toObject(),
323+
})
324+
}),
325+
),
323326
),
324-
Effect.forkIn(scope, { startImmediately: true }),
325-
)
327+
).pipe(Effect.forkIn(scope, { startImmediately: true }))
326328
return HttpApiSchema.NoContent.make()
327329
})
328330

0 commit comments

Comments
 (0)