diff --git a/packages/opencode/src/account/repo.ts b/packages/opencode/src/account/repo.ts
index 8607c3152..c42b7d524 100644
--- a/packages/opencode/src/account/repo.ts
+++ b/packages/opencode/src/account/repo.ts
@@ -44,7 +44,8 @@ export const layer = Layer.effect(
const { db } = yield* Database.Service
const decode = Schema.decodeUnknownSync(Info)
- const query = (effect: Effect.Effect) => effect.pipe(Effect.orDie)
+ const query = (effect: Effect.Effect) =>
+ effect.pipe(Effect.mapError((cause) => new AccountRepoError({ message: "Database operation failed", cause })))
const current = Effect.fnUntraced(function* () {
const state = yield* db
@@ -52,14 +53,12 @@ export const layer = Layer.effect(
.from(AccountStateTable)
.where(eq(AccountStateTable.id, ACCOUNT_STATE_ID))
.get()
- .pipe(Effect.orDie)
if (!state?.active_account_id) return
const account = yield* db
.select()
.from(AccountTable)
.where(eq(AccountTable.id, state.active_account_id))
.get()
- .pipe(Effect.orDie)
if (!account) return
return { ...account, active_org_id: state.active_org_id ?? null }
})
diff --git a/packages/opencode/test/server/httpapi-exercise/backend.ts b/packages/opencode/test/server/httpapi-exercise/backend.ts
index ce94ddda9..6bd060e52 100644
--- a/packages/opencode/test/server/httpapi-exercise/backend.ts
+++ b/packages/opencode/test/server/httpapi-exercise/backend.ts
@@ -56,7 +56,7 @@ function app(modules: Runtime, options: CallOptions) {
),
),
),
- { disableLogger: true },
+ { disableLogger: true, memoMap: modules.memoMap },
).handler
return (appCache[cacheKey] = {
request(input: string | URL | Request, init?: RequestInit) {
diff --git a/packages/opencode/test/server/httpapi-exercise/runner.ts b/packages/opencode/test/server/httpapi-exercise/runner.ts
index db0f0b217..86cbd13d9 100644
--- a/packages/opencode/test/server/httpapi-exercise/runner.ts
+++ b/packages/opencode/test/server/httpapi-exercise/runner.ts
@@ -1,6 +1,6 @@
import { Flag } from "@opencode-ai/core/flag/flag"
import { SessionLegacy } from "@opencode-ai/core/session/legacy"
-import { Cause, Duration, Effect } from "effect"
+import { Cause, Duration, Effect, Layer, Scope } from "effect"
import { TestLLMServer } from "../../lib/llm-server"
import type { Config } from "../../../src/config/config"
@@ -87,18 +87,20 @@ function withContext(
Effect.gen(function* () {
yield* trace(options, scenario, `${label} runtime start`)
const modules = yield* Effect.promise(() => runtime())
+ const scope = yield* Scope.Scope
+ const app = yield* Layer.buildWithMemoMap(modules.AppLayer, modules.memoMap, scope)
yield* trace(options, scenario, `${label} runtime done`)
const path = context.dir?.path
const instance = path
? yield* trace(options, scenario, `${label} instance load start`).pipe(
Effect.andThen(
modules.InstanceStore.Service.use((store) => store.load({ directory: path })).pipe(
- Effect.provide(modules.AppLayer),
+ Effect.provide(app),
Effect.catchCause((cause) =>
Effect.sleep("100 millis").pipe(
Effect.andThen(
modules.InstanceStore.Service.use((store) => store.load({ directory: path })).pipe(
- Effect.provide(modules.AppLayer),
+ Effect.provide(app),
),
),
Effect.catchCause(() => Effect.failCause(cause)),
@@ -110,7 +112,7 @@ function withContext(
)
: undefined
const run = (effect: Effect.Effect) =>
- effect.pipe(Effect.provideService(modules.InstanceRef, instance), Effect.provide(modules.AppLayer))
+ effect.pipe(Effect.provideService(modules.InstanceRef, instance), Effect.provide(app))
const directory = () => {
if (!context.dir?.path) throw new Error("scenario needs a project directory")
return context.dir.path
diff --git a/packages/opencode/test/server/httpapi-exercise/runtime.ts b/packages/opencode/test/server/httpapi-exercise/runtime.ts
index 7842752ad..bd261cbe4 100644
--- a/packages/opencode/test/server/httpapi-exercise/runtime.ts
+++ b/packages/opencode/test/server/httpapi-exercise/runtime.ts
@@ -2,6 +2,7 @@ export type Runtime = {
PublicApi: (typeof import("../../../src/server/routes/instance/httpapi/public"))["PublicApi"]
HttpApiApp: (typeof import("../../../src/server/routes/instance/httpapi/server"))["HttpApiApp"]
AppLayer: (typeof import("../../../src/effect/app-runtime"))["AppLayer"]
+ memoMap: (typeof import("@opencode-ai/core/effect/memo-map"))["memoMap"]
InstanceRef: (typeof import("../../../src/effect/instance-ref"))["InstanceRef"]
InstanceStore: (typeof import("../../../src/project/instance-store"))["InstanceStore"]
Session: (typeof import("../../../src/session/session"))["Session"]
@@ -21,6 +22,7 @@ export function runtime() {
const publicApi = await import("../../../src/server/routes/instance/httpapi/public")
const httpApiServer = await import("../../../src/server/routes/instance/httpapi/server")
const appRuntime = await import("../../../src/effect/app-runtime")
+ const memoMap = await import("@opencode-ai/core/effect/memo-map")
const instanceRef = await import("../../../src/effect/instance-ref")
const instanceStore = await import("../../../src/project/instance-store")
const session = await import("../../../src/session/session")
@@ -34,6 +36,7 @@ export function runtime() {
PublicApi: publicApi.PublicApi,
HttpApiApp: httpApiServer.HttpApiApp,
AppLayer: appRuntime.AppLayer,
+ memoMap: memoMap.memoMap,
InstanceRef: instanceRef.InstanceRef,
InstanceStore: instanceStore.InstanceStore,
Session: session.Session,