diff --git a/packages/opencode/src/cli/cmd/providers.ts b/packages/opencode/src/cli/cmd/providers.ts index 639d868cd8dd..620940b383b4 100644 --- a/packages/opencode/src/cli/cmd/providers.ts +++ b/packages/opencode/src/cli/cmd/providers.ts @@ -505,11 +505,16 @@ export const ProvidersLoginCommand = effectCmd({ }) export const ProvidersLogoutCommand = effectCmd({ - command: "logout", + command: "logout [provider]", describe: "log out from a configured provider", + builder: (yargs) => + yargs.positional("provider", { + describe: "provider id or name to log out from", + type: "string", + }), // Removes a global auth credential; no project instance needed. instance: false, - handler: Effect.fn("Cli.providers.logout")(function* (_args) { + handler: Effect.fn("Cli.providers.logout")(function* (args) { const authSvc = yield* Auth.Service const modelsDev = yield* ModelsDev.Service @@ -521,14 +526,25 @@ export const ProvidersLogoutCommand = effectCmd({ return } const database = yield* modelsDev.get() - const selected = yield* Prompt.select({ - message: "Select provider", - options: credentials.map(([key, value]) => ({ - label: (database[key]?.name || key) + UI.Style.TEXT_DIM + " (" + value.type + ")", - value: key, - })), - }) - yield* Effect.orDie(authSvc.remove(yield* promptValue(selected))) + const options = credentials.map(([key, value]) => ({ + label: (database[key]?.name || key) + UI.Style.TEXT_DIM + " (" + value.type + ")", + value: key, + })) + const provider = args.provider + ? options.find( + (option) => + option.value === args.provider || + database[option.value]?.name?.toLowerCase() === args.provider?.toLowerCase(), + )?.value + : yield* promptValue( + yield* Prompt.autocomplete({ + message: "Select provider", + maxItems: 8, + options, + }), + ) + if (!provider) return yield* fail(`Unknown configured provider "${args.provider}"`) + yield* Effect.orDie(authSvc.remove(provider)) yield* Prompt.outro("Logout successful") }), }) diff --git a/packages/opencode/test/cli/help/__snapshots__/help-snapshots.test.ts.snap b/packages/opencode/test/cli/help/__snapshots__/help-snapshots.test.ts.snap index 83456b98b7df..a8e12d7cdef5 100644 --- a/packages/opencode/test/cli/help/__snapshots__/help-snapshots.test.ts.snap +++ b/packages/opencode/test/cli/help/__snapshots__/help-snapshots.test.ts.snap @@ -149,9 +149,9 @@ exports[`opencode CLI help-text snapshots every documented command emits stable manage AI providers and credentials Commands: - opencode providers list list providers and credentials [aliases: ls] - opencode providers login [url] log in to a provider - opencode providers logout log out from a configured provider + opencode providers list list providers and credentials [aliases: ls] + opencode providers login [url] log in to a provider + opencode providers logout [provider] log out from a configured provider Options: -h, --help show help [boolean] @@ -504,10 +504,13 @@ Options: `; exports[`opencode CLI help-text snapshots every documented command emits stable help text: opencode providers logout --help 1`] = ` -"opencode providers logout +"opencode providers logout [provider] log out from a configured provider +Positionals: + provider provider id or name to log out from [string] + Options: -h, --help show help [boolean] -v, --version show version number [boolean]