@yadsh/dsh-qa-surface 0.2.0 → 0.4.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 +236 -20
- package/compatibility.json +11 -3
- package/lib/account-remotes.js +100 -0
- package/lib/account-remotes.js.map +1 -0
- package/lib/accounts/credentials.js +27 -0
- package/lib/accounts/credentials.js.map +1 -0
- package/lib/accounts/errors.js +9 -0
- package/lib/accounts/errors.js.map +1 -0
- package/lib/accounts/file.js +101 -0
- package/lib/accounts/file.js.map +1 -0
- package/lib/accounts/index.js +2 -0
- package/lib/accounts/index.js.map +1 -0
- package/lib/accounts/store.js +461 -0
- package/lib/accounts/store.js.map +1 -0
- package/lib/accounts/token.js +61 -0
- package/lib/accounts/token.js.map +1 -0
- package/lib/attachment-rules.js +111 -0
- package/lib/attachment-rules.js.map +1 -0
- package/lib/attestation.js.map +1 -1
- package/lib/cli.js +256 -0
- package/lib/cli.js.map +1 -0
- package/lib/client/QaAccountsController.js +359 -0
- package/lib/client/QaAccountsController.js.map +1 -0
- package/lib/client/QaSessionController.js +238 -180
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +281 -105
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +95 -244
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/attachments.js +150 -0
- package/lib/client/attachments.js.map +1 -0
- package/lib/client/attestation.js +7 -1
- package/lib/client/attestation.js.map +1 -1
- package/lib/client/base64.js +16 -0
- package/lib/client/base64.js.map +1 -0
- package/lib/client/chat-files.js +48 -0
- package/lib/client/chat-files.js.map +1 -0
- package/lib/client/components/Markdown.js +54 -13
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaAuthGate.js +40 -0
- package/lib/client/components/QaAuthGate.js.map +1 -0
- package/lib/client/components/QaChangelog.js +131 -0
- package/lib/client/components/QaChangelog.js.map +1 -0
- package/lib/client/components/QaComposer.js +56 -74
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaFileAttachment.js +19 -0
- package/lib/client/components/QaFileAttachment.js.map +1 -0
- package/lib/client/components/QaFilesPanel.js +45 -0
- package/lib/client/components/QaFilesPanel.js.map +1 -0
- package/lib/client/components/QaHeader.js +34 -0
- package/lib/client/components/QaHeader.js.map +1 -0
- package/lib/client/components/QaMessage.js +61 -18
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModal.js +31 -0
- package/lib/client/components/QaModal.js.map +1 -0
- package/lib/client/components/QaProfile.js +64 -0
- package/lib/client/components/QaProfile.js.map +1 -0
- package/lib/client/components/QaRightRail.js +15 -0
- package/lib/client/components/QaRightRail.js.map +1 -0
- package/lib/client/components/QaSidebar.js +68 -20
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +127 -0
- package/lib/client/components/QaSourcesPanel.js.map +1 -0
- package/lib/client/components/QaTurnRail.js +296 -0
- package/lib/client/components/QaTurnRail.js.map +1 -0
- package/lib/client/components/QaWelcomeNotice.js +125 -0
- package/lib/client/components/QaWelcomeNotice.js.map +1 -0
- package/lib/client/components/QaWidthHandle.js +147 -0
- package/lib/client/components/QaWidthHandle.js.map +1 -0
- package/lib/client/components/QaWorkGroup.js +19 -20
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/components/source-refs.js +78 -0
- package/lib/client/components/source-refs.js.map +1 -0
- package/lib/client/components/surface-utils.js +28 -0
- package/lib/client/components/surface-utils.js.map +1 -0
- package/lib/client/components/thinking-phrases.js +24 -0
- package/lib/client/components/thinking-phrases.js.map +1 -0
- package/lib/client/create-session.js +26 -0
- package/lib/client/create-session.js.map +1 -0
- package/lib/client/failure-copy.js +63 -0
- package/lib/client/failure-copy.js.map +1 -0
- package/lib/client/index.js +135 -16
- package/lib/client/index.js.map +1 -1
- package/lib/client/project-session-state.js +78 -0
- package/lib/client/project-session-state.js.map +1 -0
- package/lib/client/prompt-content.js +54 -0
- package/lib/client/prompt-content.js.map +1 -0
- package/lib/client/session-admission.js +38 -0
- package/lib/client/session-admission.js.map +1 -0
- package/lib/client/session-assets.js +52 -0
- package/lib/client/session-assets.js.map +1 -0
- package/lib/client/session-sources.js +61 -0
- package/lib/client/session-sources.js.map +1 -0
- package/lib/client/settings/card.js +143 -0
- package/lib/client/settings/card.js.map +1 -0
- package/lib/client/settings/fields.js +145 -0
- package/lib/client/settings/fields.js.map +1 -0
- package/lib/client/settings/format.js +255 -0
- package/lib/client/settings/format.js.map +1 -0
- package/lib/client/settings/sections/access.js +25 -0
- package/lib/client/settings/sections/access.js.map +1 -0
- package/lib/client/settings/sections/accounts.js +47 -0
- package/lib/client/settings/sections/accounts.js.map +1 -0
- package/lib/client/settings/sections/attachments.js +46 -0
- package/lib/client/settings/sections/attachments.js.map +1 -0
- package/lib/client/settings/sections/branding.js +28 -0
- package/lib/client/settings/sections/branding.js.map +1 -0
- package/lib/client/settings/sections/common.js +20 -0
- package/lib/client/settings/sections/common.js.map +1 -0
- package/lib/client/settings/sections/embedding.js +19 -0
- package/lib/client/settings/sections/embedding.js.map +1 -0
- package/lib/client/settings/sections/interface.js +60 -0
- package/lib/client/settings/sections/interface.js.map +1 -0
- package/lib/client/settings/sections/lockdown.js +82 -0
- package/lib/client/settings/sections/lockdown.js.map +1 -0
- package/lib/client/settings/sections/session.js +53 -0
- package/lib/client/settings/sections/session.js.map +1 -0
- package/lib/client/settings/sections/sources.js +72 -0
- package/lib/client/settings/sections/sources.js.map +1 -0
- package/lib/client/settings/sections/status.js +37 -0
- package/lib/client/settings/sections/status.js.map +1 -0
- package/lib/client/settings/sections.js +23 -0
- package/lib/client/settings/sections.js.map +1 -0
- package/lib/client/settings/styles.js +57 -0
- package/lib/client/settings/styles.js.map +1 -0
- package/lib/client/settlement.js +24 -0
- package/lib/client/settlement.js.map +1 -0
- package/lib/client/stream-publisher.js +47 -0
- package/lib/client/stream-publisher.js.map +1 -0
- package/lib/client/styles.js +225 -17
- package/lib/client/styles.js.map +1 -1
- package/lib/client/tool-presentation.js +102 -0
- package/lib/client/tool-presentation.js.map +1 -0
- package/lib/client/turn-sources.js +98 -0
- package/lib/client/turn-sources.js.map +1 -0
- package/lib/client/types.js +2 -0
- package/lib/client/types.js.map +1 -1
- package/lib/client/use-right-rail.js +96 -0
- package/lib/client/use-right-rail.js.map +1 -0
- package/lib/client/use-session-ui-state.js +75 -0
- package/lib/client/use-session-ui-state.js.map +1 -0
- package/lib/client/use-transcript-view.js +44 -0
- package/lib/client/use-transcript-view.js.map +1 -0
- package/lib/client.js +9052 -1345
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/accounts.js +60 -0
- package/lib/config-resolvers/accounts.js.map +1 -0
- package/lib/config-resolvers/attachments.js +28 -0
- package/lib/config-resolvers/attachments.js.map +1 -0
- package/lib/config-resolvers/basics.js +59 -0
- package/lib/config-resolvers/basics.js.map +1 -0
- package/lib/config-resolvers/defaults.js +132 -0
- package/lib/config-resolvers/defaults.js.map +1 -0
- package/lib/config-resolvers/lockdown.js +79 -0
- package/lib/config-resolvers/lockdown.js.map +1 -0
- package/lib/config-resolvers/session.js +42 -0
- package/lib/config-resolvers/session.js.map +1 -0
- package/lib/config-resolvers/shared.js +42 -0
- package/lib/config-resolvers/shared.js.map +1 -0
- package/lib/config-resolvers/sources.js +81 -0
- package/lib/config-resolvers/sources.js.map +1 -0
- package/lib/config-resolvers/ui.js +20 -0
- package/lib/config-resolvers/ui.js.map +1 -0
- package/lib/config.js +279 -102
- package/lib/config.js.map +1 -1
- package/lib/entry-redirect.js +45 -0
- package/lib/entry-redirect.js.map +1 -0
- package/lib/host-route.js +25 -1
- package/lib/host-route.js.map +1 -1
- package/lib/index.js +258 -23
- package/lib/index.js.map +1 -1
- package/lib/launch-token.js +42 -0
- package/lib/launch-token.js.map +1 -0
- package/lib/profile.js +214 -0
- package/lib/profile.js.map +1 -0
- package/lib/prompt-notes.js +231 -0
- package/lib/prompt-notes.js.map +1 -0
- package/lib/provenance/collector.js +40 -0
- package/lib/provenance/collector.js.map +1 -0
- package/lib/provenance/connectors.js +147 -0
- package/lib/provenance/connectors.js.map +1 -0
- package/lib/provenance/dedupe.js +89 -0
- package/lib/provenance/dedupe.js.map +1 -0
- package/lib/provenance/extractors.js +340 -0
- package/lib/provenance/extractors.js.map +1 -0
- package/lib/provenance/file-preview.js +39 -0
- package/lib/provenance/file-preview.js.map +1 -0
- package/lib/provenance/host-store.js +387 -0
- package/lib/provenance/host-store.js.map +1 -0
- package/lib/provenance/index.js +9 -0
- package/lib/provenance/index.js.map +1 -0
- package/lib/provenance/normalize.js +128 -0
- package/lib/provenance/normalize.js.map +1 -0
- package/lib/provenance/reported.js +53 -0
- package/lib/provenance/reported.js.map +1 -0
- package/lib/provenance/types.js +2 -0
- package/lib/provenance/types.js.map +1 -0
- package/lib/resolve-config.js +35 -249
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +122 -14
- package/lib/secure-session.js.map +1 -1
- package/lib/shared/session-key.js +18 -0
- package/lib/shared/session-key.js.map +1 -0
- package/lib/shared/settings.js +10 -0
- package/lib/shared/settings.js.map +1 -0
- package/lib/thinking-phrases.js +68 -0
- package/lib/thinking-phrases.js.map +1 -0
- package/lib/typert.host.js +749 -11
- package/lib/typert.remote-client.d.ts +23 -3
- package/lib/typert.remote-client.js +593 -6
- package/lib/types/account-remotes.d.ts +42 -0
- package/lib/types/accounts/credentials.d.ts +14 -0
- package/lib/types/accounts/errors.d.ts +11 -0
- package/lib/types/accounts/file.d.ts +82 -0
- package/lib/types/accounts/index.d.ts +2 -0
- package/lib/types/accounts/store.d.ts +144 -0
- package/lib/types/accounts/token.d.ts +31 -0
- package/lib/types/attachment-rules.d.ts +44 -0
- package/lib/types/attestation.d.ts +1 -1
- package/lib/types/cli.d.ts +9 -0
- package/lib/types/client/QaAccountsController.d.ts +102 -0
- package/lib/types/client/QaConfigController.d.ts +1 -1
- package/lib/types/client/QaSessionController.d.ts +61 -22
- package/lib/types/client/QaSurface.d.ts +14 -3
- package/lib/types/client/QaTranscriptAdapter.d.ts +5 -10
- package/lib/types/client/attachments.d.ts +54 -0
- package/lib/types/client/base64.d.ts +10 -0
- package/lib/types/client/chat-files.d.ts +30 -0
- package/lib/types/client/components/Markdown.d.ts +11 -1
- package/lib/types/client/components/QaAgentsDrawer.d.ts +1 -1
- package/lib/types/client/components/QaAuthGate.d.ts +15 -0
- package/lib/types/client/components/QaChangelog.d.ts +21 -0
- package/lib/types/client/components/QaComposer.d.ts +8 -4
- package/lib/types/client/components/QaFileAttachment.d.ts +14 -0
- package/lib/types/client/components/QaFilesPanel.d.ts +15 -0
- package/lib/types/client/components/QaHeader.d.ts +41 -0
- package/lib/types/client/components/QaMessage.d.ts +12 -3
- package/lib/types/client/components/QaModal.d.ts +26 -0
- package/lib/types/client/components/QaProfile.d.ts +25 -0
- package/lib/types/client/components/QaRightRail.d.ts +23 -0
- package/lib/types/client/components/QaSidebar.d.ts +44 -2
- package/lib/types/client/components/QaSourcesPanel.d.ts +23 -0
- package/lib/types/client/components/QaTurnRail.d.ts +65 -0
- package/lib/types/client/components/QaWelcomeNotice.d.ts +27 -0
- package/lib/types/client/components/QaWidthHandle.d.ts +43 -0
- package/lib/types/client/components/QaWorkGroup.d.ts +5 -3
- package/lib/types/client/components/source-refs.d.ts +16 -0
- package/lib/types/client/components/surface-utils.d.ts +11 -0
- package/lib/types/client/components/thinking-phrases.d.ts +9 -0
- package/lib/types/client/create-session.d.ts +13 -0
- package/lib/types/client/failure-copy.d.ts +19 -0
- package/lib/types/client/index.d.ts +1 -0
- package/lib/types/client/project-session-state.d.ts +30 -0
- package/lib/types/client/prompt-content.d.ts +30 -0
- package/lib/types/client/session-admission.d.ts +23 -0
- package/lib/types/client/session-assets.d.ts +20 -0
- package/lib/types/client/session-sources.d.ts +28 -0
- package/lib/types/client/settings/card.d.ts +23 -0
- package/lib/types/client/settings/fields.d.ts +139 -0
- package/lib/types/client/settings/format.d.ts +108 -0
- package/lib/types/client/settings/sections/access.d.ts +9 -0
- package/lib/types/client/settings/sections/accounts.d.ts +9 -0
- package/lib/types/client/settings/sections/attachments.d.ts +15 -0
- package/lib/types/client/settings/sections/branding.d.ts +8 -0
- package/lib/types/client/settings/sections/common.d.ts +28 -0
- package/lib/types/client/settings/sections/embedding.d.ts +8 -0
- package/lib/types/client/settings/sections/interface.d.ts +9 -0
- package/lib/types/client/settings/sections/lockdown.d.ts +9 -0
- package/lib/types/client/settings/sections/session.d.ts +9 -0
- package/lib/types/client/settings/sections/sources.d.ts +9 -0
- package/lib/types/client/settings/sections/status.d.ts +22 -0
- package/lib/types/client/settings/sections.d.ts +25 -0
- package/lib/types/client/settings/styles.d.ts +8 -0
- package/lib/types/client/settlement.d.ts +6 -0
- package/lib/types/client/stream-publisher.d.ts +28 -0
- package/lib/types/client/tool-presentation.d.ts +6 -0
- package/lib/types/client/turn-sources.d.ts +14 -0
- package/lib/types/client/types.d.ts +101 -9
- package/lib/types/client/use-right-rail.d.ts +56 -0
- package/lib/types/client/use-session-ui-state.d.ts +41 -0
- package/lib/types/client/use-transcript-view.d.ts +20 -0
- package/lib/types/config-resolvers/accounts.d.ts +15 -0
- package/lib/types/config-resolvers/attachments.d.ts +6 -0
- package/lib/types/config-resolvers/basics.d.ts +8 -0
- package/lib/types/config-resolvers/defaults.d.ts +4 -0
- package/lib/types/config-resolvers/lockdown.d.ts +10 -0
- package/lib/types/config-resolvers/session.d.ts +6 -0
- package/lib/types/config-resolvers/shared.d.ts +16 -0
- package/lib/types/config-resolvers/sources.d.ts +6 -0
- package/lib/types/config-resolvers/ui.d.ts +6 -0
- package/lib/types/entry-redirect.d.ts +20 -0
- package/lib/types/host-route.d.ts +14 -1
- package/lib/types/index.d.ts +54 -3
- package/lib/types/launch-token.d.ts +21 -0
- package/lib/types/profile.d.ts +76 -0
- package/lib/types/prompt-notes.d.ts +110 -0
- package/lib/types/provenance/collector.d.ts +26 -0
- package/lib/types/provenance/connectors.d.ts +11 -0
- package/lib/types/provenance/dedupe.d.ts +6 -0
- package/lib/types/provenance/extractors.d.ts +14 -0
- package/lib/types/provenance/file-preview.d.ts +10 -0
- package/lib/types/provenance/host-store.d.ts +54 -0
- package/lib/types/provenance/index.d.ts +10 -0
- package/lib/types/provenance/normalize.d.ts +13 -0
- package/lib/types/provenance/reported.d.ts +5 -0
- package/lib/types/provenance/types.d.ts +78 -0
- package/lib/types/resolve-config.d.ts +8 -3
- package/lib/types/secure-session.d.ts +36 -2
- package/lib/types/shared/session-key.d.ts +23 -0
- package/lib/types/shared/settings.d.ts +10 -0
- package/lib/types/thinking-phrases.d.ts +17 -0
- package/lib/types/types.d.ts +290 -16
- package/lib/types/user-workspace.d.ts +38 -0
- package/lib/user-workspace.js +231 -0
- package/lib/user-workspace.js.map +1 -0
- package/package.json +71 -47
- package/CHANGELOG.md +0 -93
- package/SPEC-dsh-qa-surface.md +0 -2425
- package/docs/ARCHITECTURE.md +0 -66
- package/docs/COMPATIBILITY.md +0 -14
- package/docs/CONFIGURATION.md +0 -112
- package/docs/EMBEDDING.md +0 -13
- package/lib/client/components/QaSourcesDrawer.js +0 -46
- package/lib/client/components/QaSourcesDrawer.js.map +0 -1
- package/lib/types/client/components/QaSourcesDrawer.d.ts +0 -8
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composer-side attachment intake: which files are accepted, how a pasted
|
|
3
|
+
* blob turns into an attachment, and the browser-side ceilings. The Host
|
|
4
|
+
* remains authoritative — these checks exist so a refusal happens before a
|
|
5
|
+
* round trip, not to replace the Host's own admission.
|
|
6
|
+
*/
|
|
7
|
+
import { countTextLines, hasTextExtension } from "../attachment-rules.js";
|
|
8
|
+
import { bytesToBase64 } from "./base64.js";
|
|
9
|
+
import { pluralRu } from "./settings/format.js";
|
|
10
|
+
/** Raster formats the host attachment path accepts. */
|
|
11
|
+
export const QA_IMAGE_MEDIA_TYPES = [
|
|
12
|
+
"image/png",
|
|
13
|
+
"image/jpeg",
|
|
14
|
+
"image/webp",
|
|
15
|
+
"image/gif",
|
|
16
|
+
];
|
|
17
|
+
/** Soft image ceiling; the Host stays authoritative at admission. */
|
|
18
|
+
export const QA_MAX_IMAGE_BYTES = 15 * 1024 * 1024;
|
|
19
|
+
/**
|
|
20
|
+
* Project the deployment's resolved configuration into the composer's policy.
|
|
21
|
+
* @param config - effective QA configuration.
|
|
22
|
+
* @returns the attachment ceilings the composer enforces.
|
|
23
|
+
*/
|
|
24
|
+
export function attachmentLimits(config) {
|
|
25
|
+
return {
|
|
26
|
+
textFiles: config.attachments.textFiles,
|
|
27
|
+
pastedTextLines: config.attachments.pastedTextLines,
|
|
28
|
+
maxFileBytes: config.attachments.maxFileBytes,
|
|
29
|
+
maxPending: config.attachments.maxPending,
|
|
30
|
+
extensions: config.attachments.extensions,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The file picker's `accept` value: the raster formats plus either the
|
|
35
|
+
* configured text extensions or the browser's whole `text/*` family.
|
|
36
|
+
* @param limits - attachment policy in effect.
|
|
37
|
+
* @returns the accept attribute value.
|
|
38
|
+
*/
|
|
39
|
+
export function attachmentAccept(limits) {
|
|
40
|
+
const parts = [...QA_IMAGE_MEDIA_TYPES];
|
|
41
|
+
if (limits.textFiles) {
|
|
42
|
+
parts.push("text/*", ...limits.extensions.map((value) => `.${value}`));
|
|
43
|
+
}
|
|
44
|
+
return parts.join(",");
|
|
45
|
+
}
|
|
46
|
+
let attachmentSequence = 0;
|
|
47
|
+
function nextDraftId(kind) {
|
|
48
|
+
attachmentSequence += 1;
|
|
49
|
+
return `${kind}-${String(attachmentSequence)}`;
|
|
50
|
+
}
|
|
51
|
+
/** FileReader covers runtimes without File.arrayBuffer (jsdom). */
|
|
52
|
+
function readAsArrayBuffer(file) {
|
|
53
|
+
if (typeof file.arrayBuffer === "function")
|
|
54
|
+
return file.arrayBuffer();
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const reader = new FileReader();
|
|
57
|
+
reader.onload = () => resolve(reader.result);
|
|
58
|
+
reader.onerror = () => reject(reader.error ?? new Error("read failed"));
|
|
59
|
+
reader.readAsArrayBuffer(file);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** Whether one browser-reported MIME type is worth offering as text. */
|
|
63
|
+
function isTextMediaType(mediaType) {
|
|
64
|
+
return mediaType.toLowerCase().startsWith("text/");
|
|
65
|
+
}
|
|
66
|
+
/** Whether a dropped payload may be attached as a text file at all. */
|
|
67
|
+
export function acceptsTextFile(name, mediaType, limits) {
|
|
68
|
+
if (!limits.textFiles)
|
|
69
|
+
return false;
|
|
70
|
+
return (hasTextExtension(name, limits.extensions) || isTextMediaType(mediaType));
|
|
71
|
+
}
|
|
72
|
+
function imageDraftFromBlob(blob, name) {
|
|
73
|
+
return readAsArrayBuffer(blob).then((buffer) => ({
|
|
74
|
+
kind: "image",
|
|
75
|
+
id: nextDraftId("image"),
|
|
76
|
+
mediaType: blob.type,
|
|
77
|
+
name: name === "" ? "изображение" : name,
|
|
78
|
+
data: bytesToBase64(new Uint8Array(buffer)),
|
|
79
|
+
previewUrl: URL.createObjectURL(blob),
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Turn one dropped or picked file into a composer draft, or into the message
|
|
84
|
+
* the visitor sees when the file is not accepted.
|
|
85
|
+
* @param file - browser file from a picker, drop or paste.
|
|
86
|
+
* @param limits - attachment policy in effect.
|
|
87
|
+
* @returns the draft, or a refusal message.
|
|
88
|
+
*/
|
|
89
|
+
export async function draftFromFile(file, limits) {
|
|
90
|
+
if (QA_IMAGE_MEDIA_TYPES.includes(file.type)) {
|
|
91
|
+
if (file.size > QA_MAX_IMAGE_BYTES) {
|
|
92
|
+
return `Изображение слишком большое (лимит ${formatFileSize(QA_MAX_IMAGE_BYTES)}).`;
|
|
93
|
+
}
|
|
94
|
+
return imageDraftFromBlob(file, file.name);
|
|
95
|
+
}
|
|
96
|
+
if (!acceptsTextFile(file.name, file.type, limits)) {
|
|
97
|
+
return limits.textFiles
|
|
98
|
+
? "Поддерживаются изображения и текстовые файлы (md, txt, log и другие)."
|
|
99
|
+
: "Поддерживаются изображения PNG, JPEG, WebP и GIF.";
|
|
100
|
+
}
|
|
101
|
+
if (file.size > limits.maxFileBytes) {
|
|
102
|
+
return `Файл слишком большой (лимит ${formatFileSize(limits.maxFileBytes)}).`;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
kind: "file",
|
|
106
|
+
id: nextDraftId("file"),
|
|
107
|
+
name: file.name === "" ? "файл.txt" : file.name,
|
|
108
|
+
bytes: file.size,
|
|
109
|
+
blob: file,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Convert a large pasted blob into an attached file. Pasted text has no file
|
|
114
|
+
* name of its own, so the name states what it is; the model resolves it from
|
|
115
|
+
* the durable store like any other attachment.
|
|
116
|
+
* @param text - pasted plain text.
|
|
117
|
+
* @param limits - attachment policy in effect.
|
|
118
|
+
* @returns the draft, or null when the paste stays in the input field.
|
|
119
|
+
*/
|
|
120
|
+
export function draftFromPaste(text, limits) {
|
|
121
|
+
if (!limits.textFiles || limits.pastedTextLines <= 0)
|
|
122
|
+
return null;
|
|
123
|
+
const lines = countTextLines(text);
|
|
124
|
+
if (lines <= limits.pastedTextLines)
|
|
125
|
+
return null;
|
|
126
|
+
const name = `Вставленный текст (${pluralRu(lines, ["строка", "строки", "строк"])}).txt`;
|
|
127
|
+
const blob = new Blob([text], { type: "text/plain;charset=utf-8" });
|
|
128
|
+
return {
|
|
129
|
+
kind: "file",
|
|
130
|
+
id: nextDraftId("file"),
|
|
131
|
+
name,
|
|
132
|
+
bytes: blob.size,
|
|
133
|
+
blob,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/** Human-readable megabyte budget for refusal messages. */
|
|
137
|
+
function formatMegabytes(bytes) {
|
|
138
|
+
const megabytes = bytes / (1024 * 1024);
|
|
139
|
+
const rounded = megabytes >= 10 ? Math.round(megabytes) : Math.round(megabytes * 10) / 10;
|
|
140
|
+
return `${String(rounded).replace(".", ",")} МБ`;
|
|
141
|
+
}
|
|
142
|
+
/** Format one attachment size for a card, a chip or a refusal message. */
|
|
143
|
+
export function formatFileSize(bytes) {
|
|
144
|
+
if (bytes < 1024)
|
|
145
|
+
return `${String(bytes)} Б`;
|
|
146
|
+
if (bytes < 1024 * 1024)
|
|
147
|
+
return `${String(Math.max(1, Math.round(bytes / 1024)))} КБ`;
|
|
148
|
+
return formatMegabytes(bytes);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/client/attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,12 @@ export function attestationHint(reason) {
|
|
|
37
37
|
if (reason === "adoption-refused") {
|
|
38
38
|
return "This browser tried to adopt a session created outside the current QA policy.";
|
|
39
39
|
}
|
|
40
|
+
if (reason === "session-owned-elsewhere") {
|
|
41
|
+
return "The session belongs to another QA account; the deployment's ownership map refused this browser.";
|
|
42
|
+
}
|
|
43
|
+
if (reason === "auth-required") {
|
|
44
|
+
return "The account token is absent, expired or rotated - sign in again through the QA gate.";
|
|
45
|
+
}
|
|
40
46
|
return "The specific mismatch facts are written to the Host logs.";
|
|
41
47
|
}
|
|
42
48
|
/**
|
|
@@ -50,7 +56,7 @@ export function proofMatchesConfig(proof, lockdown, sessionId) {
|
|
|
50
56
|
proof.agentPresetMatches &&
|
|
51
57
|
proof.workspaceMatches &&
|
|
52
58
|
proof.modelMatches &&
|
|
53
|
-
proof.
|
|
59
|
+
proof.sandboxModeMatches &&
|
|
54
60
|
proof.approvalIsNever &&
|
|
55
61
|
proof.permissionPreset === lockdown.permissionPreset &&
|
|
56
62
|
proof.toolPolicyLoaded &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../src/client/attestation.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD;QACE,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAKQ;IAER,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,kJAAkJ,CAAC;IAC5J,CAAC;IACD,IAAI,MAAM,KAAK,uBAAuB,EAAE,CAAC;QACvC,OAAO,6JAA6J,CAAC;IACvK,CAAC;IACD,IAAI,MAAM,KAAK,sBAAsB,EAAE,CAAC;QACtC,OAAO,4FAA4F,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACnC,OAAO,yFAAyF,CAAC;IACnG,CAAC;IACD,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAClC,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,OAAO,2DAA2D,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAsB,EACtB,QAA6C,EAC7C,SAAiB;IAEjB,OAAO,CACL,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,kBAAkB;QACxB,KAAK,CAAC,gBAAgB;QACtB,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../src/client/attestation.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD;QACE,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAKQ;IAER,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,kJAAkJ,CAAC;IAC5J,CAAC;IACD,IAAI,MAAM,KAAK,uBAAuB,EAAE,CAAC;QACvC,OAAO,6JAA6J,CAAC;IACvK,CAAC;IACD,IAAI,MAAM,KAAK,sBAAsB,EAAE,CAAC;QACtC,OAAO,4FAA4F,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACnC,OAAO,yFAAyF,CAAC;IACnG,CAAC;IACD,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAClC,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;QACzC,OAAO,iGAAiG,CAAC;IAC3G,CAAC;IACD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,sFAAsF,CAAC;IAChG,CAAC;IACD,OAAO,2DAA2D,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAsB,EACtB,QAA6C,EAC7C,SAAiB;IAEjB,OAAO,CACL,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,kBAAkB;QACxB,KAAK,CAAC,gBAAgB;QACtB,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,kBAAkB;QACxB,KAAK,CAAC,eAAe;QACrB,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB;QACpD,KAAK,CAAC,gBAAgB;QACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-side binary-to-base64. Chunked so `String.fromCharCode` never
|
|
3
|
+
* crosses the engine's argument limit on large attachments.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @param bytes - raw bytes to encode.
|
|
7
|
+
* @returns the canonical base64 text (no `data:` prefix, no padding tricks).
|
|
8
|
+
*/
|
|
9
|
+
export function bytesToBase64(bytes) {
|
|
10
|
+
let binary = "";
|
|
11
|
+
for (let index = 0; index < bytes.length; index += 0x8000) {
|
|
12
|
+
binary += String.fromCharCode(...bytes.subarray(index, index + 0x8000));
|
|
13
|
+
}
|
|
14
|
+
return btoa(binary);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/client/base64.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,CAAC;QAC1D,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attachment roster of one chat, projected for the rail's files tab: a pure
|
|
3
|
+
* scan of the durable transcript, newest message first. The browser never
|
|
4
|
+
* re-reads file bytes (the attachment route serves images), so a row keeps
|
|
5
|
+
* the same handle the transcript shows.
|
|
6
|
+
*/
|
|
7
|
+
/** Whether the group carries at least one attachment of either kind. */
|
|
8
|
+
export function groupHasAttachments(group) {
|
|
9
|
+
return group.files.length > 0 || group.images.length > 0;
|
|
10
|
+
}
|
|
11
|
+
/** Total attachment count across groups; the header badge's value. */
|
|
12
|
+
export function countChatAttachments(groups) {
|
|
13
|
+
let total = 0;
|
|
14
|
+
for (const group of groups) {
|
|
15
|
+
total += group.files.length + group.images.length;
|
|
16
|
+
}
|
|
17
|
+
return total;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Group the attachments of a chat by their sending message. Only user
|
|
21
|
+
* messages can carry attachments; messages without any are dropped. The
|
|
22
|
+
* groups come out newest message first, matching a roster that grows at the
|
|
23
|
+
* bottom of the transcript.
|
|
24
|
+
* @param messages - the chat's projected transcript.
|
|
25
|
+
* @returns attachment groups, newest message first.
|
|
26
|
+
*/
|
|
27
|
+
export function collectChatFiles(messages) {
|
|
28
|
+
const groups = [];
|
|
29
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
30
|
+
const message = messages[index];
|
|
31
|
+
if (message === undefined || message.role !== "user")
|
|
32
|
+
continue;
|
|
33
|
+
const files = message.files ?? [];
|
|
34
|
+
const images = message.images ?? [];
|
|
35
|
+
if (files.length === 0 && images.length === 0)
|
|
36
|
+
continue;
|
|
37
|
+
groups.push({
|
|
38
|
+
messageId: message.id,
|
|
39
|
+
...(message.timestamp === undefined
|
|
40
|
+
? {}
|
|
41
|
+
: { timestamp: message.timestamp }),
|
|
42
|
+
files,
|
|
43
|
+
images,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return groups;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=chat-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-files.js","sourceRoot":"","sources":["../../src/client/chat-files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,oBAAoB,CAClC,MAAkC;IAElC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA8B;IAE9B,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACxD,MAAM,CAAC,IAAI,CAAC;YACV,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YACrC,KAAK;YACL,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { memo, Fragment } from "react";
|
|
3
|
+
import { SourceIcon } from "./QaSourcesPanel.js";
|
|
4
|
+
import { sourceFileName } from "./source-refs.js";
|
|
3
5
|
const INLINE = /(\[[^\]]+\]\([^\s)]+\)|`[^`]+`|\*\*[^*]+\*\*|\*[^*]+\*)/gu;
|
|
4
6
|
const TABLE_SEPARATOR = /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/u;
|
|
5
7
|
const ORDERED_LIST = /^\d{1,3}[.)]\s+/u;
|
|
@@ -7,7 +9,7 @@ const HORIZONTAL_RULE = /^\s*(?:-{3,}|\*{3,}|_{3,})\s*$/u;
|
|
|
7
9
|
const BLOCK_START = /^(#{1,3})\s+|```|^[-*]\s+|^\d{1,3}[.)]\s+|^>\s|(?:^\s*(?:-{3,}|\*{3,}|_{3,})\s*$)/u;
|
|
8
10
|
function safeHref(value) {
|
|
9
11
|
try {
|
|
10
|
-
const url = new URL(value
|
|
12
|
+
const url = new URL(value);
|
|
11
13
|
return ["http:", "https:", "mailto:"].includes(url.protocol)
|
|
12
14
|
? value
|
|
13
15
|
: undefined;
|
|
@@ -16,7 +18,21 @@ function safeHref(value) {
|
|
|
16
18
|
return undefined;
|
|
17
19
|
}
|
|
18
20
|
}
|
|
19
|
-
|
|
21
|
+
/**
|
|
22
|
+
* One inline source footnote: a pill over the matched link or path with a
|
|
23
|
+
* hover/focus preview card (title, target, snippet). A URL-backed source is
|
|
24
|
+
* an anchor that opens right away; a path-backed one is a button whose click
|
|
25
|
+
* the owner routes to the sources drawer.
|
|
26
|
+
*/
|
|
27
|
+
function SourceChip({ source, label, href, onOpen, }) {
|
|
28
|
+
const target = source.path ?? source.uri ?? source.title;
|
|
29
|
+
const face = (_jsxs(_Fragment, { children: [_jsx("span", { className: "dsh-qa-srcref__icon", "data-kind": source.kind, children: _jsx(SourceIcon, { kind: source.kind }) }), _jsx("span", { className: "dsh-qa-srcref__label", children: label }), _jsxs("span", { className: "dsh-qa-srcref__card", "aria-hidden": "true", children: [_jsxs("span", { className: "dsh-qa-srcref__card-title", children: [_jsx("span", { className: "dsh-qa-srcref__icon", "data-kind": source.kind, children: _jsx(SourceIcon, { kind: source.kind }) }), source.title || label] }), _jsx("span", { className: "dsh-qa-srcref__card-target", children: target }), source.snippet === undefined ? null : (_jsx("span", { className: "dsh-qa-srcref__card-snippet", children: source.snippet }))] })] }));
|
|
30
|
+
if (href !== undefined) {
|
|
31
|
+
return (_jsx("a", { className: "dsh-qa-srcref", "data-kind": source.kind, href: href, target: "_blank", rel: "noopener noreferrer", children: face }));
|
|
32
|
+
}
|
|
33
|
+
return (_jsx("button", { type: "button", className: "dsh-qa-srcref", "data-kind": source.kind, onClick: onOpen === undefined ? undefined : () => onOpen(source), children: face }));
|
|
34
|
+
}
|
|
35
|
+
function inline(text, keyPrefix, sources = {}) {
|
|
20
36
|
const nodes = [];
|
|
21
37
|
let offset = 0;
|
|
22
38
|
for (const match of text.matchAll(INLINE)) {
|
|
@@ -28,10 +44,29 @@ function inline(text, keyPrefix) {
|
|
|
28
44
|
if (token.startsWith("[")) {
|
|
29
45
|
const parts = /^\[([^\]]+)\]\(([^\s)]+)\)$/u.exec(token);
|
|
30
46
|
const href = parts?.[2] === undefined ? undefined : safeHref(parts[2]);
|
|
31
|
-
|
|
47
|
+
if (href === undefined) {
|
|
48
|
+
nodes.push(token);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const source = sources.refs?.resolveUrl(href);
|
|
52
|
+
nodes.push(source === undefined ? (_jsx("a", { href: href, target: "_blank", rel: "noreferrer", children: parts?.[1] }, key)) : (_jsx(SourceChip, { source: source, label: parts?.[1] || source.title, href: href }, key)));
|
|
53
|
+
}
|
|
32
54
|
}
|
|
33
55
|
else if (token.startsWith("`")) {
|
|
34
|
-
|
|
56
|
+
const value = token.slice(1, -1);
|
|
57
|
+
const source = sources.refs?.resolvePath(value);
|
|
58
|
+
if (source === undefined) {
|
|
59
|
+
nodes.push(_jsx("code", { children: value }, key));
|
|
60
|
+
}
|
|
61
|
+
else if (source.path === undefined) {
|
|
62
|
+
nodes.push(_jsx(SourceChip, { source: source, label: source.title || value, href: safeHref(source.uri ?? "") }, key));
|
|
63
|
+
}
|
|
64
|
+
else if (sources.onSourceOpen === undefined) {
|
|
65
|
+
nodes.push(_jsx("code", { children: value }, key));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
nodes.push(_jsx(SourceChip, { source: source, label: sourceFileName(source), onOpen: sources.onSourceOpen }, key));
|
|
69
|
+
}
|
|
35
70
|
}
|
|
36
71
|
else if (token.startsWith("**")) {
|
|
37
72
|
nodes.push(_jsx("strong", { children: token.slice(2, -2) }, key));
|
|
@@ -62,7 +97,7 @@ function isTableStart(lines, index) {
|
|
|
62
97
|
return false;
|
|
63
98
|
return TABLE_SEPARATOR.test(lines[index + 1] ?? "");
|
|
64
99
|
}
|
|
65
|
-
function renderTable(lines, index) {
|
|
100
|
+
function renderTable(lines, index, sources) {
|
|
66
101
|
const header = splitTableRow(lines[index] ?? "");
|
|
67
102
|
const aligns = splitTableRow(lines[index + 1] ?? "").map((cell) => {
|
|
68
103
|
const left = cell.startsWith(":");
|
|
@@ -81,7 +116,7 @@ function renderTable(lines, index) {
|
|
|
81
116
|
cursor += 1;
|
|
82
117
|
}
|
|
83
118
|
return {
|
|
84
|
-
node: (_jsx("div", { className: "dsh-qa-md-table", children: _jsxs("table", { children: [_jsx("thead", { children: _jsx("tr", { children: header.map((cell, cellIndex) => (_jsx("th", { style: { textAlign: aligns[cellIndex] ?? "left" }, children: inline(cell, `th:${index}:${cellIndex}
|
|
119
|
+
node: (_jsx("div", { className: "dsh-qa-md-table", children: _jsxs("table", { children: [_jsx("thead", { children: _jsx("tr", { children: header.map((cell, cellIndex) => (_jsx("th", { style: { textAlign: aligns[cellIndex] ?? "left" }, children: inline(cell, `th:${index}:${cellIndex}`, sources) }, `h:${cellIndex}`))) }) }), _jsx("tbody", { children: rows.map((row, rowIndex) => (_jsx("tr", { children: header.map((_, cellIndex) => (_jsx("td", { style: { textAlign: aligns[cellIndex] ?? "left" }, children: inline(row[cellIndex] ?? "", `td:${rowIndex}:${cellIndex}`, sources) }, `d:${rowIndex}:${cellIndex}`))) }, `r:${rowIndex}`))) })] }) }, `table:${index}`)),
|
|
85
120
|
next: cursor,
|
|
86
121
|
};
|
|
87
122
|
}
|
|
@@ -90,7 +125,13 @@ function renderTable(lines, index) {
|
|
|
90
125
|
* Memoized on the text value: stream updates re-render only the message whose
|
|
91
126
|
* text actually changed, so committed history is never re-parsed.
|
|
92
127
|
*/
|
|
93
|
-
export const Markdown = memo(function Markdown({ text, }) {
|
|
128
|
+
export const Markdown = memo(function Markdown({ text, sourceRefs, onSourceOpen, }) {
|
|
129
|
+
const sources = sourceRefs === undefined
|
|
130
|
+
? {}
|
|
131
|
+
: {
|
|
132
|
+
refs: sourceRefs,
|
|
133
|
+
...(onSourceOpen === undefined ? {} : { onSourceOpen }),
|
|
134
|
+
};
|
|
94
135
|
const lines = text.replace(/\r\n?/gu, "\n").split("\n");
|
|
95
136
|
const blocks = [];
|
|
96
137
|
for (let index = 0; index < lines.length;) {
|
|
@@ -109,7 +150,7 @@ export const Markdown = memo(function Markdown({ text, }) {
|
|
|
109
150
|
continue;
|
|
110
151
|
}
|
|
111
152
|
if (isTableStart(lines, index)) {
|
|
112
|
-
const table = renderTable(lines, index);
|
|
153
|
+
const table = renderTable(lines, index, sources);
|
|
113
154
|
blocks.push(table.node);
|
|
114
155
|
index = table.next;
|
|
115
156
|
continue;
|
|
@@ -121,7 +162,7 @@ export const Markdown = memo(function Markdown({ text, }) {
|
|
|
121
162
|
}
|
|
122
163
|
const heading = /^(#{1,3})\s+(.+)$/u.exec(line);
|
|
123
164
|
if (heading !== null) {
|
|
124
|
-
const content = inline(heading[2] ?? "", `heading:${index}
|
|
165
|
+
const content = inline(heading[2] ?? "", `heading:${index}`, sources);
|
|
125
166
|
const key = `heading:${index}`;
|
|
126
167
|
blocks.push(heading[1]?.length === 1 ? (_jsx("h2", { children: content }, key)) : heading[1]?.length === 2 ? (_jsx("h3", { children: content }, key)) : (_jsx("h4", { children: content }, key)));
|
|
127
168
|
index += 1;
|
|
@@ -131,7 +172,7 @@ export const Markdown = memo(function Markdown({ text, }) {
|
|
|
131
172
|
const items = [];
|
|
132
173
|
while (index < lines.length && /^[-*]\s+/u.test(lines[index] ?? "")) {
|
|
133
174
|
const content = (lines[index] ?? "").replace(/^[-*]\s+/u, "");
|
|
134
|
-
items.push(_jsx("li", { children: inline(content, `item:${index}
|
|
175
|
+
items.push(_jsx("li", { children: inline(content, `item:${index}`, sources) }, `item:${index}`));
|
|
135
176
|
index += 1;
|
|
136
177
|
}
|
|
137
178
|
blocks.push(_jsx("ul", { children: items }, `list:${index}`));
|
|
@@ -141,14 +182,14 @@ export const Markdown = memo(function Markdown({ text, }) {
|
|
|
141
182
|
const items = [];
|
|
142
183
|
while (index < lines.length && ORDERED_LIST.test(lines[index] ?? "")) {
|
|
143
184
|
const content = (lines[index] ?? "").replace(ORDERED_LIST, "");
|
|
144
|
-
items.push(_jsx("li", { children: inline(content, `oitem:${index}
|
|
185
|
+
items.push(_jsx("li", { children: inline(content, `oitem:${index}`, sources) }, `oitem:${index}`));
|
|
145
186
|
index += 1;
|
|
146
187
|
}
|
|
147
188
|
blocks.push(_jsx("ol", { children: items }, `olist:${index}`));
|
|
148
189
|
continue;
|
|
149
190
|
}
|
|
150
191
|
if (line.startsWith("> ")) {
|
|
151
|
-
blocks.push(_jsx("blockquote", { children: inline(line.slice(2), `quote:${index}
|
|
192
|
+
blocks.push(_jsx("blockquote", { children: inline(line.slice(2), `quote:${index}`, sources) }, `quote:${index}`));
|
|
152
193
|
index += 1;
|
|
153
194
|
continue;
|
|
154
195
|
}
|
|
@@ -165,7 +206,7 @@ export const Markdown = memo(function Markdown({ text, }) {
|
|
|
165
206
|
paragraph.push(lines[index] ?? "");
|
|
166
207
|
index += 1;
|
|
167
208
|
}
|
|
168
|
-
blocks.push(_jsx("p", { children: paragraph.map((part, partIndex) => (_jsxs(Fragment, { children: [partIndex === 0 ? null : _jsx("br", {}), inline(part, `paragraph:${index}:${partIndex}
|
|
209
|
+
blocks.push(_jsx("p", { children: paragraph.map((part, partIndex) => (_jsxs(Fragment, { children: [partIndex === 0 ? null : _jsx("br", {}), inline(part, `paragraph:${index}:${partIndex}`, sources)] }, `line:${partIndex}`))) }, `paragraph:${index}`));
|
|
169
210
|
}
|
|
170
211
|
return _jsx(_Fragment, { children: blocks });
|
|
171
212
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../src/client/components/Markdown.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../src/client/components/Markdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
function Logo({ logoUrl }) {
|
|
4
|
+
if (logoUrl !== null) {
|
|
5
|
+
return _jsx("img", { className: "dsh-qa-auth__logo", src: logoUrl, alt: "" });
|
|
6
|
+
}
|
|
7
|
+
return (_jsxs("svg", { className: "dsh-qa-auth__logo", viewBox: "0 0 20 20", "aria-hidden": "true", children: [_jsx("path", { d: "M10 2.75a6.4 6.4 0 0 0-4.9 10.52c.2.24.28.5.24.79l-.2 1.44 1.9-.7c.24-.09.5-.06.74.05A6.4 6.4 0 1 0 10 2.75Z" }), _jsx("path", { d: "M7.4 8.1h5.2M7.4 11h3.2" })] }));
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The full-frame login/registration card shown instead of the chat while the
|
|
11
|
+
* deployment has accounts enabled and the browser holds no valid identity.
|
|
12
|
+
* Errors are the Host's coarse codes rendered as audience-safe copy.
|
|
13
|
+
*/
|
|
14
|
+
export function QaAuthGate(props) {
|
|
15
|
+
const { snapshot, accounts } = props;
|
|
16
|
+
const mode = snapshot.stage === "gate" ? snapshot.mode : "login";
|
|
17
|
+
const busy = snapshot.stage === "gate" ? snapshot.busy : false;
|
|
18
|
+
const [email, setEmail] = useState("");
|
|
19
|
+
const [password, setPassword] = useState("");
|
|
20
|
+
const showRegister = props.allowRegistration;
|
|
21
|
+
const submit = (event) => {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
if (busy)
|
|
24
|
+
return;
|
|
25
|
+
const operation = mode === "register"
|
|
26
|
+
? accounts.register(email, password)
|
|
27
|
+
: accounts.login(email, password);
|
|
28
|
+
void operation;
|
|
29
|
+
};
|
|
30
|
+
return (_jsx("main", { className: "dsh-qa-surface dsh-qa-auth", "aria-label": "\u0412\u0445\u043E\u0434 \u0432 \u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A", children: _jsxs("form", { className: "dsh-qa-auth__card", onSubmit: submit, children: [_jsxs("div", { className: "dsh-qa-auth__brand", children: [_jsx(Logo, { logoUrl: props.logoUrl }), _jsx("h1", { children: props.title })] }), showRegister ? (_jsxs("div", { className: "dsh-qa-auth__tabs", role: "tablist", "aria-label": "\u0412\u0445\u043E\u0434 \u0438\u043B\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F", children: [_jsx("button", { type: "button", role: "tab", "aria-selected": mode === "login", className: mode === "login"
|
|
31
|
+
? "dsh-qa-auth__tab dsh-qa-auth__tab--active"
|
|
32
|
+
: "dsh-qa-auth__tab", onClick: () => accounts.setMode("login"), children: "\u0412\u0445\u043E\u0434" }), _jsx("button", { type: "button", role: "tab", "aria-selected": mode === "register", className: mode === "register"
|
|
33
|
+
? "dsh-qa-auth__tab dsh-qa-auth__tab--active"
|
|
34
|
+
: "dsh-qa-auth__tab", onClick: () => accounts.setMode("register"), children: "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F" })] })) : null, _jsxs("label", { className: "dsh-qa-auth__field", children: [_jsx("span", { children: "Email" }), _jsx("input", { type: "email", name: "email", autoComplete: "email", required: true, disabled: busy, value: email, onChange: (event) => setEmail(event.currentTarget.value) })] }), _jsxs("label", { className: "dsh-qa-auth__field", children: [_jsx("span", { children: "\u041F\u0430\u0440\u043E\u043B\u044C" }), _jsx("input", { type: "password", name: "password", autoComplete: mode === "register" ? "new-password" : "current-password", required: true, minLength: 8, disabled: busy, value: password, onChange: (event) => setPassword(event.currentTarget.value) })] }), snapshot.stage === "gate" && snapshot.error !== null ? (_jsx("p", { className: "dsh-qa-auth__error", role: "alert", children: snapshot.error })) : null, _jsx("button", { type: "submit", className: "dsh-qa-auth__submit", disabled: busy, children: busy
|
|
35
|
+
? "Подождите…"
|
|
36
|
+
: mode === "register"
|
|
37
|
+
? "Зарегистрироваться"
|
|
38
|
+
: "Войти" })] }) }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=QaAuthGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QaAuthGate.js","sourceRoot":"","sources":["../../../src/client/components/QaAuthGate.tsx"],"names":[],"mappings":"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"}
|