@yadsh/dsh-qa-surface 0.8.0 → 0.10.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 (242) hide show
  1. package/README.md +142 -4
  2. package/compatibility.json +5 -0
  3. package/lib/access/capability-catalog.js +32 -3
  4. package/lib/access/capability-catalog.js.map +1 -1
  5. package/lib/access/service.js +45 -17
  6. package/lib/access/service.js.map +1 -1
  7. package/lib/accounts/errors.js.map +1 -1
  8. package/lib/accounts/store.js +14 -0
  9. package/lib/accounts/store.js.map +1 -1
  10. package/lib/admin/permissions.js +4 -0
  11. package/lib/admin/permissions.js.map +1 -1
  12. package/lib/admin/quality-store.js +71 -0
  13. package/lib/admin/quality-store.js.map +1 -1
  14. package/lib/admin/service.js +113 -8
  15. package/lib/admin/service.js.map +1 -1
  16. package/lib/admin/session-log.js +66 -5
  17. package/lib/admin/session-log.js.map +1 -1
  18. package/lib/client/QaSessionController.js +371 -37
  19. package/lib/client/QaSessionController.js.map +1 -1
  20. package/lib/client/QaSurface.js +48 -8
  21. package/lib/client/QaSurface.js.map +1 -1
  22. package/lib/client/QaSurfaceGuard.js +12 -5
  23. package/lib/client/QaSurfaceGuard.js.map +1 -1
  24. package/lib/client/QaTranscriptAdapter.js +36 -0
  25. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  26. package/lib/client/admin/QaAdmin.js +14 -2
  27. package/lib/client/admin/QaAdmin.js.map +1 -1
  28. package/lib/client/admin/pages/Conversations.js +33 -7
  29. package/lib/client/admin/pages/Conversations.js.map +1 -1
  30. package/lib/client/admin/pages/Users.js +9 -2
  31. package/lib/client/admin/pages/Users.js.map +1 -1
  32. package/lib/client/admin/shared.js +14 -1
  33. package/lib/client/admin/shared.js.map +1 -1
  34. package/lib/client/admin/styles.js +2 -0
  35. package/lib/client/admin/styles.js.map +1 -1
  36. package/lib/client/audit/QaAuditDialog.js +74 -0
  37. package/lib/client/audit/QaAuditDialog.js.map +1 -0
  38. package/lib/client/audit/QaAuditRowBadge.js +17 -0
  39. package/lib/client/audit/QaAuditRowBadge.js.map +1 -0
  40. package/lib/client/audit/controller.js +39 -0
  41. package/lib/client/audit/controller.js.map +1 -0
  42. package/lib/client/audit/types.js +36 -0
  43. package/lib/client/audit/types.js.map +1 -0
  44. package/lib/client/audit/use-chat-audits.js +139 -0
  45. package/lib/client/audit/use-chat-audits.js.map +1 -0
  46. package/lib/client/base64.js +22 -1
  47. package/lib/client/base64.js.map +1 -1
  48. package/lib/client/components/QaAgentsDrawer.js +9 -6
  49. package/lib/client/components/QaAgentsDrawer.js.map +1 -1
  50. package/lib/client/components/QaApproval.js +1 -1
  51. package/lib/client/components/QaApproval.js.map +1 -1
  52. package/lib/client/components/QaChangelog.js +72 -0
  53. package/lib/client/components/QaChangelog.js.map +1 -1
  54. package/lib/client/components/QaComposer.js +63 -3
  55. package/lib/client/components/QaComposer.js.map +1 -1
  56. package/lib/client/components/QaFilesPanel.js +17 -11
  57. package/lib/client/components/QaFilesPanel.js.map +1 -1
  58. package/lib/client/components/QaHeader.js +3 -11
  59. package/lib/client/components/QaHeader.js.map +1 -1
  60. package/lib/client/components/QaMessage.js +16 -0
  61. package/lib/client/components/QaMessage.js.map +1 -1
  62. package/lib/client/components/QaModal.js.map +1 -1
  63. package/lib/client/components/QaQuestions.js +5 -5
  64. package/lib/client/components/QaQuestions.js.map +1 -1
  65. package/lib/client/components/QaSidebar.js +22 -3
  66. package/lib/client/components/QaSidebar.js.map +1 -1
  67. package/lib/client/components/QaWidthHandle.js +111 -5
  68. package/lib/client/components/QaWidthHandle.js.map +1 -1
  69. package/lib/client/components/QaWorkspaceBrowser.js +231 -0
  70. package/lib/client/components/QaWorkspaceBrowser.js.map +1 -0
  71. package/lib/client/index.js +127 -51
  72. package/lib/client/index.js.map +1 -1
  73. package/lib/client/kiosk.js +51 -0
  74. package/lib/client/kiosk.js.map +1 -0
  75. package/lib/client/markdown/blocks.js +122 -7
  76. package/lib/client/markdown/blocks.js.map +1 -1
  77. package/lib/client/markdown/inline.js +108 -12
  78. package/lib/client/markdown/inline.js.map +1 -1
  79. package/lib/client/markdown/katex-css.js +12 -0
  80. package/lib/client/markdown/katex-css.js.map +1 -0
  81. package/lib/client/markdown/math.js +84 -0
  82. package/lib/client/markdown/math.js.map +1 -0
  83. package/lib/client/markdown/render.js +74 -5
  84. package/lib/client/markdown/render.js.map +1 -1
  85. package/lib/client/project-session-state.js +15 -2
  86. package/lib/client/project-session-state.js.map +1 -1
  87. package/lib/client/prompt-content.js +26 -0
  88. package/lib/client/prompt-content.js.map +1 -1
  89. package/lib/client/settings/card.js +2 -2
  90. package/lib/client/settings/card.js.map +1 -1
  91. package/lib/client/settings/sections/lockdown.js +1 -6
  92. package/lib/client/settings/sections/lockdown.js.map +1 -1
  93. package/lib/client/settings/sections/notes.js +46 -0
  94. package/lib/client/settings/sections/notes.js.map +1 -0
  95. package/lib/client/settings/sections/slash.js +57 -0
  96. package/lib/client/settings/sections/slash.js.map +1 -0
  97. package/lib/client/settings/sections/sources.js +4 -1
  98. package/lib/client/settings/sections/sources.js.map +1 -1
  99. package/lib/client/settings/sections/status.js +9 -1
  100. package/lib/client/settings/sections/status.js.map +1 -1
  101. package/lib/client/settings/sections.js +2 -0
  102. package/lib/client/settings/sections.js.map +1 -1
  103. package/lib/client/settlement.js +1 -1
  104. package/lib/client/settlement.js.map +1 -1
  105. package/lib/client/slash/SlashPalette.js +48 -0
  106. package/lib/client/slash/SlashPalette.js.map +1 -0
  107. package/lib/client/slash/copy.js +54 -0
  108. package/lib/client/slash/copy.js.map +1 -0
  109. package/lib/client/slash/slash-router.js +49 -0
  110. package/lib/client/slash/slash-router.js.map +1 -0
  111. package/lib/client/slash/useSlashNavigation.js +95 -0
  112. package/lib/client/slash/useSlashNavigation.js.map +1 -0
  113. package/lib/client/source-preview.js +3 -0
  114. package/lib/client/source-preview.js.map +1 -1
  115. package/lib/client/styles.js +145 -16
  116. package/lib/client/styles.js.map +1 -1
  117. package/lib/client/types.js +11 -0
  118. package/lib/client/types.js.map +1 -1
  119. package/lib/client.js +33548 -1876
  120. package/lib/client.js.map +1 -1
  121. package/lib/config-resolvers/basics.js +11 -2
  122. package/lib/config-resolvers/basics.js.map +1 -1
  123. package/lib/config-resolvers/defaults.js +32 -0
  124. package/lib/config-resolvers/defaults.js.map +1 -1
  125. package/lib/config-resolvers/lockdown.js +8 -2
  126. package/lib/config-resolvers/lockdown.js.map +1 -1
  127. package/lib/config-resolvers/notes.js +24 -0
  128. package/lib/config-resolvers/notes.js.map +1 -0
  129. package/lib/config-resolvers/slash-commands.js +60 -0
  130. package/lib/config-resolvers/slash-commands.js.map +1 -0
  131. package/lib/config-resolvers/sources.js +4 -0
  132. package/lib/config-resolvers/sources.js.map +1 -1
  133. package/lib/config.js +96 -2
  134. package/lib/config.js.map +1 -1
  135. package/lib/index.js +309 -11
  136. package/lib/index.js.map +1 -1
  137. package/lib/personal-skills/service.js +16 -3
  138. package/lib/personal-skills/service.js.map +1 -1
  139. package/lib/prompt-notes.js +45 -6
  140. package/lib/prompt-notes.js.map +1 -1
  141. package/lib/provenance/document-preview.js +51 -0
  142. package/lib/provenance/document-preview.js.map +1 -0
  143. package/lib/provenance/file-preview.js +191 -19
  144. package/lib/provenance/file-preview.js.map +1 -1
  145. package/lib/provenance/host-store.js +18 -1
  146. package/lib/provenance/host-store.js.map +1 -1
  147. package/lib/qa-tools/catalog.js +7 -1
  148. package/lib/qa-tools/catalog.js.map +1 -1
  149. package/lib/qa-tools/file-delete-gate.js +60 -0
  150. package/lib/qa-tools/file-delete-gate.js.map +1 -0
  151. package/lib/qa-tools/file-delete.js +156 -0
  152. package/lib/qa-tools/file-delete.js.map +1 -0
  153. package/lib/questions.js +90 -43
  154. package/lib/questions.js.map +1 -1
  155. package/lib/resolve-config.js +7 -0
  156. package/lib/resolve-config.js.map +1 -1
  157. package/lib/secure-session.js +24 -0
  158. package/lib/secure-session.js.map +1 -1
  159. package/lib/shared/documents.js +22 -0
  160. package/lib/shared/documents.js.map +1 -0
  161. package/lib/slash/catalog.js +77 -0
  162. package/lib/slash/catalog.js.map +1 -0
  163. package/lib/slash/matcher.js +100 -0
  164. package/lib/slash/matcher.js.map +1 -0
  165. package/lib/slash/parser.js +79 -0
  166. package/lib/slash/parser.js.map +1 -0
  167. package/lib/slash/policy.js +72 -0
  168. package/lib/slash/policy.js.map +1 -0
  169. package/lib/slash/remotes.js +272 -0
  170. package/lib/slash/remotes.js.map +1 -0
  171. package/lib/typert.host.js +544 -56
  172. package/lib/typert.remote-client.d.ts +13 -1
  173. package/lib/typert.remote-client.js +435 -53
  174. package/lib/types/access/capability-catalog.d.ts +28 -1
  175. package/lib/types/access/service.d.ts +33 -4
  176. package/lib/types/accounts/errors.d.ts +7 -1
  177. package/lib/types/accounts/store.d.ts +12 -0
  178. package/lib/types/admin/quality-store.d.ts +18 -0
  179. package/lib/types/admin/service.d.ts +34 -2
  180. package/lib/types/admin/session-log.d.ts +65 -1
  181. package/lib/types/client/QaSessionController.d.ts +84 -2
  182. package/lib/types/client/QaSurface.d.ts +14 -1
  183. package/lib/types/client/admin/pages/Conversations.d.ts +4 -0
  184. package/lib/types/client/admin/shared.d.ts +2 -0
  185. package/lib/types/client/audit/QaAuditDialog.d.ts +21 -0
  186. package/lib/types/client/audit/QaAuditRowBadge.d.ts +18 -0
  187. package/lib/types/client/audit/controller.d.ts +27 -0
  188. package/lib/types/client/audit/types.d.ts +72 -0
  189. package/lib/types/client/audit/use-chat-audits.d.ts +20 -0
  190. package/lib/types/client/base64.d.ts +13 -1
  191. package/lib/types/client/components/QaAgentsDrawer.d.ts +2 -1
  192. package/lib/types/client/components/QaComposer.d.ts +12 -2
  193. package/lib/types/client/components/QaFilesPanel.d.ts +16 -4
  194. package/lib/types/client/components/QaHeader.d.ts +9 -3
  195. package/lib/types/client/components/QaModal.d.ts +4 -3
  196. package/lib/types/client/components/QaQuestions.d.ts +7 -0
  197. package/lib/types/client/components/QaSidebar.d.ts +8 -0
  198. package/lib/types/client/components/QaWidthHandle.d.ts +48 -2
  199. package/lib/types/client/components/QaWorkspaceBrowser.d.ts +15 -0
  200. package/lib/types/client/index.d.ts +1 -1
  201. package/lib/types/client/kiosk.d.ts +34 -0
  202. package/lib/types/client/markdown/blocks.d.ts +14 -1
  203. package/lib/types/client/markdown/inline.d.ts +23 -7
  204. package/lib/types/client/markdown/katex-css.d.ts +11 -0
  205. package/lib/types/client/markdown/math.d.ts +23 -0
  206. package/lib/types/client/markdown/render.d.ts +2 -1
  207. package/lib/types/client/project-session-state.d.ts +3 -1
  208. package/lib/types/client/prompt-content.d.ts +9 -1
  209. package/lib/types/client/settings/sections/notes.d.ts +10 -0
  210. package/lib/types/client/settings/sections/slash.d.ts +16 -0
  211. package/lib/types/client/settings/sections.d.ts +2 -0
  212. package/lib/types/client/settlement.d.ts +4 -1
  213. package/lib/types/client/slash/SlashPalette.d.ts +24 -0
  214. package/lib/types/client/slash/copy.d.ts +30 -0
  215. package/lib/types/client/slash/slash-router.d.ts +67 -0
  216. package/lib/types/client/slash/useSlashNavigation.d.ts +47 -0
  217. package/lib/types/client/styles.d.ts +22 -0
  218. package/lib/types/client/types.d.ts +65 -1
  219. package/lib/types/config-resolvers/notes.d.ts +10 -0
  220. package/lib/types/config-resolvers/slash-commands.d.ts +20 -0
  221. package/lib/types/index.d.ts +116 -1
  222. package/lib/types/personal-skills/service.d.ts +5 -0
  223. package/lib/types/prompt-notes.d.ts +9 -0
  224. package/lib/types/provenance/document-preview.d.ts +24 -0
  225. package/lib/types/provenance/file-preview.d.ts +69 -2
  226. package/lib/types/provenance/host-store.d.ts +13 -0
  227. package/lib/types/qa-tools/catalog.d.ts +1 -1
  228. package/lib/types/qa-tools/file-delete-gate.d.ts +42 -0
  229. package/lib/types/qa-tools/file-delete.d.ts +32 -0
  230. package/lib/types/questions.d.ts +8 -0
  231. package/lib/types/shared/documents.d.ts +20 -0
  232. package/lib/types/slash/catalog.d.ts +56 -0
  233. package/lib/types/slash/matcher.d.ts +51 -0
  234. package/lib/types/slash/parser.d.ts +46 -0
  235. package/lib/types/slash/policy.d.ts +40 -0
  236. package/lib/types/slash/remotes.d.ts +35 -0
  237. package/lib/types/types.d.ts +293 -6
  238. package/lib/types/ui-mode.d.ts +18 -0
  239. package/lib/ui-mode.js +22 -0
  240. package/lib/ui-mode.js.map +1 -0
  241. package/package.json +15 -9
  242. package/scripts/attach-workspace-sessions.mjs +472 -0
@@ -2,16 +2,84 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { QaModal } from "./QaModal.js";
3
3
  export const QA_VERSION = __DSH_QA_VERSION__;
4
4
  export const QA_CHANGELOG = [
5
+ {
6
+ version: "0.10.0",
7
+ date: "2026-09-19",
8
+ sections: [
9
+ {
10
+ title: "Исправления",
11
+ items: [
12
+ "Карточка пользователя в консоли администратора снова открывается быстро, а правки применяются сразу. Ради счётчика «Сообщения» в блоке «Активность» карточка читала журнал каждого разговора пользователя целиком, а чтение одного журнала на стенде перед собой перечисляет все сохранённые разговоры развёртывания: на реальном хранилище и открытие карточки, и каждое сохранение правки — роль, статус, доступные профили — ждали такой пересчёт минутами, поэтому правка выглядела не сработавшей. Теперь карточка отвечает из учётных записей и оценок, не читая журналы: счётчик сообщений показывает «—» и считается на странице «Разговоры», где журналы и так читаются для списка. Сохранение применяет ответ сервера сразу, без повторного запроса той же карточки.",
13
+ ],
14
+ },
15
+ {
16
+ title: "Новое",
17
+ items: [
18
+ "Формулы в ответах помощника отображаются как формулы, а не исходником. Ответы пишут математику в TeX-разметке: строкой в долларах, отдельным блоком в двойных долларах или оградой с языком math. Раньше всё это оставалось текстом с обратными слэшами и фигурными скобками, поэтому даже простая запись вроде x² выглядела как код. Теперь формулы рендерит та же библиотека KaTeX, что и переписку DSH: дроби, индексы, греческие буквы и интегралы выглядят как в учебнике — в строке и отдельным центрированным блоком, а широкая формула прокручивается вбок, не ломая вёрстку. Доллары без пары (цены вроде «$100») и нечитаемая запись остаются обычным текстом, а стили и шрифты формул путешествуют внутри плагина, поэтому математика выглядит одинаково в любой теме и на любом стенде.",
19
+ "У ассистента появился инструмент file_delete: он удаляет один обычный файл строго внутри рабочего каталога чата — тот оставил после себя черновик или временный файл, и его можно убрать. Каталоги, отсутствующие пути и всё, что пытается выйти за пределы рабочего каталога, в том числе через символические ссылки, отвергаются с понятной причиной, а путь вне каталога в ответе не называется. Каждое удаление сначала показывается оператору карточкой подтверждения, как и остальные требующие одобрения вызовы: пока оператор не ответит «Отклонить» или «Разрешить один раз», файл не трогается, а там, где одобрения отключены, вызов просто отклоняется.",
20
+ "Сноски в ответах собираются в конец сообщения. Помощник иногда ссылается на примечание сноской вида [^1] и расшифровывает её отдельной строкой в конце ответа: раньше сама ссылка оставалась в тексте видимой записью «[^1]», а расшифровка — обычным абзацем посреди ответа. Теперь ссылка выглядит номером над строкой, а расшифровки собираются в список внизу сообщения с возвратными отметками к каждой ссылке — как на GitHub и как в переписке DSH. Сноска без расшифровки остаётся обычным текстом, многоабзацные расшифровки и формулы внутри них работают.",
21
+ "Список чатов можно растягивать по ширине. Между списком и разговором появилась такая же невидимая полоса перетаскивания, как на стандартной странице DSH: потяните её вправо или влево, чтобы сделать список шире или уже, — от прежних фиксированных 264 пикселей до 420. Сам разговор при перетаскивании подстраивается автоматически. Выбранная ширина списка, как и ширина текста разговора, запоминается в браузере и восстанавливается после перезагрузки страницы. Свёрнутый список, как и раньше, остаётся узкой полосой: тянуть его нельзя, а разворачивание возвращает последнюю выбранную ширину.",
22
+ "Вкладка «Файлы» в правой панели показывает рабочий каталог чата. Раньше там были только вложения, которые вы отправляли сами, а всё, что разговор создавал — документ из конвейера документов, заметки агента, служебные файлы артефактов, — в интерфейсе не появлялось. Теперь над списком вложений открывается браузер рабочего каталога: путь от корня каталога чата, папки выше файлов, вход в папку по клику. Текст открывается прямо в панели — разметка с переключателем на исходный текст, остальное моноширинным текстом, — а файл, который текстом не читается, можно скачать целиком кнопкой «Скачать». Каталог закрыт пределами чата: перейти выше корня, сходить по символической ссылке или прочитать файл вне рабочего каталога, общих каталогов стенда и вложений панель не может, а слишком длинный список честно помечается как неполный. Просмотр файлов в панели выключается тем же переключателем, что и предпросмотр источников, а число файлов в одном каталоге настраивается рядом с ним в карточке настроек. Документ Word панель показывает прямо в чате: файл отдаётся конвейеру документов стенда, тот рендерит его в PDF, и этот PDF рисует встроенный просмотрщик браузера — со всей вёрсткой, без скачивания. Любой открытый файл можно развернуть из узкой панели в большое окно кнопкой «Развернуть» и закрыть обратно; если у стенда нет конвейера документов или формат не рендерится, панель честно говорит об этом и оставляет кнопку «Скачать».",
23
+ "Служебные подсказки помощнику теперь управляются из карточки настроек, в разделе «Заметки модели». Плагин дописывает в начало разговора скрытые сообщения: кто автор чата и какими логинами он владеет, что источники собираются автоматически и ручной список «Источники» в ответе не нужен, и что фоновым субагентам стоит давать короткое понятное название. Раньше тексты были зашиты в код плагина. Теперь каждую заметку можно выключить отдельно или переписать своими словами: подстановки вроде имени пользователя или названия тула остаются на своих местах, а пустое поле возвращает встроенную формулировку. Выключение останавливает только новые заметки — уже доставленные остаются в истории чата.",
24
+ ],
25
+ },
26
+ {
27
+ title: "Прочее",
28
+ items: [
29
+ "Из шапки чата пропала служебная плашка «Режим …» с названием агентского пресета стенда: она ни на что не влияла и была видна пользователю. При просмотре субагента на её месте, как и раньше, появляется кнопка возврата в чат.",
30
+ ],
31
+ },
32
+ ],
33
+ },
34
+ {
35
+ version: "0.9.0",
36
+ date: "2026-09-18",
37
+ sections: [
38
+ {
39
+ title: "Исправления",
40
+ items: [
41
+ "Вопрос модели больше не оставляет поле ввода доступным. Пока вопрос на экране, форма занимает место поля ввода: отправка сообщения рядом с ним была невозможна только потому, что ход считался занятым, а если стенд переставал считать ход идущим, поле выглядело готовым к работе, тогда как агент всё ещё ждал ответа на вопрос выше. Теперь форма вопроса владеет полем ввода до ответа или до конца хода, а само поле остаётся позади формы — набранный текст не пропадает и возвращается после ответа. Кнопка остановки хода переехала в шапку формы, поэтому завершить ход вместо ответа по-прежнему можно.",
42
+ "Вопрос, на который уже нельзя ответить, больше не остаётся на экране. Запрос жил до тех пор, пока его не закроют: при остановке хода вопрос снимался по сигналу самого вызова, но запрос без такого сигнала или ход, завершившийся другим путём, оставляли форму навсегда — ответ на неё уходил в никуда, а оператор видел живое на вид поле. Теперь стенд закрывает всё, что осталось от хода, как только спросивший помощник перестаёт работать, а страница продолжает сверяться со стендом, пока форма на экране: ответ, которого стенд уже не ждёт, отклоняется вместо тихой отправки.",
43
+ "Вопрос, оставшийся до перезагрузки страницы, снова появляется после неё. Страница читает список вопросов чата сразу при его открытии и при каждом восстановлении связи, а не только пока идёт ход: раньше перезагрузка могла показать пустое поле ввода, за которым агент продолжал ждать ответа.",
44
+ "Сбой при чтении персональных навыков одного аккаунта больше не прячет навыки у всех. Чтение каталога навыков, которому не повезло с файловой системой (отказ доступа, гонка чтения каталога), отдавало ошибку в реестр навыков харнесса, и тот в ответ переставал публиковать список доступных навыков целиком: модель получала «навык недоступен» на любое имя, включая навыки плагинов и корпоративные. Теперь такой сбой вырождается в «у этого аккаунта навыков не прочитано» и пишется в журнал событием skill.discover-failed, а остальной каталог продолжает публиковаться.",
45
+ "Раздел «Общие возможности» в консоли администратора снова видит навыки и инструменты, которые монтирует агентский пресет. Список читался «глобально», а каталог навыков стенда и семейство инструментов пресета живут в области видимости пресета: администратор не видел ни корпоративных навыков поиска, ни инструментов пресета и не мог ничего из них выдать или отозвать. Теперь страница читает реестры глазами того пресета, под которым идут QA-чаты (задаётся session.agentPreset, на стенде это qa-research), а если пресет не удалось собрать — как и раньше остаётся глобальный вид, и страница не падает.",
46
+ ],
47
+ },
48
+ {
49
+ title: "Прочее",
50
+ items: [
51
+ "Оператору стенда: настройка вопросов, которая ничего не делает, теперь видна в журнале и в карточке настроек. Если вопросы включены, а инструмент ask_user_question не входит в список разрешённых (lockdown.toolPolicy.allow), форма не появится никогда; если инструмент разрешён, а вопросы выключены, каждый запрос отклоняется. Оба случая пишут в журнал одно предупреждение question.config-incomplete на чат с указанием, какой половины не хватает, а в разделе «Состояние» появилась плашка «Вопросы модели» с тем же предупреждением — сам чат при этом открывается как обычно.",
52
+ "Оператору стенда: в журнале появились события о ходе вопроса — запрос принят и ждёт ответа (question.claimed), ответ получен (question.answered), вопрос закрыт оператором (question.cancelled) или снят вместе с ходом (question.aborted), запрос отдан другому интерфейсу (question.delegated), ответ отклонён (question.refused). Текст ответа в журнал не попадает: только число вопросов и то, был ли среди ответов свободный текст.",
53
+ ],
54
+ },
55
+ {
56
+ title: "Новое",
57
+ items: [
58
+ "В конфигурации стенда значение enabled для interaction.questions означает то же, что и interactive: включать вопросы модели стало можно любым из двух написаний.",
59
+ ],
60
+ },
61
+ ],
62
+ },
5
63
  {
6
64
  version: "0.8.0",
7
65
  date: "2026-09-16",
8
66
  sections: [
67
+ {
68
+ title: "Новое",
69
+ items: [
70
+ "Администратор может удалить разговор со стенда. Раньше удалить разговор было нечем: кнопка «Удалить чат» в списке убирает строку только в вашем браузере, и после перезагрузки чат возвращался, поэтому сломанные или ненужные разговоры оставались на стенде навсегда. На странице разговора в админке появилась кнопка «Удалить разговор»: она спрашивает подтверждение и удаляет сам разговор, его служебные сессии вместе с ним, оценки, разбор и собранные источники. В списке чатов кнопка осталась прежней — она по-прежнему скрывает строку только у вас.",
71
+ "Удаление доступно только администратору и записывается в журнал действий. Если разговор сейчас открыт на стенде, удаление откажется работать — сначала нужно, чтобы стенд его отпустил, иначе разговор вернётся при следующей записи. Там, где стенд хранит журналы не файлами, удаление тоже недоступно, и об этом будет сказано прямо, а не сделано наполовину.",
72
+ ],
73
+ },
9
74
  {
10
75
  title: "Исправления",
11
76
  items: [
12
77
  "Ответы агента стали заметно отзывчивее на загруженном стенде: раньше данные о том, какие документы и страницы агент прочитал, хранились в одном общем файле стенда, и каждый ход агента — включая ходы всех его помощников — переписывал этот файл целиком. Стоимость хода росла вместе со всей накопленной историей стенда: на реальных данных один ход стоил от 7 миллисекунд на небольшом стенде до 106 на большом, и всё это время сервер не отвечал никому из пользователей. Теперь данные каждого чата лежат отдельно, и ход переписывает только свой чат: на том же объёме — 4.2 миллисекунды вместо 106. Разбор ответа и панель источников работают как раньше.",
13
78
  "Открытие чата больше не переписывает все данные стенда. Список пользователей и записи о том, кому принадлежит какой чат, лежали в одном файле настроек, и он целиком перезаписывался при каждом действии — а записей становится на одну больше с каждым созданным чатом, так что со временем это становилось всё дороже. Теперь каждое действие записывает только своё изменение, и открытие чата стоит одинаково на стенде любого возраста.",
14
79
  "Удалённые чаты больше не копятся в консоли администратора. Запись о том, кому принадлежит чат, переживала сам чат: «удалить» в браузере лишь скрывало его, а серверный список возвращал обратно, поэтому в «Разговорах», в счётчиках и в аналитике навсегда оставались чаты, которых уже нет. Теперь при создании новых чатов стенд убирает записи о тех, которых больше нет на стенде, — и никогда не трогает записи существующих чатов, даже очень старых.",
80
+ "Стенд больше не убирает записи о существующих чатах. Убирая из «Разговоров» чаты, которых нет, стенд спрашивал только о тех, что открывались после последнего запуска: чат, к которому сутки не обращались, выглядел как удалённый, и запись о нём исчезала — разговор пропадал из истории своего владельца, из счётчиков и из аналитики, хотя сам он был цел. Теперь стенд сверяется и с тем, что лежит в хранилище, а если ответить наверняка не может, не убирает ничего.",
81
+ "Удалённый чат больше не оставляет после себя оценок и очереди на разбор. Оценки ответов, вердикты рецензентов и очередь на разбор хранились по идентификатору чата и переживали его: в «Обратной связи», в очереди и в аналитике оставались записи о разговоре, которого уже нет, а открыть его было нельзя. Теперь вместе с записью о владении убираются и они; журнал действий администраторов остаётся нетронутым.",
82
+ "Админка показывает состояние на момент открытия: «Разговоры», счётчики и аналитика больше не ждут, пока кто-нибудь создаст новый чат, чтобы убрать из списка исчезнувшие.",
15
83
  "Файл настроек стенда стал в разы меньше: политика доступа каждого чата хранилась в нём отдельной копией, хотя у всех чатов она одна и та же. На одном стенде из 25 копий различными оказались две — эта часть уменьшилась без потери данных: каждый чат по-прежнему помнит именно тот набор возможностей, с которым был открыт.",
16
84
  "Обновление стенда до этой версии сохраняет все учётные записи, пароли и привязку чатов к пользователям: прежний файл настроек переносится автоматически при первом запуске, а сам файл не удаляется, а сохраняется рядом с пометкой о переносе.",
17
85
  ],
@@ -21,6 +89,7 @@ export const QA_CHANGELOG = [
21
89
  items: [
22
90
  "У хранения данных чатов появился предел: на чат сохраняются источники последних 200 ходов, на стенде — 500 последних чатов, а чат, к которому не обращались месяц, освобождает место. Это касается только служебных данных разбора: сам текст разговора не удаляется, старый чат открывается как раньше, но панель источников у него может быть пустой.",
23
91
  "Оператору стенда: пределы хранения настраиваются (сколько ходов и чатов держать, через сколько дней освобождать, как часто убирать записи о несуществующих чатах). Значения по умолчанию подобраны под обычную нагрузку, менять их не обязательно.",
92
+ "Оператору стенда: в списке чатов DSH разговоры стенда показываются в разделе «Ungrouped». Так и должно быть при включённых личных папках посетителей: чат работает в своей папке внутри рабочей области, а список группирует только те чаты, чей рабочий каталог совпадает с рабочей областью целиком, и перенести чат в область задним числом нельзя. Исключение — чаты, созданные прежней настройкой, когда рабочий каталог задавался напрямую (или задавался тем же каталогом, но записанным иначе, например через прямые слэши): их можно вернуть в рабочую область командой qa-attach-sessions при остановленном стенде — она сначала показывает, что изменит, а с ключом --write вносит правку и сохраняет копию реестра рабочей области. На чаты посетителей с личными папками команда не влияет.",
24
93
  ],
25
94
  },
26
95
  {
@@ -45,7 +114,10 @@ export const QA_CHANGELOG = [
45
114
  {
46
115
  title: "Новое",
47
116
  items: [
117
+ "У чата, по которому проводился аудит, появилась отметка в истории и кнопка, открывающая сам аудит. Аудит — это разбор переписки, который делает отдельный модуль аудита: вердикт, оценки по направлениям, замечания и рекомендации. В истории чатов такая строка помечается галочкой и вердиктом, а по клику открывается окно с тремя вкладками — «Отчёт» (полный текст разбора таблицами и списками), «Замечания» (структурированный список с причинами и рекомендациями) и «JSON» (исходный документ разбора целиком). Отметка появляется поверх истории, ничего не пересканируя: данные о том, у каких чатов есть аудит, спрашиваются у модуля аудита, а сам разбор загружается только при открытии окна. Если модуль аудита не установлен, история выглядит как раньше — без отметок и без пустых мест.",
48
118
  "В конфигурации появились два ключа входа. accounts.maxAuthAttemptsPerMinute — лимит попыток входа и регистрации в минуту на весь стенд: раньше он был жёстко зашит на 30, теперь настраивается от 1 до 600 (по умолчанию — прежние 30). entry.cookieBootstrap — управляет самостоятельной выдачей host-cookie маршрутом /qa через одноразовый обмен ?token=…: ключ существовал в настройках по умолчанию, но в схеме конфигурации его не было, поэтому выключить его было нельзя; теперь это обычный логический переключатель (по умолчанию включён, поведение не изменилось).",
119
+ "В поле ввода можно вызывать навыки и команды. Навык вызывается как /generate-tkp — это обычный ход модели, в который штатный механизм DSH подставляет инструкции навыка; в палитре видны и те навыки, которые доступны только человеку (disable-model-invocation), а скрытые (user-invocable: false) не появляются. Команда вызывается как /compact — её выполняет сам стенд, модели она не отправляется, а её ход и результат видны в переписке отдельной служебной строкой. Палитра открывается по «/» над полем ввода: ↑/↓ выбирают, Tab и Enter подставляют вызов (второй Enter отправляет), Escape закрывает; на телефоне то же самое одним касанием. Если навык и команда называются одинаково, палитра показывает обе строки, а набранное вручную /plan спросит, что имелось в виду, вместо того чтобы угадывать. Неизвестное /что-то больше не уходит модели как обычный текст.",
120
+ "Новое поведение выключено по умолчанию и ничего не меняет до включения: пока оператор не включит lockdown.allowSlashCommands, «/» в начале сообщения отвергается прежним сообщением. Включив переключатель, оператор отдельно решает, что именно разрешено — списки навыков и команд в новой настройке slashCommands (для команд по умолчанию не разрешено ничего: установленный плагин со своими командами не должен появляться в палитре сам). Слэш-действия не расширяют права: песочница, белый список инструментов и подтверждения остаются прежними. Если стенд включает переключатель, но список не описывает, действует режим совместимости — все доступные человеку навыки и ни одной команды — и стенд один раз сообщает об этом в журнале.",
49
121
  ],
50
122
  },
51
123
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"QaChangelog.js","sourceRoot":"","sources":["../../../src/client/components/QaChangelog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QaChangelog.js","sourceRoot":"","sources":["../../../src/client/components/QaChangelog.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { memo, useEffect, useLayoutEffect, useRef, useState } from "react";
3
3
  import { attachmentAccept, draftFromFile, draftFromPaste, } from "../attachments.js";
4
+ import { QaSlashPalette } from "../slash/SlashPalette.js";
5
+ import { useSlashNavigation } from "../slash/useSlashNavigation.js";
4
6
  import { QaFileAttachment } from "./QaFileAttachment.js";
7
+ /** Stable id stem so `aria-activedescendant` can point at a palette row. */
8
+ const SLASH_LIST_ID = "dsh-qa-slash";
5
9
  function AttachIcon() {
6
10
  return (_jsx("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", children: _jsx("path", { d: "M16.08 8.29 9.19 15.18a4.5 4.5 0 0 1-6.37-6.37l6.89-6.89a3 3 0 0 1 4.25 4.25l-6.9 6.89a1.5 1.5 0 0 1-2.12-2.12l6.37-6.36" }) }));
7
11
  }
@@ -22,6 +26,26 @@ export const QaComposer = memo(function QaComposer(props) {
22
26
  const limits = props.limits;
23
27
  const images = attachments.filter((item) => item.kind === "image");
24
28
  const files = attachments.filter((item) => item.kind === "file");
29
+ const setDraftAtEnd = (text) => {
30
+ setDraft(text);
31
+ // The caret must land after the inserted invocation, not at the position
32
+ // the value it replaced happened to have.
33
+ queueMicrotask(() => {
34
+ const element = textarea.current;
35
+ if (element === null)
36
+ return;
37
+ element.focus();
38
+ element.setSelectionRange(text.length, text.length);
39
+ });
40
+ };
41
+ const navigation = useSlashNavigation({
42
+ draft,
43
+ slash: props.slash,
44
+ maxVisible: props.slashPolicy.maxVisible,
45
+ fuzzySearch: props.slashPolicy.fuzzySearch,
46
+ reopen: props.slash.reopen,
47
+ setDraft: setDraftAtEnd,
48
+ });
25
49
  const remove = (id) => {
26
50
  props.onAttachmentsChange(attachments.filter((candidate) => candidate.id !== id));
27
51
  };
@@ -31,9 +55,13 @@ export const QaComposer = memo(function QaComposer(props) {
31
55
  return;
32
56
  if (text.trim() === "" && attachments.length === 0)
33
57
  return;
58
+ // An explicit text (a quick question) is an ordinary prompt by
59
+ // construction: it never carries a palette pick, even while one is
60
+ // pending in the draft it is replacing.
61
+ const pick = textOverride === undefined ? navigation.picked : undefined;
34
62
  setSubmitting(true);
35
63
  try {
36
- if (await props.onSend(text, attachments)) {
64
+ if (await props.onSend(text, attachments, pick?.id ?? null)) {
37
65
  setDraft("");
38
66
  props.onAttachmentsChange([]);
39
67
  }
@@ -71,6 +99,10 @@ export const QaComposer = memo(function QaComposer(props) {
71
99
  if (!props.running)
72
100
  textarea.current?.focus();
73
101
  }, [props.running]);
102
+ useEffect(() => {
103
+ if (navigation.open)
104
+ props.onSlashOpen();
105
+ }, [navigation.open, props.onSlashOpen]);
74
106
  useLayoutEffect(() => {
75
107
  const element = textarea.current;
76
108
  if (element === null)
@@ -91,7 +123,7 @@ export const QaComposer = memo(function QaComposer(props) {
91
123
  event.preventDefault();
92
124
  setDragOver(false);
93
125
  void addFiles([...event.dataTransfer.files]);
94
- }, children: [(props.quickQuestions?.length ?? 0) > 0 ? (_jsx("div", { className: "dsh-qa-quick-questions", "aria-label": "\u0411\u044B\u0441\u0442\u0440\u044B\u0435 \u0432\u043E\u043F\u0440\u043E\u0441\u044B", children: props.quickQuestions?.map((question, index) => (_jsx("button", { type: "button", disabled: !props.canSend || submitting, onClick: () => void send(question.prompt), children: question.label }, index))) })) : null, _jsxs("div", { className: "dsh-qa-composer", children: [files.length === 0 ? null : (_jsx("div", { className: "dsh-qa-composer__files", "aria-label": "\u041F\u0440\u0438\u043A\u0440\u0435\u043F\u043B\u0451\u043D\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B", children: files.map((file) => (_jsx(QaFileAttachment, { name: file.name, bytes: file.bytes, tone: "draft", onRemove: () => {
126
+ }, children: [(props.quickQuestions?.length ?? 0) > 0 ? (_jsx("div", { className: "dsh-qa-quick-questions", "aria-label": "\u0411\u044B\u0441\u0442\u0440\u044B\u0435 \u0432\u043E\u043F\u0440\u043E\u0441\u044B", children: props.quickQuestions?.map((question, index) => (_jsx("button", { type: "button", disabled: !props.canSend || submitting, onClick: () => void send(question.prompt), children: question.label }, index))) })) : null, navigation.open ? (_jsx(QaSlashPalette, { idPrefix: SLASH_LIST_ID, rows: navigation.rows, activeId: navigation.activeId, state: props.slash.state, error: props.slash.error, commandSurface: props.slash.commandSurface, showDescriptions: props.slashPolicy.showDescriptions, showKindBadge: props.slashPolicy.showKindBadge, onHover: navigation.hover, onPick: navigation.pick })) : null, _jsxs("div", { className: "dsh-qa-composer", children: [files.length === 0 ? null : (_jsx("div", { className: "dsh-qa-composer__files", "aria-label": "\u041F\u0440\u0438\u043A\u0440\u0435\u043F\u043B\u0451\u043D\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B", children: files.map((file) => (_jsx(QaFileAttachment, { name: file.name, bytes: file.bytes, tone: "draft", onRemove: () => {
95
127
  remove(file.id);
96
128
  } }, file.id))) })), images.length === 0 ? null : (_jsx("div", { className: "dsh-qa-composer__images", "aria-label": "\u041F\u0440\u0438\u043A\u0440\u0435\u043F\u043B\u0451\u043D\u043D\u044B\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F", children: images.map((image) => (_jsxs("span", { className: "dsh-qa-composer__image", children: [_jsx("img", { src: image.previewUrl, alt: image.name }), _jsx("button", { type: "button", "aria-label": `Убрать ${image.name}`, title: "\u0423\u0431\u0440\u0430\u0442\u044C", onClick: () => {
97
129
  remove(image.id);
@@ -117,7 +149,35 @@ export const QaComposer = memo(function QaComposer(props) {
117
149
  event.preventDefault();
118
150
  setAttachmentError(null);
119
151
  props.onAttachmentsChange([...attachments, attachment]);
120
- }, onKeyDown: (event) => {
152
+ }, role: "combobox", "aria-expanded": navigation.open, "aria-controls": navigation.open ? `${SLASH_LIST_ID}-list` : undefined, "aria-activedescendant": navigation.activeId === null
153
+ ? undefined
154
+ : `${SLASH_LIST_ID}-option-${String(navigation.active)}`, onKeyDown: (event) => {
155
+ if (navigation.open) {
156
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
157
+ event.preventDefault();
158
+ navigation.move(event.key === "ArrowDown" ? 1 : -1);
159
+ return;
160
+ }
161
+ if (event.key === "Tab") {
162
+ // Tab inserts, it does not complete-and-run: the user still
163
+ // has to write the argument and press Enter again.
164
+ event.preventDefault();
165
+ navigation.pickActive();
166
+ return;
167
+ }
168
+ if (event.key === "Escape") {
169
+ event.preventDefault();
170
+ navigation.dismiss();
171
+ return;
172
+ }
173
+ if (event.key === "Enter" &&
174
+ !event.shiftKey &&
175
+ !event.nativeEvent.isComposing) {
176
+ event.preventDefault();
177
+ navigation.pickActive();
178
+ return;
179
+ }
180
+ }
121
181
  if (event.key === "Enter" &&
122
182
  !event.shiftKey &&
123
183
  !event.nativeEvent.isComposing) {
@@ -1 +1 @@
1
- {"version":3,"file":"QaComposer.js","sourceRoot":"","sources":["../../../src/client/components/QaComposer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,GAEf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAwBzD,SAAS,UAAU;IACjB,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,eAAM,CAAC,EAAC,0HAA0H,GAAG,GACjI,CACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,UAAU,CAAC,KAAsB;IACvE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,EAAE;QAC5B,KAAK,CAAC,mBAAmB,CACvB,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CACvD,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,EAAE,YAAqB,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,YAAY,IAAI,KAAK,CAAC;QACnC,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QACzC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC3D,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;gBAC1C,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACb,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,QAA6B,EAAE,EAAE;QACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;QACpD,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,kBAAkB,CAChB,aAAa,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAChE,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,IAAI,KAAK,GACP,QAAQ,CAAC,MAAM,GAAG,IAAI;YACpB,CAAC,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,yBAAyB;YACjE,CAAC,CAAC,IAAI,CAAC;QACX,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,KAAK,GAAG,KAAK,CAAC;;gBACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;QACzD,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IAChD,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpB,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACjE,MAAM,IAAI,GACR,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,6CAA6C,CAAC,CAAC;IACtE,OAAO,CACL,eACE,SAAS,EACP,QAAQ;YACN,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,sBAAsB,EAE5B,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,EACD,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EACrC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC,aAEA,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACzC,cAAK,SAAS,EAAC,wBAAwB,gBAAY,uFAAiB,YACjE,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9C,iBACE,IAAI,EAAC,QAAQ,EAEb,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,UAAU,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAExC,QAAQ,CAAC,KAAK,IAJV,KAAK,CAKH,CACV,CAAC,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACR,eAAK,SAAS,EAAC,iBAAiB,aAC7B,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3B,cACE,SAAS,EAAC,wBAAwB,gBACvB,+GAAqB,YAE/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,KAAC,gBAAgB,IAEf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAC,OAAO,EACZ,QAAQ,EAAE,GAAG,EAAE;gCACb,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BAClB,CAAC,IANI,IAAI,CAAC,EAAE,CAOZ,CACH,CAAC,GACE,CACP,EACA,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5B,cACE,SAAS,EAAC,yBAAyB,gBACxB,mJAA2B,YAErC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,gBAAqB,SAAS,EAAC,wBAAwB,aACrD,cAAK,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,GAAI,EAC/C,iBACE,IAAI,EAAC,QAAQ,gBACD,UAAU,KAAK,CAAC,IAAI,EAAE,EAClC,KAAK,EAAC,sCAAQ,EACd,OAAO,EAAE,GAAG,EAAE;wCACZ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oCACnB,CAAC,YAED,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,eAAM,CAAC,EAAC,kBAAkB,GAAG,GACzB,GACC,KAbA,KAAK,CAAC,EAAE,CAcZ,CACR,CAAC,GACE,CACP,EACA,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACjC,YAAG,SAAS,EAAC,mCAAmC,EAAC,IAAI,EAAC,OAAO,YAC1D,eAAe,GACd,CACL,EACD,gBAAO,SAAS,EAAC,gBAAgB,EAAC,OAAO,EAAC,eAAe,0FAEjD,EACR,mBACE,GAAG,EAAE,QAAQ,EACb,EAAE,EAAC,eAAe,EAClB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EACxD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;4BACjB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;4BACvD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACtB,KAAK,CAAC,cAAc,EAAE,CAAC;gCACvB,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;gCACtB,OAAO;4BACT,CAAC;4BACD,kEAAkE;4BAClE,iDAAiD;4BACjD,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;4BAC9D,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;4BAChD,IAAI,UAAU,KAAK,IAAI;gCAAE,OAAO;4BAChC,IAAI,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gCAC5C,+DAA+D;gCAC/D,6DAA6D;gCAC7D,kBAAkB,CAChB,aAAa,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAChE,CAAC;gCACF,OAAO;4BACT,CAAC;4BACD,KAAK,CAAC,cAAc,EAAE,CAAC;4BACvB,kBAAkB,CAAC,IAAI,CAAC,CAAC;4BACzB,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;wBAC1D,CAAC,EACD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;4BACnB,IACE,KAAK,CAAC,GAAG,KAAK,OAAO;gCACrB,CAAC,KAAK,CAAC,QAAQ;gCACf,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAC9B,CAAC;gCACD,KAAK,CAAC,cAAc,EAAE,CAAC;gCACvB,KAAK,IAAI,EAAE,CAAC;4BACd,CAAC;wBACH,CAAC,GACD,EACF,eAAK,SAAS,EAAC,0BAA0B,aACvC,gBACE,GAAG,EAAE,SAAS,EACd,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAChC,QAAQ,QACR,SAAS,EAAC,gBAAgB,EAC1B,QAAQ,EAAE,CAAC,CAAC,iBACA,MAAM,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oCAC/C,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;gCAC1B,CAAC,GACD,EACF,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yBAAyB,gBACxB,uFAAiB,EAC5B,KAAK,EAAC,6KAAiC,EACvC,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,EACnE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,YAEzC,KAAC,UAAU,KAAG,GACP,EACT,eAAM,SAAS,EAAC,uBAAuB,eAAW,QAAQ,YACvD,IAAI,GACA,EACN,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CACjC,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uDAAuD,gBACtD,8DAAY,EACvB,KAAK,EAAC,8DAAY,EAClB,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,YAElC,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,eAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,EAAE,EAAC,KAAK,GAAG,GACxD,GACC,CACV,CAAC,CAAC,CAAC,CACF,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uDAAuD,gBACtD,wDAAW,EACtB,KAAK,EAAC,wDAAW,EACjB,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,UAAU,IAAI,CAAC,UAAU,EACrD,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,YAE1B,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,eAAM,CAAC,EAAC,mCAAmC,GAAG,GAC1C,GACC,CACV,IACG,IACF,IACF,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"QaComposer.js","sourceRoot":"","sources":["../../../src/client/components/QaComposer.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from "react";
3
3
  import { formatDayTime } from "./format.js";
4
4
  import { QaFileAttachment } from "./QaFileAttachment.js";
5
+ import { QaWorkspaceBrowser } from "./QaWorkspaceBrowser.js";
5
6
  /** One attachment thumbnail, resolved through the controller's asset store. */
6
7
  function QaFileImage({ image, resolve, }) {
7
8
  const [url, setUrl] = useState(null);
@@ -27,19 +28,24 @@ function QaFileImage({ image, resolve, }) {
27
28
  return (_jsx("a", { href: url, target: "_blank", rel: "noreferrer", children: _jsx("img", { className: "dsh-qa-files__thumb", 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" }) }));
28
29
  }
29
30
  /**
30
- * The chat's attachment roster: one section per sending message, newest
31
- * first. Rows mirror the transcript's handles — the browser never reads a
32
- * file back, and the images are the same object URLs the message showed.
31
+ * The chat's attachment roster plus, when the Host is reachable, the chat's
32
+ * own workspace: one section per sending message, newest first, and above it
33
+ * the file browser the conversation worked in.
34
+ *
35
+ * Rows mirror the transcript's handles — the browser never reads an attachment
36
+ * back, and the images are the same object URLs the message showed — while the
37
+ * workspace section reads through the Host's fenced listing and file reads.
33
38
  */
34
- export function QaFilesPanel({ groups, resolveImage, onJumpToMessage, }) {
39
+ export function QaFilesPanel({ groups, resolveImage, onJumpToMessage, sessionId, api, }) {
40
+ const workspace = sessionId === undefined || api === undefined ? null : (_jsxs("section", { className: "dsh-qa-files__workspace", children: [_jsx("h3", { children: _jsx("span", { children: "\u0420\u0430\u0431\u043E\u0447\u0438\u0439 \u043A\u0430\u0442\u0430\u043B\u043E\u0433" }) }), _jsx(QaWorkspaceBrowser, { sessionId: sessionId, api: api })] }));
35
41
  if (groups.length === 0) {
36
- return (_jsx("div", { className: "dsh-qa-files", children: _jsx("p", { className: "dsh-qa-files__empty", children: "\u0412 \u044D\u0442\u043E\u043C \u0447\u0430\u0442\u0435 \u043D\u0435\u0442 \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0439." }) }));
42
+ return (_jsxs("div", { className: "dsh-qa-files", children: [workspace, _jsx("p", { className: "dsh-qa-files__empty", children: "\u0412 \u044D\u0442\u043E\u043C \u0447\u0430\u0442\u0435 \u043D\u0435\u0442 \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0439." })] }));
37
43
  }
38
- return (_jsx("div", { className: "dsh-qa-files", children: groups.map((group) => {
39
- const time = group.timestamp === undefined
40
- ? "Вложенные файлы"
41
- : formatDayTime(group.timestamp);
42
- return (_jsxs("section", { className: "dsh-qa-files__group", children: [_jsxs("h3", { children: [_jsx("span", { children: time }), _jsx("button", { type: "button", className: "dsh-qa-files__jump", "aria-label": `Перейти к сообщению от ${time}`, title: "\u041A \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044E", onClick: () => onJumpToMessage(group.messageId), children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "M3.5 7h7m-3-3.5L11 7l-3.5 3.5" }) }) })] }), _jsxs("div", { className: "dsh-qa-files__items", children: [group.files.map((file) => (_jsx(QaFileAttachment, { name: file.name, bytes: file.bytes, tone: "sent" }, file.attachmentId))), group.images.map((image) => resolveImage === undefined ? null : (_jsx(QaFileImage, { image: image, resolve: resolveImage }, image.attachmentId)))] })] }, group.messageId));
43
- }) }));
44
+ return (_jsxs("div", { className: "dsh-qa-files", children: [workspace, groups.map((group) => {
45
+ const time = group.timestamp === undefined
46
+ ? "Вложенные файлы"
47
+ : formatDayTime(group.timestamp);
48
+ return (_jsxs("section", { className: "dsh-qa-files__group", children: [_jsxs("h3", { children: [_jsx("span", { children: time }), _jsx("button", { type: "button", className: "dsh-qa-files__jump", "aria-label": `Перейти к сообщению от ${time}`, title: "\u041A \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044E", onClick: () => onJumpToMessage(group.messageId), children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "M3.5 7h7m-3-3.5L11 7l-3.5 3.5" }) }) })] }), _jsxs("div", { className: "dsh-qa-files__items", children: [group.files.map((file) => (_jsx(QaFileAttachment, { name: file.name, bytes: file.bytes, tone: "sent" }, file.attachmentId))), group.images.map((image) => resolveImage === undefined ? null : (_jsx(QaFileImage, { image: image, resolve: resolveImage }, image.attachmentId)))] })] }, group.messageId));
49
+ })] }));
44
50
  }
45
51
  //# sourceMappingURL=QaFilesPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QaFilesPanel.js","sourceRoot":"","sources":["../../../src/client/components/QaFilesPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QaFilesPanel.js","sourceRoot":"","sources":["../../../src/client/components/QaFilesPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- function modeLabel(agentPreset) {
3
- if (agentPreset === null)
4
- return "Режим вопросов";
5
- const name = agentPreset
6
- .replace(/[-_]+/gu, " ")
7
- .replace(/^\p{Ll}/u, (letter) => letter.toUpperCase());
8
- return `Режим «${name}»`;
9
- }
10
2
  function RobotBadge() {
11
3
  return (_jsxs("svg", { className: "dsh-qa-agentview__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" })] }));
12
4
  }
@@ -18,9 +10,9 @@ function RobotBadge() {
18
10
  export function QaSubagentBanner({ onClose, }) {
19
11
  return (_jsxs("div", { className: "dsh-qa-agentview", role: "status", children: [_jsx(RobotBadge, {}), _jsx("span", { children: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430" }), _jsx("button", { type: "button", onClick: onClose, children: "\u2190 \u0412 \u0447\u0430\u0442" })] }));
20
12
  }
21
- export function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, agentPreset, roleSelector, administration, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesOpen, onOpenFiles, settings, panelLauncher, showReset, resetDisabled, onReset, }) {
22
- return (_jsx("header", { className: "dsh-qa-header", children: _jsxs("div", { className: "dsh-qa-header__inner", children: [_jsxs("div", { className: "dsh-qa-header__title-row", children: [logoUrl === null ? null : (_jsx("img", { className: "dsh-qa-header__logo", src: logoUrl, alt: "" })), title === null ? null : _jsx("h1", { title: title, children: title }), viewingSubagent ? (_jsxs("span", { className: "dsh-qa-header__viewing", children: [_jsx(RobotBadge, {}), "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430", _jsx("button", { type: "button", className: "dsh-qa-header__back", onClick: onCloseSubagent, children: "\u2190 \u0412 \u0447\u0430\u0442" })] })) : (_jsxs("span", { className: "dsh-qa-header__mode", children: [_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "3.25", r: "1.5" }), _jsx("circle", { cx: "4", cy: "11.75", r: "1.5" }), _jsx("circle", { cx: "12", cy: "11.75", r: "1.5" }), _jsx("path", { d: "M8 4.75v2.5m0 0H4v3m4-3h4v3" })] }), modeLabel(agentPreset)] })), roleSelector, _jsxs("button", { type: "button", className: "dsh-qa-header__agents", disabled: agentCount === 0, "aria-expanded": agentsOpen, onClick: onToggleAgents, children: [_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("rect", { x: "3", y: "5.5", width: "10", height: "7", rx: "1.75" }), _jsx("path", { d: "M8 3v2.5M6.2 9h.01M9.8 9h.01M6.2 11h3.6" })] }), "\u0410\u0433\u0435\u043D\u0442\u044B", agentCount === 0 ? null : ` (${agentCount})`] }), sourcesVisible ? (_jsxs("button", { type: "button", className: "dsh-qa-header__sources", disabled: sourcesCount === 0 && sourcesComplete, "aria-expanded": sourcesOpen, onClick: onOpenSources, children: [_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" })] }), "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0438", sourcesCount === 0 && sourcesComplete
13
+ export function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, roleSelector, administration, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesEnabled, filesOpen, onOpenFiles, settings, panelLauncher, showReset, resetDisabled, onReset, }) {
14
+ return (_jsx("header", { className: "dsh-qa-header", children: _jsxs("div", { className: "dsh-qa-header__inner", children: [_jsxs("div", { className: "dsh-qa-header__title-row", children: [logoUrl === null ? null : (_jsx("img", { className: "dsh-qa-header__logo", src: logoUrl, alt: "" })), title === null ? null : _jsx("h1", { title: title, children: title }), viewingSubagent ? (_jsxs("span", { className: "dsh-qa-header__viewing", children: [_jsx(RobotBadge, {}), "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430", _jsx("button", { type: "button", className: "dsh-qa-header__back", onClick: onCloseSubagent, children: "\u2190 \u0412 \u0447\u0430\u0442" })] })) : null, roleSelector, _jsxs("button", { type: "button", className: "dsh-qa-header__agents", disabled: agentCount === 0, "aria-expanded": agentsOpen, onClick: onToggleAgents, children: [_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("rect", { x: "3", y: "5.5", width: "10", height: "7", rx: "1.75" }), _jsx("path", { d: "M8 3v2.5M6.2 9h.01M9.8 9h.01M6.2 11h3.6" })] }), "\u0410\u0433\u0435\u043D\u0442\u044B", agentCount === 0 ? null : ` (${agentCount})`] }), sourcesVisible ? (_jsxs("button", { type: "button", className: "dsh-qa-header__sources", disabled: sourcesCount === 0 && sourcesComplete, "aria-expanded": sourcesOpen, onClick: onOpenSources, children: [_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" })] }), "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0438", sourcesCount === 0 && sourcesComplete
23
15
  ? null
24
- : ` (${sourcesCount})`] })) : null, _jsxs("button", { type: "button", className: "dsh-qa-header__files", disabled: fileCount === 0, "aria-expanded": filesOpen, onClick: onOpenFiles, children: [_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.25M6 8.5h4M6 11h2.5" })] }), "\u0424\u0430\u0439\u043B\u044B", fileCount === 0 ? null : ` (${fileCount})`] }), _jsxs("div", { className: "dsh-qa-header__actions", children: [showReset ? (_jsx("button", { type: "button", className: "dsh-qa-header__reset", disabled: resetDisabled, onClick: onReset, children: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442" })) : null, administration === undefined ? null : (_jsx("button", { type: "button", className: "dsh-qa-header__admin", onClick: administration.onOpen, children: "\u0410\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435" })), panelLauncher, settings === undefined ? null : (_jsxs("button", { type: "button", className: "dsh-qa-header__settings", title: settings.label, onClick: settings.onOpen, children: [_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "8", r: "2.2" }), _jsx("path", { d: "M8 1.8v2M8 12.2v2M1.8 8h2M12.2 8h2M3.6 3.6l1.4 1.4M11 11l1.4 1.4M3.6 12.4 5 11M11 5l1.4-1.4" })] }), "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438"] }))] })] }), _jsx("div", { className: "dsh-qa-header__tabs", children: _jsx("span", { "aria-current": "page", children: "\u0427\u0430\u0442" }) })] }) }));
16
+ : ` (${sourcesCount})`] })) : null, _jsxs("button", { type: "button", className: "dsh-qa-header__files", disabled: !filesEnabled, "aria-expanded": filesOpen, onClick: onOpenFiles, children: [_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.25M6 8.5h4M6 11h2.5" })] }), "\u0424\u0430\u0439\u043B\u044B", fileCount === 0 ? null : ` (${fileCount})`] }), _jsxs("div", { className: "dsh-qa-header__actions", children: [showReset ? (_jsx("button", { type: "button", className: "dsh-qa-header__reset", disabled: resetDisabled, onClick: onReset, children: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442" })) : null, administration === undefined ? null : (_jsx("button", { type: "button", className: "dsh-qa-header__admin", onClick: administration.onOpen, children: "\u0410\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435" })), panelLauncher, settings === undefined ? null : (_jsxs("button", { type: "button", className: "dsh-qa-header__settings", title: settings.label, onClick: settings.onOpen, children: [_jsxs("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "8", r: "2.2" }), _jsx("path", { d: "M8 1.8v2M8 12.2v2M1.8 8h2M12.2 8h2M3.6 3.6l1.4 1.4M11 11l1.4 1.4M3.6 12.4 5 11M11 5l1.4-1.4" })] }), "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438"] }))] })] }), _jsx("div", { className: "dsh-qa-header__tabs", children: _jsx("span", { "aria-current": "page", children: "\u0427\u0430\u0442" }) })] }) }));
25
17
  }
26
18
  //# sourceMappingURL=QaHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QaHeader.js","sourceRoot":"","sources":["../../../src/client/components/QaHeader.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QaHeader.js","sourceRoot":"","sources":["../../../src/client/components/QaHeader.tsx"],"names":[],"mappings":"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"}
@@ -3,6 +3,15 @@ import { memo, useEffect, useRef, useState } from "react";
3
3
  import { sameWorkItems } from "./QaWorkGroup.js";
4
4
  import { QaFileAttachment } from "./QaFileAttachment.js";
5
5
  import { buildSourceRefs } from "./source-refs.js";
6
+ /** The outcome line of a command row; the row already carries the name. */
7
+ function commandStateCopy(activity) {
8
+ if (activity.state === "running")
9
+ return "Выполняется…";
10
+ const text = activity.resultText?.trim() ?? "";
11
+ if (text !== "")
12
+ return text;
13
+ return activity.state === "success" ? "Готово" : "Не удалось выполнить";
14
+ }
6
15
  function QaAttachedImage({ image, resolve, }) {
7
16
  const [url, setUrl] = useState(image.previewUrl ?? null);
8
17
  useEffect(() => {
@@ -220,6 +229,13 @@ export const QaMessage = memo(function QaMessage({ message, renderMarkdown, show
220
229
  if (copiedTimer.current !== undefined)
221
230
  clearTimeout(copiedTimer.current);
222
231
  }, []);
232
+ if (message.role === "system" && message.command !== undefined) {
233
+ // A human command never enters the model conversation, so this row is
234
+ // the only place its life cycle is visible. It is a control line, not a
235
+ // message: no avatar, no bubble, no markdown.
236
+ const activity = message.command;
237
+ return (_jsxs("article", { className: "dsh-qa-command", "data-state": activity.state, "aria-label": "\u041A\u043E\u043C\u0430\u043D\u0434\u0430", children: [_jsxs("span", { className: "dsh-qa-command__line", children: [_jsx("span", { className: "dsh-qa-command__name", children: `/${activity.name}` }), (activity.args ?? "") === "" ? null : (_jsx("span", { className: "dsh-qa-command__args", children: activity.args }))] }), _jsxs("span", { className: "dsh-qa-command__state", children: [activity.state === "running" ? (_jsx("span", { className: "dsh-qa-command__spinner", "aria-hidden": "true" })) : (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: activity.state === "success" ? (_jsx("path", { d: "m3.5 8.25 3 3 6-6.5" })) : (_jsx("path", { d: "m4.5 4.5 7 7m0-7-7 7" })) })), _jsx("span", { children: commandStateCopy(activity) })] })] }));
238
+ }
223
239
  if (message.role === "system" && message.notice !== undefined) {
224
240
  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" }) })] }), _jsxs("div", { className: "dsh-qa-notice__body", children: [message.notice.meta === undefined ? null : (_jsx("p", { className: "dsh-qa-notice__meta", children: message.notice.meta })), 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)] })] }));
225
241
  }