@deepseek-ai/dsh-cordis-client-runner 0.1.7-alpha.2 → 0.1.7-rc.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.
package/README.i18n.yaml CHANGED
@@ -1,6 +1,79 @@
1
- # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
2
- # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
- # after editing either side, bring the other along and re-record with:
1
+ # Bilingual-pair consistency record for README.md (docs/i18n/README.md): per heading
2
+ # section, a hash of its English and Chinese blocks outside code blocks and generated regions.
3
+ # After editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/extensions/cordis-client-runner/README.md
5
- README.md: aa87e2919be899539bea8aff00d072553f339c38
6
- README.zh.md: f4925e4bd52098884c6a25f2d9504ce9a9d667f0
5
+ /:
6
+ en: 0d1382466301a0cb
7
+ zh: 64ee27ce126adad2
8
+ /deepseek-ai-dsh-cordis-client-runner:
9
+ en: ea84dfc91fbdbf90
10
+ zh: 3c70bc4bb1b1a7ab
11
+ /deepseek-ai-dsh-cordis-client-runner/summary:
12
+ en: 639cd79ac2d186c1
13
+ zh: 07d7bf8655111e55
14
+ /deepseek-ai-dsh-cordis-client-runner/table-of-contents:
15
+ en: d152484eb41ac6b4
16
+ zh: 09388d293f9be9cb
17
+ /deepseek-ai-dsh-cordis-client-runner/use-this-package:
18
+ en: 731e4c9c364beeb5
19
+ zh: 6aa113070967571f
20
+ /deepseek-ai-dsh-cordis-client-runner/use-this-package/what-the-page-does:
21
+ en: b303762b91f6d830
22
+ zh: c6e60cf498da3c4e
23
+ /deepseek-ai-dsh-cordis-client-runner/use-this-package/what-the-run-surface-offers:
24
+ en: 155c8371306a5cda
25
+ zh: 8b4cd48a0fc3f545
26
+ /deepseek-ai-dsh-cordis-client-runner/use-this-package/lifecycle-boundaries:
27
+ en: 8444eaa96ee05a5e
28
+ zh: 621bb78731bd0138
29
+ /deepseek-ai-dsh-cordis-client-runner/understand-the-implementation:
30
+ en: 64f24636f966aa86
31
+ zh: a4d3bb2e541b222a
32
+ /deepseek-ai-dsh-cordis-client-runner/understand-the-implementation/design-philosophy:
33
+ en: df635b29eaef982c
34
+ zh: ddaa4bd98359bd30
35
+ /deepseek-ai-dsh-cordis-client-runner/understand-the-implementation/source-map:
36
+ en: cbd46fb5821cfcc7
37
+ zh: 392e5cace2db6194
38
+ /deepseek-ai-dsh-cordis-client-runner/understand-the-implementation/inspecting-slot-inputs:
39
+ en: 33f14a7fff7835e6
40
+ zh: 53838ac8d4a79600
41
+ /deepseek-ai-dsh-cordis-client-runner/understand-the-implementation/how-a-run-is-carried-out:
42
+ en: e64ffad27ecf4bbd
43
+ zh: 7949755b8a782b08
44
+ /deepseek-ai-dsh-cordis-client-runner/further-exploration:
45
+ en: dcfcc126e7345db1
46
+ zh: 47b564ef00a83297
47
+ /deepseek-ai-dsh-cordis-client-runner/model-experience:
48
+ en: 215e7ba838619b7b
49
+ zh: a311da3843709f90
50
+ /deepseek-ai-dsh-cordis-client-runner/model-experience/run-resolution-relayed-by-the-host:
51
+ en: 4573c6b269e4fecb
52
+ zh: 7f76baf2f74bf9cc
53
+ /deepseek-ai-dsh-cordis-client-runner/model-experience/run-resolution-relayed-by-the-host/what-the-model-sees:
54
+ en: 0f941f02680ba2ed
55
+ zh: d62dd787dea11f5f
56
+ /deepseek-ai-dsh-cordis-client-runner/model-experience/run-resolution-relayed-by-the-host/token-effect:
57
+ en: 37462821d8e35933
58
+ zh: bb94b21eff2911e8
59
+ /deepseek-ai-dsh-cordis-client-runner/model-experience/run-resolution-relayed-by-the-host/kv-cache-effect:
60
+ en: da210ff9eb982144
61
+ zh: 633a73ac9bc9e5e6
62
+ /deepseek-ai-dsh-cordis-client-runner/model-experience/render-failure-after-the-run-settled:
63
+ en: 524d638584142d72
64
+ zh: 3ffc463419fba2e1
65
+ /deepseek-ai-dsh-cordis-client-runner/model-experience/render-failure-after-the-run-settled/what-the-model-sees:
66
+ en: f347bd0b5f9e297e
67
+ zh: 0b7bc88659e38306
68
+ /deepseek-ai-dsh-cordis-client-runner/model-experience/render-failure-after-the-run-settled/token-effect:
69
+ en: c8c1657fa4e37ca4
70
+ zh: d03af1593a9b4d3a
71
+ /deepseek-ai-dsh-cordis-client-runner/model-experience/render-failure-after-the-run-settled/kv-cache-effect:
72
+ en: d2d35b83beb936b2
73
+ zh: 604aa6929c7a9c76
74
+ /deepseek-ai-dsh-cordis-client-runner/known-limitations-and-deferred-work:
75
+ en: a728aeb4aa18db7d
76
+ zh: b596309cd6707da7
77
+ /deepseek-ai-dsh-cordis-client-runner/known-limitations-and-deferred-work/dev-note:
78
+ en: c4cff307d238c93a
79
+ zh: d1a9ff4164056741
package/README.md CHANGED
@@ -66,6 +66,10 @@ The browser half is built on one principle: a dynamic package must ride the same
66
66
  | [`src/client/providers.ts`](src/client/providers.ts) | First-party client Inspect Providers (slots, theme, events) |
67
67
  | [`src/client/timer.ts`](src/client/timer.ts) | The client timer service dynamic packages inject |
68
68
 
69
+ ### Inspecting slot inputs
70
+
71
+ The Slots provider's exact `listSubTree` lookup includes documented owner fields and top-level alias, intersection, and union declarations. Nested field-value types remain named references, so inspecting a Tool view exposes its shared callbacks and stage union without expanding the full Session graph.
72
+
69
73
  ### How a run is carried out
70
74
 
71
75
  A `cordis/request-run` event asks this page whether to run a definition. Whoever answers — the page after an approval, or the user pressing run — drives the orchestration: the host half first (so a host-half failure short-circuits before the browser has moved), then the source fetch, then the browser half, then one resolution carrying what happened. The browser half's source is evaluated as an async function body with the symbol surface as parameters, the returned plugin is guard-wrapped and mounted through the loader, and the resolution reports the loaded revision or the failing stage with the closure's, guard's, or fiber's message. `host.call` routes through the Remote namespace; an omitted argument travels as `null`, and a payload the generated codec refuses becomes a teaching error naming the call and the contract.
package/README.zh.md CHANGED
@@ -66,6 +66,10 @@ kind: "package-reference"
66
66
  | [`src/client/providers.ts`](src/client/providers.ts) | 第一方 client Inspect Provider(slots、theme、events) |
67
67
  | [`src/client/timer.ts`](src/client/timer.ts) | 动态包注入的 client 定时器服务 |
68
68
 
69
+ ### 查询槽位输入
70
+
71
+ Slots provider 的精确 `listSubTree` 查询包含带说明的 owner 字段及顶层别名、交叉类型和联合类型声明。嵌套字段的值类型只列出引用名称,因此查询 Tool 视图可以获得共享回调和阶段联合,而不会展开完整 Session 类型图。
72
+
69
73
  ### 一次 run 如何执行
70
74
 
71
75
  一条 `cordis/request-run` 事件问这一页要不要运行某个定义。作答的一方——审批后的页面,或按下运行的用户——驱动编排:先 host 半(host 半失败会在浏览器动作之前短路),再取源码,再浏览器半,最后一次结算带上发生的一切。浏览器半源码作为 async 函数体求值,符号面就是参数;返回的插件经 guard 包装后通过 loader 挂载;结算报告已装载的 revision,或失败阶段加闭包、guard 或 fiber 的消息。`host.call` 经 Remote namespace 路由;省略的入参以 `null` 过线,而生成 codec 拒收的载荷会变成一条点名「哪次调用 + 约定是什么」的教学错误。
package/lib/client.js CHANGED
@@ -1503,7 +1503,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1503
1503
  description: "target Workspace."
1504
1504
  }, {
1505
1505
  name: "beforeOpen",
1506
- description: "optional synchronous preparation for the selected Session, skipped after supersession."
1506
+ description: "optional synchronous preparation for the selected Session, skipped after supersession; a throw aborts the open and releases the retained reference."
1507
1507
  }],
1508
1508
  returns: "completion; a superseded request may create a Session but does not open it.",
1509
1509
  throws: ["on failure; a refused creation is also shown through the Workspace notice unless a later navigation or disposal superseded the request."]
@@ -2445,7 +2445,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2445
2445
  occupants: ["client-ui-message-feedback MessageFeedbackActions id 'feedback'"],
2446
2446
  replaceRisk: "none",
2447
2447
  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}",
2448
- source: "packages/client/ui-chat/src/client/contract/slots.ts:271"
2448
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:321"
2449
2449
  },
2450
2450
  {
2451
2451
  key: "conversation.chat.commandview",
@@ -2489,7 +2489,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2489
2489
  occupants: [],
2490
2490
  replaceRisk: "none",
2491
2491
  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}",
2492
- source: "packages/client/ui-chat/src/client/contract/slots.ts:259"
2492
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:309"
2493
2493
  },
2494
2494
  {
2495
2495
  key: "conversation.chat.node",
@@ -2555,7 +2555,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2555
2555
  ],
2556
2556
  replaceRisk: "shadows-shipped-ui",
2557
2557
  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}",
2558
- source: "packages/client/ui-chat/src/client/contract/slots.ts:240"
2558
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:290"
2559
2559
  },
2560
2560
  {
2561
2561
  key: "conversation.chat.turnTail",
@@ -2606,10 +2606,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2606
2606
  hookContext: "",
2607
2607
  slotInject: "",
2608
2608
  declaredBy: "an entry in 'conversation.chat.node' (client-ui-chat), so it exists while that entry is mounted",
2609
- occupants: ["client-ui-deliverables DeliverablesTail id '@deepseek-ai/dsh-client-ui-deliverables'", "client-ui-plan PlanCards"],
2609
+ occupants: [
2610
+ "client-ui-deliverables DeliverablesTail id '@deepseek-ai/dsh-client-ui-deliverables'",
2611
+ "client-ui-plan PlanCards",
2612
+ "client-ui-schedule ScheduleTurnCard id 'schedule-created'"
2613
+ ],
2610
2614
  replaceRisk: "none",
2611
2615
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.turnTail', () => ctx.slots.register(\n { name: 'conversation.chat.turnTail', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2612
- source: "packages/client/ui-chat/src/client/contract/slots.ts:265"
2616
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:315"
2613
2617
  },
2614
2618
  {
2615
2619
  key: "conversation.composer",
@@ -2918,7 +2922,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2918
2922
  occupants: ["client-ui-directory-picker-browse BrowseDirectoryFlow", "client-ui-directory-picker-native NativeDirectoryFlow"],
2919
2923
  replaceRisk: "shadows-shipped-ui",
2920
2924
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.hero.workspace.directoryFlow', () => ctx.slots.register(\n { name: 'conversation.hero.workspace.directoryFlow' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2921
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:99"
2925
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:117"
2922
2926
  },
2923
2927
  {
2924
2928
  key: "conversation.input.activity",
@@ -3358,7 +3362,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3358
3362
  occupants: ["client-ui-attachment MessageImages"],
3359
3363
  replaceRisk: "shadows-shipped-ui",
3360
3364
  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}",
3361
- source: "packages/client/ui-chat/src/client/contract/slots.ts:253"
3365
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:303"
3362
3366
  },
3363
3367
  {
3364
3368
  key: "conversation.plan-review.actions",
@@ -3536,7 +3540,6 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3536
3540
  occupants: [
3537
3541
  "client-ui-agent-preset AgentPresetLabel id 'agent-preset'",
3538
3542
  "client-ui-jobs JobListAction id 'job-list'",
3539
- "client-ui-schedule ScheduleCatalogAction id 'schedule-catalog'",
3540
3543
  "client-ui-subagent SubagentCatalogAction id 'subagent-catalog'",
3541
3544
  "experimental-client-ui-agent-team TeamAction id 'agent-team'"
3542
3545
  ],
@@ -3663,7 +3666,11 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3663
3666
  hookContext: "",
3664
3667
  slotInject: "",
3665
3668
  declaredBy: "an entry in 'conversation.session.header' (client-ui-conversation), so it exists while that entry is mounted",
3666
- occupants: ["client-ui-open-in-app OpenInAppAction id 'open-in-app'", "session-log-export SessionLogDownloadHeaderAction id 'session-log-download'"],
3669
+ occupants: [
3670
+ "client-ui-open-in-app OpenInAppAction id 'open-in-app'",
3671
+ "client-ui-schedule ScheduleCatalogAction id 'schedule-catalog'",
3672
+ "session-log-export SessionLogDownloadHeaderAction id 'session-log-download'"
3673
+ ],
3667
3674
  replaceRisk: "none",
3668
3675
  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}",
3669
3676
  source: "packages/client/ui-conversation/src/client/contract/slots.ts:162"
@@ -3896,10 +3903,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3896
3903
  hookContext: "",
3897
3904
  slotInject: "",
3898
3905
  declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
3899
- occupants: ["client-ui-conversation ConversationPanel key 'conversation'", "client-ui-plugin-manager PluginManagerPage"],
3906
+ occupants: [
3907
+ "client-ui-conversation ConversationPanel key 'conversation'",
3908
+ "client-ui-plugin-manager PluginManagerPage",
3909
+ "client-ui-schedule TaskManagerPage"
3910
+ ],
3900
3911
  replaceRisk: "shadows-shipped-ui",
3901
3912
  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}",
3902
- source: "packages/client/ui-layout/src/client/index.ts:66"
3913
+ source: "packages/client/ui-layout/src/client/index.ts:73"
3903
3914
  },
3904
3915
  {
3905
3916
  key: "main.conversation",
@@ -4244,7 +4255,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4244
4255
  occupants: ["client-ui-sidebar-right RightbarRoot"],
4245
4256
  replaceRisk: "shadows-shipped-ui",
4246
4257
  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}",
4247
- source: "packages/client/ui-layout/src/client/index.ts:80"
4258
+ source: "packages/client/ui-layout/src/client/index.ts:87"
4248
4259
  },
4249
4260
  {
4250
4261
  key: "rightbar.session",
@@ -4279,7 +4290,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4279
4290
  occupants: ["client-ui-sidebar-right RightbarSeat"],
4280
4291
  replaceRisk: "shadows-shipped-ui",
4281
4292
  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}",
4282
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:42"
4293
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:43"
4283
4294
  },
4284
4295
  {
4285
4296
  key: "root",
@@ -4431,6 +4442,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4431
4442
  "client-ui-permission-presets PermissionRow id 'permission'",
4432
4443
  "client-ui-settings-general DeveloperToolsRow id 'developer-tools'",
4433
4444
  "client-ui-settings-general CurrentVersionRow id 'current-version'",
4445
+ "client-ui-shortcuts ShortcutsRow id 'shortcuts'",
4434
4446
  "client-ui-theme AppearanceRow id 'appearance'",
4435
4447
  "client-ui-theme FontSizeRow id 'font-size'"
4436
4448
  ],
@@ -4472,7 +4484,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4472
4484
  summary: "Optional sidebar account launcher; opens the shell-owned settings panel.",
4473
4485
  doc: "Optional sidebar account launcher; opens the shell-owned settings panel.",
4474
4486
  registerOptions: [],
4475
- ownerProps: ["/** Sidebar launcher geometry and settings navigation. */\nexport interface SettingsLauncherOwnerProps {\n /** Whether the sidebar shows labels. */\n wide: boolean\n /** Open the settings panel. */\n openSettings: () => void\n /** @param id - registered onboarding editor to open explicitly. */\n openOnboarding: (id: string) => void\n}"],
4487
+ ownerProps: ["/** Sidebar launcher geometry and settings navigation. */\nexport interface SettingsLauncherOwnerProps {\n /** Whether the sidebar shows labels. */\n wide: boolean\n /** Whether the settings dialog covers the sidebar; a launcher may treat a false-to-true edge as one Settings entry. */\n settingsOpen: boolean\n /** Effective Settings key labels and accessible combination; omitted when unbound. */\n settingsShortcut?: { readonly keys: readonly string[]; readonly aria?: string | undefined }\n /** Open the settings panel. */\n openSettings: () => void\n /** @param id - registered onboarding editor to open explicitly. */\n openOnboarding: (id: string) => void\n}"],
4476
4488
  ownerPropsReferences: [],
4477
4489
  standardProps: [
4478
4490
  "useResource: UseResource",
@@ -4793,7 +4805,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4793
4805
  occupants: ["client-ui-sidebar HeaderLeadingControls"],
4794
4806
  replaceRisk: "shadows-shipped-ui",
4795
4807
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('shell.leading', () => ctx.slots.register(\n { name: 'shell.leading' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4796
- source: "packages/client/ui-layout/src/client/index.ts:105"
4808
+ source: "packages/client/ui-layout/src/client/index.ts:112"
4797
4809
  },
4798
4810
  {
4799
4811
  key: "shell.overlay",
@@ -4837,13 +4849,50 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4837
4849
  slotInject: "",
4838
4850
  declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
4839
4851
  occupants: [
4852
+ "client-ui-chat QuotaNoticeHost id 'chat.quota-notice'",
4853
+ "client-ui-schedule ScheduleDeleteToast id 'schedule.delete-toast'",
4854
+ "client-ui-settings-account DesktopOnboardingEntry id 'desktop-onboarding'",
4855
+ "client-ui-settings-account AccountPlatformHost id 'account.platform-page'",
4856
+ "client-ui-shortcuts ShortcutReference id 'shortcuts'",
4840
4857
  "client-ui-workspace SessionRenameDialog id 'workspace.session-rename'",
4841
4858
  "client-ui-workspace SessionArchiveConfirmDialog id 'workspace.session-archive'",
4842
4859
  "client-ui-workspace RowActionToast id 'workspace.row-toast'"
4843
4860
  ],
4844
4861
  replaceRisk: "none",
4845
4862
  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}",
4846
- source: "packages/client/ui-layout/src/client/index.ts:91"
4863
+ source: "packages/client/ui-layout/src/client/index.ts:98"
4864
+ },
4865
+ {
4866
+ key: "shell.quota-notice",
4867
+ kind: "chain",
4868
+ scope: "root",
4869
+ summary: "Frame-wide quota notice chain.",
4870
+ doc: "Frame-wide quota notice chain. The Chat-owned host in `shell.overlay`\noffers the one live notice; the first entry whose selector claims its\ncode takes over the surface, and the all-decline case renders the host's\ngeneric warning Toast. The host lives outside the Chat panel, so a notice\nsurvives switching or closing the panel that reported it.",
4871
+ registerOptions: [{
4872
+ name: "select",
4873
+ requirement: "required",
4874
+ type: "(owner) => unknown | null",
4875
+ 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."
4876
+ }],
4877
+ ownerProps: ["/** Owner currency of one quota notice offered to the frame-wide chain. */\nexport interface QuotaNoticeOwnerProps {\n /** Stable failure code retained in the Session log. */\n code: QuotaNoticeCode\n /** Provider-neutral notice copy in the active locale. */\n message: string\n /** Take the notice down. */\n dismiss: () => void\n /**\n * Prevent later quota failures from replacing this notice. Dismissal clears\n * all holds; releasing the last hold resumes future notices without replay.\n * Callers must release on unmount.\n * @returns idempotent release that cannot clear another hold.\n */\n keepOpen: () => () => void\n}"],
4878
+ ownerPropsReferences: ["QuotaNoticeCode"],
4879
+ standardProps: [
4880
+ "useResource: UseResource",
4881
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4882
+ "usePanelInfo: UsePanelInfo",
4883
+ "useSessions: UseSessions",
4884
+ "useSessionStatus: UseSessionStatus",
4885
+ "useSessionRetainInfo: UseSessionRetainInfo",
4886
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4887
+ ],
4888
+ keyDomain: "",
4889
+ hookContext: "",
4890
+ slotInject: "",
4891
+ declaredBy: "an entry in 'shell.overlay' (client-ui-chat), so it exists while that entry is mounted",
4892
+ occupants: ["client-ui-settings-account AccountQuotaNotice"],
4893
+ replaceRisk: "none",
4894
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('shell.quota-notice', () => ctx.slots.register(\n { name: 'shell.quota-notice', select: owner => null },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4895
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:329"
4847
4896
  },
4848
4897
  {
4849
4898
  key: "sidebar",
@@ -4870,7 +4919,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4870
4919
  occupants: ["client-ui-sidebar SidebarRoot"],
4871
4920
  replaceRisk: "shadows-shipped-ui",
4872
4921
  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}",
4873
- source: "packages/client/ui-layout/src/client/index.ts:61"
4922
+ source: "packages/client/ui-layout/src/client/index.ts:68"
4874
4923
  },
4875
4924
  {
4876
4925
  key: "sidebar.brand.mark",
@@ -4897,7 +4946,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4897
4946
  occupants: ["client-ui-brand-official OfficialBrandMark"],
4898
4947
  replaceRisk: "shadows-shipped-ui",
4899
4948
  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}",
4900
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:24"
4949
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:25"
4901
4950
  },
4902
4951
  {
4903
4952
  key: "sidebar.brand.name",
@@ -4924,7 +4973,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4924
4973
  occupants: ["client-ui-brand-official OfficialBrandName"],
4925
4974
  replaceRisk: "shadows-shipped-ui",
4926
4975
  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}",
4927
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:29"
4976
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:30"
4928
4977
  },
4929
4978
  {
4930
4979
  key: "sidebar.chat.conversation",
@@ -5005,7 +5054,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5005
5054
  occupants: ["client-ui-cordis CordisPanel id 'cordis-panel'"],
5006
5055
  replaceRisk: "none",
5007
5056
  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}",
5008
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:52"
5057
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:53"
5009
5058
  },
5010
5059
  {
5011
5060
  key: "sidebar.panellist",
@@ -5048,10 +5097,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5048
5097
  hookContext: "",
5049
5098
  slotInject: "",
5050
5099
  declaredBy: "an entry in 'sidebar' (client-ui-sidebar), so it exists while that entry is mounted",
5051
- occupants: ["client-ui-plugin-manager PluginsPanelIcon"],
5100
+ occupants: ["client-ui-plugin-manager PluginsPanelIcon", "client-ui-schedule TaskManagerIcon"],
5052
5101
  replaceRisk: "none",
5053
5102
  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}",
5054
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:34"
5103
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:35"
5055
5104
  },
5056
5105
  {
5057
5106
  key: "sidebar.right.pane.tab",
@@ -5091,6 +5140,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5091
5140
  occupants: [
5092
5141
  "client-ui-deliverables ReviewTab",
5093
5142
  "client-ui-plan PlanPreview",
5143
+ "client-ui-schedule ScheduleTaskTab",
5094
5144
  "client-ui-sidebar-browser BrowserBody",
5095
5145
  "client-ui-sidebar-documentpreview TextPreview",
5096
5146
  "client-ui-sidebar-files FilesBody",
@@ -5100,7 +5150,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5100
5150
  ],
5101
5151
  replaceRisk: "none",
5102
5152
  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}",
5103
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:58"
5153
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:59"
5104
5154
  },
5105
5155
  {
5106
5156
  key: "sidebar.right.pane.tab.title",
@@ -5139,6 +5189,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5139
5189
  declaredBy: "an entry in 'rightbar.session' (client-ui-sidebar-right), so it exists while that entry is mounted",
5140
5190
  occupants: [
5141
5191
  "client-ui-plan PlanTitle",
5192
+ "client-ui-schedule ScheduleTaskTabTitle",
5142
5193
  "client-ui-sidebar-browser BrowserTitle",
5143
5194
  "client-ui-sidebar-documentpreview TextTitle",
5144
5195
  "client-ui-sidebar-files FilesTitle",
@@ -5147,7 +5198,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5147
5198
  ],
5148
5199
  replaceRisk: "none",
5149
5200
  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}",
5150
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:72"
5201
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:73"
5151
5202
  },
5152
5203
  {
5153
5204
  key: "sidebar.right.tab.document",
@@ -5424,7 +5475,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5424
5475
  occupants: [],
5425
5476
  replaceRisk: "none",
5426
5477
  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}",
5427
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:83"
5478
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:84"
5428
5479
  },
5429
5480
  {
5430
5481
  key: "sidebar.right.tab.guide.entry",
@@ -5464,7 +5515,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5464
5515
  occupants: ["client-ui-sidebar-terminal TerminalGuide"],
5465
5516
  replaceRisk: "none",
5466
5517
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.tab.guide.entry', () => ctx.slots.register(\n { name: 'sidebar.right.tab.guide.entry', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5467
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:90"
5518
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:91"
5468
5519
  },
5469
5520
  {
5470
5521
  key: "sidebar.right.tab.menu.item",
@@ -5518,7 +5569,99 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5518
5569
  occupants: [],
5519
5570
  replaceRisk: "none",
5520
5571
  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}",
5521
- source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:102"
5572
+ source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:103"
5573
+ },
5574
+ {
5575
+ key: "sidebar.session.row.hover",
5576
+ kind: "list",
5577
+ scope: "root",
5578
+ summary: "Section of the Session row's hover card between its relative time and its trailing status line.",
5579
+ doc: "Section of the Session row's hover card between its relative time and\nits trailing status line. Mounted only while that card is open.",
5580
+ registerOptions: [
5581
+ {
5582
+ name: "id",
5583
+ requirement: "required",
5584
+ type: "string",
5585
+ 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."
5586
+ },
5587
+ {
5588
+ name: "order",
5589
+ requirement: "optional",
5590
+ type: "number",
5591
+ doc: "Position among the entries, ascending (default 0)."
5592
+ },
5593
+ {
5594
+ name: "label",
5595
+ requirement: "optional",
5596
+ type: "string | (() => string)",
5597
+ 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."
5598
+ }
5599
+ ],
5600
+ ownerProps: ["/**\n * Owner share of the two Session-row schedule seats. Both receive only the\n * row's Session identity: the occupant reads that Session's own scheduled\n * tasks, and reading them activates nothing.\n */\nexport interface SessionRowScheduleOwnerProps {\n /** Session this row shows; the occupant addresses its own data by this id. */\n readonly sessionId: SessionId\n}"],
5601
+ ownerPropsReferences: ["SessionId"],
5602
+ standardProps: [
5603
+ "useResource: UseResource",
5604
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5605
+ "usePanelInfo: UsePanelInfo",
5606
+ "useSessions: UseSessions",
5607
+ "useSessionStatus: UseSessionStatus",
5608
+ "useSessionRetainInfo: UseSessionRetainInfo",
5609
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5610
+ ],
5611
+ keyDomain: "",
5612
+ hookContext: "",
5613
+ slotInject: "",
5614
+ declaredBy: "an entry in 'sidebar.workspaces' (client-ui-workspace), so it exists while that entry is mounted",
5615
+ occupants: ["client-ui-schedule SessionScheduleHover id 'schedule-tasks'"],
5616
+ replaceRisk: "none",
5617
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.session.row.hover', () => ctx.slots.register(\n { name: 'sidebar.session.row.hover', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5618
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:134"
5619
+ },
5620
+ {
5621
+ key: "sidebar.session.row.leading",
5622
+ kind: "list",
5623
+ scope: "root",
5624
+ summary: "Leading decoration of one Session row, in the 16px cell before the title that the row's own state dot otherwise occupies.",
5625
+ doc: "Leading decoration of one Session row, in the 16px cell before the title\nthat the row's own state dot otherwise occupies. A higher-priority state\n(a pending interaction, a new message, live activity) replaces the seat\nwith that dot for the same row, so an occupant here never renders beside\na status dot and is mounted only by a row whose primary state is idle.\nAn archived row keeps that cell blank — neither its status dot nor this\nseat renders there, and its live status appears on the hover card only.",
5626
+ registerOptions: [
5627
+ {
5628
+ name: "id",
5629
+ requirement: "required",
5630
+ type: "string",
5631
+ 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."
5632
+ },
5633
+ {
5634
+ name: "order",
5635
+ requirement: "optional",
5636
+ type: "number",
5637
+ doc: "Position among the entries, ascending (default 0)."
5638
+ },
5639
+ {
5640
+ name: "label",
5641
+ requirement: "optional",
5642
+ type: "string | (() => string)",
5643
+ 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."
5644
+ }
5645
+ ],
5646
+ ownerProps: ["/**\n * Owner share of the two Session-row schedule seats. Both receive only the\n * row's Session identity: the occupant reads that Session's own scheduled\n * tasks, and reading them activates nothing.\n */\nexport interface SessionRowScheduleOwnerProps {\n /** Session this row shows; the occupant addresses its own data by this id. */\n readonly sessionId: SessionId\n}"],
5647
+ ownerPropsReferences: ["SessionId"],
5648
+ standardProps: [
5649
+ "useResource: UseResource",
5650
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5651
+ "usePanelInfo: UsePanelInfo",
5652
+ "useSessions: UseSessions",
5653
+ "useSessionStatus: UseSessionStatus",
5654
+ "useSessionRetainInfo: UseSessionRetainInfo",
5655
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
5656
+ ],
5657
+ keyDomain: "",
5658
+ hookContext: "",
5659
+ slotInject: "",
5660
+ declaredBy: "an entry in 'sidebar.workspaces' (client-ui-workspace), so it exists while that entry is mounted",
5661
+ occupants: ["client-ui-schedule SessionScheduleMark id 'schedule-mark'"],
5662
+ replaceRisk: "none",
5663
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.session.row.leading', () => ctx.slots.register(\n { name: 'sidebar.session.row.leading', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5664
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:129"
5522
5665
  },
5523
5666
  {
5524
5667
  key: "sidebar.settings",
@@ -5545,7 +5688,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5545
5688
  occupants: ["client-ui-settings-general SettingsRoot"],
5546
5689
  replaceRisk: "shadows-shipped-ui",
5547
5690
  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}",
5548
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:47"
5691
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:48"
5549
5692
  },
5550
5693
  {
5551
5694
  key: "sidebar.toggle.badge",
@@ -5572,7 +5715,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5572
5715
  occupants: ["client-ui-settings-general DesktopUpdateBadge"],
5573
5716
  replaceRisk: "shadows-shipped-ui",
5574
5717
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.toggle.badge', () => ctx.slots.register(\n { name: 'sidebar.toggle.badge' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5575
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:18"
5718
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:19"
5576
5719
  },
5577
5720
  {
5578
5721
  key: "sidebar.workspaces",
@@ -5599,7 +5742,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5599
5742
  occupants: ["client-ui-workspace WorkspaceBrowser"],
5600
5743
  replaceRisk: "shadows-shipped-ui",
5601
5744
  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}",
5602
- source: "packages/client/ui-sidebar/src/client/contract/slots.ts:41"
5745
+ source: "packages/client/ui-sidebar/src/client/contract/slots.ts:42"
5603
5746
  },
5604
5747
  {
5605
5748
  key: "sidebar.workspaces.directoryFlow",
@@ -5626,7 +5769,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5626
5769
  occupants: ["client-ui-directory-picker-browse BrowseDirectoryFlow", "client-ui-directory-picker-native NativeDirectoryFlow"],
5627
5770
  replaceRisk: "shadows-shipped-ui",
5628
5771
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.workspaces.directoryFlow', () => ctx.slots.register(\n { name: 'sidebar.workspaces.directoryFlow' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5629
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:101"
5772
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:119"
5630
5773
  },
5631
5774
  {
5632
5775
  key: "sidebar.workspaces.session.menu.item",
@@ -5667,7 +5810,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5667
5810
  ],
5668
5811
  keyDomain: "",
5669
5812
  hookContext: "MenuOpenState",
5670
- slotInject: "{ hooks: { menuOpenState: SlotHookFactory<'sidebar.workspaces.session.menu.item', UseMenuOpenState> } }",
5813
+ slotInject: "{ hooks: { menuOpenState: SlotHookFactory<'sidebar.workspaces.session.menu.item', UseMenuOpenState> shortcuts: HostObservable<readonly ShortcutCatalogEntry[]> } }",
5671
5814
  declaredBy: "an entry in 'sidebar.workspaces' (client-ui-workspace), so it exists while that entry is mounted",
5672
5815
  occupants: [
5673
5816
  "client-ui-workspace PinSessionMenuItem id 'pin'",
@@ -5677,7 +5820,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5677
5820
  ],
5678
5821
  replaceRisk: "none",
5679
5822
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n const copyLabel = 'Copy Session ID' // Localize in the contributing package.\n ctx.slots.inject('sidebar.workspaces.session.menu.item', () => ctx.slots.register(\n { name: 'sidebar.workspaces.session.menu.item', id: 'copy-session-id', order: 500 },\n ({ sessionId, useMenuOpenState }) => {\n const [, setMenuOpen] = useMenuOpenState()\n return React.createElement(\n 'button',\n { type: 'button', role: 'menuitem', onClick: () => { setMenuOpen(false); void navigator.clipboard.writeText(sessionId) } },\n copyLabel,\n )\n },\n ))\n },\n}",
5680
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:133"
5823
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:166"
5681
5824
  },
5682
5825
  {
5683
5826
  key: "sidebar.workspaces.session.row.action",
@@ -5723,7 +5866,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5723
5866
  occupants: ["client-ui-workspace ArchiveSessionRowButton id 'archive'", "client-ui-workspace PinSessionRowButton id 'pin'"],
5724
5867
  replaceRisk: "none",
5725
5868
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.workspaces.session.row.action', () => ctx.slots.register(\n { name: 'sidebar.workspaces.session.row.action', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5726
- source: "packages/client/ui-workspace/src/client/contract/slots.ts:148"
5869
+ source: "packages/client/ui-workspace/src/client/contract/slots.ts:184"
5727
5870
  },
5728
5871
  {
5729
5872
  key: "tool.call.images",
@@ -5758,25 +5901,31 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5758
5901
  occupants: ["client-ui-attachment MessageImages"],
5759
5902
  replaceRisk: "shadows-shipped-ui",
5760
5903
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('tool.call.images', () => ctx.slots.register(\n { name: 'tool.call.images' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5761
- source: "packages/client/ui-tool/src/client/contract/slots.ts:35"
5904
+ source: "packages/client/ui-tool/src/client/contract/slots.ts:45"
5762
5905
  },
5763
5906
  {
5764
5907
  key: "tool.call.toolview",
5765
5908
  kind: "keyed",
5766
5909
  scope: "session",
5767
5910
  summary: "Keyed Tool call view dispatched by wire Tool name.",
5768
- doc: "Keyed Tool call view dispatched by wire Tool name. Any name is allowed,\nincluding tools registered by your package. Register with\n`key: '<tool name>'`; a typo never renders.\n\nRegistering an occupied key replaces its view; unclaimed keys use the\ngeneric row. The owner supplies the call identity and frozen running\nor settled node through ToolCallOwnerProps.",
5911
+ doc: "Keyed Tool call view dispatched by wire Tool name. Any name is allowed,\nincluding tools registered by your package. Register with\n`key: '<tool name>'`; a typo never renders.\n\nRegistering an occupied key replaces its view; unclaimed keys use the\ngeneric row. The owner supplies the call identity and frozen running\nor settled node through explicit phase props. Preparing blocks have no dispatched\narguments; useToolCallArgumentsPartial optionally subscribes to their raw prefix.",
5769
5912
  registerOptions: [{
5770
5913
  name: "key",
5771
5914
  requirement: "required",
5772
5915
  type: "string",
5773
5916
  doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
5774
5917
  }],
5775
- ownerProps: ["/** Standard owner currency supplied to every atomic Tool view. */\nexport interface ToolCallOwnerProps {\n /** Stable injected Hook; each invocation owns its open state and subscribes to enclosing-Turn resets. */\n useDisclosure: UseDisclosure\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 loadIm /* …truncated — full shape in source */"],
5918
+ ownerProps: [
5919
+ "/** Standard owner currency supplied to every atomic Tool view. */\nexport interface ToolCallCommonProps {\n /** Stable Hook; each invocation owns its open state and subscribes to enclosing-Turn resets. */\n useDisclosure: UseDisclosure\n /** Call identity, stable across all stages. */\n callId: string\n /** Wire Tool name and keyed dispatch value. */\n toolName: string\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 an argument path at its optional requested line. */\n openFile: (path: string, options?: OpenFileOptions) => void\n /** Chat-supplied, session-authorized loader for durable images; Tool views do not manage attachment URLs. */\n loadImage: MessageImageLoader\n /** Inspect this call in the trajectory view when available. */\n inspect?: (() => void) | undefined\n}",
5920
+ "/** Common owner callbacks and the data admitted at the current tool stage. */\nexport type ToolCallOwnerProps = ToolCallCommonProps & ToolCallPhaseProps",
5921
+ "/** Stage-specific tool data; only start/result expose the dispatched call material. */\nexport type ToolCallPhaseProps =\n | { readonly phase: 'preparing'; readonly block: PreparingToolCall }\n | { readonly phase: 'start'; readonly block: StartedToolCall }\n | { readonly phase: 'result'; readonly block: ToolResultNode }"
5922
+ ],
5776
5923
  ownerPropsReferences: [
5777
- "ChatNodeOwnerProps",
5778
5924
  "MessageImageLoader",
5779
5925
  "OpenFileOptions",
5926
+ "PreparingToolCall",
5927
+ "StartedToolCall",
5928
+ "ToolResultNode",
5780
5929
  "UseDisclosure"
5781
5930
  ],
5782
5931
  standardProps: [
@@ -5796,9 +5945,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5796
5945
  "useProjection: UseProjection",
5797
5946
  "useTrajectory: UseTrajectory"
5798
5947
  ],
5799
- keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: ask_user_question, bash, cordis_define, cordis_inspect_list, cordis_inspect_query, cordis_inspect_self, cordis_run, cordis_stop, cordis_undefine, create_goal, edit, get_goal, glob, grep, interrupt_agent, job_kill, job_list, job_output, list_agents, list_subagent_models, lsp, present, ralph, read, read_image, schedule_create, schedule_delete, schedule_list, send_message, session_event_read, session_event_search, session_event_trace, session_search, session_trace, skill, spawn_teammate, subagent, team_task_create, team_task_get, team_task_list, team_task_update, terminal_close, terminal_list, terminal_open, terminal_read, terminal_signal, todo_write, update_goal, wait_agent, web_fetch, web_search, workflow, write",
5800
- hookContext: "",
5801
- slotInject: "",
5948
+ keyDomain: "open: any string the owner dispatches (no compile-time key set), already taken: ask_user_question, bash, cordis_define, cordis_inspect_list, cordis_inspect_query, cordis_inspect_self, cordis_run, cordis_stop, cordis_undefine, create_goal, edit, get_goal, glob, grep, interrupt_agent, job_kill, job_list, job_output, list_agents, list_subagent_models, lsp, present, ralph, read, read_image, schedule_create, schedule_delete, schedule_list, schedule_update, send_message, session_event_read, session_event_search, session_event_trace, session_search, session_trace, skill, spawn_teammate, subagent, team_task_create, team_task_get, team_task_list, team_task_update, terminal_close, terminal_list, terminal_open, terminal_read, terminal_signal, todo_write, update_goal, wait_agent, web_fetch, web_search, workflow, write",
5949
+ hookContext: "ToolCallHookContext",
5950
+ slotInject: "ToolCallInjected",
5802
5951
  declaredBy: "an entry in 'conversation.chat.node' (client-ui-tool), so it exists while that entry is mounted",
5803
5952
  occupants: [
5804
5953
  "client-ui-deliverables PresentRow key 'present'",
@@ -5811,6 +5960,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5811
5960
  "client-ui-tool DetailsRow key 'schedule_create'",
5812
5961
  "client-ui-tool DetailsRow key 'schedule_list'",
5813
5962
  "client-ui-tool DetailsRow key 'schedule_delete'",
5963
+ "client-ui-tool DetailsRow key 'schedule_update'",
5814
5964
  "client-ui-tool DetailsRow key 'cordis_inspect_list'",
5815
5965
  "client-ui-tool DetailsRow key 'cordis_inspect_query'",
5816
5966
  "client-ui-tool DetailsRow key 'cordis_inspect_self'",
@@ -5857,7 +6007,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5857
6007
  ],
5858
6008
  replaceRisk: "shadows-shipped-ui",
5859
6009
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('tool.call.toolview', () => ctx.slots.register(\n { name: 'tool.call.toolview', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5860
- source: "packages/client/ui-tool/src/client/contract/slots.ts:21"
6010
+ source: "packages/client/ui-tool/src/client/contract/slots.ts:25"
5861
6011
  },
5862
6012
  {
5863
6013
  key: "tool.view.cordis",
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.7-alpha.2",
4
+ "version": "0.1.7-rc.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -43,13 +43,13 @@
43
43
  "devDependencies": {
44
44
  "@types/react": "~18.3.1",
45
45
  "react": "^18.2.0",
46
- "@deepseek-ai/dsh-api-remotes": "0.1.7-alpha.2",
47
- "@deepseek-ai/dsh-client-modules": "0.1.7-alpha.2",
48
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-alpha.2",
49
46
  "@deepseek-ai/cordis-plugin-loader": "~1.0.5",
47
+ "@deepseek-ai/dsh-client-modules": "0.1.7-rc.2",
48
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
49
+ "@deepseek-ai/dsh-client-ui-theme": "0.1.7-rc.2",
50
50
  "@deepseek-ai/cordis": "~4.0.4",
51
- "@deepseek-ai/dsh-util-values": "0.1.7-alpha.2",
52
- "@deepseek-ai/dsh-client-ui-theme": "0.1.7-alpha.2"
51
+ "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.2",
52
+ "@deepseek-ai/dsh-util-values": "0.1.7-rc.2"
53
53
  },
54
54
  "files": [
55
55
  "lib/index.js",