import { updateSessionBridgeId } from '../utils/concurrentSessions.js' import type { ReplBridgeHandle } from './replBridge.js' import { toCompatSessionId } from './sessionIdCompat.js' /** * Global pointer to the active REPL bridge handle, so callers outside * useReplBridge's React tree (tools, slash commands) can invoke handle methods * like subscribePR. Same one-bridge-per-process justification as bridgeDebug.ts * — the handle's closure captures the sessionId and getAccessToken that created * the session, and re-deriving those independently (BriefTool/upload.ts pattern) * risks staging/prod token divergence. * * Set from useReplBridge.tsx when init completes; cleared on teardown. */ let handle: ReplBridgeHandle | null = null export function setReplBridgeHandle(h: ReplBridgeHandle | null): void { handle = h // Publish (or clear) our bridge session ID in the session record so other // local peers can dedup us out of their bridge list — local is preferred. void updateSessionBridgeId(getSelfBridgeCompatId() ?? null).catch(() => {}) } export function getReplBridgeHandle(): ReplBridgeHandle | null { return handle } /** * Our own bridge session ID in the session_* compat format the API returns * in /v1/sessions responses — or undefined if bridge isn't connected. */ export function getSelfBridgeCompatId(): string | undefined { const h = getReplBridgeHandle() return h ? toCompatSessionId(h.bridgeSessionId) : undefined }