import { AgentV2 } from "@opencode-ai/core/agent" import { Catalog } from "@opencode-ai/core/catalog" import { CommandV2 } from "@opencode-ai/core/command" import { Credential } from "@opencode-ai/core/credential" import { EventV2 } from "@opencode-ai/core/event" import { FileSystem } from "@opencode-ai/core/filesystem" import { FSUtil } from "@opencode-ai/core/fs-util" import { Global } from "@opencode-ai/core/global" import { Npm } from "@opencode-ai/core/npm" import { PluginV2 } from "@opencode-ai/core/plugin" import { Reference } from "@opencode-ai/core/reference" import { RepositoryCache } from "@opencode-ai/core/repository-cache" import { Ripgrep } from "@opencode-ai/core/ripgrep" import { SkillV2 } from "@opencode-ai/core/skill" import { SkillDiscovery } from "@opencode-ai/core/skill/discovery" import { Effect, Layer } from "effect" import { tempLocationLayer } from "../fixture/location" export const PluginTestLayer = Layer.mergeAll( AgentV2.locationLayer, CommandV2.locationLayer, Catalog.locationLayer, FileSystem.locationLayer, PluginV2.locationLayer, Reference.locationLayer, SkillV2.locationLayer, ).pipe( Layer.provideMerge( Layer.mergeAll( Credential.defaultLayer, EventV2.defaultLayer, FSUtil.defaultLayer, Global.defaultLayer, Layer.succeed( Npm.Service, Npm.Service.of({ add: () => Effect.succeed({ directory: "", entrypoint: undefined }), install: () => Effect.void, which: () => Effect.succeed(undefined), }), ), RepositoryCache.defaultLayer, SkillDiscovery.defaultLayer, Ripgrep.defaultLayer, tempLocationLayer, ), ), )