@yadsh/dsh-qa-surface 0.13.0 → 0.14.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 +279 -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 +64 -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 +66 -6
- 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 +133 -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 +7228 -4002
- 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/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 +3 -1
- 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/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
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { isPageFocused, planTurnNotice, raiseDesktopNotice, readNotificationPermission, requestNotificationPermission, } from "./notification-dispatcher.js";
|
|
3
|
+
import { readNotificationPrefs, resolveNoticeChannels, writeNotificationPrefs, } from "./preferences.js";
|
|
4
|
+
import { scopeNoticesToOwnChats, settleTurnCompletions, } from "./turn-completion-source.js";
|
|
5
|
+
/** Lines the stack holds; an older one is dropped rather than pushed away. */
|
|
6
|
+
const MAX_NOTICES = 3;
|
|
7
|
+
/**
|
|
8
|
+
* Turn-completion notices for the chats this reader owns. Of the rows the
|
|
9
|
+
* sidebar shows, only the ones this account owns outright are watched, and when
|
|
10
|
+
* one of them stops running after this page watched that run begin, the reader
|
|
11
|
+
* is told in the channels they and the deployment allow.
|
|
12
|
+
*/
|
|
13
|
+
export function useQaTurnNotifications(input) {
|
|
14
|
+
const { chats, ownChatIds, notifications, storage, storageKey, account, paused, activeSessionId, onSwitch, } = input;
|
|
15
|
+
const seen = useRef(new Map());
|
|
16
|
+
const [items, setItems] = useState([]);
|
|
17
|
+
const [prefs, setPrefs] = useState(() => readNotificationPrefs(storage, storageKey));
|
|
18
|
+
// Memoized because the watcher below re-runs on any change to it, and a fresh
|
|
19
|
+
// object per render would have it re-reading the chat list on every keystroke.
|
|
20
|
+
const channels = useMemo(() => resolveNoticeChannels({ account: account?.notifications, prefs }), [account, prefs]);
|
|
21
|
+
// Also memoized for the watcher's sake: the rows are the sidebar's, so a
|
|
22
|
+
// render that changed nothing about them must not read the list again.
|
|
23
|
+
const ownedChats = useMemo(() => scopeNoticesToOwnChats(chats, ownChatIds), [chats, ownChatIds]);
|
|
24
|
+
const savePrefs = useCallback((next) => {
|
|
25
|
+
setPrefs(next);
|
|
26
|
+
writeNotificationPrefs(storage, storageKey, next);
|
|
27
|
+
}, [storage, storageKey]);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const completions = settleTurnCompletions(seen.current, ownedChats, {
|
|
30
|
+
paused,
|
|
31
|
+
});
|
|
32
|
+
if (completions.length === 0)
|
|
33
|
+
return;
|
|
34
|
+
const focused = isPageFocused();
|
|
35
|
+
const permission = readNotificationPermission();
|
|
36
|
+
const added = [];
|
|
37
|
+
for (const completion of completions) {
|
|
38
|
+
const planned = planTurnNotice(completion, {
|
|
39
|
+
switches: notifications,
|
|
40
|
+
channels,
|
|
41
|
+
permission,
|
|
42
|
+
focused,
|
|
43
|
+
activeSessionId,
|
|
44
|
+
});
|
|
45
|
+
if (planned === null)
|
|
46
|
+
continue;
|
|
47
|
+
if (planned.desktop)
|
|
48
|
+
raiseDesktopNotice(completion);
|
|
49
|
+
if (planned.inApp)
|
|
50
|
+
added.push(planned.item);
|
|
51
|
+
}
|
|
52
|
+
if (added.length === 0)
|
|
53
|
+
return;
|
|
54
|
+
setItems((previous) => [...added.reverse(), ...previous].slice(0, MAX_NOTICES));
|
|
55
|
+
}, [channels, activeSessionId, ownedChats, notifications, paused]);
|
|
56
|
+
// Opening a chat by any other means is an answer to its notice.
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (activeSessionId === null)
|
|
59
|
+
return;
|
|
60
|
+
setItems((previous) => previous.some((item) => item.sessionId === activeSessionId)
|
|
61
|
+
? previous.filter((item) => item.sessionId !== activeSessionId)
|
|
62
|
+
: previous);
|
|
63
|
+
}, [activeSessionId]);
|
|
64
|
+
const open = useCallback((sessionId) => {
|
|
65
|
+
setItems((previous) => previous.some((item) => item.sessionId === sessionId)
|
|
66
|
+
? previous.filter((item) => item.sessionId !== sessionId)
|
|
67
|
+
: previous);
|
|
68
|
+
onSwitch(sessionId);
|
|
69
|
+
}, [onSwitch]);
|
|
70
|
+
// The offer is a single question per browser: asked when the desktop channel
|
|
71
|
+
// is still allowed by the deployment, unanswered, and the browser has not
|
|
72
|
+
// decided yet.
|
|
73
|
+
const offered = notifications.enabled &&
|
|
74
|
+
notifications.allowOs &&
|
|
75
|
+
!prefs.osOffered &&
|
|
76
|
+
readNotificationPermission() === "default";
|
|
77
|
+
// Waving a notice off while the offer is on screen is the answer to the
|
|
78
|
+
// offer too: it never returns to ask a second time.
|
|
79
|
+
const dismiss = useCallback((key) => {
|
|
80
|
+
setItems((previous) => previous.filter((item) => item.key !== key));
|
|
81
|
+
if (offered)
|
|
82
|
+
savePrefs({ ...prefs, osOffered: true });
|
|
83
|
+
}, [offered, prefs, savePrefs]);
|
|
84
|
+
// Answering the offer writes the choice where it belongs: on the account once
|
|
85
|
+
// there is one, so it survives into another browser, and in this browser's own
|
|
86
|
+
// store otherwise. The browser keeps its own copy either way — what it decides
|
|
87
|
+
// is that the question has been asked here, which is a fact about this
|
|
88
|
+
// browser's permission prompt rather than about the person.
|
|
89
|
+
const enableDesktop = useCallback(() => {
|
|
90
|
+
void requestNotificationPermission().then((permission) => {
|
|
91
|
+
const granted = permission === "granted";
|
|
92
|
+
savePrefs({ ...prefs, osEnabled: granted, osOffered: true });
|
|
93
|
+
if (account === undefined)
|
|
94
|
+
return;
|
|
95
|
+
void account.onSave({
|
|
96
|
+
inApp: account.notifications.inApp,
|
|
97
|
+
desktop: granted,
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}, [account, prefs, savePrefs]);
|
|
101
|
+
return {
|
|
102
|
+
items,
|
|
103
|
+
onOpen: open,
|
|
104
|
+
onDismiss: dismiss,
|
|
105
|
+
...(offered ? { onEnableDesktop: enableDesktop } : {}),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=use-turn-notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-turn-notifications.js","sourceRoot":"","sources":["../../../src/client/notifications/use-turn-notifications.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,13 +21,13 @@ class PanelErrorBoundary extends Component {
|
|
|
21
21
|
}
|
|
22
22
|
render() {
|
|
23
23
|
if (this.state.failed) {
|
|
24
|
-
return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", role: "alert", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", this.props.definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id:", " ", this.props.definition.id, ")."] }));
|
|
24
|
+
return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", "data-testid": "qa-panel-error", role: "alert", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", this.props.definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id:", " ", this.props.definition.id, ")."] }));
|
|
25
25
|
}
|
|
26
26
|
return this.props.children;
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
function MissingPanel({ definition, }) {
|
|
30
|
-
return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", role: "status", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id: ", definition.id, ")."] }));
|
|
30
|
+
return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", "data-testid": "qa-panel-missing", role: "status", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id: ", definition.id, ")."] }));
|
|
31
31
|
}
|
|
32
32
|
function PanelSlotBody({ definition, owner, renderSlot, }) {
|
|
33
33
|
return renderSlot("qa.surface.panel", owner, {
|
|
@@ -168,7 +168,7 @@ export function QaPanelHost({ panels, sessionId, qaToken = "", renderSlot, }) {
|
|
|
168
168
|
return;
|
|
169
169
|
event.preventDefault();
|
|
170
170
|
};
|
|
171
|
-
return (_jsxs(_Fragment, { children: [presentation === "side" ? (_jsx("div", { className: "dsh-qa-extension-panel__resizer", role: "separator", "aria-label": "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0448\u0438\u0440\u0438\u043D\u0443 \u043F\u0430\u043D\u0435\u043B\u0438", "aria-orientation": "vertical", "aria-valuemin": QA_PANEL_MIN_PX, "aria-valuemax": clampQaPanelWidth(Number.POSITIVE_INFINITY, available), "aria-valuenow": width, tabIndex: 0, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerEnd, onPointerCancel: handlePointerEnd, onKeyDown: handleSeparatorKey })) : null, _jsxs("aside", { ref: root, className: `dsh-qa-extension-panel dsh-qa-extension-panel--${presentation}`, "data-presentation": presentation, "aria-label": `Панель: ${panelTitle(active)}`, tabIndex: -1, style: presentation === "side"
|
|
171
|
+
return (_jsxs(_Fragment, { children: [presentation === "side" ? (_jsx("div", { className: "dsh-qa-extension-panel__resizer", "data-testid": "qa-panel-resizer", role: "separator", "aria-label": "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0448\u0438\u0440\u0438\u043D\u0443 \u043F\u0430\u043D\u0435\u043B\u0438", "aria-orientation": "vertical", "aria-valuemin": QA_PANEL_MIN_PX, "aria-valuemax": clampQaPanelWidth(Number.POSITIVE_INFINITY, available), "aria-valuenow": width, tabIndex: 0, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerEnd, onPointerCancel: handlePointerEnd, onKeyDown: handleSeparatorKey })) : null, _jsxs("aside", { ref: root, className: `dsh-qa-extension-panel dsh-qa-extension-panel--${presentation}`, "data-testid": "qa-panel", "data-presentation": presentation, "aria-label": `Панель: ${panelTitle(active)}`, tabIndex: -1, style: presentation === "side"
|
|
172
172
|
? { width: `${width}px` }
|
|
173
173
|
: undefined, onKeyDown: (event) => {
|
|
174
174
|
if (presentation === "fullscreen" &&
|
|
@@ -177,7 +177,7 @@ export function QaPanelHost({ panels, sessionId, qaToken = "", renderSlot, }) {
|
|
|
177
177
|
event.stopPropagation();
|
|
178
178
|
panels.close({ reason: "user" });
|
|
179
179
|
}
|
|
180
|
-
}, children: [_jsxs("header", { className: "dsh-qa-extension-panel__header", children: [_jsx("h2", { children: panelTitle(active) }), _jsx("button", { type: "button", className: "dsh-qa-extension-panel__close", "aria-label": `Закрыть панель: ${panelTitle(active)}`, onClick: () => panels.close({ reason: "user" }), children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m3.5 3.5 7 7m0-7-7 7" }) }) })] }), _jsx("div", { className: "dsh-qa-extension-panel__bodies", children: snapshot.definitions.map((definition) => {
|
|
180
|
+
}, children: [_jsxs("header", { className: "dsh-qa-extension-panel__header", "data-testid": "qa-panel-header", children: [_jsx("h2", { "data-testid": "qa-panel-title", children: panelTitle(active) }), _jsx("button", { type: "button", className: "dsh-qa-extension-panel__close", "data-testid": "qa-panel-close", "aria-label": `Закрыть панель: ${panelTitle(active)}`, onClick: () => panels.close({ reason: "user" }), children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m3.5 3.5 7 7m0-7-7 7" }) }) })] }), _jsx("div", { className: "dsh-qa-extension-panel__bodies", children: snapshot.definitions.map((definition) => {
|
|
181
181
|
const visible = definition.kind === snapshot.activeKind;
|
|
182
182
|
if (!visible &&
|
|
183
183
|
(!definition.keepMounted || !mounted.current.has(definition.id))) {
|
|
@@ -203,7 +203,7 @@ export function QaPanelHost({ panels, sessionId, qaToken = "", renderSlot, }) {
|
|
|
203
203
|
},
|
|
204
204
|
signal,
|
|
205
205
|
};
|
|
206
|
-
return (_jsx("div", { className: "dsh-qa-extension-panel__body", hidden: !visible, "aria-hidden": !visible, children: _jsx(PanelErrorBoundary, { definition: definition, children: _jsx(PanelSlotBody, { definition: definition, owner: owner, renderSlot: renderSlot }) }) }, definition.id));
|
|
206
|
+
return (_jsx("div", { className: "dsh-qa-extension-panel__body", "data-testid": "qa-panel-body", hidden: !visible, "aria-hidden": !visible, children: _jsx(PanelErrorBoundary, { definition: definition, children: _jsx(PanelSlotBody, { definition: definition, owner: owner, renderSlot: renderSlot }) }) }, definition.id));
|
|
207
207
|
}) })] })] }));
|
|
208
208
|
}
|
|
209
209
|
//# sourceMappingURL=PanelHost.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelHost.js","sourceRoot":"","sources":["../../../src/client/panels/PanelHost.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,SAAS,EACT,SAAS,EACT,eAAe,EACf,MAAM,EACN,QAAQ,EACR,oBAAoB,GAKrB,MAAM,OAAO,CAAC;AASf,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,MAAM,UAAU,GAAG,CAAC,CAAC;AAIrB,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,SAAiB;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,GAAG,kBAAkB,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,eAAe,EACf,SAAS,GAAG,cAAc,GAAG,UAAU,CACxC,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,MAAM,kBAAmB,SAAQ,SAMhC;IACC,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAE1B,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,iBAAiB,CAAC,KAAc;QAC9B,OAAO,CAAC,KAAK,CACX,0BAA0B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,EAC9D,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,CACL,
|
|
1
|
+
{"version":3,"file":"PanelHost.js","sourceRoot":"","sources":["../../../src/client/panels/PanelHost.tsx"],"names":[],"mappings":"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"}
|
|
@@ -30,10 +30,10 @@ export function QaPanelLauncher({ panels, }) {
|
|
|
30
30
|
const visible = snapshot.definitions.filter((definition) => definition.userVisible !== false);
|
|
31
31
|
if (visible.length === 0)
|
|
32
32
|
return null;
|
|
33
|
-
return (_jsx("nav", { className: "dsh-qa-panel-launcher", "aria-label": "\u041F\u0430\u043D\u0435\u043B\u0438 QA", children: visible.map((definition) => {
|
|
33
|
+
return (_jsx("nav", { className: "dsh-qa-panel-launcher", "data-testid": "qa-panel-launcher", "aria-label": "\u041F\u0430\u043D\u0435\u043B\u0438 QA", children: visible.map((definition) => {
|
|
34
34
|
const label = title(definition);
|
|
35
35
|
const active = snapshot.activeKind === definition.kind;
|
|
36
|
-
return (_jsx("button", { type: "button", className: "dsh-qa-panel-launcher__button", "aria-label": `${active ? "Закрыть" : "Открыть"} панель: ${label}`, "aria-pressed": active, title: label, onClick: () => panels.toggle(definition.kind), children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx(PanelIcon, { token: definition.icon }) }) }, definition.id));
|
|
36
|
+
return (_jsx("button", { type: "button", className: "dsh-qa-panel-launcher__button", "data-testid": "qa-panel-launcher-button", "aria-label": `${active ? "Закрыть" : "Открыть"} панель: ${label}`, "aria-pressed": active, title: label, onClick: () => panels.toggle(definition.kind), children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx(PanelIcon, { token: definition.icon }) }) }, definition.id));
|
|
37
37
|
}) }));
|
|
38
38
|
}
|
|
39
39
|
//# sourceMappingURL=PanelLauncher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelLauncher.js","sourceRoot":"","sources":["../../../src/client/panels/PanelLauncher.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAI7C,SAAS,KAAK,CAAC,UAAoC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,KAAK,EAA0C;IAClE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,eAAM,CAAC,EAAC,oDAAoD,GAAG,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,eAAM,CAAC,EAAC,8CAA8C,GAAG,CAAC;QACnE,KAAK,MAAM;YACT,OAAO,eAAM,CAAC,EAAC,mCAAmC,GAAG,CAAC;QACxD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,iCAAiC,GAAG,CAAC;QACtD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,gCAAgC,GAAG,CAAC;QACrD;YACE,OAAO,CACL,eAAM,CAAC,EAAC,mEAAmE,GAAG,CAC/E,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAGP;IACC,MAAM,QAAQ,GAAG,oBAAoB,CACnC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CACzC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,KAAK,KAAK,CACjD,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,
|
|
1
|
+
{"version":3,"file":"PanelLauncher.js","sourceRoot":"","sources":["../../../src/client/panels/PanelLauncher.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAI7C,SAAS,KAAK,CAAC,UAAoC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,KAAK,EAA0C;IAClE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,eAAM,CAAC,EAAC,oDAAoD,GAAG,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,eAAM,CAAC,EAAC,8CAA8C,GAAG,CAAC;QACnE,KAAK,MAAM;YACT,OAAO,eAAM,CAAC,EAAC,mCAAmC,GAAG,CAAC;QACxD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,iCAAiC,GAAG,CAAC;QACtD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,gCAAgC,GAAG,CAAC;QACrD;YACE,OAAO,CACL,eAAM,CAAC,EAAC,mEAAmE,GAAG,CAC/E,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAGP;IACC,MAAM,QAAQ,GAAG,oBAAoB,CACnC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CACzC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,KAAK,KAAK,CACjD,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,cACE,SAAS,EAAC,uBAAuB,iBACrB,mBAAmB,gBACpB,yCAAW,YAErB,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC;YACvD,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,iBAC7B,0BAA0B,gBAC1B,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAAY,KAAK,EAAE,kBAClD,MAAM,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAE7C,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,KAAC,SAAS,IAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAI,GACjC,IAXD,UAAU,CAAC,EAAE,CAYX,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,143 @@
|
|
|
1
1
|
import { projectTranscript } from "./QaTranscriptAdapter.js";
|
|
2
|
+
import { chatLegacyOf } from "./turn-sources.js";
|
|
3
|
+
/** Matches the Host queue strip, which folds a long row into one line. */
|
|
4
|
+
const QUEUE_PREVIEW_CHARS = 200;
|
|
5
|
+
function queuePreview(text) {
|
|
6
|
+
const flat = text.replace(/\s+/g, " ").trim();
|
|
7
|
+
const chars = Array.from(flat);
|
|
8
|
+
return chars.length > QUEUE_PREVIEW_CHARS
|
|
9
|
+
? `${chars.slice(0, QUEUE_PREVIEW_CHARS).join("")}…`
|
|
10
|
+
: flat;
|
|
11
|
+
}
|
|
12
|
+
/** The `source.rpcId` of one Host row, when the Host named the send it carries. */
|
|
13
|
+
function rpcIdOf(source) {
|
|
14
|
+
const rpcId = source?.rpcId;
|
|
15
|
+
return rpcId === undefined || rpcId === null ? null : String(rpcId);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Request ids the Host's queue carries. A queued message lists the submission it
|
|
19
|
+
* answers for, which is what keeps one send from reading as two rows while it is
|
|
20
|
+
* both in transport and admitted.
|
|
21
|
+
*/
|
|
22
|
+
function queueNamedIds(queued) {
|
|
23
|
+
const ids = new Set();
|
|
24
|
+
for (const message of queued) {
|
|
25
|
+
const id = rpcIdOf(message.source);
|
|
26
|
+
if (id !== null)
|
|
27
|
+
ids.add(id);
|
|
28
|
+
}
|
|
29
|
+
return ids;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The request ids the Host has itself named for a send, out of the two lists it
|
|
33
|
+
* publishes: the messages waiting in its Inbox and the durable input rows of its
|
|
34
|
+
* transcript (`user` opens the turn that took the message, `steering` is one
|
|
35
|
+
* injected into the turn already running). Either is the server's own receipt
|
|
36
|
+
* that the message crossed, and reading both is what makes the receipt
|
|
37
|
+
* independent of which frame carried the news: a message the turn has claimed is
|
|
38
|
+
* gone from the Inbox yet stays in the transcript, so a send admitted and claimed
|
|
39
|
+
* between two notifications is still named by the next transcript frame.
|
|
40
|
+
*/
|
|
41
|
+
export function hostNamedSubmissionIds(queued, conversationSnapshot) {
|
|
42
|
+
const ids = queueNamedIds(queued);
|
|
43
|
+
for (const node of chatLegacyOf(conversationSnapshot).nodes) {
|
|
44
|
+
if (node.kind !== "user" && node.kind !== "steering")
|
|
45
|
+
continue;
|
|
46
|
+
const id = rpcIdOf(node.source);
|
|
47
|
+
if (id !== null)
|
|
48
|
+
ids.add(id);
|
|
49
|
+
}
|
|
50
|
+
return ids;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Messages waiting for the agent's next turn, in the order the Host will claim
|
|
54
|
+
* them. An admitted row comes from the Host's Inbox projection; a row still
|
|
55
|
+
* crossing the transport comes from the submission echo registered for it, so
|
|
56
|
+
* one queued send reads as one row at every moment.
|
|
57
|
+
*
|
|
58
|
+
* That echo is the browser's own, and retiring it is the session library's job.
|
|
59
|
+
* `@deepseek-ai/dsh-api-session-controller` — the harness's
|
|
60
|
+
* `packages/api/session-controller`, pinned here at 0.1.7-rc.2 — documents
|
|
61
|
+
* `SessionSnapshot.pendingSubmissions` as "Local prompt-submission echoes not
|
|
62
|
+
* yet observed as durable events or queue occurrences" and `beginSubmission` as
|
|
63
|
+
* "Queued echoes retire on queue acceptance", that retirement being the
|
|
64
|
+
* `observed` branch of `PendingSubmissionRetirement`. It does not complete the
|
|
65
|
+
* removal at acceptance: the settlement is latched and the removal deferred one
|
|
66
|
+
* animation frame (`scheduleObservedRetirement` hands `finishSubmission` to
|
|
67
|
+
* `scheduleFrame`; in the pinned bundle, `lib/client.js:2233` and `:2309`), and
|
|
68
|
+
* `scheduleFrame` falls back to a macrotask only where `requestAnimationFrame`
|
|
69
|
+
* does not exist at all. A surface whose frame clock has stopped therefore never
|
|
70
|
+
* runs the removal while its snapshot notifications keep arriving on microtasks —
|
|
71
|
+
* the card measured exactly that with the browser panel collapsed
|
|
72
|
+
* (`viewport=0x0`): the question and its answer in the feed, and the survivor
|
|
73
|
+
* drawn below it as a buttonless «отправляется…» row that a page reload cleared.
|
|
74
|
+
*
|
|
75
|
+
* So while that removal waits on a clock the surface may not have, a submission
|
|
76
|
+
* the Host has once named is never drawn as crossing. The follow-up belongs to
|
|
77
|
+
* `scheduleObservedRetirement` / `scheduleFrame` in that package: retire a
|
|
78
|
+
* settlement a delivered notification already proved without a frame.
|
|
79
|
+
*
|
|
80
|
+
* The substitute costs no row the contract would have drawn, because the library
|
|
81
|
+
* has already committed to the removal by the time either Host list can name the
|
|
82
|
+
* send: an Inbox frame that lists a queued echo latches the retirement there and
|
|
83
|
+
* then, and so does the durable row that opens the turn (`observeSubmissionMessage`
|
|
84
|
+
* hands the request to `scheduleObservedRetirement`, `lib/client.js:2201` and
|
|
85
|
+
* `:2213`, both landing at `:2233`). A message the Host takes out of its queue
|
|
86
|
+
* without handing it to the turn is therefore not a case this record swallows — its
|
|
87
|
+
* removal was latched the moment the Inbox listed it, and only the frame is
|
|
88
|
+
* missing. The retirements the library runs without a frame are the ones for a send
|
|
89
|
+
* the Host never named at all: the abandon path and a failed prompt
|
|
90
|
+
* (`lib/client.js:1704`, `:1753`), and the splice reporting `outcome === "canceled"`
|
|
91
|
+
* for a settlement it tracked by insertion receipt, which a queued echo never is
|
|
92
|
+
* (`lib/client.js:2164`, `:2186`, `:2245`). So the mask differs from the contract
|
|
93
|
+
* by the clock, never by the outcome.
|
|
94
|
+
*
|
|
95
|
+
* What it costs is the binding rather than a row. `unbind()` drops the record —
|
|
96
|
+
* leaving a chat, opening a subagent view, a policy re-bind and entering a draft
|
|
97
|
+
* all run it — and only a rebind of the same Session object could draw a survivor
|
|
98
|
+
* again. This surface retains under one source, so releasing its reference makes
|
|
99
|
+
* the manager withdraw the instance and dispose it (`lib/client.js:2413`), and the
|
|
100
|
+
* next binding holds a session with no echoes at all; where another holder keeps
|
|
101
|
+
* that object alive, the next Host frame names the send again and re-earns the
|
|
102
|
+
* record, so the row returns for a frame rather than for good.
|
|
103
|
+
*
|
|
104
|
+
* Where the frame clock does run, the library retires the echo on the frame after
|
|
105
|
+
* the claim, so this filter has nothing left to hide; a release that retired at
|
|
106
|
+
* acceptance rather than on a frame would leave it hiding nothing at all, and the
|
|
107
|
+
* filter becomes dead code to delete.
|
|
108
|
+
*/
|
|
109
|
+
function projectQueue(snapshot, queued, admitted) {
|
|
110
|
+
const echoed = queueNamedIds(queued);
|
|
111
|
+
const sending = snapshot.pendingSubmissions
|
|
112
|
+
.filter((item) => item.placement === "queued" &&
|
|
113
|
+
!echoed.has(String(item.requestId)) &&
|
|
114
|
+
!admitted.has(String(item.requestId)))
|
|
115
|
+
.map((item) => ({
|
|
116
|
+
id: String(item.requestId),
|
|
117
|
+
preview: queuePreview(item.text),
|
|
118
|
+
text: item.text,
|
|
119
|
+
attachments: item.attachments.length,
|
|
120
|
+
sending: true,
|
|
121
|
+
}));
|
|
122
|
+
return [
|
|
123
|
+
...queued.map((message) => {
|
|
124
|
+
const texts = message.content.flatMap((block) => block.type === "text" ? [block.text] : []);
|
|
125
|
+
const plainText = texts.join("\n\n");
|
|
126
|
+
return {
|
|
127
|
+
id: String(message.id),
|
|
128
|
+
preview: queuePreview(plainText),
|
|
129
|
+
// A row that mixes in non-text content cannot be re-sent as plain text,
|
|
130
|
+
// so it is previewed but not editable, exactly as the Host docks it.
|
|
131
|
+
text: message.content.every((block) => block.type === "text")
|
|
132
|
+
? plainText
|
|
133
|
+
: null,
|
|
134
|
+
attachments: message.content.filter((block) => block.type === "image" || block.type === "file").length,
|
|
135
|
+
sending: false,
|
|
136
|
+
};
|
|
137
|
+
}),
|
|
138
|
+
...sending,
|
|
139
|
+
];
|
|
140
|
+
}
|
|
2
141
|
/**
|
|
3
142
|
* Project one bound chat into the observable surface state: phase, transcript
|
|
4
143
|
* with per-turn sources, footer sources, and the composer's capabilities.
|
|
@@ -62,21 +201,33 @@ export function projectBoundSessionState(input) {
|
|
|
62
201
|
// the operator is answering a tool call that is already waiting, and text
|
|
63
202
|
// sent beside it would open a second turn instead.
|
|
64
203
|
const questionPending = questions.length > 0;
|
|
204
|
+
// Every Host operation the binding may still issue: a read-only historical
|
|
205
|
+
// chat issues none, and a parked question owns the composer until it is
|
|
206
|
+
// answered, because text sent beside it would open a second turn.
|
|
207
|
+
const canOperate = input.connected &&
|
|
208
|
+
input.policyReady &&
|
|
209
|
+
!questionPending &&
|
|
210
|
+
input.compatibilityReadOnly !== true;
|
|
65
211
|
return {
|
|
66
212
|
phase,
|
|
67
213
|
sessionId: input.sessionId,
|
|
214
|
+
chatKey: input.chatKey,
|
|
68
215
|
messages,
|
|
69
216
|
pendingMessage: null,
|
|
70
217
|
error,
|
|
71
218
|
compatibilityReadOnly: input.compatibilityReadOnly === true,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
219
|
+
// A running turn has nowhere for a new question to land except its queue,
|
|
220
|
+
// so the composer stays live beside it and the message is admitted as the
|
|
221
|
+
// next turn. A send whose admission has not returned yet stays a lock.
|
|
222
|
+
canSend: canOperate &&
|
|
223
|
+
!input.admissionPending &&
|
|
224
|
+
(phase === "ready" || snapshot.running),
|
|
76
225
|
canStop: input.connected &&
|
|
77
226
|
snapshot.running &&
|
|
78
227
|
config.ui.showStop &&
|
|
79
228
|
input.compatibilityReadOnly !== true,
|
|
229
|
+
queue: projectQueue(snapshot, input.queuedMessages, input.admittedSubmissions),
|
|
230
|
+
canEditQueue: canOperate,
|
|
80
231
|
chatsRevision: input.chatsRevision,
|
|
81
232
|
sources: latest === undefined
|
|
82
233
|
? []
|
|
@@ -91,6 +242,7 @@ export function projectBoundSessionState(input) {
|
|
|
91
242
|
viewingSubagent: input.viewingSubagent,
|
|
92
243
|
approvals: input.compatibilityReadOnly === true ? [] : input.approvals,
|
|
93
244
|
questions,
|
|
245
|
+
requestQueue: input.requestQueue,
|
|
94
246
|
// A read-only binding issues no Host operation at all, and running a
|
|
95
247
|
// command is one — the policy gate closes the palette with everything else.
|
|
96
248
|
slash: input.compatibilityReadOnly === true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-session-state.js","sourceRoot":"","sources":["../../src/client/project-session-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-session-state.js","sourceRoot":"","sources":["../../src/client/project-session-state.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA6DjD,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,MAAM,GAAG,mBAAmB;QACvC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;QACpD,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,mFAAmF;AACnF,SAAS,OAAO,CAAC,MAAe;IAC9B,MAAM,KAAK,GAAI,MAAmD,EAAE,KAAK,CAAC;IAC1E,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,MAA8B;IACnD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAA8B,EAC9B,oBAAsD;IAEtD,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,SAAS;QAC/D,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,SAAS,YAAY,CACnB,QAAmD,EACnD,MAAgD,EAChD,QAAuD;IAEvD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,kBAAkB;SACxC,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,SAAS,KAAK,QAAQ;QAC3B,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CACxC;SACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1B,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;QACpC,OAAO,EAAE,IAAI;KACd,CAAC,CAAC,CAAC;IACN,OAAO;QACL,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9C,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAC1C,CAAC;YACF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC;gBAChC,wEAAwE;gBACxE,qEAAqE;gBACrE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;oBAC3D,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,IAAI;gBACR,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CACjC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAC3D,CAAC,MAAM;gBACR,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC,CAAC;QACF,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACpD,6EAA6E;IAC7E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,KAAK,GACT,KAAK,CAAC,cAAc;QACpB,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,KAAK,OAAO;YACjD,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,IAAI,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,SAAS;QAC5B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,KAAK,OAAO;YAClD,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,QAAQ,CAAC,SAAS,KAAK,MAAM;gBAC7B,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,gBAAgB,CAAC;oBAC1C,KAAK,CAAC,qBAAqB,KAAK,IAAI;oBACtC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,OAAO,CAAC;IAClB,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAU,CAAC,CACpE,CAAC;IACF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,oBAAoB,EAAE;QAC7D,OAAO,EAAE,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,qBAAqB,KAAK,IAAI;QAC1E,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,gBAAgB;QAC5C,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,aAAa;QACtC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC,iBAAiB;KAC/C,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACjB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1D,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAC5D,OAAO,OAAO,CAAC;QACjB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,GACX,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,GAAG,MAAM,CAAC,OAAO;gBACjB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc;oBACvC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;oBAC3B,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QACR,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClD,CAAC,CAAC,OAAO;YACT,CAAC,CAAC;gBACE,GAAG,OAAO;gBACV,OAAO;gBACP,eAAe,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI;gBACzC,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,SAAS;oBACzC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC;aAC3D,CAAC;IACR,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9E,6EAA6E;IAC7E,0EAA0E;IAC1E,mDAAmD;IACnD,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C,2EAA2E;IAC3E,wEAAwE;IACxE,kEAAkE;IAClE,MAAM,UAAU,GACd,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,WAAW;QACjB,CAAC,eAAe;QAChB,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC;IACvC,OAAO;QACL,KAAK;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ;QACR,cAAc,EAAE,IAAI;QACpB,KAAK;QACL,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,KAAK,IAAI;QAC3D,0EAA0E;QAC1E,0EAA0E;QAC1E,uEAAuE;QACvE,OAAO,EACL,UAAU;YACV,CAAC,KAAK,CAAC,gBAAgB;YACvB,CAAC,KAAK,KAAK,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC;QACzC,OAAO,EACL,KAAK,CAAC,SAAS;YACf,QAAQ,CAAC,OAAO;YAChB,MAAM,CAAC,EAAE,CAAC,QAAQ;YAClB,KAAK,CAAC,qBAAqB,KAAK,IAAI;QACtC,KAAK,EAAE,YAAY,CACjB,QAAQ,EACR,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,mBAAmB,CAC1B;QACD,YAAY,EAAE,UAAU;QACxB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EACL,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,GAAG,MAAM,CAAC,OAAO;gBACjB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc;oBACvC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;oBAC3B,CAAC,CAAC,EAAE,CAAC;aACR;QACP,eAAe,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI;QACzC,uBAAuB,EAAE,MAAM,EAAE,iBAAiB;QAClD,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;QACtE,SAAS;QACT,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,qEAAqE;QACrE,4EAA4E;QAC5E,KAAK,EACH,KAAK,CAAC,qBAAqB,KAAK,IAAI;YAClC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;YACjD,CAAC,CAAC,KAAK,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -19,11 +19,11 @@ export function QaRoleSelector(props) {
|
|
|
19
19
|
props.onSelect(role.id);
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
return (_jsxs(_Fragment, { children: [_jsxs("label", { className: "dsh-qa-role-selector", children: [_jsx("span", { className: "dsh-qa-sr-only", children: "\u0420\u043E\u043B\u044C \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0430" }), _jsx("select", { value: props.selected, disabled: props.disabled, "aria-label": "\u0420\u043E\u043B\u044C \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0430", onChange: (event) => select(event.currentTarget.value), children: props.roles.map((role) => (_jsx("option", { value: role.id, children: role.name }, role.id))) })] }), _jsx(QaModal, { open: pending !== undefined, title: "\u041D\u0430\u0447\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442?", closeLabel: "\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u043C\u0435\u043D\u0443 \u0440\u043E\u043B\u0438", onClose: () => setPending(undefined), footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => setPending(undefined), children: "\u041E\u0442\u043C\u0435\u043D\u0430" }), _jsxs("button", { type: "button", className: "dsh-qa-modal__primary", onClick: () => {
|
|
22
|
+
return (_jsxs(_Fragment, { children: [_jsxs("label", { className: "dsh-qa-role-selector", "data-testid": "qa-role-selector", children: [_jsx("span", { className: "dsh-qa-sr-only", children: "\u0420\u043E\u043B\u044C \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0430" }), _jsx("select", { "data-testid": "qa-role-selector-input", value: props.selected, disabled: props.disabled, "aria-label": "\u0420\u043E\u043B\u044C \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0430", onChange: (event) => select(event.currentTarget.value), children: props.roles.map((role) => (_jsx("option", { value: role.id, "data-testid": "qa-role-selector-option", children: role.name }, role.id))) })] }), _jsx(QaModal, { open: pending !== undefined, title: "\u041D\u0430\u0447\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442?", closeLabel: "\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u043C\u0435\u043D\u0443 \u0440\u043E\u043B\u0438", onClose: () => setPending(undefined), footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", "data-testid": "qa-role-change-cancel", onClick: () => setPending(undefined), children: "\u041E\u0442\u043C\u0435\u043D\u0430" }), _jsxs("button", { type: "button", className: "dsh-qa-modal__primary", "data-testid": "qa-role-change-confirm", onClick: () => {
|
|
23
23
|
if (pending !== undefined)
|
|
24
24
|
props.onSelect(pending.id);
|
|
25
25
|
setPending(undefined);
|
|
26
|
-
}, children: ["\u041D\u0430\u0447\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442 \u043A\u0430\u043A ", pending?.name ?? ""] })] }), children: _jsx("p", { className: "dsh-qa-role-selector__notice", children: "\u0421\u043C\u0435\u043D\u0430 \u0440\u043E\u043B\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440: \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0443 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0438 \u043D\u0430\u0432\u044B\u043A\u0438 \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u0441\u044F. \u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0447\u0430\u0442 \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F \u0432 \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u0431\u0435\u0437 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439." }) })] }));
|
|
26
|
+
}, children: ["\u041D\u0430\u0447\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442 \u043A\u0430\u043A ", pending?.name ?? ""] })] }), children: _jsx("p", { className: "dsh-qa-role-selector__notice", "data-testid": "qa-role-change-notice", children: "\u0421\u043C\u0435\u043D\u0430 \u0440\u043E\u043B\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440: \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0443 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0438 \u043D\u0430\u0432\u044B\u043A\u0438 \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u0441\u044F. \u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0447\u0430\u0442 \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F \u0432 \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u0431\u0435\u0437 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439." }) })] }));
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* The banner that keeps a preview from being mistaken for an ordinary chat.
|
|
@@ -32,9 +32,14 @@ export function QaRoleSelector(props) {
|
|
|
32
32
|
* is hidden — the previewed profile need not be one the account holds — so
|
|
33
33
|
* without a control here the only exit was the browser's Back button, and a new
|
|
34
34
|
* chat meanwhile ran as the previewed profile instead of the account's default.
|
|
35
|
-
*
|
|
35
|
+
*
|
|
36
|
+
* Leaving is a new chat, so the way out waits for the same moments the header's
|
|
37
|
+
* "Новый чат" and the role selector wait for: while a chat is still being
|
|
38
|
+
* created, this click would take the screen from the question on its way in.
|
|
39
|
+
* @param props - the previewed role's name, how to leave the preview, and whether
|
|
40
|
+
* that way is currently blocked by a chat being created.
|
|
36
41
|
*/
|
|
37
42
|
export function QaAdminPreviewBanner(props) {
|
|
38
|
-
return (_jsxs("div", { className: "dsh-qa-admin-preview", role: "status", children: [_jsxs("span", { children: ["\u041F\u0420\u041E\u0421\u041C\u041E\u0422\u0420 \u0410\u0414\u041C\u0418\u041D\u0418\u0421\u0422\u0420\u0410\u0422\u041E\u0420\u0410: ", props.role] }), props.onExit === undefined ? null : (_jsx("button", { type: "button", className: "dsh-qa-admin-preview__exit", onClick: props.onExit, title: "\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0441\u0432\u043E\u0435\u043C\u0443 \u043F\u0440\u043E\u0444\u0438\u043B\u044E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E: \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0437\u0430\u043A\u043E\u043D\u0447\u0438\u0442\u0441\u044F, \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u0447\u0430\u0442 \u043D\u0430\u0447\u043D\u0451\u0442\u0441\u044F \u0437\u0430\u043D\u043E\u0432\u043E", children: "\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430" }))] }));
|
|
43
|
+
return (_jsxs("div", { className: "dsh-qa-admin-preview", "data-testid": "qa-admin-preview", role: "status", children: [_jsxs("span", { "data-testid": "qa-admin-preview-role", children: ["\u041F\u0420\u041E\u0421\u041C\u041E\u0422\u0420 \u0410\u0414\u041C\u0418\u041D\u0418\u0421\u0422\u0420\u0410\u0422\u041E\u0420\u0410: ", props.role] }), props.onExit === undefined ? null : (_jsx("button", { type: "button", className: "dsh-qa-admin-preview__exit", "data-testid": "qa-admin-preview-exit", onClick: props.onExit, disabled: props.disabled === true, title: "\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0441\u0432\u043E\u0435\u043C\u0443 \u043F\u0440\u043E\u0444\u0438\u043B\u044E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E: \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0437\u0430\u043A\u043E\u043D\u0447\u0438\u0442\u0441\u044F, \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u0447\u0430\u0442 \u043D\u0430\u0447\u043D\u0451\u0442\u0441\u044F \u0437\u0430\u043D\u043E\u0432\u043E", children: "\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430" }))] }));
|
|
39
44
|
}
|
|
40
45
|
//# sourceMappingURL=RoleSelector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoleSelector.js","sourceRoot":"","sources":["../../../src/client/role/RoleSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAUnD,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAa,CAAC;IACpD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,EAAE;QAC5B,IAAI,EAAE,KAAK,KAAK,CAAC,QAAQ;YAAE,OAAO;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAClE,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO;QAC/B,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CACL,8BACE,iBAAO,SAAS,EAAC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"RoleSelector.js","sourceRoot":"","sources":["../../../src/client/role/RoleSelector.tsx"],"names":[],"mappings":"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"}
|