import { EOL } from "os" import { Effect, Option } from "effect" import { Catalog } from "@opencode-ai/core/catalog" import { LocationServiceMap } from "@opencode-ai/core/location-layer" import { Location } from "@opencode-ai/core/location" import { PluginBoot } from "@opencode-ai/core/plugin/boot" import { AbsolutePath } from "@opencode-ai/core/schema" import { effectCmd } from "../../effect-cmd" export const V2Command = effectCmd({ command: "v2", describe: "debug v2 catalog and built-in plugins", instance: false, handler: () => Effect.gen(function* () { yield* PluginBoot.Service.use((service) => service.wait()) const catalog = yield* Catalog.Service const providers = (yield* catalog.provider.available()).sort((a, b) => a.id.localeCompare(b.id)) const all = (yield* catalog.provider.all()).sort((a, b) => a.id.localeCompare(b.id)) const result = { providers, default: catalog.model .default() .pipe(Effect.map(Option.map((item) => item.id)), Effect.map(Option.getOrUndefined)), small: Object.fromEntries( yield* Effect.all( all.map((provider) => Effect.map( catalog.model.small(provider.id), (model) => [provider.id, Option.getOrUndefined(Option.map(model, (item) => item.id))] as const, ), ), { concurrency: "unbounded" }, ), ), } process.stdout.write(JSON.stringify(result, null, 2) + EOL) }).pipe( Effect.withSpan("Cli.debug.v2"), Effect.provide( LocationServiceMap.get( Location.Ref.make({ directory: AbsolutePath.make(process.cwd()), }), ), ), Effect.provide(LocationServiceMap.layer), ), })