| 1234567891011121314151617181920212223242526 |
- import { Location } from "@opencode-ai/core/location"
- import { Project } from "@opencode-ai/core/project"
- import { AbsolutePath } from "@opencode-ai/core/schema"
- import { Effect, Layer } from "effect"
- import { tmpdir } from "./tmpdir"
- export function location(ref: Location.Ref, input: { projectDirectory?: AbsolutePath; vcs?: Project.Vcs } = {}) {
- return {
- directory: ref.directory,
- workspaceID: ref.workspaceID,
- project: { id: Project.ID.global, directory: input.projectDirectory ?? ref.directory },
- vcs: input.vcs,
- } satisfies Location.Interface
- }
- export const tempLocationLayer = Layer.unwrap(
- Effect.acquireRelease(
- Effect.promise(() => tmpdir()),
- (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()),
- ).pipe(
- Effect.map((tmp) => {
- const ref = Location.Ref.make({ directory: AbsolutePath.make(tmp.path) })
- return Layer.succeed(Location.Service, Location.Service.of(location(ref)))
- }),
- ),
- )
|