@elizaos/plugin-screenshare 2.0.3-beta.5 → 2.0.3-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ScreenshareSpatialView.d.ts +61 -0
- package/dist/components/ScreenshareSpatialView.d.ts.map +1 -0
- package/dist/components/ScreenshareSpatialView.js +206 -0
- package/dist/components/ScreenshareSpatialView.js.map +1 -0
- package/dist/components/ScreenshareView.d.ts +13 -0
- package/dist/components/ScreenshareView.d.ts.map +1 -0
- package/dist/components/ScreenshareView.js +263 -0
- package/dist/components/ScreenshareView.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/register-terminal-view.d.ts +15 -0
- package/dist/register-terminal-view.d.ts.map +1 -0
- package/dist/register-terminal-view.js +27 -0
- package/dist/register-terminal-view.js.map +1 -0
- package/dist/routes.d.ts +8 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +639 -0
- package/dist/routes.js.map +1 -0
- package/dist/session-store.d.ts +44 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +200 -0
- package/dist/session-store.js.map +1 -0
- package/dist/ui/ScreenshareOperatorSurface.d.ts +5 -0
- package/dist/ui/ScreenshareOperatorSurface.d.ts.map +1 -0
- package/dist/ui/ScreenshareOperatorSurface.helpers.d.ts +40 -0
- package/dist/ui/ScreenshareOperatorSurface.helpers.d.ts.map +1 -0
- package/dist/ui/ScreenshareOperatorSurface.helpers.js +47 -0
- package/dist/ui/ScreenshareOperatorSurface.helpers.js.map +1 -0
- package/dist/ui/ScreenshareOperatorSurface.interact.d.ts +2 -0
- package/dist/ui/ScreenshareOperatorSurface.interact.d.ts.map +1 -0
- package/dist/ui/ScreenshareOperatorSurface.interact.js +100 -0
- package/dist/ui/ScreenshareOperatorSurface.interact.js.map +1 -0
- package/dist/ui/ScreenshareOperatorSurface.js +746 -0
- package/dist/ui/ScreenshareOperatorSurface.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +10 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/screenshare-view-bundle.d.ts +3 -0
- package/dist/ui/screenshare-view-bundle.d.ts.map +1 -0
- package/dist/ui/screenshare-view-bundle.js +7 -0
- package/dist/ui/screenshare-view-bundle.js.map +1 -0
- package/dist/views/bundle.js +507 -0
- package/dist/views/bundle.js.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","names":[],"sources":["../../src/ui/ScreenshareOperatorSurface.helpers.ts","../../src/ui/ScreenshareOperatorSurface.interact.ts","../../src/components/ScreenshareSpatialView.tsx","../../src/components/ScreenshareView.tsx"],"sourcesContent":["// Shared data contracts + fetch helpers for the Screenshare view, used by both\n// ScreenshareOperatorSurface.tsx (host + connect + TUI components) and the\n// `interact` capability handler (ScreenshareOperatorSurface.interact.ts). Kept\n// out of the .tsx so that file exports only React components and stays\n// Fast-Refresh-compatible in dev.\nimport { client } from \"@elizaos/ui\";\n\nexport interface Capability {\n available: boolean;\n tool: string;\n}\n\nexport interface CapabilitiesResponse {\n platform: string;\n capabilities: Record<string, Capability>;\n}\n\nexport interface PublicSession {\n id: string;\n label: string;\n status: \"active\" | \"stopped\";\n createdAt: string;\n updatedAt: string;\n stoppedAt: string | null;\n platform: string;\n frameCount: number;\n inputCount: number;\n lastFrameAt: string | null;\n lastInputAt: string | null;\n}\n\nexport interface StartSessionResponse {\n session: PublicSession;\n token: string;\n viewerUrl: string;\n}\n\nexport interface SessionsResponse {\n sessions: PublicSession[];\n}\n\nfunction apiUrl(path: string): string {\n const base = client.getBaseUrl();\n return base ? `${base}${path}` : path;\n}\n\nexport async function fetchJson<T>(\n path: string,\n init?: RequestInit,\n): Promise<T> {\n const token = client.getRestAuthToken();\n const response = await fetch(apiUrl(path), {\n ...init,\n headers: {\n ...(init?.body ? { \"Content-Type\": \"application/json\" } : {}),\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n ...init?.headers,\n },\n });\n const body = (await response.json().catch(() => null)) as unknown;\n if (!response.ok) {\n const message =\n body &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\"\n ? body.error\n : `Request failed (${response.status})`;\n throw new Error(message);\n }\n return body as T;\n}\n\nexport function buildViewerUrl(args: {\n baseUrl?: string;\n sessionId: string;\n token: string;\n}): string {\n const params = new URLSearchParams({\n sessionId: args.sessionId,\n token: args.token,\n });\n const base = args.baseUrl?.trim().replace(/\\/+$/, \"\") ?? \"\";\n if (base) {\n params.set(\"remoteBase\", base);\n return `${base}/api/apps/screenshare/viewer?${params.toString()}`;\n }\n return apiUrl(`/api/apps/screenshare/viewer?${params.toString()}`);\n}\n\nexport async function loadScreenshareTuiState(): Promise<{\n capabilities: CapabilitiesResponse;\n sessions: SessionsResponse;\n}> {\n const [capabilities, sessions] = await Promise.all([\n fetchJson<CapabilitiesResponse>(\"/api/apps/screenshare/capabilities\"),\n fetchJson<SessionsResponse>(\"/api/apps/screenshare/sessions\"),\n ]);\n return { capabilities, sessions };\n}\n","// View-bundle `interact` capability handler, split out of\n// ScreenshareOperatorSurface.tsx so that file exports only React components and\n// stays Fast-Refresh-compatible (Vite would full-reload a component file that\n// also exports a plain function). The view bundle re-exports `interact` via\n// ./screenshare-view-bundle.ts.\nimport {\n buildViewerUrl,\n fetchJson,\n loadScreenshareTuiState,\n type PublicSession,\n type StartSessionResponse,\n} from \"./ScreenshareOperatorSurface.helpers\";\n\nexport async function interact(\n capability: string,\n params?: Record<string, unknown>,\n): Promise<unknown> {\n if (capability === \"terminal-screenshare-state\") {\n return { viewType: \"tui\", ...(await loadScreenshareTuiState()) };\n }\n\n if (capability === \"terminal-screenshare-start\") {\n return {\n viewType: \"tui\",\n ...(await fetchJson<StartSessionResponse>(\n \"/api/apps/screenshare/session\",\n {\n method: \"POST\",\n body: JSON.stringify({\n label:\n typeof params?.label === \"string\" ? params.label : \"Terminal\",\n }),\n },\n )),\n };\n }\n\n if (capability === \"terminal-screenshare-session\") {\n const sessionId =\n typeof params?.sessionId === \"string\" ? params.sessionId.trim() : \"\";\n const token = typeof params?.token === \"string\" ? params.token.trim() : \"\";\n if (!sessionId) throw new Error(\"sessionId is required\");\n if (!token) throw new Error(\"token is required\");\n return {\n viewType: \"tui\",\n ...(await fetchJson<{ session: PublicSession }>(\n `/api/apps/screenshare/session/${encodeURIComponent(\n sessionId,\n )}?token=${encodeURIComponent(token)}`,\n )),\n };\n }\n\n if (capability === \"terminal-screenshare-stop\") {\n const sessionId =\n typeof params?.sessionId === \"string\" ? params.sessionId.trim() : \"\";\n const token = typeof params?.token === \"string\" ? params.token.trim() : \"\";\n if (!sessionId) throw new Error(\"sessionId is required\");\n if (!token) throw new Error(\"token is required\");\n return {\n viewType: \"tui\",\n ...(await fetchJson<{ session: PublicSession }>(\n `/api/apps/screenshare/session/${encodeURIComponent(sessionId)}/stop`,\n {\n method: \"POST\",\n body: JSON.stringify({ token }),\n headers: { \"X-Screenshare-Token\": token },\n },\n )),\n };\n }\n\n if (capability === \"terminal-screenshare-input\") {\n const sessionId =\n typeof params?.sessionId === \"string\" ? params.sessionId.trim() : \"\";\n const token = typeof params?.token === \"string\" ? params.token.trim() : \"\";\n if (!sessionId) throw new Error(\"sessionId is required\");\n if (!token) throw new Error(\"token is required\");\n return {\n viewType: \"tui\",\n ...(await fetchJson<Record<string, unknown>>(\n `/api/apps/screenshare/session/${encodeURIComponent(sessionId)}/input`,\n {\n method: \"POST\",\n body: JSON.stringify({\n token,\n type: typeof params?.type === \"string\" ? params.type : \"keypress\",\n keys: typeof params?.keys === \"string\" ? params.keys : undefined,\n text: typeof params?.text === \"string\" ? params.text : undefined,\n x: typeof params?.x === \"number\" ? params.x : undefined,\n y: typeof params?.y === \"number\" ? params.y : undefined,\n button:\n typeof params?.button === \"string\" ? params.button : undefined,\n deltaY:\n typeof params?.deltaY === \"number\" ? params.deltaY : undefined,\n }),\n headers: { \"X-Screenshare-Token\": token },\n },\n )),\n };\n }\n\n if (capability === \"terminal-screenshare-viewer-url\") {\n const sessionId =\n typeof params?.sessionId === \"string\" ? params.sessionId.trim() : \"\";\n const token = typeof params?.token === \"string\" ? params.token.trim() : \"\";\n if (!sessionId) throw new Error(\"sessionId is required\");\n if (!token) throw new Error(\"token is required\");\n return {\n viewType: \"tui\",\n viewerUrl: buildViewerUrl({\n baseUrl: typeof params?.baseUrl === \"string\" ? params.baseUrl : \"\",\n sessionId,\n token,\n }),\n };\n }\n\n throw new Error(`Unsupported capability \"${capability}\"`);\n}\n","/**\n * ScreenshareSpatialView - the screen-share operator surface authored once with\n * the spatial vocabulary, so it renders correctly wherever it is displayed:\n *\n * - GUI / XR - mounted in `<SpatialSurface>` (DOM; XR scales up).\n * - TUI - rendered to real terminal lines by the agent terminal, via\n * `registerSpatialTerminalView` (see `register-terminal-view.tsx`).\n *\n * It is purely presentational (a snapshot + an action callback in, primitives\n * out) and imports only the cross-modality primitives, so it is safe to render\n * in the Node agent process where the terminal lives (no DOM/browser import).\n *\n * The actual screen pixels are streamed in the external viewer page; this view\n * is the session manager + capability dashboard (status, platform, frame/input\n * counters, capabilities, connection details, and operator actions).\n */\n\nimport {\n Button,\n Card,\n Divider,\n Field,\n HStack,\n List,\n type SpatialTone,\n Text,\n VStack,\n} from \"@elizaos/ui/spatial\";\n\nexport type ScreenshareSessionStatus = \"active\" | \"stopped\" | \"idle\";\n\nexport interface ScreenshareSessionSnapshot {\n id: string;\n label: string;\n status: ScreenshareSessionStatus;\n platform: string;\n frameCount: number;\n inputCount: number;\n /** Pre-formatted clock/relative time, or null when never. */\n lastFrameAt: string | null;\n lastInputAt: string | null;\n}\n\nexport interface ScreenshareCapabilitySnapshot {\n name: string;\n available: boolean;\n /** Backing tool/primitive name (e.g. the computeruse provider). */\n tool: string;\n}\n\nexport interface ScreenshareConnectionSnapshot {\n /** Session token (already redacted to a short prefix by the host). */\n token: string;\n sessionId: string;\n baseUrl: string;\n}\n\nexport interface ScreenshareSnapshot {\n platform: string;\n session: ScreenshareSessionSnapshot | null;\n capabilities: ScreenshareCapabilitySnapshot[];\n host: ScreenshareConnectionSnapshot | null;\n remote: ScreenshareConnectionSnapshot | null;\n loading?: boolean;\n busy?: string | null;\n error?: string | null;\n}\n\nfunction statusTone(status: ScreenshareSessionStatus): SpatialTone {\n switch (status) {\n case \"active\":\n return \"success\";\n case \"stopped\":\n return \"danger\";\n default:\n return \"muted\";\n }\n}\n\nfunction capabilityMark(available: boolean): string {\n return available ? \"ok\" : \"off\";\n}\n\nexport interface ScreenshareSpatialViewProps {\n snapshot: ScreenshareSnapshot;\n /**\n * Dispatch by action id: `start`, `stop`, `rotate`, `copy`, `open-viewer`,\n * `connect`, `refresh`, plus the editable remote-connection fields\n * `remote-base:<value>`, `remote-session:<value>`, `remote-token:<value>`.\n */\n onAction?: (action: string) => void;\n}\n\nexport function ScreenshareSpatialView({\n snapshot,\n onAction,\n}: ScreenshareSpatialViewProps) {\n const dispatch = (action: string) => () => onAction?.(action);\n const session = snapshot.session;\n const isActive = session?.status === \"active\";\n const liveCaps = snapshot.capabilities.filter((cap) => cap.available).length;\n // Connect is reachable once the draft has both a session id and a token; the\n // base URL is optional (defaults to this host).\n const remoteReady = Boolean(\n snapshot.remote?.sessionId.trim() && snapshot.remote?.token.trim(),\n );\n\n return (\n <Card gap={1} padding={1}>\n <HStack gap={1} align=\"center\">\n <Text\n style=\"caption\"\n tone={isActive ? \"success\" : statusTone(session?.status ?? \"idle\")}\n grow={1}\n >\n {snapshot.loading ? \"loading\" : (session?.status ?? \"idle\")}\n </Text>\n <Text style=\"caption\" tone=\"muted\">\n {snapshot.platform || \"desktop\"}\n </Text>\n </HStack>\n\n {snapshot.error ? (\n <Text tone=\"danger\" style=\"caption\">\n {snapshot.error}\n </Text>\n ) : null}\n\n <Divider label=\"session\" />\n {session ? (\n <VStack gap={0}>\n <HStack gap={1} align=\"center\">\n <Text tone={statusTone(session.status)}>\n {session.status === \"active\" ? \">\" : \".\"}\n </Text>\n <Text bold wrap={false} grow={1}>\n {session.label || session.id}\n </Text>\n <Text style=\"caption\" tone=\"muted\">\n {session.platform}\n </Text>\n </HStack>\n <HStack gap={1}>\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n frames {session.frameCount}\n </Text>\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n inputs {session.inputCount}\n </Text>\n </HStack>\n <HStack gap={1}>\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n last frame {session.lastFrameAt ?? \"never\"}\n </Text>\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n last input {session.lastInputAt ?? \"never\"}\n </Text>\n </HStack>\n </VStack>\n ) : (\n <Text tone=\"muted\" align=\"center\" style=\"caption\">\n Idle\n </Text>\n )}\n\n <HStack gap={1} wrap>\n <Button\n grow={1}\n agent=\"start\"\n disabled={snapshot.busy === \"start\"}\n onPress={dispatch(isActive ? \"rotate\" : \"start\")}\n >\n {isActive ? \"Rotate\" : \"Start\"}\n </Button>\n <Button\n variant=\"outline\"\n tone=\"default\"\n grow={1}\n agent=\"open-viewer\"\n disabled={!snapshot.host}\n onPress={dispatch(\"open-viewer\")}\n >\n Open\n </Button>\n <Button\n variant=\"outline\"\n tone=\"default\"\n agent=\"copy\"\n disabled={!snapshot.host}\n onPress={dispatch(\"copy\")}\n >\n Copy\n </Button>\n <Button\n variant=\"ghost\"\n tone=\"danger\"\n agent=\"stop\"\n disabled={!isActive}\n onPress={dispatch(\"stop\")}\n >\n Stop\n </Button>\n </HStack>\n\n <Divider label=\"capabilities\" />\n <Text style=\"caption\" tone=\"muted\">\n {liveCaps} live / {snapshot.capabilities.length}\n </Text>\n {snapshot.capabilities.length === 0 ? (\n <Text tone=\"muted\" align=\"center\" style=\"caption\">\n None\n </Text>\n ) : (\n <List gap={0}>\n {snapshot.capabilities.map((cap) => (\n <HStack\n key={cap.name}\n gap={1}\n align=\"center\"\n agent={`cap-${cap.name}`}\n >\n <Text tone={cap.available ? \"success\" : \"danger\"}>\n {capabilityMark(cap.available)}\n </Text>\n <Text bold wrap={false} grow={1}>\n {cap.name}\n </Text>\n <Text style=\"caption\" tone=\"muted\" wrap={false}>\n {cap.tool}\n </Text>\n </HStack>\n ))}\n </List>\n )}\n\n <Divider label=\"connect\" />\n <Field\n label=\"Remote server URL\"\n value={snapshot.remote?.baseUrl ?? \"\"}\n placeholder=\"Server URL\"\n agent=\"input-remote-base\"\n onChange={(value) => onAction?.(`remote-base:${value}`)}\n />\n <Field\n label=\"Remote session id\"\n value={snapshot.remote?.sessionId ?? \"\"}\n placeholder=\"Session\"\n agent=\"input-remote-session\"\n onChange={(value) => onAction?.(`remote-session:${value}`)}\n />\n <Field\n label=\"Remote session token\"\n value={snapshot.remote?.token ?? \"\"}\n placeholder=\"Token\"\n kind=\"password\"\n agent=\"input-remote-token\"\n onChange={(value) => onAction?.(`remote-token:${value}`)}\n />\n <HStack gap={1}>\n <Button\n grow={1}\n variant={remoteReady ? \"solid\" : \"outline\"}\n tone={remoteReady ? \"primary\" : \"default\"}\n agent=\"connect\"\n disabled={!remoteReady}\n onPress={dispatch(\"connect\")}\n >\n Connect\n </Button>\n <Button\n variant=\"outline\"\n tone=\"default\"\n agent=\"refresh\"\n disabled={snapshot.loading}\n onPress={dispatch(\"refresh\")}\n >\n Refresh\n </Button>\n </HStack>\n </Card>\n );\n}\n","/**\n * ScreenshareView — the single GUI/XR data wrapper for the Screen Share surface.\n *\n * It owns the live operator data (capability fetch + poll, launched-session\n * load, host start/stop/rotate, copy/open-viewer, remote connect, refresh) and\n * renders the one presentational {@link ScreenshareSpatialView} inside a\n * {@link SpatialSurface}. Omitting the `modality` prop lets `SpatialSurface`\n * auto-detect GUI vs XR via `window.__elizaXRContext`, so the SAME component\n * serves both surfaces. The TUI surface renders the same `ScreenshareSpatialView`\n * through the terminal registry (see `register-terminal-view.tsx`).\n */\n\nimport {\n client,\n selectLatestRunForApp,\n useAppSelector,\n} from \"@elizaos/ui\";\nimport { SpatialSurface } from \"@elizaos/ui/spatial\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n buildViewerUrl,\n type CapabilitiesResponse,\n fetchJson,\n type PublicSession,\n type StartSessionResponse,\n} from \"../ui/ScreenshareOperatorSurface.helpers.ts\";\nimport {\n type ScreenshareCapabilitySnapshot,\n type ScreenshareSnapshot,\n ScreenshareSpatialView,\n} from \"./ScreenshareSpatialView.tsx\";\n\nconst APP_NAME = \"@elizaos/plugin-screenshare\";\n\n/** Short clock time, or null when the underlying timestamp is absent. */\nfunction formatTime(value: string | null): string | null {\n if (!value) return null;\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date.toLocaleTimeString();\n}\n\n/** Pull the launched session id + token out of a run's viewer URL. */\nfunction parseViewerSession(\n viewerUrl: string | null | undefined,\n): { sessionId: string; token: string } | null {\n if (!viewerUrl) return null;\n try {\n const url = new URL(viewerUrl, window.location.origin);\n const sessionId = url.searchParams.get(\"sessionId\")?.trim();\n const token = url.searchParams.get(\"token\")?.trim();\n return sessionId && token ? { sessionId, token } : null;\n } catch {\n return null;\n }\n}\n\nfunction toCapabilitySnapshots(\n capabilities: CapabilitiesResponse | null,\n): ScreenshareCapabilitySnapshot[] {\n if (!capabilities) return [];\n return Object.entries(capabilities.capabilities).map(([name, capability]) => ({\n name,\n available: capability.available,\n tool: capability.tool,\n }));\n}\n\nexport function ScreenshareView() {\n const appRuns = useAppSelector((s) => s.appRuns);\n const { run } = useMemo(\n () => selectLatestRunForApp(APP_NAME, appRuns),\n [appRuns],\n );\n const launchedSession = useMemo(\n () => parseViewerSession(run?.viewer?.url),\n [run?.viewer?.url],\n );\n\n const [capabilities, setCapabilities] = useState<CapabilitiesResponse | null>(\n null,\n );\n const [hostSession, setHostSession] = useState<PublicSession | null>(null);\n const [hostToken, setHostToken] = useState<string>(\n launchedSession?.token ?? \"\",\n );\n const [remoteBase, setRemoteBase] = useState(\"\");\n const [remoteSessionId, setRemoteSessionId] = useState(\"\");\n const [remoteToken, setRemoteToken] = useState(\"\");\n const [busy, setBusy] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const loadCapabilities = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const next = await fetchJson<CapabilitiesResponse>(\n \"/api/apps/screenshare/capabilities\",\n );\n setCapabilities(next);\n } catch (caught) {\n setError(\n caught instanceof Error\n ? caught.message\n : \"Failed to load capabilities.\",\n );\n } finally {\n setLoading(false);\n }\n }, []);\n\n // Load capabilities on mount, then keep them fresh with a quiet poll.\n const autoLoadedRef = useRef(false);\n useEffect(() => {\n if (!autoLoadedRef.current) {\n autoLoadedRef.current = true;\n void loadCapabilities();\n }\n const interval = setInterval(() => {\n void loadCapabilities();\n }, 20_000);\n return () => clearInterval(interval);\n }, [loadCapabilities]);\n\n // When launched with a viewer URL, hydrate the host session it points at.\n useEffect(() => {\n if (!launchedSession) return;\n setHostToken(launchedSession.token);\n void fetchJson<{ session: PublicSession }>(\n `/api/apps/screenshare/session/${encodeURIComponent(\n launchedSession.sessionId,\n )}?token=${encodeURIComponent(launchedSession.token)}`,\n )\n .then((next) => setHostSession(next.session))\n .catch((caught) =>\n setError(\n caught instanceof Error\n ? caught.message\n : \"Failed to load screen share session.\",\n ),\n );\n }, [launchedSession]);\n\n const startHostSession = useCallback(async () => {\n setBusy(\"start\");\n setError(null);\n try {\n const response = await fetchJson<StartSessionResponse>(\n \"/api/apps/screenshare/session\",\n {\n method: \"POST\",\n body: JSON.stringify({ label: \"This machine\" }),\n },\n );\n setHostSession(response.session);\n setHostToken(response.token);\n } catch (caught) {\n setError(\n caught instanceof Error ? caught.message : \"Failed to start session.\",\n );\n } finally {\n setBusy(null);\n }\n }, []);\n\n const stopHostSession = useCallback(async () => {\n if (!hostSession || !hostToken) return;\n setBusy(\"stop\");\n setError(null);\n try {\n const response = await fetchJson<{ session: PublicSession }>(\n `/api/apps/screenshare/session/${encodeURIComponent(\n hostSession.id,\n )}/stop`,\n {\n method: \"POST\",\n body: JSON.stringify({ token: hostToken }),\n headers: { \"X-Screenshare-Token\": hostToken },\n },\n );\n setHostSession(response.session);\n } catch (caught) {\n setError(\n caught instanceof Error ? caught.message : \"Failed to stop session.\",\n );\n } finally {\n setBusy(null);\n }\n }, [hostSession, hostToken]);\n\n const copyHostDetails = useCallback(async () => {\n if (!hostSession || !hostToken) return;\n const viewerUrl = buildViewerUrl({\n sessionId: hostSession.id,\n token: hostToken,\n });\n try {\n await navigator.clipboard.writeText(\n JSON.stringify(\n {\n serverUrl: client.getBaseUrl() || window.location.origin,\n sessionId: hostSession.id,\n token: hostToken,\n viewerUrl,\n },\n null,\n 2,\n ),\n );\n } catch (caught) {\n setError(\n caught instanceof Error ? caught.message : \"Clipboard write failed.\",\n );\n }\n }, [hostSession, hostToken]);\n\n const hostViewerUrl =\n hostSession && hostToken\n ? buildViewerUrl({ sessionId: hostSession.id, token: hostToken })\n : null;\n const remoteViewerUrl =\n remoteSessionId.trim() && remoteToken.trim()\n ? buildViewerUrl({\n baseUrl: remoteBase,\n sessionId: remoteSessionId.trim(),\n token: remoteToken.trim(),\n })\n : null;\n\n const onAction = useCallback(\n (action: string) => {\n if (action.startsWith(\"remote-base:\")) {\n setRemoteBase(action.slice(\"remote-base:\".length));\n return;\n }\n if (action.startsWith(\"remote-session:\")) {\n setRemoteSessionId(action.slice(\"remote-session:\".length));\n return;\n }\n if (action.startsWith(\"remote-token:\")) {\n setRemoteToken(action.slice(\"remote-token:\".length));\n return;\n }\n switch (action) {\n case \"start\":\n case \"rotate\":\n void startHostSession();\n return;\n case \"stop\":\n void stopHostSession();\n return;\n case \"copy\":\n void copyHostDetails();\n return;\n case \"open-viewer\":\n if (hostViewerUrl) {\n window.open(hostViewerUrl, \"_blank\", \"noopener,noreferrer\");\n }\n return;\n case \"connect\":\n if (remoteViewerUrl) {\n window.open(remoteViewerUrl, \"_blank\", \"noopener,noreferrer\");\n }\n return;\n case \"refresh\":\n void loadCapabilities();\n return;\n }\n },\n [\n copyHostDetails,\n hostViewerUrl,\n loadCapabilities,\n remoteViewerUrl,\n startHostSession,\n stopHostSession,\n ],\n );\n\n const snapshot: ScreenshareSnapshot = {\n platform: capabilities?.platform ?? hostSession?.platform ?? \"desktop\",\n session: hostSession\n ? {\n id: hostSession.id,\n label: hostSession.label,\n status: hostSession.status,\n platform: hostSession.platform,\n frameCount: hostSession.frameCount,\n inputCount: hostSession.inputCount,\n lastFrameAt: formatTime(hostSession.lastFrameAt),\n lastInputAt: formatTime(hostSession.lastInputAt),\n }\n : null,\n capabilities: toCapabilitySnapshots(capabilities),\n host: hostViewerUrl\n ? {\n token: hostToken,\n sessionId: hostSession?.id ?? \"\",\n baseUrl: client.getBaseUrl() || \"\",\n }\n : null,\n // Always reflect the live draft so the connect fields render what the user\n // typed; the spatial view derives Connect-enablement from session + token.\n remote:\n remoteBase || remoteSessionId || remoteToken\n ? {\n token: remoteToken,\n sessionId: remoteSessionId,\n baseUrl: remoteBase,\n }\n : null,\n loading,\n busy,\n error,\n };\n\n return (\n <SpatialSurface>\n <ScreenshareSpatialView snapshot={snapshot} onAction={onAction} />\n </SpatialSurface>\n );\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-screenshare",
|
|
3
|
-
"version": "2.0.3-beta.
|
|
3
|
+
"version": "2.0.3-beta.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Screen Share app: authenticated desktop screen streaming and remote mouse/keyboard control for local, Linux, macOS, and Windows runtimes.",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@elizaos/agent": "2.0.3-beta.
|
|
23
|
-
"@elizaos/app-core": "2.0.3-beta.
|
|
24
|
-
"@elizaos/core": "2.0.3-beta.
|
|
25
|
-
"@elizaos/plugin-computeruse": "2.0.3-beta.
|
|
26
|
-
"@elizaos/shared": "2.0.3-beta.
|
|
27
|
-
"@elizaos/ui": "2.0.3-beta.
|
|
22
|
+
"@elizaos/agent": "2.0.3-beta.7",
|
|
23
|
+
"@elizaos/app-core": "2.0.3-beta.7",
|
|
24
|
+
"@elizaos/core": "2.0.3-beta.7",
|
|
25
|
+
"@elizaos/plugin-computeruse": "2.0.3-beta.7",
|
|
26
|
+
"@elizaos/shared": "2.0.3-beta.7",
|
|
27
|
+
"@elizaos/ui": "2.0.3-beta.7",
|
|
28
28
|
"lucide-react": "^1.0.0"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
@@ -93,5 +93,5 @@
|
|
|
93
93
|
"vite": "^8.0.0",
|
|
94
94
|
"vitest": "^4.1.5"
|
|
95
95
|
},
|
|
96
|
-
"gitHead": "
|
|
96
|
+
"gitHead": "61094f10458d11055c75b3dd0bae374e3f66bac5"
|
|
97
97
|
}
|