summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-06-13 00:33:54 -0400
committerDax Raad <[email protected]>2025-06-13 00:33:54 -0400
commit9fb47bc855c5c30ab7602a34f9c6de0f9a8f091c (patch)
tree0186ced771cae4f15be22cb76f6a82c037fef601
parent73e9fb53d525607974758d65b5e460a5dd9d64e2 (diff)
downloadopencode-9fb47bc855c5c30ab7602a34f9c6de0f9a8f091c.tar.gz
opencode-9fb47bc855c5c30ab7602a34f9c6de0f9a8f091c.zip
Enhance auth command with dynamic provider selection
- Add support for dynamically loading providers from ModelsDev - Prioritize anthropic as recommended provider - Add "other" provider option for manual entry - Include special handling for amazon-bedrock with AWS config guidance - Expand provider selection UI to show up to 8 providers 🤖 Generated with [OpenCode](https://opencode.ai) Co-Authored-By: OpenCode <[email protected]>
-rw-r--r--packages/opencode/src/cli/cmd/auth.ts52
1 files changed, 40 insertions, 12 deletions
diff --git a/packages/opencode/src/cli/cmd/auth.ts b/packages/opencode/src/cli/cmd/auth.ts
index 00cbbd4e8..cb0ad004a 100644
--- a/packages/opencode/src/cli/cmd/auth.ts
+++ b/packages/opencode/src/cli/cmd/auth.ts
@@ -5,6 +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"
export const AuthCommand = cmd({
command: "auth",
@@ -43,26 +44,53 @@ export const AuthLoginCommand = cmd({
async handler() {
UI.empty()
prompts.intro("Add credential")
- const provider = await prompts.select({
+ const providers = await ModelsDev.get()
+ const priority: Record<string, number> = {
+ anthropic: 0,
+ openai: 1,
+ google: 2,
+ }
+ let provider = await prompts.select({
message: "Select provider",
- maxItems: 2,
+ maxItems: 8,
options: [
+ ...pipe(
+ providers,
+ values(),
+ sortBy(
+ (x) => priority[x.id] ?? 99,
+ (x) => x.name ?? x.id,
+ ),
+ map((x) => ({
+ label: x.name,
+ value: x.id,
+ hint: priority[x.id] === 0 ? "recommended" : undefined,
+ })),
+ ),
{
- label: "Anthropic",
- value: "anthropic",
- },
- {
- label: "OpenAI",
- value: "openai",
- },
- {
- label: "Google",
- value: "google",
+ value: "other",
+ label: "Other",
},
],
})
+
if (prompts.isCancel(provider)) throw new UI.CancelledError()
+ if (provider === "other") {
+ provider = await prompts.text({
+ message: "Enter provider - must match @ai-sdk/<provider>",
+ })
+ if (prompts.isCancel(provider)) throw new UI.CancelledError()
+ }
+
+ if (provider === "amazon-bedrock") {
+ prompts.log.info(
+ "Amazon bedrock can be configured with standard AWS environment variables like AWS_PROFILE or AWS_ACCESS_KEY_ID",
+ )
+ prompts.outro("Done")
+ return
+ }
+
if (provider === "anthropic") {
const method = await prompts.select({
message: "Login method",