@huanlin/dsh-focus-chat 0.1.25 → 0.1.26

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/lib/client.js CHANGED
@@ -272,20 +272,14 @@ window.__ModuleLoader__.load({
272
272
  edit: "edit",
273
273
  str_replace_editor: "edit",
274
274
  run_code: "code",
275
- cordis_package_inspect: "read",
276
- cordis_runtime_inspect: "read",
277
- cordis_run: "others",
278
- cordis_stop: "others",
279
- cordis_undefine: "others"
275
+ cordis_inspect_list: "read",
276
+ cordis_inspect_query: "read"
280
277
  };
281
278
  /** Tool-owned title keys that refine a generic row variant without replacing
282
279
  * it (the official tool.title vocabulary for the named tools). */
283
280
  const TOOL_TITLES = {
284
- cordis_package_inspect: "tool.title.inspect",
285
- cordis_runtime_inspect: "tool.title.inspect",
286
- cordis_run: "tool.title.runCordis",
287
- cordis_stop: "tool.title.stopCordis",
288
- cordis_undefine: "tool.title.removeCordis",
281
+ cordis_inspect_list: "tool.title.inspect",
282
+ cordis_inspect_query: "tool.title.inspect",
289
283
  job_output: "tool.title.jobOutput",
290
284
  job_kill: "tool.title.jobKill",
291
285
  job_list: "tool.title.jobList",
@@ -374,9 +368,9 @@ window.__ModuleLoader__.load({
374
368
  if (parts.length === 0 && node.error !== void 0) parts.push(`${node.error.name}: ${node.error.code}`);
375
369
  return parts.join("\n");
376
370
  }
377
- /** Parse the call head paired with one immutable Tool block (null when the head or the JSON object is unavailable). */
371
+ /** Parse the call head paired with one immutable Tool block (null when the head, the JSON object, or the dispatched arguments are unavailable). */
378
372
  function parsedCall(block) {
379
- const call = "kind" in block ? block.call : block;
373
+ const call = "kind" in block ? block.call : block.phase === "preparing" ? null : block;
380
374
  if (call === null) return null;
381
375
  const parsed = parseArgs(call.argsRaw);
382
376
  if (typeof parsed !== "object" || parsed === null) return null;
@@ -845,7 +839,7 @@ window.__ModuleLoader__.load({
845
839
  function toolRowModelUncached(block, cwd, home, cache) {
846
840
  const done = "kind" in block;
847
841
  const name = done ? block.call?.name ?? "" : block.name;
848
- const argsRaw = done ? block.call?.argsRaw ?? "" : block.argsRaw;
842
+ const argsRaw = done ? block.call?.argsRaw ?? "" : block.phase === "preparing" ? "" : block.argsRaw;
849
843
  const errorCode = done && block.error !== void 0 ? block.error.code : null;
850
844
  const state = !done ? "running" : block.error !== void 0 && STOPPED_TOOL_CODES$1.has(block.error.code) ? "stopped" : block.isError ? "error" : "ok";
851
845
  const variant = TOOL_VARIANTS$1[name] ?? "others";
@@ -963,24 +957,25 @@ window.__ModuleLoader__.load({
963
957
  switch (node.kind) {
964
958
  case "user":
965
959
  case "steering":
966
- case "context": {
960
+ case "context":
961
+ case "turn-trigger": {
967
962
  const message = data;
968
963
  const base = {
969
964
  kind: "message",
970
965
  nodeKey: key,
971
- role: node.kind,
966
+ role: node.kind === "turn-trigger" ? "context" : node.kind,
972
967
  content: message.content,
973
968
  time: message.time,
974
969
  referenceLabels: message.referenceLabels,
975
970
  skillNames: message.skillNames
976
971
  };
977
- if (node.kind !== "context") return base;
972
+ if (node.kind !== "context" && node.kind !== "turn-trigger") return base;
978
973
  const context = message;
979
974
  return {
980
975
  ...base,
981
976
  context: {
982
977
  source: context.source,
983
- provenance: context.provenance,
978
+ producer: context.producer,
984
979
  form: context.form
985
980
  }
986
981
  };
@@ -1078,7 +1073,11 @@ window.__ModuleLoader__.load({
1078
1073
  const turn = location.kind === "turn" || location.kind === "step" ? location.turn : void 0;
1079
1074
  const closing = tail.closing;
1080
1075
  const runMs = turn === void 0 || turn.start === void 0 || turn.end === void 0 ? null : Math.max(0, turn.end.time - turn.start.time);
1081
- const produced = producedForClosing(turn?.data.get("deliverables"), closing?.finalNode.seq ?? tail.seq);
1076
+ const produced = producedForClosing(turn === void 0 ? void 0 : turn.data.get("deliverables"), closing?.finalNode.seq ?? tail.seq);
1077
+ const timing = closing?.finalNode.timing;
1078
+ const ttftMs = timing !== void 0 && timing.stepStartTime !== null && timing.firstTokenTime !== null ? Math.max(0, timing.firstTokenTime - timing.stepStartTime) : null;
1079
+ const decodeMs = timing !== void 0 && timing.firstTokenTime !== null ? timing.completedTime - timing.firstTokenTime : null;
1080
+ const tokensPerSecond = tail.tokenUsage !== void 0 && decodeMs !== null && decodeMs > 0 ? tail.tokenUsage.outputTokens / (decodeMs / 1e3) : null;
1082
1081
  return {
1083
1082
  kind: "turn-tail",
1084
1083
  nodeKey: key,
@@ -1088,8 +1087,8 @@ window.__ModuleLoader__.load({
1088
1087
  closingTime: closing?.time ?? null,
1089
1088
  closingText: closing === null ? "" : assistantText(closing.blocks),
1090
1089
  runMs,
1091
- ttftMs: tail.ttftMs ?? null,
1092
- tokensPerSecond: tail.tokensPerSecond ?? null,
1090
+ ttftMs,
1091
+ tokensPerSecond,
1093
1092
  branchUnavailable: tail.branchUnavailable,
1094
1093
  produced,
1095
1094
  tokenUsage: tail.tokenUsage
@@ -1456,6 +1455,7 @@ window.__ModuleLoader__.load({
1456
1455
  return {
1457
1456
  signal: (signal) => t("terminal.signal", { signal }),
1458
1457
  exitCode: (code) => t("terminal.exitCode", { code }),
1458
+ noExitCode: t("terminal.noExitCode"),
1459
1459
  running: t("terminal.running"),
1460
1460
  failed: t("terminal.failed"),
1461
1461
  done: t("terminal.done"),
@@ -1471,18 +1471,23 @@ window.__ModuleLoader__.load({
1471
1471
  /** Diff-card labels bound to the focus locale. */
1472
1472
  function diffLabels(t) {
1473
1473
  return {
1474
+ codeLabel: t("terminal.codeLabel"),
1475
+ wrapLabel: t("terminal.wrapLabel"),
1476
+ unwrapLabel: t("terminal.unwrapLabel"),
1474
1477
  copy: t("copy"),
1475
1478
  copied: t("copied"),
1476
1479
  collapseAria: t("diff.collapseAria"),
1477
1480
  expandAria: (count) => t("diff.expandAria", { count }),
1478
1481
  collapse: t("terminal.collapse"),
1479
- expand: (hidden) => t("terminal.expand", { n: hidden }),
1480
- files: (count) => t("diff.files", { count })
1482
+ expand: (hidden) => t("terminal.expand", { n: hidden })
1481
1483
  };
1482
1484
  }
1483
1485
  /** Read-card labels bound to the focus locale. */
1484
1486
  function readLabels(t) {
1485
1487
  return {
1488
+ codeLabel: t("terminal.codeLabel"),
1489
+ wrapLabel: t("terminal.wrapLabel"),
1490
+ unwrapLabel: t("terminal.unwrapLabel"),
1486
1491
  window: (shown, total) => t("read.window", {
1487
1492
  shown,
1488
1493
  total
@@ -1567,8 +1572,8 @@ window.__ModuleLoader__.load({
1567
1572
  }
1568
1573
  var ImageLightbox_module_css_default = {
1569
1574
  "backdrop": "zKLoba_backdrop",
1570
- "mask": "zKLoba_mask",
1571
1575
  "close": "zKLoba_close",
1576
+ "mask": "zKLoba_mask",
1572
1577
  "image": "zKLoba_image"
1573
1578
  };
1574
1579
  //#endregion
@@ -1623,7 +1628,7 @@ window.__ModuleLoader__.load({
1623
1628
  className: ImageLightbox_module_css_default.close,
1624
1629
  "aria-label": labels.close,
1625
1630
  onClick: onClose,
1626
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutline16, { size: 16 })
1631
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, { size: 16 })
1627
1632
  })
1628
1633
  ]
1629
1634
  }), document.body);
@@ -1642,8 +1647,8 @@ window.__ModuleLoader__.load({
1642
1647
  var MessageImage_module_css_default = {
1643
1648
  "loading": "Bjxzta_loading",
1644
1649
  "gallery": "Bjxzta_gallery",
1645
- "frame": "Bjxzta_frame",
1646
- "error": "Bjxzta_error"
1650
+ "error": "Bjxzta_error",
1651
+ "frame": "Bjxzta_frame"
1647
1652
  };
1648
1653
  //#endregion
1649
1654
  //#region src/client/view/chrome/MessageImage.tsx
@@ -1907,14 +1912,14 @@ window.__ModuleLoader__.load({
1907
1912
  document.head.appendChild(tag);
1908
1913
  }
1909
1914
  var ThinkRow_module_css_default = {
1910
- "thinkSeparator": "dJ1PEG_thinkSeparator",
1915
+ "thinkPreviewClip": "dJ1PEG_thinkPreviewClip",
1911
1916
  "thinkPreview": "dJ1PEG_thinkPreview",
1912
- "thinkSummary": "dJ1PEG_thinkSummary",
1913
1917
  "thinkWrap": "dJ1PEG_thinkWrap",
1914
- "dsh-focus-reasoning-sweep": "dJ1PEG_dsh-focus-reasoning-sweep",
1915
- "thinkPreviewClip": "dJ1PEG_thinkPreviewClip",
1918
+ "thinkSeparator": "dJ1PEG_thinkSeparator",
1916
1919
  "thinkRow": "dJ1PEG_thinkRow",
1917
1920
  "thinkPreviewText": "dJ1PEG_thinkPreviewText",
1921
+ "dsh-focus-reasoning-sweep": "dJ1PEG_dsh-focus-reasoning-sweep",
1922
+ "thinkSummary": "dJ1PEG_thinkSummary",
1918
1923
  "thinkBody": "dJ1PEG_thinkBody"
1919
1924
  };
1920
1925
  //#endregion
@@ -1955,7 +1960,7 @@ window.__ModuleLoader__.load({
1955
1960
  }),
1956
1961
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1957
1962
  className: ThinkRow_module_css_default.thinkRow,
1958
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconThinkOutline14, { size: 14 }),
1963
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconThinkOutlineMedium, { size: 14 }),
1959
1964
  title,
1960
1965
  open: expanded,
1961
1966
  expandable: true,
@@ -2109,11 +2114,11 @@ window.__ModuleLoader__.load({
2109
2114
  fill: "currentColor"
2110
2115
  })
2111
2116
  });
2112
- case "file": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBrowseOutline16, {
2117
+ case "file": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBrowseOutlineRegular, {
2113
2118
  size,
2114
2119
  className
2115
2120
  });
2116
- case "folder": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderClose16, {
2121
+ case "folder": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderCloseRegular, {
2117
2122
  size,
2118
2123
  className
2119
2124
  });
@@ -2131,38 +2136,38 @@ window.__ModuleLoader__.load({
2131
2136
  document.head.appendChild(tag);
2132
2137
  }
2133
2138
  var ContextRow_module_css_default = {
2134
- "contextBody": "_179bCq_contextBody",
2135
- "contextFile": "_179bCq_contextFile",
2136
2139
  "contextText": "_179bCq_contextText",
2137
- "contextNotice": "_179bCq_contextNotice",
2138
- "contextFields": "_179bCq_contextFields",
2140
+ "contextRecallLabel": "_179bCq_contextRecallLabel",
2141
+ "contextFoldRow": "_179bCq_contextFoldRow",
2142
+ "contextChevron": "_179bCq_contextChevron",
2143
+ "contextFile": "_179bCq_contextFile",
2139
2144
  "contextSections": "_179bCq_contextSections",
2140
- "contextRecalls": "_179bCq_contextRecalls",
2141
- "contextEntry": "_179bCq_contextEntry",
2142
- "contextSectionText": "_179bCq_contextSectionText",
2143
- "contextRelaySender": "_179bCq_contextRelaySender",
2145
+ "contextRow": "_179bCq_contextRow",
2146
+ "contextFieldValue": "_179bCq_contextFieldValue",
2144
2147
  "thinkSeparator": "_179bCq_thinkSeparator",
2148
+ "contextEntries": "_179bCq_contextEntries",
2149
+ "contextFiles": "_179bCq_contextFiles",
2150
+ "contextFieldKey": "_179bCq_contextFieldKey",
2151
+ "contextNotice": "_179bCq_contextNotice",
2145
2152
  "contextEntryName": "_179bCq_contextEntryName",
2146
2153
  "contextSection": "_179bCq_contextSection",
2154
+ "contextFilePath": "_179bCq_contextFilePath",
2155
+ "contextRelaySender": "_179bCq_contextRelaySender",
2156
+ "contextEntryDescription": "_179bCq_contextEntryDescription",
2157
+ "contextEntry": "_179bCq_contextEntry",
2158
+ "contextFold": "_179bCq_contextFold",
2159
+ "contextSource": "_179bCq_contextSource",
2147
2160
  "contextField": "_179bCq_contextField",
2161
+ "contextSectionText": "_179bCq_contextSectionText",
2162
+ "contextRecall": "_179bCq_contextRecall",
2163
+ "contextBody": "_179bCq_contextBody",
2148
2164
  "contextFileAction": "_179bCq_contextFileAction",
2165
+ "contextFields": "_179bCq_contextFields",
2149
2166
  "contextRecallCounts": "_179bCq_contextRecallCounts",
2150
2167
  "contextSectionName": "_179bCq_contextSectionName",
2151
- "contextFoldBody": "_179bCq_contextFoldBody",
2152
- "contextFold": "_179bCq_contextFold",
2153
- "contextFoldRow": "_179bCq_contextFoldRow",
2154
- "contextEntryDescription": "_179bCq_contextEntryDescription",
2155
- "contextRecallLabel": "_179bCq_contextRecallLabel",
2156
- "contextRecall": "_179bCq_contextRecall",
2157
- "contextRow": "_179bCq_contextRow",
2158
- "contextChevron": "_179bCq_contextChevron",
2159
- "contextFieldKey": "_179bCq_contextFieldKey",
2160
- "contextFieldValue": "_179bCq_contextFieldValue",
2161
- "contextFiles": "_179bCq_contextFiles",
2162
- "contextSource": "_179bCq_contextSource",
2163
- "contextFilePath": "_179bCq_contextFilePath",
2164
2168
  "contextSummary": "_179bCq_contextSummary",
2165
- "contextEntries": "_179bCq_contextEntries"
2169
+ "contextRecalls": "_179bCq_contextRecalls",
2170
+ "contextFoldBody": "_179bCq_contextFoldBody"
2166
2171
  };
2167
2172
  //#endregion
2168
2173
  //#region src/client/view/rows/ContextRow.tsx
@@ -2561,7 +2566,7 @@ window.__ModuleLoader__.load({
2561
2566
  const ContextRow = (0, react.memo)(function ContextRow({ item, t, mdLabels }) {
2562
2567
  const [open, setOpen] = (0, react.useState)(false);
2563
2568
  const context = item.context;
2564
- const provenance = context?.provenance;
2569
+ const provenance = context?.producer;
2565
2570
  const label = provenance === void 0 ? null : provenance.label;
2566
2571
  const { rendered, summary, body } = contextBody(context?.form ?? null, {
2567
2572
  content: item.content,
@@ -2576,7 +2581,7 @@ window.__ModuleLoader__.load({
2576
2581
  icon: recall ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2577
2582
  "data-context-recall-icon": true,
2578
2583
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReferenceIcon, { kind: "session" })
2579
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconContextInjectionOutline16, { size: 14 }),
2584
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconContextInjectionOutlineRegular, { size: 14 }),
2580
2585
  title,
2581
2586
  open,
2582
2587
  expandable: true,
@@ -2620,7 +2625,7 @@ window.__ModuleLoader__.load({
2620
2625
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
2621
2626
  className: ContextRow_module_css_default.contextFoldRow,
2622
2627
  chevronClassName: ContextRow_module_css_default.contextChevron,
2623
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconContextInjectionOutline16, { size: 14 }),
2628
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconContextInjectionOutlineRegular, { size: 14 }),
2624
2629
  title,
2625
2630
  open,
2626
2631
  expandable: true,
@@ -2668,16 +2673,16 @@ window.__ModuleLoader__.load({
2668
2673
  //#region src/client/view/helpers/icons.tsx
2669
2674
  /** Tool-family leading icons, mirroring the chat GenericToolCard table (glyphs at 14). */
2670
2675
  const VARIANT_ICONS = {
2671
- search: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutline16, { size: 14 }),
2672
- read: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBrowseOutline16, { size: 14 }),
2673
- bash: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconApiOutline14, { size: 14 }),
2674
- write: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, { size: 14 }),
2675
- edit: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, { size: 14 }),
2676
- code: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutline16, { size: 14 }),
2677
- question: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQuestionOutline14, { size: 14 }),
2678
- todo: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChecklistOutline14, { size: 14 }),
2679
- skill: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutline16, { size: 14 }),
2680
- others: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSparkle16, { size: 14 })
2676
+ search: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 }),
2677
+ read: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBrowseOutlineRegular, { size: 14 }),
2678
+ bash: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconApiOutlineMedium, { size: 14 }),
2679
+ write: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineRegular, { size: 14 }),
2680
+ edit: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineRegular, { size: 14 }),
2681
+ code: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
2682
+ question: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQuestionOutlineMedium, { size: 14 }),
2683
+ todo: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChecklistOutlineMedium, { size: 14 }),
2684
+ skill: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutlineRegular, { size: 14 }),
2685
+ others: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSparkleRegular, { size: 14 })
2681
2686
  };
2682
2687
  /** Tool name → leading-icon family (mirrors the chat row classification). */
2683
2688
  const TOOL_VARIANTS = {
@@ -2695,11 +2700,8 @@ window.__ModuleLoader__.load({
2695
2700
  edit: "edit",
2696
2701
  str_replace_editor: "edit",
2697
2702
  run_code: "code",
2698
- cordis_package_inspect: "read",
2699
- cordis_runtime_inspect: "read",
2700
- cordis_run: "others",
2701
- cordis_stop: "others",
2702
- cordis_undefine: "others",
2703
+ cordis_inspect_list: "read",
2704
+ cordis_inspect_query: "read",
2703
2705
  ask_user_question: "question"
2704
2706
  };
2705
2707
  /** One call's leading glyph: the family icon, or the state dot for failures. */
@@ -2724,30 +2726,30 @@ window.__ModuleLoader__.load({
2724
2726
  document.head.appendChild(tag);
2725
2727
  }
2726
2728
  var ToolCallRow_module_css_default = {
2727
- "ioSection": "_4yws7G_ioSection",
2728
- "callLeading": "_4yws7G_callLeading",
2729
- "webBody": "_4yws7G_webBody",
2730
- "callRowInner": "_4yws7G_callRowInner",
2729
+ "callBodyWrap": "_4yws7G_callBodyWrap",
2730
+ "callSeparator": "_4yws7G_callSeparator",
2731
+ "subcalls": "_4yws7G_subcalls",
2731
2732
  "readBody": "_4yws7G_readBody",
2732
- "diffBody": "_4yws7G_diffBody",
2733
+ "callErrorSummary": "_4yws7G_callErrorSummary",
2733
2734
  "ioLabel": "_4yws7G_ioLabel",
2734
- "searchRecovery": "_4yws7G_searchRecovery",
2735
+ "callSummary": "_4yws7G_callSummary",
2736
+ "callRowInner": "_4yws7G_callRowInner",
2735
2737
  "dsh-focus-tool-row-sweep": "_4yws7G_dsh-focus-tool-row-sweep",
2736
- "callBodyWrap": "_4yws7G_callBodyWrap",
2737
2738
  "ioCard": "_4yws7G_ioCard",
2738
- "ioDivider": "_4yws7G_ioDivider",
2739
- "callSummary": "_4yws7G_callSummary",
2740
- "codeBody": "_4yws7G_codeBody",
2741
- "terminalBody": "_4yws7G_terminalBody",
2742
- "subcalls": "_4yws7G_subcalls",
2739
+ "ioSection": "_4yws7G_ioSection",
2743
2740
  "callFileLink": "_4yws7G_callFileLink",
2744
- "callErrorSummary": "_4yws7G_callErrorSummary",
2745
- "ioText": "_4yws7G_ioText",
2746
- "callSeparator": "_4yws7G_callSeparator",
2747
2741
  "callChevron": "_4yws7G_callChevron",
2748
- "searchBody": "_4yws7G_searchBody",
2749
- "callTitle": "_4yws7G_callTitle",
2750
2742
  "callRow": "_4yws7G_callRow",
2743
+ "ioDivider": "_4yws7G_ioDivider",
2744
+ "ioText": "_4yws7G_ioText",
2745
+ "callLeading": "_4yws7G_callLeading",
2746
+ "callTitle": "_4yws7G_callTitle",
2747
+ "terminalBody": "_4yws7G_terminalBody",
2748
+ "diffBody": "_4yws7G_diffBody",
2749
+ "searchBody": "_4yws7G_searchBody",
2750
+ "webBody": "_4yws7G_webBody",
2751
+ "codeBody": "_4yws7G_codeBody",
2752
+ "searchRecovery": "_4yws7G_searchRecovery",
2751
2753
  "bodyScroll": "_4yws7G_bodyScroll"
2752
2754
  };
2753
2755
  //#endregion
@@ -2997,11 +2999,11 @@ window.__ModuleLoader__.load({
2997
2999
  document.head.appendChild(tag);
2998
3000
  }
2999
3001
  var ToolGroupRow_module_css_default = {
3000
- "groupRowInner": "AZoo5a_groupRowInner",
3001
- "groupTitleLine": "AZoo5a_groupTitleLine",
3002
+ "groupTitleFailed": "AZoo5a_groupTitleFailed",
3002
3003
  "calls": "AZoo5a_calls",
3004
+ "groupRowInner": "AZoo5a_groupRowInner",
3003
3005
  "groupRow": "AZoo5a_groupRow",
3004
- "groupTitleFailed": "AZoo5a_groupTitleFailed"
3006
+ "groupTitleLine": "AZoo5a_groupTitleLine"
3005
3007
  };
3006
3008
  //#endregion
3007
3009
  //#region src/client/view/rows/ToolGroupRow.tsx
@@ -3015,7 +3017,7 @@ window.__ModuleLoader__.load({
3015
3017
  "data-state": group.running ? "running" : "ok",
3016
3018
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
3017
3019
  className: ToolGroupRow_module_css_default.groupRowInner,
3018
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSparkle16, { size: 16 }),
3020
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSparkleRegular, { size: 16 }),
3019
3021
  title: "",
3020
3022
  open: expanded,
3021
3023
  expandable: true,
@@ -3072,8 +3074,8 @@ window.__ModuleLoader__.load({
3072
3074
  }
3073
3075
  var SystemPromptRow_module_css_default = {
3074
3076
  "text": "OTeFQG_text",
3075
- "root": "OTeFQG_root",
3076
3077
  "chevron": "OTeFQG_chevron",
3078
+ "root": "OTeFQG_root",
3077
3079
  "body": "OTeFQG_body"
3078
3080
  };
3079
3081
  //#endregion
@@ -3088,7 +3090,7 @@ window.__ModuleLoader__.load({
3088
3090
  const [open, setOpen] = (0, react.useState)(false);
3089
3091
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
3090
3092
  className: SystemPromptRow_module_css_default.root,
3091
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBrowseOutline16, { size: 14 }),
3093
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBrowseOutlineRegular, { size: 14 }),
3092
3094
  chevronClassName: SystemPromptRow_module_css_default.chevron,
3093
3095
  title: t("systemPrompt"),
3094
3096
  open,
@@ -3125,10 +3127,10 @@ window.__ModuleLoader__.load({
3125
3127
  document.head.appendChild(tag);
3126
3128
  }
3127
3129
  var MessageActions_module_css_default = {
3130
+ "messageClockDot": "_4s79ma_messageClockDot",
3128
3131
  "messageClock": "_4s79ma_messageClock",
3129
3132
  "messageActions": "_4s79ma_messageActions",
3130
- "messageAction": "_4s79ma_messageAction",
3131
- "messageClockDot": "_4s79ma_messageClockDot"
3133
+ "messageAction": "_4s79ma_messageAction"
3132
3134
  };
3133
3135
  //#endregion
3134
3136
  //#region src/client/view/chrome/MessageActions.tsx
@@ -3207,7 +3209,7 @@ window.__ModuleLoader__.load({
3207
3209
  className: MessageActions_module_css_default.messageAction,
3208
3210
  "aria-label": copied ? t("copied") : t("copy"),
3209
3211
  onClick: onCopy,
3210
- children: copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCopyOutline16, {})
3212
+ children: copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCopyOutlineRegular, {})
3211
3213
  })
3212
3214
  }),
3213
3215
  extraActions,
@@ -3221,7 +3223,7 @@ window.__ModuleLoader__.load({
3221
3223
  "aria-disabled": branchUnavailable || void 0,
3222
3224
  "data-unavailable": branchUnavailable || void 0,
3223
3225
  onClick: branchUnavailable ? void 0 : onBranch,
3224
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBranchOutline16, {})
3226
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBranchOutlineRegular, {})
3225
3227
  })
3226
3228
  }),
3227
3229
  clock === "end" ? clockEl : null
@@ -3240,10 +3242,10 @@ window.__ModuleLoader__.load({
3240
3242
  document.head.appendChild(tag);
3241
3243
  }
3242
3244
  var UserBubble_module_css_default = {
3245
+ "userStack": "F9H9aG_userStack",
3243
3246
  "userRow": "F9H9aG_userRow",
3244
3247
  "bubble": "F9H9aG_bubble",
3245
- "refChip": "F9H9aG_refChip",
3246
- "userStack": "F9H9aG_userStack"
3248
+ "refChip": "F9H9aG_refChip"
3247
3249
  };
3248
3250
  //#endregion
3249
3251
  //#region src/client/view/rows/UserBubble.tsx
@@ -3282,27 +3284,30 @@ window.__ModuleLoader__.load({
3282
3284
  })]
3283
3285
  });
3284
3286
  });
3285
- const PendingSteeringBubble = (0, react.memo)(function PendingSteeringBubble({ content, t, loadImage }) {
3286
- const text = (0, react.useMemo)(() => messageText(content), [content]);
3287
- const images = (0, react.useMemo)(() => userImages(content), [content]);
3288
- const others = content.filter((block) => block.type !== "text" && block.type !== "image");
3289
- const showBubble = text !== "" || others.length > 0;
3287
+ const PendingSteeringBubble = (0, react.memo)(function PendingSteeringBubble({ submission, t }) {
3288
+ const text = submission.text;
3289
+ const images = submission.attachments.filter((attachment) => attachment.type === "image");
3290
+ const files = submission.attachments.filter((attachment) => attachment.type === "file");
3291
+ const showBubble = text !== "" || files.length > 0;
3290
3292
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3291
3293
  className: UserBubble_module_css_default.userRow,
3292
3294
  "data-pending-steering": true,
3293
3295
  "data-time-hover-root": true,
3294
3296
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3295
3297
  className: UserBubble_module_css_default.userStack,
3296
- children: [images.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ImageGallery, {
3297
- images,
3298
- load: loadImage,
3299
- align: "end",
3300
- labels: messageImageLabels(t)
3298
+ children: [images.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3299
+ className: UserBubble_module_css_default.bubble,
3300
+ "data-pending-images": true,
3301
+ children: images.map((attachment, index) => attachment.type === "image" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
3302
+ className: UserBubble_module_css_default.pendingImage,
3303
+ src: attachment.value.previewUrl,
3304
+ alt: attachment.value.name ?? ""
3305
+ }, index))
3301
3306
  }), showBubble && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3302
3307
  className: UserBubble_module_css_default.bubble,
3303
- children: [(0, _deepseek_ai_dsh_client_ui_primitives.projectUserText)(text, []), others.map((block, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, {
3308
+ children: [(0, _deepseek_ai_dsh_client_ui_primitives.projectUserText)(text, []), files.map((attachment, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, {
3304
3309
  label: t("extraBlock"),
3305
- payload: block,
3310
+ payload: attachment,
3306
3311
  truncatedLabel: jsonTruncated(t)
3307
3312
  }, index))]
3308
3313
  })]
@@ -3359,14 +3364,14 @@ window.__ModuleLoader__.load({
3359
3364
  document.head.appendChild(tag);
3360
3365
  }
3361
3366
  var MessageFeedbackActions_module_css_default = {
3362
- "noteSave": "-anQya_noteSave",
3363
3367
  "action": "-anQya_action",
3368
+ "noteInput": "-anQya_noteInput",
3369
+ "noteActions": "-anQya_noteActions",
3364
3370
  "failure": "-anQya_failure",
3371
+ "noteSave": "-anQya_noteSave",
3365
3372
  "noteOpen": "-anQya_noteOpen",
3366
- "noteActions": "-anQya_noteActions",
3367
3373
  "noteCancel": "-anQya_noteCancel",
3368
- "notePanel": "-anQya_notePanel",
3369
- "noteInput": "-anQya_noteInput"
3374
+ "notePanel": "-anQya_notePanel"
3370
3375
  };
3371
3376
  //#endregion
3372
3377
  //#region src/client/view/chrome/MessageFeedbackActions.tsx
@@ -3550,7 +3555,7 @@ window.__ModuleLoader__.load({
3550
3555
  onClick: () => {
3551
3556
  onRate("positive");
3552
3557
  },
3553
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconLikeOutline16, {})
3558
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconLikeOutlineRegular, {})
3554
3559
  })
3555
3560
  }),
3556
3561
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
@@ -3568,7 +3573,7 @@ window.__ModuleLoader__.load({
3568
3573
  onClick: () => {
3569
3574
  onRate("negative");
3570
3575
  },
3571
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconDislikeOutline16, {})
3576
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconDislikeOutlineRegular, {})
3572
3577
  })
3573
3578
  }),
3574
3579
  rating !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
@@ -3651,14 +3656,14 @@ window.__ModuleLoader__.load({
3651
3656
  document.head.appendChild(tag);
3652
3657
  }
3653
3658
  var TurnUsageDisclosure_module_css_default = {
3654
- "root": "xrt96a_root",
3655
- "details": "xrt96a_details",
3659
+ "totalValue": "xrt96a_totalValue",
3656
3660
  "summary": "xrt96a_summary",
3657
- "separator": "xrt96a_separator",
3658
3661
  "reasoning": "xrt96a_reasoning",
3659
- "totalValue": "xrt96a_totalValue",
3660
- "route": "xrt96a_route",
3661
3662
  "totalLabel": "xrt96a_totalLabel",
3663
+ "root": "xrt96a_root",
3664
+ "separator": "xrt96a_separator",
3665
+ "route": "xrt96a_route",
3666
+ "details": "xrt96a_details",
3662
3667
  "chevron": "xrt96a_chevron"
3663
3668
  };
3664
3669
  //#endregion
@@ -3697,7 +3702,7 @@ window.__ModuleLoader__.load({
3697
3702
  });
3698
3703
  const routes = usage.routes?.map((route) => `${route.provider}/${route.model}`).join(", ") ?? "";
3699
3704
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
3700
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconDataOutline16, {}),
3705
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconDataOutlineRegular, {}),
3701
3706
  title: t("turnUsage.title"),
3702
3707
  open,
3703
3708
  expandable: true,
@@ -3756,14 +3761,14 @@ window.__ModuleLoader__.load({
3756
3761
  document.head.appendChild(tag);
3757
3762
  }
3758
3763
  var TurnTailRow_module_css_default = {
3759
- "producedLabel": "g6Vo2a_producedLabel",
3760
- "producedLane": "g6Vo2a_producedLane",
3761
- "producedMeasure": "g6Vo2a_producedMeasure",
3762
- "producedRow": "g6Vo2a_producedRow",
3763
3764
  "producedShowFolder": "g6Vo2a_producedShowFolder",
3765
+ "producedFile": "g6Vo2a_producedFile",
3764
3766
  "turnTail": "g6Vo2a_turnTail",
3765
3767
  "producedMore": "g6Vo2a_producedMore",
3766
- "producedFile": "g6Vo2a_producedFile"
3768
+ "producedRow": "g6Vo2a_producedRow",
3769
+ "producedLabel": "g6Vo2a_producedLabel",
3770
+ "producedLane": "g6Vo2a_producedLane",
3771
+ "producedMeasure": "g6Vo2a_producedMeasure"
3767
3772
  };
3768
3773
  //#endregion
3769
3774
  //#region src/client/view/rows/TurnTailRow.tsx
@@ -3905,12 +3910,12 @@ window.__ModuleLoader__.load({
3905
3910
  document.head.appendChild(tag);
3906
3911
  }
3907
3912
  var CommandRow_module_css_default = {
3908
- "dsh-focus-command-row-sweep": "EhZFdG_dsh-focus-command-row-sweep",
3909
- "commandRowInner": "EhZFdG_commandRowInner",
3910
3913
  "thinkSeparator": "EhZFdG_thinkSeparator",
3911
- "commandBody": "EhZFdG_commandBody",
3914
+ "commandSummary": "EhZFdG_commandSummary",
3915
+ "commandRowInner": "EhZFdG_commandRowInner",
3916
+ "dsh-focus-command-row-sweep": "EhZFdG_dsh-focus-command-row-sweep",
3912
3917
  "commandRow": "EhZFdG_commandRow",
3913
- "commandSummary": "EhZFdG_commandSummary"
3918
+ "commandBody": "EhZFdG_commandBody"
3914
3919
  };
3915
3920
  //#endregion
3916
3921
  //#region src/client/view/rows/CommandRow.tsx
@@ -3930,7 +3935,7 @@ window.__ModuleLoader__.load({
3930
3935
  children: t("row.running")
3931
3936
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
3932
3937
  className: CommandRow_module_css_default.commandRowInner,
3933
- icon: item.outcomeError ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconApiOutline14, { size: 14 }),
3938
+ icon: item.outcomeError ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconApiOutlineMedium, { size: 14 }),
3934
3939
  title,
3935
3940
  open,
3936
3941
  expandable: body !== null,
@@ -3968,15 +3973,15 @@ window.__ModuleLoader__.load({
3968
3973
  document.head.appendChild(tag);
3969
3974
  }
3970
3975
  var CompactionRow_module_css_default = {
3971
- "compactionBody": "MjDQ7W_compactionBody",
3976
+ "compactionDisclosureIcon": "MjDQ7W_compactionDisclosureIcon",
3972
3977
  "compactionSep": "MjDQ7W_compactionSep",
3973
3978
  "compactionTitle": "MjDQ7W_compactionTitle",
3974
- "compactionRow": "MjDQ7W_compactionRow",
3975
- "compactionLeading": "MjDQ7W_compactionLeading",
3976
3979
  "compactionContextIcon": "MjDQ7W_compactionContextIcon",
3980
+ "compactionBody": "MjDQ7W_compactionBody",
3981
+ "compactionLeading": "MjDQ7W_compactionLeading",
3977
3982
  "compactionButton": "MjDQ7W_compactionButton",
3978
- "compactionDisclosureIcon": "MjDQ7W_compactionDisclosureIcon",
3979
- "compactionSummary": "MjDQ7W_compactionSummary"
3983
+ "compactionSummary": "MjDQ7W_compactionSummary",
3984
+ "compactionRow": "MjDQ7W_compactionRow"
3980
3985
  };
3981
3986
  //#endregion
3982
3987
  //#region src/client/view/rows/CompactionRow.tsx
@@ -4006,11 +4011,11 @@ window.__ModuleLoader__.load({
4006
4011
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4007
4012
  className: CompactionRow_module_css_default.compactionContextIcon,
4008
4013
  "data-compaction-icon": "context",
4009
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconApiOutline14, {})
4014
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconApiOutlineMedium, {})
4010
4015
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4011
4016
  className: CompactionRow_module_css_default.compactionDisclosureIcon,
4012
4017
  "data-compaction-disclosure": open ? "expanded" : "collapsed",
4013
- children: !open ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutline14, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {})
4018
+ children: !open ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutlineMedium, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, {})
4014
4019
  })]
4015
4020
  }),
4016
4021
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -4077,12 +4082,12 @@ window.__ModuleLoader__.load({
4077
4082
  document.head.appendChild(tag);
4078
4083
  }
4079
4084
  var RetryRow_module_css_default = {
4085
+ "retryRow": "Z1bpSa_retryRow",
4080
4086
  "dsh-focus-retry-shimmer": "Z1bpSa_dsh-focus-retry-shimmer",
4081
- "retryText": "Z1bpSa_retryText",
4082
- "retryDetailLabel": "Z1bpSa_retryDetailLabel",
4083
4087
  "retryDetails": "Z1bpSa_retryDetails",
4088
+ "retryDetailLabel": "Z1bpSa_retryDetailLabel",
4084
4089
  "retrySummary": "Z1bpSa_retrySummary",
4085
- "retryRow": "Z1bpSa_retryRow"
4090
+ "retryText": "Z1bpSa_retryText"
4086
4091
  };
4087
4092
  //#endregion
4088
4093
  //#region src/client/view/rows/RetryRow.tsx
@@ -4165,8 +4170,8 @@ window.__ModuleLoader__.load({
4165
4170
  document.head.appendChild(tag);
4166
4171
  }
4167
4172
  var TurnFoldRow_module_css_default = {
4168
- "turnFold": "Gcx_5W_turnFold",
4169
4173
  "label": "Gcx_5W_label",
4174
+ "turnFold": "Gcx_5W_turnFold",
4170
4175
  "turnFoldBody": "Gcx_5W_turnFoldBody",
4171
4176
  "root": "Gcx_5W_root",
4172
4177
  "chevron": "Gcx_5W_chevron"
@@ -4198,7 +4203,7 @@ window.__ModuleLoader__.load({
4198
4203
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4199
4204
  className: TurnFoldRow_module_css_default.label,
4200
4205
  children: item.stopped ? t("turnFold.stopped", { duration }) : t("worked", { duration })
4201
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { className: TurnFoldRow_module_css_default.chevron })]
4206
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, { className: TurnFoldRow_module_css_default.chevron })]
4202
4207
  }), expanded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4203
4208
  className: TurnFoldRow_module_css_default.turnFoldBody,
4204
4209
  "data-turn-fold-body": true,
@@ -4228,15 +4233,15 @@ window.__ModuleLoader__.load({
4228
4233
  document.head.appendChild(tag);
4229
4234
  }
4230
4235
  var FlowRow_module_css_default = {
4231
- "turnErrorCode": "W4FZQG_turnErrorCode",
4232
- "stopped": "W4FZQG_stopped",
4233
- "turnErrorRow": "W4FZQG_turnErrorRow",
4234
4236
  "assistant": "W4FZQG_assistant",
4235
- "turnErrorDot": "W4FZQG_turnErrorDot",
4236
- "turnErrorTitle": "W4FZQG_turnErrorTitle",
4237
+ "stopped": "W4FZQG_stopped",
4237
4238
  "contextRow": "W4FZQG_contextRow",
4239
+ "turnErrorTitle": "W4FZQG_turnErrorTitle",
4240
+ "turnErrorDot": "W4FZQG_turnErrorDot",
4241
+ "turnErrorCode": "W4FZQG_turnErrorCode",
4238
4242
  "turnErrorCopy": "W4FZQG_turnErrorCopy",
4239
- "turnErrorMessage": "W4FZQG_turnErrorMessage"
4243
+ "turnErrorMessage": "W4FZQG_turnErrorMessage",
4244
+ "turnErrorRow": "W4FZQG_turnErrorRow"
4240
4245
  };
4241
4246
  //#endregion
4242
4247
  //#region src/client/view/rows/FlowRow.tsx
@@ -4421,8 +4426,8 @@ window.__ModuleLoader__.load({
4421
4426
  }
4422
4427
  var RunningStatus_module_css_default = {
4423
4428
  "dsh-focus-turn-shimmer": "_1zwjxa_dsh-focus-turn-shimmer",
4424
- "turnStatus": "_1zwjxa_turnStatus",
4425
- "turnStatusClock": "_1zwjxa_turnStatusClock"
4429
+ "turnStatusClock": "_1zwjxa_turnStatusClock",
4430
+ "turnStatus": "_1zwjxa_turnStatus"
4426
4431
  };
4427
4432
  //#endregion
4428
4433
  //#region src/client/view/chrome/RunningStatus.tsx
@@ -4465,17 +4470,17 @@ window.__ModuleLoader__.load({
4465
4470
  document.head.appendChild(tag);
4466
4471
  }
4467
4472
  var TurnNavigator_module_css_default = {
4468
- "markPreview": "jXLS-q_markPreview",
4469
4473
  "markActive": "jXLS-q_markActive",
4470
- "marks": "jXLS-q_marks",
4471
- "previewPrompt": "jXLS-q_previewPrompt",
4472
- "previewResponse": "jXLS-q_previewResponse",
4473
- "rail": "jXLS-q_rail",
4474
4474
  "dsh-focus-turn-preview-enter": "jXLS-q_dsh-focus-turn-preview-enter",
4475
+ "slot": "jXLS-q_slot",
4475
4476
  "preview": "jXLS-q_preview",
4476
- "markPosition": "jXLS-q_markPosition",
4477
+ "previewResponse": "jXLS-q_previewResponse",
4477
4478
  "dsh-focus-turn-mark-enter": "jXLS-q_dsh-focus-turn-mark-enter",
4478
- "slot": "jXLS-q_slot",
4479
+ "previewPrompt": "jXLS-q_previewPrompt",
4480
+ "marks": "jXLS-q_marks",
4481
+ "markPosition": "jXLS-q_markPosition",
4482
+ "markPreview": "jXLS-q_markPreview",
4483
+ "rail": "jXLS-q_rail",
4479
4484
  "mark": "jXLS-q_mark"
4480
4485
  };
4481
4486
  //#endregion
@@ -4588,19 +4593,19 @@ window.__ModuleLoader__.load({
4588
4593
  document.head.appendChild(tag);
4589
4594
  }
4590
4595
  var FocusView_module_css_default = {
4591
- "runningCalls": "VkMv3G_runningCalls",
4592
4596
  "toBottom": "VkMv3G_toBottom",
4593
- "modalAction": "VkMv3G_modalAction",
4594
- "hint": "VkMv3G_hint",
4595
- "scroll": "VkMv3G_scroll",
4597
+ "olderButton": "VkMv3G_olderButton",
4598
+ "flowItem": "VkMv3G_flowItem",
4599
+ "runningCalls": "VkMv3G_runningCalls",
4596
4600
  "root": "VkMv3G_root",
4601
+ "scroll": "VkMv3G_scroll",
4597
4602
  "column": "VkMv3G_column",
4598
- "flowItem": "VkMv3G_flowItem",
4603
+ "modalAction": "VkMv3G_modalAction",
4599
4604
  "older": "VkMv3G_older",
4600
- "olderButton": "VkMv3G_olderButton",
4601
4605
  "openError": "VkMv3G_openError",
4602
- "toBottomSlot": "VkMv3G_toBottomSlot",
4603
- "empty": "VkMv3G_empty"
4606
+ "hint": "VkMv3G_hint",
4607
+ "empty": "VkMv3G_empty",
4608
+ "toBottomSlot": "VkMv3G_toBottomSlot"
4604
4609
  };
4605
4610
  //#endregion
4606
4611
  //#region src/client/view/FocusView.tsx
@@ -4737,12 +4742,12 @@ window.__ModuleLoader__.load({
4737
4742
  const running = useSession((s) => s.running);
4738
4743
  const hasMore = useSession((s) => s.hasMore);
4739
4744
  const loadingOlder = useSession((s) => s.loadingOlder);
4740
- const inbox = useSession((s) => s.queue);
4745
+ const pendingSubmissions = useSession((s) => s.pendingSubmissions);
4741
4746
  const openState = useSession((s) => s.openState);
4742
4747
  const openError = useSession((s) => s.openError);
4743
4748
  const cwd = useSessions((s) => s.byId[sessionId]?.cwd);
4744
4749
  const home = useHostHome((home) => home);
4745
- const pendingSteering = (0, react.useMemo)(() => inbox.filter((item) => item.placement === "steering"), [inbox]);
4750
+ const pendingSteering = (0, react.useMemo)(() => pendingSubmissions.filter((item) => item.placement === "steering"), [pendingSubmissions]);
4746
4751
  const flowCacheRef = (0, react.useRef)(createFlowBuildCache());
4747
4752
  const flow = (0, react.useMemo)(() => buildFocusFlow(chat.order, (key) => chat.nodes.get(key), cwd, home, flowCacheRef.current), [
4748
4753
  chat,
@@ -4876,7 +4881,7 @@ window.__ModuleLoader__.load({
4876
4881
  const lastItem = flow.at(-1);
4877
4882
  const firstKey = flow[0] === void 0 ? null : flowKey(flow[0]);
4878
4883
  const lastKey = lastItem === void 0 ? null : flowKey(lastItem);
4879
- const lastSteeringId = pendingSteering[pendingSteering.length - 1]?.id ?? "";
4884
+ const lastSteeringId = pendingSteering[pendingSteering.length - 1]?.requestId ?? "";
4880
4885
  const followSig = `${openState}:${firstKey}:${lastKey}:${flow.length}:${running ? 1 : 0}:${lastSteeringId}`;
4881
4886
  const toBottom = (el) => {
4882
4887
  anchorRef.current = null;
@@ -5141,10 +5146,9 @@ window.__ModuleLoader__.load({
5141
5146
  t
5142
5147
  }),
5143
5148
  pendingSteering.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PendingSteeringBubble, {
5144
- content: item.content,
5145
- t,
5146
- loadImage
5147
- }, item.id)),
5149
+ submission: item,
5150
+ t
5151
+ }, item.requestId)),
5148
5152
  !atBottom && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5149
5153
  className: FocusView_module_css_default.toBottomSlot,
5150
5154
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
@@ -5156,7 +5160,7 @@ window.__ModuleLoader__.load({
5156
5160
  /* v8 ignore next -- ref-null guard: the button only renders alongside the mounted list. */
5157
5161
  if (local !== null) toBottom(scrollerOf(local));
5158
5162
  },
5159
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {})
5163
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, {})
5160
5164
  })
5161
5165
  })
5162
5166
  ]
@@ -5561,6 +5565,10 @@ window.__ModuleLoader__.load({
5561
5565
  "terminal.failed": "失败",
5562
5566
  "terminal.done": "已完成",
5563
5567
  "terminal.noOutput": "无输出",
5568
+ "terminal.noExitCode": "无退出码",
5569
+ "terminal.codeLabel": "代码",
5570
+ "terminal.wrapLabel": "自动换行",
5571
+ "terminal.unwrapLabel": "不换行",
5564
5572
  "terminal.collapseAria": "收起输出",
5565
5573
  "terminal.collapse": "收起",
5566
5574
  "terminal.expandAria": "展开其余 {n} 行输出",
@@ -5778,6 +5786,10 @@ window.__ModuleLoader__.load({
5778
5786
  "terminal.failed": "Failed",
5779
5787
  "terminal.done": "Done",
5780
5788
  "terminal.noOutput": "No output",
5789
+ "terminal.noExitCode": "No exit code",
5790
+ "terminal.codeLabel": "Code",
5791
+ "terminal.wrapLabel": "Wrap lines",
5792
+ "terminal.unwrapLabel": "No wrap",
5781
5793
  "terminal.collapseAria": "Collapse output",
5782
5794
  "terminal.collapse": "Collapse",
5783
5795
  "terminal.expandAria": "Expand the remaining {n} output lines",
@@ -5940,7 +5952,8 @@ window.__ModuleLoader__.load({
5940
5952
  "connection",
5941
5953
  "remote",
5942
5954
  "remote.session",
5943
- "remote.messageFeedback"
5955
+ "remote.messageFeedback",
5956
+ "uiWorkspace"
5944
5957
  ];
5945
5958
  /** Dictionary namespace owned by this plugin. */
5946
5959
  const NS = "focus";
@@ -5996,7 +6009,7 @@ window.__ModuleLoader__.load({
5996
6009
  atSeq: seq,
5997
6010
  increaseTitle: true
5998
6011
  }).then((childId) => {
5999
- ctx.sessions.open(childId);
6012
+ ctx.uiWorkspace.openSession(childId);
6000
6013
  }).catch(() => {});
6001
6014
  },
6002
6015
  fileMentions: (owner) => {
@@ -67,6 +67,10 @@ export declare const zh: {
67
67
  'terminal.failed': string;
68
68
  'terminal.done': string;
69
69
  'terminal.noOutput': string;
70
+ 'terminal.noExitCode': string;
71
+ 'terminal.codeLabel': string;
72
+ 'terminal.wrapLabel': string;
73
+ 'terminal.unwrapLabel': string;
70
74
  'terminal.collapseAria': string;
71
75
  'terminal.collapse': string;
72
76
  'terminal.expandAria': string;
@@ -286,6 +290,10 @@ export declare const en: {
286
290
  'terminal.failed': string;
287
291
  'terminal.done': string;
288
292
  'terminal.noOutput': string;
293
+ 'terminal.noExitCode': string;
294
+ 'terminal.codeLabel': string;
295
+ 'terminal.wrapLabel': string;
296
+ 'terminal.unwrapLabel': string;
289
297
  'terminal.collapseAria': string;
290
298
  'terminal.collapse': string;
291
299
  'terminal.expandAria': string;
@@ -52,6 +52,7 @@ export declare const CHAT_KIND_DISPOSITION: {
52
52
  'turn-max-tokens': string;
53
53
  'turn-process': string;
54
54
  'turn-tail': string;
55
+ 'turn-trigger': string;
55
56
  unknown: string;
56
57
  user: string;
57
58
  };
@@ -157,7 +157,7 @@ export type FocusFlowItem = {
157
157
  /** Context-injection chrome (the chat ContextInjectionRow); absent for user/steering. */
158
158
  context?: {
159
159
  source: ContextMessageNode['source'];
160
- provenance: ContextMessageNode['provenance'];
160
+ producer: ContextMessageNode['producer'];
161
161
  form: ContextMessageNode['form'];
162
162
  };
163
163
  } | {
@@ -1,5 +1,5 @@
1
1
  import type { MarkdownLabels } from '@deepseek-ai/dsh-client-ui-primitives';
2
- import type { ContentBlock } from '@deepseek-ai/dsh-llm/types';
2
+ import type { PendingSubmission } from '@deepseek-ai/dsh-api-session-controller/client';
3
3
  import type { FocusTranslate } from '../../contract/props.ts';
4
4
  import type { FocusFlowItem } from '../../model/types.ts';
5
5
  import { type ImageLoader } from '../chrome/MessageImage.tsx';
@@ -11,8 +11,7 @@ export declare const MessageRow: import("react").MemoExoticComponent<({ item, t,
11
11
  mdLabels: MarkdownLabels;
12
12
  loadImage: ImageLoader;
13
13
  }) => import("react").JSX.Element>;
14
- export declare const PendingSteeringBubble: import("react").MemoExoticComponent<({ content, t, loadImage }: {
15
- content: readonly ContentBlock[];
14
+ export declare const PendingSteeringBubble: import("react").MemoExoticComponent<({ submission, t }: {
15
+ submission: PendingSubmission;
16
16
  t: FocusTranslate;
17
- loadImage: ImageLoader;
18
17
  }) => import("react").JSX.Element>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@huanlin/dsh-focus-chat",
3
- "version": "0.1.25",
3
+ "version": "0.1.26",
4
4
  "description": "Claude Code-style focus view for the dsh web GUI: the conversation's condensed reading surface — tool calls folded into expandable metric summaries, chat 1:1 row chrome, and streaming think rows",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -25,6 +25,7 @@
25
25
  "@deepseek-ai/dsh-client-locale",
26
26
  "@deepseek-ai/dsh-client-ui-conversation",
27
27
  "@deepseek-ai/dsh-client-ui-chat",
28
+ "@deepseek-ai/dsh-client-ui-workspace",
28
29
  "@deepseek-ai/dsh-client-connection",
29
30
  "@deepseek-ai/dsh-api-remotes"
30
31
  ],
@@ -36,27 +37,30 @@
36
37
  "@deepseek-ai/dsh-client-locale",
37
38
  "@deepseek-ai/dsh-client-ui-conversation",
38
39
  "@deepseek-ai/dsh-client-ui-chat",
40
+ "@deepseek-ai/dsh-client-ui-workspace",
39
41
  "@deepseek-ai/dsh-client-connection",
40
42
  "@deepseek-ai/dsh-api-remotes"
41
43
  ],
42
44
  "platform": "web"
43
45
  },
44
46
  "peerDependencies": {
45
- "@deepseek-ai/cordis": ">=4.0.1",
46
- "@deepseek-ai/dsh-api-remotes": ">=0.1.5-rc.1",
47
- "@deepseek-ai/dsh-attachment": ">=0.1.5-rc.1",
48
- "@deepseek-ai/dsh-client-connection": ">=0.1.5-rc.1",
49
- "@deepseek-ai/dsh-client-locale": ">=0.1.5-rc.1",
50
- "@deepseek-ai/dsh-client-ui-chat": ">=0.1.5-rc.1",
51
- "@deepseek-ai/dsh-client-ui-conversation": ">=0.1.5-rc.1",
52
- "@deepseek-ai/dsh-client-ui-primitives": ">=0.1.5-rc.1",
53
- "@deepseek-ai/dsh-client-ui-renderer": ">=0.1.5-rc.1",
54
- "@deepseek-ai/dsh-client-ui-slots": ">=0.1.5-rc.1",
55
- "@deepseek-ai/dsh-llm": ">=0.1.5-rc.1",
56
- "@deepseek-ai/dsh-message-feedback": ">=0.1.5-rc.1",
57
- "@deepseek-ai/dsh-session": ">=0.1.5-rc.1",
58
- "@deepseek-ai/dsh-typert-protocol": ">=0.1.5-rc.1",
59
- "@deepseek-ai/dsh-util-workspace-path": ">=0.1.5-rc.1"
47
+ "@deepseek-ai/cordis": "^4.0.1",
48
+ "@deepseek-ai/dsh-api-remotes": "^0.1.7-rc.1",
49
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.7-rc.1",
50
+ "@deepseek-ai/dsh-attachment": "^0.1.7-rc.1",
51
+ "@deepseek-ai/dsh-client-connection": "^0.1.7-rc.1",
52
+ "@deepseek-ai/dsh-client-locale": "^0.1.7-rc.1",
53
+ "@deepseek-ai/dsh-client-ui-chat": "^0.1.7-rc.1",
54
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-rc.1",
55
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-rc.1",
56
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.7-rc.1",
57
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.7-rc.1",
58
+ "@deepseek-ai/dsh-client-ui-workspace": "^0.1.7-rc.1",
59
+ "@deepseek-ai/dsh-llm": "^0.1.7-rc.1",
60
+ "@deepseek-ai/dsh-message-feedback": "^0.1.7-rc.1",
61
+ "@deepseek-ai/dsh-session": "^0.1.7-rc.1",
62
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.7-rc.1",
63
+ "@deepseek-ai/dsh-util-workspace-path": "^0.1.7-rc.1"
60
64
  },
61
65
  "devDependencies": {
62
66
  "@deepseek-ai/cordis": "^4.0.1",
@@ -76,6 +80,7 @@
76
80
  "@deepseek-ai/dsh-client-ui-renderer": "link:D:/Projects/deepseek-harness/dsh/packages/client/ui-renderer",
77
81
  "@deepseek-ai/dsh-client-ui-session": "link:D:/Projects/deepseek-harness/dsh/packages/client/ui-session",
78
82
  "@deepseek-ai/dsh-client-ui-slots": "link:D:/Projects/deepseek-harness/dsh/packages/client/ui-slots",
83
+ "@deepseek-ai/dsh-client-ui-workspace": "link:D:/Projects/deepseek-harness/dsh/packages/client/ui-workspace",
79
84
  "@deepseek-ai/dsh-client-store": "link:D:/Projects/deepseek-harness/dsh/packages/client/store",
80
85
  "@deepseek-ai/dsh-llm": "link:D:/Projects/deepseek-harness/dsh/packages/llm/llm",
81
86
  "@deepseek-ai/dsh-message-feedback": "link:D:/Projects/deepseek-harness/dsh/packages/feedback/message-feedback",