diff options
| author | Akinfolami Akin-Alamu <[email protected]> | 2026-01-06 09:54:49 -0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-01-06 11:54:49 -0600 |
| commit | aa612b27d408f9b661dcbc152a9d3d935e29d084 (patch) | |
| tree | fb93384aa897aacdad6bbd0f4c9d6de4e0f116ac | |
| parent | a35c278424a5d950fb5e13c61fcb3f550b6b0f57 (diff) | |
| download | opencode-aa612b27d408f9b661dcbc152a9d3d935e29d084.tar.gz opencode-aa612b27d408f9b661dcbc152a9d3d935e29d084.zip | |
feat(tui): add 'c' shortcut to copy device code in OAuth flow (#7020)
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx index ce2d70f56..72b12d99b 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx @@ -10,6 +10,9 @@ import { useTheme } from "../context/theme" import { TextAttributes } from "@opentui/core" import type { ProviderAuthAuthorization } from "@opencode-ai/sdk/v2" import { DialogModel } from "./dialog-model" +import { useKeyboard } from "@opentui/solid" +import { Clipboard } from "@tui/util/clipboard" +import { useToast } from "../ui/toast" const PROVIDER_PRIORITY: Record<string, number> = { opencode: 0, @@ -104,6 +107,17 @@ function AutoMethod(props: AutoMethodProps) { const sdk = useSDK() const dialog = useDialog() const sync = useSync() + const toast = useToast() + + useKeyboard((evt) => { + if (evt.name === "c" && !evt.ctrl && !evt.meta) { + const code = + props.authorization.instructions.match(/[A-Z0-9]{4}-[A-Z0-9]{4}/)?.[0] ?? props.authorization.instructions + Clipboard.copy(code) + .then(() => toast.show({ message: "Copied to clipboard", variant: "info" })) + .catch(toast.error) + } + }) onMount(async () => { const result = await sdk.client.provider.oauth.callback({ @@ -132,6 +146,9 @@ function AutoMethod(props: AutoMethodProps) { <text fg={theme.textMuted}>{props.authorization.instructions}</text> </box> <text fg={theme.textMuted}>Waiting for authorization...</text> + <text fg={theme.text}> + c <span style={{ fg: theme.textMuted }}>copy</span> + </text> </box> ) } |
