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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -1309,7 +1309,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1309
1309
  },
1310
1310
  {
1311
1311
  signature: "refreshProjections(sessionId: SessionId): Promise<void>",
1312
- description: "Load all Session projections once per connection; retry an unsuccessful initial read.",
1312
+ description: "Read projections without starting migration; retry failed or migration-deferred reads.",
1313
1313
  parameters: [{
1314
1314
  name: "sessionId",
1315
1315
  description: "Session to inspect without opening its conversation."
@@ -1329,7 +1329,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1329
1329
  returns: "bounded results, or a business/transport error."
1330
1330
  },
1331
1331
  {
1332
- signature: "fork(opts: { sessionId: SessionId atSeq?: number increaseTitle?: boolean onCreated?: (childId: SessionId) => void }): Promise<SessionId>",
1332
+ signature: "fork(opts: { sessionId: SessionId atSeq?: number increaseTitle?: boolean onCreated?: (childId: SessionId) => void /** False refuses source migration; omission preserves the Host default. */ allowMigration?: boolean }): Promise<SessionId>",
1333
1333
  description: "Fork a session from an exact inclusive prefix of the source; on resolution the child is catalogued and can be explicitly retained.",
1334
1334
  parameters: [{
1335
1335
  name: "opts",
@@ -1415,11 +1415,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1415
1415
  }]
1416
1416
  },
1417
1417
  {
1418
- signature: "setFontSize(px: number): void",
1419
- description: "Change the conversation content font size — the only font-size write entry. Accepted values are written through the settings scope and emit `theme/change`.",
1418
+ signature: "setFontSize(role: FontRole, px: number): void",
1419
+ description: "Change one role's font size. Accepted values are written through the settings scope and emit `theme/change`.",
1420
1420
  parameters: [{
1421
+ name: "role",
1422
+ description: "font role."
1423
+ }, {
1421
1424
  name: "px",
1422
- description: "integer px within FONT_SIZE_MIN..FONT_SIZE_MAX; out-of-range or fractional values throw."
1425
+ description: "integer px within the role's `FONT_SIZE_SPECS` range; out-of-range or fractional values throw."
1423
1426
  }]
1424
1427
  },
1425
1428
  {
@@ -1496,48 +1499,65 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1496
1499
  }]
1497
1500
  },
1498
1501
  {
1499
- 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>",
1500
1503
  description: "Connect a Workspace and open its Session unless a later navigation supersedes it.",
1501
- parameters: [{
1502
- name: "workspaceId",
1503
- description: "target Workspace."
1504
- }, {
1505
- name: "beforeOpen",
1506
- description: "optional synchronous preparation for the selected Session, skipped after supersession; a throw aborts the open and releases the retained reference."
1507
- }],
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
+ ],
1508
1518
  returns: "completion; a superseded request may create a Session but does not open it.",
1509
1519
  throws: ["on failure; a refused creation is also shown through the Workspace notice unless a later navigation or disposal superseded the request."]
1510
1520
  },
1511
1521
  {
1512
- signature: "forkSession(sessionId: SessionId, onCreated?: (childId: SessionId) => void): Promise<SessionId>",
1522
+ signature: "forkSession( sessionId: SessionId, onCreated?: (childId: SessionId) => void, options?: Pick<Parameters<ISessions['fork']>[0], 'allowMigration'>, ): Promise<SessionId>",
1513
1523
  description: "Fork a Session without changing the current selection.",
1514
- parameters: [{
1515
- name: "sessionId",
1516
- description: "source Session."
1517
- }, {
1518
- name: "onCreated",
1519
- description: "observer before the optional child-title update."
1520
- }],
1524
+ parameters: [
1525
+ {
1526
+ name: "sessionId",
1527
+ description: "source Session."
1528
+ },
1529
+ {
1530
+ name: "onCreated",
1531
+ description: "observer before the optional child-title update."
1532
+ },
1533
+ {
1534
+ name: "options",
1535
+ description: "optional permission to start source migration; omission preserves the Host default."
1536
+ }
1537
+ ],
1521
1538
  returns: "the child SessionId after creation and inherited-title increment."
1522
1539
  },
1523
1540
  {
1524
- signature: "connectWorkspace(workspaceId: WorkspaceId): Promise<SessionId>",
1525
- 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.",
1526
1543
  parameters: [{
1527
1544
  name: "workspaceId",
1528
1545
  description: "target Workspace."
1546
+ }, {
1547
+ name: "options",
1548
+ description: "choices for the created or reused Session."
1529
1549
  }],
1530
1550
  returns: "a Session already addressable through the Session Controller."
1531
1551
  },
1532
1552
  {
1533
1553
  signature: "startSession(workspaceId?: WorkspaceId, options?: StartSessionOptions): void",
1534
- description: "Start a New Session flow and navigate to its Session; a creation the Host refuses is shown through the Workspace notice and leaves the selection as it was.",
1554
+ description: "Create a fresh Session, or reuse a blank when preparing an explicit draft. A creation the Host refuses is shown through the Workspace notice and leaves the selection as it was.",
1535
1555
  parameters: [{
1536
1556
  name: "workspaceId",
1537
1557
  description: "explicit target; absent inherits the current or most recent Workspace."
1538
1558
  }, {
1539
1559
  name: "options",
1540
- 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."
1541
1561
  }]
1542
1562
  },
1543
1563
  {
@@ -1783,12 +1803,16 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1783
1803
  },
1784
1804
  {
1785
1805
  name: "ConnectionHandle",
1786
- 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}"
1787
1807
  },
1788
1808
  {
1789
1809
  name: "ConnectionHostInfo",
1790
1810
  declaration: "export interface ConnectionHostInfo {\n readonly home: string;\n}"
1791
1811
  },
1812
+ {
1813
+ name: "ConnectionInteractions",
1814
+ declaration: "export type ConnectionInteractions = 'answer' | 'none';"
1815
+ },
1792
1816
  {
1793
1817
  name: "ConnectionLoop",
1794
1818
  declaration: "export interface ConnectionLoop {\n stop(): void;\n}"
@@ -1817,6 +1841,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1817
1841
  name: "ConnectionStateSource",
1818
1842
  declaration: "export interface ConnectionStateSource {\n getSnapshot(): ConnectionState | undefined;\n subscribe(listener: () => void): () => void;\n}"
1819
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
+ },
1820
1852
  {
1821
1853
  name: "DraftInitializationOptions",
1822
1854
  declaration: "export interface DraftInitializationOptions {\n readonly prompt?: string;\n readonly clearPreviousDraft?: boolean;\n}"
@@ -1845,6 +1877,18 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1845
1877
  name: "FactoryRegistrationPropsOf",
1846
1878
  declaration: "export type FactoryRegistrationPropsOf<F extends keyof SlotFactoryMap & string> = FactoryRenderPropsOf<F> & PropsStore<FactoryStoreOf<F>> & InjectFace<FactoryInjectOf<F>> & PropsLocale<FactoryLocaleOf<F>> & PropsRenderFactories;"
1847
1879
  },
1880
+ {
1881
+ name: "FontFamilies",
1882
+ declaration: "export type FontFamilies = Readonly<Record<FontRole, string>>;"
1883
+ },
1884
+ {
1885
+ name: "FontRole",
1886
+ declaration: "export type FontRole = typeof FONT_ROLES[number];"
1887
+ },
1888
+ {
1889
+ name: "FontSizes",
1890
+ declaration: "export type FontSizes = Readonly<Record<FontRole, number>>;"
1891
+ },
1848
1892
  {
1849
1893
  name: "GlobalStandardProps",
1850
1894
  declaration: "export interface GlobalStandardProps {\n}"
@@ -1873,6 +1917,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1873
1917
  name: "ISession",
1874
1918
  declaration: "export interface ISession {\n readonly sessionId: SessionId;\n readonly projections: ProjectionsFace;\n beginSubmission(input: BeginSubmissionInput): SubmissionHandle;\n prompt(content: PromptContentPart[], mode: 'queue' | 'steer', signal?: AbortSignal, requestId?: SessionRequestId): Promise<RemoteResult<{\n accepted: true;\n }>>;\n readAttachment(attachmentId: AttachmentIdType): Promise<RemoteResult<{\n attachment: ImageAttachmentRef;\n data: Uint8Array;\n }>>;\n updateQueue(itemId: MessageId, action: QueueAction): Promise<RemoteResult<{\n accepted: true;\n }>>;\n cancel(): Promise<RemoteResult<{\n accepted: true;\n }>>;\n rename(title: string): Promise<RemoteResult<{\n title: string;\n seq: SessionSeq;\n }>>;\n loadOlder(): Promise<void>;\n loadThrough(seq: SessionSeq): Promise<void>;\n command(line: string): Promise<RemoteResult<{\n matched: boolean;\n }>>;\n}"
1875
1919
  },
1920
+ {
1921
+ name: "ISessions",
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}"
1923
+ },
1876
1924
  {
1877
1925
  name: "KeyedHooksSources",
1878
1926
  declaration: "export type KeyedHooksSources = Record<string, KeyedStandardSource>;"
@@ -1883,7 +1931,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1883
1931
  },
1884
1932
  {
1885
1933
  name: "KeyedStandardSource",
1886
- declaration: "export type KeyedStandardSource = (key: string) => HostObservable<unknown> | undefined;"
1934
+ declaration: "export type KeyedStandardSource = (key: string, member?: string) => HostObservable<unknown> | undefined;"
1887
1935
  },
1888
1936
  {
1889
1937
  name: "KeyPropsOf",
@@ -2109,10 +2157,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2109
2157
  name: "SessionIdOf",
2110
2158
  declaration: "export type SessionIdOf = SessionStandardProps extends {\n sessionId: infer S;\n} ? S : string;"
2111
2159
  },
2160
+ {
2161
+ name: "SessionListPhase",
2162
+ declaration: "export type SessionListPhase = 'pending' | 'ready';"
2163
+ },
2164
+ {
2165
+ name: "SessionListState",
2166
+ declaration: "export interface SessionListState {\n ids: SessionId[];\n byId: Record<SessionId, SessionSummary>;\n phase: SessionListPhase;\n projectionsBySession: Readonly<Record<SessionId, SessionProjectionSnapshot>>;\n}"
2167
+ },
2112
2168
  {
2113
2169
  name: "SessionMaybeStandardProps",
2114
2170
  declaration: "export interface SessionMaybeStandardProps {\n}"
2115
2171
  },
2172
+ {
2173
+ name: "SessionProjectionSnapshot",
2174
+ declaration: "export interface SessionProjectionSnapshot {\n readonly values: Readonly<Partial<SessionProjectionMap>>;\n readonly state: 'idle' | 'loading' | 'ready' | 'migration-required' | 'error';\n readonly error: RemoteFailure | null;\n}"
2175
+ },
2116
2176
  {
2117
2177
  name: "SessionProviderComponent",
2118
2178
  declaration: "export type SessionProviderComponent = (props: SessionAreaProps) => ReactNode;"
@@ -2167,7 +2227,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2167
2227
  },
2168
2228
  {
2169
2229
  name: "SlotEntryDef",
2170
- 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}"
2171
2231
  },
2172
2232
  {
2173
2233
  name: "SlotFactoryMap",
@@ -2203,7 +2263,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2203
2263
  },
2204
2264
  {
2205
2265
  name: "SlotSpec",
2206
- 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});"
2207
2267
  },
2208
2268
  {
2209
2269
  name: "SnapshotSelectorHook",
@@ -2211,7 +2271,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2211
2271
  },
2212
2272
  {
2213
2273
  name: "StartSessionOptions",
2214
- declaration: "export type StartSessionOptions = DraftInitializationOptions;"
2274
+ declaration: "export interface StartSessionOptions extends DraftInitializationOptions {\n readonly agentPreset?: string;\n}"
2215
2275
  },
2216
2276
  {
2217
2277
  name: "StoreDecl",
@@ -2255,7 +2315,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2255
2315
  },
2256
2316
  {
2257
2317
  name: "ThemeSnapshot",
2258
- declaration: "export interface ThemeSnapshot {\n preference: ThemePreference;\n fontSize: number;\n active: ThemeDefinition;\n themes: readonly ThemeDefinition[];\n revision: number;\n}"
2318
+ declaration: "export interface ThemeSnapshot {\n preference: ThemePreference;\n fontSizes: FontSizes;\n fontFamilies: FontFamilies;\n active: ThemeDefinition;\n themes: readonly ThemeDefinition[];\n revision: number;\n}"
2259
2319
  },
2260
2320
  {
2261
2321
  name: "ThemeTokenModes",
@@ -2382,13 +2442,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2382
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}"],
2383
2443
  ownerPropsReferences: [],
2384
2444
  standardProps: [
2445
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2385
2446
  "useResource: UseResource",
2386
2447
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2387
2448
  "usePanelInfo: UsePanelInfo",
2388
2449
  "useSessions: UseSessions",
2389
2450
  "useSessionStatus: UseSessionStatus",
2390
2451
  "useSessionRetainInfo: UseSessionRetainInfo",
2391
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2452
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2453
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2392
2454
  "useChat: UseChat",
2393
2455
  "useConversation: UseConversation",
2394
2456
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2396,6 +2458,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2396
2458
  "useSession: SessionSnapshotSelector",
2397
2459
  "sessionId: SessionId",
2398
2460
  "useProjection: UseProjection",
2461
+ "useAccess: (action: RemoteEndpoint) => boolean",
2399
2462
  "useTrajectory: UseTrajectory"
2400
2463
  ],
2401
2464
  keyDomain: "",
@@ -2436,13 +2499,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2436
2499
  ownerProps: ["/** Owner currency of finalized-assistant actions. */\nexport interface AssistantActionOwnerProps {\n messageId: MessageId\n}"],
2437
2500
  ownerPropsReferences: ["MessageId"],
2438
2501
  standardProps: [
2502
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2439
2503
  "useResource: UseResource",
2440
2504
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2441
2505
  "usePanelInfo: UsePanelInfo",
2442
2506
  "useSessions: UseSessions",
2443
2507
  "useSessionStatus: UseSessionStatus",
2444
2508
  "useSessionRetainInfo: UseSessionRetainInfo",
2445
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2509
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2510
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2446
2511
  "useChat: UseChat",
2447
2512
  "useConversation: UseConversation",
2448
2513
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2450,6 +2515,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2450
2515
  "useSession: SessionSnapshotSelector",
2451
2516
  "sessionId: SessionId",
2452
2517
  "useProjection: UseProjection",
2518
+ "useAccess: (action: RemoteEndpoint) => boolean",
2453
2519
  "useTrajectory: UseTrajectory"
2454
2520
  ],
2455
2521
  keyDomain: "",
@@ -2459,7 +2525,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2459
2525
  occupants: ["client-ui-message-feedback MessageFeedbackActions id 'feedback'"],
2460
2526
  replaceRisk: "none",
2461
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}",
2462
- source: "packages/client/ui-chat/src/client/contract/slots.ts:321"
2528
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:441"
2463
2529
  },
2464
2530
  {
2465
2531
  key: "conversation.chat.commandview",
@@ -2480,13 +2546,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2480
2546
  "CompactionSummaryNode"
2481
2547
  ],
2482
2548
  standardProps: [
2549
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2483
2550
  "useResource: UseResource",
2484
2551
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2485
2552
  "usePanelInfo: UsePanelInfo",
2486
2553
  "useSessions: UseSessions",
2487
2554
  "useSessionStatus: UseSessionStatus",
2488
2555
  "useSessionRetainInfo: UseSessionRetainInfo",
2489
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2556
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2557
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2490
2558
  "useChat: UseChat",
2491
2559
  "useConversation: UseConversation",
2492
2560
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2494,6 +2562,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2494
2562
  "useSession: SessionSnapshotSelector",
2495
2563
  "sessionId: SessionId",
2496
2564
  "useProjection: UseProjection",
2565
+ "useAccess: (action: RemoteEndpoint) => boolean",
2497
2566
  "useTrajectory: UseTrajectory"
2498
2567
  ],
2499
2568
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -2503,7 +2572,91 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2503
2572
  occupants: [],
2504
2573
  replaceRisk: "none",
2505
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}",
2506
- source: "packages/client/ui-chat/src/client/contract/slots.ts:309"
2575
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:423"
2576
+ },
2577
+ {
2578
+ key: "conversation.chat.flow",
2579
+ kind: "single",
2580
+ scope: "session",
2581
+ summary: "Ordered Chat rows and local echoes with viewport-bound visibility hooks.",
2582
+ doc: "Ordered Chat rows and local echoes with viewport-bound visibility hooks.",
2583
+ registerOptions: [],
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}"],
2585
+ ownerPropsReferences: [
2586
+ "ChatNodeOwnerProps",
2587
+ "PendingSubmission",
2588
+ "RenderEntry"
2589
+ ],
2590
+ standardProps: [
2591
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2592
+ "useResource: UseResource",
2593
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2594
+ "usePanelInfo: UsePanelInfo",
2595
+ "useSessions: UseSessions",
2596
+ "useSessionStatus: UseSessionStatus",
2597
+ "useSessionRetainInfo: UseSessionRetainInfo",
2598
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2599
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2600
+ "useChat: UseChat",
2601
+ "useConversation: UseConversation",
2602
+ "useInput: SnapshotSelectorHook<InputState>",
2603
+ "inputActions: InputActions",
2604
+ "useSession: SessionSnapshotSelector",
2605
+ "sessionId: SessionId",
2606
+ "useProjection: UseProjection",
2607
+ "useAccess: (action: RemoteEndpoint) => boolean",
2608
+ "useTrajectory: UseTrajectory"
2609
+ ],
2610
+ keyDomain: "",
2611
+ hookContext: "ChatFlowHookContext",
2612
+ slotInject: "ChatFlowInjected",
2613
+ declaredBy: "an entry in 'conversation.view' (client-ui-chat), so it exists while that entry is mounted",
2614
+ occupants: ["client-ui-chat ChatFlow"],
2615
+ replaceRisk: "shadows-shipped-ui",
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}",
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"
2507
2660
  },
2508
2661
  {
2509
2662
  key: "conversation.chat.node",
@@ -2517,23 +2670,24 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2517
2670
  type: "string",
2518
2671
  doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
2519
2672
  }],
2520
- 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}"],
2521
2674
  ownerPropsReferences: [
2522
2675
  "MarkdownFileMentions",
2523
2676
  "MessageImageLoader",
2524
2677
  "OpenFileOptions",
2525
- "RenderMessageImages",
2526
2678
  "TurnProcessOwnerProps",
2527
2679
  "TurnTailOwnerProps"
2528
2680
  ],
2529
2681
  standardProps: [
2682
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2530
2683
  "useResource: UseResource",
2531
2684
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2532
2685
  "usePanelInfo: UsePanelInfo",
2533
2686
  "useSessions: UseSessions",
2534
2687
  "useSessionStatus: UseSessionStatus",
2535
2688
  "useSessionRetainInfo: UseSessionRetainInfo",
2536
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2689
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2690
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2537
2691
  "useChat: UseChat",
2538
2692
  "useConversation: UseConversation",
2539
2693
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2541,12 +2695,13 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2541
2695
  "useSession: SessionSnapshotSelector",
2542
2696
  "sessionId: SessionId",
2543
2697
  "useProjection: UseProjection",
2698
+ "useAccess: (action: RemoteEndpoint) => boolean",
2544
2699
  "useTrajectory: UseTrajectory"
2545
2700
  ],
2546
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",
2547
2702
  hookContext: "ChatNodeHookContext",
2548
2703
  slotInject: "ChatNodeInjected",
2549
- declaredBy: "an entry in 'conversation.view' (client-ui-chat), so it exists while that entry is mounted",
2704
+ declaredBy: "an entry in 'conversation.chat.flow' (client-ui-chat), so it exists while that entry is mounted",
2550
2705
  occupants: [
2551
2706
  "client-ui-chat UserMessageNodeView key 'user'",
2552
2707
  "client-ui-chat UserMessageNodeView key 'steering'",
@@ -2570,7 +2725,45 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2570
2725
  ],
2571
2726
  replaceRisk: "shadows-shipped-ui",
2572
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}",
2573
- source: "packages/client/ui-chat/src/client/contract/slots.ts:290"
2728
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:402"
2729
+ },
2730
+ {
2731
+ key: "conversation.chat.reasoning.body",
2732
+ kind: "single",
2733
+ scope: "session",
2734
+ summary: "Expanded reasoning body with the unchanged model text.",
2735
+ doc: "Expanded reasoning body with the unchanged model text. The official entry\nhas priority 100 and calls the reasoning Content Factory; smaller priority\nvalues replace it. Contributions must preserve access to the original text.",
2736
+ registerOptions: [],
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}"],
2738
+ ownerPropsReferences: [],
2739
+ standardProps: [
2740
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2741
+ "useResource: UseResource",
2742
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2743
+ "usePanelInfo: UsePanelInfo",
2744
+ "useSessions: UseSessions",
2745
+ "useSessionStatus: UseSessionStatus",
2746
+ "useSessionRetainInfo: UseSessionRetainInfo",
2747
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2748
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2749
+ "useChat: UseChat",
2750
+ "useConversation: UseConversation",
2751
+ "useInput: SnapshotSelectorHook<InputState>",
2752
+ "inputActions: InputActions",
2753
+ "useSession: SessionSnapshotSelector",
2754
+ "sessionId: SessionId",
2755
+ "useProjection: UseProjection",
2756
+ "useAccess: (action: RemoteEndpoint) => boolean",
2757
+ "useTrajectory: UseTrajectory"
2758
+ ],
2759
+ keyDomain: "",
2760
+ hookContext: "",
2761
+ slotInject: "",
2762
+ declaredBy: "an entry in 'conversation.chat.node' (client-ui-chat), so it exists while that entry is mounted",
2763
+ occupants: ["client-ui-chat DefaultReasoningBody", "experimental-client-ui-cot-translation TranslationBody"],
2764
+ replaceRisk: "shadows-shipped-ui",
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}",
2766
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:429"
2574
2767
  },
2575
2768
  {
2576
2769
  key: "conversation.chat.turnTail",
@@ -2601,13 +2794,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2601
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}"],
2602
2795
  ownerPropsReferences: ["TurnLocation"],
2603
2796
  standardProps: [
2797
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2604
2798
  "useResource: UseResource",
2605
2799
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2606
2800
  "usePanelInfo: UsePanelInfo",
2607
2801
  "useSessions: UseSessions",
2608
2802
  "useSessionStatus: UseSessionStatus",
2609
2803
  "useSessionRetainInfo: UseSessionRetainInfo",
2610
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2804
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2805
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2611
2806
  "useChat: UseChat",
2612
2807
  "useConversation: UseConversation",
2613
2808
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2615,6 +2810,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2615
2810
  "useSession: SessionSnapshotSelector",
2616
2811
  "sessionId: SessionId",
2617
2812
  "useProjection: UseProjection",
2813
+ "useAccess: (action: RemoteEndpoint) => boolean",
2618
2814
  "useTrajectory: UseTrajectory"
2619
2815
  ],
2620
2816
  keyDomain: "",
@@ -2628,7 +2824,49 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2628
2824
  ],
2629
2825
  replaceRisk: "none",
2630
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}",
2631
- source: "packages/client/ui-chat/src/client/contract/slots.ts:315"
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"
2632
2870
  },
2633
2871
  {
2634
2872
  key: "conversation.composer",
@@ -2649,13 +2887,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2649
2887
  "SessionSnapshot"
2650
2888
  ],
2651
2889
  standardProps: [
2890
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2652
2891
  "useResource: UseResource",
2653
2892
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2654
2893
  "usePanelInfo: UsePanelInfo",
2655
2894
  "useSessions: UseSessions",
2656
2895
  "useSessionStatus: UseSessionStatus",
2657
2896
  "useSessionRetainInfo: UseSessionRetainInfo",
2658
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2897
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2898
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2659
2899
  "useChat: UseChat",
2660
2900
  "useConversation: UseConversation",
2661
2901
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2663,6 +2903,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2663
2903
  "useSession: SessionSnapshotSelector",
2664
2904
  "sessionId: SessionId",
2665
2905
  "useProjection: UseProjection",
2906
+ "useAccess: (action: RemoteEndpoint) => boolean",
2666
2907
  "useTrajectory: UseTrajectory"
2667
2908
  ],
2668
2909
  keyDomain: "",
@@ -2676,7 +2917,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2676
2917
  ],
2677
2918
  replaceRisk: "none",
2678
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}",
2679
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:187"
2920
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:260"
2680
2921
  },
2681
2922
  {
2682
2923
  key: "conversation.composer.bar",
@@ -2688,19 +2929,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2688
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}"],
2689
2930
  ownerPropsReferences: ["Workspace"],
2690
2931
  standardProps: [
2932
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2691
2933
  "useResource: UseResource",
2692
2934
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2693
2935
  "usePanelInfo: UsePanelInfo",
2694
2936
  "useSessions: UseSessions",
2695
2937
  "useSessionStatus: UseSessionStatus",
2696
2938
  "useSessionRetainInfo: UseSessionRetainInfo",
2697
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2939
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2940
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2698
2941
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2699
2942
  "useInput: MaybeSnapshotSelectorHook<InputState>",
2700
2943
  "inputActions: InputActions | undefined",
2701
2944
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
2702
2945
  "sessionId: SessionId | undefined",
2703
- "useProjection: UseProjection"
2946
+ "useProjection: UseProjection",
2947
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
2704
2948
  ],
2705
2949
  keyDomain: "",
2706
2950
  hookContext: "",
@@ -2709,7 +2953,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2709
2953
  occupants: ["client-ui-conversation InputBar"],
2710
2954
  replaceRisk: "shadows-shipped-ui",
2711
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}",
2712
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:207"
2956
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:282"
2713
2957
  },
2714
2958
  {
2715
2959
  key: "conversation.composer.dock",
@@ -2740,13 +2984,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2740
2984
  ownerProps: [],
2741
2985
  ownerPropsReferences: [],
2742
2986
  standardProps: [
2987
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2743
2988
  "useResource: UseResource",
2744
2989
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2745
2990
  "usePanelInfo: UsePanelInfo",
2746
2991
  "useSessions: UseSessions",
2747
2992
  "useSessionStatus: UseSessionStatus",
2748
2993
  "useSessionRetainInfo: UseSessionRetainInfo",
2749
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2994
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
2995
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2750
2996
  "useChat: UseChat",
2751
2997
  "useConversation: UseConversation",
2752
2998
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2754,6 +3000,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2754
3000
  "useSession: SessionSnapshotSelector",
2755
3001
  "sessionId: SessionId",
2756
3002
  "useProjection: UseProjection",
3003
+ "useAccess: (action: RemoteEndpoint) => boolean",
2757
3004
  "useTrajectory: UseTrajectory"
2758
3005
  ],
2759
3006
  keyDomain: "",
@@ -2763,7 +3010,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2763
3010
  occupants: ["client-ui-chat ActivityPill id 'activity'", "client-ui-chat UsagePill id 'usage'"],
2764
3011
  replaceRisk: "none",
2765
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}",
2766
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:199"
3013
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:274"
2767
3014
  },
2768
3015
  {
2769
3016
  key: "conversation.header",
@@ -2775,19 +3022,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2775
3022
  ownerProps: [],
2776
3023
  ownerPropsReferences: [],
2777
3024
  standardProps: [
3025
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2778
3026
  "useResource: UseResource",
2779
3027
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2780
3028
  "usePanelInfo: UsePanelInfo",
2781
3029
  "useSessions: UseSessions",
2782
3030
  "useSessionStatus: UseSessionStatus",
2783
3031
  "useSessionRetainInfo: UseSessionRetainInfo",
2784
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3032
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3033
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2785
3034
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2786
3035
  "useInput: MaybeSnapshotSelectorHook<InputState>",
2787
3036
  "inputActions: InputActions | undefined",
2788
3037
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
2789
3038
  "sessionId: SessionId | undefined",
2790
- "useProjection: UseProjection"
3039
+ "useProjection: UseProjection",
3040
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
2791
3041
  ],
2792
3042
  keyDomain: "",
2793
3043
  hookContext: "",
@@ -2796,7 +3046,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2796
3046
  occupants: ["client-ui-conversation ConversationHeader"],
2797
3047
  replaceRisk: "shadows-shipped-ui",
2798
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}",
2799
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:139"
3049
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:212"
2800
3050
  },
2801
3051
  {
2802
3052
  key: "conversation.header.leading",
@@ -2808,13 +3058,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2808
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}"],
2809
3059
  ownerPropsReferences: [],
2810
3060
  standardProps: [
3061
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2811
3062
  "useResource: UseResource",
2812
3063
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2813
3064
  "usePanelInfo: UsePanelInfo",
2814
3065
  "useSessions: UseSessions",
2815
3066
  "useSessionStatus: UseSessionStatus",
2816
3067
  "useSessionRetainInfo: UseSessionRetainInfo",
2817
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3068
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3069
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
2818
3070
  ],
2819
3071
  keyDomain: "",
2820
3072
  hookContext: "",
@@ -2823,7 +3075,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2823
3075
  occupants: [],
2824
3076
  replaceRisk: "none",
2825
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}",
2826
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:168"
3078
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:241"
2827
3079
  },
2828
3080
  {
2829
3081
  key: "conversation.hero.agentPreset",
@@ -2835,19 +3087,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2835
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}"],
2836
3088
  ownerPropsReferences: [],
2837
3089
  standardProps: [
3090
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2838
3091
  "useResource: UseResource",
2839
3092
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2840
3093
  "usePanelInfo: UsePanelInfo",
2841
3094
  "useSessions: UseSessions",
2842
3095
  "useSessionStatus: UseSessionStatus",
2843
3096
  "useSessionRetainInfo: UseSessionRetainInfo",
2844
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3097
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3098
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2845
3099
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2846
3100
  "useInput: MaybeSnapshotSelectorHook<InputState>",
2847
3101
  "inputActions: InputActions | undefined",
2848
3102
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
2849
3103
  "sessionId: SessionId | undefined",
2850
- "useProjection: UseProjection"
3104
+ "useProjection: UseProjection",
3105
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
2851
3106
  ],
2852
3107
  keyDomain: "",
2853
3108
  hookContext: "",
@@ -2856,7 +3111,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2856
3111
  occupants: ["client-ui-agent-preset AgentPresetSeat"],
2857
3112
  replaceRisk: "shadows-shipped-ui",
2858
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}",
2859
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:193"
3114
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:266"
2860
3115
  },
2861
3116
  {
2862
3117
  key: "conversation.hero.brand.mark",
@@ -2868,13 +3123,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2868
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}"],
2869
3124
  ownerPropsReferences: [],
2870
3125
  standardProps: [
3126
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2871
3127
  "useResource: UseResource",
2872
3128
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2873
3129
  "usePanelInfo: UsePanelInfo",
2874
3130
  "useSessions: UseSessions",
2875
3131
  "useSessionStatus: UseSessionStatus",
2876
3132
  "useSessionRetainInfo: UseSessionRetainInfo",
2877
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3133
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3134
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
2878
3135
  ],
2879
3136
  keyDomain: "",
2880
3137
  hookContext: "",
@@ -2883,7 +3140,64 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2883
3140
  occupants: [],
2884
3141
  replaceRisk: "none",
2885
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}",
2886
- 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"
2887
3201
  },
2888
3202
  {
2889
3203
  key: "conversation.hero.workspace",
@@ -2895,13 +3209,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2895
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}"],
2896
3210
  ownerPropsReferences: ["Workspace"],
2897
3211
  standardProps: [
3212
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2898
3213
  "useResource: UseResource",
2899
3214
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2900
3215
  "usePanelInfo: UsePanelInfo",
2901
3216
  "useSessions: UseSessions",
2902
3217
  "useSessionStatus: UseSessionStatus",
2903
3218
  "useSessionRetainInfo: UseSessionRetainInfo",
2904
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3219
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3220
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
2905
3221
  ],
2906
3222
  keyDomain: "",
2907
3223
  hookContext: "",
@@ -2910,7 +3226,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2910
3226
  occupants: ["client-ui-workspace WorkspacePicker"],
2911
3227
  replaceRisk: "shadows-shipped-ui",
2912
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}",
2913
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:189"
3229
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:262"
2914
3230
  },
2915
3231
  {
2916
3232
  key: "conversation.hero.workspace.directoryFlow",
@@ -2922,13 +3238,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2922
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}"],
2923
3239
  ownerPropsReferences: [],
2924
3240
  standardProps: [
3241
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2925
3242
  "useResource: UseResource",
2926
3243
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2927
3244
  "usePanelInfo: UsePanelInfo",
2928
3245
  "useSessions: UseSessions",
2929
3246
  "useSessionStatus: UseSessionStatus",
2930
3247
  "useSessionRetainInfo: UseSessionRetainInfo",
2931
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3248
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3249
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
2932
3250
  ],
2933
3251
  keyDomain: "",
2934
3252
  hookContext: "",
@@ -2937,7 +3255,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2937
3255
  occupants: ["client-ui-directory-picker-browse BrowseDirectoryFlow", "client-ui-directory-picker-native NativeDirectoryFlow"],
2938
3256
  replaceRisk: "shadows-shipped-ui",
2939
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}",
2940
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:117"
3258
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:119"
2941
3259
  },
2942
3260
  {
2943
3261
  key: "conversation.input.activity",
@@ -2949,13 +3267,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2949
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}"],
2950
3268
  ownerPropsReferences: ["InputControlOwnerProps"],
2951
3269
  standardProps: [
3270
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2952
3271
  "useResource: UseResource",
2953
3272
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2954
3273
  "usePanelInfo: UsePanelInfo",
2955
3274
  "useSessions: UseSessions",
2956
3275
  "useSessionStatus: UseSessionStatus",
2957
3276
  "useSessionRetainInfo: UseSessionRetainInfo",
2958
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3277
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3278
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2959
3279
  "useChat: UseChat",
2960
3280
  "useConversation: UseConversation",
2961
3281
  "useInput: SnapshotSelectorHook<InputState>",
@@ -2963,6 +3283,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2963
3283
  "useSession: SessionSnapshotSelector",
2964
3284
  "sessionId: SessionId",
2965
3285
  "useProjection: UseProjection",
3286
+ "useAccess: (action: RemoteEndpoint) => boolean",
2966
3287
  "useTrajectory: UseTrajectory"
2967
3288
  ],
2968
3289
  keyDomain: "",
@@ -2972,7 +3293,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2972
3293
  occupants: ["experimental-client-ui-voice-input VoiceInput"],
2973
3294
  replaceRisk: "shadows-shipped-ui",
2974
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}",
2975
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:205"
3296
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:280"
2976
3297
  },
2977
3298
  {
2978
3299
  key: "conversation.input.attachments",
@@ -2988,19 +3309,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2988
3309
  "DraftFileUploads"
2989
3310
  ],
2990
3311
  standardProps: [
3312
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
2991
3313
  "useResource: UseResource",
2992
3314
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2993
3315
  "usePanelInfo: UsePanelInfo",
2994
3316
  "useSessions: UseSessions",
2995
3317
  "useSessionStatus: UseSessionStatus",
2996
3318
  "useSessionRetainInfo: UseSessionRetainInfo",
2997
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3319
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3320
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
2998
3321
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2999
3322
  "useInput: MaybeSnapshotSelectorHook<InputState>",
3000
3323
  "inputActions: InputActions | undefined",
3001
3324
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
3002
3325
  "sessionId: SessionId | undefined",
3003
- "useProjection: UseProjection"
3326
+ "useProjection: UseProjection",
3327
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
3004
3328
  ],
3005
3329
  keyDomain: "",
3006
3330
  hookContext: "",
@@ -3009,7 +3333,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3009
3333
  occupants: ["client-ui-attachment ComposerAttachments"],
3010
3334
  replaceRisk: "shadows-shipped-ui",
3011
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}",
3012
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:209"
3336
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:284"
3013
3337
  },
3014
3338
  {
3015
3339
  key: "conversation.input.dock",
@@ -3040,13 +3364,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3040
3364
  ownerProps: ["/** Point-in-time owner values for composer extension entries. */\nexport interface InputZone {\n readonly session: SessionSnapshot\n readonly input: InputState\n}"],
3041
3365
  ownerPropsReferences: ["InputState", "SessionSnapshot"],
3042
3366
  standardProps: [
3367
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3043
3368
  "useResource: UseResource",
3044
3369
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3045
3370
  "usePanelInfo: UsePanelInfo",
3046
3371
  "useSessions: UseSessions",
3047
3372
  "useSessionStatus: UseSessionStatus",
3048
3373
  "useSessionRetainInfo: UseSessionRetainInfo",
3049
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3374
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3375
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3050
3376
  "useChat: UseChat",
3051
3377
  "useConversation: UseConversation",
3052
3378
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3054,6 +3380,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3054
3380
  "useSession: SessionSnapshotSelector",
3055
3381
  "sessionId: SessionId",
3056
3382
  "useProjection: UseProjection",
3383
+ "useAccess: (action: RemoteEndpoint) => boolean",
3057
3384
  "useTrajectory: UseTrajectory"
3058
3385
  ],
3059
3386
  keyDomain: "",
@@ -3068,7 +3395,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3068
3395
  ],
3069
3396
  replaceRisk: "none",
3070
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}",
3071
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:195"
3398
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:270"
3072
3399
  },
3073
3400
  {
3074
3401
  key: "conversation.input.left",
@@ -3099,13 +3426,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3099
3426
  ownerProps: [],
3100
3427
  ownerPropsReferences: [],
3101
3428
  standardProps: [
3429
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3102
3430
  "useResource: UseResource",
3103
3431
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3104
3432
  "usePanelInfo: UsePanelInfo",
3105
3433
  "useSessions: UseSessions",
3106
3434
  "useSessionStatus: UseSessionStatus",
3107
3435
  "useSessionRetainInfo: UseSessionRetainInfo",
3108
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3436
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3437
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3109
3438
  "useChat: UseChat",
3110
3439
  "useConversation: UseConversation",
3111
3440
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3113,6 +3442,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3113
3442
  "useSession: SessionSnapshotSelector",
3114
3443
  "sessionId: SessionId",
3115
3444
  "useProjection: UseProjection",
3445
+ "useAccess: (action: RemoteEndpoint) => boolean",
3116
3446
  "useTrajectory: UseTrajectory"
3117
3447
  ],
3118
3448
  keyDomain: "",
@@ -3122,7 +3452,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3122
3452
  occupants: [],
3123
3453
  replaceRisk: "none",
3124
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}",
3125
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:201"
3455
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:276"
3126
3456
  },
3127
3457
  {
3128
3458
  key: "conversation.input.model",
@@ -3134,13 +3464,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3134
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}"],
3135
3465
  ownerPropsReferences: [],
3136
3466
  standardProps: [
3467
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3137
3468
  "useResource: UseResource",
3138
3469
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3139
3470
  "usePanelInfo: UsePanelInfo",
3140
3471
  "useSessions: UseSessions",
3141
3472
  "useSessionStatus: UseSessionStatus",
3142
3473
  "useSessionRetainInfo: UseSessionRetainInfo",
3143
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3474
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3475
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3144
3476
  "useChat: UseChat",
3145
3477
  "useConversation: UseConversation",
3146
3478
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3148,6 +3480,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3148
3480
  "useSession: SessionSnapshotSelector",
3149
3481
  "sessionId: SessionId",
3150
3482
  "useProjection: UseProjection",
3483
+ "useAccess: (action: RemoteEndpoint) => boolean",
3151
3484
  "useTrajectory: UseTrajectory"
3152
3485
  ],
3153
3486
  keyDomain: "",
@@ -3157,7 +3490,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3157
3490
  occupants: ["client-ui-model-selection ModelSelect"],
3158
3491
  replaceRisk: "shadows-shipped-ui",
3159
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}",
3160
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:223"
3493
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:298"
3161
3494
  },
3162
3495
  {
3163
3496
  key: "conversation.input.overlay",
@@ -3188,13 +3521,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3188
3521
  ownerProps: [],
3189
3522
  ownerPropsReferences: [],
3190
3523
  standardProps: [
3524
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3191
3525
  "useResource: UseResource",
3192
3526
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3193
3527
  "usePanelInfo: UsePanelInfo",
3194
3528
  "useSessions: UseSessions",
3195
3529
  "useSessionStatus: UseSessionStatus",
3196
3530
  "useSessionRetainInfo: UseSessionRetainInfo",
3197
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3531
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3532
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3198
3533
  "useChat: UseChat",
3199
3534
  "useConversation: UseConversation",
3200
3535
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3202,6 +3537,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3202
3537
  "useSession: SessionSnapshotSelector",
3203
3538
  "sessionId: SessionId",
3204
3539
  "useProjection: UseProjection",
3540
+ "useAccess: (action: RemoteEndpoint) => boolean",
3205
3541
  "useTrajectory: UseTrajectory"
3206
3542
  ],
3207
3543
  keyDomain: "",
@@ -3215,7 +3551,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3215
3551
  ],
3216
3552
  replaceRisk: "none",
3217
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}",
3218
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:197"
3554
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:272"
3219
3555
  },
3220
3556
  {
3221
3557
  key: "conversation.input.permission",
@@ -3227,13 +3563,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3227
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}"],
3228
3564
  ownerPropsReferences: [],
3229
3565
  standardProps: [
3566
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3230
3567
  "useResource: UseResource",
3231
3568
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3232
3569
  "usePanelInfo: UsePanelInfo",
3233
3570
  "useSessions: UseSessions",
3234
3571
  "useSessionStatus: UseSessionStatus",
3235
3572
  "useSessionRetainInfo: UseSessionRetainInfo",
3236
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3573
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3574
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3237
3575
  "useChat: UseChat",
3238
3576
  "useConversation: UseConversation",
3239
3577
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3241,6 +3579,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3241
3579
  "useSession: SessionSnapshotSelector",
3242
3580
  "sessionId: SessionId",
3243
3581
  "useProjection: UseProjection",
3582
+ "useAccess: (action: RemoteEndpoint) => boolean",
3244
3583
  "useTrajectory: UseTrajectory"
3245
3584
  ],
3246
3585
  keyDomain: "",
@@ -3250,7 +3589,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3250
3589
  occupants: ["client-ui-permission-presets PermissionSelect"],
3251
3590
  replaceRisk: "shadows-shipped-ui",
3252
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}",
3253
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:217"
3592
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:292"
3254
3593
  },
3255
3594
  {
3256
3595
  key: "conversation.input.plan",
@@ -3262,13 +3601,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3262
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}"],
3263
3602
  ownerPropsReferences: [],
3264
3603
  standardProps: [
3604
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3265
3605
  "useResource: UseResource",
3266
3606
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3267
3607
  "usePanelInfo: UsePanelInfo",
3268
3608
  "useSessions: UseSessions",
3269
3609
  "useSessionStatus: UseSessionStatus",
3270
3610
  "useSessionRetainInfo: UseSessionRetainInfo",
3271
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3611
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3612
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3272
3613
  "useChat: UseChat",
3273
3614
  "useConversation: UseConversation",
3274
3615
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3276,6 +3617,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3276
3617
  "useSession: SessionSnapshotSelector",
3277
3618
  "sessionId: SessionId",
3278
3619
  "useProjection: UseProjection",
3620
+ "useAccess: (action: RemoteEndpoint) => boolean",
3279
3621
  "useTrajectory: UseTrajectory"
3280
3622
  ],
3281
3623
  keyDomain: "",
@@ -3285,7 +3627,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3285
3627
  occupants: ["client-ui-plan PlanChip"],
3286
3628
  replaceRisk: "shadows-shipped-ui",
3287
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}",
3288
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:215"
3630
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:290"
3289
3631
  },
3290
3632
  {
3291
3633
  key: "conversation.input.right",
@@ -3316,13 +3658,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3316
3658
  ownerProps: [],
3317
3659
  ownerPropsReferences: [],
3318
3660
  standardProps: [
3661
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3319
3662
  "useResource: UseResource",
3320
3663
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3321
3664
  "usePanelInfo: UsePanelInfo",
3322
3665
  "useSessions: UseSessions",
3323
3666
  "useSessionStatus: UseSessionStatus",
3324
3667
  "useSessionRetainInfo: UseSessionRetainInfo",
3325
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3668
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3669
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3326
3670
  "useChat: UseChat",
3327
3671
  "useConversation: UseConversation",
3328
3672
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3330,6 +3674,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3330
3674
  "useSession: SessionSnapshotSelector",
3331
3675
  "sessionId: SessionId",
3332
3676
  "useProjection: UseProjection",
3677
+ "useAccess: (action: RemoteEndpoint) => boolean",
3333
3678
  "useTrajectory: UseTrajectory"
3334
3679
  ],
3335
3680
  keyDomain: "",
@@ -3339,46 +3684,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3339
3684
  occupants: [],
3340
3685
  replaceRisk: "none",
3341
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}",
3342
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:203"
3343
- },
3344
- {
3345
- key: "conversation.message.images",
3346
- kind: "single",
3347
- scope: "session",
3348
- summary: "Renderer for one consecutive group of durable message images.",
3349
- 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.",
3350
- registerOptions: [],
3351
- 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}"],
3352
- ownerPropsReferences: [
3353
- "Message",
3354
- "MessageImageLoader",
3355
- "MessageImageSource"
3356
- ],
3357
- standardProps: [
3358
- "useResource: UseResource",
3359
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3360
- "usePanelInfo: UsePanelInfo",
3361
- "useSessions: UseSessions",
3362
- "useSessionStatus: UseSessionStatus",
3363
- "useSessionRetainInfo: UseSessionRetainInfo",
3364
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3365
- "useChat: UseChat",
3366
- "useConversation: UseConversation",
3367
- "useInput: SnapshotSelectorHook<InputState>",
3368
- "inputActions: InputActions",
3369
- "useSession: SessionSnapshotSelector",
3370
- "sessionId: SessionId",
3371
- "useProjection: UseProjection",
3372
- "useTrajectory: UseTrajectory"
3373
- ],
3374
- keyDomain: "",
3375
- hookContext: "",
3376
- slotInject: "",
3377
- declaredBy: "an entry in 'conversation.view' (client-ui-chat), so it exists while that entry is mounted",
3378
- occupants: ["client-ui-attachment MessageImages"],
3379
- replaceRisk: "shadows-shipped-ui",
3380
- 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}",
3381
- source: "packages/client/ui-chat/src/client/contract/slots.ts:303"
3687
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:278"
3382
3688
  },
3383
3689
  {
3384
3690
  key: "conversation.plan-review.actions",
@@ -3409,13 +3715,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3409
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}"],
3410
3716
  ownerPropsReferences: [],
3411
3717
  standardProps: [
3718
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3412
3719
  "useResource: UseResource",
3413
3720
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3414
3721
  "usePanelInfo: UsePanelInfo",
3415
3722
  "useSessions: UseSessions",
3416
3723
  "useSessionStatus: UseSessionStatus",
3417
3724
  "useSessionRetainInfo: UseSessionRetainInfo",
3418
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3725
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3726
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3419
3727
  "useChat: UseChat",
3420
3728
  "useConversation: UseConversation",
3421
3729
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3423,6 +3731,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3423
3731
  "useSession: SessionSnapshotSelector",
3424
3732
  "sessionId: SessionId",
3425
3733
  "useProjection: UseProjection",
3734
+ "useAccess: (action: RemoteEndpoint) => boolean",
3426
3735
  "useTrajectory: UseTrajectory"
3427
3736
  ],
3428
3737
  keyDomain: "",
@@ -3444,13 +3753,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3444
3753
  ownerProps: [],
3445
3754
  ownerPropsReferences: [],
3446
3755
  standardProps: [
3756
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3447
3757
  "useResource: UseResource",
3448
3758
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3449
3759
  "usePanelInfo: UsePanelInfo",
3450
3760
  "useSessions: UseSessions",
3451
3761
  "useSessionStatus: UseSessionStatus",
3452
3762
  "useSessionRetainInfo: UseSessionRetainInfo",
3453
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3763
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3764
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3454
3765
  "useChat: UseChat",
3455
3766
  "useConversation: UseConversation",
3456
3767
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3458,6 +3769,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3458
3769
  "useSession: SessionSnapshotSelector",
3459
3770
  "sessionId: SessionId",
3460
3771
  "useProjection: UseProjection",
3772
+ "useAccess: (action: RemoteEndpoint) => boolean",
3461
3773
  "useTrajectory: UseTrajectory"
3462
3774
  ],
3463
3775
  keyDomain: "",
@@ -3467,7 +3779,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3467
3779
  occupants: ["client-ui-conversation ConversationSession"],
3468
3780
  replaceRisk: "shadows-shipped-ui",
3469
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}",
3470
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:133"
3782
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:206"
3471
3783
  },
3472
3784
  {
3473
3785
  key: "conversation.session.header",
@@ -3479,13 +3791,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3479
3791
  ownerProps: [],
3480
3792
  ownerPropsReferences: [],
3481
3793
  standardProps: [
3794
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3482
3795
  "useResource: UseResource",
3483
3796
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3484
3797
  "usePanelInfo: UsePanelInfo",
3485
3798
  "useSessions: UseSessions",
3486
3799
  "useSessionStatus: UseSessionStatus",
3487
3800
  "useSessionRetainInfo: UseSessionRetainInfo",
3488
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3801
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3802
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3489
3803
  "useChat: UseChat",
3490
3804
  "useConversation: UseConversation",
3491
3805
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3493,6 +3807,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3493
3807
  "useSession: SessionSnapshotSelector",
3494
3808
  "sessionId: SessionId",
3495
3809
  "useProjection: UseProjection",
3810
+ "useAccess: (action: RemoteEndpoint) => boolean",
3496
3811
  "useTrajectory: UseTrajectory"
3497
3812
  ],
3498
3813
  keyDomain: "",
@@ -3502,7 +3817,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3502
3817
  occupants: ["client-ui-conversation ConversationSessionHeader"],
3503
3818
  replaceRisk: "shadows-shipped-ui",
3504
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}",
3505
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:141"
3820
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:214"
3506
3821
  },
3507
3822
  {
3508
3823
  key: "conversation.session.header.actions",
@@ -3533,13 +3848,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3533
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}"],
3534
3849
  ownerPropsReferences: [],
3535
3850
  standardProps: [
3851
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3536
3852
  "useResource: UseResource",
3537
3853
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3538
3854
  "usePanelInfo: UsePanelInfo",
3539
3855
  "useSessions: UseSessions",
3540
3856
  "useSessionStatus: UseSessionStatus",
3541
3857
  "useSessionRetainInfo: UseSessionRetainInfo",
3542
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3858
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3859
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3543
3860
  "useChat: UseChat",
3544
3861
  "useConversation: UseConversation",
3545
3862
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3547,6 +3864,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3547
3864
  "useSession: SessionSnapshotSelector",
3548
3865
  "sessionId: SessionId",
3549
3866
  "useProjection: UseProjection",
3867
+ "useAccess: (action: RemoteEndpoint) => boolean",
3550
3868
  "useTrajectory: UseTrajectory"
3551
3869
  ],
3552
3870
  keyDomain: "",
@@ -3561,7 +3879,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3561
3879
  ],
3562
3880
  replaceRisk: "none",
3563
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}",
3564
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:156"
3882
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:229"
3565
3883
  },
3566
3884
  {
3567
3885
  key: "conversation.session.header.corner",
@@ -3573,13 +3891,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3573
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}"],
3574
3892
  ownerPropsReferences: [],
3575
3893
  standardProps: [
3894
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3576
3895
  "useResource: UseResource",
3577
3896
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3578
3897
  "usePanelInfo: UsePanelInfo",
3579
3898
  "useSessions: UseSessions",
3580
3899
  "useSessionStatus: UseSessionStatus",
3581
3900
  "useSessionRetainInfo: UseSessionRetainInfo",
3582
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3901
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3902
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3583
3903
  "useChat: UseChat",
3584
3904
  "useConversation: UseConversation",
3585
3905
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3587,6 +3907,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3587
3907
  "useSession: SessionSnapshotSelector",
3588
3908
  "sessionId: SessionId",
3589
3909
  "useProjection: UseProjection",
3910
+ "useAccess: (action: RemoteEndpoint) => boolean",
3590
3911
  "useTrajectory: UseTrajectory"
3591
3912
  ],
3592
3913
  keyDomain: "",
@@ -3596,7 +3917,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3596
3917
  occupants: ["client-ui-sidebar-right ExpandButton"],
3597
3918
  replaceRisk: "shadows-shipped-ui",
3598
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}",
3599
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:179"
3920
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:252"
3600
3921
  },
3601
3922
  {
3602
3923
  key: "conversation.session.header.lineage",
@@ -3608,13 +3929,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3608
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}"],
3609
3930
  ownerPropsReferences: ["SessionId"],
3610
3931
  standardProps: [
3932
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3611
3933
  "useResource: UseResource",
3612
3934
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3613
3935
  "usePanelInfo: UsePanelInfo",
3614
3936
  "useSessions: UseSessions",
3615
3937
  "useSessionStatus: UseSessionStatus",
3616
3938
  "useSessionRetainInfo: UseSessionRetainInfo",
3617
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3939
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3940
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3618
3941
  "useChat: UseChat",
3619
3942
  "useConversation: UseConversation",
3620
3943
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3622,6 +3945,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3622
3945
  "useSession: SessionSnapshotSelector",
3623
3946
  "sessionId: SessionId",
3624
3947
  "useProjection: UseProjection",
3948
+ "useAccess: (action: RemoteEndpoint) => boolean",
3625
3949
  "useTrajectory: UseTrajectory"
3626
3950
  ],
3627
3951
  keyDomain: "",
@@ -3631,7 +3955,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3631
3955
  occupants: ["client-ui-subagent SubagentHeaderLineage"],
3632
3956
  replaceRisk: "shadows-shipped-ui",
3633
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}",
3634
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:150"
3958
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:223"
3635
3959
  },
3636
3960
  {
3637
3961
  key: "conversation.session.header.utilities",
@@ -3662,13 +3986,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3662
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}"],
3663
3987
  ownerPropsReferences: [],
3664
3988
  standardProps: [
3989
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3665
3990
  "useResource: UseResource",
3666
3991
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3667
3992
  "usePanelInfo: UsePanelInfo",
3668
3993
  "useSessions: UseSessions",
3669
3994
  "useSessionStatus: UseSessionStatus",
3670
3995
  "useSessionRetainInfo: UseSessionRetainInfo",
3671
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3996
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
3997
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3672
3998
  "useChat: UseChat",
3673
3999
  "useConversation: UseConversation",
3674
4000
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3676,6 +4002,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3676
4002
  "useSession: SessionSnapshotSelector",
3677
4003
  "sessionId: SessionId",
3678
4004
  "useProjection: UseProjection",
4005
+ "useAccess: (action: RemoteEndpoint) => boolean",
3679
4006
  "useTrajectory: UseTrajectory"
3680
4007
  ],
3681
4008
  keyDomain: "",
@@ -3689,7 +4016,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3689
4016
  ],
3690
4017
  replaceRisk: "none",
3691
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}",
3692
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:162"
4019
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:235"
3693
4020
  },
3694
4021
  {
3695
4022
  key: "conversation.trajectory.images",
@@ -3705,13 +4032,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3705
4032
  "MessageImageSource"
3706
4033
  ],
3707
4034
  standardProps: [
4035
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3708
4036
  "useResource: UseResource",
3709
4037
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3710
4038
  "usePanelInfo: UsePanelInfo",
3711
4039
  "useSessions: UseSessions",
3712
4040
  "useSessionStatus: UseSessionStatus",
3713
4041
  "useSessionRetainInfo: UseSessionRetainInfo",
3714
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4042
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4043
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3715
4044
  "useChat: UseChat",
3716
4045
  "useConversation: UseConversation",
3717
4046
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3719,6 +4048,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3719
4048
  "useSession: SessionSnapshotSelector",
3720
4049
  "sessionId: SessionId",
3721
4050
  "useProjection: UseProjection",
4051
+ "useAccess: (action: RemoteEndpoint) => boolean",
3722
4052
  "useTrajectory: UseTrajectory"
3723
4053
  ],
3724
4054
  keyDomain: "",
@@ -3728,7 +4058,58 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3728
4058
  occupants: ["client-ui-attachment MessageImages"],
3729
4059
  replaceRisk: "shadows-shipped-ui",
3730
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}",
3731
- source: "packages/client/ui-trajectory/src/client/trajectory-contract.ts:98"
4061
+ source: "packages/client/ui-trajectory/src/client/trajectory-contract.ts:103"
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"
3732
4113
  },
3733
4114
  {
3734
4115
  key: "conversation.view",
@@ -3759,13 +4140,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3759
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}"],
3760
4141
  ownerPropsReferences: ["ConversationViewRequest"],
3761
4142
  standardProps: [
4143
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3762
4144
  "useResource: UseResource",
3763
4145
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3764
4146
  "usePanelInfo: UsePanelInfo",
3765
4147
  "useSessions: UseSessions",
3766
4148
  "useSessionStatus: UseSessionStatus",
3767
4149
  "useSessionRetainInfo: UseSessionRetainInfo",
3768
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4150
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4151
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3769
4152
  "useChat: UseChat",
3770
4153
  "useConversation: UseConversation",
3771
4154
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3773,6 +4156,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3773
4156
  "useSession: SessionSnapshotSelector",
3774
4157
  "sessionId: SessionId",
3775
4158
  "useProjection: UseProjection",
4159
+ "useAccess: (action: RemoteEndpoint) => boolean",
3776
4160
  "useTrajectory: UseTrajectory"
3777
4161
  ],
3778
4162
  keyDomain: "",
@@ -3782,7 +4166,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3782
4166
  occupants: ["client-ui-chat ChatView id 'chat'", "client-ui-trajectory TrajectoryView id 'trajectory'"],
3783
4167
  replaceRisk: "none",
3784
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}",
3785
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:185"
4169
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:258"
3786
4170
  },
3787
4171
  {
3788
4172
  key: "deliverables.file.actions",
@@ -3813,13 +4197,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3813
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"],
3814
4198
  ownerPropsReferences: [],
3815
4199
  standardProps: [
4200
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3816
4201
  "useResource: UseResource",
3817
4202
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3818
4203
  "usePanelInfo: UsePanelInfo",
3819
4204
  "useSessions: UseSessions",
3820
4205
  "useSessionStatus: UseSessionStatus",
3821
4206
  "useSessionRetainInfo: UseSessionRetainInfo",
3822
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4207
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4208
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3823
4209
  "useChat: UseChat",
3824
4210
  "useConversation: UseConversation",
3825
4211
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3827,6 +4213,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3827
4213
  "useSession: SessionSnapshotSelector",
3828
4214
  "sessionId: SessionId",
3829
4215
  "useProjection: UseProjection",
4216
+ "useAccess: (action: RemoteEndpoint) => boolean",
3830
4217
  "useTrajectory: UseTrajectory"
3831
4218
  ],
3832
4219
  keyDomain: "",
@@ -3867,13 +4254,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3867
4254
  ownerProps: ["/** Slot contract table. Owners extend via declaration merging; entries are {@link SlotEntryDef}. */\nexport interface SlotMap {}"],
3868
4255
  ownerPropsReferences: ["SlotEntryDef"],
3869
4256
  standardProps: [
4257
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3870
4258
  "useResource: UseResource",
3871
4259
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3872
4260
  "usePanelInfo: UsePanelInfo",
3873
4261
  "useSessions: UseSessions",
3874
4262
  "useSessionStatus: UseSessionStatus",
3875
4263
  "useSessionRetainInfo: UseSessionRetainInfo",
3876
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4264
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4265
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3877
4266
  "useChat: UseChat",
3878
4267
  "useConversation: UseConversation",
3879
4268
  "useInput: SnapshotSelectorHook<InputState>",
@@ -3881,6 +4270,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3881
4270
  "useSession: SessionSnapshotSelector",
3882
4271
  "sessionId: SessionId",
3883
4272
  "useProjection: UseProjection",
4273
+ "useAccess: (action: RemoteEndpoint) => boolean",
3884
4274
  "useTrajectory: UseTrajectory"
3885
4275
  ],
3886
4276
  keyDomain: "",
@@ -3907,13 +4297,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3907
4297
  ownerProps: [],
3908
4298
  ownerPropsReferences: [],
3909
4299
  standardProps: [
4300
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3910
4301
  "useResource: UseResource",
3911
4302
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3912
4303
  "usePanelInfo: UsePanelInfo",
3913
4304
  "useSessions: UseSessions",
3914
4305
  "useSessionStatus: UseSessionStatus",
3915
4306
  "useSessionRetainInfo: UseSessionRetainInfo",
3916
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4307
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4308
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
3917
4309
  ],
3918
4310
  keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: conversation",
3919
4311
  hookContext: "",
@@ -3938,19 +4330,22 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3938
4330
  ownerProps: [],
3939
4331
  ownerPropsReferences: [],
3940
4332
  standardProps: [
4333
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3941
4334
  "useResource: UseResource",
3942
4335
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3943
4336
  "usePanelInfo: UsePanelInfo",
3944
4337
  "useSessions: UseSessions",
3945
4338
  "useSessionStatus: UseSessionStatus",
3946
4339
  "useSessionRetainInfo: UseSessionRetainInfo",
3947
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4340
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4341
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
3948
4342
  "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
3949
4343
  "useInput: MaybeSnapshotSelectorHook<InputState>",
3950
4344
  "inputActions: InputActions | undefined",
3951
4345
  "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
3952
4346
  "sessionId: SessionId | undefined",
3953
- "useProjection: UseProjection"
4347
+ "useProjection: UseProjection",
4348
+ "useAccess: (action: RemoteEndpoint) => boolean | undefined"
3954
4349
  ],
3955
4350
  keyDomain: "",
3956
4351
  hookContext: "",
@@ -3959,7 +4354,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3959
4354
  occupants: ["client-ui-conversation ConversationRoot"],
3960
4355
  replaceRisk: "shadows-shipped-ui",
3961
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}",
3962
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:131"
4357
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:204"
3963
4358
  },
3964
4359
  {
3965
4360
  key: "plugins.add.actions",
@@ -3990,13 +4385,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3990
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}"],
3991
4386
  ownerPropsReferences: [],
3992
4387
  standardProps: [
4388
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
3993
4389
  "useResource: UseResource",
3994
4390
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3995
4391
  "usePanelInfo: UsePanelInfo",
3996
4392
  "useSessions: UseSessions",
3997
4393
  "useSessionStatus: UseSessionStatus",
3998
4394
  "useSessionRetainInfo: UseSessionRetainInfo",
3999
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4395
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4396
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4000
4397
  ],
4001
4398
  keyDomain: "",
4002
4399
  hookContext: "",
@@ -4005,7 +4402,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4005
4402
  occupants: ["client-ui-agent-preset CreatePluginMenuItem id 'create-plugin'"],
4006
4403
  replaceRisk: "none",
4007
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}",
4008
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:84"
4405
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:89"
4009
4406
  },
4010
4407
  {
4011
4408
  key: "plugins.bundle.activation",
@@ -4022,13 +4419,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4022
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}"],
4023
4420
  ownerPropsReferences: [],
4024
4421
  standardProps: [
4422
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4025
4423
  "useResource: UseResource",
4026
4424
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4027
4425
  "usePanelInfo: UsePanelInfo",
4028
4426
  "useSessions: UseSessions",
4029
4427
  "useSessionStatus: UseSessionStatus",
4030
4428
  "useSessionRetainInfo: UseSessionRetainInfo",
4031
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4429
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4430
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4032
4431
  ],
4033
4432
  keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: @deepseek-ai/dsh-experimental-voice-input-bundle",
4034
4433
  hookContext: "",
@@ -4037,7 +4436,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4037
4436
  occupants: ["experimental-client-ui-voice-input VoiceSetupPrompt key '@deepseek-ai/dsh-experimental-voice-input-bundle'"],
4038
4437
  replaceRisk: "shadows-shipped-ui",
4039
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}",
4040
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:86"
4439
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:91"
4041
4440
  },
4042
4441
  {
4043
4442
  key: "plugins.bundle.config",
@@ -4054,22 +4453,24 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4054
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}"],
4055
4454
  ownerPropsReferences: ["ConfigPageForm"],
4056
4455
  standardProps: [
4456
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4057
4457
  "useResource: UseResource",
4058
4458
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4059
4459
  "usePanelInfo: UsePanelInfo",
4060
4460
  "useSessions: UseSessions",
4061
4461
  "useSessionStatus: UseSessionStatus",
4062
4462
  "useSessionRetainInfo: UseSessionRetainInfo",
4063
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4463
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4464
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4064
4465
  ],
4065
- keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: @deepseek-ai/dsh-experimental-voice-input-bundle",
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",
4066
4467
  hookContext: "",
4067
4468
  slotInject: "",
4068
4469
  declaredBy: "an entry in 'main' (client-ui-plugin-manager), so it exists while that entry is mounted",
4069
- occupants: ["experimental-client-ui-voice-input VoicePreparation key '@deepseek-ai/dsh-experimental-voice-input-bundle'"],
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'"],
4070
4471
  replaceRisk: "shadows-shipped-ui",
4071
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}",
4072
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:102"
4473
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:107"
4073
4474
  },
4074
4475
  {
4075
4476
  key: "plugins.detail.actions",
@@ -4100,13 +4501,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4100
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}"],
4101
4502
  ownerPropsReferences: ["PluginsSubject"],
4102
4503
  standardProps: [
4504
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4103
4505
  "useResource: UseResource",
4104
4506
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4105
4507
  "usePanelInfo: UsePanelInfo",
4106
4508
  "useSessions: UseSessions",
4107
4509
  "useSessionStatus: UseSessionStatus",
4108
4510
  "useSessionRetainInfo: UseSessionRetainInfo",
4109
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4511
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4512
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4110
4513
  ],
4111
4514
  keyDomain: "",
4112
4515
  hookContext: "",
@@ -4115,7 +4518,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4115
4518
  occupants: [],
4116
4519
  replaceRisk: "none",
4117
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}",
4118
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:116"
4521
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:121"
4119
4522
  },
4120
4523
  {
4121
4524
  key: "plugins.detail.badge",
@@ -4146,13 +4549,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4146
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}"],
4147
4550
  ownerPropsReferences: ["PluginsSubject"],
4148
4551
  standardProps: [
4552
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4149
4553
  "useResource: UseResource",
4150
4554
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4151
4555
  "usePanelInfo: UsePanelInfo",
4152
4556
  "useSessions: UseSessions",
4153
4557
  "useSessionStatus: UseSessionStatus",
4154
4558
  "useSessionRetainInfo: UseSessionRetainInfo",
4155
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4559
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4560
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4156
4561
  ],
4157
4562
  keyDomain: "",
4158
4563
  hookContext: "",
@@ -4161,7 +4566,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4161
4566
  occupants: [],
4162
4567
  replaceRisk: "none",
4163
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}",
4164
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:121"
4569
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:126"
4165
4570
  },
4166
4571
  {
4167
4572
  key: "plugins.detail.section",
@@ -4192,13 +4597,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4192
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}"],
4193
4598
  ownerPropsReferences: ["PluginsSubject"],
4194
4599
  standardProps: [
4600
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4195
4601
  "useResource: UseResource",
4196
4602
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4197
4603
  "usePanelInfo: UsePanelInfo",
4198
4604
  "useSessions: UseSessions",
4199
4605
  "useSessionStatus: UseSessionStatus",
4200
4606
  "useSessionRetainInfo: UseSessionRetainInfo",
4201
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4607
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4608
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4202
4609
  ],
4203
4610
  keyDomain: "",
4204
4611
  hookContext: "",
@@ -4207,7 +4614,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4207
4614
  occupants: [],
4208
4615
  replaceRisk: "none",
4209
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}",
4210
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:128"
4617
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:133"
4211
4618
  },
4212
4619
  {
4213
4620
  key: "plugins.item",
@@ -4238,13 +4645,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4238
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}"],
4239
4646
  ownerPropsReferences: ["ConfigPageForm"],
4240
4647
  standardProps: [
4648
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4241
4649
  "useResource: UseResource",
4242
4650
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4243
4651
  "usePanelInfo: UsePanelInfo",
4244
4652
  "useSessions: UseSessions",
4245
4653
  "useSessionStatus: UseSessionStatus",
4246
4654
  "useSessionRetainInfo: UseSessionRetainInfo",
4247
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4655
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4656
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4248
4657
  ],
4249
4658
  keyDomain: "",
4250
4659
  hookContext: "",
@@ -4258,7 +4667,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4258
4667
  ],
4259
4668
  replaceRisk: "none",
4260
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}",
4261
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:96"
4670
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:101"
4262
4671
  },
4263
4672
  {
4264
4673
  key: "plugins.row.config",
@@ -4275,13 +4684,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4275
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}"],
4276
4685
  ownerPropsReferences: ["ConfigPageForm"],
4277
4686
  standardProps: [
4687
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4278
4688
  "useResource: UseResource",
4279
4689
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4280
4690
  "usePanelInfo: UsePanelInfo",
4281
4691
  "useSessions: UseSessions",
4282
4692
  "useSessionStatus: UseSessionStatus",
4283
4693
  "useSessionRetainInfo: UseSessionRetainInfo",
4284
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4694
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4695
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4285
4696
  ],
4286
4697
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4287
4698
  hookContext: "",
@@ -4290,7 +4701,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4290
4701
  occupants: [],
4291
4702
  replaceRisk: "none",
4292
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}",
4293
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:110"
4704
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:115"
4294
4705
  },
4295
4706
  {
4296
4707
  key: "rightbar",
@@ -4302,13 +4713,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4302
4713
  ownerProps: ["/** Right column owner share: resolved normal geometry and opening eligibility. */\nexport interface RightbarOwnerProps {\n /** Resolved normal panel width in px, not the saved preference; zero if it cannot fit. */\n width: number\n /** Current frame width in px. */\n viewportWidth: number\n /**\n * Whether a normal right panel can retain 300px beside a 400px center.\n * Before a narrow opening, includes the space from collapsing the left sidebar.\n */\n canShow: boolean\n}"],
4303
4714
  ownerPropsReferences: [],
4304
4715
  standardProps: [
4716
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4305
4717
  "useResource: UseResource",
4306
4718
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4307
4719
  "usePanelInfo: UsePanelInfo",
4308
4720
  "useSessions: UseSessions",
4309
4721
  "useSessionStatus: UseSessionStatus",
4310
4722
  "useSessionRetainInfo: UseSessionRetainInfo",
4311
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4723
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4724
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4312
4725
  ],
4313
4726
  keyDomain: "",
4314
4727
  hookContext: "",
@@ -4329,13 +4742,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4329
4742
  ownerProps: ["/** Right column owner share: resolved normal geometry and opening eligibility. */\nexport interface RightbarOwnerProps {\n /** Resolved normal panel width in px, not the saved preference; zero if it cannot fit. */\n width: number\n /** Current frame width in px. */\n viewportWidth: number\n /**\n * Whether a normal right panel can retain 300px beside a 400px center.\n * Before a narrow opening, includes the space from collapsing the left sidebar.\n */\n canShow: boolean\n}", "/** Identity of one open tab; distinct copies of one content share `contentId`, never `TabId`. */\nexport type TabId = Branded<'TabId'>"],
4330
4743
  ownerPropsReferences: ["Branded"],
4331
4744
  standardProps: [
4745
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4332
4746
  "useResource: UseResource",
4333
4747
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4334
4748
  "usePanelInfo: UsePanelInfo",
4335
4749
  "useSessions: UseSessions",
4336
4750
  "useSessionStatus: UseSessionStatus",
4337
4751
  "useSessionRetainInfo: UseSessionRetainInfo",
4338
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4752
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4753
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
4339
4754
  "useChat: UseChat",
4340
4755
  "useConversation: UseConversation",
4341
4756
  "useInput: SnapshotSelectorHook<InputState>",
@@ -4343,6 +4758,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4343
4758
  "useSession: SessionSnapshotSelector",
4344
4759
  "sessionId: SessionId",
4345
4760
  "useProjection: UseProjection",
4761
+ "useAccess: (action: RemoteEndpoint) => boolean",
4346
4762
  "useTrajectory: UseTrajectory"
4347
4763
  ],
4348
4764
  keyDomain: "",
@@ -4364,13 +4780,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4364
4780
  ownerProps: ["/** Root owner share: the shell supplies nothing — the frame is inject-assembled. */\nexport interface RootOwnerProps { children?: never }"],
4365
4781
  ownerPropsReferences: [],
4366
4782
  standardProps: [
4783
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4367
4784
  "useResource: UseResource",
4368
4785
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4369
4786
  "usePanelInfo: UsePanelInfo",
4370
4787
  "useSessions: UseSessions",
4371
4788
  "useSessionStatus: UseSessionStatus",
4372
4789
  "useSessionRetainInfo: UseSessionRetainInfo",
4373
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4790
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4791
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4374
4792
  ],
4375
4793
  keyDomain: "",
4376
4794
  hookContext: "",
@@ -4410,13 +4828,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4410
4828
  ownerProps: ["/** Owner share of the header title seat (the shell supplies nothing). */\nexport interface SettingsHeaderOwnerProps {\n /** Marker field: header owner props are intentionally empty. */\n children?: never\n}"],
4411
4829
  ownerPropsReferences: [],
4412
4830
  standardProps: [
4831
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4413
4832
  "useResource: UseResource",
4414
4833
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4415
4834
  "usePanelInfo: UsePanelInfo",
4416
4835
  "useSessions: UseSessions",
4417
4836
  "useSessionStatus: UseSessionStatus",
4418
4837
  "useSessionRetainInfo: UseSessionRetainInfo",
4419
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4838
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4839
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4420
4840
  ],
4421
4841
  keyDomain: "",
4422
4842
  hookContext: "",
@@ -4437,13 +4857,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4437
4857
  ownerProps: ["/** Owner share of the header title seat (the shell supplies nothing). */\nexport interface SettingsHeaderOwnerProps {\n /** Marker field: header owner props are intentionally empty. */\n children?: never\n}"],
4438
4858
  ownerPropsReferences: [],
4439
4859
  standardProps: [
4860
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4440
4861
  "useResource: UseResource",
4441
4862
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4442
4863
  "usePanelInfo: UsePanelInfo",
4443
4864
  "useSessions: UseSessions",
4444
4865
  "useSessionStatus: UseSessionStatus",
4445
4866
  "useSessionRetainInfo: UseSessionRetainInfo",
4446
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4867
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4868
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4447
4869
  ],
4448
4870
  keyDomain: "",
4449
4871
  hookContext: "",
@@ -4483,13 +4905,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4483
4905
  ownerProps: ["/** Owner share of a General preference row (the section supplies nothing). */\nexport interface SettingsGeneralItemOwnerProps {\n /** Marker field: item owner props are intentionally empty. */\n children?: never\n}"],
4484
4906
  ownerPropsReferences: [],
4485
4907
  standardProps: [
4908
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4486
4909
  "useResource: UseResource",
4487
4910
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4488
4911
  "usePanelInfo: UsePanelInfo",
4489
4912
  "useSessions: UseSessions",
4490
4913
  "useSessionStatus: UseSessionStatus",
4491
4914
  "useSessionRetainInfo: UseSessionRetainInfo",
4492
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4915
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4916
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4493
4917
  ],
4494
4918
  keyDomain: "",
4495
4919
  hookContext: "",
@@ -4507,7 +4931,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4507
4931
  "client-ui-settings-session-log UploadRow",
4508
4932
  "client-ui-shortcuts ShortcutsRow id 'shortcuts'",
4509
4933
  "client-ui-theme AppearanceRow id 'appearance'",
4510
- "client-ui-theme FontSizeRow id 'font-size'"
4934
+ "client-ui-theme FontSettingsGroup id 'font-size'"
4511
4935
  ],
4512
4936
  replaceRisk: "none",
4513
4937
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('settings.general.item', () => ctx.slots.register(\n { name: 'settings.general.item', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
@@ -4523,13 +4947,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4523
4947
  ownerProps: ["/** Owner share of the header title seat (the shell supplies nothing). */\nexport interface SettingsHeaderOwnerProps {\n /** Marker field: header owner props are intentionally empty. */\n children?: never\n}"],
4524
4948
  ownerPropsReferences: [],
4525
4949
  standardProps: [
4950
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4526
4951
  "useResource: UseResource",
4527
4952
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4528
4953
  "usePanelInfo: UsePanelInfo",
4529
4954
  "useSessions: UseSessions",
4530
4955
  "useSessionStatus: UseSessionStatus",
4531
4956
  "useSessionRetainInfo: UseSessionRetainInfo",
4532
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4957
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4958
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4533
4959
  ],
4534
4960
  keyDomain: "",
4535
4961
  hookContext: "",
@@ -4550,13 +4976,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4550
4976
  ownerProps: ["/** Sidebar launcher geometry and settings navigation. */\nexport interface SettingsLauncherOwnerProps {\n /** Whether the sidebar shows labels. */\n wide: boolean\n /** Whether the settings dialog covers the sidebar; a launcher may treat a false-to-true edge as one Settings entry. */\n settingsOpen: boolean\n /** Effective Settings key labels and accessible combination; omitted when unbound. */\n settingsShortcut?: { readonly keys: readonly string[]; readonly aria?: string | undefined }\n /** Open the settings panel. */\n openSettings: () => void\n /** @param id - registered onboarding editor to open explicitly. */\n openOnboarding: (id: string) => void\n}"],
4551
4977
  ownerPropsReferences: [],
4552
4978
  standardProps: [
4979
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4553
4980
  "useResource: UseResource",
4554
4981
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4555
4982
  "usePanelInfo: UsePanelInfo",
4556
4983
  "useSessions: UseSessions",
4557
4984
  "useSessionStatus: UseSessionStatus",
4558
4985
  "useSessionRetainInfo: UseSessionRetainInfo",
4559
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4986
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
4987
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4560
4988
  ],
4561
4989
  keyDomain: "",
4562
4990
  hookContext: "",
@@ -4596,13 +5024,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4596
5024
  ownerProps: ["/** Owner share of the footer area (the section supplies nothing). */\nexport interface ModelsFooterOwnerProps {\n /** Marker field: footer owner props are intentionally empty. */\n children?: never\n}"],
4597
5025
  ownerPropsReferences: [],
4598
5026
  standardProps: [
5027
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4599
5028
  "useResource: UseResource",
4600
5029
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4601
5030
  "usePanelInfo: UsePanelInfo",
4602
5031
  "useSessions: UseSessions",
4603
5032
  "useSessionStatus: UseSessionStatus",
4604
5033
  "useSessionRetainInfo: UseSessionRetainInfo",
4605
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5034
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5035
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4606
5036
  ],
4607
5037
  keyDomain: "",
4608
5038
  hookContext: "",
@@ -4628,13 +5058,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4628
5058
  ownerProps: ["/** Owner share of one provider-card extension occurrence. */\nexport interface ProviderCardExtrasOwnerProps {\n /** The card's directory row (route id, display name, settings address, live state). */\n provider: ProviderDirectoryEntry\n /** Whether any layer configures this provider (its profile resolves); `false` while the add-provider draft edits a dormant row. */\n configured: boolean\n /** Whether the row's referenced api-key credential is confirmed configured (the page's credential join). */\n keyConfigured: boolean\n}"],
4629
5059
  ownerPropsReferences: ["ProviderDirectoryEntry"],
4630
5060
  standardProps: [
5061
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4631
5062
  "useResource: UseResource",
4632
5063
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4633
5064
  "usePanelInfo: UsePanelInfo",
4634
5065
  "useSessions: UseSessions",
4635
5066
  "useSessionStatus: UseSessionStatus",
4636
5067
  "useSessionRetainInfo: UseSessionRetainInfo",
4637
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5068
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5069
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4638
5070
  ],
4639
5071
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4640
5072
  hookContext: "",
@@ -4655,13 +5087,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4655
5087
  ownerProps: [],
4656
5088
  ownerPropsReferences: [],
4657
5089
  standardProps: [
5090
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4658
5091
  "useResource: UseResource",
4659
5092
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4660
5093
  "usePanelInfo: UsePanelInfo",
4661
5094
  "useSessions: UseSessions",
4662
5095
  "useSessionStatus: UseSessionStatus",
4663
5096
  "useSessionRetainInfo: UseSessionRetainInfo",
4664
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5097
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5098
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4665
5099
  ],
4666
5100
  keyDomain: "",
4667
5101
  hookContext: "",
@@ -4701,13 +5135,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4701
5135
  ownerProps: ["/** Owner share of the currently active settings-backed onboarding step. */\nexport interface SettingsOnboardingOwnerProps {\n /** Stable id of the step currently selected by the coordinator. */\n stepId: string\n /** User explicitly reopened this step outside first-run onboarding. */\n explicit?: boolean\n /** Complete or skip this step and transfer ownership to the next entry. */\n complete: () => void\n /** Open the settings panel directly on one registered section. */\n openSection: (id: string) => void\n}"],
4702
5136
  ownerPropsReferences: [],
4703
5137
  standardProps: [
5138
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4704
5139
  "useResource: UseResource",
4705
5140
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4706
5141
  "usePanelInfo: UsePanelInfo",
4707
5142
  "useSessions: UseSessions",
4708
5143
  "useSessionStatus: UseSessionStatus",
4709
5144
  "useSessionRetainInfo: UseSessionRetainInfo",
4710
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5145
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5146
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4711
5147
  ],
4712
5148
  keyDomain: "",
4713
5149
  hookContext: "",
@@ -4747,13 +5183,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4747
5183
  ownerProps: ["/** Owner share of a Plugins tab (the section supplies nothing). */\nexport interface SettingsPluginsTabOwnerProps {\n /** Marker field: tab owner props are intentionally empty. */\n children?: never\n}"],
4748
5184
  ownerPropsReferences: [],
4749
5185
  standardProps: [
5186
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4750
5187
  "useResource: UseResource",
4751
5188
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4752
5189
  "usePanelInfo: UsePanelInfo",
4753
5190
  "useSessions: UseSessions",
4754
5191
  "useSessionStatus: UseSessionStatus",
4755
5192
  "useSessionRetainInfo: UseSessionRetainInfo",
4756
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5193
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5194
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4757
5195
  ],
4758
5196
  keyDomain: "",
4759
5197
  hookContext: "",
@@ -4793,13 +5231,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4793
5231
  ownerProps: ["/**\n * Owner share of a settings section entry. The shell owns modal visibility\n * and navigation; a section's data arrives through its own inject faces and\n * stores. `close` is the one shell affordance a section receives, for flows\n * that leave settings altogether (starting a session from a section) — the\n * onboarding coordinator's `openSection`/`complete` precedent, inverted.\n */\nexport interface SettingsSectionOwnerProps {\n /** Close the settings panel (the shell owns the open state). */\n close: () => void\n}"],
4794
5232
  ownerPropsReferences: [],
4795
5233
  standardProps: [
5234
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4796
5235
  "useResource: UseResource",
4797
5236
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4798
5237
  "usePanelInfo: UsePanelInfo",
4799
5238
  "useSessions: UseSessions",
4800
5239
  "useSessionStatus: UseSessionStatus",
4801
5240
  "useSessionRetainInfo: UseSessionRetainInfo",
4802
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5241
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5242
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4803
5243
  ],
4804
5244
  keyDomain: "",
4805
5245
  hookContext: "",
@@ -4826,13 +5266,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4826
5266
  ownerProps: ["/** Owner share of the trigger content seat: the sidebar column state. */\nexport interface SettingsTriggerOwnerProps {\n /** Whether the sidebar renders wide content (false = 56px rail, icon only). */\n wide: boolean\n}"],
4827
5267
  ownerPropsReferences: [],
4828
5268
  standardProps: [
5269
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4829
5270
  "useResource: UseResource",
4830
5271
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4831
5272
  "usePanelInfo: UsePanelInfo",
4832
5273
  "useSessions: UseSessions",
4833
5274
  "useSessionStatus: UseSessionStatus",
4834
5275
  "useSessionRetainInfo: UseSessionRetainInfo",
4835
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5276
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5277
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4836
5278
  ],
4837
5279
  keyDomain: "",
4838
5280
  hookContext: "",
@@ -4853,13 +5295,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4853
5295
  ownerProps: [],
4854
5296
  ownerPropsReferences: [],
4855
5297
  standardProps: [
5298
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4856
5299
  "useResource: UseResource",
4857
5300
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4858
5301
  "usePanelInfo: UsePanelInfo",
4859
5302
  "useSessions: UseSessions",
4860
5303
  "useSessionStatus: UseSessionStatus",
4861
5304
  "useSessionRetainInfo: UseSessionRetainInfo",
4862
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5305
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5306
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4863
5307
  ],
4864
5308
  keyDomain: "",
4865
5309
  hookContext: "",
@@ -4880,13 +5324,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4880
5324
  ownerProps: [],
4881
5325
  ownerPropsReferences: [],
4882
5326
  standardProps: [
5327
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4883
5328
  "useResource: UseResource",
4884
5329
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4885
5330
  "usePanelInfo: UsePanelInfo",
4886
5331
  "useSessions: UseSessions",
4887
5332
  "useSessionStatus: UseSessionStatus",
4888
5333
  "useSessionRetainInfo: UseSessionRetainInfo",
4889
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5334
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5335
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4890
5336
  ],
4891
5337
  keyDomain: "",
4892
5338
  hookContext: "",
@@ -4926,13 +5372,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4926
5372
  ownerProps: [],
4927
5373
  ownerPropsReferences: [],
4928
5374
  standardProps: [
5375
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4929
5376
  "useResource: UseResource",
4930
5377
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4931
5378
  "usePanelInfo: UsePanelInfo",
4932
5379
  "useSessions: UseSessions",
4933
5380
  "useSessionStatus: UseSessionStatus",
4934
5381
  "useSessionRetainInfo: UseSessionRetainInfo",
4935
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5382
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5383
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4936
5384
  ],
4937
5385
  keyDomain: "",
4938
5386
  hookContext: "",
@@ -4969,13 +5417,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4969
5417
  ownerProps: ["/** Owner currency of one quota notice offered to the frame-wide chain. */\nexport interface QuotaNoticeOwnerProps {\n /** Stable failure code retained in the Session log. */\n code: QuotaNoticeCode\n /** Provider-neutral notice copy in the active locale. */\n message: string\n /** Take the notice down. */\n dismiss: () => void\n /**\n * Prevent later quota failures from replacing this notice. Dismissal clears\n * all holds; releasing the last hold resumes future notices without replay.\n * Callers must release on unmount.\n * @returns idempotent release that cannot clear another hold.\n */\n keepOpen: () => () => void\n}"],
4970
5418
  ownerPropsReferences: ["QuotaNoticeCode"],
4971
5419
  standardProps: [
5420
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4972
5421
  "useResource: UseResource",
4973
5422
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4974
5423
  "usePanelInfo: UsePanelInfo",
4975
5424
  "useSessions: UseSessions",
4976
5425
  "useSessionStatus: UseSessionStatus",
4977
5426
  "useSessionRetainInfo: UseSessionRetainInfo",
4978
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5427
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5428
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
4979
5429
  ],
4980
5430
  keyDomain: "",
4981
5431
  hookContext: "",
@@ -4984,7 +5434,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4984
5434
  occupants: ["client-ui-settings-account AccountQuotaNotice"],
4985
5435
  replaceRisk: "none",
4986
5436
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('shell.quota-notice', () => ctx.slots.register(\n { name: 'shell.quota-notice', select: owner => null },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4987
- source: "packages/client/ui-chat/src/client/contract/slots.ts:329"
5437
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:449"
4988
5438
  },
4989
5439
  {
4990
5440
  key: "sidebar",
@@ -4996,13 +5446,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4996
5446
  ownerProps: ["/** Sidebar owner share: live column state from the frame's concession solve. */\nexport interface SidebarOwnerProps {\n /** True when the sidebar is closed (the column renders the compact control rail). */\n collapsed: boolean\n /** Rendered column width in px (SIDEBAR_COLLAPSED when collapsed). */\n width: number\n}"],
4997
5447
  ownerPropsReferences: [],
4998
5448
  standardProps: [
5449
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
4999
5450
  "useResource: UseResource",
5000
5451
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5001
5452
  "usePanelInfo: UsePanelInfo",
5002
5453
  "useSessions: UseSessions",
5003
5454
  "useSessionStatus: UseSessionStatus",
5004
5455
  "useSessionRetainInfo: UseSessionRetainInfo",
5005
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5456
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5457
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5006
5458
  ],
5007
5459
  keyDomain: "",
5008
5460
  hookContext: "",
@@ -5023,13 +5475,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5023
5475
  ownerProps: ["/** Geometry supplied to the sidebar brand-mark occupant. */\nexport interface SidebarBrandMarkOwnerProps {\n /** Requested square edge in pixels. */\n size: number\n}"],
5024
5476
  ownerPropsReferences: [],
5025
5477
  standardProps: [
5478
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5026
5479
  "useResource: UseResource",
5027
5480
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5028
5481
  "usePanelInfo: UsePanelInfo",
5029
5482
  "useSessions: UseSessions",
5030
5483
  "useSessionStatus: UseSessionStatus",
5031
5484
  "useSessionRetainInfo: UseSessionRetainInfo",
5032
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5485
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5486
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5033
5487
  ],
5034
5488
  keyDomain: "",
5035
5489
  hookContext: "",
@@ -5050,13 +5504,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5050
5504
  ownerProps: ["/** Empty owner share for the sidebar brand-name occupant. */\nexport interface SidebarBrandNameOwnerProps {\n /** Marker field: the occupant owns its own content and width. */\n children?: never\n}"],
5051
5505
  ownerPropsReferences: [],
5052
5506
  standardProps: [
5507
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5053
5508
  "useResource: UseResource",
5054
5509
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5055
5510
  "usePanelInfo: UsePanelInfo",
5056
5511
  "useSessions: UseSessions",
5057
5512
  "useSessionStatus: UseSessionStatus",
5058
5513
  "useSessionRetainInfo: UseSessionRetainInfo",
5059
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5514
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5515
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5060
5516
  ],
5061
5517
  keyDomain: "",
5062
5518
  hookContext: "",
@@ -5077,13 +5533,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5077
5533
  ownerProps: [],
5078
5534
  ownerPropsReferences: [],
5079
5535
  standardProps: [
5536
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5080
5537
  "useResource: UseResource",
5081
5538
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5082
5539
  "usePanelInfo: UsePanelInfo",
5083
5540
  "useSessions: UseSessions",
5084
5541
  "useSessionStatus: UseSessionStatus",
5085
5542
  "useSessionRetainInfo: UseSessionRetainInfo",
5086
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5543
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5544
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5087
5545
  "useChat: UseChat",
5088
5546
  "useConversation: UseConversation",
5089
5547
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5091,6 +5549,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5091
5549
  "useSession: SessionSnapshotSelector",
5092
5550
  "sessionId: SessionId",
5093
5551
  "useProjection: UseProjection",
5552
+ "useAccess: (action: RemoteEndpoint) => boolean",
5094
5553
  "useTrajectory: UseTrajectory"
5095
5554
  ],
5096
5555
  keyDomain: "",
@@ -5131,13 +5590,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5131
5590
  ownerProps: ["/** Owner share of an action rendered beside Settings at the sidebar foot. */\nexport interface SidebarFooterActionOwnerProps {\n /** Whether the sidebar renders wide content (false = 56px rail). */\n wide: boolean\n}"],
5132
5591
  ownerPropsReferences: [],
5133
5592
  standardProps: [
5593
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5134
5594
  "useResource: UseResource",
5135
5595
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5136
5596
  "usePanelInfo: UsePanelInfo",
5137
5597
  "useSessions: UseSessions",
5138
5598
  "useSessionStatus: UseSessionStatus",
5139
5599
  "useSessionRetainInfo: UseSessionRetainInfo",
5140
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5600
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5601
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5141
5602
  ],
5142
5603
  keyDomain: "",
5143
5604
  hookContext: "",
@@ -5177,13 +5638,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5177
5638
  ownerProps: ["/** Icon presentation supplied by the global panel row. */\nexport interface SidebarPanelIconOwnerProps {\n /** Requested square edge in pixels. */\n size: number\n /** Whether this panel is selected in the main column. */\n active: boolean\n}"],
5178
5639
  ownerPropsReferences: [],
5179
5640
  standardProps: [
5641
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5180
5642
  "useResource: UseResource",
5181
5643
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5182
5644
  "usePanelInfo: UsePanelInfo",
5183
5645
  "useSessions: UseSessions",
5184
5646
  "useSessionStatus: UseSessionStatus",
5185
5647
  "useSessionRetainInfo: UseSessionRetainInfo",
5186
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5648
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5649
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5187
5650
  ],
5188
5651
  keyDomain: "",
5189
5652
  hookContext: "",
@@ -5209,13 +5672,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5209
5672
  ownerProps: [],
5210
5673
  ownerPropsReferences: [],
5211
5674
  standardProps: [
5675
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5212
5676
  "useResource: UseResource",
5213
5677
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5214
5678
  "usePanelInfo: UsePanelInfo",
5215
5679
  "useSessions: UseSessions",
5216
5680
  "useSessionStatus: UseSessionStatus",
5217
5681
  "useSessionRetainInfo: UseSessionRetainInfo",
5218
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5682
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5683
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5219
5684
  "useChat: UseChat",
5220
5685
  "useConversation: UseConversation",
5221
5686
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5223,6 +5688,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5223
5688
  "useSession: SessionSnapshotSelector",
5224
5689
  "sessionId: SessionId",
5225
5690
  "useProjection: UseProjection",
5691
+ "useAccess: (action: RemoteEndpoint) => boolean",
5226
5692
  "useTrajectory: UseTrajectory"
5227
5693
  ],
5228
5694
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5260,13 +5726,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5260
5726
  ownerProps: [],
5261
5727
  ownerPropsReferences: [],
5262
5728
  standardProps: [
5729
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5263
5730
  "useResource: UseResource",
5264
5731
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5265
5732
  "usePanelInfo: UsePanelInfo",
5266
5733
  "useSessions: UseSessions",
5267
5734
  "useSessionStatus: UseSessionStatus",
5268
5735
  "useSessionRetainInfo: UseSessionRetainInfo",
5269
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5736
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5737
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5270
5738
  "useChat: UseChat",
5271
5739
  "useConversation: UseConversation",
5272
5740
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5274,6 +5742,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5274
5742
  "useSession: SessionSnapshotSelector",
5275
5743
  "sessionId: SessionId",
5276
5744
  "useProjection: UseProjection",
5745
+ "useAccess: (action: RemoteEndpoint) => boolean",
5277
5746
  "useTrajectory: UseTrajectory"
5278
5747
  ],
5279
5748
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5308,13 +5777,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5308
5777
  ownerProps: ["/** Content and viewing inputs shared by document bodies and nested PDF presentation. */\nexport interface DocumentBodyOwner {\n /** Observe a file read by this renderer. @param address - complete file resource address. */\n readonly addResource: (address: string) => void\n /** Replace this renderer's dependencies. @param addresses - complete file resource addresses. */\n readonly setResources: (addresses: readonly string[]) => void\n /** Original file address, also readable through the standard useResource hook. */\n readonly resourceAddress: string\n /** Ordinary file content or a renderer-owned loading request; text accumulates until eof. */\n readonly content: DocumentContent\n /** The document toolbar's current wrapping preference. */\n readonly wrap: boolean\n /** Report a renderer-owned scrollport; passing `null` restores the shared body as the owner. */\n readonly scrollportRef: RefCallback<HTMLElement>\n}"],
5309
5778
  ownerPropsReferences: ["DocumentContent"],
5310
5779
  standardProps: [
5780
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5311
5781
  "useResource: UseResource",
5312
5782
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5313
5783
  "usePanelInfo: UsePanelInfo",
5314
5784
  "useSessions: UseSessions",
5315
5785
  "useSessionStatus: UseSessionStatus",
5316
5786
  "useSessionRetainInfo: UseSessionRetainInfo",
5317
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5787
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5788
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5318
5789
  "useChat: UseChat",
5319
5790
  "useConversation: UseConversation",
5320
5791
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5322,6 +5793,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5322
5793
  "useSession: SessionSnapshotSelector",
5323
5794
  "sessionId: SessionId",
5324
5795
  "useProjection: UseProjection",
5796
+ "useAccess: (action: RemoteEndpoint) => boolean",
5325
5797
  "useTrajectory: UseTrajectory"
5326
5798
  ],
5327
5799
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5357,13 +5829,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5357
5829
  ownerProps: ["/**\n * Ordinary file contents, or a request for the selected renderer to load its content.\n * Byte arrays are transient UI input, never persisted layout or Session data.\n */\nexport type DocumentContent =\n | { readonly kind: 'text'; readonly text: string; readonly pages: readonly DocumentTextPage[]; readonly eof: boolean }\n | { readonly kind: 'bytes'; readonly data: Uint8Array<ArrayBuffer> }\n | {\n readonly kind: 'renderer'\n /** Changes on reload or implementation replacement; retained contents belong to one revision. */\n readonly revision: number\n /** Report the displayed source version; stale revisions cannot update the owner. @param version - loaded source version. */\n readonly loaded: (version: string) => void\n /** End a failed load; a later file change can start another revision. */\n readonly failed: () => void\n /** Cancel the current load and start a new revision. */\n readonly reload: () => void\n }"],
5358
5830
  ownerPropsReferences: ["DocumentTextPage"],
5359
5831
  standardProps: [
5832
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5360
5833
  "useResource: UseResource",
5361
5834
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5362
5835
  "usePanelInfo: UsePanelInfo",
5363
5836
  "useSessions: UseSessions",
5364
5837
  "useSessionStatus: UseSessionStatus",
5365
5838
  "useSessionRetainInfo: UseSessionRetainInfo",
5366
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5839
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5840
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5367
5841
  "useChat: UseChat",
5368
5842
  "useConversation: UseConversation",
5369
5843
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5371,6 +5845,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5371
5845
  "useSession: SessionSnapshotSelector",
5372
5846
  "sessionId: SessionId",
5373
5847
  "useProjection: UseProjection",
5848
+ "useAccess: (action: RemoteEndpoint) => boolean",
5374
5849
  "useTrajectory: UseTrajectory"
5375
5850
  ],
5376
5851
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5411,13 +5886,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5411
5886
  ownerProps: [],
5412
5887
  ownerPropsReferences: [],
5413
5888
  standardProps: [
5889
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5414
5890
  "useResource: UseResource",
5415
5891
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5416
5892
  "usePanelInfo: UsePanelInfo",
5417
5893
  "useSessions: UseSessions",
5418
5894
  "useSessionStatus: UseSessionStatus",
5419
5895
  "useSessionRetainInfo: UseSessionRetainInfo",
5420
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5896
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5897
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5421
5898
  "useChat: UseChat",
5422
5899
  "useConversation: UseConversation",
5423
5900
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5425,6 +5902,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5425
5902
  "useSession: SessionSnapshotSelector",
5426
5903
  "sessionId: SessionId",
5427
5904
  "useProjection: UseProjection",
5905
+ "useAccess: (action: RemoteEndpoint) => boolean",
5428
5906
  "useTrajectory: UseTrajectory"
5429
5907
  ],
5430
5908
  keyDomain: "",
@@ -5451,13 +5929,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5451
5929
  ownerProps: ["/** Content and viewing inputs shared by document bodies and nested PDF presentation. */\nexport interface DocumentBodyOwner {\n /** Observe a file read by this renderer. @param address - complete file resource address. */\n readonly addResource: (address: string) => void\n /** Replace this renderer's dependencies. @param addresses - complete file resource addresses. */\n readonly setResources: (addresses: readonly string[]) => void\n /** Original file address, also readable through the standard useResource hook. */\n readonly resourceAddress: string\n /** Ordinary file content or a renderer-owned loading request; text accumulates until eof. */\n readonly content: DocumentContent\n /** The document toolbar's current wrapping preference. */\n readonly wrap: boolean\n /** Report a renderer-owned scrollport; passing `null` restores the shared body as the owner. */\n readonly scrollportRef: RefCallback<HTMLElement>\n}"],
5452
5930
  ownerPropsReferences: ["DocumentContent"],
5453
5931
  standardProps: [
5932
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5454
5933
  "useResource: UseResource",
5455
5934
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5456
5935
  "usePanelInfo: UsePanelInfo",
5457
5936
  "useSessions: UseSessions",
5458
5937
  "useSessionStatus: UseSessionStatus",
5459
5938
  "useSessionRetainInfo: UseSessionRetainInfo",
5460
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5939
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5940
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5461
5941
  "useChat: UseChat",
5462
5942
  "useConversation: UseConversation",
5463
5943
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5465,6 +5945,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5465
5945
  "useSession: SessionSnapshotSelector",
5466
5946
  "sessionId: SessionId",
5467
5947
  "useProjection: UseProjection",
5948
+ "useAccess: (action: RemoteEndpoint) => boolean",
5468
5949
  "useTrajectory: UseTrajectory"
5469
5950
  ],
5470
5951
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5505,13 +5986,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5505
5986
  ownerProps: [],
5506
5987
  ownerPropsReferences: [],
5507
5988
  standardProps: [
5989
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5508
5990
  "useResource: UseResource",
5509
5991
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5510
5992
  "usePanelInfo: UsePanelInfo",
5511
5993
  "useSessions: UseSessions",
5512
5994
  "useSessionStatus: UseSessionStatus",
5513
5995
  "useSessionRetainInfo: UseSessionRetainInfo",
5514
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5996
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
5997
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5515
5998
  "useChat: UseChat",
5516
5999
  "useConversation: UseConversation",
5517
6000
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5519,6 +6002,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5519
6002
  "useSession: SessionSnapshotSelector",
5520
6003
  "sessionId: SessionId",
5521
6004
  "useProjection: UseProjection",
6005
+ "useAccess: (action: RemoteEndpoint) => boolean",
5522
6006
  "useTrajectory: UseTrajectory"
5523
6007
  ],
5524
6008
  keyDomain: "",
@@ -5559,13 +6043,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5559
6043
  ownerProps: [],
5560
6044
  ownerPropsReferences: [],
5561
6045
  standardProps: [
6046
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5562
6047
  "useResource: UseResource",
5563
6048
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5564
6049
  "usePanelInfo: UsePanelInfo",
5565
6050
  "useSessions: UseSessions",
5566
6051
  "useSessionStatus: UseSessionStatus",
5567
6052
  "useSessionRetainInfo: UseSessionRetainInfo",
5568
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6053
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6054
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5569
6055
  "useChat: UseChat",
5570
6056
  "useConversation: UseConversation",
5571
6057
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5573,6 +6059,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5573
6059
  "useSession: SessionSnapshotSelector",
5574
6060
  "sessionId: SessionId",
5575
6061
  "useProjection: UseProjection",
6062
+ "useAccess: (action: RemoteEndpoint) => boolean",
5576
6063
  "useTrajectory: UseTrajectory"
5577
6064
  ],
5578
6065
  keyDomain: "",
@@ -5599,13 +6086,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5599
6086
  ownerProps: [],
5600
6087
  ownerPropsReferences: [],
5601
6088
  standardProps: [
6089
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5602
6090
  "useResource: UseResource",
5603
6091
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5604
6092
  "usePanelInfo: UsePanelInfo",
5605
6093
  "useSessions: UseSessions",
5606
6094
  "useSessionStatus: UseSessionStatus",
5607
6095
  "useSessionRetainInfo: UseSessionRetainInfo",
5608
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6096
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6097
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5609
6098
  "useChat: UseChat",
5610
6099
  "useConversation: UseConversation",
5611
6100
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5613,6 +6102,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5613
6102
  "useSession: SessionSnapshotSelector",
5614
6103
  "sessionId: SessionId",
5615
6104
  "useProjection: UseProjection",
6105
+ "useAccess: (action: RemoteEndpoint) => boolean",
5616
6106
  "useTrajectory: UseTrajectory"
5617
6107
  ],
5618
6108
  keyDomain: "",
@@ -5639,13 +6129,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5639
6129
  ownerProps: ["/** Resolved guide copy and entry identity supplied to a provider's card renderer. */\nexport interface SidebarRightGuideEntryOwnerProps {\n readonly entryId: string\n readonly kind: string\n readonly title: string\n readonly description?: string\n}"],
5640
6130
  ownerPropsReferences: [],
5641
6131
  standardProps: [
6132
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5642
6133
  "useResource: UseResource",
5643
6134
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5644
6135
  "usePanelInfo: UsePanelInfo",
5645
6136
  "useSessions: UseSessions",
5646
6137
  "useSessionStatus: UseSessionStatus",
5647
6138
  "useSessionRetainInfo: UseSessionRetainInfo",
5648
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6139
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6140
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5649
6141
  "useChat: UseChat",
5650
6142
  "useConversation: UseConversation",
5651
6143
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5653,6 +6145,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5653
6145
  "useSession: SessionSnapshotSelector",
5654
6146
  "sessionId: SessionId",
5655
6147
  "useProjection: UseProjection",
6148
+ "useAccess: (action: RemoteEndpoint) => boolean",
5656
6149
  "useTrajectory: UseTrajectory"
5657
6150
  ],
5658
6151
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -5693,13 +6186,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5693
6186
  ownerProps: ["/** Owner share of one tab-menu item occurrence. */\nexport interface SidebarRightTabMenuOwnerProps {\n /** The tab whose menu is open. */\n tab: TabRecord\n /**\n * Dismiss the menu.\n *\n * An item that acts MUST call this: the menu is the kit's, and it closes on\n * its own actions only. An item that leaves it open leaves a menu floating\n * over content the action may have just replaced.\n */\n dismiss: () => void\n}"],
5694
6187
  ownerPropsReferences: ["TabRecord"],
5695
6188
  standardProps: [
6189
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5696
6190
  "useResource: UseResource",
5697
6191
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5698
6192
  "usePanelInfo: UsePanelInfo",
5699
6193
  "useSessions: UseSessions",
5700
6194
  "useSessionStatus: UseSessionStatus",
5701
6195
  "useSessionRetainInfo: UseSessionRetainInfo",
5702
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6196
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6197
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
5703
6198
  "useChat: UseChat",
5704
6199
  "useConversation: UseConversation",
5705
6200
  "useInput: SnapshotSelectorHook<InputState>",
@@ -5707,6 +6202,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5707
6202
  "useSession: SessionSnapshotSelector",
5708
6203
  "sessionId: SessionId",
5709
6204
  "useProjection: UseProjection",
6205
+ "useAccess: (action: RemoteEndpoint) => boolean",
5710
6206
  "useTrajectory: UseTrajectory"
5711
6207
  ],
5712
6208
  keyDomain: "",
@@ -5747,13 +6243,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5747
6243
  ownerProps: ["/**\n * Owner share of the two Session-row schedule seats. Both receive only the\n * row's Session identity: the occupant reads that Session's own scheduled\n * tasks, and reading them activates nothing.\n */\nexport interface SessionRowScheduleOwnerProps {\n /** Session this row shows; the occupant addresses its own data by this id. */\n readonly sessionId: SessionId\n}"],
5748
6244
  ownerPropsReferences: ["SessionId"],
5749
6245
  standardProps: [
6246
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5750
6247
  "useResource: UseResource",
5751
6248
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5752
6249
  "usePanelInfo: UsePanelInfo",
5753
6250
  "useSessions: UseSessions",
5754
6251
  "useSessionStatus: UseSessionStatus",
5755
6252
  "useSessionRetainInfo: UseSessionRetainInfo",
5756
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6253
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6254
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5757
6255
  ],
5758
6256
  keyDomain: "",
5759
6257
  hookContext: "",
@@ -5762,7 +6260,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5762
6260
  occupants: ["client-ui-schedule SessionScheduleHover id 'schedule-tasks'"],
5763
6261
  replaceRisk: "none",
5764
6262
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.session.row.hover', () => ctx.slots.register(\n { name: 'sidebar.session.row.hover', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5765
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:134"
6263
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:136"
5766
6264
  },
5767
6265
  {
5768
6266
  key: "sidebar.session.row.leading",
@@ -5793,13 +6291,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5793
6291
  ownerProps: ["/**\n * Owner share of the two Session-row schedule seats. Both receive only the\n * row's Session identity: the occupant reads that Session's own scheduled\n * tasks, and reading them activates nothing.\n */\nexport interface SessionRowScheduleOwnerProps {\n /** Session this row shows; the occupant addresses its own data by this id. */\n readonly sessionId: SessionId\n}"],
5794
6292
  ownerPropsReferences: ["SessionId"],
5795
6293
  standardProps: [
6294
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5796
6295
  "useResource: UseResource",
5797
6296
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5798
6297
  "usePanelInfo: UsePanelInfo",
5799
6298
  "useSessions: UseSessions",
5800
6299
  "useSessionStatus: UseSessionStatus",
5801
6300
  "useSessionRetainInfo: UseSessionRetainInfo",
5802
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6301
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6302
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5803
6303
  ],
5804
6304
  keyDomain: "",
5805
6305
  hookContext: "",
@@ -5808,7 +6308,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5808
6308
  occupants: ["client-ui-schedule SessionScheduleMark id 'schedule-mark'"],
5809
6309
  replaceRisk: "none",
5810
6310
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.session.row.leading', () => ctx.slots.register(\n { name: 'sidebar.session.row.leading', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5811
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:129"
6311
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:131"
5812
6312
  },
5813
6313
  {
5814
6314
  key: "sidebar.settings",
@@ -5820,13 +6320,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5820
6320
  ownerProps: ["/**\n * Owner share of the sidebar settings seat: the column display state the\n * occupant's trigger row must render against (wide row vs rail icon).\n */\nexport interface SidebarSettingsOwnerProps {\n /** Whether the sidebar renders wide content (false = 56px rail). */\n wide: boolean\n}"],
5821
6321
  ownerPropsReferences: [],
5822
6322
  standardProps: [
6323
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5823
6324
  "useResource: UseResource",
5824
6325
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5825
6326
  "usePanelInfo: UsePanelInfo",
5826
6327
  "useSessions: UseSessions",
5827
6328
  "useSessionStatus: UseSessionStatus",
5828
6329
  "useSessionRetainInfo: UseSessionRetainInfo",
5829
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6330
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6331
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5830
6332
  ],
5831
6333
  keyDomain: "",
5832
6334
  hookContext: "",
@@ -5847,13 +6349,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5847
6349
  ownerProps: [],
5848
6350
  ownerPropsReferences: [],
5849
6351
  standardProps: [
6352
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5850
6353
  "useResource: UseResource",
5851
6354
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5852
6355
  "usePanelInfo: UsePanelInfo",
5853
6356
  "useSessions: UseSessions",
5854
6357
  "useSessionStatus: UseSessionStatus",
5855
6358
  "useSessionRetainInfo: UseSessionRetainInfo",
5856
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6359
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6360
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5857
6361
  ],
5858
6362
  keyDomain: "",
5859
6363
  hookContext: "",
@@ -5874,13 +6378,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5874
6378
  ownerProps: ["/**\n * Owner share of the browser hole — the only facts crossing the shell/region\n * boundary. Business data and actions arrive through the region's own inject.\n */\nexport interface SidebarSectionOwnerProps {\n /** Shell fold-state output: wide renders the full browser, rail the icon column. */\n wide: boolean\n /** Rail icons request expansion; the browser rides the wide flip for focus. */\n expandSidebar: () => void\n}"],
5875
6379
  ownerPropsReferences: [],
5876
6380
  standardProps: [
6381
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5877
6382
  "useResource: UseResource",
5878
6383
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5879
6384
  "usePanelInfo: UsePanelInfo",
5880
6385
  "useSessions: UseSessions",
5881
6386
  "useSessionStatus: UseSessionStatus",
5882
6387
  "useSessionRetainInfo: UseSessionRetainInfo",
5883
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6388
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6389
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5884
6390
  ],
5885
6391
  keyDomain: "",
5886
6392
  hookContext: "",
@@ -5901,13 +6407,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5901
6407
  ownerProps: ["/**\n * Owner share of the directory-flow holes: the complete conversation between\n * the trigger surface and the picking interaction. The occupant reads `open`\n * to run/render its interaction and reports exactly one outcome per open.\n */\nexport interface DirectoryFlowOwnerProps {\n /** True while a picking interaction is requested; flipping back to false withdraws the request. */\n open: boolean\n /** True while the owner adopts a picked path (`createWorkspace` in flight); occupants disable their commit affordances. */\n busy: boolean\n /** The operator picked a directory (absolute host path); the owner adopts it. */\n onPicked: (path: string) => void\n /** The operator dismissed the interaction; the owner just closes the flow. */\n onCancel: () => void\n /** The interaction itself failed (chooser missing, listing denied); the owner shows its error surface. */\n onError: (message: string) => void\n}"],
5902
6408
  ownerPropsReferences: [],
5903
6409
  standardProps: [
6410
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5904
6411
  "useResource: UseResource",
5905
6412
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5906
6413
  "usePanelInfo: UsePanelInfo",
5907
6414
  "useSessions: UseSessions",
5908
6415
  "useSessionStatus: UseSessionStatus",
5909
6416
  "useSessionRetainInfo: UseSessionRetainInfo",
5910
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6417
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6418
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5911
6419
  ],
5912
6420
  keyDomain: "",
5913
6421
  hookContext: "",
@@ -5916,14 +6424,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5916
6424
  occupants: ["client-ui-directory-picker-browse BrowseDirectoryFlow", "client-ui-directory-picker-native NativeDirectoryFlow"],
5917
6425
  replaceRisk: "shadows-shipped-ui",
5918
6426
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.workspaces.directoryFlow', () => ctx.slots.register(\n { name: 'sidebar.workspaces.directoryFlow' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5919
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:119"
6427
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:121"
5920
6428
  },
5921
6429
  {
5922
6430
  key: "sidebar.workspaces.session.menu.item",
5923
6431
  kind: "list",
5924
6432
  scope: "root",
5925
6433
  summary: "The rows of one Session's \"...\" menu, in ascending `order`.",
5926
- doc: "The rows of one Session's \"...\" menu, in ascending `order`. ui-workspace\nregisters the shipped rows here — `pin` (100), `rename` (200), `fork`\n(300), `archive` (400) — so a plugin row is placed by its own `order`\namong them. Use a package-namespaced `id`; reusing a shipped id at\nanother `priority` shadows that row. Each entry renders one\n`role=\"menuitem\"` `<button>` (the shipped rows use ui-primitives'\n`MenuItemButton`, which adds the host styling and `separatorBefore`),\ndecides its own visibility from its own state, and dismisses the menu\nthrough the injected `useMenuOpenState` hook after acting; the list's\nkeyboard walk and focus return read the DOM, so any such button joins\nthem. Labels come from the contributing package's locale namespace.",
6434
+ doc: "The rows of one Session's \"...\" menu, in ascending `order`. ui-workspace\nregisters the shipped rows here — `pin` (100), `rename` (200), `fork`\n(300), `archive` (400), and `session-id` (450) — so a plugin row is placed\nby its own `order` among them. Use a package-namespaced `id`; reusing a shipped id at\nanother `priority` shadows that row. Each entry renders one\n`role=\"menuitem\"` `<button>` (the shipped rows use ui-primitives'\n`MenuItemButton`, which adds the host styling and `separatorBefore`),\ndecides its own visibility from its own state, and dismisses the menu\nthrough the injected `useMenuOpenState` hook after acting; the list's\nkeyboard walk and focus return read the DOM, so any such button joins\nthem. Labels come from the contributing package's locale namespace.",
5927
6435
  registerOptions: [
5928
6436
  {
5929
6437
  name: "id",
@@ -5947,13 +6455,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5947
6455
  ownerProps: ["/** Owner share of one Session row action occurrence: the row the action belongs to. */\nexport interface SessionRowOwnerProps {\n /** Session the row shows. */\n sessionId: SessionId\n /** Row display title: persisted title, or empty when the Session has none. */\n displayTitle: string\n}"],
5948
6456
  ownerPropsReferences: ["SessionId"],
5949
6457
  standardProps: [
6458
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
5950
6459
  "useResource: UseResource",
5951
6460
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5952
6461
  "usePanelInfo: UsePanelInfo",
5953
6462
  "useSessions: UseSessions",
5954
6463
  "useSessionStatus: UseSessionStatus",
5955
6464
  "useSessionRetainInfo: UseSessionRetainInfo",
5956
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6465
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6466
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
5957
6467
  ],
5958
6468
  keyDomain: "",
5959
6469
  hookContext: "MenuOpenState",
@@ -5963,11 +6473,12 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5963
6473
  "client-ui-workspace PinSessionMenuItem id 'pin'",
5964
6474
  "client-ui-workspace RenameSessionMenuItem id 'rename'",
5965
6475
  "client-ui-workspace ForkSessionMenuItem id 'fork'",
5966
- "client-ui-workspace ArchiveSessionMenuItem id 'archive'"
6476
+ "client-ui-workspace ArchiveSessionMenuItem id 'archive'",
6477
+ "client-ui-workspace SessionIdMenuItem id 'session-id'"
5967
6478
  ],
5968
6479
  replaceRisk: "none",
5969
- 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}",
5970
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:166"
6480
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n const copyLabel = 'Copy session title' // Localize in the contributing package.\n ctx.slots.inject('sidebar.workspaces.session.menu.item', () => ctx.slots.register(\n { name: 'sidebar.workspaces.session.menu.item', id: 'copy-session-title', order: 500 },\n ({ displayTitle, useMenuOpenState }) => {\n const [, setMenuOpen] = useMenuOpenState()\n return React.createElement(\n 'button',\n {\n type: 'button', role: 'menuitem',\n onClick: () => { setMenuOpen(false); void navigator.clipboard.writeText(displayTitle) },\n },\n copyLabel,\n )\n },\n ))\n },\n}",
6481
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:171"
5971
6482
  },
5972
6483
  {
5973
6484
  key: "sidebar.workspaces.session.row.action",
@@ -5998,13 +6509,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5998
6509
  ownerProps: ["/** Owner share of one Session row action occurrence: the row the action belongs to. */\nexport interface SessionRowOwnerProps {\n /** Session the row shows. */\n sessionId: SessionId\n /** Row display title: persisted title, or empty when the Session has none. */\n displayTitle: string\n}"],
5999
6510
  ownerPropsReferences: ["SessionId"],
6000
6511
  standardProps: [
6512
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6001
6513
  "useResource: UseResource",
6002
6514
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6003
6515
  "usePanelInfo: UsePanelInfo",
6004
6516
  "useSessions: UseSessions",
6005
6517
  "useSessionStatus: UseSessionStatus",
6006
6518
  "useSessionRetainInfo: UseSessionRetainInfo",
6007
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
6519
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6520
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6008
6521
  ],
6009
6522
  keyDomain: "",
6010
6523
  hookContext: "",
@@ -6013,7 +6526,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6013
6526
  occupants: ["client-ui-workspace ArchiveSessionRowButton id 'archive'", "client-ui-workspace PinSessionRowButton id 'pin'"],
6014
6527
  replaceRisk: "none",
6015
6528
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.workspaces.session.row.action', () => ctx.slots.register(\n { name: 'sidebar.workspaces.session.row.action', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
6016
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:184"
6529
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:189"
6017
6530
  },
6018
6531
  {
6019
6532
  key: "tool.call.images",
@@ -6025,13 +6538,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6025
6538
  ownerProps: ["/** Owner currency of the Tool image gallery slot: references plus the loader. */\nexport interface ToolImagesOwnerProps {\n /** Durable references or submission-echo previews in result order. */\n images: readonly MessageImageSource[]\n /** Session-authorized image URL loader for the durable arm. */\n loadImage: MessageImageLoader\n /** Horizontal placement inside the owning record. */\n align: 'start' | 'end'\n}"],
6026
6539
  ownerPropsReferences: ["MessageImageLoader", "MessageImageSource"],
6027
6540
  standardProps: [
6541
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6028
6542
  "useResource: UseResource",
6029
6543
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6030
6544
  "usePanelInfo: UsePanelInfo",
6031
6545
  "useSessions: UseSessions",
6032
6546
  "useSessionStatus: UseSessionStatus",
6033
6547
  "useSessionRetainInfo: UseSessionRetainInfo",
6034
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6548
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6549
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6035
6550
  "useChat: UseChat",
6036
6551
  "useConversation: UseConversation",
6037
6552
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6039,6 +6554,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6039
6554
  "useSession: SessionSnapshotSelector",
6040
6555
  "sessionId: SessionId",
6041
6556
  "useProjection: UseProjection",
6557
+ "useAccess: (action: RemoteEndpoint) => boolean",
6042
6558
  "useTrajectory: UseTrajectory"
6043
6559
  ],
6044
6560
  keyDomain: "",
@@ -6076,13 +6592,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6076
6592
  "UseDisclosure"
6077
6593
  ],
6078
6594
  standardProps: [
6595
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6079
6596
  "useResource: UseResource",
6080
6597
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6081
6598
  "usePanelInfo: UsePanelInfo",
6082
6599
  "useSessions: UseSessions",
6083
6600
  "useSessionStatus: UseSessionStatus",
6084
6601
  "useSessionRetainInfo: UseSessionRetainInfo",
6085
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6602
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6603
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6086
6604
  "useChat: UseChat",
6087
6605
  "useConversation: UseConversation",
6088
6606
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6090,6 +6608,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6090
6608
  "useSession: SessionSnapshotSelector",
6091
6609
  "sessionId: SessionId",
6092
6610
  "useProjection: UseProjection",
6611
+ "useAccess: (action: RemoteEndpoint) => boolean",
6093
6612
  "useTrajectory: UseTrajectory"
6094
6613
  ],
6095
6614
  keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: ask_user_question, bash, cordis_define, cordis_inspect_list, cordis_inspect_query, cordis_inspect_self, cordis_run, cordis_stop, cordis_undefine, create_goal, edit, get_goal, glob, grep, interrupt_agent, job_kill, job_list, job_output, list_agents, list_subagent_models, lsp, present, ralph, read, read_image, schedule_create, schedule_delete, schedule_list, schedule_update, send_message, session_event_read, session_event_search, session_event_trace, session_search, session_trace, skill, spawn_teammate, subagent, team_task_create, team_task_get, team_task_list, team_task_update, terminal_close, terminal_list, terminal_open, terminal_read, terminal_signal, todo_write, update_goal, wait_agent, web_fetch, web_search, workflow, write",
@@ -6175,13 +6694,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6175
6694
  "CordisDynamicPluginRunId"
6176
6695
  ],
6177
6696
  standardProps: [
6697
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6178
6698
  "useResource: UseResource",
6179
6699
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6180
6700
  "usePanelInfo: UsePanelInfo",
6181
6701
  "useSessions: UseSessions",
6182
6702
  "useSessionStatus: UseSessionStatus",
6183
6703
  "useSessionRetainInfo: UseSessionRetainInfo",
6184
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6704
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6705
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean",
6185
6706
  "useChat: UseChat",
6186
6707
  "useConversation: UseConversation",
6187
6708
  "useInput: SnapshotSelectorHook<InputState>",
@@ -6189,6 +6710,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6189
6710
  "useSession: SessionSnapshotSelector",
6190
6711
  "sessionId: SessionId",
6191
6712
  "useProjection: UseProjection",
6713
+ "useAccess: (action: RemoteEndpoint) => boolean",
6192
6714
  "useTrajectory: UseTrajectory"
6193
6715
  ],
6194
6716
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
@@ -6199,6 +6721,52 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6199
6721
  replaceRisk: "none",
6200
6722
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('tool.view.cordis', () => ctx.slots.register(\n { name: 'tool.view.cordis', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
6201
6723
  source: "packages/extensions/ui-cordis/src/client/slots.ts:31"
6724
+ },
6725
+ {
6726
+ key: "workspace.toast",
6727
+ kind: "keyed",
6728
+ scope: "root",
6729
+ summary: "Workspace notices selected by their existing business discriminator.",
6730
+ doc: "Workspace notices selected by their existing business discriminator.",
6731
+ registerOptions: [{
6732
+ name: "key",
6733
+ requirement: "required",
6734
+ type: "string",
6735
+ doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
6736
+ }],
6737
+ ownerProps: ["/** Owner operations available to every keyed Workspace notice. */\nexport interface WorkspaceToastOwnerProps {\n /** Dismiss the displayed notice. */\n dismissToast: () => void\n}"],
6738
+ ownerPropsReferences: ["Workspace"],
6739
+ standardProps: [
6740
+ "useRemoteAccess: (action: RemoteEndpoint) => boolean",
6741
+ "useResource: UseResource",
6742
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
6743
+ "usePanelInfo: UsePanelInfo",
6744
+ "useSessions: UseSessions",
6745
+ "useSessionStatus: UseSessionStatus",
6746
+ "useSessionRetainInfo: UseSessionRetainInfo",
6747
+ "useSessionAccess: (sessionId: SessionId, action: RemoteEndpoint) => boolean",
6748
+ "useWorkspaceAccess: (workspaceId: WorkspaceId, action: RemoteEndpoint) => boolean"
6749
+ ],
6750
+ keyDomain: "fixed by the owner's key table { [K in ToastKind]: ToastNotice<K> }, already taken: archived, archivedNotOpenable, createFailed, defaultWorkspaceFailed, forkRequiresOpen, pinFailed, sessionIdCopied, sessionIdCopyFailed, shortcutForkFailed, stoppedAndArchived, unpinFailed",
6751
+ hookContext: "",
6752
+ slotInject: "",
6753
+ declaredBy: "an entry in 'shell.overlay' (client-ui-workspace), so it exists while that entry is mounted",
6754
+ occupants: [
6755
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'sessionIdCopi… key 'sessionIdCopied'",
6756
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'sessionIdCopy… key 'sessionIdCopyFailed'",
6757
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'pinFailed'>> key 'pinFailed'",
6758
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'unpinFailed'>> key 'unpinFailed'",
6759
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'archivedNotOp… key 'archivedNotOpenable'",
6760
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'defaultWorksp… key 'defaultWorkspaceFailed'",
6761
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'shortcutForkF… key 'shortcutForkFailed'",
6762
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'createFailed'>> key 'createFailed'",
6763
+ "client-ui-workspace ToastEntry<PropsRuntime<'workspace.toast', 'forkRequiresO… key 'forkRequiresOpen'",
6764
+ "client-ui-workspace ArchiveToastEntry key 'archived'",
6765
+ "client-ui-workspace ArchiveToastEntry key 'stoppedAndArchived'"
6766
+ ],
6767
+ replaceRisk: "shadows-shipped-ui",
6768
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('workspace.toast', () => ctx.slots.register(\n { name: 'workspace.toast', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
6769
+ source: "packages/client/ui-workspace/src/client/contract/toast.ts:53"
6202
6770
  }
6203
6771
  ];
6204
6772
  //#endregion