@yadsh/dsh-qa-surface 0.1.0 → 0.2.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.
- package/CHANGELOG.md +83 -0
- package/README.md +162 -14
- package/SPEC-dsh-qa-surface.md +600 -96
- package/capability-policy.json +5 -0
- package/compatibility.json +7 -1
- package/cordis.patch.yml +11 -0
- package/docs/ARCHITECTURE.md +49 -7
- package/docs/COMPATIBILITY.md +5 -4
- package/docs/CONFIGURATION.md +96 -2
- package/lib/attestation.js +10 -0
- package/lib/attestation.js.map +1 -0
- package/lib/client/QaConfigController.js +111 -4
- package/lib/client/QaConfigController.js.map +1 -1
- package/lib/client/QaSessionController.js +501 -119
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +137 -20
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +534 -45
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/attestation.js +60 -0
- package/lib/client/attestation.js.map +1 -0
- package/lib/client/chat-index.js +86 -0
- package/lib/client/chat-index.js.map +1 -0
- package/lib/client/components/Markdown.js +75 -5
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaAgentsDrawer.js +40 -0
- package/lib/client/components/QaAgentsDrawer.js.map +1 -0
- package/lib/client/components/QaComposer.js +132 -15
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaMessage.js +184 -10
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaSidebar.js +124 -0
- package/lib/client/components/QaSidebar.js.map +1 -0
- package/lib/client/components/QaSourcesDrawer.js +46 -0
- package/lib/client/components/QaSourcesDrawer.js.map +1 -0
- package/lib/client/components/QaWorkGroup.js +135 -0
- package/lib/client/components/QaWorkGroup.js.map +1 -0
- package/lib/client/components/VariantSwitcher.js +29 -0
- package/lib/client/components/VariantSwitcher.js.map +1 -0
- package/lib/client/components/format.js +48 -0
- package/lib/client/components/format.js.map +1 -0
- package/lib/client/index.js +77 -34
- package/lib/client/index.js.map +1 -1
- package/lib/client/styles.js +308 -43
- package/lib/client/styles.js.map +1 -1
- package/lib/client/types.js +13 -0
- package/lib/client/types.js.map +1 -0
- package/lib/client/wait-for.js +49 -0
- package/lib/client/wait-for.js.map +1 -0
- package/lib/client.js +8228 -383
- package/lib/client.js.map +1 -1
- package/lib/config.js +61 -9
- package/lib/config.js.map +1 -1
- package/lib/index.js +166 -70
- package/lib/index.js.map +1 -1
- package/lib/lockdown-policy.js +20 -0
- package/lib/lockdown-policy.js.map +1 -0
- package/lib/resolve-config.js +122 -10
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +170 -0
- package/lib/secure-session.js.map +1 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +191 -0
- package/lib/typert.remote-client.d.ts +24 -0
- package/lib/typert.remote-client.js +129 -0
- package/lib/types/attestation.d.ts +17 -0
- package/lib/types/client/QaConfigController.d.ts +34 -2
- package/lib/types/client/QaSessionController.d.ts +106 -19
- package/lib/types/client/QaSurface.d.ts +5 -4
- package/lib/types/client/QaTranscriptAdapter.d.ts +17 -2
- package/lib/types/client/attestation.d.ts +25 -0
- package/lib/types/client/chat-index.d.ts +28 -0
- package/lib/types/client/components/Markdown.d.ts +7 -3
- package/lib/types/client/components/QaAgentsDrawer.d.ts +25 -0
- package/lib/types/client/components/QaComposer.d.ts +12 -2
- package/lib/types/client/components/QaMessage.d.ts +14 -1
- package/lib/types/client/components/QaSidebar.d.ts +41 -0
- package/lib/types/client/components/QaSourcesDrawer.d.ts +8 -0
- package/lib/types/client/components/QaWorkGroup.d.ts +19 -0
- package/lib/types/client/components/VariantSwitcher.d.ts +19 -0
- package/lib/types/client/components/format.d.ts +9 -0
- package/lib/types/client/index.d.ts +1 -5
- package/lib/types/client/types.d.ts +29 -0
- package/lib/types/client/wait-for.d.ts +11 -0
- package/lib/types/index.d.ts +22 -6
- package/lib/types/lockdown-policy.d.ts +18 -0
- package/lib/types/secure-session.d.ts +22 -0
- package/lib/types/types.d.ts +148 -1
- package/package.json +76 -52
|
@@ -1,14 +1,188 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { sameWorkItems } from "./QaWorkGroup.js";
|
|
4
|
+
/** Resolved image URLs live for the page lifetime; failures retry on demand. */
|
|
5
|
+
const imageUrlCache = new Map();
|
|
6
|
+
function cachedImageUrl(attachmentId, resolve) {
|
|
7
|
+
let pending = imageUrlCache.get(attachmentId);
|
|
8
|
+
if (pending === undefined) {
|
|
9
|
+
pending = resolve(attachmentId);
|
|
10
|
+
imageUrlCache.set(attachmentId, pending);
|
|
11
|
+
pending.catch(() => imageUrlCache.delete(attachmentId));
|
|
12
|
+
}
|
|
13
|
+
return pending;
|
|
14
|
+
}
|
|
15
|
+
function QaAttachedImage({ image, resolve, }) {
|
|
16
|
+
const [url, setUrl] = useState(null);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
let alive = true;
|
|
19
|
+
cachedImageUrl(image.attachmentId, resolve).then((resolved) => {
|
|
20
|
+
if (alive)
|
|
21
|
+
setUrl(resolved);
|
|
22
|
+
}, () => {
|
|
23
|
+
if (alive)
|
|
24
|
+
setUrl("");
|
|
25
|
+
});
|
|
26
|
+
return () => {
|
|
27
|
+
alive = false;
|
|
28
|
+
};
|
|
29
|
+
}, [image.attachmentId, resolve]);
|
|
30
|
+
if (url === null) {
|
|
31
|
+
return _jsx("span", { className: "dsh-qa-message__image", "data-state": "loading" });
|
|
32
|
+
}
|
|
33
|
+
if (url === "") {
|
|
34
|
+
return _jsx("span", { className: "dsh-qa-message__image", "data-state": "broken" });
|
|
35
|
+
}
|
|
36
|
+
return (_jsx("a", { href: url, target: "_blank", rel: "noreferrer", children: _jsx("img", { className: "dsh-qa-message__image", src: url, alt: "\u041F\u0440\u0438\u043A\u0440\u0435\u043F\u043B\u0451\u043D\u043D\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435" }) }));
|
|
37
|
+
}
|
|
38
|
+
import { formatDayTime, formatSeconds } from "./format.js";
|
|
2
39
|
import { Markdown } from "./Markdown.js";
|
|
3
|
-
|
|
40
|
+
import { QaWorkGroup } from "./QaWorkGroup.js";
|
|
41
|
+
/**
|
|
42
|
+
* Whether two transcript messages render identically. The transcript
|
|
43
|
+
* projection rebuilds every message object on each published frame, so the
|
|
44
|
+
* memoized row compares rendered content instead of references; string
|
|
45
|
+
* comparison is by value, which keeps fresh copies cheap to recognize.
|
|
46
|
+
*/
|
|
47
|
+
export function sameMessage(a, b) {
|
|
48
|
+
if (a === b)
|
|
49
|
+
return true;
|
|
50
|
+
if (a.id !== b.id || a.role !== b.role || a.status !== b.status)
|
|
51
|
+
return false;
|
|
52
|
+
if (a.role === "work" && b.role === "work") {
|
|
53
|
+
return (a.turn === b.turn &&
|
|
54
|
+
a.startedAt === b.startedAt &&
|
|
55
|
+
a.endedAt === b.endedAt &&
|
|
56
|
+
sameWorkItems(a.items, b.items));
|
|
57
|
+
}
|
|
58
|
+
if (a.role === "work" || b.role === "work")
|
|
59
|
+
return false;
|
|
60
|
+
// Roles are equal, so both messages are one of the text-bearing variants.
|
|
61
|
+
if (a.text !== b.text || a.timestamp !== b.timestamp)
|
|
62
|
+
return false;
|
|
63
|
+
if (a.role === "assistant" && b.role === "assistant") {
|
|
64
|
+
return ((a.stats === undefined) === (b.stats === undefined) &&
|
|
65
|
+
(a.stats === undefined ||
|
|
66
|
+
b.stats === undefined ||
|
|
67
|
+
(a.stats.durationMs === b.stats.durationMs &&
|
|
68
|
+
a.stats.ttftMs === b.stats.ttftMs &&
|
|
69
|
+
a.stats.tokensPerSecond === b.stats.tokensPerSecond)));
|
|
70
|
+
}
|
|
71
|
+
if (a.role === "user" && b.role === "user") {
|
|
72
|
+
return sameImages(a.images, b.images);
|
|
73
|
+
}
|
|
74
|
+
if (a.role === "system" && b.role === "system") {
|
|
75
|
+
return ((a.notice === undefined) === (b.notice === undefined) &&
|
|
76
|
+
(a.notice === undefined ||
|
|
77
|
+
b.notice === undefined ||
|
|
78
|
+
(a.notice.title === b.notice.title && a.notice.body === b.notice.body)));
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
function sameImages(a, b) {
|
|
83
|
+
if (a === b)
|
|
84
|
+
return true;
|
|
85
|
+
if (a === undefined || b === undefined || a.length !== b.length)
|
|
86
|
+
return false;
|
|
87
|
+
return a.every((image, index) => image.attachmentId === b[index].attachmentId &&
|
|
88
|
+
image.mediaType === b[index].mediaType);
|
|
89
|
+
}
|
|
90
|
+
function readRatings(stateKey) {
|
|
91
|
+
if (stateKey === undefined)
|
|
92
|
+
return {};
|
|
93
|
+
try {
|
|
94
|
+
const raw = window.localStorage.getItem(`${stateKey}:ratings`);
|
|
95
|
+
if (raw === null)
|
|
96
|
+
return {};
|
|
97
|
+
const parsed = JSON.parse(raw);
|
|
98
|
+
return typeof parsed === "object" && parsed !== null
|
|
99
|
+
? parsed
|
|
100
|
+
: {};
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function writeRating(stateKey, id, rating) {
|
|
107
|
+
if (stateKey === undefined)
|
|
108
|
+
return;
|
|
109
|
+
try {
|
|
110
|
+
const ratings = readRatings(stateKey);
|
|
111
|
+
if (rating === null)
|
|
112
|
+
delete ratings[id];
|
|
113
|
+
else
|
|
114
|
+
ratings[id] = rating;
|
|
115
|
+
window.localStorage.setItem(`${stateKey}:ratings`, JSON.stringify(ratings));
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// A denied localStorage write must not break the conversation.
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function assistantMeta(message) {
|
|
122
|
+
const parts = [];
|
|
123
|
+
if (message.stats !== undefined) {
|
|
124
|
+
parts.push(formatSeconds(message.stats.durationMs));
|
|
125
|
+
if (message.stats.ttftMs !== null) {
|
|
126
|
+
parts.push(`TTFT ${formatSeconds(message.stats.ttftMs)}`);
|
|
127
|
+
}
|
|
128
|
+
if (message.stats.tokensPerSecond !== null) {
|
|
129
|
+
parts.push(`${message.stats.tokensPerSecond} ток/с`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return parts;
|
|
133
|
+
}
|
|
134
|
+
export const QaMessage = memo(function QaMessage({ message, renderMarkdown, showTimestamp, stateKey, onRegenerate, resolveImage, }) {
|
|
135
|
+
const [copied, setCopied] = useState(false);
|
|
136
|
+
const copiedTimer = useRef(undefined);
|
|
137
|
+
const [rating, setRating] = useState(null);
|
|
138
|
+
useEffect(() => {
|
|
139
|
+
setRating(readRatings(stateKey)[message.id] ?? null);
|
|
140
|
+
}, [stateKey, message.id]);
|
|
141
|
+
useEffect(() => () => {
|
|
142
|
+
if (copiedTimer.current !== undefined)
|
|
143
|
+
clearTimeout(copiedTimer.current);
|
|
144
|
+
}, []);
|
|
145
|
+
if (message.role === "system" && message.notice !== undefined) {
|
|
146
|
+
return (_jsxs("details", { className: "dsh-qa-notice", children: [_jsxs("summary", { className: "dsh-qa-notice__summary", children: [_jsxs("svg", { className: "dsh-qa-notice__icon", viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("rect", { x: "3", y: "5", width: "10", height: "7.5", rx: "1.75" }), _jsx("path", { d: "M8 2.5V5m0-.25a.9.9 0 1 0-.01-1.8.9.9 0 0 0 .01 1.8ZM5.4 8.4h1.7M8.9 8.4h1.7M6 10.4h4" })] }), _jsx("span", { className: "dsh-qa-notice__title", children: message.notice.title }), _jsx("svg", { className: "dsh-qa-notice__chevron", viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m5.25 3.5 3.5 3.5-3.5 3.5" }) })] }), _jsx("div", { className: "dsh-qa-notice__body", children: message.notice.body === "" ? (_jsx("p", { children: "\u0411\u0435\u0437 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0433\u043E \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F." })) : renderMarkdown ? (_jsx(Markdown, { text: message.notice.body })) : (message.notice.body) })] }));
|
|
147
|
+
}
|
|
148
|
+
if (message.role === "work") {
|
|
149
|
+
return (_jsx("article", { className: "dsh-qa-message dsh-qa-message--work", "data-status": message.status, "aria-label": "\u0420\u0430\u0431\u043E\u0442\u0430 \u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A\u0430", children: _jsx(QaWorkGroup, { status: message.status, startedAt: message.startedAt, endedAt: message.endedAt, items: message.items, renderMarkdown: renderMarkdown }) }));
|
|
150
|
+
}
|
|
4
151
|
const label = message.role === "assistant"
|
|
5
|
-
? "
|
|
152
|
+
? "Помощник"
|
|
6
153
|
: message.role === "user"
|
|
7
|
-
? "
|
|
8
|
-
: "
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
154
|
+
? "Вы"
|
|
155
|
+
: "Статус";
|
|
156
|
+
const copy = async () => {
|
|
157
|
+
if (copied || navigator.clipboard?.writeText === undefined)
|
|
158
|
+
return;
|
|
159
|
+
try {
|
|
160
|
+
await navigator.clipboard.writeText(message.text);
|
|
161
|
+
setCopied(true);
|
|
162
|
+
if (copiedTimer.current !== undefined)
|
|
163
|
+
clearTimeout(copiedTimer.current);
|
|
164
|
+
copiedTimer.current = setTimeout(() => setCopied(false), 1200);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Clipboard access may be denied by the embedding browser; keep the
|
|
168
|
+
// action available for a later user gesture without surfacing noise.
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
const toggleRating = (value) => {
|
|
172
|
+
const next = rating === value ? null : value;
|
|
173
|
+
setRating(next);
|
|
174
|
+
writeRating(stateKey, message.id, next);
|
|
175
|
+
};
|
|
176
|
+
const persistentMeta = showTimestamp && message.timestamp !== undefined;
|
|
177
|
+
const meta = message.role === "system" || message.timestamp === undefined ? null : (_jsxs("span", { className: "dsh-qa-message__meta", children: [_jsx("time", { dateTime: new Date(message.timestamp).toISOString(), children: formatDayTime(message.timestamp) }), message.role === "assistant"
|
|
178
|
+
? assistantMeta(message).map((part) => (_jsx("span", { className: "dsh-qa-message__meta-part", children: part }, part)))
|
|
179
|
+
: null] }));
|
|
180
|
+
const showActions = message.role !== "system" && message.status !== "streaming";
|
|
181
|
+
return (_jsxs("article", { className: `dsh-qa-message dsh-qa-message--${message.role}`, "data-status": message.status, "aria-label": `Сообщение: ${label}`, children: [_jsxs("div", { className: "dsh-qa-message__content", children: [message.role === "user" && message.images !== undefined ? (_jsx("div", { className: "dsh-qa-message__images", children: message.images.map((image) => resolveImage === undefined ? null : (_jsx(QaAttachedImage, { image: image, resolve: resolveImage }, image.attachmentId))) })) : null, message.role === "assistant" && renderMarkdown ? (_jsx(Markdown, { text: message.text })) : (message.text), message.status === "streaming" ? (_jsx("span", { className: "dsh-qa-message__cursor", "aria-hidden": "true" })) : null] }), showActions ? (_jsxs("div", { className: "dsh-qa-message__actions", "data-persistent": persistentMeta || undefined, children: [message.role === "user" ? meta : null, _jsx("button", { type: "button", "aria-label": copied ? "Скопировано" : "Скопировать сообщение", title: copied ? "Скопировано" : "Копировать", onClick: () => void copy(), children: copied ? (_jsx("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", children: _jsx("path", { d: "m4.5 9.25 2.75 2.75 6.25-6.25" }) })) : (_jsxs("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", children: [_jsx("rect", { x: "6.25", y: "3.25", width: "8.5", height: "8.5", rx: "2" }), _jsx("path", { d: "M11.75 11.75v.5a2.5 2.5 0 0 1-2.5 2.5h-3.5a2.5 2.5 0 0 1-2.5-2.5v-3.5a2.5 2.5 0 0 1 2.5-2.5h.5" })] })) }), message.role === "user" ? null : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", "aria-label": "\u041D\u0440\u0430\u0432\u0438\u0442\u0441\u044F", title: "\u041D\u0440\u0430\u0432\u0438\u0442\u0441\u044F", "aria-pressed": rating === "up", "data-active": rating === "up" || undefined, onClick: () => toggleRating("up"), children: _jsx("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", children: _jsx("path", { d: "M5.25 8.25 8.1 2.9a1.3 1.3 0 0 1 2.4.75v3.1h3.1c.9 0 1.55.85 1.33 1.72l-1.05 4.2a1.75 1.75 0 0 1-1.7 1.33H5.25m0-5.75v5.75m0-5.75h-2v5.75h2" }) }) }), _jsx("button", { type: "button", "aria-label": "\u041D\u0435 \u043D\u0440\u0430\u0432\u0438\u0442\u0441\u044F", title: "\u041D\u0435 \u043D\u0440\u0430\u0432\u0438\u0442\u0441\u044F", "aria-pressed": rating === "down", "data-active": rating === "down" || undefined, onClick: () => toggleRating("down"), children: _jsx("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", children: _jsx("path", { d: "M12.75 9.75 9.9 15.1a1.3 1.3 0 0 1-2.4-.75v-3.1H4.4a1.38 1.38 0 0 1-1.33-1.72l1.05-4.2A1.75 1.75 0 0 1 5.82 4h6.93m0 5.75V4m0 5.75h2V4h-2" }) }) }), onRegenerate === undefined ? null : (_jsx("button", { type: "button", "aria-label": "\u041F\u0435\u0440\u0435\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C", title: "\u041F\u0435\u0440\u0435\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C", onClick: onRegenerate, children: _jsx("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", children: _jsx("path", { d: "M14.6 9A5.6 5.6 0 1 1 12.9 5l1.7 1.7m0-3.4v3.4h-3.4" }) }) }))] })), message.role === "user" ? null : meta] })) : null] }));
|
|
182
|
+
}, (prev, next) => prev.renderMarkdown === next.renderMarkdown &&
|
|
183
|
+
prev.showTimestamp === next.showTimestamp &&
|
|
184
|
+
prev.stateKey === next.stateKey &&
|
|
185
|
+
prev.onRegenerate === next.onRegenerate &&
|
|
186
|
+
prev.resolveImage === next.resolveImage &&
|
|
187
|
+
sameMessage(prev.message, next.message));
|
|
14
188
|
//# sourceMappingURL=QaMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QaMessage.js","sourceRoot":"","sources":["../../../src/client/components/QaMessage.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,cAAc,EACd,aAAa,GACE;IACf,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,KAAK,WAAW;QAC1B,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;YACvB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,QAAQ,CAAC;IACjB,OAAO,CACL,mBACE,SAAS,EAAE,kCAAkC,OAAO,CAAC,IAAI,EAAE,iBAC9C,OAAO,CAAC,MAAM,aAE3B,eAAK,SAAS,EAAC,sBAAsB,aACnC,yBAAO,KAAK,GAAQ,EACnB,aAAa,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAClD,eAAM,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,YACtD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE;4BAClD,IAAI,EAAE,SAAS;4BACf,MAAM,EAAE,SAAS;yBAClB,CAAC,GACG,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,eAAK,SAAS,EAAC,yBAAyB,aACrC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,cAAc,CAAC,CAAC,CAAC,CAChD,KAAC,QAAQ,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAI,CACjC,CAAC,CAAC,CAAC,CACF,OAAO,CAAC,IAAI,CACb,EACA,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAChC,eAAM,SAAS,EAAC,wBAAwB,iBAAa,MAAM,GAAG,CAC/D,CAAC,CAAC,CAAC,IAAI,IACJ,IACE,CACX,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"QaMessage.js","sourceRoot":"","sources":["../../../src/client/components/QaMessage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useState } from "react";
|
|
3
|
+
import { relativeTime } from "./format.js";
|
|
4
|
+
/**
|
|
5
|
+
* Project this browser's indexed chat ids onto the host session list, most
|
|
6
|
+
* recently updated first. Opening a chat is not an update: only the host's
|
|
7
|
+
* `updatedAt` (fresh messages) orders the list. Ids the host no longer lists
|
|
8
|
+
* are skipped (the controller prunes them on switch).
|
|
9
|
+
*/
|
|
10
|
+
export function buildChatRows(chatIds, byId, activeId, now = Date.now()) {
|
|
11
|
+
const rows = [];
|
|
12
|
+
for (const id of chatIds) {
|
|
13
|
+
const summary = byId[id];
|
|
14
|
+
if (summary === undefined)
|
|
15
|
+
continue;
|
|
16
|
+
rows.push({
|
|
17
|
+
id,
|
|
18
|
+
title: summary.blank ? "Новый чат" : summary.displayTitle,
|
|
19
|
+
running: summary.running,
|
|
20
|
+
active: id === activeId,
|
|
21
|
+
meta: relativeTime(summary.updatedAt, now),
|
|
22
|
+
updatedAt: summary.updatedAt,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return rows.sort((left, right) => right.updatedAt - left.updatedAt);
|
|
26
|
+
}
|
|
27
|
+
function readCollapsed(key) {
|
|
28
|
+
try {
|
|
29
|
+
return window.localStorage.getItem(`${key}:sidebar-collapsed`) === "1";
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function writeCollapsed(key, collapsed) {
|
|
36
|
+
try {
|
|
37
|
+
window.localStorage.setItem(`${key}:sidebar-collapsed`, collapsed ? "1" : "0");
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// A denied localStorage write only costs persistence across reloads.
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function DefaultMark() {
|
|
44
|
+
return (_jsxs("svg", { viewBox: "0 0 20 20", "aria-hidden": "true", children: [_jsx("path", { d: "M10 2.75a6.4 6.4 0 0 0-4.9 10.52c.2.24.28.5.24.79l-.2 1.44 1.9-.7c.24-.09.5-.06.74.05A6.4 6.4 0 1 0 10 2.75Z" }), _jsx("path", { d: "M7.4 8.1h5.2M7.4 11h3.2" })] }));
|
|
45
|
+
}
|
|
46
|
+
function PlusIcon() {
|
|
47
|
+
return (_jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "M7 2.8v8.4M2.8 7h8.4" }) }));
|
|
48
|
+
}
|
|
49
|
+
function SearchIcon() {
|
|
50
|
+
return (_jsxs("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: [_jsx("circle", { cx: "6.25", cy: "6.25", r: "3.75" }), _jsx("path", { d: "m9.2 9.2 2.55 2.55" })] }));
|
|
51
|
+
}
|
|
52
|
+
function ChevronIcon() {
|
|
53
|
+
return (_jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m8.75 3.5-3.5 3.5 3.5 3.5" }) }));
|
|
54
|
+
}
|
|
55
|
+
function rowMatches(row, query) {
|
|
56
|
+
return row.title.toLowerCase().includes(query);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Whether two sidebar row lists show the same thing. Rows are rebuilt on
|
|
60
|
+
* every surface render (relative timestamps drift), so the memoized sidebar
|
|
61
|
+
* compares by content and skips frames that only move the transcript.
|
|
62
|
+
*/
|
|
63
|
+
export function sameChatRows(a, b) {
|
|
64
|
+
if (a === b)
|
|
65
|
+
return true;
|
|
66
|
+
if (a.length !== b.length)
|
|
67
|
+
return false;
|
|
68
|
+
return a.every((row, index) => {
|
|
69
|
+
const other = b[index];
|
|
70
|
+
return (row.id === other.id &&
|
|
71
|
+
row.title === other.title &&
|
|
72
|
+
row.running === other.running &&
|
|
73
|
+
row.active === other.active &&
|
|
74
|
+
row.meta === other.meta &&
|
|
75
|
+
row.updatedAt === other.updatedAt);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** The per-browser chat history shown beside the QA conversation. */
|
|
79
|
+
export const QaSidebar = memo(function QaSidebar(props) {
|
|
80
|
+
const [collapsed, setCollapsed] = useState(() => readCollapsed(props.stateKey));
|
|
81
|
+
const [query, setQuery] = useState("");
|
|
82
|
+
const [confirmingId, setConfirmingId] = useState(null);
|
|
83
|
+
const toggleCollapsed = () => {
|
|
84
|
+
const next = !collapsed;
|
|
85
|
+
setCollapsed(next);
|
|
86
|
+
writeCollapsed(props.stateKey, next);
|
|
87
|
+
};
|
|
88
|
+
if (collapsed) {
|
|
89
|
+
return (_jsx("nav", { className: "dsh-qa-sidebar dsh-qa-sidebar--collapsed", "aria-label": "\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0447\u0430\u0442\u043E\u0432", children: _jsx("button", { type: "button", className: "dsh-qa-sidebar__expand", "aria-label": "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u0447\u0430\u0442\u043E\u0432", title: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u0447\u0430\u0442\u043E\u0432", onClick: toggleCollapsed, children: _jsx(ChevronIcon, {}) }) }));
|
|
90
|
+
}
|
|
91
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
92
|
+
const visibleRows = normalizedQuery === ""
|
|
93
|
+
? props.rows
|
|
94
|
+
: props.rows.filter((row) => rowMatches(row, normalizedQuery));
|
|
95
|
+
const confirmingVisible = confirmingId !== null &&
|
|
96
|
+
props.rows.some((row) => row.id === confirmingId);
|
|
97
|
+
const brand = props.logoUrl === null ? (_jsx(DefaultMark, {})) : (_jsx("img", { src: props.logoUrl, alt: "" }));
|
|
98
|
+
return (_jsxs("nav", { className: "dsh-qa-sidebar", "aria-label": "\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0447\u0430\u0442\u043E\u0432", children: [_jsxs("div", { className: "dsh-qa-sidebar__head", children: [_jsxs("span", { className: "dsh-qa-sidebar__brand", title: props.title, children: [_jsx("span", { className: "dsh-qa-sidebar__logo", children: brand }), _jsx("span", { className: "dsh-qa-sidebar__name", children: props.title })] }), _jsx("button", { type: "button", className: "dsh-qa-sidebar__collapse", "aria-label": "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u0447\u0430\u0442\u043E\u0432", title: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u0447\u0430\u0442\u043E\u0432", onClick: toggleCollapsed, children: _jsx(ChevronIcon, {}) })] }), props.showNewChat ? (_jsx("div", { className: "dsh-qa-sidebar__newbar", children: _jsxs("button", { type: "button", className: "dsh-qa-sidebar__new", disabled: props.busy, onClick: props.onNewChat, children: [_jsx(PlusIcon, {}), "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442"] }) })) : null, _jsxs("div", { className: "dsh-qa-sidebar__search", children: [_jsx(SearchIcon, {}), _jsx("input", { type: "search", value: query, placeholder: "\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0447\u0430\u0442\u0430\u043C", "aria-label": "\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0447\u0430\u0442\u0430\u043C", onChange: (event) => setQuery(event.currentTarget.value) })] }), _jsx("div", { className: "dsh-qa-sidebar__list", children: props.rows.length === 0 ? (_jsx("p", { className: "dsh-qa-sidebar__empty", children: "\u0417\u0434\u0435\u0441\u044C \u043F\u043E\u043A\u0430 \u043F\u0443\u0441\u0442\u043E" })) : visibleRows.length === 0 ? (_jsx("p", { className: "dsh-qa-sidebar__empty", children: "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E" })) : (visibleRows.map((row) => {
|
|
99
|
+
const confirming = confirmingVisible && confirmingId === row.id;
|
|
100
|
+
return (_jsxs("div", { className: row.active
|
|
101
|
+
? "dsh-qa-sidebar__item dsh-qa-sidebar__item--active"
|
|
102
|
+
: "dsh-qa-sidebar__item", children: [_jsxs("button", { type: "button", className: "dsh-qa-sidebar__item-main", "aria-current": row.active ? "true" : undefined, onClick: () => props.onSwitch(row.id), children: [_jsx("span", { className: "dsh-qa-sidebar__item-title", children: row.title }), _jsxs("span", { className: "dsh-qa-sidebar__item-meta", children: [row.running ? (_jsx("span", { className: "dsh-qa-sidebar__dot", role: "img", "aria-label": "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F" })) : null, row.meta] })] }), props.onDelete === undefined ? null : (_jsx("button", { type: "button", className: confirming
|
|
103
|
+
? "dsh-qa-sidebar__item-delete dsh-qa-sidebar__item-delete--confirm"
|
|
104
|
+
: "dsh-qa-sidebar__item-delete", "aria-label": confirming ? "Подтвердить удаление чата" : "Удалить чат", title: confirming
|
|
105
|
+
? "Нажмите ещё раз для удаления"
|
|
106
|
+
: "Удалить чат", onClick: () => {
|
|
107
|
+
if (confirming) {
|
|
108
|
+
setConfirmingId(null);
|
|
109
|
+
props.onDelete?.(row.id);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
setConfirmingId(row.id);
|
|
113
|
+
}, children: confirming ? (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "m3.5 8.5 3 3L12.5 5" }) })) : (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "M2.5 4h11M6.5 4V2.5h3V4m-6.2 0 .6 9.5h7.2L12 4" }) })) }))] }, row.id));
|
|
114
|
+
})) })] }));
|
|
115
|
+
}, (prev, next) => prev.title === next.title &&
|
|
116
|
+
prev.logoUrl === next.logoUrl &&
|
|
117
|
+
prev.stateKey === next.stateKey &&
|
|
118
|
+
prev.showNewChat === next.showNewChat &&
|
|
119
|
+
prev.busy === next.busy &&
|
|
120
|
+
prev.onSwitch === next.onSwitch &&
|
|
121
|
+
prev.onNewChat === next.onNewChat &&
|
|
122
|
+
prev.onDelete === next.onDelete &&
|
|
123
|
+
sameChatRows(prev.rows, next.rows));
|
|
124
|
+
//# sourceMappingURL=QaSidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QaSidebar.js","sourceRoot":"","sources":["../../../src/client/components/QaSidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
/** Split text into plain runs and safe http(s) links. */
|
|
4
|
+
function linkify(text) {
|
|
5
|
+
const nodes = [];
|
|
6
|
+
const pattern = /https?:\/\/[^\s<>"')]+/gu;
|
|
7
|
+
let offset = 0;
|
|
8
|
+
for (const match of text.matchAll(pattern)) {
|
|
9
|
+
const index = match.index;
|
|
10
|
+
if (index > offset)
|
|
11
|
+
nodes.push(text.slice(offset, index));
|
|
12
|
+
const href = match[0];
|
|
13
|
+
nodes.push(_jsx("a", { href: href, target: "_blank", rel: "noreferrer", children: href }, href + String(index)));
|
|
14
|
+
offset = index + href.length;
|
|
15
|
+
}
|
|
16
|
+
if (offset < text.length)
|
|
17
|
+
nodes.push(text.slice(offset));
|
|
18
|
+
return nodes;
|
|
19
|
+
}
|
|
20
|
+
function SourceIcon({ kind }) {
|
|
21
|
+
if (kind === "web") {
|
|
22
|
+
return (_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "8", r: "5.75" }), _jsx("path", { d: "M2.25 8h11.5M8 2.25c1.6 1.55 2.4 3.5 2.4 5.75S9.6 12.2 8 13.75C6.4 12.2 5.6 10.25 5.6 8S6.4 3.8 8 2.25Z" })] }));
|
|
23
|
+
}
|
|
24
|
+
if (kind === "search") {
|
|
25
|
+
return (_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("circle", { cx: "7.1", cy: "7.1", r: "4.3" }), _jsx("path", { d: "m10.3 10.3 2.9 2.9" })] }));
|
|
26
|
+
}
|
|
27
|
+
return (_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("path", { d: "M9.25 2.5H4.75A1.25 1.25 0 0 0 3.5 3.75v8.5a1.25 1.25 0 0 0 1.25 1.25h6.5a1.25 1.25 0 0 0 1.25-1.25V5.75L9.25 2.5Z" }), _jsx("path", { d: "M9.25 2.5v3.25h3.25" })] }));
|
|
28
|
+
}
|
|
29
|
+
function QaSourceCard({ source, onOpen, }) {
|
|
30
|
+
return (_jsxs("button", { type: "button", className: "dsh-qa-sources__item", onClick: onOpen, children: [_jsx("span", { className: "dsh-qa-sources__kind", "data-kind": source.kind, children: _jsx(SourceIcon, { kind: source.kind }) }), _jsxs("span", { className: "dsh-qa-sources__text", children: [_jsx("span", { className: "dsh-qa-sources__title", children: source.title }), _jsx("span", { className: "dsh-qa-sources__target", children: source.target }), source.snippet === "" ? null : _jsx("p", { children: source.snippet })] })] }));
|
|
31
|
+
}
|
|
32
|
+
function QaSourceDetail({ source, onBack, }) {
|
|
33
|
+
const external = source.kind === "web" && /^https?:\/\//iu.test(source.target)
|
|
34
|
+
? source.target
|
|
35
|
+
: undefined;
|
|
36
|
+
return (_jsxs("div", { className: "dsh-qa-sourcedetail", children: [_jsxs("div", { className: "dsh-qa-sourcedetail__head", children: [_jsx("button", { type: "button", className: "dsh-qa-sourcedetail__back", "aria-label": "\u041A\u043E \u0432\u0441\u0435\u043C \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430\u043C", title: "\u041A\u043E \u0432\u0441\u0435\u043C \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430\u043C", onClick: onBack, children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m8.75 3.5-3.5 3.5 3.5 3.5" }) }) }), _jsx("span", { className: "dsh-qa-sourcedetail__kind", children: _jsx(SourceIcon, { kind: source.kind }) }), _jsx("span", { className: "dsh-qa-sourcedetail__title", children: source.title }), external === undefined ? null : (_jsx("a", { className: "dsh-qa-sourcedetail__open", href: external, target: "_blank", rel: "noreferrer", children: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C" }))] }), _jsx("div", { className: "dsh-qa-sourcedetail__target", children: source.target }), _jsx("div", { className: "dsh-qa-sourcedetail__body", children: source.output === "" ? (_jsx("p", { className: "dsh-qa-sourcedetail__empty", children: "\u0423 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430 \u043D\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E \u0432\u044B\u0432\u043E\u0434\u0430." })) : (linkify(source.output)) })] }));
|
|
37
|
+
}
|
|
38
|
+
/** Right-hand panel listing tool-derived sources with a detail pane. */
|
|
39
|
+
export function QaSourcesDrawer({ sources, onClose }) {
|
|
40
|
+
const [detailId, setDetailId] = useState(null);
|
|
41
|
+
const detail = detailId === null
|
|
42
|
+
? undefined
|
|
43
|
+
: sources.find((source) => source.id === detailId);
|
|
44
|
+
return (_jsxs("aside", { className: "dsh-qa-sources", "aria-label": "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0438", children: [_jsxs("div", { className: "dsh-qa-sources__head", children: [_jsx("span", { children: detail === undefined ? `Источники (${sources.length})` : "Источник" }), _jsx("button", { type: "button", "aria-label": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0438", title: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", onClick: onClose, children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "m4 4 8 8m0-8-8 8" }) }) })] }), detail === undefined ? (_jsx("div", { className: "dsh-qa-sources__list", children: sources.map((source) => (_jsx(QaSourceCard, { source: source, onOpen: () => setDetailId(source.id) }, source.id))) })) : (_jsx(QaSourceDetail, { source: detail, onBack: () => setDetailId(null) }))] }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=QaSourcesDrawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QaSourcesDrawer.js","sourceRoot":"","sources":["../../../src/client/components/QaSourcesDrawer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { formatWorkDuration } from "./format.js";
|
|
4
|
+
import { Markdown } from "./Markdown.js";
|
|
5
|
+
export const THINKING_PHRASES = Object.freeze([
|
|
6
|
+
"Скребу по сусекам…",
|
|
7
|
+
"Кумекаю…",
|
|
8
|
+
"Навожу резкость…",
|
|
9
|
+
"Собираю мысли в кучку…",
|
|
10
|
+
"Раскладываю по полочкам…",
|
|
11
|
+
"Сверяю приметы…",
|
|
12
|
+
]);
|
|
13
|
+
function Chevron({ open }) {
|
|
14
|
+
return (_jsx("svg", { className: "dsh-qa-work__chevron", "data-open": open || undefined, viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m5.25 3.5 3.5 3.5-3.5 3.5" }) }));
|
|
15
|
+
}
|
|
16
|
+
function ThinkIcon() {
|
|
17
|
+
return (_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("path", { d: "M8 2.25a4.25 4.25 0 0 0-2.45 7.72c.48.34.7.72.7 1.15v.13h3.5v-.13c0-.43.22-.81.7-1.15A4.25 4.25 0 0 0 8 2.25Z" }), _jsx("path", { d: "M6.35 13h3.3M6.9 14.5h2.2" })] }));
|
|
18
|
+
}
|
|
19
|
+
function ToolIcon() {
|
|
20
|
+
return (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "M9.8 2.4a3.2 3.2 0 0 0-3.73 4.12l-3.4 3.4a1.55 1.55 0 1 0 2.2 2.2l3.4-3.4A3.2 3.2 0 0 0 12.4 5l-1.85 1.1-1.5-1.5L9.8 2.4Z" }) }));
|
|
21
|
+
}
|
|
22
|
+
function RobotIcon() {
|
|
23
|
+
return (_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("rect", { x: "3", y: "5", width: "10", height: "7.5", rx: "1.75" }), _jsx("path", { d: "M8 2.5V5m0-.25a.9.9 0 1 0-.01-1.8.9.9 0 0 0 .01 1.8ZM5.4 8.4h1.7M8.9 8.4h1.7M6 10.4h4" })] }));
|
|
24
|
+
}
|
|
25
|
+
function isDelegationTool(name) {
|
|
26
|
+
return name === "subagent" || name === "subagent_fork";
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Whether two work items render identically. The transcript projection
|
|
30
|
+
* rebuilds every item object on each published frame, so memoized work rows
|
|
31
|
+
* compare by rendered content instead of by reference.
|
|
32
|
+
*/
|
|
33
|
+
export function sameWorkItem(a, b) {
|
|
34
|
+
if (a === b)
|
|
35
|
+
return true;
|
|
36
|
+
if (a.id !== b.id || a.kind !== b.kind)
|
|
37
|
+
return false;
|
|
38
|
+
if (a.kind === "tool" && b.kind === "tool") {
|
|
39
|
+
return (a.name === b.name &&
|
|
40
|
+
a.label === b.label &&
|
|
41
|
+
a.summary === b.summary &&
|
|
42
|
+
a.input === b.input &&
|
|
43
|
+
a.output === b.output &&
|
|
44
|
+
a.status === b.status &&
|
|
45
|
+
a.subagentId === b.subagentId &&
|
|
46
|
+
a.startedAt === b.startedAt &&
|
|
47
|
+
a.endedAt === b.endedAt);
|
|
48
|
+
}
|
|
49
|
+
if (a.kind !== "tool" && b.kind !== "tool") {
|
|
50
|
+
return a.text === b.text && a.status === b.status;
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
/** Whether two work item lists render identically, item for item. */
|
|
55
|
+
export function sameWorkItems(a, b) {
|
|
56
|
+
if (a === b)
|
|
57
|
+
return true;
|
|
58
|
+
if (a.length !== b.length)
|
|
59
|
+
return false;
|
|
60
|
+
return a.every((item, index) => sameWorkItem(item, b[index]));
|
|
61
|
+
}
|
|
62
|
+
function WorkItemIcon({ item }) {
|
|
63
|
+
if (item.kind !== "tool")
|
|
64
|
+
return _jsx(ThinkIcon, {});
|
|
65
|
+
if (isDelegationTool(item.name))
|
|
66
|
+
return _jsx(RobotIcon, {});
|
|
67
|
+
if (item.status === "running") {
|
|
68
|
+
return _jsx("span", { className: "dsh-qa-work-item__spinner", "aria-hidden": "true" });
|
|
69
|
+
}
|
|
70
|
+
if (item.status === "ok") {
|
|
71
|
+
return (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "m3.5 8.25 2.7 2.7 6.3-6.3" }) }));
|
|
72
|
+
}
|
|
73
|
+
return _jsx(ToolIcon, {});
|
|
74
|
+
}
|
|
75
|
+
function toolStatusLabel(status) {
|
|
76
|
+
switch (status) {
|
|
77
|
+
case "running":
|
|
78
|
+
return "Выполняется";
|
|
79
|
+
case "ok":
|
|
80
|
+
return "Готово";
|
|
81
|
+
case "error":
|
|
82
|
+
return "Ошибка";
|
|
83
|
+
case "stopped":
|
|
84
|
+
return "Остановлено";
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const QaToolWorkItem = memo(function QaToolWorkItem({ item, }) {
|
|
88
|
+
const expandable = item.input !== null || item.output !== null;
|
|
89
|
+
const delegation = isDelegationTool(item.name);
|
|
90
|
+
const header = (_jsxs(_Fragment, { children: [_jsx("span", { className: "dsh-qa-work-item__icon", "data-state": item.status, children: _jsx(WorkItemIcon, { item: item }) }), _jsx("span", { className: "dsh-qa-work-item__label", children: item.label }), _jsx("span", { className: "dsh-qa-work-item__summary", children: item.summary }), item.subagentId === undefined ? null : (_jsx("span", { className: "dsh-qa-work-item__agent-id", title: item.subagentId, children: item.subagentId.slice(0, 8) })), _jsx("span", { className: "dsh-qa-sr-only", children: toolStatusLabel(item.status) }), expandable ? _jsx(Chevron, { open: false }) : null] }));
|
|
91
|
+
if (!expandable) {
|
|
92
|
+
return (_jsx("div", { className: "dsh-qa-work-item dsh-qa-work-item--tool", "data-tool": delegation ? "subagent" : undefined, children: header }));
|
|
93
|
+
}
|
|
94
|
+
return (_jsxs("details", { className: "dsh-qa-work-tool", "data-tool": delegation ? "subagent" : undefined, children: [_jsx("summary", { className: "dsh-qa-work-item dsh-qa-work-item--tool", children: header }), _jsxs("div", { className: "dsh-qa-work-tool__body", children: [item.input === null ? null : (_jsxs("section", { "aria-label": `Входные данные: ${item.label}`, children: [_jsx("span", { children: "\u0412\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435" }), _jsx("pre", { children: item.input })] })), item.output === null ? null : (_jsxs("section", { "aria-label": `Результат: ${item.label}`, children: [_jsx("span", { children: "\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442" }), _jsx("pre", { children: item.output })] }))] })] }));
|
|
95
|
+
}, (prev, next) => sameWorkItem(prev.item, next.item));
|
|
96
|
+
const QaTextWorkItem = memo(function QaTextWorkItem({ item, renderMarkdown, }) {
|
|
97
|
+
return (_jsxs("section", { className: "dsh-qa-work-item dsh-qa-work-item--text", "data-state": item.status, "aria-label": item.kind === "reasoning" ? "Рассуждение" : "Ход работы", children: [_jsxs("div", { className: "dsh-qa-work-item__text-head", children: [_jsx("span", { className: "dsh-qa-work-item__icon", children: _jsx(ThinkIcon, {}) }), _jsx("span", { className: "dsh-qa-work-item__label", children: item.kind === "reasoning" ? "Размышление" : "Ход работы" })] }), _jsx("div", { className: "dsh-qa-work-item__text", children: renderMarkdown ? _jsx(Markdown, { text: item.text }) : item.text })] }));
|
|
98
|
+
}, (prev, next) => prev.renderMarkdown === next.renderMarkdown &&
|
|
99
|
+
sameWorkItem(prev.item, next.item));
|
|
100
|
+
export const QaWorkGroup = memo(function QaWorkGroup({ status, startedAt, endedAt, items, renderMarkdown, }) {
|
|
101
|
+
const [open, setOpen] = useState(status === "running");
|
|
102
|
+
const [now, setNow] = useState(() => Date.now());
|
|
103
|
+
const previousStatus = useRef(status);
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
if (previousStatus.current === "running" && status === "complete") {
|
|
106
|
+
setOpen(false);
|
|
107
|
+
}
|
|
108
|
+
else if (previousStatus.current === "complete" &&
|
|
109
|
+
status === "running") {
|
|
110
|
+
setOpen(true);
|
|
111
|
+
}
|
|
112
|
+
previousStatus.current = status;
|
|
113
|
+
}, [status]);
|
|
114
|
+
useEffect(() => {
|
|
115
|
+
if (status !== "running" || startedAt === undefined)
|
|
116
|
+
return;
|
|
117
|
+
setNow(Date.now());
|
|
118
|
+
const timer = setInterval(() => setNow(Date.now()), 1_000);
|
|
119
|
+
return () => clearInterval(timer);
|
|
120
|
+
}, [startedAt, status]);
|
|
121
|
+
const duration = startedAt === undefined
|
|
122
|
+
? null
|
|
123
|
+
: formatWorkDuration((endedAt ?? now) - startedAt);
|
|
124
|
+
const label = status === "running"
|
|
125
|
+
? `${THINKING_PHRASES[Math.floor(Math.max(0, (endedAt ?? now) - (startedAt ?? now)) / 4_000) % THINKING_PHRASES.length]}${duration === null ? "" : ` (${duration})`}`
|
|
126
|
+
: duration === null
|
|
127
|
+
? "Ход работы"
|
|
128
|
+
: `Готово за ${duration}`;
|
|
129
|
+
return (_jsxs("section", { className: "dsh-qa-work", "data-state": status, children: [_jsxs("button", { type: "button", className: "dsh-qa-work__toggle", "aria-expanded": open, onClick: () => setOpen((value) => !value), children: [status === "running" ? (_jsx("span", { className: "dsh-qa-work__spinner", "aria-hidden": "true" })) : null, _jsx("span", { children: label }), _jsx(Chevron, { open: open })] }), open ? (_jsx("div", { className: "dsh-qa-work__body", children: items.map((item) => item.kind === "tool" ? (_jsx(QaToolWorkItem, { item: item }, item.id)) : (_jsx(QaTextWorkItem, { item: item, renderMarkdown: renderMarkdown }, item.id))) })) : null] }));
|
|
130
|
+
}, (prev, next) => prev.status === next.status &&
|
|
131
|
+
prev.startedAt === next.startedAt &&
|
|
132
|
+
prev.endedAt === next.endedAt &&
|
|
133
|
+
prev.renderMarkdown === next.renderMarkdown &&
|
|
134
|
+
sameWorkItems(prev.items, next.items));
|
|
135
|
+
//# sourceMappingURL=QaWorkGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QaWorkGroup.js","sourceRoot":"","sources":["../../../src/client/components/QaWorkGroup.tsx"],"names":[],"mappings":"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"}
|