@deepseek-ai/dsh-client-ui-conversation 0.1.0-rc.6 → 0.1.0-rc.7

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-conversation/README.md
5
- README.md: ecf463da619662fe158511079e7773ee3c627ac8
6
- README.zh.md: f8922b160cdc6feca94dea998163c25d803a5535
5
+ README.md: d1a265b5789d9f1d9b5e630e0548ae5f619eebbf
6
+ README.zh.md: 3f303391d39bc040b4a6a5a2d1f6a34fe8891919
package/README.md CHANGED
@@ -6,7 +6,7 @@ Conversation domain: skeleton (header/tabs/composer/empty state), chat view (gro
6
6
 
7
7
  Compaction renders as one collapsed row at the checkpoint's flow position without replacing the transcript above it. Automatic compaction uses the context-compacted title. Every completed marker with a loaded `compaction/summary` event shows the replaced-item and estimated-token counts and discloses the summary on click. Manual `/compact` starts as a running `compact` row; on successful settlement its explicit summary-event reference folds that command into the checkpoint row under the same React key. A completed checkpoint keeps the context-compaction icon at rest and replaces it with the collapsed or expanded disclosure only on hover or keyboard focus. Input rejection, no compactable history, cancellation, and failure retain the generic command row and its handler-authored text. Pairing never depends on adjacency because durable context may be injected while compaction is running. The framed checkpoint payload is model-facing and never renders; when the cited `compaction/summary` event is outside the loaded window, the checkpoint remains visible but non-expandable.
8
8
 
9
- The resident conversation shell survives no-session and session transitions. Without a current session it locks message actions and presents the whole dashed composer card as a trigger for the root-scoped `conversation.hero.workspace` Workspace picker; the textarea remains read-only and keyboard-accessible. Selecting a Workspace connects or reuses its Host-owned blank session and opens that session without replacing the shell. The root always owns the same scrollport and Hero/composer subtree; separate strict-session header and body outlets fill their regions when the first Session arrives, so the Workspace picker, scroll body, composer seat, and textarea retain their React and DOM identity. Blank sessions render the same composer body as active sessions, while the InputHub carries drafts across Workspace switches and mirrors them into the session store. In the active phase the session header shows only the current session title and view tabs as ordinary column chrome; fork lineage remains session data and is not projected into the header. Beneath it the scrollport (`data-conversation-scroll`) holds the flowing views and the sticky composer stack (stats dock + input docks + bar). That scrollport reserves its scrollbar gutter unconditionally, and a view opting into a composer overlay leaves it a scroll container, so the input card keeps one horizontal position whether or not the transcript scrolls and whichever view tab is shown ([decision](../../../.agents/notes/implemented/bug-fix/2026-08-04-composer-tab-gutter-reservation.md)). Wheel over the textarea chains: the capped draft scrolls locally until its edge, then forwards to that host.
9
+ The resident conversation shell survives no-session and session transitions. Without a current session it locks message actions and presents the whole dashed composer card as a trigger for the root-scoped `conversation.hero.workspace` Workspace picker; the textarea remains read-only and keyboard-accessible. Selecting a Workspace connects or reuses its Host-owned blank session and opens that session without replacing the shell. The root always owns the same scrollport and Hero/composer subtree; separate strict-session header and body outlets fill their regions when the first Session arrives, so the Workspace picker, scroll body, composer seat, and textarea retain their React and DOM identity. Blank sessions render the same composer body as active sessions, while the InputHub carries drafts across Workspace switches and mirrors them into the session store. In the active phase the session header shows only the current session title and view tabs as ordinary column chrome; fork lineage remains session data and is not projected into the header. Beneath it the scrollport (`data-conversation-scroll`) holds the flowing views and the sticky composer stack (stats dock + input docks + bar). That scrollport reserves its scrollbar gutter unconditionally, and a view opting into a composer overlay leaves it a scroll container, so the input card keeps one horizontal position whether or not the transcript scrolls and whichever view tab is shown ([decision](../../../.agents/notes/implemented/bug-fix/2026-08-04-composer-tab-gutter-reservation.md)). Wheel over the textarea chains: the capped draft scrolls locally until its edge, then forwards to that host. Safari alone receives a pre-paint recovery when a native edit shortens the draft and leaves stale soft-wrap overflow; draft growth, programmatic updates, and other browsers never read layout for that recovery ([decision](../../../.agents/notes/implemented/bug-fix/2026-08-13-safari-textarea-soft-wrap-reflow.md)).
10
10
 
11
11
  Another plugin can make one session's composer inert through `ctx.conversation.blocks`: it sets a block carrying its own localized reason, and the bar renders the same disabled textarea with that reason as the placeholder — the no-workspace posture, reused. The push direction is the constraint, not a preference: the plugins that know a session cannot send (ui-model-selection, when no adapter serves its route) already depend on this package, so this package cannot read them. The model seat is the one control a block leaves live — every block this contract has is cleared by choosing a model, so locking it too would leave the composer asking for the only thing it prevents. A block is an affordance only; the Host refuses a prompt it cannot route regardless of what any client disables. The no-workspace state wins when both hold, because picking a workspace is the earlier prerequisite.
12
12
 
package/README.zh.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  压缩(compaction)在检查点自身的消息流位置渲染为一行折叠标记,不替换其上方的 transcript(文本记录)。自动压缩使用「上下文已压缩」标题。每个已加载对应 `compaction/summary` 事件的完成标记都会显示被替换条目数量和估算 token 数量,并可点击展开摘要。手动 `/compact` 开始时显示为运行中的 `compact` 行;成功结算后,其显式摘要事件引用会在保持同一 React key 的前提下把该命令折叠进检查点行。完成的检查点静止时保留上下文压缩(context compaction)图标,仅在悬停或键盘聚焦时将其替换为收起/展开指示图标。输入被拒绝、没有可压缩历史、取消和失败时仍使用通用命令行及处理器撰写的文本。配对绝不依赖相邻关系,因为压缩运行期间可能注入持久上下文。面向模型的带框检查点载荷绝不渲染;被引用的 `compaction/summary` 事件位于已加载窗口之外时,检查点仍然可见但不可展开。
8
8
 
9
- 常驻会话壳会跨无会话与会话状态切换而保留。没有当前会话时,它会锁定消息操作,并让整张虚线编辑器卡片成为根作用域 `conversation.hero.workspace` Workspace picker 的入口;textarea 保持只读且支持键盘操作。选择 Workspace 会连接或复用由 Host 拥有的空白会话,并在不替换会话壳的情况下打开该会话。根组件始终拥有同一个滚动容器与 Hero/编辑器子树;首个会话到达时,彼此独立的严格会话页头和主体 outlet 只填入各自区域,因此 Workspace picker、滚动主体、编辑器 seat 与 textarea 都保留原有 React 和 DOM identity。空白会话与活跃会话渲染相同的输入区主体;InputHub 则在 Workspace 切换间携带草稿,并将草稿镜像到会话 store。活跃阶段,会话标题栏作为普通列 chrome,仅显示当前会话标题和视图标签;fork 谱系仍保留为会话数据,不投影到标题栏。其下滚动容器(`data-conversation-scroll`)承载流动排版的各视图与 sticky 编辑器栈(统计 dock+输入区 dock+输入栏)。该滚动容器无条件预留自己的滚动条槽,选用编辑器 overlay 的视图也仍把它保留为滚动容器,因此无论对话记录是否滚动、无论展示哪个视图标签,输入卡片都保持同一个横向位置([决策](../../../.agents/notes/implemented/bug-fix/2026-08-04-composer-tab-gutter-reservation.md))。textarea 上的滚轮会链式处理:限高草稿先在本地滚动,到达边缘后再转交给该宿主。
9
+ 常驻会话壳会跨无会话与会话状态切换而保留。没有当前会话时,它会锁定消息操作,并让整张虚线编辑器卡片成为根作用域 `conversation.hero.workspace` Workspace picker 的入口;textarea 保持只读且支持键盘操作。选择 Workspace 会连接或复用由 Host 拥有的空白会话,并在不替换会话壳的情况下打开该会话。根组件始终拥有同一个滚动容器与 Hero/编辑器子树;首个会话到达时,彼此独立的严格会话页头和主体 outlet 只填入各自区域,因此 Workspace picker、滚动主体、编辑器 seat 与 textarea 都保留原有 React 和 DOM identity。空白会话与活跃会话渲染相同的输入区主体;InputHub 则在 Workspace 切换间携带草稿,并将草稿镜像到会话 store。活跃阶段,会话标题栏作为普通列 chrome,仅显示当前会话标题和视图标签;fork 谱系仍保留为会话数据,不投影到标题栏。其下滚动容器(`data-conversation-scroll`)承载流动排版的各视图与 sticky 编辑器栈(统计 dock+输入区 dock+输入栏)。该滚动容器无条件预留自己的滚动条槽,选用编辑器 overlay 的视图也仍把它保留为滚动容器,因此无论对话记录是否滚动、无论展示哪个视图标签,输入卡片都保持同一个横向位置([决策](../../../.agents/notes/implemented/bug-fix/2026-08-04-composer-tab-gutter-reservation.md))。textarea 上的滚轮会链式处理:限高草稿先在本地滚动,到达边缘后再转交给该宿主。只有 Safari 会在原生编辑缩短草稿并留下陈旧软换行溢出时执行绘制前恢复;草稿增长、程序化更新与其他浏览器都不会为这项恢复读取布局([决策](../../../.agents/notes/implemented/bug-fix/2026-08-13-safari-textarea-soft-wrap-reflow.md))。
10
10
 
11
11
  别的插件可以经 `ctx.conversation.blocks` 让某个会话的编辑器变为惰性:它设置一个携带自己本地化理由的 block,输入栏就渲染同一个禁用的 textarea,并把该理由作为 placeholder——复用无 Workspace 时的那套姿态。推送方向是约束而非偏好:知道某会话发不出消息的插件(ui-model-selection,在没有适配器服务其路由时)本就依赖本包,因此本包读不到它们。模型 seat 是 block 唯一保留可用的控件——这份约定里的每个 block 都靠选模型来解除,把它一起锁上会让编辑器索要它自己拦下的那件事。block 只是提示性设计;无论客户端禁用了什么,宿主都会拒绝一个它无法路由的提示词。两者同时成立时以无 Workspace 姿态为准,因为选 Workspace 是更靠前的前提。
12
12
 
package/lib/client.js CHANGED
@@ -2691,8 +2691,8 @@ window.__ModuleLoader__.load({
2691
2691
  document.head.appendChild(tag);
2692
2692
  }
2693
2693
  var StatsLine_module_css_default = {
2694
- "sep": "FJxK0a_sep",
2695
- "root": "FJxK0a_root"
2694
+ "root": "FJxK0a_root",
2695
+ "sep": "FJxK0a_sep"
2696
2696
  };
2697
2697
  //#endregion
2698
2698
  //#region lib/types/client/chat/StatsLine.js
@@ -2881,23 +2881,23 @@ window.__ModuleLoader__.load({
2881
2881
  document.head.appendChild(tag);
2882
2882
  }
2883
2883
  var ContextMeter_module_css_default = {
2884
- "trigger": "JObwrW_trigger",
2885
- "track": "JObwrW_track",
2886
- "row": "JObwrW_row",
2887
2884
  "header": "JObwrW_header",
2888
- "percent": "JObwrW_percent",
2889
2885
  "headline": "JObwrW_headline",
2886
+ "segment": "JObwrW_segment",
2887
+ "colorSystem": "JObwrW_colorSystem",
2888
+ "fill": "JObwrW_fill",
2889
+ "row": "JObwrW_row",
2890
+ "track": "JObwrW_track",
2891
+ "root": "JObwrW_root",
2892
+ "rows": "JObwrW_rows",
2890
2893
  "bar": "JObwrW_bar",
2894
+ "figures": "JObwrW_figures",
2891
2895
  "swatch": "JObwrW_swatch",
2892
- "rows": "JObwrW_rows",
2893
- "segment": "JObwrW_segment",
2896
+ "trigger": "JObwrW_trigger",
2894
2897
  "panel": "JObwrW_panel",
2895
- "fill": "JObwrW_fill",
2896
- "colorMessages": "JObwrW_colorMessages",
2897
2898
  "colorTools": "JObwrW_colorTools",
2898
- "colorSystem": "JObwrW_colorSystem",
2899
- "figures": "JObwrW_figures",
2900
- "root": "JObwrW_root"
2899
+ "colorMessages": "JObwrW_colorMessages",
2900
+ "percent": "JObwrW_percent"
2901
2901
  };
2902
2902
  //#endregion
2903
2903
  //#region lib/types/client/skeleton/ContextMeter.js
@@ -3069,10 +3069,10 @@ window.__ModuleLoader__.load({
3069
3069
  document.head.appendChild(tag);
3070
3070
  }
3071
3071
  var PermissionSelect_module_css_default = {
3072
+ "triggerIcon": "Sh0Q9G_triggerIcon",
3072
3073
  "chevronOpen": "Sh0Q9G_chevronOpen",
3073
- "chevron": "Sh0Q9G_chevron",
3074
3074
  "triggerLabel": "Sh0Q9G_triggerLabel",
3075
- "triggerIcon": "Sh0Q9G_triggerIcon",
3075
+ "chevron": "Sh0Q9G_chevron",
3076
3076
  "trigger": "Sh0Q9G_trigger"
3077
3077
  };
3078
3078
  //#endregion
@@ -3266,6 +3266,37 @@ window.__ModuleLoader__.load({
3266
3266
  })] });
3267
3267
  }
3268
3268
  //#endregion
3269
+ //#region lib/types/client/skeleton/safari.js
3270
+ /** Safari-specific textarea layout recovery for the conversation composer. */
3271
+ const ALTERNATE_IOS_BROWSER = /\b(?:CriOS|FxiOS|EdgiOS|OPiOS|OPT|DuckDuckGo|Brave)(?:\/|\b)/;
3272
+ /**
3273
+ * Detect Safari's `Version/... Safari/...` form while excluding known alternate iOS browser tokens.
3274
+ * @param identity - Browser user-agent and vendor values.
3275
+ * @returns Whether the identity should use the Safari-specific recovery.
3276
+ */
3277
+ function isSafariBrowser(identity) {
3278
+ return identity.vendor === "Apple Computer, Inc." && /\bVersion\/[\d.]+.*\bSafari\/[\d.]+/.test(identity.userAgent) && !ALTERNATE_IOS_BROWSER.test(identity.userAgent);
3279
+ }
3280
+ /**
3281
+ * Repair Safari's stale native textarea layout and the scrollport auto height it can contaminate.
3282
+ * @param input - Composer textarea whose own scrollable overflow must stay zero.
3283
+ */
3284
+ function repairSafariTextareaLayout(input) {
3285
+ if (input === null || input.scrollHeight <= input.clientHeight) return;
3286
+ const scrollport = input.closest("[data-input-scroll]");
3287
+ if (scrollport === null) return;
3288
+ const inputHeight = input.style.height;
3289
+ input.style.height = `${String(input.clientHeight + 1)}px`;
3290
+ input.offsetHeight;
3291
+ input.style.height = inputHeight;
3292
+ input.offsetHeight;
3293
+ const scrollportHeight = scrollport.style.height;
3294
+ scrollport.style.height = `${String(scrollport.clientHeight + 1)}px`;
3295
+ scrollport.offsetHeight;
3296
+ scrollport.style.height = scrollportHeight;
3297
+ scrollport.offsetHeight;
3298
+ }
3299
+ //#endregion
3269
3300
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/InputBar.module.css.mjs
3270
3301
  const css$17 = "@font-face{font-family:DshChipCell;src:url(data:font/ttf;base64,AAEAAAAKAIAAAwAgT1MvMkT8SmIAAAEoAAAAYGNtYXAADQBPAAABkAAAADRnbHlmAAAAAAAAAcwAAAABaGVhZCwtPGoAAACsAAAANmhoZWEDIg7bAAAA5AAAACRobXR4EZQAAAAAAYgAAAAIbG9jYQAAAAAAAAHEAAAABm1heHAAAwACAAABCAAAACBuYW1lvljk2gAAAdAAAABscG9zdNNweNQAAAI8AAAALQABAAAAAQAAdia1tV8PPPUAAwPoAAAAAOaLfcUAAAAA5ot9xQAAAAAAAAAAAAAAAwACAAAAAAAAAAEAAAMg/zgAAA+gAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAEAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwjKAZAABQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAPz8/PwAA//z//AMg/zgAAAMgAMgAAAAAAAAAAAAAAAAAAAAgAAAB9AAAD6AAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAIAAAAAQABAABAAD//P//AAD//P//AAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAEADYAAQAAAAAAAQALAAAAAQAAAAAAAgAHAAsAAwABBAkAAQAWABIAAwABBAkAAgAOAChEc2hDaGlwQ2VsbFJlZ3VsYXIARABzAGgAQwBoAGkAcABDAGUAbABsAFIAZQBnAHUAbABhAHIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAABAgZvYmpyZXAAAAA=)format(\"truetype\")}.uV2eYG_root{padding:0 var(--dsh-composer-side-clearance) 8px;flex-direction:column;align-items:center;display:flex}.uV2eYG_hero{padding:0 var(--dsh-composer-side-clearance)}.uV2eYG_notice{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:8px;margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}.uV2eYG_noticeError{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.uV2eYG_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);border:1px solid var(--dsw-alias-border-l2-darkmode-thin);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:22px;flex-direction:column;gap:12px;padding-top:10px;font-size:16px;line-height:24px;display:flex;position:relative}.uV2eYG_cardWorkspaceTrigger{cursor:pointer;border-color:#0000}.uV2eYG_cardWorkspaceTrigger:after{content:\"\";background:var(--dsw-alias-border-l4);pointer-events:none;border-radius:22px;transition:background-color .1s;position:absolute;inset:-1px;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' fill='none' rx='22' ry='22' stroke='black' stroke-width='2' stroke-dasharray='4 4'/%3E%3C/svg%3E\");mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' fill='none' rx='22' ry='22' stroke='black' stroke-width='2' stroke-dasharray='4 4'/%3E%3C/svg%3E\")}.uV2eYG_cardWorkspaceTrigger :disabled{pointer-events:none}.uV2eYG_cardWorkspaceTrigger:hover:after{background:var(--dsw-alias-state-business-primary)}.uV2eYG_accessory{align-items:center;gap:8px;padding:10px 12px 0;display:flex}.uV2eYG_attachments{min-width:0;padding:4px 12px 0}.uV2eYG_overlayAnchor{height:0;position:absolute;inset:0 0 auto}.uV2eYG_scroll{max-height:var(--dsh-composer-text-max-height);overflow-y:auto}.uV2eYG_grow{position:relative}.uV2eYG_backdrop{color:var(--dsw-alias-label-primary);pointer-events:none;position:absolute;inset:0;overflow:hidden}.uV2eYG_hlToken{color:var(--dsw-alias-state-warn-label);background-color:#0000}.uV2eYG_hlSegment{color:#0000;background-color:#0000;border-radius:4px}.uV2eYG_hint{color:var(--dsw-alias-label-caption)}.uV2eYG_pending{background:var(--dsw-alias-state-business-primary);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite alternate uV2eYG_input-pending}@keyframes uV2eYG_input-pending{0%{opacity:.35}to{opacity:1}}.uV2eYG_input{resize:none;color:#0000;width:100%;height:100%;caret-color:var(--dsw-alias-state-business-primary);background:0 0;border:none;outline:none;position:absolute;inset:0;overflow:hidden}.uV2eYG_input,.uV2eYG_mirror,.uV2eYG_backdrop{box-sizing:border-box;font-family:\"DshChipCell\", var(--dsw-font-family);font-size:inherit;line-height:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;padding:4px 12px 0 16px}.uV2eYG_input::placeholder{color:var(--dsw-alias-label-caption);user-select:none}.uV2eYG_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:not-allowed}.uV2eYG_input[aria-haspopup=menu]{cursor:pointer}.uV2eYG_mirror{visibility:hidden;pointer-events:none}.uV2eYG_hero .uV2eYG_mirror{min-height:52px}.uV2eYG_row{justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:2px 8px 6px;display:flex;container-type:inline-size}.uV2eYG_tools,.uV2eYG_modes,.uV2eYG_trailing{align-items:center;min-width:0;display:flex}.uV2eYG_tools{gap:16px}.uV2eYG_modes{gap:12px}.uV2eYG_trailing{flex:none;gap:12px}.uV2eYG_add{background:var(--dsw-specific-selector);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.uV2eYG_add:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.uV2eYG_add:disabled{opacity:.5;cursor:default}.uV2eYG_select{max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;appearance:none;background-color:#0000;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 4px center;background-repeat:no-repeat;background-size:12px 12px;border:none;border-radius:8px;outline:none;padding:0 20px 0 8px;font-size:13px;font-weight:500;line-height:20px}.uV2eYG_select:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover)}.uV2eYG_select:disabled{opacity:.5;cursor:default}.uV2eYG_primary{background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid;transform:translateY(-2px)}.uV2eYG_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.uV2eYG_primary:disabled{opacity:.4;cursor:default}.uV2eYG_retry{color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:4px;margin-left:8px;padding:1px 8px;font-size:12px}.uV2eYG_textRef{color:var(--dsw-alias-state-business-primary);-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#0000}.uV2eYG_textRef:after{display:none}.uV2eYG_chip{background:#6187d838;border-radius:6px;position:relative}.uV2eYG_chip:before{content:\"\";color:#0000}.uV2eYG_chipLabel{width:calc(138.889% - 10px);color:var(--dsw-alias-label-primary);white-space:nowrap;justify-content:center;align-items:center;display:flex;position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)scale(.72)}.uV2eYG_chipInvalid{opacity:.7;background:#d8616133;text-decoration:line-through}";
3271
3302
  const tagId$17 = "@deepseek-ai/dsh-client-ui-conversation/InputBar.module.css";
@@ -3277,37 +3308,37 @@ window.__ModuleLoader__.load({
3277
3308
  document.head.appendChild(tag);
3278
3309
  }
3279
3310
  var InputBar_module_css_default = {
3280
- "overlayAnchor": "uV2eYG_overlayAnchor",
3281
- "chip": "uV2eYG_chip",
3282
- "accessory": "uV2eYG_accessory",
3311
+ "hlSegment": "uV2eYG_hlSegment",
3312
+ "textRef": "uV2eYG_textRef",
3313
+ "trailing": "uV2eYG_trailing",
3314
+ "noticeError": "uV2eYG_noticeError",
3315
+ "backdrop": "uV2eYG_backdrop",
3316
+ "scroll": "uV2eYG_scroll",
3317
+ "add": "uV2eYG_add",
3318
+ "chipInvalid": "uV2eYG_chipInvalid",
3283
3319
  "mirror": "uV2eYG_mirror",
3320
+ "chipLabel": "uV2eYG_chipLabel",
3321
+ "accessory": "uV2eYG_accessory",
3284
3322
  "card": "uV2eYG_card",
3285
- "grow": "uV2eYG_grow",
3286
- "root": "uV2eYG_root",
3323
+ "retry": "uV2eYG_retry",
3324
+ "hero": "uV2eYG_hero",
3325
+ "select": "uV2eYG_select",
3326
+ "hint": "uV2eYG_hint",
3287
3327
  "hlToken": "uV2eYG_hlToken",
3328
+ "overlayAnchor": "uV2eYG_overlayAnchor",
3288
3329
  "input": "uV2eYG_input",
3330
+ "row": "uV2eYG_row",
3331
+ "pending": "uV2eYG_pending",
3289
3332
  "modes": "uV2eYG_modes",
3290
- "trailing": "uV2eYG_trailing",
3291
- "primary": "uV2eYG_primary",
3292
- "textRef": "uV2eYG_textRef",
3293
- "chipLabel": "uV2eYG_chipLabel",
3294
- "notice": "uV2eYG_notice",
3295
- "select": "uV2eYG_select",
3296
- "hero": "uV2eYG_hero",
3297
- "hlSegment": "uV2eYG_hlSegment",
3298
- "add": "uV2eYG_add",
3333
+ "input-pending": "uV2eYG_input-pending",
3299
3334
  "attachments": "uV2eYG_attachments",
3335
+ "chip": "uV2eYG_chip",
3300
3336
  "cardWorkspaceTrigger": "uV2eYG_cardWorkspaceTrigger",
3337
+ "grow": "uV2eYG_grow",
3338
+ "primary": "uV2eYG_primary",
3339
+ "root": "uV2eYG_root",
3301
3340
  "tools": "uV2eYG_tools",
3302
- "scroll": "uV2eYG_scroll",
3303
- "noticeError": "uV2eYG_noticeError",
3304
- "hint": "uV2eYG_hint",
3305
- "row": "uV2eYG_row",
3306
- "chipInvalid": "uV2eYG_chipInvalid",
3307
- "pending": "uV2eYG_pending",
3308
- "backdrop": "uV2eYG_backdrop",
3309
- "input-pending": "uV2eYG_input-pending",
3310
- "retry": "uV2eYG_retry"
3341
+ "notice": "uV2eYG_notice"
3311
3342
  };
3312
3343
  //#endregion
3313
3344
  //#region lib/types/client/skeleton/InputBar.js
@@ -3369,6 +3400,8 @@ window.__ModuleLoader__.load({
3369
3400
  const dragDepthRef = (0, react.useRef)(0);
3370
3401
  const scrollRef = (0, react.useRef)(null);
3371
3402
  const mirrorRef = (0, react.useRef)(null);
3403
+ const safari = (0, react.useMemo)(() => isSafariBrowser(navigator), []);
3404
+ const safariNativeShrinkRef = (0, react.useRef)(false);
3372
3405
  const composingRef = (0, react.useRef)(false);
3373
3406
  const onCompositionStart = () => {
3374
3407
  composingRef.current = true;
@@ -3396,6 +3429,11 @@ window.__ModuleLoader__.load({
3396
3429
  input?.imageIds,
3397
3430
  inputActions
3398
3431
  ]);
3432
+ (0, react.useLayoutEffect)(() => {
3433
+ const nativeShrink = safariNativeShrinkRef.current;
3434
+ safariNativeShrinkRef.current = false;
3435
+ if (safari && nativeShrink) repairSafariTextareaLayout(inputRef.current);
3436
+ }, [draft, safari]);
3399
3437
  (0, react.useEffect)(() => {
3400
3438
  if (preview !== null && !attachments.some((attachment) => attachment.id === preview.id)) setPreview(null);
3401
3439
  }, [attachments, preview]);
@@ -3506,6 +3544,7 @@ window.__ModuleLoader__.load({
3506
3544
  if (keyboard === void 0 || locked) return;
3507
3545
  if (machineBusy) return;
3508
3546
  const next = e.target.value;
3547
+ safariNativeShrinkRef.current = safari && next.length < draft.length;
3509
3548
  keyboard.setDraft(next);
3510
3549
  keyboard.track(next, e.target.selectionStart ?? next.length);
3511
3550
  };
@@ -3949,12 +3988,12 @@ window.__ModuleLoader__.load({
3949
3988
  document.head.appendChild(tag);
3950
3989
  }
3951
3990
  var EnterBehaviorRow_module_css_default = {
3952
- "row": "T1PP_q_row",
3953
- "rowText": "T1PP_q_rowText",
3954
- "chevron": "T1PP_q_chevron",
3955
3991
  "desc": "T1PP_q_desc",
3992
+ "rowText": "T1PP_q_rowText",
3956
3993
  "selector": "T1PP_q_selector",
3957
- "title": "T1PP_q_title"
3994
+ "chevron": "T1PP_q_chevron",
3995
+ "title": "T1PP_q_title",
3996
+ "row": "T1PP_q_row"
3958
3997
  };
3959
3998
  //#endregion
3960
3999
  //#region lib/types/client/settings/EnterBehaviorRow.js
@@ -4027,33 +4066,33 @@ window.__ModuleLoader__.load({
4027
4066
  document.head.appendChild(tag);
4028
4067
  }
4029
4068
  var MessageItem_module_css_default = {
4030
- "turnErrorRow": "gdEzaW_turnErrorRow",
4031
- "turnErrorCode": "gdEzaW_turnErrorCode",
4069
+ "retry-shimmer": "gdEzaW_retry-shimmer",
4070
+ "retrySummary": "gdEzaW_retrySummary",
4071
+ "retryText": "gdEzaW_retryText",
4072
+ "compactionRow": "gdEzaW_compactionRow",
4032
4073
  "retryRow": "gdEzaW_retryRow",
4033
- "turnErrorMessage": "gdEzaW_turnErrorMessage",
4034
- "compactionTitle": "gdEzaW_compactionTitle",
4035
- "contextRow": "gdEzaW_contextRow",
4074
+ "retryDetailLabel": "gdEzaW_retryDetailLabel",
4075
+ "refChip": "gdEzaW_refChip",
4076
+ "turnErrorTitle": "gdEzaW_turnErrorTitle",
4077
+ "retryDetails": "gdEzaW_retryDetails",
4036
4078
  "compactionSep": "gdEzaW_compactionSep",
4037
4079
  "turnErrorCopy": "gdEzaW_turnErrorCopy",
4038
- "turnErrorTitle": "gdEzaW_turnErrorTitle",
4039
- "userRow": "gdEzaW_userRow",
4040
- "maxTokensTitle": "gdEzaW_maxTokensTitle",
4041
- "bubble": "gdEzaW_bubble",
4042
- "turnErrorDot": "gdEzaW_turnErrorDot",
4043
- "retry-shimmer": "gdEzaW_retry-shimmer",
4044
- "refChip": "gdEzaW_refChip",
4080
+ "turnErrorMessage": "gdEzaW_turnErrorMessage",
4045
4081
  "compactionDisclosureIcon": "gdEzaW_compactionDisclosureIcon",
4046
- "compactionButton": "gdEzaW_compactionButton",
4047
- "compactionBody": "gdEzaW_compactionBody",
4048
- "retryText": "gdEzaW_retryText",
4082
+ "contextRow": "gdEzaW_contextRow",
4049
4083
  "compactionSummary": "gdEzaW_compactionSummary",
4050
- "compactionContextIcon": "gdEzaW_compactionContextIcon",
4051
- "compactionRow": "gdEzaW_compactionRow",
4052
- "retryDetails": "gdEzaW_retryDetails",
4053
- "retrySummary": "gdEzaW_retrySummary",
4084
+ "turnErrorCode": "gdEzaW_turnErrorCode",
4085
+ "turnErrorDot": "gdEzaW_turnErrorDot",
4086
+ "turnErrorRow": "gdEzaW_turnErrorRow",
4087
+ "maxTokensTitle": "gdEzaW_maxTokensTitle",
4088
+ "compactionTitle": "gdEzaW_compactionTitle",
4089
+ "compactionButton": "gdEzaW_compactionButton",
4090
+ "bubble": "gdEzaW_bubble",
4054
4091
  "userStack": "gdEzaW_userStack",
4092
+ "compactionContextIcon": "gdEzaW_compactionContextIcon",
4055
4093
  "compactionLeading": "gdEzaW_compactionLeading",
4056
- "retryDetailLabel": "gdEzaW_retryDetailLabel"
4094
+ "compactionBody": "gdEzaW_compactionBody",
4095
+ "userRow": "gdEzaW_userRow"
4057
4096
  };
4058
4097
  //#endregion
4059
4098
  //#region lib/types/client/chat/CompactionItem.js
@@ -4125,29 +4164,29 @@ window.__ModuleLoader__.load({
4125
4164
  document.head.appendChild(tag);
4126
4165
  }
4127
4166
  var ContextBody_module_css_default = {
4167
+ "filePath": "NM4-hq_filePath",
4168
+ "fileAction": "NM4-hq_fileAction",
4169
+ "entryName": "NM4-hq_entryName",
4170
+ "file": "NM4-hq_file",
4171
+ "relaySender": "NM4-hq_relaySender",
4172
+ "fields": "NM4-hq_fields",
4173
+ "recallCounts": "NM4-hq_recallCounts",
4174
+ "fieldValue": "NM4-hq_fieldValue",
4128
4175
  "field": "NM4-hq_field",
4129
- "entryDescription": "NM4-hq_entryDescription",
4130
- "files": "NM4-hq_files",
4131
- "sections": "NM4-hq_sections",
4132
- "fieldKey": "NM4-hq_fieldKey",
4176
+ "entries": "NM4-hq_entries",
4177
+ "recalls": "NM4-hq_recalls",
4133
4178
  "catalogNotice": "NM4-hq_catalogNotice",
4134
- "fields": "NM4-hq_fields",
4135
- "entry": "NM4-hq_entry",
4179
+ "recallLabel": "NM4-hq_recallLabel",
4180
+ "fieldKey": "NM4-hq_fieldKey",
4136
4181
  "sectionName": "NM4-hq_sectionName",
4137
- "sectionText": "NM4-hq_sectionText",
4138
4182
  "recall": "NM4-hq_recall",
4139
- "relaySender": "NM4-hq_relaySender",
4140
- "recallLabel": "NM4-hq_recallLabel",
4141
- "filePath": "NM4-hq_filePath",
4142
- "entries": "NM4-hq_entries",
4143
- "entryName": "NM4-hq_entryName",
4144
- "fileAction": "NM4-hq_fileAction",
4145
- "file": "NM4-hq_file",
4146
- "section": "NM4-hq_section",
4183
+ "sections": "NM4-hq_sections",
4184
+ "entry": "NM4-hq_entry",
4147
4185
  "text": "NM4-hq_text",
4148
- "recalls": "NM4-hq_recalls",
4149
- "recallCounts": "NM4-hq_recallCounts",
4150
- "fieldValue": "NM4-hq_fieldValue"
4186
+ "entryDescription": "NM4-hq_entryDescription",
4187
+ "files": "NM4-hq_files",
4188
+ "section": "NM4-hq_section",
4189
+ "sectionText": "NM4-hq_sectionText"
4151
4190
  };
4152
4191
  //#endregion
4153
4192
  //#region lib/types/client/chat/ContextBody.js
@@ -4682,11 +4721,11 @@ window.__ModuleLoader__.load({
4682
4721
  document.head.appendChild(tag);
4683
4722
  }
4684
4723
  var ContextInjectionRow_module_css_default = {
4724
+ "chevron": "pC0e7a_chevron",
4685
4725
  "source": "pC0e7a_source",
4686
4726
  "summary": "pC0e7a_summary",
4687
4727
  "body": "pC0e7a_body",
4688
4728
  "sep": "pC0e7a_sep",
4689
- "chevron": "pC0e7a_chevron",
4690
4729
  "root": "pC0e7a_root"
4691
4730
  };
4692
4731
  //#endregion
@@ -4785,9 +4824,9 @@ window.__ModuleLoader__.load({
4785
4824
  "actions": "p-xYUq_actions",
4786
4825
  "timeStart": "p-xYUq_timeStart",
4787
4826
  "runTimeDot": "p-xYUq_runTimeDot",
4788
- "visuallyHidden": "p-xYUq_visuallyHidden",
4789
4827
  "action": "p-xYUq_action",
4790
- "timeEnd": "p-xYUq_timeEnd"
4828
+ "timeEnd": "p-xYUq_timeEnd",
4829
+ "visuallyHidden": "p-xYUq_visuallyHidden"
4791
4830
  };
4792
4831
  //#endregion
4793
4832
  //#region lib/types/client/chat/MessageIconActions.js
@@ -5180,19 +5219,19 @@ window.__ModuleLoader__.load({
5180
5219
  document.head.appendChild(tag);
5181
5220
  }
5182
5221
  var ChatView_module_css_default = {
5183
- "toBottom": "Md3f7G_toBottom",
5184
- "column": "Md3f7G_column",
5185
- "callRow": "Md3f7G_callRow",
5222
+ "dsh-turn-status-shimmer": "Md3f7G_dsh-turn-status-shimmer",
5186
5223
  "turnStatusClock": "Md3f7G_turnStatusClock",
5187
- "flowItem": "Md3f7G_flowItem",
5188
- "scroll": "Md3f7G_scroll",
5224
+ "callRow": "Md3f7G_callRow",
5189
5225
  "hint": "Md3f7G_hint",
5190
- "toBottomSlot": "Md3f7G_toBottomSlot",
5226
+ "root": "Md3f7G_root",
5227
+ "openError": "Md3f7G_openError",
5191
5228
  "older": "Md3f7G_older",
5229
+ "flowItem": "Md3f7G_flowItem",
5230
+ "toBottomSlot": "Md3f7G_toBottomSlot",
5192
5231
  "turnStatus": "Md3f7G_turnStatus",
5193
- "root": "Md3f7G_root",
5194
- "dsh-turn-status-shimmer": "Md3f7G_dsh-turn-status-shimmer",
5195
- "openError": "Md3f7G_openError"
5232
+ "column": "Md3f7G_column",
5233
+ "toBottom": "Md3f7G_toBottom",
5234
+ "scroll": "Md3f7G_scroll"
5196
5235
  };
5197
5236
  //#endregion
5198
5237
  //#region lib/types/client/chat/ChatNodeSeat.js
@@ -5669,15 +5708,15 @@ window.__ModuleLoader__.load({
5669
5708
  document.head.appendChild(tag);
5670
5709
  }
5671
5710
  var ApprovalPanel_module_css_default = {
5672
- "card": "bqrRRG_card",
5673
- "command": "bqrRRG_command",
5674
- "actionRow": "bqrRRG_actionRow",
5675
- "root": "bqrRRG_root",
5676
- "body": "bqrRRG_body",
5677
- "headline": "bqrRRG_headline",
5678
5711
  "reject": "bqrRRG_reject",
5712
+ "actionRow": "bqrRRG_actionRow",
5679
5713
  "dot": "bqrRRG_dot",
5680
- "strip": "bqrRRG_strip"
5714
+ "strip": "bqrRRG_strip",
5715
+ "body": "bqrRRG_body",
5716
+ "command": "bqrRRG_command",
5717
+ "card": "bqrRRG_card",
5718
+ "root": "bqrRRG_root",
5719
+ "headline": "bqrRRG_headline"
5681
5720
  };
5682
5721
  //#endregion
5683
5722
  //#region lib/types/client/skeleton/ApprovalPanel.js
@@ -6116,21 +6155,21 @@ window.__ModuleLoader__.load({
6116
6155
  document.head.appendChild(tag);
6117
6156
  }
6118
6157
  var TodoPanel_module_css_default = {
6119
- "glyph": "lXshSW_glyph",
6120
- "glyphCompleted": "lXshSW_glyphCompleted",
6121
6158
  "item": "lXshSW_item",
6122
- "title": "lXshSW_title",
6123
- "glyphProgress": "lXshSW_glyphProgress",
6124
- "glyphPending": "lXshSW_glyphPending",
6125
- "chevron": "lXshSW_chevron",
6126
- "todo-progress-spin": "lXshSW_todo-progress-spin",
6127
- "root": "lXshSW_root",
6128
6159
  "header": "lXshSW_header",
6160
+ "todo-progress-spin": "lXshSW_todo-progress-spin",
6161
+ "glyph": "lXshSW_glyph",
6162
+ "content": "lXshSW_content",
6163
+ "glyphProgress": "lXshSW_glyphProgress",
6129
6164
  "body": "lXshSW_body",
6165
+ "glyphCompleted": "lXshSW_glyphCompleted",
6166
+ "root": "lXshSW_root",
6167
+ "chevron": "lXshSW_chevron",
6130
6168
  "lead": "lXshSW_lead",
6131
6169
  "list": "lXshSW_list",
6132
6170
  "progress": "lXshSW_progress",
6133
- "content": "lXshSW_content"
6171
+ "glyphPending": "lXshSW_glyphPending",
6172
+ "title": "lXshSW_title"
6134
6173
  };
6135
6174
  //#endregion
6136
6175
  //#region lib/types/client/skeleton/TodoPanel.js
@@ -6323,18 +6362,18 @@ window.__ModuleLoader__.load({
6323
6362
  document.head.appendChild(tag);
6324
6363
  }
6325
6364
  var QueueDock_module_css_default = {
6326
- "dock": "_7yHdaG_dock",
6327
- "list": "_7yHdaG_list",
6328
- "panel": "_7yHdaG_panel",
6365
+ "chevron": "_7yHdaG_chevron",
6329
6366
  "row": "_7yHdaG_row",
6330
- "header": "_7yHdaG_header",
6331
- "count": "_7yHdaG_count",
6332
- "preview": "_7yHdaG_preview",
6367
+ "editor": "_7yHdaG_editor",
6333
6368
  "actions": "_7yHdaG_actions",
6369
+ "list": "_7yHdaG_list",
6370
+ "preview": "_7yHdaG_preview",
6371
+ "dock": "_7yHdaG_dock",
6334
6372
  "action": "_7yHdaG_action",
6335
6373
  "lead": "_7yHdaG_lead",
6336
- "editor": "_7yHdaG_editor",
6337
- "chevron": "_7yHdaG_chevron"
6374
+ "panel": "_7yHdaG_panel",
6375
+ "count": "_7yHdaG_count",
6376
+ "header": "_7yHdaG_header"
6338
6377
  };
6339
6378
  //#endregion
6340
6379
  //#region lib/types/client/queue/QueueDock.js
@@ -6592,23 +6631,23 @@ window.__ModuleLoader__.load({
6592
6631
  document.head.appendChild(tag);
6593
6632
  }
6594
6633
  var HeroShell_module_css_default = {
6595
- "workspaceLabel": "pXSMma_workspaceLabel",
6596
- "headline": "pXSMma_headline",
6597
- "chevron": "pXSMma_chevron",
6598
- "fish": "pXSMma_fish",
6599
- "stack": "pXSMma_stack",
6600
- "workspace": "pXSMma_workspace",
6601
- "modalInput": "pXSMma_modalInput",
6634
+ "folder": "pXSMma_folder",
6635
+ "previewBadge": "pXSMma_previewBadge",
6602
6636
  "modalError": "pXSMma_modalError",
6637
+ "workspace": "pXSMma_workspace",
6638
+ "chevron": "pXSMma_chevron",
6603
6639
  "modalAction": "pXSMma_modalAction",
6604
- "body": "pXSMma_body",
6605
- "hero-fish-swim": "pXSMma_hero-fish-swim",
6606
6640
  "workspaceRow": "pXSMma_workspaceRow",
6607
- "folder": "pXSMma_folder",
6641
+ "headline": "pXSMma_headline",
6642
+ "stack": "pXSMma_stack",
6643
+ "fish": "pXSMma_fish",
6608
6644
  "root": "pXSMma_root",
6609
6645
  "fishHitbox": "pXSMma_fishHitbox",
6646
+ "modalInput": "pXSMma_modalInput",
6647
+ "hero-fish-swim": "pXSMma_hero-fish-swim",
6648
+ "workspaceLabel": "pXSMma_workspaceLabel",
6610
6649
  "headlineText": "pXSMma_headlineText",
6611
- "previewBadge": "pXSMma_previewBadge"
6650
+ "body": "pXSMma_body"
6612
6651
  };
6613
6652
  //#endregion
6614
6653
  //#region lib/types/client/skeleton/EmptyHero.js
@@ -6758,28 +6797,28 @@ window.__ModuleLoader__.load({
6758
6797
  document.head.appendChild(tag);
6759
6798
  }
6760
6799
  var ConversationRoot_module_css_default = {
6761
- "headerActions": "wSkVaW_headerActions",
6762
- "crumb": "wSkVaW_crumb",
6763
- "tab": "wSkVaW_tab",
6764
- "tabs": "wSkVaW_tabs",
6765
6800
  "titleRow": "wSkVaW_titleRow",
6801
+ "viewArea": "wSkVaW_viewArea",
6802
+ "headerUtilities": "wSkVaW_headerUtilities",
6766
6803
  "composerHero": "wSkVaW_composerHero",
6767
- "header": "wSkVaW_header",
6804
+ "crumbs": "wSkVaW_crumbs",
6805
+ "composerSeat": "wSkVaW_composerSeat",
6806
+ "tabs": "wSkVaW_tabs",
6807
+ "heroGlow": "wSkVaW_heroGlow",
6808
+ "tabActive": "wSkVaW_tabActive",
6809
+ "crumbSep": "wSkVaW_crumbSep",
6768
6810
  "crumbCurrent": "wSkVaW_crumbCurrent",
6769
- "headerHidden": "wSkVaW_headerHidden",
6770
- "viewArea": "wSkVaW_viewArea",
6771
- "heroWorkspaceRow": "wSkVaW_heroWorkspaceRow",
6772
- "titleCluster": "wSkVaW_titleCluster",
6811
+ "headerActions": "wSkVaW_headerActions",
6773
6812
  "composerStack": "wSkVaW_composerStack",
6774
6813
  "scrollBody": "wSkVaW_scrollBody",
6814
+ "tab": "wSkVaW_tab",
6775
6815
  "crumbSeg": "wSkVaW_crumbSeg",
6776
- "crumbSep": "wSkVaW_crumbSep",
6777
- "headerUtilities": "wSkVaW_headerUtilities",
6778
- "tabActive": "wSkVaW_tabActive",
6779
- "heroGlow": "wSkVaW_heroGlow",
6780
- "composerSeat": "wSkVaW_composerSeat",
6781
- "crumbs": "wSkVaW_crumbs",
6782
- "root": "wSkVaW_root"
6816
+ "root": "wSkVaW_root",
6817
+ "headerHidden": "wSkVaW_headerHidden",
6818
+ "titleCluster": "wSkVaW_titleCluster",
6819
+ "header": "wSkVaW_header",
6820
+ "crumb": "wSkVaW_crumb",
6821
+ "heroWorkspaceRow": "wSkVaW_heroWorkspaceRow"
6783
6822
  };
6784
6823
  //#endregion
6785
6824
  //#region lib/types/client/skeleton/ConversationRoot.js
@@ -7055,15 +7094,15 @@ window.__ModuleLoader__.load({
7055
7094
  document.head.appendChild(tag);
7056
7095
  }
7057
7096
  var DetailsPanel_module_css_default = {
7058
- "body": "ydkMvW_body",
7059
7097
  "code": "ydkMvW_code",
7060
- "sectionLabel": "ydkMvW_sectionLabel",
7061
- "section": "ydkMvW_section",
7062
7098
  "close": "ydkMvW_close",
7063
- "root": "ydkMvW_root",
7099
+ "body": "ydkMvW_body",
7100
+ "section": "ydkMvW_section",
7101
+ "empty": "ydkMvW_empty",
7064
7102
  "header": "ydkMvW_header",
7065
7103
  "title": "ydkMvW_title",
7066
- "empty": "ydkMvW_empty"
7104
+ "root": "ydkMvW_root",
7105
+ "sectionLabel": "ydkMvW_sectionLabel"
7067
7106
  };
7068
7107
  //#endregion
7069
7108
  //#region lib/types/client/skeleton/DetailsPanel.js
@@ -8916,15 +8955,15 @@ window.__ModuleLoader__.load({
8916
8955
  document.head.appendChild(tag);
8917
8956
  }
8918
8957
  var ReasoningRow_module_css_default = {
8958
+ "leading": "QWLzlG_leading",
8959
+ "dsh-reasoning-row-sweep": "QWLzlG_dsh-reasoning-row-sweep",
8960
+ "chevron": "QWLzlG_chevron",
8961
+ "separator": "QWLzlG_separator",
8919
8962
  "thinkBody": "QWLzlG_thinkBody",
8920
8963
  "row": "QWLzlG_row",
8921
- "root": "QWLzlG_root",
8922
- "separator": "QWLzlG_separator",
8923
- "chevron": "QWLzlG_chevron",
8924
- "dsh-reasoning-row-sweep": "QWLzlG_dsh-reasoning-row-sweep",
8925
8964
  "summary": "QWLzlG_summary",
8926
- "title": "QWLzlG_title",
8927
- "leading": "QWLzlG_leading"
8965
+ "root": "QWLzlG_root",
8966
+ "title": "QWLzlG_title"
8928
8967
  };
8929
8968
  //#endregion
8930
8969
  //#region lib/types/client/chat/ReasoningRow.js
@@ -9010,9 +9049,9 @@ window.__ModuleLoader__.load({
9010
9049
  }
9011
9050
  var AssistantMarkdown_module_css_default = {
9012
9051
  "body": "Sxvs8a_body",
9013
- "root": "Sxvs8a_root",
9052
+ "actions": "Sxvs8a_actions",
9014
9053
  "stopped": "Sxvs8a_stopped",
9015
- "actions": "Sxvs8a_actions"
9054
+ "root": "Sxvs8a_root"
9016
9055
  };
9017
9056
  //#endregion
9018
9057
  //#region lib/types/client/chat/AssistantMarkdown.js
@@ -9126,14 +9165,14 @@ window.__ModuleLoader__.load({
9126
9165
  }
9127
9166
  var GenericCommandCard_module_css_default = {
9128
9167
  "root": "_Xvjua_root",
9168
+ "dsh-command-row-sweep": "_Xvjua_dsh-command-row-sweep",
9129
9169
  "separator": "_Xvjua_separator",
9130
- "leading": "_Xvjua_leading",
9131
- "chevron": "_Xvjua_chevron",
9132
- "summary": "_Xvjua_summary",
9133
9170
  "body": "_Xvjua_body",
9134
9171
  "row": "_Xvjua_row",
9135
- "title": "_Xvjua_title",
9136
- "dsh-command-row-sweep": "_Xvjua_dsh-command-row-sweep"
9172
+ "leading": "_Xvjua_leading",
9173
+ "summary": "_Xvjua_summary",
9174
+ "chevron": "_Xvjua_chevron",
9175
+ "title": "_Xvjua_title"
9137
9176
  };
9138
9177
  //#endregion
9139
9178
  //#region lib/types/client/chat/GenericCommandCard.js
@@ -9268,8 +9307,8 @@ window.__ModuleLoader__.load({
9268
9307
  document.head.appendChild(tag);
9269
9308
  }
9270
9309
  var TurnTailNodeView_module_css_default = {
9271
- "root": "osXY9a_root",
9272
- "actions": "osXY9a_actions"
9310
+ "actions": "osXY9a_actions",
9311
+ "root": "osXY9a_root"
9273
9312
  };
9274
9313
  //#endregion
9275
9314
  //#region lib/types/client/chat/TurnTailNodeView.js
@@ -0,0 +1,18 @@
1
+ /** Safari-specific textarea layout recovery for the conversation composer. */
2
+ /** Browser identity fields needed to distinguish Safari from other WebKit-based browsers. */
3
+ export interface BrowserIdentity {
4
+ readonly userAgent: string;
5
+ readonly vendor: string;
6
+ }
7
+ /**
8
+ * Detect Safari's `Version/... Safari/...` form while excluding known alternate iOS browser tokens.
9
+ * @param identity - Browser user-agent and vendor values.
10
+ * @returns Whether the identity should use the Safari-specific recovery.
11
+ */
12
+ export declare function isSafariBrowser(identity: BrowserIdentity): boolean;
13
+ /**
14
+ * Repair Safari's stale native textarea layout and the scrollport auto height it can contaminate.
15
+ * @param input - Composer textarea whose own scrollable overflow must stay zero.
16
+ */
17
+ export declare function repairSafariTextareaLayout(input: HTMLTextAreaElement | null): void;
18
+ //# sourceMappingURL=safari.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-conversation",
3
3
  "description": "Conversation domain: skeleton, ordered chat flow, composer with the Host-backed busy-Enter preference, and details host",
4
- "version": "0.1.0-rc.6",
4
+ "version": "0.1.0-rc.7",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -46,61 +46,61 @@
46
46
  "dependencies": {
47
47
  "clsx": "^2.0.0",
48
48
  "@deepseek-ai/schemastery": "^3.18.1",
49
- "@deepseek-ai/dsh-settings": "^0.1.0-rc.6"
49
+ "@deepseek-ai/dsh-settings": "^0.1.0-rc.7"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "react": "^18.2.0",
53
- "@deepseek-ai/dsh-agent": "^0.1.0-rc.6",
53
+ "@deepseek-ai/dsh-agent": "^0.1.0-rc.7",
54
+ "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7",
55
+ "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7",
56
+ "@deepseek-ai/dsh-brand": "^0.1.0-rc.7",
54
57
  "@deepseek-ai/cordis": "^4.0.1",
55
- "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6",
56
- "@deepseek-ai/dsh-brand": "^0.1.0-rc.6",
57
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
58
- "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6",
59
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
60
- "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.6",
61
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
62
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6",
63
- "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6",
64
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
65
- "@deepseek-ai/dsh-commands": "^0.1.0-rc.6",
66
- "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6",
67
- "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6",
68
- "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.6",
69
- "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.6",
70
- "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.6",
71
- "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
72
- "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6"
58
+ "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7",
59
+ "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7",
60
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7",
61
+ "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.7",
62
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7",
63
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7",
64
+ "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7",
65
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7",
66
+ "@deepseek-ai/dsh-commands": "^0.1.0-rc.7",
67
+ "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7",
68
+ "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7",
69
+ "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.7",
70
+ "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.7",
71
+ "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.7",
72
+ "@deepseek-ai/dsh-tools": "^0.1.0-rc.7"
73
73
  },
74
74
  "devDependencies": {
75
75
  "@types/react": "~18.3.1",
76
76
  "react": "^18.2.0",
77
77
  "@deepseek-ai/cordis": "^4.0.1",
78
- "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6",
79
- "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6",
80
- "@deepseek-ai/dsh-agent": "^0.1.0-rc.6",
81
- "@deepseek-ai/dsh-brand": "^0.1.0-rc.6",
82
- "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6",
83
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
84
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
85
- "@deepseek-ai/dsh-client-test-runtime": "^0.1.0-rc.6",
86
- "@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.6",
87
- "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.6",
88
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
89
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6",
90
- "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6",
91
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
92
- "@deepseek-ai/dsh-commands": "^0.1.0-rc.6",
93
- "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6",
94
- "@deepseek-ai/dsh-goal": "^0.1.0-rc.6",
95
- "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6",
96
- "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.6",
97
- "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.6",
98
- "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.6",
99
- "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6",
100
- "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.6",
101
- "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.6",
102
- "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
103
- "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.6"
78
+ "@deepseek-ai/dsh-agent": "^0.1.0-rc.7",
79
+ "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7",
80
+ "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7",
81
+ "@deepseek-ai/dsh-brand": "^0.1.0-rc.7",
82
+ "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7",
83
+ "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7",
84
+ "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.7",
85
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7",
86
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7",
87
+ "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7",
88
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7",
89
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7",
90
+ "@deepseek-ai/dsh-commands": "^0.1.0-rc.7",
91
+ "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7",
92
+ "@deepseek-ai/dsh-goal": "^0.1.0-rc.7",
93
+ "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7",
94
+ "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.7",
95
+ "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.7",
96
+ "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.7",
97
+ "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7",
98
+ "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.7",
99
+ "@deepseek-ai/dsh-client-test-runtime": "^0.1.0-rc.7",
100
+ "@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.7",
101
+ "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.7",
102
+ "@deepseek-ai/dsh-tools": "^0.1.0-rc.7",
103
+ "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.7"
104
104
  },
105
105
  "files": [
106
106
  "lib/index.js",