@deepseek-ai/dsh-client-ui-chat 0.1.7-rc.2 → 0.2.0-rc.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
@@ -6,8 +6,8 @@
6
6
  en: d88f75fc0178ba53
7
7
  zh: 52bc7ae9551ab1cf
8
8
  /deepseek-ai-dsh-client-ui-chat:
9
- en: a0be18d7053df6b0
10
- zh: 28c76e2cc32b7494
9
+ en: 02bd72c12ada3218
10
+ zh: 331b3a38b3ddfc6e
11
11
  /deepseek-ai-dsh-client-ui-chat/summary:
12
12
  en: fba5b2fb8080e2dd
13
13
  zh: 32c337123b7dfbcb
@@ -33,8 +33,8 @@
33
33
  en: 0ca3e8c4eab1ca78
34
34
  zh: 1a1c71bab151eb7d
35
35
  /deepseek-ai-dsh-client-ui-chat/grouped-rendering:
36
- en: cc6718a9ff761114
37
- zh: d734fc73c1b77074
36
+ en: f7b5260bea372361
37
+ zh: 2daa3ff650ec9246
38
38
  /deepseek-ai-dsh-client-ui-chat/scroll-ownership:
39
39
  en: 69b021c5a5d8b5a7
40
40
  zh: 091ae7986c7a8a20
package/README.md CHANGED
@@ -6,6 +6,8 @@ kind: "package-reference"
6
6
 
7
7
  English | [中文](README.zh.md)
8
8
 
9
+ Desktop product events use the optional [product analytics service](../product-analytics/README.md); ordinary Web interactions are excluded.
10
+
9
11
  ## Summary
10
12
 
11
13
  Use this package to render a browser chat from recorded Session conversations, including historical images, localized actions, and restored scroll position. Work-details modes control reasoning previews and process visibility without hiding final answers; Verbose keeps completed-turn process rows visible. Local transcript and steering submissions appear immediately, remain in their original surface, and disappear atomically when authoritative Session records arrive, while queued submissions stay outside Chat. The package does not assemble or modify model requests.
@@ -93,6 +95,8 @@ Live tool deltas share reasoning's frame-batched publication; durable calls and
93
95
 
94
96
  The process group uses a stable `div` layout box, a scroll body, and an uncapped content box that reports growth inside the body. Business styles must adapt spacing within and across groups, including hidden or empty members and the answer-spacing exception. CSS variables do not belong in the Group Definition.
95
97
 
98
+ Running group titles, reasoning previews, tool and command rows, the active retry line, and the bottom running status use the shared [TextShimmer](../ui-primitives/README.md#component-catalog). Each row’s text shares one left-to-right highlight, including collapsed group titles; icons and hover chevrons retain their base appearance. Tool and process rows sit 6px apart. An expanded group title has 8px before its content, Assistant responses have 12px from adjacent process rows, and completed-Turn duration/status controls have 16px around them. Hidden and empty rows, including retained empty slot anchors, add no gap. The running “Deep diving” text retains its blue base while its theme-specific highlight sweeps across it.
99
+
96
100
  Scroll-edge fades initialize when `ResizeObserver` reports the open group's layout; opening the group performs no immediate scroll-dimension read in a layout effect.
97
101
 
98
102
  Each group owns local `useDisclosure` state that survives mode changes while its component stays mounted.
package/README.zh.md CHANGED
@@ -6,6 +6,8 @@ kind: "package-reference"
6
6
 
7
7
  [English](README.md) | 中文
8
8
 
9
+ 桌面端产品事件使用可选的[产品埋点服务](../product-analytics/README.zh.md),不包含普通 Web 交互。
10
+
9
11
  ## 概述
10
12
 
11
13
  使用本包可在浏览器中渲染已记录的 Session 对话,包括历史图片、本地化操作和滚动位置恢复。工作步骤展示模式控制思考预览与过程显隐,不隐藏最终答案;完全展开模式保持已完成轮次的过程行可见。本地 transcript(文本记录)与 steering(中途引导)提交会立即显示并保留在原区域,在权威会话记录到达时原子地消失,而排队中的提交始终不进入 Chat。本包不组装或修改模型请求。
@@ -93,6 +95,8 @@ Chat 通过 `uiConversation.groups` 注册过程 Group Definition。React 通过
93
95
 
94
96
  过程组使用稳定的 `div` 布局盒子、滚动正文及不限高的内容盒子,后者报告正文内部的内容增长。业务样式必须适配组内及组边界间距,处理隐藏或空成员以及回答前的间距特例。CSS 变量不属于 Group Definition。
95
97
 
98
+ 运行中的分组标题、思考预览、工具与命令行、当前重试行以及底部运行状态使用共享的 [TextShimmer](../ui-primitives/README.zh.md#component-catalog)。每行的文字共用一道从左到右的高光,包括折叠的分组标题;图标和悬停箭头保留底色。工具和过程行之间相隔 6px;展开的分组标题与内容之间相隔 8px;Assistant 回复与相邻过程行之间相隔 12px;每轮完成/耗时控件周围保留 16px。隐藏行与空行(包括保留的空 slot 锚点)不产生间距。“深度求索”运行文字保留蓝色底色,并使用主题专用高光扫过文字。
99
+
96
100
  滚动边缘渐隐在 `ResizeObserver` 报告已展开组的布局后初始化;展开组时不会在 layout effect 中立即读取滚动尺寸。
97
101
 
98
102
  每个组拥有本地 `useDisclosure` 状态,组件保持挂载时,模式切换保留该状态。
package/lib/client.js CHANGED
@@ -211,7 +211,7 @@ window.__ModuleLoader__.load({
211
211
  }
212
212
  //#endregion
213
213
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-chat/src/client/chat/MessageItem.module.css.mjs
214
- const css$17 = ".Sixlwa_userRow{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.Sixlwa_userStack{min-width:0;max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);flex-direction:column;align-items:flex-end;gap:8px;display:flex}.Sixlwa_bubble{background:var(--dsw-specific-bubble);border-radius:var(--dsw-radius-xl);max-width:100%;font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;padding:10px 16px}.Sixlwa_referenceSummary{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px))}.Sixlwa_contextRow{padding:2px 0}.Sixlwa_compactionRow{--dsh-compaction-header-height:calc(24px + var(--dsh-content-font-delta,0px));padding:2px 0}.Sixlwa_compactionButton{width:100%;height:var(--dsh-compaction-header-height);border-radius:var(--dsw-radius-sm);min-width:0;color:inherit;font:inherit;text-align:left;background:0 0;border:none;align-items:center;padding:0;display:flex}.Sixlwa_compactionRow:has(.Sixlwa_compactionBody) .Sixlwa_compactionButton{z-index:7;background:var(--dsw-alias-bg-base);border-radius:0;position:sticky;top:0}.Sixlwa_compactionBody :has(>[data-code-block-banner]){top:var(--dsh-compaction-header-height)}.Sixlwa_compactionRow:has(.Sixlwa_compactionBody) .Sixlwa_compactionButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.Sixlwa_compactionButton:not(:disabled){cursor:pointer}.Sixlwa_compactionButton:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}.Sixlwa_compactionLeading{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-secondary);flex:none;place-items:center;margin-right:6px;display:inline-grid}.Sixlwa_compactionLeading svg{width:calc(14px + var(--dsh-content-font-delta,0px));height:calc(14px + var(--dsh-content-font-delta,0px))}.Sixlwa_compactionContextIcon,.Sixlwa_compactionDisclosureIcon{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.Sixlwa_compactionDisclosureIcon,.Sixlwa_compactionButton:not(:disabled):hover .Sixlwa_compactionContextIcon,.Sixlwa_compactionButton:not(:disabled):focus-visible .Sixlwa_compactionContextIcon{opacity:0}.Sixlwa_compactionButton:not(:disabled):hover .Sixlwa_compactionDisclosureIcon,.Sixlwa_compactionButton:not(:disabled):focus-visible .Sixlwa_compactionDisclosureIcon{opacity:1}.Sixlwa_compactionTitle{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-primary-dimmed);flex:none}.Sixlwa_compactionSep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.Sixlwa_compactionSummary{min-width:0;color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.Sixlwa_compactionBody{padding:4px 0 4px calc(22px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px))}.Sixlwa_retryRow{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px))}.Sixlwa_retrySummary{border-radius:var(--dsw-radius-sm);width:fit-content;color:inherit;cursor:pointer;user-select:none;align-items:center;gap:7px;padding:2px 0;list-style:none;display:inline-flex}.Sixlwa_retrySummary::-webkit-details-marker{display:none}.Sixlwa_retrySummary:after{content:\"\";opacity:.8;border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transition:transform .12s;transform:rotate(-45deg)}.Sixlwa_retrySummary:hover{color:var(--dsw-alias-label-secondary)}.Sixlwa_retrySummary:focus-visible{outline:1.5px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.Sixlwa_retryText{color:inherit}.Sixlwa_retryRow[data-active] .Sixlwa_retryText{background:linear-gradient(90deg, var(--dsw-alias-label-tertiary) 0%, var(--dsw-alias-label-tertiary) 40%, var(--dsw-alias-label-secondary) 50%, var(--dsw-alias-label-tertiary) 60%, var(--dsw-alias-label-tertiary) 100%);color:#0000;background-position:100%;background-size:200% 100%;background-clip:text;animation:1.6s ease-in-out infinite Sixlwa_retry-shimmer}.Sixlwa_retryRow[open] .Sixlwa_retrySummary:after{transform:rotate(45deg)}.Sixlwa_retryDetails{overflow-wrap:anywhere;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px));gap:2px;margin-top:3px;padding-left:14px;display:grid}.Sixlwa_retryDetailLabel{color:var(--dsw-alias-label-secondary)}.Sixlwa_turnErrorRow{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));grid-template-columns:10px minmax(0,1fr) auto;align-items:start;gap:8px;padding:2px 0;display:grid}.Sixlwa_turnErrorDot{margin-top:5px}.Sixlwa_turnErrorCopy{overflow-wrap:anywhere;min-width:0}.Sixlwa_turnErrorTitle{color:var(--dsw-alias-state-error-primary);margin-right:6px;font-weight:600}.Sixlwa_turnErrorMessage{color:var(--dsw-alias-label-secondary)}.Sixlwa_turnErrorCode{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-markdown-code-block-small)}.Sixlwa_maxTokensTitle{color:var(--dsw-alias-state-warn-primary);margin-right:6px;font-weight:600}@keyframes Sixlwa_retry-shimmer{0%{background-position:100%}to{background-position:0}}@media (prefers-reduced-motion:reduce){.Sixlwa_retryRow[data-active] .Sixlwa_retryText{color:inherit;background:0 0;animation:none}}.Sixlwa_attachmentRow{flex-wrap:wrap;justify-content:flex-end;gap:8px;max-width:100%;display:flex}.Sixlwa_fileCard{border:.5px solid var(--dsw-alias-border-l2,#0000001f);border-radius:var(--dsw-radius-xl);background:var(--dsw-specific-input-major,transparent);box-sizing:border-box;flex:0 0 240px;align-items:center;gap:10px;width:240px;min-height:64px;padding:8px 12px;display:inline-flex}.Sixlwa_fileIcon{flex:none;width:28px;height:28px}.Sixlwa_fileContent{flex-direction:column;flex:1;min-width:0;display:flex}.Sixlwa_fileName{white-space:nowrap;text-overflow:ellipsis;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:22px;overflow:hidden}.Sixlwa_fileMeta{white-space:nowrap;text-overflow:ellipsis;color:var(--dsw-alias-label-tertiary,#00000073);font-size:12px;line-height:15px;overflow:hidden}";
214
+ const css$17 = ".Sixlwa_userRow{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.Sixlwa_userStack{min-width:0;max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);flex-direction:column;align-items:flex-end;gap:8px;display:flex}.Sixlwa_bubble{background:var(--dsw-specific-bubble);border-radius:var(--dsw-radius-xl);max-width:100%;font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;padding:10px 16px}.Sixlwa_referenceSummary{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px))}.Sixlwa_contextRow{padding:2px 0}.Sixlwa_compactionRow{--dsh-compaction-header-height:calc(24px + var(--dsh-content-font-delta,0px));padding:2px 0}.Sixlwa_compactionButton{width:100%;height:var(--dsh-compaction-header-height);border-radius:var(--dsw-radius-sm);min-width:0;color:inherit;font:inherit;text-align:left;background:0 0;border:none;align-items:center;padding:0;display:flex}.Sixlwa_compactionRow:has(.Sixlwa_compactionBody) .Sixlwa_compactionButton{z-index:7;background:var(--dsw-alias-bg-base);border-radius:0;position:sticky;top:0}.Sixlwa_compactionBody :has(>[data-code-block-banner]){top:var(--dsh-compaction-header-height)}.Sixlwa_compactionRow:has(.Sixlwa_compactionBody) .Sixlwa_compactionButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.Sixlwa_compactionButton:not(:disabled){cursor:pointer}.Sixlwa_compactionButton:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}.Sixlwa_compactionLeading{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-secondary);flex:none;place-items:center;margin-right:6px;display:inline-grid}.Sixlwa_compactionLeading svg{width:calc(14px + var(--dsh-content-font-delta,0px));height:calc(14px + var(--dsh-content-font-delta,0px))}.Sixlwa_compactionContextIcon,.Sixlwa_compactionDisclosureIcon{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.Sixlwa_compactionDisclosureIcon,.Sixlwa_compactionButton:not(:disabled):hover .Sixlwa_compactionContextIcon,.Sixlwa_compactionButton:not(:disabled):focus-visible .Sixlwa_compactionContextIcon{opacity:0}.Sixlwa_compactionButton:not(:disabled):hover .Sixlwa_compactionDisclosureIcon,.Sixlwa_compactionButton:not(:disabled):focus-visible .Sixlwa_compactionDisclosureIcon{opacity:1}.Sixlwa_compactionTitle{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-primary-dimmed);flex:none}.Sixlwa_compactionSep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.Sixlwa_compactionSummary{min-width:0;color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.Sixlwa_compactionBody{padding:4px 0 4px calc(22px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px))}.Sixlwa_retryRow{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px))}.Sixlwa_retrySummary{border-radius:var(--dsw-radius-sm);width:fit-content;max-width:100%;color:inherit;cursor:pointer;user-select:none;align-items:center;gap:7px;padding:2px 0;list-style:none;display:inline-flex}.Sixlwa_retrySummary::-webkit-details-marker{display:none}.Sixlwa_retrySummary:after{content:\"\";opacity:.8;border-bottom:1.5px solid;border-right:1.5px solid;flex:none;width:6px;height:6px;margin-right:2px;transition:transform .12s;transform:rotate(-45deg)}.Sixlwa_retrySummary:hover{color:var(--dsw-alias-label-secondary)}.Sixlwa_retrySummary:focus-visible{outline:1.5px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.Sixlwa_retryText{overflow-wrap:anywhere;min-width:0}.Sixlwa_retryRow[open] .Sixlwa_retrySummary:after{transform:rotate(45deg)}.Sixlwa_retryDetails{overflow-wrap:anywhere;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px));gap:2px;margin-top:3px;padding-left:14px;display:grid}.Sixlwa_retryDetailLabel{color:var(--dsw-alias-label-secondary)}.Sixlwa_turnErrorRow{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));grid-template-columns:10px minmax(0,1fr) auto;align-items:start;gap:8px;padding:2px 0;display:grid}.Sixlwa_turnErrorDot{margin-top:5px}.Sixlwa_turnErrorCopy{overflow-wrap:anywhere;min-width:0}.Sixlwa_turnErrorTitle{color:var(--dsw-alias-state-error-primary);margin-right:6px;font-weight:600}.Sixlwa_turnErrorMessage{color:var(--dsw-alias-label-secondary)}.Sixlwa_turnErrorCode{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-markdown-code-block-small)}.Sixlwa_maxTokensTitle{color:var(--dsw-alias-state-warn-primary);margin-right:6px;font-weight:600}.Sixlwa_attachmentRow{flex-wrap:wrap;justify-content:flex-end;gap:8px;max-width:100%;display:flex}.Sixlwa_fileCard{border:.5px solid var(--dsw-alias-border-l2,#0000001f);border-radius:var(--dsw-radius-xl);background:var(--dsw-specific-input-major,transparent);box-sizing:border-box;flex:0 0 240px;align-items:center;gap:10px;width:240px;min-height:64px;padding:8px 12px;display:inline-flex}.Sixlwa_fileIcon{flex:none;width:28px;height:28px}.Sixlwa_fileContent{flex-direction:column;flex:1;min-width:0;display:flex}.Sixlwa_fileName{white-space:nowrap;text-overflow:ellipsis;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:22px;overflow:hidden}.Sixlwa_fileMeta{white-space:nowrap;text-overflow:ellipsis;color:var(--dsw-alias-label-tertiary,#00000073);font-size:12px;line-height:15px;overflow:hidden}";
215
215
  const tagId$17 = "@deepseek-ai/dsh-client-ui-chat/MessageItem.module.css";
216
216
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$17) + "]") === null) {
217
217
  const tag = document.createElement("style");
@@ -240,7 +240,6 @@ window.__ModuleLoader__.load({
240
240
  "fileName": "Sixlwa_fileName",
241
241
  "maxTokensTitle": "Sixlwa_maxTokensTitle",
242
242
  "referenceSummary": "Sixlwa_referenceSummary",
243
- "retry-shimmer": "Sixlwa_retry-shimmer",
244
243
  "retryDetailLabel": "Sixlwa_retryDetailLabel",
245
244
  "retryDetails": "Sixlwa_retryDetails",
246
245
  "retryRow": "Sixlwa_retryRow",
@@ -1269,11 +1268,14 @@ window.__ModuleLoader__.load({
1269
1268
  children: (0, react_jsx_runtime.jsx)("span", {
1270
1269
  className: MessageItem_module_css_default.retryText,
1271
1270
  role: "status",
1272
- children: t("message.retry.status", {
1273
- label,
1274
- retry: node.retry,
1275
- maximum,
1276
- seconds
1271
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, {
1272
+ active,
1273
+ children: t("message.retry.status", {
1274
+ label,
1275
+ retry: node.retry,
1276
+ maximum,
1277
+ seconds
1278
+ })
1277
1279
  })
1278
1280
  })
1279
1281
  }), (0, react_jsx_runtime.jsxs)("div", {
@@ -1627,7 +1629,7 @@ window.__ModuleLoader__.load({
1627
1629
  }
1628
1630
  //#endregion
1629
1631
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-chat/src/client/chat/ChatView.module.css.mjs
1630
- const css$13 = ".EvIC1a_frame{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative;container-type:inline-size}.EvIC1a_root{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative;overflow:visible clip}.EvIC1a_scroll{min-height:0;padding:16px calc(var(--dsh-composer-side-clearance) + 16px);flex:auto;overflow-y:auto;container-type:inline-size}.EvIC1a_root[data-chat-following-tail] .EvIC1a_scroll,[data-conversation-scroll]:has(.EvIC1a_root[data-chat-following-tail]){overflow-anchor:none}[data-conversation-scroll] .EvIC1a_frame,[data-conversation-scroll] .EvIC1a_root{flex:none;height:auto;min-height:auto}[data-conversation-scroll] .EvIC1a_scroll{flex:none;min-height:auto;overflow:visible}.EvIC1a_column{max-width:var(--dsh-chat-content-width);flex-direction:column;width:100%;margin:0 auto;display:flex}.EvIC1a_column>:not([hidden]):not(.EvIC1a_flowItem:empty)~:not([hidden]):not(.EvIC1a_flowItem:empty){margin-top:var(--dsh-chat-flow-gap,16px)}.EvIC1a_flowItem{min-width:0}.EvIC1a_flowItem[data-turn-process-answer]{--dsh-chat-flow-gap:8px}.EvIC1a_flowItem:empty{height:0}.EvIC1a_callRow{border-radius:var(--dsw-radius-sm)}.EvIC1a_hint{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px))}.EvIC1a_openError{color:var(--dsw-alias-state-error-primary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px))}.EvIC1a_older{justify-content:center;display:flex}.EvIC1a_older button{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover-solid);cursor:pointer;border:none;padding:4px 12px;font-size:12px}.EvIC1a_older button:disabled{cursor:default;opacity:.6}.EvIC1a_toBottomSlot{z-index:8;height:0;padding-right:max(calc(var(--dsh-composer-side-clearance) + 16px), calc((100% - var(--dsh-chat-content-width)) / 2));pointer-events:none;justify-content:flex-end;display:flex;position:absolute;bottom:16px;left:0;right:0}[data-conversation-scroll] .EvIC1a_toBottomSlot{bottom:calc(var(--dsh-composer-height,152px) + 16px);position:sticky}.EvIC1a_toBottom{--dsw-elevation-stroke-color:var(--dsw-alias-border-l3);corner-shape:round;width:34px;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-floating-fill);box-shadow:var(--dsw-elevation-panel);cursor:pointer;pointer-events:auto;border:0;border-radius:100px;justify-content:center;align-items:center;margin-top:-34px;padding:0;display:flex}.EvIC1a_toBottom:hover{background:var(--dsw-alias-button-floating-hover)}.EvIC1a_modalAction{min-width:72px}";
1632
+ const css$13 = ".EvIC1a_frame{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative;container-type:inline-size}.EvIC1a_root{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative;overflow:visible clip}.EvIC1a_scroll{min-height:0;padding:16px calc(var(--dsh-composer-side-clearance) + 16px);flex:auto;overflow-y:auto;container-type:inline-size}.EvIC1a_root[data-chat-following-tail] .EvIC1a_scroll,[data-conversation-scroll]:has(.EvIC1a_root[data-chat-following-tail]){overflow-anchor:none}[data-conversation-scroll] .EvIC1a_frame,[data-conversation-scroll] .EvIC1a_root{flex:none;height:auto;min-height:auto}[data-conversation-scroll] .EvIC1a_scroll{flex:none;min-height:auto;overflow:visible}.EvIC1a_column{max-width:var(--dsh-chat-content-width);flex-direction:column;width:100%;margin:0 auto;display:flex}.EvIC1a_column>:not([hidden]):not(.EvIC1a_flowItem:is(:empty,:has(>[data-slot=\"conversation.chat.node\"]:empty)))~:not([hidden]):not(.EvIC1a_flowItem:is(:empty,:has(>[data-slot=\"conversation.chat.node\"]:empty))){margin-top:var(--dsh-chat-flow-gap,6px)}.EvIC1a_flowItem[data-chat-group-part=response],.EvIC1a_column>[data-chat-group-part=response]:not([hidden]):not(:empty)+:not([hidden]):not(.EvIC1a_flowItem:is(:empty,:has(>[data-slot=\"conversation.chat.node\"]:empty))):not(.EvIC1a_running){--dsh-chat-flow-gap:12px}.EvIC1a_flowItem{min-width:0}.EvIC1a_flowItem[data-chat-flow-kind=turn-process],.EvIC1a_flowItem[data-turn-process-answer],.EvIC1a_column>[data-chat-flow-kind=turn-process]+:not([hidden]):not(.EvIC1a_flowItem:is(:empty,:has(>[data-slot=\"conversation.chat.node\"]:empty))):not(.EvIC1a_running){--dsh-chat-flow-gap:16px}.EvIC1a_flowItem:is(:empty,:has(>[data-slot=\"conversation.chat.node\"]:empty)){height:0}.EvIC1a_callRow{border-radius:var(--dsw-radius-sm)}.EvIC1a_hint{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px))}.EvIC1a_running{--dsh-chat-flow-gap:12px;--dsw-alias-label-shimmer:var(--dsw-alias-label-deep-diving-shimmer);color:var(--dsw-alias-label-deep-diving);font-size:calc(var(--dsh-content-font-size,14px) - 2px);line-height:calc(22px + var(--dsh-content-font-delta,0px));flex-direction:column;align-items:flex-start;display:flex}.EvIC1a_column>:nth-last-child(2 of :not([hidden]):not(.EvIC1a_flowItem:is(:empty,:has(>[data-slot=\"conversation.chat.node\"]:empty)))):is(.EvIC1a_flowItem:not([data-chat-flow-kind=user]):not([data-chat-flow-kind=steering]):not([data-chat-flow-kind=turn-trigger]),[data-chat-group-key])~.EvIC1a_running>.EvIC1a_runningDivider{display:block}.EvIC1a_runningDivider{background:color-mix(in srgb, var(--dsw-alias-border-l1) 75%, var(--dsw-alias-border-l2));pointer-events:none;width:100%;height:.5px;margin:8px 0 10px;display:none}.EvIC1a_runningContent{align-items:center;gap:6px;min-width:0;display:inline-flex}.EvIC1a_runningText{font-variant-numeric:tabular-nums;min-width:0}.EvIC1a_runningIcon{width:calc(14px + var(--dsh-content-font-delta,0px));height:calc(14px + var(--dsh-content-font-delta,0px));flex:none;display:inline-flex}.EvIC1a_runningWhaleStill{display:none}@media (prefers-reduced-motion:reduce){.EvIC1a_runningWhaleAnimated{display:none}.EvIC1a_runningWhaleStill{display:initial}}.EvIC1a_openError{color:var(--dsw-alias-state-error-primary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px))}.EvIC1a_older{justify-content:center;display:flex}.EvIC1a_older button{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover-solid);cursor:pointer;border:none;padding:4px 12px;font-size:12px}.EvIC1a_older button:disabled{cursor:default;opacity:.6}.EvIC1a_toBottomSlot{z-index:8;height:0;padding-right:max(calc(var(--dsh-composer-side-clearance) + 16px), calc((100% - var(--dsh-chat-content-width)) / 2));pointer-events:none;justify-content:flex-end;display:flex;position:absolute;bottom:16px;left:0;right:0}[data-conversation-scroll] .EvIC1a_toBottomSlot{bottom:calc(var(--dsh-composer-height,152px) + 16px);position:sticky}.EvIC1a_toBottom{--dsw-elevation-stroke-color:var(--dsw-alias-border-l3);corner-shape:round;width:34px;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-floating-fill);box-shadow:var(--dsw-elevation-panel);cursor:pointer;pointer-events:auto;border:0;border-radius:100px;justify-content:center;align-items:center;margin-top:-34px;padding:0;display:flex}.EvIC1a_toBottom:hover{background:var(--dsw-alias-button-floating-hover)}.EvIC1a_modalAction{min-width:72px}";
1631
1633
  const tagId$13 = "@deepseek-ai/dsh-client-ui-chat/ChatView.module.css";
1632
1634
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]") === null) {
1633
1635
  const tag = document.createElement("style");
@@ -1646,6 +1648,13 @@ window.__ModuleLoader__.load({
1646
1648
  "older": "EvIC1a_older",
1647
1649
  "openError": "EvIC1a_openError",
1648
1650
  "root": "EvIC1a_root",
1651
+ "running": "EvIC1a_running",
1652
+ "runningContent": "EvIC1a_runningContent",
1653
+ "runningDivider": "EvIC1a_runningDivider",
1654
+ "runningIcon": "EvIC1a_runningIcon",
1655
+ "runningText": "EvIC1a_runningText",
1656
+ "runningWhaleAnimated": "EvIC1a_runningWhaleAnimated",
1657
+ "runningWhaleStill": "EvIC1a_runningWhaleStill",
1649
1658
  "scroll": "EvIC1a_scroll",
1650
1659
  "toBottom": "EvIC1a_toBottom",
1651
1660
  "toBottomSlot": "EvIC1a_toBottomSlot"
@@ -2157,7 +2166,7 @@ window.__ModuleLoader__.load({
2157
2166
  }
2158
2167
  //#endregion
2159
2168
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-chat/src/client/chat/ChatGroupSeat.module.css.mjs
2160
- const css$12 = ".O_Ebla_root{min-width:0}.O_Ebla_title{max-width:100%;color:var(--dsw-alias-label-secondary);font:inherit;font-size:var(--dsh-content-font-size,14px);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0;transition:color .1s;display:flex}.O_Ebla_title:hover{color:var(--dsw-alias-label-primary)}.O_Ebla_leading{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.O_Ebla_activityIcon,.O_Ebla_chevron{justify-content:center;align-items:center;transition:opacity .1s;display:inline-flex;position:absolute;inset:0}.O_Ebla_activityIcon{opacity:1}.O_Ebla_chevron,.O_Ebla_title:is(:hover,:focus-visible) .O_Ebla_activityIcon{opacity:0}.O_Ebla_title:is(:hover,:focus-visible) .O_Ebla_chevron{opacity:1}.O_Ebla_title[aria-expanded=true] .O_Ebla_activityIcon{opacity:0}.O_Ebla_title[aria-expanded=true] .O_Ebla_chevron{opacity:1}.O_Ebla_title[aria-expanded=true]{padding-bottom:16px}.O_Ebla_body{--dsh-chat-flow-gap:8px;overscroll-behavior-y:auto;scrollbar-gutter:stable;max-height:min(400px,50vh);overflow-y:auto}.O_Ebla_label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.O_Ebla_fadeTop{mask-image:linear-gradient(#0000 0,#000 24px 100%)}.O_Ebla_fadeBottom{mask-image:linear-gradient(#000 0 calc(100% - 24px),#0000 100%)}.O_Ebla_fadeTop.O_Ebla_fadeBottom{mask-image:linear-gradient(#0000 0,#000 24px calc(100% - 24px),#0000 100%)}@media (prefers-reduced-motion:reduce){.O_Ebla_title,.O_Ebla_activityIcon,.O_Ebla_chevron{transition:none}}.O_Ebla_content{flex-direction:column;display:flex}.O_Ebla_content>*{flex-shrink:0}.O_Ebla_content>:not([hidden]):not(:empty)~:not([hidden]):not(:empty){margin-top:var(--dsh-chat-flow-gap,8px)}.O_Ebla_expandedBody{--dsh-chat-flow-gap:16px;scrollbar-gutter:auto;max-height:none;overflow:visible}";
2169
+ const css$12 = ".O_Ebla_root{min-width:0}.O_Ebla_title{max-width:100%;color:var(--dsw-alias-label-secondary);font:inherit;font-size:var(--dsh-content-font-size,14px);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0;transition:color .1s;display:flex}.O_Ebla_title:hover{color:var(--dsw-alias-label-primary)}.O_Ebla_leading{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.O_Ebla_activityIcon,.O_Ebla_chevron{justify-content:center;align-items:center;transition:opacity .1s;display:inline-flex;position:absolute;inset:0}.O_Ebla_activityIcon{opacity:1}.O_Ebla_chevron,.O_Ebla_title:is(:hover,:focus-visible) .O_Ebla_activityIcon{opacity:0}.O_Ebla_title:is(:hover,:focus-visible) .O_Ebla_chevron{opacity:1}.O_Ebla_title[aria-expanded=true] .O_Ebla_activityIcon{opacity:0}.O_Ebla_title[aria-expanded=true] .O_Ebla_chevron{opacity:1}.O_Ebla_title[aria-expanded=true]{padding-bottom:8px}.O_Ebla_body{--dsh-chat-flow-gap:6px;overscroll-behavior-y:auto;scrollbar-gutter:stable;max-height:min(400px,50vh);overflow-y:auto}.O_Ebla_label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.O_Ebla_fadeTop{mask-image:linear-gradient(#0000 0,#000 24px 100%)}.O_Ebla_fadeBottom{mask-image:linear-gradient(#000 0 calc(100% - 24px),#0000 100%)}.O_Ebla_fadeTop.O_Ebla_fadeBottom{mask-image:linear-gradient(#0000 0,#000 24px calc(100% - 24px),#0000 100%)}@media (prefers-reduced-motion:reduce){.O_Ebla_title,.O_Ebla_activityIcon,.O_Ebla_chevron{transition:none}}.O_Ebla_content{flex-direction:column;display:flex}.O_Ebla_content>*{flex-shrink:0}.O_Ebla_content>:not([hidden]):not(:empty)~:not([hidden]):not(:empty){margin-top:var(--dsh-chat-flow-gap,6px)}.O_Ebla_expandedBody{scrollbar-gutter:auto;max-height:none;overflow:visible}";
2161
2170
  const tagId$12 = "@deepseek-ai/dsh-client-ui-chat/ChatGroupSeat.module.css";
2162
2171
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$12) + "]") === null) {
2163
2172
  const tag = document.createElement("style");
@@ -2278,8 +2287,10 @@ window.__ModuleLoader__.load({
2278
2287
  })]
2279
2288
  }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, {
2280
2289
  active: !data.closed,
2281
- className: ChatGroupSeat_module_css_default.label,
2282
- children: title
2290
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, {
2291
+ className: ChatGroupSeat_module_css_default.label,
2292
+ children: title
2293
+ })
2283
2294
  })]
2284
2295
  });
2285
2296
  });
@@ -2414,7 +2425,7 @@ window.__ModuleLoader__.load({
2414
2425
  }
2415
2426
  //#endregion
2416
2427
  //#region ../../../node_modules/.pnpm/@tanstack+virtual-core@3.17.7/node_modules/@tanstack/virtual-core/dist/esm/utils.js
2417
- function memo$11(getDeps, fn, opts) {
2428
+ function memo$12(getDeps, fn, opts) {
2418
2429
  let deps = opts.initialDeps ?? [];
2419
2430
  let result;
2420
2431
  let isInitial = true;
@@ -2724,7 +2735,7 @@ window.__ModuleLoader__.load({
2724
2735
  var _a, _b;
2725
2736
  (_b = (_a = this.options).onChange) == null || _b.call(_a, this, sync);
2726
2737
  };
2727
- this.maybeNotify = memo$11(() => {
2738
+ this.maybeNotify = memo$12(() => {
2728
2739
  this.calculateRange();
2729
2740
  return [
2730
2741
  this.isScrolling,
@@ -2879,7 +2890,7 @@ window.__ModuleLoader__.load({
2879
2890
  this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === "function" ? this.options.initialOffset() : this.options.initialOffset);
2880
2891
  return this.scrollOffset;
2881
2892
  };
2882
- this.getMeasurementOptions = memo$11(() => [
2893
+ this.getMeasurementOptions = memo$12(() => [
2883
2894
  this.options.count,
2884
2895
  this.options.paddingStart,
2885
2896
  this.options.scrollMargin,
@@ -2903,7 +2914,7 @@ window.__ModuleLoader__.load({
2903
2914
  gap
2904
2915
  };
2905
2916
  }, { key: false });
2906
- this.getMeasurements = memo$11(() => [this.getMeasurementOptions(), this.itemSizeCacheVersion], ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode, gap }, _itemSizeCacheVersion) => {
2917
+ this.getMeasurements = memo$12(() => [this.getMeasurementOptions(), this.itemSizeCacheVersion], ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode, gap }, _itemSizeCacheVersion) => {
2907
2918
  const itemSizeCache = this.itemSizeCache;
2908
2919
  if (!enabled) {
2909
2920
  this.measurementsCache = [];
@@ -3022,7 +3033,7 @@ window.__ModuleLoader__.load({
3022
3033
  key: false,
3023
3034
  debug: () => this.options.debug
3024
3035
  });
3025
- this.calculateRange = memo$11(() => [
3036
+ this.calculateRange = memo$12(() => [
3026
3037
  this.getMeasurements(),
3027
3038
  this.getSize(),
3028
3039
  this.getScrollOffset(),
@@ -3038,7 +3049,7 @@ window.__ModuleLoader__.load({
3038
3049
  key: false,
3039
3050
  debug: () => this.options.debug
3040
3051
  });
3041
- this.getVirtualIndexes = memo$11(() => {
3052
+ this.getVirtualIndexes = memo$12(() => {
3042
3053
  let startIndex = null;
3043
3054
  let endIndex = null;
3044
3055
  const range = this.calculateRange();
@@ -3152,7 +3163,7 @@ window.__ModuleLoader__.load({
3152
3163
  this.notify(adjustedSync);
3153
3164
  }
3154
3165
  };
3155
- this.getVirtualItems = memo$11(() => [this.getVirtualIndexes(), this.getMeasurements()], (indexes, measurements) => {
3166
+ this.getVirtualItems = memo$12(() => [this.getVirtualIndexes(), this.getMeasurements()], (indexes, measurements) => {
3156
3167
  const virtualItems = [];
3157
3168
  for (let k = 0, len = indexes.length; k < len; k++) {
3158
3169
  const measurement = measurements[indexes[k]];
@@ -3855,6 +3866,131 @@ window.__ModuleLoader__.load({
3855
3866
  */
3856
3867
  const TurnNavigator = (0, react.memo)((0, react.forwardRef)(TurnNavigatorRail));
3857
3868
  //#endregion
3869
+ //#region lib/types/client/chat/RunningWhaleTail.js
3870
+ /** Native SVG contour animation for the whale Chat shows while the Session runs. */
3871
+ const REST_PATH = "M8.844 13.742C8.967 12.328 8.45 10.4 8.45 9.65C8.45 8.94 8.88 8.43 9.6 8.43C11.285 8.43 12.106 8.281 12.685 8.104C13.71 7.791 14.585 6.768 15.055 5.945C15.137 5.803 14.99 5.641 14.829 5.671C13.829 5.86 12.828 5.376 11.827 4.978C10.659 4.514 9.491 4.707 8.935 4.876C8.805 4.915 8.658 4.819 8.636 4.686C8.468 3.643 7.405 2.615 5.498 2.238C4.54 2.048 3.748 1.574 3.347 1.202C3.252 1.113 3.088 1.125 3.03 1.242C2.628 2.059 2.168 3.82 5.248 6.115C5.82 6.494 6.31 6.785 6.574 7.637C6.72 8.104 6.157 9.168 6.061 9.368C5.157 11.27 5.089 12.19 4.926 13.742";
3872
+ /** Same cubic segments in every pose keep both tail-base endpoints stationary. */
3873
+ const MOTION_PATHS = [
3874
+ REST_PATH,
3875
+ REST_PATH,
3876
+ "M8.844 13.742C8.967 12.328 8.453 10.404 8.455 9.655C8.457 8.946 8.89 8.438 9.61 8.441C11.295 8.448 12.116 8.302 12.696 8.127C13.722 7.818 14.601 6.796 15.074 5.97C15.156 5.827 15.01 5.663 14.849 5.693C13.848 5.881 12.848 5.391 11.849 4.989C10.681 4.521 9.513 4.712 8.956 4.88C8.827 4.919 8.679 4.823 8.658 4.689C8.492 3.645 7.429 2.615 5.523 2.237C4.565 2.047 3.773 1.572 3.373 1.201C3.277 1.112 3.113 1.124 3.056 1.241C2.653 2.057 2.193 3.808 5.267 6.11C5.837 6.49 6.326 6.782 6.587 7.636C6.73 8.103 6.164 9.165 6.068 9.365C5.157 11.265 5.089 12.19 4.926 13.742",
3877
+ "M8.844 13.742C8.967 12.328 8.476 10.437 8.498 9.697C8.519 8.997 8.969 8.506 9.689 8.533C11.373 8.596 12.198 8.481 12.784 8.327C13.82 8.055 14.734 7.049 15.232 6.219C15.318 6.075 15.177 5.903 15.015 5.93C14.009 6.092 13.025 5.562 12.037 5.128C10.883 4.62 9.709 4.785 9.148 4.939C9.018 4.975 8.873 4.874 8.856 4.739C8.717 3.685 7.676 2.629 5.778 2.213C4.824 2.004 4.041 1.515 3.649 1.136C3.555 1.045 3.391 1.054 3.331 1.17C2.912 1.978 2.423 3.678 5.425 6.063C5.984 6.458 6.463 6.766 6.695 7.627C6.823 8.099 6.221 9.144 6.12 9.342C5.154 11.226 5.089 12.19 4.926 13.742",
3878
+ "M8.844 13.742C8.967 12.328 8.473 10.432 8.492 9.69C8.51 8.989 8.957 8.495 9.676 8.519C11.361 8.573 12.186 8.453 12.771 8.298C13.805 8.023 14.714 7.034 15.213 6.234C15.299 6.095 15.158 5.929 14.996 5.954C13.99 6.106 13.007 5.59 12.021 5.158C10.87 4.655 9.696 4.804 9.134 4.952C9.003 4.987 8.859 4.886 8.842 4.752C8.712 3.706 7.688 2.639 5.797 2.19C4.847 1.964 4.073 1.459 3.688 1.072C3.595 0.98 3.431 0.986 3.369 1.101C2.936 1.901 2.407 3.656 5.406 6.06C5.964 6.459 6.443 6.767 6.679 7.628C6.808 8.099 6.212 9.147 6.111 9.346C5.155 11.233 5.089 12.19 4.926 13.742",
3879
+ "M8.844 13.742C8.967 12.328 8.457 10.41 8.463 9.662C8.469 8.955 8.904 8.45 9.624 8.458C11.309 8.475 12.131 8.335 12.713 8.167C13.741 7.87 14.627 6.885 15.113 6.112C15.198 5.978 15.055 5.821 14.893 5.846C13.889 6.004 12.898 5.52 11.908 5.109C10.752 4.629 9.579 4.78 9.019 4.932C8.889 4.967 8.744 4.868 8.726 4.736C8.587 3.701 7.565 2.64 5.676 2.183C4.726 1.954 3.954 1.444 3.57 1.055C3.479 0.962 3.314 0.967 3.252 1.082C2.815 1.881 2.27 3.708 5.305 6.084C5.87 6.477 6.353 6.777 6.607 7.633C6.747 8.102 6.174 9.161 6.077 9.361C5.156 11.258 5.089 12.19 4.926 13.742",
3880
+ "M8.844 13.742C8.967 12.328 8.425 10.366 8.403 9.607C8.383 8.888 8.794 8.361 9.513 8.335C11.197 8.276 12.012 8.096 12.585 7.897C13.598 7.547 14.436 6.515 14.883 5.708C14.961 5.569 14.81 5.417 14.65 5.45C13.655 5.661 12.641 5.221 11.631 4.858C10.452 4.434 9.289 4.648 8.737 4.828C8.608 4.871 8.459 4.779 8.434 4.647C8.242 3.618 7.163 2.612 5.252 2.261C4.29 2.084 3.492 1.618 3.087 1.252C2.99 1.164 2.826 1.178 2.77 1.296C2.378 2.118 1.937 3.949 5.086 6.167C5.669 6.531 6.167 6.806 6.461 7.649C6.623 8.111 6.097 9.191 6.008 9.393C5.161 11.31 5.089 12.19 4.926 13.742",
3881
+ "M8.844 13.742C8.967 12.328 8.426 10.368 8.407 9.61C8.388 8.892 8.8 8.365 9.52 8.342C11.204 8.286 12.019 8.107 12.592 7.907C13.605 7.553 14.443 6.483 14.878 5.614C14.954 5.464 14.8 5.302 14.641 5.34C13.649 5.577 12.629 5.12 11.611 4.759C10.422 4.338 9.264 4.59 8.716 4.786C8.589 4.832 8.437 4.742 8.409 4.608C8.193 3.567 7.074 2.592 5.15 2.321C4.183 2.185 3.365 1.758 2.945 1.409C2.845 1.326 2.682 1.347 2.631 1.467C2.275 2.305 1.917 4.029 5.086 6.183C5.673 6.536 6.174 6.807 6.469 7.649C6.63 8.11 6.101 9.189 6.012 9.391C5.16 11.307 5.089 12.19 4.926 13.742",
3882
+ "M8.844 13.742C8.967 12.328 8.439 10.385 8.43 9.631C8.421 8.917 8.843 8.399 9.563 8.388C11.248 8.362 12.066 8.198 12.642 8.008C13.661 7.672 14.517 6.601 14.963 5.717C15.04 5.564 14.889 5.396 14.729 5.433C13.735 5.663 12.719 5.181 11.705 4.804C10.52 4.364 9.36 4.611 8.81 4.803C8.682 4.847 8.531 4.755 8.505 4.621C8.297 3.572 7.181 2.589 5.257 2.315C4.29 2.178 3.473 1.751 3.053 1.402C2.953 1.319 2.79 1.34 2.739 1.46C2.382 2.297 2.024 3.975 5.165 6.16C5.747 6.519 6.244 6.796 6.524 7.643C6.678 8.106 6.131 9.178 6.038 9.379C5.159 11.288 5.089 12.19 4.926 13.742",
3883
+ "M8.844 13.742C8.967 12.328 8.462 10.417 8.472 9.671C8.481 8.965 8.921 8.464 9.64 8.476C11.325 8.505 12.149 8.371 12.731 8.204C13.761 7.908 14.653 6.889 15.135 6.057C15.218 5.913 15.074 5.746 14.913 5.775C13.91 5.954 12.916 5.448 11.919 5.034C10.757 4.551 9.586 4.735 9.028 4.899C8.898 4.937 8.752 4.839 8.732 4.705C8.575 3.656 7.517 2.618 5.613 2.231C4.655 2.037 3.865 1.56 3.467 1.186C3.372 1.097 3.208 1.108 3.149 1.225C2.743 2.039 2.278 3.763 5.327 6.093C5.893 6.478 6.379 6.776 6.629 7.632C6.766 8.101 6.186 9.157 6.088 9.356C5.156 11.25 5.089 12.19 4.926 13.742",
3884
+ "M8.844 13.742C8.967 12.328 8.463 10.418 8.474 9.673C8.485 8.968 8.925 8.468 9.645 8.482C11.33 8.513 12.153 8.381 12.736 8.218C13.766 7.929 14.661 6.94 15.152 6.153C15.237 6.017 15.095 5.856 14.933 5.881C13.928 6.038 12.94 5.541 11.951 5.122C10.796 4.633 9.623 4.786 9.062 4.937C8.932 4.972 8.787 4.873 8.77 4.739C8.633 3.699 7.608 2.638 5.717 2.189C4.766 1.963 3.993 1.457 3.607 1.07C3.515 0.977 3.351 0.983 3.288 1.098C2.855 1.899 2.321 3.692 5.344 6.075C5.906 6.47 6.388 6.773 6.635 7.631C6.771 8.101 6.189 9.155 6.09 9.355C5.156 11.248 5.089 12.19 4.926 13.742",
3885
+ "M8.844 13.742C8.967 12.328 8.436 10.381 8.425 9.626C8.414 8.911 8.833 8.391 9.553 8.377C11.238 8.344 12.055 8.178 12.631 7.987C13.649 7.65 14.502 6.601 14.953 5.753C15.031 5.607 14.88 5.446 14.72 5.48C13.725 5.696 12.712 5.229 11.702 4.853C10.522 4.414 9.359 4.64 8.807 4.824C8.679 4.867 8.529 4.774 8.504 4.641C8.308 3.599 7.214 2.601 5.297 2.282C4.333 2.122 3.527 1.674 3.115 1.315C3.017 1.229 2.854 1.246 2.799 1.365C2.423 2.193 2.02 3.939 5.152 6.154C5.733 6.518 6.229 6.797 6.512 7.644C6.666 8.107 6.124 9.18 6.032 9.382C5.159 11.292 5.089 12.19 4.926 13.742",
3886
+ "M8.844 13.742C8.967 12.328 8.449 10.399 8.448 9.648C8.447 8.938 8.876 8.427 9.596 8.426C11.282 8.423 12.102 8.272 12.681 8.092C13.705 7.774 14.577 6.731 15.041 5.876C15.121 5.728 14.973 5.562 14.812 5.595C13.813 5.8 12.808 5.309 11.802 4.916C10.628 4.456 9.462 4.671 8.909 4.849C8.78 4.89 8.631 4.795 8.608 4.661C8.425 3.613 7.339 2.602 5.424 2.27C4.461 2.103 3.658 1.649 3.249 1.287C3.152 1.201 2.988 1.217 2.933 1.335C2.55 2.161 2.137 3.872 5.235 6.128C5.81 6.5 6.302 6.787 6.569 7.638C6.716 8.104 6.154 9.168 6.059 9.369C5.157 11.272 5.089 12.19 4.926 13.742",
3887
+ "M8.844 13.742C8.967 12.328 8.472 10.431 8.491 9.69C8.509 8.988 8.956 8.494 9.676 8.517C11.36 8.571 12.185 8.451 12.77 8.294C13.804 8.016 14.712 7.011 15.207 6.188C15.293 6.046 15.151 5.876 14.989 5.903C13.984 6.066 12.998 5.545 12.008 5.115C10.853 4.614 9.68 4.779 9.119 4.934C8.989 4.97 8.844 4.869 8.826 4.735C8.686 3.684 7.646 2.629 5.748 2.211C4.793 2.001 4.012 1.511 3.62 1.13C3.526 1.039 3.362 1.048 3.302 1.164C2.882 1.971 2.388 3.691 5.399 6.068C5.96 6.463 6.44 6.768 6.677 7.628C6.807 8.099 6.211 9.147 6.111 9.346C5.155 11.233 5.089 12.19 4.926 13.742",
3888
+ "M8.844 13.742C8.967 12.328 8.47 10.428 8.487 9.686C8.503 8.983 8.949 8.488 9.668 8.509C11.353 8.558 12.178 8.435 12.762 8.279C13.795 8.002 14.701 7.021 15.2 6.237C15.286 6.102 15.145 5.939 14.983 5.963C13.977 6.11 12.994 5.602 12.009 5.173C10.859 4.672 9.685 4.813 9.122 4.959C8.992 4.993 8.848 4.892 8.832 4.758C8.705 3.717 7.69 2.645 5.804 2.178C4.855 1.943 4.087 1.43 3.705 1.039C3.613 0.946 3.449 0.95 3.386 1.064C2.945 1.861 2.395 3.646 5.393 6.06C5.951 6.46 6.43 6.768 6.668 7.628C6.799 8.1 6.206 9.149 6.106 9.348C5.155 11.237 5.089 12.19 4.926 13.742",
3889
+ "M8.844 13.742C8.967 12.328 8.457 10.409 8.462 9.662C8.468 8.954 8.903 8.449 9.623 8.456C11.308 8.472 12.13 8.332 12.711 8.164C13.739 7.866 14.625 6.882 15.111 6.111C15.195 5.978 15.052 5.821 14.891 5.846C13.886 6.003 12.896 5.521 11.906 5.11C10.75 4.63 9.577 4.781 9.017 4.932C8.886 4.967 8.742 4.869 8.724 4.736C8.585 3.702 7.564 2.64 5.675 2.182C4.725 1.952 3.954 1.441 3.571 1.052C3.479 0.959 3.315 0.964 3.252 1.078C2.815 1.877 2.267 3.708 5.303 6.084C5.867 6.477 6.351 6.777 6.606 7.633C6.745 8.102 6.173 9.161 6.076 9.361C5.156 11.259 5.089 12.19 4.926 13.742",
3890
+ "M8.844 13.742C8.967 12.328 8.432 10.376 8.418 9.62C8.404 8.904 8.82 8.382 9.54 8.364C11.225 8.323 12.041 8.152 12.616 7.961C13.633 7.623 14.483 6.603 14.94 5.806C15.019 5.669 14.87 5.516 14.71 5.547C13.712 5.744 12.704 5.295 11.699 4.92C10.525 4.482 9.359 4.68 8.805 4.853C8.676 4.894 8.527 4.801 8.504 4.668C8.325 3.638 7.262 2.618 5.355 2.239C4.397 2.048 3.605 1.57 3.206 1.198C3.11 1.109 2.946 1.12 2.888 1.238C2.485 2.054 2.016 3.888 5.137 6.146C5.716 6.517 6.211 6.799 6.496 7.645C6.652 8.109 6.115 9.184 6.024 9.385C5.159 11.298 5.089 12.19 4.926 13.742",
3891
+ "M8.844 13.742C8.967 12.328 8.429 10.371 8.411 9.614C8.394 8.897 8.808 8.372 9.528 8.351C11.212 8.301 12.028 8.125 12.602 7.927C13.616 7.578 14.458 6.518 14.899 5.663C14.975 5.515 14.823 5.354 14.664 5.391C13.67 5.619 12.653 5.161 11.638 4.796C10.453 4.37 9.293 4.61 8.743 4.801C8.616 4.846 8.465 4.755 8.438 4.622C8.23 3.582 7.123 2.596 5.202 2.303C4.236 2.156 3.424 1.718 3.007 1.364C2.908 1.28 2.745 1.299 2.692 1.419C2.326 2.252 1.947 3.995 5.104 6.173C5.689 6.531 6.188 6.804 6.479 7.648C6.639 8.11 6.107 9.187 6.017 9.389C5.16 11.304 5.089 12.19 4.926 13.742",
3892
+ "M8.844 13.742C8.967 12.328 8.438 10.384 8.428 9.629C8.419 8.915 8.839 8.397 9.559 8.384C11.244 8.356 12.062 8.191 12.638 8.001C13.657 7.664 14.512 6.597 14.959 5.721C15.036 5.57 14.884 5.403 14.725 5.44C13.73 5.667 12.715 5.189 11.701 4.813C10.518 4.373 9.357 4.616 8.807 4.806C8.679 4.851 8.528 4.759 8.502 4.625C8.296 3.577 7.184 2.591 5.262 2.309C4.295 2.167 3.481 1.736 3.062 1.385C2.962 1.301 2.799 1.321 2.748 1.441C2.387 2.276 2.02 3.969 5.16 6.159C5.742 6.519 6.239 6.797 6.52 7.643C6.674 8.107 6.128 9.179 6.036 9.38C5.159 11.289 5.089 12.19 4.926 13.742",
3893
+ "M8.844 13.742C8.967 12.328 8.45 10.4 8.45 9.65C8.451 8.941 8.881 8.431 9.601 8.431C11.286 8.432 12.107 8.283 12.686 8.107C13.711 7.796 14.587 6.785 15.061 5.98C15.143 5.841 14.997 5.681 14.836 5.71C13.835 5.89 12.836 5.41 11.838 5.011C10.673 4.544 9.503 4.725 8.946 4.89C8.816 4.928 8.67 4.832 8.649 4.698C8.488 3.659 7.437 2.622 5.536 2.221C4.579 2.02 3.793 1.534 3.398 1.157C3.303 1.067 3.139 1.077 3.08 1.193C2.667 2.005 2.182 3.794 5.253 6.109C5.824 6.491 6.312 6.784 6.576 7.636C6.72 8.104 6.157 9.167 6.062 9.368C5.157 11.27 5.089 12.19 4.926 13.742",
3894
+ REST_PATH,
3895
+ REST_PATH
3896
+ ].join(";");
3897
+ const MOTION_TIMES = "0;0.028571;0.057143;0.095238;0.114286;0.133333;0.171429;0.2;0.219048;0.257143;0.285714;0.380952;0.409524;0.447619;0.47619;0.495238;0.52381;0.552381;0.571429;0.638095;0.8;1";
3898
+ /**
3899
+ * Loop the tail every three seconds after a 0.3s delay.
3900
+ * @returns animated and resting contours switched by the reduced-motion stylesheet.
3901
+ */
3902
+ function RunningWhaleTail() {
3903
+ return (0, react_jsx_runtime.jsx)("span", {
3904
+ className: ChatView_module_css_default.runningIcon,
3905
+ "aria-hidden": "true",
3906
+ children: (0, react_jsx_runtime.jsxs)("svg", {
3907
+ width: "100%",
3908
+ height: "100%",
3909
+ viewBox: "0 0 16 16",
3910
+ fill: "none",
3911
+ children: [(0, react_jsx_runtime.jsx)("path", {
3912
+ className: ChatView_module_css_default.runningWhaleAnimated,
3913
+ d: REST_PATH,
3914
+ stroke: "currentColor",
3915
+ strokeWidth: 1,
3916
+ children: (0, react_jsx_runtime.jsx)("animate", {
3917
+ attributeName: "d",
3918
+ values: MOTION_PATHS,
3919
+ keyTimes: MOTION_TIMES,
3920
+ calcMode: "linear",
3921
+ begin: "0.3s",
3922
+ dur: "3s",
3923
+ repeatCount: "indefinite"
3924
+ })
3925
+ }), (0, react_jsx_runtime.jsx)("path", {
3926
+ className: ChatView_module_css_default.runningWhaleStill,
3927
+ d: REST_PATH,
3928
+ stroke: "currentColor",
3929
+ strokeWidth: 1
3930
+ })]
3931
+ })
3932
+ });
3933
+ }
3934
+ //#endregion
3935
+ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-chat/src/client/chat/accessibility.module.css.mjs
3936
+ const css$10 = ".TTCZqG_visuallyHidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}";
3937
+ const tagId$10 = "@deepseek-ai/dsh-client-ui-chat/accessibility.module.css";
3938
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
3939
+ const tag = document.createElement("style");
3940
+ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-chat";
3941
+ tag.dataset.pluginCss = tagId$10;
3942
+ tag.textContent = css$10;
3943
+ document.head.appendChild(tag);
3944
+ }
3945
+ var accessibility_module_css_default = { "visuallyHidden": "TTCZqG_visuallyHidden" };
3946
+ //#endregion
3947
+ //#region lib/types/client/chat/RunningStatus.js
3948
+ /** Running Turn clock isolated from the transcript's render cycle. */
3949
+ /**
3950
+ * Show live elapsed time after the current Turn's content without announcing ticks.
3951
+ * @param props - Current Turn start time and localized copy.
3952
+ * @returns the blue running indicator; mount only while the Session is running.
3953
+ */
3954
+ const RunningStatus = (0, react.memo)(function RunningStatus({ startTime, t }) {
3955
+ const [now, setNow] = (0, react.useState)(Date.now);
3956
+ (0, react.useEffect)(() => {
3957
+ if (startTime === void 0) return;
3958
+ setNow(Date.now());
3959
+ const timer = setInterval(() => {
3960
+ setNow(Date.now());
3961
+ }, LIVE_RUN_CLOCK_INTERVAL_MS);
3962
+ return () => {
3963
+ clearInterval(timer);
3964
+ };
3965
+ }, [startTime]);
3966
+ const label = startTime === void 0 ? t("chat.deepDiving") : t("chat.deepDivingFor", { duration: formatLiveRunDuration(Math.max(1e3, now - startTime), t) });
3967
+ return (0, react_jsx_runtime.jsxs)("div", {
3968
+ className: ChatView_module_css_default.running,
3969
+ "data-chat-running": true,
3970
+ children: [
3971
+ (0, react_jsx_runtime.jsx)("span", {
3972
+ className: accessibility_module_css_default.visuallyHidden,
3973
+ role: "status",
3974
+ "aria-live": "polite",
3975
+ "aria-atomic": "true",
3976
+ children: t("chat.deepDiving")
3977
+ }),
3978
+ (0, react_jsx_runtime.jsx)("span", {
3979
+ className: ChatView_module_css_default.runningDivider,
3980
+ "aria-hidden": "true"
3981
+ }),
3982
+ (0, react_jsx_runtime.jsxs)("span", {
3983
+ className: ChatView_module_css_default.runningContent,
3984
+ children: [(0, react_jsx_runtime.jsx)(RunningWhaleTail, {}), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, {
3985
+ active: true,
3986
+ className: ChatView_module_css_default.runningText,
3987
+ children: label
3988
+ })]
3989
+ })
3990
+ ]
3991
+ });
3992
+ });
3993
+ //#endregion
3858
3994
  //#region ../../util/brand/lib/index.js
3859
3995
  /**
3860
3996
  * Duplicate-install-safe nominal primitive helpers.
@@ -5049,6 +5185,11 @@ window.__ModuleLoader__.load({
5049
5185
  })), [groupedEntries, order]);
5050
5186
  const nodeStore = useChat((s) => s.nodes);
5051
5187
  const turnNavigationItems = useChat((s) => s.navigation.items());
5188
+ const latestTurnAnchor = turnNavigationItems.at(-1)?.anchorKey;
5189
+ const runningStartTime = useChatNode(latestTurnAnchor ?? "", (node) => {
5190
+ const location = node?.location;
5191
+ return location?.kind === "turn" || location?.kind === "step" ? location.turn.status === "open" ? location.turn.start?.time : void 0 : void 0;
5192
+ });
5052
5193
  const turnOutline = useProjection("turnOutline");
5053
5194
  const railItems = (0, react.useMemo)(() => mergeTurnRailItems(turnNavigationItems, turnOutline), [turnNavigationItems, turnOutline]);
5054
5195
  const inbox = useProjection("inbox");
@@ -5211,6 +5352,10 @@ window.__ModuleLoader__.load({
5211
5352
  renderSlot,
5212
5353
  t
5213
5354
  })
5355
+ }),
5356
+ running && (0, react_jsx_runtime.jsx)(RunningStatus, {
5357
+ startTime: runningStartTime,
5358
+ t
5214
5359
  })
5215
5360
  ]
5216
5361
  })
@@ -5319,12 +5464,11 @@ window.__ModuleLoader__.load({
5319
5464
  "message.trigger.subagent": "子任务状态更新",
5320
5465
  "message.trigger.github": "收到 GitHub 事件",
5321
5466
  "message.trigger.webhook": "收到外部事件",
5322
- "message.trigger.schedule": "定时任务",
5467
+ "message.trigger.schedule": "自动化任务",
5323
5468
  "message.trigger.job": "后台任务状态更新",
5324
5469
  "message.trigger.plugin": "插件状态更新",
5325
5470
  "message.trigger.explanation": "这条通知触发了本轮回复。",
5326
5471
  "message.turnProcess.worked": "已完成工作",
5327
- "message.turnProcess.deepDivingFor": "深度求索中,用时{duration}",
5328
5472
  "message.turnProcess.took": "用时 {duration}",
5329
5473
  "message.turnProcess.failed": "处理失败",
5330
5474
  "view.chat": "对话",
@@ -5349,7 +5493,8 @@ window.__ModuleLoader__.load({
5349
5493
  "chat.loadError": "历史加载失败:{message}({code})",
5350
5494
  "chat.loadOlder": "加载更早",
5351
5495
  "chat.toBottom": "回到底部",
5352
- "chat.deepDiving": "深度求索中",
5496
+ "chat.deepDiving": "深度求索中...",
5497
+ "chat.deepDivingFor": "深度求索中,用时 {duration}...",
5353
5498
  "chat.turnNavigation.label": "轮次导航",
5354
5499
  "chat.turnNavigation.jump": "跳转到第 {turn} 轮",
5355
5500
  "chat.turnNavigation.jumpLoad": "加载并跳转到第 {turn} 轮",
@@ -5508,12 +5653,11 @@ window.__ModuleLoader__.load({
5508
5653
  "message.trigger.subagent": "Subtask status updated",
5509
5654
  "message.trigger.github": "GitHub event received",
5510
5655
  "message.trigger.webhook": "External event received",
5511
- "message.trigger.schedule": "Scheduled task",
5656
+ "message.trigger.schedule": "Automation task",
5512
5657
  "message.trigger.job": "Background task updated",
5513
5658
  "message.trigger.plugin": "Plugin status updated",
5514
5659
  "message.trigger.explanation": "This notification triggered this response.",
5515
5660
  "message.turnProcess.worked": "Worked",
5516
- "message.turnProcess.deepDivingFor": "Deep diving for {duration}",
5517
5661
  "message.turnProcess.took": "Took {duration}",
5518
5662
  "message.turnProcess.failed": "Failed",
5519
5663
  "view.chat": "Chat",
@@ -5539,6 +5683,7 @@ window.__ModuleLoader__.load({
5539
5683
  "chat.loadOlder": "Load earlier",
5540
5684
  "chat.toBottom": "Back to bottom",
5541
5685
  "chat.deepDiving": "Deep diving...",
5686
+ "chat.deepDivingFor": "Deep diving for {duration}...",
5542
5687
  "chat.turnNavigation.label": "Turn navigation",
5543
5688
  "chat.turnNavigation.jump": "Jump to turn {turn}",
5544
5689
  "chat.turnNavigation.jumpLoad": "Load and jump to turn {turn}",
@@ -5644,20 +5789,8 @@ window.__ModuleLoader__.load({
5644
5789
  "clock.ymd": "{y}-{m}-{d}"
5645
5790
  };
5646
5791
  //#endregion
5647
- //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-chat/src/client/chat/accessibility.module.css.mjs
5648
- const css$10 = ".TTCZqG_visuallyHidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}";
5649
- const tagId$10 = "@deepseek-ai/dsh-client-ui-chat/accessibility.module.css";
5650
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
5651
- const tag = document.createElement("style");
5652
- tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-chat";
5653
- tag.dataset.pluginCss = tagId$10;
5654
- tag.textContent = css$10;
5655
- document.head.appendChild(tag);
5656
- }
5657
- var accessibility_module_css_default = { "visuallyHidden": "TTCZqG_visuallyHidden" };
5658
- //#endregion
5659
5792
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-chat/src/client/chat/ReasoningRow.module.css.mjs
5660
- const css$9 = ".lcKema_root{flex-direction:column;display:flex}.lcKema_root:not([data-expanded]){contain:size layout;height:calc(24px + var(--dsh-content-font-delta,0px))}.lcKema_row{position:relative;overflow:hidden}.lcKema_root[data-expanded] [data-open] [data-disclosure-row]{z-index:1;background:var(--dsw-alias-bg-base);position:sticky;top:0}.lcKema_root[data-state=running] .lcKema_row:after{content:\"\";inset-block:0;background:linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, transparent 100%);pointer-events:none;width:300px;animation:2.6s ease-out infinite lcKema_dsh-reasoning-row-sweep;position:absolute;left:0}@keyframes lcKema_dsh-reasoning-row-sweep{0%{left:-300px}90%,to{left:100%}}.lcKema_leading{flex-shrink:0}.lcKema_chevron{color:var(--dsw-alias-label-secondary)}.lcKema_title{font-weight:400}.lcKema_separator{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.lcKema_summary{min-width:0;color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));white-space:nowrap;flex:auto;overflow:hidden}.lcKema_summaryText{text-overflow:ellipsis;display:block;overflow:hidden}.lcKema_summary[data-streaming]{mask-image:linear-gradient(90deg,#000 calc(100% - 48px),#0000)}.lcKema_summary[data-streaming] .lcKema_summaryText{text-overflow:clip;overflow:visible}.lcKema_root:not([data-preview]) .lcKema_separator,.lcKema_root:not([data-preview]) .lcKema_summary{display:none}.lcKema_thinkBody{padding:4px 0 4px calc(22px + var(--dsh-content-font-delta,0px));min-width:0}@media (prefers-reduced-motion:reduce){.lcKema_root[data-state=running] .lcKema_row:after{animation:none}}";
5793
+ const css$9 = ".lcKema_root{flex-direction:column;display:flex}.lcKema_root:not([data-expanded]){contain:size layout;height:calc(24px + var(--dsh-content-font-delta,0px))}.lcKema_row{position:relative;overflow:hidden}.lcKema_root[data-expanded] [data-open] [data-disclosure-row]{z-index:1;background:var(--dsw-alias-bg-base);position:sticky;top:0}.lcKema_leading{flex-shrink:0}.lcKema_chevron{color:var(--dsw-alias-label-secondary)}.lcKema_title{font-weight:400}.lcKema_separator{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.lcKema_summary{min-width:0;color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));white-space:nowrap;flex:auto;overflow:hidden}.lcKema_summaryText{text-overflow:ellipsis;display:block;overflow:hidden}.lcKema_summary[data-streaming]{mask-image:linear-gradient(90deg,#000 calc(100% - 48px),#0000)}.lcKema_summary[data-streaming] .lcKema_summaryText{text-overflow:clip;overflow:visible}.lcKema_root:not([data-preview]) .lcKema_separator,.lcKema_root:not([data-preview]) .lcKema_summary{display:none}.lcKema_thinkBody{padding:4px 0 4px calc(22px + var(--dsh-content-font-delta,0px));min-width:0}";
5661
5794
  const tagId$9 = "@deepseek-ai/dsh-client-ui-chat/ReasoningRow.module.css";
5662
5795
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) {
5663
5796
  const tag = document.createElement("style");
@@ -5668,7 +5801,6 @@ window.__ModuleLoader__.load({
5668
5801
  }
5669
5802
  var ReasoningRow_module_css_default = {
5670
5803
  "chevron": "lcKema_chevron",
5671
- "dsh-reasoning-row-sweep": "lcKema_dsh-reasoning-row-sweep",
5672
5804
  "leading": "lcKema_leading",
5673
5805
  "root": "lcKema_root",
5674
5806
  "row": "lcKema_row",
@@ -5723,13 +5855,14 @@ window.__ModuleLoader__.load({
5723
5855
  const preview = usePresentation((policy) => !expanded && summary !== "" && (running || policy.settledReasoningPreview));
5724
5856
  const collapsedContent = (0, react.useMemo)(() => (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", {
5725
5857
  className: ReasoningRow_module_css_default.separator,
5858
+ "data-shimmer-decoration": true,
5726
5859
  "aria-hidden": true
5727
5860
  }), (0, react_jsx_runtime.jsx)("span", {
5728
5861
  className: ReasoningRow_module_css_default.summary,
5729
5862
  "data-streaming": running || void 0,
5730
5863
  children: (0, react_jsx_runtime.jsx)("span", {
5731
5864
  className: ReasoningRow_module_css_default.summaryText,
5732
- children: summary
5865
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { children: summary })
5733
5866
  })
5734
5867
  })] }), [running, summary]);
5735
5868
  const content = (0, react.useMemo)(() => expanded ? (0, react_jsx_runtime.jsx)("div", {
@@ -5762,6 +5895,7 @@ window.__ModuleLoader__.load({
5762
5895
  chevronClassName: ReasoningRow_module_css_default.chevron,
5763
5896
  icon: THINK_ICON,
5764
5897
  title: t("message.think"),
5898
+ running,
5765
5899
  open: expanded,
5766
5900
  expandable: true,
5767
5901
  expandOnRowClick: true,
@@ -5977,14 +6111,12 @@ window.__ModuleLoader__.load({
5977
6111
  }, []);
5978
6112
  const collapsedContent = (0, react.useMemo)(() => (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", {
5979
6113
  className: GenericCommandCard_module_css_default.separator,
6114
+ "data-shimmer-decoration": true,
5980
6115
  "aria-hidden": true
5981
6116
  }), (0, react_jsx_runtime.jsx)("span", {
5982
6117
  className: GenericCommandCard_module_css_default.summary,
5983
6118
  "data-error": state === "error" || void 0,
5984
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, {
5985
- active: running,
5986
- children: summary
5987
- })
6119
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { children: summary })
5988
6120
  })] }), [
5989
6121
  running,
5990
6122
  state,
@@ -6127,7 +6259,7 @@ window.__ModuleLoader__.load({
6127
6259
  });
6128
6260
  //#endregion
6129
6261
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-chat/src/client/chat/TurnProcessNodeView.module.css.mjs
6130
- const css$6 = ".l_V-RG_root{box-sizing:border-box;width:100%;min-width:0;height:calc(33px + var(--dsh-content-font-delta,0px));border:none;border-bottom:.5px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);cursor:pointer;text-align:left;background:0 0;align-items:center;padding:0 0 8px;transition:color .1s;display:flex}.l_V-RG_root:disabled{cursor:default}.l_V-RG_root:not(:disabled):hover{color:var(--dsw-alias-label-primary)}.l_V-RG_root:not([data-open]){margin-bottom:8px}.l_V-RG_chevron{width:14px;height:14px;color:var(--dsw-alias-label-caption);flex:none;margin-left:4px;transition:transform .1s}.l_V-RG_root[data-open] .l_V-RG_chevron{transform:rotate(180deg)}.l_V-RG_label{min-width:0;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@media (prefers-reduced-motion:reduce){.l_V-RG_root,.l_V-RG_chevron{transition:none}}";
6262
+ const css$6 = ".l_V-RG_root{box-sizing:border-box;width:100%;min-width:0;height:calc(33px + var(--dsh-content-font-delta,0px));border:none;border-bottom:.5px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);cursor:pointer;text-align:left;background:0 0;align-items:center;padding:0 0 8px;transition:color .1s;display:flex}.l_V-RG_root:disabled{cursor:default}.l_V-RG_root:not(:disabled):hover{color:var(--dsw-alias-label-primary)}.l_V-RG_chevron{width:14px;height:14px;color:var(--dsw-alias-label-caption);flex:none;margin-left:4px;transition:transform .1s}.l_V-RG_root[data-open] .l_V-RG_chevron{transform:rotate(180deg)}.l_V-RG_label{min-width:0;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@media (prefers-reduced-motion:reduce){.l_V-RG_root,.l_V-RG_chevron{transition:none}}";
6131
6263
  const tagId$6 = "@deepseek-ai/dsh-client-ui-chat/TurnProcessNodeView.module.css";
6132
6264
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
6133
6265
  const tag = document.createElement("style");
@@ -6148,26 +6280,13 @@ window.__ModuleLoader__.load({
6148
6280
  if (turnProcess === void 0) throw new Error("turn-process node requires Turn process owner state");
6149
6281
  const open = !turnProcess.foldable || turnProcess.open;
6150
6282
  const turn = node.location.kind === "turn" || node.location.kind === "step" ? node.location.turn : void 0;
6151
- const [now, setNow] = (0, react.useState)(Date.now);
6152
- const ticking = turn?.status === "open" && turn.start !== void 0;
6153
- (0, react.useEffect)(() => {
6154
- if (!ticking) return;
6155
- setNow(Date.now());
6156
- const timer = setInterval(() => {
6157
- setNow(Date.now());
6158
- }, LIVE_RUN_CLOCK_INTERVAL_MS);
6159
- return () => {
6160
- clearInterval(timer);
6161
- };
6162
- }, [ticking]);
6163
- if (turn?.start === void 0 && turn?.status !== "closed") return null;
6283
+ if (turn?.status !== "closed") return null;
6164
6284
  const canCollapse = turnProcess.foldable && turnProcess.hasContent && !turnProcessAlwaysOpen(node);
6165
- const running = turn.status === "open";
6166
6285
  const reason = turn.end?.data.reason.kind;
6167
- const elapsedMs = turn.start === void 0 ? void 0 : Math.max(1e3, (turn.end?.time ?? now) - turn.start.time);
6168
- const duration = elapsedMs === void 0 ? void 0 : running ? formatLiveRunDuration(elapsedMs, t) : formatRunDuration(elapsedMs, t);
6169
- const label = running ? duration === void 0 ? t("chat.deepDiving") : t("message.turnProcess.deepDivingFor", { duration }) : reason === "aborted" ? t("message.stopped") : reason === "error" ? t("message.turnProcess.failed") : duration === void 0 ? t("message.turnProcess.worked") : t("message.turnProcess.took", { duration });
6170
- const announcement = running ? t("chat.deepDiving") : reason === "aborted" ? t("message.stopped") : reason === "error" ? t("message.turnProcess.failed") : t("message.turnProcess.worked");
6286
+ const elapsedMs = turn.start === void 0 || turn.end === void 0 ? void 0 : Math.max(1e3, turn.end.time - turn.start.time);
6287
+ const duration = elapsedMs === void 0 ? void 0 : formatRunDuration(elapsedMs, t);
6288
+ const label = reason === "aborted" ? t("message.stopped") : reason === "error" ? t("message.turnProcess.failed") : duration === void 0 ? t("message.turnProcess.worked") : t("message.turnProcess.took", { duration });
6289
+ const announcement = reason === "aborted" ? t("message.stopped") : reason === "error" ? t("message.turnProcess.failed") : t("message.turnProcess.worked");
6171
6290
  return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", {
6172
6291
  className: accessibility_module_css_default.visuallyHidden,
6173
6292
  role: "status",
@@ -6637,7 +6756,7 @@ window.__ModuleLoader__.load({
6637
6756
  subagent: _deepseek_ai_dsh_client_ui_primitives.IconAgentPresetOutlineRegular,
6638
6757
  github: _deepseek_ai_dsh_client_ui_primitives.IconBranchOutlineRegular,
6639
6758
  webhook: _deepseek_ai_dsh_client_ui_primitives.IconGlobeOutlineRegular,
6640
- schedule: _deepseek_ai_dsh_client_ui_primitives.IconAlarmClockOutlineRegular,
6759
+ schedule: _deepseek_ai_dsh_client_ui_primitives.IconClockOutlineRegular,
6641
6760
  job: _deepseek_ai_dsh_client_ui_primitives.IconQueueOutlineRegular,
6642
6761
  plugin: _deepseek_ai_dsh_client_ui_primitives.IconCordisPluginOutlineRegular
6643
6762
  };
@@ -11836,7 +11955,7 @@ window.__ModuleLoader__.load({
11836
11955
  "verbose"
11837
11956
  ];
11838
11957
  /**
11839
- * Saved value from the two-mode generation of this setting. Read as `standard`;
11958
+ * Saved value from the two-mode generation of this setting. Read as `detailed`;
11840
11959
  * never offered as a choice and never written back.
11841
11960
  */
11842
11961
  const LEGACY_TRANSCRIPT_VIEW_MODE = "normal";
@@ -11848,8 +11967,8 @@ window.__ModuleLoader__.load({
11848
11967
  LEGACY_TRANSCRIPT_VIEW_MODE,
11849
11968
  LEGACY_EXPANDED_TRANSCRIPT_VIEW_MODE
11850
11969
  ];
11851
- /** Standard process summaries for users without an explicit preference. */
11852
- const DEFAULT_TRANSCRIPT_VIEW_MODE = "standard";
11970
+ /** Default work details for non-Desktop Web clients. */
11971
+ const DEFAULT_TRANSCRIPT_VIEW_MODE = "detailed";
11853
11972
  /** Performance and usage detail levels accepted by user settings. */
11854
11973
  const PERFORMANCE_USAGE_MODES = ["compact", "detailed"];
11855
11974
  /** Preserve detailed accounting for users without an explicit preference. */
@@ -11858,7 +11977,7 @@ window.__ModuleLoader__.load({
11858
11977
  const ChatSettingsFields = {
11859
11978
  linkOpening: Schema.union(["sidebar", "new-tab"]).default("sidebar"),
11860
11979
  performanceUsage: Schema.union([...PERFORMANCE_USAGE_MODES]).default(DEFAULT_PERFORMANCE_USAGE),
11861
- [TRANSCRIPT_VIEW_FIELD]: Schema.union([...TRANSCRIPT_VIEW_SETTING_VALUES]).default(DEFAULT_TRANSCRIPT_VIEW_MODE).loose()
11980
+ [TRANSCRIPT_VIEW_FIELD]: Schema.union([...TRANSCRIPT_VIEW_SETTING_VALUES]).loose()
11862
11981
  };
11863
11982
  Schema.object(ChatSettingsFields);
11864
11983
  //#endregion
@@ -11968,14 +12087,18 @@ window.__ModuleLoader__.load({
11968
12087
  /** Live work-details preference consumed by Chat and its Settings row. */
11969
12088
  var TranscriptViewPolicy = class {
11970
12089
  host;
12090
+ defaultMode;
11971
12091
  unsubscribe;
11972
- /** Reactive current mode; defaults to Standard before Host settings arrive. */
11973
- mode = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(DEFAULT_TRANSCRIPT_VIEW_MODE);
12092
+ /** Reactive current mode, including the client default before Host settings arrive. */
12093
+ mode;
11974
12094
  /**
11975
12095
  * @param host - durable Chat settings scope.
12096
+ * @param defaultMode - presentation used without an explicit saved mode.
11976
12097
  */
11977
- constructor(host) {
12098
+ constructor(host, defaultMode = DEFAULT_TRANSCRIPT_VIEW_MODE) {
11978
12099
  this.host = host;
12100
+ this.defaultMode = defaultMode;
12101
+ this.mode = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(defaultMode);
11979
12102
  this.unsubscribe = host.subscribe(() => {
11980
12103
  this.adopt();
11981
12104
  });
@@ -11999,7 +12122,7 @@ window.__ModuleLoader__.load({
11999
12122
  const section = this.host.getSnapshot().value;
12000
12123
  if (section === void 0) return;
12001
12124
  const saved = section.transcriptView;
12002
- const mode = saved === "normal" ? "standard" : saved === "expanded" ? "detailed" : saved;
12125
+ const mode = saved === "normal" || saved === "expanded" ? "detailed" : saved ?? this.defaultMode;
12003
12126
  if (this.mode.getSnapshot() !== mode) this.mode.set(mode);
12004
12127
  }
12005
12128
  };
@@ -12267,7 +12390,7 @@ window.__ModuleLoader__.load({
12267
12390
  })
12268
12391
  }, LinkOpeningRow));
12269
12392
  });
12270
- const transcriptView = new TranscriptViewPolicy(chatSettings);
12393
+ const transcriptView = new TranscriptViewPolicy(chatSettings, "dshDesktop" in globalThis ? "standard" : DEFAULT_TRANSCRIPT_VIEW_MODE);
12271
12394
  const presentation = derivePresentationPolicy(transcriptView.mode);
12272
12395
  const performancePolicy = new PerformanceUsagePolicy(chatSettings);
12273
12396
  ctx.effect(() => () => {
@@ -12362,10 +12485,19 @@ window.__ModuleLoader__.load({
12362
12485
  read: () => chatScrollPositions.get(sessionId) ?? null
12363
12486
  },
12364
12487
  forkAt: (seq) => {
12488
+ const messageId = [...chat.getSnapshot().timeline.turns.values()].find((turn) => turn.end?.seq === seq)?.data.get("turn-tail")?.closing?.finalNode.messageId;
12365
12489
  ctx.sessions.fork({
12366
12490
  sessionId,
12367
12491
  atSeq: seq,
12368
- increaseTitle: true
12492
+ increaseTitle: true,
12493
+ onCreated: (childId) => {
12494
+ ctx.get("productAnalytics")?.track("branch_session_click", {
12495
+ session_id: childId,
12496
+ parent_session_id: sessionId,
12497
+ ...messageId === void 0 ? {} : { parent_message_id: messageId },
12498
+ click_position: "footer"
12499
+ });
12500
+ }
12369
12501
  }).then((childId) => {
12370
12502
  ctx.uiWorkspace.openSession(childId);
12371
12503
  }).catch(() => {});
package/lib/index.js CHANGED
@@ -13,7 +13,7 @@ const TRANSCRIPT_VIEW_MODES = [
13
13
  "verbose"
14
14
  ];
15
15
  /**
16
- * Saved value from the two-mode generation of this setting. Read as `standard`;
16
+ * Saved value from the two-mode generation of this setting. Read as `detailed`;
17
17
  * never offered as a choice and never written back.
18
18
  */
19
19
  const LEGACY_TRANSCRIPT_VIEW_MODE = "normal";
@@ -25,8 +25,8 @@ const TRANSCRIPT_VIEW_SETTING_VALUES = [
25
25
  LEGACY_TRANSCRIPT_VIEW_MODE,
26
26
  LEGACY_EXPANDED_TRANSCRIPT_VIEW_MODE
27
27
  ];
28
- /** Standard process summaries for users without an explicit preference. */
29
- const DEFAULT_TRANSCRIPT_VIEW_MODE = "standard";
28
+ /** Default work details for non-Desktop Web clients. */
29
+ const DEFAULT_TRANSCRIPT_VIEW_MODE = "detailed";
30
30
  /** Performance and usage detail levels accepted by user settings. */
31
31
  const PERFORMANCE_USAGE_MODES = ["compact", "detailed"];
32
32
  /** Preserve detailed accounting for users without an explicit preference. */
@@ -35,7 +35,7 @@ const DEFAULT_PERFORMANCE_USAGE = "detailed";
35
35
  const ChatSettingsFields = {
36
36
  linkOpening: z.union(["sidebar", "new-tab"]).default("sidebar"),
37
37
  performanceUsage: z.union([...PERFORMANCE_USAGE_MODES]).default(DEFAULT_PERFORMANCE_USAGE),
38
- [TRANSCRIPT_VIEW_FIELD]: z.union([...TRANSCRIPT_VIEW_SETTING_VALUES]).default(DEFAULT_TRANSCRIPT_VIEW_MODE).loose()
38
+ [TRANSCRIPT_VIEW_FIELD]: z.union([...TRANSCRIPT_VIEW_SETTING_VALUES]).loose()
39
39
  };
40
40
  z.object(ChatSettingsFields);
41
41
  //#endregion
@@ -9,13 +9,13 @@ export declare const TRANSCRIPT_VIEW_MODES: readonly ["compact", "standard", "de
9
9
  /** Work-details presentation mode. */
10
10
  export type TranscriptViewMode = typeof TRANSCRIPT_VIEW_MODES[number];
11
11
  /**
12
- * Saved value from the two-mode generation of this setting. Read as `standard`;
12
+ * Saved value from the two-mode generation of this setting. Read as `detailed`;
13
13
  * never offered as a choice and never written back.
14
14
  */
15
15
  export declare const LEGACY_TRANSCRIPT_VIEW_MODE = "normal";
16
16
  /** Saved `expanded` values read as `detailed`, without being offered or written back. */
17
17
  export declare const LEGACY_EXPANDED_TRANSCRIPT_VIEW_MODE = "expanded";
18
- /** Standard process summaries for users without an explicit preference. */
18
+ /** Default work details for non-Desktop Web clients. */
19
19
  export declare const DEFAULT_TRANSCRIPT_VIEW_MODE: TranscriptViewMode;
20
20
  /** Performance and usage detail levels accepted by user settings. */
21
21
  export declare const PERFORMANCE_USAGE_MODES: readonly ["compact", "detailed"];
@@ -29,8 +29,8 @@ export type LinkOpening = 'sidebar' | 'new-tab';
29
29
  export declare const DEFAULT_LINK_OPENING: LinkOpening;
30
30
  /** Durable Chat section shared by the Host schema and browser scope. */
31
31
  export interface ChatSettings {
32
- /** Work-details preference; legacy values are accepted only from existing saved settings. */
33
- transcriptView: TranscriptViewMode | typeof LEGACY_TRANSCRIPT_VIEW_MODE | typeof LEGACY_EXPANDED_TRANSCRIPT_VIEW_MODE;
32
+ /** Work-details preference; absence uses the client default, and legacy saved values remain accepted. */
33
+ transcriptView?: TranscriptViewMode | typeof LEGACY_TRANSCRIPT_VIEW_MODE | typeof LEGACY_EXPANDED_TRANSCRIPT_VIEW_MODE | null;
34
34
  /** Detail level for composer statistics and completed-Turn usage. */
35
35
  performanceUsage: PerformanceUsageMode;
36
36
  /** Default destination for Chat HTTP(S) links. */
@@ -40,16 +40,16 @@ export interface ChatSettings {
40
40
  export declare const ChatSettingsFields: {
41
41
  linkOpening: z<"sidebar" | "new-tab", "sidebar" | "new-tab", "defined">;
42
42
  performanceUsage: z<"compact" | "detailed", "compact" | "detailed", "defined">;
43
- transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "defined">;
43
+ transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "plain">;
44
44
  };
45
45
  /** Schema for shared configuration values. */
46
46
  export declare const ChatSettingsSchema: z<Schemastery.ObjectS<NoInfer<{
47
47
  linkOpening: z<"sidebar" | "new-tab", "sidebar" | "new-tab", "defined">;
48
48
  performanceUsage: z<"compact" | "detailed", "compact" | "detailed", "defined">;
49
- transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "defined">;
49
+ transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "plain">;
50
50
  }>>, Schemastery.ObjectT<NoInfer<{
51
51
  linkOpening: z<"sidebar" | "new-tab", "sidebar" | "new-tab", "defined">;
52
52
  performanceUsage: z<"compact" | "detailed", "compact" | "detailed", "defined">;
53
- transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "defined">;
53
+ transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "plain">;
54
54
  }>>, "plain">;
55
55
  //# sourceMappingURL=chat-settings.d.ts.map
@@ -1,4 +1,3 @@
1
- /** Register the Chat Conversation target, renderers, stats, and details surface. */
2
1
  import type { Context } from '@deepseek-ai/cordis';
3
2
  /** Services required by the Chat target and its presentation registrations. */
4
3
  export declare const inject: string[];
@@ -0,0 +1,13 @@
1
+ import type { ChatViewSlotProps } from '../contract/slots.ts';
2
+ interface RunningStatusProps {
3
+ readonly startTime: number | undefined;
4
+ readonly t: ChatViewSlotProps['t'];
5
+ }
6
+ /**
7
+ * Show live elapsed time after the current Turn's content without announcing ticks.
8
+ * @param props - Current Turn start time and localized copy.
9
+ * @returns the blue running indicator; mount only while the Session is running.
10
+ */
11
+ export declare const RunningStatus: import("react").MemoExoticComponent<({ startTime, t }: RunningStatusProps) => import("react").JSX.Element>;
12
+ export {};
13
+ //# sourceMappingURL=RunningStatus.d.ts.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Loop the tail every three seconds after a 0.3s delay.
3
+ * @returns animated and resting contours switched by the reduced-motion stylesheet.
4
+ */
5
+ export declare function RunningWhaleTail(): import("react").JSX.Element;
6
+ //# sourceMappingURL=RunningWhaleTail.d.ts.map
@@ -60,7 +60,6 @@ export declare const zh: {
60
60
  'message.trigger.plugin': string;
61
61
  'message.trigger.explanation': string;
62
62
  'message.turnProcess.worked': string;
63
- 'message.turnProcess.deepDivingFor': string;
64
63
  'message.turnProcess.took': string;
65
64
  'message.turnProcess.failed': string;
66
65
  'view.chat': string;
@@ -86,6 +85,7 @@ export declare const zh: {
86
85
  'chat.loadOlder': string;
87
86
  'chat.toBottom': string;
88
87
  'chat.deepDiving': string;
88
+ 'chat.deepDivingFor': string;
89
89
  'chat.turnNavigation.label': string;
90
90
  'chat.turnNavigation.jump': string;
91
91
  'chat.turnNavigation.jumpLoad': string;
@@ -251,7 +251,6 @@ export declare const en: {
251
251
  'message.trigger.plugin': string;
252
252
  'message.trigger.explanation': string;
253
253
  'message.turnProcess.worked': string;
254
- 'message.turnProcess.deepDivingFor': string;
255
254
  'message.turnProcess.took': string;
256
255
  'message.turnProcess.failed': string;
257
256
  'view.chat': string;
@@ -277,6 +276,7 @@ export declare const en: {
277
276
  'chat.loadOlder': string;
278
277
  'chat.toBottom': string;
279
278
  'chat.deepDiving': string;
279
+ 'chat.deepDivingFor': string;
280
280
  'chat.turnNavigation.label': string;
281
281
  'chat.turnNavigation.jump': string;
282
282
  'chat.turnNavigation.jumpLoad': string;
@@ -5,13 +5,15 @@ import { type ChatSettings, type TranscriptViewMode } from '../chat-settings.ts'
5
5
  /** Live work-details preference consumed by Chat and its Settings row. */
6
6
  export declare class TranscriptViewPolicy {
7
7
  private readonly host;
8
+ private readonly defaultMode;
8
9
  private readonly unsubscribe;
9
- /** Reactive current mode; defaults to Standard before Host settings arrive. */
10
+ /** Reactive current mode, including the client default before Host settings arrive. */
10
11
  readonly mode: SnapshotStore<TranscriptViewMode>;
11
12
  /**
12
13
  * @param host - durable Chat settings scope.
14
+ * @param defaultMode - presentation used without an explicit saved mode.
13
15
  */
14
- constructor(host: ConfigForm<ChatSettings>);
16
+ constructor(host: ConfigForm<ChatSettings>, defaultMode?: TranscriptViewMode);
15
17
  /** Release the accepted-value subscription. */
16
18
  dispose(): void;
17
19
  /**
@@ -1,11 +1,11 @@
1
1
  import type { Volatile, Context } from '@deepseek-ai/cordis';
2
- import type { LinkOpening, TranscriptViewMode, PerformanceUsageMode } from './chat-settings.ts';
2
+ import type { ChatSettings, LinkOpening, PerformanceUsageMode } from './chat-settings.ts';
3
3
  import z from '@deepseek-ai/schemastery';
4
4
  export { CHAT_SETTINGS_NAMESPACE, DEFAULT_TRANSCRIPT_VIEW_MODE, LEGACY_TRANSCRIPT_VIEW_MODE, LEGACY_EXPANDED_TRANSCRIPT_VIEW_MODE, TRANSCRIPT_VIEW_FIELD, TRANSCRIPT_VIEW_MODES, type ChatSettings, type TranscriptViewMode, } from './chat-settings.ts';
5
5
  /** Runtime preferences projected to the browser. */
6
6
  export interface Config {
7
7
  /** Completed turn transcript presentation. */
8
- transcriptView: Volatile<TranscriptViewMode>;
8
+ transcriptView: Volatile<ChatSettings['transcriptView']>;
9
9
  /** Performance and usage detail level. */
10
10
  performanceUsage: Volatile<PerformanceUsageMode>;
11
11
  /** Default destination for Chat HTTP(S) links. */
@@ -13,11 +13,11 @@ export interface Config {
13
13
  }
14
14
  /** Live preferences projected to the browser. */
15
15
  export declare const Config: z<Schemastery.ObjectS<NoInfer<{
16
- transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "volatile-defined">;
16
+ transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "volatile">;
17
17
  performanceUsage: z<"compact" | "detailed", "compact" | "detailed", "volatile-defined">;
18
18
  linkOpening: z<"sidebar" | "new-tab", "sidebar" | "new-tab", "volatile-defined">;
19
19
  }>>, Schemastery.ObjectT<NoInfer<{
20
- transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "volatile-defined">;
20
+ transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "volatile">;
21
21
  performanceUsage: z<"compact" | "detailed", "compact" | "detailed", "volatile-defined">;
22
22
  linkOpening: z<"sidebar" | "new-tab", "sidebar" | "new-tab", "volatile-defined">;
23
23
  }>>, "plain">;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-chat",
3
3
  "description": "Chat Conversation target, node definitions, renderers, and details surface",
4
- "version": "0.1.7-rc.2",
4
+ "version": "0.2.0-rc.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -53,42 +53,43 @@
53
53
  "@types/react-dom": "~18.3.0",
54
54
  "react": "^18.2.0",
55
55
  "react-dom": "^18.2.0",
56
- "@deepseek-ai/dsh-agent": "0.1.7-rc.2",
57
- "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.2",
58
- "@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.2",
59
- "@deepseek-ai/dsh-api-workspace-files": "0.1.7-rc.2",
60
- "@deepseek-ai/dsh-api-workspace-controller": "0.1.7-rc.2",
61
56
  "@deepseek-ai/cordis": "~4.0.4",
62
- "@deepseek-ai/dsh-attachment": "0.1.7-rc.2",
63
- "@deepseek-ai/dsh-client-locale": "0.1.7-rc.2",
64
- "@deepseek-ai/dsh-brand": "0.1.7-rc.2",
65
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
66
- "@deepseek-ai/dsh-client-ui-approval": "0.1.7-rc.2",
67
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.7-rc.2",
68
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.7-rc.2",
69
- "@deepseek-ai/dsh-client-ui-layout": "0.1.7-rc.2",
70
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
71
- "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "0.1.7-rc.2",
72
- "@deepseek-ai/dsh-client-ui-sidebar-right": "0.1.7-rc.2",
73
- "@deepseek-ai/dsh-client-ui-sidebar-browser": "0.1.7-rc.2",
74
- "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
75
- "@deepseek-ai/dsh-client-ui-workspace": "0.1.7-rc.2",
76
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
77
- "@deepseek-ai/dsh-client-ui-session": "0.1.7-rc.2",
78
- "@deepseek-ai/dsh-compaction": "0.1.7-rc.2",
79
- "@deepseek-ai/dsh-llm-retry": "0.1.7-rc.2",
80
- "@deepseek-ai/dsh-llm": "0.1.7-rc.2",
81
- "@deepseek-ai/dsh-commands": "0.1.7-rc.2",
82
- "@deepseek-ai/dsh-session": "0.1.7-rc.2",
83
- "@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.2",
84
- "@deepseek-ai/dsh-session-turn-outline": "0.1.7-rc.2",
85
- "@deepseek-ai/dsh-token-meter": "0.1.7-rc.2",
86
- "@deepseek-ai/dsh-subagent": "0.1.7-rc.2",
87
- "@deepseek-ai/dsh-session-stats": "0.1.7-rc.2",
88
- "@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.2",
89
- "@deepseek-ai/dsh-util-values": "0.1.7-rc.2",
90
- "@deepseek-ai/dsh-settings": "0.1.7-rc.2",
91
- "@deepseek-ai/dsh-tools": "0.1.7-rc.2"
57
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.1",
58
+ "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
59
+ "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.1",
60
+ "@deepseek-ai/dsh-api-workspace-controller": "0.2.0-rc.1",
61
+ "@deepseek-ai/dsh-brand": "0.2.0-rc.1",
62
+ "@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
63
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.1",
64
+ "@deepseek-ai/dsh-client-ui-approval": "0.2.0-rc.1",
65
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.1",
66
+ "@deepseek-ai/dsh-client-ui-layout": "0.2.0-rc.1",
67
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.0-rc.1",
68
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1",
69
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1",
70
+ "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.1",
71
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
72
+ "@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
73
+ "@deepseek-ai/dsh-client-ui-sidebar-browser": "0.2.0-rc.1",
74
+ "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "0.2.0-rc.1",
75
+ "@deepseek-ai/dsh-client-ui-sidebar-right": "0.2.0-rc.1",
76
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
77
+ "@deepseek-ai/dsh-client-ui-workspace": "0.2.0-rc.1",
78
+ "@deepseek-ai/dsh-commands": "0.2.0-rc.1",
79
+ "@deepseek-ai/dsh-compaction": "0.2.0-rc.1",
80
+ "@deepseek-ai/dsh-api-workspace-files": "0.2.0-rc.1",
81
+ "@deepseek-ai/dsh-session": "0.2.0-rc.1",
82
+ "@deepseek-ai/dsh-session-stats": "0.2.0-rc.1",
83
+ "@deepseek-ai/dsh-session-turn-outline": "0.2.0-rc.1",
84
+ "@deepseek-ai/dsh-subagent": "0.2.0-rc.1",
85
+ "@deepseek-ai/dsh-token-meter": "0.2.0-rc.1",
86
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.1",
87
+ "@deepseek-ai/dsh-util-workspace-path": "0.2.0-rc.1",
88
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.1",
89
+ "@deepseek-ai/dsh-client-product-analytics": "0.2.0-rc.1",
90
+ "@deepseek-ai/dsh-llm-retry": "0.2.0-rc.1",
91
+ "@deepseek-ai/dsh-settings": "0.2.0-rc.1",
92
+ "@deepseek-ai/dsh-util-values": "0.2.0-rc.1"
92
93
  },
93
94
  "dependencies": {
94
95
  "@deepseek-ai/schemastery": "~3.18.4"