| 123456789101112131415161718192021222324252627282930313233343536 |
- 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
- }
|