(function() { const SDK = window.__HERMES_PLUGIN_SDK__; const { useState, useEffect, useCallback } = React; function SSHXPage() { const [link, setLink] = useState(null); const [status, setStatus] = useState("idle"); // idle | loading | running | error const [error, setError] = useState(null); const startSSHX = useCallback(async () => { setStatus("loading"); setError(null); try { const res = await SDK.fetchJSON("/api/plugins/sshx-link/start"); if (res.link) { setLink(res.link); setStatus("running"); } else { setError(res.message || "No link returned"); setStatus("error"); } } catch (err) { setError(err.message || "Failed to start sshx"); setStatus("error"); } }, []); const stopSSHX = useCallback(async () => { try { await fetch("/api/plugins/sshx-link/stop", { method: "POST" }); setLink(null); setStatus("idle"); } catch (err) { setError(err.message); } }, []); const checkStatus = useCallback(async () => { try { const res = await SDK.fetchJSON("/api/plugins/sshx-link/status"); if (res.status === "running" && res.link) { setLink(res.link); setStatus("running"); } } catch (_) {} }, []); useEffect(() => { checkStatus(); }, [checkStatus]); return (
Start a shared terminal session. Others can join via the link.
{status === "running" && link ? ( ) : ( )} {error && (Error: {error}
)}