mirror of
https://github.com/sst/opencode.git
synced 2025-09-01 10:47:26 +00:00
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 <noreply@opencode.ai>
This commit is contained in:
parent
73e9fb53d5
commit
9fb47bc855
1 changed files with 40 additions and 12 deletions
|
@ -5,6 +5,7 @@ import * as prompts from "@clack/prompts"
|
||||||
import open from "open"
|
import open from "open"
|
||||||
import { UI } from "../ui"
|
import { UI } from "../ui"
|
||||||
import { ModelsDev } from "../../provider/models"
|
import { ModelsDev } from "../../provider/models"
|
||||||
|
import { map, pipe, sort, sortBy, values } from "remeda"
|
||||||
|
|
||||||
export const AuthCommand = cmd({
|
export const AuthCommand = cmd({
|
||||||
command: "auth",
|
command: "auth",
|
||||||
|
@ -43,26 +44,53 @@ export const AuthLoginCommand = cmd({
|
||||||
async handler() {
|
async handler() {
|
||||||
UI.empty()
|
UI.empty()
|
||||||
prompts.intro("Add credential")
|
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",
|
message: "Select provider",
|
||||||
maxItems: 2,
|
maxItems: 8,
|
||||||
options: [
|
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: "other",
|
||||||
value: "anthropic",
|
label: "Other",
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "OpenAI",
|
|
||||||
value: "openai",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Google",
|
|
||||||
value: "google",
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
if (prompts.isCancel(provider)) throw new UI.CancelledError()
|
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") {
|
if (provider === "anthropic") {
|
||||||
const method = await prompts.select({
|
const method = await prompts.select({
|
||||||
message: "Login method",
|
message: "Login method",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue