dsh-better-display 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/DESIGN.md +72 -0
- package/LICENSE +24 -0
- package/README.en.md +41 -0
- package/README.md +41 -0
- package/THIRD_PARTY_NOTICES.md +65 -0
- package/cordis.patch.yml +5 -0
- package/cordis.yml +4 -0
- package/dshx.yml +5 -0
- package/lib/client.js +49923 -0
- package/lib/client.js.map +1 -0
- package/lib/dsh-better-display.js +256 -0
- package/lib/types/client/Blocks.d.ts +45 -0
- package/lib/types/client/Blocks.d.ts.map +1 -0
- package/lib/types/client/Blocks.js +136 -0
- package/lib/types/client/Blocks.js.map +1 -0
- package/lib/types/client/ChoreographedFlow.d.ts +22 -0
- package/lib/types/client/ChoreographedFlow.d.ts.map +1 -0
- package/lib/types/client/ChoreographedFlow.js +170 -0
- package/lib/types/client/ChoreographedFlow.js.map +1 -0
- package/lib/types/client/ClosedProcessSummary.d.ts +9 -0
- package/lib/types/client/ClosedProcessSummary.d.ts.map +1 -0
- package/lib/types/client/ClosedProcessSummary.js +15 -0
- package/lib/types/client/ClosedProcessSummary.js.map +1 -0
- package/lib/types/client/LiveFold.d.ts +10 -0
- package/lib/types/client/LiveFold.d.ts.map +1 -0
- package/lib/types/client/LiveFold.js +39 -0
- package/lib/types/client/LiveFold.js.map +1 -0
- package/lib/types/client/McpAppFrame.d.ts +32 -0
- package/lib/types/client/McpAppFrame.d.ts.map +1 -0
- package/lib/types/client/McpAppFrame.js +193 -0
- package/lib/types/client/McpAppFrame.js.map +1 -0
- package/lib/types/client/Reader.d.ts +3 -0
- package/lib/types/client/Reader.d.ts.map +1 -0
- package/lib/types/client/Reader.js +537 -0
- package/lib/types/client/Reader.js.map +1 -0
- package/lib/types/client/ReasoningCard.d.ts +11 -0
- package/lib/types/client/ReasoningCard.d.ts.map +1 -0
- package/lib/types/client/ReasoningCard.js +301 -0
- package/lib/types/client/ReasoningCard.js.map +1 -0
- package/lib/types/client/StickyLane.d.ts +8 -0
- package/lib/types/client/StickyLane.d.ts.map +1 -0
- package/lib/types/client/StickyLane.js +28 -0
- package/lib/types/client/StickyLane.js.map +1 -0
- package/lib/types/client/TimelineRail.d.ts +10 -0
- package/lib/types/client/TimelineRail.d.ts.map +1 -0
- package/lib/types/client/TimelineRail.js +168 -0
- package/lib/types/client/TimelineRail.js.map +1 -0
- package/lib/types/client/ToolActivity.d.ts +17 -0
- package/lib/types/client/ToolActivity.d.ts.map +1 -0
- package/lib/types/client/ToolActivity.js +192 -0
- package/lib/types/client/ToolActivity.js.map +1 -0
- package/lib/types/client/TurnMetrics.d.ts +11 -0
- package/lib/types/client/TurnMetrics.d.ts.map +1 -0
- package/lib/types/client/TurnMetrics.js +44 -0
- package/lib/types/client/TurnMetrics.js.map +1 -0
- package/lib/types/client/WaitingStatus.d.ts +6 -0
- package/lib/types/client/WaitingStatus.d.ts.map +1 -0
- package/lib/types/client/WaitingStatus.js +19 -0
- package/lib/types/client/WaitingStatus.js.map +1 -0
- package/lib/types/client/conversation-scroll.d.ts +19 -0
- package/lib/types/client/conversation-scroll.d.ts.map +1 -0
- package/lib/types/client/conversation-scroll.js +25 -0
- package/lib/types/client/conversation-scroll.js.map +1 -0
- package/lib/types/client/deliverables.d.ts +24 -0
- package/lib/types/client/deliverables.d.ts.map +1 -0
- package/lib/types/client/deliverables.js +104 -0
- package/lib/types/client/deliverables.js.map +1 -0
- package/lib/types/client/entry-policy.d.ts +10 -0
- package/lib/types/client/entry-policy.d.ts.map +1 -0
- package/lib/types/client/entry-policy.js +24 -0
- package/lib/types/client/entry-policy.js.map +1 -0
- package/lib/types/client/entry.d.ts +4 -0
- package/lib/types/client/entry.d.ts.map +1 -0
- package/lib/types/client/entry.js +34 -0
- package/lib/types/client/entry.js.map +1 -0
- package/lib/types/client/fold-choreography.d.ts +28 -0
- package/lib/types/client/fold-choreography.d.ts.map +1 -0
- package/lib/types/client/fold-choreography.js +31 -0
- package/lib/types/client/fold-choreography.js.map +1 -0
- package/lib/types/client/index.d.ts +7 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/index.js +153 -0
- package/lib/types/client/index.js.map +1 -0
- package/lib/types/client/live-turn.d.ts +58 -0
- package/lib/types/client/live-turn.d.ts.map +1 -0
- package/lib/types/client/live-turn.js +144 -0
- package/lib/types/client/live-turn.js.map +1 -0
- package/lib/types/client/markdown/MarkdownText.d.ts +39 -0
- package/lib/types/client/markdown/MarkdownText.d.ts.map +1 -0
- package/lib/types/client/markdown/MarkdownText.js +171 -0
- package/lib/types/client/markdown/MarkdownText.js.map +1 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.d.ts +9 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.d.ts.map +1 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.js +73 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.js.map +1 -0
- package/lib/types/client/markdown/incremental.d.ts +69 -0
- package/lib/types/client/markdown/incremental.d.ts.map +1 -0
- package/lib/types/client/markdown/incremental.js +108 -0
- package/lib/types/client/markdown/incremental.js.map +1 -0
- package/lib/types/client/markdown/katex.d.ts +27 -0
- package/lib/types/client/markdown/katex.d.ts.map +1 -0
- package/lib/types/client/markdown/katex.js +88 -0
- package/lib/types/client/markdown/katex.js.map +1 -0
- package/lib/types/client/markdown/mathCompatibility.d.ts +11 -0
- package/lib/types/client/markdown/mathCompatibility.d.ts.map +1 -0
- package/lib/types/client/markdown/mathCompatibility.js +293 -0
- package/lib/types/client/markdown/mathCompatibility.js.map +1 -0
- package/lib/types/client/markdown/parse.d.ts +25 -0
- package/lib/types/client/markdown/parse.d.ts.map +1 -0
- package/lib/types/client/markdown/parse.js +42 -0
- package/lib/types/client/markdown/parse.js.map +1 -0
- package/lib/types/client/markdown/render.d.ts +119 -0
- package/lib/types/client/markdown/render.d.ts.map +1 -0
- package/lib/types/client/markdown/render.js +435 -0
- package/lib/types/client/markdown/render.js.map +1 -0
- package/lib/types/client/mcp-app.d.ts +50 -0
- package/lib/types/client/mcp-app.d.ts.map +1 -0
- package/lib/types/client/mcp-app.js +328 -0
- package/lib/types/client/mcp-app.js.map +1 -0
- package/lib/types/client/message-chrome.d.ts +19 -0
- package/lib/types/client/message-chrome.d.ts.map +1 -0
- package/lib/types/client/message-chrome.js +42 -0
- package/lib/types/client/message-chrome.js.map +1 -0
- package/lib/types/client/motion.d.ts +38 -0
- package/lib/types/client/motion.d.ts.map +1 -0
- package/lib/types/client/motion.js +367 -0
- package/lib/types/client/motion.js.map +1 -0
- package/lib/types/client/native/ContextBody.d.ts +130 -0
- package/lib/types/client/native/ContextBody.d.ts.map +1 -0
- package/lib/types/client/native/ContextBody.js +398 -0
- package/lib/types/client/native/ContextBody.js.map +1 -0
- package/lib/types/client/native/ContextInjectionRow.d.ts +26 -0
- package/lib/types/client/native/ContextInjectionRow.d.ts.map +1 -0
- package/lib/types/client/native/ContextInjectionRow.js +27 -0
- package/lib/types/client/native/ContextInjectionRow.js.map +1 -0
- package/lib/types/client/native/ReferenceIcon.d.ts +16 -0
- package/lib/types/client/native/ReferenceIcon.d.ts.map +1 -0
- package/lib/types/client/native/ReferenceIcon.js +16 -0
- package/lib/types/client/native/ReferenceIcon.js.map +1 -0
- package/lib/types/client/native/tool-call-model.d.ts +58 -0
- package/lib/types/client/native/tool-call-model.d.ts.map +1 -0
- package/lib/types/client/native/tool-call-model.js +219 -0
- package/lib/types/client/native/tool-call-model.js.map +1 -0
- package/lib/types/client/open-file.d.ts +24 -0
- package/lib/types/client/primitive-labels.d.ts +10 -0
- package/lib/types/client/primitive-labels.d.ts.map +1 -0
- package/lib/types/client/primitive-labels.js +37 -0
- package/lib/types/client/primitive-labels.js.map +1 -0
- package/lib/types/client/projection.d.ts +41 -0
- package/lib/types/client/projection.d.ts.map +1 -0
- package/lib/types/client/projection.js +112 -0
- package/lib/types/client/projection.js.map +1 -0
- package/lib/types/client/reasoning-follow.d.ts +6 -0
- package/lib/types/client/reasoning-follow.d.ts.map +1 -0
- package/lib/types/client/reasoning-follow.js +12 -0
- package/lib/types/client/reasoning-follow.js.map +1 -0
- package/lib/types/client/settings-copy.d.ts +6 -0
- package/lib/types/client/settings-slots.d.ts +16 -0
- package/lib/types/client/store.d.ts +17 -0
- package/lib/types/client/store.d.ts.map +1 -0
- package/lib/types/client/store.js +13 -0
- package/lib/types/client/store.js.map +1 -0
- package/lib/types/client/stream-buffer.d.ts +29 -0
- package/lib/types/client/stream-buffer.d.ts.map +1 -0
- package/lib/types/client/stream-buffer.js +113 -0
- package/lib/types/client/stream-buffer.js.map +1 -0
- package/lib/types/client/streaming.d.ts +18 -0
- package/lib/types/client/streaming.d.ts.map +1 -0
- package/lib/types/client/streaming.js +77 -0
- package/lib/types/client/streaming.js.map +1 -0
- package/lib/types/client/timeline.d.ts +26 -0
- package/lib/types/client/timeline.d.ts.map +1 -0
- package/lib/types/client/timeline.js +48 -0
- package/lib/types/client/timeline.js.map +1 -0
- package/lib/types/client/tool-activity.d.ts +52 -0
- package/lib/types/client/tool-activity.d.ts.map +1 -0
- package/lib/types/client/tool-activity.js +178 -0
- package/lib/types/client/tool-activity.js.map +1 -0
- package/lib/types/client/types.d.ts +66 -0
- package/lib/types/client/types.d.ts.map +1 -0
- package/lib/types/client/types.js +2 -0
- package/lib/types/client/types.js.map +1 -0
- package/lib/types/client/waiting-clock.d.ts +17 -0
- package/lib/types/client/waiting-clock.d.ts.map +1 -0
- package/lib/types/client/waiting-clock.js +24 -0
- package/lib/types/client/waiting-clock.js.map +1 -0
- package/lib/types/client/word-motion.d.ts +16 -0
- package/lib/types/client/word-motion.d.ts.map +1 -0
- package/lib/types/client/word-motion.js +89 -0
- package/lib/types/client/word-motion.js.map +1 -0
- package/lib/types/client/word-timeline.d.ts +28 -0
- package/lib/types/client/word-timeline.d.ts.map +1 -0
- package/lib/types/client/word-timeline.js +100 -0
- package/lib/types/client/word-timeline.js.map +1 -0
- package/lib/types/dsh-better-display.d.ts +17 -0
- package/lib/types/dsh-better-display.d.ts.map +1 -0
- package/lib/types/dsh-better-display.js +53 -0
- package/lib/types/dsh-better-display.js.map +1 -0
- package/package.json +121 -0
- package/scripts/build-motion-fixture.mjs +26 -0
- package/scripts/link-harness-dependencies.mjs +51 -0
- package/skills/generative-mcpapps/SKILL.md +47 -0
- package/skills/generative-mcpapps/examples/interactive_quiz.html +153 -0
- package/skills/generative-mcpapps/references/html_boilerplate.md +122 -0
- package/skills/generative-mcpapps/references/sep1865_protocol.md +54 -0
- package/src/client/Blocks.tsx +205 -0
- package/src/client/ChoreographedFlow.tsx +182 -0
- package/src/client/ClosedProcessSummary.tsx +19 -0
- package/src/client/LiveFold.tsx +43 -0
- package/src/client/McpAppFrame.module.css +210 -0
- package/src/client/McpAppFrame.tsx +317 -0
- package/src/client/Reader.module.css +329 -0
- package/src/client/Reader.tsx +814 -0
- package/src/client/ReasoningCard.tsx +285 -0
- package/src/client/SettingsSection.module.css +147 -0
- package/src/client/SettingsSection.tsx +117 -0
- package/src/client/StickyLane.tsx +24 -0
- package/src/client/TimelineRail.module.css +170 -0
- package/src/client/TimelineRail.tsx +262 -0
- package/src/client/ToolActivity.tsx +214 -0
- package/src/client/TurnMetrics.module.css +139 -0
- package/src/client/TurnMetrics.tsx +160 -0
- package/src/client/WaitingStatus.tsx +22 -0
- package/src/client/conversation-scroll.ts +28 -0
- package/src/client/deliverables.ts +122 -0
- package/src/client/entry-policy.ts +20 -0
- package/src/client/entry.tsx +40 -0
- package/src/client/fold-choreography.ts +38 -0
- package/src/client/index.tsx +198 -0
- package/src/client/live-turn.ts +155 -0
- package/src/client/markdown/MarkdownText.module.css +304 -0
- package/src/client/markdown/MarkdownText.tsx +187 -0
- package/src/client/markdown/cjkFriendlyStrong.ts +84 -0
- package/src/client/markdown/incremental.ts +131 -0
- package/src/client/markdown/katex.tsx +91 -0
- package/src/client/markdown/mathCompatibility.ts +350 -0
- package/src/client/markdown/parse.ts +45 -0
- package/src/client/markdown/render.tsx +630 -0
- package/src/client/markdown/upstream.json +14 -0
- package/src/client/mcp-app.ts +323 -0
- package/src/client/message-chrome.ts +47 -0
- package/src/client/motion.tsx +338 -0
- package/src/client/native/ContextBody.module.css +161 -0
- package/src/client/native/ContextBody.tsx +591 -0
- package/src/client/native/ContextInjectionRow.module.css +62 -0
- package/src/client/native/ContextInjectionRow.tsx +72 -0
- package/src/client/native/ReferenceIcon.tsx +35 -0
- package/src/client/native/tool-call-model.ts +248 -0
- package/src/client/native/upstream.json +41 -0
- package/src/client/open-file.ts +94 -0
- package/src/client/pending-submission.ts +49 -0
- package/src/client/primitive-labels.ts +53 -0
- package/src/client/projection.ts +118 -0
- package/src/client/reasoning-follow.ts +12 -0
- package/src/client/settings-copy.ts +53 -0
- package/src/client/settings-slots.ts +20 -0
- package/src/client/settings.tsx +73 -0
- package/src/client/skill-status.ts +78 -0
- package/src/client/store.ts +30 -0
- package/src/client/stream-buffer.ts +100 -0
- package/src/client/streaming.tsx +62 -0
- package/src/client/style.d.ts +4 -0
- package/src/client/timeline.ts +77 -0
- package/src/client/tool-activity.ts +152 -0
- package/src/client/types.ts +66 -0
- package/src/client/waiting-clock.ts +25 -0
- package/src/client/word-motion.tsx +91 -0
- package/src/client/word-timeline.ts +96 -0
- package/src/dsh-better-display.ts +108 -0
- package/src/skill-roots.ts +138 -0
- package/src/skill-status.ts +81 -0
- package/tests/browser-closed-gap.tsx +20 -0
- package/tests/browser-motion.tsx +65 -0
- package/tests/browser-sticky-lanes.tsx +22 -0
- package/tests/browser-waiting-clock.tsx +14 -0
- package/tests/chat-flow-hook.test.ts +66 -0
- package/tests/cloud-gate.test.ts +34 -0
- package/tests/conversation-scroll.test.ts +47 -0
- package/tests/deliverables.test.ts +128 -0
- package/tests/entry.test.ts +42 -0
- package/tests/fixtures/maid-composer-hide.html +31 -0
- package/tests/fold-choreography.test.ts +38 -0
- package/tests/history-word-regression.test.ts +16 -0
- package/tests/live-turn.test.ts +218 -0
- package/tests/mcp-apps.test.ts +157 -0
- package/tests/message-chrome.test.ts +29 -0
- package/tests/open-file.test.ts +103 -0
- package/tests/pending-submission.test.ts +45 -0
- package/tests/projection.test.ts +184 -0
- package/tests/reasoning-follow.test.ts +34 -0
- package/tests/settings-copy.test.ts +63 -0
- package/tests/skill-status.test.ts +137 -0
- package/tests/stock-install.test.ts +50 -0
- package/tests/stream-buffer.test.ts +97 -0
- package/tests/timeline.test.ts +59 -0
- package/tests/waiting-clock.test.ts +24 -0
- package/tests/word-timeline.test.ts +136 -0
- package/tsconfig.json +11 -0
- package/tsdown.config.ts +49 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useEffect, useId, useRef, useState, } from 'react';
|
|
3
|
+
import css from './TimelineRail.module.css';
|
|
4
|
+
const TURN_SPACING_PX = 12;
|
|
5
|
+
const RAIL_INSET_PX = 6;
|
|
6
|
+
const FADE_PX = 24;
|
|
7
|
+
function itemPosition(index) {
|
|
8
|
+
return { '--turn-natural-position': `${index * TURN_SPACING_PX}px` };
|
|
9
|
+
}
|
|
10
|
+
function frameStyle(count, scrollTop) {
|
|
11
|
+
return {
|
|
12
|
+
'--turn-natural-height': `${(count - 1) * TURN_SPACING_PX + 2 * RAIL_INSET_PX}px`,
|
|
13
|
+
'--turn-rail-inset': `${RAIL_INSET_PX}px`,
|
|
14
|
+
'--turn-scroll-top': `${scrollTop}px`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function itemIndexAtPointer(items, frame, scrollTop, clientY) {
|
|
18
|
+
const rect = frame.getBoundingClientRect();
|
|
19
|
+
const offset = clientY - rect.top + scrollTop - RAIL_INSET_PX;
|
|
20
|
+
return Math.max(0, Math.min(items.length - 1, Math.round(offset / TURN_SPACING_PX)));
|
|
21
|
+
}
|
|
22
|
+
const RAIL_AT_REST = { top: 0, canScrollUp: false, canScrollDown: false };
|
|
23
|
+
function railScrollState(scroller) {
|
|
24
|
+
const top = scroller.scrollTop;
|
|
25
|
+
return {
|
|
26
|
+
top,
|
|
27
|
+
canScrollUp: top > 1,
|
|
28
|
+
canScrollDown: top < scroller.scrollHeight - scroller.clientHeight - 1,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export const TimelineRail = memo(function TimelineRail({ items, activeTurn, busyTurn, onNavigate, }) {
|
|
32
|
+
const [hoveredIndex, setHoveredIndex] = useState(null);
|
|
33
|
+
const [scrollState, setScrollState] = useState(RAIL_AT_REST);
|
|
34
|
+
const scrollerRef = useRef(null);
|
|
35
|
+
const pointerInsideRef = useRef(false);
|
|
36
|
+
const previewId = useId();
|
|
37
|
+
const syncScrollState = () => {
|
|
38
|
+
const scroller = scrollerRef.current;
|
|
39
|
+
if (!scroller)
|
|
40
|
+
return;
|
|
41
|
+
const next = railScrollState(scroller);
|
|
42
|
+
setScrollState(cur => (cur.top === next.top && cur.canScrollUp === next.canScrollUp && cur.canScrollDown === next.canScrollDown ? cur : next));
|
|
43
|
+
};
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
const scroller = scrollerRef.current;
|
|
46
|
+
if (!scroller || typeof ResizeObserver === 'undefined')
|
|
47
|
+
return;
|
|
48
|
+
const observer = new ResizeObserver(syncScrollState);
|
|
49
|
+
observer.observe(scroller);
|
|
50
|
+
return () => observer.disconnect();
|
|
51
|
+
}, []);
|
|
52
|
+
useEffect(syncScrollState, [items.length]);
|
|
53
|
+
// Keep active mark visible
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
const scroller = scrollerRef.current;
|
|
56
|
+
const index = items.findIndex(item => item.turn === activeTurn);
|
|
57
|
+
if (!scroller || index < 0 || pointerInsideRef.current)
|
|
58
|
+
return;
|
|
59
|
+
const markTop = index * TURN_SPACING_PX + RAIL_INSET_PX;
|
|
60
|
+
const viewTop = scroller.scrollTop;
|
|
61
|
+
const viewHeight = scroller.clientHeight;
|
|
62
|
+
if (viewHeight <= 0 || (markTop >= viewTop + FADE_PX && markTop <= viewTop + viewHeight - FADE_PX))
|
|
63
|
+
return;
|
|
64
|
+
const target = Math.max(0, markTop - viewHeight / 2);
|
|
65
|
+
if (typeof scroller.scrollTo === 'function') {
|
|
66
|
+
scroller.scrollTo({ top: target, behavior: 'smooth' });
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
scroller.scrollTop = target;
|
|
70
|
+
}
|
|
71
|
+
syncScrollState();
|
|
72
|
+
}, [activeTurn, items]);
|
|
73
|
+
if (items.length < 2)
|
|
74
|
+
return null;
|
|
75
|
+
const preview = hoveredIndex !== null && hoveredIndex >= 0 ? items[hoveredIndex] : undefined;
|
|
76
|
+
const previewPosition = hoveredIndex !== null && hoveredIndex >= 0 ? itemPosition(hoveredIndex) : undefined;
|
|
77
|
+
const onPointerMove = (event) => {
|
|
78
|
+
const scroller = scrollerRef.current;
|
|
79
|
+
const scrollTop = scroller?.scrollTop ?? 0;
|
|
80
|
+
const idx = itemIndexAtPointer(items, event.currentTarget, scrollTop, event.clientY);
|
|
81
|
+
setHoveredIndex(idx);
|
|
82
|
+
};
|
|
83
|
+
const onPointerLeave = () => {
|
|
84
|
+
pointerInsideRef.current = false;
|
|
85
|
+
setHoveredIndex(null);
|
|
86
|
+
};
|
|
87
|
+
const navigateAtPointer = (event) => {
|
|
88
|
+
const scroller = scrollerRef.current;
|
|
89
|
+
const scrollTop = scroller?.scrollTop ?? 0;
|
|
90
|
+
const idx = itemIndexAtPointer(items, event.currentTarget, scrollTop, event.clientY);
|
|
91
|
+
const item = items[idx];
|
|
92
|
+
if (item !== undefined)
|
|
93
|
+
onNavigate(item);
|
|
94
|
+
};
|
|
95
|
+
const fadeClasses = [css.scroller];
|
|
96
|
+
if (scrollState.canScrollUp)
|
|
97
|
+
fadeClasses.push(css.fadeTop);
|
|
98
|
+
if (scrollState.canScrollDown)
|
|
99
|
+
fadeClasses.push(css.fadeBottom);
|
|
100
|
+
return (_jsx("div", { className: css.slot, children: _jsxs("nav", { className: css.frame, style: frameStyle(items.length, scrollState.top), "aria-label": "\u8F6E\u6B21\u5BFC\u822A\u65F6\u95F4\u8F74", onClick: navigateAtPointer, onPointerMove: onPointerMove, onPointerEnter: () => { pointerInsideRef.current = true; }, onPointerLeave: onPointerLeave, onMouseDown: event => { event.preventDefault(); }, children: [_jsx("div", { ref: scrollerRef, className: fadeClasses.join(' '), onScroll: syncScrollState, children: _jsx("div", { className: css.marks, children: items.map((item, index) => {
|
|
101
|
+
const isBusy = busyTurn === item.turn;
|
|
102
|
+
const isActive = activeTurn === item.turn;
|
|
103
|
+
const isUnloaded = item.anchor.kind === 'unloaded';
|
|
104
|
+
// Wave calculation: peak at cursor, smoothly tapering off in width and height
|
|
105
|
+
let width = isUnloaded ? 6 : 8;
|
|
106
|
+
let height = 2;
|
|
107
|
+
let opacity = isUnloaded ? 0.3 : 0.45;
|
|
108
|
+
let background = 'var(--dsw-alias-label-tertiary)';
|
|
109
|
+
if (hoveredIndex !== null) {
|
|
110
|
+
const diff = Math.abs(index - hoveredIndex);
|
|
111
|
+
if (diff === 0) {
|
|
112
|
+
// Cursor peak (最长最高)
|
|
113
|
+
width = 26;
|
|
114
|
+
height = 2.8;
|
|
115
|
+
opacity = 1.0;
|
|
116
|
+
background = 'var(--dsw-alias-label-primary)';
|
|
117
|
+
}
|
|
118
|
+
else if (diff === 1) {
|
|
119
|
+
// 旁边第 1 阶 (次长次高)
|
|
120
|
+
width = 18;
|
|
121
|
+
height = 2.2;
|
|
122
|
+
opacity = 0.8;
|
|
123
|
+
background = 'var(--dsw-alias-label-primary)';
|
|
124
|
+
}
|
|
125
|
+
else if (diff === 2) {
|
|
126
|
+
// 旁边第 2 阶 (继续变矮变短)
|
|
127
|
+
width = 13;
|
|
128
|
+
height = 1.8;
|
|
129
|
+
opacity = 0.6;
|
|
130
|
+
background = 'var(--dsw-alias-label-secondary)';
|
|
131
|
+
}
|
|
132
|
+
else if (diff === 3) {
|
|
133
|
+
// 旁边第 3 阶 (平缓过渡)
|
|
134
|
+
width = 9;
|
|
135
|
+
height = 1.6;
|
|
136
|
+
opacity = 0.45;
|
|
137
|
+
background = 'var(--dsw-alias-label-tertiary)';
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// 远离光标的基线
|
|
141
|
+
width = 8;
|
|
142
|
+
height = 2;
|
|
143
|
+
opacity = 0.35;
|
|
144
|
+
background = 'var(--dsw-alias-label-tertiary)';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else if (isActive) {
|
|
148
|
+
width = 20;
|
|
149
|
+
height = 2.4;
|
|
150
|
+
opacity = 0.95;
|
|
151
|
+
background = 'var(--dsw-alias-label-primary)';
|
|
152
|
+
}
|
|
153
|
+
const tickStyle = {
|
|
154
|
+
width: `${width}px`,
|
|
155
|
+
height: `${height}px`,
|
|
156
|
+
opacity,
|
|
157
|
+
backgroundColor: background,
|
|
158
|
+
};
|
|
159
|
+
const markClasses = [css.mark];
|
|
160
|
+
if (isBusy)
|
|
161
|
+
markClasses.push(css.markBusy);
|
|
162
|
+
return (_jsx("div", { className: css.markPosition, style: itemPosition(index), children: _jsx("button", { type: "button", className: markClasses.join(' '), "aria-label": `第 ${item.turn + 1} 轮`, "aria-current": isActive ? 'true' : undefined, "aria-busy": isBusy ? 'true' : undefined, "aria-describedby": hoveredIndex === index ? previewId : undefined, onMouseDown: event => { event.preventDefault(); }, onClick: (e) => {
|
|
163
|
+
e.stopPropagation();
|
|
164
|
+
onNavigate(item);
|
|
165
|
+
}, onFocus: () => setHoveredIndex(index), onBlur: () => setHoveredIndex(null), children: _jsx("span", { className: css.tick, style: tickStyle }) }) }, item.turn));
|
|
166
|
+
}) }) }), preview !== undefined && previewPosition !== undefined && (_jsxs("div", { id: previewId, role: "tooltip", className: css.preview, style: previewPosition, children: [_jsx("div", { className: css.previewPrompt, children: preview.prompt || `第 ${preview.turn + 1} 轮` }), preview.response !== '' && (_jsx("div", { className: css.previewResponse, children: preview.response }))] }))] }) }));
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=TimelineRail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineRail.js","sourceRoot":"","sources":["../../../src/client/TimelineRail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ToolCallBlock } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
2
|
+
import type { ToolActivityEntry } from './tool-activity.js';
|
|
3
|
+
import type { BlockRenderProps } from './types.js';
|
|
4
|
+
/** One occurrence, keyed by call id all the way from generation to result. */
|
|
5
|
+
export declare const ToolActivity: import("react").MemoExoticComponent<({ entry, motion, turnClosed, onRead, depth, ...render }: BlockRenderProps & {
|
|
6
|
+
entry: ToolActivityEntry;
|
|
7
|
+
motion: boolean;
|
|
8
|
+
turnClosed: boolean;
|
|
9
|
+
onRead: () => void;
|
|
10
|
+
depth?: number;
|
|
11
|
+
}) => import("react").JSX.Element>;
|
|
12
|
+
/** Rich media (images, MCP widgets) rendered outside the folded tool ledger. */
|
|
13
|
+
export declare function ToolMedia({ block, depth, ...render }: BlockRenderProps & {
|
|
14
|
+
block: ToolCallBlock;
|
|
15
|
+
depth?: number;
|
|
16
|
+
}): import("react").JSX.Element | null;
|
|
17
|
+
//# sourceMappingURL=ToolActivity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolActivity.d.ts","sourceRoot":"","sources":["../../../src/client/ToolActivity.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,gDAAgD,CAAC;AAOpG,OAAO,KAAK,EAAE,iBAAiB,EAA2B,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAuHnD,8EAA8E;AAC9E,eAAO,MAAM,YAAY,gGAA+F,gBAAgB,GAAG;IACzI,KAAK,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACpG,iCAuEiL,CAAC;AAEnL,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAS,EAAE,GAAG,MAAM,EAAE,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,sCAQrH"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { DiffBlock, DisclosureRow, JsonTree, ReadBlock, SearchBlock, TerminalBlock, WebBlock, IconApiOutline14, IconBrowseOutline16, IconEditOutline16, IconSearchOutline16, IconSkillOutline16, IconSparkle16 } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
import { Blocks, contentBlocks } from './Blocks.js';
|
|
5
|
+
import { ProcessFragment } from './motion.js';
|
|
6
|
+
import { activityPhase, activitySummary, executionFacts, objectValue } from './tool-activity.js';
|
|
7
|
+
import { classifyTool, toolRowModel, VARIANT_TITLES } from './native/tool-call-model.js';
|
|
8
|
+
import { McpAppFrame, StreamingMcpAppPlaceholder } from './McpAppFrame.js';
|
|
9
|
+
import { diffBlockLabels, jsonTreeLabels, readBlockLabels, searchBlockLabels, terminalBlockLabels, webBlockLabels } from './primitive-labels.js';
|
|
10
|
+
import css from './Reader.module.css';
|
|
11
|
+
const LABEL = { preparing: '输入生成中', running: '执行中', returned: '已返回', succeeded: '已完成', failed: '失败', interrupted: '已中断' };
|
|
12
|
+
const ICONS = { write: IconEditOutline16, read: IconBrowseOutline16, terminal: IconApiOutline14, search: IconSearchOutline16, web: IconSearchOutline16, other: IconSparkle16 };
|
|
13
|
+
const number = new Intl.NumberFormat('zh-CN');
|
|
14
|
+
const language = (path) => path?.split('.').at(-1);
|
|
15
|
+
const duration = (ms) => ms < 1000 ? `${Math.round(ms)} 毫秒` : `${(ms / 1000).toFixed(ms < 10000 ? 1 : 0)} 秒`;
|
|
16
|
+
function generatedInput(content, target, preparing) {
|
|
17
|
+
const lines = content.split('\n').map((text, index) => ({ number: index + 1, text }));
|
|
18
|
+
const visible = preparing ? lines.slice(-12) : lines.slice(0, 1600);
|
|
19
|
+
return _jsxs("div", { "data-reader-tool-file": true, children: [_jsxs("p", { className: css.toolDetailNote, children: [preparing ? '正在生成的输入 · 尚未执行 · 末尾 12 行' : '工具输入中的文件内容', !preparing && lines.length > visible.length ? ' · 预览前 1,600 行,完整内容在原始数据中' : ''] }), _jsx(ReadBlock, { label: target ?? '文件内容', lang: language(target), lines: visible, totalLines: lines.length, maxLines: 16, labels: readBlockLabels })] });
|
|
20
|
+
}
|
|
21
|
+
function InputView({ model, preparing, fillComposer }) {
|
|
22
|
+
if ((model.name === 'render_ui' || model.name === 'show_widget') && typeof model.args?.html === 'string') {
|
|
23
|
+
return preparing
|
|
24
|
+
? _jsx(StreamingMcpAppPlaceholder, { title: typeof model.args.title === 'string' ? model.args.title : undefined })
|
|
25
|
+
: _jsx(McpAppFrame, { html: model.args.html, title: typeof model.args.title === 'string' ? model.args.title : undefined, fillComposer: fillComposer });
|
|
26
|
+
}
|
|
27
|
+
if (model.content)
|
|
28
|
+
return generatedInput(model.content, model.target, preparing);
|
|
29
|
+
if (model.command)
|
|
30
|
+
return _jsxs("div", { "data-reader-tool-terminal": true, children: [_jsx("p", { className: css.toolDetailNote, children: preparing ? '正在生成命令 · 尚未执行' : '提交的命令' }), _jsx(TerminalBlock, { command: model.command, cwd: model.cwd, labels: terminalBlockLabels })] });
|
|
31
|
+
return _jsx(JsonTree, { data: model.args, label: preparing ? '已收到的输入字段' : '工具输入', labels: jsonTreeLabels });
|
|
32
|
+
}
|
|
33
|
+
function readLines(value) {
|
|
34
|
+
if (!Array.isArray(value))
|
|
35
|
+
return null;
|
|
36
|
+
const lines = [];
|
|
37
|
+
for (const item of value) {
|
|
38
|
+
const row = objectValue(item);
|
|
39
|
+
if (typeof row?.number !== 'number' || !Number.isInteger(row.number) || typeof row.text !== 'string')
|
|
40
|
+
return null;
|
|
41
|
+
lines.push({ number: row.number, text: row.text });
|
|
42
|
+
}
|
|
43
|
+
return lines;
|
|
44
|
+
}
|
|
45
|
+
function diffHunks(value) {
|
|
46
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
47
|
+
return null;
|
|
48
|
+
const diffs = [];
|
|
49
|
+
for (const item of value) {
|
|
50
|
+
const row = objectValue(item);
|
|
51
|
+
if (typeof row?.path !== 'string' || (row.oldText !== null && typeof row.oldText !== 'string') || typeof row.newText !== 'string')
|
|
52
|
+
return null;
|
|
53
|
+
diffs.push({ path: row.path, oldText: row.oldText, newText: row.newText });
|
|
54
|
+
}
|
|
55
|
+
return diffs;
|
|
56
|
+
}
|
|
57
|
+
function searchFiles(value) {
|
|
58
|
+
if (!Array.isArray(value))
|
|
59
|
+
return null;
|
|
60
|
+
const files = [];
|
|
61
|
+
for (const item of value) {
|
|
62
|
+
const row = objectValue(item);
|
|
63
|
+
if (typeof row?.path !== 'string' || !Array.isArray(row.matches))
|
|
64
|
+
return null;
|
|
65
|
+
const matches = [];
|
|
66
|
+
for (const itemMatch of row.matches) {
|
|
67
|
+
const match = objectValue(itemMatch);
|
|
68
|
+
if (typeof match?.lineNumber !== 'number' || !Number.isInteger(match.lineNumber) || typeof match.line !== 'string')
|
|
69
|
+
return null;
|
|
70
|
+
matches.push({ lineNumber: match.lineNumber, line: match.line });
|
|
71
|
+
}
|
|
72
|
+
files.push({ path: row.path, matches });
|
|
73
|
+
}
|
|
74
|
+
return files;
|
|
75
|
+
}
|
|
76
|
+
function ResultView({ entry, model, phase, ...render }) {
|
|
77
|
+
if ((model.name === 'render_ui' || model.name === 'show_widget') && typeof model.args?.html === 'string') {
|
|
78
|
+
return _jsx(McpAppFrame, { html: model.args.html, title: typeof model.args.title === 'string' ? model.args.title : undefined, fillComposer: render.fillComposer });
|
|
79
|
+
}
|
|
80
|
+
const block = entry.block;
|
|
81
|
+
if (!block || !('kind' in block))
|
|
82
|
+
return _jsxs(_Fragment, { children: [_jsx("p", { className: css.toolDetailNote, children: phase === 'interrupted' ? '已中断,没有工具结果。已生成的输入仍可查看。' : phase === 'preparing' ? '模型正在生成工具输入,工具还未开始执行。' : '工具已开始执行,正在等待结果。' }), _jsx(InputView, { model: model, preparing: phase === 'preparing', fillComposer: render.fillComposer })] });
|
|
83
|
+
const meta = objectValue(block.meta);
|
|
84
|
+
const text = block.content.filter(item => item.type === 'text').map(item => item.text).join('\n');
|
|
85
|
+
if (phase === 'interrupted')
|
|
86
|
+
return _jsxs(_Fragment, { children: [_jsx("p", { className: css.toolDetailNote, children: "\u5DE5\u5177\u5DF2\u53D6\u6D88\uFF0C\u672A\u6B63\u5E38\u5B8C\u6210\u3002\u8F93\u5165\u548C\u539F\u59CB\u8FD4\u56DE\u8BB0\u5F55\u4ECD\u53EF\u67E5\u770B\u3002" }), _jsx(InputView, { model: model, preparing: false, fillComposer: render.fillComposer }), _jsx("pre", { className: css.toolRaw, children: text })] });
|
|
87
|
+
if (model.category === 'terminal') {
|
|
88
|
+
const facts = executionFacts(block);
|
|
89
|
+
const output = text.replace(/\n\[(?:exit code: \d+|killed by signal: [^\]\n]+)\]$/, '');
|
|
90
|
+
return _jsx("div", { "data-reader-tool-terminal": true, children: _jsx(TerminalBlock, { command: model.command ?? model.name, cwd: model.cwd, output: output, exitCode: facts.exitCode, signal: facts.signal, maxLines: 18, labels: terminalBlockLabels }) });
|
|
91
|
+
}
|
|
92
|
+
const lines = readLines(meta?.lines);
|
|
93
|
+
if (model.category === 'read' && typeof meta?.path === 'string' && typeof meta.totalLines === 'number' && lines)
|
|
94
|
+
return _jsx("div", { "data-reader-tool-file": true, children: _jsx(ReadBlock, { label: meta.path, lang: typeof meta.lang === 'string' ? meta.lang : undefined, lines: lines, totalLines: meta.totalLines, maxLines: 18, labels: readBlockLabels }) });
|
|
95
|
+
const diffs = diffHunks(meta?.diffs);
|
|
96
|
+
if (model.category === 'write' && diffs)
|
|
97
|
+
return _jsx("div", { "data-reader-tool-diff": true, children: _jsx(DiffBlock, { diffs: diffs, maxLines: 18, labels: diffBlockLabels }) });
|
|
98
|
+
if (model.category === 'search' && typeof meta?.total === 'number' && typeof meta.truncated === 'boolean') {
|
|
99
|
+
if (meta.shape === 'paths' && Array.isArray(meta.paths) && meta.paths.every((path) => typeof path === 'string'))
|
|
100
|
+
return _jsx("div", { "data-reader-tool-search": true, children: _jsx(SearchBlock, { kind: "paths", paths: meta.paths, total: meta.total, truncated: meta.truncated, maxLines: 18, labels: searchBlockLabels }) });
|
|
101
|
+
const files = searchFiles(meta.files);
|
|
102
|
+
if (meta.shape === 'matches' && files)
|
|
103
|
+
return _jsx("div", { "data-reader-tool-search": true, children: _jsx(SearchBlock, { kind: "matches", files: files, total: meta.total, truncated: meta.truncated, maxLines: 18, labels: searchBlockLabels }) });
|
|
104
|
+
}
|
|
105
|
+
if (model.category === 'web' && typeof meta?.truncated === 'boolean') {
|
|
106
|
+
if (model.name === 'web_fetch' && typeof meta.url === 'string' && typeof meta.statusCode === 'number')
|
|
107
|
+
return _jsx("div", { "data-reader-tool-web": true, children: _jsx(WebBlock, { kind: "fetch", url: meta.url, statusCode: meta.statusCode, truncated: meta.truncated, labels: webBlockLabels }) });
|
|
108
|
+
if (model.name === 'web_search' && Array.isArray(meta.sources)) {
|
|
109
|
+
const sources = meta.sources.flatMap(source => {
|
|
110
|
+
const item = objectValue(source);
|
|
111
|
+
return typeof item?.url === 'string' ? [{ url: item.url, ...(typeof item.title === 'string' ? { title: item.title } : {}), ...(typeof item.snippet === 'string' ? { snippet: item.snippet } : {}), ...(typeof item.publishedAt === 'string' ? { publishedAt: item.publishedAt } : {}) }] : [];
|
|
112
|
+
});
|
|
113
|
+
if (sources.length === meta.sources.length)
|
|
114
|
+
return _jsx("div", { "data-reader-tool-web": true, children: _jsx(WebBlock, { kind: "search", sources: sources, answer: typeof meta.answer === 'string' ? meta.answer : undefined, truncated: meta.truncated, labels: webBlockLabels }) });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// A trace/export may omit wire presentation. Keep the generated input clearly
|
|
118
|
+
// labelled; it is not proof of an applied diff or a successful file mutation.
|
|
119
|
+
if (model.category === 'write' && model.content && !block.isError)
|
|
120
|
+
return _jsxs(_Fragment, { children: [_jsx("p", { className: css.toolDetailNote, children: "\u6587\u4EF6\u5DE5\u5177\u5DF2\u8FD4\u56DE\u3002\u4EE5\u4E0B\u4E3A\u63D0\u4EA4\u7684\u5185\u5BB9\uFF1B\u5B8C\u6574\u8FD4\u56DE\u8BB0\u5F55\u53EF\u5728\u300C\u539F\u59CB\u6570\u636E\u300D\u67E5\u770B\u3002" }), generatedInput(model.content, model.target, false)] });
|
|
121
|
+
const content = block.content;
|
|
122
|
+
if (content.some(item => item.type === 'text'))
|
|
123
|
+
return _jsx("div", { className: css.toolDocument, children: _jsx(Blocks, { ...render, blocks: contentBlocks(content).filter(item => item.kind === 'text'), source: "tool" }) });
|
|
124
|
+
if (content.length)
|
|
125
|
+
return _jsx("p", { className: css.toolDetailNote, children: "\u56FE\u7247\u6216\u6269\u5C55\u5185\u5BB9\u5DF2\u5728\u5BF9\u8BDD\u4E2D\u5355\u72EC\u5C55\u793A\u3002" });
|
|
126
|
+
return _jsx("p", { className: css.toolDetailNote, children: "\u5DE5\u5177\u6CA1\u6709\u8FD4\u56DE\u53EF\u5C55\u793A\u7684\u5185\u5BB9\u3002" });
|
|
127
|
+
}
|
|
128
|
+
/** One occurrence, keyed by call id all the way from generation to result. */
|
|
129
|
+
export const ToolActivity = memo(function ToolActivityView({ entry, motion, turnClosed, onRead, depth = 0, ...render }) {
|
|
130
|
+
const [open, setOpen] = useState(false);
|
|
131
|
+
const [tab, setTab] = useState('result');
|
|
132
|
+
const control = useRef(null);
|
|
133
|
+
const panel = useRef(null);
|
|
134
|
+
const [selected, setSelected] = useState(false);
|
|
135
|
+
const detailId = useId();
|
|
136
|
+
const tabRefs = useRef([]);
|
|
137
|
+
const model = useMemo(() => activitySummary(entry), [entry.block, entry.draft]);
|
|
138
|
+
const phase = activityPhase(entry, turnClosed);
|
|
139
|
+
const heldPreview = useRef({ entry, model, phase });
|
|
140
|
+
if (!selected)
|
|
141
|
+
heldPreview.current = { entry, model, phase };
|
|
142
|
+
const preview = heldPreview.current;
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
const track = () => {
|
|
145
|
+
const selection = document.getSelection();
|
|
146
|
+
setSelected(!!selection && !selection.isCollapsed && !!selection.anchorNode && !!panel.current?.contains(selection.anchorNode));
|
|
147
|
+
};
|
|
148
|
+
document.addEventListener('selectionchange', track);
|
|
149
|
+
return () => document.removeEventListener('selectionchange', track);
|
|
150
|
+
}, []);
|
|
151
|
+
const facts = executionFacts(entry.block);
|
|
152
|
+
const Icon = model.name === 'skill' ? IconSkillOutline16 : ICONS[model.category];
|
|
153
|
+
const block = entry.block;
|
|
154
|
+
const native = block ? toolRowModel(model.name, block) : null;
|
|
155
|
+
const skillName = typeof model.args?.name === 'string' ? model.args.name.split('\n')[0] : model.raw.split('\n')[0];
|
|
156
|
+
const rowTitle = model.name === 'skill' ? 'Skill' : native?.title ?? VARIANT_TITLES[classifyTool(model.name)];
|
|
157
|
+
const rowSummary = phase === 'interrupted' ? '已停止 · 调用记录保留' : model.name === 'skill' ? skillName : native?.errorSummary ?? native?.summary
|
|
158
|
+
?? (classifyTool(model.name) === 'others' ? `${model.name} · ${model.target ?? model.title}` : model.target ?? model.title);
|
|
159
|
+
const showState = phase === 'preparing' || phase === 'running' || phase === 'failed' || phase === 'interrupted';
|
|
160
|
+
const elapsed = block && 'kind' in block && block.callTime != null ? Math.max(0, block.time - block.callTime) : null;
|
|
161
|
+
const rawResult = useMemo(() => {
|
|
162
|
+
const value = preview.entry.block;
|
|
163
|
+
return value && 'kind' in value ? JSON.stringify({ content: value.content, isError: value.isError, meta: value.meta }, null, 2) : '';
|
|
164
|
+
}, [preview.entry.block]);
|
|
165
|
+
const tabs = [['result', phase === 'preparing' ? '生成预览' : '结果'], ['input', '输入'], ['raw', '原始数据']];
|
|
166
|
+
const activate = (index) => { const item = tabs[(index + tabs.length) % tabs.length]; setTab(item[0]); tabRefs.current[(index + tabs.length) % tabs.length]?.focus(); };
|
|
167
|
+
if (depth > 6)
|
|
168
|
+
return _jsx("p", { className: css.meta, children: "\u66F4\u6DF1\u7684\u5D4C\u5957\u8C03\u7528\u53EF\u5728\u539F\u5BF9\u8BDD\u67E5\u770B\u3002" });
|
|
169
|
+
return _jsxs("div", { ref: element => { control.current = element?.querySelector('[data-disclosure-row]') ?? null; }, className: css.toolActivity, "data-reader-tool-call": entry.callId, "data-tool-phase": phase, "data-tool-args-length": model.raw.length, "data-tool-category": model.category, "data-expanded": open, "data-ud-check": "reader-tool-activity", children: [_jsx(DisclosureRow, { icon: _jsx(Icon, { size: 14 }), title: rowTitle, open: open, expandable: true, expandOnRowClick: true, keepContentWhenOpen: true, onToggle: () => { onRead(); setOpen(value => !value); }, rowClassName: css.nativeToolRow, collapsedContent: _jsxs(_Fragment, { children: [_jsx("span", { className: css.rowSeparator, "aria-hidden": true }), _jsx("span", { className: css.nativeToolSummary, title: rowSummary, "data-reader-tool-summary": true, children: rowSummary }), showState && _jsx("span", { className: css.toolState, "data-phase": phase, children: LABEL[phase] })] }) }), _jsx(ProcessFragment, { open: open, motion: motion, onRead: onRead, returnFocusTo: control, nodeKey: `${entry.key}:detail`, framed: true, children: _jsxs("div", { id: detailId, className: css.toolDetails, children: [_jsxs("div", { className: css.toolLedger, "aria-live": "off", children: [_jsxs("span", { children: ["\u5DE5\u5177 \u00B7 ", _jsx("span", { className: css.toolEngine, children: model.name })] }), _jsx("span", { "data-reader-tool-progress": true, children: phase === 'preparing' ? `已接收 ${number.format(model.raw.length)} 字符输入` : phase === 'running' ? '已提交 · 等待工具返回' : phase === 'interrupted' ? '已停止 · 输入记录保留' : elapsed !== null ? `执行 ${duration(elapsed)}` : '结果已记录' }), facts.exitCode !== undefined && _jsxs("span", { children: ["\u9000\u51FA\u7801 ", facts.exitCode] }), facts.signal && _jsxs("span", { children: ["\u4FE1\u53F7 ", facts.signal] })] }), _jsx("div", { className: css.toolTabs, role: "tablist", "aria-label": `${model.title}的执行数据`, onKeyDown: event => {
|
|
170
|
+
const index = tabs.findIndex(item => item[0] === tab);
|
|
171
|
+
if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') {
|
|
172
|
+
event.preventDefault();
|
|
173
|
+
activate(index + (event.key === 'ArrowRight' ? 1 : -1));
|
|
174
|
+
}
|
|
175
|
+
else if (event.key === 'Home' || event.key === 'End') {
|
|
176
|
+
event.preventDefault();
|
|
177
|
+
activate(event.key === 'Home' ? 0 : tabs.length - 1);
|
|
178
|
+
}
|
|
179
|
+
}, children: tabs.map(([id, title], index) => _jsx("button", { ref: element => { tabRefs.current[index] = element; }, type: "button", role: "tab", id: `${detailId}-${id}`, "aria-selected": tab === id, "aria-controls": `${detailId}-panel`, tabIndex: tab === id ? 0 : -1, onClick: () => setTab(id), children: title }, id)) }), _jsxs("div", { ref: panel, id: `${detailId}-panel`, className: css.toolPanel, role: "tabpanel", "aria-labelledby": `${detailId}-${tab}`, tabIndex: 0, children: [selected && _jsx("p", { className: css.toolDetailNote, children: "\u4E3A\u4FDD\u7559\u9009\u533A\uFF0C\u9884\u89C8\u6682\u505C\u66F4\u65B0\uFF1B\u5F53\u524D\u72B6\u6001\u89C1\u5361\u7247\u6807\u9898\u3002" }), tab === 'result' && _jsx(ResultView, { ...render, ...preview }), tab === 'input' && _jsxs(_Fragment, { children: [_jsx(InputView, { model: preview.model, preparing: preview.phase === 'preparing', fillComposer: render.fillComposer }), _jsxs("details", { className: css.detail, children: [_jsx("summary", { children: "\u5168\u90E8\u8F93\u5165\u5B57\u6BB5" }), _jsx(JsonTree, { data: preview.model.args, label: "\u8F93\u5165\u5B57\u6BB5", labels: jsonTreeLabels })] })] }), tab === 'raw' && _jsxs(_Fragment, { children: [_jsx("p", { className: css.toolDetailNote, children: "\u5B8C\u6574\u8BB0\u5F55 \u00B7 \u53EA\u8BFB \u00B7 \u4E0D\u6267\u884C\u5176\u4E2D\u7684\u4EE3\u7801" }), _jsx("h4", { className: css.toolRawLabel, children: "\u5DE5\u5177\u8F93\u5165" }), _jsx("pre", { className: css.toolRaw, children: preview.model.raw || '输入尚未到达' }), rawResult && _jsxs(_Fragment, { children: [_jsx("h4", { className: css.toolRawLabel, children: "\u5DE5\u5177\u7ED3\u679C" }), _jsx("pre", { className: css.toolRaw, children: rawResult })] })] })] })] }) }), !!block?.subCalls.length && _jsx("div", { className: css.toolChildren, "aria-label": "\u5B50\u8C03\u7528", children: block.subCalls.map((child, index) => _jsx(ToolActivity, { ...render, entry: { kind: 'tool', key: `reader-tool:${child.callId}`, callId: child.callId, step: entry.step, order: index, block: child }, motion: motion, turnClosed: turnClosed, onRead: onRead, depth: depth + 1 }, child.callId)) })] });
|
|
180
|
+
}, (previous, next) => previous.entry.callId === next.entry.callId && previous.entry.block === next.entry.block
|
|
181
|
+
&& previous.entry.draft === next.entry.draft && previous.entry.step === next.entry.step
|
|
182
|
+
&& previous.motion === next.motion && previous.turnClosed === next.turnClosed && previous.depth === next.depth
|
|
183
|
+
&& previous.onRead === next.onRead && previous.renderSlotChain === next.renderSlotChain && previous.loadImage === next.loadImage && previous.fillComposer === next.fillComposer);
|
|
184
|
+
/** Rich media (images, MCP widgets) rendered outside the folded tool ledger. */
|
|
185
|
+
export function ToolMedia({ block, depth = 0, ...render }) {
|
|
186
|
+
if (depth > 6)
|
|
187
|
+
return null;
|
|
188
|
+
const settled = 'kind' in block;
|
|
189
|
+
const visible = settled ? contentBlocks(block.content).filter(item => item.kind === 'image' || item.kind === 'other') : [];
|
|
190
|
+
return _jsxs(_Fragment, { children: [visible.length > 0 && _jsx(Blocks, { ...render, blocks: visible, source: "tool" }), block.subCalls.map(child => _jsx(ToolMedia, { ...render, block: child, depth: depth + 1 }, child.callId))] });
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=ToolActivity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolActivity.js","sourceRoot":"","sources":["../../../src/client/ToolActivity.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TurnTailChatData } from '@deepseek-ai/dsh-client-ui-chat/client';
|
|
2
|
+
type TurnTokenUsage = NonNullable<TurnTailChatData['tokenUsage']>;
|
|
3
|
+
export interface TurnMetricsProps {
|
|
4
|
+
usage?: TurnTokenUsage;
|
|
5
|
+
runMs?: number;
|
|
6
|
+
tokensPerSecond?: number;
|
|
7
|
+
ttftMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const TurnMetrics: import("react").MemoExoticComponent<({ usage, runMs, tokensPerSecond, ttftMs, }: TurnMetricsProps) => import("react").JSX.Element | null>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=TurnMetrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TurnMetrics.d.ts","sourceRoot":"","sources":["../../../src/client/TurnMetrics.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAI/E,KAAK,cAAc,GAAG,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD,eAAO,MAAM,WAAW,mFAKrB,gBAAgB,wCAsIjB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { formatRanFor, formatRunDuration } from './message-chrome.js';
|
|
4
|
+
import css from './TurnMetrics.module.css';
|
|
5
|
+
function formatTokens(count) {
|
|
6
|
+
if (count >= 1_000_000)
|
|
7
|
+
return `${(count / 1_000_000).toFixed(2)}M tok`;
|
|
8
|
+
if (count >= 1000)
|
|
9
|
+
return `${(count / 1000).toFixed(1)}k tok`;
|
|
10
|
+
return `${count} tok`;
|
|
11
|
+
}
|
|
12
|
+
export const TurnMetrics = memo(function TurnMetrics({ usage, runMs, tokensPerSecond, ttftMs, }) {
|
|
13
|
+
const [open, setOpen] = useState(false);
|
|
14
|
+
const containerRef = useRef(null);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (!open)
|
|
17
|
+
return;
|
|
18
|
+
const onClickOutside = (e) => {
|
|
19
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
20
|
+
setOpen(false);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const onKeyDown = (e) => {
|
|
24
|
+
if (e.key === 'Escape')
|
|
25
|
+
setOpen(false);
|
|
26
|
+
};
|
|
27
|
+
document.addEventListener('pointerdown', onClickOutside);
|
|
28
|
+
document.addEventListener('keydown', onKeyDown);
|
|
29
|
+
return () => {
|
|
30
|
+
document.removeEventListener('pointerdown', onClickOutside);
|
|
31
|
+
document.removeEventListener('keydown', onKeyDown);
|
|
32
|
+
};
|
|
33
|
+
}, [open]);
|
|
34
|
+
const totalTokens = usage?.totalTokens;
|
|
35
|
+
const hasTiming = typeof runMs === 'number' && runMs > 0;
|
|
36
|
+
const hasTokens = typeof totalTokens === 'number' && totalTokens > 0;
|
|
37
|
+
if (!hasTiming && !hasTokens)
|
|
38
|
+
return null;
|
|
39
|
+
const cacheHitPercent = usage && usage.cacheReadTokens && usage.totalTokens > usage.outputTokens
|
|
40
|
+
? Math.round((usage.cacheReadTokens / (usage.totalTokens - usage.outputTokens)) * 100)
|
|
41
|
+
: null;
|
|
42
|
+
return (_jsxs("span", { ref: containerRef, className: css.container, children: [hasTokens && typeof totalTokens === 'number' && (_jsxs("button", { type: "button", className: css.pillButton, "data-active": open, onClick: () => setOpen(v => !v), "aria-expanded": open, title: "\u67E5\u770B\u672C\u8F6E Token \u6D88\u8017", children: [_jsxs("svg", { className: css.pillIcon, viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", children: [_jsx("ellipse", { cx: "8", cy: "4.2", rx: "5", ry: "2.2", strokeWidth: "1.2" }), _jsx("path", { d: "M3 4.2v7.6c0 1.2 2.2 2.2 5 2.2s5-1 5-2.2V4.2", strokeWidth: "1.2" }), _jsx("path", { d: "M3 8c0 1.2 2.2 2.2 5 2.2s5-1 5-2.2", strokeWidth: "1.2" })] }), _jsxs("span", { children: ["\u7528\u91CF ", formatTokens(totalTokens)] })] })), hasTiming && typeof runMs === 'number' && (_jsxs("button", { type: "button", className: css.timeButton, "data-active": open, onClick: () => setOpen(v => !v), "aria-expanded": open, "aria-label": formatRanFor(runMs), title: "\u67E5\u770B\u672C\u8F6E\u7528\u65F6\u548C\u901F\u5EA6", children: [_jsxs("svg", { className: css.pillIcon, viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.5", strokeWidth: "1.2" }), _jsx("path", { d: "M8 4.5v3.8l2.5 1.5", strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round" })] }), _jsx("span", { children: formatRanFor(runMs) })] })), open && (_jsxs("div", { className: css.metricsPop, role: "dialog", "aria-label": "\u672C\u8F6E\u6982\u51B5", children: [_jsx("div", { className: css.popHeader, children: _jsx("span", { children: "\u672C\u8F6E\u6027\u80FD\u4E0E\u7528\u91CF\u6982\u51B5" }) }), hasTiming && typeof runMs === 'number' && (_jsxs("div", { className: css.popSection, children: [_jsx("div", { className: css.popSectionTitle, children: "\u8017\u65F6\u4E0E\u751F\u6210\u901F\u5EA6" }), _jsxs("div", { className: css.popGrid, children: [_jsx("span", { className: css.popLabel, children: "\u603B\u7528\u65F6" }), _jsx("span", { className: css.popValue, children: formatRunDuration(runMs) }), typeof tokensPerSecond === 'number' && tokensPerSecond > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: css.popLabel, children: "\u751F\u6210\u541E\u5410 (TPS)" }), _jsxs("span", { className: css.popValue, children: [tokensPerSecond.toFixed(1), " tok/s"] })] })), typeof ttftMs === 'number' && ttftMs > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: css.popLabel, children: "\u9996\u5B57\u5EF6\u8FDF (TTFT)" }), _jsxs("span", { className: css.popValue, children: [(ttftMs / 1000).toFixed(2), "s"] })] }))] })] })), hasTokens && usage && (_jsxs("div", { className: css.popSection, children: [_jsx("div", { className: css.popSectionTitle, children: "Token \u6D88\u8017\u5206\u89E3" }), _jsxs("div", { className: css.popGrid, children: [_jsx("span", { className: css.popLabel, children: "\u603B\u6D88\u8017" }), _jsxs("span", { className: css.popValue, children: [usage.totalTokens.toLocaleString(), " tok"] }), _jsxs("span", { className: css.popLabel, children: ["\u8F93\u5165", cacheHitPercent !== null && (_jsxs("span", { className: css.popBadge, children: ["\u547D\u4E2D ", cacheHitPercent, "%"] }))] }), _jsxs("span", { className: css.popValue, children: [(usage.totalTokens - usage.outputTokens).toLocaleString(), " tok"] }), typeof usage.cacheReadTokens === 'number' && usage.cacheReadTokens > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: css.popLabel, children: "\u7F13\u5B58\u8BFB\u53D6" }), _jsxs("span", { className: css.popValue, children: [usage.cacheReadTokens.toLocaleString(), " tok"] })] })), _jsxs("span", { className: css.popLabel, children: ["\u8F93\u51FA", typeof usage.reasoningTokens === 'number' && usage.reasoningTokens > 0 && (_jsxs("span", { className: css.popBadge, children: ["\u601D\u8003 ", usage.reasoningTokens.toLocaleString()] }))] }), _jsxs("span", { className: css.popValue, children: [usage.outputTokens?.toLocaleString() ?? 0, " tok"] })] })] }))] }))] }));
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=TurnMetrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TurnMetrics.js","sourceRoot":"","sources":["../../../src/client/TurnMetrics.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WaitingStatus.d.ts","sourceRoot":"","sources":["../../../src/client/WaitingStatus.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,+BAGxF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { formatRunDuration } from './message-chrome.js';
|
|
4
|
+
import css from './Reader.module.css';
|
|
5
|
+
export function WaitingStatus({ anchor, label }) {
|
|
6
|
+
// A new input gets its own clock even if the waiting indicator stays mounted.
|
|
7
|
+
return _jsx(InputClock, { startTime: anchor.time, label: label }, anchor.key);
|
|
8
|
+
}
|
|
9
|
+
function InputClock({ startTime, label }) {
|
|
10
|
+
const [mountedAt] = useState(() => Date.now());
|
|
11
|
+
const [now, setNow] = useState(() => Date.now());
|
|
12
|
+
const anchor = startTime ?? mountedAt;
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
const id = setInterval(() => setNow(Date.now()), 1000);
|
|
15
|
+
return () => clearInterval(id);
|
|
16
|
+
}, []);
|
|
17
|
+
return _jsxs("div", { className: css.turnStatus, role: "status", "aria-live": "polite", "data-reader-turn-status": true, "data-reader-wait-start": anchor, children: [_jsx("span", { className: css.turnStatusLabel, children: label }), _jsx("span", { className: css.turnStatusClock, "aria-hidden": "true", children: formatRunDuration(Math.max(0, now - anchor)) })] });
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=WaitingStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WaitingStatus.js","sourceRoot":"","sources":["../../../src/client/WaitingStatus.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,GAAG,MAAM,qBAAqB,CAAC;AAEtC,MAAM,UAAU,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAA4C;IACvF,8EAA8E;IAC9E,OAAO,KAAC,UAAU,IAAkB,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,IAAhD,MAAM,CAAC,GAAG,CAA0C,CAAC;AAC/E,CAAC;AACD,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAA+C;IACnF,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,eAAK,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAC,QAAQ,eAAW,QAAQ,6DAAiD,MAAM,aAC5H,eAAM,SAAS,EAAE,GAAG,CAAC,eAAe,YAAG,KAAK,GAAQ,EACpD,eAAM,SAAS,EAAE,GAAG,CAAC,eAAe,iBAAc,MAAM,YAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,GAAQ,IAC1G,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation-column scroll helpers. Official ChatView lands Turns by writing
|
|
3
|
+
* the enclosing `[data-conversation-scroll]` box; `Element.scrollIntoView`
|
|
4
|
+
* also walks ancestor scrollers and can lift the sticky composer off the
|
|
5
|
+
* bottom of the viewport (rail jump to top, then to bottom).
|
|
6
|
+
*/
|
|
7
|
+
/** Reading-line offset used by ui-chat ChatView.landOnRow. */
|
|
8
|
+
export declare const READING_LINE_OFFSET_PX = 24;
|
|
9
|
+
/** Active column host when present; otherwise the view-local scroller. */
|
|
10
|
+
export declare function scrollerOf(from: HTMLElement): HTMLElement;
|
|
11
|
+
/** Row position in scrollport coordinates (viewport-independent). */
|
|
12
|
+
export declare function flowTop(row: HTMLElement, scrollport: HTMLElement): number;
|
|
13
|
+
/**
|
|
14
|
+
* Place `row` on the conversation scroller only. Never calls scrollIntoView.
|
|
15
|
+
* @param row - a rendered `[data-reader-turn]` row.
|
|
16
|
+
* @param scrollport - `scrollerOf` of the reader root.
|
|
17
|
+
*/
|
|
18
|
+
export declare function landTurn(row: HTMLElement, scrollport: HTMLElement, offsetPx?: number): void;
|
|
19
|
+
//# sourceMappingURL=conversation-scroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-scroll.d.ts","sourceRoot":"","sources":["../../../src/client/conversation-scroll.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAEzD;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,SAAyB,GAAG,IAAI,CAE3G"}
|