@yadsh/dsh-qa-surface 0.16.0 → 0.18.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 +34 -5
- package/compatibility.json +1 -1
- package/lib/account-remotes.js +13 -0
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/database.js +120 -4
- package/lib/accounts/database.js.map +1 -1
- package/lib/accounts/file.js.map +1 -1
- package/lib/accounts/store.js +131 -5
- package/lib/accounts/store.js.map +1 -1
- package/lib/accounts/token.js +8 -2
- package/lib/accounts/token.js.map +1 -1
- package/lib/admin/metrics.js +15 -2
- package/lib/admin/metrics.js.map +1 -1
- package/lib/admin/read-budget.js +28 -0
- package/lib/admin/read-budget.js.map +1 -0
- package/lib/admin/service.js +135 -40
- package/lib/admin/service.js.map +1 -1
- package/lib/admin/session-log.js +63 -4
- package/lib/admin/session-log.js.map +1 -1
- package/lib/chat-sharing/native-fence.js +31 -2
- package/lib/chat-sharing/native-fence.js.map +1 -1
- package/lib/chat-sharing/store.js +9 -3
- package/lib/chat-sharing/store.js.map +1 -1
- package/lib/chat-sharing/transport.js +74 -13
- package/lib/chat-sharing/transport.js.map +1 -1
- package/lib/chat-sharing/uploads.js +79 -6
- package/lib/chat-sharing/uploads.js.map +1 -1
- package/lib/cli.js +13 -0
- package/lib/cli.js.map +1 -1
- package/lib/client/QaAccountsController.js +79 -0
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaRouteController.js +3 -1
- package/lib/client/QaRouteController.js.map +1 -1
- package/lib/client/QaSessionController.js +102 -29
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +89 -19
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +15 -2
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/account-sessions.js +74 -8
- package/lib/client/account-sessions.js.map +1 -1
- package/lib/client/admin/CapabilityPicker.js +50 -0
- package/lib/client/admin/CapabilityPicker.js.map +1 -0
- package/lib/client/admin/CoverageNotice.js +9 -0
- package/lib/client/admin/CoverageNotice.js.map +1 -0
- package/lib/client/admin/QaAdmin.js +3 -150
- package/lib/client/admin/QaAdmin.js.map +1 -1
- package/lib/client/admin/RoleEditor.js +46 -0
- package/lib/client/admin/RoleEditor.js.map +1 -0
- package/lib/client/admin/capability-selection.js +63 -0
- package/lib/client/admin/capability-selection.js.map +1 -0
- package/lib/client/admin/pages/Conversations.js +35 -17
- package/lib/client/admin/pages/Conversations.js.map +1 -1
- package/lib/client/admin/pages/Overview.js +3 -2
- package/lib/client/admin/pages/Overview.js.map +1 -1
- package/lib/client/admin/pages/Quality.js +77 -20
- package/lib/client/admin/pages/Quality.js.map +1 -1
- package/lib/client/admin/pages/SkillFiles.js +14 -3
- package/lib/client/admin/pages/SkillFiles.js.map +1 -1
- package/lib/client/admin/shared.js +68 -3
- package/lib/client/admin/shared.js.map +1 -1
- package/lib/client/answer-review.js +89 -0
- package/lib/client/answer-review.js.map +1 -0
- package/lib/client/chat-artifacts.js +1 -0
- package/lib/client/chat-artifacts.js.map +1 -1
- package/lib/client/components/QaAnswerReviewStatus.js +45 -0
- package/lib/client/components/QaAnswerReviewStatus.js.map +1 -0
- package/lib/client/components/QaAuthGate.js +31 -28
- package/lib/client/components/QaAuthGate.js.map +1 -1
- package/lib/client/components/QaChangelog.js +79 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaChatActions.js +52 -0
- package/lib/client/components/QaChatActions.js.map +1 -0
- package/lib/client/components/QaChatSharing.js +22 -19
- package/lib/client/components/QaChatSharing.js.map +1 -1
- package/lib/client/components/QaComposer.js +27 -4
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaFormItem.js +63 -0
- package/lib/client/components/QaFormItem.js.map +1 -0
- package/lib/client/components/QaInputForm.js +281 -0
- package/lib/client/components/QaInputForm.js.map +1 -0
- package/lib/client/components/QaMarkdownPreview.js +86 -0
- package/lib/client/components/QaMarkdownPreview.js.map +1 -0
- package/lib/client/components/QaMessage.js +8 -2
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModal.js +34 -4
- package/lib/client/components/QaModal.js.map +1 -1
- package/lib/client/components/QaRightRail.js +6 -4
- package/lib/client/components/QaRightRail.js.map +1 -1
- package/lib/client/components/QaRightRailResize.js +129 -0
- package/lib/client/components/QaRightRailResize.js.map +1 -0
- package/lib/client/components/QaSidebar.js +10 -1
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourceFilters.js +22 -0
- package/lib/client/components/QaSourceFilters.js.map +1 -0
- package/lib/client/components/QaSourcesPanel.js +57 -13
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaSpreadsheetPreview.js +56 -0
- package/lib/client/components/QaSpreadsheetPreview.js.map +1 -0
- package/lib/client/components/QaWelcomeNotice.js +2 -2
- package/lib/client/components/QaWelcomeNotice.js.map +1 -1
- package/lib/client/components/QaWorkspaceBrowser.js +22 -9
- package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
- package/lib/client/components/QaZoomImage.js +56 -0
- package/lib/client/components/QaZoomImage.js.map +1 -0
- package/lib/client/components/source-refs.js +18 -4
- package/lib/client/components/source-refs.js.map +1 -1
- package/lib/client/forms-styles.js +14 -0
- package/lib/client/forms-styles.js.map +1 -0
- package/lib/client/forms.js +40 -0
- package/lib/client/forms.js.map +1 -0
- package/lib/client/index.js +31 -3
- package/lib/client/index.js.map +1 -1
- package/lib/client/markdown/SourceImage.js +52 -0
- package/lib/client/markdown/SourceImage.js.map +1 -0
- package/lib/client/markdown/blocks.js +150 -115
- package/lib/client/markdown/blocks.js.map +1 -1
- package/lib/client/markdown/render.js +23 -5
- package/lib/client/markdown/render.js.map +1 -1
- package/lib/client/markdown/source-chip.js +2 -1
- package/lib/client/markdown/source-chip.js.map +1 -1
- package/lib/client/oidc-browser.js +39 -0
- package/lib/client/oidc-browser.js.map +1 -0
- package/lib/client/panels/PanelHost.js +23 -1
- package/lib/client/panels/PanelHost.js.map +1 -1
- package/lib/client/settings/sections/interface.js +2 -1
- package/lib/client/settings/sections/interface.js.map +1 -1
- package/lib/client/settings/sections/sources.js +1 -1
- package/lib/client/settings/sections/sources.js.map +1 -1
- package/lib/client/settings/sections/status.js +3 -1
- package/lib/client/settings/sections/status.js.map +1 -1
- package/lib/client/settings/styles.js +18 -28
- package/lib/client/settings/styles.js.map +1 -1
- package/lib/client/source-filters-styles.js +11 -0
- package/lib/client/source-filters-styles.js.map +1 -0
- package/lib/client/styles.js +56 -5
- package/lib/client/styles.js.map +1 -1
- package/lib/client/types.js.map +1 -1
- package/lib/client/use-right-rail.js +1 -1
- package/lib/client/use-right-rail.js.map +1 -1
- package/lib/client/user-settings/IntegrationTokensPage.js +30 -6
- package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
- package/lib/client.js +540 -71128
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/accounts.js +5 -4
- package/lib/config-resolvers/accounts.js.map +1 -1
- package/lib/config-resolvers/defaults.js +20 -3
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/oidc.js +53 -0
- package/lib/config-resolvers/oidc.js.map +1 -0
- package/lib/config-resolvers/sources.js +2 -0
- package/lib/config-resolvers/sources.js.map +1 -1
- package/lib/config.js +74 -0
- package/lib/config.js.map +1 -1
- package/lib/forms/attachments.js +214 -0
- package/lib/forms/attachments.js.map +1 -0
- package/lib/forms/errors.js +37 -0
- package/lib/forms/errors.js.map +1 -0
- package/lib/forms/fingerprint.js +21 -0
- package/lib/forms/fingerprint.js.map +1 -0
- package/lib/forms/gate.js +125 -0
- package/lib/forms/gate.js.map +1 -0
- package/lib/forms/schema.js +182 -0
- package/lib/forms/schema.js.map +1 -0
- package/lib/forms/service.js +220 -0
- package/lib/forms/service.js.map +1 -0
- package/lib/forms/store.js +194 -0
- package/lib/forms/store.js.map +1 -0
- package/lib/forms/types.js +2 -0
- package/lib/forms/types.js.map +1 -0
- package/lib/forms/validation.js +113 -0
- package/lib/forms/validation.js.map +1 -0
- package/lib/index.js +276 -5
- package/lib/index.js.map +1 -1
- package/lib/integration/host-runner.js +1 -0
- package/lib/integration/host-runner.js.map +1 -1
- package/lib/integration/question-policy.js +126 -0
- package/lib/integration/question-policy.js.map +1 -0
- package/lib/integration/service.js +2 -0
- package/lib/integration/service.js.map +1 -1
- package/lib/llm-identity.js +27 -0
- package/lib/llm-identity.js.map +1 -0
- package/lib/markdown-frontmatter.js +47 -0
- package/lib/markdown-frontmatter.js.map +1 -0
- package/lib/markdown-images.js +33 -0
- package/lib/markdown-images.js.map +1 -0
- package/lib/oidc/http.js +30 -0
- package/lib/oidc/http.js.map +1 -0
- package/lib/oidc/service.js +250 -0
- package/lib/oidc/service.js.map +1 -0
- package/lib/prompt-notes.js +1 -1
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/collector.js +2 -0
- package/lib/provenance/collector.js.map +1 -1
- package/lib/provenance/connectors.js +25 -19
- package/lib/provenance/connectors.js.map +1 -1
- package/lib/provenance/dedupe.js +17 -0
- package/lib/provenance/dedupe.js.map +1 -1
- package/lib/provenance/document-preview.js +12 -2
- package/lib/provenance/document-preview.js.map +1 -1
- package/lib/provenance/extractors.js +23 -5
- package/lib/provenance/extractors.js.map +1 -1
- package/lib/provenance/file-preview.js +9 -2
- package/lib/provenance/file-preview.js.map +1 -1
- package/lib/provenance/integration-extractor.js +5 -6
- package/lib/provenance/integration-extractor.js.map +1 -1
- package/lib/provenance/snapshot-store.js +2 -0
- package/lib/provenance/snapshot-store.js.map +1 -1
- package/lib/provenance/source-content.js +103 -0
- package/lib/provenance/source-content.js.map +1 -0
- package/lib/provenance/source-image.js +57 -0
- package/lib/provenance/source-image.js.map +1 -0
- package/lib/provenance/spreadsheet-preview.js +52 -0
- package/lib/provenance/spreadsheet-preview.js.map +1 -0
- package/lib/qa-tools/activation-manager.js +24 -2
- package/lib/qa-tools/activation-manager.js.map +1 -1
- package/lib/qa-tools/catalog.js +11 -1
- package/lib/qa-tools/catalog.js.map +1 -1
- package/lib/qa-tools/index.js +27 -0
- package/lib/qa-tools/index.js.map +1 -1
- package/lib/qa-tools/request-user-form.js +121 -0
- package/lib/qa-tools/request-user-form.js.map +1 -0
- package/lib/questions.js +6 -1
- package/lib/questions.js.map +1 -1
- package/lib/resolve-config.js +2 -0
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +14 -8
- package/lib/secure-session.js.map +1 -1
- package/lib/shared/documents.js +12 -0
- package/lib/shared/documents.js.map +1 -1
- package/lib/typert.host.js +5136 -1341
- package/lib/typert.remote-client.d.ts +141 -7
- package/lib/typert.remote-client.js +5896 -2255
- package/lib/types/account-remotes.d.ts +3 -0
- package/lib/types/accounts/database.d.ts +13 -0
- package/lib/types/accounts/file.d.ts +2 -0
- package/lib/types/accounts/store.d.ts +23 -1
- package/lib/types/accounts/token.d.ts +3 -1
- package/lib/types/admin/metrics.d.ts +5 -1
- package/lib/types/admin/read-budget.d.ts +8 -0
- package/lib/types/admin/service.d.ts +17 -0
- package/lib/types/admin/session-log.d.ts +30 -1
- package/lib/types/answer-review.js +2 -0
- package/lib/types/answer-review.js.map +1 -0
- package/lib/types/chat-sharing/store.d.ts +1 -0
- package/lib/types/chat-sharing/transport.d.ts +1 -0
- package/lib/types/chat-sharing/uploads.d.ts +2 -1
- package/lib/types/client/QaAccountsController.d.ts +5 -0
- package/lib/types/client/QaRouteController.d.ts +1 -0
- package/lib/types/client/QaSessionController.d.ts +12 -3
- package/lib/types/client/QaSurface.d.ts +2 -0
- package/lib/types/client/admin/CapabilityPicker.d.ts +14 -0
- package/lib/types/client/admin/CoverageNotice.d.ts +6 -0
- package/lib/types/client/admin/RoleEditor.d.ts +15 -0
- package/lib/types/client/admin/capability-selection.d.ts +27 -0
- package/lib/types/client/admin/shared.d.ts +39 -1
- package/lib/types/client/answer-review.d.ts +16 -0
- package/lib/types/client/components/QaAnswerReviewStatus.d.ts +8 -0
- package/lib/types/client/components/QaAuthGate.d.ts +2 -0
- package/lib/types/client/components/QaChatActions.d.ts +7 -0
- package/lib/types/client/components/QaChatSharing.d.ts +4 -2
- package/lib/types/client/components/QaFormItem.d.ts +20 -0
- package/lib/types/client/components/QaInputForm.d.ts +18 -0
- package/lib/types/client/components/QaMarkdownPreview.d.ts +13 -0
- package/lib/types/client/components/QaModal.d.ts +9 -0
- package/lib/types/client/components/QaRightRail.d.ts +3 -2
- package/lib/types/client/components/QaRightRailResize.d.ts +9 -0
- package/lib/types/client/components/QaSidebar.d.ts +2 -0
- package/lib/types/client/components/QaSourceFilters.d.ts +12 -0
- package/lib/types/client/components/QaSpreadsheetPreview.d.ts +8 -0
- package/lib/types/client/components/QaWelcomeNotice.d.ts +1 -1
- package/lib/types/client/components/QaZoomImage.d.ts +38 -0
- package/lib/types/client/forms-styles.d.ts +2 -0
- package/lib/types/client/forms.d.ts +23 -0
- package/lib/types/client/markdown/SourceImage.d.ts +7 -0
- package/lib/types/client/markdown/blocks.d.ts +8 -1
- package/lib/types/client/markdown/render.d.ts +5 -1
- package/lib/types/client/markdown/source-chip.d.ts +1 -0
- package/lib/types/client/oidc-browser.d.ts +12 -0
- package/lib/types/client/settings/styles.d.ts +2 -5
- package/lib/types/client/source-filters-styles.d.ts +2 -0
- package/lib/types/client/types.d.ts +18 -6
- package/lib/types/config-resolvers/oidc.d.ts +3 -0
- package/lib/types/forms/attachments.d.ts +48 -0
- package/lib/types/forms/errors.d.ts +11 -0
- package/lib/types/forms/fingerprint.d.ts +9 -0
- package/lib/types/forms/gate.d.ts +33 -0
- package/lib/types/forms/schema.d.ts +72 -0
- package/lib/types/forms/service.d.ts +15 -0
- package/lib/types/forms/store.d.ts +25 -0
- package/lib/types/forms/types.d.ts +215 -0
- package/lib/types/forms/validation.d.ts +20 -0
- package/lib/types/index.d.ts +36 -3
- package/lib/types/integration/contract.d.ts +1 -0
- package/lib/types/integration/question-policy.d.ts +20 -0
- package/lib/types/integration/service.d.ts +1 -0
- package/lib/types/llm-identity.d.ts +20 -0
- package/lib/types/markdown-frontmatter.d.ts +10 -0
- package/lib/types/markdown-images.d.ts +3 -0
- package/lib/types/oidc/http.d.ts +5 -0
- package/lib/types/oidc/service.d.ts +30 -0
- package/lib/types/oidc.js +2 -0
- package/lib/types/oidc.js.map +1 -0
- package/lib/types/prompt-notes.d.ts +1 -1
- package/lib/types/provenance/document-preview.d.ts +3 -2
- package/lib/types/provenance/file-preview.d.ts +2 -1
- package/lib/types/provenance/source-content.d.ts +19 -0
- package/lib/types/provenance/source-image.d.ts +4 -0
- package/lib/types/provenance/spreadsheet-preview.d.ts +5 -0
- package/lib/types/provenance/types.d.ts +3 -0
- package/lib/types/qa-tools/activation-manager.d.ts +5 -0
- package/lib/types/qa-tools/catalog.d.ts +4 -1
- package/lib/types/qa-tools/index.d.ts +5 -1
- package/lib/types/qa-tools/request-user-form.d.ts +5 -0
- package/lib/types/questions.d.ts +2 -1
- package/lib/types/secure-session.d.ts +1 -0
- package/lib/types/shared/documents.d.ts +2 -0
- package/lib/types/types/accounts.d.ts +7 -1
- package/lib/types/types/admin.d.ts +6 -0
- package/lib/types/types/answer-review.d.ts +11 -0
- package/lib/types/types/config.d.ts +9 -0
- package/lib/types/types/oidc.d.ts +36 -0
- package/lib/types/types/session.d.ts +18 -3
- package/lib/types/types.d.ts +3 -0
- package/package.json +58 -56
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillFiles.js","sourceRoot":"","sources":["../../../../src/client/admin/pages/SkillFiles.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAO9E,SAAS,OAAO,CAAC,MAAmB;IAClC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAmB;IACpC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC3E,CAAC;AAED,8EAA8E;AAC9E,MAAM,YAAY,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"SkillFiles.js","sourceRoot":"","sources":["../../../../src/client/admin/pages/SkillFiles.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAO9E,SAAS,OAAO,CAAC,MAAmB;IAClC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAmB;IACpC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC3E,CAAC;AAED,8EAA8E;AAC9E,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB;;;;;;;;;GASG;AACH,MAAM,iBAAiB,GACrB,6QAA6Q,CAAC;AAOhR;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC7B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,gBAAgB,CAC5B,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,EAC9C,CAAC,GAAG,EAAE,KAAK,CAAC,CACb,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;IAElD,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,kDAAkD;IAClD,MAAM,IAAI,GAAG,gBAAgB,CAC3B,GAA6C,EAAE,CAC7C,QAAQ,IAAI,CAAC,MAAM;QACjB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EACxC,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CACvC,CAAC;IAEF,uEAAuE;IACvE,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAoB,EAAE;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC9C,OAAO,MAAM,CAAC,EAAE;oBACd,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;oBAC1C,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACzC,CAAC;YACD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;YAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;YAC3D,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;YACjE,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC;YACzE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;YACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;SACxE,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;IAC1C,2EAA2E;IAC3E,kEAAkE;IAClE,MAAM,WAAW,GACf,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,WAAW,KAAK,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjE,OAAO,CACL,mBACE,SAAS,EAAC,oBAAoB,iBAClB,sBAAsB,gBACvB,6FAAkB,aAE7B,cAAK,SAAS,EAAC,yBAAyB,YACtC,0BACE,uHAAyB,EACzB,25BAII,IACA,GACF,EACN,eACE,SAAS,EAAC,oBAAoB,iBAClB,2BAA2B,aAEvC,iBACE,IAAI,EAAC,QAAQ,iBACD,iCAAiC,kBAC/B,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,uFAGrC,EACT,iBACE,IAAI,EAAC,QAAQ,iBACD,mCAAmC,kBACjC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC3C,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;4BACtB,IAAI,EAAE,MAAM;4BACZ,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;yBACxD,CAAC,CAAC,mKAIE,IACL,EACN,KAAC,SAAS,IAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAC,4BAA4B,GAAG,EACtE,QAAQ,CAAC,CAAC,CAAC,CACV,iBACE,SAAS,EAAC,sBAAsB,iBACpB,kCAAkC,aAE9C,sGAAyB,EACzB,iCACc,2BAA2B,EACvC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,aAGhE,iBAAQ,KAAK,EAAC,EAAE,gJAAgC,EAC/C,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACtC,kBAAqB,KAAK,EAAE,GAAG,CAAC,EAAE,aAC/B,GAAG,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,aAAI,GAAG,EAC3D,GAAG,CAAC,KAAK,KAFC,GAAG,CAAC,EAAE,CAGV,CACV,CAAC,IACK,IACH,CACT,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7D,aACE,SAAS,EAAC,qBAAqB,iBACnB,8BAA8B,aAE1C,8BAAkB,4BAA4B,YAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI;4BACvB,CAAC,CAAC,oBAAoB;4BACtB,CAAC,CAAC,oBACE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,EAAE;gCAChC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;gCACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WACtB,EAAE,GACD,EACP,eACE,SAAS,EAAC,oBAAoB,iBAClB,2BAA2B,EACvC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,YAExB,IAAI,CAAC,IAAI,CAAC,QAAQ,GACd,IACL,CACL,EACA,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5C,YACE,SAAS,EAAC,qBAAqB,iBACnB,iCAAiC,YAE5C,iBAAiB,GAChB,CACL,EACA,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACrB,YACE,SAAS,EAAC,qBAAqB,iBACnB,gCAAgC,mTAG1C,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,oBAAoB;YACnB,iEAAiE;YACjE,sEAAsE;gBAEtE,GAAG,EAAE,QAAQ,IADR,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAExD,CACH,CAAC,CAAC,CAAC,IAAI,IACA,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -74,6 +74,60 @@ export function useRequestSlot() {
|
|
|
74
74
|
// literal on every render.
|
|
75
75
|
return useMemo(() => ({ start, cancel }), [start, cancel]);
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* How long a page waits for one Host answer before it stops waiting.
|
|
79
|
+
*
|
|
80
|
+
* The aggregate pages read conversation logs on the Host, and a log the store
|
|
81
|
+
* cannot answer for used to leave the request pending forever: the page then sat
|
|
82
|
+
* on «Загружаю…» with nothing to click. The Host bounds its own reads well
|
|
83
|
+
* inside this budget, so hitting it means the answer is lost, not that the
|
|
84
|
+
* deployment is merely slow.
|
|
85
|
+
*/
|
|
86
|
+
export const ADMIN_REQUEST_TIMEOUT_MS = 20_000;
|
|
87
|
+
/** The copy a page shows once its deadline has passed. */
|
|
88
|
+
export function adminTimeoutMessage(timeoutMs = ADMIN_REQUEST_TIMEOUT_MS) {
|
|
89
|
+
return `Сервер не ответил за ${Math.round(timeoutMs / 1_000)} с. Нажмите «Обновить», чтобы повторить запрос.`;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Run one Host call under a deadline.
|
|
93
|
+
*
|
|
94
|
+
* A promise that never settles is the shape of the hang this exists for, so the
|
|
95
|
+
* deadline is a race rather than an abort alone: aborting the request is what
|
|
96
|
+
* asks the Host to stop working, and the timer is what lets the page go on
|
|
97
|
+
* without an answer. The abandoned call keeps running on its own; its eventual
|
|
98
|
+
* rejection is observed here so it never surfaces as an unhandled one.
|
|
99
|
+
*/
|
|
100
|
+
export async function callWithDeadline(call, outer, timeoutMs = ADMIN_REQUEST_TIMEOUT_MS) {
|
|
101
|
+
if (outer.aborted)
|
|
102
|
+
return { status: "aborted" };
|
|
103
|
+
const inner = new AbortController();
|
|
104
|
+
const forward = () => inner.abort();
|
|
105
|
+
outer.addEventListener("abort", forward, { once: true });
|
|
106
|
+
const pending = call(inner.signal);
|
|
107
|
+
void pending.catch(() => undefined);
|
|
108
|
+
let timer;
|
|
109
|
+
const deadline = new Promise((resolve) => {
|
|
110
|
+
timer = setTimeout(() => {
|
|
111
|
+
inner.abort();
|
|
112
|
+
resolve("deadline");
|
|
113
|
+
}, timeoutMs);
|
|
114
|
+
});
|
|
115
|
+
try {
|
|
116
|
+
const outcome = await Promise.race([
|
|
117
|
+
pending.then((value) => ({ status: "ok", value })),
|
|
118
|
+
deadline,
|
|
119
|
+
]);
|
|
120
|
+
if (outcome === "deadline") {
|
|
121
|
+
return { status: outer.aborted ? "aborted" : "timeout" };
|
|
122
|
+
}
|
|
123
|
+
return outcome;
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
if (timer !== undefined)
|
|
127
|
+
clearTimeout(timer);
|
|
128
|
+
outer.removeEventListener("abort", forward);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
77
131
|
/**
|
|
78
132
|
* Load one administrative resource, keeping the previous value visible while
|
|
79
133
|
* it refreshes. Reviewers page through lists while new conversations arrive;
|
|
@@ -81,8 +135,14 @@ export function useRequestSlot() {
|
|
|
81
135
|
*
|
|
82
136
|
* `load` receives the cancellation of the call it is making: pass it on to the
|
|
83
137
|
* Remote, and a page the reviewer left stops being read on the server.
|
|
138
|
+
*
|
|
139
|
+
* The call is bounded by {@link ADMIN_REQUEST_TIMEOUT_MS}: a Host that does not
|
|
140
|
+
* answer leaves a stated error and a retry instead of an endless «Загружаю…».
|
|
141
|
+
* Whatever this page already held stays on screen — a partial answer is what a
|
|
142
|
+
* reviewer can still work with.
|
|
84
143
|
*/
|
|
85
|
-
export function useAdminResource(load, deps) {
|
|
144
|
+
export function useAdminResource(load, deps, options = {}) {
|
|
145
|
+
const timeoutMs = options.timeoutMs ?? ADMIN_REQUEST_TIMEOUT_MS;
|
|
86
146
|
const [data, setData] = useState();
|
|
87
147
|
const [error, setError] = useState();
|
|
88
148
|
const [loading, setLoading] = useState(true);
|
|
@@ -95,11 +155,16 @@ export function useAdminResource(load, deps) {
|
|
|
95
155
|
const controller = request.start();
|
|
96
156
|
setLoading(true);
|
|
97
157
|
try {
|
|
98
|
-
const
|
|
158
|
+
const outcome = await callWithDeadline(load, controller.signal, timeoutMs);
|
|
99
159
|
// A call this page abandoned has no answer worth showing: writing it
|
|
100
160
|
// anyway is how a stale scan replaced whatever the reviewer opened next.
|
|
101
|
-
if (controller.signal.aborted)
|
|
161
|
+
if (controller.signal.aborted || outcome.status === "aborted")
|
|
162
|
+
return;
|
|
163
|
+
if (outcome.status === "timeout") {
|
|
164
|
+
setError(adminTimeoutMessage(timeoutMs));
|
|
102
165
|
return;
|
|
166
|
+
}
|
|
167
|
+
const result = outcome.value;
|
|
103
168
|
if (result.ok) {
|
|
104
169
|
setData(result.value);
|
|
105
170
|
setError(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/client/admin/shared.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/client/admin/shared.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export const QA_REVIEW_NODE = "qa-answer-review";
|
|
2
|
+
const statuses = new Set([
|
|
3
|
+
"reviewing",
|
|
4
|
+
"recovering",
|
|
5
|
+
"pass",
|
|
6
|
+
"revise",
|
|
7
|
+
"failure",
|
|
8
|
+
"cancelled",
|
|
9
|
+
"waived",
|
|
10
|
+
]);
|
|
11
|
+
const sequence = (value) => typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
|
|
12
|
+
/** Read only the gate's producer metadata; answer prose never supplies a verdict. */
|
|
13
|
+
export function readAnswerReview(event) {
|
|
14
|
+
if (event.type !== "user/message")
|
|
15
|
+
return null;
|
|
16
|
+
const source = event.data?.source;
|
|
17
|
+
if (source?.kind !== "answer-review-status" ||
|
|
18
|
+
source.receipt === null ||
|
|
19
|
+
typeof source.receipt !== "object")
|
|
20
|
+
return null;
|
|
21
|
+
return parseAnswerReview(source.receipt);
|
|
22
|
+
}
|
|
23
|
+
export function parseAnswerReview(receipt) {
|
|
24
|
+
if (receipt === null || typeof receipt !== "object")
|
|
25
|
+
return null;
|
|
26
|
+
const value = receipt;
|
|
27
|
+
if (value.version !== 1 ||
|
|
28
|
+
!sequence(value.candidateSeq) ||
|
|
29
|
+
!(value.requestSeq === null || sequence(value.requestSeq)) ||
|
|
30
|
+
typeof value.candidateHash !== "string" ||
|
|
31
|
+
!/^[a-f0-9]{64}$/u.test(value.candidateHash) ||
|
|
32
|
+
!sequence(value.round) ||
|
|
33
|
+
typeof value.at !== "number" ||
|
|
34
|
+
!Number.isFinite(value.at) ||
|
|
35
|
+
value.at < 0 ||
|
|
36
|
+
typeof value.status !== "string" ||
|
|
37
|
+
!statuses.has(value.status))
|
|
38
|
+
return null;
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
function requireReview(event) {
|
|
42
|
+
const value = readAnswerReview(event);
|
|
43
|
+
if (value === null)
|
|
44
|
+
throw new Error("Invalid answer review receipt");
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
/** One current result per human request, with the latest answer's anchor. */
|
|
48
|
+
export const answerReviewConversationDefinition = {
|
|
49
|
+
kind: QA_REVIEW_NODE,
|
|
50
|
+
target: "chat",
|
|
51
|
+
match(event) {
|
|
52
|
+
const receipt = readAnswerReview(event);
|
|
53
|
+
return receipt === null
|
|
54
|
+
? null
|
|
55
|
+
: {
|
|
56
|
+
id: String(receipt.requestSeq ?? receipt.candidateSeq),
|
|
57
|
+
role: "start",
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
start: (_context, match) => requireReview(match.event),
|
|
61
|
+
update: (_context, match) => requireReview(match.event),
|
|
62
|
+
buildViewNode(context) {
|
|
63
|
+
if (context.state === undefined)
|
|
64
|
+
return null;
|
|
65
|
+
const anchor = context.matches.at(-1);
|
|
66
|
+
return {
|
|
67
|
+
key: context.key,
|
|
68
|
+
id: context.id,
|
|
69
|
+
kind: QA_REVIEW_NODE,
|
|
70
|
+
target: "chat",
|
|
71
|
+
anchorSeq: anchor?.event.seq ?? 0,
|
|
72
|
+
location: anchor?.location ?? { kind: "unresolved" },
|
|
73
|
+
visibility: "visible",
|
|
74
|
+
data: context.state,
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
export function answerReviewsOf(snapshot) {
|
|
79
|
+
const receipts = new Map();
|
|
80
|
+
for (const node of snapshot?.views.get("chat")?.nodes?.values() ?? []) {
|
|
81
|
+
if (node.kind === QA_REVIEW_NODE) {
|
|
82
|
+
const receipt = parseAnswerReview(node.data);
|
|
83
|
+
if (receipt !== null)
|
|
84
|
+
receipts.set(receipt.candidateSeq, receipt);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return receipts;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=answer-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-review.js","sourceRoot":"","sources":["../../src/client/answer-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
/** The tools that hand a file to the user, and the formats each reports. */
|
|
18
18
|
const PRODUCED_FORMATS = Object.freeze({
|
|
19
19
|
document_create: ["docx", "pdf"],
|
|
20
|
+
spreadsheet_create: ["xlsx", "csv", "tsv", "ods", "fods"],
|
|
20
21
|
document_convert: ["docx", "pdf", "md"],
|
|
21
22
|
document_to_markdown: ["markdown"],
|
|
22
23
|
document_from_url: ["markdown"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-artifacts.js","sourceRoot":"","sources":["../../src/client/chat-artifacts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-artifacts.js","sourceRoot":"","sources":["../../src/client/chat-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const copy = {
|
|
3
|
+
reviewing: [
|
|
4
|
+
"Проверяем ответ",
|
|
5
|
+
"Идёт независимая проверка этой версии ответа.",
|
|
6
|
+
],
|
|
7
|
+
recovering: [
|
|
8
|
+
"Повторяем проверку",
|
|
9
|
+
"Проверяющий не передал итог. Выполняется одна повторная проверка того же ответа.",
|
|
10
|
+
],
|
|
11
|
+
pass: [
|
|
12
|
+
"Ответ проверен",
|
|
13
|
+
"Независимая проверка этой версии ответа прошла. Это актуальный результат проверки.",
|
|
14
|
+
],
|
|
15
|
+
revise: [
|
|
16
|
+
"Нужны исправления",
|
|
17
|
+
"Независимая проверка нашла замечания к этой версии ответа.",
|
|
18
|
+
],
|
|
19
|
+
failure: [
|
|
20
|
+
"Проверка не завершена",
|
|
21
|
+
"Получить итог независимой проверки не удалось. Достоверность ответа не подтверждена проверкой.",
|
|
22
|
+
],
|
|
23
|
+
cancelled: [
|
|
24
|
+
"Проверка остановлена",
|
|
25
|
+
"Проверка остановлена вместе с запросом. Достоверность ответа не подтверждена проверкой.",
|
|
26
|
+
],
|
|
27
|
+
waived: [
|
|
28
|
+
"Без независимой проверки",
|
|
29
|
+
"Для этого ответа проверка отключена по запросу пользователя.",
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
export function QaAnswerReviewStatus({ review, }) {
|
|
33
|
+
const [label, detail] = copy[review.status];
|
|
34
|
+
return (_jsxs("span", { className: "dsh-qa-review", "data-status": review.status, "data-testid": "qa-answer-review", role: "status", title: detail, "aria-label": `${label}. ${detail}`, children: [_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: review.status === "pass" ? (_jsx("path", { d: "m3 8 3 3 7-7" })) : (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "8", cy: "8", r: "5.5" }), _jsx("path", { d: "M8 4.5V8l2 1.5" })] })) }), label] }));
|
|
35
|
+
}
|
|
36
|
+
export function QaNativeAnswerReviewStatus({ node, }) {
|
|
37
|
+
return (_jsx("div", { className: "dsh-qa-review-row", children: _jsx(QaAnswerReviewStatus, { review: node.data }) }));
|
|
38
|
+
}
|
|
39
|
+
export const QA_REVIEW_STYLES = `
|
|
40
|
+
.dsh-qa-review-row{padding:4px 0 12px}
|
|
41
|
+
.dsh-qa-review{display:inline-flex;align-items:center;gap:6px;max-width:100%;margin:8px 0 0;padding:4px 9px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);font-size:12px;line-height:18px}
|
|
42
|
+
.dsh-qa-review svg{width:14px;height:14px;flex:none;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
|
|
43
|
+
.dsh-qa-review[data-status=pass]{color:var(--dsw-alias-state-success-primary,var(--dsw-alias-label-primary))}
|
|
44
|
+
`;
|
|
45
|
+
//# sourceMappingURL=QaAnswerReviewStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QaAnswerReviewStatus.js","sourceRoot":"","sources":["../../../src/client/components/QaAnswerReviewStatus.tsx"],"names":[],"mappings":";AAGA,MAAM,IAAI,GAAgE;IACxE,SAAS,EAAE;QACT,iBAAiB;QACjB,+CAA+C;KAChD;IACD,UAAU,EAAE;QACV,oBAAoB;QACpB,kFAAkF;KACnF;IACD,IAAI,EAAE;QACJ,gBAAgB;QAChB,oFAAoF;KACrF;IACD,MAAM,EAAE;QACN,mBAAmB;QACnB,4DAA4D;KAC7D;IACD,OAAO,EAAE;QACP,uBAAuB;QACvB,gGAAgG;KACjG;IACD,SAAS,EAAE;QACT,sBAAsB;QACtB,yFAAyF;KAC1F;IACD,MAAM,EAAE;QACN,0BAA0B;QAC1B,8DAA8D;KAC/D;CACF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,EACnC,MAAM,GAGP;IACC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,CACL,gBACE,SAAS,EAAC,eAAe,iBACZ,MAAM,CAAC,MAAM,iBACd,kBAAkB,EAC9B,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,gBACD,GAAG,KAAK,KAAK,MAAM,EAAE,aAEjC,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YAC1D,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAC1B,eAAM,CAAC,EAAC,cAAc,GAAG,CAC1B,CAAC,CAAC,CAAC,CACF,8BACE,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,KAAK,GAAG,EAChC,eAAM,CAAC,EAAC,gBAAgB,GAAG,IAC1B,CACJ,GACG,EACL,KAAK,IACD,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,EACzC,IAAI,GACuD;IAC3D,OAAO,CACL,cAAK,SAAS,EAAC,mBAAmB,YAChC,KAAC,oBAAoB,IAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAI,GACvC,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;CAK/B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { QA_MIN_PASSWORD_LENGTH, accountsErrorMessage, } from "../QaAccountsController.js";
|
|
4
4
|
/** The Host's address shape, mirrored so the card refuses before the round trip. */
|
|
@@ -31,18 +31,19 @@ export function QaAuthGate(props) {
|
|
|
31
31
|
const gate = snapshot.stage === "gate" ? snapshot : undefined;
|
|
32
32
|
const mode = gate?.mode ?? "login";
|
|
33
33
|
const busy = gate?.busy ?? false;
|
|
34
|
+
const localLogin = props.localLogin ?? true;
|
|
34
35
|
const notice = gate?.notice ?? null;
|
|
35
36
|
const [email, setEmail] = useState("");
|
|
36
37
|
const [password, setPassword] = useState("");
|
|
37
38
|
const [refusal, setRefusal] = useState(null);
|
|
38
|
-
const showRegister = props.allowRegistration;
|
|
39
|
+
const showRegister = localLogin && props.allowRegistration;
|
|
39
40
|
// The reset card is the same card with one field: the request only needs an
|
|
40
41
|
// address, and asking for a password the user does not have would be absurd.
|
|
41
42
|
const reset = mode === "reset";
|
|
42
43
|
const error = refusal ?? gate?.error ?? null;
|
|
43
44
|
const submit = (event) => {
|
|
44
45
|
event.preventDefault();
|
|
45
|
-
if (busy)
|
|
46
|
+
if (busy || !localLogin)
|
|
46
47
|
return;
|
|
47
48
|
const next = refusalOf(email, reset ? null : password);
|
|
48
49
|
setRefusal(next);
|
|
@@ -55,31 +56,33 @@ export function QaAuthGate(props) {
|
|
|
55
56
|
: accounts.login(email, password);
|
|
56
57
|
void operation;
|
|
57
58
|
};
|
|
58
|
-
return (_jsx("main", { className: "dsh-qa-surface dsh-qa-auth", "data-testid": "qa-surface-auth", "aria-label": "\u0412\u0445\u043E\u0434 \u0432 \u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A", children: _jsxs("form", { className: "dsh-qa-auth__card", "data-testid": "qa-surface-auth-card", noValidate: true, onSubmit: submit, children: [_jsxs("div", { className: "dsh-qa-auth__brand", "data-testid": "qa-surface-auth-brand", children: [_jsx(Logo, { logoUrl: props.logoUrl }), _jsx("h1", { "data-testid": "qa-surface-auth-title", children: props.title })] }),
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
return (_jsx("main", { className: "dsh-qa-surface dsh-qa-auth", "data-testid": "qa-surface-auth", "aria-label": "\u0412\u0445\u043E\u0434 \u0432 \u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A", children: _jsxs("form", { className: "dsh-qa-auth__card", "data-testid": "qa-surface-auth-card", noValidate: true, onSubmit: submit, children: [_jsxs("div", { className: "dsh-qa-auth__brand", "data-testid": "qa-surface-auth-brand", children: [_jsx(Logo, { logoUrl: props.logoUrl }), _jsx("h1", { "data-testid": "qa-surface-auth-title", children: props.title })] }), props.oidcLabel ? (_jsx("button", { type: "button", className: "dsh-qa-auth__submit", "data-testid": "qa-surface-auth-oidc", disabled: busy, onClick: () => {
|
|
60
|
+
void accounts.loginOidc();
|
|
61
|
+
}, children: busy ? "Подождите…" : props.oidcLabel })) : null, localLogin ? (_jsxs(_Fragment, { children: [reset ? (_jsx("p", { className: "dsh-qa-auth__lead", "data-testid": "qa-surface-auth-lead", children: "\u0423\u043A\u0430\u0436\u0438\u0442\u0435 email: \u0437\u0430\u044F\u0432\u043A\u0443 \u0443\u0432\u0438\u0434\u0438\u0442 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0438 \u0441\u0431\u0440\u043E\u0441\u0438\u0442 \u043F\u0430\u0440\u043E\u043B\u044C. \u041F\u043E\u0447\u0442\u0430 \u0441 \u0441\u0441\u044B\u043B\u043A\u043E\u0439 \u043D\u0430 \u044D\u0442\u043E\u043C \u0441\u0442\u0435\u043D\u0434\u0435 \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0430." })) : null, showRegister && !reset ? (_jsxs("div", { className: "dsh-qa-auth__tabs", "data-testid": "qa-surface-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", "data-testid": "qa-surface-auth-tab-login", "aria-selected": mode === "login", className: mode === "login"
|
|
62
|
+
? "dsh-qa-auth__tab dsh-qa-auth__tab--active"
|
|
63
|
+
: "dsh-qa-auth__tab", onClick: () => {
|
|
64
|
+
setRefusal(null);
|
|
65
|
+
accounts.setMode("login");
|
|
66
|
+
}, children: "\u0412\u0445\u043E\u0434" }), _jsx("button", { type: "button", role: "tab", "data-testid": "qa-surface-auth-tab-register", "aria-selected": mode === "register", className: mode === "register"
|
|
67
|
+
? "dsh-qa-auth__tab dsh-qa-auth__tab--active"
|
|
68
|
+
: "dsh-qa-auth__tab", onClick: () => {
|
|
69
|
+
setRefusal(null);
|
|
70
|
+
accounts.setMode("register");
|
|
71
|
+
}, children: "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F" })] })) : null, _jsxs("label", { className: "dsh-qa-auth__field", "data-testid": "qa-surface-auth-email-field", children: [_jsx("span", { children: "Email" }), _jsx("input", { type: "email", name: "email", "data-testid": "qa-surface-auth-email", autoComplete: "email", required: true, disabled: busy, value: email, onChange: (event) => {
|
|
72
|
+
setRefusal(null);
|
|
73
|
+
setEmail(event.currentTarget.value);
|
|
74
|
+
} })] }), reset ? null : (_jsxs("label", { className: "dsh-qa-auth__field", "data-testid": "qa-surface-auth-password-field", children: [_jsx("span", { children: "\u041F\u0430\u0440\u043E\u043B\u044C" }), _jsx("input", { type: "password", name: "password", "data-testid": "qa-surface-auth-password", autoComplete: mode === "register" ? "new-password" : "current-password", required: true, minLength: QA_MIN_PASSWORD_LENGTH, disabled: busy, value: password, onChange: (event) => {
|
|
75
|
+
setRefusal(null);
|
|
76
|
+
setPassword(event.currentTarget.value);
|
|
77
|
+
} })] }))] })) : null, error === null ? null : (_jsx("p", { className: "dsh-qa-auth__error", "data-testid": "qa-surface-auth-error", role: "alert", children: error })), notice === null ? null : (_jsx("p", { className: "dsh-qa-auth__notice", "data-testid": "qa-surface-auth-notice", role: "status", children: notice })), localLogin ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "submit", className: "dsh-qa-auth__submit", "data-testid": "qa-surface-auth-submit", disabled: busy, children: busy
|
|
78
|
+
? "Подождите…"
|
|
79
|
+
: reset
|
|
80
|
+
? "Отправить заявку"
|
|
81
|
+
: mode === "register"
|
|
82
|
+
? "Зарегистрироваться"
|
|
83
|
+
: "Войти" }), _jsx("button", { type: "button", className: "dsh-qa-auth__link", "data-testid": "qa-surface-auth-forgot", disabled: busy, onClick: () => {
|
|
61
84
|
setRefusal(null);
|
|
62
|
-
accounts.setMode("login");
|
|
63
|
-
}, children:
|
|
64
|
-
? "dsh-qa-auth__tab dsh-qa-auth__tab--active"
|
|
65
|
-
: "dsh-qa-auth__tab", onClick: () => {
|
|
66
|
-
setRefusal(null);
|
|
67
|
-
accounts.setMode("register");
|
|
68
|
-
}, children: "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F" })] })) : null, _jsxs("label", { className: "dsh-qa-auth__field", "data-testid": "qa-surface-auth-email-field", children: [_jsx("span", { children: "Email" }), _jsx("input", { type: "email", name: "email", "data-testid": "qa-surface-auth-email", autoComplete: "email", required: true, disabled: busy, value: email, onChange: (event) => {
|
|
69
|
-
setRefusal(null);
|
|
70
|
-
setEmail(event.currentTarget.value);
|
|
71
|
-
} })] }), reset ? null : (_jsxs("label", { className: "dsh-qa-auth__field", "data-testid": "qa-surface-auth-password-field", children: [_jsx("span", { children: "\u041F\u0430\u0440\u043E\u043B\u044C" }), _jsx("input", { type: "password", name: "password", "data-testid": "qa-surface-auth-password", autoComplete: mode === "register" ? "new-password" : "current-password", required: true, minLength: QA_MIN_PASSWORD_LENGTH, disabled: busy, value: password, onChange: (event) => {
|
|
72
|
-
setRefusal(null);
|
|
73
|
-
setPassword(event.currentTarget.value);
|
|
74
|
-
} })] })), error === null ? null : (_jsx("p", { className: "dsh-qa-auth__error", "data-testid": "qa-surface-auth-error", role: "alert", children: error })), notice === null ? null : (_jsx("p", { className: "dsh-qa-auth__notice", "data-testid": "qa-surface-auth-notice", role: "status", children: notice })), _jsx("button", { type: "submit", className: "dsh-qa-auth__submit", "data-testid": "qa-surface-auth-submit", disabled: busy, children: busy
|
|
75
|
-
? "Подождите…"
|
|
76
|
-
: reset
|
|
77
|
-
? "Отправить заявку"
|
|
78
|
-
: mode === "register"
|
|
79
|
-
? "Зарегистрироваться"
|
|
80
|
-
: "Войти" }), _jsx("button", { type: "button", className: "dsh-qa-auth__link", "data-testid": "qa-surface-auth-forgot", disabled: busy, onClick: () => {
|
|
81
|
-
setRefusal(null);
|
|
82
|
-
accounts.setMode(reset ? "login" : "reset");
|
|
83
|
-
}, children: reset ? "Вернуться ко входу" : "Забыли пароль?" })] }) }));
|
|
85
|
+
accounts.setMode(reset ? "login" : "reset");
|
|
86
|
+
}, children: reset ? "Вернуться ко входу" : "Забыли пароль?" })] })) : null] }) }));
|
|
84
87
|
}
|
|
85
88
|
//# sourceMappingURL=QaAuthGate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QaAuthGate.js","sourceRoot":"","sources":["../../../src/client/components/QaAuthGate.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GAGrB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"QaAuthGate.js","sourceRoot":"","sources":["../../../src/client/components/QaAuthGate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,85 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { QaModal } from "./QaModal.js";
|
|
3
3
|
export const QA_VERSION = __DSH_QA_VERSION__;
|
|
4
4
|
export const QA_CHANGELOG = [
|
|
5
|
+
{
|
|
6
|
+
version: "0.18.0",
|
|
7
|
+
date: "2026-10-26",
|
|
8
|
+
sections: [
|
|
9
|
+
{
|
|
10
|
+
title: "Корпоративный вход",
|
|
11
|
+
items: [
|
|
12
|
+
"Вход через OpenID Connect позволяет использовать корпоративную учётную запись. Оператор может связать её с существующим аккаунтом, сохранив чаты и настройки.",
|
|
13
|
+
"Развёртывание может оставить оба способа входа или разрешить только корпоративный. Доступ и роли определяются настройками оператора.",
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
title: "Работа с интерфейсом",
|
|
18
|
+
items: [
|
|
19
|
+
"История версий закрывается по Escape, в том числе при открытой подсказке. Подсказка ввода, номер версии и уведомление под чатом читаются контрастнее. Ошибка открытия чата показывает причину и код обращения; повторное открытие сохраняет вопрос и уже созданный чат.",
|
|
20
|
+
"Новый чат открывается сразу после успешного создания, даже когда обновление истории занимает больше времени. После перезагрузки сохранённый чат открывается после проверки доступа, не ожидая загрузки всей истории. Если открытие прервалось, повторная отправка продолжает тот же чат. При выходе из аккаунта и смене подключения устаревшие ответы истории отбрасываются.",
|
|
21
|
+
"Консоль администратора возвращает данные в пределах общего времени ожидания. Если часть журналов недоступна, обзор и аналитика показывают объём прочитанной выборки, а доля оценённых ответов остаётся недоступной до полного чтения. Кнопка «Обновить» продолжает загрузку. Редактор навыков поясняет, что вкладка «Общие» показывает хранилище навыков QA.",
|
|
22
|
+
"Поля настроек и доступа к чату сохраняют фокус и положение курсора при фоновых обновлениях. Завершение запроса не прерывает ввод в другом поле. В редакторе интеграций можно вводить идентификаторы без повторного клика после каждого символа.",
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: "Доступ и данные",
|
|
27
|
+
items: [
|
|
28
|
+
"Загрузка файла без действующего аккаунта или права записи получает ответ об отказе до начала передачи содержимого. Проверки доступа продолжаются во время загрузки и после сохранения файла.",
|
|
29
|
+
"Встроенная панель Browser доступна владельцу чата при включённых QA-аккаунтах. Чтение панели и управление вкладками проверяют владельца до и после проверки политики чата; доступ к общим API Host остаётся закрытым.",
|
|
30
|
+
"Фоновые сводки аудита в истории читают сохранённые данные без запуска агента старого чата. Одинаковое предупреждение о настройке вопросов пишется один раз, пока причина не изменится или не исчезнет; проверки доступа к чату сохраняются.",
|
|
31
|
+
"Оператор может отключить сверку пресета, рабочей папки и модели чата с текущей конфигурацией, сохранив персональные рабочие папки. Проверки владельца, разрешённых инструментов и доступа к файлам продолжают действовать; смена настройки не переносит старые рабочие папки.",
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
title: "Совместимость",
|
|
36
|
+
items: [
|
|
37
|
+
"Пакеты собираются против Host 0.2.1-rc.3 и объявляют поддерживаемый диапазон от 0.1.7-rc.2 до 0.3.0. Проверенной остаётся запись 0.1.7-rc.2: приёмка против нового Host ещё не выполнена, поэтому диапазон говорит о совместимости, а список — о проверенном.",
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
title: "Пошаговый сбор данных",
|
|
42
|
+
items: [
|
|
43
|
+
"При включении оператором ассистент собирает обязательные ответы и файлы через отдельную пошаговую форму. Черновик сохраняется на сервере, а отправить незаполненные обязательные пункты нельзя.",
|
|
44
|
+
"Файлы относятся к конкретному пункту. Замена сохраняет прежнюю версию до проверки новой; отправленные данные фиксируются отдельным снимком. Остановка оставляет черновик и не означает завершённый сбор.",
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
version: "0.17.0",
|
|
51
|
+
date: "2026-10-14",
|
|
52
|
+
sections: [
|
|
53
|
+
{
|
|
54
|
+
title: "Пользователи и модели",
|
|
55
|
+
items: [
|
|
56
|
+
"Один расширенный провайдер может обслуживать QA-аккаунты с общим API-ключом, передавая DeepSeek отдельную стабильную метку владельца чата для разделения пользователей и KV-кэша. Имена и email в метку не попадают; включение режима настраивается оператором для провайдера.",
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
title: "Обработка данных",
|
|
61
|
+
items: [
|
|
62
|
+
"В источниках доступны фильтр по типу и поиск по названию, тексту и ссылке. Карточка показывает сохранённый текст веб-страницы или записи интеграции; неполный текст отмечается отдельно.",
|
|
63
|
+
"Ассистент с подключённым модулем документов читает и создаёт XLSX, CSV, TSV и OpenDocument (ODS/FODS). Книги с несколькими листами читаются порциями; созданная таблица появляется в чате файлом для скачивания. Панели файлов и источников показывают таблицу с выбором листа и навигацией по строкам и колонкам. Формулы читаются из сохранённого результата без пересчёта, а CSV и TSV сохраняют точное написание полей и явно учитывают разделитель и кодировку.",
|
|
64
|
+
"Интеграционный API по умолчанию ждёт ответ до одного часа. Оператор может изменить этот бюджет в настройках развёртывания.",
|
|
65
|
+
"Девять операторских форм, включая настройки QA Surface, документов, интеграций и авторизованной загрузки, используют общий размер текста, поля и переключатели. Длинные подписи и отметки изменений переносятся внутри строки, а сетка учитывает доступную ширину.",
|
|
66
|
+
"Независимая проверка показывает актуальный статус рядом с ответом. Если проверяющий не передал итог, выполняется одна повторная проверка; ошибка или отмена не считаются успешной проверкой.",
|
|
67
|
+
"Предпросмотр Markdown умеет оформлять YAML-шапку отдельной карточкой по настройке оператора. Чипсы с номером строки прокручивают источник к нужному фрагменту и подсвечивают его в Rendered и Raw; относительные изображения, включая подписи с переносами от конвертера, загружаются с проверкой доступа к документу.",
|
|
68
|
+
"Уведомление перед началом работы объясняет, что запрос и контекст, включая прочитанные источники, передаются выбранному провайдеру модели. После обновления уведомление нужно подтвердить снова.",
|
|
69
|
+
"Управление доступом находится в компактном меню чата в истории. Шапка больше не повторяет имя владельца и отдельную кнопку обмена; права получателя остаются видны рядом с чатом.",
|
|
70
|
+
"Правая панель изменяет ширину перетаскиванием границы и сохраняет выбранный размер.",
|
|
71
|
+
"Оператор сохраняет доступ к нативным разделам Host при включённых QA-аккаунтах; клиентский доступ к чужим данным остаётся закрыт.",
|
|
72
|
+
"Право интеграционного токена на отправку запросов ассистенту описано явно и отделено от уточняющих вопросов в разговоре.",
|
|
73
|
+
"На стендах с поддержкой ограниченного каталога список чатов собирает данные только для доступных разговоров и делегированных сессий владельца.",
|
|
74
|
+
"Фоновые опросы проверяют доступ к списку одной операцией, сохраняя немедленное действие отзыва прав и уменьшая нагрузку на клиентский интерфейс.",
|
|
75
|
+
"У интеграционного токена появился отдельный переключатель уточняющих вопросов. Его можно изменить для уже выданного токена; выключение сохраняет возможность получать ответы через API.",
|
|
76
|
+
"Просмотр субагента из правой панели проверяет доступ владельца к родительскому чату. Фоновая проверка больше не закрывает транскрипт с ложным сообщением об отзыве доступа; просмотр остаётся только для чтения.",
|
|
77
|
+
"Картинку разговора, иллюстрацию документа и изображение в ответе можно открыть в полном размере: клик по миниатюре поднимает просмотр поверх страницы, а Esc, клик по фону и крестик закрывают его.",
|
|
78
|
+
"Кнопка остановки останавливает и делегированную работу чата: проверяющий ответ и субагенты перестают выполняться вместе с запросом, а не продолжают работать за спиной транскрипта.",
|
|
79
|
+
"Команда отмены разбора больше не рисует карточку над вопросом, к которому относится, — статус проверки уже показан рядом с ответом. Отказ команды по-прежнему виден.",
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
},
|
|
5
84
|
{
|
|
6
85
|
version: "0.16.0",
|
|
7
86
|
date: "2026-10-09",
|