@yadsh/dsh-qa-surface 0.4.0 → 0.6.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 +235 -14
- package/compatibility.json +10 -1
- package/cordis.patch.yml +17 -0
- package/lib/account-remotes.js +10 -0
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/credentials.js +12 -4
- package/lib/accounts/credentials.js.map +1 -1
- package/lib/accounts/errors.js.map +1 -1
- package/lib/accounts/file.js.map +1 -1
- package/lib/accounts/store.js +38 -1
- package/lib/accounts/store.js.map +1 -1
- package/lib/approvals.js +179 -0
- package/lib/approvals.js.map +1 -0
- package/lib/cli.js +10 -0
- package/lib/cli.js.map +1 -1
- package/lib/client/QaAccountsController.js +29 -0
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaSessionController.js +261 -48
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +138 -56
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaSurfaceGuard.js +96 -0
- package/lib/client/QaSurfaceGuard.js.map +1 -0
- package/lib/client/QaTranscriptAdapter.js +11 -5
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/approvals.js +104 -0
- package/lib/client/approvals.js.map +1 -0
- package/lib/client/attestation.js +3 -0
- package/lib/client/attestation.js.map +1 -1
- package/lib/client/components/QaApproval.js +23 -0
- package/lib/client/components/QaApproval.js.map +1 -0
- package/lib/client/components/QaChangelog.js +55 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaComposer.js +1 -1
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaHeader.js +2 -8
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaMessage.js +20 -7
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModal.js +24 -6
- package/lib/client/components/QaModal.js.map +1 -1
- package/lib/client/components/QaQuestions.js +96 -0
- package/lib/client/components/QaQuestions.js.map +1 -0
- package/lib/client/components/QaSidebar.js +2 -6
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +6 -5
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaWidthHandle.js +21 -1
- package/lib/client/components/QaWidthHandle.js.map +1 -1
- package/lib/client/components/surface-utils.js +2 -0
- package/lib/client/components/surface-utils.js.map +1 -1
- package/lib/client/index.js +81 -22
- package/lib/client/index.js.map +1 -1
- package/lib/client/panels/PanelHost.js +209 -0
- package/lib/client/panels/PanelHost.js.map +1 -0
- package/lib/client/panels/PanelLauncher.js +39 -0
- package/lib/client/panels/PanelLauncher.js.map +1 -0
- package/lib/client/panels/contract.js +2 -0
- package/lib/client/panels/contract.js.map +1 -0
- package/lib/client/panels/index.js +2 -0
- package/lib/client/panels/index.js.map +1 -0
- package/lib/client/panels/registry.js +171 -0
- package/lib/client/panels/registry.js.map +1 -0
- package/lib/client/project-session-state.js +8 -3
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/questions.js +114 -0
- package/lib/client/questions.js.map +1 -0
- package/lib/client/settings/card.js +2 -2
- package/lib/client/settings/card.js.map +1 -1
- package/lib/client/settings/sections/accounts.js +3 -1
- package/lib/client/settings/sections/accounts.js.map +1 -1
- package/lib/client/settings/sections/documents.js +88 -0
- package/lib/client/settings/sections/documents.js.map +1 -0
- package/lib/client/settings/sections/interface.js +2 -0
- package/lib/client/settings/sections/interface.js.map +1 -1
- package/lib/client/settings/sections/sources.js +2 -0
- package/lib/client/settings/sections/sources.js.map +1 -1
- package/lib/client/settings/sections.js +1 -0
- package/lib/client/settings/sections.js.map +1 -1
- package/lib/client/settings-extensions/contract.js +2 -0
- package/lib/client/settings-extensions/contract.js.map +1 -0
- package/lib/client/settings-extensions/index.js +2 -0
- package/lib/client/settings-extensions/index.js.map +1 -0
- package/lib/client/settings-extensions/registry.js +63 -0
- package/lib/client/settings-extensions/registry.js.map +1 -0
- package/lib/client/settlement.js +51 -5
- package/lib/client/settlement.js.map +1 -1
- package/lib/client/source-preview.js +24 -0
- package/lib/client/source-preview.js.map +1 -0
- package/lib/client/styles.js +199 -32
- package/lib/client/styles.js.map +1 -1
- package/lib/client/subagent-codenames.js +109 -0
- package/lib/client/subagent-codenames.js.map +1 -0
- package/lib/client/types.js +3 -0
- package/lib/client/types.js.map +1 -1
- package/lib/client/user-settings/GeneralSettingsPage.js +13 -0
- package/lib/client/user-settings/GeneralSettingsPage.js.map +1 -0
- package/lib/client/user-settings/ProfileSettingsPage.js +59 -0
- package/lib/client/user-settings/ProfileSettingsPage.js.map +1 -0
- package/lib/client/user-settings/SkillCatalog.js +23 -0
- package/lib/client/user-settings/SkillCatalog.js.map +1 -0
- package/lib/client/user-settings/SkillEditor.js +89 -0
- package/lib/client/user-settings/SkillEditor.js.map +1 -0
- package/lib/client/user-settings/SkillToolPicker.js +58 -0
- package/lib/client/user-settings/SkillToolPicker.js.map +1 -0
- package/lib/client/user-settings/SkillsSettingsPage.js +171 -0
- package/lib/client/user-settings/SkillsSettingsPage.js.map +1 -0
- package/lib/client/user-settings/StartersSettingsPage.js +78 -0
- package/lib/client/user-settings/StartersSettingsPage.js.map +1 -0
- package/lib/client/user-settings/UserSettingsDialog.js +50 -0
- package/lib/client/user-settings/UserSettingsDialog.js.map +1 -0
- package/lib/client/user-settings/copy.js +84 -0
- package/lib/client/user-settings/copy.js.map +1 -0
- package/lib/client/user-settings/draft.js +127 -0
- package/lib/client/user-settings/draft.js.map +1 -0
- package/lib/client/user-settings/fields.js +24 -0
- package/lib/client/user-settings/fields.js.map +1 -0
- package/lib/client.js +6629 -1579
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/accounts.js +30 -0
- package/lib/config-resolvers/accounts.js.map +1 -1
- package/lib/config-resolvers/basics.js +4 -2
- package/lib/config-resolvers/basics.js.map +1 -1
- package/lib/config-resolvers/defaults.js +27 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/lockdown.js +11 -0
- package/lib/config-resolvers/lockdown.js.map +1 -1
- package/lib/config-resolvers/session.js +2 -2
- package/lib/config-resolvers/session.js.map +1 -1
- package/lib/config-resolvers/shared.js +9 -0
- package/lib/config-resolvers/shared.js.map +1 -1
- package/lib/config-resolvers/sources.js +2 -0
- package/lib/config-resolvers/sources.js.map +1 -1
- package/lib/config-resolvers/tools.js +37 -0
- package/lib/config-resolvers/tools.js.map +1 -0
- package/lib/config-resolvers/ui.js +2 -0
- package/lib/config-resolvers/ui.js.map +1 -1
- package/lib/config.js +299 -2
- package/lib/config.js.map +1 -1
- package/lib/documents/artifacts/ids.js +43 -0
- package/lib/documents/artifacts/ids.js.map +1 -0
- package/lib/documents/artifacts/manifest.js +66 -0
- package/lib/documents/artifacts/manifest.js.map +1 -0
- package/lib/documents/artifacts/store.js +169 -0
- package/lib/documents/artifacts/store.js.map +1 -0
- package/lib/documents/capabilities.js +93 -0
- package/lib/documents/capabilities.js.map +1 -0
- package/lib/documents/config.js +302 -0
- package/lib/documents/config.js.map +1 -0
- package/lib/documents/defaults.js +78 -0
- package/lib/documents/defaults.js.map +1 -0
- package/lib/documents/errors.js +101 -0
- package/lib/documents/errors.js.map +1 -0
- package/lib/documents/index.js +80 -0
- package/lib/documents/index.js.map +1 -0
- package/lib/documents/inspect/facts.js +161 -0
- package/lib/documents/inspect/facts.js.map +1 -0
- package/lib/documents/inspect/zip.js +108 -0
- package/lib/documents/inspect/zip.js.map +1 -0
- package/lib/documents/markdown/directives.js +135 -0
- package/lib/documents/markdown/directives.js.map +1 -0
- package/lib/documents/markdown/frontmatter.js +35 -0
- package/lib/documents/markdown/frontmatter.js.map +1 -0
- package/lib/documents/markdown/normalize.js +113 -0
- package/lib/documents/markdown/normalize.js.map +1 -0
- package/lib/documents/orchestrator/assets.js +243 -0
- package/lib/documents/orchestrator/assets.js.map +1 -0
- package/lib/documents/orchestrator/convert-document.js +186 -0
- package/lib/documents/orchestrator/convert-document.js.map +1 -0
- package/lib/documents/orchestrator/create-document.js +292 -0
- package/lib/documents/orchestrator/create-document.js.map +1 -0
- package/lib/documents/orchestrator/extract-document.js +162 -0
- package/lib/documents/orchestrator/extract-document.js.map +1 -0
- package/lib/documents/orchestrator/inspect-document.js +89 -0
- package/lib/documents/orchestrator/inspect-document.js.map +1 -0
- package/lib/documents/orchestrator/runtime-deps.js +59 -0
- package/lib/documents/orchestrator/runtime-deps.js.map +1 -0
- package/lib/documents/orchestrator/scope.js +132 -0
- package/lib/documents/orchestrator/scope.js.map +1 -0
- package/lib/documents/providers/docling.js +247 -0
- package/lib/documents/providers/docling.js.map +1 -0
- package/lib/documents/providers/libreoffice.js +130 -0
- package/lib/documents/providers/libreoffice.js.map +1 -0
- package/lib/documents/providers/markitdown.js +89 -0
- package/lib/documents/providers/markitdown.js.map +1 -0
- package/lib/documents/providers/pandoc.js +161 -0
- package/lib/documents/providers/pandoc.js.map +1 -0
- package/lib/documents/providers/process.js +164 -0
- package/lib/documents/providers/process.js.map +1 -0
- package/lib/documents/providers/registry.js +152 -0
- package/lib/documents/providers/registry.js.map +1 -0
- package/lib/documents/providers/shared.js +75 -0
- package/lib/documents/providers/shared.js.map +1 -0
- package/lib/documents/runtime.js +114 -0
- package/lib/documents/runtime.js.map +1 -0
- package/lib/documents/security/file-types.js +188 -0
- package/lib/documents/security/file-types.js.map +1 -0
- package/lib/documents/security/limits.js +78 -0
- package/lib/documents/security/limits.js.map +1 -0
- package/lib/documents/security/mime.js +43 -0
- package/lib/documents/security/mime.js.map +1 -0
- package/lib/documents/security/paths.js +133 -0
- package/lib/documents/security/paths.js.map +1 -0
- package/lib/documents/templates/registry.js +147 -0
- package/lib/documents/templates/registry.js.map +1 -0
- package/lib/documents/templates/resolver.js +59 -0
- package/lib/documents/templates/resolver.js.map +1 -0
- package/lib/documents/tools/convert.js +125 -0
- package/lib/documents/tools/convert.js.map +1 -0
- package/lib/documents/tools/create.js +187 -0
- package/lib/documents/tools/create.js.map +1 -0
- package/lib/documents/tools/index.js +41 -0
- package/lib/documents/tools/index.js.map +1 -0
- package/lib/documents/tools/inspect.js +135 -0
- package/lib/documents/tools/inspect.js.map +1 -0
- package/lib/documents/tools/shared.js +88 -0
- package/lib/documents/tools/shared.js.map +1 -0
- package/lib/documents/tools/to-markdown.js +125 -0
- package/lib/documents/tools/to-markdown.js.map +1 -0
- package/lib/documents/types.js +12 -0
- package/lib/documents/types.js.map +1 -0
- package/lib/index.js +299 -24
- package/lib/index.js.map +1 -1
- package/lib/integration-principals.js +22 -0
- package/lib/integration-principals.js.map +1 -0
- package/lib/lockdown-policy.js +15 -3
- package/lib/lockdown-policy.js.map +1 -1
- package/lib/personal-skills/errors.js +9 -0
- package/lib/personal-skills/errors.js.map +1 -0
- package/lib/personal-skills/host.js +80 -0
- package/lib/personal-skills/host.js.map +1 -0
- package/lib/personal-skills/index.js +10 -0
- package/lib/personal-skills/index.js.map +1 -0
- package/lib/personal-skills/paths.js +127 -0
- package/lib/personal-skills/paths.js.map +1 -0
- package/lib/personal-skills/provider.js +109 -0
- package/lib/personal-skills/provider.js.map +1 -0
- package/lib/personal-skills/remotes.js +40 -0
- package/lib/personal-skills/remotes.js.map +1 -0
- package/lib/personal-skills/service.js +686 -0
- package/lib/personal-skills/service.js.map +1 -0
- package/lib/personal-skills/skill-file.js +278 -0
- package/lib/personal-skills/skill-file.js.map +1 -0
- package/lib/personal-skills/skill-format.js +202 -0
- package/lib/personal-skills/skill-format.js.map +1 -0
- package/lib/personal-skills/watcher.js +96 -0
- package/lib/personal-skills/watcher.js.map +1 -0
- package/lib/profile.js +6 -4
- package/lib/profile.js.map +1 -1
- package/lib/prompt-notes.js +19 -0
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/file-preview.js +68 -21
- package/lib/provenance/file-preview.js.map +1 -1
- package/lib/provenance/host-store.js +69 -20
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/provenance/index.js +1 -0
- package/lib/provenance/index.js.map +1 -1
- package/lib/provenance/normalize.js +3 -1
- package/lib/provenance/normalize.js.map +1 -1
- package/lib/provenance/reported.js +37 -12
- package/lib/provenance/reported.js.map +1 -1
- package/lib/provenance/snapshot-store.js +154 -0
- package/lib/provenance/snapshot-store.js.map +1 -0
- package/lib/qa-tools/activation-detector.js +53 -0
- package/lib/qa-tools/activation-detector.js.map +1 -0
- package/lib/qa-tools/activation-manager.js +111 -0
- package/lib/qa-tools/activation-manager.js.map +1 -0
- package/lib/qa-tools/catalog.js +108 -0
- package/lib/qa-tools/catalog.js.map +1 -0
- package/lib/qa-tools/durable-marker.js +115 -0
- package/lib/qa-tools/durable-marker.js.map +1 -0
- package/lib/qa-tools/index.js +83 -0
- package/lib/qa-tools/index.js.map +1 -0
- package/lib/qa-tools/lifecycle.js +64 -0
- package/lib/qa-tools/lifecycle.js.map +1 -0
- package/lib/qa-tools/types.js +2 -0
- package/lib/qa-tools/types.js.map +1 -0
- package/lib/questions.js +185 -0
- package/lib/questions.js.map +1 -0
- package/lib/resolve-config.js +5 -0
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +104 -20
- package/lib/secure-session.js.map +1 -1
- package/lib/session-ownership.js +55 -0
- package/lib/session-ownership.js.map +1 -0
- package/lib/starters.js +117 -0
- package/lib/starters.js.map +1 -0
- package/lib/typert.host.js +1162 -77
- package/lib/typert.remote-client.d.ts +27 -1
- package/lib/typert.remote-client.js +879 -14
- package/lib/types/account-remotes.d.ts +3 -1
- package/lib/types/accounts/credentials.d.ts +6 -0
- package/lib/types/accounts/errors.d.ts +1 -1
- package/lib/types/accounts/file.d.ts +10 -0
- package/lib/types/accounts/store.d.ts +15 -1
- package/lib/types/approvals.d.ts +65 -0
- package/lib/types/client/QaAccountsController.d.ts +7 -1
- package/lib/types/client/QaSessionController.d.ts +50 -1
- package/lib/types/client/QaSurface.d.ts +21 -4
- package/lib/types/client/QaSurfaceGuard.d.ts +27 -0
- package/lib/types/client/QaTranscriptAdapter.d.ts +7 -0
- package/lib/types/client/approvals.d.ts +39 -0
- package/lib/types/client/components/QaApproval.d.ts +13 -0
- package/lib/types/client/components/QaComposer.d.ts +3 -1
- package/lib/types/client/components/QaHeader.d.ts +3 -1
- package/lib/types/client/components/QaModal.d.ts +5 -4
- package/lib/types/client/components/QaQuestions.d.ts +13 -0
- package/lib/types/client/components/QaSidebar.d.ts +8 -11
- package/lib/types/client/components/QaWidthHandle.d.ts +13 -0
- package/lib/types/client/index.d.ts +1 -0
- package/lib/types/client/panels/PanelHost.d.ts +18 -0
- package/lib/types/client/panels/PanelLauncher.d.ts +5 -0
- package/lib/types/client/panels/contract.d.ts +83 -0
- package/lib/types/client/panels/index.d.ts +3 -0
- package/lib/types/client/panels/registry.d.ts +40 -0
- package/lib/types/client/project-session-state.d.ts +13 -1
- package/lib/types/client/questions.d.ts +45 -0
- package/lib/types/client/settings/sections/documents.d.ts +13 -0
- package/lib/types/client/settings/sections.d.ts +1 -0
- package/lib/types/client/settings-extensions/contract.d.ts +32 -0
- package/lib/types/client/settings-extensions/index.d.ts +3 -0
- package/lib/types/client/settings-extensions/registry.d.ts +15 -0
- package/lib/types/client/settlement.d.ts +41 -5
- package/lib/types/client/source-preview.d.ts +8 -0
- package/lib/types/client/styles.d.ts +2 -0
- package/lib/types/client/subagent-codenames.d.ts +18 -0
- package/lib/types/client/types.d.ts +82 -3
- package/lib/types/client/user-settings/GeneralSettingsPage.d.ts +14 -0
- package/lib/types/client/user-settings/ProfileSettingsPage.d.ts +18 -0
- package/lib/types/client/user-settings/SkillCatalog.d.ts +16 -0
- package/lib/types/client/user-settings/SkillEditor.d.ts +42 -0
- package/lib/types/client/user-settings/SkillToolPicker.d.ts +17 -0
- package/lib/types/client/user-settings/SkillsSettingsPage.d.ts +15 -0
- package/lib/types/client/user-settings/StartersSettingsPage.d.ts +14 -0
- package/lib/types/client/user-settings/UserSettingsDialog.d.ts +43 -0
- package/lib/types/client/user-settings/copy.d.ts +25 -0
- package/lib/types/client/user-settings/draft.d.ts +51 -0
- package/lib/types/client/user-settings/fields.d.ts +43 -0
- package/lib/types/config-resolvers/shared.d.ts +7 -0
- package/lib/types/config-resolvers/tools.d.ts +6 -0
- package/lib/types/documents/artifacts/ids.d.ts +14 -0
- package/lib/types/documents/artifacts/manifest.d.ts +32 -0
- package/lib/types/documents/artifacts/store.d.ts +67 -0
- package/lib/types/documents/capabilities.d.ts +32 -0
- package/lib/types/documents/config.d.ts +27 -0
- package/lib/types/documents/defaults.d.ts +161 -0
- package/lib/types/documents/errors.d.ts +42 -0
- package/lib/types/documents/index.d.ts +63 -0
- package/lib/types/documents/inspect/facts.d.ts +43 -0
- package/lib/types/documents/inspect/zip.d.ts +28 -0
- package/lib/types/documents/markdown/directives.d.ts +39 -0
- package/lib/types/documents/markdown/frontmatter.d.ts +15 -0
- package/lib/types/documents/markdown/normalize.d.ts +30 -0
- package/lib/types/documents/orchestrator/assets.d.ts +55 -0
- package/lib/types/documents/orchestrator/convert-document.d.ts +25 -0
- package/lib/types/documents/orchestrator/create-document.d.ts +18 -0
- package/lib/types/documents/orchestrator/extract-document.d.ts +24 -0
- package/lib/types/documents/orchestrator/inspect-document.d.ts +12 -0
- package/lib/types/documents/orchestrator/runtime-deps.d.ts +43 -0
- package/lib/types/documents/orchestrator/scope.d.ts +52 -0
- package/lib/types/documents/providers/docling.d.ts +54 -0
- package/lib/types/documents/providers/libreoffice.d.ts +40 -0
- package/lib/types/documents/providers/markitdown.d.ts +28 -0
- package/lib/types/documents/providers/pandoc.d.ts +42 -0
- package/lib/types/documents/providers/process.d.ts +54 -0
- package/lib/types/documents/providers/registry.d.ts +68 -0
- package/lib/types/documents/providers/shared.d.ts +27 -0
- package/lib/types/documents/runtime.d.ts +59 -0
- package/lib/types/documents/security/file-types.d.ts +39 -0
- package/lib/types/documents/security/limits.d.ts +24 -0
- package/lib/types/documents/security/mime.d.ts +13 -0
- package/lib/types/documents/security/paths.d.ts +38 -0
- package/lib/types/documents/templates/registry.d.ts +50 -0
- package/lib/types/documents/templates/resolver.d.ts +30 -0
- package/lib/types/documents/tools/convert.d.ts +9 -0
- package/lib/types/documents/tools/create.d.ts +14 -0
- package/lib/types/documents/tools/index.d.ts +33 -0
- package/lib/types/documents/tools/inspect.d.ts +9 -0
- package/lib/types/documents/tools/shared.d.ts +77 -0
- package/lib/types/documents/tools/to-markdown.d.ts +12 -0
- package/lib/types/documents/types.d.ts +294 -0
- package/lib/types/index.d.ts +103 -5
- package/lib/types/integration-principals.d.ts +9 -0
- package/lib/types/lockdown-policy.d.ts +12 -2
- package/lib/types/personal-skills/errors.d.ts +11 -0
- package/lib/types/personal-skills/host.d.ts +42 -0
- package/lib/types/personal-skills/index.d.ts +10 -0
- package/lib/types/personal-skills/paths.d.ts +39 -0
- package/lib/types/personal-skills/provider.d.ts +33 -0
- package/lib/types/personal-skills/remotes.d.ts +35 -0
- package/lib/types/personal-skills/service.d.ts +131 -0
- package/lib/types/personal-skills/skill-file.d.ts +64 -0
- package/lib/types/personal-skills/skill-format.d.ts +100 -0
- package/lib/types/personal-skills/watcher.d.ts +39 -0
- package/lib/types/profile.d.ts +13 -0
- package/lib/types/prompt-notes.d.ts +9 -0
- package/lib/types/provenance/file-preview.d.ts +47 -4
- package/lib/types/provenance/host-store.d.ts +7 -1
- package/lib/types/provenance/index.d.ts +1 -0
- package/lib/types/provenance/reported.d.ts +9 -1
- package/lib/types/provenance/snapshot-store.d.ts +23 -0
- package/lib/types/qa-tools/activation-detector.d.ts +29 -0
- package/lib/types/qa-tools/activation-manager.d.ts +47 -0
- package/lib/types/qa-tools/catalog.d.ts +40 -0
- package/lib/types/qa-tools/durable-marker.d.ts +16 -0
- package/lib/types/qa-tools/index.d.ts +40 -0
- package/lib/types/qa-tools/lifecycle.d.ts +44 -0
- package/lib/types/qa-tools/types.d.ts +45 -0
- package/lib/types/questions.d.ts +83 -0
- package/lib/types/secure-session.d.ts +45 -4
- package/lib/types/session-ownership.d.ts +30 -0
- package/lib/types/starters.d.ts +45 -0
- package/lib/types/types.d.ts +282 -7
- package/lib/types/user-workspace.d.ts +5 -1
- package/lib/user-workspace.js +21 -6
- package/lib/user-workspace.js.map +1 -1
- package/package.json +22 -9
- package/scripts/repair-session-events.mjs +260 -0
- package/lib/client/components/QaProfile.js +0 -64
- package/lib/client/components/QaProfile.js.map +0 -1
- package/lib/types/client/components/QaProfile.d.ts +0 -25
package/lib/client/index.js
CHANGED
|
@@ -4,13 +4,15 @@ import { QaConfigController } from "./QaConfigController.js";
|
|
|
4
4
|
import { matchesQaRoute, QaRouteController } from "./QaRouteController.js";
|
|
5
5
|
import { QaAccountsController } from "./QaAccountsController.js";
|
|
6
6
|
import { QaChatIndex } from "./chat-index.js";
|
|
7
|
-
import {
|
|
7
|
+
import { QaSurfaceGuard } from "./QaSurfaceGuard.js";
|
|
8
8
|
import { QaWelcomeNoticeStep } from "./components/QaWelcomeNotice.js";
|
|
9
9
|
import { QA_SURFACE_STYLES } from "./styles.js";
|
|
10
10
|
import { QA_SURFACE_SETTINGS_NAMESPACE } from "../shared/settings.js";
|
|
11
11
|
import { qaStorageNamespace } from "../shared/session-key.js";
|
|
12
12
|
import { QaSettingsCard } from "./settings/card.js";
|
|
13
13
|
import { QA_SETTINGS_STYLES } from "./settings/styles.js";
|
|
14
|
+
import { QaSurfacePanelRegistry } from "./panels/registry.js";
|
|
15
|
+
import { QaUserSettingsSectionRegistry } from "./settings-extensions/index.js";
|
|
14
16
|
const QA_WELCOME_SLOT_ID = "welcome-notice";
|
|
15
17
|
function qaWelcomeStorageKey(config) {
|
|
16
18
|
return `${qaStorageNamespace(config)}:welcome-notice`;
|
|
@@ -25,6 +27,22 @@ export const inject = [
|
|
|
25
27
|
];
|
|
26
28
|
/** Register the route-aware, full-frame QA entry in the additive overlay slot. */
|
|
27
29
|
export async function apply(ctx) {
|
|
30
|
+
const panels = new QaSurfacePanelRegistry();
|
|
31
|
+
const settingsSections = new QaUserSettingsSectionRegistry();
|
|
32
|
+
ctx.effect(() => {
|
|
33
|
+
const removeService = ctx.provide("qaSurfacePanels", panels);
|
|
34
|
+
return () => {
|
|
35
|
+
panels.dispose();
|
|
36
|
+
void removeService();
|
|
37
|
+
};
|
|
38
|
+
}, "dsh-qa-surface: panel service");
|
|
39
|
+
ctx.effect(() => {
|
|
40
|
+
const removeService = ctx.provide("qaUserSettingsSections", settingsSections);
|
|
41
|
+
return () => {
|
|
42
|
+
settingsSections.dispose();
|
|
43
|
+
void removeService();
|
|
44
|
+
};
|
|
45
|
+
}, "dsh-qa-surface: user settings extension service");
|
|
28
46
|
const remote = ctx.remote;
|
|
29
47
|
const disposeRemote = await remote.$mount(qaSurfaceRemote);
|
|
30
48
|
await ctx.inject(["remote.qaSurface", "remote.session", "remote.agentPresets"], (remoteContext) => {
|
|
@@ -39,6 +57,27 @@ export async function apply(ctx) {
|
|
|
39
57
|
sources: (token, sessionId) => policyRemote.sources(token, sessionId),
|
|
40
58
|
readSourceFile: (token, sessionId, sourcePath) => policyRemote.readSourceFile(token, sessionId, sourcePath),
|
|
41
59
|
};
|
|
60
|
+
const questionApi = {
|
|
61
|
+
pendingQuestions: (token, sessionId) => policyRemote.pendingQuestions(token, sessionId),
|
|
62
|
+
answerQuestion: (token, sessionId, requestId, answers) => policyRemote.answerQuestion(token, sessionId, requestId, answers),
|
|
63
|
+
cancelQuestion: (token, sessionId, requestId) => policyRemote.cancelQuestion(token, sessionId, requestId),
|
|
64
|
+
};
|
|
65
|
+
// Personal skills: the token rides every call, and the Host answers with
|
|
66
|
+
// the caller's own storage. The section simply does not exist on a page
|
|
67
|
+
// whose deployment cannot host one.
|
|
68
|
+
const skillApi = {
|
|
69
|
+
skillsList: (token) => policyRemote.skillsList(token),
|
|
70
|
+
skillsGet: (token, name) => policyRemote.skillsGet(token, name),
|
|
71
|
+
skillsCreate: (token, input) => policyRemote.skillsCreate(token, input),
|
|
72
|
+
skillsUpdate: (token, name, input) => policyRemote.skillsUpdate(token, name, input),
|
|
73
|
+
skillsRemove: (token, name, expectedRevision) => policyRemote.skillsRemove(token, name, expectedRevision),
|
|
74
|
+
skillsTools: (token) => policyRemote.skillsTools(token),
|
|
75
|
+
skillsValidate: (token, name, input) => policyRemote.skillsValidate(token, name, input),
|
|
76
|
+
};
|
|
77
|
+
const approvalApi = {
|
|
78
|
+
pendingApprovals: (token, sessionId) => policyRemote.pendingApprovals(token, sessionId),
|
|
79
|
+
answerApproval: (token, sessionId, requestId, decision) => policyRemote.answerApproval(token, sessionId, requestId, decision),
|
|
80
|
+
};
|
|
42
81
|
// The account gate rides its own remote; a stale token simply answers
|
|
43
82
|
// "not authenticated" and the browser shows the login card.
|
|
44
83
|
const accounts = new QaAccountsController({
|
|
@@ -176,27 +215,47 @@ export async function apply(ctx) {
|
|
|
176
215
|
name: "shell.overlay",
|
|
177
216
|
id: "dsh-qa-surface",
|
|
178
217
|
order: -10_000,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
218
|
+
children: {
|
|
219
|
+
"qa.surface.panel": { kind: "keyed", scope: "root" },
|
|
220
|
+
},
|
|
221
|
+
inject: () => {
|
|
222
|
+
try {
|
|
223
|
+
return {
|
|
224
|
+
route,
|
|
225
|
+
config,
|
|
226
|
+
// The host dsh-session merge types ctx.sessions as SessionStore in
|
|
227
|
+
// this program; the client assembly provides the ISessions face.
|
|
228
|
+
sessions: ctx.sessions,
|
|
229
|
+
conversation: ctx.uiConversation,
|
|
230
|
+
api: qaApi,
|
|
231
|
+
connection: ctx.connection.generation,
|
|
232
|
+
secureSession,
|
|
233
|
+
createSession: (token) => policyRemote.createSession(token),
|
|
234
|
+
sourceApi,
|
|
235
|
+
skillApi,
|
|
236
|
+
approvalApi,
|
|
237
|
+
questionApi,
|
|
238
|
+
accounts,
|
|
239
|
+
panels,
|
|
240
|
+
settingsSections,
|
|
241
|
+
// The upload service is optional on the page: a deployment that
|
|
242
|
+
// does not serve it keeps images, and a staged file refuses the
|
|
243
|
+
// send with a message instead of losing the draft. Read through
|
|
244
|
+
// the untyped service lookup on purpose — the QA bundle does not
|
|
245
|
+
// link the upload package.
|
|
246
|
+
fileUpload: () => ctx.get("fileUpload"),
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// The face reads host services lazily (cordis service
|
|
251
|
+
// visibility), so assembly can fail here. Hand the guard an
|
|
252
|
+
// empty face: it renders the fullscreen failure card instead
|
|
253
|
+
// of the entry crashing, which would retire the overlay and
|
|
254
|
+
// uncover the host shell beneath it.
|
|
255
|
+
return {};
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
}, QaSurfaceGuard));
|
|
200
259
|
});
|
|
201
260
|
return disposeRemote;
|
|
202
261
|
}
|
package/lib/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"AAIA,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAS3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Component, useEffect, useLayoutEffect, useRef, useState, useSyncExternalStore, } from "react";
|
|
3
|
+
export const QA_PANEL_DEFAULT_RATIO = 0.42;
|
|
4
|
+
export const QA_PANEL_MIN_PX = 320;
|
|
5
|
+
export const QA_CHAT_MIN_PX = 400;
|
|
6
|
+
export const QA_PANEL_MAX_RATIO = 0.7;
|
|
7
|
+
export const QA_PANEL_MOBILE_BREAKPOINT_PX = 768;
|
|
8
|
+
const RESIZER_PX = 5;
|
|
9
|
+
export function clampQaPanelWidth(width, available) {
|
|
10
|
+
const ratioMax = Math.max(QA_PANEL_MIN_PX, available * QA_PANEL_MAX_RATIO);
|
|
11
|
+
const chatMax = Math.max(QA_PANEL_MIN_PX, available - QA_CHAT_MIN_PX - RESIZER_PX);
|
|
12
|
+
return Math.round(Math.min(Math.max(width, QA_PANEL_MIN_PX), ratioMax, chatMax));
|
|
13
|
+
}
|
|
14
|
+
class PanelErrorBoundary extends Component {
|
|
15
|
+
state = { failed: false };
|
|
16
|
+
static getDerivedStateFromError() {
|
|
17
|
+
return { failed: true };
|
|
18
|
+
}
|
|
19
|
+
componentDidCatch(error) {
|
|
20
|
+
console.error(`dsh-qa-surface: panel "${this.props.definition.kind}" failed`, error);
|
|
21
|
+
}
|
|
22
|
+
render() {
|
|
23
|
+
if (this.state.failed) {
|
|
24
|
+
return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", role: "alert", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", this.props.definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id:", " ", this.props.definition.id, ")."] }));
|
|
25
|
+
}
|
|
26
|
+
return this.props.children;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function MissingPanel({ definition, }) {
|
|
30
|
+
return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", role: "status", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id: ", definition.id, ")."] }));
|
|
31
|
+
}
|
|
32
|
+
function PanelSlotBody({ definition, owner, renderSlot, }) {
|
|
33
|
+
return renderSlot("qa.surface.panel", owner, {
|
|
34
|
+
entryKey: definition.id,
|
|
35
|
+
fallback: _jsx(MissingPanel, { definition: definition }),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function panelTitle(definition) {
|
|
39
|
+
try {
|
|
40
|
+
return definition.title() || definition.kind;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return definition.kind;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function useAvailableWidth(root, activationKey) {
|
|
47
|
+
const [width, setWidth] = useState(() => typeof window === "undefined" ? 0 : window.innerWidth);
|
|
48
|
+
useLayoutEffect(() => {
|
|
49
|
+
const parent = root.current?.parentElement;
|
|
50
|
+
const read = () => setWidth(parent?.clientWidth || window.innerWidth);
|
|
51
|
+
read();
|
|
52
|
+
if (typeof ResizeObserver === "undefined" || parent == null) {
|
|
53
|
+
window.addEventListener("resize", read);
|
|
54
|
+
return () => window.removeEventListener("resize", read);
|
|
55
|
+
}
|
|
56
|
+
const observer = new ResizeObserver(read);
|
|
57
|
+
observer.observe(parent);
|
|
58
|
+
return () => observer.disconnect();
|
|
59
|
+
}, [activationKey, root]);
|
|
60
|
+
return width;
|
|
61
|
+
}
|
|
62
|
+
export function QaPanelHost({ panels, sessionId, qaToken = "", renderSlot, }) {
|
|
63
|
+
const snapshot = useSyncExternalStore(panels.subscribe, panels.getSnapshot, panels.getSnapshot);
|
|
64
|
+
const root = useRef(null);
|
|
65
|
+
const mounted = useRef(new Set());
|
|
66
|
+
const previousFocus = useRef(null);
|
|
67
|
+
const previousActive = useRef(null);
|
|
68
|
+
const drag = useRef(undefined);
|
|
69
|
+
const active = snapshot.definitions.find((definition) => definition.kind === snapshot.activeKind);
|
|
70
|
+
const available = useAvailableWidth(root, active?.id);
|
|
71
|
+
const presentation = available < QA_PANEL_MOBILE_BREAKPOINT_PX ? "fullscreen" : "side";
|
|
72
|
+
const [width, setWidth] = useState(() => clampQaPanelWidth(window.innerWidth * QA_PANEL_DEFAULT_RATIO, window.innerWidth));
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
panels.setContext({ sessionId, qaToken });
|
|
75
|
+
return () => panels.setContext({ sessionId: null, qaToken: "" });
|
|
76
|
+
}, [panels, qaToken, sessionId]);
|
|
77
|
+
if (active !== undefined)
|
|
78
|
+
mounted.current.add(active.id);
|
|
79
|
+
const liveIds = new Set(snapshot.definitions.map((definition) => definition.id));
|
|
80
|
+
for (const id of mounted.current) {
|
|
81
|
+
if (!liveIds.has(id))
|
|
82
|
+
mounted.current.delete(id);
|
|
83
|
+
}
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (presentation === "side") {
|
|
86
|
+
setWidth((current) => clampQaPanelWidth(current === QA_PANEL_MIN_PX
|
|
87
|
+
? available * QA_PANEL_DEFAULT_RATIO
|
|
88
|
+
: current, available));
|
|
89
|
+
}
|
|
90
|
+
}, [available, presentation]);
|
|
91
|
+
useLayoutEffect(() => {
|
|
92
|
+
let restoreFrame;
|
|
93
|
+
const wasActive = previousActive.current;
|
|
94
|
+
if (wasActive === null && snapshot.activeKind !== null) {
|
|
95
|
+
previousFocus.current =
|
|
96
|
+
document.activeElement instanceof HTMLElement
|
|
97
|
+
? document.activeElement
|
|
98
|
+
: null;
|
|
99
|
+
}
|
|
100
|
+
if (wasActive !== null && snapshot.activeKind === null) {
|
|
101
|
+
const target = previousFocus.current;
|
|
102
|
+
restoreFrame = requestAnimationFrame(() => {
|
|
103
|
+
if (target?.isConnected)
|
|
104
|
+
target.focus();
|
|
105
|
+
else
|
|
106
|
+
document
|
|
107
|
+
.querySelector("#dsh-qa-prompt")
|
|
108
|
+
?.focus();
|
|
109
|
+
});
|
|
110
|
+
previousFocus.current = null;
|
|
111
|
+
}
|
|
112
|
+
previousActive.current = snapshot.activeKind;
|
|
113
|
+
return () => {
|
|
114
|
+
if (restoreFrame !== undefined)
|
|
115
|
+
cancelAnimationFrame(restoreFrame);
|
|
116
|
+
};
|
|
117
|
+
}, [snapshot.activeKind]);
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
if (!snapshot.focus || snapshot.activeKind === null)
|
|
120
|
+
return;
|
|
121
|
+
const frame = requestAnimationFrame(() => {
|
|
122
|
+
const target = root.current?.querySelector("button:not([disabled]),input:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex='-1'])");
|
|
123
|
+
(target ?? root.current)?.focus();
|
|
124
|
+
});
|
|
125
|
+
return () => cancelAnimationFrame(frame);
|
|
126
|
+
}, [snapshot.activeKind, snapshot.focus, snapshot.focusRequest]);
|
|
127
|
+
useLayoutEffect(() => {
|
|
128
|
+
const focused = document.activeElement instanceof HTMLElement
|
|
129
|
+
? document.activeElement
|
|
130
|
+
: null;
|
|
131
|
+
if (focused !== null &&
|
|
132
|
+
focused.closest(".dsh-qa-extension-panel__body[hidden]") !== null) {
|
|
133
|
+
root.current?.focus();
|
|
134
|
+
}
|
|
135
|
+
}, [snapshot.activeKind]);
|
|
136
|
+
if (active === undefined)
|
|
137
|
+
return null;
|
|
138
|
+
const resizeTo = (next) => setWidth(clampQaPanelWidth(next, available));
|
|
139
|
+
const handlePointerDown = (event) => {
|
|
140
|
+
event.preventDefault();
|
|
141
|
+
drag.current = { pointerId: event.pointerId, x: event.clientX, width };
|
|
142
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
143
|
+
};
|
|
144
|
+
const handlePointerMove = (event) => {
|
|
145
|
+
const start = drag.current;
|
|
146
|
+
if (start?.pointerId !== event.pointerId)
|
|
147
|
+
return;
|
|
148
|
+
resizeTo(start.width - (event.clientX - start.x));
|
|
149
|
+
};
|
|
150
|
+
const handlePointerEnd = (event) => {
|
|
151
|
+
if (drag.current?.pointerId !== event.pointerId)
|
|
152
|
+
return;
|
|
153
|
+
drag.current = undefined;
|
|
154
|
+
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
155
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const handleSeparatorKey = (event) => {
|
|
159
|
+
if (event.key === "ArrowLeft")
|
|
160
|
+
resizeTo(width + 16);
|
|
161
|
+
else if (event.key === "ArrowRight")
|
|
162
|
+
resizeTo(width - 16);
|
|
163
|
+
else if (event.key === "Home")
|
|
164
|
+
resizeTo(QA_PANEL_MIN_PX);
|
|
165
|
+
else if (event.key === "End")
|
|
166
|
+
resizeTo(available * QA_PANEL_MAX_RATIO);
|
|
167
|
+
else
|
|
168
|
+
return;
|
|
169
|
+
event.preventDefault();
|
|
170
|
+
};
|
|
171
|
+
return (_jsxs(_Fragment, { children: [presentation === "side" ? (_jsx("div", { className: "dsh-qa-extension-panel__resizer", role: "separator", "aria-label": "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0448\u0438\u0440\u0438\u043D\u0443 \u043F\u0430\u043D\u0435\u043B\u0438", "aria-orientation": "vertical", "aria-valuemin": QA_PANEL_MIN_PX, "aria-valuemax": clampQaPanelWidth(Number.POSITIVE_INFINITY, available), "aria-valuenow": width, tabIndex: 0, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerEnd, onPointerCancel: handlePointerEnd, onKeyDown: handleSeparatorKey })) : null, _jsxs("aside", { ref: root, className: `dsh-qa-extension-panel dsh-qa-extension-panel--${presentation}`, "data-presentation": presentation, "aria-label": `Панель: ${panelTitle(active)}`, tabIndex: -1, style: presentation === "side"
|
|
172
|
+
? { width: `${width}px` }
|
|
173
|
+
: undefined, onKeyDown: (event) => {
|
|
174
|
+
if (presentation === "fullscreen" &&
|
|
175
|
+
event.key === "Escape" &&
|
|
176
|
+
!event.defaultPrevented) {
|
|
177
|
+
event.stopPropagation();
|
|
178
|
+
panels.close({ reason: "user" });
|
|
179
|
+
}
|
|
180
|
+
}, children: [_jsxs("header", { className: "dsh-qa-extension-panel__header", children: [_jsx("h2", { children: panelTitle(active) }), _jsx("button", { type: "button", className: "dsh-qa-extension-panel__close", "aria-label": `Закрыть панель: ${panelTitle(active)}`, onClick: () => panels.close({ reason: "user" }), children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m3.5 3.5 7 7m0-7-7 7" }) }) })] }), _jsx("div", { className: "dsh-qa-extension-panel__bodies", children: snapshot.definitions.map((definition) => {
|
|
181
|
+
const visible = definition.kind === snapshot.activeKind;
|
|
182
|
+
if (!visible &&
|
|
183
|
+
(!definition.keepMounted || !mounted.current.has(definition.id))) {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
const signal = panels.signal(definition.kind);
|
|
187
|
+
if (signal === undefined)
|
|
188
|
+
return null;
|
|
189
|
+
const owner = {
|
|
190
|
+
panelId: definition.id,
|
|
191
|
+
panelKind: definition.kind,
|
|
192
|
+
sessionId,
|
|
193
|
+
qaToken,
|
|
194
|
+
visible,
|
|
195
|
+
presentation,
|
|
196
|
+
params: panels.params(definition.kind),
|
|
197
|
+
actions: {
|
|
198
|
+
close: () => panels.close({ reason: "extension" }),
|
|
199
|
+
reveal: (options) => void panels.open(definition.kind, {
|
|
200
|
+
reason: "extension",
|
|
201
|
+
focus: options?.focus,
|
|
202
|
+
}),
|
|
203
|
+
},
|
|
204
|
+
signal,
|
|
205
|
+
};
|
|
206
|
+
return (_jsx("div", { className: "dsh-qa-extension-panel__body", hidden: !visible, "aria-hidden": !visible, children: _jsx(PanelErrorBoundary, { definition: definition, children: _jsx(PanelSlotBody, { definition: definition, owner: owner, renderSlot: renderSlot }) }) }, definition.id));
|
|
207
|
+
}) })] })] }));
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=PanelHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelHost.js","sourceRoot":"","sources":["../../../src/client/panels/PanelHost.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useSyncExternalStore } from "react";
|
|
3
|
+
function title(definition) {
|
|
4
|
+
try {
|
|
5
|
+
const value = definition.title().trim();
|
|
6
|
+
return value === "" ? definition.kind : value;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return definition.kind;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function PanelIcon({ token }) {
|
|
13
|
+
switch (token) {
|
|
14
|
+
case "browser":
|
|
15
|
+
return _jsx("path", { d: "M2.5 3.25h11v9.5h-11zM2.5 6h11M5 4.6h.01M7 4.6h.01" });
|
|
16
|
+
case "artifacts":
|
|
17
|
+
return _jsx("path", { d: "M3 4.5h4l1.2 1.4H13v6.6H3zM3 4.5V3h3.5l1 1.5" });
|
|
18
|
+
case "logs":
|
|
19
|
+
return _jsx("path", { d: "M3 3.5h10v9H3zM5 6h6M5 8h6M5 10h4" });
|
|
20
|
+
case "activity":
|
|
21
|
+
return _jsx("path", { d: "M2.5 8h2l1.3-3 2.3 6 1.5-4H13.5" });
|
|
22
|
+
case "terminal":
|
|
23
|
+
return _jsx("path", { d: "m3.5 5 2.5 2.5L3.5 10M7.5 10h5" });
|
|
24
|
+
default:
|
|
25
|
+
return (_jsx("path", { d: "M5.5 2.75h5v2.5h2.5v5h-2.5v2.5h-5v-2.5H3v-5h2.5zM6.5 6.25h3v3h-3z" }));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function QaPanelLauncher({ panels, }) {
|
|
29
|
+
const snapshot = useSyncExternalStore(panels.subscribe, panels.getSnapshot, panels.getSnapshot);
|
|
30
|
+
const visible = snapshot.definitions.filter((definition) => definition.userVisible !== false);
|
|
31
|
+
if (visible.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
return (_jsx("nav", { className: "dsh-qa-panel-launcher", "aria-label": "\u041F\u0430\u043D\u0435\u043B\u0438 QA", children: visible.map((definition) => {
|
|
34
|
+
const label = title(definition);
|
|
35
|
+
const active = snapshot.activeKind === definition.kind;
|
|
36
|
+
return (_jsx("button", { type: "button", className: "dsh-qa-panel-launcher__button", "aria-label": `${active ? "Закрыть" : "Открыть"} панель: ${label}`, "aria-pressed": active, title: label, onClick: () => panels.toggle(definition.kind), children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx(PanelIcon, { token: definition.icon }) }) }, definition.id));
|
|
37
|
+
}) }));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=PanelLauncher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelLauncher.js","sourceRoot":"","sources":["../../../src/client/panels/PanelLauncher.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAI7C,SAAS,KAAK,CAAC,UAAoC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,KAAK,EAA0C;IAClE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,eAAM,CAAC,EAAC,oDAAoD,GAAG,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,eAAM,CAAC,EAAC,8CAA8C,GAAG,CAAC;QACnE,KAAK,MAAM;YACT,OAAO,eAAM,CAAC,EAAC,mCAAmC,GAAG,CAAC;QACxD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,iCAAiC,GAAG,CAAC;QACtD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,gCAAgC,GAAG,CAAC;QACrD;YACE,OAAO,CACL,eAAM,CAAC,EAAC,mEAAmE,GAAG,CAC/E,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAGP;IACC,MAAM,QAAQ,GAAG,oBAAoB,CACnC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CACzC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,KAAK,KAAK,CACjD,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,cAAK,SAAS,EAAC,uBAAuB,gBAAY,yCAAW,YAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC;YACvD,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,gBAC7B,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAAY,KAAK,EAAE,kBAClD,MAAM,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAE7C,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,KAAC,SAAS,IAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAI,GACjC,IAVD,UAAU,CAAC,EAAE,CAWX,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/client/panels/contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/panels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
const EMPTY_SNAPSHOT = Object.freeze({
|
|
2
|
+
definitions: Object.freeze([]),
|
|
3
|
+
activeKind: null,
|
|
4
|
+
params: undefined,
|
|
5
|
+
focusRequest: 0,
|
|
6
|
+
focus: false,
|
|
7
|
+
});
|
|
8
|
+
const EMPTY_CONTEXT = Object.freeze({
|
|
9
|
+
sessionId: null,
|
|
10
|
+
qaToken: "",
|
|
11
|
+
});
|
|
12
|
+
function requiredIdentity(value, field) {
|
|
13
|
+
if (value.trim() === "") {
|
|
14
|
+
throw new Error(`qaSurfacePanels.register: ${field} must not be empty`);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function titleForSort(definition) {
|
|
19
|
+
try {
|
|
20
|
+
return definition.title();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return definition.id;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function compareDefinitions(left, right) {
|
|
27
|
+
const order = (left.order ?? 0) - (right.order ?? 0);
|
|
28
|
+
if (order !== 0)
|
|
29
|
+
return order;
|
|
30
|
+
const title = titleForSort(left).localeCompare(titleForSort(right));
|
|
31
|
+
return title === 0 ? left.id.localeCompare(right.id) : title;
|
|
32
|
+
}
|
|
33
|
+
/** Client-only metadata/navigation registry. It never stores React components. */
|
|
34
|
+
export class QaSurfacePanelRegistry {
|
|
35
|
+
byId = new Map();
|
|
36
|
+
byKind = new Map();
|
|
37
|
+
listeners = new Set();
|
|
38
|
+
paramsByKind = new Map();
|
|
39
|
+
activeKind = null;
|
|
40
|
+
focusRequest = 0;
|
|
41
|
+
focus = false;
|
|
42
|
+
snapshot = EMPTY_SNAPSHOT;
|
|
43
|
+
context = EMPTY_CONTEXT;
|
|
44
|
+
disposed = false;
|
|
45
|
+
subscribe = (listener) => {
|
|
46
|
+
this.listeners.add(listener);
|
|
47
|
+
return () => this.listeners.delete(listener);
|
|
48
|
+
};
|
|
49
|
+
getSnapshot = () => this.snapshot;
|
|
50
|
+
register(definition) {
|
|
51
|
+
if (this.disposed) {
|
|
52
|
+
throw new Error("qaSurfacePanels.register: registry has been disposed");
|
|
53
|
+
}
|
|
54
|
+
const id = requiredIdentity(definition.id, "id");
|
|
55
|
+
const kind = requiredIdentity(definition.kind, "kind");
|
|
56
|
+
if (this.byId.has(id)) {
|
|
57
|
+
throw new Error(`qaSurfacePanels.register: duplicate id "${id}"`);
|
|
58
|
+
}
|
|
59
|
+
if (this.byKind.has(kind)) {
|
|
60
|
+
throw new Error(`qaSurfacePanels.register: duplicate kind "${kind}"`);
|
|
61
|
+
}
|
|
62
|
+
const normalized = Object.freeze({
|
|
63
|
+
...definition,
|
|
64
|
+
id,
|
|
65
|
+
kind,
|
|
66
|
+
userVisible: definition.userVisible ?? true,
|
|
67
|
+
keepMounted: definition.keepMounted ?? false,
|
|
68
|
+
});
|
|
69
|
+
const record = {
|
|
70
|
+
definition: normalized,
|
|
71
|
+
abort: new AbortController(),
|
|
72
|
+
};
|
|
73
|
+
this.byId.set(id, record);
|
|
74
|
+
this.byKind.set(kind, record);
|
|
75
|
+
this.publish();
|
|
76
|
+
let removed = false;
|
|
77
|
+
return () => {
|
|
78
|
+
if (removed)
|
|
79
|
+
return;
|
|
80
|
+
removed = true;
|
|
81
|
+
if (this.byId.get(id) !== record)
|
|
82
|
+
return;
|
|
83
|
+
this.byId.delete(id);
|
|
84
|
+
this.byKind.delete(kind);
|
|
85
|
+
this.paramsByKind.delete(kind);
|
|
86
|
+
record.abort.abort();
|
|
87
|
+
if (this.activeKind === kind)
|
|
88
|
+
this.activeKind = null;
|
|
89
|
+
this.publish();
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
open(kind, options = {}) {
|
|
93
|
+
if (!this.byKind.has(kind))
|
|
94
|
+
return false;
|
|
95
|
+
this.activeKind = kind;
|
|
96
|
+
this.paramsByKind.set(kind, options.params);
|
|
97
|
+
this.focus = options.focus ?? true;
|
|
98
|
+
this.focusRequest += 1;
|
|
99
|
+
this.publish();
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
close(_options = {}) {
|
|
103
|
+
if (this.activeKind === null)
|
|
104
|
+
return;
|
|
105
|
+
this.activeKind = null;
|
|
106
|
+
this.focus = false;
|
|
107
|
+
this.publish();
|
|
108
|
+
}
|
|
109
|
+
toggle(kind) {
|
|
110
|
+
if (!this.byKind.has(kind))
|
|
111
|
+
return false;
|
|
112
|
+
if (this.activeKind === kind) {
|
|
113
|
+
this.close({ reason: "user" });
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
return this.open(kind, { reason: "user", focus: true });
|
|
117
|
+
}
|
|
118
|
+
isRegistered(kind) {
|
|
119
|
+
return this.byKind.has(kind);
|
|
120
|
+
}
|
|
121
|
+
getActiveKind() {
|
|
122
|
+
return this.activeKind;
|
|
123
|
+
}
|
|
124
|
+
getContext() {
|
|
125
|
+
return this.context;
|
|
126
|
+
}
|
|
127
|
+
/** QA Surface-owned lifecycle update; extensions consume it read-only. */
|
|
128
|
+
setContext(context) {
|
|
129
|
+
this.context = Object.freeze({ ...context });
|
|
130
|
+
}
|
|
131
|
+
list() {
|
|
132
|
+
return this.snapshot.definitions;
|
|
133
|
+
}
|
|
134
|
+
signal(kind) {
|
|
135
|
+
return this.byKind.get(kind)?.abort.signal;
|
|
136
|
+
}
|
|
137
|
+
params(kind) {
|
|
138
|
+
return this.paramsByKind.get(kind);
|
|
139
|
+
}
|
|
140
|
+
dispose() {
|
|
141
|
+
if (this.disposed)
|
|
142
|
+
return;
|
|
143
|
+
this.disposed = true;
|
|
144
|
+
for (const record of this.byId.values())
|
|
145
|
+
record.abort.abort();
|
|
146
|
+
this.byId.clear();
|
|
147
|
+
this.byKind.clear();
|
|
148
|
+
this.paramsByKind.clear();
|
|
149
|
+
this.activeKind = null;
|
|
150
|
+
this.context = EMPTY_CONTEXT;
|
|
151
|
+
this.publish();
|
|
152
|
+
this.listeners.clear();
|
|
153
|
+
}
|
|
154
|
+
publish() {
|
|
155
|
+
const definitions = Object.freeze([...this.byId.values()]
|
|
156
|
+
.map((record) => record.definition)
|
|
157
|
+
.sort(compareDefinitions));
|
|
158
|
+
this.snapshot = Object.freeze({
|
|
159
|
+
definitions,
|
|
160
|
+
activeKind: this.activeKind,
|
|
161
|
+
params: this.activeKind === null
|
|
162
|
+
? undefined
|
|
163
|
+
: this.paramsByKind.get(this.activeKind),
|
|
164
|
+
focusRequest: this.focusRequest,
|
|
165
|
+
focus: this.focus,
|
|
166
|
+
});
|
|
167
|
+
for (const listener of this.listeners)
|
|
168
|
+
listener();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=registry.js.map
|