dsh-plugin-core 0.25.0 → 0.27.0

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.
Files changed (91) hide show
  1. package/dist/session/SessionViewModal.d.ts.map +1 -1
  2. package/dist/session/SessionViewModal.js +54 -17
  3. package/dist/session/SessionViewModal.js.map +1 -1
  4. package/dist/session/mirror/ChatView.d.ts.map +1 -1
  5. package/dist/session/mirror/ChatView.js +9 -1
  6. package/dist/session/mirror/ChatView.js.map +1 -1
  7. package/dist/session/mirror/Deliverables.d.ts.map +1 -1
  8. package/dist/session/mirror/Deliverables.js +42 -27
  9. package/dist/session/mirror/Deliverables.js.map +1 -1
  10. package/dist/session/mirror/GenericCommandCard.d.ts.map +1 -1
  11. package/dist/session/mirror/GenericCommandCard.js +2 -3
  12. package/dist/session/mirror/GenericCommandCard.js.map +1 -1
  13. package/dist/session/mirror/MessageIconActions.d.ts.map +1 -1
  14. package/dist/session/mirror/MessageIconActions.js +3 -5
  15. package/dist/session/mirror/MessageIconActions.js.map +1 -1
  16. package/dist/session/mirror/MessageItem.d.ts +2 -0
  17. package/dist/session/mirror/MessageItem.d.ts.map +1 -1
  18. package/dist/session/mirror/MessageItem.js +22 -11
  19. package/dist/session/mirror/MessageItem.js.map +1 -1
  20. package/dist/session/mirror/ReasoningRow.d.ts.map +1 -1
  21. package/dist/session/mirror/ReasoningRow.js +79 -17
  22. package/dist/session/mirror/ReasoningRow.js.map +1 -1
  23. package/dist/session/mirror/RunningStatus.d.ts +12 -0
  24. package/dist/session/mirror/RunningStatus.d.ts.map +1 -0
  25. package/dist/session/mirror/RunningStatus.js +57 -0
  26. package/dist/session/mirror/RunningStatus.js.map +1 -0
  27. package/dist/session/mirror/TurnProcessNodeView.d.ts.map +1 -1
  28. package/dist/session/mirror/TurnProcessNodeView.js +27 -38
  29. package/dist/session/mirror/TurnProcessNodeView.js.map +1 -1
  30. package/dist/session/mirror/TurnTailNodeView.d.ts +25 -0
  31. package/dist/session/mirror/TurnTailNodeView.d.ts.map +1 -1
  32. package/dist/session/mirror/TurnTailNodeView.js +65 -7
  33. package/dist/session/mirror/TurnTailNodeView.js.map +1 -1
  34. package/dist/session/mirror/TurnTriggerNodeView.d.ts.map +1 -1
  35. package/dist/session/mirror/TurnTriggerNodeView.js +36 -20
  36. package/dist/session/mirror/TurnTriggerNodeView.js.map +1 -1
  37. package/dist/session/mirror/message-chrome.d.ts +10 -4
  38. package/dist/session/mirror/message-chrome.d.ts.map +1 -1
  39. package/dist/session/mirror/message-chrome.js +11 -16
  40. package/dist/session/mirror/message-chrome.js.map +1 -1
  41. package/dist/session/official-classes.d.ts.map +1 -1
  42. package/dist/session/official-classes.js +5 -3
  43. package/dist/session/official-classes.js.map +1 -1
  44. package/dist/ui/AlertModal.d.ts +2 -0
  45. package/dist/ui/AlertModal.d.ts.map +1 -1
  46. package/dist/ui/AlertModal.js +1 -0
  47. package/dist/ui/AlertModal.js.map +1 -1
  48. package/dist/ui/ConfirmModal.d.ts +2 -0
  49. package/dist/ui/ConfirmModal.d.ts.map +1 -1
  50. package/dist/ui/ConfirmModal.js +1 -0
  51. package/dist/ui/ConfirmModal.js.map +1 -1
  52. package/dist/ui/FlipText.d.ts +38 -0
  53. package/dist/ui/FlipText.d.ts.map +1 -0
  54. package/dist/ui/FlipText.js +58 -0
  55. package/dist/ui/FlipText.js.map +1 -0
  56. package/dist/ui/Modal.d.ts +6 -0
  57. package/dist/ui/Modal.d.ts.map +1 -1
  58. package/dist/ui/Modal.js +5 -2
  59. package/dist/ui/Modal.js.map +1 -1
  60. package/dist/ui/SideSheet.d.ts +2 -0
  61. package/dist/ui/SideSheet.d.ts.map +1 -1
  62. package/dist/ui/SideSheet.js +6 -1
  63. package/dist/ui/SideSheet.js.map +1 -1
  64. package/dist/ui/feedback-css.generated.d.ts +1 -1
  65. package/dist/ui/feedback-css.generated.d.ts.map +1 -1
  66. package/dist/ui/feedback-css.generated.js +1 -1
  67. package/dist/ui/feedback-css.generated.js.map +1 -1
  68. package/dist/ui/flip-css.d.ts +2 -0
  69. package/dist/ui/flip-css.d.ts.map +1 -0
  70. package/dist/ui/flip-css.generated.d.ts +2 -0
  71. package/dist/ui/flip-css.generated.d.ts.map +1 -0
  72. package/dist/ui/flip-css.generated.js +4 -0
  73. package/dist/ui/flip-css.generated.js.map +1 -0
  74. package/dist/ui/flip-css.js +4 -0
  75. package/dist/ui/flip-css.js.map +1 -0
  76. package/dist/ui/index.d.ts +1 -0
  77. package/dist/ui/index.d.ts.map +1 -1
  78. package/dist/ui/index.js +1 -0
  79. package/dist/ui/index.js.map +1 -1
  80. package/dist/ui/side-sheet-css.generated.d.ts +1 -1
  81. package/dist/ui/side-sheet-css.generated.d.ts.map +1 -1
  82. package/dist/ui/side-sheet-css.generated.js +1 -1
  83. package/dist/ui/side-sheet-css.generated.js.map +1 -1
  84. package/dist/utils/i18n.d.ts +1 -1
  85. package/dist/utils/i18n.d.ts.map +1 -1
  86. package/dist/utils/i18n.js +20 -14
  87. package/dist/utils/i18n.js.map +1 -1
  88. package/docs/help/ui.doc.ts +48 -1
  89. package/docs/help/ui.md +43 -1
  90. package/docs/requirements.md +10 -1
  91. package/package.json +1 -1
@@ -1,56 +1,42 @@
1
- // 官方对照:packages/client/ui-chat/src/client/chat/TurnProcessNodeView.tsx(0.1.7-rc.2 lib/client.js:6129-6196)
1
+ // 官方对照:packages/client/ui-chat@0.2.2-alpha.3 lib/client.js:8668-8730(TurnProcessNodeView)
2
2
  // root(button,高 calc(33px + delta)、border-bottom .5px border-l2、padding 0 0 8px、flex)
3
- // :disabled{cursor:default} / :not(:disabled):hover{color:primary} / :not([data-open]){margin-bottom:8px}
4
- // > label(13px,ellipsis)> chevron(14px caption,[data-open] 旋转 180°)
5
- // label 官方文案(源码 6167-6170 逐字):
6
- // running → 「深度求索中,用时D」;aborted → 「已停止」;error → 「处理失败」;
7
- // 其余 → 有时长「用时 D」、无时长「已完成工作」。D 由 turn 位置(start/end)算出,下限 1 秒。
8
- // 这就是官方原图里那行「用时 34 秒 ⌄」——它把整个 turn 的过程(工具调用 / 中间文本 / 思考)折在下面。
9
- import { Fragment, createElement as h, useEffect, useState } from 'react';
3
+ // :disabled{cursor:default} / :hover:not(:disabled){color:secondary} / [data-open] 内 chevron 旋转 180°
4
+ // > label(13px,ellipsis)> chevron(14px,color:inherit)
5
+ // label:stopped(aborted/interrupted)→「已停止」;error →「处理失败」;
6
+ // 有时长 →「已完成,用时 」+ duration parts(数字段套 durationNumber 等宽数字);无时长 →「已完成」。
7
+ // ⚠ 0.2.x 起 turn 未关闭时**整块不渲染**(`turn?.status !== "closed"` return null)——
8
+ // 运行中的「深度求索中,用时 N 秒 ···」改由 ChatView 的 RunningStatus 在流末尾单独一行显示
9
+ // (见 RunningStatus.ts)。别再把 running 分支加回来,否则与官方重叠出两行。
10
+ import { Fragment, createElement as h } from 'react';
10
11
  import { IconChevronDownOutlineRegular } from '../../ui/official.js';
11
12
  import { officialClass } from '../official-classes.js';
12
- import { formatLiveRunDuration, formatRunDuration } from './message-chrome.js';
13
- /** 官方 LIVE_RUN_CLOCK_INTERVAL_MS(lib/client.js:979)。 */
14
- const LIVE_RUN_CLOCK_INTERVAL_MS = 1000;
13
+ import { formatRunDuration } from './message-chrome.js';
15
14
  /** Turn 过程行:折叠时只有 label + 箭头;点开由外层 seat 把过程节点放出来。 */
16
15
  export function TurnProcessNodeViewMirror(props) {
17
16
  const { turn, turnProcess, t } = props;
18
- const open = !turnProcess.foldable || turnProcess.open;
19
- const [now, setNow] = useState(() => Date.now());
20
- const ticking = turn?.status === 'open' && turn.start !== undefined;
21
- useEffect(() => {
22
- if (!ticking)
23
- return;
24
- setNow(Date.now());
25
- const timer = setInterval(() => { setNow(Date.now()); }, LIVE_RUN_CLOCK_INTERVAL_MS);
26
- return () => { clearInterval(timer); };
27
- }, [ticking]);
28
- if (turn === undefined || (turn.start === undefined && turn.status !== 'closed'))
17
+ if (turn === undefined || turn.status !== 'closed')
29
18
  return null;
19
+ const open = !turnProcess.foldable || turnProcess.open;
30
20
  const canCollapse = turnProcess.foldable && turnProcess.hasContent && !turnProcess.alwaysOpen;
31
- const running = turn.status === 'open';
32
21
  const reason = turn.end?.data?.reason?.kind;
33
- const elapsedMs = turn.start === undefined ? undefined : Math.max(1000, (turn.end?.time ?? now) - turn.start.time);
34
- const duration = elapsedMs === undefined
22
+ const stopped = reason === 'aborted' || reason === 'interrupted';
23
+ const elapsedMs = turn.start === undefined || turn.end === undefined
24
+ ? undefined
25
+ : Math.max(1000, turn.end.time - turn.start.time);
26
+ const duration = elapsedMs === undefined || stopped || reason === 'error'
35
27
  ? undefined
36
- : running ? formatLiveRunDuration(elapsedMs, t) : formatRunDuration(elapsedMs, t);
37
- const label = running
38
- ? (duration === undefined ? t('chatDeepDiving') : t('turnProcessDeepDiving', { duration }))
39
- : reason === 'aborted' ? t('turnStopped')
40
- : reason === 'error' ? t('turnProcessFailed')
41
- : duration === undefined ? t('turnProcessWorked') : t('turnProcessTook', { duration });
42
- const announcement = running
43
- ? t('chatDeepDiving')
44
- : reason === 'aborted' ? t('turnStopped')
45
- : reason === 'error' ? t('turnProcessFailed')
46
- : t('turnProcessWorked');
28
+ : formatRunDuration(elapsedMs, t);
29
+ const label = stopped ? t('turnStopped')
30
+ : reason === 'error' ? t('turnProcessFailed')
31
+ : duration === undefined ? t('turnProcessWorked') : t('turnProcessTook');
32
+ const durationNumberClass = officialClass('TurnProcessNodeView', 'durationNumber') ?? undefined;
47
33
  const spec = turnProcess.spec;
48
34
  return h(Fragment, null, h('span', {
49
35
  className: officialClass('accessibility', 'visuallyHidden') ?? '',
50
36
  role: 'status',
51
37
  'aria-live': 'polite',
52
38
  'aria-atomic': 'true',
53
- }, announcement), h('button', {
39
+ }, stopped ? t('turnStopped') : reason === 'error' ? t('turnProcessFailed') : t('turnProcessWorked')), h('button', {
54
40
  type: 'button',
55
41
  className: officialClass('TurnProcessNodeView', 'root') ?? '',
56
42
  'data-open': open || undefined,
@@ -61,7 +47,10 @@ export function TurnProcessNodeViewMirror(props) {
61
47
  disabled: !canCollapse,
62
48
  'aria-expanded': turnProcess.hasContent ? open : undefined,
63
49
  onClick: () => { turnProcess.setOpen(!open); },
64
- }, h('span', { className: officialClass('TurnProcessNodeView', 'label') ?? '' }, label), canCollapse
50
+ }, h('span', { className: officialClass('TurnProcessNodeView', 'label') ?? '' }, label, duration?.map((part, index) => h('span', {
51
+ key: index,
52
+ className: part.numeric ? durationNumberClass : undefined,
53
+ }, part.text))), canCollapse
65
54
  ? h(IconChevronDownOutlineRegular, { className: officialClass('TurnProcessNodeView', 'chevron') ?? '' })
66
55
  : null));
67
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TurnProcessNodeView.js","sourceRoot":"","sources":["../../../src/session/mirror/TurnProcessNodeView.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TurnProcessNodeView.js","sourceRoot":"","sources":["../../../src/session/mirror/TurnProcessNodeView.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,sFAAsF;AACtF,uGAAuG;AACvG,wDAAwD;AACxD,0DAA0D;AAC1D,yEAAyE;AACzE,0EAA0E;AAC1E,iEAAiE;AACjE,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,qDAAqD;AACrD,MAAM,UAAU,yBAAyB,CAAC,KAIzC;IACC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,KAAK,CAAA;IACtC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC/D,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAA;IACtD,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,UAAU,CAAA;IAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAA;IAC3C,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,aAAa,CAAA;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAClE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,IAAI,OAAO,IAAI,MAAM,KAAK,OAAO;QACvE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACtC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;YAC3C,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA;IAC5E,MAAM,mBAAmB,GAAG,aAAa,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,IAAI,SAAS,CAAA;IAC/F,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;IAC7B,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,EACrB,CAAC,CAAC,MAAM,EAAE;QACR,SAAS,EAAE,aAAa,CAAC,eAAe,EAAE,gBAAgB,CAAC,IAAI,EAAE;QACjE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,QAAQ;QACrB,aAAa,EAAE,MAAM;KACtB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,EACrG,CAAC,CAAC,QAAQ,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,EAAE;QAC7D,WAAW,EAAE,IAAI,IAAI,SAAS;QAC9B,mBAAmB,EAAE,IAAI,EAAE,IAAI;QAC/B,4BAA4B,EAAE,IAAI,EAAE,YAAY;QAChD,8BAA8B,EAAE,IAAI,EAAE,aAAa;QACnD,6BAA6B,EAAE,IAAI,EAAE,aAAa;QAClD,QAAQ,EAAE,CAAC,WAAW;QACtB,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC1D,OAAO,EAAE,GAAS,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;KACpD,EACC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAC1E,KAAK,EACL,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;QACvC,GAAG,EAAE,KAAK;QACV,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;KAC1D,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CACf,EACD,WAAW;QACT,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QACxG,CAAC,CAAC,IAAI,CACT,CACF,CAAA;AACH,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { createElement as h, type ReactNode } from 'react';
2
2
  import type { Translate } from '../../utils/i18n.js';
3
+ import type { ChatNodeStoreFace } from '../faces.js';
3
4
  import { type TurnTokenUsageFace } from './TurnUsagePanel.js';
4
5
  /** 官方 AssistantContentBlock 的消费面(只用到 kind / text)。 */
5
6
  interface ContentBlockFace {
@@ -13,12 +14,34 @@ export interface TurnTailDataFace {
13
14
  closing: {
14
15
  time: number;
15
16
  blocks: ReadonlyArray<ContentBlockFace>;
17
+ /** 官方 closing.finalNode.seq(判定「该轮之后还有内容」用)。 */
18
+ finalNode?: {
19
+ seq: number;
20
+ };
16
21
  } | null;
17
22
  branchUnavailable?: boolean;
18
23
  tokenUsage?: TurnTokenUsageFace;
19
24
  }
20
25
  /** 官方 hasAssistantReplyContent。 */
21
26
  export declare function hasAssistantReplyContent(blocks: ReadonlyArray<ContentBlockFace>): boolean;
27
+ /** 尾部操作行要的两个判定(官方用 nodeStore 快照算;这里按同一 order/store 预计算)。 */
28
+ export interface TurnTailFacts {
29
+ /** 官方 endsWithResponse:操作行常显(true)还是悬停才显(false)。 */
30
+ endsWithResponse(turn: number): boolean;
31
+ /** 官方 hasLaterChatNode:该轮之后还有内容(分支不可用)。 */
32
+ hasLaterChatNode(turn: number, anchorSeq: number): boolean;
33
+ }
34
+ /**
35
+ * 按 order + nodeStore 预计算尾部事实。
36
+ * @param props.order - 渲染顺序(官方 order)。
37
+ * @param props.store - 节点仓库。
38
+ * @param props.lastTurn - 最后一轮的 turn 号(官方 timeline.turnOrder.at(-1))。
39
+ */
40
+ export declare function buildTurnTailFacts(props: {
41
+ order: readonly string[];
42
+ store: ChatNodeStoreFace;
43
+ lastTurn: number | undefined;
44
+ }): TurnTailFacts;
22
45
  /** Turn 尾部操作行:复制 / 分支 / 用量 / 结束时钟。 */
23
46
  export declare function TurnTailNodeViewMirror(props: {
24
47
  data: TurnTailDataFace;
@@ -26,6 +49,8 @@ export declare function TurnTailNodeViewMirror(props: {
26
49
  onBranchAt?: (seq: number) => void;
27
50
  /** 官方 conversation.chat.turnTail 插槽内容(如 DeliverablesTail),渲染在操作行之前。 */
28
51
  tailSlot?: ReactNode;
52
+ /** 官方 endsWithResponse / hasLaterChatNode(undefined = 操作行常显、分支可用)。 */
53
+ facts?: TurnTailFacts;
29
54
  t: Translate;
30
55
  }): ReturnType<typeof h> | null;
31
56
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"TurnTailNodeView.d.ts","sourceRoot":"","sources":["../../../src/session/mirror/TurnTailNodeView.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAEnF,sDAAsD;AACtD,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;KAAE,GAAG,IAAI,CAAA;IACzE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAChC;AAED,mCAAmC;AACnC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAMzF;AAOD,sCAAsC;AACtC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,IAAI,EAAE,gBAAgB,CAAA;IACtB,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAuB9B"}
1
+ {"version":3,"file":"TurnTailNodeView.d.ts","sourceRoot":"","sources":["../../../src/session/mirror/TurnTailNodeView.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAgB,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGlE,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAEnF,sDAAsD;AACtD,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;QACvC,+CAA+C;QAC/C,SAAS,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAC5B,GAAG,IAAI,CAAA;IACR,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAChC;AAED,mCAAmC;AACnC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAMzF;AAkBD,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC,2CAA2C;IAC3C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;CAC3D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,KAAK,EAAE,iBAAiB,CAAA;IACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B,GAAG,aAAa,CA8BhB;AAED,sCAAsC;AACtC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,IAAI,EAAE,gBAAgB,CAAA;IACtB,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,sEAAsE;IACtE,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CA0B9B"}
@@ -1,11 +1,13 @@
1
- // 官方对照:packages/client/ui-chat/src/client/chat/TurnTailNodeView.tsx(0.1.7-rc.2 lib/client.js:6460-6546)
2
- // root(flex column,gap 16px)> actions(margin-top 4px / margin-left -6px)
3
- // data-turn-tail = turn;data-actions-reveal 官方 = always(最后一轮且有回复)| hover(历史轮,悬停才显);
4
- // 弹窗偏差(用户拍板 2026-09-27):归档会话轮数少,恒 'always' 每轮操作行全部常显,不做 hover 显隐。
1
+ // 官方对照:ui-chat@0.2.1-rc.5 lib/client.js:6986-7045(lastContent / TurnTailNodeView)
2
+ // root(flex column,gap 16px)> [tailSlot] > actions(margin-top 4px / margin-left -6px)
3
+ // data-turn-tail = turn;data-actions-reveal = endsWithResponse ? "always" : "hover"
4
+ // endsWithResponse = 该轮是最后一场 turn,且该轮最后一条内容节点的最后一个可见块算「回复」
5
+ // (reasoning / tool-call 不算,空文本不算)——官方据此决定操作行常显还是悬停才显。
5
6
  // closing === null(本轮没有回复)⇒ 只留 turnTail 插槽;弹窗无插槽 ⇒ 整块不渲染。
6
- // hasAssistantReplyContent(lib/client.js:6466):reasoning / tool-call 不算回复,空文本不算。
7
+ // branchUnavailable = data.branchUnavailable || hasLaterChatNode(该轮之后还有内容 ⇒ 不能从这轮开分支)。
7
8
  import { createElement as h } from 'react';
8
9
  import { officialClass } from '../official-classes.js';
10
+ import { turnOf } from './ChatNodeSeat.js';
9
11
  import { MessageIconActionsMirror } from './MessageIconActions.js';
10
12
  import { TurnUsagePanelMirror } from './TurnUsagePanel.js';
11
13
  /** 官方 hasAssistantReplyContent。 */
@@ -22,17 +24,71 @@ export function hasAssistantReplyContent(blocks) {
22
24
  function assistantText(blocks) {
23
25
  return blocks.flatMap(block => (block.kind === 'text' ? [block.text ?? ''] : [])).join('');
24
26
  }
27
+ /** 官方 lastContent:该轮最后一个内容节点(跳过 turn-tail / turn-process,可选跳过 turn-max-tokens)。 */
28
+ function lastContent(nodes, skipMaxTokens) {
29
+ for (let index = nodes.length - 1; index >= 0; index--) {
30
+ const node = nodes[index];
31
+ if (node === undefined || node.kind === 'turn-tail' || node.kind === 'turn-process')
32
+ continue;
33
+ if (skipMaxTokens && node.kind === 'turn-max-tokens')
34
+ continue;
35
+ return node;
36
+ }
37
+ return undefined;
38
+ }
39
+ /**
40
+ * 按 order + nodeStore 预计算尾部事实。
41
+ * @param props.order - 渲染顺序(官方 order)。
42
+ * @param props.store - 节点仓库。
43
+ * @param props.lastTurn - 最后一轮的 turn 号(官方 timeline.turnOrder.at(-1))。
44
+ */
45
+ export function buildTurnTailFacts(props) {
46
+ const { order, store, lastTurn } = props;
47
+ const nodesOfTurn = (turn) => {
48
+ const out = [];
49
+ for (const key of order) {
50
+ const node = store.get(key);
51
+ if (node !== undefined && turnOf(node) === turn)
52
+ out.push(node);
53
+ }
54
+ return out;
55
+ };
56
+ return {
57
+ endsWithResponse(turn) {
58
+ if (lastTurn !== turn)
59
+ return false;
60
+ const last = lastContent(nodesOfTurn(turn), false);
61
+ const blocks = last?.kind === 'assistant-step' ? last.data?.blocks : undefined;
62
+ if (!Array.isArray(blocks))
63
+ return false;
64
+ for (let index = blocks.length - 1; index >= 0; index--) {
65
+ const block = blocks[index];
66
+ if (block === undefined)
67
+ continue;
68
+ // 官方 findLast 条件:非 text/reasoning 块,或文本非空。
69
+ if ((block.kind !== 'text' && block.kind !== 'reasoning') || (block.text ?? '').trim() !== '') {
70
+ return hasAssistantReplyContent([block]);
71
+ }
72
+ }
73
+ return false;
74
+ },
75
+ hasLaterChatNode(turn, anchorSeq) {
76
+ return (lastContent(nodesOfTurn(turn), true)?.anchorSeq ?? -1) > anchorSeq;
77
+ },
78
+ };
79
+ }
25
80
  /** Turn 尾部操作行:复制 / 分支 / 用量 / 结束时钟。 */
26
81
  export function TurnTailNodeViewMirror(props) {
27
- const { data, onBranchAt, tailSlot, t } = props;
82
+ const { data, onBranchAt, tailSlot, facts, t } = props;
28
83
  const closing = data.closing;
29
84
  if (closing === null || closing === undefined)
30
85
  return null;
31
86
  const text = assistantText(closing.blocks);
87
+ const anchorSeq = closing.finalNode?.seq ?? data.seq;
32
88
  return h('div', {
33
89
  className: officialClass('TurnTailNodeView', 'root') ?? '',
34
90
  'data-turn-tail': data.turn,
35
- 'data-actions-reveal': 'always',
91
+ 'data-actions-reveal': facts === undefined || facts.endsWithResponse(data.turn) ? 'always' : 'hover',
36
92
  }, tailSlot === undefined || tailSlot === null ? null : tailSlot, h(MessageIconActionsMirror, {
37
93
  text,
38
94
  time: closing.time,
@@ -40,6 +96,8 @@ export function TurnTailNodeViewMirror(props) {
40
96
  // 分支:点分支 = 确认框 → fork({ atSeq: 该轮 tail seq })——从这条消息位置截断开分支;
41
97
  // 头部按钮 = 省略 atSeq(最新已完成 turn 前缀)。
42
98
  onBranch: onBranchAt === undefined ? undefined : () => { onBranchAt(data.seq); },
99
+ branchUnavailable: data.branchUnavailable === true
100
+ || facts?.hasLaterChatNode(data.turn, anchorSeq),
43
101
  className: officialClass('TurnTailNodeView', 'actions') ?? '',
44
102
  usageAction: data.tokenUsage === undefined ? undefined : h(TurnUsagePanelMirror, { usage: data.tokenUsage, t }),
45
103
  t,
@@ -1 +1 @@
1
- {"version":3,"file":"TurnTailNodeView.js","sourceRoot":"","sources":["../../../src/session/mirror/TurnTailNodeView.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,2EAA2E;AAC3E,sFAAsF;AACtF,oEAAoE;AACpE,4DAA4D;AAC5D,iFAAiF;AACjF,OAAO,EAAE,aAAa,IAAI,CAAC,EAAkB,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAA2B,MAAM,qBAAqB,CAAA;AAiBnF,mCAAmC;AACnC,MAAM,UAAU,wBAAwB,CAAC,MAAuC;IAC9E,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,KAAK,CAAA;QAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;QAClE,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,kCAAkC;AAClC,SAAS,aAAa,CAAC,MAAuC;IAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,sBAAsB,CAAC,KAOtC;IACC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,KAAK,CAAA;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC5B,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,OAAO,CAAC,CAAC,KAAK,EAAE;QACd,SAAS,EAAE,aAAa,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE;QAC1D,gBAAgB,EAAE,IAAI,CAAC,IAAI;QAC3B,qBAAqB,EAAE,QAAQ;KAChC,EACC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAC7D,CAAC,CAAC,wBAAwB,EAAE;QAC1B,IAAI;QACJ,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,KAAK;QACZ,6DAA6D;QAC7D,kCAAkC;QAClC,QAAQ,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC;QAC/E,SAAS,EAAE,aAAa,CAAC,kBAAkB,EAAE,SAAS,CAAC,IAAI,EAAE;QAC7D,WAAW,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;QAC/G,CAAC;KACF,CAAC,CACH,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"TurnTailNodeView.js","sourceRoot":"","sources":["../../../src/session/mirror/TurnTailNodeView.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TurnTriggerNodeView.d.ts","sourceRoot":"","sources":["../../../src/session/mirror/TurnTriggerNodeView.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAY,MAAM,OAAO,CAAA;AAepD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAiBpE,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAmB3F;AAED,6CAA6C;AAC7C,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACzC,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA0CvB"}
1
+ {"version":3,"file":"TurnTriggerNodeView.d.ts","sourceRoot":"","sources":["../../../src/session/mirror/TurnTriggerNodeView.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAmB,MAAM,OAAO,CAAA;AAe3D,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAoBpE,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAmB3F;AAED,6CAA6C;AAC7C,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACzC,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAiDvB"}
@@ -1,16 +1,17 @@
1
- // 官方对照:packages/client/ui-chat/src/client/chat/TurnTriggerNodeView.tsx(0.1.7-rc.2)
2
- // + turn-trigger.ts 的 turnTriggerDetails(lib/client.js:6538-6605)。
3
- // root(border .5px border-l1 / radius-xl / bg markdown-code-block / hover interactive-bg-hover)
4
- // > header(button,padding 12px 16px,gap 10px)
5
- // > icon(14px,tertiary)> title(dsw-font-xs-13)> time(margin-left:auto,xxs-12,caption)
1
+ // 官方对照:ui-chat@0.2.1-rc.5 lib/client.js:7118-7195(TurnTriggerNodeView)
2
+ // + turn-trigger.js 的 turnTriggerDetails / TRIGGER_ICONS。
3
+ // root(section,border .5px border-l1 / radius-xl / bg turn-trigger-bg / hover turn-trigger-bg-hover)
4
+ // > header(button,padding 12px 16px,gap 10px,aria-expanded + aria-controls)
5
+ // > icon(14px)> title(14px)> time(margin-left:auto,xxs-12)
6
6
  // > chevron(12px;展开用 openChevron = rotate 180°)
7
- // > body(展开时:padding 0 16px 12px 40px)> explanation(8px 0)+ content(pre-wrap,max-height 240px)
7
+ // > body(展开时)> explanation(8px 0)+ content > ModelFacingContent(每条文本一个
8
+ // pre[data-context-text],超 20000 字符截断;未知块走 JsonBlock)
8
9
  // 「非人类触发的 turn」就以这一行开头——官方原图里那句「收到执行请求 9月26日 01:35」就是它。
9
- import { createElement as h, useState } from 'react';
10
- import { IconAgentPresetOutlineRegular, IconAlarmClockOutlineRegular, IconBranchOutlineRegular, IconChevronDownOutlineRegular, IconContextInjectionOutlineRegular, IconCordisPluginOutlineRegular, IconGlobeOutlineRegular, IconGoalOutlineRegular, IconPaperPlaneOutlineRegular, IconQueueOutlineRegular, } from '../../ui/official.js';
10
+ import { createElement as h, useId, useState } from 'react';
11
+ import { IconAgentPresetOutlineRegular, IconBranchOutlineRegular, IconChevronDownOutlineRegular, IconClockOutlineRegular, IconContextInjectionOutlineRegular, IconCordisPluginOutlineRegular, IconGlobeOutlineRegular, IconGoalOutlineRegular, IconPaperPlaneOutlineRegular, IconQueueOutlineRegular, } from '../../ui/official.js';
11
12
  import { officialClass } from '../official-classes.js';
12
13
  import { formatMessageClock } from './message-chrome.js';
13
- /** 官方 TRIGGER_ICONS(lib/client.js:6634)。 */
14
+ /** 官方 TRIGGER_ICONS(lib/client.js:7122-7131)。 */
14
15
  const TRIGGER_ICONS = {
15
16
  request: IconContextInjectionOutlineRegular,
16
17
  goal: IconGoalOutlineRegular,
@@ -19,10 +20,12 @@ const TRIGGER_ICONS = {
19
20
  subagent: IconAgentPresetOutlineRegular,
20
21
  github: IconBranchOutlineRegular,
21
22
  webhook: IconGlobeOutlineRegular,
22
- schedule: IconAlarmClockOutlineRegular,
23
+ schedule: IconClockOutlineRegular,
23
24
  job: IconQueueOutlineRegular,
24
25
  plugin: IconCordisPluginOutlineRegular,
25
26
  };
27
+ /** 官方 MAX_CHARS(lib/client.js:4416):模型面向文本的显示上限。 */
28
+ const MAX_CHARS = 20000;
26
29
  /** 官方 turnTriggerDetails:source.kind → 标题与图标家族(默认 request)。 */
27
30
  export function turnTriggerDetails(source) {
28
31
  const record = (value) => (typeof value === 'object' && value !== null && !Array.isArray(value) ? value : {});
@@ -47,10 +50,10 @@ export function turnTriggerDetails(source) {
47
50
  export function TurnTriggerNodeViewMirror(props) {
48
51
  const { data, t } = props;
49
52
  const [open, setOpen] = useState(false);
53
+ const bodyId = useId();
50
54
  const details = turnTriggerDetails(data?.source);
51
55
  const TriggerIcon = TRIGGER_ICONS[details.icon] ?? IconContextInjectionOutlineRegular;
52
56
  const time = typeof data?.time === 'number' ? data.time : undefined;
53
- const content = triggerContent(data?.content);
54
57
  return h('section', {
55
58
  className: officialClass('TurnTriggerNodeView', 'root') ?? '',
56
59
  'data-turn-trigger': true,
@@ -58,6 +61,7 @@ export function TurnTriggerNodeViewMirror(props) {
58
61
  type: 'button',
59
62
  className: officialClass('TurnTriggerNodeView', 'header') ?? '',
60
63
  'aria-expanded': open,
64
+ 'aria-controls': bodyId,
61
65
  onClick: () => { setOpen(value => !value); },
62
66
  }, h('span', { className: officialClass('TurnTriggerNodeView', 'icon') ?? '', 'aria-hidden': true }, h(TriggerIcon, { size: 14 })), h('span', { className: officialClass('TurnTriggerNodeView', 'title') ?? '' }, t(details.title)), time === undefined
63
67
  ? null
@@ -70,18 +74,30 @@ export function TurnTriggerNodeViewMirror(props) {
70
74
  ? officialClass('TurnTriggerNodeView', 'openChevron') ?? ''
71
75
  : officialClass('TurnTriggerNodeView', 'chevron') ?? '',
72
76
  })), open
73
- ? h('div', { className: officialClass('TurnTriggerNodeView', 'body') ?? '' }, h('p', { className: officialClass('TurnTriggerNodeView', 'explanation') ?? '' }, t('triggerExplanation')), h('div', { className: officialClass('TurnTriggerNodeView', 'content') ?? '' }, content === '' ? t('sessionEmpty') : content))
77
+ ? h('div', { id: bodyId, className: officialClass('TurnTriggerNodeView', 'body') ?? '' }, h('p', { className: officialClass('TurnTriggerNodeView', 'explanation') ?? '' }, t('triggerExplanation')), h('div', { className: officialClass('TurnTriggerNodeView', 'content') ?? '' }, modelFacingRuns(data?.content, t).map((text, index) => h('pre', {
78
+ key: index,
79
+ className: officialClass('ContextBody', 'text') ?? '',
80
+ 'data-context-text': true,
81
+ }, text.length > MAX_CHARS
82
+ ? `${text.slice(0, MAX_CHARS)}\n${t('jsonTruncated', { total: text.length })}`
83
+ : text))))
74
84
  : null);
75
85
  }
76
- /** 注入原文:content 块的 text 拼接(官方 NoticeBody 的文本消费面)。 */
77
- function triggerContent(content) {
86
+ /** 官方 contentRuns:连续 text 块合并成一段(未知块不参与文本拼接)。 */
87
+ function modelFacingRuns(content, t) {
78
88
  if (!Array.isArray(content))
79
- return '';
80
- return content.map((block) => {
89
+ return [t('sessionEmpty')];
90
+ const runs = [];
91
+ for (const block of content) {
81
92
  const b = block;
82
- if (b !== null && typeof b === 'object' && b.type === 'text' && typeof b.text === 'string')
83
- return b.text;
84
- return '';
85
- }).filter(part => part !== '').join('\n');
93
+ if (b === null || typeof b !== 'object' || b.type !== 'text' || typeof b.text !== 'string')
94
+ continue;
95
+ const last = runs.length - 1;
96
+ if (last >= 0)
97
+ runs[last] += b.text;
98
+ else
99
+ runs.push(b.text);
100
+ }
101
+ return runs.length === 0 ? [t('sessionEmpty')] : runs;
86
102
  }
87
103
  //# sourceMappingURL=TurnTriggerNodeView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TurnTriggerNodeView.js","sourceRoot":"","sources":["../../../src/session/mirror/TurnTriggerNodeView.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TurnTriggerNodeView.js","sourceRoot":"","sources":["../../../src/session/mirror/TurnTriggerNodeView.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,4DAA4D;AAC5D,qGAAqG;AACrG,8EAA8E;AAC9E,iEAAiE;AACjE,sDAAsD;AACtD,yEAAyE;AACzE,0DAA0D;AAC1D,wDAAwD;AACxD,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3D,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EACvB,kCAAkC,EAClC,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,iDAAiD;AACjD,MAAM,aAAa,GAAyE;IAC1F,OAAO,EAAE,kCAAkC;IAC3C,IAAI,EAAE,sBAAsB;IAC5B,KAAK,EAAE,4BAA4B;IACnC,IAAI,EAAE,6BAA6B;IACnC,QAAQ,EAAE,6BAA6B;IACvC,MAAM,EAAE,wBAAwB;IAChC,OAAO,EAAE,uBAAuB;IAChC,QAAQ,EAAE,uBAAuB;IACjC,GAAG,EAAE,uBAAuB;IAC5B,MAAM,EAAE,8BAA8B;CACvC,CAAA;AAED,oDAAoD;AACpD,MAAM,SAAS,GAAG,KAAM,CAAA;AAExB,+DAA+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,MAAM,MAAM,GAAG,CAAC,KAAc,EAA2B,EAAE,CACzD,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAChH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1B,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACzD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QAC1D,KAAK,eAAe,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;QACrE,KAAK,cAAc,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QAClE,KAAK,kBAAkB,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;QAC9E,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAA;YACxC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QAC3G,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;QACtE,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QAC7D,KAAK,oBAAoB,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QAC5E,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;IAC9D,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,yBAAyB,CAAC,KAIzC;IACC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAA;IACzB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,KAAK,EAAE,CAAA;IACtB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAChD,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,kCAAkC,CAAA;IACrF,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IACnE,OAAO,CAAC,CAAC,SAAS,EAAE;QAClB,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,EAAE;QAC7D,mBAAmB,EAAE,IAAI;KAC1B,EACC,CAAC,CAAC,QAAQ,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,QAAQ,CAAC,IAAI,EAAE;QAC/D,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,MAAM;QACvB,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;KAC5C,EACC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,EAC9F,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAC/B,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAC/F,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;YACR,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,EAAE;YAC7D,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;SACvC,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EACnC,CAAC,CAAC,6BAA6B,EAAE;QAC/B,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,IAAI;YACb,CAAC,CAAC,aAAa,CAAC,qBAAqB,EAAE,aAAa,CAAC,IAAI,EAAE;YAC3D,CAAC,CAAC,aAAa,CAAC,qBAAqB,EAAE,SAAS,CAAC,IAAI,EAAE;KAC1D,CAAC,CACH,EACD,IAAI;QACF,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EACpF,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,aAAa,CAAC,IAAI,EAAE,EAAE,EAC7E,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAC1B,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,qBAAqB,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,EAC3E,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE;YAC9D,GAAG,EAAE,KAAK;YACV,SAAS,EAAE,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE;YACrD,mBAAmB,EAAE,IAAI;SAC1B,EAAE,IAAI,CAAC,MAAM,GAAG,SAAS;YACxB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAC9E,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACd;QACH,CAAC,CAAC,IAAI,CACT,CAAA;AACH,CAAC;AAED,iDAAiD;AACjD,SAAS,eAAe,CAAC,OAAgB,EAAE,CAAY;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;IACvD,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,KAAgD,CAAA;QAC1D,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAQ;QACpG,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QAC5B,IAAI,IAAI,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;;YAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACvD,CAAC"}
@@ -5,12 +5,18 @@ export { pad2 };
5
5
  export declare function startOfLocalDay(ms: number): number;
6
6
  /** 距下一个本机零点(官方 msUntilNextLocalMidnight)。 */
7
7
  export declare function msUntilNextLocalMidnight(ms: number): number;
8
+ /** 官方 formatRunDuration 的片段(numeric = 数字段,调用方按官方套等宽数字字体)。 */
9
+ export interface DurationPart {
10
+ text: string;
11
+ numeric: boolean;
12
+ }
8
13
  /**
9
- * 官方 formatRunDuration:整秒;≥1 分带零补秒;≥1 小时带零补分秒。
14
+ * 官方 formatRunDuration(0.2.x,lib/client.js:5067-5095):整秒;≥1 分带分;≥1 小时带小时。
15
+ * 单位是独立片段(`duration.hourUnit` / `minuteUnit` / `secondUnit`),不是一条带占位的模板。
10
16
  */
11
- export declare function formatRunDuration(ms: number, tt: Translate): string;
12
- /** 官方 formatLiveRunDuration:秒不补零、分钟自 60 秒起。 */
13
- export declare function formatLiveRunDuration(ms: number, tt: Translate): string;
17
+ export declare function formatRunDuration(ms: number, tt: Translate): readonly DurationPart[];
18
+ /** 时长片段拼成单行文本(塞进带占位符的文案 / aria 用)。 */
19
+ export declare function durationText(parts: readonly DurationPart[]): string;
14
20
  /**
15
21
  * 官方 formatMessageClock:同日 → `HH:mm`;同年 → `{m}月{d}日 HH:mm`;跨年 → `{y}年{m}月{d}日 HH:mm`。
16
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"message-chrome.d.ts","sourceRoot":"","sources":["../../../src/session/mirror/message-chrome.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,IAAI,EAAE,CAAA;AAEf,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,6CAA6C;AAC7C,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CASnE;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CASvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAQhG;AAED,oDAAoD;AACpD,wBAAgB,cAAc,IAAI,MAAM,CAavC;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAMjE;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAEvE;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAKtE;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAErE;AA2BD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM,GAAG,IAAI,CAwBrH"}
1
+ {"version":3,"file":"message-chrome.d.ts","sourceRoot":"","sources":["../../../src/session/mirror/message-chrome.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,IAAI,EAAE,CAAA;AAEf,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,6CAA6C;AAC7C,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,YAAY,EAAE,CAUpF;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAQhG;AAED,oDAAoD;AACpD,wBAAgB,cAAc,IAAI,MAAM,CAavC;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAMjE;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAEvE;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAKtE;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAErE;AA2BD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM,GAAG,IAAI,CAwBrH"}
@@ -18,30 +18,25 @@ export function msUntilNextLocalMidnight(ms) {
18
18
  return Math.max(next.getTime() - ms, 1);
19
19
  }
20
20
  /**
21
- * 官方 formatRunDuration:整秒;≥1 分带零补秒;≥1 小时带零补分秒。
21
+ * 官方 formatRunDuration(0.2.x,lib/client.js:5067-5095):整秒;≥1 分带分;≥1 小时带小时。
22
+ * 单位是独立片段(`duration.hourUnit` / `minuteUnit` / `secondUnit`),不是一条带占位的模板。
22
23
  */
23
24
  export function formatRunDuration(ms, tt) {
24
25
  const total = Math.max(0, Math.floor(ms / 1e3));
25
26
  const hours = Math.floor(total / 3600);
26
27
  const minutes = Math.floor(total / 60) % 60;
27
28
  const seconds = total % 60;
29
+ const parts = [];
28
30
  if (hours > 0)
29
- return tt('durationHours', { hours, minutes: pad2(minutes), seconds: pad2(seconds) });
30
- return minutes > 0
31
- ? tt('durationMinutes', { minutes, seconds: pad2(seconds) })
32
- : tt('durationSeconds', { seconds });
31
+ parts.push({ text: String(hours), numeric: true }, { text: tt('durationHourUnit'), numeric: false });
32
+ if (total >= 60)
33
+ parts.push({ text: String(minutes), numeric: true }, { text: tt('durationMinuteUnit'), numeric: false });
34
+ parts.push({ text: String(seconds), numeric: true }, { text: tt('durationSecondUnit'), numeric: false });
35
+ return parts;
33
36
  }
34
- /** 官方 formatLiveRunDuration:秒不补零、分钟自 60 秒起。 */
35
- export function formatLiveRunDuration(ms, tt) {
36
- const totalSeconds = Math.max(0, Math.floor(ms / 1e3));
37
- const hours = Math.floor(totalSeconds / 3600);
38
- const minutes = Math.floor(totalSeconds / 60) % 60;
39
- const seconds = String(totalSeconds % 60);
40
- if (hours > 0)
41
- return tt('durationHours', { hours, minutes: pad2(minutes), seconds });
42
- return minutes > 0
43
- ? tt('durationMinutes', { minutes, seconds })
44
- : tt('durationSeconds', { seconds });
37
+ /** 时长片段拼成单行文本(塞进带占位符的文案 / aria 用)。 */
38
+ export function durationText(parts) {
39
+ return parts.map(part => part.text).join('');
45
40
  }
46
41
  /**
47
42
  * 官方 formatMessageClock:同日 → `HH:mm`;同年 → `{m}月{d}日 HH:mm`;跨年 → `{y}年{m}月{d}日 HH:mm`。
@@ -1 +1 @@
1
- {"version":3,"file":"message-chrome.js","sourceRoot":"","sources":["../../../src/session/mirror/message-chrome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-chrome.js","sourceRoot":"","sources":["../../../src/session/mirror/message-chrome.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"official-classes.d.ts","sourceRoot":"","sources":["../../src/session/official-classes.ts"],"names":[],"mappings":"AAuCA,uBAAuB;AACvB,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAElD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAiC9D;AAKD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAwBvE;AAED,wCAAwC;AACxC,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAOzE"}
1
+ {"version":3,"file":"official-classes.d.ts","sourceRoot":"","sources":["../../src/session/official-classes.ts"],"names":[],"mappings":"AAyCA,uBAAuB;AACvB,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAElD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAiC9D;AAKD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAwBvE;AAED,wCAAwC;AACxC,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAOzE"}
@@ -12,7 +12,8 @@
12
12
  // 不空白),并在控制台告警一次。
13
13
  //
14
14
  // 已知官方模块与语义名(源码 *_module_css_default 实测清单):
15
- // ChatView(12): frame root scroll column flowItem hint older callRow openError modalAction toBottom toBottomSlot
15
+ // ChatView(19): frame root scroll column flowItem hint older callRow openError modalAction toBottom toBottomSlot
16
+ // running runningDivider runningContent runningText runningIcon runningWhaleAnimated runningWhaleStill
16
17
  // AssistantMarkdown(4): root body actions stopped
17
18
  // MessageItem(32): bubble userRow userStack contextRow fileCard ... turnErrorRow retryRow ...
18
19
  // GenericCommandCard(8): root row title summary body chevron leading separator
@@ -21,7 +22,8 @@
21
22
  // ToolRow(30): root row leading title sep summary summarySuffix diffStat fileLink
22
23
  // errorSummary stoppedSummary bodyWrap inspectButton detailsBodyWrap bodyScroll ioCard
23
24
  // ioSection ioLabel ioDivider ioText codeBody terminalBody diffBody readBody imageBody
24
- // searchBody webBody searchRecovery imageLabel imageMeta visuallyHidden
25
+ // searchBody webBody searchRecovery imageExtra imageMeta visuallyHidden
26
+ // (0.2.x 已删 chevron / imageLabel:箭头样式并入 primitives DisclosureRow)
25
27
  // ui-sidebar-documentpreview 包(官方文件预览体,2026-09 U11 文本渲染对齐时接入):
26
28
  // CodeBody(2): renderer code(CodeBlock + lineNumbers 的官方外壳)
27
29
  // ui-deliverables 包(交付文件行 + 交付文件卡,2026-09 U11 产出物入口接入):
@@ -73,7 +75,7 @@ export function parseOfficialCss(css) {
73
75
  if (prefix === '')
74
76
  return out;
75
77
  for (const token of tokens) {
76
- if (!token.startsWith(prefix + '_'))
78
+ if (!token.startsWith(`${prefix}_`))
77
79
  continue;
78
80
  const semantic = token.slice(prefix.length + 1);
79
81
  // 语义名是 camelCase,不含下划线;跳过复合类名(如 foo_bar_baz 的剩余部分)