@deepseek-ai/dsh-cordis-client-runner 0.2.1-alpha.2 → 0.2.1-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -1416,7 +1416,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1416
1416
  },
1417
1417
  {
1418
1418
  signature: "setFontSize(role: FontRole, px: number): void",
1419
- description: "Change one role's font size — the only font-size write entry. Accepted values are written through the settings scope and emit `theme/change`.",
1419
+ description: "Change one role's font size. Accepted values are written through the settings scope and emit `theme/change`.",
1420
1420
  parameters: [{
1421
1421
  name: "role",
1422
1422
  description: "font role."
@@ -1499,15 +1499,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1499
1499
  }]
1500
1500
  },
1501
1501
  {
1502
- signature: "openWorkspace(workspaceId: WorkspaceId, beforeOpen?: (sessionId: SessionId) => void): Promise<void>",
1502
+ signature: "openWorkspace( workspaceId: WorkspaceId, beforeOpen?: (sessionId: SessionId) => void, options?: Pick<StartSessionOptions, 'agentPreset'>, ): Promise<void>",
1503
1503
  description: "Connect a Workspace and open its Session unless a later navigation supersedes it.",
1504
- parameters: [{
1505
- name: "workspaceId",
1506
- description: "target Workspace."
1507
- }, {
1508
- name: "beforeOpen",
1509
- description: "optional synchronous preparation for the selected Session, skipped after supersession; a throw aborts the open and releases the retained reference."
1510
- }],
1504
+ parameters: [
1505
+ {
1506
+ name: "workspaceId",
1507
+ description: "target Workspace."
1508
+ },
1509
+ {
1510
+ name: "beforeOpen",
1511
+ description: "optional synchronous preparation for the selected Session, skipped after supersession; a throw aborts the open and releases the retained reference."
1512
+ },
1513
+ {
1514
+ name: "options",
1515
+ description: "choices for the Session the connection creates or reuses."
1516
+ }
1517
+ ],
1511
1518
  returns: "completion; a superseded request may create a Session but does not open it.",
1512
1519
  throws: ["on failure; a refused creation is also shown through the Workspace notice unless a later navigation or disposal superseded the request."]
1513
1520
  },
@@ -1531,11 +1538,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1531
1538
  returns: "the child SessionId after creation and inherited-title increment."
1532
1539
  },
1533
1540
  {
1534
- signature: "connectWorkspace(workspaceId: WorkspaceId): Promise<SessionId>",
1535
- description: "Resolve the reusable or newly created blank Session for a Workspace.",
1541
+ signature: "connectWorkspace(workspaceId: WorkspaceId, options?: Pick<StartSessionOptions, 'agentPreset'>): Promise<SessionId>",
1542
+ description: "Resolve the Session for a new conversation in a Workspace: the Host reuses the first listed blank member while it is reusable and otherwise creates one, under the requested preset or the Host default.",
1536
1543
  parameters: [{
1537
1544
  name: "workspaceId",
1538
1545
  description: "target Workspace."
1546
+ }, {
1547
+ name: "options",
1548
+ description: "choices for the created or reused Session."
1539
1549
  }],
1540
1550
  returns: "a Session already addressable through the Session Controller."
1541
1551
  },
@@ -1547,7 +1557,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1547
1557
  description: "explicit target; absent inherits the current or most recent Workspace."
1548
1558
  }, {
1549
1559
  name: "options",
1550
- description: "initial content; existing text or attachments are preserved unless clearPreviousDraft is true."
1560
+ description: "initial content and the reused blank's preset; existing text or attachments are preserved unless clearPreviousDraft is true."
1551
1561
  }]
1552
1562
  },
1553
1563
  {
@@ -1793,12 +1803,16 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1793
1803
  },
1794
1804
  {
1795
1805
  name: "ConnectionHandle",
1796
- declaration: "export interface ConnectionHandle {\n readonly isLoopback: boolean;\n readonly generation: ConnectionGenerationState;\n readonly state: ConnectionStateSource;\n readonly rpc: ClientConnectionRpc;\n reconnect(): void;\n registerGenerationSource(source: ConnectionGenerationSource): () => void;\n start(sinks: ConnectionSinks, config?: ConnectionRecoveryConfig): ConnectionLoop;\n}"
1806
+ declaration: "export interface ConnectionHandle {\n readonly interactions: ConnectionInteractions;\n readonly isLoopback: boolean;\n readonly generation: ConnectionGenerationState;\n readonly state: ConnectionStateSource;\n readonly rpc: ClientConnectionRpc;\n openWebSocket(path: string): ConnectionWebSocket;\n reconnect(): void;\n registerGenerationSource(source: ConnectionGenerationSource): () => void;\n start(sinks: ConnectionSinks, config?: ConnectionRecoveryConfig): ConnectionLoop;\n}"
1797
1807
  },
1798
1808
  {
1799
1809
  name: "ConnectionHostInfo",
1800
1810
  declaration: "export interface ConnectionHostInfo {\n readonly home: string;\n}"
1801
1811
  },
1812
+ {
1813
+ name: "ConnectionInteractions",
1814
+ declaration: "export type ConnectionInteractions = 'answer' | 'none';"
1815
+ },
1802
1816
  {
1803
1817
  name: "ConnectionLoop",
1804
1818
  declaration: "export interface ConnectionLoop {\n stop(): void;\n}"
@@ -1827,6 +1841,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1827
1841
  name: "ConnectionStateSource",
1828
1842
  declaration: "export interface ConnectionStateSource {\n getSnapshot(): ConnectionState | undefined;\n subscribe(listener: () => void): () => void;\n}"
1829
1843
  },
1844
+ {
1845
+ name: "ConnectionWebSocket",
1846
+ declaration: "export interface ConnectionWebSocket {\n readonly readyState: number;\n send(data: string): void;\n close(code?: number, reason?: string): void;\n addEventListener<Event extends keyof ConnectionWebSocketEventMap>(event: Event, listener: (event: ConnectionWebSocketEventMap[Event]) => void, options?: {\n readonly once?: boolean;\n }): void;\n removeEventListener<Event extends keyof ConnectionWebSocketEventMap>(event: Event, listener: (event: ConnectionWebSocketEventMap[Event]) => void): void;\n}"
1847
+ },
1848
+ {
1849
+ name: "ConnectionWebSocketEventMap",
1850
+ declaration: "export interface ConnectionWebSocketEventMap {\n readonly open: object;\n readonly error: object;\n readonly close: object;\n readonly message: {\n readonly data: unknown;\n };\n}"
1851
+ },
1830
1852
  {
1831
1853
  name: "DraftInitializationOptions",
1832
1854
  declaration: "export interface DraftInitializationOptions {\n readonly prompt?: string;\n readonly clearPreviousDraft?: boolean;\n}"
@@ -1897,7 +1919,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1897
1919
  },
1898
1920
  {
1899
1921
  name: "ISessions",
1900
- declaration: "export interface ISessions {\n readonly list: ObservableSnapshot<SessionListState>;\n retain(target: SessionTarget, options: SessionRetainOptions): SessionReference;\n using<T>(target: SessionTarget, options: SessionRetainOptions, operation: (reference: SessionReference) => T | Promise<T>): Promise<T>;\n retainInfo(id: SessionId): ObservableSnapshot<SessionRetainInfo>;\n readonly searchResultLimit: number;\n create(opts?: {\n workspaceId?: WorkspaceId;\n cwd?: string;\n sessionId?: SessionId;\n }): Promise<SessionId>;\n subagentAddress(id: SessionId): SubagentAddress | undefined;\n refreshProjections(sessionId: SessionId): Promise<void>;\n refresh(): Promise<void>;\n search(query: string, signal: AbortSignal): Promise<RemoteResult<{\n items: SessionSearchResultItem[];\n hasMore: boolean;\n }>>;\n fork(opts: {\n sessionId: SessionId;\n atSeq?: number;\n increaseTitle?: boolean;\n onCreated?: (childId: SessionId) => void;\n allowMigration?: boolean;\n }): Promise<SessionId>;\n scope(id: SessionId): AgentContext | undefined;\n scopeOf(ctx: Context): SessionId | undefined;\n sessionOf(ctx: Context): SessionFace | undefined;\n binding(id: SessionId): SessionBinding | undefined;\n}"
1922
+ declaration: "export interface ISessions {\n readonly list: ObservableSnapshot<SessionListState>;\n retain(target: SessionTarget, options: SessionRetainOptions): SessionReference;\n using<T>(target: SessionTarget, options: SessionRetainOptions, operation: (reference: SessionReference) => T | Promise<T>): Promise<T>;\n retainInfo(id: SessionId): ObservableSnapshot<SessionRetainInfo>;\n readonly searchResultLimit: number;\n create(opts?: {\n workspaceId?: WorkspaceId;\n cwd?: string;\n sessionId?: SessionId;\n agentPreset?: string;\n }): Promise<SessionId>;\n subagentAddress(id: SessionId): SubagentAddress | undefined;\n refreshProjections(sessionId: SessionId): Promise<void>;\n refresh(): Promise<void>;\n search(query: string, signal: AbortSignal): Promise<RemoteResult<{\n items: SessionSearchResultItem[];\n hasMore: boolean;\n }>>;\n fork(opts: {\n sessionId: SessionId;\n atSeq?: number;\n increaseTitle?: boolean;\n onCreated?: (childId: SessionId) => void;\n allowMigration?: boolean;\n }): Promise<SessionId>;\n scope(id: SessionId): AgentContext | undefined;\n scopeOf(ctx: Context): SessionId | undefined;\n sessionOf(ctx: Context): SessionFace | undefined;\n binding(id: SessionId): SessionBinding | undefined;\n}"
1901
1923
  },
1902
1924
  {
1903
1925
  name: "KeyedHooksSources",
@@ -1909,7 +1931,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1909
1931
  },
1910
1932
  {
1911
1933
  name: "KeyedStandardSource",
1912
- declaration: "export type KeyedStandardSource = (key: string) => HostObservable<unknown> | undefined;"
1934
+ declaration: "export type KeyedStandardSource = (key: string, member?: string) => HostObservable<unknown> | undefined;"
1913
1935
  },
1914
1936
  {
1915
1937
  name: "KeyPropsOf",
@@ -2205,7 +2227,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2205
2227
  },
2206
2228
  {
2207
2229
  name: "SlotEntryDef",
2208
- declaration: "export interface SlotEntryDef {\n kind: SlotKind;\n scope: SlotScope;\n owner?: object;\n keyProps?: Record<string, object>;\n hookContext?: unknown;\n inject?: object;\n}"
2230
+ declaration: "export interface SlotEntryDef {\n kind: SlotKind;\n scope: SlotScope;\n inline?: true;\n owner?: object;\n keyProps?: Record<string, object>;\n hookContext?: unknown;\n inject?: object;\n}"
2209
2231
  },
2210
2232
  {
2211
2233
  name: "SlotFactoryMap",
@@ -2241,7 +2263,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2241
2263
  },
2242
2264
  {
2243
2265
  name: "SlotSpec",
2244
- declaration: "export type SlotSpec<E extends SlotEntryDef> = {\n kind: E['kind'];\n scope: E['scope'];\n} & ('inject' extends keyof E ? E extends {\n inject: infer Injected extends object;\n} ? {\n inject: Injected;\n} : {\n inject?: object;\n} : {\n inject?: never;\n});"
2266
+ declaration: "export type SlotSpec<E extends SlotEntryDef> = {\n kind: E['kind'];\n scope: E['scope'];\n inline?: true;\n} & ('inject' extends keyof E ? E extends {\n inject: infer Injected extends object;\n} ? {\n inject: Injected;\n} : {\n inject?: object;\n} : {\n inject?: never;\n});"
2245
2267
  },
2246
2268
  {
2247
2269
  name: "SnapshotSelectorHook",
@@ -2249,7 +2271,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2249
2271
  },
2250
2272
  {
2251
2273
  name: "StartSessionOptions",
2252
- declaration: "export type StartSessionOptions = DraftInitializationOptions;"
2274
+ declaration: "export interface StartSessionOptions extends DraftInitializationOptions {\n readonly agentPreset?: string;\n}"
2253
2275
  },
2254
2276
  {
2255
2277
  name: "StoreDecl",
@@ -2420,13 +2442,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2420
2442
  ownerProps: ["/** Stable identity handed to an optional approval-detail renderer. */\nexport interface ApprovalDetailOwnerProps {\n /** Tool call correlated with the request. */\n callId: ToolCallId\n}"],
2421
2443
  ownerPropsReferences: [],
2422
2444
  standardProps: [
2445
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2423
2446
  "useResource: UseResource",
2424
2447
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2425
2448
  "usePanelInfo: UsePanelInfo",
2426
2449
  "useSessions: UseSessions",
2427
2450
  "useSessionStatus: UseSessionStatus",
2428
2451
  "useSessionRetainInfo: UseSessionRetainInfo",
2429
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2452
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2453
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2430
2454
  "useChat: UseChat",
2431
2455
  "useConversation: UseConversation",
2432
2456
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2434,6 +2458,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2434
2458
  "useSession: SessionSnapshotSelector",
2435
2459
  "sessionId: SessionId",
2436
2460
  "useProjection: UseProjection",
2461
+ "useAccess: (action: RemoteEndpoint) => boolean",
2437
2462
  "useTrajectory: UseTrajectory"
2438
2463
  ],
2439
2464
  keyDomain: "",
@@ -2474,13 +2499,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2474
2499
  ownerProps: ["/** Owner currency of finalized-assistant actions. */\nexport interface AssistantActionOwnerProps {\n messageId: MessageId\n}"],
2475
2500
  ownerPropsReferences: ["MessageId"],
2476
2501
  standardProps: [
2502
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2477
2503
  "useResource: UseResource",
2478
2504
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2479
2505
  "usePanelInfo: UsePanelInfo",
2480
2506
  "useSessions: UseSessions",
2481
2507
  "useSessionStatus: UseSessionStatus",
2482
2508
  "useSessionRetainInfo: UseSessionRetainInfo",
2483
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2509
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2510
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2484
2511
  "useChat: UseChat",
2485
2512
  "useConversation: UseConversation",
2486
2513
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2488,6 +2515,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2488
2515
  "useSession: SessionSnapshotSelector",
2489
2516
  "sessionId: SessionId",
2490
2517
  "useProjection: UseProjection",
2518
+ "useAccess: (action: RemoteEndpoint) => boolean",
2491
2519
  "useTrajectory: UseTrajectory"
2492
2520
  ],
2493
2521
  keyDomain: "",
@@ -2497,7 +2525,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2497
2525
  occupants: ["client-ui-message-feedback MessageFeedbackActions id 'feedback'"],
2498
2526
  replaceRisk: "none",
2499
2527
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.assistant-actions', () => ctx.slots.register(\n { name: 'conversation.chat.assistant-actions', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2500
- source: "packages/client/ui-chat/src/client/contract/slots.ts:414"
2528
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:441"
2501
2529
  },
2502
2530
  {
2503
2531
  key: "conversation.chat.commandview",
@@ -2518,13 +2546,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2518
2546
  "CompactionSummaryNode"
2519
2547
  ],
2520
2548
  standardProps: [
2549
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2521
2550
  "useResource: UseResource",
2522
2551
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2523
2552
  "usePanelInfo: UsePanelInfo",
2524
2553
  "useSessions: UseSessions",
2525
2554
  "useSessionStatus: UseSessionStatus",
2526
2555
  "useSessionRetainInfo: UseSessionRetainInfo",
2527
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2556
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2557
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2528
2558
  "useChat: UseChat",
2529
2559
  "useConversation: UseConversation",
2530
2560
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2532,6 +2562,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2532
2562
  "useSession: SessionSnapshotSelector",
2533
2563
  "sessionId: SessionId",
2534
2564
  "useProjection: UseProjection",
2565
+ "useAccess: (action: RemoteEndpoint) => boolean",
2535
2566
  "useTrajectory: UseTrajectory"
2536
2567
  ],
2537
2568
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -2541,7 +2572,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2541
2572
  occupants: [],
2542
2573
  replaceRisk: "none",
2543
2574
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.commandview', () => ctx.slots.register(\n { name: 'conversation.chat.commandview', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2544
- source: "packages/client/ui-chat/src/client/contract/slots.ts:396"
2575
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:423"
2545
2576
  },
2546
2577
  {
2547
2578
  key: "conversation.chat.flow",
@@ -2550,20 +2581,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2550
2581
  summary: "Ordered Chat rows and local echoes with viewport-bound visibility hooks.",
2551
2582
  doc: "Ordered Chat rows and local echoes with viewport-bound visibility hooks.",
2552
2583
  registerOptions: [],
2553
- ownerProps: ["/** Ordered rows and reconciled local echoes rendered inside one Chat viewport. */\nexport interface ChatFlowOwnerProps extends Pick<ChatNodeOwnerProps,\n 'cwd' | 'openSkill' | 'openFile' | 'inspectCall' | 'forkAt' | 'loadImage' | 'fileMentions'> {\n readonly entries: readonly RenderEntry[]\n readonly pendingInputs: readonly (PendingSubmission | InboxState['next-step'][number])[]\n readonly lastInputTurn: number | undefined\n readonly deferCollapse: boolean\n}"],
2584
+ ownerProps: ["/** Ordered rows and reconciled local echoes rendered inside one Chat viewport. */\nexport interface ChatFlowOwnerProps extends Pick<ChatNodeOwnerProps,\n 'cwd' | 'openFile' | 'inspectCall' | 'forkAt' | 'loadImage' | 'fileMentions'> {\n readonly entries: readonly RenderEntry[]\n readonly pendingInputs: readonly (PendingSubmission | InboxState['next-step'][number])[]\n readonly lastInputTurn: number | undefined\n readonly deferCollapse: boolean\n}"],
2554
2585
  ownerPropsReferences: [
2555
2586
  "ChatNodeOwnerProps",
2556
2587
  "PendingSubmission",
2557
2588
  "RenderEntry"
2558
2589
  ],
2559
2590
  standardProps: [
2591
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2560
2592
  "useResource: UseResource",
2561
2593
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2562
2594
  "usePanelInfo: UsePanelInfo",
2563
2595
  "useSessions: UseSessions",
2564
2596
  "useSessionStatus: UseSessionStatus",
2565
2597
  "useSessionRetainInfo: UseSessionRetainInfo",
2566
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2598
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2599
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2567
2600
  "useChat: UseChat",
2568
2601
  "useConversation: UseConversation",
2569
2602
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2571,6 +2604,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2571
2604
  "useSession: SessionSnapshotSelector",
2572
2605
  "sessionId: SessionId",
2573
2606
  "useProjection: UseProjection",
2607
+ "useAccess: (action: RemoteEndpoint) => boolean",
2574
2608
  "useTrajectory: UseTrajectory"
2575
2609
  ],
2576
2610
  keyDomain: "",
@@ -2580,7 +2614,49 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2580
2614
  occupants: ["client-ui-chat ChatFlow"],
2581
2615
  replaceRisk: "shadows-shipped-ui",
2582
2616
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.flow', () => ctx.slots.register(\n { name: 'conversation.chat.flow' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2583
- source: "packages/client/ui-chat/src/client/contract/slots.ts:365"
2617
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:390"
2618
+ },
2619
+ {
2620
+ key: "conversation.chat.message.images",
2621
+ kind: "single",
2622
+ scope: "session",
2623
+ summary: "Renderer for one consecutive group of durable message images.",
2624
+ doc: "Renderer for one consecutive group of durable message images. The owner\nsupplies image references, an authorized loader, and alignment. A\nregistration replaces the shipped gallery; without one, images are omitted.",
2625
+ registerOptions: [],
2626
+ ownerProps: ["/** Message image group handed to the optional attachment presentation plugin. */\nexport interface MessageImagesOwnerProps {\n /** Durable references or submission-echo previews in source order. */\n images: readonly MessageImageSource[]\n /** Session-authorized image URL loader for the durable arm. */\n loadImage: MessageImageLoader\n /** Horizontal placement inside the owning record. */\n align: 'start' | 'end'\n /** Force every image into the compact message-attachment tile size. */\n compact?: boolean\n /** Fixed, uncropped thumbnail for an attachment list row. */\n thumbnail?: boolean\n}"],
2627
+ ownerPropsReferences: [
2628
+ "Message",
2629
+ "MessageImageLoader",
2630
+ "MessageImageSource"
2631
+ ],
2632
+ standardProps: [
2633
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2634
+ "useResource: UseResource",
2635
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2636
+ "usePanelInfo: UsePanelInfo",
2637
+ "useSessions: UseSessions",
2638
+ "useSessionStatus: UseSessionStatus",
2639
+ "useSessionRetainInfo: UseSessionRetainInfo",
2640
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2641
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2642
+ "useChat: UseChat",
2643
+ "useConversation: UseConversation",
2644
+ "useInput: SnapshotSelectorHook<InputState>",
2645
+ "inputActions: InputActions",
2646
+ "useSession: SessionSnapshotSelector",
2647
+ "sessionId: SessionId",
2648
+ "useProjection: UseProjection",
2649
+ "useAccess: (action: RemoteEndpoint) => boolean",
2650
+ "useTrajectory: UseTrajectory"
2651
+ ],
2652
+ keyDomain: "",
2653
+ hookContext: "",
2654
+ slotInject: "",
2655
+ declaredBy: "an entry in 'conversation.chat.node' (client-ui-chat), so it exists while that entry is mounted",
2656
+ occupants: ["client-ui-attachment MessageImages"],
2657
+ replaceRisk: "shadows-shipped-ui",
2658
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.message.images', () => ctx.slots.register(\n { name: 'conversation.chat.message.images' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2659
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:415"
2584
2660
  },
2585
2661
  {
2586
2662
  key: "conversation.chat.node",
@@ -2594,23 +2670,24 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2594
2670
  type: "string",
2595
2671
  doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
2596
2672
  }],
2597
- ownerProps: ["/** Stable owner currency delivered to a keyed Chat renderer. */\nexport interface ChatNodeOwnerProps {\n /** Renderer-owned Node portion selected by the grouping Definition. */\n groupPart?: string\n cwd?: string | undefined\n /** Open the current source file of a skill referenced by a sent message. */\n openSkill: (name: string) => void\n openFile: (path: string, options?: OpenFileOptions) => void\n inspectCall: ((callId: ToolCallId) => void) | undefined\n forkAt: (seq: number) => void\n /**\n * Session-authorized image loader, down-threaded from the Chat view so a\n * chat-node renderer can render the attachment presentation slot directly\n * with only the durable references plus this loader, instead of receiving a\n * rendering closure.\n */\n loadImage: MessageImageLoader\n renderMessageImages: RenderMessageImages\n fileMentions: (owner: TurnTailOwnerProps) => MarkdownFileMentions | undefined\n /** Turn-process state when this Node belongs to a projected Turn. */\n turnProcess?: TurnProcessOwnerProps | undefined\n}"],
2673
+ ownerProps: ["/** Stable owner currency delivered to a keyed Chat renderer. */\nexport interface ChatNodeOwnerProps {\n /** Renderer-owned Node portion selected by the grouping Definition. */\n groupPart?: string\n cwd?: string | undefined\n openFile: (path: string, options?: OpenFileOptions) => void\n inspectCall: ((callId: ToolCallId) => void) | undefined\n forkAt: (seq: number) => void\n /** Session-authorized image loader supplied by the Chat view. */\n loadImage: MessageImageLoader\n fileMentions: (owner: TurnTailOwnerProps) => MarkdownFileMentions | undefined\n /** Turn-process state when this Node belongs to a projected Turn. */\n turnProcess?: TurnProcessOwnerProps | undefined\n}"],
2598
2674
  ownerPropsReferences: [
2599
2675
  "MarkdownFileMentions",
2600
2676
  "MessageImageLoader",
2601
2677
  "OpenFileOptions",
2602
- "RenderMessageImages",
2603
2678
  "TurnProcessOwnerProps",
2604
2679
  "TurnTailOwnerProps"
2605
2680
  ],
2606
2681
  standardProps: [
2682
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2607
2683
  "useResource: UseResource",
2608
2684
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2609
2685
  "usePanelInfo: UsePanelInfo",
2610
2686
  "useSessions: UseSessions",
2611
2687
  "useSessionStatus: UseSessionStatus",
2612
2688
  "useSessionRetainInfo: UseSessionRetainInfo",
2613
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2689
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2690
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2614
2691
  "useChat: UseChat",
2615
2692
  "useConversation: UseConversation",
2616
2693
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2618,6 +2695,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2618
2695
  "useSession: SessionSnapshotSelector",
2619
2696
  "sessionId: SessionId",
2620
2697
  "useProjection: UseProjection",
2698
+ "useAccess: (action: RemoteEndpoint) => boolean",
2621
2699
  "useTrajectory: UseTrajectory"
2622
2700
  ],
2623
2701
  keyDomain: "fixed by the owner's key table { [Kind in ChatNodeKind]: { node: ChatNode<Kind> } }, already taken: assistant-step, command, command-input, compaction, context, manual-compaction, model-retry, question-reply, steering, system-prompt, tool-call, turn-error, turn-max-tokens, turn-process, turn-tail, turn-trigger, unknown, user, workflow-run",
@@ -2647,7 +2725,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2647
2725
  ],
2648
2726
  replaceRisk: "shadows-shipped-ui",
2649
2727
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.node', () => ctx.slots.register(\n { name: 'conversation.chat.node', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2650
- source: "packages/client/ui-chat/src/client/contract/slots.ts:377"
2728
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:402"
2651
2729
  },
2652
2730
  {
2653
2731
  key: "conversation.chat.reasoning.body",
@@ -2659,13 +2737,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2659
2737
  ownerProps: ["/** Original model-provided reasoning offered to the expanded Body Slot. */\nexport interface ReasoningBodyOwnerProps {\n /** Complete or streaming reasoning text. */\n readonly text: string\n /** Whether the reasoning tail is still streaming. */\n readonly running: boolean\n}"],
2660
2738
  ownerPropsReferences: [],
2661
2739
  standardProps: [
2740
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2662
2741
  "useResource: UseResource",
2663
2742
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2664
2743
  "usePanelInfo: UsePanelInfo",
2665
2744
  "useSessions: UseSessions",
2666
2745
  "useSessionStatus: UseSessionStatus",
2667
2746
  "useSessionRetainInfo: UseSessionRetainInfo",
2668
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2747
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2748
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2669
2749
  "useChat: UseChat",
2670
2750
  "useConversation: UseConversation",
2671
2751
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2673,6 +2753,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2673
2753
  "useSession: SessionSnapshotSelector",
2674
2754
  "sessionId: SessionId",
2675
2755
  "useProjection: UseProjection",
2756
+ "useAccess: (action: RemoteEndpoint) => boolean",
2676
2757
  "useTrajectory: UseTrajectory"
2677
2758
  ],
2678
2759
  keyDomain: "",
@@ -2682,7 +2763,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2682
2763
  occupants: ["client-ui-chat DefaultReasoningBody", "experimental-client-ui-cot-translation TranslationBody"],
2683
2764
  replaceRisk: "shadows-shipped-ui",
2684
2765
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.reasoning.body', () => ctx.slots.register(\n { name: 'conversation.chat.reasoning.body' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2685
- source: "packages/client/ui-chat/src/client/contract/slots.ts:402"
2766
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:429"
2686
2767
  },
2687
2768
  {
2688
2769
  key: "conversation.chat.turnTail",
@@ -2713,13 +2794,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2713
2794
  ownerProps: ["/** Owner currency of the completed-Turn extension chain. */\nexport interface TurnTailOwnerProps {\n turn: TurnLocation\n seq: number\n openFile: (path: string) => void\n}"],
2714
2795
  ownerPropsReferences: ["TurnLocation"],
2715
2796
  standardProps: [
2797
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2716
2798
  "useResource: UseResource",
2717
2799
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2718
2800
  "usePanelInfo: UsePanelInfo",
2719
2801
  "useSessions: UseSessions",
2720
2802
  "useSessionStatus: UseSessionStatus",
2721
2803
  "useSessionRetainInfo: UseSessionRetainInfo",
2722
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2804
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2805
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2723
2806
  "useChat: UseChat",
2724
2807
  "useConversation: UseConversation",
2725
2808
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2727,6 +2810,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2727
2810
  "useSession: SessionSnapshotSelector",
2728
2811
  "sessionId: SessionId",
2729
2812
  "useProjection: UseProjection",
2813
+ "useAccess: (action: RemoteEndpoint) => boolean",
2730
2814
  "useTrajectory: UseTrajectory"
2731
2815
  ],
2732
2816
  keyDomain: "",
@@ -2740,7 +2824,49 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2740
2824
  ],
2741
2825
  replaceRisk: "none",
2742
2826
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.turnTail', () => ctx.slots.register(\n { name: 'conversation.chat.turnTail', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2743
- source: "packages/client/ui-chat/src/client/contract/slots.ts:408"
2827
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:435"
2828
+ },
2829
+ {
2830
+ key: "conversation.chat.user.images",
2831
+ kind: "single",
2832
+ scope: "session",
2833
+ summary: "User-message images, including pending and local-echo previews, independently replaceable from output images.",
2834
+ doc: "User-message images, including pending and local-echo previews, independently replaceable from output images.",
2835
+ registerOptions: [],
2836
+ ownerProps: ["/** Message image group handed to the optional attachment presentation plugin. */\nexport interface MessageImagesOwnerProps {\n /** Durable references or submission-echo previews in source order. */\n images: readonly MessageImageSource[]\n /** Session-authorized image URL loader for the durable arm. */\n loadImage: MessageImageLoader\n /** Horizontal placement inside the owning record. */\n align: 'start' | 'end'\n /** Force every image into the compact message-attachment tile size. */\n compact?: boolean\n /** Fixed, uncropped thumbnail for an attachment list row. */\n thumbnail?: boolean\n}"],
2837
+ ownerPropsReferences: [
2838
+ "Message",
2839
+ "MessageImageLoader",
2840
+ "MessageImageSource"
2841
+ ],
2842
+ standardProps: [
2843
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2844
+ "useResource: UseResource",
2845
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2846
+ "usePanelInfo: UsePanelInfo",
2847
+ "useSessions: UseSessions",
2848
+ "useSessionStatus: UseSessionStatus",
2849
+ "useSessionRetainInfo: UseSessionRetainInfo",
2850
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2851
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2852
+ "useChat: UseChat",
2853
+ "useConversation: UseConversation",
2854
+ "useInput: SnapshotSelectorHook<InputState>",
2855
+ "inputActions: InputActions",
2856
+ "useSession: SessionSnapshotSelector",
2857
+ "sessionId: SessionId",
2858
+ "useProjection: UseProjection",
2859
+ "useAccess: (action: RemoteEndpoint) => boolean",
2860
+ "useTrajectory: UseTrajectory"
2861
+ ],
2862
+ keyDomain: "",
2863
+ hookContext: "",
2864
+ slotInject: "",
2865
+ declaredBy: "factory 'conversation.chat.user.content' (client-ui-chat), so it exists while that definition is registered",
2866
+ occupants: ["client-ui-attachment MessageImages"],
2867
+ replaceRisk: "shadows-shipped-ui",
2868
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.user.images', () => ctx.slots.register(\n { name: 'conversation.chat.user.images' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2869
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:417"
2744
2870
  },
2745
2871
  {
2746
2872
  key: "conversation.composer",
@@ -2761,13 +2887,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2761
2887
  "SessionSnapshot"
2762
2888
  ],
2763
2889
  standardProps: [
2890
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2764
2891
  "useResource: UseResource",
2765
2892
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2766
2893
  "usePanelInfo: UsePanelInfo",
2767
2894
  "useSessions: UseSessions",
2768
2895
  "useSessionStatus: UseSessionStatus",
2769
2896
  "useSessionRetainInfo: UseSessionRetainInfo",
2770
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2897
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2898
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2771
2899
  "useChat: UseChat",
2772
2900
  "useConversation: UseConversation",
2773
2901
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2775,6 +2903,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2775
2903
  "useSession: SessionSnapshotSelector",
2776
2904
  "sessionId: SessionId",
2777
2905
  "useProjection: UseProjection",
2906
+ "useAccess: (action: RemoteEndpoint) => boolean",
2778
2907
  "useTrajectory: UseTrajectory"
2779
2908
  ],
2780
2909
  keyDomain: "",
@@ -2788,7 +2917,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2788
2917
  ],
2789
2918
  replaceRisk: "none",
2790
2919
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.composer', () => ctx.slots.register(\n { name: 'conversation.composer', select: owner => null },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2791
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:187"
2920
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:260"
2792
2921
  },
2793
2922
  {
2794
2923
  key: "conversation.composer.bar",
@@ -2800,19 +2929,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2800
2929
  ownerProps: ["/** Owner share of the resident composer bar. */\nexport interface ComposerBarOwnerProps {\n /** Hero uses centered placement; composer uses the active bottom placement. */\n variant: 'hero' | 'composer'\n /** A feature-owned reason that makes message input inert while leaving model selection live. */\n blocked?: { readonly reason: string }\n /** Lock all message actions while preserving the resident composer surface. */\n disabled?: boolean\n /** Whether the shared Workspace picker is expanded. */\n workspacePickerOpen?: boolean\n /** Open the Workspace picker from the inert composer surface. */\n onRequestWorkspace?: () => void\n placeholder?: string\n /** Optional content rendered above the composer surface. */\n accessory?: ReactNode\n}"],
2801
2930
  ownerPropsReferences: ["Workspace"],
2802
2931
  standardProps: [
2932
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2803
2933
  "useResource: UseResource",
2804
2934
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2805
2935
  "usePanelInfo: UsePanelInfo",
2806
2936
  "useSessions: UseSessions",
2807
2937
  "useSessionStatus: UseSessionStatus",
2808
2938
  "useSessionRetainInfo: UseSessionRetainInfo",
2809
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2939
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2940
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2810
2941
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2811
2942
  "useInput: MaybeSnapshotSelectorHook<InputState>",
2812
2943
  "inputActions: InputActions | undefined",
2813
2944
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
2814
2945
  "sessionId: SessionId | undefined",
2815
- "useProjection: UseProjection"
2946
+ "useProjection: UseProjection",
2947
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
2816
2948
  ],
2817
2949
  keyDomain: "",
2818
2950
  hookContext: "",
@@ -2821,7 +2953,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2821
2953
  occupants: ["client-ui-conversation InputBar"],
2822
2954
  replaceRisk: "shadows-shipped-ui",
2823
2955
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.composer.bar', () => ctx.slots.register(\n { name: 'conversation.composer.bar' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2824
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:207"
2956
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:282"
2825
2957
  },
2826
2958
  {
2827
2959
  key: "conversation.composer.dock",
@@ -2852,13 +2984,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2852
2984
  ownerProps: [],
2853
2985
  ownerPropsReferences: [],
2854
2986
  standardProps: [
2987
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2855
2988
  "useResource: UseResource",
2856
2989
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2857
2990
  "usePanelInfo: UsePanelInfo",
2858
2991
  "useSessions: UseSessions",
2859
2992
  "useSessionStatus: UseSessionStatus",
2860
2993
  "useSessionRetainInfo: UseSessionRetainInfo",
2861
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2994
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2995
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2862
2996
  "useChat: UseChat",
2863
2997
  "useConversation: UseConversation",
2864
2998
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2866,6 +3000,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2866
3000
  "useSession: SessionSnapshotSelector",
2867
3001
  "sessionId: SessionId",
2868
3002
  "useProjection: UseProjection",
3003
+ "useAccess: (action: RemoteEndpoint) => boolean",
2869
3004
  "useTrajectory: UseTrajectory"
2870
3005
  ],
2871
3006
  keyDomain: "",
@@ -2875,7 +3010,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2875
3010
  occupants: ["client-ui-chat ActivityPill id 'activity'", "client-ui-chat UsagePill id 'usage'"],
2876
3011
  replaceRisk: "none",
2877
3012
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.composer.dock', () => ctx.slots.register(\n { name: 'conversation.composer.dock', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2878
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:199"
3013
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:274"
2879
3014
  },
2880
3015
  {
2881
3016
  key: "conversation.header",
@@ -2887,19 +3022,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2887
3022
  ownerProps: [],
2888
3023
  ownerPropsReferences: [],
2889
3024
  standardProps: [
3025
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2890
3026
  "useResource: UseResource",
2891
3027
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2892
3028
  "usePanelInfo: UsePanelInfo",
2893
3029
  "useSessions: UseSessions",
2894
3030
  "useSessionStatus: UseSessionStatus",
2895
3031
  "useSessionRetainInfo: UseSessionRetainInfo",
2896
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3032
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3033
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2897
3034
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2898
3035
  "useInput: MaybeSnapshotSelectorHook<InputState>",
2899
3036
  "inputActions: InputActions | undefined",
2900
3037
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
2901
3038
  "sessionId: SessionId | undefined",
2902
- "useProjection: UseProjection"
3039
+ "useProjection: UseProjection",
3040
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
2903
3041
  ],
2904
3042
  keyDomain: "",
2905
3043
  hookContext: "",
@@ -2908,7 +3046,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2908
3046
  occupants: ["client-ui-conversation ConversationHeader"],
2909
3047
  replaceRisk: "shadows-shipped-ui",
2910
3048
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.header', () => ctx.slots.register(\n { name: 'conversation.header' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2911
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:139"
3049
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:212"
2912
3050
  },
2913
3051
  {
2914
3052
  key: "conversation.header.leading",
@@ -2920,13 +3058,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2920
3058
  ownerProps: ["/** The leading seat exposes global navigation independently of a Session. */\nexport interface ConversationHeaderLeadingOwnerProps {\n /** Marker field: the occupant receives no owner-specific values. */\n children?: never\n}"],
2921
3059
  ownerPropsReferences: [],
2922
3060
  standardProps: [
3061
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2923
3062
  "useResource: UseResource",
2924
3063
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2925
3064
  "usePanelInfo: UsePanelInfo",
2926
3065
  "useSessions: UseSessions",
2927
3066
  "useSessionStatus: UseSessionStatus",
2928
3067
  "useSessionRetainInfo: UseSessionRetainInfo",
2929
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3068
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3069
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
2930
3070
  ],
2931
3071
  keyDomain: "",
2932
3072
  hookContext: "",
@@ -2935,7 +3075,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2935
3075
  occupants: [],
2936
3076
  replaceRisk: "none",
2937
3077
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.header.leading', () => ctx.slots.register(\n { name: 'conversation.header.leading' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2938
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:168"
3078
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:241"
2939
3079
  },
2940
3080
  {
2941
3081
  key: "conversation.hero.agentPreset",
@@ -2947,19 +3087,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2947
3087
  ownerProps: ["/** Owner share of the Hero agent-preset control. */\nexport interface HeroAgentPresetOwnerProps {\n /** Marker field: the occupant owns its roster and staged selection. */\n children?: never\n}"],
2948
3088
  ownerPropsReferences: [],
2949
3089
  standardProps: [
3090
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2950
3091
  "useResource: UseResource",
2951
3092
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2952
3093
  "usePanelInfo: UsePanelInfo",
2953
3094
  "useSessions: UseSessions",
2954
3095
  "useSessionStatus: UseSessionStatus",
2955
3096
  "useSessionRetainInfo: UseSessionRetainInfo",
2956
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3097
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3098
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2957
3099
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2958
3100
  "useInput: MaybeSnapshotSelectorHook<InputState>",
2959
3101
  "inputActions: InputActions | undefined",
2960
3102
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
2961
3103
  "sessionId: SessionId | undefined",
2962
- "useProjection: UseProjection"
3104
+ "useProjection: UseProjection",
3105
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
2963
3106
  ],
2964
3107
  keyDomain: "",
2965
3108
  hookContext: "",
@@ -2968,7 +3111,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2968
3111
  occupants: ["client-ui-agent-preset AgentPresetSeat"],
2969
3112
  replaceRisk: "shadows-shipped-ui",
2970
3113
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.hero.agentPreset', () => ctx.slots.register(\n { name: 'conversation.hero.agentPreset' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2971
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:193"
3114
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:266"
2972
3115
  },
2973
3116
  {
2974
3117
  key: "conversation.hero.brand.mark",
@@ -2980,13 +3123,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2980
3123
  ownerProps: ["/** Presentation props supplied to the blank-session brand mark. */\nexport interface HeroBrandMarkOwnerProps {\n /** Requested square edge in pixels. */\n size: number\n /** Host class preserving the surrounding mark geometry. */\n className?: string | undefined\n}"],
2981
3124
  ownerPropsReferences: [],
2982
3125
  standardProps: [
3126
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2983
3127
  "useResource: UseResource",
2984
3128
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2985
3129
  "usePanelInfo: UsePanelInfo",
2986
3130
  "useSessions: UseSessions",
2987
3131
  "useSessionStatus: UseSessionStatus",
2988
3132
  "useSessionRetainInfo: UseSessionRetainInfo",
2989
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3133
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3134
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
2990
3135
  ],
2991
3136
  keyDomain: "",
2992
3137
  hookContext: "",
@@ -2995,7 +3140,64 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2995
3140
  occupants: [],
2996
3141
  replaceRisk: "none",
2997
3142
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.hero.brand.mark', () => ctx.slots.register(\n { name: 'conversation.hero.brand.mark' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2998
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:191"
3143
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:264"
3144
+ },
3145
+ {
3146
+ key: "conversation.hero.options",
3147
+ kind: "list",
3148
+ scope: "session",
3149
+ summary: "Compact options right-aligned in the New Session row after the workspace and preset controls; rendered only with a Session.",
3150
+ doc: "Compact options right-aligned in the New Session row after the workspace and preset controls; rendered only with a Session.",
3151
+ registerOptions: [
3152
+ {
3153
+ name: "id",
3154
+ requirement: "required",
3155
+ type: "string",
3156
+ doc: "Your cell key. Use an id of your own: a fresh id is added beside the shipped entries, while reusing a shipped id puts you in THAT cell and replaces it. Owners that filter by id address you by it."
3157
+ },
3158
+ {
3159
+ name: "order",
3160
+ requirement: "optional",
3161
+ type: "number",
3162
+ doc: "Position among the entries, ascending (default 0)."
3163
+ },
3164
+ {
3165
+ name: "label",
3166
+ requirement: "optional",
3167
+ type: "string | (() => string)",
3168
+ doc: "Display text where the owner projects one (nav rows, tabs). A thunk is re-read on every projection, so localized text follows the active locale without re-registering."
3169
+ }
3170
+ ],
3171
+ ownerProps: [],
3172
+ ownerPropsReferences: [],
3173
+ standardProps: [
3174
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3175
+ "useResource: UseResource",
3176
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3177
+ "usePanelInfo: UsePanelInfo",
3178
+ "useSessions: UseSessions",
3179
+ "useSessionStatus: UseSessionStatus",
3180
+ "useSessionRetainInfo: UseSessionRetainInfo",
3181
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3182
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3183
+ "useChat: UseChat",
3184
+ "useConversation: UseConversation",
3185
+ "useInput: SnapshotSelectorHook<InputState>",
3186
+ "inputActions: InputActions",
3187
+ "useSession: SessionSnapshotSelector",
3188
+ "sessionId: SessionId",
3189
+ "useProjection: UseProjection",
3190
+ "useAccess: (action: RemoteEndpoint) => boolean",
3191
+ "useTrajectory: UseTrajectory"
3192
+ ],
3193
+ keyDomain: "",
3194
+ hookContext: "",
3195
+ slotInject: "",
3196
+ declaredBy: "factory 'conversation.content' (client-ui-conversation), so it exists while that definition is registered",
3197
+ occupants: [],
3198
+ replaceRisk: "none",
3199
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.hero.options', () => ctx.slots.register(\n { name: 'conversation.hero.options', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3200
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:268"
2999
3201
  },
3000
3202
  {
3001
3203
  key: "conversation.hero.workspace",
@@ -3007,13 +3209,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3007
3209
  ownerProps: ["/** Owner share common to blank-session Workspace pickers. */\nexport interface EmptyWorkspaceOwnerProps {\n open: boolean\n anchorRef?: RefObject<HTMLElement>\n /** Currently selected Workspace, when available. */\n selectedId?: WorkspaceId | undefined\n onPick: (workspaceId: WorkspaceId) => void\n onClose: () => void\n}"],
3008
3210
  ownerPropsReferences: ["Workspace"],
3009
3211
  standardProps: [
3212
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3010
3213
  "useResource: UseResource",
3011
3214
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3012
3215
  "usePanelInfo: UsePanelInfo",
3013
3216
  "useSessions: UseSessions",
3014
3217
  "useSessionStatus: UseSessionStatus",
3015
3218
  "useSessionRetainInfo: UseSessionRetainInfo",
3016
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3219
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3220
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
3017
3221
  ],
3018
3222
  keyDomain: "",
3019
3223
  hookContext: "",
@@ -3022,7 +3226,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3022
3226
  occupants: ["client-ui-workspace WorkspacePicker"],
3023
3227
  replaceRisk: "shadows-shipped-ui",
3024
3228
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.hero.workspace', () => ctx.slots.register(\n { name: 'conversation.hero.workspace' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3025
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:189"
3229
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:262"
3026
3230
  },
3027
3231
  {
3028
3232
  key: "conversation.hero.workspace.directoryFlow",
@@ -3034,13 +3238,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3034
3238
  ownerProps: ["/**\n * Owner share of the directory-flow holes: the complete conversation between\n * the trigger surface and the picking interaction. The occupant reads `open`\n * to run/render its interaction and reports exactly one outcome per open.\n */\nexport interface DirectoryFlowOwnerProps {\n /** True while a picking interaction is requested; flipping back to false withdraws the request. */\n open: boolean\n /** True while the owner adopts a picked path (`createWorkspace` in flight); occupants disable their commit affordances. */\n busy: boolean\n /** The operator picked a directory (absolute host path); the owner adopts it. */\n onPicked: (path: string) => void\n /** The operator dismissed the interaction; the owner just closes the flow. */\n onCancel: () => void\n /** The interaction itself failed (chooser missing, listing denied); the owner shows its error surface. */\n onError: (message: string) => void\n}"],
3035
3239
  ownerPropsReferences: [],
3036
3240
  standardProps: [
3241
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3037
3242
  "useResource: UseResource",
3038
3243
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3039
3244
  "usePanelInfo: UsePanelInfo",
3040
3245
  "useSessions: UseSessions",
3041
3246
  "useSessionStatus: UseSessionStatus",
3042
3247
  "useSessionRetainInfo: UseSessionRetainInfo",
3043
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3248
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3249
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
3044
3250
  ],
3045
3251
  keyDomain: "",
3046
3252
  hookContext: "",
@@ -3049,7 +3255,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3049
3255
  occupants: ["client-ui-directory-picker-browse BrowseDirectoryFlow", "client-ui-directory-picker-native NativeDirectoryFlow"],
3050
3256
  replaceRisk: "shadows-shipped-ui",
3051
3257
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.hero.workspace.directoryFlow', () => ctx.slots.register(\n { name: 'conversation.hero.workspace.directoryFlow' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3052
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:118"
3258
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:119"
3053
3259
  },
3054
3260
  {
3055
3261
  key: "conversation.input.activity",
@@ -3061,13 +3267,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3061
3267
  ownerProps: ["/** A toolbar activity hides ordinary accessory controls while expanded; its occupant must release expansion on unmount. */\nexport interface InputActivityOwnerProps extends InputControlOwnerProps {\n /** @param active - whether the occupant needs the toolbar width before the submit action. */\n onActiveChange: (active: boolean) => void\n}"],
3062
3268
  ownerPropsReferences: ["InputControlOwnerProps"],
3063
3269
  standardProps: [
3270
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3064
3271
  "useResource: UseResource",
3065
3272
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3066
3273
  "usePanelInfo: UsePanelInfo",
3067
3274
  "useSessions: UseSessions",
3068
3275
  "useSessionStatus: UseSessionStatus",
3069
3276
  "useSessionRetainInfo: UseSessionRetainInfo",
3070
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3277
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3278
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3071
3279
  "useChat: UseChat",
3072
3280
  "useConversation: UseConversation",
3073
3281
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3075,6 +3283,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3075
3283
  "useSession: SessionSnapshotSelector",
3076
3284
  "sessionId: SessionId",
3077
3285
  "useProjection: UseProjection",
3286
+ "useAccess: (action: RemoteEndpoint) => boolean",
3078
3287
  "useTrajectory: UseTrajectory"
3079
3288
  ],
3080
3289
  keyDomain: "",
@@ -3084,7 +3293,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3084
3293
  occupants: ["experimental-client-ui-voice-input VoiceInput"],
3085
3294
  replaceRisk: "shadows-shipped-ui",
3086
3295
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.activity', () => ctx.slots.register(\n { name: 'conversation.input.activity' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3087
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:205"
3296
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:280"
3088
3297
  },
3089
3298
  {
3090
3299
  key: "conversation.input.attachments",
@@ -3100,19 +3309,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3100
3309
  "DraftFileUploads"
3101
3310
  ],
3102
3311
  standardProps: [
3312
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3103
3313
  "useResource: UseResource",
3104
3314
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3105
3315
  "usePanelInfo: UsePanelInfo",
3106
3316
  "useSessions: UseSessions",
3107
3317
  "useSessionStatus: UseSessionStatus",
3108
3318
  "useSessionRetainInfo: UseSessionRetainInfo",
3109
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3319
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3320
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3110
3321
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
3111
3322
  "useInput: MaybeSnapshotSelectorHook<InputState>",
3112
3323
  "inputActions: InputActions | undefined",
3113
3324
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
3114
3325
  "sessionId: SessionId | undefined",
3115
- "useProjection: UseProjection"
3326
+ "useProjection: UseProjection",
3327
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
3116
3328
  ],
3117
3329
  keyDomain: "",
3118
3330
  hookContext: "",
@@ -3121,7 +3333,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3121
3333
  occupants: ["client-ui-attachment ComposerAttachments"],
3122
3334
  replaceRisk: "shadows-shipped-ui",
3123
3335
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.attachments', () => ctx.slots.register(\n { name: 'conversation.input.attachments' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3124
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:209"
3336
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:284"
3125
3337
  },
3126
3338
  {
3127
3339
  key: "conversation.input.dock",
@@ -3152,13 +3364,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3152
3364
  ownerProps: ["/** Point-in-time owner values for composer extension entries. */\nexport interface InputZone {\n readonly session: SessionSnapshot\n readonly input: InputState\n}"],
3153
3365
  ownerPropsReferences: ["InputState", "SessionSnapshot"],
3154
3366
  standardProps: [
3367
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3155
3368
  "useResource: UseResource",
3156
3369
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3157
3370
  "usePanelInfo: UsePanelInfo",
3158
3371
  "useSessions: UseSessions",
3159
3372
  "useSessionStatus: UseSessionStatus",
3160
3373
  "useSessionRetainInfo: UseSessionRetainInfo",
3161
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3374
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3375
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3162
3376
  "useChat: UseChat",
3163
3377
  "useConversation: UseConversation",
3164
3378
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3166,6 +3380,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3166
3380
  "useSession: SessionSnapshotSelector",
3167
3381
  "sessionId: SessionId",
3168
3382
  "useProjection: UseProjection",
3383
+ "useAccess: (action: RemoteEndpoint) => boolean",
3169
3384
  "useTrajectory: UseTrajectory"
3170
3385
  ],
3171
3386
  keyDomain: "",
@@ -3180,7 +3395,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3180
3395
  ],
3181
3396
  replaceRisk: "none",
3182
3397
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.dock', () => ctx.slots.register(\n { name: 'conversation.input.dock', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3183
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:195"
3398
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:270"
3184
3399
  },
3185
3400
  {
3186
3401
  key: "conversation.input.left",
@@ -3211,13 +3426,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3211
3426
  ownerProps: [],
3212
3427
  ownerPropsReferences: [],
3213
3428
  standardProps: [
3429
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3214
3430
  "useResource: UseResource",
3215
3431
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3216
3432
  "usePanelInfo: UsePanelInfo",
3217
3433
  "useSessions: UseSessions",
3218
3434
  "useSessionStatus: UseSessionStatus",
3219
3435
  "useSessionRetainInfo: UseSessionRetainInfo",
3220
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3436
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3437
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3221
3438
  "useChat: UseChat",
3222
3439
  "useConversation: UseConversation",
3223
3440
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3225,6 +3442,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3225
3442
  "useSession: SessionSnapshotSelector",
3226
3443
  "sessionId: SessionId",
3227
3444
  "useProjection: UseProjection",
3445
+ "useAccess: (action: RemoteEndpoint) => boolean",
3228
3446
  "useTrajectory: UseTrajectory"
3229
3447
  ],
3230
3448
  keyDomain: "",
@@ -3234,7 +3452,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3234
3452
  occupants: [],
3235
3453
  replaceRisk: "none",
3236
3454
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.left', () => ctx.slots.register(\n { name: 'conversation.input.left', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3237
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:201"
3455
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:276"
3238
3456
  },
3239
3457
  {
3240
3458
  key: "conversation.input.model",
@@ -3246,13 +3464,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3246
3464
  ownerProps: ["/** Owner share of the named plan, permission, and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
3247
3465
  ownerPropsReferences: [],
3248
3466
  standardProps: [
3467
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3249
3468
  "useResource: UseResource",
3250
3469
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3251
3470
  "usePanelInfo: UsePanelInfo",
3252
3471
  "useSessions: UseSessions",
3253
3472
  "useSessionStatus: UseSessionStatus",
3254
3473
  "useSessionRetainInfo: UseSessionRetainInfo",
3255
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3474
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3475
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3256
3476
  "useChat: UseChat",
3257
3477
  "useConversation: UseConversation",
3258
3478
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3260,6 +3480,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3260
3480
  "useSession: SessionSnapshotSelector",
3261
3481
  "sessionId: SessionId",
3262
3482
  "useProjection: UseProjection",
3483
+ "useAccess: (action: RemoteEndpoint) => boolean",
3263
3484
  "useTrajectory: UseTrajectory"
3264
3485
  ],
3265
3486
  keyDomain: "",
@@ -3269,7 +3490,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3269
3490
  occupants: ["client-ui-model-selection ModelSelect"],
3270
3491
  replaceRisk: "shadows-shipped-ui",
3271
3492
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.model', () => ctx.slots.register(\n { name: 'conversation.input.model' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3272
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:223"
3493
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:298"
3273
3494
  },
3274
3495
  {
3275
3496
  key: "conversation.input.overlay",
@@ -3300,13 +3521,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3300
3521
  ownerProps: [],
3301
3522
  ownerPropsReferences: [],
3302
3523
  standardProps: [
3524
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3303
3525
  "useResource: UseResource",
3304
3526
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3305
3527
  "usePanelInfo: UsePanelInfo",
3306
3528
  "useSessions: UseSessions",
3307
3529
  "useSessionStatus: UseSessionStatus",
3308
3530
  "useSessionRetainInfo: UseSessionRetainInfo",
3309
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3531
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3532
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3310
3533
  "useChat: UseChat",
3311
3534
  "useConversation: UseConversation",
3312
3535
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3314,6 +3537,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3314
3537
  "useSession: SessionSnapshotSelector",
3315
3538
  "sessionId: SessionId",
3316
3539
  "useProjection: UseProjection",
3540
+ "useAccess: (action: RemoteEndpoint) => boolean",
3317
3541
  "useTrajectory: UseTrajectory"
3318
3542
  ],
3319
3543
  keyDomain: "",
@@ -3327,7 +3551,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3327
3551
  ],
3328
3552
  replaceRisk: "none",
3329
3553
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.overlay', () => ctx.slots.register(\n { name: 'conversation.input.overlay', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3330
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:197"
3554
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:272"
3331
3555
  },
3332
3556
  {
3333
3557
  key: "conversation.input.permission",
@@ -3339,13 +3563,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3339
3563
  ownerProps: ["/** Owner share of the named plan, permission, and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
3340
3564
  ownerPropsReferences: [],
3341
3565
  standardProps: [
3566
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3342
3567
  "useResource: UseResource",
3343
3568
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3344
3569
  "usePanelInfo: UsePanelInfo",
3345
3570
  "useSessions: UseSessions",
3346
3571
  "useSessionStatus: UseSessionStatus",
3347
3572
  "useSessionRetainInfo: UseSessionRetainInfo",
3348
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3573
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3574
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3349
3575
  "useChat: UseChat",
3350
3576
  "useConversation: UseConversation",
3351
3577
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3353,6 +3579,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3353
3579
  "useSession: SessionSnapshotSelector",
3354
3580
  "sessionId: SessionId",
3355
3581
  "useProjection: UseProjection",
3582
+ "useAccess: (action: RemoteEndpoint) => boolean",
3356
3583
  "useTrajectory: UseTrajectory"
3357
3584
  ],
3358
3585
  keyDomain: "",
@@ -3362,7 +3589,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3362
3589
  occupants: ["client-ui-permission-presets PermissionSelect"],
3363
3590
  replaceRisk: "shadows-shipped-ui",
3364
3591
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.permission', () => ctx.slots.register(\n { name: 'conversation.input.permission' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3365
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:217"
3592
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:292"
3366
3593
  },
3367
3594
  {
3368
3595
  key: "conversation.input.plan",
@@ -3374,13 +3601,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3374
3601
  ownerProps: ["/** Owner share of the named plan, permission, and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
3375
3602
  ownerPropsReferences: [],
3376
3603
  standardProps: [
3604
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3377
3605
  "useResource: UseResource",
3378
3606
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3379
3607
  "usePanelInfo: UsePanelInfo",
3380
3608
  "useSessions: UseSessions",
3381
3609
  "useSessionStatus: UseSessionStatus",
3382
3610
  "useSessionRetainInfo: UseSessionRetainInfo",
3383
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3611
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3612
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3384
3613
  "useChat: UseChat",
3385
3614
  "useConversation: UseConversation",
3386
3615
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3388,6 +3617,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3388
3617
  "useSession: SessionSnapshotSelector",
3389
3618
  "sessionId: SessionId",
3390
3619
  "useProjection: UseProjection",
3620
+ "useAccess: (action: RemoteEndpoint) => boolean",
3391
3621
  "useTrajectory: UseTrajectory"
3392
3622
  ],
3393
3623
  keyDomain: "",
@@ -3397,7 +3627,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3397
3627
  occupants: ["client-ui-plan PlanChip"],
3398
3628
  replaceRisk: "shadows-shipped-ui",
3399
3629
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.plan', () => ctx.slots.register(\n { name: 'conversation.input.plan' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3400
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:215"
3630
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:290"
3401
3631
  },
3402
3632
  {
3403
3633
  key: "conversation.input.right",
@@ -3428,13 +3658,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3428
3658
  ownerProps: [],
3429
3659
  ownerPropsReferences: [],
3430
3660
  standardProps: [
3661
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3431
3662
  "useResource: UseResource",
3432
3663
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3433
3664
  "usePanelInfo: UsePanelInfo",
3434
3665
  "useSessions: UseSessions",
3435
3666
  "useSessionStatus: UseSessionStatus",
3436
3667
  "useSessionRetainInfo: UseSessionRetainInfo",
3437
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3668
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3669
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3438
3670
  "useChat: UseChat",
3439
3671
  "useConversation: UseConversation",
3440
3672
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3442,6 +3674,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3442
3674
  "useSession: SessionSnapshotSelector",
3443
3675
  "sessionId: SessionId",
3444
3676
  "useProjection: UseProjection",
3677
+ "useAccess: (action: RemoteEndpoint) => boolean",
3445
3678
  "useTrajectory: UseTrajectory"
3446
3679
  ],
3447
3680
  keyDomain: "",
@@ -3451,46 +3684,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3451
3684
  occupants: [],
3452
3685
  replaceRisk: "none",
3453
3686
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.right', () => ctx.slots.register(\n { name: 'conversation.input.right', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3454
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:203"
3455
- },
3456
- {
3457
- key: "conversation.message.images",
3458
- kind: "single",
3459
- scope: "session",
3460
- summary: "Renderer for one consecutive group of durable message images.",
3461
- doc: "Renderer for one consecutive group of durable message images. The owner\nsupplies image references, an authorized loader, and alignment. A\nregistration replaces the shipped gallery; without one, images are omitted.",
3462
- registerOptions: [],
3463
- ownerProps: ["/** Message image group handed to the optional attachment presentation plugin. */\nexport interface MessageImagesOwnerProps {\n /** Durable references or submission-echo previews in source order. */\n images: readonly MessageImageSource[]\n /** Session-authorized image URL loader for the durable arm. */\n loadImage: MessageImageLoader\n /** Horizontal placement inside the owning record. */\n align: 'start' | 'end'\n /** Force every image into the compact message-attachment tile size. */\n compact?: boolean\n /** Fixed, uncropped thumbnail for an attachment list row. */\n thumbnail?: boolean\n}"],
3464
- ownerPropsReferences: [
3465
- "Message",
3466
- "MessageImageLoader",
3467
- "MessageImageSource"
3468
- ],
3469
- standardProps: [
3470
- "useResource: UseResource",
3471
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3472
- "usePanelInfo: UsePanelInfo",
3473
- "useSessions: UseSessions",
3474
- "useSessionStatus: UseSessionStatus",
3475
- "useSessionRetainInfo: UseSessionRetainInfo",
3476
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3477
- "useChat: UseChat",
3478
- "useConversation: UseConversation",
3479
- "useInput: SnapshotSelectorHook<InputState>",
3480
- "inputActions: InputActions",
3481
- "useSession: SessionSnapshotSelector",
3482
- "sessionId: SessionId",
3483
- "useProjection: UseProjection",
3484
- "useTrajectory: UseTrajectory"
3485
- ],
3486
- keyDomain: "",
3487
- hookContext: "",
3488
- slotInject: "",
3489
- declaredBy: "an entry in 'conversation.chat.flow' (client-ui-chat), so it exists while that entry is mounted",
3490
- occupants: ["client-ui-attachment MessageImages"],
3491
- replaceRisk: "shadows-shipped-ui",
3492
- example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.message.images', () => ctx.slots.register(\n { name: 'conversation.message.images' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3493
- source: "packages/client/ui-chat/src/client/contract/slots.ts:390"
3687
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:278"
3494
3688
  },
3495
3689
  {
3496
3690
  key: "conversation.plan-review.actions",
@@ -3521,13 +3715,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3521
3715
  ownerProps: ["/**\n * A request narrowed to the `plan-review` presentation intent: everything the\n * decision card renders and answers with, so the panel never re-reads the\n * request fields. `approve` and `decline` are the asker's own options — an\n * answer must carry one of those labels verbatim — and `plan` is the markdown\n * body under review.\n */\nexport interface PlanReview {\n /** The reviewed question's id, echoed in the answer. */\n id: string\n /** The question text, kept as the card's accessible name. */\n question: string\n /** The plan markdown under review. */\n plan: string\n /** Logged tool invocation used to reopen this plan. */\n callId?: ToolCallId\n /** The option that approves the plan. */\n approve: QuestionOption\n /** The option that declines it; absent when the asker offered no other option. */\n decline?: QuestionOption\n}"],
3522
3716
  ownerPropsReferences: [],
3523
3717
  standardProps: [
3718
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3524
3719
  "useResource: UseResource",
3525
3720
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3526
3721
  "usePanelInfo: UsePanelInfo",
3527
3722
  "useSessions: UseSessions",
3528
3723
  "useSessionStatus: UseSessionStatus",
3529
3724
  "useSessionRetainInfo: UseSessionRetainInfo",
3530
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3725
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3726
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3531
3727
  "useChat: UseChat",
3532
3728
  "useConversation: UseConversation",
3533
3729
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3535,6 +3731,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3535
3731
  "useSession: SessionSnapshotSelector",
3536
3732
  "sessionId: SessionId",
3537
3733
  "useProjection: UseProjection",
3734
+ "useAccess: (action: RemoteEndpoint) => boolean",
3538
3735
  "useTrajectory: UseTrajectory"
3539
3736
  ],
3540
3737
  keyDomain: "",
@@ -3556,13 +3753,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3556
3753
  ownerProps: [],
3557
3754
  ownerPropsReferences: [],
3558
3755
  standardProps: [
3756
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3559
3757
  "useResource: UseResource",
3560
3758
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3561
3759
  "usePanelInfo: UsePanelInfo",
3562
3760
  "useSessions: UseSessions",
3563
3761
  "useSessionStatus: UseSessionStatus",
3564
3762
  "useSessionRetainInfo: UseSessionRetainInfo",
3565
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3763
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3764
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3566
3765
  "useChat: UseChat",
3567
3766
  "useConversation: UseConversation",
3568
3767
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3570,6 +3769,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3570
3769
  "useSession: SessionSnapshotSelector",
3571
3770
  "sessionId: SessionId",
3572
3771
  "useProjection: UseProjection",
3772
+ "useAccess: (action: RemoteEndpoint) => boolean",
3573
3773
  "useTrajectory: UseTrajectory"
3574
3774
  ],
3575
3775
  keyDomain: "",
@@ -3579,7 +3779,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3579
3779
  occupants: ["client-ui-conversation ConversationSession"],
3580
3780
  replaceRisk: "shadows-shipped-ui",
3581
3781
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.session', () => ctx.slots.register(\n { name: 'conversation.session' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3582
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:133"
3782
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:206"
3583
3783
  },
3584
3784
  {
3585
3785
  key: "conversation.session.header",
@@ -3591,13 +3791,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3591
3791
  ownerProps: [],
3592
3792
  ownerPropsReferences: [],
3593
3793
  standardProps: [
3794
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3594
3795
  "useResource: UseResource",
3595
3796
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3596
3797
  "usePanelInfo: UsePanelInfo",
3597
3798
  "useSessions: UseSessions",
3598
3799
  "useSessionStatus: UseSessionStatus",
3599
3800
  "useSessionRetainInfo: UseSessionRetainInfo",
3600
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3801
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3802
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3601
3803
  "useChat: UseChat",
3602
3804
  "useConversation: UseConversation",
3603
3805
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3605,6 +3807,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3605
3807
  "useSession: SessionSnapshotSelector",
3606
3808
  "sessionId: SessionId",
3607
3809
  "useProjection: UseProjection",
3810
+ "useAccess: (action: RemoteEndpoint) => boolean",
3608
3811
  "useTrajectory: UseTrajectory"
3609
3812
  ],
3610
3813
  keyDomain: "",
@@ -3614,7 +3817,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3614
3817
  occupants: ["client-ui-conversation ConversationSessionHeader"],
3615
3818
  replaceRisk: "shadows-shipped-ui",
3616
3819
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.session.header', () => ctx.slots.register(\n { name: 'conversation.session.header' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3617
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:141"
3820
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:214"
3618
3821
  },
3619
3822
  {
3620
3823
  key: "conversation.session.header.actions",
@@ -3645,13 +3848,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3645
3848
  ownerProps: ["/** Header actions derive their state from standard Session props. */\nexport interface ConversationHeaderActionOwnerProps {\n /** Marker field: entries receive no owner-specific values. */\n children?: never\n}"],
3646
3849
  ownerPropsReferences: [],
3647
3850
  standardProps: [
3851
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3648
3852
  "useResource: UseResource",
3649
3853
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3650
3854
  "usePanelInfo: UsePanelInfo",
3651
3855
  "useSessions: UseSessions",
3652
3856
  "useSessionStatus: UseSessionStatus",
3653
3857
  "useSessionRetainInfo: UseSessionRetainInfo",
3654
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3858
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3859
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3655
3860
  "useChat: UseChat",
3656
3861
  "useConversation: UseConversation",
3657
3862
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3659,6 +3864,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3659
3864
  "useSession: SessionSnapshotSelector",
3660
3865
  "sessionId: SessionId",
3661
3866
  "useProjection: UseProjection",
3867
+ "useAccess: (action: RemoteEndpoint) => boolean",
3662
3868
  "useTrajectory: UseTrajectory"
3663
3869
  ],
3664
3870
  keyDomain: "",
@@ -3673,7 +3879,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3673
3879
  ],
3674
3880
  replaceRisk: "none",
3675
3881
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.session.header.actions', () => ctx.slots.register(\n { name: 'conversation.session.header.actions', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3676
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:156"
3882
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:229"
3677
3883
  },
3678
3884
  {
3679
3885
  key: "conversation.session.header.corner",
@@ -3685,13 +3891,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3685
3891
  ownerProps: ["/** The header corner's occupant derives its state from standard Session props. */\nexport interface ConversationHeaderCornerOwnerProps {\n /** Marker field: the occupant receives no owner-specific values. */\n children?: never\n}"],
3686
3892
  ownerPropsReferences: [],
3687
3893
  standardProps: [
3894
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3688
3895
  "useResource: UseResource",
3689
3896
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3690
3897
  "usePanelInfo: UsePanelInfo",
3691
3898
  "useSessions: UseSessions",
3692
3899
  "useSessionStatus: UseSessionStatus",
3693
3900
  "useSessionRetainInfo: UseSessionRetainInfo",
3694
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3901
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3902
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3695
3903
  "useChat: UseChat",
3696
3904
  "useConversation: UseConversation",
3697
3905
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3699,6 +3907,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3699
3907
  "useSession: SessionSnapshotSelector",
3700
3908
  "sessionId: SessionId",
3701
3909
  "useProjection: UseProjection",
3910
+ "useAccess: (action: RemoteEndpoint) => boolean",
3702
3911
  "useTrajectory: UseTrajectory"
3703
3912
  ],
3704
3913
  keyDomain: "",
@@ -3708,7 +3917,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3708
3917
  occupants: ["client-ui-sidebar-right ExpandButton"],
3709
3918
  replaceRisk: "shadows-shipped-ui",
3710
3919
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.session.header.corner', () => ctx.slots.register(\n { name: 'conversation.session.header.corner' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3711
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:179"
3920
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:252"
3712
3921
  },
3713
3922
  {
3714
3923
  key: "conversation.session.header.lineage",
@@ -3720,13 +3929,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3720
3929
  ownerProps: ["/** Plain breadcrumb data handed to the optional lineage renderer. */\nexport interface ConversationHeaderLineageOwnerProps {\n /** Session represented by this breadcrumb title. */\n lineageSessionId: SessionId\n /** Display title available to a combined title/control renderer. */\n displayTitle: string\n /** Navigate to an ancestor title when present. */\n openTitle?: () => void\n}"],
3721
3930
  ownerPropsReferences: ["SessionId"],
3722
3931
  standardProps: [
3932
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3723
3933
  "useResource: UseResource",
3724
3934
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3725
3935
  "usePanelInfo: UsePanelInfo",
3726
3936
  "useSessions: UseSessions",
3727
3937
  "useSessionStatus: UseSessionStatus",
3728
3938
  "useSessionRetainInfo: UseSessionRetainInfo",
3729
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3939
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3940
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3730
3941
  "useChat: UseChat",
3731
3942
  "useConversation: UseConversation",
3732
3943
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3734,6 +3945,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3734
3945
  "useSession: SessionSnapshotSelector",
3735
3946
  "sessionId: SessionId",
3736
3947
  "useProjection: UseProjection",
3948
+ "useAccess: (action: RemoteEndpoint) => boolean",
3737
3949
  "useTrajectory: UseTrajectory"
3738
3950
  ],
3739
3951
  keyDomain: "",
@@ -3743,7 +3955,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3743
3955
  occupants: ["client-ui-subagent SubagentHeaderLineage"],
3744
3956
  replaceRisk: "shadows-shipped-ui",
3745
3957
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.session.header.lineage', () => ctx.slots.register(\n { name: 'conversation.session.header.lineage' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3746
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:150"
3958
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:223"
3747
3959
  },
3748
3960
  {
3749
3961
  key: "conversation.session.header.utilities",
@@ -3774,13 +3986,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3774
3986
  ownerProps: ["/** Header actions derive their state from standard Session props. */\nexport interface ConversationHeaderActionOwnerProps {\n /** Marker field: entries receive no owner-specific values. */\n children?: never\n}"],
3775
3987
  ownerPropsReferences: [],
3776
3988
  standardProps: [
3989
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3777
3990
  "useResource: UseResource",
3778
3991
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3779
3992
  "usePanelInfo: UsePanelInfo",
3780
3993
  "useSessions: UseSessions",
3781
3994
  "useSessionStatus: UseSessionStatus",
3782
3995
  "useSessionRetainInfo: UseSessionRetainInfo",
3783
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3996
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3997
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3784
3998
  "useChat: UseChat",
3785
3999
  "useConversation: UseConversation",
3786
4000
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3788,6 +4002,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3788
4002
  "useSession: SessionSnapshotSelector",
3789
4003
  "sessionId: SessionId",
3790
4004
  "useProjection: UseProjection",
4005
+ "useAccess: (action: RemoteEndpoint) => boolean",
3791
4006
  "useTrajectory: UseTrajectory"
3792
4007
  ],
3793
4008
  keyDomain: "",
@@ -3801,7 +4016,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3801
4016
  ],
3802
4017
  replaceRisk: "none",
3803
4018
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.session.header.utilities', () => ctx.slots.register(\n { name: 'conversation.session.header.utilities', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3804
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:162"
4019
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:235"
3805
4020
  },
3806
4021
  {
3807
4022
  key: "conversation.trajectory.images",
@@ -3817,13 +4032,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3817
4032
  "MessageImageSource"
3818
4033
  ],
3819
4034
  standardProps: [
4035
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3820
4036
  "useResource: UseResource",
3821
4037
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3822
4038
  "usePanelInfo: UsePanelInfo",
3823
4039
  "useSessions: UseSessions",
3824
4040
  "useSessionStatus: UseSessionStatus",
3825
4041
  "useSessionRetainInfo: UseSessionRetainInfo",
3826
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4042
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4043
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3827
4044
  "useChat: UseChat",
3828
4045
  "useConversation: UseConversation",
3829
4046
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3831,6 +4048,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3831
4048
  "useSession: SessionSnapshotSelector",
3832
4049
  "sessionId: SessionId",
3833
4050
  "useProjection: UseProjection",
4051
+ "useAccess: (action: RemoteEndpoint) => boolean",
3834
4052
  "useTrajectory: UseTrajectory"
3835
4053
  ],
3836
4054
  keyDomain: "",
@@ -3842,6 +4060,57 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3842
4060
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.trajectory.images', () => ctx.slots.register(\n { name: 'conversation.trajectory.images' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3843
4061
  source: "packages/client/ui-trajectory/src/client/trajectory-contract.ts:103"
3844
4062
  },
4063
+ {
4064
+ key: "conversation.user.text.node",
4065
+ kind: "keyed",
4066
+ scope: "session",
4067
+ summary: "One business-owned inline renderer for a pure JSON text node.",
4068
+ doc: "One business-owned inline renderer for a pure JSON text node.",
4069
+ registerOptions: [{
4070
+ name: "key",
4071
+ requirement: "required",
4072
+ type: "string",
4073
+ doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
4074
+ }],
4075
+ ownerProps: ["/** JSON-only owner data common to every business text node. */\nexport interface UserTextNodeOwnerProps {\n readonly raw: string\n readonly interactive: boolean\n}"],
4076
+ ownerPropsReferences: [],
4077
+ standardProps: [
4078
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4079
+ "useResource: UseResource",
4080
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4081
+ "usePanelInfo: UsePanelInfo",
4082
+ "useSessions: UseSessions",
4083
+ "useSessionStatus: UseSessionStatus",
4084
+ "useSessionRetainInfo: UseSessionRetainInfo",
4085
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4086
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
4087
+ "useChat: UseChat",
4088
+ "useConversation: UseConversation",
4089
+ "useInput: SnapshotSelectorHook<InputState>",
4090
+ "inputActions: InputActions",
4091
+ "useSession: SessionSnapshotSelector",
4092
+ "sessionId: SessionId",
4093
+ "useProjection: UseProjection",
4094
+ "useAccess: (action: RemoteEndpoint) => boolean",
4095
+ "useTrajectory: UseTrajectory"
4096
+ ],
4097
+ keyDomain: "fixed by the owner's key table { [Id in UserTextId]: { node: UserTextNode<Id> } }, already taken: command, file, folder, secret, session, skill, text",
4098
+ hookContext: "",
4099
+ slotInject: "",
4100
+ declaredBy: "factory 'conversation.user.text' (client-ui-conversation), so it exists while that definition is registered",
4101
+ occupants: [
4102
+ "client-ui-conversation PlainUserText key 'text'",
4103
+ "client-ui-conversation SessionReference key 'session'",
4104
+ "client-ui-goal GoalCommandReference key 'command'",
4105
+ "client-ui-reference FileReference key 'file'",
4106
+ "client-ui-reference FolderReference key 'folder'",
4107
+ "client-ui-secret-mask SecretText key 'secret'",
4108
+ "client-ui-skill SkillReference key 'skill'"
4109
+ ],
4110
+ replaceRisk: "shadows-shipped-ui",
4111
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.user.text.node', () => ctx.slots.register(\n { name: 'conversation.user.text.node', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4112
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:196"
4113
+ },
3845
4114
  {
3846
4115
  key: "conversation.view",
3847
4116
  kind: "list",
@@ -3871,13 +4140,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3871
4140
  ownerProps: ["/** Conversation View entries obtain their data from registered standard hooks. */\nexport interface ConvViewOwnerProps {\n /** Open a tool call's inspector when an inspection target is available. */\n inspectCall: ((callId: string) => void) | undefined\n /** Focus request addressed to the selected View. */\n viewRequest: import('./views.ts').ConversationViewRequest | null\n /** Select a View and address one opaque focus identity to it. */\n openView: (view: string, focus: string) => void\n /** Acknowledge the current one-shot focus request. */\n completeViewRequest: () => void\n}"],
3872
4141
  ownerPropsReferences: ["ConversationViewRequest"],
3873
4142
  standardProps: [
4143
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3874
4144
  "useResource: UseResource",
3875
4145
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3876
4146
  "usePanelInfo: UsePanelInfo",
3877
4147
  "useSessions: UseSessions",
3878
4148
  "useSessionStatus: UseSessionStatus",
3879
4149
  "useSessionRetainInfo: UseSessionRetainInfo",
3880
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4150
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4151
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3881
4152
  "useChat: UseChat",
3882
4153
  "useConversation: UseConversation",
3883
4154
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3885,6 +4156,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3885
4156
  "useSession: SessionSnapshotSelector",
3886
4157
  "sessionId: SessionId",
3887
4158
  "useProjection: UseProjection",
4159
+ "useAccess: (action: RemoteEndpoint) => boolean",
3888
4160
  "useTrajectory: UseTrajectory"
3889
4161
  ],
3890
4162
  keyDomain: "",
@@ -3894,7 +4166,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3894
4166
  occupants: ["client-ui-chat ChatView id 'chat'", "client-ui-trajectory TrajectoryView id 'trajectory'"],
3895
4167
  replaceRisk: "none",
3896
4168
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.view', () => ctx.slots.register(\n { name: 'conversation.view', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3897
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:185"
4169
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:258"
3898
4170
  },
3899
4171
  {
3900
4172
  key: "deliverables.file.actions",
@@ -3925,13 +4197,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3925
4197
  ownerProps: ["/** Native file action selected by an explicit user gesture. */\nexport type PresentedAction = 'open' | 'reveal'", "/** Failure feedback for the shared native opening control. */\nexport type PresentedOpenFailure = 'openError' | 'revealError' | null"],
3926
4198
  ownerPropsReferences: [],
3927
4199
  standardProps: [
4200
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3928
4201
  "useResource: UseResource",
3929
4202
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3930
4203
  "usePanelInfo: UsePanelInfo",
3931
4204
  "useSessions: UseSessions",
3932
4205
  "useSessionStatus: UseSessionStatus",
3933
4206
  "useSessionRetainInfo: UseSessionRetainInfo",
3934
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4207
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4208
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3935
4209
  "useChat: UseChat",
3936
4210
  "useConversation: UseConversation",
3937
4211
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3939,6 +4213,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3939
4213
  "useSession: SessionSnapshotSelector",
3940
4214
  "sessionId: SessionId",
3941
4215
  "useProjection: UseProjection",
4216
+ "useAccess: (action: RemoteEndpoint) => boolean",
3942
4217
  "useTrajectory: UseTrajectory"
3943
4218
  ],
3944
4219
  keyDomain: "",
@@ -3979,13 +4254,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3979
4254
  ownerProps: ["/** Slot contract table. Owners extend via declaration merging; entries are {@link SlotEntryDef}. */\nexport interface SlotMap {}"],
3980
4255
  ownerPropsReferences: ["SlotEntryDef"],
3981
4256
  standardProps: [
4257
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3982
4258
  "useResource: UseResource",
3983
4259
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3984
4260
  "usePanelInfo: UsePanelInfo",
3985
4261
  "useSessions: UseSessions",
3986
4262
  "useSessionStatus: UseSessionStatus",
3987
4263
  "useSessionRetainInfo: UseSessionRetainInfo",
3988
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4264
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4265
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3989
4266
  "useChat: UseChat",
3990
4267
  "useConversation: UseConversation",
3991
4268
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3993,6 +4270,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3993
4270
  "useSession: SessionSnapshotSelector",
3994
4271
  "sessionId: SessionId",
3995
4272
  "useProjection: UseProjection",
4273
+ "useAccess: (action: RemoteEndpoint) => boolean",
3996
4274
  "useTrajectory: UseTrajectory"
3997
4275
  ],
3998
4276
  keyDomain: "",
@@ -4019,13 +4297,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4019
4297
  ownerProps: [],
4020
4298
  ownerPropsReferences: [],
4021
4299
  standardProps: [
4300
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4022
4301
  "useResource: UseResource",
4023
4302
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4024
4303
  "usePanelInfo: UsePanelInfo",
4025
4304
  "useSessions: UseSessions",
4026
4305
  "useSessionStatus: UseSessionStatus",
4027
4306
  "useSessionRetainInfo: UseSessionRetainInfo",
4028
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4307
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4308
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4029
4309
  ],
4030
4310
  keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: conversation",
4031
4311
  hookContext: "",
@@ -4050,19 +4330,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4050
4330
  ownerProps: [],
4051
4331
  ownerPropsReferences: [],
4052
4332
  standardProps: [
4333
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4053
4334
  "useResource: UseResource",
4054
4335
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4055
4336
  "usePanelInfo: UsePanelInfo",
4056
4337
  "useSessions: UseSessions",
4057
4338
  "useSessionStatus: UseSessionStatus",
4058
4339
  "useSessionRetainInfo: UseSessionRetainInfo",
4059
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4340
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4341
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
4060
4342
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
4061
4343
  "useInput: MaybeSnapshotSelectorHook<InputState>",
4062
4344
  "inputActions: InputActions | undefined",
4063
4345
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
4064
4346
  "sessionId: SessionId | undefined",
4065
- "useProjection: UseProjection"
4347
+ "useProjection: UseProjection",
4348
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
4066
4349
  ],
4067
4350
  keyDomain: "",
4068
4351
  hookContext: "",
@@ -4071,7 +4354,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4071
4354
  occupants: ["client-ui-conversation ConversationRoot"],
4072
4355
  replaceRisk: "shadows-shipped-ui",
4073
4356
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('main.conversation', () => ctx.slots.register(\n { name: 'main.conversation' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4074
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:131"
4357
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:204"
4075
4358
  },
4076
4359
  {
4077
4360
  key: "plugins.add.actions",
@@ -4102,13 +4385,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4102
4385
  ownerProps: ["/** Add-plugin menu actions, independent of any selected bundle or Session. */\nexport interface PluginAddActionsProps {\n /** Close the add-plugin menu before starting the contributed action. */\n readonly onDismiss: () => void\n}"],
4103
4386
  ownerPropsReferences: [],
4104
4387
  standardProps: [
4388
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4105
4389
  "useResource: UseResource",
4106
4390
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4107
4391
  "usePanelInfo: UsePanelInfo",
4108
4392
  "useSessions: UseSessions",
4109
4393
  "useSessionStatus: UseSessionStatus",
4110
4394
  "useSessionRetainInfo: UseSessionRetainInfo",
4111
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4395
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4396
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4112
4397
  ],
4113
4398
  keyDomain: "",
4114
4399
  hookContext: "",
@@ -4134,13 +4419,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4134
4419
  ownerProps: ["/** One user-requested bundle activation and navigation to its configuration page. */\nexport interface PluginActivationOwnerProps {\n readonly packageName: string\n /** Dismiss guidance for this activation. */\n readonly onDismiss: () => void\n /** Dismiss guidance and open this bundle's detail page. */\n readonly onOpenDetails: () => void\n}"],
4135
4420
  ownerPropsReferences: [],
4136
4421
  standardProps: [
4422
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4137
4423
  "useResource: UseResource",
4138
4424
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4139
4425
  "usePanelInfo: UsePanelInfo",
4140
4426
  "useSessions: UseSessions",
4141
4427
  "useSessionStatus: UseSessionStatus",
4142
4428
  "useSessionRetainInfo: UseSessionRetainInfo",
4143
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4429
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4430
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4144
4431
  ],
4145
4432
  keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: @deepseek-ai/dsh-experimental-voice-input-bundle",
4146
4433
  hookContext: "",
@@ -4166,13 +4453,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4166
4453
  ownerProps: ["/** The view the page asks a configuration entry for. */\nexport interface PluginConfigViewProps {\n /** `summary` renders the one-liner alone, as text or inline nodes; `page` renders the form with its save control. */\n readonly view: 'summary' | 'page'\n /** Host-owned configuration values and write actions for this page's entry. */\n readonly form?: ConfigPageForm | undefined\n}"],
4167
4454
  ownerPropsReferences: ["ConfigPageForm"],
4168
4455
  standardProps: [
4456
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4169
4457
  "useResource: UseResource",
4170
4458
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4171
4459
  "usePanelInfo: UsePanelInfo",
4172
4460
  "useSessions: UseSessions",
4173
4461
  "useSessionStatus: UseSessionStatus",
4174
4462
  "useSessionRetainInfo: UseSessionRetainInfo",
4175
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4463
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4464
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4176
4465
  ],
4177
4466
  keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: @deepseek-ai/dsh-experimental-cot-translation-bundle, @deepseek-ai/dsh-experimental-voice-input-bundle",
4178
4467
  hookContext: "",
@@ -4212,13 +4501,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4212
4501
  ownerProps: ["/** The owner props every detail contribution is rendered with. */\nexport interface PluginDetailProps {\n /** The subject of the open page; an entry renders null for a subject it has nothing for. */\n readonly subject: PluginsSubject\n}"],
4213
4502
  ownerPropsReferences: ["PluginsSubject"],
4214
4503
  standardProps: [
4504
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4215
4505
  "useResource: UseResource",
4216
4506
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4217
4507
  "usePanelInfo: UsePanelInfo",
4218
4508
  "useSessions: UseSessions",
4219
4509
  "useSessionStatus: UseSessionStatus",
4220
4510
  "useSessionRetainInfo: UseSessionRetainInfo",
4221
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4511
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4512
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4222
4513
  ],
4223
4514
  keyDomain: "",
4224
4515
  hookContext: "",
@@ -4258,13 +4549,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4258
4549
  ownerProps: ["/** The owner props every detail contribution is rendered with. */\nexport interface PluginDetailProps {\n /** The subject of the open page; an entry renders null for a subject it has nothing for. */\n readonly subject: PluginsSubject\n}"],
4259
4550
  ownerPropsReferences: ["PluginsSubject"],
4260
4551
  standardProps: [
4552
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4261
4553
  "useResource: UseResource",
4262
4554
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4263
4555
  "usePanelInfo: UsePanelInfo",
4264
4556
  "useSessions: UseSessions",
4265
4557
  "useSessionStatus: UseSessionStatus",
4266
4558
  "useSessionRetainInfo: UseSessionRetainInfo",
4267
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4559
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4560
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4268
4561
  ],
4269
4562
  keyDomain: "",
4270
4563
  hookContext: "",
@@ -4304,13 +4597,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4304
4597
  ownerProps: ["/** The owner props every detail contribution is rendered with. */\nexport interface PluginDetailProps {\n /** The subject of the open page; an entry renders null for a subject it has nothing for. */\n readonly subject: PluginsSubject\n}"],
4305
4598
  ownerPropsReferences: ["PluginsSubject"],
4306
4599
  standardProps: [
4600
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4307
4601
  "useResource: UseResource",
4308
4602
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4309
4603
  "usePanelInfo: UsePanelInfo",
4310
4604
  "useSessions: UseSessions",
4311
4605
  "useSessionStatus: UseSessionStatus",
4312
4606
  "useSessionRetainInfo: UseSessionRetainInfo",
4313
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4607
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4608
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4314
4609
  ],
4315
4610
  keyDomain: "",
4316
4611
  hookContext: "",
@@ -4350,13 +4645,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4350
4645
  ownerProps: ["/** The view the page asks a configuration entry for. */\nexport interface PluginConfigViewProps {\n /** `summary` renders the one-liner alone, as text or inline nodes; `page` renders the form with its save control. */\n readonly view: 'summary' | 'page'\n /** Host-owned configuration values and write actions for this page's entry. */\n readonly form?: ConfigPageForm | undefined\n}"],
4351
4646
  ownerPropsReferences: ["ConfigPageForm"],
4352
4647
  standardProps: [
4648
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4353
4649
  "useResource: UseResource",
4354
4650
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4355
4651
  "usePanelInfo: UsePanelInfo",
4356
4652
  "useSessions: UseSessions",
4357
4653
  "useSessionStatus: UseSessionStatus",
4358
4654
  "useSessionRetainInfo: UseSessionRetainInfo",
4359
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4655
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4656
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4360
4657
  ],
4361
4658
  keyDomain: "",
4362
4659
  hookContext: "",
@@ -4387,13 +4684,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4387
4684
  ownerProps: ["/** The view the page asks a configuration entry for. */\nexport interface PluginConfigViewProps {\n /** `summary` renders the one-liner alone, as text or inline nodes; `page` renders the form with its save control. */\n readonly view: 'summary' | 'page'\n /** Host-owned configuration values and write actions for this page's entry. */\n readonly form?: ConfigPageForm | undefined\n}"],
4388
4685
  ownerPropsReferences: ["ConfigPageForm"],
4389
4686
  standardProps: [
4687
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4390
4688
  "useResource: UseResource",
4391
4689
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4392
4690
  "usePanelInfo: UsePanelInfo",
4393
4691
  "useSessions: UseSessions",
4394
4692
  "useSessionStatus: UseSessionStatus",
4395
4693
  "useSessionRetainInfo: UseSessionRetainInfo",
4396
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4694
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4695
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4397
4696
  ],
4398
4697
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4399
4698
  hookContext: "",
@@ -4414,13 +4713,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4414
4713
  ownerProps: ["/** Right column owner share: resolved normal geometry and opening eligibility. */\nexport interface RightbarOwnerProps {\n /** Resolved normal panel width in px, not the saved preference; zero if it cannot fit. */\n width: number\n /** Current frame width in px. */\n viewportWidth: number\n /**\n * Whether a normal right panel can retain 300px beside a 400px center.\n * Before a narrow opening, includes the space from collapsing the left sidebar.\n */\n canShow: boolean\n}"],
4415
4714
  ownerPropsReferences: [],
4416
4715
  standardProps: [
4716
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4417
4717
  "useResource: UseResource",
4418
4718
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4419
4719
  "usePanelInfo: UsePanelInfo",
4420
4720
  "useSessions: UseSessions",
4421
4721
  "useSessionStatus: UseSessionStatus",
4422
4722
  "useSessionRetainInfo: UseSessionRetainInfo",
4423
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4723
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4724
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4424
4725
  ],
4425
4726
  keyDomain: "",
4426
4727
  hookContext: "",
@@ -4441,13 +4742,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4441
4742
  ownerProps: ["/** Right column owner share: resolved normal geometry and opening eligibility. */\nexport interface RightbarOwnerProps {\n /** Resolved normal panel width in px, not the saved preference; zero if it cannot fit. */\n width: number\n /** Current frame width in px. */\n viewportWidth: number\n /**\n * Whether a normal right panel can retain 300px beside a 400px center.\n * Before a narrow opening, includes the space from collapsing the left sidebar.\n */\n canShow: boolean\n}", "/** Identity of one open tab; distinct copies of one content share `contentId`, never `TabId`. */\nexport type TabId = Branded<'TabId'>"],
4442
4743
  ownerPropsReferences: ["Branded"],
4443
4744
  standardProps: [
4745
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4444
4746
  "useResource: UseResource",
4445
4747
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4446
4748
  "usePanelInfo: UsePanelInfo",
4447
4749
  "useSessions: UseSessions",
4448
4750
  "useSessionStatus: UseSessionStatus",
4449
4751
  "useSessionRetainInfo: UseSessionRetainInfo",
4450
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4752
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4753
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
4451
4754
  "useChat: UseChat",
4452
4755
  "useConversation: UseConversation",
4453
4756
  "useInput: SnapshotSelectorHook<InputState>",
@@ -4455,6 +4758,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4455
4758
  "useSession: SessionSnapshotSelector",
4456
4759
  "sessionId: SessionId",
4457
4760
  "useProjection: UseProjection",
4761
+ "useAccess: (action: RemoteEndpoint) => boolean",
4458
4762
  "useTrajectory: UseTrajectory"
4459
4763
  ],
4460
4764
  keyDomain: "",
@@ -4476,13 +4780,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4476
4780
  ownerProps: ["/** Root owner share: the shell supplies nothing — the frame is inject-assembled. */\nexport interface RootOwnerProps { children?: never }"],
4477
4781
  ownerPropsReferences: [],
4478
4782
  standardProps: [
4783
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4479
4784
  "useResource: UseResource",
4480
4785
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4481
4786
  "usePanelInfo: UsePanelInfo",
4482
4787
  "useSessions: UseSessions",
4483
4788
  "useSessionStatus: UseSessionStatus",
4484
4789
  "useSessionRetainInfo: UseSessionRetainInfo",
4485
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4790
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4791
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4486
4792
  ],
4487
4793
  keyDomain: "",
4488
4794
  hookContext: "",
@@ -4522,13 +4828,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4522
4828
  ownerProps: ["/** Owner share of the header title seat (the shell supplies nothing). */\nexport interface SettingsHeaderOwnerProps {\n /** Marker field: header owner props are intentionally empty. */\n children?: never\n}"],
4523
4829
  ownerPropsReferences: [],
4524
4830
  standardProps: [
4831
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4525
4832
  "useResource: UseResource",
4526
4833
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4527
4834
  "usePanelInfo: UsePanelInfo",
4528
4835
  "useSessions: UseSessions",
4529
4836
  "useSessionStatus: UseSessionStatus",
4530
4837
  "useSessionRetainInfo: UseSessionRetainInfo",
4531
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4838
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4839
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4532
4840
  ],
4533
4841
  keyDomain: "",
4534
4842
  hookContext: "",
@@ -4549,13 +4857,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4549
4857
  ownerProps: ["/** Owner share of the header title seat (the shell supplies nothing). */\nexport interface SettingsHeaderOwnerProps {\n /** Marker field: header owner props are intentionally empty. */\n children?: never\n}"],
4550
4858
  ownerPropsReferences: [],
4551
4859
  standardProps: [
4860
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4552
4861
  "useResource: UseResource",
4553
4862
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4554
4863
  "usePanelInfo: UsePanelInfo",
4555
4864
  "useSessions: UseSessions",
4556
4865
  "useSessionStatus: UseSessionStatus",
4557
4866
  "useSessionRetainInfo: UseSessionRetainInfo",
4558
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4867
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4868
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4559
4869
  ],
4560
4870
  keyDomain: "",
4561
4871
  hookContext: "",
@@ -4595,13 +4905,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4595
4905
  ownerProps: ["/** Owner share of a General preference row (the section supplies nothing). */\nexport interface SettingsGeneralItemOwnerProps {\n /** Marker field: item owner props are intentionally empty. */\n children?: never\n}"],
4596
4906
  ownerPropsReferences: [],
4597
4907
  standardProps: [
4908
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4598
4909
  "useResource: UseResource",
4599
4910
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4600
4911
  "usePanelInfo: UsePanelInfo",
4601
4912
  "useSessions: UseSessions",
4602
4913
  "useSessionStatus: UseSessionStatus",
4603
4914
  "useSessionRetainInfo: UseSessionRetainInfo",
4604
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4915
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4916
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4605
4917
  ],
4606
4918
  keyDomain: "",
4607
4919
  hookContext: "",
@@ -4635,13 +4947,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4635
4947
  ownerProps: ["/** Owner share of the header title seat (the shell supplies nothing). */\nexport interface SettingsHeaderOwnerProps {\n /** Marker field: header owner props are intentionally empty. */\n children?: never\n}"],
4636
4948
  ownerPropsReferences: [],
4637
4949
  standardProps: [
4950
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4638
4951
  "useResource: UseResource",
4639
4952
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4640
4953
  "usePanelInfo: UsePanelInfo",
4641
4954
  "useSessions: UseSessions",
4642
4955
  "useSessionStatus: UseSessionStatus",
4643
4956
  "useSessionRetainInfo: UseSessionRetainInfo",
4644
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4957
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4958
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4645
4959
  ],
4646
4960
  keyDomain: "",
4647
4961
  hookContext: "",
@@ -4662,13 +4976,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4662
4976
  ownerProps: ["/** Sidebar launcher geometry and settings navigation. */\nexport interface SettingsLauncherOwnerProps {\n /** Whether the sidebar shows labels. */\n wide: boolean\n /** Whether the settings dialog covers the sidebar; a launcher may treat a false-to-true edge as one Settings entry. */\n settingsOpen: boolean\n /** Effective Settings key labels and accessible combination; omitted when unbound. */\n settingsShortcut?: { readonly keys: readonly string[]; readonly aria?: string | undefined }\n /** Open the settings panel. */\n openSettings: () => void\n /** @param id - registered onboarding editor to open explicitly. */\n openOnboarding: (id: string) => void\n}"],
4663
4977
  ownerPropsReferences: [],
4664
4978
  standardProps: [
4979
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4665
4980
  "useResource: UseResource",
4666
4981
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4667
4982
  "usePanelInfo: UsePanelInfo",
4668
4983
  "useSessions: UseSessions",
4669
4984
  "useSessionStatus: UseSessionStatus",
4670
4985
  "useSessionRetainInfo: UseSessionRetainInfo",
4671
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4986
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4987
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4672
4988
  ],
4673
4989
  keyDomain: "",
4674
4990
  hookContext: "",
@@ -4708,13 +5024,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4708
5024
  ownerProps: ["/** Owner share of the footer area (the section supplies nothing). */\nexport interface ModelsFooterOwnerProps {\n /** Marker field: footer owner props are intentionally empty. */\n children?: never\n}"],
4709
5025
  ownerPropsReferences: [],
4710
5026
  standardProps: [
5027
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4711
5028
  "useResource: UseResource",
4712
5029
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4713
5030
  "usePanelInfo: UsePanelInfo",
4714
5031
  "useSessions: UseSessions",
4715
5032
  "useSessionStatus: UseSessionStatus",
4716
5033
  "useSessionRetainInfo: UseSessionRetainInfo",
4717
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5034
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5035
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4718
5036
  ],
4719
5037
  keyDomain: "",
4720
5038
  hookContext: "",
@@ -4740,13 +5058,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4740
5058
  ownerProps: ["/** Owner share of one provider-card extension occurrence. */\nexport interface ProviderCardExtrasOwnerProps {\n /** The card's directory row (route id, display name, settings address, live state). */\n provider: ProviderDirectoryEntry\n /** Whether any layer configures this provider (its profile resolves); `false` while the add-provider draft edits a dormant row. */\n configured: boolean\n /** Whether the row's referenced api-key credential is confirmed configured (the page's credential join). */\n keyConfigured: boolean\n}"],
4741
5059
  ownerPropsReferences: ["ProviderDirectoryEntry"],
4742
5060
  standardProps: [
5061
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4743
5062
  "useResource: UseResource",
4744
5063
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4745
5064
  "usePanelInfo: UsePanelInfo",
4746
5065
  "useSessions: UseSessions",
4747
5066
  "useSessionStatus: UseSessionStatus",
4748
5067
  "useSessionRetainInfo: UseSessionRetainInfo",
4749
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5068
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5069
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4750
5070
  ],
4751
5071
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4752
5072
  hookContext: "",
@@ -4767,13 +5087,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4767
5087
  ownerProps: [],
4768
5088
  ownerPropsReferences: [],
4769
5089
  standardProps: [
5090
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4770
5091
  "useResource: UseResource",
4771
5092
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4772
5093
  "usePanelInfo: UsePanelInfo",
4773
5094
  "useSessions: UseSessions",
4774
5095
  "useSessionStatus: UseSessionStatus",
4775
5096
  "useSessionRetainInfo: UseSessionRetainInfo",
4776
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5097
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5098
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4777
5099
  ],
4778
5100
  keyDomain: "",
4779
5101
  hookContext: "",
@@ -4813,13 +5135,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4813
5135
  ownerProps: ["/** Owner share of the currently active settings-backed onboarding step. */\nexport interface SettingsOnboardingOwnerProps {\n /** Stable id of the step currently selected by the coordinator. */\n stepId: string\n /** User explicitly reopened this step outside first-run onboarding. */\n explicit?: boolean\n /** Complete or skip this step and transfer ownership to the next entry. */\n complete: () => void\n /** Open the settings panel directly on one registered section. */\n openSection: (id: string) => void\n}"],
4814
5136
  ownerPropsReferences: [],
4815
5137
  standardProps: [
5138
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4816
5139
  "useResource: UseResource",
4817
5140
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4818
5141
  "usePanelInfo: UsePanelInfo",
4819
5142
  "useSessions: UseSessions",
4820
5143
  "useSessionStatus: UseSessionStatus",
4821
5144
  "useSessionRetainInfo: UseSessionRetainInfo",
4822
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5145
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5146
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4823
5147
  ],
4824
5148
  keyDomain: "",
4825
5149
  hookContext: "",
@@ -4859,13 +5183,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4859
5183
  ownerProps: ["/** Owner share of a Plugins tab (the section supplies nothing). */\nexport interface SettingsPluginsTabOwnerProps {\n /** Marker field: tab owner props are intentionally empty. */\n children?: never\n}"],
4860
5184
  ownerPropsReferences: [],
4861
5185
  standardProps: [
5186
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4862
5187
  "useResource: UseResource",
4863
5188
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4864
5189
  "usePanelInfo: UsePanelInfo",
4865
5190
  "useSessions: UseSessions",
4866
5191
  "useSessionStatus: UseSessionStatus",
4867
5192
  "useSessionRetainInfo: UseSessionRetainInfo",
4868
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5193
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5194
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4869
5195
  ],
4870
5196
  keyDomain: "",
4871
5197
  hookContext: "",
@@ -4905,13 +5231,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4905
5231
  ownerProps: ["/**\n * Owner share of a settings section entry. The shell owns modal visibility\n * and navigation; a section's data arrives through its own inject faces and\n * stores. `close` is the one shell affordance a section receives, for flows\n * that leave settings altogether (starting a session from a section) — the\n * onboarding coordinator's `openSection`/`complete` precedent, inverted.\n */\nexport interface SettingsSectionOwnerProps {\n /** Close the settings panel (the shell owns the open state). */\n close: () => void\n}"],
4906
5232
  ownerPropsReferences: [],
4907
5233
  standardProps: [
5234
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4908
5235
  "useResource: UseResource",
4909
5236
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4910
5237
  "usePanelInfo: UsePanelInfo",
4911
5238
  "useSessions: UseSessions",
4912
5239
  "useSessionStatus: UseSessionStatus",
4913
5240
  "useSessionRetainInfo: UseSessionRetainInfo",
4914
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5241
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5242
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4915
5243
  ],
4916
5244
  keyDomain: "",
4917
5245
  hookContext: "",
@@ -4938,13 +5266,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4938
5266
  ownerProps: ["/** Owner share of the trigger content seat: the sidebar column state. */\nexport interface SettingsTriggerOwnerProps {\n /** Whether the sidebar renders wide content (false = 56px rail, icon only). */\n wide: boolean\n}"],
4939
5267
  ownerPropsReferences: [],
4940
5268
  standardProps: [
5269
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4941
5270
  "useResource: UseResource",
4942
5271
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4943
5272
  "usePanelInfo: UsePanelInfo",
4944
5273
  "useSessions: UseSessions",
4945
5274
  "useSessionStatus: UseSessionStatus",
4946
5275
  "useSessionRetainInfo: UseSessionRetainInfo",
4947
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5276
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5277
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4948
5278
  ],
4949
5279
  keyDomain: "",
4950
5280
  hookContext: "",
@@ -4965,13 +5295,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4965
5295
  ownerProps: [],
4966
5296
  ownerPropsReferences: [],
4967
5297
  standardProps: [
5298
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4968
5299
  "useResource: UseResource",
4969
5300
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4970
5301
  "usePanelInfo: UsePanelInfo",
4971
5302
  "useSessions: UseSessions",
4972
5303
  "useSessionStatus: UseSessionStatus",
4973
5304
  "useSessionRetainInfo: UseSessionRetainInfo",
4974
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5305
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5306
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4975
5307
  ],
4976
5308
  keyDomain: "",
4977
5309
  hookContext: "",
@@ -4992,13 +5324,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4992
5324
  ownerProps: [],
4993
5325
  ownerPropsReferences: [],
4994
5326
  standardProps: [
5327
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4995
5328
  "useResource: UseResource",
4996
5329
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4997
5330
  "usePanelInfo: UsePanelInfo",
4998
5331
  "useSessions: UseSessions",
4999
5332
  "useSessionStatus: UseSessionStatus",
5000
5333
  "useSessionRetainInfo: UseSessionRetainInfo",
5001
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5334
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5335
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5002
5336
  ],
5003
5337
  keyDomain: "",
5004
5338
  hookContext: "",
@@ -5038,13 +5372,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5038
5372
  ownerProps: [],
5039
5373
  ownerPropsReferences: [],
5040
5374
  standardProps: [
5375
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5041
5376
  "useResource: UseResource",
5042
5377
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5043
5378
  "usePanelInfo: UsePanelInfo",
5044
5379
  "useSessions: UseSessions",
5045
5380
  "useSessionStatus: UseSessionStatus",
5046
5381
  "useSessionRetainInfo: UseSessionRetainInfo",
5047
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5382
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5383
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5048
5384
  ],
5049
5385
  keyDomain: "",
5050
5386
  hookContext: "",
@@ -5081,13 +5417,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5081
5417
  ownerProps: ["/** Owner currency of one quota notice offered to the frame-wide chain. */\nexport interface QuotaNoticeOwnerProps {\n /** Stable failure code retained in the Session log. */\n code: QuotaNoticeCode\n /** Provider-neutral notice copy in the active locale. */\n message: string\n /** Take the notice down. */\n dismiss: () => void\n /**\n * Prevent later quota failures from replacing this notice. Dismissal clears\n * all holds; releasing the last hold resumes future notices without replay.\n * Callers must release on unmount.\n * @returns idempotent release that cannot clear another hold.\n */\n keepOpen: () => () => void\n}"],
5082
5418
  ownerPropsReferences: ["QuotaNoticeCode"],
5083
5419
  standardProps: [
5420
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5084
5421
  "useResource: UseResource",
5085
5422
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5086
5423
  "usePanelInfo: UsePanelInfo",
5087
5424
  "useSessions: UseSessions",
5088
5425
  "useSessionStatus: UseSessionStatus",
5089
5426
  "useSessionRetainInfo: UseSessionRetainInfo",
5090
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5427
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5428
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5091
5429
  ],
5092
5430
  keyDomain: "",
5093
5431
  hookContext: "",
@@ -5096,7 +5434,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5096
5434
  occupants: ["client-ui-settings-account AccountQuotaNotice"],
5097
5435
  replaceRisk: "none",
5098
5436
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('shell.quota-notice', () => ctx.slots.register(\n { name: 'shell.quota-notice', select: owner => null },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5099
- source: "packages/client/ui-chat/src/client/contract/slots.ts:422"
5437
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:449"
5100
5438
  },
5101
5439
  {
5102
5440
  key: "sidebar",
@@ -5108,13 +5446,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5108
5446
  ownerProps: ["/** Sidebar owner share: live column state from the frame's concession solve. */\nexport interface SidebarOwnerProps {\n /** True when the sidebar is closed (the column renders the compact control rail). */\n collapsed: boolean\n /** Rendered column width in px (SIDEBAR_COLLAPSED when collapsed). */\n width: number\n}"],
5109
5447
  ownerPropsReferences: [],
5110
5448
  standardProps: [
5449
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5111
5450
  "useResource: UseResource",
5112
5451
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5113
5452
  "usePanelInfo: UsePanelInfo",
5114
5453
  "useSessions: UseSessions",
5115
5454
  "useSessionStatus: UseSessionStatus",
5116
5455
  "useSessionRetainInfo: UseSessionRetainInfo",
5117
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5456
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5457
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5118
5458
  ],
5119
5459
  keyDomain: "",
5120
5460
  hookContext: "",
@@ -5135,13 +5475,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5135
5475
  ownerProps: ["/** Geometry supplied to the sidebar brand-mark occupant. */\nexport interface SidebarBrandMarkOwnerProps {\n /** Requested square edge in pixels. */\n size: number\n}"],
5136
5476
  ownerPropsReferences: [],
5137
5477
  standardProps: [
5478
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5138
5479
  "useResource: UseResource",
5139
5480
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5140
5481
  "usePanelInfo: UsePanelInfo",
5141
5482
  "useSessions: UseSessions",
5142
5483
  "useSessionStatus: UseSessionStatus",
5143
5484
  "useSessionRetainInfo: UseSessionRetainInfo",
5144
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5485
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5486
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5145
5487
  ],
5146
5488
  keyDomain: "",
5147
5489
  hookContext: "",
@@ -5162,13 +5504,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5162
5504
  ownerProps: ["/** Empty owner share for the sidebar brand-name occupant. */\nexport interface SidebarBrandNameOwnerProps {\n /** Marker field: the occupant owns its own content and width. */\n children?: never\n}"],
5163
5505
  ownerPropsReferences: [],
5164
5506
  standardProps: [
5507
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5165
5508
  "useResource: UseResource",
5166
5509
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5167
5510
  "usePanelInfo: UsePanelInfo",
5168
5511
  "useSessions: UseSessions",
5169
5512
  "useSessionStatus: UseSessionStatus",
5170
5513
  "useSessionRetainInfo: UseSessionRetainInfo",
5171
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5514
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5515
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5172
5516
  ],
5173
5517
  keyDomain: "",
5174
5518
  hookContext: "",
@@ -5189,13 +5533,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5189
5533
  ownerProps: [],
5190
5534
  ownerPropsReferences: [],
5191
5535
  standardProps: [
5536
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5192
5537
  "useResource: UseResource",
5193
5538
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5194
5539
  "usePanelInfo: UsePanelInfo",
5195
5540
  "useSessions: UseSessions",
5196
5541
  "useSessionStatus: UseSessionStatus",
5197
5542
  "useSessionRetainInfo: UseSessionRetainInfo",
5198
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5543
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5544
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5199
5545
  "useChat: UseChat",
5200
5546
  "useConversation: UseConversation",
5201
5547
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5203,6 +5549,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5203
5549
  "useSession: SessionSnapshotSelector",
5204
5550
  "sessionId: SessionId",
5205
5551
  "useProjection: UseProjection",
5552
+ "useAccess: (action: RemoteEndpoint) => boolean",
5206
5553
  "useTrajectory: UseTrajectory"
5207
5554
  ],
5208
5555
  keyDomain: "",
@@ -5243,13 +5590,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5243
5590
  ownerProps: ["/** Owner share of an action rendered beside Settings at the sidebar foot. */\nexport interface SidebarFooterActionOwnerProps {\n /** Whether the sidebar renders wide content (false = 56px rail). */\n wide: boolean\n}"],
5244
5591
  ownerPropsReferences: [],
5245
5592
  standardProps: [
5593
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5246
5594
  "useResource: UseResource",
5247
5595
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5248
5596
  "usePanelInfo: UsePanelInfo",
5249
5597
  "useSessions: UseSessions",
5250
5598
  "useSessionStatus: UseSessionStatus",
5251
5599
  "useSessionRetainInfo: UseSessionRetainInfo",
5252
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5600
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5601
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5253
5602
  ],
5254
5603
  keyDomain: "",
5255
5604
  hookContext: "",
@@ -5289,13 +5638,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5289
5638
  ownerProps: ["/** Icon presentation supplied by the global panel row. */\nexport interface SidebarPanelIconOwnerProps {\n /** Requested square edge in pixels. */\n size: number\n /** Whether this panel is selected in the main column. */\n active: boolean\n}"],
5290
5639
  ownerPropsReferences: [],
5291
5640
  standardProps: [
5641
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5292
5642
  "useResource: UseResource",
5293
5643
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5294
5644
  "usePanelInfo: UsePanelInfo",
5295
5645
  "useSessions: UseSessions",
5296
5646
  "useSessionStatus: UseSessionStatus",
5297
5647
  "useSessionRetainInfo: UseSessionRetainInfo",
5298
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5648
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5649
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5299
5650
  ],
5300
5651
  keyDomain: "",
5301
5652
  hookContext: "",
@@ -5321,13 +5672,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5321
5672
  ownerProps: [],
5322
5673
  ownerPropsReferences: [],
5323
5674
  standardProps: [
5675
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5324
5676
  "useResource: UseResource",
5325
5677
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5326
5678
  "usePanelInfo: UsePanelInfo",
5327
5679
  "useSessions: UseSessions",
5328
5680
  "useSessionStatus: UseSessionStatus",
5329
5681
  "useSessionRetainInfo: UseSessionRetainInfo",
5330
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5682
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5683
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5331
5684
  "useChat: UseChat",
5332
5685
  "useConversation: UseConversation",
5333
5686
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5335,6 +5688,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5335
5688
  "useSession: SessionSnapshotSelector",
5336
5689
  "sessionId: SessionId",
5337
5690
  "useProjection: UseProjection",
5691
+ "useAccess: (action: RemoteEndpoint) => boolean",
5338
5692
  "useTrajectory: UseTrajectory"
5339
5693
  ],
5340
5694
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5372,13 +5726,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5372
5726
  ownerProps: [],
5373
5727
  ownerPropsReferences: [],
5374
5728
  standardProps: [
5729
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5375
5730
  "useResource: UseResource",
5376
5731
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5377
5732
  "usePanelInfo: UsePanelInfo",
5378
5733
  "useSessions: UseSessions",
5379
5734
  "useSessionStatus: UseSessionStatus",
5380
5735
  "useSessionRetainInfo: UseSessionRetainInfo",
5381
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5736
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5737
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5382
5738
  "useChat: UseChat",
5383
5739
  "useConversation: UseConversation",
5384
5740
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5386,6 +5742,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5386
5742
  "useSession: SessionSnapshotSelector",
5387
5743
  "sessionId: SessionId",
5388
5744
  "useProjection: UseProjection",
5745
+ "useAccess: (action: RemoteEndpoint) => boolean",
5389
5746
  "useTrajectory: UseTrajectory"
5390
5747
  ],
5391
5748
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5420,13 +5777,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5420
5777
  ownerProps: ["/** Content and viewing inputs shared by document bodies and nested PDF presentation. */\nexport interface DocumentBodyOwner {\n /** Observe a file read by this renderer. @param address - complete file resource address. */\n readonly addResource: (address: string) => void\n /** Replace this renderer's dependencies. @param addresses - complete file resource addresses. */\n readonly setResources: (addresses: readonly string[]) => void\n /** Original file address, also readable through the standard useResource hook. */\n readonly resourceAddress: string\n /** Ordinary file content or a renderer-owned loading request; text accumulates until eof. */\n readonly content: DocumentContent\n /** The document toolbar's current wrapping preference. */\n readonly wrap: boolean\n /** Report a renderer-owned scrollport; passing `null` restores the shared body as the owner. */\n readonly scrollportRef: RefCallback<HTMLElement>\n}"],
5421
5778
  ownerPropsReferences: ["DocumentContent"],
5422
5779
  standardProps: [
5780
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5423
5781
  "useResource: UseResource",
5424
5782
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5425
5783
  "usePanelInfo: UsePanelInfo",
5426
5784
  "useSessions: UseSessions",
5427
5785
  "useSessionStatus: UseSessionStatus",
5428
5786
  "useSessionRetainInfo: UseSessionRetainInfo",
5429
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5787
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5788
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5430
5789
  "useChat: UseChat",
5431
5790
  "useConversation: UseConversation",
5432
5791
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5434,6 +5793,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5434
5793
  "useSession: SessionSnapshotSelector",
5435
5794
  "sessionId: SessionId",
5436
5795
  "useProjection: UseProjection",
5796
+ "useAccess: (action: RemoteEndpoint) => boolean",
5437
5797
  "useTrajectory: UseTrajectory"
5438
5798
  ],
5439
5799
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5469,13 +5829,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5469
5829
  ownerProps: ["/**\n * Ordinary file contents, or a request for the selected renderer to load its content.\n * Byte arrays are transient UI input, never persisted layout or Session data.\n */\nexport type DocumentContent =\n | { readonly kind: 'text'; readonly text: string; readonly pages: readonly DocumentTextPage[]; readonly eof: boolean }\n | { readonly kind: 'bytes'; readonly data: Uint8Array<ArrayBuffer> }\n | {\n readonly kind: 'renderer'\n /** Changes on reload or implementation replacement; retained contents belong to one revision. */\n readonly revision: number\n /** Report the displayed source version; stale revisions cannot update the owner. @param version - loaded source version. */\n readonly loaded: (version: string) => void\n /** End a failed load; a later file change can start another revision. */\n readonly failed: () => void\n /** Cancel the current load and start a new revision. */\n readonly reload: () => void\n }"],
5470
5830
  ownerPropsReferences: ["DocumentTextPage"],
5471
5831
  standardProps: [
5832
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5472
5833
  "useResource: UseResource",
5473
5834
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5474
5835
  "usePanelInfo: UsePanelInfo",
5475
5836
  "useSessions: UseSessions",
5476
5837
  "useSessionStatus: UseSessionStatus",
5477
5838
  "useSessionRetainInfo: UseSessionRetainInfo",
5478
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5839
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5840
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5479
5841
  "useChat: UseChat",
5480
5842
  "useConversation: UseConversation",
5481
5843
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5483,6 +5845,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5483
5845
  "useSession: SessionSnapshotSelector",
5484
5846
  "sessionId: SessionId",
5485
5847
  "useProjection: UseProjection",
5848
+ "useAccess: (action: RemoteEndpoint) => boolean",
5486
5849
  "useTrajectory: UseTrajectory"
5487
5850
  ],
5488
5851
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5523,13 +5886,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5523
5886
  ownerProps: [],
5524
5887
  ownerPropsReferences: [],
5525
5888
  standardProps: [
5889
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5526
5890
  "useResource: UseResource",
5527
5891
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5528
5892
  "usePanelInfo: UsePanelInfo",
5529
5893
  "useSessions: UseSessions",
5530
5894
  "useSessionStatus: UseSessionStatus",
5531
5895
  "useSessionRetainInfo: UseSessionRetainInfo",
5532
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5896
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5897
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5533
5898
  "useChat: UseChat",
5534
5899
  "useConversation: UseConversation",
5535
5900
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5537,6 +5902,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5537
5902
  "useSession: SessionSnapshotSelector",
5538
5903
  "sessionId: SessionId",
5539
5904
  "useProjection: UseProjection",
5905
+ "useAccess: (action: RemoteEndpoint) => boolean",
5540
5906
  "useTrajectory: UseTrajectory"
5541
5907
  ],
5542
5908
  keyDomain: "",
@@ -5563,13 +5929,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5563
5929
  ownerProps: ["/** Content and viewing inputs shared by document bodies and nested PDF presentation. */\nexport interface DocumentBodyOwner {\n /** Observe a file read by this renderer. @param address - complete file resource address. */\n readonly addResource: (address: string) => void\n /** Replace this renderer's dependencies. @param addresses - complete file resource addresses. */\n readonly setResources: (addresses: readonly string[]) => void\n /** Original file address, also readable through the standard useResource hook. */\n readonly resourceAddress: string\n /** Ordinary file content or a renderer-owned loading request; text accumulates until eof. */\n readonly content: DocumentContent\n /** The document toolbar's current wrapping preference. */\n readonly wrap: boolean\n /** Report a renderer-owned scrollport; passing `null` restores the shared body as the owner. */\n readonly scrollportRef: RefCallback<HTMLElement>\n}"],
5564
5930
  ownerPropsReferences: ["DocumentContent"],
5565
5931
  standardProps: [
5932
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5566
5933
  "useResource: UseResource",
5567
5934
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5568
5935
  "usePanelInfo: UsePanelInfo",
5569
5936
  "useSessions: UseSessions",
5570
5937
  "useSessionStatus: UseSessionStatus",
5571
5938
  "useSessionRetainInfo: UseSessionRetainInfo",
5572
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5939
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5940
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5573
5941
  "useChat: UseChat",
5574
5942
  "useConversation: UseConversation",
5575
5943
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5577,6 +5945,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5577
5945
  "useSession: SessionSnapshotSelector",
5578
5946
  "sessionId: SessionId",
5579
5947
  "useProjection: UseProjection",
5948
+ "useAccess: (action: RemoteEndpoint) => boolean",
5580
5949
  "useTrajectory: UseTrajectory"
5581
5950
  ],
5582
5951
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5617,13 +5986,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5617
5986
  ownerProps: [],
5618
5987
  ownerPropsReferences: [],
5619
5988
  standardProps: [
5989
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5620
5990
  "useResource: UseResource",
5621
5991
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5622
5992
  "usePanelInfo: UsePanelInfo",
5623
5993
  "useSessions: UseSessions",
5624
5994
  "useSessionStatus: UseSessionStatus",
5625
5995
  "useSessionRetainInfo: UseSessionRetainInfo",
5626
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5996
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5997
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5627
5998
  "useChat: UseChat",
5628
5999
  "useConversation: UseConversation",
5629
6000
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5631,6 +6002,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5631
6002
  "useSession: SessionSnapshotSelector",
5632
6003
  "sessionId: SessionId",
5633
6004
  "useProjection: UseProjection",
6005
+ "useAccess: (action: RemoteEndpoint) => boolean",
5634
6006
  "useTrajectory: UseTrajectory"
5635
6007
  ],
5636
6008
  keyDomain: "",
@@ -5671,13 +6043,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5671
6043
  ownerProps: [],
5672
6044
  ownerPropsReferences: [],
5673
6045
  standardProps: [
6046
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5674
6047
  "useResource: UseResource",
5675
6048
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5676
6049
  "usePanelInfo: UsePanelInfo",
5677
6050
  "useSessions: UseSessions",
5678
6051
  "useSessionStatus: UseSessionStatus",
5679
6052
  "useSessionRetainInfo: UseSessionRetainInfo",
5680
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6053
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6054
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5681
6055
  "useChat: UseChat",
5682
6056
  "useConversation: UseConversation",
5683
6057
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5685,6 +6059,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5685
6059
  "useSession: SessionSnapshotSelector",
5686
6060
  "sessionId: SessionId",
5687
6061
  "useProjection: UseProjection",
6062
+ "useAccess: (action: RemoteEndpoint) => boolean",
5688
6063
  "useTrajectory: UseTrajectory"
5689
6064
  ],
5690
6065
  keyDomain: "",
@@ -5711,13 +6086,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5711
6086
  ownerProps: [],
5712
6087
  ownerPropsReferences: [],
5713
6088
  standardProps: [
6089
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5714
6090
  "useResource: UseResource",
5715
6091
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5716
6092
  "usePanelInfo: UsePanelInfo",
5717
6093
  "useSessions: UseSessions",
5718
6094
  "useSessionStatus: UseSessionStatus",
5719
6095
  "useSessionRetainInfo: UseSessionRetainInfo",
5720
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6096
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6097
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5721
6098
  "useChat: UseChat",
5722
6099
  "useConversation: UseConversation",
5723
6100
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5725,6 +6102,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5725
6102
  "useSession: SessionSnapshotSelector",
5726
6103
  "sessionId: SessionId",
5727
6104
  "useProjection: UseProjection",
6105
+ "useAccess: (action: RemoteEndpoint) => boolean",
5728
6106
  "useTrajectory: UseTrajectory"
5729
6107
  ],
5730
6108
  keyDomain: "",
@@ -5751,13 +6129,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5751
6129
  ownerProps: ["/** Resolved guide copy and entry identity supplied to a provider's card renderer. */\nexport interface SidebarRightGuideEntryOwnerProps {\n readonly entryId: string\n readonly kind: string\n readonly title: string\n readonly description?: string\n}"],
5752
6130
  ownerPropsReferences: [],
5753
6131
  standardProps: [
6132
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5754
6133
  "useResource: UseResource",
5755
6134
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5756
6135
  "usePanelInfo: UsePanelInfo",
5757
6136
  "useSessions: UseSessions",
5758
6137
  "useSessionStatus: UseSessionStatus",
5759
6138
  "useSessionRetainInfo: UseSessionRetainInfo",
5760
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6139
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6140
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5761
6141
  "useChat: UseChat",
5762
6142
  "useConversation: UseConversation",
5763
6143
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5765,6 +6145,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5765
6145
  "useSession: SessionSnapshotSelector",
5766
6146
  "sessionId: SessionId",
5767
6147
  "useProjection: UseProjection",
6148
+ "useAccess: (action: RemoteEndpoint) => boolean",
5768
6149
  "useTrajectory: UseTrajectory"
5769
6150
  ],
5770
6151
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5805,13 +6186,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5805
6186
  ownerProps: ["/** Owner share of one tab-menu item occurrence. */\nexport interface SidebarRightTabMenuOwnerProps {\n /** The tab whose menu is open. */\n tab: TabRecord\n /**\n * Dismiss the menu.\n *\n * An item that acts MUST call this: the menu is the kit's, and it closes on\n * its own actions only. An item that leaves it open leaves a menu floating\n * over content the action may have just replaced.\n */\n dismiss: () => void\n}"],
5806
6187
  ownerPropsReferences: ["TabRecord"],
5807
6188
  standardProps: [
6189
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5808
6190
  "useResource: UseResource",
5809
6191
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5810
6192
  "usePanelInfo: UsePanelInfo",
5811
6193
  "useSessions: UseSessions",
5812
6194
  "useSessionStatus: UseSessionStatus",
5813
6195
  "useSessionRetainInfo: UseSessionRetainInfo",
5814
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6196
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6197
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5815
6198
  "useChat: UseChat",
5816
6199
  "useConversation: UseConversation",
5817
6200
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5819,6 +6202,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5819
6202
  "useSession: SessionSnapshotSelector",
5820
6203
  "sessionId: SessionId",
5821
6204
  "useProjection: UseProjection",
6205
+ "useAccess: (action: RemoteEndpoint) => boolean",
5822
6206
  "useTrajectory: UseTrajectory"
5823
6207
  ],
5824
6208
  keyDomain: "",
@@ -5859,13 +6243,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5859
6243
  ownerProps: ["/**\n * Owner share of the two Session-row schedule seats. Both receive only the\n * row's Session identity: the occupant reads that Session's own scheduled\n * tasks, and reading them activates nothing.\n */\nexport interface SessionRowScheduleOwnerProps {\n /** Session this row shows; the occupant addresses its own data by this id. */\n readonly sessionId: SessionId\n}"],
5860
6244
  ownerPropsReferences: ["SessionId"],
5861
6245
  standardProps: [
6246
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5862
6247
  "useResource: UseResource",
5863
6248
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5864
6249
  "usePanelInfo: UsePanelInfo",
5865
6250
  "useSessions: UseSessions",
5866
6251
  "useSessionStatus: UseSessionStatus",
5867
6252
  "useSessionRetainInfo: UseSessionRetainInfo",
5868
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6253
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6254
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5869
6255
  ],
5870
6256
  keyDomain: "",
5871
6257
  hookContext: "",
@@ -5874,7 +6260,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5874
6260
  occupants: ["client-ui-schedule SessionScheduleHover id 'schedule-tasks'"],
5875
6261
  replaceRisk: "none",
5876
6262
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.session.row.hover', () => ctx.slots.register(\n { name: 'sidebar.session.row.hover', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5877
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:135"
6263
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:136"
5878
6264
  },
5879
6265
  {
5880
6266
  key: "sidebar.session.row.leading",
@@ -5905,13 +6291,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5905
6291
  ownerProps: ["/**\n * Owner share of the two Session-row schedule seats. Both receive only the\n * row's Session identity: the occupant reads that Session's own scheduled\n * tasks, and reading them activates nothing.\n */\nexport interface SessionRowScheduleOwnerProps {\n /** Session this row shows; the occupant addresses its own data by this id. */\n readonly sessionId: SessionId\n}"],
5906
6292
  ownerPropsReferences: ["SessionId"],
5907
6293
  standardProps: [
6294
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5908
6295
  "useResource: UseResource",
5909
6296
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5910
6297
  "usePanelInfo: UsePanelInfo",
5911
6298
  "useSessions: UseSessions",
5912
6299
  "useSessionStatus: UseSessionStatus",
5913
6300
  "useSessionRetainInfo: UseSessionRetainInfo",
5914
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6301
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6302
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5915
6303
  ],
5916
6304
  keyDomain: "",
5917
6305
  hookContext: "",
@@ -5920,7 +6308,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5920
6308
  occupants: ["client-ui-schedule SessionScheduleMark id 'schedule-mark'"],
5921
6309
  replaceRisk: "none",
5922
6310
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.session.row.leading', () => ctx.slots.register(\n { name: 'sidebar.session.row.leading', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5923
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:130"
6311
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:131"
5924
6312
  },
5925
6313
  {
5926
6314
  key: "sidebar.settings",
@@ -5932,13 +6320,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5932
6320
  ownerProps: ["/**\n * Owner share of the sidebar settings seat: the column display state the\n * occupant's trigger row must render against (wide row vs rail icon).\n */\nexport interface SidebarSettingsOwnerProps {\n /** Whether the sidebar renders wide content (false = 56px rail). */\n wide: boolean\n}"],
5933
6321
  ownerPropsReferences: [],
5934
6322
  standardProps: [
6323
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5935
6324
  "useResource: UseResource",
5936
6325
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5937
6326
  "usePanelInfo: UsePanelInfo",
5938
6327
  "useSessions: UseSessions",
5939
6328
  "useSessionStatus: UseSessionStatus",
5940
6329
  "useSessionRetainInfo: UseSessionRetainInfo",
5941
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6330
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6331
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5942
6332
  ],
5943
6333
  keyDomain: "",
5944
6334
  hookContext: "",
@@ -5959,13 +6349,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5959
6349
  ownerProps: [],
5960
6350
  ownerPropsReferences: [],
5961
6351
  standardProps: [
6352
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5962
6353
  "useResource: UseResource",
5963
6354
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5964
6355
  "usePanelInfo: UsePanelInfo",
5965
6356
  "useSessions: UseSessions",
5966
6357
  "useSessionStatus: UseSessionStatus",
5967
6358
  "useSessionRetainInfo: UseSessionRetainInfo",
5968
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6359
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6360
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5969
6361
  ],
5970
6362
  keyDomain: "",
5971
6363
  hookContext: "",
@@ -5986,13 +6378,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5986
6378
  ownerProps: ["/**\n * Owner share of the browser hole — the only facts crossing the shell/region\n * boundary. Business data and actions arrive through the region's own inject.\n */\nexport interface SidebarSectionOwnerProps {\n /** Shell fold-state output: wide renders the full browser, rail the icon column. */\n wide: boolean\n /** Rail icons request expansion; the browser rides the wide flip for focus. */\n expandSidebar: () => void\n}"],
5987
6379
  ownerPropsReferences: [],
5988
6380
  standardProps: [
6381
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5989
6382
  "useResource: UseResource",
5990
6383
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5991
6384
  "usePanelInfo: UsePanelInfo",
5992
6385
  "useSessions: UseSessions",
5993
6386
  "useSessionStatus: UseSessionStatus",
5994
6387
  "useSessionRetainInfo: UseSessionRetainInfo",
5995
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6388
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6389
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5996
6390
  ],
5997
6391
  keyDomain: "",
5998
6392
  hookContext: "",
@@ -6013,13 +6407,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6013
6407
  ownerProps: ["/**\n * Owner share of the directory-flow holes: the complete conversation between\n * the trigger surface and the picking interaction. The occupant reads `open`\n * to run/render its interaction and reports exactly one outcome per open.\n */\nexport interface DirectoryFlowOwnerProps {\n /** True while a picking interaction is requested; flipping back to false withdraws the request. */\n open: boolean\n /** True while the owner adopts a picked path (`createWorkspace` in flight); occupants disable their commit affordances. */\n busy: boolean\n /** The operator picked a directory (absolute host path); the owner adopts it. */\n onPicked: (path: string) => void\n /** The operator dismissed the interaction; the owner just closes the flow. */\n onCancel: () => void\n /** The interaction itself failed (chooser missing, listing denied); the owner shows its error surface. */\n onError: (message: string) => void\n}"],
6014
6408
  ownerPropsReferences: [],
6015
6409
  standardProps: [
6410
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6016
6411
  "useResource: UseResource",
6017
6412
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6018
6413
  "usePanelInfo: UsePanelInfo",
6019
6414
  "useSessions: UseSessions",
6020
6415
  "useSessionStatus: UseSessionStatus",
6021
6416
  "useSessionRetainInfo: UseSessionRetainInfo",
6022
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6417
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6418
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6023
6419
  ],
6024
6420
  keyDomain: "",
6025
6421
  hookContext: "",
@@ -6028,14 +6424,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6028
6424
  occupants: ["client-ui-directory-picker-browse BrowseDirectoryFlow", "client-ui-directory-picker-native NativeDirectoryFlow"],
6029
6425
  replaceRisk: "shadows-shipped-ui",
6030
6426
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.workspaces.directoryFlow', () => ctx.slots.register(\n { name: 'sidebar.workspaces.directoryFlow' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
6031
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:120"
6427
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:121"
6032
6428
  },
6033
6429
  {
6034
6430
  key: "sidebar.workspaces.session.menu.item",
6035
6431
  kind: "list",
6036
6432
  scope: "root",
6037
6433
  summary: "The rows of one Session's \"...\" menu, in ascending `order`.",
6038
- doc: "The rows of one Session's \"...\" menu, in ascending `order`. ui-workspace\nregisters the shipped rows here — `pin` (100), `rename` (200), `fork`\n(300), `archive` (400) — so a plugin row is placed by its own `order`\namong them. Use a package-namespaced `id`; reusing a shipped id at\nanother `priority` shadows that row. Each entry renders one\n`role=\"menuitem\"` `<button>` (the shipped rows use ui-primitives'\n`MenuItemButton`, which adds the host styling and `separatorBefore`),\ndecides its own visibility from its own state, and dismisses the menu\nthrough the injected `useMenuOpenState` hook after acting; the list's\nkeyboard walk and focus return read the DOM, so any such button joins\nthem. Labels come from the contributing package's locale namespace.",
6434
+ doc: "The rows of one Session's \"...\" menu, in ascending `order`. ui-workspace\nregisters the shipped rows here — `pin` (100), `rename` (200), `fork`\n(300), `archive` (400), and `session-id` (450) — so a plugin row is placed\nby its own `order` among them. Use a package-namespaced `id`; reusing a shipped id at\nanother `priority` shadows that row. Each entry renders one\n`role=\"menuitem\"` `<button>` (the shipped rows use ui-primitives'\n`MenuItemButton`, which adds the host styling and `separatorBefore`),\ndecides its own visibility from its own state, and dismisses the menu\nthrough the injected `useMenuOpenState` hook after acting; the list's\nkeyboard walk and focus return read the DOM, so any such button joins\nthem. Labels come from the contributing package's locale namespace.",
6039
6435
  registerOptions: [
6040
6436
  {
6041
6437
  name: "id",
@@ -6059,13 +6455,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6059
6455
  ownerProps: ["/** Owner share of one Session row action occurrence: the row the action belongs to. */\nexport interface SessionRowOwnerProps {\n /** Session the row shows. */\n sessionId: SessionId\n /** Row display title: persisted title, or empty when the Session has none. */\n displayTitle: string\n}"],
6060
6456
  ownerPropsReferences: ["SessionId"],
6061
6457
  standardProps: [
6458
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6062
6459
  "useResource: UseResource",
6063
6460
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6064
6461
  "usePanelInfo: UsePanelInfo",
6065
6462
  "useSessions: UseSessions",
6066
6463
  "useSessionStatus: UseSessionStatus",
6067
6464
  "useSessionRetainInfo: UseSessionRetainInfo",
6068
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6465
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6466
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6069
6467
  ],
6070
6468
  keyDomain: "",
6071
6469
  hookContext: "MenuOpenState",
@@ -6075,11 +6473,12 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6075
6473
  "client-ui-workspace PinSessionMenuItem id 'pin'",
6076
6474
  "client-ui-workspace RenameSessionMenuItem id 'rename'",
6077
6475
  "client-ui-workspace ForkSessionMenuItem id 'fork'",
6078
- "client-ui-workspace ArchiveSessionMenuItem id 'archive'"
6476
+ "client-ui-workspace ArchiveSessionMenuItem id 'archive'",
6477
+ "client-ui-workspace SessionIdMenuItem id 'session-id'"
6079
6478
  ],
6080
6479
  replaceRisk: "none",
6081
- example: "return {\n inject: ['slots'],\n apply(ctx) {\n const copyLabel = 'Copy Session ID' // Localize in the contributing package.\n ctx.slots.inject('sidebar.workspaces.session.menu.item', () => ctx.slots.register(\n { name: 'sidebar.workspaces.session.menu.item', id: 'copy-session-id', order: 500 },\n ({ sessionId, useMenuOpenState }) => {\n const [, setMenuOpen] = useMenuOpenState()\n return React.createElement(\n 'button',\n { type: 'button', role: 'menuitem', onClick: () => { setMenuOpen(false); void navigator.clipboard.writeText(sessionId) } },\n copyLabel,\n )\n },\n ))\n },\n}",
6082
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:167"
6480
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n const copyLabel = 'Copy session title' // Localize in the contributing package.\n ctx.slots.inject('sidebar.workspaces.session.menu.item', () => ctx.slots.register(\n { name: 'sidebar.workspaces.session.menu.item', id: 'copy-session-title', order: 500 },\n ({ displayTitle, useMenuOpenState }) => {\n const [, setMenuOpen] = useMenuOpenState()\n return React.createElement(\n 'button',\n {\n type: 'button', role: 'menuitem',\n onClick: () => { setMenuOpen(false); void navigator.clipboard.writeText(displayTitle) },\n },\n copyLabel,\n )\n },\n ))\n },\n}",
6481
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:171"
6083
6482
  },
6084
6483
  {
6085
6484
  key: "sidebar.workspaces.session.row.action",
@@ -6110,13 +6509,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6110
6509
  ownerProps: ["/** Owner share of one Session row action occurrence: the row the action belongs to. */\nexport interface SessionRowOwnerProps {\n /** Session the row shows. */\n sessionId: SessionId\n /** Row display title: persisted title, or empty when the Session has none. */\n displayTitle: string\n}"],
6111
6510
  ownerPropsReferences: ["SessionId"],
6112
6511
  standardProps: [
6512
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6113
6513
  "useResource: UseResource",
6114
6514
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6115
6515
  "usePanelInfo: UsePanelInfo",
6116
6516
  "useSessions: UseSessions",
6117
6517
  "useSessionStatus: UseSessionStatus",
6118
6518
  "useSessionRetainInfo: UseSessionRetainInfo",
6119
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6519
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6520
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6120
6521
  ],
6121
6522
  keyDomain: "",
6122
6523
  hookContext: "",
@@ -6125,7 +6526,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6125
6526
  occupants: ["client-ui-workspace ArchiveSessionRowButton id 'archive'", "client-ui-workspace PinSessionRowButton id 'pin'"],
6126
6527
  replaceRisk: "none",
6127
6528
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.workspaces.session.row.action', () => ctx.slots.register(\n { name: 'sidebar.workspaces.session.row.action', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
6128
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:185"
6529
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:189"
6129
6530
  },
6130
6531
  {
6131
6532
  key: "tool.call.images",
@@ -6137,13 +6538,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6137
6538
  ownerProps: ["/** Owner currency of the Tool image gallery slot: references plus the loader. */\nexport interface ToolImagesOwnerProps {\n /** Durable references or submission-echo previews in result order. */\n images: readonly MessageImageSource[]\n /** Session-authorized image URL loader for the durable arm. */\n loadImage: MessageImageLoader\n /** Horizontal placement inside the owning record. */\n align: 'start' | 'end'\n}"],
6138
6539
  ownerPropsReferences: ["MessageImageLoader", "MessageImageSource"],
6139
6540
  standardProps: [
6541
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6140
6542
  "useResource: UseResource",
6141
6543
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6142
6544
  "usePanelInfo: UsePanelInfo",
6143
6545
  "useSessions: UseSessions",
6144
6546
  "useSessionStatus: UseSessionStatus",
6145
6547
  "useSessionRetainInfo: UseSessionRetainInfo",
6146
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6548
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6549
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6147
6550
  "useChat: UseChat",
6148
6551
  "useConversation: UseConversation",
6149
6552
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6151,6 +6554,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6151
6554
  "useSession: SessionSnapshotSelector",
6152
6555
  "sessionId: SessionId",
6153
6556
  "useProjection: UseProjection",
6557
+ "useAccess: (action: RemoteEndpoint) => boolean",
6154
6558
  "useTrajectory: UseTrajectory"
6155
6559
  ],
6156
6560
  keyDomain: "",
@@ -6188,13 +6592,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6188
6592
  "UseDisclosure"
6189
6593
  ],
6190
6594
  standardProps: [
6595
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6191
6596
  "useResource: UseResource",
6192
6597
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6193
6598
  "usePanelInfo: UsePanelInfo",
6194
6599
  "useSessions: UseSessions",
6195
6600
  "useSessionStatus: UseSessionStatus",
6196
6601
  "useSessionRetainInfo: UseSessionRetainInfo",
6197
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6602
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6603
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6198
6604
  "useChat: UseChat",
6199
6605
  "useConversation: UseConversation",
6200
6606
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6202,6 +6608,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6202
6608
  "useSession: SessionSnapshotSelector",
6203
6609
  "sessionId: SessionId",
6204
6610
  "useProjection: UseProjection",
6611
+ "useAccess: (action: RemoteEndpoint) => boolean",
6205
6612
  "useTrajectory: UseTrajectory"
6206
6613
  ],
6207
6614
  keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: ask_user_question, bash, cordis_define, cordis_inspect_list, cordis_inspect_query, cordis_inspect_self, cordis_run, cordis_stop, cordis_undefine, create_goal, edit, get_goal, glob, grep, interrupt_agent, job_kill, job_list, job_output, list_agents, list_subagent_models, lsp, present, ralph, read, read_image, schedule_create, schedule_delete, schedule_list, schedule_update, send_message, session_event_read, session_event_search, session_event_trace, session_search, session_trace, skill, spawn_teammate, subagent, team_task_create, team_task_get, team_task_list, team_task_update, terminal_close, terminal_list, terminal_open, terminal_read, terminal_signal, todo_write, update_goal, wait_agent, web_fetch, web_search, workflow, write",
@@ -6287,13 +6694,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6287
6694
  "CordisDynamicPluginRunId"
6288
6695
  ],
6289
6696
  standardProps: [
6697
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6290
6698
  "useResource: UseResource",
6291
6699
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6292
6700
  "usePanelInfo: UsePanelInfo",
6293
6701
  "useSessions: UseSessions",
6294
6702
  "useSessionStatus: UseSessionStatus",
6295
6703
  "useSessionRetainInfo: UseSessionRetainInfo",
6296
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6704
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6705
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6297
6706
  "useChat: UseChat",
6298
6707
  "useConversation: UseConversation",
6299
6708
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6301,6 +6710,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6301
6710
  "useSession: SessionSnapshotSelector",
6302
6711
  "sessionId: SessionId",
6303
6712
  "useProjection: UseProjection",
6713
+ "useAccess: (action: RemoteEndpoint) => boolean",
6304
6714
  "useTrajectory: UseTrajectory"
6305
6715
  ],
6306
6716
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -6311,6 +6721,52 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6311
6721
  replaceRisk: "none",
6312
6722
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('tool.view.cordis', () => ctx.slots.register(\n { name: 'tool.view.cordis', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
6313
6723
  source: "packages/extensions/ui-cordis/src/client/slots.ts:31"
6724
+ },
6725
+ {
6726
+ key: "workspace.toast",
6727
+ kind: "keyed",
6728
+ scope: "root",
6729
+ summary: "Workspace notices selected by their existing business discriminator.",
6730
+ doc: "Workspace notices selected by their existing business discriminator.",
6731
+ registerOptions: [{
6732
+ name: "key",
6733
+ requirement: "required",
6734
+ type: "string",
6735
+ doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
6736
+ }],
6737
+ ownerProps: ["/** Owner operations available to every keyed Workspace notice. */\nexport interface WorkspaceToastOwnerProps {\n /** Dismiss the displayed notice. */\n dismissToast: () => void\n}"],
6738
+ ownerPropsReferences: ["Workspace"],
6739
+ standardProps: [
6740
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6741
+ "useResource: UseResource",
6742
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6743
+ "usePanelInfo: UsePanelInfo",
6744
+ "useSessions: UseSessions",
6745
+ "useSessionStatus: UseSessionStatus",
6746
+ "useSessionRetainInfo: UseSessionRetainInfo",
6747
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6748
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6749
+ ],
6750
+ keyDomain: "fixed by the owner's key table { [K in ToastKind]: ToastNotice<K> }, already taken: archived, archivedNotOpenable, createFailed, defaultWorkspaceFailed, forkRequiresOpen, pinFailed, sessionIdCopied, sessionIdCopyFailed, shortcutForkFailed, stoppedAndArchived, unpinFailed",
6751
+ hookContext: "",
6752
+ slotInject: "",
6753
+ declaredBy: "an entry in 'shell.overlay' (client-ui-workspace), so it exists while that entry is mounted",
6754
+ occupants: [
6755
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'sessionIdCopi… key 'sessionIdCopied'",
6756
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'sessionIdCopy… key 'sessionIdCopyFailed'",
6757
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'pinFailed'>> key 'pinFailed'",
6758
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'unpinFailed'>> key 'unpinFailed'",
6759
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'archivedNotOp… key 'archivedNotOpenable'",
6760
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'defaultWorksp… key 'defaultWorkspaceFailed'",
6761
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'shortcutForkF… key 'shortcutForkFailed'",
6762
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'createFailed'>> key 'createFailed'",
6763
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'forkRequiresO… key 'forkRequiresOpen'",
6764
+ "client-ui-workspace ArchiveToastEntry key 'archived'",
6765
+ "client-ui-workspace ArchiveToastEntry key 'stoppedAndArchived'"
6766
+ ],
6767
+ replaceRisk: "shadows-shipped-ui",
6768
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('workspace.toast', () => ctx.slots.register(\n { name: 'workspace.toast', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
6769
+ source: "packages/client/ui-workspace/src/client/contract/toast.ts:53"
6314
6770
  }
6315
6771
  ];
6316
6772
  //#endregion