|
|
@@ -0,0 +1,26 @@
|
|
|
+import { OpenCode } from "@opencode-ai/client"
|
|
|
+import { Service } from "@opencode-ai/client/effect/service"
|
|
|
+import { Effect, Option } from "effect"
|
|
|
+import { EOL } from "node:os"
|
|
|
+import { Commands } from "../commands"
|
|
|
+import { Runtime } from "../../framework/runtime"
|
|
|
+import { ServerConnection } from "../../services/server-connection"
|
|
|
+
|
|
|
+export default Runtime.handler(
|
|
|
+ Commands.commands.models,
|
|
|
+ Effect.fn("cli.models")(function* (input) {
|
|
|
+ const server = yield* ServerConnection.resolve({
|
|
|
+ server: Option.getOrUndefined(input.server),
|
|
|
+ standalone: input.standalone,
|
|
|
+ })
|
|
|
+ const client = OpenCode.make({
|
|
|
+ baseUrl: server.endpoint.url,
|
|
|
+ headers: Service.headers(server.endpoint),
|
|
|
+ })
|
|
|
+ const response = yield* Effect.promise(() => client.model.list({ location: { directory: process.cwd() } }))
|
|
|
+ const models = response.data
|
|
|
+ .map((model) => `${model.providerID}/${model.id}`)
|
|
|
+ .toSorted((a, b) => a.localeCompare(b))
|
|
|
+ if (models.length > 0) process.stdout.write(models.join(EOL) + EOL)
|
|
|
+ }),
|
|
|
+)
|