50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
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),
|
|
),
|
|
})
|