@deepseek-ai/dsh-client-ui-plan 0.1.7-rc.2 → 0.2.0-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
@@ -27,8 +27,8 @@
27
27
  en: a13078ade4ef3b9d
28
28
  zh: 2c8b3e8b62ad5652
29
29
  /deepseek-ai-dsh-client-ui-plan/understand-the-implementation:
30
- en: 1360fc232aee29e7
31
- zh: 0beca76c9214a079
30
+ en: 9b663a9a30286847
31
+ zh: 9dca5298fce6a6dd
32
32
  /deepseek-ai-dsh-client-ui-plan/further-exploration:
33
33
  en: 59f62ef6269abf82
34
34
  zh: c8b4ee607be1e432
package/README.md CHANGED
@@ -51,7 +51,7 @@ Admission failures (`matched: false`, business errors, transport faults) surface
51
51
 
52
52
  The chip occupies the conversation-declared `conversation.input.plan` single seat; the node half is an empty apply (the roster row). Reads ride the generic projection pair through the standard-kit `useProjection`: the effective target is `pending ? !active : active` — a folded host value, not client optimism, so an arriving frame corrects the chip either way. The seat's injected face carries one verb, `exitPlanMode`, which executes `/plan off` through `ctx.remote.commands.execute` and maps admission failures to an inline error line. The placeholder and hint text live in ui-conversation's `conversation` locale namespace and are shared verbatim with the claimed `/plan` command hint.
53
53
 
54
- Plan cards derive from native `tool/call` or PTC dispatch arguments through a Conversation Definition, with each invocation’s resolved Turn location. They contribute to the additive `conversation.chat.turnTail` list alongside file deliveries. The plan resource address identifies the invocation and its complete ordinary or direct-parent subagent Session address; its provider reads existing Session history, including older pages, without storing document text in sidebar layout. The question plugin owns the review action slot and supplies its request key, complete text, and optional invocation identity. The automatic open reads `ctx.sidebarRight.mounted` through a bound hook and runs once a seat is on screen: a review arriving while a global panel is active mounts ahead of the returning seat in the same commit, before that seat binds. The [decision](../../../.agents/notes/implemented/feature/2026-09-17-persistent-plan-cards.md) explains why review lifetime and document lifetime remain separate. Subagent plan addresses also preserve unknown mode so history reads can resolve the child descriptor.
54
+ Plan cards derive from native `tool/call` or PTC dispatch arguments through a Conversation Definition, with each invocation’s resolved Turn location. They contribute to the additive `conversation.chat.turnTail` list alongside file deliveries. The plan resource address identifies the invocation and its complete ordinary or direct-parent subagent Session address; its provider reads existing Session history, including older pages, without storing document text in sidebar layout. The question plugin owns the review action slot and supplies its request key, complete text, and optional invocation identity. The automatic open reads `ctx.sidebarRight.mounted` through a bound hook and runs once a Session is on screen: the Sidebar names the returning Session before the commit that mounts the review renders, so a review that arrived while a global panel or another Session was on screen opens from that commit's effect. The [decision](../../../.agents/notes/implemented/feature/2026-09-17-persistent-plan-cards.md) explains why review lifetime and document lifetime remain separate. Subagent plan addresses also preserve unknown mode so history reads can resolve the child descriptor.
55
55
 
56
56
  The framework-bound `usePlans(turn)` exposes only submitted-plan data for that Turn. Chat indexes membership on Node updates and orders this collection when read; card rendering neither scans the transcript nor subscribes to other Turns or Node kinds.
57
57
 
package/README.zh.md CHANGED
@@ -51,7 +51,7 @@ kind: "package-reference"
51
51
 
52
52
  徽章占据 conversation 声明的 `conversation.input.plan` 单实例座位;node 半部是空 apply(roster 行)。读取经 standard-kit 的 `useProjection` 走通用投影对:有效目标是 `pending ? !active : active`——折叠的宿主值而非客户端乐观态,因此到达的帧无论哪个方向都会纠正徽章。座位注入面携带一个动词 `exitPlanMode`,经 `ctx.remote.commands.execute` 执行 `/plan off`,并把准入失败映射为一行内联错误。placeholder 与提示文案位于 ui-conversation 的 `conversation` locale 命名空间,与已认领 `/plan` 命令的提示逐字共用。
53
53
 
54
- 计划卡片通过 Conversation Definition 从原生 `tool/call` 或 PTC dispatch 参数派生,并使用每次调用已解析的回合位置。它们与文件产物一起贡献到可追加的 `conversation.chat.turnTail` 列表。计划资源地址标识调用及完整的普通会话地址或子会话直接父级地址;provider 读取已有会话历史及较早分页,不把正文存入侧边栏布局。提问插件拥有审批操作插槽,并提供请求键、完整正文和可选的调用标识。自动打开通过绑定的 hook 读取 `ctx.sidebarRight.mounted`,在座位出现在屏幕上后才执行:全局面板打开期间到达的审批,会在返回时与座位在同一次提交里先挂载、早于座位完成绑定。[决策记录](../../../.agents/notes/implemented/feature/2026-09-17-persistent-plan-cards.zh.md)说明审批与文档为何保持独立生命周期。 子代理计划地址也保留未知模式,以便历史读取解析子 descriptor。
54
+ 计划卡片通过 Conversation Definition 从原生 `tool/call` 或 PTC dispatch 参数派生,并使用每次调用已解析的回合位置。它们与文件产物一起贡献到可追加的 `conversation.chat.turnTail` 列表。计划资源地址标识调用及完整的普通会话地址或子会话直接父级地址;provider 读取已有会话历史及较早分页,不把正文存入侧边栏布局。提问插件拥有审批操作插槽,并提供请求键、完整正文和可选的调用标识。自动打开通过绑定的 hook 读取 `ctx.sidebarRight.mounted`,在有会话出现在屏幕上后才执行:Sidebar 在挂载审批的那次提交渲染之前就已给出返回的会话,因此在全局面板或其他会话占据屏幕期间到达的审批,会在那次提交的 effect 里打开。[决策记录](../../../.agents/notes/implemented/feature/2026-09-17-persistent-plan-cards.zh.md)说明审批与文档为何保持独立生命周期。 子代理计划地址也保留未知模式,以便历史读取解析子 descriptor。
55
55
 
56
56
  框架绑定的 `usePlans(turn)` 只提供该回合的已提交计划数据。Chat 随节点更新维护成员索引,并在读取时排列该集合;卡片渲染不扫描整段对话,也不订阅其他回合或节点类型。
57
57
 
package/lib/client.js CHANGED
@@ -97,10 +97,10 @@ window.__ModuleLoader__.load({
97
97
  /**
98
98
  * Open each pending plan automatically and retain a manual opener without answering it.
99
99
  *
100
- * The automatic open waits for a mounted Sidebar seat: a review that arrives
101
- * while the Conversation is off screen mounts in the same commit as the seat,
102
- * ahead of it, and the seat binds from its own effect. Reading the bound
103
- * session through the hook opens once that binding exists.
100
+ * The automatic open waits for a Session on screen. `ctx.sidebarRight` names
101
+ * the Session before the commit that brings its Conversation back renders, so
102
+ * a review that arrived while the Conversation was off screen opens from the
103
+ * effect of the commit that mounts it.
104
104
  * @param props - Review identity, Session store, localized copy, and navigation.
105
105
  * @returns an opener for either logged or temporary plan text.
106
106
  */
@@ -21,7 +21,7 @@ export interface PlanReviewOpenInjected {
21
21
  /** Open the logged plan, or the request's temporary document when no invocation exists. */
22
22
  openReview: (review: PropsRuntime<'conversation.plan-review.actions'>['review'], requestKey: string) => void;
23
23
  readonly hooks: {
24
- /** The session whose right Sidebar seat is mounted; `undefined` while none is on screen. */
24
+ /** The Session on screen, whose right Sidebar the opens land in; `undefined` while none is. */
25
25
  readonly sidebarMounted: HostObservable<SessionId | undefined>;
26
26
  };
27
27
  }
@@ -34,10 +34,10 @@ export declare function PlanCards({ turn, usePlans, openPlan, t }: PropsRuntime<
34
34
  /**
35
35
  * Open each pending plan automatically and retain a manual opener without answering it.
36
36
  *
37
- * The automatic open waits for a mounted Sidebar seat: a review that arrives
38
- * while the Conversation is off screen mounts in the same commit as the seat,
39
- * ahead of it, and the seat binds from its own effect. Reading the bound
40
- * session through the hook opens once that binding exists.
37
+ * The automatic open waits for a Session on screen. `ctx.sidebarRight` names
38
+ * the Session before the commit that brings its Conversation back renders, so
39
+ * a review that arrived while the Conversation was off screen opens from the
40
+ * effect of the commit that mounts it.
41
41
  * @param props - Review identity, Session store, localized copy, and navigation.
42
42
  * @returns an opener for either logged or temporary plan text.
43
43
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-plan",
3
3
  "description": "Plan mode controls, persistent transcript plan cards, and sidebar Markdown previews",
4
- "version": "0.1.7-rc.2",
4
+ "version": "0.2.0-rc.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -47,27 +47,27 @@
47
47
  "devDependencies": {
48
48
  "@types/react": "~18.3.1",
49
49
  "react": "^18.2.0",
50
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
51
- "@deepseek-ai/dsh-client-locale": "0.1.7-rc.2",
52
- "@deepseek-ai/dsh-client-test-runtime": "0.1.7-rc.2",
53
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.7-rc.2",
54
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
55
- "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
56
- "@deepseek-ai/dsh-plan-mode": "0.1.7-rc.2",
50
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.2",
51
+ "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2",
52
+ "@deepseek-ai/dsh-client-locale": "0.2.0-rc.2",
53
+ "@deepseek-ai/dsh-client-test-runtime": "0.2.0-rc.2",
54
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
55
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.2",
56
+ "@deepseek-ai/dsh-plan-mode": "0.2.0-rc.2",
57
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
57
58
  "@deepseek-ai/cordis": "~4.0.4",
58
- "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.2",
59
- "@deepseek-ai/dsh-session": "0.1.7-rc.2",
60
- "@deepseek-ai/dsh-client-ui-session": "0.1.7-rc.2",
61
- "@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.2",
62
- "@deepseek-ai/dsh-client-ui-chat": "0.1.7-rc.2",
63
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
64
- "@deepseek-ai/dsh-client-ui-sidebar-right": "0.1.7-rc.2",
65
- "@deepseek-ai/dsh-client-ui-user-questions": "0.1.7-rc.2",
66
- "@deepseek-ai/dsh-client-resources": "0.1.7-rc.2",
67
- "@deepseek-ai/dsh-typert-protocol": "0.1.7-rc.2",
68
- "@deepseek-ai/dsh-llm": "0.1.7-rc.2",
69
- "@deepseek-ai/dsh-util-crypto": "0.1.7-rc.2",
70
- "@deepseek-ai/dsh-tools": "0.1.7-rc.2"
59
+ "@deepseek-ai/dsh-session": "0.2.0-rc.2",
60
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
61
+ "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2",
62
+ "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
63
+ "@deepseek-ai/dsh-client-ui-chat": "0.2.0-rc.2",
64
+ "@deepseek-ai/dsh-client-ui-sidebar-right": "0.2.0-rc.2",
65
+ "@deepseek-ai/dsh-client-ui-user-questions": "0.2.0-rc.2",
66
+ "@deepseek-ai/dsh-client-resources": "0.2.0-rc.2",
67
+ "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2",
68
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
69
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
70
+ "@deepseek-ai/dsh-util-crypto": "0.2.0-rc.2"
71
71
  },
72
72
  "files": [
73
73
  "lib/index.js",