leaderPermissionBridge.ts
1 /** 2 * Leader Permission Bridge 3 * 4 * Module-level bridge that allows the REPL to register its setToolUseConfirmQueue 5 * and setToolPermissionContext functions for in-process teammates to use. 6 * 7 * When an in-process teammate requests permissions, it uses the standard 8 * ToolUseConfirm dialog rather than the worker permission badge. This bridge 9 * makes the REPL's queue setter and permission context setter accessible 10 * from non-React code in the in-process runner. 11 */ 12 13 import type { ToolUseConfirm } from '../../components/permissions/PermissionRequest.js' 14 import type { ToolPermissionContext } from '../../Tool.js' 15 16 export type SetToolUseConfirmQueueFn = ( 17 updater: (prev: ToolUseConfirm[]) => ToolUseConfirm[], 18 ) => void 19 20 export type SetToolPermissionContextFn = ( 21 context: ToolPermissionContext, 22 options?: { preserveMode?: boolean }, 23 ) => void 24 25 let registeredSetter: SetToolUseConfirmQueueFn | null = null 26 let registeredPermissionContextSetter: SetToolPermissionContextFn | null = null 27 28 export function registerLeaderToolUseConfirmQueue( 29 setter: SetToolUseConfirmQueueFn, 30 ): void { 31 registeredSetter = setter 32 } 33 34 export function getLeaderToolUseConfirmQueue(): SetToolUseConfirmQueueFn | null { 35 return registeredSetter 36 } 37 38 export function unregisterLeaderToolUseConfirmQueue(): void { 39 registeredSetter = null 40 } 41 42 export function registerLeaderSetToolPermissionContext( 43 setter: SetToolPermissionContextFn, 44 ): void { 45 registeredPermissionContextSetter = setter 46 } 47 48 export function getLeaderSetToolPermissionContext(): SetToolPermissionContextFn | null { 49 return registeredPermissionContextSetter 50 } 51 52 export function unregisterLeaderSetToolPermissionContext(): void { 53 registeredPermissionContextSetter = null 54 }