@deepseek-ai/dsh-cordis-client-runner 0.1.5-alpha.1 → 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 +355 -93
  2. package/package.json +6 -6
package/lib/client.js CHANGED
@@ -1114,9 +1114,24 @@ 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).",
@@ -1433,6 +1448,35 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1433
1448
  summary: "Workspace archive and directory operations consumed by Client UI domains.",
1434
1449
  description: "Workspace archive and directory operations consumed by Client UI domains.",
1435
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
+ },
1436
1480
  {
1437
1481
  signature: "connectWorkspace(workspaceId: WorkspaceId): Promise<SessionId>",
1438
1482
  description: "Resolve the reusable or newly created blank Session for a Workspace.",
@@ -1784,6 +1828,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1784
1828
  name: "LocaleSnapshot",
1785
1829
  declaration: "export interface LocaleSnapshot {\n active: LocaleId;\n locales: readonly LocaleDefinition[];\n revision: number;\n}"
1786
1830
  },
1831
+ {
1832
+ name: "MainPanelId",
1833
+ declaration: "export type MainPanelId = Branded<'MainPanelId'>;"
1834
+ },
1787
1835
  {
1788
1836
  name: "MatchedShare",
1789
1837
  declaration: "export type MatchedShare<E extends SlotEntryDef, M> = E['kind'] extends 'chain' ? {\n matched: M;\n} : object;"
@@ -2151,37 +2199,6 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2151
2199
  //#region lib/types/client/slot-catalog.js
2152
2200
  /** Every slot the shipped web bundle declares, sorted by key. */
2153
2201
  const CLIENT_SLOT_API = [
2154
- {
2155
- key: "conversation",
2156
- kind: "single",
2157
- scope: "session-maybe",
2158
- summary: "The whole center column, across both the no-session hero and a live conversation.",
2159
- 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.",
2160
- registerOptions: [],
2161
- ownerProps: ["/** Conversation owner share: business state and actions belong to the registrant. */\nexport interface ConvOwnerProps {}"],
2162
- ownerPropsReferences: [],
2163
- standardProps: [
2164
- "useResource: UseResource",
2165
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2166
- "useSessions: UseSessions",
2167
- "useSessionPendingInteraction: UseSessionPendingInteraction",
2168
- "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2169
- "useConversation: MaybeSnapshotSelectorHook<ConversationSnapshot>",
2170
- "useInput: MaybeSnapshotSelectorHook<InputState>",
2171
- "inputActions: InputActions | undefined",
2172
- "useSession: MaybeSnapshotSelectorHook<SessionSnapshot>",
2173
- "sessionId: SessionId | undefined",
2174
- "useProjection: UseProjection"
2175
- ],
2176
- keyDomain: "",
2177
- hookContext: "",
2178
- slotInject: "",
2179
- declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
2180
- occupants: ["client-ui-conversation ConversationRoot"],
2181
- replaceRisk: "shadows-shipped-ui",
2182
- 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}",
2183
- source: "packages/client/ui-layout/src/client/index.ts:65"
2184
- },
2185
2202
  {
2186
2203
  key: "conversation.approval.detail",
2187
2204
  kind: "single",
@@ -2194,6 +2211,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2194
2211
  standardProps: [
2195
2212
  "useResource: UseResource",
2196
2213
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2214
+ "usePanelInfo: UsePanelInfo",
2197
2215
  "useSessions: UseSessions",
2198
2216
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2199
2217
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2246,6 +2264,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2246
2264
  standardProps: [
2247
2265
  "useResource: UseResource",
2248
2266
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2267
+ "usePanelInfo: UsePanelInfo",
2249
2268
  "useSessions: UseSessions",
2250
2269
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2251
2270
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2265,7 +2284,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2265
2284
  occupants: ["client-ui-message-feedback MessageFeedbackActions id 'feedback'"],
2266
2285
  replaceRisk: "none",
2267
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}",
2268
- source: "packages/client/ui-chat/src/client/contract/slots.ts:212"
2287
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:213"
2269
2288
  },
2270
2289
  {
2271
2290
  key: "conversation.chat.commandview",
@@ -2288,6 +2307,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2288
2307
  standardProps: [
2289
2308
  "useResource: UseResource",
2290
2309
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2310
+ "usePanelInfo: UsePanelInfo",
2291
2311
  "useSessions: UseSessions",
2292
2312
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2293
2313
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2307,7 +2327,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2307
2327
  occupants: [],
2308
2328
  replaceRisk: "none",
2309
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}",
2310
- source: "packages/client/ui-chat/src/client/contract/slots.ts:200"
2330
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:201"
2311
2331
  },
2312
2332
  {
2313
2333
  key: "conversation.chat.node",
@@ -2333,6 +2353,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2333
2353
  standardProps: [
2334
2354
  "useResource: UseResource",
2335
2355
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2356
+ "usePanelInfo: UsePanelInfo",
2336
2357
  "useSessions: UseSessions",
2337
2358
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2338
2359
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2370,7 +2391,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2370
2391
  ],
2371
2392
  replaceRisk: "shadows-shipped-ui",
2372
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}",
2373
- source: "packages/client/ui-chat/src/client/contract/slots.ts:181"
2394
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:182"
2374
2395
  },
2375
2396
  {
2376
2397
  key: "conversation.chat.turnTail",
@@ -2389,6 +2410,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2389
2410
  standardProps: [
2390
2411
  "useResource: UseResource",
2391
2412
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2413
+ "usePanelInfo: UsePanelInfo",
2392
2414
  "useSessions: UseSessions",
2393
2415
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2394
2416
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2405,10 +2427,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2405
2427
  hookContext: "",
2406
2428
  slotInject: "",
2407
2429
  declaredBy: "an entry in 'conversation.chat.node' (client-ui-chat), so it exists while that entry is mounted",
2408
- occupants: ["client-ui-deliverables ProducedFiles"],
2430
+ occupants: ["client-ui-deliverables Deliverables"],
2409
2431
  replaceRisk: "none",
2410
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}",
2411
- source: "packages/client/ui-chat/src/client/contract/slots.ts:206"
2433
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:207"
2412
2434
  },
2413
2435
  {
2414
2436
  key: "conversation.composer",
@@ -2431,6 +2453,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2431
2453
  standardProps: [
2432
2454
  "useResource: UseResource",
2433
2455
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2456
+ "usePanelInfo: UsePanelInfo",
2434
2457
  "useSessions: UseSessions",
2435
2458
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2436
2459
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2446,7 +2469,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2446
2469
  keyDomain: "",
2447
2470
  hookContext: "",
2448
2471
  slotInject: "",
2449
- 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",
2450
2473
  occupants: [
2451
2474
  "client-ui-approval ApprovalPanel",
2452
2475
  "client-ui-subagent SubagentReadOnlyComposer",
@@ -2454,7 +2477,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2454
2477
  ],
2455
2478
  replaceRisk: "none",
2456
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}",
2457
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:157"
2480
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:158"
2458
2481
  },
2459
2482
  {
2460
2483
  key: "conversation.composer.bar",
@@ -2468,6 +2491,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2468
2491
  standardProps: [
2469
2492
  "useResource: UseResource",
2470
2493
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2494
+ "usePanelInfo: UsePanelInfo",
2471
2495
  "useSessions: UseSessions",
2472
2496
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2473
2497
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2481,11 +2505,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2481
2505
  keyDomain: "",
2482
2506
  hookContext: "",
2483
2507
  slotInject: "",
2484
- 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",
2485
2509
  occupants: ["client-ui-conversation InputBar"],
2486
2510
  replaceRisk: "shadows-shipped-ui",
2487
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}",
2488
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:175"
2512
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:176"
2489
2513
  },
2490
2514
  {
2491
2515
  key: "conversation.composer.dock",
@@ -2518,6 +2542,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2518
2542
  standardProps: [
2519
2543
  "useResource: UseResource",
2520
2544
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2545
+ "usePanelInfo: UsePanelInfo",
2521
2546
  "useSessions: UseSessions",
2522
2547
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2523
2548
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2537,7 +2562,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2537
2562
  occupants: ["client-ui-chat StatsPills id 'stats'"],
2538
2563
  replaceRisk: "none",
2539
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}",
2540
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:169"
2565
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:170"
2541
2566
  },
2542
2567
  {
2543
2568
  key: "conversation.hero.agentPreset",
@@ -2551,6 +2576,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2551
2576
  standardProps: [
2552
2577
  "useResource: UseResource",
2553
2578
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2579
+ "usePanelInfo: UsePanelInfo",
2554
2580
  "useSessions: UseSessions",
2555
2581
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2556
2582
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -2558,11 +2584,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2558
2584
  keyDomain: "",
2559
2585
  hookContext: "",
2560
2586
  slotInject: "",
2561
- 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",
2562
2588
  occupants: ["client-ui-agent-preset AgentPresetSeat"],
2563
2589
  replaceRisk: "shadows-shipped-ui",
2564
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}",
2565
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:163"
2591
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:164"
2566
2592
  },
2567
2593
  {
2568
2594
  key: "conversation.hero.brand.mark",
@@ -2576,6 +2602,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2576
2602
  standardProps: [
2577
2603
  "useResource: UseResource",
2578
2604
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2605
+ "usePanelInfo: UsePanelInfo",
2579
2606
  "useSessions: UseSessions",
2580
2607
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2581
2608
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -2583,11 +2610,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2583
2610
  keyDomain: "",
2584
2611
  hookContext: "",
2585
2612
  slotInject: "",
2586
- 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",
2587
2614
  occupants: [],
2588
2615
  replaceRisk: "none",
2589
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}",
2590
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:161"
2617
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:162"
2591
2618
  },
2592
2619
  {
2593
2620
  key: "conversation.hero.workspace",
@@ -2601,6 +2628,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2601
2628
  standardProps: [
2602
2629
  "useResource: UseResource",
2603
2630
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2631
+ "usePanelInfo: UsePanelInfo",
2604
2632
  "useSessions: UseSessions",
2605
2633
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2606
2634
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -2608,11 +2636,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2608
2636
  keyDomain: "",
2609
2637
  hookContext: "",
2610
2638
  slotInject: "",
2611
- 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",
2612
2640
  occupants: ["client-ui-workspace WorkspacePicker"],
2613
2641
  replaceRisk: "shadows-shipped-ui",
2614
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}",
2615
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:159"
2643
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:160"
2616
2644
  },
2617
2645
  {
2618
2646
  key: "conversation.hero.workspace.directoryFlow",
@@ -2626,6 +2654,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2626
2654
  standardProps: [
2627
2655
  "useResource: UseResource",
2628
2656
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2657
+ "usePanelInfo: UsePanelInfo",
2629
2658
  "useSessions: UseSessions",
2630
2659
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2631
2660
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -2655,6 +2684,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2655
2684
  standardProps: [
2656
2685
  "useResource: UseResource",
2657
2686
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2687
+ "usePanelInfo: UsePanelInfo",
2658
2688
  "useSessions: UseSessions",
2659
2689
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2660
2690
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2672,7 +2702,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2672
2702
  occupants: ["client-ui-attachment ComposerAttachments"],
2673
2703
  replaceRisk: "shadows-shipped-ui",
2674
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}",
2675
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:177"
2705
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:178"
2676
2706
  },
2677
2707
  {
2678
2708
  key: "conversation.input.dock",
@@ -2705,6 +2735,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2705
2735
  standardProps: [
2706
2736
  "useResource: UseResource",
2707
2737
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2738
+ "usePanelInfo: UsePanelInfo",
2708
2739
  "useSessions: UseSessions",
2709
2740
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2710
2741
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2720,7 +2751,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2720
2751
  keyDomain: "",
2721
2752
  hookContext: "",
2722
2753
  slotInject: "",
2723
- 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",
2724
2755
  occupants: [
2725
2756
  "client-ui-conversation QueueDock id 'queue'",
2726
2757
  "client-ui-conversation TodoDock id 'todo'",
@@ -2728,7 +2759,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2728
2759
  ],
2729
2760
  replaceRisk: "none",
2730
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}",
2731
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:165"
2762
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:166"
2732
2763
  },
2733
2764
  {
2734
2765
  key: "conversation.input.left",
@@ -2761,6 +2792,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2761
2792
  standardProps: [
2762
2793
  "useResource: UseResource",
2763
2794
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2795
+ "usePanelInfo: UsePanelInfo",
2764
2796
  "useSessions: UseSessions",
2765
2797
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2766
2798
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2780,7 +2812,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2780
2812
  occupants: [],
2781
2813
  replaceRisk: "none",
2782
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}",
2783
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:171"
2815
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:172"
2784
2816
  },
2785
2817
  {
2786
2818
  key: "conversation.input.model",
@@ -2794,6 +2826,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2794
2826
  standardProps: [
2795
2827
  "useResource: UseResource",
2796
2828
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2829
+ "usePanelInfo: UsePanelInfo",
2797
2830
  "useSessions: UseSessions",
2798
2831
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2799
2832
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2813,7 +2846,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2813
2846
  occupants: ["client-ui-model-selection ModelSelect"],
2814
2847
  replaceRisk: "shadows-shipped-ui",
2815
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}",
2816
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:185"
2849
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:186"
2817
2850
  },
2818
2851
  {
2819
2852
  key: "conversation.input.overlay",
@@ -2846,6 +2879,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2846
2879
  standardProps: [
2847
2880
  "useResource: UseResource",
2848
2881
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2882
+ "usePanelInfo: UsePanelInfo",
2849
2883
  "useSessions: UseSessions",
2850
2884
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2851
2885
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2862,10 +2896,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2862
2896
  hookContext: "",
2863
2897
  slotInject: "",
2864
2898
  declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
2865
- 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
+ ],
2866
2904
  replaceRisk: "none",
2867
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}",
2868
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:167"
2906
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:168"
2869
2907
  },
2870
2908
  {
2871
2909
  key: "conversation.input.plan",
@@ -2879,6 +2917,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2879
2917
  standardProps: [
2880
2918
  "useResource: UseResource",
2881
2919
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2920
+ "usePanelInfo: UsePanelInfo",
2882
2921
  "useSessions: UseSessions",
2883
2922
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2884
2923
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2898,7 +2937,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2898
2937
  occupants: ["client-ui-plan PlanChip"],
2899
2938
  replaceRisk: "shadows-shipped-ui",
2900
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}",
2901
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:183"
2940
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:184"
2902
2941
  },
2903
2942
  {
2904
2943
  key: "conversation.input.right",
@@ -2931,6 +2970,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2931
2970
  standardProps: [
2932
2971
  "useResource: UseResource",
2933
2972
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2973
+ "usePanelInfo: UsePanelInfo",
2934
2974
  "useSessions: UseSessions",
2935
2975
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2936
2976
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2950,7 +2990,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2950
2990
  occupants: [],
2951
2991
  replaceRisk: "none",
2952
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}",
2953
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:173"
2993
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:174"
2954
2994
  },
2955
2995
  {
2956
2996
  key: "conversation.message.images",
@@ -2968,6 +3008,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2968
3008
  standardProps: [
2969
3009
  "useResource: UseResource",
2970
3010
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3011
+ "usePanelInfo: UsePanelInfo",
2971
3012
  "useSessions: UseSessions",
2972
3013
  "useSessionPendingInteraction: UseSessionPendingInteraction",
2973
3014
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2987,7 +3028,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2987
3028
  occupants: ["client-ui-attachment MessageImages"],
2988
3029
  replaceRisk: "shadows-shipped-ui",
2989
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}",
2990
- source: "packages/client/ui-chat/src/client/contract/slots.ts:194"
3031
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:195"
2991
3032
  },
2992
3033
  {
2993
3034
  key: "conversation.session",
@@ -3001,6 +3042,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3001
3042
  standardProps: [
3002
3043
  "useResource: UseResource",
3003
3044
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3045
+ "usePanelInfo: UsePanelInfo",
3004
3046
  "useSessions: UseSessions",
3005
3047
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3006
3048
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3016,11 +3058,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3016
3058
  keyDomain: "",
3017
3059
  hookContext: "",
3018
3060
  slotInject: "",
3019
- 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",
3020
3062
  occupants: ["client-ui-conversation ConversationSession"],
3021
3063
  replaceRisk: "shadows-shipped-ui",
3022
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}",
3023
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:121"
3065
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:123"
3024
3066
  },
3025
3067
  {
3026
3068
  key: "conversation.session.header",
@@ -3034,6 +3076,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3034
3076
  standardProps: [
3035
3077
  "useResource: UseResource",
3036
3078
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3079
+ "usePanelInfo: UsePanelInfo",
3037
3080
  "useSessions: UseSessions",
3038
3081
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3039
3082
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3049,11 +3092,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3049
3092
  keyDomain: "",
3050
3093
  hookContext: "",
3051
3094
  slotInject: "",
3052
- 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",
3053
3096
  occupants: ["client-ui-conversation ConversationSessionHeader"],
3054
3097
  replaceRisk: "shadows-shipped-ui",
3055
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}",
3056
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:123"
3099
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:125"
3057
3100
  },
3058
3101
  {
3059
3102
  key: "conversation.session.header.actions",
@@ -3086,6 +3129,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3086
3129
  standardProps: [
3087
3130
  "useResource: UseResource",
3088
3131
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3132
+ "usePanelInfo: UsePanelInfo",
3089
3133
  "useSessions: UseSessions",
3090
3134
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3091
3135
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3110,20 +3154,21 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3110
3154
  ],
3111
3155
  replaceRisk: "none",
3112
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}",
3113
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:131"
3157
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:133"
3114
3158
  },
3115
3159
  {
3116
3160
  key: "conversation.session.header.corner",
3117
3161
  kind: "single",
3118
3162
  scope: "session",
3119
- summary: "The header's far-right corner, past the utilities' edge and into the header's own padding, for one control that must keep its place whether or not it currently shows anything.",
3120
- doc: "The header's far-right corner, past the utilities' edge and into the\nheader's own padding, for one control that must keep its place whether or\nnot it currently shows anything. The corner reserves its width while an\noccupant is registered, so the utilities beside it never move; an\noccupant with nothing to show renders a same-size placeholder.",
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.",
3121
3165
  registerOptions: [],
3122
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}"],
3123
3167
  ownerPropsReferences: [],
3124
3168
  standardProps: [
3125
3169
  "useResource: UseResource",
3126
3170
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3171
+ "usePanelInfo: UsePanelInfo",
3127
3172
  "useSessions: UseSessions",
3128
3173
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3129
3174
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3143,7 +3188,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3143
3188
  occupants: ["client-ui-sidebar-right ExpandButton"],
3144
3189
  replaceRisk: "shadows-shipped-ui",
3145
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}",
3146
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:149"
3191
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:150"
3147
3192
  },
3148
3193
  {
3149
3194
  key: "conversation.session.header.lineage",
@@ -3157,6 +3202,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3157
3202
  standardProps: [
3158
3203
  "useResource: UseResource",
3159
3204
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3205
+ "usePanelInfo: UsePanelInfo",
3160
3206
  "useSessions: UseSessions",
3161
3207
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3162
3208
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3176,7 +3222,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3176
3222
  occupants: ["client-ui-subagent SubagentHeaderLineage"],
3177
3223
  replaceRisk: "shadows-shipped-ui",
3178
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}",
3179
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:125"
3225
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:127"
3180
3226
  },
3181
3227
  {
3182
3228
  key: "conversation.session.header.utilities",
@@ -3209,6 +3255,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3209
3255
  standardProps: [
3210
3256
  "useResource: UseResource",
3211
3257
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3258
+ "usePanelInfo: UsePanelInfo",
3212
3259
  "useSessions: UseSessions",
3213
3260
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3214
3261
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3228,7 +3275,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3228
3275
  occupants: ["client-ui-open-in-app OpenInAppAction id 'open-in-app'", "session-log-export SessionLogDownloadHeaderAction id 'session-log-download'"],
3229
3276
  replaceRisk: "none",
3230
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}",
3231
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:137"
3278
+ source: "packages/client/ui-conversation/src/client/contract/slots.ts:139"
3232
3279
  },
3233
3280
  {
3234
3281
  key: "conversation.trajectory.images",
@@ -3246,6 +3293,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3246
3293
  standardProps: [
3247
3294
  "useResource: UseResource",
3248
3295
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3296
+ "usePanelInfo: UsePanelInfo",
3249
3297
  "useSessions: UseSessions",
3250
3298
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3251
3299
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3298,6 +3346,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3298
3346
  standardProps: [
3299
3347
  "useResource: UseResource",
3300
3348
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3349
+ "usePanelInfo: UsePanelInfo",
3301
3350
  "useSessions: UseSessions",
3302
3351
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3303
3352
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3317,20 +3366,110 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3317
3366
  occupants: ["client-ui-chat ChatView id 'chat'", "client-ui-trajectory TrajectoryView id 'trajectory'"],
3318
3367
  replaceRisk: "none",
3319
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}",
3320
- source: "packages/client/ui-conversation/src/client/contract/slots.ts:155"
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"
3321
3433
  },
3322
3434
  {
3323
3435
  key: "rightbar",
3324
3436
  kind: "single",
3325
- scope: "session",
3437
+ scope: "root",
3326
3438
  summary: "The right column: a track the centre makes room for, or nothing.",
3327
- 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. With no\ncurrent session nothing is mounted here.",
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",
3462
+ kind: "single",
3463
+ scope: "session",
3464
+ summary: "Session content selected by the root-scoped right Sidebar controller.",
3465
+ doc: "Session content selected by the root-scoped right Sidebar controller.",
3328
3466
  registerOptions: [],
3329
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}"],
3330
3468
  ownerPropsReferences: [],
3331
3469
  standardProps: [
3332
3470
  "useResource: UseResource",
3333
3471
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3472
+ "usePanelInfo: UsePanelInfo",
3334
3473
  "useSessions: UseSessions",
3335
3474
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3336
3475
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3346,11 +3485,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3346
3485
  keyDomain: "",
3347
3486
  hookContext: "",
3348
3487
  slotInject: "",
3349
- declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
3488
+ declaredBy: "an entry in 'rightbar' (client-ui-sidebar-right), so it exists while that entry is mounted",
3350
3489
  occupants: ["client-ui-sidebar-right RightbarSeat"],
3351
3490
  replaceRisk: "shadows-shipped-ui",
3352
- 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}",
3353
- source: "packages/client/ui-layout/src/client/index.ts:79"
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"
3354
3493
  },
3355
3494
  {
3356
3495
  key: "root",
@@ -3364,6 +3503,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3364
3503
  standardProps: [
3365
3504
  "useResource: UseResource",
3366
3505
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3506
+ "usePanelInfo: UsePanelInfo",
3367
3507
  "useSessions: UseSessions",
3368
3508
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3369
3509
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3408,6 +3548,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3408
3548
  standardProps: [
3409
3549
  "useResource: UseResource",
3410
3550
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3551
+ "usePanelInfo: UsePanelInfo",
3411
3552
  "useSessions: UseSessions",
3412
3553
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3413
3554
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3433,6 +3574,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3433
3574
  standardProps: [
3434
3575
  "useResource: UseResource",
3435
3576
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3577
+ "usePanelInfo: UsePanelInfo",
3436
3578
  "useSessions: UseSessions",
3437
3579
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3438
3580
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3477,6 +3619,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3477
3619
  standardProps: [
3478
3620
  "useResource: UseResource",
3479
3621
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3622
+ "usePanelInfo: UsePanelInfo",
3480
3623
  "useSessions: UseSessions",
3481
3624
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3482
3625
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3509,6 +3652,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3509
3652
  standardProps: [
3510
3653
  "useResource: UseResource",
3511
3654
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3655
+ "usePanelInfo: UsePanelInfo",
3512
3656
  "useSessions: UseSessions",
3513
3657
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3514
3658
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3553,6 +3697,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3553
3697
  standardProps: [
3554
3698
  "useResource: UseResource",
3555
3699
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3700
+ "usePanelInfo: UsePanelInfo",
3556
3701
  "useSessions: UseSessions",
3557
3702
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3558
3703
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3583,6 +3728,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3583
3728
  standardProps: [
3584
3729
  "useResource: UseResource",
3585
3730
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3731
+ "usePanelInfo: UsePanelInfo",
3586
3732
  "useSessions: UseSessions",
3587
3733
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3588
3734
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3627,6 +3773,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3627
3773
  standardProps: [
3628
3774
  "useResource: UseResource",
3629
3775
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3776
+ "usePanelInfo: UsePanelInfo",
3630
3777
  "useSessions: UseSessions",
3631
3778
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3632
3779
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3657,6 +3804,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3657
3804
  standardProps: [
3658
3805
  "useResource: UseResource",
3659
3806
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3807
+ "usePanelInfo: UsePanelInfo",
3660
3808
  "useSessions: UseSessions",
3661
3809
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3662
3810
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3706,6 +3854,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3706
3854
  standardProps: [
3707
3855
  "useResource: UseResource",
3708
3856
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3857
+ "usePanelInfo: UsePanelInfo",
3709
3858
  "useSessions: UseSessions",
3710
3859
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3711
3860
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3750,6 +3899,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3750
3899
  standardProps: [
3751
3900
  "useResource: UseResource",
3752
3901
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3902
+ "usePanelInfo: UsePanelInfo",
3753
3903
  "useSessions: UseSessions",
3754
3904
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3755
3905
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3780,6 +3930,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3780
3930
  standardProps: [
3781
3931
  "useResource: UseResource",
3782
3932
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3933
+ "usePanelInfo: UsePanelInfo",
3783
3934
  "useSessions: UseSessions",
3784
3935
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3785
3936
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3824,6 +3975,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3824
3975
  standardProps: [
3825
3976
  "useResource: UseResource",
3826
3977
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3978
+ "usePanelInfo: UsePanelInfo",
3827
3979
  "useSessions: UseSessions",
3828
3980
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3829
3981
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3835,7 +3987,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3835
3987
  occupants: [],
3836
3988
  replaceRisk: "none",
3837
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}",
3838
- source: "packages/client/ui-layout/src/client/index.ts:90"
3990
+ source: "packages/client/ui-layout/src/client/index.ts:91"
3839
3991
  },
3840
3992
  {
3841
3993
  key: "sidebar",
@@ -3849,6 +4001,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3849
4001
  standardProps: [
3850
4002
  "useResource: UseResource",
3851
4003
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4004
+ "usePanelInfo: UsePanelInfo",
3852
4005
  "useSessions: UseSessions",
3853
4006
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3854
4007
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3860,7 +4013,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3860
4013
  occupants: ["client-ui-sidebar SidebarRoot"],
3861
4014
  replaceRisk: "shadows-shipped-ui",
3862
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}",
3863
- source: "packages/client/ui-layout/src/client/index.ts:52"
4016
+ source: "packages/client/ui-layout/src/client/index.ts:61"
3864
4017
  },
3865
4018
  {
3866
4019
  key: "sidebar.brand.mark",
@@ -3874,6 +4027,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3874
4027
  standardProps: [
3875
4028
  "useResource: UseResource",
3876
4029
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4030
+ "usePanelInfo: UsePanelInfo",
3877
4031
  "useSessions: UseSessions",
3878
4032
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3879
4033
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3885,7 +4039,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3885
4039
  occupants: ["client-ui-brand-official OfficialBrandMark"],
3886
4040
  replaceRisk: "shadows-shipped-ui",
3887
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}",
3888
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:23"
4042
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:22"
3889
4043
  },
3890
4044
  {
3891
4045
  key: "sidebar.brand.name",
@@ -3899,6 +4053,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3899
4053
  standardProps: [
3900
4054
  "useResource: UseResource",
3901
4055
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4056
+ "usePanelInfo: UsePanelInfo",
3902
4057
  "useSessions: UseSessions",
3903
4058
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3904
4059
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3910,7 +4065,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3910
4065
  occupants: ["client-ui-brand-official OfficialBrandName"],
3911
4066
  replaceRisk: "shadows-shipped-ui",
3912
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}",
3913
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:28"
4068
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:27"
3914
4069
  },
3915
4070
  {
3916
4071
  key: "sidebar.footer.action",
@@ -3943,6 +4098,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3943
4098
  standardProps: [
3944
4099
  "useResource: UseResource",
3945
4100
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4101
+ "usePanelInfo: UsePanelInfo",
3946
4102
  "useSessions: UseSessions",
3947
4103
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3948
4104
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -3954,7 +4110,52 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3954
4110
  occupants: ["client-ui-cordis CordisPanel id 'cordis-panel'"],
3955
4111
  replaceRisk: "none",
3956
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}",
3957
- 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"
3958
4159
  },
3959
4160
  {
3960
4161
  key: "sidebar.right.pane.tab",
@@ -3973,6 +4174,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3973
4174
  standardProps: [
3974
4175
  "useResource: UseResource",
3975
4176
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4177
+ "usePanelInfo: UsePanelInfo",
3976
4178
  "useSessions: UseSessions",
3977
4179
  "useSessionPendingInteraction: UseSessionPendingInteraction",
3978
4180
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -3988,15 +4190,15 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3988
4190
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
3989
4191
  hookContext: "TabHookContext",
3990
4192
  slotInject: "SidebarRightTabInjected",
3991
- declaredBy: "an entry in 'rightbar' (client-ui-sidebar-right), so it exists while that entry is mounted",
4193
+ declaredBy: "an entry in 'rightbar.session' (client-ui-sidebar-right), so it exists while that entry is mounted",
3992
4194
  occupants: [
4195
+ "client-ui-sidebar-documentpreview TextPreview",
3993
4196
  "client-ui-sidebar-files FilesBody",
3994
- "client-ui-sidebar-right GuideBody",
3995
- "client-ui-sidebar-textpreview TextPreview"
4197
+ "client-ui-sidebar-right GuideBody"
3996
4198
  ],
3997
4199
  replaceRisk: "none",
3998
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}",
3999
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:47"
4201
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:50"
4000
4202
  },
4001
4203
  {
4002
4204
  key: "sidebar.right.pane.tab.title",
@@ -4015,6 +4217,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4015
4217
  standardProps: [
4016
4218
  "useResource: UseResource",
4017
4219
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4220
+ "usePanelInfo: UsePanelInfo",
4018
4221
  "useSessions: UseSessions",
4019
4222
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4020
4223
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -4030,11 +4233,61 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4030
4233
  keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
4031
4234
  hookContext: "TabHookContext",
4032
4235
  slotInject: "SidebarRightTabInjected",
4033
- declaredBy: "an entry in 'rightbar' (client-ui-sidebar-right), so it exists while that entry is mounted",
4034
- occupants: [],
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
+ ],
4035
4242
  replaceRisk: "none",
4036
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}",
4037
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:61"
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"
4038
4291
  },
4039
4292
  {
4040
4293
  key: "sidebar.right.tab.guide",
@@ -4053,6 +4306,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4053
4306
  standardProps: [
4054
4307
  "useResource: UseResource",
4055
4308
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4309
+ "usePanelInfo: UsePanelInfo",
4056
4310
  "useSessions: UseSessions",
4057
4311
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4058
4312
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -4072,7 +4326,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4072
4326
  occupants: [],
4073
4327
  replaceRisk: "none",
4074
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}",
4075
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:72"
4329
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:75"
4076
4330
  },
4077
4331
  {
4078
4332
  key: "sidebar.right.tab.menu.item",
@@ -4105,6 +4359,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4105
4359
  standardProps: [
4106
4360
  "useResource: UseResource",
4107
4361
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4362
+ "usePanelInfo: UsePanelInfo",
4108
4363
  "useSessions: UseSessions",
4109
4364
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4110
4365
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -4120,11 +4375,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4120
4375
  keyDomain: "",
4121
4376
  hookContext: "",
4122
4377
  slotInject: "",
4123
- declaredBy: "an entry in 'rightbar' (client-ui-sidebar-right), so it exists while that entry is mounted",
4378
+ declaredBy: "an entry in 'rightbar.session' (client-ui-sidebar-right), so it exists while that entry is mounted",
4124
4379
  occupants: [],
4125
4380
  replaceRisk: "none",
4126
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}",
4127
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:83"
4382
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:86"
4128
4383
  },
4129
4384
  {
4130
4385
  key: "sidebar.settings",
@@ -4138,6 +4393,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4138
4393
  standardProps: [
4139
4394
  "useResource: UseResource",
4140
4395
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4396
+ "usePanelInfo: UsePanelInfo",
4141
4397
  "useSessions: UseSessions",
4142
4398
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4143
4399
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -4149,7 +4405,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4149
4405
  occupants: ["client-ui-settings-general SettingsRoot"],
4150
4406
  replaceRisk: "shadows-shipped-ui",
4151
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}",
4152
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:41"
4408
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:45"
4153
4409
  },
4154
4410
  {
4155
4411
  key: "sidebar.workspaces",
@@ -4163,6 +4419,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4163
4419
  standardProps: [
4164
4420
  "useResource: UseResource",
4165
4421
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4422
+ "usePanelInfo: UsePanelInfo",
4166
4423
  "useSessions: UseSessions",
4167
4424
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4168
4425
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -4174,7 +4431,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4174
4431
  occupants: ["client-ui-workspace WorkspaceBrowser"],
4175
4432
  replaceRisk: "shadows-shipped-ui",
4176
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}",
4177
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:35"
4434
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:39"
4178
4435
  },
4179
4436
  {
4180
4437
  key: "sidebar.workspaces.directoryFlow",
@@ -4188,6 +4445,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4188
4445
  standardProps: [
4189
4446
  "useResource: UseResource",
4190
4447
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4448
+ "usePanelInfo: UsePanelInfo",
4191
4449
  "useSessions: UseSessions",
4192
4450
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4193
4451
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
@@ -4213,6 +4471,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4213
4471
  standardProps: [
4214
4472
  "useResource: UseResource",
4215
4473
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4474
+ "usePanelInfo: UsePanelInfo",
4216
4475
  "useSessions: UseSessions",
4217
4476
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4218
4477
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -4255,6 +4514,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4255
4514
  standardProps: [
4256
4515
  "useResource: UseResource",
4257
4516
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4517
+ "usePanelInfo: UsePanelInfo",
4258
4518
  "useSessions: UseSessions",
4259
4519
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4260
4520
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -4267,11 +4527,12 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4267
4527
  "useProjection: UseProjection",
4268
4528
  "useTrajectory: UseTrajectory"
4269
4529
  ],
4270
- 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",
4271
4531
  hookContext: "",
4272
4532
  slotInject: "",
4273
4533
  declaredBy: "an entry in 'conversation.chat.node' (client-ui-tool), so it exists while that entry is mounted",
4274
4534
  occupants: [
4535
+ "client-ui-deliverables PresentRow key 'present'",
4275
4536
  "client-ui-skill SkillRow key 'skill'",
4276
4537
  "client-ui-tool AskQuestionRow key 'ask_user_question'",
4277
4538
  "client-ui-tool BashRow key 'bash'",
@@ -4314,6 +4575,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4314
4575
  standardProps: [
4315
4576
  "useResource: UseResource",
4316
4577
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4578
+ "usePanelInfo: UsePanelInfo",
4317
4579
  "useSessions: UseSessions",
4318
4580
  "useSessionPendingInteraction: UseSessionPendingInteraction",
4319
4581
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-cordis-client-runner",
3
3
  "description": "Browser half of dynamic dual-half plugin packages: event subscription, closure evaluation, guard facade, and loader entries",
4
- "version": "0.1.5-alpha.1",
4
+ "version": "0.1.5-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -44,12 +44,12 @@
44
44
  "@types/react": "~18.3.1",
45
45
  "react": "^18.2.0",
46
46
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
47
- "@deepseek-ai/dsh-api-remotes": "^0.1.5-alpha.1",
48
- "@deepseek-ai/dsh-client-modules": "^0.1.5-alpha.1",
49
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-alpha.1",
50
- "@deepseek-ai/dsh-client-ui-theme": "^0.1.5-alpha.1",
47
+ "@deepseek-ai/dsh-api-remotes": "^0.1.5-alpha.2",
48
+ "@deepseek-ai/dsh-client-modules": "^0.1.5-alpha.2",
49
+ "@deepseek-ai/dsh-client-ui-theme": "^0.1.5-alpha.2",
51
50
  "@deepseek-ai/cordis": "^4.0.2",
52
- "@deepseek-ai/dsh-util-values": "^0.1.5-alpha.1"
51
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-alpha.2",
52
+ "@deepseek-ai/dsh-util-values": "^0.1.5-alpha.2"
53
53
  },
54
54
  "files": [
55
55
  "lib/index.js",