@deepseek-ai/dsh-cordis-client-runner 0.1.5-rc.2 → 0.1.6-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 +2 -2
- package/README.md +1 -1
- package/README.zh.md +2 -2
- package/lib/client.js +130 -35
- package/package.json +6 -6
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
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:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: 153a8bf3b71d2c4c8edf3423dd0b7004083d1ecc
|
|
6
|
+
README.zh.md: 207b3d40c56110d734499bb516e41872c53b262a
|
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ This section explains the design behind the browser half; the observable behavio
|
|
|
51
51
|
|
|
52
52
|
### Design philosophy
|
|
53
53
|
|
|
54
|
-
The browser half is built on one principle: a dynamic package must ride the same activation gating, fiber-effect cleanup, and status projection as a static one. The evaluated plugin is seated in the module table and mounted through `loader.create`; unload
|
|
54
|
+
The browser half is built on one principle: a dynamic package must ride the same activation gating, fiber-effect cleanup, and status projection as a static one. The evaluated plugin is seated in the module table and mounted through `loader.create`; unload removes the entry, waits for its fiber's cleanup, then invalidates its factory and removes its styles. The guard is a whitelist — lifecycle verbs plus declared services — that mirrors the host-side sandbox facade, so a package author meets one contract on both halves. One observer feeds two outlets: the slot registry's entry-error seam is watched only here, and a crash belonging to a package this runner seated goes upstream to the host for the model and onto this package's own `renderFailures` for the panel.
|
|
55
55
|
|
|
56
56
|
### Source map
|
|
57
57
|
|
package/README.zh.md
CHANGED
|
@@ -51,7 +51,7 @@ kind: "package-reference"
|
|
|
51
51
|
|
|
52
52
|
### 设计理念
|
|
53
53
|
|
|
54
|
-
浏览器半建立在一个原则之上:动态包必须与静态包共享同一套激活门控、fiber effect 清理与状态投影。求值后的插件被塞进模块表,并经 `loader.create`
|
|
54
|
+
浏览器半建立在一个原则之上:动态包必须与静态包共享同一套激活门控、fiber effect 清理与状态投影。求值后的插件被塞进模块表,并经 `loader.create` 挂载;卸载先移除 entry,等待其 fiber 清理完成,再使 factory 失效并撤下样式。guard 是一份白名单——生命周期动词加已声明服务——与 host 侧沙箱门面对称,因此包作者在两侧面对同一个约定。一个观察者供两个出口:只有这里监视槽位注册表的 entry-error seam,凡属于本 runner 落座过的包的崩溃,一路上行给 host(给模型),一路发布到本包自己的 `renderFailures`(给面板)。
|
|
55
55
|
|
|
56
56
|
### 源码地图
|
|
57
57
|
|
|
@@ -140,4 +140,4 @@ kind: "package-reference"
|
|
|
140
140
|
|
|
141
141
|
</details>
|
|
142
142
|
|
|
143
|
-
**运行时不变式:**
|
|
143
|
+
**运行时不变式:** 不发布伴生入口。所属关系(一个 live Plugin 的 loader entry 仅在一个 Plugin Run ID 存活期间存在)是只能通过 Client 半服务访问的浏览器侧状态,Node 平面的伴生入口无法观察。该关系改由本包自己的装载与拆除测试直接断言。
|
package/lib/client.js
CHANGED
|
@@ -625,7 +625,9 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
625
625
|
async teardown(id, entryId, styles) {
|
|
626
626
|
this.live.delete(id);
|
|
627
627
|
this.failures.delete(id);
|
|
628
|
-
|
|
628
|
+
const disposal = this.env.loader.resolve(entryId).fiber?.dispose();
|
|
629
|
+
this.env.loader.remove(entryId);
|
|
630
|
+
await disposal;
|
|
629
631
|
this.env.modules.invalidate(moduleIdOf(id));
|
|
630
632
|
styles.dispose();
|
|
631
633
|
}
|
|
@@ -1502,6 +1504,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
1502
1504
|
description: "Session to archive."
|
|
1503
1505
|
}]
|
|
1504
1506
|
},
|
|
1507
|
+
{
|
|
1508
|
+
signature: "unarchiveSession(sessionId: SessionId): Promise<void>",
|
|
1509
|
+
description: "Unarchive a Session, restoring it to its recorded Workspace position.",
|
|
1510
|
+
parameters: [{
|
|
1511
|
+
name: "sessionId",
|
|
1512
|
+
description: "Session to unarchive."
|
|
1513
|
+
}]
|
|
1514
|
+
},
|
|
1505
1515
|
{
|
|
1506
1516
|
signature: "pickDirectory(): Promise<string | null>",
|
|
1507
1517
|
description: "Open the Host-native directory picker.",
|
|
@@ -1576,6 +1586,14 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
1576
1586
|
description: "Session to archive."
|
|
1577
1587
|
}]
|
|
1578
1588
|
},
|
|
1589
|
+
{
|
|
1590
|
+
signature: "unarchiveSession(sessionId: SessionId): Promise<void>",
|
|
1591
|
+
description: "Unarchive a Session from the archived Session list.",
|
|
1592
|
+
parameters: [{
|
|
1593
|
+
name: "sessionId",
|
|
1594
|
+
description: "Session to unarchive."
|
|
1595
|
+
}]
|
|
1596
|
+
},
|
|
1579
1597
|
{
|
|
1580
1598
|
signature: "insertSessionBefore( workspaceId: WorkspaceId, sessionId: SessionId, beforeSessionId?: SessionId, ): Promise<WorkspaceView>",
|
|
1581
1599
|
description: "Move a Session within one Workspace account.",
|
|
@@ -2284,7 +2302,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2284
2302
|
occupants: ["client-ui-message-feedback MessageFeedbackActions id 'feedback'"],
|
|
2285
2303
|
replaceRisk: "none",
|
|
2286
2304
|
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}",
|
|
2287
|
-
source: "packages/client/ui-chat/src/client/contract/slots.ts:
|
|
2305
|
+
source: "packages/client/ui-chat/src/client/contract/slots.ts:217"
|
|
2288
2306
|
},
|
|
2289
2307
|
{
|
|
2290
2308
|
key: "conversation.chat.commandview",
|
|
@@ -2327,7 +2345,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2327
2345
|
occupants: [],
|
|
2328
2346
|
replaceRisk: "none",
|
|
2329
2347
|
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}",
|
|
2330
|
-
source: "packages/client/ui-chat/src/client/contract/slots.ts:
|
|
2348
|
+
source: "packages/client/ui-chat/src/client/contract/slots.ts:205"
|
|
2331
2349
|
},
|
|
2332
2350
|
{
|
|
2333
2351
|
key: "conversation.chat.node",
|
|
@@ -2341,7 +2359,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2341
2359
|
type: "string",
|
|
2342
2360
|
doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
|
|
2343
2361
|
}],
|
|
2344
|
-
ownerProps: ["/** Stable owner currency delivered to a keyed Chat renderer. */\nexport interface ChatNodeOwnerProps {\n cwd?: string | undefined\n openFile: (path: string, options?: OpenFileOptions) => void\n inspectCall: (callId: ToolCallId) => void\n forkAt: (seq: number) => void\n /**\n * Session-authorized image loader, down-threaded from the Chat view so a\n * chat-node renderer can render the attachment presentation slot directly\n * with only the durable references plus this loader, instead of receiving a\n * rendering closure.\n */\n loadImage: MessageImageLoader\n renderMessageImages: RenderMessageImages\n fileMentions: (owner: TurnTailOwnerProps) => MarkdownFileMentions | undefined\n /** Turn-process state when this Node belongs to a projected Turn. */\n turnProcess?: TurnProcessOwnerProps | undefined\n}"],
|
|
2362
|
+
ownerProps: ["/** Stable owner currency delivered to a keyed Chat renderer. */\nexport interface ChatNodeOwnerProps {\n cwd?: string | undefined\n /** Open the current source file of a skill referenced by a sent message. */\n openSkill: (name: string) => void\n openFile: (path: string, options?: OpenFileOptions) => void\n inspectCall: (callId: ToolCallId) => void\n forkAt: (seq: number) => void\n /**\n * Session-authorized image loader, down-threaded from the Chat view so a\n * chat-node renderer can render the attachment presentation slot directly\n * with only the durable references plus this loader, instead of receiving a\n * rendering closure.\n */\n loadImage: MessageImageLoader\n renderMessageImages: RenderMessageImages\n fileMentions: (owner: TurnTailOwnerProps) => MarkdownFileMentions | undefined\n /** Turn-process state when this Node belongs to a projected Turn. */\n turnProcess?: TurnProcessOwnerProps | undefined\n}"],
|
|
2345
2363
|
ownerPropsReferences: [
|
|
2346
2364
|
"MarkdownFileMentions",
|
|
2347
2365
|
"MessageImageLoader",
|
|
@@ -2391,7 +2409,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2391
2409
|
],
|
|
2392
2410
|
replaceRisk: "shadows-shipped-ui",
|
|
2393
2411
|
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}",
|
|
2394
|
-
source: "packages/client/ui-chat/src/client/contract/slots.ts:
|
|
2412
|
+
source: "packages/client/ui-chat/src/client/contract/slots.ts:186"
|
|
2395
2413
|
},
|
|
2396
2414
|
{
|
|
2397
2415
|
key: "conversation.chat.turnTail",
|
|
@@ -2430,7 +2448,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2430
2448
|
occupants: ["client-ui-deliverables Deliverables"],
|
|
2431
2449
|
replaceRisk: "none",
|
|
2432
2450
|
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}",
|
|
2433
|
-
source: "packages/client/ui-chat/src/client/contract/slots.ts:
|
|
2451
|
+
source: "packages/client/ui-chat/src/client/contract/slots.ts:211"
|
|
2434
2452
|
},
|
|
2435
2453
|
{
|
|
2436
2454
|
key: "conversation.composer",
|
|
@@ -2477,7 +2495,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2477
2495
|
],
|
|
2478
2496
|
replaceRisk: "none",
|
|
2479
2497
|
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}",
|
|
2480
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2498
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:157"
|
|
2481
2499
|
},
|
|
2482
2500
|
{
|
|
2483
2501
|
key: "conversation.composer.bar",
|
|
@@ -2509,7 +2527,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2509
2527
|
occupants: ["client-ui-conversation InputBar"],
|
|
2510
2528
|
replaceRisk: "shadows-shipped-ui",
|
|
2511
2529
|
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}",
|
|
2512
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2530
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:175"
|
|
2513
2531
|
},
|
|
2514
2532
|
{
|
|
2515
2533
|
key: "conversation.composer.dock",
|
|
@@ -2562,7 +2580,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2562
2580
|
occupants: ["client-ui-chat StatsPills id 'stats'"],
|
|
2563
2581
|
replaceRisk: "none",
|
|
2564
2582
|
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}",
|
|
2565
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2583
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:169"
|
|
2566
2584
|
},
|
|
2567
2585
|
{
|
|
2568
2586
|
key: "conversation.hero.agentPreset",
|
|
@@ -2588,7 +2606,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2588
2606
|
occupants: ["client-ui-agent-preset AgentPresetSeat"],
|
|
2589
2607
|
replaceRisk: "shadows-shipped-ui",
|
|
2590
2608
|
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}",
|
|
2591
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2609
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:163"
|
|
2592
2610
|
},
|
|
2593
2611
|
{
|
|
2594
2612
|
key: "conversation.hero.brand.mark",
|
|
@@ -2614,7 +2632,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2614
2632
|
occupants: [],
|
|
2615
2633
|
replaceRisk: "none",
|
|
2616
2634
|
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}",
|
|
2617
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2635
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:161"
|
|
2618
2636
|
},
|
|
2619
2637
|
{
|
|
2620
2638
|
key: "conversation.hero.workspace",
|
|
@@ -2640,7 +2658,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2640
2658
|
occupants: ["client-ui-workspace WorkspacePicker"],
|
|
2641
2659
|
replaceRisk: "shadows-shipped-ui",
|
|
2642
2660
|
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}",
|
|
2643
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2661
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:159"
|
|
2644
2662
|
},
|
|
2645
2663
|
{
|
|
2646
2664
|
key: "conversation.hero.workspace.directoryFlow",
|
|
@@ -2702,7 +2720,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2702
2720
|
occupants: ["client-ui-attachment ComposerAttachments"],
|
|
2703
2721
|
replaceRisk: "shadows-shipped-ui",
|
|
2704
2722
|
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}",
|
|
2705
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2723
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:177"
|
|
2706
2724
|
},
|
|
2707
2725
|
{
|
|
2708
2726
|
key: "conversation.input.dock",
|
|
@@ -2759,7 +2777,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2759
2777
|
],
|
|
2760
2778
|
replaceRisk: "none",
|
|
2761
2779
|
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}",
|
|
2762
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2780
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:165"
|
|
2763
2781
|
},
|
|
2764
2782
|
{
|
|
2765
2783
|
key: "conversation.input.left",
|
|
@@ -2812,7 +2830,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2812
2830
|
occupants: [],
|
|
2813
2831
|
replaceRisk: "none",
|
|
2814
2832
|
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}",
|
|
2815
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2833
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:171"
|
|
2816
2834
|
},
|
|
2817
2835
|
{
|
|
2818
2836
|
key: "conversation.input.model",
|
|
@@ -2821,7 +2839,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2821
2839
|
summary: "Model selector inside the composer tool row.",
|
|
2822
2840
|
doc: "Model selector inside the composer tool row.",
|
|
2823
2841
|
registerOptions: [],
|
|
2824
|
-
ownerProps: ["/** Owner share of the named plan and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
|
|
2842
|
+
ownerProps: ["/** Owner share of the named plan, permission, and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
|
|
2825
2843
|
ownerPropsReferences: [],
|
|
2826
2844
|
standardProps: [
|
|
2827
2845
|
"useResource: UseResource",
|
|
@@ -2846,7 +2864,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2846
2864
|
occupants: ["client-ui-model-selection ModelSelect"],
|
|
2847
2865
|
replaceRisk: "shadows-shipped-ui",
|
|
2848
2866
|
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}",
|
|
2849
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2867
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:187"
|
|
2850
2868
|
},
|
|
2851
2869
|
{
|
|
2852
2870
|
key: "conversation.input.overlay",
|
|
@@ -2903,7 +2921,41 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2903
2921
|
],
|
|
2904
2922
|
replaceRisk: "none",
|
|
2905
2923
|
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}",
|
|
2906
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2924
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:167"
|
|
2925
|
+
},
|
|
2926
|
+
{
|
|
2927
|
+
key: "conversation.input.permission",
|
|
2928
|
+
kind: "single",
|
|
2929
|
+
scope: "session",
|
|
2930
|
+
summary: "Current-session permission control inside the composer tool row.",
|
|
2931
|
+
doc: "Current-session permission control inside the composer tool row.",
|
|
2932
|
+
registerOptions: [],
|
|
2933
|
+
ownerProps: ["/** Owner share of the named plan, permission, and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
|
|
2934
|
+
ownerPropsReferences: [],
|
|
2935
|
+
standardProps: [
|
|
2936
|
+
"useResource: UseResource",
|
|
2937
|
+
"useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
|
|
2938
|
+
"usePanelInfo: UsePanelInfo",
|
|
2939
|
+
"useSessions: UseSessions",
|
|
2940
|
+
"useSessionPendingInteraction: UseSessionPendingInteraction",
|
|
2941
|
+
"useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
|
|
2942
|
+
"useChat: UseChat",
|
|
2943
|
+
"useConversation: UseConversation",
|
|
2944
|
+
"useInput: SnapshotSelectorHook<InputState>",
|
|
2945
|
+
"inputActions: InputActions",
|
|
2946
|
+
"useSession: SessionSnapshotSelector",
|
|
2947
|
+
"sessionId: SessionId",
|
|
2948
|
+
"useProjection: UseProjection",
|
|
2949
|
+
"useTrajectory: UseTrajectory"
|
|
2950
|
+
],
|
|
2951
|
+
keyDomain: "",
|
|
2952
|
+
hookContext: "",
|
|
2953
|
+
slotInject: "",
|
|
2954
|
+
declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
|
|
2955
|
+
occupants: ["client-ui-permission-presets PermissionSelect"],
|
|
2956
|
+
replaceRisk: "shadows-shipped-ui",
|
|
2957
|
+
example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.permission', () => ctx.slots.register(\n { name: 'conversation.input.permission' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
|
|
2958
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:185"
|
|
2907
2959
|
},
|
|
2908
2960
|
{
|
|
2909
2961
|
key: "conversation.input.plan",
|
|
@@ -2912,7 +2964,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2912
2964
|
summary: "Plan control inside the composer tool row.",
|
|
2913
2965
|
doc: "Plan control inside the composer tool row.",
|
|
2914
2966
|
registerOptions: [],
|
|
2915
|
-
ownerProps: ["/** Owner share of the named plan and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
|
|
2967
|
+
ownerProps: ["/** Owner share of the named plan, permission, and model controls. */\nexport interface InputControlOwnerProps {\n /** Whether the composer currently refuses interaction. */\n locked: boolean\n}"],
|
|
2916
2968
|
ownerPropsReferences: [],
|
|
2917
2969
|
standardProps: [
|
|
2918
2970
|
"useResource: UseResource",
|
|
@@ -2937,7 +2989,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2937
2989
|
occupants: ["client-ui-plan PlanChip"],
|
|
2938
2990
|
replaceRisk: "shadows-shipped-ui",
|
|
2939
2991
|
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}",
|
|
2940
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
2992
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:183"
|
|
2941
2993
|
},
|
|
2942
2994
|
{
|
|
2943
2995
|
key: "conversation.input.right",
|
|
@@ -2990,7 +3042,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
2990
3042
|
occupants: [],
|
|
2991
3043
|
replaceRisk: "none",
|
|
2992
3044
|
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}",
|
|
2993
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
3045
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:173"
|
|
2994
3046
|
},
|
|
2995
3047
|
{
|
|
2996
3048
|
key: "conversation.message.images",
|
|
@@ -3028,7 +3080,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3028
3080
|
occupants: ["client-ui-attachment MessageImages"],
|
|
3029
3081
|
replaceRisk: "shadows-shipped-ui",
|
|
3030
3082
|
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}",
|
|
3031
|
-
source: "packages/client/ui-chat/src/client/contract/slots.ts:
|
|
3083
|
+
source: "packages/client/ui-chat/src/client/contract/slots.ts:199"
|
|
3032
3084
|
},
|
|
3033
3085
|
{
|
|
3034
3086
|
key: "conversation.session",
|
|
@@ -3062,7 +3114,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3062
3114
|
occupants: ["client-ui-conversation ConversationSession"],
|
|
3063
3115
|
replaceRisk: "shadows-shipped-ui",
|
|
3064
3116
|
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}",
|
|
3065
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
3117
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:122"
|
|
3066
3118
|
},
|
|
3067
3119
|
{
|
|
3068
3120
|
key: "conversation.session.header",
|
|
@@ -3096,7 +3148,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3096
3148
|
occupants: ["client-ui-conversation ConversationSessionHeader"],
|
|
3097
3149
|
replaceRisk: "shadows-shipped-ui",
|
|
3098
3150
|
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}",
|
|
3099
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
3151
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:124"
|
|
3100
3152
|
},
|
|
3101
3153
|
{
|
|
3102
3154
|
key: "conversation.session.header.actions",
|
|
@@ -3150,11 +3202,12 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3150
3202
|
"client-ui-agent-preset AgentPresetLabel id 'agent-preset'",
|
|
3151
3203
|
"client-ui-jobs JobListAction id 'job-list'",
|
|
3152
3204
|
"client-ui-schedule ScheduleCatalogAction id 'schedule-catalog'",
|
|
3205
|
+
"client-ui-sidebar-terminal TerminalRecovery",
|
|
3153
3206
|
"experimental-client-ui-agent-team TeamAction id 'agent-team'"
|
|
3154
3207
|
],
|
|
3155
3208
|
replaceRisk: "none",
|
|
3156
3209
|
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}",
|
|
3157
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
3210
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:132"
|
|
3158
3211
|
},
|
|
3159
3212
|
{
|
|
3160
3213
|
key: "conversation.session.header.corner",
|
|
@@ -3188,7 +3241,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3188
3241
|
occupants: ["client-ui-sidebar-right ExpandButton"],
|
|
3189
3242
|
replaceRisk: "shadows-shipped-ui",
|
|
3190
3243
|
example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.session.header.corner', () => ctx.slots.register(\n { name: 'conversation.session.header.corner' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
|
|
3191
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
3244
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:149"
|
|
3192
3245
|
},
|
|
3193
3246
|
{
|
|
3194
3247
|
key: "conversation.session.header.lineage",
|
|
@@ -3222,7 +3275,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3222
3275
|
occupants: ["client-ui-subagent SubagentHeaderLineage"],
|
|
3223
3276
|
replaceRisk: "shadows-shipped-ui",
|
|
3224
3277
|
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}",
|
|
3225
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
3278
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:126"
|
|
3226
3279
|
},
|
|
3227
3280
|
{
|
|
3228
3281
|
key: "conversation.session.header.utilities",
|
|
@@ -3275,7 +3328,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3275
3328
|
occupants: ["client-ui-open-in-app OpenInAppAction id 'open-in-app'", "session-log-export SessionLogDownloadHeaderAction id 'session-log-download'"],
|
|
3276
3329
|
replaceRisk: "none",
|
|
3277
3330
|
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}",
|
|
3278
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
3331
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:138"
|
|
3279
3332
|
},
|
|
3280
3333
|
{
|
|
3281
3334
|
key: "conversation.trajectory.images",
|
|
@@ -3366,7 +3419,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3366
3419
|
occupants: ["client-ui-chat ChatView id 'chat'", "client-ui-trajectory TrajectoryView id 'trajectory'"],
|
|
3367
3420
|
replaceRisk: "none",
|
|
3368
3421
|
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}",
|
|
3369
|
-
source: "packages/client/ui-conversation/src/client/contract/slots.ts:
|
|
3422
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:155"
|
|
3370
3423
|
},
|
|
3371
3424
|
{
|
|
3372
3425
|
key: "main",
|
|
@@ -3429,7 +3482,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3429
3482
|
occupants: ["client-ui-conversation ConversationRoot"],
|
|
3430
3483
|
replaceRisk: "shadows-shipped-ui",
|
|
3431
3484
|
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:
|
|
3485
|
+
source: "packages/client/ui-conversation/src/client/contract/slots.ts:120"
|
|
3433
3486
|
},
|
|
3434
3487
|
{
|
|
3435
3488
|
key: "rightbar",
|
|
@@ -3912,7 +3965,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3912
3965
|
"client-ui-agent-preset AgentPresetSection id 'agent-presets'",
|
|
3913
3966
|
"client-ui-settings-general GeneralSection id 'general'",
|
|
3914
3967
|
"client-ui-settings-models ModelsSection id 'models'",
|
|
3915
|
-
"client-ui-settings-plugins PluginsSettingsSection id 'plugins'"
|
|
3968
|
+
"client-ui-settings-plugins PluginsSettingsSection id 'plugins'",
|
|
3969
|
+
"client-ui-settings-unarchive-sessions ArchivedSessionsSection id 'archived-sessions'"
|
|
3916
3970
|
],
|
|
3917
3971
|
replaceRisk: "none",
|
|
3918
3972
|
example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('settings.section', () => ctx.slots.register(\n { name: 'settings.section', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
|
|
@@ -3984,7 +4038,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
3984
4038
|
hookContext: "",
|
|
3985
4039
|
slotInject: "",
|
|
3986
4040
|
declaredBy: "an entry in 'root' (client-ui-layout), so it exists while that entry is mounted",
|
|
3987
|
-
occupants: [],
|
|
4041
|
+
occupants: ["client-ui-sidebar-terminal TerminalCleanup"],
|
|
3988
4042
|
replaceRisk: "none",
|
|
3989
4043
|
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}",
|
|
3990
4044
|
source: "packages/client/ui-layout/src/client/index.ts:91"
|
|
@@ -4194,7 +4248,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
4194
4248
|
occupants: [
|
|
4195
4249
|
"client-ui-sidebar-documentpreview TextPreview",
|
|
4196
4250
|
"client-ui-sidebar-files FilesBody",
|
|
4197
|
-
"client-ui-sidebar-right GuideBody"
|
|
4251
|
+
"client-ui-sidebar-right GuideBody",
|
|
4252
|
+
"client-ui-sidebar-terminal TerminalBody"
|
|
4198
4253
|
],
|
|
4199
4254
|
replaceRisk: "none",
|
|
4200
4255
|
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}",
|
|
@@ -4237,7 +4292,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
4237
4292
|
occupants: [
|
|
4238
4293
|
"client-ui-sidebar-documentpreview TextTitle",
|
|
4239
4294
|
"client-ui-sidebar-files FilesTitle",
|
|
4240
|
-
"client-ui-sidebar-right GuideTitle"
|
|
4295
|
+
"client-ui-sidebar-right GuideTitle",
|
|
4296
|
+
"client-ui-sidebar-terminal TerminalTitle"
|
|
4241
4297
|
],
|
|
4242
4298
|
replaceRisk: "none",
|
|
4243
4299
|
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}",
|
|
@@ -4328,6 +4384,45 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
4328
4384
|
example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.tab.guide', () => ctx.slots.register(\n { name: 'sidebar.right.tab.guide', select: owner => null },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
|
|
4329
4385
|
source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:75"
|
|
4330
4386
|
},
|
|
4387
|
+
{
|
|
4388
|
+
key: "sidebar.right.tab.guide.entry",
|
|
4389
|
+
kind: "keyed",
|
|
4390
|
+
scope: "session",
|
|
4391
|
+
summary: "One provider's guide card, with the standard card as the owner's fallback.",
|
|
4392
|
+
doc: "One provider's guide card, with the standard card as the owner's fallback.",
|
|
4393
|
+
registerOptions: [{
|
|
4394
|
+
name: "key",
|
|
4395
|
+
requirement: "required",
|
|
4396
|
+
type: "string",
|
|
4397
|
+
doc: "Your cell key: the entry renders where the owner dispatches this exact key. Registering an already-occupied key replaces that occupant."
|
|
4398
|
+
}],
|
|
4399
|
+
ownerProps: ["/** Resolved guide copy and entry identity supplied to a provider's card renderer. */\nexport interface SidebarRightGuideEntryOwnerProps {\n readonly entryId: string\n readonly kind: string\n readonly title: string\n readonly description?: string\n}"],
|
|
4400
|
+
ownerPropsReferences: [],
|
|
4401
|
+
standardProps: [
|
|
4402
|
+
"useResource: UseResource",
|
|
4403
|
+
"useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
|
|
4404
|
+
"usePanelInfo: UsePanelInfo",
|
|
4405
|
+
"useSessions: UseSessions",
|
|
4406
|
+
"useSessionPendingInteraction: UseSessionPendingInteraction",
|
|
4407
|
+
"useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
|
|
4408
|
+
"useChat: UseChat",
|
|
4409
|
+
"useConversation: UseConversation",
|
|
4410
|
+
"useInput: SnapshotSelectorHook<InputState>",
|
|
4411
|
+
"inputActions: InputActions",
|
|
4412
|
+
"useSession: SessionSnapshotSelector",
|
|
4413
|
+
"sessionId: SessionId",
|
|
4414
|
+
"useProjection: UseProjection",
|
|
4415
|
+
"useTrajectory: UseTrajectory"
|
|
4416
|
+
],
|
|
4417
|
+
keyDomain: "open: any string the owner dispatches (no compile-time key set), none are taken yet",
|
|
4418
|
+
hookContext: "UseSidebarRightTabInfo",
|
|
4419
|
+
slotInject: "{ hooks: { tabInfo: SlotHookFactory<'sidebar.right.tab.guide.entry', UseSidebarRightTabInfo> } }",
|
|
4420
|
+
declaredBy: "an entry in 'sidebar.right.pane.tab' (client-ui-sidebar-right), so it exists while that entry is mounted",
|
|
4421
|
+
occupants: ["client-ui-sidebar-terminal TerminalGuide"],
|
|
4422
|
+
replaceRisk: "none",
|
|
4423
|
+
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}",
|
|
4424
|
+
source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:82"
|
|
4425
|
+
},
|
|
4331
4426
|
{
|
|
4332
4427
|
key: "sidebar.right.tab.menu.item",
|
|
4333
4428
|
kind: "list",
|
|
@@ -4379,7 +4474,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
|
|
|
4379
4474
|
occupants: [],
|
|
4380
4475
|
replaceRisk: "none",
|
|
4381
4476
|
example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('sidebar.right.tab.menu.item', () => ctx.slots.register(\n { name: 'sidebar.right.tab.menu.item', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
|
|
4382
|
-
source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:
|
|
4477
|
+
source: "packages/client/ui-sidebar-right/src/client/contract/slots.ts:94"
|
|
4383
4478
|
},
|
|
4384
4479
|
{
|
|
4385
4480
|
key: "sidebar.settings",
|
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.
|
|
4
|
+
"version": "0.1.6-alpha.1",
|
|
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.
|
|
48
|
-
"@deepseek-ai/dsh-client-modules": "^0.1.
|
|
49
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.
|
|
50
|
-
"@deepseek-ai/dsh-client-ui-theme": "^0.1.
|
|
47
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.6-alpha.1",
|
|
48
|
+
"@deepseek-ai/dsh-client-modules": "^0.1.6-alpha.1",
|
|
49
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.6-alpha.1",
|
|
50
|
+
"@deepseek-ai/dsh-client-ui-theme": "^0.1.6-alpha.1",
|
|
51
51
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
52
|
-
"@deepseek-ai/dsh-util-values": "^0.1.
|
|
52
|
+
"@deepseek-ai/dsh-util-values": "^0.1.6-alpha.1"
|
|
53
53
|
},
|
|
54
54
|
"files": [
|
|
55
55
|
"lib/index.js",
|