/ utils / swarm / leaderPermissionBridge.ts
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  }