@yadsh/dsh-qa-surface 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/README.md +239 -16
  3. package/SPEC-dsh-qa-surface.md +600 -96
  4. package/capability-policy.json +5 -0
  5. package/compatibility.json +18 -4
  6. package/cordis.patch.yml +11 -0
  7. package/docs/ARCHITECTURE.md +50 -8
  8. package/docs/COMPATIBILITY.md +5 -4
  9. package/docs/CONFIGURATION.md +184 -3
  10. package/docs/SOURCES-MIGRATION.md +28 -0
  11. package/docs/SOURCES-PROVENANCE-AUDIT.md +88 -0
  12. package/docs/SPEC-dsh-qa-surface-accounts.md +219 -0
  13. package/docs/SPEC-dsh-qa-surface-sources-provenance.md +1692 -0
  14. package/lib/accounts/index.js +2 -0
  15. package/lib/accounts/index.js.map +1 -0
  16. package/lib/accounts/store.js +478 -0
  17. package/lib/accounts/store.js.map +1 -0
  18. package/lib/attestation.js +10 -0
  19. package/lib/attestation.js.map +1 -0
  20. package/lib/cli.js +143 -0
  21. package/lib/cli.js.map +1 -0
  22. package/lib/client/QaAccountsController.js +329 -0
  23. package/lib/client/QaAccountsController.js.map +1 -0
  24. package/lib/client/QaConfigController.js +111 -4
  25. package/lib/client/QaConfigController.js.map +1 -1
  26. package/lib/client/QaSessionController.js +621 -163
  27. package/lib/client/QaSessionController.js.map +1 -1
  28. package/lib/client/QaSurface.js +303 -24
  29. package/lib/client/QaSurface.js.map +1 -1
  30. package/lib/client/QaTranscriptAdapter.js +324 -49
  31. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  32. package/lib/client/attestation.js +66 -0
  33. package/lib/client/attestation.js.map +1 -0
  34. package/lib/client/chat-index.js +86 -0
  35. package/lib/client/chat-index.js.map +1 -0
  36. package/lib/client/components/Markdown.js +124 -13
  37. package/lib/client/components/Markdown.js.map +1 -1
  38. package/lib/client/components/QaAgentsDrawer.js +40 -0
  39. package/lib/client/components/QaAgentsDrawer.js.map +1 -0
  40. package/lib/client/components/QaAuthGate.js +40 -0
  41. package/lib/client/components/QaAuthGate.js.map +1 -0
  42. package/lib/client/components/QaChangelog.js +112 -0
  43. package/lib/client/components/QaChangelog.js.map +1 -0
  44. package/lib/client/components/QaComposer.js +132 -15
  45. package/lib/client/components/QaComposer.js.map +1 -1
  46. package/lib/client/components/QaMessage.js +214 -10
  47. package/lib/client/components/QaMessage.js.map +1 -1
  48. package/lib/client/components/QaSidebar.js +167 -0
  49. package/lib/client/components/QaSidebar.js.map +1 -0
  50. package/lib/client/components/QaSourcesDrawer.js +127 -0
  51. package/lib/client/components/QaSourcesDrawer.js.map +1 -0
  52. package/lib/client/components/QaTurnRail.js +281 -0
  53. package/lib/client/components/QaTurnRail.js.map +1 -0
  54. package/lib/client/components/QaWelcomeNotice.js +125 -0
  55. package/lib/client/components/QaWelcomeNotice.js.map +1 -0
  56. package/lib/client/components/QaWidthHandle.js +142 -0
  57. package/lib/client/components/QaWidthHandle.js.map +1 -0
  58. package/lib/client/components/QaWorkGroup.js +135 -0
  59. package/lib/client/components/QaWorkGroup.js.map +1 -0
  60. package/lib/client/components/VariantSwitcher.js +29 -0
  61. package/lib/client/components/VariantSwitcher.js.map +1 -0
  62. package/lib/client/components/format.js +48 -0
  63. package/lib/client/components/format.js.map +1 -0
  64. package/lib/client/components/source-refs.js +78 -0
  65. package/lib/client/components/source-refs.js.map +1 -0
  66. package/lib/client/create-session.js +51 -0
  67. package/lib/client/create-session.js.map +1 -0
  68. package/lib/client/index.js +166 -35
  69. package/lib/client/index.js.map +1 -1
  70. package/lib/client/project-session-state.js +78 -0
  71. package/lib/client/project-session-state.js.map +1 -0
  72. package/lib/client/session-admission.js +38 -0
  73. package/lib/client/session-admission.js.map +1 -0
  74. package/lib/client/session-assets.js +52 -0
  75. package/lib/client/session-assets.js.map +1 -0
  76. package/lib/client/session-sources.js +61 -0
  77. package/lib/client/session-sources.js.map +1 -0
  78. package/lib/client/settlement.js +24 -0
  79. package/lib/client/settlement.js.map +1 -0
  80. package/lib/client/styles.js +450 -43
  81. package/lib/client/styles.js.map +1 -1
  82. package/lib/client/tool-presentation.js +102 -0
  83. package/lib/client/tool-presentation.js.map +1 -0
  84. package/lib/client/turn-sources.js +98 -0
  85. package/lib/client/turn-sources.js.map +1 -0
  86. package/lib/client/types.js +15 -0
  87. package/lib/client/types.js.map +1 -0
  88. package/lib/client/use-session-ui-state.js +68 -0
  89. package/lib/client/use-session-ui-state.js.map +1 -0
  90. package/lib/client/use-transcript-view.js +44 -0
  91. package/lib/client/use-transcript-view.js.map +1 -0
  92. package/lib/client/wait-for.js +49 -0
  93. package/lib/client/wait-for.js.map +1 -0
  94. package/lib/client.js +12551 -918
  95. package/lib/client.js.map +1 -1
  96. package/lib/config.js +226 -58
  97. package/lib/config.js.map +1 -1
  98. package/lib/entry-redirect.js +44 -0
  99. package/lib/entry-redirect.js.map +1 -0
  100. package/lib/host-route.js +25 -1
  101. package/lib/host-route.js.map +1 -1
  102. package/lib/index.js +354 -72
  103. package/lib/index.js.map +1 -1
  104. package/lib/launch-token.js +42 -0
  105. package/lib/launch-token.js.map +1 -0
  106. package/lib/lockdown-policy.js +20 -0
  107. package/lib/lockdown-policy.js.map +1 -0
  108. package/lib/provenance/collector.js +40 -0
  109. package/lib/provenance/collector.js.map +1 -0
  110. package/lib/provenance/connectors.js +147 -0
  111. package/lib/provenance/connectors.js.map +1 -0
  112. package/lib/provenance/dedupe.js +89 -0
  113. package/lib/provenance/dedupe.js.map +1 -0
  114. package/lib/provenance/extractors.js +340 -0
  115. package/lib/provenance/extractors.js.map +1 -0
  116. package/lib/provenance/file-preview.js +39 -0
  117. package/lib/provenance/file-preview.js.map +1 -0
  118. package/lib/provenance/host-store.js +387 -0
  119. package/lib/provenance/host-store.js.map +1 -0
  120. package/lib/provenance/index.js +9 -0
  121. package/lib/provenance/index.js.map +1 -0
  122. package/lib/provenance/normalize.js +128 -0
  123. package/lib/provenance/normalize.js.map +1 -0
  124. package/lib/provenance/reported.js +53 -0
  125. package/lib/provenance/reported.js.map +1 -0
  126. package/lib/provenance/types.js +2 -0
  127. package/lib/provenance/types.js.map +1 -0
  128. package/lib/resolve-config.js +283 -10
  129. package/lib/resolve-config.js.map +1 -1
  130. package/lib/secure-session.js +212 -0
  131. package/lib/secure-session.js.map +1 -0
  132. package/lib/typert.host.d.ts +3 -0
  133. package/lib/typert.host.js +784 -0
  134. package/lib/typert.remote-client.d.ts +40 -0
  135. package/lib/typert.remote-client.js +597 -0
  136. package/lib/types/accounts/index.d.ts +2 -0
  137. package/lib/types/accounts/store.d.ts +121 -0
  138. package/lib/types/attestation.d.ts +17 -0
  139. package/lib/types/cli.d.ts +9 -0
  140. package/lib/types/client/QaAccountsController.d.ts +95 -0
  141. package/lib/types/client/QaConfigController.d.ts +35 -3
  142. package/lib/types/client/QaSessionController.d.ts +146 -20
  143. package/lib/types/client/QaSurface.d.ts +11 -5
  144. package/lib/types/client/QaTranscriptAdapter.d.ts +13 -3
  145. package/lib/types/client/attestation.d.ts +25 -0
  146. package/lib/types/client/chat-index.d.ts +28 -0
  147. package/lib/types/client/components/Markdown.d.ts +17 -3
  148. package/lib/types/client/components/QaAgentsDrawer.d.ts +25 -0
  149. package/lib/types/client/components/QaAuthGate.d.ts +15 -0
  150. package/lib/types/client/components/QaChangelog.d.ts +21 -0
  151. package/lib/types/client/components/QaComposer.d.ts +12 -2
  152. package/lib/types/client/components/QaMessage.d.ts +22 -2
  153. package/lib/types/client/components/QaSidebar.d.ts +69 -0
  154. package/lib/types/client/components/QaSourcesDrawer.d.ts +20 -0
  155. package/lib/types/client/components/QaTurnRail.d.ts +59 -0
  156. package/lib/types/client/components/QaWelcomeNotice.d.ts +27 -0
  157. package/lib/types/client/components/QaWidthHandle.d.ts +36 -0
  158. package/lib/types/client/components/QaWorkGroup.d.ts +19 -0
  159. package/lib/types/client/components/VariantSwitcher.d.ts +19 -0
  160. package/lib/types/client/components/format.d.ts +9 -0
  161. package/lib/types/client/components/source-refs.d.ts +16 -0
  162. package/lib/types/client/create-session.d.ts +16 -0
  163. package/lib/types/client/index.d.ts +2 -5
  164. package/lib/types/client/project-session-state.d.ts +30 -0
  165. package/lib/types/client/session-admission.d.ts +23 -0
  166. package/lib/types/client/session-assets.d.ts +20 -0
  167. package/lib/types/client/session-sources.d.ts +28 -0
  168. package/lib/types/client/settlement.d.ts +6 -0
  169. package/lib/types/client/tool-presentation.d.ts +6 -0
  170. package/lib/types/client/turn-sources.d.ts +14 -0
  171. package/lib/types/client/types.d.ts +93 -0
  172. package/lib/types/client/use-session-ui-state.d.ts +35 -0
  173. package/lib/types/client/use-transcript-view.d.ts +20 -0
  174. package/lib/types/client/wait-for.d.ts +11 -0
  175. package/lib/types/entry-redirect.d.ts +20 -0
  176. package/lib/types/host-route.d.ts +14 -1
  177. package/lib/types/index.d.ts +67 -7
  178. package/lib/types/launch-token.d.ts +21 -0
  179. package/lib/types/lockdown-policy.d.ts +18 -0
  180. package/lib/types/provenance/collector.d.ts +26 -0
  181. package/lib/types/provenance/connectors.d.ts +11 -0
  182. package/lib/types/provenance/dedupe.d.ts +6 -0
  183. package/lib/types/provenance/extractors.d.ts +14 -0
  184. package/lib/types/provenance/file-preview.d.ts +10 -0
  185. package/lib/types/provenance/host-store.d.ts +54 -0
  186. package/lib/types/provenance/index.d.ts +10 -0
  187. package/lib/types/provenance/normalize.d.ts +13 -0
  188. package/lib/types/provenance/reported.d.ts +5 -0
  189. package/lib/types/provenance/types.d.ts +78 -0
  190. package/lib/types/secure-session.d.ts +31 -0
  191. package/lib/types/types.d.ts +304 -1
  192. package/package.json +70 -27
@@ -1,9 +1,15 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Fragment } from "react";
2
+ import { memo, Fragment } from "react";
3
+ import { SourceIcon } from "./QaSourcesDrawer.js";
4
+ import { sourceFileName } from "./source-refs.js";
3
5
  const INLINE = /(\[[^\]]+\]\([^\s)]+\)|`[^`]+`|\*\*[^*]+\*\*|\*[^*]+\*)/gu;
6
+ const TABLE_SEPARATOR = /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/u;
7
+ const ORDERED_LIST = /^\d{1,3}[.)]\s+/u;
8
+ const HORIZONTAL_RULE = /^\s*(?:-{3,}|\*{3,}|_{3,})\s*$/u;
9
+ const BLOCK_START = /^(#{1,3})\s+|```|^[-*]\s+|^\d{1,3}[.)]\s+|^>\s|(?:^\s*(?:-{3,}|\*{3,}|_{3,})\s*$)/u;
4
10
  function safeHref(value) {
5
11
  try {
6
- const url = new URL(value, window.location.origin);
12
+ const url = new URL(value);
7
13
  return ["http:", "https:", "mailto:"].includes(url.protocol)
8
14
  ? value
9
15
  : undefined;
@@ -12,7 +18,21 @@ function safeHref(value) {
12
18
  return undefined;
13
19
  }
14
20
  }
15
- function inline(text, keyPrefix) {
21
+ /**
22
+ * One inline source footnote: a pill over the matched link or path with a
23
+ * hover/focus preview card (title, target, snippet). A URL-backed source is
24
+ * an anchor that opens right away; a path-backed one is a button whose click
25
+ * the owner routes to the sources drawer.
26
+ */
27
+ function SourceChip({ source, label, href, onOpen, }) {
28
+ const target = source.path ?? source.uri ?? source.title;
29
+ const face = (_jsxs(_Fragment, { children: [_jsx("span", { className: "dsh-qa-srcref__icon", "data-kind": source.kind, children: _jsx(SourceIcon, { kind: source.kind }) }), _jsx("span", { className: "dsh-qa-srcref__label", children: label }), _jsxs("span", { className: "dsh-qa-srcref__card", "aria-hidden": "true", children: [_jsxs("span", { className: "dsh-qa-srcref__card-title", children: [_jsx("span", { className: "dsh-qa-srcref__icon", "data-kind": source.kind, children: _jsx(SourceIcon, { kind: source.kind }) }), source.title || label] }), _jsx("span", { className: "dsh-qa-srcref__card-target", children: target }), source.snippet === undefined ? null : (_jsx("span", { className: "dsh-qa-srcref__card-snippet", children: source.snippet }))] })] }));
30
+ if (href !== undefined) {
31
+ return (_jsx("a", { className: "dsh-qa-srcref", "data-kind": source.kind, href: href, target: "_blank", rel: "noopener noreferrer", children: face }));
32
+ }
33
+ return (_jsx("button", { type: "button", className: "dsh-qa-srcref", "data-kind": source.kind, onClick: onOpen === undefined ? undefined : () => onOpen(source), children: face }));
34
+ }
35
+ function inline(text, keyPrefix, sources = {}) {
16
36
  const nodes = [];
17
37
  let offset = 0;
18
38
  for (const match of text.matchAll(INLINE)) {
@@ -24,10 +44,29 @@ function inline(text, keyPrefix) {
24
44
  if (token.startsWith("[")) {
25
45
  const parts = /^\[([^\]]+)\]\(([^\s)]+)\)$/u.exec(token);
26
46
  const href = parts?.[2] === undefined ? undefined : safeHref(parts[2]);
27
- nodes.push(href === undefined ? (token) : (_jsx("a", { href: href, target: "_blank", rel: "noreferrer", children: parts?.[1] }, key)));
47
+ if (href === undefined) {
48
+ nodes.push(token);
49
+ }
50
+ else {
51
+ const source = sources.refs?.resolveUrl(href);
52
+ nodes.push(source === undefined ? (_jsx("a", { href: href, target: "_blank", rel: "noreferrer", children: parts?.[1] }, key)) : (_jsx(SourceChip, { source: source, label: parts?.[1] || source.title, href: href }, key)));
53
+ }
28
54
  }
29
55
  else if (token.startsWith("`")) {
30
- nodes.push(_jsx("code", { children: token.slice(1, -1) }, key));
56
+ const value = token.slice(1, -1);
57
+ const source = sources.refs?.resolvePath(value);
58
+ if (source === undefined) {
59
+ nodes.push(_jsx("code", { children: value }, key));
60
+ }
61
+ else if (source.path === undefined) {
62
+ nodes.push(_jsx(SourceChip, { source: source, label: source.title || value, href: safeHref(source.uri ?? "") }, key));
63
+ }
64
+ else if (sources.onSourceOpen === undefined) {
65
+ nodes.push(_jsx("code", { children: value }, key));
66
+ }
67
+ else {
68
+ nodes.push(_jsx(SourceChip, { source: source, label: sourceFileName(source), onOpen: sources.onSourceOpen }, key));
69
+ }
31
70
  }
32
71
  else if (token.startsWith("**")) {
33
72
  nodes.push(_jsx("strong", { children: token.slice(2, -2) }, key));
@@ -41,8 +80,58 @@ function inline(text, keyPrefix) {
41
80
  nodes.push(text.slice(offset));
42
81
  return nodes;
43
82
  }
44
- /** Deliberately small, HTML-free Markdown renderer for assistant-visible text. */
45
- export function Markdown({ text }) {
83
+ /** Split one GFM table row into trimmed cells, honoring escaped pipes. */
84
+ function splitTableRow(line) {
85
+ let row = line.trim();
86
+ if (row.startsWith("|"))
87
+ row = row.slice(1);
88
+ if (row.endsWith("|") && !row.endsWith("\\|"))
89
+ row = row.slice(0, -1);
90
+ return row
91
+ .split(/(?<!\\)\|/u)
92
+ .map((cell) => cell.trim().replace(/\\\|/gu, "|"));
93
+ }
94
+ function isTableStart(lines, index) {
95
+ const header = lines[index] ?? "";
96
+ if (!header.includes("|"))
97
+ return false;
98
+ return TABLE_SEPARATOR.test(lines[index + 1] ?? "");
99
+ }
100
+ function renderTable(lines, index, sources) {
101
+ const header = splitTableRow(lines[index] ?? "");
102
+ const aligns = splitTableRow(lines[index + 1] ?? "").map((cell) => {
103
+ const left = cell.startsWith(":");
104
+ const right = cell.endsWith(":");
105
+ if (left && right)
106
+ return "center";
107
+ return right ? "right" : "left";
108
+ });
109
+ let cursor = index + 2;
110
+ const rows = [];
111
+ while (cursor < lines.length &&
112
+ (lines[cursor] ?? "").trim() !== "" &&
113
+ (lines[cursor] ?? "").includes("|") &&
114
+ !/^(#{1,3})\s+|```|^[-*]\s+|^\d{1,3}[.)]\s+|^>\s/u.test(lines[cursor] ?? "")) {
115
+ rows.push(splitTableRow(lines[cursor] ?? ""));
116
+ cursor += 1;
117
+ }
118
+ return {
119
+ node: (_jsx("div", { className: "dsh-qa-md-table", children: _jsxs("table", { children: [_jsx("thead", { children: _jsx("tr", { children: header.map((cell, cellIndex) => (_jsx("th", { style: { textAlign: aligns[cellIndex] ?? "left" }, children: inline(cell, `th:${index}:${cellIndex}`, sources) }, `h:${cellIndex}`))) }) }), _jsx("tbody", { children: rows.map((row, rowIndex) => (_jsx("tr", { children: header.map((_, cellIndex) => (_jsx("td", { style: { textAlign: aligns[cellIndex] ?? "left" }, children: inline(row[cellIndex] ?? "", `td:${rowIndex}:${cellIndex}`, sources) }, `d:${rowIndex}:${cellIndex}`))) }, `r:${rowIndex}`))) })] }) }, `table:${index}`)),
120
+ next: cursor,
121
+ };
122
+ }
123
+ /**
124
+ * Deliberately small, HTML-free Markdown renderer for assistant-visible text.
125
+ * Memoized on the text value: stream updates re-render only the message whose
126
+ * text actually changed, so committed history is never re-parsed.
127
+ */
128
+ export const Markdown = memo(function Markdown({ text, sourceRefs, onSourceOpen, }) {
129
+ const sources = sourceRefs === undefined
130
+ ? {}
131
+ : {
132
+ refs: sourceRefs,
133
+ ...(onSourceOpen === undefined ? {} : { onSourceOpen }),
134
+ };
46
135
  const lines = text.replace(/\r\n?/gu, "\n").split("\n");
47
136
  const blocks = [];
48
137
  for (let index = 0; index < lines.length;) {
@@ -60,9 +149,20 @@ export function Markdown({ text }) {
60
149
  blocks.push(_jsx("pre", { children: _jsx("code", { "data-language": language || undefined, children: code.join("\n") }) }, `code:${index}`));
61
150
  continue;
62
151
  }
152
+ if (isTableStart(lines, index)) {
153
+ const table = renderTable(lines, index, sources);
154
+ blocks.push(table.node);
155
+ index = table.next;
156
+ continue;
157
+ }
158
+ if (HORIZONTAL_RULE.test(line)) {
159
+ blocks.push(_jsx("hr", {}, `hr:${index}`));
160
+ index += 1;
161
+ continue;
162
+ }
63
163
  const heading = /^(#{1,3})\s+(.+)$/u.exec(line);
64
164
  if (heading !== null) {
65
- const content = inline(heading[2] ?? "", `heading:${index}`);
165
+ const content = inline(heading[2] ?? "", `heading:${index}`, sources);
66
166
  const key = `heading:${index}`;
67
167
  blocks.push(heading[1]?.length === 1 ? (_jsx("h2", { children: content }, key)) : heading[1]?.length === 2 ? (_jsx("h3", { children: content }, key)) : (_jsx("h4", { children: content }, key)));
68
168
  index += 1;
@@ -72,14 +172,24 @@ export function Markdown({ text }) {
72
172
  const items = [];
73
173
  while (index < lines.length && /^[-*]\s+/u.test(lines[index] ?? "")) {
74
174
  const content = (lines[index] ?? "").replace(/^[-*]\s+/u, "");
75
- items.push(_jsx("li", { children: inline(content, `item:${index}`) }, `item:${index}`));
175
+ items.push(_jsx("li", { children: inline(content, `item:${index}`, sources) }, `item:${index}`));
76
176
  index += 1;
77
177
  }
78
178
  blocks.push(_jsx("ul", { children: items }, `list:${index}`));
79
179
  continue;
80
180
  }
181
+ if (ORDERED_LIST.test(line)) {
182
+ const items = [];
183
+ while (index < lines.length && ORDERED_LIST.test(lines[index] ?? "")) {
184
+ const content = (lines[index] ?? "").replace(ORDERED_LIST, "");
185
+ items.push(_jsx("li", { children: inline(content, `oitem:${index}`, sources) }, `oitem:${index}`));
186
+ index += 1;
187
+ }
188
+ blocks.push(_jsx("ol", { children: items }, `olist:${index}`));
189
+ continue;
190
+ }
81
191
  if (line.startsWith("> ")) {
82
- blocks.push(_jsx("blockquote", { children: inline(line.slice(2), `quote:${index}`) }, `quote:${index}`));
192
+ blocks.push(_jsx("blockquote", { children: inline(line.slice(2), `quote:${index}`, sources) }, `quote:${index}`));
83
193
  index += 1;
84
194
  continue;
85
195
  }
@@ -91,12 +201,13 @@ export function Markdown({ text }) {
91
201
  index += 1;
92
202
  while (index < lines.length &&
93
203
  (lines[index] ?? "").trim() !== "" &&
94
- !/^(#{1,3})\s+|^```|^[-*]\s+|^>\s/u.test(lines[index] ?? "")) {
204
+ !BLOCK_START.test(lines[index] ?? "") &&
205
+ !isTableStart(lines, index)) {
95
206
  paragraph.push(lines[index] ?? "");
96
207
  index += 1;
97
208
  }
98
- blocks.push(_jsx("p", { children: paragraph.map((part, partIndex) => (_jsxs(Fragment, { children: [partIndex === 0 ? null : _jsx("br", {}), inline(part, `paragraph:${index}:${partIndex}`)] }, `line:${partIndex}`))) }, `paragraph:${index}`));
209
+ blocks.push(_jsx("p", { children: paragraph.map((part, partIndex) => (_jsxs(Fragment, { children: [partIndex === 0 ? null : _jsx("br", {}), inline(part, `paragraph:${index}:${partIndex}`, sources)] }, `line:${partIndex}`))) }, `paragraph:${index}`));
99
210
  }
100
211
  return _jsx(_Fragment, { children: blocks });
101
- }
212
+ });
102
213
  //# sourceMappingURL=Markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../src/client/components/Markdown.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEjD,MAAM,MAAM,GAAG,2DAA2D,CAAC;AAE3E,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC1D,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,IAAY,EAAE,SAAiB;IAC7C,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,IAAI,KAAK,GAAG,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CACR,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CACnB,KAAK,CACN,CAAC,CAAC,CAAC,CACF,YAAa,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,YAAY,YACtD,KAAK,EAAE,CAAC,CAAC,CAAC,IADL,GAAG,CAEP,CACL,CACF,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,yBAAiB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAxB,GAAG,CAA6B,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,2BAAmB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAxB,GAAG,CAA+B,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,uBAAe,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAxB,GAAG,CAA2B,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAChC,CAAC;IACD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAA6B;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9B,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM;gBAAE,KAAK,IAAI,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CACT,wBACE,gCAAqB,QAAQ,IAAI,SAAS,YAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAQ,IAD5D,QAAQ,KAAK,EAAE,CAEnB,CACP,CAAC;YACF,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,KAAK,EAAE,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,WAAW,KAAK,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CACT,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACzB,uBAAe,OAAO,IAAb,GAAG,CAAgB,CAC7B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7B,uBAAe,OAAO,IAAb,GAAG,CAAgB,CAC7B,CAAC,CAAC,CAAC,CACF,uBAAe,OAAO,IAAb,GAAG,CAAgB,CAC7B,CACF,CAAC;YACF,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAgB,EAAE,CAAC;YAC9B,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACpE,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC9D,KAAK,CAAC,IAAI,CACR,uBAA2B,MAAM,CAAC,OAAO,EAAE,QAAQ,KAAK,EAAE,CAAC,IAAlD,QAAQ,KAAK,EAAE,CAAyC,CAClE,CAAC;gBACF,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,uBAA2B,KAAK,IAAvB,QAAQ,KAAK,EAAE,CAAc,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CACT,+BACG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC,IADzB,SAAS,KAAK,EAAE,CAEpB,CACd,CAAC;YACF,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,CAAC;QACX,OACE,KAAK,GAAG,KAAK,CAAC,MAAM;YACpB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;YAClC,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAC5D,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,MAAM,CAAC,IAAI,CACT,sBACG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAClC,MAAC,QAAQ,eACN,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAM,EAC/B,MAAM,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,SAAS,EAAE,CAAC,KAFnC,QAAQ,SAAS,EAAE,CAGvB,CACZ,CAAC,IANI,aAAa,KAAK,EAAE,CAOxB,CACL,CAAC;IACJ,CAAC;IACD,OAAO,4BAAG,MAAM,GAAI,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../src/client/components/Markdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { relativeTime } from "./format.js";
3
+ /**
4
+ * Direct subagent children of the open chat, running first. Reads the host
5
+ * session list's lineage (parentId + origin), so no extra subscription beyond
6
+ * the list the surface already follows.
7
+ */
8
+ export function collectSubagents(byId, rootId, now = Date.now()) {
9
+ if (rootId === null)
10
+ return [];
11
+ const rows = [];
12
+ for (const summary of Object.values(byId)) {
13
+ if (summary.parentId !== rootId || summary.origin !== "subagent")
14
+ continue;
15
+ rows.push({
16
+ id: summary.id,
17
+ title: summary.blank ? "Субагент" : summary.displayTitle,
18
+ running: summary.running,
19
+ completed: summary.completed === true,
20
+ meta: relativeTime(summary.updatedAt, now),
21
+ });
22
+ }
23
+ return rows.sort((left, right) => left.running === right.running ? 0 : left.running ? -1 : 1);
24
+ }
25
+ /** Right-hand panel listing the chat's subagents. */
26
+ export function QaAgentsDrawer({ agents, activeId, onView, onClose, }) {
27
+ return (_jsxs("aside", { className: "dsh-qa-agents", "aria-label": "\u0421\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u044B \u0447\u0430\u0442\u0430", children: [_jsxs("div", { className: "dsh-qa-agents__head", children: [_jsxs("span", { children: ["\u0421\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u044B (", agents.length, ")"] }), _jsx("button", { type: "button", "aria-label": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u043E\u0432", 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" }) }) })] }), _jsx("div", { className: "dsh-qa-agents__list", children: agents.map((agent) => {
28
+ const active = activeId === agent.id;
29
+ return (_jsxs("button", { type: "button", className: active
30
+ ? "dsh-qa-agents__item dsh-qa-agents__item--active"
31
+ : "dsh-qa-agents__item", onClick: () => onView(agent.id, agent.title), children: [_jsx("span", { className: agent.running
32
+ ? "dsh-qa-agents__dot dsh-qa-agents__dot--running"
33
+ : "dsh-qa-agents__dot", "aria-hidden": "true" }), _jsxs("span", { className: "dsh-qa-agents__text", children: [_jsx("span", { className: "dsh-qa-agents__title", children: agent.title }), _jsx("span", { className: "dsh-qa-agents__meta", children: agent.running
34
+ ? "выполняется"
35
+ : agent.completed
36
+ ? "завершён"
37
+ : agent.meta })] }), _jsx("span", { className: "dsh-qa-agents__open", children: active ? "открыт" : "смотреть" })] }, agent.id));
38
+ }) })] }));
39
+ }
40
+ //# sourceMappingURL=QaAgentsDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QaAgentsDrawer.js","sourceRoot":"","sources":["../../../src/client/components/QaAgentsDrawer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ function Logo({ logoUrl }) {
4
+ if (logoUrl !== null) {
5
+ return _jsx("img", { className: "dsh-qa-auth__logo", src: logoUrl, alt: "" });
6
+ }
7
+ return (_jsxs("svg", { className: "dsh-qa-auth__logo", 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" })] }));
8
+ }
9
+ /**
10
+ * The full-frame login/registration card shown instead of the chat while the
11
+ * deployment has accounts enabled and the browser holds no valid identity.
12
+ * Errors are the Host's coarse codes rendered as audience-safe copy.
13
+ */
14
+ export function QaAuthGate(props) {
15
+ const { snapshot, accounts } = props;
16
+ const mode = snapshot.stage === "gate" ? snapshot.mode : "login";
17
+ const busy = snapshot.stage === "gate" ? snapshot.busy : false;
18
+ const [email, setEmail] = useState("");
19
+ const [password, setPassword] = useState("");
20
+ const showRegister = props.allowRegistration;
21
+ const submit = (event) => {
22
+ event.preventDefault();
23
+ if (busy)
24
+ return;
25
+ const operation = mode === "register"
26
+ ? accounts.register(email, password)
27
+ : accounts.login(email, password);
28
+ void operation;
29
+ };
30
+ return (_jsx("main", { className: "dsh-qa-surface dsh-qa-auth", "aria-label": "\u0412\u0445\u043E\u0434 \u0432 \u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A", children: _jsxs("form", { className: "dsh-qa-auth__card", onSubmit: submit, children: [_jsxs("div", { className: "dsh-qa-auth__brand", children: [_jsx(Logo, { logoUrl: props.logoUrl }), _jsx("h1", { children: props.title })] }), showRegister ? (_jsxs("div", { className: "dsh-qa-auth__tabs", role: "tablist", "aria-label": "\u0412\u0445\u043E\u0434 \u0438\u043B\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F", children: [_jsx("button", { type: "button", role: "tab", "aria-selected": mode === "login", className: mode === "login"
31
+ ? "dsh-qa-auth__tab dsh-qa-auth__tab--active"
32
+ : "dsh-qa-auth__tab", onClick: () => accounts.setMode("login"), children: "\u0412\u0445\u043E\u0434" }), _jsx("button", { type: "button", role: "tab", "aria-selected": mode === "register", className: mode === "register"
33
+ ? "dsh-qa-auth__tab dsh-qa-auth__tab--active"
34
+ : "dsh-qa-auth__tab", onClick: () => accounts.setMode("register"), children: "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F" })] })) : null, _jsxs("label", { className: "dsh-qa-auth__field", children: [_jsx("span", { children: "Email" }), _jsx("input", { type: "email", name: "email", autoComplete: "email", required: true, disabled: busy, value: email, onChange: (event) => setEmail(event.currentTarget.value) })] }), _jsxs("label", { className: "dsh-qa-auth__field", children: [_jsx("span", { children: "\u041F\u0430\u0440\u043E\u043B\u044C" }), _jsx("input", { type: "password", name: "password", autoComplete: mode === "register" ? "new-password" : "current-password", required: true, minLength: 8, disabled: busy, value: password, onChange: (event) => setPassword(event.currentTarget.value) })] }), snapshot.stage === "gate" && snapshot.error !== null ? (_jsx("p", { className: "dsh-qa-auth__error", role: "alert", children: snapshot.error })) : null, _jsx("button", { type: "submit", className: "dsh-qa-auth__submit", disabled: busy, children: busy
35
+ ? "Подождите…"
36
+ : mode === "register"
37
+ ? "Зарегистрироваться"
38
+ : "Войти" })] }) }));
39
+ }
40
+ //# sourceMappingURL=QaAuthGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QaAuthGate.js","sourceRoot":"","sources":["../../../src/client/components/QaAuthGate.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ export const QA_VERSION = __DSH_QA_VERSION__;
4
+ export const QA_CHANGELOG = [
5
+ {
6
+ version: "0.3.0",
7
+ date: "2026-09-12",
8
+ sections: [
9
+ {
10
+ title: "Новое",
11
+ items: [
12
+ "Аккаунты QA: вход и регистрация, персональная история чатов, выход из аккаунта и управление пользователями через CLI.",
13
+ "Администратор видит только свои чаты по умолчанию. Общую историю пользователей можно явно включить настройкой accounts.showOtherUsersChats.",
14
+ "Предупреждение при входе в тестовый QA-интерфейс с пояснением о работе с данными.",
15
+ "Навигация по ответу стала нагляднее: шкала хода работы, сноски на источники и подробности выполненных инструментов.",
16
+ "История версий теперь доступна прямо из нижней части сайдбара.",
17
+ ],
18
+ },
19
+ {
20
+ title: "Исправления",
21
+ items: [
22
+ "Поиск по чатам учитывает владельца, получил кнопку очистки и больше не ломает ширину строк; роли администратора отображаются отдельно.",
23
+ "Убраны декоративные точки-разделители из списка чатов, сообщений и карточек источников.",
24
+ "Переключение между чатами больше не переносит вложения и другое состояние предыдущей сессии; устранены гонки асинхронной загрузки.",
25
+ "Изменения аккаунтов, сделанные через CLI, подхватываются без перезапуска, а запись хранилища стала безопаснее для параллельных процессов.",
26
+ "Ошибки создания сессии, остановленные и завершившиеся ошибкой инструменты теперь показываются пользователю корректно.",
27
+ "Клиент и упакованный плагин обновлены для интерфейсов DSH 0.1.5-rc.2.",
28
+ ],
29
+ },
30
+ ],
31
+ },
32
+ {
33
+ version: "0.2.0",
34
+ date: "2026-09-10",
35
+ sections: [
36
+ {
37
+ title: "Новое",
38
+ items: [
39
+ "Вложения-картинки: перетащите файл в чат, вставьте из буфера или выберите через кнопку — превью можно убрать до отправки.",
40
+ "Субагенты-эксперты: панель со списком, живой просмотр их работы только для чтения и свёрнутые уведомления о завершении.",
41
+ "Карточки источников с полным просмотром вывода, кликабельными ссылками и кнопкой открытия.",
42
+ "Перегенерация ответа с переключением вариантов, как в ChatGPT.",
43
+ "Оценки ответов с метаданными на-hover: длительность, время до первого токена, токенов в секунду.",
44
+ "История чатов: поиск, сворачивание сайдбара, сортировка по обновлению, черновики-чаты без создания сессии до первого вопроса.",
45
+ "Закрепление чата за каталогом/workspace с понятным отказом, когда workspace недоступен.",
46
+ "Плашка с дисклеймером об использовании данных под полем ввода.",
47
+ ],
48
+ },
49
+ {
50
+ title: "Исправления",
51
+ items: [
52
+ "В опубликованный пакет снова вошли модули host- и remote-энтрипоинтов, которые терялись при упаковке.",
53
+ ],
54
+ },
55
+ ],
56
+ },
57
+ {
58
+ version: "0.1.1",
59
+ date: "2026-09-06",
60
+ sections: [
61
+ {
62
+ title: "Исправления",
63
+ items: [
64
+ "Отдельный браузерный интерфейс QA поверх нативных сессий DeepSeek Harness.",
65
+ ],
66
+ },
67
+ ],
68
+ },
69
+ {
70
+ version: "0.1.0",
71
+ date: "2026-09-05",
72
+ sections: [
73
+ {
74
+ title: "Новое",
75
+ items: [
76
+ "Полноэкранный чат /qa на нативных сессиях DSH: потоковый ответ, Stop, Новый чат, безопасный Markdown, адаптивный интерфейс.",
77
+ "Группировка рассуждений и вызовов инструментов в сворачиваемый блок «Работал над ответом».",
78
+ "История чатов в сайдбаре с поиском по этому браузеру, переключением и удалением чата из индекса.",
79
+ "Русскоязычный интерфейс, вращающиеся фразы-«мысли» и чипсы быстрых вопросов на пустом чате.",
80
+ "Безопасность: аттестация политики хоста, закреплённый read-only профиль, белый список инструментов и защита от повторного выполнения.",
81
+ "Рендер GFM-таблиц, нумерованных списков и разделителей в ответах.",
82
+ "Работа по сети: деплой-оверлей для LAN и запасной путь получения конфигурации.",
83
+ ],
84
+ },
85
+ ],
86
+ },
87
+ ];
88
+ /**
89
+ * The version/changelog dialog opened from the sidebar footer. Rendering is
90
+ * a no-op while closed; Escape and a backdrop click close it.
91
+ */
92
+ export function QaChangelogModal(props) {
93
+ const closeButton = useRef(null);
94
+ useEffect(() => {
95
+ if (!props.open)
96
+ return;
97
+ closeButton.current?.focus();
98
+ const onKey = (event) => {
99
+ if (event.key === "Escape")
100
+ props.onClose();
101
+ };
102
+ window.addEventListener("keydown", onKey);
103
+ return () => window.removeEventListener("keydown", onKey);
104
+ }, [props.open, props.onClose]);
105
+ if (!props.open)
106
+ return null;
107
+ return (_jsx("div", { className: "dsh-qa-changelog", role: "dialog", "aria-modal": "true", "aria-label": "\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0432\u0435\u0440\u0441\u0438\u0439", onClick: (event) => {
108
+ if (event.target === event.currentTarget)
109
+ props.onClose();
110
+ }, children: _jsxs("div", { className: "dsh-qa-changelog__panel", children: [_jsxs("header", { className: "dsh-qa-changelog__head", children: [_jsx("h2", { className: "dsh-qa-changelog__title", children: "\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0432\u0435\u0440\u0441\u0438\u0439" }), _jsx("button", { ref: closeButton, type: "button", className: "dsh-qa-changelog__close", "aria-label": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u0432\u0435\u0440\u0441\u0438\u0439", onClick: props.onClose, children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m3.5 3.5 7 7m0-7-7 7" }) }) })] }), _jsx("div", { className: "dsh-qa-changelog__body", children: QA_CHANGELOG.map((entry) => (_jsxs("section", { className: "dsh-qa-changelog__entry", children: [_jsxs("h3", { className: "dsh-qa-changelog__version", children: ["\u0412\u0435\u0440\u0441\u0438\u044F ", entry.version, _jsx("span", { className: "dsh-qa-changelog__date", children: entry.date }), entry.version === QA_VERSION ? (_jsx("span", { className: "dsh-qa-changelog__current", children: "\u0442\u0435\u043A\u0443\u0449\u0430\u044F" })) : null] }), entry.sections.map((section) => (_jsxs("div", { className: "dsh-qa-changelog__section", children: [_jsx("h4", { className: "dsh-qa-changelog__section-title", children: section.title }), _jsx("ul", { className: "dsh-qa-changelog__list", children: section.items.map((item) => (_jsx("li", { children: item }, item))) })] }, section.title)))] }, entry.version))) })] }) }));
111
+ }
112
+ //# sourceMappingURL=QaChangelog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QaChangelog.js","sourceRoot":"","sources":["../../../src/client/components/QaChangelog.tsx"],"names":[],"mappings":"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"}