diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 3532d9e5a..64847ccb1 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -314,26 +314,31 @@ export function Session() { const command = useCommandDialog() command.register(() => [ { - title: "Share session", + title: session()?.share?.url ? "Copy share link" : "Share session", value: "session.share", suggested: route.type === "session", keybind: "session_share", category: "Session", - enabled: sync.data.config.share !== "disabled" && !session()?.share?.url, + enabled: sync.data.config.share !== "disabled", slash: { name: "share", }, onSelect: async (dialog) => { + const copy = (url: string) => + Clipboard.copy(url) + .then(() => toast.show({ message: "Share URL copied to clipboard!", variant: "success" })) + .catch(() => toast.show({ message: "Failed to copy URL to clipboard", variant: "error" })) + const url = session()?.share?.url + if (url) { + await copy(url) + dialog.clear() + return + } await sdk.client.session .share({ sessionID: route.sessionID, }) - .then((res) => - Clipboard.copy(res.data!.share!.url).catch(() => - toast.show({ message: "Failed to copy URL to clipboard", variant: "error" }), - ), - ) - .then(() => toast.show({ message: "Share URL copied to clipboard!", variant: "success" })) + .then((res) => copy(res.data!.share!.url)) .catch(() => toast.show({ message: "Failed to share session", variant: "error" })) dialog.clear() },