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 dac9fd9a..d089826d 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -62,7 +62,8 @@ import { DialogTimeline } from "./dialog-timeline" import { Sidebar } from "./sidebar" import { LANGUAGE_EXTENSIONS } from "@/lsp/language" import parsers from "../../../../../../parsers-config.ts" -import { Toast } from "../../ui/toast" +import { Clipboard } from "../../util/clipboard" +import { Toast, useToast } from "../../ui/toast" import { DialogSessionRename } from "../../component/dialog-session-rename" addDefaultParsers(parsers.parsers) @@ -100,6 +101,8 @@ export function Session() { createEffect(() => sync.session.sync(route.sessionID)) + const toast = useToast() + const sdk = useSDK() let scroll: ScrollBoxRenderable @@ -196,12 +199,21 @@ export function Session() { keybind: "session_share", disabled: !!session()?.share?.url, category: "Session", - onSelect: (dialog) => { - sdk.client.session.share({ + onSelect: async (dialog) => { + await sdk.client.session.share({ path: { id: 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" }) + ) + .catch(() => toast.show({ message: "Failed to share session", variant: "error" })) dialog.clear() }, },