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

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: "",
@@ -4117,7 +4402,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4117
4402
  occupants: ["client-ui-agent-preset CreatePluginMenuItem id 'create-plugin'"],
4118
4403
  replaceRisk: "none",
4119
4404
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.add.actions', () => ctx.slots.register(\n { name: 'plugins.add.actions', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4120
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:89"
4405
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:118"
4121
4406
  },
4122
4407
  {
4123
4408
  key: "plugins.bundle.activation",
@@ -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: "",
@@ -4149,7 +4436,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4149
4436
  occupants: ["experimental-client-ui-voice-input VoiceSetupPrompt key '@deepseek-ai/dsh-experimental-voice-input-bundle'"],
4150
4437
  replaceRisk: "shadows-shipped-ui",
4151
4438
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.bundle.activation', () => ctx.slots.register(\n { name: 'plugins.bundle.activation', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4152
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:91"
4439
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:126"
4153
4440
  },
4154
4441
  {
4155
4442
  key: "plugins.bundle.config",
@@ -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: "",
@@ -4181,7 +4470,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4181
4470
  occupants: ["experimental-client-ui-cot-translation TranslationSettings key '@deepseek-ai/dsh-experimental-cot-translation-bundle'", "experimental-client-ui-voice-input VoicePreparation key '@deepseek-ai/dsh-experimental-voice-input-bundle'"],
4182
4471
  replaceRisk: "shadows-shipped-ui",
4183
4472
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.bundle.config', () => ctx.slots.register(\n { name: 'plugins.bundle.config', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4184
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:107"
4473
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:142"
4185
4474
  },
4186
4475
  {
4187
4476
  key: "plugins.detail.actions",
@@ -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: "",
@@ -4227,7 +4518,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4227
4518
  occupants: [],
4228
4519
  replaceRisk: "none",
4229
4520
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.detail.actions', () => ctx.slots.register(\n { name: 'plugins.detail.actions', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4230
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:121"
4521
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:156"
4231
4522
  },
4232
4523
  {
4233
4524
  key: "plugins.detail.badge",
@@ -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: "",
@@ -4273,7 +4566,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4273
4566
  occupants: [],
4274
4567
  replaceRisk: "none",
4275
4568
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.detail.badge', () => ctx.slots.register(\n { name: 'plugins.detail.badge', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4276
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:126"
4569
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:161"
4277
4570
  },
4278
4571
  {
4279
4572
  key: "plugins.detail.section",
@@ -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: "",
@@ -4319,7 +4614,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4319
4614
  occupants: [],
4320
4615
  replaceRisk: "none",
4321
4616
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.detail.section', () => ctx.slots.register(\n { name: 'plugins.detail.section', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4322
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:133"
4617
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:168"
4323
4618
  },
4324
4619
  {
4325
4620
  key: "plugins.item",
@@ -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: "",
@@ -4370,7 +4667,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4370
4667
  ],
4371
4668
  replaceRisk: "none",
4372
4669
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.item', () => ctx.slots.register(\n { name: 'plugins.item', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4373
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:101"
4670
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:136"
4374
4671
  },
4375
4672
  {
4376
4673
  key: "plugins.row.config",
@@ -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: "",
@@ -4402,7 +4701,55 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4402
4701
  occupants: [],
4403
4702
  replaceRisk: "none",
4404
4703
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.row.config', () => ctx.slots.register(\n { name: 'plugins.row.config', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4405
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:115"
4704
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:150"
4705
+ },
4706
+ {
4707
+ key: "plugins.tab",
4708
+ kind: "list",
4709
+ scope: "root",
4710
+ summary: "Tabs after the page's own Installed tab, such as Discover: `label` names the tab and `order` places it.",
4711
+ doc: "Tabs after the page's own Installed tab, such as Discover: `label` names the tab and `order` places it. The\npage renders the selected entry under its header and tabs; the entry draws its own content and installs\nthrough the owner's `install`.",
4712
+ registerOptions: [
4713
+ {
4714
+ name: "id",
4715
+ requirement: "required",
4716
+ type: "string",
4717
+ 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."
4718
+ },
4719
+ {
4720
+ name: "order",
4721
+ requirement: "optional",
4722
+ type: "number",
4723
+ doc: "Position among the entries, ascending (default 0)."
4724
+ },
4725
+ {
4726
+ name: "label",
4727
+ requirement: "optional",
4728
+ type: "string | (() => string)",
4729
+ 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."
4730
+ }
4731
+ ],
4732
+ ownerProps: ["/** Owner props of a page tab another plugin contributes, such as Discover. */\nexport interface PluginTabProps {\n /**\n * Install an exact version the person already confirmed: the page's install dialog opens at its check and progress\n * screens, without the spec form, and names the plugin and version above the spec.\n * @param target - the spec, optional registry, and display text.\n */\n readonly install: (target: PluginTabInstall) => void\n /**\n * Switch to the Installed tab and open a bundle's page.\n * @param packageName - npm package name of the bundle.\n */\n readonly openPackage: (packageName: string) => void\n}"],
4733
+ ownerPropsReferences: ["PluginTabInstall"],
4734
+ standardProps: [
4735
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4736
+ "useResource: UseResource",
4737
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4738
+ "usePanelInfo: UsePanelInfo",
4739
+ "useSessions: UseSessions",
4740
+ "useSessionStatus: UseSessionStatus",
4741
+ "useSessionRetainInfo: UseSessionRetainInfo",
4742
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4743
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4744
+ ],
4745
+ keyDomain: "",
4746
+ hookContext: "",
4747
+ slotInject: "",
4748
+ declaredBy: "an entry in 'main' (client-ui-plugin-manager), so it exists while that entry is mounted",
4749
+ occupants: ["client-ui-plugin-market DiscoverSection id 'discover'"],
4750
+ replaceRisk: "none",
4751
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.tab', () => ctx.slots.register(\n { name: 'plugins.tab', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4752
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:124"
4406
4753
  },
4407
4754
  {
4408
4755
  key: "rightbar",
@@ -4414,13 +4761,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4414
4761
  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
4762
  ownerPropsReferences: [],
4416
4763
  standardProps: [
4764
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4417
4765
  "useResource: UseResource",
4418
4766
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4419
4767
  "usePanelInfo: UsePanelInfo",
4420
4768
  "useSessions: UseSessions",
4421
4769
  "useSessionStatus: UseSessionStatus",
4422
4770
  "useSessionRetainInfo: UseSessionRetainInfo",
4423
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4771
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4772
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4424
4773
  ],
4425
4774
  keyDomain: "",
4426
4775
  hookContext: "",
@@ -4441,13 +4790,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4441
4790
  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
4791
  ownerPropsReferences: ["Branded"],
4443
4792
  standardProps: [
4793
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4444
4794
  "useResource: UseResource",
4445
4795
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4446
4796
  "usePanelInfo: UsePanelInfo",
4447
4797
  "useSessions: UseSessions",
4448
4798
  "useSessionStatus: UseSessionStatus",
4449
4799
  "useSessionRetainInfo: UseSessionRetainInfo",
4450
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4800
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4801
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
4451
4802
  "useChat: UseChat",
4452
4803
  "useConversation: UseConversation",
4453
4804
  "useInput: SnapshotSelectorHook<InputState>",
@@ -4455,6 +4806,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4455
4806
  "useSession: SessionSnapshotSelector",
4456
4807
  "sessionId: SessionId",
4457
4808
  "useProjection: UseProjection",
4809
+ "useAccess: (action: RemoteEndpoint) => boolean",
4458
4810
  "useTrajectory: UseTrajectory"
4459
4811
  ],
4460
4812
  keyDomain: "",
@@ -4476,13 +4828,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4476
4828
  ownerProps: ["/** Root owner share: the shell supplies nothing — the frame is inject-assembled. */\nexport interface RootOwnerProps { children?: never }"],
4477
4829
  ownerPropsReferences: [],
4478
4830
  standardProps: [
4831
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4479
4832
  "useResource: UseResource",
4480
4833
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4481
4834
  "usePanelInfo: UsePanelInfo",
4482
4835
  "useSessions: UseSessions",
4483
4836
  "useSessionStatus: UseSessionStatus",
4484
4837
  "useSessionRetainInfo: UseSessionRetainInfo",
4485
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4838
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4839
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4486
4840
  ],
4487
4841
  keyDomain: "",
4488
4842
  hookContext: "",
@@ -4522,13 +4876,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4522
4876
  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
4877
  ownerPropsReferences: [],
4524
4878
  standardProps: [
4879
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4525
4880
  "useResource: UseResource",
4526
4881
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4527
4882
  "usePanelInfo: UsePanelInfo",
4528
4883
  "useSessions: UseSessions",
4529
4884
  "useSessionStatus: UseSessionStatus",
4530
4885
  "useSessionRetainInfo: UseSessionRetainInfo",
4531
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4886
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4887
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4532
4888
  ],
4533
4889
  keyDomain: "",
4534
4890
  hookContext: "",
@@ -4549,13 +4905,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4549
4905
  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
4906
  ownerPropsReferences: [],
4551
4907
  standardProps: [
4908
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4552
4909
  "useResource: UseResource",
4553
4910
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4554
4911
  "usePanelInfo: UsePanelInfo",
4555
4912
  "useSessions: UseSessions",
4556
4913
  "useSessionStatus: UseSessionStatus",
4557
4914
  "useSessionRetainInfo: UseSessionRetainInfo",
4558
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4915
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4916
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4559
4917
  ],
4560
4918
  keyDomain: "",
4561
4919
  hookContext: "",
@@ -4595,13 +4953,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4595
4953
  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
4954
  ownerPropsReferences: [],
4597
4955
  standardProps: [
4956
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4598
4957
  "useResource: UseResource",
4599
4958
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4600
4959
  "usePanelInfo: UsePanelInfo",
4601
4960
  "useSessions: UseSessions",
4602
4961
  "useSessionStatus: UseSessionStatus",
4603
4962
  "useSessionRetainInfo: UseSessionRetainInfo",
4604
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4963
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4964
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4605
4965
  ],
4606
4966
  keyDomain: "",
4607
4967
  hookContext: "",
@@ -4635,13 +4995,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4635
4995
  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
4996
  ownerPropsReferences: [],
4637
4997
  standardProps: [
4998
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4638
4999
  "useResource: UseResource",
4639
5000
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4640
5001
  "usePanelInfo: UsePanelInfo",
4641
5002
  "useSessions: UseSessions",
4642
5003
  "useSessionStatus: UseSessionStatus",
4643
5004
  "useSessionRetainInfo: UseSessionRetainInfo",
4644
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5005
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5006
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4645
5007
  ],
4646
5008
  keyDomain: "",
4647
5009
  hookContext: "",
@@ -4662,13 +5024,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4662
5024
  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
5025
  ownerPropsReferences: [],
4664
5026
  standardProps: [
5027
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4665
5028
  "useResource: UseResource",
4666
5029
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4667
5030
  "usePanelInfo: UsePanelInfo",
4668
5031
  "useSessions: UseSessions",
4669
5032
  "useSessionStatus: UseSessionStatus",
4670
5033
  "useSessionRetainInfo: UseSessionRetainInfo",
4671
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5034
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5035
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4672
5036
  ],
4673
5037
  keyDomain: "",
4674
5038
  hookContext: "",
@@ -4708,13 +5072,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4708
5072
  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
5073
  ownerPropsReferences: [],
4710
5074
  standardProps: [
5075
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4711
5076
  "useResource: UseResource",
4712
5077
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4713
5078
  "usePanelInfo: UsePanelInfo",
4714
5079
  "useSessions: UseSessions",
4715
5080
  "useSessionStatus: UseSessionStatus",
4716
5081
  "useSessionRetainInfo: UseSessionRetainInfo",
4717
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5082
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5083
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4718
5084
  ],
4719
5085
  keyDomain: "",
4720
5086
  hookContext: "",
@@ -4740,13 +5106,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4740
5106
  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
5107
  ownerPropsReferences: ["ProviderDirectoryEntry"],
4742
5108
  standardProps: [
5109
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4743
5110
  "useResource: UseResource",
4744
5111
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4745
5112
  "usePanelInfo: UsePanelInfo",
4746
5113
  "useSessions: UseSessions",
4747
5114
  "useSessionStatus: UseSessionStatus",
4748
5115
  "useSessionRetainInfo: UseSessionRetainInfo",
4749
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5116
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5117
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4750
5118
  ],
4751
5119
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4752
5120
  hookContext: "",
@@ -4767,13 +5135,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4767
5135
  ownerProps: [],
4768
5136
  ownerPropsReferences: [],
4769
5137
  standardProps: [
5138
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4770
5139
  "useResource: UseResource",
4771
5140
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4772
5141
  "usePanelInfo: UsePanelInfo",
4773
5142
  "useSessions: UseSessions",
4774
5143
  "useSessionStatus: UseSessionStatus",
4775
5144
  "useSessionRetainInfo: UseSessionRetainInfo",
4776
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5145
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5146
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4777
5147
  ],
4778
5148
  keyDomain: "",
4779
5149
  hookContext: "",
@@ -4813,13 +5183,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4813
5183
  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
5184
  ownerPropsReferences: [],
4815
5185
  standardProps: [
5186
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4816
5187
  "useResource: UseResource",
4817
5188
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4818
5189
  "usePanelInfo: UsePanelInfo",
4819
5190
  "useSessions: UseSessions",
4820
5191
  "useSessionStatus: UseSessionStatus",
4821
5192
  "useSessionRetainInfo: UseSessionRetainInfo",
4822
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5193
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5194
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4823
5195
  ],
4824
5196
  keyDomain: "",
4825
5197
  hookContext: "",
@@ -4859,13 +5231,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4859
5231
  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
5232
  ownerPropsReferences: [],
4861
5233
  standardProps: [
5234
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4862
5235
  "useResource: UseResource",
4863
5236
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4864
5237
  "usePanelInfo: UsePanelInfo",
4865
5238
  "useSessions: UseSessions",
4866
5239
  "useSessionStatus: UseSessionStatus",
4867
5240
  "useSessionRetainInfo: UseSessionRetainInfo",
4868
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5241
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5242
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4869
5243
  ],
4870
5244
  keyDomain: "",
4871
5245
  hookContext: "",
@@ -4905,13 +5279,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4905
5279
  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
5280
  ownerPropsReferences: [],
4907
5281
  standardProps: [
5282
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4908
5283
  "useResource: UseResource",
4909
5284
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4910
5285
  "usePanelInfo: UsePanelInfo",
4911
5286
  "useSessions: UseSessions",
4912
5287
  "useSessionStatus: UseSessionStatus",
4913
5288
  "useSessionRetainInfo: UseSessionRetainInfo",
4914
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5289
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5290
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4915
5291
  ],
4916
5292
  keyDomain: "",
4917
5293
  hookContext: "",
@@ -4938,13 +5314,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4938
5314
  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
5315
  ownerPropsReferences: [],
4940
5316
  standardProps: [
5317
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4941
5318
  "useResource: UseResource",
4942
5319
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4943
5320
  "usePanelInfo: UsePanelInfo",
4944
5321
  "useSessions: UseSessions",
4945
5322
  "useSessionStatus: UseSessionStatus",
4946
5323
  "useSessionRetainInfo: UseSessionRetainInfo",
4947
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5324
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5325
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4948
5326
  ],
4949
5327
  keyDomain: "",
4950
5328
  hookContext: "",
@@ -4965,13 +5343,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4965
5343
  ownerProps: [],
4966
5344
  ownerPropsReferences: [],
4967
5345
  standardProps: [
5346
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4968
5347
  "useResource: UseResource",
4969
5348
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4970
5349
  "usePanelInfo: UsePanelInfo",
4971
5350
  "useSessions: UseSessions",
4972
5351
  "useSessionStatus: UseSessionStatus",
4973
5352
  "useSessionRetainInfo: UseSessionRetainInfo",
4974
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5353
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5354
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4975
5355
  ],
4976
5356
  keyDomain: "",
4977
5357
  hookContext: "",
@@ -4992,13 +5372,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4992
5372
  ownerProps: [],
4993
5373
  ownerPropsReferences: [],
4994
5374
  standardProps: [
5375
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4995
5376
  "useResource: UseResource",
4996
5377
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4997
5378
  "usePanelInfo: UsePanelInfo",
4998
5379
  "useSessions: UseSessions",
4999
5380
  "useSessionStatus: UseSessionStatus",
5000
5381
  "useSessionRetainInfo: UseSessionRetainInfo",
5001
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5382
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5383
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5002
5384
  ],
5003
5385
  keyDomain: "",
5004
5386
  hookContext: "",
@@ -5038,13 +5420,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5038
5420
  ownerProps: [],
5039
5421
  ownerPropsReferences: [],
5040
5422
  standardProps: [
5423
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5041
5424
  "useResource: UseResource",
5042
5425
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5043
5426
  "usePanelInfo: UsePanelInfo",
5044
5427
  "useSessions: UseSessions",
5045
5428
  "useSessionStatus: UseSessionStatus",
5046
5429
  "useSessionRetainInfo: UseSessionRetainInfo",
5047
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5430
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5431
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5048
5432
  ],
5049
5433
  keyDomain: "",
5050
5434
  hookContext: "",
@@ -5056,6 +5440,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5056
5440
  "client-ui-schedule ScheduleDeleteToast id 'schedule.delete-toast'",
5057
5441
  "client-ui-settings-account DesktopOnboardingEntry id 'desktop-onboarding'",
5058
5442
  "client-ui-settings-account AccountPlatformHost id 'account.platform-page'",
5443
+ "client-ui-settings-general HostReleasePrompt id 'host-release-change'",
5059
5444
  "client-ui-settings-session-log UploadToast id 'session-log-upload-toast'",
5060
5445
  "client-ui-shortcuts ShortcutReference id 'shortcuts'",
5061
5446
  "client-ui-workspace SessionRenameDialog id 'workspace.session-rename'",
@@ -5081,13 +5466,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5081
5466
  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
5467
  ownerPropsReferences: ["QuotaNoticeCode"],
5083
5468
  standardProps: [
5469
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5084
5470
  "useResource: UseResource",
5085
5471
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5086
5472
  "usePanelInfo: UsePanelInfo",
5087
5473
  "useSessions: UseSessions",
5088
5474
  "useSessionStatus: UseSessionStatus",
5089
5475
  "useSessionRetainInfo: UseSessionRetainInfo",
5090
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5476
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5477
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5091
5478
  ],
5092
5479
  keyDomain: "",
5093
5480
  hookContext: "",
@@ -5096,7 +5483,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5096
5483
  occupants: ["client-ui-settings-account AccountQuotaNotice"],
5097
5484
  replaceRisk: "none",
5098
5485
  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"
5486
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:449"
5100
5487
  },
5101
5488
  {
5102
5489
  key: "sidebar",
@@ -5108,13 +5495,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5108
5495
  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
5496
  ownerPropsReferences: [],
5110
5497
  standardProps: [
5498
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5111
5499
  "useResource: UseResource",
5112
5500
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5113
5501
  "usePanelInfo: UsePanelInfo",
5114
5502
  "useSessions: UseSessions",
5115
5503
  "useSessionStatus: UseSessionStatus",
5116
5504
  "useSessionRetainInfo: UseSessionRetainInfo",
5117
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5505
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5506
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5118
5507
  ],
5119
5508
  keyDomain: "",
5120
5509
  hookContext: "",
@@ -5135,13 +5524,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5135
5524
  ownerProps: ["/** Geometry supplied to the sidebar brand-mark occupant. */\nexport interface SidebarBrandMarkOwnerProps {\n /** Requested square edge in pixels. */\n size: number\n}"],
5136
5525
  ownerPropsReferences: [],
5137
5526
  standardProps: [
5527
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5138
5528
  "useResource: UseResource",
5139
5529
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5140
5530
  "usePanelInfo: UsePanelInfo",
5141
5531
  "useSessions: UseSessions",
5142
5532
  "useSessionStatus: UseSessionStatus",
5143
5533
  "useSessionRetainInfo: UseSessionRetainInfo",
5144
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5534
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5535
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5145
5536
  ],
5146
5537
  keyDomain: "",
5147
5538
  hookContext: "",
@@ -5162,13 +5553,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5162
5553
  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
5554
  ownerPropsReferences: [],
5164
5555
  standardProps: [
5556
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5165
5557
  "useResource: UseResource",
5166
5558
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5167
5559
  "usePanelInfo: UsePanelInfo",
5168
5560
  "useSessions: UseSessions",
5169
5561
  "useSessionStatus: UseSessionStatus",
5170
5562
  "useSessionRetainInfo: UseSessionRetainInfo",
5171
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5563
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5564
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5172
5565
  ],
5173
5566
  keyDomain: "",
5174
5567
  hookContext: "",
@@ -5189,13 +5582,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5189
5582
  ownerProps: [],
5190
5583
  ownerPropsReferences: [],
5191
5584
  standardProps: [
5585
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5192
5586
  "useResource: UseResource",
5193
5587
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5194
5588
  "usePanelInfo: UsePanelInfo",
5195
5589
  "useSessions: UseSessions",
5196
5590
  "useSessionStatus: UseSessionStatus",
5197
5591
  "useSessionRetainInfo: UseSessionRetainInfo",
5198
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5592
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5593
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5199
5594
  "useChat: UseChat",
5200
5595
  "useConversation: UseConversation",
5201
5596
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5203,6 +5598,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5203
5598
  "useSession: SessionSnapshotSelector",
5204
5599
  "sessionId: SessionId",
5205
5600
  "useProjection: UseProjection",
5601
+ "useAccess: (action: RemoteEndpoint) => boolean",
5206
5602
  "useTrajectory: UseTrajectory"
5207
5603
  ],
5208
5604
  keyDomain: "",
@@ -5243,13 +5639,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5243
5639
  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
5640
  ownerPropsReferences: [],
5245
5641
  standardProps: [
5642
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5246
5643
  "useResource: UseResource",
5247
5644
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5248
5645
  "usePanelInfo: UsePanelInfo",
5249
5646
  "useSessions: UseSessions",
5250
5647
  "useSessionStatus: UseSessionStatus",
5251
5648
  "useSessionRetainInfo: UseSessionRetainInfo",
5252
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5649
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5650
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5253
5651
  ],
5254
5652
  keyDomain: "",
5255
5653
  hookContext: "",
@@ -5289,13 +5687,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5289
5687
  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
5688
  ownerPropsReferences: [],
5291
5689
  standardProps: [
5690
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5292
5691
  "useResource: UseResource",
5293
5692
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5294
5693
  "usePanelInfo: UsePanelInfo",
5295
5694
  "useSessions: UseSessions",
5296
5695
  "useSessionStatus: UseSessionStatus",
5297
5696
  "useSessionRetainInfo: UseSessionRetainInfo",
5298
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5697
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5698
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5299
5699
  ],
5300
5700
  keyDomain: "",
5301
5701
  hookContext: "",
@@ -5321,13 +5721,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5321
5721
  ownerProps: [],
5322
5722
  ownerPropsReferences: [],
5323
5723
  standardProps: [
5724
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5324
5725
  "useResource: UseResource",
5325
5726
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5326
5727
  "usePanelInfo: UsePanelInfo",
5327
5728
  "useSessions: UseSessions",
5328
5729
  "useSessionStatus: UseSessionStatus",
5329
5730
  "useSessionRetainInfo: UseSessionRetainInfo",
5330
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5731
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5732
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5331
5733
  "useChat: UseChat",
5332
5734
  "useConversation: UseConversation",
5333
5735
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5335,6 +5737,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5335
5737
  "useSession: SessionSnapshotSelector",
5336
5738
  "sessionId: SessionId",
5337
5739
  "useProjection: UseProjection",
5740
+ "useAccess: (action: RemoteEndpoint) => boolean",
5338
5741
  "useTrajectory: UseTrajectory"
5339
5742
  ],
5340
5743
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5372,13 +5775,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5372
5775
  ownerProps: [],
5373
5776
  ownerPropsReferences: [],
5374
5777
  standardProps: [
5778
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5375
5779
  "useResource: UseResource",
5376
5780
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5377
5781
  "usePanelInfo: UsePanelInfo",
5378
5782
  "useSessions: UseSessions",
5379
5783
  "useSessionStatus: UseSessionStatus",
5380
5784
  "useSessionRetainInfo: UseSessionRetainInfo",
5381
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5785
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5786
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5382
5787
  "useChat: UseChat",
5383
5788
  "useConversation: UseConversation",
5384
5789
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5386,6 +5791,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5386
5791
  "useSession: SessionSnapshotSelector",
5387
5792
  "sessionId: SessionId",
5388
5793
  "useProjection: UseProjection",
5794
+ "useAccess: (action: RemoteEndpoint) => boolean",
5389
5795
  "useTrajectory: UseTrajectory"
5390
5796
  ],
5391
5797
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5420,13 +5826,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5420
5826
  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
5827
  ownerPropsReferences: ["DocumentContent"],
5422
5828
  standardProps: [
5829
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5423
5830
  "useResource: UseResource",
5424
5831
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5425
5832
  "usePanelInfo: UsePanelInfo",
5426
5833
  "useSessions: UseSessions",
5427
5834
  "useSessionStatus: UseSessionStatus",
5428
5835
  "useSessionRetainInfo: UseSessionRetainInfo",
5429
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5836
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5837
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5430
5838
  "useChat: UseChat",
5431
5839
  "useConversation: UseConversation",
5432
5840
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5434,6 +5842,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5434
5842
  "useSession: SessionSnapshotSelector",
5435
5843
  "sessionId: SessionId",
5436
5844
  "useProjection: UseProjection",
5845
+ "useAccess: (action: RemoteEndpoint) => boolean",
5437
5846
  "useTrajectory: UseTrajectory"
5438
5847
  ],
5439
5848
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5469,13 +5878,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5469
5878
  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
5879
  ownerPropsReferences: ["DocumentTextPage"],
5471
5880
  standardProps: [
5881
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5472
5882
  "useResource: UseResource",
5473
5883
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5474
5884
  "usePanelInfo: UsePanelInfo",
5475
5885
  "useSessions: UseSessions",
5476
5886
  "useSessionStatus: UseSessionStatus",
5477
5887
  "useSessionRetainInfo: UseSessionRetainInfo",
5478
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5888
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5889
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5479
5890
  "useChat: UseChat",
5480
5891
  "useConversation: UseConversation",
5481
5892
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5483,6 +5894,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5483
5894
  "useSession: SessionSnapshotSelector",
5484
5895
  "sessionId: SessionId",
5485
5896
  "useProjection: UseProjection",
5897
+ "useAccess: (action: RemoteEndpoint) => boolean",
5486
5898
  "useTrajectory: UseTrajectory"
5487
5899
  ],
5488
5900
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5523,13 +5935,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5523
5935
  ownerProps: [],
5524
5936
  ownerPropsReferences: [],
5525
5937
  standardProps: [
5938
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5526
5939
  "useResource: UseResource",
5527
5940
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5528
5941
  "usePanelInfo: UsePanelInfo",
5529
5942
  "useSessions: UseSessions",
5530
5943
  "useSessionStatus: UseSessionStatus",
5531
5944
  "useSessionRetainInfo: UseSessionRetainInfo",
5532
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5945
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5946
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5533
5947
  "useChat: UseChat",
5534
5948
  "useConversation: UseConversation",
5535
5949
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5537,6 +5951,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5537
5951
  "useSession: SessionSnapshotSelector",
5538
5952
  "sessionId: SessionId",
5539
5953
  "useProjection: UseProjection",
5954
+ "useAccess: (action: RemoteEndpoint) => boolean",
5540
5955
  "useTrajectory: UseTrajectory"
5541
5956
  ],
5542
5957
  keyDomain: "",
@@ -5563,13 +5978,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5563
5978
  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
5979
  ownerPropsReferences: ["DocumentContent"],
5565
5980
  standardProps: [
5981
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5566
5982
  "useResource: UseResource",
5567
5983
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5568
5984
  "usePanelInfo: UsePanelInfo",
5569
5985
  "useSessions: UseSessions",
5570
5986
  "useSessionStatus: UseSessionStatus",
5571
5987
  "useSessionRetainInfo: UseSessionRetainInfo",
5572
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5988
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5989
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5573
5990
  "useChat: UseChat",
5574
5991
  "useConversation: UseConversation",
5575
5992
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5577,6 +5994,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5577
5994
  "useSession: SessionSnapshotSelector",
5578
5995
  "sessionId: SessionId",
5579
5996
  "useProjection: UseProjection",
5997
+ "useAccess: (action: RemoteEndpoint) => boolean",
5580
5998
  "useTrajectory: UseTrajectory"
5581
5999
  ],
5582
6000
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5617,13 +6035,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5617
6035
  ownerProps: [],
5618
6036
  ownerPropsReferences: [],
5619
6037
  standardProps: [
6038
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5620
6039
  "useResource: UseResource",
5621
6040
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5622
6041
  "usePanelInfo: UsePanelInfo",
5623
6042
  "useSessions: UseSessions",
5624
6043
  "useSessionStatus: UseSessionStatus",
5625
6044
  "useSessionRetainInfo: UseSessionRetainInfo",
5626
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6045
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6046
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5627
6047
  "useChat: UseChat",
5628
6048
  "useConversation: UseConversation",
5629
6049
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5631,6 +6051,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5631
6051
  "useSession: SessionSnapshotSelector",
5632
6052
  "sessionId: SessionId",
5633
6053
  "useProjection: UseProjection",
6054
+ "useAccess: (action: RemoteEndpoint) => boolean",
5634
6055
  "useTrajectory: UseTrajectory"
5635
6056
  ],
5636
6057
  keyDomain: "",
@@ -5671,13 +6092,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5671
6092
  ownerProps: [],
5672
6093
  ownerPropsReferences: [],
5673
6094
  standardProps: [
6095
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5674
6096
  "useResource: UseResource",
5675
6097
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5676
6098
  "usePanelInfo: UsePanelInfo",
5677
6099
  "useSessions: UseSessions",
5678
6100
  "useSessionStatus: UseSessionStatus",
5679
6101
  "useSessionRetainInfo: UseSessionRetainInfo",
5680
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6102
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6103
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5681
6104
  "useChat: UseChat",
5682
6105
  "useConversation: UseConversation",
5683
6106
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5685,6 +6108,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5685
6108
  "useSession: SessionSnapshotSelector",
5686
6109
  "sessionId: SessionId",
5687
6110
  "useProjection: UseProjection",
6111
+ "useAccess: (action: RemoteEndpoint) => boolean",
5688
6112
  "useTrajectory: UseTrajectory"
5689
6113
  ],
5690
6114
  keyDomain: "",
@@ -5711,13 +6135,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5711
6135
  ownerProps: [],
5712
6136
  ownerPropsReferences: [],
5713
6137
  standardProps: [
6138
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5714
6139
  "useResource: UseResource",
5715
6140
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5716
6141
  "usePanelInfo: UsePanelInfo",
5717
6142
  "useSessions: UseSessions",
5718
6143
  "useSessionStatus: UseSessionStatus",
5719
6144
  "useSessionRetainInfo: UseSessionRetainInfo",
5720
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6145
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6146
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5721
6147
  "useChat: UseChat",
5722
6148
  "useConversation: UseConversation",
5723
6149
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5725,6 +6151,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5725
6151
  "useSession: SessionSnapshotSelector",
5726
6152
  "sessionId: SessionId",
5727
6153
  "useProjection: UseProjection",
6154
+ "useAccess: (action: RemoteEndpoint) => boolean",
5728
6155
  "useTrajectory: UseTrajectory"
5729
6156
  ],
5730
6157
  keyDomain: "",
@@ -5751,13 +6178,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5751
6178
  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
6179
  ownerPropsReferences: [],
5753
6180
  standardProps: [
6181
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5754
6182
  "useResource: UseResource",
5755
6183
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5756
6184
  "usePanelInfo: UsePanelInfo",
5757
6185
  "useSessions: UseSessions",
5758
6186
  "useSessionStatus: UseSessionStatus",
5759
6187
  "useSessionRetainInfo: UseSessionRetainInfo",
5760
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6188
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6189
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5761
6190
  "useChat: UseChat",
5762
6191
  "useConversation: UseConversation",
5763
6192
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5765,6 +6194,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5765
6194
  "useSession: SessionSnapshotSelector",
5766
6195
  "sessionId: SessionId",
5767
6196
  "useProjection: UseProjection",
6197
+ "useAccess: (action: RemoteEndpoint) => boolean",
5768
6198
  "useTrajectory: UseTrajectory"
5769
6199
  ],
5770
6200
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5805,13 +6235,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5805
6235
  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
6236
  ownerPropsReferences: ["TabRecord"],
5807
6237
  standardProps: [
6238
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5808
6239
  "useResource: UseResource",
5809
6240
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5810
6241
  "usePanelInfo: UsePanelInfo",
5811
6242
  "useSessions: UseSessions",
5812
6243
  "useSessionStatus: UseSessionStatus",
5813
6244
  "useSessionRetainInfo: UseSessionRetainInfo",
5814
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6245
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6246
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5815
6247
  "useChat: UseChat",
5816
6248
  "useConversation: UseConversation",
5817
6249
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5819,6 +6251,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5819
6251
  "useSession: SessionSnapshotSelector",
5820
6252
  "sessionId: SessionId",
5821
6253
  "useProjection: UseProjection",
6254
+ "useAccess: (action: RemoteEndpoint) => boolean",
5822
6255
  "useTrajectory: UseTrajectory"
5823
6256
  ],
5824
6257
  keyDomain: "",
@@ -5859,13 +6292,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5859
6292
  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
6293
  ownerPropsReferences: ["SessionId"],
5861
6294
  standardProps: [
6295
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5862
6296
  "useResource: UseResource",
5863
6297
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5864
6298
  "usePanelInfo: UsePanelInfo",
5865
6299
  "useSessions: UseSessions",
5866
6300
  "useSessionStatus: UseSessionStatus",
5867
6301
  "useSessionRetainInfo: UseSessionRetainInfo",
5868
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6302
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6303
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5869
6304
  ],
5870
6305
  keyDomain: "",
5871
6306
  hookContext: "",
@@ -5874,7 +6309,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5874
6309
  occupants: ["client-ui-schedule SessionScheduleHover id 'schedule-tasks'"],
5875
6310
  replaceRisk: "none",
5876
6311
  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"
6312
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:136"
5878
6313
  },
5879
6314
  {
5880
6315
  key: "sidebar.session.row.leading",
@@ -5905,13 +6340,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5905
6340
  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
6341
  ownerPropsReferences: ["SessionId"],
5907
6342
  standardProps: [
6343
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5908
6344
  "useResource: UseResource",
5909
6345
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5910
6346
  "usePanelInfo: UsePanelInfo",
5911
6347
  "useSessions: UseSessions",
5912
6348
  "useSessionStatus: UseSessionStatus",
5913
6349
  "useSessionRetainInfo: UseSessionRetainInfo",
5914
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6350
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6351
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5915
6352
  ],
5916
6353
  keyDomain: "",
5917
6354
  hookContext: "",
@@ -5920,7 +6357,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5920
6357
  occupants: ["client-ui-schedule SessionScheduleMark id 'schedule-mark'"],
5921
6358
  replaceRisk: "none",
5922
6359
  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"
6360
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:131"
5924
6361
  },
5925
6362
  {
5926
6363
  key: "sidebar.settings",
@@ -5932,13 +6369,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5932
6369
  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
6370
  ownerPropsReferences: [],
5934
6371
  standardProps: [
6372
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5935
6373
  "useResource: UseResource",
5936
6374
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5937
6375
  "usePanelInfo: UsePanelInfo",
5938
6376
  "useSessions: UseSessions",
5939
6377
  "useSessionStatus: UseSessionStatus",
5940
6378
  "useSessionRetainInfo: UseSessionRetainInfo",
5941
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6379
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6380
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5942
6381
  ],
5943
6382
  keyDomain: "",
5944
6383
  hookContext: "",
@@ -5959,13 +6398,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5959
6398
  ownerProps: [],
5960
6399
  ownerPropsReferences: [],
5961
6400
  standardProps: [
6401
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5962
6402
  "useResource: UseResource",
5963
6403
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5964
6404
  "usePanelInfo: UsePanelInfo",
5965
6405
  "useSessions: UseSessions",
5966
6406
  "useSessionStatus: UseSessionStatus",
5967
6407
  "useSessionRetainInfo: UseSessionRetainInfo",
5968
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6408
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6409
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5969
6410
  ],
5970
6411
  keyDomain: "",
5971
6412
  hookContext: "",
@@ -5986,13 +6427,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5986
6427
  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
6428
  ownerPropsReferences: [],
5988
6429
  standardProps: [
6430
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5989
6431
  "useResource: UseResource",
5990
6432
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5991
6433
  "usePanelInfo: UsePanelInfo",
5992
6434
  "useSessions: UseSessions",
5993
6435
  "useSessionStatus: UseSessionStatus",
5994
6436
  "useSessionRetainInfo: UseSessionRetainInfo",
5995
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6437
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6438
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5996
6439
  ],
5997
6440
  keyDomain: "",
5998
6441
  hookContext: "",
@@ -6013,13 +6456,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6013
6456
  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
6457
  ownerPropsReferences: [],
6015
6458
  standardProps: [
6459
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6016
6460
  "useResource: UseResource",
6017
6461
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6018
6462
  "usePanelInfo: UsePanelInfo",
6019
6463
  "useSessions: UseSessions",
6020
6464
  "useSessionStatus: UseSessionStatus",
6021
6465
  "useSessionRetainInfo: UseSessionRetainInfo",
6022
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6466
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6467
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6023
6468
  ],
6024
6469
  keyDomain: "",
6025
6470
  hookContext: "",
@@ -6028,14 +6473,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6028
6473
  occupants: ["client-ui-directory-picker-browse BrowseDirectoryFlow", "client-ui-directory-picker-native NativeDirectoryFlow"],
6029
6474
  replaceRisk: "shadows-shipped-ui",
6030
6475
  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"
6476
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:121"
6032
6477
  },
6033
6478
  {
6034
6479
  key: "sidebar.workspaces.session.menu.item",
6035
6480
  kind: "list",
6036
6481
  scope: "root",
6037
6482
  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.",
6483
+ 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
6484
  registerOptions: [
6040
6485
  {
6041
6486
  name: "id",
@@ -6059,13 +6504,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6059
6504
  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
6505
  ownerPropsReferences: ["SessionId"],
6061
6506
  standardProps: [
6507
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6062
6508
  "useResource: UseResource",
6063
6509
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6064
6510
  "usePanelInfo: UsePanelInfo",
6065
6511
  "useSessions: UseSessions",
6066
6512
  "useSessionStatus: UseSessionStatus",
6067
6513
  "useSessionRetainInfo: UseSessionRetainInfo",
6068
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6514
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6515
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6069
6516
  ],
6070
6517
  keyDomain: "",
6071
6518
  hookContext: "MenuOpenState",
@@ -6075,11 +6522,12 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6075
6522
  "client-ui-workspace PinSessionMenuItem id 'pin'",
6076
6523
  "client-ui-workspace RenameSessionMenuItem id 'rename'",
6077
6524
  "client-ui-workspace ForkSessionMenuItem id 'fork'",
6078
- "client-ui-workspace ArchiveSessionMenuItem id 'archive'"
6525
+ "client-ui-workspace ArchiveSessionMenuItem id 'archive'",
6526
+ "client-ui-workspace SessionIdMenuItem id 'session-id'"
6079
6527
  ],
6080
6528
  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"
6529
+ 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}",
6530
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:171"
6083
6531
  },
6084
6532
  {
6085
6533
  key: "sidebar.workspaces.session.row.action",
@@ -6110,13 +6558,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6110
6558
  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
6559
  ownerPropsReferences: ["SessionId"],
6112
6560
  standardProps: [
6561
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6113
6562
  "useResource: UseResource",
6114
6563
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6115
6564
  "usePanelInfo: UsePanelInfo",
6116
6565
  "useSessions: UseSessions",
6117
6566
  "useSessionStatus: UseSessionStatus",
6118
6567
  "useSessionRetainInfo: UseSessionRetainInfo",
6119
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6568
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6569
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6120
6570
  ],
6121
6571
  keyDomain: "",
6122
6572
  hookContext: "",
@@ -6125,7 +6575,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6125
6575
  occupants: ["client-ui-workspace ArchiveSessionRowButton id 'archive'", "client-ui-workspace PinSessionRowButton id 'pin'"],
6126
6576
  replaceRisk: "none",
6127
6577
  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"
6578
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:189"
6129
6579
  },
6130
6580
  {
6131
6581
  key: "tool.call.images",
@@ -6137,13 +6587,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6137
6587
  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
6588
  ownerPropsReferences: ["MessageImageLoader", "MessageImageSource"],
6139
6589
  standardProps: [
6590
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6140
6591
  "useResource: UseResource",
6141
6592
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6142
6593
  "usePanelInfo: UsePanelInfo",
6143
6594
  "useSessions: UseSessions",
6144
6595
  "useSessionStatus: UseSessionStatus",
6145
6596
  "useSessionRetainInfo: UseSessionRetainInfo",
6146
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6597
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6598
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6147
6599
  "useChat: UseChat",
6148
6600
  "useConversation: UseConversation",
6149
6601
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6151,6 +6603,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6151
6603
  "useSession: SessionSnapshotSelector",
6152
6604
  "sessionId: SessionId",
6153
6605
  "useProjection: UseProjection",
6606
+ "useAccess: (action: RemoteEndpoint) => boolean",
6154
6607
  "useTrajectory: UseTrajectory"
6155
6608
  ],
6156
6609
  keyDomain: "",
@@ -6188,13 +6641,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6188
6641
  "UseDisclosure"
6189
6642
  ],
6190
6643
  standardProps: [
6644
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6191
6645
  "useResource: UseResource",
6192
6646
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6193
6647
  "usePanelInfo: UsePanelInfo",
6194
6648
  "useSessions: UseSessions",
6195
6649
  "useSessionStatus: UseSessionStatus",
6196
6650
  "useSessionRetainInfo: UseSessionRetainInfo",
6197
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6651
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6652
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6198
6653
  "useChat: UseChat",
6199
6654
  "useConversation: UseConversation",
6200
6655
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6202,6 +6657,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6202
6657
  "useSession: SessionSnapshotSelector",
6203
6658
  "sessionId: SessionId",
6204
6659
  "useProjection: UseProjection",
6660
+ "useAccess: (action: RemoteEndpoint) => boolean",
6205
6661
  "useTrajectory: UseTrajectory"
6206
6662
  ],
6207
6663
  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 +6743,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6287
6743
  "CordisDynamicPluginRunId"
6288
6744
  ],
6289
6745
  standardProps: [
6746
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6290
6747
  "useResource: UseResource",
6291
6748
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6292
6749
  "usePanelInfo: UsePanelInfo",
6293
6750
  "useSessions: UseSessions",
6294
6751
  "useSessionStatus: UseSessionStatus",
6295
6752
  "useSessionRetainInfo: UseSessionRetainInfo",
6296
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6753
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6754
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6297
6755
  "useChat: UseChat",
6298
6756
  "useConversation: UseConversation",
6299
6757
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6301,6 +6759,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6301
6759
  "useSession: SessionSnapshotSelector",
6302
6760
  "sessionId: SessionId",
6303
6761
  "useProjection: UseProjection",
6762
+ "useAccess: (action: RemoteEndpoint) => boolean",
6304
6763
  "useTrajectory: UseTrajectory"
6305
6764
  ],
6306
6765
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -6311,6 +6770,52 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6311
6770
  replaceRisk: "none",
6312
6771
  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
6772
  source: "packages/extensions/ui-cordis/src/client/slots.ts:31"
6773
+ },
6774
+ {
6775
+ key: "workspace.toast",
6776
+ kind: "keyed",
6777
+ scope: "root",
6778
+ summary: "Workspace notices selected by their existing business discriminator.",
6779
+ doc: "Workspace notices selected by their existing business discriminator.",
6780
+ registerOptions: [{
6781
+ name: "key",
6782
+ requirement: "required",
6783
+ type: "string",
6784
+ doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
6785
+ }],
6786
+ ownerProps: ["/** Owner operations available to every keyed Workspace notice. */\nexport interface WorkspaceToastOwnerProps {\n /** Dismiss the displayed notice. */\n dismissToast: () => void\n}"],
6787
+ ownerPropsReferences: ["Workspace"],
6788
+ standardProps: [
6789
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6790
+ "useResource: UseResource",
6791
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6792
+ "usePanelInfo: UsePanelInfo",
6793
+ "useSessions: UseSessions",
6794
+ "useSessionStatus: UseSessionStatus",
6795
+ "useSessionRetainInfo: UseSessionRetainInfo",
6796
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6797
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6798
+ ],
6799
+ 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",
6800
+ hookContext: "",
6801
+ slotInject: "",
6802
+ declaredBy: "an entry in 'shell.overlay' (client-ui-workspace), so it exists while that entry is mounted",
6803
+ occupants: [
6804
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'sessionIdCopi… key 'sessionIdCopied'",
6805
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'sessionIdCopy… key 'sessionIdCopyFailed'",
6806
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'pinFailed'>> key 'pinFailed'",
6807
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'unpinFailed'>> key 'unpinFailed'",
6808
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'archivedNotOp… key 'archivedNotOpenable'",
6809
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'defaultWorksp… key 'defaultWorkspaceFailed'",
6810
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'shortcutForkF… key 'shortcutForkFailed'",
6811
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'createFailed'>> key 'createFailed'",
6812
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'forkRequiresO… key 'forkRequiresOpen'",
6813
+ "client-ui-workspace ArchiveToastEntry key 'archived'",
6814
+ "client-ui-workspace ArchiveToastEntry key 'stoppedAndArchived'"
6815
+ ],
6816
+ replaceRisk: "shadows-shipped-ui",
6817
+ 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}",
6818
+ source: "packages/client/ui-workspace/src/client/contract/toast.ts:53"
6314
6819
  }
6315
6820
  ];
6316
6821
  //#endregion