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

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
@@ -75,5 +75,5 @@
75
75
  en: a728aeb4aa18db7d
76
76
  zh: b596309cd6707da7
77
77
  /deepseek-ai-dsh-cordis-client-runner/known-limitations-and-deferred-work/dev-note:
78
- en: c4cff307d238c93a
79
- zh: d1a9ff4164056741
78
+ en: e67f633dc6fe7773
79
+ zh: 3bb0c20c93f16f98
package/README.md CHANGED
@@ -143,5 +143,3 @@ These limits define where the browser half needs special care. They are current
143
143
  None.
144
144
 
145
145
  </details>
146
-
147
- **Runtime invariant:** No companion is published. The owned relation (a live Plugin's loader entry exists exactly while one Plugin Run ID is live) is browser-only state reachable through the client half's service, which the node-plane companion cannot observe. The relation is asserted by the package's own load/teardown coverage instead.
package/README.zh.md CHANGED
@@ -143,5 +143,3 @@ React 可能在加载成功后失败。Client 报告其拥有的每个 entry 失
143
143
  无。
144
144
 
145
145
  </details>
146
-
147
- **运行时不变式:** 不发布伴生入口。所属关系(一个 live Plugin 的 loader entry 仅在一个 Plugin Run ID 存活期间存在)是只能通过 Client 半服务访问的浏览器侧状态,Node 平面的伴生入口无法观察。该关系改由本包自己的装载与拆除测试直接断言。
package/lib/client.js CHANGED
@@ -1530,11 +1530,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1530
1530
  returns: "a Session already addressable through the Session Controller."
1531
1531
  },
1532
1532
  {
1533
- signature: "startSession(workspaceId?: WorkspaceId): void",
1533
+ signature: "startSession(workspaceId?: WorkspaceId, options?: StartSessionOptions): void",
1534
1534
  description: "Start a New Session flow and navigate to its Session; a creation the Host refuses is shown through the Workspace notice and leaves the selection as it was.",
1535
1535
  parameters: [{
1536
1536
  name: "workspaceId",
1537
1537
  description: "explicit target; absent inherits the current or most recent Workspace."
1538
+ }, {
1539
+ name: "options",
1540
+ description: "initial content; existing text or attachments are preserved unless clearPreviousDraft is true."
1538
1541
  }]
1539
1542
  },
1540
1543
  {
@@ -1814,6 +1817,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1814
1817
  name: "ConnectionStateSource",
1815
1818
  declaration: "export interface ConnectionStateSource {\n getSnapshot(): ConnectionState | undefined;\n subscribe(listener: () => void): () => void;\n}"
1816
1819
  },
1820
+ {
1821
+ name: "DraftInitializationOptions",
1822
+ declaration: "export interface DraftInitializationOptions {\n readonly prompt?: string;\n readonly clearPreviousDraft?: boolean;\n}"
1823
+ },
1817
1824
  {
1818
1825
  name: "EntryKeyOf",
1819
1826
  declaration: "export type EntryKeyOf<K extends keyof SlotMap & string> = SlotMap[K] extends {\n kind: 'keyed';\n keyProps: infer P extends object;\n} ? keyof P & string : string;"
@@ -2202,6 +2209,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2202
2209
  name: "SnapshotSelectorHook",
2203
2210
  declaration: "export type SnapshotSelectorHook<T> = <S>(sel: (s: T) => S, eq?: (a: S, b: S) => boolean) => S;"
2204
2211
  },
2212
+ {
2213
+ name: "StartSessionOptions",
2214
+ declaration: "export type StartSessionOptions = DraftInitializationOptions;"
2215
+ },
2205
2216
  {
2206
2217
  name: "StoreDecl",
2207
2218
  declaration: "export type StoreDecl = StoreHandle<any, any> | StoreFactory;"
@@ -2532,7 +2543,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2532
2543
  "useProjection: UseProjection",
2533
2544
  "useTrajectory: UseTrajectory"
2534
2545
  ],
2535
- keyDomain: "fixed by the owner's key table { [Kind in ChatNodeKind]: { node: ChatNode<Kind> } }, already taken: assistant-step, command, command-input, compaction, context, manual-compaction, model-retry, steering, system-prompt, tool-call, turn-error, turn-max-tokens, turn-process, turn-tail, turn-trigger, unknown, user, workflow-run",
2546
+ keyDomain: "fixed by the owner's key table { [Kind in ChatNodeKind]: { node: ChatNode<Kind> } }, already taken: assistant-step, command, command-input, compaction, context, manual-compaction, model-retry, question-reply, steering, system-prompt, tool-call, turn-error, turn-max-tokens, turn-process, turn-tail, turn-trigger, unknown, user, workflow-run",
2536
2547
  hookContext: "ChatNodeHookContext",
2537
2548
  slotInject: "ChatNodeInjected",
2538
2549
  declaredBy: "an entry in 'conversation.view' (client-ui-chat), so it exists while that entry is mounted",
@@ -2554,6 +2565,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2554
2565
  "client-ui-chat UnknownNodeView key 'unknown'",
2555
2566
  "client-ui-goal GoalCommandInputView key 'command-input'",
2556
2567
  "client-ui-tool ToolCallTree key 'tool-call'",
2568
+ "client-ui-user-questions QuestionReplyView key 'question-reply'",
2557
2569
  "client-ui-workflow-run WorkflowRunPanel key 'workflow-run'"
2558
2570
  ],
2559
2571
  replaceRisk: "shadows-shipped-ui",
@@ -2748,7 +2760,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2748
2760
  hookContext: "",
2749
2761
  slotInject: "",
2750
2762
  declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
2751
- occupants: ["client-ui-chat StatsPills id 'stats'"],
2763
+ occupants: ["client-ui-chat ActivityPill id 'activity'", "client-ui-chat UsagePill id 'usage'"],
2752
2764
  replaceRisk: "none",
2753
2765
  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}",
2754
2766
  source: "packages/client/ui-conversation/src/client/contract/slots.ts:199"
@@ -3051,7 +3063,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3051
3063
  occupants: [
3052
3064
  "client-ui-conversation QueueDock id 'queue'",
3053
3065
  "client-ui-conversation TodoDock id 'todo'",
3054
- "client-ui-goal GoalDock id 'goal'"
3066
+ "client-ui-goal GoalDock id 'goal'",
3067
+ "experimental-client-ui-claude-code-mods Band id 'claude-code-mods'"
3055
3068
  ],
3056
3069
  replaceRisk: "none",
3057
3070
  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}",
@@ -3670,7 +3683,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3670
3683
  slotInject: "",
3671
3684
  declaredBy: "an entry in 'conversation.session.header' (client-ui-conversation), so it exists while that entry is mounted",
3672
3685
  occupants: [
3673
- "client-ui-open-in-app OpenInAppAction id 'open-in-app'",
3686
+ "client-ui-open-in-app SessionOpenInAppAction id 'open-in-app'",
3674
3687
  "client-ui-schedule ScheduleCatalogAction id 'schedule-catalog'",
3675
3688
  "session-log-export SessionLogDownloadHeaderAction id 'session-log-download'"
3676
3689
  ],
@@ -3948,6 +3961,52 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3948
3961
  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}",
3949
3962
  source: "packages/client/ui-conversation/src/client/contract/slots.ts:131"
3950
3963
  },
3964
+ {
3965
+ key: "plugins.add.actions",
3966
+ kind: "list",
3967
+ scope: "root",
3968
+ summary: "Additional MenuItemButton rows after installation: 72px high, with a title and a description capped at two lines.",
3969
+ doc: "Additional MenuItemButton rows after installation: 72px high, with a title and a description capped at two lines.",
3970
+ registerOptions: [
3971
+ {
3972
+ name: "id",
3973
+ requirement: "required",
3974
+ type: "string",
3975
+ 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."
3976
+ },
3977
+ {
3978
+ name: "order",
3979
+ requirement: "optional",
3980
+ type: "number",
3981
+ doc: "Position among the entries, ascending (default 0)."
3982
+ },
3983
+ {
3984
+ name: "label",
3985
+ requirement: "optional",
3986
+ type: "string | (() => string)",
3987
+ 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."
3988
+ }
3989
+ ],
3990
+ ownerProps: ["/** Add-plugin menu actions, independent of any selected bundle or Session. */\nexport interface PluginAddActionsProps {\n /** Close the add-plugin menu before starting the contributed action. */\n readonly onDismiss: () => void\n}"],
3991
+ ownerPropsReferences: [],
3992
+ standardProps: [
3993
+ "useResource: UseResource",
3994
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
3995
+ "usePanelInfo: UsePanelInfo",
3996
+ "useSessions: UseSessions",
3997
+ "useSessionStatus: UseSessionStatus",
3998
+ "useSessionRetainInfo: UseSessionRetainInfo",
3999
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4000
+ ],
4001
+ keyDomain: "",
4002
+ hookContext: "",
4003
+ slotInject: "",
4004
+ declaredBy: "an entry in 'main' (client-ui-plugin-manager), so it exists while that entry is mounted",
4005
+ occupants: ["client-ui-agent-preset CreatePluginMenuItem id 'create-plugin'"],
4006
+ replaceRisk: "none",
4007
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.add.actions', () => ctx.slots.register(\n { name: 'plugins.add.actions', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4008
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:84"
4009
+ },
3951
4010
  {
3952
4011
  key: "plugins.bundle.activation",
3953
4012
  kind: "keyed",
@@ -3978,7 +4037,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
3978
4037
  occupants: ["experimental-client-ui-voice-input VoiceSetupPrompt key '@deepseek-ai/dsh-experimental-voice-input-bundle'"],
3979
4038
  replaceRisk: "shadows-shipped-ui",
3980
4039
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.bundle.activation', () => ctx.slots.register(\n { name: 'plugins.bundle.activation', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
3981
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:78"
4040
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:86"
3982
4041
  },
3983
4042
  {
3984
4043
  key: "plugins.bundle.config",
@@ -4010,7 +4069,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4010
4069
  occupants: ["experimental-client-ui-voice-input VoicePreparation key '@deepseek-ai/dsh-experimental-voice-input-bundle'"],
4011
4070
  replaceRisk: "shadows-shipped-ui",
4012
4071
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.bundle.config', () => ctx.slots.register(\n { name: 'plugins.bundle.config', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4013
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:94"
4072
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:102"
4014
4073
  },
4015
4074
  {
4016
4075
  key: "plugins.detail.actions",
@@ -4056,7 +4115,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4056
4115
  occupants: [],
4057
4116
  replaceRisk: "none",
4058
4117
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.detail.actions', () => ctx.slots.register(\n { name: 'plugins.detail.actions', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4059
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:108"
4118
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:116"
4060
4119
  },
4061
4120
  {
4062
4121
  key: "plugins.detail.badge",
@@ -4102,7 +4161,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4102
4161
  occupants: [],
4103
4162
  replaceRisk: "none",
4104
4163
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.detail.badge', () => ctx.slots.register(\n { name: 'plugins.detail.badge', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4105
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:113"
4164
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:121"
4106
4165
  },
4107
4166
  {
4108
4167
  key: "plugins.detail.section",
@@ -4148,7 +4207,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4148
4207
  occupants: [],
4149
4208
  replaceRisk: "none",
4150
4209
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.detail.section', () => ctx.slots.register(\n { name: 'plugins.detail.section', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4151
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:120"
4210
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:128"
4152
4211
  },
4153
4212
  {
4154
4213
  key: "plugins.item",
@@ -4199,7 +4258,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4199
4258
  ],
4200
4259
  replaceRisk: "none",
4201
4260
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.item', () => ctx.slots.register(\n { name: 'plugins.item', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4202
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:88"
4261
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:96"
4203
4262
  },
4204
4263
  {
4205
4264
  key: "plugins.row.config",
@@ -4231,7 +4290,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4231
4290
  occupants: [],
4232
4291
  replaceRisk: "none",
4233
4292
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('plugins.row.config', () => ctx.slots.register(\n { name: 'plugins.row.config', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4234
- source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:102"
4293
+ source: "packages/client/ui-plugin-manager/src/client/slot-contract.ts:110"
4235
4294
  },
4236
4295
  {
4237
4296
  key: "rightbar",
@@ -4784,6 +4843,33 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4784
4843
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('settings.trigger', () => ctx.slots.register(\n { name: 'settings.trigger' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4785
4844
  source: "packages/client/ui-settings/src/client/contract/slots.ts:27"
4786
4845
  },
4846
+ {
4847
+ key: "shell.bottom",
4848
+ kind: "single",
4849
+ scope: "root",
4850
+ summary: "Full-width bottom content below all three columns.",
4851
+ doc: "Full-width bottom content below all three columns. Its rendered height\nreduces the columns' available height; empty content reserves no space.\nThe occupant owns its height, visibility, and controls. It receives no\nSession binding and remains mounted across main-panel navigation.",
4852
+ registerOptions: [],
4853
+ ownerProps: [],
4854
+ ownerPropsReferences: [],
4855
+ standardProps: [
4856
+ "useResource: UseResource",
4857
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
4858
+ "usePanelInfo: UsePanelInfo",
4859
+ "useSessions: UseSessions",
4860
+ "useSessionStatus: UseSessionStatus",
4861
+ "useSessionRetainInfo: UseSessionRetainInfo",
4862
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>"
4863
+ ],
4864
+ keyDomain: "",
4865
+ hookContext: "",
4866
+ slotInject: "",
4867
+ declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
4868
+ occupants: ["experimental-inspector InspectorPage"],
4869
+ replaceRisk: "shadows-shipped-ui",
4870
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('shell.bottom', () => ctx.slots.register(\n { name: 'shell.bottom' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
4871
+ source: "packages/client/ui-layout/src/client/index.ts:94"
4872
+ },
4787
4873
  {
4788
4874
  key: "shell.leading",
4789
4875
  kind: "single",
@@ -4809,7 +4895,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4809
4895
  occupants: ["client-ui-sidebar HeaderLeadingControls"],
4810
4896
  replaceRisk: "shadows-shipped-ui",
4811
4897
  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}",
4812
- source: "packages/client/ui-layout/src/client/index.ts:112"
4898
+ source: "packages/client/ui-layout/src/client/index.ts:119"
4813
4899
  },
4814
4900
  {
4815
4901
  key: "shell.overlay",
@@ -4866,7 +4952,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
4866
4952
  ],
4867
4953
  replaceRisk: "none",
4868
4954
  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}",
4869
- source: "packages/client/ui-layout/src/client/index.ts:98"
4955
+ source: "packages/client/ui-layout/src/client/index.ts:105"
4870
4956
  },
4871
4957
  {
4872
4958
  key: "shell.quota-notice",
@@ -5152,7 +5238,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5152
5238
  "client-ui-sidebar-files FilesBody",
5153
5239
  "client-ui-sidebar-right GuideBody",
5154
5240
  "client-ui-sidebar-terminal LazyTerminalBody",
5155
- "client-ui-subagent SidebarChatTab"
5241
+ "client-ui-subagent SidebarChatTab",
5242
+ "experimental-session-inspector SessionInspectorView"
5156
5243
  ],
5157
5244
  replaceRisk: "none",
5158
5245
  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}",
@@ -5443,6 +5530,60 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5443
5530
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.tab.document.unpreviewable', () => ctx.slots.register(\n { name: 'sidebar.right.tab.document.unpreviewable', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5444
5531
  source: "packages/client/ui-sidebar-documentpreview/src/client/document/contract.ts:78"
5445
5532
  },
5533
+ {
5534
+ key: "sidebar.right.tab.files.actions",
5535
+ kind: "list",
5536
+ scope: "session",
5537
+ summary: "Workspace directory actions after the file tree's reload control.",
5538
+ doc: "Workspace directory actions after the file tree's reload control.",
5539
+ registerOptions: [
5540
+ {
5541
+ name: "id",
5542
+ requirement: "required",
5543
+ type: "string",
5544
+ 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."
5545
+ },
5546
+ {
5547
+ name: "order",
5548
+ requirement: "optional",
5549
+ type: "number",
5550
+ doc: "Position among the entries, ascending (default 0)."
5551
+ },
5552
+ {
5553
+ name: "label",
5554
+ requirement: "optional",
5555
+ type: "string | (() => string)",
5556
+ 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."
5557
+ }
5558
+ ],
5559
+ ownerProps: [],
5560
+ ownerPropsReferences: [],
5561
+ standardProps: [
5562
+ "useResource: UseResource",
5563
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5564
+ "usePanelInfo: UsePanelInfo",
5565
+ "useSessions: UseSessions",
5566
+ "useSessionStatus: UseSessionStatus",
5567
+ "useSessionRetainInfo: UseSessionRetainInfo",
5568
+ "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
5569
+ "useChat: UseChat",
5570
+ "useConversation: UseConversation",
5571
+ "useInput: SnapshotSelectorHook<InputState>",
5572
+ "inputActions: InputActions",
5573
+ "useSession: SessionSnapshotSelector",
5574
+ "sessionId: SessionId",
5575
+ "useProjection: UseProjection",
5576
+ "useTrajectory: UseTrajectory"
5577
+ ],
5578
+ keyDomain: "",
5579
+ hookContext: "",
5580
+ slotInject: "",
5581
+ declaredBy: "an entry in 'sidebar.right.pane.tab' (client-ui-sidebar-files), so it exists while that entry is mounted",
5582
+ occupants: ["client-ui-open-in-app OpenInAppAction id 'open-in-app'"],
5583
+ replaceRisk: "none",
5584
+ example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.tab.files.actions', () => ctx.slots.register(\n { name: 'sidebar.right.tab.files.actions', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
5585
+ source: "packages/client/ui-sidebar-files/src/client/index.ts:34"
5586
+ },
5446
5587
  {
5447
5588
  key: "sidebar.right.tab.guide",
5448
5589
  kind: "chain",
@@ -5907,14 +6048,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5907
6048
  occupants: ["client-ui-attachment MessageImages"],
5908
6049
  replaceRisk: "shadows-shipped-ui",
5909
6050
  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}",
5910
- source: "packages/client/ui-tool/src/client/contract/slots.ts:45"
6051
+ source: "packages/client/ui-tool/src/client/contract/slots.ts:44"
5911
6052
  },
5912
6053
  {
5913
6054
  key: "tool.call.toolview",
5914
6055
  kind: "keyed",
5915
6056
  scope: "session",
5916
6057
  summary: "Keyed Tool call view dispatched by wire Tool name.",
5917
- 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.",
6058
+ 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 running\nor settled node through explicit phase props. Every stage supplies\n`name` and a lazy `args` view; preparing arguments may be incomplete.",
5918
6059
  registerOptions: [{
5919
6060
  name: "key",
5920
6061
  requirement: "required",
@@ -5952,8 +6093,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
5952
6093
  "useTrajectory: UseTrajectory"
5953
6094
  ],
5954
6095
  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",
5955
- hookContext: "ToolCallHookContext",
5956
- slotInject: "ToolCallInjected",
6096
+ hookContext: "",
6097
+ slotInject: "",
5957
6098
  declaredBy: "an entry in 'conversation.chat.node' (client-ui-tool), so it exists while that entry is mounted",
5958
6099
  occupants: [
5959
6100
  "client-ui-deliverables PresentRow key 'present'",
@@ -6013,7 +6154,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
6013
6154
  ],
6014
6155
  replaceRisk: "shadows-shipped-ui",
6015
6156
  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}",
6016
- source: "packages/client/ui-tool/src/client/contract/slots.ts:25"
6157
+ source: "packages/client/ui-tool/src/client/contract/slots.ts:26"
6017
6158
  },
6018
6159
  {
6019
6160
  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.2.0-rc.1",
4
+ "version": "0.2.1-alpha.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -38,18 +38,18 @@
38
38
  },
39
39
  "license": "MIT",
40
40
  "peerDependencies": {
41
- "@deepseek-ai/cordis": "~4.0.4"
41
+ "@deepseek-ai/cordis": "~4.0.5-alpha.1"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/react": "~18.3.1",
45
45
  "react": "^18.2.0",
46
- "@deepseek-ai/cordis-plugin-loader": "~1.0.5",
47
- "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
48
- "@deepseek-ai/dsh-client-modules": "0.2.0-rc.1",
49
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1",
50
- "@deepseek-ai/dsh-client-ui-theme": "0.2.0-rc.1",
51
- "@deepseek-ai/cordis": "~4.0.4",
52
- "@deepseek-ai/dsh-util-values": "0.2.0-rc.1"
46
+ "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
47
+ "@deepseek-ai/dsh-api-remotes": "0.2.1-alpha.1",
48
+ "@deepseek-ai/dsh-client-modules": "0.2.1-alpha.1",
49
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-alpha.1",
50
+ "@deepseek-ai/cordis": "~4.0.5-alpha.1",
51
+ "@deepseek-ai/dsh-util-values": "0.2.1-alpha.1",
52
+ "@deepseek-ai/dsh-client-ui-theme": "0.2.1-alpha.1"
53
53
  },
54
54
  "files": [
55
55
  "lib/index.js",