Fix Jupyter workspace session handoff

This commit is contained in:
wuyang6
2026-05-13 13:52:37 +08:00
parent 28d73afaa0
commit e5095268d8
3 changed files with 62 additions and 2 deletions
+43
View File
@@ -1,6 +1,7 @@
"use client";
const ACTIVE_SESSION_ID_KEY = "claw.activeSessionId";
const PENDING_WORKSPACE_SESSION_ID_KEY = "claw.pendingWorkspaceSessionId";
export const ACTIVE_SESSION_CHANGED_EVENT = "claw-active-session-changed";
export function readActiveSessionId() {
@@ -20,6 +21,10 @@ export function writeActiveSessionId(sessionId: string | null | undefined) {
}
window.sessionStorage.setItem(ACTIVE_SESSION_ID_KEY, normalized);
window.localStorage.setItem(ACTIVE_SESSION_ID_KEY, normalized);
const pendingSessionId = readPendingWorkspaceSessionId();
if (pendingSessionId && pendingSessionId !== normalized) {
clearPendingWorkspaceSessionId();
}
window.dispatchEvent(
new CustomEvent(ACTIVE_SESSION_CHANGED_EVENT, {
detail: { sessionId: normalized },
@@ -31,6 +36,7 @@ export function clearActiveSessionId() {
if (typeof window === "undefined") return;
window.sessionStorage.removeItem(ACTIVE_SESSION_ID_KEY);
window.localStorage.removeItem(ACTIVE_SESSION_ID_KEY);
clearPendingWorkspaceSessionId();
window.dispatchEvent(
new CustomEvent(ACTIVE_SESSION_CHANGED_EVENT, {
detail: { sessionId: null },
@@ -38,6 +44,43 @@ export function clearActiveSessionId() {
);
}
export function writePendingWorkspaceSessionId(
sessionId: string | null | undefined,
) {
if (typeof window === "undefined") return;
const normalized = normalizeSessionId(sessionId);
if (!normalized) {
clearPendingWorkspaceSessionId();
return;
}
window.sessionStorage.setItem(PENDING_WORKSPACE_SESSION_ID_KEY, normalized);
window.localStorage.setItem(PENDING_WORKSPACE_SESSION_ID_KEY, normalized);
}
export function consumePendingWorkspaceSessionId() {
const sessionId = readPendingWorkspaceSessionId();
clearPendingWorkspaceSessionId();
return sessionId;
}
function readPendingWorkspaceSessionId() {
if (typeof window === "undefined") return null;
return (
normalizeSessionId(
window.sessionStorage.getItem(PENDING_WORKSPACE_SESSION_ID_KEY),
) ??
normalizeSessionId(
window.localStorage.getItem(PENDING_WORKSPACE_SESSION_ID_KEY),
)
);
}
function clearPendingWorkspaceSessionId() {
if (typeof window === "undefined") return;
window.sessionStorage.removeItem(PENDING_WORKSPACE_SESSION_ID_KEY);
window.localStorage.removeItem(PENDING_WORKSPACE_SESSION_ID_KEY);
}
function normalizeSessionId(value: unknown) {
if (typeof value !== "string") return null;
const trimmed = value.trim();