@yadsh/dsh-qa-surface 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +148 -22
- package/compatibility.json +7 -3
- package/lib/access/capability-catalog.js +22 -6
- package/lib/access/capability-catalog.js.map +1 -1
- package/lib/access/model.js +36 -2
- package/lib/access/model.js.map +1 -1
- package/lib/access/service.js +19 -4
- package/lib/access/service.js.map +1 -1
- package/lib/account-remotes.js +4 -0
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/database.js +49 -9
- package/lib/accounts/database.js.map +1 -1
- package/lib/accounts/errors.js.map +1 -1
- package/lib/accounts/file.js.map +1 -1
- package/lib/accounts/store.js +53 -8
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/permissions.js +6 -0
- package/lib/admin/permissions.js.map +1 -1
- package/lib/admin/quality-store.js +95 -19
- package/lib/admin/quality-store.js.map +1 -1
- package/lib/admin/service.js +178 -0
- package/lib/admin/service.js.map +1 -1
- package/lib/cli.js +24 -4
- package/lib/cli.js.map +1 -1
- package/lib/client/QaAccountsController.js +52 -5
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaConfigController.js.map +1 -1
- package/lib/client/QaSessionController.js +626 -63
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +293 -43
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaSurfaceGuard.js +2 -2
- package/lib/client/QaSurfaceGuard.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +4 -2
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/admin/QaAdmin.js +59 -34
- package/lib/client/admin/QaAdmin.js.map +1 -1
- package/lib/client/admin/pages/Conversations.js +12 -12
- package/lib/client/admin/pages/Conversations.js.map +1 -1
- package/lib/client/admin/pages/ExpertMemory.js +210 -0
- package/lib/client/admin/pages/ExpertMemory.js.map +1 -0
- package/lib/client/admin/pages/Overview.js +4 -4
- package/lib/client/admin/pages/Overview.js.map +1 -1
- package/lib/client/admin/pages/Quality.js +5 -5
- package/lib/client/admin/pages/Quality.js.map +1 -1
- package/lib/client/admin/pages/Review.js +5 -5
- package/lib/client/admin/pages/Review.js.map +1 -1
- package/lib/client/admin/pages/SkillFiles.js +3 -3
- package/lib/client/admin/pages/SkillFiles.js.map +1 -1
- package/lib/client/admin/pages/Users.js +12 -12
- package/lib/client/admin/pages/Users.js.map +1 -1
- package/lib/client/admin/routes.js +4 -0
- package/lib/client/admin/routes.js.map +1 -1
- package/lib/client/admin/shared.js +15 -6
- package/lib/client/admin/shared.js.map +1 -1
- package/lib/client/admin/styles.js +3 -0
- package/lib/client/admin/styles.js.map +1 -1
- package/lib/client/attestation.js +11 -2
- package/lib/client/attestation.js.map +1 -1
- package/lib/client/audit/QaAuditDialog.js +2 -2
- package/lib/client/audit/QaAuditDialog.js.map +1 -1
- package/lib/client/audit/QaAuditRowBadge.js +1 -1
- package/lib/client/audit/QaAuditRowBadge.js.map +1 -1
- package/lib/client/components/Markdown.js +7 -2
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaAgentsDrawer.js +7 -5
- package/lib/client/components/QaAgentsDrawer.js.map +1 -1
- package/lib/client/components/QaApproval.js +2 -2
- package/lib/client/components/QaApproval.js.map +1 -1
- package/lib/client/components/QaAuthGate.js +6 -6
- package/lib/client/components/QaAuthGate.js.map +1 -1
- package/lib/client/components/QaChangelog.js +77 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaComposer.js +9 -6
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaFileAttachment.js +1 -1
- package/lib/client/components/QaFileAttachment.js.map +1 -1
- package/lib/client/components/QaFilesPanel.js +7 -7
- package/lib/client/components/QaFilesPanel.js.map +1 -1
- package/lib/client/components/QaHeader.js +4 -4
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaMessage.js +12 -12
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModal.js +11 -2
- package/lib/client/components/QaModal.js.map +1 -1
- package/lib/client/components/QaQuestions.js +4 -4
- package/lib/client/components/QaQuestions.js.map +1 -1
- package/lib/client/components/QaQueueDock.js +137 -0
- package/lib/client/components/QaQueueDock.js.map +1 -0
- package/lib/client/components/QaRequestQueue.js +22 -0
- package/lib/client/components/QaRequestQueue.js.map +1 -0
- package/lib/client/components/QaRightRail.js +2 -2
- package/lib/client/components/QaRightRail.js.map +1 -1
- package/lib/client/components/QaSidebar.js +98 -7
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +10 -8
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaThemeSwitcher.js +19 -0
- package/lib/client/components/QaThemeSwitcher.js.map +1 -0
- package/lib/client/components/QaTurnNotice.js +40 -0
- package/lib/client/components/QaTurnNotice.js.map +1 -0
- package/lib/client/components/QaTurnRail.js +3 -3
- package/lib/client/components/QaTurnRail.js.map +1 -1
- package/lib/client/components/QaWelcomeNotice.js +2 -6
- package/lib/client/components/QaWelcomeNotice.js.map +1 -1
- package/lib/client/components/QaWidthHandle.js +2 -2
- package/lib/client/components/QaWidthHandle.js.map +1 -1
- package/lib/client/components/QaWorkGroup.js +5 -5
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/components/QaWorkspaceBrowser.js +10 -10
- package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
- package/lib/client/components/VariantSwitcher.js +1 -1
- package/lib/client/components/VariantSwitcher.js.map +1 -1
- package/lib/client/failure-copy.js +26 -8
- package/lib/client/failure-copy.js.map +1 -1
- package/lib/client/focus-ring.js +193 -0
- package/lib/client/focus-ring.js.map +1 -0
- package/lib/client/index.js +40 -20
- package/lib/client/index.js.map +1 -1
- package/lib/client/lineage.js +3 -16
- package/lib/client/lineage.js.map +1 -1
- package/lib/client/markdown/CodeBlock.js +2 -2
- package/lib/client/markdown/CodeBlock.js.map +1 -1
- package/lib/client/markdown/blocks.js +118 -31
- package/lib/client/markdown/blocks.js.map +1 -1
- package/lib/client/markdown/math.js +1 -1
- package/lib/client/markdown/math.js.map +1 -1
- package/lib/client/markdown/render.js +32 -16
- package/lib/client/markdown/render.js.map +1 -1
- package/lib/client/markdown/source-chip.js +3 -3
- package/lib/client/markdown/source-chip.js.map +1 -1
- package/lib/client/notifications/notification-dispatcher.js +90 -0
- package/lib/client/notifications/notification-dispatcher.js.map +1 -0
- package/lib/client/notifications/preferences.js +61 -0
- package/lib/client/notifications/preferences.js.map +1 -0
- package/lib/client/notifications/turn-completion-source.js +82 -0
- package/lib/client/notifications/turn-completion-source.js.map +1 -0
- package/lib/client/notifications/use-turn-notifications.js +108 -0
- package/lib/client/notifications/use-turn-notifications.js.map +1 -0
- package/lib/client/panels/PanelHost.js +5 -5
- package/lib/client/panels/PanelHost.js.map +1 -1
- package/lib/client/panels/PanelLauncher.js +2 -2
- package/lib/client/panels/PanelLauncher.js.map +1 -1
- package/lib/client/project-session-state.js +156 -4
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/role/RoleSelector.js +9 -4
- package/lib/client/role/RoleSelector.js.map +1 -1
- package/lib/client/settings/card.js +58 -17
- package/lib/client/settings/card.js.map +1 -1
- package/lib/client/settings/fields.js +11 -10
- package/lib/client/settings/fields.js.map +1 -1
- package/lib/client/settings/format.js +0 -9
- package/lib/client/settings/format.js.map +1 -1
- package/lib/client/settings/sections/access.js +5 -5
- package/lib/client/settings/sections/access.js.map +1 -1
- package/lib/client/settings/sections/accounts.js +10 -10
- package/lib/client/settings/sections/accounts.js.map +1 -1
- package/lib/client/settings/sections/attachments.js +6 -6
- package/lib/client/settings/sections/attachments.js.map +1 -1
- package/lib/client/settings/sections/branding.js +7 -7
- package/lib/client/settings/sections/branding.js.map +1 -1
- package/lib/client/settings/sections/common.js +4 -2
- package/lib/client/settings/sections/common.js.map +1 -1
- package/lib/client/settings/sections/docs.js +4 -3
- package/lib/client/settings/sections/docs.js.map +1 -1
- package/lib/client/settings/sections/embedding.js +2 -2
- package/lib/client/settings/sections/embedding.js.map +1 -1
- package/lib/client/settings/sections/interface.js +12 -12
- package/lib/client/settings/sections/interface.js.map +1 -1
- package/lib/client/settings/sections/lockdown.js +9 -9
- package/lib/client/settings/sections/lockdown.js.map +1 -1
- package/lib/client/settings/sections/notes.js +12 -12
- package/lib/client/settings/sections/notes.js.map +1 -1
- package/lib/client/settings/sections/session.js +15 -12
- package/lib/client/settings/sections/session.js.map +1 -1
- package/lib/client/settings/sections/slash.js +9 -9
- package/lib/client/settings/sections/slash.js.map +1 -1
- package/lib/client/settings/sections/sources.js +26 -26
- package/lib/client/settings/sections/sources.js.map +1 -1
- package/lib/client/settings/sections/status.js +2 -2
- package/lib/client/settings/sections/status.js.map +1 -1
- package/lib/client/settings/styles.js +15 -9
- package/lib/client/settings/styles.js.map +1 -1
- package/lib/client/slash/SlashPalette.js +4 -4
- package/lib/client/slash/SlashPalette.js.map +1 -1
- package/lib/client/styles.js +145 -83
- package/lib/client/styles.js.map +1 -1
- package/lib/client/theme-preference.js +162 -0
- package/lib/client/theme-preference.js.map +1 -0
- package/lib/client/types.js +8 -0
- package/lib/client/types.js.map +1 -1
- package/lib/client/use-session-ui-state.js +7 -5
- package/lib/client/use-session-ui-state.js.map +1 -1
- package/lib/client/user-settings/GeneralSettingsPage.js +6 -6
- package/lib/client/user-settings/GeneralSettingsPage.js.map +1 -1
- package/lib/client/user-settings/IntegrationTokensPage.js +6 -6
- package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
- package/lib/client/user-settings/NotificationSettingsPage.js +107 -0
- package/lib/client/user-settings/NotificationSettingsPage.js.map +1 -0
- package/lib/client/user-settings/PasswordSettingsPage.js +1 -1
- package/lib/client/user-settings/PasswordSettingsPage.js.map +1 -1
- package/lib/client/user-settings/ProfileSettingsPage.js +2 -2
- package/lib/client/user-settings/ProfileSettingsPage.js.map +1 -1
- package/lib/client/user-settings/SkillCatalog.js +3 -3
- package/lib/client/user-settings/SkillCatalog.js.map +1 -1
- package/lib/client/user-settings/SkillEditor.js +26 -8
- package/lib/client/user-settings/SkillEditor.js.map +1 -1
- package/lib/client/user-settings/SkillToolPicker.js +3 -3
- package/lib/client/user-settings/SkillToolPicker.js.map +1 -1
- package/lib/client/user-settings/SkillsSettingsPage.js +1 -1
- package/lib/client/user-settings/SkillsSettingsPage.js.map +1 -1
- package/lib/client/user-settings/StartersSettingsPage.js +6 -6
- package/lib/client/user-settings/StartersSettingsPage.js.map +1 -1
- package/lib/client/user-settings/UserSettingsDialog.js +7 -2
- package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
- package/lib/client/user-settings/copy.js +2 -0
- package/lib/client/user-settings/copy.js.map +1 -1
- package/lib/client/user-settings/draft.js +4 -1
- package/lib/client/user-settings/draft.js.map +1 -1
- package/lib/client/user-settings/fields.js +5 -5
- package/lib/client/user-settings/fields.js.map +1 -1
- package/lib/client.js +7307 -4010
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/defaults.js +7 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/lockdown.js +7 -0
- package/lib/config-resolvers/lockdown.js.map +1 -1
- package/lib/config-resolvers/notifications.js +15 -0
- package/lib/config-resolvers/notifications.js.map +1 -0
- package/lib/config-resolvers/session.js +11 -1
- package/lib/config-resolvers/session.js.map +1 -1
- package/lib/config.js +67 -18
- package/lib/config.js.map +1 -1
- package/lib/enforcement/tool-grants.js +6 -6
- package/lib/enforcement/tool-grants.js.map +1 -1
- package/lib/index.js +145 -30
- package/lib/index.js.map +1 -1
- package/lib/integration/answer.js +74 -8
- package/lib/integration/answer.js.map +1 -1
- package/lib/integration/expert-memory.js +39 -0
- package/lib/integration/expert-memory.js.map +1 -0
- package/lib/integration/host-runner.js +26 -14
- package/lib/integration/host-runner.js.map +1 -1
- package/lib/notifications.js +66 -0
- package/lib/notifications.js.map +1 -0
- package/lib/personal-skills/errors.js.map +1 -1
- package/lib/personal-skills/service.js +81 -7
- package/lib/personal-skills/service.js.map +1 -1
- package/lib/prompt-notes.js +2 -10
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/host-store.js +8 -5
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/qa-tools/docs-tools.js +1 -1
- package/lib/qa-tools/docs-tools.js.map +1 -1
- package/lib/qa-tools/lifecycle.js +6 -3
- package/lib/qa-tools/lifecycle.js.map +1 -1
- package/lib/request-queue.js +32 -0
- package/lib/request-queue.js.map +1 -0
- package/lib/resolve-config.js +2 -0
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +7 -2
- package/lib/secure-session.js.map +1 -1
- package/lib/shared/settings.js +19 -2
- package/lib/shared/settings.js.map +1 -1
- package/lib/turn-failure-log.js +67 -0
- package/lib/turn-failure-log.js.map +1 -0
- package/lib/typert.host.js +1398 -651
- package/lib/typert.remote-client.d.ts +15 -1
- package/lib/typert.remote-client.js +1315 -645
- package/lib/types/access/capability-catalog.d.ts +20 -4
- package/lib/types/access/model.d.ts +23 -0
- package/lib/types/access/service.d.ts +2 -3
- package/lib/types/account-remotes.d.ts +8 -1
- package/lib/types/accounts/database.d.ts +13 -3
- package/lib/types/accounts/errors.d.ts +9 -1
- package/lib/types/accounts/file.d.ts +12 -0
- package/lib/types/accounts/store.d.ts +30 -2
- package/lib/types/admin/quality-store.d.ts +33 -0
- package/lib/types/admin/service.d.ts +60 -1
- package/lib/types/client/QaAccountsController.d.ts +25 -2
- package/lib/types/client/QaConfigController.d.ts +2 -2
- package/lib/types/client/QaSessionController.d.ts +199 -6
- package/lib/types/client/QaSurface.d.ts +6 -1
- package/lib/types/client/admin/pages/ExpertMemory.d.ts +19 -0
- package/lib/types/client/admin/routes.d.ts +3 -1
- package/lib/types/client/admin/shared.d.ts +4 -0
- package/lib/types/client/components/Markdown.d.ts +8 -1
- package/lib/types/client/components/QaHeader.d.ts +18 -4
- package/lib/types/client/components/QaModal.d.ts +7 -0
- package/lib/types/client/components/QaQueueDock.d.ts +27 -0
- package/lib/types/client/components/QaRequestQueue.d.ts +20 -0
- package/lib/types/client/components/QaSidebar.d.ts +14 -0
- package/lib/types/client/components/QaThemeSwitcher.d.ts +14 -0
- package/lib/types/client/components/QaTurnNotice.d.ts +55 -0
- package/lib/types/client/focus-ring.d.ts +65 -0
- package/lib/types/client/lineage.d.ts +3 -13
- package/lib/types/client/markdown/blocks.d.ts +30 -2
- package/lib/types/client/markdown/render.d.ts +4 -1
- package/lib/types/client/notifications/notification-dispatcher.d.ts +68 -0
- package/lib/types/client/notifications/preferences.d.ts +44 -0
- package/lib/types/client/notifications/turn-completion-source.d.ts +114 -0
- package/lib/types/client/notifications/use-turn-notifications.d.ts +51 -0
- package/lib/types/client/project-session-state.d.ts +35 -1
- package/lib/types/client/role/RoleSelector.d.ts +7 -1
- package/lib/types/client/settings/card.d.ts +36 -5
- package/lib/types/client/settings/fields.d.ts +24 -0
- package/lib/types/client/settings/format.d.ts +0 -5
- package/lib/types/client/settings/sections/common.d.ts +3 -1
- package/lib/types/client/settings/sections/session.d.ts +2 -1
- package/lib/types/client/settings/styles.d.ts +9 -4
- package/lib/types/client/settings-extensions/user-session.d.ts +1 -1
- package/lib/types/client/theme-preference.d.ts +69 -0
- package/lib/types/client/types.d.ts +25 -1
- package/lib/types/client/use-session-ui-state.d.ts +6 -4
- package/lib/types/client/user-settings/GeneralSettingsPage.d.ts +5 -5
- package/lib/types/client/user-settings/NotificationSettingsPage.d.ts +40 -0
- package/lib/types/client/user-settings/UserSettingsDialog.d.ts +12 -2
- package/lib/types/client/user-settings/draft.d.ts +4 -1
- package/lib/types/client/user-settings/fields.d.ts +7 -0
- package/lib/types/config-resolvers/notifications.d.ts +10 -0
- package/lib/types/config-resolvers/session.d.ts +6 -0
- package/lib/types/config.d.ts +20 -1
- package/lib/types/index.d.ts +53 -5
- package/lib/types/integration/answer.d.ts +27 -0
- package/lib/types/integration/expert-memory.d.ts +49 -0
- package/lib/types/notifications.d.ts +32 -0
- package/lib/types/personal-skills/errors.d.ts +1 -1
- package/lib/types/personal-skills/service.d.ts +6 -0
- package/lib/types/prompt-notes.d.ts +17 -4
- package/lib/types/request-queue.d.ts +32 -0
- package/lib/types/shared/settings.d.ts +19 -2
- package/lib/types/turn-failure-log.d.ts +18 -0
- package/lib/types/types.d.ts +180 -4
- package/package.json +64 -63
- package/scripts/attach-workspace-sessions.mjs +24 -5
- package/scripts/repair-session-events.mjs +25 -5
- package/lib/client/markdown/MermaidBlock.js +0 -80
- package/lib/client/markdown/MermaidBlock.js.map +0 -1
- package/lib/types/client/markdown/MermaidBlock.d.ts +0 -6
|
@@ -68,9 +68,9 @@ export function AdminConversations(props) {
|
|
|
68
68
|
useEffect(() => {
|
|
69
69
|
void load(null, false);
|
|
70
70
|
}, [load]);
|
|
71
|
-
return (_jsxs("section", { className: "dsh-qa-admin__page", "aria-label": "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B", children: [_jsx("div", { className: "dsh-qa-admin__title-row", children: _jsxs("div", { children: [_jsx("h1", { children: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B" }), _jsx("p", { children: props.userId === undefined
|
|
71
|
+
return (_jsxs("section", { className: "dsh-qa-admin__page", "data-testid": "qa-admin-conversations", "aria-label": "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B", children: [_jsx("div", { className: "dsh-qa-admin__title-row", children: _jsxs("div", { children: [_jsx("h1", { children: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B" }), _jsx("p", { children: props.userId === undefined
|
|
72
72
|
? "Все разговоры стенда."
|
|
73
|
-
: "Разговоры одного пользователя." })] }) }), _jsxs("div", { className: "dsh-qa-admin__filters", children: [_jsx(FilterField, { label: "\u041F\u043E\u0438\u0441\u043A", children: _jsx("input", { type: "search", value: search, placeholder: "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A, \u0438\u043C\u044F \u0438\u043B\u0438 \u0430\u0434\u0440\u0435\u0441", onChange: (event) => setSearch(event.currentTarget.value) }) }), _jsx(FilterField, { label: "\u041E\u0446\u0435\u043D\u043A\u0430", children: _jsxs("select", { value: rating, onChange: (event) => setRating(event.currentTarget.value), children: [_jsx("option", { value: "", children: "\u041B\u044E\u0431\u0430\u044F" }), _jsx("option", { value: "positive", children: "\u0415\u0441\u0442\u044C \uD83D\uDC4D" }), _jsx("option", { value: "negative", children: "\u0415\u0441\u0442\u044C \uD83D\uDC4E" })] }) }), _jsx(FilterField, { label: "\u0420\u0430\u0437\u0431\u043E\u0440", children: _jsxs("select", { value: reviewStatus, onChange: (event) => setReviewStatus(event.currentTarget.value), children: [_jsx("option", { value: "", children: "\u041B\u044E\u0431\u043E\u0439" }), _jsx("option", { value: "unreviewed", children: "\u041D\u0435 \u0440\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043E" }), _jsx("option", { value: "reviewed", children: "\u0420\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043E" }), _jsx("option", { value: "needs_followup", children: "\u041D\u0443\u0436\u043D\u043E \u0432\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F" })] }) }), _jsx(FilterField, { label: "\u0421 \u0434\u0430\u0442\u044B", children: _jsx("input", { type: "date", value: from, onChange: (event) => setFrom(event.currentTarget.value) }) }), _jsx(FilterField, { label: "\u041F\u043E \u0434\u0430\u0442\u0443", children: _jsx("input", { type: "date", value: to, onChange: (event) => setTo(event.currentTarget.value) }) })] }), error === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__error", role: "alert", children: error })), rows.length === 0 ? (_jsx("p", { className: "dsh-qa-admin__empty", children: loading ? "Загружаю…" : "Ничего не нашлось." })) : (_jsxs("table", { className: "dsh-qa-admin__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440" }), _jsx("th", { children: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C" }), _jsx("th", { children: "\u041F\u0440\u043E\u0444\u0438\u043B\u044C" }), _jsx("th", { children: "\u041D\u0430\u0447\u0430\u0442" }), _jsx("th", { children: "\u0410\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C" }), _jsx("th", { children: "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F" }), _jsx("th", { children: "\u041E\u0446\u0435\u043D\u043A\u0438" }), _jsx("th", { children: "\u0420\u0430\u0437\u0431\u043E\u0440" }), _jsx("th", {})] }) }), _jsx("tbody", { children: rows.map((row) => (_jsxs("tr", { children: [_jsxs("td", { children: [_jsx("strong", { children: row.title ?? "Без заголовка" }), _jsx("small", { children: row.conversationId })] }), _jsx("td", { children: row.displayName }), _jsx("td", { children: row.subroleId === "" ? "—" : row.subroleId }), _jsx("td", { children: formatStamp(row.createdAt) }), _jsx("td", { children: _jsx(Stamp, { value: row.updatedAt }) }), _jsx("td", { children: formatCount(row.messageCount) }), _jsxs("td", { children: ["\uD83D\uDC4D ", formatCount(row.positiveFeedback), " \u00B7 \uD83D\uDC4E", " ", formatCount(row.negativeFeedback)] }), _jsx("td", { children: _jsx(Badge, { tone: statusTone(row.reviewStatus), children: REVIEW_STATUS_LABELS[row.reviewStatus] }) }), _jsx("td", { children: _jsx("button", { type: "button", onClick: () => props.onOpenConversation(row.conversationId), children: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C" }) })] }, row.conversationId))) })] })), _jsx(Pager, { total: total, shown: rows.length, hasMore: cursor !== null, loading: loading, onMore: () => void load(cursor, true), onReset: () => void load(null, false) })] }));
|
|
73
|
+
: "Разговоры одного пользователя." })] }) }), _jsxs("div", { className: "dsh-qa-admin__filters", "data-testid": "qa-admin-conversations-filters", children: [_jsx(FilterField, { label: "\u041F\u043E\u0438\u0441\u043A", testId: "qa-admin-conversations-filter-search", children: _jsx("input", { type: "search", "data-testid": "qa-admin-conversations-search", value: search, placeholder: "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A, \u0438\u043C\u044F \u0438\u043B\u0438 \u0430\u0434\u0440\u0435\u0441", onChange: (event) => setSearch(event.currentTarget.value) }) }), _jsx(FilterField, { label: "\u041E\u0446\u0435\u043D\u043A\u0430", testId: "qa-admin-conversations-filter-rating", children: _jsxs("select", { "data-testid": "qa-admin-conversations-rating", value: rating, onChange: (event) => setRating(event.currentTarget.value), children: [_jsx("option", { value: "", children: "\u041B\u044E\u0431\u0430\u044F" }), _jsx("option", { value: "positive", children: "\u0415\u0441\u0442\u044C \uD83D\uDC4D" }), _jsx("option", { value: "negative", children: "\u0415\u0441\u0442\u044C \uD83D\uDC4E" })] }) }), _jsx(FilterField, { label: "\u0420\u0430\u0437\u0431\u043E\u0440", testId: "qa-admin-conversations-filter-review", children: _jsxs("select", { "data-testid": "qa-admin-conversations-review-status", value: reviewStatus, onChange: (event) => setReviewStatus(event.currentTarget.value), children: [_jsx("option", { value: "", children: "\u041B\u044E\u0431\u043E\u0439" }), _jsx("option", { value: "unreviewed", children: "\u041D\u0435 \u0440\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043E" }), _jsx("option", { value: "reviewed", children: "\u0420\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043E" }), _jsx("option", { value: "needs_followup", children: "\u041D\u0443\u0436\u043D\u043E \u0432\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F" })] }) }), _jsx(FilterField, { label: "\u0421 \u0434\u0430\u0442\u044B", testId: "qa-admin-conversations-filter-from", children: _jsx("input", { type: "date", "data-testid": "qa-admin-conversations-from", value: from, onChange: (event) => setFrom(event.currentTarget.value) }) }), _jsx(FilterField, { label: "\u041F\u043E \u0434\u0430\u0442\u0443", testId: "qa-admin-conversations-filter-to", children: _jsx("input", { type: "date", "data-testid": "qa-admin-conversations-to", value: to, onChange: (event) => setTo(event.currentTarget.value) }) })] }), error === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__error", "data-testid": "qa-admin-conversations-error", role: "alert", children: error })), rows.length === 0 ? (_jsx("p", { className: "dsh-qa-admin__empty", "data-testid": "qa-admin-conversations-empty", children: loading ? "Загружаю…" : "Ничего не нашлось." })) : (_jsxs("table", { className: "dsh-qa-admin__table", "data-testid": "qa-admin-conversations-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440" }), _jsx("th", { children: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C" }), _jsx("th", { children: "\u041F\u0440\u043E\u0444\u0438\u043B\u044C" }), _jsx("th", { children: "\u041D\u0430\u0447\u0430\u0442" }), _jsx("th", { children: "\u0410\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C" }), _jsx("th", { children: "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F" }), _jsx("th", { children: "\u041E\u0446\u0435\u043D\u043A\u0438" }), _jsx("th", { children: "\u0420\u0430\u0437\u0431\u043E\u0440" }), _jsx("th", {})] }) }), _jsx("tbody", { children: rows.map((row) => (_jsxs("tr", { "data-testid": "qa-admin-conversations-row", children: [_jsxs("td", { "data-testid": "qa-admin-conversations-cell-title", children: [_jsx("strong", { children: row.title ?? "Без заголовка" }), _jsx("small", { children: row.conversationId })] }), _jsx("td", { children: row.displayName }), _jsx("td", { children: row.subroleId === "" ? "—" : row.subroleId }), _jsx("td", { children: formatStamp(row.createdAt) }), _jsx("td", { children: _jsx(Stamp, { value: row.updatedAt }) }), _jsx("td", { children: formatCount(row.messageCount) }), _jsxs("td", { children: ["\uD83D\uDC4D ", formatCount(row.positiveFeedback), " \u00B7 \uD83D\uDC4E", " ", formatCount(row.negativeFeedback)] }), _jsx("td", { "data-testid": "qa-admin-conversations-cell-review", children: _jsx(Badge, { tone: statusTone(row.reviewStatus), children: REVIEW_STATUS_LABELS[row.reviewStatus] }) }), _jsx("td", { children: _jsx("button", { type: "button", "data-testid": "qa-admin-conversations-open", onClick: () => props.onOpenConversation(row.conversationId), children: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C" }) })] }, row.conversationId))) })] })), _jsx(Pager, { total: total, shown: rows.length, hasMore: cursor !== null, loading: loading, onMore: () => void load(cursor, true), onReset: () => void load(null, false) })] }));
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
76
|
* The review viewer: the conversation as it happened, next to the reviewer's
|
|
@@ -107,41 +107,41 @@ export function AdminConversation(props) {
|
|
|
107
107
|
}
|
|
108
108
|
}, [props.api, props.token, props.conversationId, props.onDeleted]);
|
|
109
109
|
if (resource.error !== undefined) {
|
|
110
|
-
return (_jsxs("section", { className: "dsh-qa-admin__page", children: [_jsx("p", { className: "dsh-qa-admin__error", role: "alert", children: adminErrorMessage(resource.error) }), _jsx("button", { type: "button", onClick: props.onBack, children: "\u041A \u0441\u043F\u0438\u0441\u043A\u0443" })] }));
|
|
110
|
+
return (_jsxs("section", { className: "dsh-qa-admin__page", "data-testid": "qa-admin-conversation", children: [_jsx("p", { className: "dsh-qa-admin__error", "data-testid": "qa-admin-conversation-error", role: "alert", children: adminErrorMessage(resource.error) }), _jsx("button", { type: "button", "data-testid": "qa-admin-conversation-back", onClick: props.onBack, children: "\u041A \u0441\u043F\u0438\u0441\u043A\u0443" })] }));
|
|
111
111
|
}
|
|
112
112
|
if (detail === undefined) {
|
|
113
|
-
return (_jsx("section", { className: "dsh-qa-admin__page", children: _jsx("p", { className: "dsh-qa-admin__empty", children: "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u044E \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u2026" }) }));
|
|
113
|
+
return (_jsx("section", { className: "dsh-qa-admin__page", "data-testid": "qa-admin-conversation", children: _jsx("p", { className: "dsh-qa-admin__empty", "data-testid": "qa-admin-conversation-loading", children: "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u044E \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u2026" }) }));
|
|
114
114
|
}
|
|
115
|
-
return (_jsxs("section", { className: "dsh-qa-admin__page", "aria-label": "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440", children: [_jsxs("div", { className: "dsh-qa-admin__title-row", children: [_jsxs("div", { children: [_jsx("button", { type: "button", onClick: props.onBack, children: "\u2190 \u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B" }), _jsx("h1", { children: detail.summary.title ?? "Без заголовка" }), _jsxs("p", { children: [detail.summary.displayName, " \u00B7", " ", detail.runtime.subroleId === ""
|
|
115
|
+
return (_jsxs("section", { className: "dsh-qa-admin__page", "data-testid": "qa-admin-conversation", "aria-label": "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440", children: [_jsxs("div", { className: "dsh-qa-admin__title-row", children: [_jsxs("div", { children: [_jsx("button", { type: "button", "data-testid": "qa-admin-conversation-back", onClick: props.onBack, children: "\u2190 \u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B" }), _jsx("h1", { children: detail.summary.title ?? "Без заголовка" }), _jsxs("p", { children: [detail.summary.displayName, " \u00B7", " ", detail.runtime.subroleId === ""
|
|
116
116
|
? "профиль неизвестен"
|
|
117
117
|
: detail.runtime.subroleId, " ", "\u00B7 ", formatStamp(detail.summary.createdAt), detail.runtime.model === undefined
|
|
118
118
|
? ""
|
|
119
119
|
: ` · ${detail.runtime.provider ?? ""} ${detail.runtime.model}`, detail.runtime.agentPreset === undefined
|
|
120
120
|
? ""
|
|
121
|
-
: ` · пресет ${detail.runtime.agentPreset}`, detail.runtime.adminPreview ? " · предпросмотр роли" : ""] })] }), props.canDelete ? (_jsxs("div", { className: "dsh-qa-admin__title-actions", children: [_jsx("button", { type: "button", className: "dsh-qa-admin__danger", disabled: deleting, onClick: () => void remove(), children: deleting ? "Удаляю…" : "Удалить разговор" }), deleteError === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__error", role: "alert", children: deleteError }))] })) : null] }), _jsxs("div", { className: "dsh-qa-admin__conversation", children: [_jsxs("div", { className: "dsh-qa-admin__transcript", children: [detail.runtime.transcriptUnavailable === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__error", role: "alert", children: TRANSCRIPT_UNAVAILABLE_LABELS[detail.runtime.transcriptUnavailable] })), _jsx(RuntimeFacts, { detail: detail }), detail.messages.length === 0 ? (_jsx(Empty, { children: "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u043D\u0435\u0442 \u2014 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440 \u043C\u043E\u0433 \u0431\u044B\u0442\u044C \u0441\u043E\u0437\u0434\u0430\u043D \u0438 \u043D\u0435 \u043D\u0430\u0447\u0430\u0442." })) : (detail.messages.map((message) => (_jsx(MessageRow, { message: message, highlighted: message.id === props.messageId }, message.id))))] }), _jsx(ReviewPanel, { api: props.api, token: props.token, detail: detail, canReview: props.canReview, onSaved: () => void resource.reload() })] })] }));
|
|
121
|
+
: ` · пресет ${detail.runtime.agentPreset}`, detail.runtime.adminPreview ? " · предпросмотр роли" : ""] })] }), props.canDelete ? (_jsxs("div", { className: "dsh-qa-admin__title-actions", children: [_jsx("button", { type: "button", "data-testid": "qa-admin-conversation-delete", className: "dsh-qa-admin__danger", disabled: deleting, onClick: () => void remove(), children: deleting ? "Удаляю…" : "Удалить разговор" }), deleteError === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__error", "data-testid": "qa-admin-conversation-delete-error", role: "alert", children: deleteError }))] })) : null] }), _jsxs("div", { className: "dsh-qa-admin__conversation", children: [_jsxs("div", { className: "dsh-qa-admin__transcript", "data-testid": "qa-admin-conversation-transcript", children: [detail.runtime.transcriptUnavailable === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__error", "data-testid": "qa-admin-conversation-transcript-error", role: "alert", children: TRANSCRIPT_UNAVAILABLE_LABELS[detail.runtime.transcriptUnavailable] })), _jsx(RuntimeFacts, { detail: detail }), detail.messages.length === 0 ? (_jsx(Empty, { testId: "qa-admin-conversation-transcript-empty", children: "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u043D\u0435\u0442 \u2014 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440 \u043C\u043E\u0433 \u0431\u044B\u0442\u044C \u0441\u043E\u0437\u0434\u0430\u043D \u0438 \u043D\u0435 \u043D\u0430\u0447\u0430\u0442." })) : (detail.messages.map((message) => (_jsx(MessageRow, { message: message, highlighted: message.id === props.messageId }, message.id))))] }), _jsx(ReviewPanel, { api: props.api, token: props.token, detail: detail, canReview: props.canReview, onSaved: () => void resource.reload() })] })] }));
|
|
122
122
|
}
|
|
123
123
|
function RuntimeFacts(props) {
|
|
124
124
|
const { runtime, summary } = props.detail;
|
|
125
125
|
const tools = runtime.effectiveTools ?? [];
|
|
126
126
|
const skills = runtime.effectiveSkills ?? [];
|
|
127
127
|
const loaded = runtime.loadedSkills ?? [];
|
|
128
|
-
return (_jsxs("section", { className: "dsh-qa-admin__runtime", children: [_jsx("h2", { children: "\u0427\u0442\u043E \u0431\u044B\u043B\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u0442\u043E\u0433\u0434\u0430" }), _jsxs("dl", { className: "dsh-qa-admin__facts", children: [_jsx("dt", { children: "\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E" }), _jsx("dd", { children: formatStamp(summary.createdAt) }), _jsx("dt", { children: "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C" }), _jsx("dd", { children: formatStamp(summary.updatedAt) }), _jsx("dt", { children: "\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B" }), _jsx("dd", { children: tools.length === 0
|
|
128
|
+
return (_jsxs("section", { className: "dsh-qa-admin__runtime", "data-testid": "qa-admin-conversation-runtime", children: [_jsx("h2", { children: "\u0427\u0442\u043E \u0431\u044B\u043B\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u0442\u043E\u0433\u0434\u0430" }), _jsxs("dl", { className: "dsh-qa-admin__facts", "data-testid": "qa-admin-conversation-facts", children: [_jsx("dt", { children: "\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E" }), _jsx("dd", { children: formatStamp(summary.createdAt) }), _jsx("dt", { children: "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C" }), _jsx("dd", { children: formatStamp(summary.updatedAt) }), _jsx("dt", { children: "\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B" }), _jsx("dd", { "data-testid": "qa-admin-conversation-tool-count", children: tools.length === 0
|
|
129
129
|
? "снимок не сохранён"
|
|
130
|
-
: `${formatCount(tools.length)}` }), _jsx("dt", { children: "\u041D\u0430\u0432\u044B\u043A\u0438" }), _jsx("dd", { children: skills.length === 0
|
|
130
|
+
: `${formatCount(tools.length)}` }), _jsx("dt", { children: "\u041D\u0430\u0432\u044B\u043A\u0438" }), _jsx("dd", { "data-testid": "qa-admin-conversation-skill-count", children: skills.length === 0
|
|
131
131
|
? "снимок не сохранён"
|
|
132
|
-
: formatCount(skills.length) }), _jsx("dt", { children: "\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0430\u0432\u044B\u043A\u0438" }), _jsx("dd", { children: loaded.length === 0 ? "—" : loaded.join(", ") })] }), tools.length === 0 ? null : (_jsxs("details", { children: [_jsxs("summary", { children: ["\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u0430 (", tools.length, ")"] }), _jsx("p", { className: "dsh-qa-admin__mono", children: tools.join(", ") })] })), skills.length === 0 ? null : (_jsxs("details", { children: [_jsxs("summary", { children: ["\u041D\u0430\u0432\u044B\u043A\u0438 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u0430 (", skills.length, ")"] }), _jsx("p", { className: "dsh-qa-admin__mono", children: skills.join(", ") })] }))] }));
|
|
132
|
+
: formatCount(skills.length) }), _jsx("dt", { children: "\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0430\u0432\u044B\u043A\u0438" }), _jsx("dd", { "data-testid": "qa-admin-conversation-loaded-skills", children: loaded.length === 0 ? "—" : loaded.join(", ") })] }), tools.length === 0 ? null : (_jsxs("details", { "data-testid": "qa-admin-conversation-tools", children: [_jsxs("summary", { children: ["\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u0430 (", tools.length, ")"] }), _jsx("p", { className: "dsh-qa-admin__mono", "data-testid": "qa-admin-conversation-tools-list", children: tools.join(", ") })] })), skills.length === 0 ? null : (_jsxs("details", { "data-testid": "qa-admin-conversation-skills", children: [_jsxs("summary", { children: ["\u041D\u0430\u0432\u044B\u043A\u0438 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u0430 (", skills.length, ")"] }), _jsx("p", { className: "dsh-qa-admin__mono", "data-testid": "qa-admin-conversation-skills-list", children: skills.join(", ") })] }))] }));
|
|
133
133
|
}
|
|
134
134
|
function MessageRow(props) {
|
|
135
135
|
const [open, setOpen] = useState(false);
|
|
136
136
|
const { message } = props;
|
|
137
137
|
const feedback = message.feedback ?? [];
|
|
138
138
|
const reviews = message.reviews ?? [];
|
|
139
|
-
return (_jsxs("article", { className: `dsh-qa-admin__message dsh-qa-admin__message--${message.role}${props.highlighted ? " dsh-qa-admin__message--highlighted" : ""}`, id: `message-${message.id}`, children: [_jsxs("header", { children: [_jsx("strong", { children: message.role === "user"
|
|
139
|
+
return (_jsxs("article", { className: `dsh-qa-admin__message dsh-qa-admin__message--${message.role}${props.highlighted ? " dsh-qa-admin__message--highlighted" : ""}`, "data-testid": "qa-admin-message", id: `message-${message.id}`, children: [_jsxs("header", { "data-testid": "qa-admin-message-head", children: [_jsx("strong", { "data-testid": "qa-admin-message-role", children: message.role === "user"
|
|
140
140
|
? "Пользователь"
|
|
141
141
|
: message.role === "assistant"
|
|
142
142
|
? "Ассистент"
|
|
143
|
-
: "Система" }), _jsx("time", { title: String(message.time), children: formatStamp(new Date(message.time).toISOString()) }), message.model === undefined ? null : (_jsx("span", { className: "dsh-qa-admin__mono", children: message.model })), message.interrupted === true ? (_jsx(Badge, { tone: "warning", children: "\u041F\u0440\u0435\u0440\u0432\u0430\u043D" })) : null, message.usage === undefined ? null : (_jsxs("span", { className: "dsh-qa-admin__usage", children: [formatCount(message.usage.inputTokens), " \u2192", " ", formatCount(message.usage.outputTokens), " \u0442\u043E\u043A\u0435\u043D\u043E\u0432"] })), feedback.map((row) => (_jsxs(Badge, { tone: row.rating === "positive" ? "positive" : "negative", children: [row.rating === "positive" ? "👍" : "👎", row.reasons === undefined || row.reasons.length === 0
|
|
143
|
+
: "Система" }), _jsx("time", { title: String(message.time), children: formatStamp(new Date(message.time).toISOString()) }), message.model === undefined ? null : (_jsx("span", { className: "dsh-qa-admin__mono", "data-testid": "qa-admin-message-model", children: message.model })), message.interrupted === true ? (_jsx(Badge, { tone: "warning", testId: "qa-admin-message-interrupted", children: "\u041F\u0440\u0435\u0440\u0432\u0430\u043D" })) : null, message.usage === undefined ? null : (_jsxs("span", { className: "dsh-qa-admin__usage", "data-testid": "qa-admin-message-usage", children: [formatCount(message.usage.inputTokens), " \u2192", " ", formatCount(message.usage.outputTokens), " \u0442\u043E\u043A\u0435\u043D\u043E\u0432"] })), feedback.map((row) => (_jsxs(Badge, { testId: "qa-admin-message-feedback", tone: row.rating === "positive" ? "positive" : "negative", children: [row.rating === "positive" ? "👍" : "👎", row.reasons === undefined || row.reasons.length === 0
|
|
144
144
|
? ""
|
|
145
|
-
: ` ${row.reasons.length}`] }, row.id))), reviews.length === 0 ? null : (_jsxs(Badge, { tone: "neutral", children: ["\u0440\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043E: ", reviews[0]?.severity] }))] }), _jsx("p", { className: "dsh-qa-admin__message-text", children: message.text === "" ? "(пустой текст)" : message.text }), feedback.map((row) => row.comment === undefined ? null : (_jsxs("p", { className: "dsh-qa-admin__comment", children: ["\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439: ", row.comment] }, `${row.id}:comment`))), (message.toolCalls ?? []).length === 0 ? null : (_jsxs("div", { className: "dsh-qa-admin__tools", children: [_jsxs("button", { type: "button", "aria-expanded": open, onClick: () => setOpen((value) => !value), children: [_jsx("svg", { className: `dsh-qa-admin__disclosure${open ? " dsh-qa-admin__disclosure--open" : ""}`, viewBox: "0 0
|
|
145
|
+
: ` ${row.reasons.length}`] }, row.id))), reviews.length === 0 ? null : (_jsxs(Badge, { tone: "neutral", testId: "qa-admin-message-review", children: ["\u0440\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043E: ", reviews[0]?.severity] }))] }), _jsx("p", { className: "dsh-qa-admin__message-text", "data-testid": "qa-admin-message-text", children: message.text === "" ? "(пустой текст)" : message.text }), feedback.map((row) => row.comment === undefined ? null : (_jsxs("p", { className: "dsh-qa-admin__comment", "data-testid": "qa-admin-message-comment", children: ["\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439: ", row.comment] }, `${row.id}:comment`))), (message.toolCalls ?? []).length === 0 ? null : (_jsxs("div", { className: "dsh-qa-admin__tools", "data-testid": "qa-admin-message-tools", children: [_jsxs("button", { type: "button", "data-testid": "qa-admin-message-tools-toggle", "aria-expanded": open, onClick: () => setOpen((value) => !value), children: [_jsx("svg", { className: `dsh-qa-admin__disclosure${open ? " dsh-qa-admin__disclosure--open" : ""}`, viewBox: "0 0 16 16", width: "14", height: "14", "aria-hidden": "true", children: _jsx("path", { d: "m4 6 4 4 4-4", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }), "\u0432\u044B\u0437\u043E\u0432\u044B \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 (", (message.toolCalls ?? []).length, ")"] }), open ? (_jsx("ol", { "data-testid": "qa-admin-message-tool-list", children: (message.toolCalls ?? []).map((call) => (_jsxs("li", { "data-testid": "qa-admin-message-tool", children: [_jsx("strong", { className: "dsh-qa-admin__mono", "data-testid": "qa-admin-message-tool-name", children: call.name }), call.error === undefined ? null : (_jsxs(Badge, { tone: "negative", testId: "qa-admin-message-tool-error", children: ["\u0441\u0431\u043E\u0439: ", call.error] })), call.durationMs === undefined ? null : (_jsx("span", { children: formatDuration(call.durationMs) })), _jsx("pre", { "data-testid": "qa-admin-message-tool-args", children: call.arguments }), call.result === undefined ? null : (_jsx("pre", { "data-testid": "qa-admin-message-tool-result", children: call.result }))] }, call.callId))) })) : null] }))] }));
|
|
146
146
|
}
|
|
147
147
|
//# sourceMappingURL=Conversations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Conversations.js","sourceRoot":"","sources":["../../../../src/client/admin/pages/Conversations.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Conversations.js","sourceRoot":"","sources":["../../../../src/client/admin/pages/Conversations.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { Badge, Empty, ErrorLine, FilterField, Pager, Stamp, adminErrorMessage, useAdminResource, useRequestSlot, } from "../shared.js";
|
|
4
|
+
const PAGE_SIZE = 25;
|
|
5
|
+
/** Tags cross the wire as a list; an operator edits them as one line. */
|
|
6
|
+
function parseTags(value) {
|
|
7
|
+
return [
|
|
8
|
+
...new Set(value
|
|
9
|
+
.split(",")
|
|
10
|
+
.map((tag) => tag.trim())
|
|
11
|
+
.filter((tag) => tag !== "")),
|
|
12
|
+
];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* What the domain experts remembered.
|
|
16
|
+
*
|
|
17
|
+
* An expert writes its own notes, and a note that turned out to be wrong keeps
|
|
18
|
+
* being injected into every later answer of that domain until someone deletes
|
|
19
|
+
* it. This page is for that someone. The edit is deliberately narrow — the text
|
|
20
|
+
* and its tags, never the key, which is what the audit trail and the expert's
|
|
21
|
+
* own `forget` calls point at.
|
|
22
|
+
*
|
|
23
|
+
* A reviewer opens the same list read-only: seeing what an expert believes is
|
|
24
|
+
* the half of the job that produces the report "this is wrong".
|
|
25
|
+
*/
|
|
26
|
+
export function AdminExpertMemory(props) {
|
|
27
|
+
const { api, token, canManage } = props;
|
|
28
|
+
const [namespace, setNamespace] = useState("");
|
|
29
|
+
const [query, setQuery] = useState("");
|
|
30
|
+
const [rows, setRows] = useState([]);
|
|
31
|
+
const [total, setTotal] = useState(0);
|
|
32
|
+
const [loading, setLoading] = useState(true);
|
|
33
|
+
const [listError, setListError] = useState();
|
|
34
|
+
const [selected, setSelected] = useState(() => new Set());
|
|
35
|
+
const [editing, setEditing] = useState();
|
|
36
|
+
const [busy, setBusy] = useState(false);
|
|
37
|
+
const [actionError, setActionError] = useState();
|
|
38
|
+
const [notice, setNotice] = useState();
|
|
39
|
+
const request = useRequestSlot();
|
|
40
|
+
const scopes = useAdminResource(() => api.memoryScopes(token), [api, token]);
|
|
41
|
+
const available = useMemo(() => scopes.data ?? [], [scopes.data]);
|
|
42
|
+
// What the page reads is the selection or, before anyone picks, the first
|
|
43
|
+
// namespace the stand has. A namespace that stopped existing (an expert
|
|
44
|
+
// deleted while this page was open) falls back instead of asking the Host for
|
|
45
|
+
// something no expert claims.
|
|
46
|
+
const active = useMemo(() => {
|
|
47
|
+
if (available.some((entry) => entry.namespace === namespace)) {
|
|
48
|
+
return namespace;
|
|
49
|
+
}
|
|
50
|
+
return namespace === "" ? (available[0]?.namespace ?? "") : "";
|
|
51
|
+
}, [available, namespace]);
|
|
52
|
+
const scope = available.find((entry) => entry.namespace === active);
|
|
53
|
+
const writable = canManage && scope?.access === "read-write";
|
|
54
|
+
const load = useCallback(async (from, append) => {
|
|
55
|
+
if (active === "") {
|
|
56
|
+
setRows([]);
|
|
57
|
+
setTotal(0);
|
|
58
|
+
setLoading(false);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const controller = request.start();
|
|
62
|
+
setLoading(true);
|
|
63
|
+
const result = await api.memoryRecords(token, active, query, PAGE_SIZE, from);
|
|
64
|
+
// A page the operator changed or left while the Host was still reading it
|
|
65
|
+
// has no answer worth showing.
|
|
66
|
+
if (controller.signal.aborted)
|
|
67
|
+
return;
|
|
68
|
+
setLoading(false);
|
|
69
|
+
if (!result.ok) {
|
|
70
|
+
setListError(adminErrorMessage(result.error));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
setListError(undefined);
|
|
74
|
+
setTotal(result.value.total);
|
|
75
|
+
setRows((current) => append ? [...current, ...result.value.records] : result.value.records);
|
|
76
|
+
}, [request, api, token, active, query]);
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
void load(0, false);
|
|
79
|
+
}, [load]);
|
|
80
|
+
// Selection and the open editor belong to the list they were made against: a
|
|
81
|
+
// new filter, another namespace, or another minute of experts writing means
|
|
82
|
+
// the ticks no longer name what the operator saw.
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
setSelected(new Set());
|
|
85
|
+
setEditing(undefined);
|
|
86
|
+
setNotice(undefined);
|
|
87
|
+
}, [active, query]);
|
|
88
|
+
/** One maintenance write, then the fresh list: the store is not the browser's. */
|
|
89
|
+
const mutate = useCallback(async (message, action) => {
|
|
90
|
+
setBusy(true);
|
|
91
|
+
setActionError(undefined);
|
|
92
|
+
try {
|
|
93
|
+
const failure = await action();
|
|
94
|
+
if (failure !== undefined) {
|
|
95
|
+
setActionError(failure);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
setNotice(message());
|
|
99
|
+
await load(0, false);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
setActionError(adminErrorMessage(error));
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
setBusy(false);
|
|
106
|
+
}
|
|
107
|
+
}, [load]);
|
|
108
|
+
const save = useCallback((key, text, tags) => mutate(() => `Запись ${key} исправлена.`, async () => {
|
|
109
|
+
const result = await api.correctMemory(token, active, key, {
|
|
110
|
+
text,
|
|
111
|
+
tags,
|
|
112
|
+
});
|
|
113
|
+
if (result.ok)
|
|
114
|
+
return undefined;
|
|
115
|
+
setEditing(undefined);
|
|
116
|
+
return adminErrorMessage(result.error);
|
|
117
|
+
}), [api, token, active, mutate]);
|
|
118
|
+
const forget = useCallback((keys) => {
|
|
119
|
+
// The ticks are spent the moment they are acted on: a failed write leaves
|
|
120
|
+
// them cleared too, and re-selecting is cheaper than tracking which of
|
|
121
|
+
// them the Host honoured.
|
|
122
|
+
setSelected(new Set());
|
|
123
|
+
return mutate(() => keys.length === 1
|
|
124
|
+
? `Запись ${keys[0] ?? ""} удалена.`
|
|
125
|
+
: `Удалено записей: ${String(keys.length)}.`, async () => {
|
|
126
|
+
const result = await api.forgetMemory(token, active, keys);
|
|
127
|
+
if (result.ok)
|
|
128
|
+
return undefined;
|
|
129
|
+
return adminErrorMessage(result.error);
|
|
130
|
+
});
|
|
131
|
+
}, [api, token, active, mutate]);
|
|
132
|
+
const wipe = useCallback(() => mutate(() => `Пространство ${active} очищено.`, async () => {
|
|
133
|
+
// The count the operator was shown is the count they agreed to erase;
|
|
134
|
+
// what an expert wrote in the meantime is not part of that.
|
|
135
|
+
const result = await api.wipeMemory(token, active, total);
|
|
136
|
+
if (result.ok)
|
|
137
|
+
return undefined;
|
|
138
|
+
return adminErrorMessage(result.error);
|
|
139
|
+
}), [api, token, active, total, mutate]);
|
|
140
|
+
// The scope list is the page's authorization probe as well: a role the Host
|
|
141
|
+
// refuses answers with a reason code, and the console is the side that knows
|
|
142
|
+
// how to phrase it.
|
|
143
|
+
const failure = (scopes.error === undefined
|
|
144
|
+
? undefined
|
|
145
|
+
: adminErrorMessage(scopes.error)) ??
|
|
146
|
+
listError ??
|
|
147
|
+
actionError;
|
|
148
|
+
return (_jsxs("section", { className: "dsh-qa-admin__page", "data-testid": "qa-admin-memory", "aria-label": "\u041F\u0430\u043C\u044F\u0442\u044C \u044D\u043A\u0441\u043F\u0435\u0440\u0442\u043E\u0432", children: [_jsxs("div", { className: "dsh-qa-admin__title-row", children: [_jsxs("div", { children: [_jsx("h1", { children: "\u041F\u0430\u043C\u044F\u0442\u044C \u044D\u043A\u0441\u043F\u0435\u0440\u0442\u043E\u0432" }), _jsxs("p", { children: ["\u0427\u0442\u043E \u0434\u043E\u043C\u0435\u043D\u044B \u0437\u0430\u043F\u0438\u0441\u0430\u043B\u0438 \u0441\u0435\u0431\u0435 \u0441\u0430\u043C\u0438 \u2014 \u044D\u0442\u043E \u043F\u043E\u0434\u043C\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0432 \u043A\u0430\u0436\u0434\u044B\u0439 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u043E\u0442\u0432\u0435\u0442 \u0442\u043E\u0439 \u0436\u0435 \u043E\u0431\u043B\u0430\u0441\u0442\u0438. \u041D\u0435\u0442\u043E\u0447\u043D\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0438\u043B\u0438 \u0443\u0434\u0430\u043B\u0438\u0442\u044C. \u041A\u043B\u044E\u0447 \u0437\u0430\u043F\u0438\u0441\u0438 \u043E\u0441\u0442\u0430\u0451\u0442\u0441\u044F: \u043D\u0430 \u043D\u0435\u0433\u043E \u0441\u0441\u044B\u043B\u0430\u0435\u0442\u0441\u044F \u0436\u0443\u0440\u043D\u0430\u043B \u043F\u0440\u0430\u0432\u043E\u043A \u0438 \u0441\u0430\u043C \u044D\u043A\u0441\u043F\u0435\u0440\u0442.", canManage
|
|
149
|
+
? ""
|
|
150
|
+
: " Роль ревьюера видит память, но не правит её — для правки нужен администратор."] })] }), canManage && active !== "" && total > 0 ? (_jsxs("div", { className: "dsh-qa-admin__title-actions", children: [_jsx("button", { type: "button", "data-testid": "qa-admin-memory-wipe", className: "dsh-qa-admin__danger", disabled: busy || !writable, onClick: () => {
|
|
151
|
+
if (!window.confirm(`Очистить всю память ${active}? Будет удалено ${String(total)} записей. Эксперты перестанут помнить то, что было записано в этом пространстве, и восстановить это будет нельзя.`))
|
|
152
|
+
return;
|
|
153
|
+
void wipe();
|
|
154
|
+
}, children: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E" }), writable ? null : (_jsx("p", { className: "dsh-qa-admin__panel-note", children: "\u042D\u0442\u043E \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \u0432\u0441\u0435\u043C\u0438 \u0434\u043E\u043C\u0435\u043D\u044B \u0438 \u043F\u0440\u0430\u0432\u0438\u0442\u0441\u044F \u0443 \u0441\u0432\u043E\u0435\u0433\u043E \u0432\u043B\u0430\u0434\u0435\u043B\u044C\u0446\u0430." }))] })) : null] }), _jsx(ErrorLine, { message: failure, testId: "qa-admin-memory-error" }), notice === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__notice", "data-testid": "qa-admin-memory-notice", children: notice })), available.length === 0 ? (failure === undefined ? (_jsx(Empty, { children: scopes.loading
|
|
155
|
+
? "Загружаю…"
|
|
156
|
+
: "На этом стенде нет экспертов с памятью: плагин доменов не установлен, выключен, или ни один эксперт ещё ничего не записал." })) : null) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-qa-admin__filters", "data-testid": "qa-admin-memory-filters", children: [_jsx(FilterField, { label: "\u042D\u043A\u0441\u043F\u0435\u0440\u0442", testId: "qa-admin-memory-filter-expert", children: _jsx("select", { "data-testid": "qa-admin-memory-expert", value: active, onChange: (event) => setNamespace(event.currentTarget.value), children: available.map((entry) => (_jsxs("option", { value: entry.namespace, children: [entry.domainName, " \u00B7 ", entry.namespace, " \u00B7", " ", String(entry.records)] }, `${entry.domainId}:${entry.namespace}`))) }) }), _jsx(FilterField, { label: "\u041F\u043E\u0438\u0441\u043A", testId: "qa-admin-memory-filter-search", children: _jsx("input", { type: "search", "data-testid": "qa-admin-memory-search", value: query, placeholder: "\u0422\u0435\u043A\u0441\u0442, \u043A\u043B\u044E\u0447 \u0438\u043B\u0438 \u0442\u0435\u0433", onChange: (event) => setQuery(event.currentTarget.value) }) })] }), selected.size > 0 && writable ? (_jsxs("div", { className: "dsh-qa-admin__actions", "data-testid": "qa-admin-memory-bulk-actions", children: [_jsxs("button", { type: "button", "data-testid": "qa-admin-memory-delete-selected", className: "dsh-qa-admin__danger", disabled: busy, onClick: () => {
|
|
157
|
+
const keys = [...selected];
|
|
158
|
+
if (!window.confirm(`Удалить выбранные записи (${String(keys.length)})?`))
|
|
159
|
+
return;
|
|
160
|
+
void forget(keys);
|
|
161
|
+
}, children: ["\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435 (", String(selected.size), ")"] }), _jsx("button", { type: "button", "data-testid": "qa-admin-memory-clear-selection", onClick: () => setSelected(new Set()), children: "\u0421\u043D\u044F\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435" })] })) : null, rows.length === 0 ? (_jsx(Empty, { children: loading
|
|
162
|
+
? "Загружаю…"
|
|
163
|
+
: query === ""
|
|
164
|
+
? "В этом пространстве пока ничего не записано."
|
|
165
|
+
: "Ничего не нашлось по этому запросу." })) : (_jsxs("table", { className: "dsh-qa-admin__table", "data-testid": "qa-admin-memory-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [writable ? (_jsx("th", { children: _jsx("input", { type: "checkbox", "aria-label": "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435 \u0437\u0430\u043F\u0438\u0441\u0438 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435", "data-testid": "qa-admin-memory-select-all", checked: selected.size === rows.length, onChange: (event) => setSelected(event.currentTarget.checked
|
|
166
|
+
? new Set(rows.map((row) => row.key))
|
|
167
|
+
: new Set()) }) })) : null, _jsx("th", { children: "\u0417\u0430\u043F\u0438\u0441\u044C" }), _jsx("th", { children: "\u0427\u0442\u043E \u0437\u0430\u043F\u043E\u043C\u043D\u0438\u043B\u043E\u0441\u044C" }), _jsx("th", {})] }) }), _jsx("tbody", { children: rows.map((record) => (_jsx(MemoryRow, { record: record, writable: writable, busy: busy, selected: selected.has(record.key), editing: editing === record.key, onSelect: (on) => setSelected((current) => {
|
|
168
|
+
const next = new Set(current);
|
|
169
|
+
if (on)
|
|
170
|
+
next.add(record.key);
|
|
171
|
+
else
|
|
172
|
+
next.delete(record.key);
|
|
173
|
+
return next;
|
|
174
|
+
}), onEdit: () => setEditing(record.key), onCancel: () => setEditing(undefined), onSave: (text, tags) => {
|
|
175
|
+
setEditing(undefined);
|
|
176
|
+
void save(record.key, text, tags);
|
|
177
|
+
}, onDelete: () => {
|
|
178
|
+
if (!window.confirm(`Удалить запись ${record.key}? Эксперты больше не будут её помнить.`))
|
|
179
|
+
return;
|
|
180
|
+
void forget([record.key]);
|
|
181
|
+
} }, record.key))) })] })), _jsx(Pager, { total: total, shown: rows.length, hasMore: rows.length < total, loading: loading, onMore: () => void load(rows.length, true), onReset: () => void load(0, false) })] }))] }));
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* One remembered line, and the editor it opens into.
|
|
185
|
+
*
|
|
186
|
+
* The draft lives with the row: text and tags are edited together, and lifting
|
|
187
|
+
* them to the page would mean the page tracking which record each keystroke
|
|
188
|
+
* belongs to for no benefit the operator can see.
|
|
189
|
+
*/
|
|
190
|
+
function MemoryRow(props) {
|
|
191
|
+
const { record } = props;
|
|
192
|
+
const [text, setText] = useState(record.text);
|
|
193
|
+
const [tags, setTags] = useState(record.tags.join(", "));
|
|
194
|
+
// The row shows what the store holds. When a reload brings a newer version of
|
|
195
|
+
// the same key — an expert wrote it again while the editor was open — the
|
|
196
|
+
// draft is describing a record that no longer exists, so it is dropped.
|
|
197
|
+
const [shown, setShown] = useState(record.updatedAt);
|
|
198
|
+
if (shown !== record.updatedAt) {
|
|
199
|
+
setShown(record.updatedAt);
|
|
200
|
+
setText(record.text);
|
|
201
|
+
setTags(record.tags.join(", "));
|
|
202
|
+
}
|
|
203
|
+
const unchanged = text === record.text && tags.trim() === record.tags.join(", ").trim();
|
|
204
|
+
return (_jsxs("tr", { "data-testid": "qa-admin-memory-row", children: [props.writable ? (_jsx("td", { children: _jsx("input", { type: "checkbox", "aria-label": `Выбрать запись ${record.key}`, "data-testid": "qa-admin-memory-select", checked: props.selected, disabled: props.editing, onChange: (event) => props.onSelect(event.currentTarget.checked) }) })) : null, _jsxs("td", { "data-testid": "qa-admin-memory-key-cell", children: [_jsx("strong", { "data-testid": "qa-admin-memory-key", children: record.key }), _jsxs("small", { children: ["\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0430 ", _jsx(Stamp, { value: new Date(record.updatedAt).toISOString() })] }), record.tags.length === 0 ? null : (_jsx("small", { "data-testid": "qa-admin-memory-tags", children: record.tags.join(", ") }))] }), _jsx("td", { children: props.editing ? (_jsxs("div", { className: "dsh-qa-admin__memory-editor", "data-testid": "qa-admin-memory-editor", children: [_jsx("textarea", { "aria-label": `Текст записи ${record.key}`, "data-testid": "qa-admin-memory-text-input", rows: 5, value: text, onChange: (event) => setText(event.currentTarget.value) }), _jsx("input", { type: "text", "aria-label": `Теги записи ${record.key}`, "data-testid": "qa-admin-memory-tag-input", placeholder: "\u0442\u0435\u0433\u0438, \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043F\u044F\u0442\u0443\u044E", value: tags, onChange: (event) => setTags(event.currentTarget.value) }), _jsxs("div", { className: "dsh-qa-admin__actions", "data-testid": "qa-admin-memory-editor-actions", children: [_jsx("button", { type: "button", "data-testid": "qa-admin-memory-save", disabled: props.busy || unchanged || text.trim() === "", onClick: () => props.onSave(text, parseTags(tags)), children: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C" }), _jsx("button", { type: "button", "data-testid": "qa-admin-memory-cancel", disabled: props.busy, onClick: () => {
|
|
205
|
+
setText(record.text);
|
|
206
|
+
setTags(record.tags.join(", "));
|
|
207
|
+
props.onCancel();
|
|
208
|
+
}, children: "\u041E\u0442\u043C\u0435\u043D\u0430" })] })] })) : (_jsx("p", { className: "dsh-qa-admin__memory-text", "data-testid": "qa-admin-memory-text", children: record.text })) }), _jsx("td", { children: props.writable ? (_jsxs("div", { className: "dsh-qa-admin__actions", "data-testid": "qa-admin-memory-row-actions", children: [props.editing ? null : (_jsx("button", { type: "button", "data-testid": "qa-admin-memory-edit", disabled: props.busy, onClick: props.onEdit, children: "\u041F\u0440\u0430\u0432\u0438\u0442\u044C" })), _jsx("button", { type: "button", "data-testid": "qa-admin-memory-delete", className: "dsh-qa-admin__danger", disabled: props.busy || props.editing, onClick: props.onDelete, children: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C" })] })) : (_jsx(Badge, { tone: "warning", testId: "qa-admin-memory-readonly", children: "\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435" })) })] }));
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=ExpertMemory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpertMemory.js","sourceRoot":"","sources":["../../../../src/client/admin/pages/ExpertMemory.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,17 +8,17 @@ import { FEEDBACK_REASON_LABELS, REVIEW_PRIORITY_LABELS, REVIEW_REASON_LABELS, f
|
|
|
8
8
|
* the harness's own telemetry.
|
|
9
9
|
*/
|
|
10
10
|
function Metric(props) {
|
|
11
|
-
return (_jsxs("article", { className: "dsh-qa-admin__metric", children: [_jsx("span", { className: "dsh-qa-admin__metric-label", children: props.label }), _jsx("strong", { className: "dsh-qa-admin__metric-value", children: props.value }), props.hint === undefined ? null : (_jsx("small", { className: "dsh-qa-admin__metric-hint", children: props.hint }))] }));
|
|
11
|
+
return (_jsxs("article", { className: "dsh-qa-admin__metric", "data-testid": props.testId, children: [_jsx("span", { className: "dsh-qa-admin__metric-label", "data-testid": `${props.testId}-label`, children: props.label }), _jsx("strong", { className: "dsh-qa-admin__metric-value", "data-testid": `${props.testId}-value`, children: props.value }), props.hint === undefined ? null : (_jsx("small", { className: "dsh-qa-admin__metric-hint", "data-testid": `${props.testId}-hint`, children: props.hint }))] }));
|
|
12
12
|
}
|
|
13
13
|
export function AdminOverview(props) {
|
|
14
14
|
const { data, error, reload } = useAdminResource((signal) => props.api.overview(props.token, signal), [props.api, props.token]);
|
|
15
|
-
return (_jsxs("section", { className: "dsh-qa-admin__page", "aria-label": "\u041E\u0431\u0437\u043E\u0440", children: [_jsxs("div", { className: "dsh-qa-admin__title-row", children: [_jsxs("div", { children: [_jsx("h1", { children: "\u041E\u0431\u0437\u043E\u0440" }), _jsx("p", { children: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435, \u043E\u0431\u0440\u0430\u0442\u043D\u0430\u044F \u0441\u0432\u044F\u0437\u044C \u0438 \u0440\u0430\u0437\u0431\u043E\u0440 \u043E\u0442\u0432\u0435\u0442\u043E\u0432." })] }), _jsx("button", { type: "button", onClick: () => void reload(), children: "\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C" })] }), error === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__error", role: "alert", children: error })), data === undefined ? (_jsx("p", { className: "dsh-qa-admin__empty", children: "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u044E\u2026" })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-qa-admin__metrics", children: [_jsx(Metric, { label: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B", value: formatCount(data.metrics.conversations), hint: `${formatCount(data.metrics.activeUsers)} пользователей` }), _jsx(Metric, { label: "\u041E\u0446\u0435\u043D\u0451\u043D\u043D\u044B\u0435 \u043E\u0442\u0432\u0435\u0442\u044B", value: formatCount(data.metrics.ratedMessages), hint: `${formatRate(data.metrics.ratingRate)} от ответов` }), _jsx(Metric, { label: "\u041F\u043E\u043B\u043E\u0436\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043E\u0446\u0435\u043D\u043A\u0438", value: formatRate(data.metrics.positiveRate), hint: `👍 ${formatCount(data.metrics.positiveRatings)} · 👎 ${formatCount(data.metrics.negativeRatings)}` }), _jsx(Metric, { label: "\u0416\u0434\u0443\u0442 \u0440\u0430\u0437\u0431\u043E\u0440\u0430", value: formatCount(data.metrics.unreviewedNegatives), hint: `разобрано: ${formatCount(data.metrics.reviewedItems)}` })] }), _jsxs("section", { className: "dsh-qa-admin__panel", children: [_jsx("h2", { children: "\u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u044F" }), data.alerts.length === 0 ? (_jsx("p", { className: "dsh-qa-admin__empty", children: "\u041D\u0438\u0447\u0435\u0433\u043E \u0441\u0440\u043E\u0447\u043D\u043E\u0433\u043E: \u043D\u0435\u0440\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u043D\u0435\u0433\u0430\u0442\u0438\u0432\u043D\u044B\u0445 \u043E\u0446\u0435\u043D\u043E\u043A \u043D\u0435\u0442." })) : (_jsx("ul", { className: "dsh-qa-admin__alerts", children: data.alerts.map((alert, index) => (_jsx("li", { className: `dsh-qa-admin__alert dsh-qa-admin__alert--${alert.level}`, children: alert.code === "unreviewed-negatives"
|
|
15
|
+
return (_jsxs("section", { className: "dsh-qa-admin__page", "data-testid": "qa-admin-overview", "aria-label": "\u041E\u0431\u0437\u043E\u0440", children: [_jsxs("div", { className: "dsh-qa-admin__title-row", children: [_jsxs("div", { children: [_jsx("h1", { children: "\u041E\u0431\u0437\u043E\u0440" }), _jsx("p", { children: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435, \u043E\u0431\u0440\u0430\u0442\u043D\u0430\u044F \u0441\u0432\u044F\u0437\u044C \u0438 \u0440\u0430\u0437\u0431\u043E\u0440 \u043E\u0442\u0432\u0435\u0442\u043E\u0432." })] }), _jsx("button", { type: "button", "data-testid": "qa-admin-overview-reload", onClick: () => void reload(), children: "\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C" })] }), error === undefined ? null : (_jsx("p", { className: "dsh-qa-admin__error", "data-testid": "qa-admin-overview-error", role: "alert", children: error })), data === undefined ? (_jsx("p", { className: "dsh-qa-admin__empty", "data-testid": "qa-admin-overview-loading", children: "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u044E\u2026" })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-qa-admin__metrics", "data-testid": "qa-admin-overview-metrics", children: [_jsx(Metric, { testId: "qa-admin-metric-conversations", label: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B", value: formatCount(data.metrics.conversations), hint: `${formatCount(data.metrics.activeUsers)} пользователей` }), _jsx(Metric, { testId: "qa-admin-metric-rated", label: "\u041E\u0446\u0435\u043D\u0451\u043D\u043D\u044B\u0435 \u043E\u0442\u0432\u0435\u0442\u044B", value: formatCount(data.metrics.ratedMessages), hint: `${formatRate(data.metrics.ratingRate)} от ответов` }), _jsx(Metric, { testId: "qa-admin-metric-positive", label: "\u041F\u043E\u043B\u043E\u0436\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043E\u0446\u0435\u043D\u043A\u0438", value: formatRate(data.metrics.positiveRate), hint: `👍 ${formatCount(data.metrics.positiveRatings)} · 👎 ${formatCount(data.metrics.negativeRatings)}` }), _jsx(Metric, { testId: "qa-admin-metric-unreviewed", label: "\u0416\u0434\u0443\u0442 \u0440\u0430\u0437\u0431\u043E\u0440\u0430", value: formatCount(data.metrics.unreviewedNegatives), hint: `разобрано: ${formatCount(data.metrics.reviewedItems)}` })] }), _jsxs("section", { className: "dsh-qa-admin__panel", "data-testid": "qa-admin-overview-alerts", children: [_jsx("h2", { children: "\u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u044F" }), data.alerts.length === 0 ? (_jsx("p", { className: "dsh-qa-admin__empty", "data-testid": "qa-admin-overview-alerts-empty", children: "\u041D\u0438\u0447\u0435\u0433\u043E \u0441\u0440\u043E\u0447\u043D\u043E\u0433\u043E: \u043D\u0435\u0440\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u043D\u0435\u0433\u0430\u0442\u0438\u0432\u043D\u044B\u0445 \u043E\u0446\u0435\u043D\u043E\u043A \u043D\u0435\u0442." })) : (_jsx("ul", { className: "dsh-qa-admin__alerts", "data-testid": "qa-admin-overview-alert-list", children: data.alerts.map((alert, index) => (_jsx("li", { "data-testid": "qa-admin-overview-alert", className: `dsh-qa-admin__alert dsh-qa-admin__alert--${alert.level}`, children: alert.code === "unreviewed-negatives"
|
|
16
16
|
? `${formatCount(alert.count)} негативных оценок без разбора`
|
|
17
17
|
: alert.code === "subrole-satisfaction"
|
|
18
18
|
? `Роль «${alert.subject}»: положительных ${formatRate(alert.rate ?? null)} против общей доли`
|
|
19
|
-
: `Причина «${FEEDBACK_REASON_LABELS[alert.subject] ?? alert.subject}» повторяется ${formatCount(alert.count)} раз` }, `${alert.code}:${alert.subject ?? index}`))) }))] }), _jsxs("section", { className: "dsh-qa-admin__panel", children: [_jsxs("div", { className: "dsh-qa-admin__panel-head", children: [_jsx("h2", { children: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u0440\u0430\u0437\u0431\u043E\u0440\u0430" }), _jsx("button", { type: "button", onClick: props.onOpenQueue, children: "\u0412\u0441\u044F \u043E\u0447\u0435\u0440\u0435\u0434\u044C" })] }), _jsx(QueuePreview, { rows: data.queue, onOpenConversation: props.onOpenConversation })] }), _jsxs("section", { className: "dsh-qa-admin__panel", children: [_jsx("h2", { children: "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u043E\u0446\u0435\u043D\u043A\u0438" }), data.recentFeedback.length === 0 ? (_jsx("p", { className: "dsh-qa-admin__empty", children: "\u041E\u0446\u0435\u043D\u043E\u043A \u043F\u043E\u043A\u0430 \u043D\u0435\u0442." })) : (_jsx("ul", { className: "dsh-qa-admin__recent", children: data.recentFeedback.map((row) => (_jsxs("li", { children: [_jsx("span", { "aria-hidden": "true", children: row.rating === "positive" ? "👍" : "👎" }), _jsx("button", { type: "button", onClick: () => props.onOpenConversation(row.conversationId, row.messageId), children: row.conversationTitle ?? row.conversationId }), _jsx("span", { children: row.displayName }), _jsx("time", { title: row.createdAt, children: formatRelative(row.createdAt) })] }, row.id))) }))] })] }))] }));
|
|
19
|
+
: `Причина «${FEEDBACK_REASON_LABELS[alert.subject] ?? alert.subject}» повторяется ${formatCount(alert.count)} раз` }, `${alert.code}:${alert.subject ?? index}`))) }))] }), _jsxs("section", { className: "dsh-qa-admin__panel", "data-testid": "qa-admin-overview-queue", children: [_jsxs("div", { className: "dsh-qa-admin__panel-head", children: [_jsx("h2", { children: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u0440\u0430\u0437\u0431\u043E\u0440\u0430" }), _jsx("button", { type: "button", "data-testid": "qa-admin-overview-open-queue", onClick: props.onOpenQueue, children: "\u0412\u0441\u044F \u043E\u0447\u0435\u0440\u0435\u0434\u044C" })] }), _jsx(QueuePreview, { rows: data.queue, onOpenConversation: props.onOpenConversation })] }), _jsxs("section", { className: "dsh-qa-admin__panel", "data-testid": "qa-admin-overview-feedback", children: [_jsx("h2", { children: "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u043E\u0446\u0435\u043D\u043A\u0438" }), data.recentFeedback.length === 0 ? (_jsx("p", { className: "dsh-qa-admin__empty", "data-testid": "qa-admin-overview-feedback-empty", children: "\u041E\u0446\u0435\u043D\u043E\u043A \u043F\u043E\u043A\u0430 \u043D\u0435\u0442." })) : (_jsx("ul", { className: "dsh-qa-admin__recent", "data-testid": "qa-admin-overview-feedback-list", children: data.recentFeedback.map((row) => (_jsxs("li", { "data-testid": "qa-admin-overview-feedback-item", children: [_jsx("span", { "aria-hidden": "true", children: row.rating === "positive" ? "👍" : "👎" }), _jsx("button", { type: "button", "data-testid": "qa-admin-overview-feedback-open", onClick: () => props.onOpenConversation(row.conversationId, row.messageId), children: row.conversationTitle ?? row.conversationId }), _jsx("span", { children: row.displayName }), _jsx("time", { title: row.createdAt, children: formatRelative(row.createdAt) })] }, row.id))) }))] })] }))] }));
|
|
20
20
|
}
|
|
21
21
|
export function QueuePreview(props) {
|
|
22
|
-
return props.rows.length === 0 ? (_jsx("p", { className: "dsh-qa-admin__empty", children: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u043F\u0443\u0441\u0442\u0430." })) : (_jsx("ul", { className: "dsh-qa-admin__queue", children: props.rows.map((row, index) => (_jsxs("li", { className: `dsh-qa-admin__queue-item dsh-qa-admin__queue-item--${row.priority}`, children: [_jsxs("div", { className: "dsh-qa-admin__queue-head", children: [_jsx("span", { className: "dsh-qa-admin__queue-priority", children: REVIEW_PRIORITY_LABELS[row.priority] }), _jsx("span", { children: REVIEW_REASON_LABELS[row.reason] }), _jsx("time", { title: row.raisedAt, children: formatRelative(row.raisedAt) })] }), _jsx("button", { type: "button", onClick: () => props.onOpenConversation(row.conversationId, row.messageId), children: row.title ?? row.conversationId }), _jsx("span", { className: "dsh-qa-admin__queue-owner", children: row.displayName })] }, `${row.conversationId}:${row.messageId ?? ""}:${index}`))) }));
|
|
22
|
+
return props.rows.length === 0 ? (_jsx("p", { className: "dsh-qa-admin__empty", "data-testid": "qa-admin-overview-queue-empty", children: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u043F\u0443\u0441\u0442\u0430." })) : (_jsx("ul", { className: "dsh-qa-admin__queue", "data-testid": "qa-admin-overview-queue-list", children: props.rows.map((row, index) => (_jsxs("li", { "data-testid": "qa-admin-overview-queue-item", className: `dsh-qa-admin__queue-item dsh-qa-admin__queue-item--${row.priority}`, children: [_jsxs("div", { className: "dsh-qa-admin__queue-head", "data-testid": "qa-admin-overview-queue-head", children: [_jsx("span", { className: "dsh-qa-admin__queue-priority", "data-testid": "qa-admin-overview-queue-priority", children: REVIEW_PRIORITY_LABELS[row.priority] }), _jsx("span", { "data-testid": "qa-admin-overview-queue-reason", children: REVIEW_REASON_LABELS[row.reason] }), _jsx("time", { title: row.raisedAt, children: formatRelative(row.raisedAt) })] }), _jsx("button", { type: "button", "data-testid": "qa-admin-overview-queue-open", onClick: () => props.onOpenConversation(row.conversationId, row.messageId), children: row.title ?? row.conversationId }), _jsx("span", { className: "dsh-qa-admin__queue-owner", "data-testid": "qa-admin-overview-queue-owner", children: row.displayName })] }, `${row.conversationId}:${row.messageId ?? ""}:${index}`))) }));
|
|
23
23
|
}
|
|
24
24
|
//# sourceMappingURL=Overview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Overview.js","sourceRoot":"","sources":["../../../../src/client/admin/pages/Overview.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AAEH,SAAS,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"Overview.js","sourceRoot":"","sources":["../../../../src/client/admin/pages/Overview.tsx"],"names":[],"mappings":"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"}
|