@yadsh/dsh-qa-surface 0.15.1 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/lib/attestation.js.map +1 -1
  2. package/lib/client/QaAccountsController.js +3 -1
  3. package/lib/client/QaAccountsController.js.map +1 -1
  4. package/lib/client/QaSessionController.js +66 -18
  5. package/lib/client/QaSessionController.js.map +1 -1
  6. package/lib/client/QaSurface.js +64 -2
  7. package/lib/client/QaSurface.js.map +1 -1
  8. package/lib/client/QaTranscriptAdapter.js +46 -8
  9. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  10. package/lib/client/admin/pages/Users.js +2 -2
  11. package/lib/client/admin/pages/Users.js.map +1 -1
  12. package/lib/client/attestation.js +13 -5
  13. package/lib/client/attestation.js.map +1 -1
  14. package/lib/client/chat-artifacts.js +94 -0
  15. package/lib/client/chat-artifacts.js.map +1 -0
  16. package/lib/client/chat-files.js +24 -14
  17. package/lib/client/chat-files.js.map +1 -1
  18. package/lib/client/clipboard.js +86 -0
  19. package/lib/client/clipboard.js.map +1 -0
  20. package/lib/client/components/QaAuthGate.js +41 -5
  21. package/lib/client/components/QaAuthGate.js.map +1 -1
  22. package/lib/client/components/QaChangelog.js +33 -0
  23. package/lib/client/components/QaChangelog.js.map +1 -1
  24. package/lib/client/components/QaFileAttachment.js +7 -5
  25. package/lib/client/components/QaFileAttachment.js.map +1 -1
  26. package/lib/client/components/QaFilesPanel.js +7 -3
  27. package/lib/client/components/QaFilesPanel.js.map +1 -1
  28. package/lib/client/components/QaMessage.js +27 -24
  29. package/lib/client/components/QaMessage.js.map +1 -1
  30. package/lib/client/components/QaWorkspaceBrowser.js +18 -25
  31. package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
  32. package/lib/client/components/copy-hint.js +10 -0
  33. package/lib/client/components/copy-hint.js.map +1 -0
  34. package/lib/client/markdown/CodeBlock.js +6 -13
  35. package/lib/client/markdown/CodeBlock.js.map +1 -1
  36. package/lib/client/project-session-state.js +1 -0
  37. package/lib/client/project-session-state.js.map +1 -1
  38. package/lib/client/settings/styles.js +1 -1
  39. package/lib/client/styles.js +11 -4
  40. package/lib/client/styles.js.map +1 -1
  41. package/lib/client/user-settings/IntegrationTokensPage.js +4 -12
  42. package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
  43. package/lib/client/user-settings/PasswordSettingsPage.js +6 -1
  44. package/lib/client/user-settings/PasswordSettingsPage.js.map +1 -1
  45. package/lib/client/workspace-download.js +32 -0
  46. package/lib/client/workspace-download.js.map +1 -0
  47. package/lib/client/workspace-paths.js +55 -0
  48. package/lib/client/workspace-paths.js.map +1 -0
  49. package/lib/client.js +719 -253
  50. package/lib/client.js.map +1 -1
  51. package/lib/index.js +15 -1
  52. package/lib/index.js.map +1 -1
  53. package/lib/secure-session.js +36 -11
  54. package/lib/secure-session.js.map +1 -1
  55. package/lib/typert.host.js +75 -75
  56. package/lib/typert.remote-client.js +75 -75
  57. package/lib/types/attestation.d.ts +1 -1
  58. package/lib/types/client/QaAccountsController.d.ts +2 -0
  59. package/lib/types/client/QaSessionController.d.ts +13 -0
  60. package/lib/types/client/QaTranscriptAdapter.d.ts +6 -0
  61. package/lib/types/client/attestation.d.ts +7 -3
  62. package/lib/types/client/chat-artifacts.d.ts +10 -0
  63. package/lib/types/client/chat-files.d.ts +13 -8
  64. package/lib/types/client/clipboard.d.ts +37 -0
  65. package/lib/types/client/components/QaAuthGate.d.ts +4 -2
  66. package/lib/types/client/components/QaFileAttachment.d.ts +13 -4
  67. package/lib/types/client/components/QaFilesPanel.d.ts +15 -2
  68. package/lib/types/client/components/QaMessage.d.ts +10 -2
  69. package/lib/types/client/components/QaWorkspaceBrowser.d.ts +7 -1
  70. package/lib/types/client/components/copy-hint.d.ts +8 -0
  71. package/lib/types/client/project-session-state.d.ts +5 -0
  72. package/lib/types/client/workspace-download.d.ts +16 -0
  73. package/lib/types/client/workspace-paths.d.ts +25 -0
  74. package/lib/types/secure-session.d.ts +4 -0
  75. package/lib/types/types.d.ts +26 -0
  76. package/locale/en.json +6 -0
  77. package/package.json +4 -2
@@ -1,6 +1,8 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from "react";
3
3
  import { QA_SERVICE_TOKEN_DEFAULT_SCOPES, QA_SERVICE_TOKEN_LABEL_MAX, QA_SERVICE_TOKEN_SCOPES, QA_SERVICE_TOKEN_TTL_DAYS_MAX, QA_SERVICE_TOKEN_TTL_DAYS_MIN, } from "../../shared/integration-tokens.js";
4
+ import { useCopyAction } from "../clipboard.js";
5
+ import { CopyHint } from "../components/copy-hint.js";
4
6
  import { QaSettingsActions, QaSettingsButton, QaSettingsField, QaSettingsNotice, QaSettingsSection, } from "./fields.js";
5
7
  /** Scope names as the person choosing them reads them. */
6
8
  const SCOPE_LABELS = {
@@ -49,7 +51,7 @@ export function QaIntegrationTokensPage(props) {
49
51
  const [scopes, setScopes] = useState(QA_SERVICE_TOKEN_DEFAULT_SCOPES);
50
52
  const [busy, setBusy] = useState(false);
51
53
  const [issued, setIssued] = useState(null);
52
- const [copied, setCopied] = useState(false);
54
+ const { copied, impossible: copyImpossible, refused: copyRefused, copy: copySecret, } = useCopyAction(issued?.token ?? "");
53
55
  const [pendingRevoke, setPendingRevoke] = useState(null);
54
56
  const [revoking, setRevoking] = useState(null);
55
57
  useEffect(() => {
@@ -85,7 +87,6 @@ export function QaIntegrationTokensPage(props) {
85
87
  return;
86
88
  setBusy(true);
87
89
  setError(null);
88
- setCopied(false);
89
90
  void props.api
90
91
  .create({
91
92
  label: label.trim(),
@@ -123,17 +124,8 @@ export function QaIntegrationTokensPage(props) {
123
124
  await reload();
124
125
  });
125
126
  };
126
- const copySecret = (secret) => {
127
- const clipboard = navigator.clipboard;
128
- if (clipboard === undefined)
129
- return;
130
- void clipboard.writeText(secret).then(() => setCopied(true), () => undefined);
131
- };
132
127
  const now = Date.now();
133
- return (_jsxs("div", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-tokens", children: [_jsx("h3", { className: "dsh-qa-settings__page-title", "data-testid": "qa-settings-tokens-title", children: "\u0418\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0442\u043E\u043A\u0435\u043D\u044B" }), _jsx("p", { className: "dsh-qa-settings__lead", "data-testid": "qa-settings-tokens-lead", children: "\u0422\u043E\u043A\u0435\u043D \u2014 \u044D\u0442\u043E \u043A\u043B\u044E\u0447 \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B: \u043E\u043D\u0430 \u0437\u0430\u0434\u0430\u0451\u0442 \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u043E\u0442 \u0438\u043C\u0435\u043D\u0438 \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438, \u043D\u0435 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u044F \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u0412\u044B\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u0442\u043E\u043A\u0435\u043D \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043E\u0442\u0437\u044B\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043E, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0430 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043D\u0443\u0436\u043D\u0430. \u0422\u043E\u043A\u0435\u043D \u043F\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043C\u0435\u043D\u0443 \u0432\u0430\u0448\u0435\u0433\u043E \u043F\u0430\u0440\u043E\u043B\u044F, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u0442\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E." }), issued === null ? null : (_jsxs(QaSettingsSection, { testId: "qa-settings-tokens-issued", title: "\u0422\u043E\u043A\u0435\u043D \u0441\u043E\u0437\u0434\u0430\u043D", children: [_jsx(QaSettingsNotice, { tone: "warn", testId: "qa-settings-tokens-issued-notice", children: "\u0421\u043A\u043E\u043F\u0438\u0440\u0443\u0439\u0442\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u0435\u0433\u043E \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438. \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0435\u0433\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u043D\u0435\u043B\u044C\u0437\u044F: \u043D\u0430 \u0441\u0442\u0435\u043D\u0434\u0435 \u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0442\u043F\u0435\u0447\u0430\u0442\u043E\u043A." }), _jsx(QaSettingsField, { testId: "qa-settings-tokens-secret", label: "\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0442\u043E\u043A\u0435\u043D\u0430", hint: "\u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043E \u043A\u0430\u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A Authorization: Bearer \u2026", children: _jsx("input", { className: "dsh-qa-settings__code", value: issued.token, readOnly: true, onFocus: (event) => event.currentTarget.select() }) }), _jsxs(QaSettingsActions, { children: [_jsx(QaSettingsButton, { testId: "qa-settings-tokens-copy", label: copied ? "Скопировано" : "Скопировать", onClick: () => copySecret(issued.token) }), _jsx(QaSettingsButton, { testId: "qa-settings-tokens-ack", tone: "primary", label: "\u042F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u043B \u0442\u043E\u043A\u0435\u043D", onClick: () => {
134
- setIssued(null);
135
- setCopied(false);
136
- } })] })] })), _jsx(QaSettingsSection, { testId: "qa-settings-tokens-new", title: "\u041D\u043E\u0432\u044B\u0439 \u0442\u043E\u043A\u0435\u043D", children: props.api.canCreate ? (_jsxs("form", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-tokens-create-form", onSubmit: submit, children: [_jsx(QaSettingsField, { testId: "qa-settings-tokens-label", label: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435", hint: "\u041F\u043E \u043D\u0435\u043C\u0443 \u0432\u044B \u043E\u0442\u043B\u0438\u0447\u0438\u0442\u0435 \u0442\u043E\u043A\u0435\u043D\u044B \u0432 \u0441\u043F\u0438\u0441\u043A\u0435: \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u00AB\u043C\u043E\u0441\u0442 \u0437\u0430\u044F\u0432\u043E\u043A\u00BB.", children: _jsx("input", { value: label, maxLength: QA_SERVICE_TOKEN_LABEL_MAX, placeholder: "\u043C\u043E\u0441\u0442 \u0437\u0430\u044F\u0432\u043E\u043A", onChange: (event) => setLabel(event.currentTarget.value) }) }), QA_SERVICE_TOKEN_SCOPES.map((scope) => (_jsx("div", { className: "dsh-qa-settings__toggle-row", "data-testid": "qa-settings-tokens-scope", children: _jsxs("label", { className: "dsh-qa-settings__toggle", children: [_jsx("input", { type: "checkbox", "data-testid": "qa-settings-tokens-scope-input", checked: scopes.includes(scope), onChange: (event) => toggleScope(scope, event.currentTarget.checked) }), _jsx("span", { className: "dsh-qa-settings__toggle-label", "data-testid": "qa-settings-tokens-scope-label", children: SCOPE_LABELS[scope] })] }) }, scope))), _jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-scopes-hint", children: "\u041F\u0440\u0430\u0432\u0430 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u044E\u0442 \u0442\u043E\u043A\u0435\u043D, \u043D\u043E \u043D\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044F\u044E\u0442 \u0434\u043E\u0441\u0442\u0443\u043F \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438: \u0442\u043E\u043A\u0435\u043D \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0442\u043E\u0433\u043E, \u0447\u0442\u043E \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u044B." }), _jsx(QaSettingsField, { testId: "qa-settings-tokens-ttl", label: "\u0421\u0440\u043E\u043A, \u0434\u043D\u0435\u0439", hint: `От ${String(QA_SERVICE_TOKEN_TTL_DAYS_MIN)} до ${String(QA_SERVICE_TOKEN_TTL_DAYS_MAX)}; по умолчанию — срок вашей сессии.`, children: _jsx("select", { value: days, onChange: (event) => setDays(Number(event.currentTarget.value)), children: TTL_CHOICES.map((choice) => (_jsx("option", { value: choice, children: choice }, choice))) }) }), _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { testId: "qa-settings-tokens-create", type: "submit", tone: "primary", disabled: busy, label: busy ? "Создание…" : "Создать токен" }) })] })) : (_jsx(QaSettingsNotice, { tone: "info", testId: "qa-settings-tokens-api-off", children: "\u0418\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 API \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D \u043D\u0430 \u044D\u0442\u043E\u043C \u0441\u0442\u0435\u043D\u0434\u0435, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C \u0442\u043E\u043A\u0435\u043D\u044B \u043F\u043E\u043A\u0430 \u043D\u0435 \u0434\u043B\u044F \u0447\u0435\u0433\u043E. \u0412\u044B\u0434\u0430\u043D\u043D\u044B\u0435 \u0440\u0430\u043D\u0435\u0435 \u0442\u043E\u043A\u0435\u043D\u044B \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u043D\u0438\u0436\u0435 \u2014 \u0438\u0445 \u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043E\u0437\u0432\u0430\u0442\u044C." })) }), _jsxs(QaSettingsSection, { testId: "qa-settings-tokens-list", title: "\u0412\u044B\u0434\u0430\u043D\u043D\u044B\u0435 \u0442\u043E\u043A\u0435\u043D\u044B", children: [error === null ? null : (_jsx(QaSettingsNotice, { tone: "error", testId: "qa-settings-tokens-error", children: error })), loading ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-loading", children: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026" })) : tokens.length === 0 ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-empty", children: "\u0423 \u0432\u0430\u0441 \u043F\u043E\u043A\u0430 \u043D\u0435\u0442 \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0442\u043E\u043A\u0435\u043D\u043E\u0432." })) : (_jsx("ul", { className: "dsh-qa-settings__rows", "data-testid": "qa-settings-tokens-rows", children: tokens.map((token) => {
128
+ return (_jsxs("div", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-tokens", children: [_jsx("h3", { className: "dsh-qa-settings__page-title", "data-testid": "qa-settings-tokens-title", children: "\u0418\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0442\u043E\u043A\u0435\u043D\u044B" }), _jsx("p", { className: "dsh-qa-settings__lead", "data-testid": "qa-settings-tokens-lead", children: "\u0422\u043E\u043A\u0435\u043D \u2014 \u044D\u0442\u043E \u043A\u043B\u044E\u0447 \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B: \u043E\u043D\u0430 \u0437\u0430\u0434\u0430\u0451\u0442 \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u043E\u0442 \u0438\u043C\u0435\u043D\u0438 \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438, \u043D\u0435 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u044F \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u0412\u044B\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u0442\u043E\u043A\u0435\u043D \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043E\u0442\u0437\u044B\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043E, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0430 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043D\u0443\u0436\u043D\u0430. \u0422\u043E\u043A\u0435\u043D \u043F\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043C\u0435\u043D\u0443 \u0432\u0430\u0448\u0435\u0433\u043E \u043F\u0430\u0440\u043E\u043B\u044F, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u0442\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E." }), issued === null ? null : (_jsxs(QaSettingsSection, { testId: "qa-settings-tokens-issued", title: "\u0422\u043E\u043A\u0435\u043D \u0441\u043E\u0437\u0434\u0430\u043D", children: [_jsx(QaSettingsNotice, { tone: "warn", testId: "qa-settings-tokens-issued-notice", children: "\u0421\u043A\u043E\u043F\u0438\u0440\u0443\u0439\u0442\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u0435\u0433\u043E \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438. \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0435\u0433\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u043D\u0435\u043B\u044C\u0437\u044F: \u043D\u0430 \u0441\u0442\u0435\u043D\u0434\u0435 \u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0442\u043F\u0435\u0447\u0430\u0442\u043E\u043A." }), _jsx(QaSettingsField, { testId: "qa-settings-tokens-secret", label: "\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0442\u043E\u043A\u0435\u043D\u0430", hint: "\u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043E \u043A\u0430\u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A Authorization: Bearer \u2026", children: _jsx("input", { className: "dsh-qa-settings__code", value: issued.token, readOnly: true, onFocus: (event) => event.currentTarget.select() }) }), _jsxs(QaSettingsActions, { children: [copyImpossible ? (_jsx(CopyHint, { testId: "qa-settings-tokens-copy-hint" })) : (_jsxs(_Fragment, { children: [_jsx(QaSettingsButton, { testId: "qa-settings-tokens-copy", label: copied ? "Скопировано" : "Скопировать", onClick: copySecret }), copyRefused ? (_jsx(CopyHint, { testId: "qa-settings-tokens-copy-hint" })) : null] })), _jsx(QaSettingsButton, { testId: "qa-settings-tokens-ack", tone: "primary", label: "\u042F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u043B \u0442\u043E\u043A\u0435\u043D", onClick: () => setIssued(null) })] })] })), _jsx(QaSettingsSection, { testId: "qa-settings-tokens-new", title: "\u041D\u043E\u0432\u044B\u0439 \u0442\u043E\u043A\u0435\u043D", children: props.api.canCreate ? (_jsxs("form", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-tokens-create-form", onSubmit: submit, children: [_jsx(QaSettingsField, { testId: "qa-settings-tokens-label", label: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435", hint: "\u041F\u043E \u043D\u0435\u043C\u0443 \u0432\u044B \u043E\u0442\u043B\u0438\u0447\u0438\u0442\u0435 \u0442\u043E\u043A\u0435\u043D\u044B \u0432 \u0441\u043F\u0438\u0441\u043A\u0435: \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u00AB\u043C\u043E\u0441\u0442 \u0437\u0430\u044F\u0432\u043E\u043A\u00BB.", children: _jsx("input", { value: label, maxLength: QA_SERVICE_TOKEN_LABEL_MAX, placeholder: "\u043C\u043E\u0441\u0442 \u0437\u0430\u044F\u0432\u043E\u043A", onChange: (event) => setLabel(event.currentTarget.value) }) }), QA_SERVICE_TOKEN_SCOPES.map((scope) => (_jsx("div", { className: "dsh-qa-settings__toggle-row", "data-testid": "qa-settings-tokens-scope", children: _jsxs("label", { className: "dsh-qa-settings__toggle", children: [_jsx("input", { type: "checkbox", "data-testid": "qa-settings-tokens-scope-input", checked: scopes.includes(scope), onChange: (event) => toggleScope(scope, event.currentTarget.checked) }), _jsx("span", { className: "dsh-qa-settings__toggle-label", "data-testid": "qa-settings-tokens-scope-label", children: SCOPE_LABELS[scope] })] }) }, scope))), _jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-scopes-hint", children: "\u041F\u0440\u0430\u0432\u0430 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u044E\u0442 \u0442\u043E\u043A\u0435\u043D, \u043D\u043E \u043D\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044F\u044E\u0442 \u0434\u043E\u0441\u0442\u0443\u043F \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438: \u0442\u043E\u043A\u0435\u043D \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0442\u043E\u0433\u043E, \u0447\u0442\u043E \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u044B." }), _jsx(QaSettingsField, { testId: "qa-settings-tokens-ttl", label: "\u0421\u0440\u043E\u043A, \u0434\u043D\u0435\u0439", hint: `От ${String(QA_SERVICE_TOKEN_TTL_DAYS_MIN)} до ${String(QA_SERVICE_TOKEN_TTL_DAYS_MAX)}; по умолчанию — срок вашей сессии.`, children: _jsx("select", { value: days, onChange: (event) => setDays(Number(event.currentTarget.value)), children: TTL_CHOICES.map((choice) => (_jsx("option", { value: choice, children: choice }, choice))) }) }), _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { testId: "qa-settings-tokens-create", type: "submit", tone: "primary", disabled: busy, label: busy ? "Создание…" : "Создать токен" }) })] })) : (_jsx(QaSettingsNotice, { tone: "info", testId: "qa-settings-tokens-api-off", children: "\u0418\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 API \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D \u043D\u0430 \u044D\u0442\u043E\u043C \u0441\u0442\u0435\u043D\u0434\u0435, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C \u0442\u043E\u043A\u0435\u043D\u044B \u043F\u043E\u043A\u0430 \u043D\u0435 \u0434\u043B\u044F \u0447\u0435\u0433\u043E. \u0412\u044B\u0434\u0430\u043D\u043D\u044B\u0435 \u0440\u0430\u043D\u0435\u0435 \u0442\u043E\u043A\u0435\u043D\u044B \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u043D\u0438\u0436\u0435 \u2014 \u0438\u0445 \u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043E\u0437\u0432\u0430\u0442\u044C." })) }), _jsxs(QaSettingsSection, { testId: "qa-settings-tokens-list", title: "\u0412\u044B\u0434\u0430\u043D\u043D\u044B\u0435 \u0442\u043E\u043A\u0435\u043D\u044B", children: [error === null ? null : (_jsx(QaSettingsNotice, { tone: "error", testId: "qa-settings-tokens-error", children: error })), loading ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-loading", children: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026" })) : tokens.length === 0 ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-empty", children: "\u0423 \u0432\u0430\u0441 \u043F\u043E\u043A\u0430 \u043D\u0435\u0442 \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0442\u043E\u043A\u0435\u043D\u043E\u0432." })) : (_jsx("ul", { className: "dsh-qa-settings__rows", "data-testid": "qa-settings-tokens-rows", children: tokens.map((token) => {
137
129
  const state = tokenState(token, now);
138
130
  const confirming = pendingRevoke === token.id;
139
131
  return (_jsx("li", { className: "dsh-qa-settings__row", "data-testid": "qa-settings-tokens-row", children: _jsxs("div", { className: "dsh-qa-settings__row-button", "data-testid": "qa-settings-tokens-row-body", children: [_jsx("span", { className: "dsh-qa-settings__row-title", "data-testid": "qa-settings-tokens-row-title", children: token.label }), _jsx("span", { className: "dsh-qa-settings__row-description", "data-testid": "qa-settings-tokens-row-scopes", children: scopeLabels(token.scopes) }), _jsxs("span", { className: "dsh-qa-settings__row-meta", "data-testid": "qa-settings-tokens-row-meta", children: ["\u0441\u043E\u0437\u0434\u0430\u043D ", day(token.createdAt), " \u00B7 \u0434\u043E ", day(token.expiresAt), " ", "\u00B7 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0439: ", token.useCount, token.lastUsedAt === null
@@ -1 +1 @@
1
- {"version":3,"file":"IntegrationTokensPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/IntegrationTokensPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IntegrationTokensPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/IntegrationTokensPage.tsx"],"names":[],"mappings":"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"}
@@ -19,11 +19,15 @@ export function QaPasswordSettingsPage(props) {
19
19
  const [busy, setBusy] = useState(false);
20
20
  const [error, setError] = useState(null);
21
21
  const [saved, setSaved] = useState(false);
22
+ // The form is submitted with `noValidate`, so an Enter on an empty field has
23
+ // to be answered here — the browser would have answered it in its own words.
24
+ const [attempted, setAttempted] = useState(false);
22
25
  const tooShort = next !== "" && next.length < MIN_PASSWORD_LENGTH;
23
26
  const mismatch = repeat !== "" && repeat !== next;
24
27
  const incomplete = current === "" || next === "" || repeat === "";
25
28
  const submit = (event) => {
26
29
  event.preventDefault();
30
+ setAttempted(true);
27
31
  if (busy || incomplete || mismatch || tooShort)
28
32
  return;
29
33
  setBusy(true);
@@ -40,9 +44,10 @@ export function QaPasswordSettingsPage(props) {
40
44
  setCurrent("");
41
45
  setNext("");
42
46
  setRepeat("");
47
+ setAttempted(false);
43
48
  setSaved(true);
44
49
  });
45
50
  };
46
- return (_jsxs("form", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-password", onSubmit: submit, children: [_jsx("h3", { className: "dsh-qa-settings__page-title", "data-testid": "qa-settings-password-title", children: "\u041F\u0430\u0440\u043E\u043B\u044C" }), _jsx("p", { className: "dsh-qa-settings__lead", "data-testid": "qa-settings-password-lead", children: "\u0421\u043C\u0435\u043D\u0430 \u043F\u0430\u0440\u043E\u043B\u044F \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u2014 \u0442\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u043E\u0439\u0442\u0438 \u0437\u0430\u043D\u043E\u0432\u043E. \u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0441\u0435\u0441\u0441\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F." }), _jsx(QaSettingsField, { testId: "qa-settings-password-current", label: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0430\u0440\u043E\u043B\u044C", children: _jsx("input", { type: "password", name: "current-password", autoComplete: "current-password", required: true, disabled: busy, value: current, onChange: (event) => setCurrent(event.currentTarget.value) }) }), _jsx(QaSettingsField, { testId: "qa-settings-password-new", label: "\u041D\u043E\u0432\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C", children: _jsx("input", { type: "password", name: "new-password", autoComplete: "new-password", required: true, minLength: MIN_PASSWORD_LENGTH, disabled: busy, value: next, onChange: (event) => setNext(event.currentTarget.value) }) }), _jsx(QaSettingsField, { testId: "qa-settings-password-repeat", label: "\u041D\u043E\u0432\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C \u0435\u0449\u0451 \u0440\u0430\u0437", children: _jsx("input", { type: "password", name: "repeat-password", autoComplete: "new-password", required: true, minLength: MIN_PASSWORD_LENGTH, disabled: busy, value: repeat, onChange: (event) => setRepeat(event.currentTarget.value) }) }), tooShort ? (_jsxs("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-password-too-short", children: ["\u041F\u0430\u0440\u043E\u043B\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043A\u043E\u0440\u043E\u0447\u0435 ", MIN_PASSWORD_LENGTH, " \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432."] })) : null, mismatch ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-password-mismatch", children: "\u041F\u0430\u0440\u043E\u043B\u0438 \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442." })) : null, error === null ? null : (_jsx(QaSettingsNotice, { testId: "qa-settings-password-error", tone: "error", children: error })), saved && error === null ? (_jsx(QaSettingsNotice, { testId: "qa-settings-password-saved", tone: "info", children: "\u041F\u0430\u0440\u043E\u043B\u044C \u0438\u0437\u043C\u0435\u043D\u0451\u043D. \u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u044B." })) : null, _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { testId: "qa-settings-password-change", type: "submit", tone: "primary", disabled: busy || incomplete || mismatch || tooShort, label: busy ? "Сохранение…" : "Сменить пароль" }) })] }));
51
+ return (_jsxs("form", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-password", noValidate: true, onSubmit: submit, children: [_jsx("h3", { className: "dsh-qa-settings__page-title", "data-testid": "qa-settings-password-title", children: "\u041F\u0430\u0440\u043E\u043B\u044C" }), _jsx("p", { className: "dsh-qa-settings__lead", "data-testid": "qa-settings-password-lead", children: "\u0421\u043C\u0435\u043D\u0430 \u043F\u0430\u0440\u043E\u043B\u044F \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u2014 \u0442\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u043E\u0439\u0442\u0438 \u0437\u0430\u043D\u043E\u0432\u043E. \u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0441\u0435\u0441\u0441\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F." }), _jsx(QaSettingsField, { testId: "qa-settings-password-current", label: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0430\u0440\u043E\u043B\u044C", children: _jsx("input", { type: "password", name: "current-password", autoComplete: "current-password", required: true, disabled: busy, value: current, onChange: (event) => setCurrent(event.currentTarget.value) }) }), _jsx(QaSettingsField, { testId: "qa-settings-password-new", label: "\u041D\u043E\u0432\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C", children: _jsx("input", { type: "password", name: "new-password", autoComplete: "new-password", required: true, minLength: MIN_PASSWORD_LENGTH, disabled: busy, value: next, onChange: (event) => setNext(event.currentTarget.value) }) }), _jsx(QaSettingsField, { testId: "qa-settings-password-repeat", label: "\u041D\u043E\u0432\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C \u0435\u0449\u0451 \u0440\u0430\u0437", children: _jsx("input", { type: "password", name: "repeat-password", autoComplete: "new-password", required: true, minLength: MIN_PASSWORD_LENGTH, disabled: busy, value: repeat, onChange: (event) => setRepeat(event.currentTarget.value) }) }), attempted && incomplete ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-password-incomplete", children: "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0432\u0441\u0435 \u043F\u043E\u043B\u044F." })) : null, tooShort ? (_jsxs("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-password-too-short", children: ["\u041F\u0430\u0440\u043E\u043B\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043A\u043E\u0440\u043E\u0447\u0435 ", MIN_PASSWORD_LENGTH, " \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432."] })) : null, mismatch ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-password-mismatch", children: "\u041F\u0430\u0440\u043E\u043B\u0438 \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442." })) : null, error === null ? null : (_jsx(QaSettingsNotice, { testId: "qa-settings-password-error", tone: "error", children: error })), saved && error === null ? (_jsx(QaSettingsNotice, { testId: "qa-settings-password-saved", tone: "info", children: "\u041F\u0430\u0440\u043E\u043B\u044C \u0438\u0437\u043C\u0435\u043D\u0451\u043D. \u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u044B." })) : null, _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { testId: "qa-settings-password-change", type: "submit", tone: "primary", disabled: busy || incomplete || mismatch || tooShort, label: busy ? "Сохранение…" : "Сменить пароль" }) })] }));
47
52
  }
48
53
  //# sourceMappingURL=PasswordSettingsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/PasswordSettingsPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PasswordSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/PasswordSettingsPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { base64ToBytes } from "./base64.js";
2
+ /**
3
+ * Handing one file of the chat's workspace to the person the turn produced it
4
+ * for.
5
+ *
6
+ * A produced document has no attachment-store handle, so the download is the
7
+ * same read the files panel does: the Host returns the bytes under the chat's
8
+ * own fence and the browser's download machinery takes it from there. Shared by
9
+ * the panel's own viewer and the card under an answer, so the two can never
10
+ * disagree on what "download this file" means.
11
+ */
12
+ /** Last segment of a workspace path, spelled with either separator. */
13
+ export function fileNameOf(path) {
14
+ const segments = path.split(/[/\\]/u).filter((segment) => segment !== "");
15
+ return segments[segments.length - 1] ?? path;
16
+ }
17
+ /** Save one workspace file under its own name. */
18
+ export function downloadWorkspaceFile(file) {
19
+ const bytes = file.base64 === undefined
20
+ ? new TextEncoder().encode(file.text ?? "")
21
+ : base64ToBytes(file.base64);
22
+ const url = URL.createObjectURL(new Blob([bytes], { type: file.mime }));
23
+ const anchor = document.createElement("a");
24
+ anchor.href = url;
25
+ anchor.download = fileNameOf(file.path);
26
+ anchor.rel = "noreferrer";
27
+ document.body.append(anchor);
28
+ anchor.click();
29
+ anchor.remove();
30
+ URL.revokeObjectURL(url);
31
+ }
32
+ //# sourceMappingURL=workspace-download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-download.js","sourceRoot":"","sources":["../../src/client/workspace-download.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;;;GASG;AAEH,uEAAuE;AACvE,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;IAC1E,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/C,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,qBAAqB,CAAC,IAAqB;IACzD,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,KAAK,SAAS;QACvB,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3C,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAC7B,IAAI,IAAI,CAAC,CAAC,KAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CACnD,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,GAAG,YAAY,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The answer a person reads names a file; it does not say where the deployment
3
+ * keeps the account that owns it.
4
+ *
5
+ * A model quoting a path it was handed prints it verbatim, and a QA deployment
6
+ * gives every account its own directory under one parent, so a path printed
7
+ * with an account identifier is a sentence about the server's layout — and
8
+ * stand dialogs below the signature line can be read by other accounts of the
9
+ * same server. The document tools report workspace-relative names, which is
10
+ * the fix at the source; this is the repair for what still arrives, because a
11
+ * model can rebuild a path from the working directory it is told, and because
12
+ * an answer written before this change is durable history that replays.
13
+ */
14
+ /** Characters a literal path may carry into a regular expression. */
15
+ function escapeForRegex(value) {
16
+ return value.replace(/[.*+?^${}()|[\]\\]/gu, String.raw `\$&`);
17
+ }
18
+ /** One or two separators, either convention, as a regular-expression source. */
19
+ const SEPARATOR = String.raw `[\\\/]+`;
20
+ const TRAILING_SEPARATOR = String.raw `[\\\/]?`;
21
+ /**
22
+ * The workspace root spelled so either separator convention matches it: a
23
+ * container records forward slashes, a browser on Windows may print backslashes
24
+ * at the same position, and a mask that only reads one of them leaks on the
25
+ * other. A leading separator is kept, so what replaces the root reads as a name
26
+ * inside the workspace rather than as a path leading out of nowhere.
27
+ */
28
+ function rootPattern(workspaceRoot) {
29
+ const segments = workspaceRoot
30
+ .split(/[/\\]/u)
31
+ .filter((segment) => segment !== "")
32
+ .map((segment) => escapeForRegex(segment));
33
+ const leading = /^[/\\]/u.test(workspaceRoot) ? SEPARATOR : "";
34
+ return new RegExp(`${leading}${segments.join(SEPARATOR)}${TRAILING_SEPARATOR}`, "gu");
35
+ }
36
+ /**
37
+ * Rewrite an answer so a file is named, not located.
38
+ *
39
+ * The chat's own workspace directory is removed, leaving the spelling the
40
+ * producing tool reports and the workspace reads take. The per-account
41
+ * partition is removed the same way even when the root is unknown or the answer
42
+ * quotes a different chat's file, because the identifier inside it is the part
43
+ * that must not be printed. A path that is neither of those is left alone: a
44
+ * reader told about `/etc/hosts` is not being shown this deployment's layout.
45
+ */
46
+ export function toWorkspaceRelativeText(text, workspaceRoot) {
47
+ if (!text.includes("/") && !text.includes("\\"))
48
+ return text;
49
+ const root = workspaceRoot?.trim();
50
+ const masked = root === undefined || root === ""
51
+ ? text
52
+ : text.replace(rootPattern(root), "");
53
+ return masked.replace(/[/\\](?:[^/\\\s]+[/\\])*?\.qa-users[/\\][^/\\\s]+[/\\]/gu, "");
54
+ }
55
+ //# sourceMappingURL=workspace-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-paths.js","sourceRoot":"","sources":["../../src/client/workspace-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,qEAAqE;AACrE,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,GAAG,CAAA,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,gFAAgF;AAChF,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA,SAAS,CAAC;AACtC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA,SAAS,CAAC;AAE/C;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,aAAqB;IACxC,MAAM,QAAQ,GAAG,aAAa;SAC3B,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC;SACnC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO,IAAI,MAAM,CACf,GAAG,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,kBAAkB,EAAE,EAC5D,IAAI,CACL,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,aAAiC;IAEjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAG,aAAa,EAAE,IAAI,EAAE,CAAC;IACnC,MAAM,MAAM,GACV,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;QAC/B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,OAAO,CACnB,0DAA0D,EAC1D,EAAE,CACH,CAAC;AACJ,CAAC"}