@deepseek-ai/dsh-client-ui-workflow-run 0.1.6-alpha.2 → 0.1.7-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/client/ui-workflow-run/README.md
5
- README.md: 2f61cbee94414349030c67a45c03057f21fd9afe
6
- README.zh.md: 94d90d057a119e1093ec014bad29f0f4fff82af6
5
+ README.md: f48efe1f1525603a0f710f1a3fc6302cc14d109f
6
+ README.zh.md: 9fa6f59b6899aa353d50a39e73218e6ee8748417
package/README.md CHANGED
@@ -29,7 +29,7 @@ A top-level workflow run through `dsh-tool-workflow` appears in the conversation
29
29
 
30
30
  ### Navigating the node
31
31
 
32
- The run uses a 32-pixel row with persistent chevrons, an inline state dot, and status text; phases use disclosure rows with title and member count in the main area and a fixed aggregate-status tail; members use a 16-pixel dot slot, a truncating name area, and a fixed status column. Opening a member's child Session requires the member to be running, the child id to be in the ordinary Session list, the row to have `origin: 'subagent'`, its `parentId` to be the current Session, and the list row to still be running — remote, addressed-only, wrong-parent, or terminal rows remain non-interactive.
32
+ The run uses a 32-pixel row with persistent chevrons, an inline state dot, and status text; phases use disclosure rows with title and member count in the main area and a fixed aggregate-status tail; members use a 16-pixel dot slot, a truncating name area, and a fixed status column. Opening a member's child Session requires both member and child to be running, and the child must belong to the current Session's direct-child catalog. Child activity uses the unified UI status, falling back to the Session summary when unknown. Session summaries do not establish membership; absent, wrong-parent, or terminal catalog entries remain non-interactive.
33
33
 
34
34
  ### State and completion
35
35
 
package/README.zh.md CHANGED
@@ -29,7 +29,7 @@ kind: "package-reference"
29
29
 
30
30
  ### 导航节点
31
31
 
32
- 运行使用 32 像素行,带常驻 chevron、行内状态点与状态文字;阶段使用 disclosure 行,在主区显示标题与成员数、在固定尾部显示聚合状态;成员使用 16 像素状态点槽、会截断文本的名称区与固定状态列。打开成员的子会话需要成员仍在运行、子 id 位于普通会话列表、列表行为 `origin: 'subagent'`、`parentId` 等于当前会话,且列表行仍标记运行——远程、仅地址化、父级不符或终态的行都不可交互。
32
+ 运行使用 32 像素行,带常驻 chevron、行内状态点与状态文字;阶段使用 disclosure 行,在主区显示标题与成员数、在固定尾部显示聚合状态;成员使用 16 像素状态点槽、可省略名称区与固定状态列。打开成员的子 Session 需要成员与子级均在运行,且子级属于当前 Session 的直接子级目录。子级活动状态使用统一 UI status,未知时使用 Session 摘要。Session 摘要不建立成员关系;目录中缺失、父级不符或终态的条目不可交互。
33
33
 
34
34
  ### 状态与完成
35
35
 
package/lib/client.js CHANGED
@@ -168,18 +168,18 @@ window.__ModuleLoader__.load({
168
168
  if (active.length === 0) return statusCount("completed", count("completed"), t);
169
169
  return (active.includes("interrupted") && count("completed") > 0 ? ["completed", ...active] : active).map((status) => statusCount(status, count(status), t)).join(" · ");
170
170
  }
171
- function navigableMembers(sessions, phases, parentId) {
172
- const ordinary = new Set(sessions.ids);
171
+ function navigableMembers(sessions, phases, parentId, statuses) {
172
+ const catalog = sessions.projectionsBySession[parentId];
173
173
  const result = [];
174
174
  for (const phase of phases) for (const member of phase.members) {
175
- const summary = sessions.byId[member.childId];
176
- if (member.status === "running" && ordinary.has(member.childId) && summary?.origin === "subagent" && summary.parentId === parentId && summary.running) result.push(member.childId);
175
+ const child = catalog?.values.subagentCatalog?.find((entry) => entry.id === member.childId);
176
+ if (member.status === "running" && child !== void 0 && (statuses.get(child.id)?.running ?? sessions.byId[child.id]?.running) === true) result.push(member.childId);
177
177
  }
178
178
  return result;
179
179
  }
180
180
  function RunHeader({ children, count, name, onToggle, open, status, t }) {
181
181
  return (0, react_jsx_runtime.jsx)(StatusDisclosure, {
182
- icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutline14, {}),
182
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutlineRegular, {}),
183
183
  title: t("run.title", { name }),
184
184
  open,
185
185
  onToggle,
@@ -264,7 +264,7 @@ window.__ModuleLoader__.load({
264
264
  className: WorkflowRunPanel_module_css_default.phase,
265
265
  onMouseDownCapture: pendingCleanCollapse ? preventPendingHeaderFocus : void 0,
266
266
  children: (0, react_jsx_runtime.jsx)(StatusDisclosure, {
267
- icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutline14, {}),
267
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutlineRegular, {}),
268
268
  title: readablePhase(phase.phase, t),
269
269
  open,
270
270
  onToggle,
@@ -306,7 +306,7 @@ window.__ModuleLoader__.load({
306
306
  });
307
307
  }
308
308
  /** Render one durable workflow run with status-driven run and phase disclosure. */
309
- function WorkflowRunPanel({ node, sessionId, useSessions, openSession, t }) {
309
+ function WorkflowRunPanel({ node, sessionId, useSessions, useSessionStatus, openSession, t }) {
310
310
  const phaseFacts = (0, react.useMemo)(() => node.data.phases.map((phase) => [phase.key, phaseDisclosureFacts(phase)]), [node.data.phases]);
311
311
  const runFacts = (0, react.useMemo)(() => runDisclosureFacts(node.data.status, phaseFacts), [node.data.status, phaseFacts]);
312
312
  const totalMembers = runFacts.activityCount;
@@ -316,7 +316,8 @@ window.__ModuleLoader__.load({
316
316
  }));
317
317
  const runContentRef = (0, react.useRef)(null);
318
318
  const phaseContentRefs = (0, react.useRef)(/* @__PURE__ */ new Map());
319
- const navigable = useSessions((sessions) => navigableMembers(sessions, node.data.phases, sessionId), _deepseek_ai_dsh_client_store.shallowEqual);
319
+ const statuses = useSessionStatus((value) => value);
320
+ const navigable = useSessions((sessions) => navigableMembers(sessions, node.data.phases, sessionId, statuses), _deepseek_ai_dsh_client_store.shallowEqual);
320
321
  (0, react.useLayoutEffect)(() => {
321
322
  setDisclosures((current) => {
322
323
  const phases = /* @__PURE__ */ new Map();
@@ -7,5 +7,5 @@ export interface WorkflowRunInjected {
7
7
  /** Complete keyed Chat renderer props. */
8
8
  export type WorkflowRunPanelProps = PropsRuntime<'conversation.chat.node', 'workflow-run'> & PropsLocale<'workflowRun'> & WorkflowRunInjected;
9
9
  /** Render one durable workflow run with status-driven run and phase disclosure. */
10
- export declare function WorkflowRunPanel({ node, sessionId, useSessions, openSession, t }: WorkflowRunPanelProps): import("react").JSX.Element;
10
+ export declare function WorkflowRunPanel({ node, sessionId, useSessions, useSessionStatus, openSession, t }: WorkflowRunPanelProps): import("react").JSX.Element;
11
11
  //# sourceMappingURL=WorkflowRunPanel.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-workflow-run",
3
3
  "description": "Durable workflow-run Conversation Node and nested member disclosure for dsh web",
4
- "version": "0.1.6-alpha.2",
4
+ "version": "0.1.7-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -46,26 +46,26 @@
46
46
  ],
47
47
  "license": "MIT",
48
48
  "peerDependencies": {
49
- "@deepseek-ai/cordis": "^4.0.2"
49
+ "@deepseek-ai/cordis": "~4.0.4"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/react": "~18.3.1",
53
53
  "react": "^18.2.0",
54
- "@deepseek-ai/dsh-client-store": "^0.1.6-alpha.2",
55
- "@deepseek-ai/dsh-client-locale": "^0.1.6-alpha.2",
56
- "@deepseek-ai/dsh-client-test-runtime": "^0.1.6-alpha.2",
57
- "@deepseek-ai/dsh-client-ui-chat": "^0.1.6-alpha.2",
58
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.6-alpha.2",
59
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.6-alpha.2",
60
- "@deepseek-ai/dsh-api-session-controller": "^0.1.6-alpha.2",
61
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.6-alpha.2",
62
- "@deepseek-ai/dsh-client-ui-session": "^0.1.6-alpha.2",
63
- "@deepseek-ai/dsh-client-ui-workspace": "^0.1.6-alpha.2",
64
- "@deepseek-ai/cordis": "^4.0.2",
65
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.6-alpha.2",
66
- "@deepseek-ai/dsh-tool-workflow": "^0.1.6-alpha.2",
67
- "@deepseek-ai/dsh-workflow": "^0.1.6-alpha.2",
68
- "@deepseek-ai/dsh-session": "^0.1.6-alpha.2"
54
+ "@deepseek-ai/dsh-client-locale": "0.1.7-alpha.2",
55
+ "@deepseek-ai/dsh-client-store": "0.1.7-alpha.2",
56
+ "@deepseek-ai/dsh-client-test-runtime": "0.1.7-alpha.2",
57
+ "@deepseek-ai/dsh-client-ui-chat": "0.1.7-alpha.2",
58
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.7-alpha.2",
59
+ "@deepseek-ai/dsh-api-session-controller": "0.1.7-alpha.2",
60
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-alpha.2",
61
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.7-alpha.2",
62
+ "@deepseek-ai/dsh-client-ui-session": "0.1.7-alpha.2",
63
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-alpha.2",
64
+ "@deepseek-ai/dsh-client-ui-workspace": "0.1.7-alpha.2",
65
+ "@deepseek-ai/dsh-session": "0.1.7-alpha.2",
66
+ "@deepseek-ai/dsh-workflow": "0.1.7-alpha.2",
67
+ "@deepseek-ai/cordis": "~4.0.4",
68
+ "@deepseek-ai/dsh-tool-workflow": "0.1.7-alpha.2"
69
69
  },
70
70
  "scripts": {
71
71
  "bundle": "tsdown",