diff --git a/packages/core/test/session-create.test.ts b/packages/core/test/session-create.test.ts
index 662b45d5c89..11bc3639db3 100644
--- a/packages/core/test/session-create.test.ts
+++ b/packages/core/test/session-create.test.ts
@@ -37,7 +37,7 @@ import { testEffect } from "./lib/effect"
import { LocationServiceMap } from "@opencode-ai/core/location-service-map"
import { promptLocationLayer } from "./fixture/prompt-location"
import { globalProjectLayer } from "./lib/project"
-import { tmpdir } from "./fixture/tmpdir"
+import { tmpdirScoped } from "./fixture/tmpdir"
const it = testEffect(
AppNodeBuilder.build(
@@ -96,10 +96,7 @@ const assertCreateInputTypes = (session: Session.Interface) => {
void assertCreateInputTypes
function withTmp(f: (directory: string) => Effect.Effect) {
- return Effect.acquireRelease(
- Effect.promise(() => tmpdir()),
- (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()),
- ).pipe(Effect.flatMap((tmp) => f(tmp.path)))
+ return tmpdirScoped().pipe(Effect.flatMap((tmp) => f(tmp.path)))
}
describe("Session.create", () => {
@@ -967,10 +964,7 @@ describe("Session.create", () => {
data: event.data,
}))
- const tmp = yield* Effect.acquireRelease(
- Effect.promise(() => tmpdir()),
- (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()),
- )
+ const tmp = yield* tmpdirScoped()
const targetLayer = AppNodeBuilder.build(
LayerNode.group([Database.node, Bus.node, SessionProjector.node, SessionStore.node]),
[
diff --git a/packages/core/test/session-message-update.test.ts b/packages/core/test/session-message-update.test.ts
index 23810107e1d..45e72cb111c 100644
--- a/packages/core/test/session-message-update.test.ts
+++ b/packages/core/test/session-message-update.test.ts
@@ -21,7 +21,7 @@ import { SessionProjector } from "@opencode-ai/core/session/projector"
import { SessionStore } from "@opencode-ai/core/session/store"
import { Money } from "@opencode-ai/schema/money"
import { LayerNode } from "@opencode-ai/util/effect/layer-node"
-import { tmpdir } from "./fixture/tmpdir"
+import { tmpdirScoped } from "./fixture/tmpdir"
import { testEffect } from "./lib/effect"
import { globalProjectLayer } from "./lib/project"
@@ -149,10 +149,7 @@ describe("Session.updateMessage", () => {
type: event.type,
data: event.data,
}))
- const tmp = yield* Effect.acquireRelease(
- Effect.promise(() => tmpdir()),
- (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()),
- )
+ const tmp = yield* tmpdirScoped()
const target = AppNodeBuilder.build(
LayerNode.group([Database.node, Bus.node, SessionProjector.node, SessionStore.node]),
[
diff --git a/packages/core/test/session-prompt.test.ts b/packages/core/test/session-prompt.test.ts
index a75146300d1..fbc8a86cbaa 100644
--- a/packages/core/test/session-prompt.test.ts
+++ b/packages/core/test/session-prompt.test.ts
@@ -1,7 +1,5 @@
import { describe, expect } from "bun:test"
import { DateTime, Effect, Fiber, Layer, LayerMap, Schema, Stream } from "effect"
-import { mkdtemp, rm } from "fs/promises"
-import { tmpdir } from "os"
import path from "path"
import { pathToFileURL } from "url"
import { eq } from "drizzle-orm"
@@ -30,6 +28,7 @@ import { Image } from "@opencode-ai/core/image"
import { PluginSupervisor } from "@opencode-ai/core/plugin/supervisor"
import { PluginHooks } from "@opencode-ai/core/plugin/hooks"
import { Snapshot } from "@opencode-ai/core/snapshot"
+import { tmpdirScoped } from "./fixture/tmpdir"
import { testEffect } from "./lib/effect"
const executionCalls: Session.ID[] = []
@@ -403,11 +402,8 @@ describe("Session.prompt", () => {
Effect.gen(function* () {
yield* setup
const session = yield* Session.Service
- const directory = yield* Effect.acquireRelease(
- Effect.promise(() => mkdtemp(path.join(tmpdir(), "opencode-session-prompt-"))),
- (directory) => Effect.promise(() => rm(directory, { recursive: true, force: true })),
- )
- const source = path.join(directory, "image.png")
+ const directory = yield* tmpdirScoped("opencode-session-prompt-")
+ const source = path.join(directory.path, "image.png")
const bytes = Buffer.from(
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=",
"base64",