diff options
| author | Dax Raad <[email protected]> | 2025-06-16 15:02:25 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-06-16 15:02:25 -0400 |
| commit | 2c9fd1e7760da4e1776d9cee7db93af1512c88a7 (patch) | |
| tree | b26a0422ccca227f84ddf182007792d922e48425 /packages | |
| parent | 63996c4189a6f66225a34c43328e616c5963e007 (diff) | |
| download | opencode-2c9fd1e7760da4e1776d9cee7db93af1512c88a7.tar.gz opencode-2c9fd1e7760da4e1776d9cee7db93af1512c88a7.zip | |
BREAKING CHANGE: the config structure has changed, custom providers have an `npm` field now to specify which npm package to load. see examples in README.md
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/config.schema.json | 3 | ||||
| -rw-r--r-- | packages/opencode/src/auth/anthropic.ts | 1 | ||||
| -rw-r--r-- | packages/opencode/src/bun/index.ts | 1 | ||||
| -rw-r--r-- | packages/opencode/src/cli/cmd/auth.ts | 12 | ||||
| -rw-r--r-- | packages/opencode/src/provider/models.ts | 1 | ||||
| -rw-r--r-- | packages/opencode/src/provider/provider.ts | 18 |
6 files changed, 22 insertions, 14 deletions
diff --git a/packages/opencode/config.schema.json b/packages/opencode/config.schema.json index 7eba147b1..c9d7e7f59 100644 --- a/packages/opencode/config.schema.json +++ b/packages/opencode/config.schema.json @@ -21,6 +21,9 @@ "id": { "type": "string" }, + "npm": { + "type": "string" + }, "models": { "type": "object", "additionalProperties": { diff --git a/packages/opencode/src/auth/anthropic.ts b/packages/opencode/src/auth/anthropic.ts index ef029b1d0..5ee48ff81 100644 --- a/packages/opencode/src/auth/anthropic.ts +++ b/packages/opencode/src/auth/anthropic.ts @@ -1,5 +1,4 @@ import { generatePKCE } from "@openauthjs/openauth/pkce" -import fs from "fs/promises" import { Auth } from "./index" export namespace AuthAnthropic { diff --git a/packages/opencode/src/bun/index.ts b/packages/opencode/src/bun/index.ts index a003f1c5d..3f8b6178a 100644 --- a/packages/opencode/src/bun/index.ts +++ b/packages/opencode/src/bun/index.ts @@ -43,6 +43,7 @@ export namespace BunProc { version: z.string(), }), ) + export async function install(pkg: string, version = "latest") { const mod = path.join(Global.Path.cache, "node_modules", pkg) const pkgjson = Bun.file(path.join(Global.Path.cache, "package.json")) diff --git a/packages/opencode/src/cli/cmd/auth.ts b/packages/opencode/src/cli/cmd/auth.ts index e8f45e7ab..37df11e4c 100644 --- a/packages/opencode/src/cli/cmd/auth.ts +++ b/packages/opencode/src/cli/cmd/auth.ts @@ -5,7 +5,7 @@ import * as prompts from "@clack/prompts" import open from "open" import { UI } from "../ui" import { ModelsDev } from "../../provider/models" -import { map, pipe, sort, sortBy, values } from "remeda" +import { map, pipe, sortBy, values } from "remeda" export const AuthCommand = cmd({ command: "auth", @@ -16,7 +16,7 @@ export const AuthCommand = cmd({ .command(AuthLogoutCommand) .command(AuthListCommand) .demandCommand(), - async handler(args) {}, + async handler() {}, }) export const AuthListCommand = cmd({ @@ -78,8 +78,10 @@ export const AuthLoginCommand = cmd({ if (provider === "other") { provider = await prompts.text({ - message: "Enter provider - must match @ai-sdk/<provider>", + message: + "Enter provider - must be package name from https://ai-sdk.dev/providers", }) + provider = provider.replace(/^@ai-sdk\//, "") if (prompts.isCancel(provider)) throw new UI.CancelledError() } @@ -115,7 +117,9 @@ export const AuthLoginCommand = cmd({ try { await open(url) } catch (e) { - prompts.log.error("Failed to open browser perhaps you are running without a display or X server, please open the following URL in your browser:") + prompts.log.error( + "Failed to open browser perhaps you are running without a display or X server, please open the following URL in your browser:", + ) } prompts.log.info(url) diff --git a/packages/opencode/src/provider/models.ts b/packages/opencode/src/provider/models.ts index 334b11914..a753d7ec1 100644 --- a/packages/opencode/src/provider/models.ts +++ b/packages/opencode/src/provider/models.ts @@ -36,6 +36,7 @@ export namespace ModelsDev { name: z.string(), env: z.array(z.string()), id: z.string(), + npm: z.string().optional(), models: z.record(Model), }) .openapi({ diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index e55a5795f..9a08c4e3f 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -108,6 +108,7 @@ export namespace Provider { const existing = database[providerID] const parsed: ModelsDev.Provider = { id: providerID, + npm: provider.npm ?? existing?.npm, name: provider.name ?? existing?.name ?? providerID, env: provider.env ?? existing?.env ?? [], models: existing?.models ?? {}, @@ -181,22 +182,22 @@ export namespace Provider { return state().then((state) => state.providers) } - async function getSDK(providerID: string) { + async function getSDK(provider: ModelsDev.Provider) { return (async () => { using _ = log.time("getSDK", { - providerID, + providerID: provider.id, }) const s = await state() - const existing = s.sdk.get(providerID) + const existing = s.sdk.get(provider.id) if (existing) return existing - const [pkg, version] = await ModelsDev.pkg(providerID) + const [pkg, version] = await ModelsDev.pkg(provider.npm ?? provider.id) const mod = await import(await BunProc.install(pkg, version)) const fn = mod[Object.keys(mod).find((key) => key.startsWith("create"))!] - const loaded = fn(s.providers[providerID]?.options) - s.sdk.set(providerID, loaded) + const loaded = fn(s.providers[provider.id]?.options) + s.sdk.set(provider.id, loaded) return loaded as SDK })().catch((e) => { - throw new InitError({ providerID: providerID }, { cause: e }) + throw new InitError({ providerID: provider.id }, { cause: e }) }) } @@ -214,8 +215,7 @@ export namespace Provider { if (!provider) throw new ModelNotFoundError({ providerID, modelID }) const info = provider.info.models[modelID] if (!info) throw new ModelNotFoundError({ providerID, modelID }) - - const sdk = await getSDK(providerID) + const sdk = await getSDK(provider.info) try { const language = |
