@deepseek-ai/dsh-cordis-client-runner 0.1.3-alpha.2 → 0.1.5-alpha.2

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.
Files changed (2) hide show
  1. package/lib/client.js +620 -124
  2. package/package.json +7 -7
package/lib/client.js CHANGED
@@ -1114,22 +1114,43 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1114
1114
  const SERVICE_API = [
1115
1115
  {
1116
1116
  key: "layout",
1117
- summary: "The outward layout face (`ctx.layout`): the panel transitions other plugins may trigger — and exactly what a test fake must supply.",
1118
- description: "The outward layout face (`ctx.layout`): the panel transitions other plugins may trigger — and exactly what a test fake must supply. The attachPanels wiring hook stays on the concrete class (root-entry assembly only).",
1117
+ summary: "Panel navigation and geometry actions exposed through ctx.layout.",
1118
+ description: "Panel navigation and geometry actions exposed through ctx.layout.",
1119
1119
  methods: [
1120
+ {
1121
+ signature: "selectPanel(panelId: MainPanelId | null): void",
1122
+ description: "Select a global central panel without changing the current Session.",
1123
+ parameters: [{
1124
+ name: "panelId",
1125
+ description: "registered main key, or null to show the Conversation."
1126
+ }],
1127
+ throws: ["if the selected main key is not registered; preserves the current selection."]
1128
+ },
1129
+ {
1130
+ signature: "beginNavigation(): AbortSignal",
1131
+ description: "Start an asynchronous navigation, superseding any earlier pending navigation.",
1132
+ parameters: [],
1133
+ returns: "a signal aborted by the next navigation or layout disposal; check it before committing UI state."
1134
+ },
1120
1135
  {
1121
1136
  signature: "toggleSidebar(): void",
1122
1137
  description: "Toggle the sidebar panel (closed ⟷ contract default width).",
1123
1138
  parameters: []
1124
1139
  },
1125
1140
  {
1126
- signature: "openDetails(): void",
1127
- description: "Open the details panel (no-op when already open).",
1128
- parameters: []
1141
+ signature: "openRightbar(track: boolean, fullscreen: boolean): void",
1142
+ description: "Report the right panel's presentation without changing its expanded state.",
1143
+ parameters: [{
1144
+ name: "track",
1145
+ description: "whether the normal panel width reserves a grid track, including beneath a fullscreen overlay."
1146
+ }, {
1147
+ name: "fullscreen",
1148
+ description: "whether the panel covers the frame and hides its outer resize handle; independent of the underlying grid track."
1149
+ }]
1129
1150
  },
1130
1151
  {
1131
- signature: "closeDetails(): void",
1132
- description: "Close the details panel.",
1152
+ signature: "closeRightbar(): void",
1153
+ description: "Report the right panel as hidden: no track, no handle.",
1133
1154
  parameters: []
1134
1155
  }
1135
1156
  ]
@@ -1427,6 +1448,35 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1427
1448
  summary: "Workspace archive and directory operations consumed by Client UI domains.",
1428
1449
  description: "Workspace archive and directory operations consumed by Client UI domains.",
1429
1450
  methods: [
1451
+ {
1452
+ signature: "openSession(sessionId: SessionId): void",
1453
+ description: "Select a Session and show its Conversation as one UI navigation action.",
1454
+ parameters: [{
1455
+ name: "sessionId",
1456
+ description: "listed or retained Session to display."
1457
+ }]
1458
+ },
1459
+ {
1460
+ signature: "openWorkspace(workspaceId: WorkspaceId, beforeOpen?: (sessionId: SessionId) => void): Promise<void>",
1461
+ description: "Connect a Workspace and open its Session unless a later navigation supersedes it.",
1462
+ parameters: [{
1463
+ name: "workspaceId",
1464
+ description: "target Workspace."
1465
+ }, {
1466
+ name: "beforeOpen",
1467
+ description: "optional synchronous preparation for the selected Session, skipped after supersession."
1468
+ }],
1469
+ returns: "completion; a superseded request may create a Session but does not open it."
1470
+ },
1471
+ {
1472
+ signature: "forkSession(sessionId: SessionId): Promise<void>",
1473
+ description: "Fork a Session and open the child unless a later navigation supersedes it.",
1474
+ parameters: [{
1475
+ name: "sessionId",
1476
+ description: "source Session."
1477
+ }],
1478
+ returns: "completion; a superseded request leaves its child available without selecting it."
1479
+ },
1430
1480
  {
1431
1481
  signature: "connectWorkspace(workspaceId: WorkspaceId): Promise<SessionId>",
1432
1482
  description: "Resolve the reusable or newly created blank Session for a Workspace.",
@@ -1778,6 +1828,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1778
1828
  name: "LocaleSnapshot",
1779
1829
  declaration: "export interface LocaleSnapshot {\n active: LocaleId;\n locales: readonly LocaleDefinition[];\n revision: number;\n}"
1780
1830
  },
1831
+ {
1832
+ name: "MainPanelId",
1833
+ declaration: "export type MainPanelId = Branded<'MainPanelId'>;"
1834
+ },
1781
1835
  {
1782
1836
  name: "MatchedShare",
1783
1837
  declaration: "export type MatchedShare<E extends SlotEntryDef, M> = E['kind'] extends 'chain' ? {\n matched: M;\n} : object;"
@@ -2145,36 +2199,6 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2145
2199
  //#region lib/types/client/slot-catalog.js
2146
2200
  /** Every slot the shipped web bundle declares, sorted by key. */
2147
2201
  const CLIENT_SLOT_API = [
2148
- {
2149
- key: "conversation",
2150
- kind: "single",
2151
- scope: "session-maybe",
2152
- summary: "The whole center column, across both the no-session hero and a live conversation.",
2153
- doc: "The whole center column, across both the no-session hero and a live\nconversation. OCCUPIED by ui-conversation's ConversationRoot, which\ndeclares the session body, composer, and input seats inside it —\nregistering here replaces the entire conversation surface (and removes\nevery seat it declares) rather than adding to it.\n\nCurrent-session-optional: the occupant owns both states without\nchanging its React identity, so it keeps its own state across a session\nswitch. It receives no owner props; session facts arrive through the\nframework hooks of the `session-maybe` scope.",
2154
- registerOptions: [],
2155
- ownerProps: ["/** Conversation owner share: business state and actions belong to the registrant. */\nexport interface ConvOwnerProps {}"],
2156
- ownerPropsReferences: [],
2157
- standardProps: [
2158
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2159
- "useSessions: UseSessions",
2160
- "useSessionPendingInteraction: UseSessionPendingInteraction",
2161
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2162
- "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2163
- "useInput: MaybeSnapshotSelectorHook<InputState>",
2164
- "inputActions: InputActions | undefined",
2165
- "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
2166
- "sessionId: SessionId | undefined",
2167
- "useProjection: UseProjection"
2168
- ],
2169
- keyDomain: "",
2170
- hookContext: "",
2171
- slotInject: "",
2172
- declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
2173
- occupants: ["client-ui-conversation ConversationRoot"],
2174
- replaceRisk: "shadows-shipped-ui",
2175
- example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation', () => ctx.slots.register(\n { name: 'conversation' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2176
- source: "packages/client/ui-layout/src/client/index.ts:65"
2177
- },
2178
2202
  {
2179
2203
  key: "conversation.approval.detail",
2180
2204
  kind: "single",
@@ -2185,7 +2209,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2185
2209
  ownerProps: ["/** Stable identity handed to an optional approval-detail renderer. */\nexport interface ApprovalDetailOwnerProps {\n /** Tool call correlated with the request. */\n callId: ToolCallId\n}"],
2186
2210
  ownerPropsReferences: [],
2187
2211
  standardProps: [
2212
+ "useResource: UseResource",
2188
2213
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2214
+ "usePanelInfo: UsePanelInfo",
2189
2215
  "useSessions: UseSessions",
2190
2216
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2191
2217
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2236,7 +2262,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2236
2262
  ownerProps: ["/** Owner currency of finalized-assistant actions. */\nexport interface AssistantActionOwnerProps {\n messageId: MessageId\n}"],
2237
2263
  ownerPropsReferences: ["MessageId"],
2238
2264
  standardProps: [
2265
+ "useResource: UseResource",
2239
2266
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2267
+ "usePanelInfo: UsePanelInfo",
2240
2268
  "useSessions: UseSessions",
2241
2269
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2242
2270
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2256,7 +2284,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2256
2284
  occupants: ["client-ui-message-feedback MessageFeedbackActions id 'feedback'"],
2257
2285
  replaceRisk: "none",
2258
2286
  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}",
2259
- source: "packages/client/ui-chat/src/client/contract/slots.ts:227"
2287
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:213"
2260
2288
  },
2261
2289
  {
2262
2290
  key: "conversation.chat.commandview",
@@ -2277,7 +2305,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2277
2305
  "CompactionSummaryNode"
2278
2306
  ],
2279
2307
  standardProps: [
2308
+ "useResource: UseResource",
2280
2309
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2310
+ "usePanelInfo: UsePanelInfo",
2281
2311
  "useSessions: UseSessions",
2282
2312
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2283
2313
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2297,7 +2327,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2297
2327
  occupants: [],
2298
2328
  replaceRisk: "none",
2299
2329
  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}",
2300
- source: "packages/client/ui-chat/src/client/contract/slots.ts:215"
2330
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:201"
2301
2331
  },
2302
2332
  {
2303
2333
  key: "conversation.chat.node",
@@ -2311,16 +2341,19 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2311
2341
  type: "string",
2312
2342
  doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
2313
2343
  }],
2314
- ownerProps: ["/** Stable owner currency delivered to a keyed Chat renderer. */\nexport interface ChatNodeOwnerProps {\n selectedCallId?: ToolCallId | undefined\n cwd?: string | undefined\n openFile: (path: string) => void\n inspectCall: (callId: ToolCallId) => void\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}"],
2344
+ ownerProps: ["/** Stable owner currency delivered to a keyed Chat renderer. */\nexport interface ChatNodeOwnerProps {\n cwd?: string | undefined\n openFile: (path: string, options?: OpenFileOptions) => void\n inspectCall: (callId: ToolCallId) => void\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}"],
2315
2345
  ownerPropsReferences: [
2316
2346
  "MarkdownFileMentions",
2317
2347
  "MessageImageLoader",
2348
+ "OpenFileOptions",
2318
2349
  "RenderMessageImages",
2319
2350
  "TurnProcessOwnerProps",
2320
2351
  "TurnTailOwnerProps"
2321
2352
  ],
2322
2353
  standardProps: [
2354
+ "useResource: UseResource",
2323
2355
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2356
+ "usePanelInfo: UsePanelInfo",
2324
2357
  "useSessions: UseSessions",
2325
2358
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2326
2359
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2358,7 +2391,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2358
2391
  ],
2359
2392
  replaceRisk: "shadows-shipped-ui",
2360
2393
  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}",
2361
- source: "packages/client/ui-chat/src/client/contract/slots.ts:196"
2394
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:182"
2362
2395
  },
2363
2396
  {
2364
2397
  key: "conversation.chat.turnTail",
@@ -2375,7 +2408,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2375
2408
  ownerProps: ["/** Owner currency of the completed-Turn extension chain. */\nexport interface TurnTailOwnerProps {\n turn: TurnLocation\n seq: number\n openFile: (path: string) => void\n}"],
2376
2409
  ownerPropsReferences: ["TurnLocation"],
2377
2410
  standardProps: [
2411
+ "useResource: UseResource",
2378
2412
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2413
+ "usePanelInfo: UsePanelInfo",
2379
2414
  "useSessions: UseSessions",
2380
2415
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2381
2416
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2392,10 +2427,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2392
2427
  hookContext: "",
2393
2428
  slotInject: "",
2394
2429
  declaredBy: "an entry in 'conversation.chat.node' (client-ui-chat), so it exists while that entry is mounted",
2395
- occupants: ["client-ui-deliverables ProducedFiles"],
2430
+ occupants: ["client-ui-deliverables Deliverables"],
2396
2431
  replaceRisk: "none",
2397
2432
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.turnTail', () => ctx.slots.register(\n { name: 'conversation.chat.turnTail', select: owner => null },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2398
- source: "packages/client/ui-chat/src/client/contract/slots.ts:221"
2433
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:207"
2399
2434
  },
2400
2435
  {
2401
2436
  key: "conversation.composer",
@@ -2416,7 +2451,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2416
2451
  "SessionSnapshot"
2417
2452
  ],
2418
2453
  standardProps: [
2454
+ "useResource: UseResource",
2419
2455
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2456
+ "usePanelInfo: UsePanelInfo",
2420
2457
  "useSessions: UseSessions",
2421
2458
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2422
2459
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2432,7 +2469,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2432
2469
  keyDomain: "",
2433
2470
  hookContext: "",
2434
2471
  slotInject: "",
2435
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2472
+ declaredBy: "an entry in 'main.conversation' (client-ui-conversation), so it exists while that entry is mounted",
2436
2473
  occupants: [
2437
2474
  "client-ui-approval ApprovalPanel",
2438
2475
  "client-ui-subagent SubagentReadOnlyComposer",
@@ -2440,7 +2477,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2440
2477
  ],
2441
2478
  replaceRisk: "none",
2442
2479
  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}",
2443
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:145"
2480
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:158"
2444
2481
  },
2445
2482
  {
2446
2483
  key: "conversation.composer.bar",
@@ -2452,7 +2489,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2452
2489
  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}"],
2453
2490
  ownerPropsReferences: ["Workspace"],
2454
2491
  standardProps: [
2492
+ "useResource: UseResource",
2455
2493
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2494
+ "usePanelInfo: UsePanelInfo",
2456
2495
  "useSessions: UseSessions",
2457
2496
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2458
2497
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2466,11 +2505,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2466
2505
  keyDomain: "",
2467
2506
  hookContext: "",
2468
2507
  slotInject: "",
2469
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2508
+ declaredBy: "an entry in 'main.conversation' (client-ui-conversation), so it exists while that entry is mounted",
2470
2509
  occupants: ["client-ui-conversation InputBar"],
2471
2510
  replaceRisk: "shadows-shipped-ui",
2472
2511
  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}",
2473
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:163"
2512
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:176"
2474
2513
  },
2475
2514
  {
2476
2515
  key: "conversation.composer.dock",
@@ -2501,7 +2540,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2501
2540
  ownerProps: [],
2502
2541
  ownerPropsReferences: [],
2503
2542
  standardProps: [
2543
+ "useResource: UseResource",
2504
2544
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2545
+ "usePanelInfo: UsePanelInfo",
2505
2546
  "useSessions: UseSessions",
2506
2547
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2507
2548
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2518,42 +2559,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2518
2559
  hookContext: "",
2519
2560
  slotInject: "",
2520
2561
  declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
2521
- occupants: ["client-ui-chat StatsLine id 'stats'"],
2562
+ occupants: ["client-ui-chat StatsPills id 'stats'"],
2522
2563
  replaceRisk: "none",
2523
2564
  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}",
2524
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:157"
2525
- },
2526
- {
2527
- key: "conversation.details.tool",
2528
- kind: "single",
2529
- scope: "session",
2530
- summary: "Whole details-panel body for the selected Tool call.",
2531
- doc: "Whole details-panel body for the selected Tool call. The component receives\nthe running or settled block and optional workspace root. A registration\nreplaces the shipped Tool details renderer; absence uses the raw fallback.",
2532
- registerOptions: [],
2533
- ownerProps: ["/** Tool block rendered in the details panel. */\nexport interface DetailsToolOwnerProps {\n block: ToolCallBlock\n cwd?: string | undefined\n}"],
2534
- ownerPropsReferences: [],
2535
- standardProps: [
2536
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2537
- "useSessions: UseSessions",
2538
- "useSessionPendingInteraction: UseSessionPendingInteraction",
2539
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2540
- "useChat: UseChat",
2541
- "useConversation: UseConversation",
2542
- "useInput: SnapshotSelectorHook<InputState>",
2543
- "inputActions: InputActions",
2544
- "useSession: SessionSnapshotSelector",
2545
- "sessionId: SessionId",
2546
- "useProjection: UseProjection",
2547
- "useTrajectory: UseTrajectory"
2548
- ],
2549
- keyDomain: "",
2550
- hookContext: "",
2551
- slotInject: "",
2552
- declaredBy: "an entry in 'details' (client-ui-chat), so it exists while that entry is mounted",
2553
- occupants: ["client-ui-tool ToolDetails"],
2554
- replaceRisk: "shadows-shipped-ui",
2555
- example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.details.tool', () => ctx.slots.register(\n { name: 'conversation.details.tool' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2556
- source: "packages/client/ui-chat/src/client/contract/slots.ts:233"
2565
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:170"
2557
2566
  },
2558
2567
  {
2559
2568
  key: "conversation.hero.agentPreset",
@@ -2565,7 +2574,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2565
2574
  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}"],
2566
2575
  ownerPropsReferences: [],
2567
2576
  standardProps: [
2577
+ "useResource: UseResource",
2568
2578
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2579
+ "usePanelInfo: UsePanelInfo",
2569
2580
  "useSessions: UseSessions",
2570
2581
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2571
2582
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -2573,11 +2584,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2573
2584
  keyDomain: "",
2574
2585
  hookContext: "",
2575
2586
  slotInject: "",
2576
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2587
+ declaredBy: "an entry in 'main.conversation' (client-ui-conversation), so it exists while that entry is mounted",
2577
2588
  occupants: ["client-ui-agent-preset AgentPresetSeat"],
2578
2589
  replaceRisk: "shadows-shipped-ui",
2579
2590
  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}",
2580
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:151"
2591
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:164"
2581
2592
  },
2582
2593
  {
2583
2594
  key: "conversation.hero.brand.mark",
@@ -2589,7 +2600,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2589
2600
  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}"],
2590
2601
  ownerPropsReferences: [],
2591
2602
  standardProps: [
2603
+ "useResource: UseResource",
2592
2604
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2605
+ "usePanelInfo: UsePanelInfo",
2593
2606
  "useSessions: UseSessions",
2594
2607
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2595
2608
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -2597,11 +2610,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2597
2610
  keyDomain: "",
2598
2611
  hookContext: "",
2599
2612
  slotInject: "",
2600
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2613
+ declaredBy: "an entry in 'main.conversation' (client-ui-conversation), so it exists while that entry is mounted",
2601
2614
  occupants: [],
2602
2615
  replaceRisk: "none",
2603
2616
  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}",
2604
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:149"
2617
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:162"
2605
2618
  },
2606
2619
  {
2607
2620
  key: "conversation.hero.workspace",
@@ -2613,7 +2626,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2613
2626
  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}"],
2614
2627
  ownerPropsReferences: ["Workspace"],
2615
2628
  standardProps: [
2629
+ "useResource: UseResource",
2616
2630
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2631
+ "usePanelInfo: UsePanelInfo",
2617
2632
  "useSessions: UseSessions",
2618
2633
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2619
2634
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -2621,11 +2636,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2621
2636
  keyDomain: "",
2622
2637
  hookContext: "",
2623
2638
  slotInject: "",
2624
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2639
+ declaredBy: "an entry in 'main.conversation' (client-ui-conversation), so it exists while that entry is mounted",
2625
2640
  occupants: ["client-ui-workspace WorkspacePicker"],
2626
2641
  replaceRisk: "shadows-shipped-ui",
2627
2642
  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}",
2628
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:147"
2643
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:160"
2629
2644
  },
2630
2645
  {
2631
2646
  key: "conversation.hero.workspace.directoryFlow",
@@ -2637,7 +2652,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2637
2652
  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}"],
2638
2653
  ownerPropsReferences: [],
2639
2654
  standardProps: [
2655
+ "useResource: UseResource",
2640
2656
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2657
+ "usePanelInfo: UsePanelInfo",
2641
2658
  "useSessions: UseSessions",
2642
2659
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2643
2660
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -2665,7 +2682,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2665
2682
  "DraftFileUploads"
2666
2683
  ],
2667
2684
  standardProps: [
2685
+ "useResource: UseResource",
2668
2686
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2687
+ "usePanelInfo: UsePanelInfo",
2669
2688
  "useSessions: UseSessions",
2670
2689
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2671
2690
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2683,7 +2702,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2683
2702
  occupants: ["client-ui-attachment ComposerAttachments"],
2684
2703
  replaceRisk: "shadows-shipped-ui",
2685
2704
  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}",
2686
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:165"
2705
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:178"
2687
2706
  },
2688
2707
  {
2689
2708
  key: "conversation.input.dock",
@@ -2714,7 +2733,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2714
2733
  ownerProps: ["/** Point-in-time owner values for composer extension entries. */\nexport interface InputZone {\n readonly session: SessionSnapshot\n readonly input: InputState\n}"],
2715
2734
  ownerPropsReferences: ["InputState", "SessionSnapshot"],
2716
2735
  standardProps: [
2736
+ "useResource: UseResource",
2717
2737
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2738
+ "usePanelInfo: UsePanelInfo",
2718
2739
  "useSessions: UseSessions",
2719
2740
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2720
2741
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2730,7 +2751,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2730
2751
  keyDomain: "",
2731
2752
  hookContext: "",
2732
2753
  slotInject: "",
2733
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2754
+ declaredBy: "an entry in 'main.conversation' (client-ui-conversation), so it exists while that entry is mounted",
2734
2755
  occupants: [
2735
2756
  "client-ui-conversation QueueDock id 'queue'",
2736
2757
  "client-ui-conversation TodoDock id 'todo'",
@@ -2738,7 +2759,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2738
2759
  ],
2739
2760
  replaceRisk: "none",
2740
2761
  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}",
2741
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:153"
2762
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:166"
2742
2763
  },
2743
2764
  {
2744
2765
  key: "conversation.input.left",
@@ -2769,7 +2790,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2769
2790
  ownerProps: [],
2770
2791
  ownerPropsReferences: [],
2771
2792
  standardProps: [
2793
+ "useResource: UseResource",
2772
2794
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2795
+ "usePanelInfo: UsePanelInfo",
2773
2796
  "useSessions: UseSessions",
2774
2797
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2775
2798
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2789,7 +2812,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2789
2812
  occupants: [],
2790
2813
  replaceRisk: "none",
2791
2814
  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}",
2792
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:159"
2815
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:172"
2793
2816
  },
2794
2817
  {
2795
2818
  key: "conversation.input.model",
@@ -2801,7 +2824,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2801
2824
  ownerProps: ["/** Owner share of the named plan and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
2802
2825
  ownerPropsReferences: [],
2803
2826
  standardProps: [
2827
+ "useResource: UseResource",
2804
2828
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2829
+ "usePanelInfo: UsePanelInfo",
2805
2830
  "useSessions: UseSessions",
2806
2831
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2807
2832
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2821,7 +2846,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2821
2846
  occupants: ["client-ui-model-selection ModelSelect"],
2822
2847
  replaceRisk: "shadows-shipped-ui",
2823
2848
  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}",
2824
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:173"
2849
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:186"
2825
2850
  },
2826
2851
  {
2827
2852
  key: "conversation.input.overlay",
@@ -2852,7 +2877,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2852
2877
  ownerProps: [],
2853
2878
  ownerPropsReferences: [],
2854
2879
  standardProps: [
2880
+ "useResource: UseResource",
2855
2881
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2882
+ "usePanelInfo: UsePanelInfo",
2856
2883
  "useSessions: UseSessions",
2857
2884
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2858
2885
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2869,10 +2896,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2869
2896
  hookContext: "",
2870
2897
  slotInject: "",
2871
2898
  declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
2872
- occupants: ["client-ui-commands PopupSelectView id 'command-popup'", "client-ui-input-trigger MenuView id 'slash-menu'"],
2899
+ occupants: [
2900
+ "client-ui-commands PopupSelectView id 'command-popup'",
2901
+ "client-ui-input-trigger MenuView id 'slash-menu'",
2902
+ "client-ui-message-feedback FeedbackDialog id 'feedback-dialog'"
2903
+ ],
2873
2904
  replaceRisk: "none",
2874
2905
  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}",
2875
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:155"
2906
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:168"
2876
2907
  },
2877
2908
  {
2878
2909
  key: "conversation.input.plan",
@@ -2884,7 +2915,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2884
2915
  ownerProps: ["/** Owner share of the named plan and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
2885
2916
  ownerPropsReferences: [],
2886
2917
  standardProps: [
2918
+ "useResource: UseResource",
2887
2919
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2920
+ "usePanelInfo: UsePanelInfo",
2888
2921
  "useSessions: UseSessions",
2889
2922
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2890
2923
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2904,7 +2937,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2904
2937
  occupants: ["client-ui-plan PlanChip"],
2905
2938
  replaceRisk: "shadows-shipped-ui",
2906
2939
  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}",
2907
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:171"
2940
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:184"
2908
2941
  },
2909
2942
  {
2910
2943
  key: "conversation.input.right",
@@ -2935,7 +2968,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2935
2968
  ownerProps: [],
2936
2969
  ownerPropsReferences: [],
2937
2970
  standardProps: [
2971
+ "useResource: UseResource",
2938
2972
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2973
+ "usePanelInfo: UsePanelInfo",
2939
2974
  "useSessions: UseSessions",
2940
2975
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2941
2976
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2955,7 +2990,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2955
2990
  occupants: [],
2956
2991
  replaceRisk: "none",
2957
2992
  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}",
2958
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:161"
2993
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:174"
2959
2994
  },
2960
2995
  {
2961
2996
  key: "conversation.message.images",
@@ -2971,7 +3006,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2971
3006
  "MessageImageSource"
2972
3007
  ],
2973
3008
  standardProps: [
3009
+ "useResource: UseResource",
2974
3010
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3011
+ "usePanelInfo: UsePanelInfo",
2975
3012
  "useSessions: UseSessions",
2976
3013
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2977
3014
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2991,7 +3028,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2991
3028
  occupants: ["client-ui-attachment MessageImages"],
2992
3029
  replaceRisk: "shadows-shipped-ui",
2993
3030
  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}",
2994
- source: "packages/client/ui-chat/src/client/contract/slots.ts:209"
3031
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:195"
2995
3032
  },
2996
3033
  {
2997
3034
  key: "conversation.session",
@@ -3003,7 +3040,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3003
3040
  ownerProps: [],
3004
3041
  ownerPropsReferences: [],
3005
3042
  standardProps: [
3043
+ "useResource: UseResource",
3006
3044
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3045
+ "usePanelInfo: UsePanelInfo",
3007
3046
  "useSessions: UseSessions",
3008
3047
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3009
3048
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3019,11 +3058,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3019
3058
  keyDomain: "",
3020
3059
  hookContext: "",
3021
3060
  slotInject: "",
3022
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
3061
+ declaredBy: "an entry in 'main.conversation' (client-ui-conversation), so it exists while that entry is mounted",
3023
3062
  occupants: ["client-ui-conversation ConversationSession"],
3024
3063
  replaceRisk: "shadows-shipped-ui",
3025
3064
  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}",
3026
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:121"
3065
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:123"
3027
3066
  },
3028
3067
  {
3029
3068
  key: "conversation.session.header",
@@ -3035,7 +3074,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3035
3074
  ownerProps: [],
3036
3075
  ownerPropsReferences: [],
3037
3076
  standardProps: [
3077
+ "useResource: UseResource",
3038
3078
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3079
+ "usePanelInfo: UsePanelInfo",
3039
3080
  "useSessions: UseSessions",
3040
3081
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3041
3082
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3051,11 +3092,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3051
3092
  keyDomain: "",
3052
3093
  hookContext: "",
3053
3094
  slotInject: "",
3054
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
3095
+ declaredBy: "an entry in 'main.conversation' (client-ui-conversation), so it exists while that entry is mounted",
3055
3096
  occupants: ["client-ui-conversation ConversationSessionHeader"],
3056
3097
  replaceRisk: "shadows-shipped-ui",
3057
3098
  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}",
3058
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:123"
3099
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:125"
3059
3100
  },
3060
3101
  {
3061
3102
  key: "conversation.session.header.actions",
@@ -3086,7 +3127,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3086
3127
  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}"],
3087
3128
  ownerPropsReferences: [],
3088
3129
  standardProps: [
3130
+ "useResource: UseResource",
3089
3131
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3132
+ "usePanelInfo: UsePanelInfo",
3090
3133
  "useSessions: UseSessions",
3091
3134
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3092
3135
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3111,7 +3154,41 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3111
3154
  ],
3112
3155
  replaceRisk: "none",
3113
3156
  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}",
3114
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:131"
3157
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:133"
3158
+ },
3159
+ {
3160
+ key: "conversation.session.header.corner",
3161
+ kind: "single",
3162
+ scope: "session",
3163
+ summary: "The header's far-right corner, past the utilities' edge and into the header's own padding, for one control.",
3164
+ doc: "The header's far-right corner, past the utilities' edge and into the\nheader's own padding, for one control. The corner is laid out only while\nits occupant renders something; an occupant with nothing to show renders\nnothing, and the utilities take the header's edge.",
3165
+ registerOptions: [],
3166
+ 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}"],
3167
+ ownerPropsReferences: [],
3168
+ standardProps: [
3169
+ "useResource: UseResource",
3170
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3171
+ "usePanelInfo: UsePanelInfo",
3172
+ "useSessions: UseSessions",
3173
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
3174
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3175
+ "useChat: UseChat",
3176
+ "useConversation: UseConversation",
3177
+ "useInput: SnapshotSelectorHook<InputState>",
3178
+ "inputActions: InputActions",
3179
+ "useSession: SessionSnapshotSelector",
3180
+ "sessionId: SessionId",
3181
+ "useProjection: UseProjection",
3182
+ "useTrajectory: UseTrajectory"
3183
+ ],
3184
+ keyDomain: "",
3185
+ hookContext: "",
3186
+ slotInject: "",
3187
+ declaredBy: "an entry in 'conversation.session.header' (client-ui-conversation), so it exists while that entry is mounted",
3188
+ occupants: ["client-ui-sidebar-right ExpandButton"],
3189
+ replaceRisk: "shadows-shipped-ui",
3190
+ 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}",
3191
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:150"
3115
3192
  },
3116
3193
  {
3117
3194
  key: "conversation.session.header.lineage",
@@ -3123,7 +3200,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3123
3200
  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}"],
3124
3201
  ownerPropsReferences: ["SessionId"],
3125
3202
  standardProps: [
3203
+ "useResource: UseResource",
3126
3204
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3205
+ "usePanelInfo: UsePanelInfo",
3127
3206
  "useSessions: UseSessions",
3128
3207
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3129
3208
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3143,7 +3222,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3143
3222
  occupants: ["client-ui-subagent SubagentHeaderLineage"],
3144
3223
  replaceRisk: "shadows-shipped-ui",
3145
3224
  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}",
3146
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:125"
3225
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:127"
3147
3226
  },
3148
3227
  {
3149
3228
  key: "conversation.session.header.utilities",
@@ -3174,7 +3253,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3174
3253
  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}"],
3175
3254
  ownerPropsReferences: [],
3176
3255
  standardProps: [
3256
+ "useResource: UseResource",
3177
3257
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3258
+ "usePanelInfo: UsePanelInfo",
3178
3259
  "useSessions: UseSessions",
3179
3260
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3180
3261
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3194,7 +3275,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3194
3275
  occupants: ["client-ui-open-in-app OpenInAppAction id 'open-in-app'", "session-log-export SessionLogDownloadHeaderAction id 'session-log-download'"],
3195
3276
  replaceRisk: "none",
3196
3277
  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}",
3197
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:137"
3278
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:139"
3198
3279
  },
3199
3280
  {
3200
3281
  key: "conversation.trajectory.images",
@@ -3210,7 +3291,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3210
3291
  "MessageImageSource"
3211
3292
  ],
3212
3293
  standardProps: [
3294
+ "useResource: UseResource",
3213
3295
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3296
+ "usePanelInfo: UsePanelInfo",
3214
3297
  "useSessions: UseSessions",
3215
3298
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3216
3299
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3230,7 +3313,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3230
3313
  occupants: ["client-ui-attachment MessageImages"],
3231
3314
  replaceRisk: "shadows-shipped-ui",
3232
3315
  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}",
3233
- source: "packages/client/ui-trajectory/src/client/trajectory-contract.ts:95"
3316
+ source: "packages/client/ui-trajectory/src/client/trajectory-contract.ts:98"
3234
3317
  },
3235
3318
  {
3236
3319
  key: "conversation.view",
@@ -3261,7 +3344,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3261
3344
  ownerProps: ["/** Conversation View entries obtain their data from registered standard hooks. */\nexport interface ConvViewOwnerProps {\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}"],
3262
3345
  ownerPropsReferences: ["ConversationViewRequest"],
3263
3346
  standardProps: [
3347
+ "useResource: UseResource",
3264
3348
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3349
+ "usePanelInfo: UsePanelInfo",
3265
3350
  "useSessions: UseSessions",
3266
3351
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3267
3352
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3281,19 +3366,110 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3281
3366
  occupants: ["client-ui-chat ChatView id 'chat'", "client-ui-trajectory TrajectoryView id 'trajectory'"],
3282
3367
  replaceRisk: "none",
3283
3368
  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}",
3284
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:143"
3369
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:156"
3370
+ },
3371
+ {
3372
+ key: "main",
3373
+ kind: "keyed",
3374
+ scope: "root",
3375
+ summary: "Central panel selected by sidebar entry id.",
3376
+ doc: "Central panel selected by sidebar entry id. The reserved `conversation`\nkey hosts the Conversation; other keys receive no Session binding.",
3377
+ registerOptions: [{
3378
+ name: "key",
3379
+ requirement: "required",
3380
+ type: "string",
3381
+ doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
3382
+ }],
3383
+ ownerProps: [],
3384
+ ownerPropsReferences: [],
3385
+ standardProps: [
3386
+ "useResource: UseResource",
3387
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3388
+ "usePanelInfo: UsePanelInfo",
3389
+ "useSessions: UseSessions",
3390
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
3391
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3392
+ ],
3393
+ keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: conversation",
3394
+ hookContext: "",
3395
+ slotInject: "",
3396
+ declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
3397
+ occupants: ["client-ui-conversation ConversationPanel key 'conversation'"],
3398
+ replaceRisk: "shadows-shipped-ui",
3399
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('main', () => ctx.slots.register(\n { name: 'main', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3400
+ source: "packages/client/ui-layout/src/client/index.ts:66"
3401
+ },
3402
+ {
3403
+ key: "main.conversation",
3404
+ kind: "single",
3405
+ scope: "session-maybe",
3406
+ summary: "Conversation shell beneath its root-scoped main-panel entry.",
3407
+ doc: "Conversation shell beneath its root-scoped main-panel entry.",
3408
+ registerOptions: [],
3409
+ ownerProps: [],
3410
+ ownerPropsReferences: [],
3411
+ standardProps: [
3412
+ "useResource: UseResource",
3413
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3414
+ "usePanelInfo: UsePanelInfo",
3415
+ "useSessions: UseSessions",
3416
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
3417
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3418
+ "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
3419
+ "useInput: MaybeSnapshotSelectorHook<InputState>",
3420
+ "inputActions: InputActions | undefined",
3421
+ "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
3422
+ "sessionId: SessionId | undefined",
3423
+ "useProjection: UseProjection"
3424
+ ],
3425
+ keyDomain: "",
3426
+ hookContext: "",
3427
+ slotInject: "",
3428
+ declaredBy: "an entry in 'main' (client-ui-conversation), so it exists while that entry is mounted",
3429
+ occupants: ["client-ui-conversation ConversationRoot"],
3430
+ replaceRisk: "shadows-shipped-ui",
3431
+ 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}",
3432
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:121"
3285
3433
  },
3286
3434
  {
3287
- key: "details",
3435
+ key: "rightbar",
3436
+ kind: "single",
3437
+ scope: "root",
3438
+ summary: "The right column: a track the centre makes room for, or nothing.",
3439
+ doc: "The right column: a track the centre makes room for, or nothing. OCCUPIED\nby the right Sidebar, which uses the resolved column width in normal\nmode and covers the viewport in fullscreen, retaining the wide-screen\ncolumn reservation underneath.\n\nWhether the panel is shown, and whether it takes a track, is the\noccupant's own recorded business — it reports the composition of its\nexpanded and presentation state through `ctx.layout`, and the frame sizes\nthe track and places the resize handle from that. The expand control is\nnot this column's: it is a button in the conversation header. The root\noccupant decides when to render its Session-bound content.",
3440
+ registerOptions: [],
3441
+ 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}"],
3442
+ ownerPropsReferences: [],
3443
+ standardProps: [
3444
+ "useResource: UseResource",
3445
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3446
+ "usePanelInfo: UsePanelInfo",
3447
+ "useSessions: UseSessions",
3448
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
3449
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
3450
+ ],
3451
+ keyDomain: "",
3452
+ hookContext: "",
3453
+ slotInject: "",
3454
+ declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
3455
+ occupants: ["client-ui-sidebar-right RightbarRoot"],
3456
+ replaceRisk: "shadows-shipped-ui",
3457
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('rightbar', () => ctx.slots.register(\n { name: 'rightbar' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3458
+ source: "packages/client/ui-layout/src/client/index.ts:80"
3459
+ },
3460
+ {
3461
+ key: "rightbar.session",
3288
3462
  kind: "single",
3289
3463
  scope: "session",
3290
- summary: "The right details column, shown when the layout opens it.",
3291
- doc: "The right details column, shown when the layout opens it. OCCUPIED by\nui-conversation's DetailsPanel, which declares the tool-details seat\ninside it — registering here replaces the column and takes that seat\nwith it. Absent an occupant the column renders nothing.\n\nNo owner props: the framework injects the session id and hooks for the\n`session` scope, and `ctx.layout` owns whether the column is open.",
3464
+ summary: "Session content selected by the root-scoped right Sidebar controller.",
3465
+ doc: "Session content selected by the root-scoped right Sidebar controller.",
3292
3466
  registerOptions: [],
3293
- ownerProps: ["/** Details owner share: empty sessionId arrives as a framework-standard prop. */\nexport interface DetailsOwnerProps {}"],
3467
+ 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}"],
3294
3468
  ownerPropsReferences: [],
3295
3469
  standardProps: [
3470
+ "useResource: UseResource",
3296
3471
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3472
+ "usePanelInfo: UsePanelInfo",
3297
3473
  "useSessions: UseSessions",
3298
3474
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3299
3475
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3309,11 +3485,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3309
3485
  keyDomain: "",
3310
3486
  hookContext: "",
3311
3487
  slotInject: "",
3312
- declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
3313
- occupants: ["client-ui-chat DetailsPanel"],
3488
+ declaredBy: "an entry in 'rightbar' (client-ui-sidebar-right), so it exists while that entry is mounted",
3489
+ occupants: ["client-ui-sidebar-right RightbarSeat"],
3314
3490
  replaceRisk: "shadows-shipped-ui",
3315
- example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('details', () => ctx.slots.register(\n { name: 'details' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3316
- source: "packages/client/ui-layout/src/client/index.ts:75"
3491
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('rightbar.session', () => ctx.slots.register(\n { name: 'rightbar.session' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3492
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:42"
3317
3493
  },
3318
3494
  {
3319
3495
  key: "root",
@@ -3325,7 +3501,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3325
3501
  ownerProps: ["/** Root owner share: the shell supplies nothing — the frame is inject-assembled. */\nexport interface RootOwnerProps { children?: never }"],
3326
3502
  ownerPropsReferences: [],
3327
3503
  standardProps: [
3504
+ "useResource: UseResource",
3328
3505
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3506
+ "usePanelInfo: UsePanelInfo",
3329
3507
  "useSessions: UseSessions",
3330
3508
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3331
3509
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3368,7 +3546,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3368
3546
  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}"],
3369
3547
  ownerPropsReferences: [],
3370
3548
  standardProps: [
3549
+ "useResource: UseResource",
3371
3550
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3551
+ "usePanelInfo: UsePanelInfo",
3372
3552
  "useSessions: UseSessions",
3373
3553
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3374
3554
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3392,7 +3572,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3392
3572
  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}"],
3393
3573
  ownerPropsReferences: [],
3394
3574
  standardProps: [
3575
+ "useResource: UseResource",
3395
3576
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3577
+ "usePanelInfo: UsePanelInfo",
3396
3578
  "useSessions: UseSessions",
3397
3579
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3398
3580
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3435,7 +3617,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3435
3617
  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}"],
3436
3618
  ownerPropsReferences: [],
3437
3619
  standardProps: [
3620
+ "useResource: UseResource",
3438
3621
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3622
+ "usePanelInfo: UsePanelInfo",
3439
3623
  "useSessions: UseSessions",
3440
3624
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3441
3625
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3466,7 +3650,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3466
3650
  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}"],
3467
3651
  ownerPropsReferences: [],
3468
3652
  standardProps: [
3653
+ "useResource: UseResource",
3469
3654
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3655
+ "usePanelInfo: UsePanelInfo",
3470
3656
  "useSessions: UseSessions",
3471
3657
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3472
3658
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3509,7 +3695,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3509
3695
  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}"],
3510
3696
  ownerPropsReferences: [],
3511
3697
  standardProps: [
3698
+ "useResource: UseResource",
3512
3699
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3700
+ "usePanelInfo: UsePanelInfo",
3513
3701
  "useSessions: UseSessions",
3514
3702
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3515
3703
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3538,7 +3726,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3538
3726
  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}"],
3539
3727
  ownerPropsReferences: ["ProviderDirectoryEntry"],
3540
3728
  standardProps: [
3729
+ "useResource: UseResource",
3541
3730
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3731
+ "usePanelInfo: UsePanelInfo",
3542
3732
  "useSessions: UseSessions",
3543
3733
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3544
3734
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3581,7 +3771,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3581
3771
  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 /** 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}"],
3582
3772
  ownerPropsReferences: [],
3583
3773
  standardProps: [
3774
+ "useResource: UseResource",
3584
3775
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3776
+ "usePanelInfo: UsePanelInfo",
3585
3777
  "useSessions: UseSessions",
3586
3778
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3587
3779
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3610,7 +3802,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3610
3802
  ownerProps: ["/** Owner share of a plugin card (the section supplies nothing). */\nexport interface SettingsPluginItemOwnerProps {\n /** Marker field: card owner props are intentionally empty. */\n children?: never\n}"],
3611
3803
  ownerPropsReferences: [],
3612
3804
  standardProps: [
3805
+ "useResource: UseResource",
3613
3806
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3807
+ "usePanelInfo: UsePanelInfo",
3614
3808
  "useSessions: UseSessions",
3615
3809
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3616
3810
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3658,7 +3852,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3658
3852
  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}"],
3659
3853
  ownerPropsReferences: [],
3660
3854
  standardProps: [
3855
+ "useResource: UseResource",
3661
3856
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3857
+ "usePanelInfo: UsePanelInfo",
3662
3858
  "useSessions: UseSessions",
3663
3859
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3664
3860
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3701,7 +3897,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3701
3897
  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}"],
3702
3898
  ownerPropsReferences: [],
3703
3899
  standardProps: [
3900
+ "useResource: UseResource",
3704
3901
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3902
+ "usePanelInfo: UsePanelInfo",
3705
3903
  "useSessions: UseSessions",
3706
3904
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3707
3905
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3730,7 +3928,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3730
3928
  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}"],
3731
3929
  ownerPropsReferences: [],
3732
3930
  standardProps: [
3931
+ "useResource: UseResource",
3733
3932
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3933
+ "usePanelInfo: UsePanelInfo",
3734
3934
  "useSessions: UseSessions",
3735
3935
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3736
3936
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3773,7 +3973,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3773
3973
  ownerProps: [],
3774
3974
  ownerPropsReferences: [],
3775
3975
  standardProps: [
3976
+ "useResource: UseResource",
3776
3977
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3978
+ "usePanelInfo: UsePanelInfo",
3777
3979
  "useSessions: UseSessions",
3778
3980
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3779
3981
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3785,7 +3987,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3785
3987
  occupants: [],
3786
3988
  replaceRisk: "none",
3787
3989
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('shell.overlay', () => ctx.slots.register(\n { name: 'shell.overlay', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3788
- source: "packages/client/ui-layout/src/client/index.ts:86"
3990
+ source: "packages/client/ui-layout/src/client/index.ts:91"
3789
3991
  },
3790
3992
  {
3791
3993
  key: "sidebar",
@@ -3797,7 +3999,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3797
3999
  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}"],
3798
4000
  ownerPropsReferences: [],
3799
4001
  standardProps: [
4002
+ "useResource: UseResource",
3800
4003
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4004
+ "usePanelInfo: UsePanelInfo",
3801
4005
  "useSessions: UseSessions",
3802
4006
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3803
4007
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3809,7 +4013,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3809
4013
  occupants: ["client-ui-sidebar SidebarRoot"],
3810
4014
  replaceRisk: "shadows-shipped-ui",
3811
4015
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar', () => ctx.slots.register(\n { name: 'sidebar' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3812
- source: "packages/client/ui-layout/src/client/index.ts:52"
4016
+ source: "packages/client/ui-layout/src/client/index.ts:61"
3813
4017
  },
3814
4018
  {
3815
4019
  key: "sidebar.brand.mark",
@@ -3821,7 +4025,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3821
4025
  ownerProps: ["/** Geometry supplied to the sidebar brand-mark occupant. */\nexport interface SidebarBrandMarkOwnerProps {\n /** Requested square edge in pixels. */\n size: number\n}"],
3822
4026
  ownerPropsReferences: [],
3823
4027
  standardProps: [
4028
+ "useResource: UseResource",
3824
4029
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4030
+ "usePanelInfo: UsePanelInfo",
3825
4031
  "useSessions: UseSessions",
3826
4032
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3827
4033
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3833,7 +4039,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3833
4039
  occupants: ["client-ui-brand-official OfficialBrandMark"],
3834
4040
  replaceRisk: "shadows-shipped-ui",
3835
4041
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.brand.mark', () => ctx.slots.register(\n { name: 'sidebar.brand.mark' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3836
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:23"
4042
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:22"
3837
4043
  },
3838
4044
  {
3839
4045
  key: "sidebar.brand.name",
@@ -3845,7 +4051,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3845
4051
  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}"],
3846
4052
  ownerPropsReferences: [],
3847
4053
  standardProps: [
4054
+ "useResource: UseResource",
3848
4055
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4056
+ "usePanelInfo: UsePanelInfo",
3849
4057
  "useSessions: UseSessions",
3850
4058
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3851
4059
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3857,7 +4065,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3857
4065
  occupants: ["client-ui-brand-official OfficialBrandName"],
3858
4066
  replaceRisk: "shadows-shipped-ui",
3859
4067
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.brand.name', () => ctx.slots.register(\n { name: 'sidebar.brand.name' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3860
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:28"
4068
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:27"
3861
4069
  },
3862
4070
  {
3863
4071
  key: "sidebar.footer.action",
@@ -3888,7 +4096,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3888
4096
  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}"],
3889
4097
  ownerPropsReferences: [],
3890
4098
  standardProps: [
4099
+ "useResource: UseResource",
3891
4100
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4101
+ "usePanelInfo: UsePanelInfo",
3892
4102
  "useSessions: UseSessions",
3893
4103
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3894
4104
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3900,7 +4110,276 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3900
4110
  occupants: ["client-ui-cordis CordisPanel id 'cordis-panel'"],
3901
4111
  replaceRisk: "none",
3902
4112
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.footer.action', () => ctx.slots.register(\n { name: 'sidebar.footer.action', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3903
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:46"
4113
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:50"
4114
+ },
4115
+ {
4116
+ key: "sidebar.panellist",
4117
+ kind: "list",
4118
+ scope: "root",
4119
+ summary: "Global panel icons.",
4120
+ doc: "Global panel icons. Each list id addresses the matching main panel;\nthe sidebar owns the button and resolves its label from list metadata.",
4121
+ registerOptions: [
4122
+ {
4123
+ name: "id",
4124
+ requirement: "required",
4125
+ type: "string",
4126
+ 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."
4127
+ },
4128
+ {
4129
+ name: "order",
4130
+ requirement: "optional",
4131
+ type: "number",
4132
+ doc: "Position among the entries, ascending (default 0)."
4133
+ },
4134
+ {
4135
+ name: "label",
4136
+ requirement: "optional",
4137
+ type: "string | (() => string)",
4138
+ 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."
4139
+ }
4140
+ ],
4141
+ 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}"],
4142
+ ownerPropsReferences: [],
4143
+ standardProps: [
4144
+ "useResource: UseResource",
4145
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4146
+ "usePanelInfo: UsePanelInfo",
4147
+ "useSessions: UseSessions",
4148
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
4149
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4150
+ ],
4151
+ keyDomain: "",
4152
+ hookContext: "",
4153
+ slotInject: "",
4154
+ declaredBy: "an entry in 'sidebar' (client-ui-sidebar), so it exists while that entry is mounted",
4155
+ occupants: [],
4156
+ replaceRisk: "none",
4157
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.panellist', () => ctx.slots.register(\n { name: 'sidebar.panellist', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4158
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:32"
4159
+ },
4160
+ {
4161
+ key: "sidebar.right.pane.tab",
4162
+ kind: "keyed",
4163
+ scope: "session",
4164
+ summary: "One tab's body, dispatched with the `id` of the type in force for `tab.kind`.",
4165
+ doc: "One tab's body, dispatched with the `id` of the type in force for\n`tab.kind`. A tab type registers here under its definition's `id` and\nreceives every tab of that kind, in every pane, docked or floating. A kind\nwith no type in force renders the owner's \"nothing can view this\" notice\nrather than an empty pane.",
4166
+ registerOptions: [{
4167
+ name: "key",
4168
+ requirement: "required",
4169
+ type: "string",
4170
+ doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
4171
+ }],
4172
+ ownerProps: [],
4173
+ ownerPropsReferences: [],
4174
+ standardProps: [
4175
+ "useResource: UseResource",
4176
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4177
+ "usePanelInfo: UsePanelInfo",
4178
+ "useSessions: UseSessions",
4179
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
4180
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4181
+ "useChat: UseChat",
4182
+ "useConversation: UseConversation",
4183
+ "useInput: SnapshotSelectorHook<InputState>",
4184
+ "inputActions: InputActions",
4185
+ "useSession: SessionSnapshotSelector",
4186
+ "sessionId: SessionId",
4187
+ "useProjection: UseProjection",
4188
+ "useTrajectory: UseTrajectory"
4189
+ ],
4190
+ keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4191
+ hookContext: "TabHookContext",
4192
+ slotInject: "SidebarRightTabInjected",
4193
+ declaredBy: "an entry in 'rightbar.session' (client-ui-sidebar-right), so it exists while that entry is mounted",
4194
+ occupants: [
4195
+ "client-ui-sidebar-documentpreview TextPreview",
4196
+ "client-ui-sidebar-files FilesBody",
4197
+ "client-ui-sidebar-right GuideBody"
4198
+ ],
4199
+ replaceRisk: "none",
4200
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.pane.tab', () => ctx.slots.register(\n { name: 'sidebar.right.pane.tab', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4201
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:50"
4202
+ },
4203
+ {
4204
+ key: "sidebar.right.pane.tab.title",
4205
+ kind: "keyed",
4206
+ scope: "session",
4207
+ summary: "A tab's title as its chip (and a floating panel's header) shows it, dispatched with the same key and information hook as the body.",
4208
+ doc: "A tab's title as its chip (and a floating panel's header) shows it,\ndispatched with the same key and information hook as the body. A type with a\nlive title — a terminal named after its shell, a chat after its first\nline — registers here and reads its own store; one without registers\nnothing and the chip shows the registry's `title(address)` text captured\nat open time.",
4209
+ registerOptions: [{
4210
+ name: "key",
4211
+ requirement: "required",
4212
+ type: "string",
4213
+ doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
4214
+ }],
4215
+ ownerProps: [],
4216
+ ownerPropsReferences: [],
4217
+ standardProps: [
4218
+ "useResource: UseResource",
4219
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4220
+ "usePanelInfo: UsePanelInfo",
4221
+ "useSessions: UseSessions",
4222
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
4223
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4224
+ "useChat: UseChat",
4225
+ "useConversation: UseConversation",
4226
+ "useInput: SnapshotSelectorHook<InputState>",
4227
+ "inputActions: InputActions",
4228
+ "useSession: SessionSnapshotSelector",
4229
+ "sessionId: SessionId",
4230
+ "useProjection: UseProjection",
4231
+ "useTrajectory: UseTrajectory"
4232
+ ],
4233
+ keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4234
+ hookContext: "TabHookContext",
4235
+ slotInject: "SidebarRightTabInjected",
4236
+ declaredBy: "an entry in 'rightbar.session' (client-ui-sidebar-right), so it exists while that entry is mounted",
4237
+ occupants: [
4238
+ "client-ui-sidebar-documentpreview TextTitle",
4239
+ "client-ui-sidebar-files FilesTitle",
4240
+ "client-ui-sidebar-right GuideTitle"
4241
+ ],
4242
+ replaceRisk: "none",
4243
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.pane.tab.title', () => ctx.slots.register(\n { name: 'sidebar.right.pane.tab.title', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4244
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:64"
4245
+ },
4246
+ {
4247
+ key: "sidebar.right.tab.document",
4248
+ kind: "keyed",
4249
+ scope: "session",
4250
+ summary: "Document body selected by a registered implementation id.",
4251
+ doc: "Document body selected by a registered implementation id.",
4252
+ registerOptions: [{
4253
+ name: "key",
4254
+ requirement: "required",
4255
+ type: "string",
4256
+ doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
4257
+ }],
4258
+ ownerProps: ["/**\n * Contents prepared by the preview owner using ordinary file reads.\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> }"],
4259
+ ownerPropsReferences: ["DocumentTextPage"],
4260
+ standardProps: [
4261
+ "useResource: UseResource",
4262
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4263
+ "usePanelInfo: UsePanelInfo",
4264
+ "useSessions: UseSessions",
4265
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
4266
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4267
+ "useChat: UseChat",
4268
+ "useConversation: UseConversation",
4269
+ "useInput: SnapshotSelectorHook<InputState>",
4270
+ "inputActions: InputActions",
4271
+ "useSession: SessionSnapshotSelector",
4272
+ "sessionId: SessionId",
4273
+ "useProjection: UseProjection",
4274
+ "useTrajectory: UseTrajectory"
4275
+ ],
4276
+ keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4277
+ hookContext: "UseSidebarRightTabInfo",
4278
+ slotInject: "{ hooks: { tabInfo: SlotHookFactory<'sidebar.right.tab.document', UseSidebarRightTabInfo> } }",
4279
+ declaredBy: "an entry in 'sidebar.right.pane.tab' (client-ui-sidebar-documentpreview), so it exists while that entry is mounted",
4280
+ occupants: [
4281
+ "client-ui-sidebar-documentpreview CodeBody",
4282
+ "client-ui-sidebar-documentpreview HtmlBody",
4283
+ "client-ui-sidebar-documentpreview ImageBody",
4284
+ "client-ui-sidebar-documentpreview MarkdownBody",
4285
+ "client-ui-sidebar-documentpreview PdfBody",
4286
+ "client-ui-sidebar-documentpreview TextBody"
4287
+ ],
4288
+ replaceRisk: "none",
4289
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.tab.document', () => ctx.slots.register(\n { name: 'sidebar.right.tab.document', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4290
+ source: "packages/client/ui-sidebar-documentpreview/src/client/document/contract.ts:23"
4291
+ },
4292
+ {
4293
+ key: "sidebar.right.tab.guide",
4294
+ kind: "chain",
4295
+ scope: "session",
4296
+ summary: "The guide tab's body.",
4297
+ doc: "The guide tab's body. Selectors run in chain order and the first\nnon-declining entry replaces the shipped guide entirely; with no entry, or\nwith every entry declining, the shipped guide renders.",
4298
+ registerOptions: [{
4299
+ name: "select",
4300
+ requirement: "required",
4301
+ type: "(owner) => unknown | null",
4302
+ doc: "Pure routing selector. Entries are tried in ascending order; the first non-null result wins and arrives as the component's `matched` prop. All-null falls through to the owner's fallback."
4303
+ }],
4304
+ ownerProps: [],
4305
+ ownerPropsReferences: [],
4306
+ standardProps: [
4307
+ "useResource: UseResource",
4308
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4309
+ "usePanelInfo: UsePanelInfo",
4310
+ "useSessions: UseSessions",
4311
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
4312
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4313
+ "useChat: UseChat",
4314
+ "useConversation: UseConversation",
4315
+ "useInput: SnapshotSelectorHook<InputState>",
4316
+ "inputActions: InputActions",
4317
+ "useSession: SessionSnapshotSelector",
4318
+ "sessionId: SessionId",
4319
+ "useProjection: UseProjection",
4320
+ "useTrajectory: UseTrajectory"
4321
+ ],
4322
+ keyDomain: "",
4323
+ hookContext: "UseSidebarRightTabInfo",
4324
+ slotInject: "{ hooks: { tabInfo: SlotHookFactory<'sidebar.right.tab.guide', UseSidebarRightTabInfo> } }",
4325
+ declaredBy: "an entry in 'sidebar.right.pane.tab' (client-ui-sidebar-right), so it exists while that entry is mounted",
4326
+ occupants: [],
4327
+ replaceRisk: "none",
4328
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.tab.guide', () => ctx.slots.register(\n { name: 'sidebar.right.tab.guide', select: owner => null },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4329
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:75"
4330
+ },
4331
+ {
4332
+ key: "sidebar.right.tab.menu.item",
4333
+ kind: "list",
4334
+ scope: "session",
4335
+ summary: "Extra items at the end of one tab's actions menu, in registration order.",
4336
+ doc: "Extra items at the end of one tab's actions menu, in registration order.\nEntries decide their own visibility from the tab they are given. Without a\nregistrant the menu shows only the kit's own layout actions.",
4337
+ registerOptions: [
4338
+ {
4339
+ name: "id",
4340
+ requirement: "required",
4341
+ type: "string",
4342
+ 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."
4343
+ },
4344
+ {
4345
+ name: "order",
4346
+ requirement: "optional",
4347
+ type: "number",
4348
+ doc: "Position among the entries, ascending (default 0)."
4349
+ },
4350
+ {
4351
+ name: "label",
4352
+ requirement: "optional",
4353
+ type: "string | (() => string)",
4354
+ 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."
4355
+ }
4356
+ ],
4357
+ 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}"],
4358
+ ownerPropsReferences: ["TabRecord"],
4359
+ standardProps: [
4360
+ "useResource: UseResource",
4361
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4362
+ "usePanelInfo: UsePanelInfo",
4363
+ "useSessions: UseSessions",
4364
+ "useSessionPendingInteraction: UseSessionPendingInteraction",
4365
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4366
+ "useChat: UseChat",
4367
+ "useConversation: UseConversation",
4368
+ "useInput: SnapshotSelectorHook<InputState>",
4369
+ "inputActions: InputActions",
4370
+ "useSession: SessionSnapshotSelector",
4371
+ "sessionId: SessionId",
4372
+ "useProjection: UseProjection",
4373
+ "useTrajectory: UseTrajectory"
4374
+ ],
4375
+ keyDomain: "",
4376
+ hookContext: "",
4377
+ slotInject: "",
4378
+ declaredBy: "an entry in 'rightbar.session' (client-ui-sidebar-right), so it exists while that entry is mounted",
4379
+ occupants: [],
4380
+ replaceRisk: "none",
4381
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.tab.menu.item', () => ctx.slots.register(\n { name: 'sidebar.right.tab.menu.item', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4382
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:86"
3904
4383
  },
3905
4384
  {
3906
4385
  key: "sidebar.settings",
@@ -3912,7 +4391,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3912
4391
  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}"],
3913
4392
  ownerPropsReferences: [],
3914
4393
  standardProps: [
4394
+ "useResource: UseResource",
3915
4395
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4396
+ "usePanelInfo: UsePanelInfo",
3916
4397
  "useSessions: UseSessions",
3917
4398
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3918
4399
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3924,7 +4405,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3924
4405
  occupants: ["client-ui-settings-general SettingsRoot"],
3925
4406
  replaceRisk: "shadows-shipped-ui",
3926
4407
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.settings', () => ctx.slots.register(\n { name: 'sidebar.settings' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3927
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:41"
4408
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:45"
3928
4409
  },
3929
4410
  {
3930
4411
  key: "sidebar.workspaces",
@@ -3936,7 +4417,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3936
4417
  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}"],
3937
4418
  ownerPropsReferences: [],
3938
4419
  standardProps: [
4420
+ "useResource: UseResource",
3939
4421
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4422
+ "usePanelInfo: UsePanelInfo",
3940
4423
  "useSessions: UseSessions",
3941
4424
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3942
4425
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3948,7 +4431,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3948
4431
  occupants: ["client-ui-workspace WorkspaceBrowser"],
3949
4432
  replaceRisk: "shadows-shipped-ui",
3950
4433
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.workspaces', () => ctx.slots.register(\n { name: 'sidebar.workspaces' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3951
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:35"
4434
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:39"
3952
4435
  },
3953
4436
  {
3954
4437
  key: "sidebar.workspaces.directoryFlow",
@@ -3960,7 +4443,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3960
4443
  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}"],
3961
4444
  ownerPropsReferences: [],
3962
4445
  standardProps: [
4446
+ "useResource: UseResource",
3963
4447
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4448
+ "usePanelInfo: UsePanelInfo",
3964
4449
  "useSessions: UseSessions",
3965
4450
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3966
4451
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3984,7 +4469,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3984
4469
  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}"],
3985
4470
  ownerPropsReferences: ["MessageImageLoader", "MessageImageSource"],
3986
4471
  standardProps: [
4472
+ "useResource: UseResource",
3987
4473
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4474
+ "usePanelInfo: UsePanelInfo",
3988
4475
  "useSessions: UseSessions",
3989
4476
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3990
4477
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -4018,10 +4505,16 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4018
4505
  type: "string",
4019
4506
  doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
4020
4507
  }],
4021
- ownerProps: ["/** Standard owner currency supplied to every atomic Tool view. */\nexport interface ToolCallOwnerProps {\n /** Tool call identity, stable across running and settled forms. */\n callId: string\n /** Wire Tool name and keyed dispatch value. */\n toolName: string\n /** Frozen running call or settled result node. */\n block: ToolCallBlock\n /** Session workspace root for relative summaries. */\n cwd?: string | undefined\n /** Host account home; POSIX home-rooted summaries display as `~`. */\n home?: string | undefined\n /** Open a Tool argument path through the Host. */\n openFile: (path: string) => void\n /**\n * Session-authorized image loader for the `tool.call.images` slot, supplied\n * by the chat node that owns this call. A composed chat node always\n * supplies it (`ChatNodeOwnerProps.loadImage` is required), so the tool\n * layer never imports an attachment implementation nor handles URL\n * authorization.\n */\n loadImage: MessageImageLoader\n /** Inspect this call in the trajectory view when available. */\n inspect?: (() => void) | undefined\n}"],
4022
- ownerPropsReferences: ["ChatNodeOwnerProps", "MessageImageLoader"],
4508
+ ownerProps: ["/** Standard owner currency supplied to every atomic Tool view. */\nexport interface ToolCallOwnerProps {\n /** Tool call identity, stable across running and settled forms. */\n callId: string\n /** Wire Tool name and keyed dispatch value. */\n toolName: string\n /** Frozen running call or settled result node. */\n block: ToolCallBlock\n /** Session workspace root for relative summaries. */\n cwd?: string | undefined\n /** Host account home; POSIX home-rooted summaries display as `~`. */\n home?: string | undefined\n /**\n * Open a Tool argument path. A view that knows which line the call was about\n * passes it, and the opened surface lands there.\n */\n openFile: (path: string, options?: OpenFileOptions) => void\n /**\n * Session-authorized image loader for the `tool.call.images` slot, supplied\n * by the chat node that owns this call. A composed chat node always\n * supplies it (`ChatNodeOwnerProps.loadImage` is required), so the tool\n * layer never imports an attachment implementation nor handles URL\n * authorization.\n */\n loadImage: MessageImageLoader\n /** Inspect this call in the trajectory view when available. */\n inspect?: (() => void) | undefined\n}"],
4509
+ ownerPropsReferences: [
4510
+ "ChatNodeOwnerProps",
4511
+ "MessageImageLoader",
4512
+ "OpenFileOptions"
4513
+ ],
4023
4514
  standardProps: [
4515
+ "useResource: UseResource",
4024
4516
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4517
+ "usePanelInfo: UsePanelInfo",
4025
4518
  "useSessions: UseSessions",
4026
4519
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4027
4520
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -4034,11 +4527,12 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4034
4527
  "useProjection: UseProjection",
4035
4528
  "useTrajectory: UseTrajectory"
4036
4529
  ],
4037
- keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: ask_user_question, bash, cordis_define, cordis_run, cordis_stop, cordis_undefine, edit, glob, grep, read, read_image, skill, todo_write, web_fetch, web_search, write",
4530
+ keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: ask_user_question, bash, cordis_define, cordis_run, cordis_stop, cordis_undefine, edit, glob, grep, present, read, read_image, skill, todo_write, web_fetch, web_search, write",
4038
4531
  hookContext: "",
4039
4532
  slotInject: "",
4040
4533
  declaredBy: "an entry in 'conversation.chat.node' (client-ui-tool), so it exists while that entry is mounted",
4041
4534
  occupants: [
4535
+ "client-ui-deliverables PresentRow key 'present'",
4042
4536
  "client-ui-skill SkillRow key 'skill'",
4043
4537
  "client-ui-tool AskQuestionRow key 'ask_user_question'",
4044
4538
  "client-ui-tool BashRow key 'bash'",
@@ -4079,7 +4573,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4079
4573
  "CordisDynamicPluginRunId"
4080
4574
  ],
4081
4575
  standardProps: [
4576
+ "useResource: UseResource",
4082
4577
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4578
+ "usePanelInfo: UsePanelInfo",
4083
4579
  "useSessions: UseSessions",
4084
4580
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4085
4581
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",