@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PluginLogger } from "@yadsh/dsh-plugin-log";
|
|
2
2
|
import { QaAccounts } from "./accounts/store.js";
|
|
3
|
-
import type { QaAccountProfileInput, QaAccountSession, QaAccountUserPublic, QaClaimResult, QaOwnershipEntry, QaWhoamiResult, ResolvedQaSurfaceConfig } from "./types.js";
|
|
3
|
+
import type { QaAccountProfileInput, QaAccountSession, QaAccountStartersInput, QaAccountUserPublic, QaClaimResult, QaOwnershipEntry, QaWhoamiResult, ResolvedQaSurfaceConfig } from "./types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Host-side bodies of the account remotes the `QaSurface` service exposes.
|
|
6
6
|
* The `@Remote`-decorated signatures stay on the service class (typert code
|
|
@@ -33,6 +33,8 @@ export interface QaAccountRemotes {
|
|
|
33
33
|
};
|
|
34
34
|
/** Replace the caller's own self-declared profile; the token is the identity. */
|
|
35
35
|
updateProfile(token: string, input: QaAccountProfileInput): QaAccountUserPublic;
|
|
36
|
+
/** Replace the caller's own starter buttons; the token is the identity. */
|
|
37
|
+
updateStarters(token: string, input: QaAccountStartersInput): QaAccountUserPublic;
|
|
36
38
|
}
|
|
37
39
|
/** Build the account-remotes context for one `QaSurface` service instance. */
|
|
38
40
|
export declare function createQaAccountRemotes(options: {
|
|
@@ -4,6 +4,12 @@ export interface ValidatedCredentials {
|
|
|
4
4
|
/** Trimmed display name; empty means "derive one from the address". */
|
|
5
5
|
readonly displayName: string;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* The length gate every path that sets a password goes through — registration,
|
|
9
|
+
* the operator's addUser, and a reset — so a password good enough to register is
|
|
10
|
+
* exactly the one an operator can put back.
|
|
11
|
+
*/
|
|
12
|
+
export declare function validatePassword(password: string): void;
|
|
7
13
|
/**
|
|
8
14
|
* The email/password/display-name gate shared by self-registration and the
|
|
9
15
|
* operator's addUser, so both paths reject unusable input with the same
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* marker pattern the attestation path established; the browser maps them to
|
|
4
4
|
* audience-safe copy and the precise cause stays in the Host logs.
|
|
5
5
|
*/
|
|
6
|
-
export type QaAccountsErrorReason = "auth-required" | "admin-required" | "invalid-credentials" | "account-disabled" | "email-taken" | "invalid-email" | "invalid-display-name" | "invalid-profile" | "profile-disabled" | "invalid-role" | "weak-password" | "registration-disabled" | "rate-limited" | "session-owned-elsewhere";
|
|
6
|
+
export type QaAccountsErrorReason = "auth-required" | "admin-required" | "invalid-credentials" | "account-disabled" | "email-taken" | "invalid-email" | "invalid-display-name" | "invalid-profile" | "profile-disabled" | "invalid-starters" | "starters-disabled" | "invalid-role" | "weak-password" | "registration-disabled" | "rate-limited" | "session-owned-elsewhere";
|
|
7
7
|
export declare class QaAccountsError extends Error {
|
|
8
8
|
readonly reason: QaAccountsErrorReason;
|
|
9
9
|
constructor(reason: QaAccountsErrorReason, message: string);
|
|
@@ -7,6 +7,14 @@ export interface StoredProfile {
|
|
|
7
7
|
instructions?: string;
|
|
8
8
|
updatedAt?: string;
|
|
9
9
|
}
|
|
10
|
+
/** One account's starter buttons as they rest in the accounts file. */
|
|
11
|
+
export interface StoredStarters {
|
|
12
|
+
items?: {
|
|
13
|
+
label?: string;
|
|
14
|
+
prompt?: string;
|
|
15
|
+
}[];
|
|
16
|
+
hideDefaults?: boolean;
|
|
17
|
+
}
|
|
10
18
|
export interface StoredUser {
|
|
11
19
|
readonly id: string;
|
|
12
20
|
readonly email: string;
|
|
@@ -28,6 +36,8 @@ export interface StoredUser {
|
|
|
28
36
|
tokenVersion?: number;
|
|
29
37
|
/** Absent until the owner fills the profile form for the first time. */
|
|
30
38
|
profile?: StoredProfile;
|
|
39
|
+
/** Absent until the owner customizes the starter buttons. */
|
|
40
|
+
starters?: StoredStarters;
|
|
31
41
|
}
|
|
32
42
|
export interface AccountsFile {
|
|
33
43
|
readonly version: 1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { QaAccountIdentityField, QaAccountProfile, QaAccountProfileInput, QaAccountRole, QaAccountSession, QaAccountUserPublic, QaClaimResult, QaOwnershipEntry, QaWhoamiResult } from "../types.js";
|
|
1
|
+
import type { QaAccountIdentityField, QaAccountProfile, QaAccountProfileInput, QaAccountRole, QaAccountSession, QaAccountStartersInput, QaAccountUserPublic, QaClaimResult, QaOwnershipEntry, QaWhoamiResult } from "../types.js";
|
|
2
2
|
import type { StoredUser } from "./file.js";
|
|
3
3
|
export { QaAccountsError } from "./errors.js";
|
|
4
4
|
export type { QaAccountsErrorReason } from "./errors.js";
|
|
@@ -99,6 +99,14 @@ export declare class QaAccounts {
|
|
|
99
99
|
private editUser;
|
|
100
100
|
/** Grant or revoke the admin role. */
|
|
101
101
|
setUserRole(email: string, role: QaAccountRole): QaAccountUserPublic;
|
|
102
|
+
/**
|
|
103
|
+
* Replace an account's password, which is what a forgotten one needs. The
|
|
104
|
+
* token version bumps with it, so every token minted under the old password
|
|
105
|
+
* dies server-side: a reset is also the response to a leaked credential.
|
|
106
|
+
* Ownership, profile and the account id survive, so the user's chats are
|
|
107
|
+
* still theirs after signing in again.
|
|
108
|
+
*/
|
|
109
|
+
setPassword(email: string, password: string): QaAccountUserPublic;
|
|
102
110
|
/**
|
|
103
111
|
* Disable an account: future logins are refused and every live token is
|
|
104
112
|
* invalidated (the token version bumps). `enable` does not resurrect old
|
|
@@ -134,6 +142,12 @@ export declare class QaAccounts {
|
|
|
134
142
|
* first, so a browser can only ever edit the profile it is signed in as.
|
|
135
143
|
*/
|
|
136
144
|
updateOwnProfile(token: string, input: QaAccountProfileInput): QaAccountUserPublic;
|
|
145
|
+
/**
|
|
146
|
+
* Replace the token account's starter buttons. Same self-service shape as
|
|
147
|
+
* {@link updateOwnProfile}: the token is the only identity, and a rejected
|
|
148
|
+
* write leaves the stored record untouched.
|
|
149
|
+
*/
|
|
150
|
+
updateOwnStarters(token: string, input: QaAccountStartersInput): QaAccountUserPublic;
|
|
137
151
|
/**
|
|
138
152
|
* Validate one profile write and stamp it onto the account. Throws before
|
|
139
153
|
* anything is mutated, so a rejected write leaves the stored profile, and
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Agent } from "@deepseek-ai/dsh-agent";
|
|
2
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
3
|
+
import type { PluginLogger } from "@yadsh/dsh-plugin-log";
|
|
4
|
+
import type { QaSessionOwnership } from "./session-ownership.js";
|
|
5
|
+
import type { QaApprovalDecision, QaPendingApproval } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* The slice of the `tools/pre-execute` execution record this gate reads. The
|
|
8
|
+
* listener is owned by the plugin context, so it is unfiltered: it also wraps
|
|
9
|
+
* the calls of a delegated child, whose scope chain never reaches the chat's
|
|
10
|
+
* own agent context.
|
|
11
|
+
*/
|
|
12
|
+
export interface QaApprovalExecution {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly agent?: Agent;
|
|
15
|
+
readonly signal?: AbortSignal;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Interactive resolution of the tool policy `ask` decision.
|
|
19
|
+
*
|
|
20
|
+
* A composed gate — a content classifier, a hook rule — answers `ask` for a
|
|
21
|
+
* call it will not decide alone. On an attested QA agent that ask resolves
|
|
22
|
+
* against the deployment's pinned `approval=never` policy, so the model is told
|
|
23
|
+
* the user rejected a call the user never saw. This gate sits outside every
|
|
24
|
+
* other `tools/pre-execute` listener and hands the decision to the operator
|
|
25
|
+
* instead: the request is parked here, the QA view lists it over its own
|
|
26
|
+
* remote, and the answer becomes the decision the chain would have produced.
|
|
27
|
+
*
|
|
28
|
+
* `interaction.approvals: blocked` keeps the previous fail-closed behavior —
|
|
29
|
+
* the call is refused with the surface's own reason. Either way nothing is
|
|
30
|
+
* approved automatically, and the allow-list, the workspace fence and the
|
|
31
|
+
* read-only sandbox still run on the resolved call.
|
|
32
|
+
*
|
|
33
|
+
* Only sessions this deployment attested are touched. Any other session's ask
|
|
34
|
+
* is handed back to the chain untouched, so an operator instance that also
|
|
35
|
+
* serves ordinary chats keeps its own approval flow.
|
|
36
|
+
*/
|
|
37
|
+
export declare class QaApprovalGate {
|
|
38
|
+
private readonly ctx;
|
|
39
|
+
private readonly interactive;
|
|
40
|
+
private readonly ownership;
|
|
41
|
+
private readonly logger;
|
|
42
|
+
private readonly pending;
|
|
43
|
+
private readonly disposers;
|
|
44
|
+
constructor(ctx: Context, interactive: () => boolean, ownership: QaSessionOwnership, logger: PluginLogger);
|
|
45
|
+
/** Wrap every tool call; other gates compose inside this listener. */
|
|
46
|
+
install(): void;
|
|
47
|
+
/** Approvals of one chat, oldest first: what the QA view lists. */
|
|
48
|
+
list(sessionId: string): readonly QaPendingApproval[];
|
|
49
|
+
/** Apply the operator's answer; an unknown or foreign id is refused. */
|
|
50
|
+
answer(sessionId: string, requestId: string, decision: QaApprovalDecision): boolean;
|
|
51
|
+
/** Detach the listener and fail every parked request. Wired as an effect. */
|
|
52
|
+
dispose(): void;
|
|
53
|
+
private handle;
|
|
54
|
+
/**
|
|
55
|
+
* The chat a call belongs to, when this deployment attested it. A child of an
|
|
56
|
+
* attested chat answers under the chat the operator is looking at.
|
|
57
|
+
*/
|
|
58
|
+
private ownerOf;
|
|
59
|
+
/** Park one call until the operator answers, the turn is cancelled, or … */
|
|
60
|
+
private request;
|
|
61
|
+
private resolve;
|
|
62
|
+
/** Fail the requests one session's agent owns; a child never holds the chat. */
|
|
63
|
+
private settleOwner;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=approvals.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { QaAccountProfileInput, QaAccountUserPublic, QaOwnershipEntry, ResolvedQaSurfaceConfig } from "../types.js";
|
|
1
|
+
import type { QaAccountProfileInput, QaAccountStartersInput, QaAccountUserPublic, QaOwnershipEntry, ResolvedQaSurfaceConfig } from "../types.js";
|
|
2
2
|
import type { QaAccountsApi, StorageLike } from "./types.js";
|
|
3
3
|
export type QaAccountsSnapshot = {
|
|
4
4
|
readonly stage: "checking";
|
|
@@ -79,6 +79,12 @@ export declare class QaAccountsController {
|
|
|
79
79
|
* rather than through the gate's state machine.
|
|
80
80
|
*/
|
|
81
81
|
updateProfile(input: QaAccountProfileInput): Promise<string | null>;
|
|
82
|
+
/**
|
|
83
|
+
* Replace the signed-in user's own starter buttons, mirroring
|
|
84
|
+
* {@link updateProfile}: refusal copy on rejection, null once the snapshot
|
|
85
|
+
* carries the stored record, so the composer picks the new buttons up.
|
|
86
|
+
*/
|
|
87
|
+
updateStarters(input: QaAccountStartersInput): Promise<string | null>;
|
|
82
88
|
private authenticate;
|
|
83
89
|
/** Own the account, migrate the legacy index, then project authed. */
|
|
84
90
|
private enterSession;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ConnectionGenerationState } from "@deepseek-ai/dsh-client-connection/client";
|
|
2
2
|
import type { QaAttachmentDraft, QaSessionState, ResolvedQaSurfaceConfig } from "../types.js";
|
|
3
|
-
import type { QaConversation, QaCreateSession, QaFileUpload, QaSecureSession, QaSessions, QaSessionsApi, QaSourceApi, StorageLike } from "./types.js";
|
|
3
|
+
import type { QaApprovalApi, QaConversation, QaCreateSession, QaFileUpload, QaSecureSession, QaSessions, QaSessionsApi, QaQuestionApi, QaSourceApi, StorageLike } from "./types.js";
|
|
4
|
+
import type { QaApprovalDecision, QaQuestionAnswerItem } from "../types.js";
|
|
4
5
|
export interface QaAccountsFacade {
|
|
5
6
|
/** The account bearer token, or null while anonymous. */
|
|
6
7
|
readonly token: () => string | null;
|
|
@@ -26,6 +27,17 @@ export interface QaSessionControllerOptions {
|
|
|
26
27
|
readonly config: ResolvedQaSurfaceConfig;
|
|
27
28
|
readonly secureSession: QaSecureSession;
|
|
28
29
|
readonly sourceApi?: QaSourceApi;
|
|
30
|
+
/**
|
|
31
|
+
* The approval half of the Host namespace. Absent on a page built against a
|
|
32
|
+
* Host that does not answer approvals: the surface then never shows a
|
|
33
|
+
* request and keeps the composer as it is.
|
|
34
|
+
*/
|
|
35
|
+
readonly approvalApi?: QaApprovalApi;
|
|
36
|
+
/**
|
|
37
|
+
* The question half of the Host namespace. Absent on a page whose Host build
|
|
38
|
+
* does not answer questions: the surface then only renders what it can.
|
|
39
|
+
*/
|
|
40
|
+
readonly questionApi?: QaQuestionApi;
|
|
29
41
|
readonly storage?: StorageLike;
|
|
30
42
|
/**
|
|
31
43
|
* Browser file-upload service, resolved lazily: the page may not serve the
|
|
@@ -76,6 +88,8 @@ export declare class QaSessionController {
|
|
|
76
88
|
private materializing;
|
|
77
89
|
private operationError;
|
|
78
90
|
private admissionPending;
|
|
91
|
+
private pendingSubmission;
|
|
92
|
+
private pendingSequence;
|
|
79
93
|
private policyReady;
|
|
80
94
|
private drafting;
|
|
81
95
|
/** The chat session to return to when a subagent view closes. */
|
|
@@ -87,11 +101,19 @@ export declare class QaSessionController {
|
|
|
87
101
|
private chatsRevision;
|
|
88
102
|
/** Host-side provenance of the bound chat, merged into the projection. */
|
|
89
103
|
private readonly hostSources;
|
|
104
|
+
/** Host-side approvals of the bound chat waiting for the operator. */
|
|
105
|
+
private readonly hostApprovals;
|
|
106
|
+
/** Host-side question requests of the bound chat waiting for the operator. */
|
|
107
|
+
private readonly hostQuestions;
|
|
108
|
+
/** Set while a running turn is polled for parked requests. */
|
|
109
|
+
private pendingTimer;
|
|
90
110
|
constructor(options: QaSessionControllerOptions);
|
|
91
111
|
getSnapshot: () => QaSessionState;
|
|
92
112
|
subscribe: (listener: () => void) => (() => void);
|
|
93
113
|
ensureSession(): Promise<void>;
|
|
94
114
|
send(text: string, attachments?: readonly QaAttachmentDraft[]): Promise<boolean>;
|
|
115
|
+
/** Publish a browser-only copy before any network or Host admission awaits. */
|
|
116
|
+
private beginSubmission;
|
|
95
117
|
/**
|
|
96
118
|
* Ask for a fresh variant of the previous answer. The session has no
|
|
97
119
|
* truncation seam, so this sends the hidden regeneration instruction as an
|
|
@@ -172,6 +194,14 @@ export declare class QaSessionController {
|
|
|
172
194
|
* (first frame at once, further frames absorbed) lives in the publisher. */
|
|
173
195
|
private publishSessionUpdate;
|
|
174
196
|
private publish;
|
|
197
|
+
/**
|
|
198
|
+
* Display names of the known subagent sessions keyed by session id, for
|
|
199
|
+
* settlement notices to sign with. The durable catalogs carry each
|
|
200
|
+
* delegation's description verbatim; a child the host listed without a
|
|
201
|
+
* catalog falls back to its own list title. Tolerates a host bundle older
|
|
202
|
+
* than either field: an absent snapshot piece just contributes no names.
|
|
203
|
+
*/
|
|
204
|
+
private subagentNames;
|
|
175
205
|
private fail;
|
|
176
206
|
/**
|
|
177
207
|
* Attest the currently bound session. `ok` carries the session id the proof
|
|
@@ -181,5 +211,24 @@ export declare class QaSessionController {
|
|
|
181
211
|
*/
|
|
182
212
|
private attestPolicy;
|
|
183
213
|
private emit;
|
|
214
|
+
/**
|
|
215
|
+
* Answer a request the Host parked for this chat. The Host re-checks the
|
|
216
|
+
* request against the chat, so an answer that lost its race is a no-op; the
|
|
217
|
+
* refresh that follows is what the surface renders.
|
|
218
|
+
*/
|
|
219
|
+
answerApproval(requestId: string, decision: QaApprovalDecision): Promise<void>;
|
|
220
|
+
/** Send the operator's answers to one parked question request. */
|
|
221
|
+
answerQuestion(requestId: string, answers: readonly QaQuestionAnswerItem[]): Promise<void>;
|
|
222
|
+
/** Close a parked question request without answering it. */
|
|
223
|
+
cancelQuestion(requestId: string): Promise<void>;
|
|
224
|
+
/**
|
|
225
|
+
* Poll the Host for parked requests while a turn runs. A request only exists
|
|
226
|
+
* inside an open turn, and it is Host state: polling is how the page learns
|
|
227
|
+
* about it, and how it reappears after a reload. One timer serves both seams,
|
|
228
|
+
* and each is polled only where the deployment answers it.
|
|
229
|
+
*/
|
|
230
|
+
private syncPendingPolling;
|
|
231
|
+
private stopPendingPolling;
|
|
232
|
+
private hostToken;
|
|
184
233
|
}
|
|
185
234
|
//# sourceMappingURL=QaSessionController.d.ts.map
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { ConnectionGenerationState } from "@deepseek-ai/dsh-client-connection/client";
|
|
2
|
-
import type { InjectFace, PropsRuntime } from "@deepseek-ai/dsh-client-ui-slots";
|
|
2
|
+
import type { InjectFace, PropsRenderSlots, PropsRuntime } from "@deepseek-ai/dsh-client-ui-slots";
|
|
3
3
|
import type { QaConfigController } from "./QaConfigController.js";
|
|
4
4
|
import type { QaRouteController } from "./QaRouteController.js";
|
|
5
5
|
import type { QaAccountsController } from "./QaAccountsController.js";
|
|
6
|
-
import type { QaConversation, QaCreateSession, QaFileUpload, QaSecureSession, QaSessions, QaSessionsApi, QaSourceApi } from "./types.js";
|
|
6
|
+
import type { QaApprovalApi, QaConversation, QaCreateSession, QaFileUpload, QaSecureSession, QaSessions, QaSessionsApi, QaQuestionApi, QaSkillApi, QaSourceApi } from "./types.js";
|
|
7
|
+
import type { QaSurfacePanelRegistry } from "./panels/registry.js";
|
|
8
|
+
import type { QaUserSettingsSections } from "./settings-extensions/index.js";
|
|
7
9
|
export interface QaSurfaceFace {
|
|
8
10
|
readonly route: QaRouteController;
|
|
9
11
|
readonly config: QaConfigController;
|
|
@@ -14,6 +16,18 @@ export interface QaSurfaceFace {
|
|
|
14
16
|
readonly secureSession: QaSecureSession;
|
|
15
17
|
readonly createSession: QaCreateSession;
|
|
16
18
|
readonly sourceApi: QaSourceApi;
|
|
19
|
+
/**
|
|
20
|
+
* Personal-skill half of the plugin's namespace. Absent on a page whose Host
|
|
21
|
+
* build does not answer it; the settings dialog then has no skills section.
|
|
22
|
+
*/
|
|
23
|
+
readonly skillApi?: QaSkillApi;
|
|
24
|
+
/**
|
|
25
|
+
* Approval half of the plugin's namespace. Absent on a page whose Host build
|
|
26
|
+
* does not answer it; the surface then only blocks sends it cannot attest.
|
|
27
|
+
*/
|
|
28
|
+
readonly approvalApi?: QaApprovalApi;
|
|
29
|
+
/** Question half of the plugin's namespace, when the Host answers it. */
|
|
30
|
+
readonly questionApi?: QaQuestionApi;
|
|
17
31
|
/**
|
|
18
32
|
* Browser file-upload service, when the page serves the upload plugin.
|
|
19
33
|
* Resolved per send so a page that loads it later still gets file support.
|
|
@@ -21,8 +35,11 @@ export interface QaSurfaceFace {
|
|
|
21
35
|
readonly fileUpload?: () => QaFileUpload | undefined;
|
|
22
36
|
/** Present when the deployment mounts the QA account gate. */
|
|
23
37
|
readonly accounts?: QaAccountsController;
|
|
38
|
+
/** Global client-only panel metadata and presentation navigation. */
|
|
39
|
+
readonly panels: QaSurfacePanelRegistry;
|
|
40
|
+
/** First-class settings pages registered by additive QA plugins. */
|
|
41
|
+
readonly settingsSections: QaUserSettingsSections;
|
|
24
42
|
}
|
|
25
|
-
type QaSurfaceProps = PropsRuntime<"shell.overlay"> & InjectFace<QaSurfaceFace>;
|
|
43
|
+
export type QaSurfaceProps = PropsRuntime<"shell.overlay"> & PropsRenderSlots<"qa.surface.panel"> & InjectFace<QaSurfaceFace>;
|
|
26
44
|
export declare function QaSurface(props: QaSurfaceProps): import("react/jsx-runtime").JSX.Element | null;
|
|
27
|
-
export {};
|
|
28
45
|
//# sourceMappingURL=QaSurface.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type QaSurfaceProps } from "./QaSurface.js";
|
|
3
|
+
/**
|
|
4
|
+
* The registered `shell.overlay` entry: the surface behind an error boundary
|
|
5
|
+
* the host never sees past. The host's per-slot isolation retires a crashed
|
|
6
|
+
* entry, which for this slot means the QA overlay disappears and the operator
|
|
7
|
+
* shell beneath it becomes reachable — a render crash must never be allowed
|
|
8
|
+
* to make that trade. The boundary keeps the overlay mounted and swaps the
|
|
9
|
+
* surface for a fullscreen failure card; the reload button is the recovery,
|
|
10
|
+
* because after a render crash the component state below (controllers,
|
|
11
|
+
* stores) is untrustworthy.
|
|
12
|
+
*
|
|
13
|
+
* The body mask (`data-dsh-qa-surface`) is owned here, above the boundary:
|
|
14
|
+
* React unmounts a crashed subtree, and the stylesheet that hides the host
|
|
15
|
+
* frame's own columns hangs off that attribute, so a crash unmounting the
|
|
16
|
+
* surface must not lift the mask with it. Deleting the overlay element in
|
|
17
|
+
* the browser then reveals a blank page, not the shell.
|
|
18
|
+
*
|
|
19
|
+
* The wrapper is a function component only because the slot contract types
|
|
20
|
+
* entries as call signatures; its render is trivial and cannot itself throw
|
|
21
|
+
* into the host boundary. It also covers a face that failed to assemble: the
|
|
22
|
+
* slot inject hands over an empty face in that case, a missing route reads
|
|
23
|
+
* as permanently active, and the surface's first hook read throws into the
|
|
24
|
+
* boundary below.
|
|
25
|
+
*/
|
|
26
|
+
export declare function QaSurfaceGuard(props: QaSurfaceProps): ReactNode;
|
|
27
|
+
//# sourceMappingURL=QaSurfaceGuard.d.ts.map
|
|
@@ -13,5 +13,12 @@ export declare function projectTranscript(snapshot: ConversationSnapshot | undef
|
|
|
13
13
|
readonly running?: boolean;
|
|
14
14
|
readonly showToolActivity?: boolean;
|
|
15
15
|
readonly showReasoning?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* The chat's subagent display names keyed by session id, read from the
|
|
18
|
+
* host list snapshot; settlement notices prefer them over the raw ids.
|
|
19
|
+
*/
|
|
20
|
+
readonly subagentNames?: Readonly<Record<string, string>>;
|
|
21
|
+
/** Sign settlement titles with deterministic codenames. */
|
|
22
|
+
readonly subagentCodenames?: boolean;
|
|
16
23
|
}): readonly QaMessage[];
|
|
17
24
|
//# sourceMappingURL=QaTranscriptAdapter.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { QaApprovalDecision, QaPendingApproval } from "../types.js";
|
|
2
|
+
import type { QaApprovalApi } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* The operator's side of a parked tool call.
|
|
5
|
+
*
|
|
6
|
+
* A composed gate's `ask` is answered on the Host, so the waiting request is
|
|
7
|
+
* Host state: it survives a page reload, and the surface learns about it by
|
|
8
|
+
* asking rather than by receiving an event. The bridge holds the last list it
|
|
9
|
+
* saw, refreshes it while a turn runs, and forwards an answer.
|
|
10
|
+
*/
|
|
11
|
+
export declare class QaHostApprovalBridge {
|
|
12
|
+
private readonly approvalApi;
|
|
13
|
+
private approvals;
|
|
14
|
+
private signature;
|
|
15
|
+
private refreshing;
|
|
16
|
+
private answering;
|
|
17
|
+
/** Bumped on reset so a stale in-flight response never lands. */
|
|
18
|
+
private generation;
|
|
19
|
+
constructor(approvalApi: QaApprovalApi | undefined);
|
|
20
|
+
/** Leave the chat: a chat switch drops the previous chat's requests. */
|
|
21
|
+
reset(): void;
|
|
22
|
+
/** The last list this bridge saw; empty when the deployment blocks them. */
|
|
23
|
+
list(): readonly QaPendingApproval[];
|
|
24
|
+
/** Whether this page can ask the Host about approvals at all. */
|
|
25
|
+
get available(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Re-read the chat's pending requests; a changed list republishes through the
|
|
28
|
+
* callback. Overlapping calls coalesce, and a response that outlives its chat
|
|
29
|
+
* is dropped.
|
|
30
|
+
*/
|
|
31
|
+
refresh(sessionId: string, token: string, onChanged: () => void): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Answer one request and re-read the list. A refusal is not an error: the
|
|
34
|
+
* request was already settled (the turn was stopped, the call went away), so
|
|
35
|
+
* the refresh — not the answer — is what the surface shows.
|
|
36
|
+
*/
|
|
37
|
+
answer(sessionId: string, token: string, requestId: string, decision: QaApprovalDecision): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=approvals.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { QaApprovalDecision, QaPendingApproval } from "../../types.js";
|
|
2
|
+
export interface QaApprovalProps {
|
|
3
|
+
readonly approvals: readonly QaPendingApproval[];
|
|
4
|
+
readonly onAnswer: (requestId: string, decision: QaApprovalDecision) => Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The tool calls a composed gate parked for a person. One row per request, the
|
|
8
|
+
* gate's own reason on top, and the two answers stock DSH offers: refuse, or
|
|
9
|
+
* let this one call through. Nothing here decides on its own — an unanswered
|
|
10
|
+
* request simply keeps the turn waiting.
|
|
11
|
+
*/
|
|
12
|
+
export declare const QaApproval: import("react").MemoExoticComponent<(props: QaApprovalProps) => import("react/jsx-runtime").JSX.Element | null>;
|
|
13
|
+
//# sourceMappingURL=QaApproval.d.ts.map
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { QaAttachmentDraft } from "../../types.js";
|
|
2
2
|
import { type QaAttachmentLimits } from "../attachments.js";
|
|
3
|
+
import type { QaQuickQuestion } from "../types.js";
|
|
3
4
|
export interface QaComposerProps {
|
|
4
5
|
readonly placeholder: string;
|
|
5
|
-
|
|
6
|
+
/** Shown while the chat is empty; the label reads, the prompt sends. */
|
|
7
|
+
readonly quickQuestions?: readonly QaQuickQuestion[];
|
|
6
8
|
readonly canSend: boolean;
|
|
7
9
|
readonly canStop: boolean;
|
|
8
10
|
readonly running: boolean;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* rendering — the badge counts move with the session state anyway, so
|
|
5
5
|
* reference guards would never pay off here.
|
|
6
6
|
*/
|
|
7
|
+
import type { ReactNode } from "react";
|
|
7
8
|
/**
|
|
8
9
|
* The subagent indication for headerless deployments: a slim status line
|
|
9
10
|
* above the transcript with the way back to the parent chat. With a header,
|
|
@@ -33,9 +34,10 @@ export interface QaHeaderProps {
|
|
|
33
34
|
readonly fileCount: number;
|
|
34
35
|
readonly filesOpen: boolean;
|
|
35
36
|
readonly onOpenFiles: () => void;
|
|
37
|
+
readonly panelLauncher?: ReactNode;
|
|
36
38
|
readonly showReset: boolean;
|
|
37
39
|
readonly resetDisabled: boolean;
|
|
38
40
|
readonly onReset: () => void;
|
|
39
41
|
}
|
|
40
|
-
export declare function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, agentPreset, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesOpen, onOpenFiles, showReset, resetDisabled, onReset, }: QaHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export declare function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, agentPreset, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesOpen, onOpenFiles, panelLauncher, showReset, resetDisabled, onReset, }: QaHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
41
43
|
//# sourceMappingURL=QaHeader.d.ts.map
|
|
@@ -9,12 +9,13 @@ export interface QaModalProps {
|
|
|
9
9
|
readonly children: ReactNode;
|
|
10
10
|
/** Actions pinned under the body; omit for a body-only dialog. */
|
|
11
11
|
readonly footer?: ReactNode;
|
|
12
|
+
readonly wide?: boolean;
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Panel size: `wide` fits prose that must not wrap mid-sentence, and
|
|
15
|
+
* `settings` the sectioned user-settings dialog, which needs both a
|
|
16
|
+
* comfortable height and a two-column body.
|
|
16
17
|
*/
|
|
17
|
-
readonly
|
|
18
|
+
readonly size?: "default" | "wide" | "settings";
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
21
|
* The shared QA dialog shell: backdrop, panel, head with the close control,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { QaPendingQuestion, QaQuestionAnswerItem } from "../../types.js";
|
|
2
|
+
export interface QaQuestionsProps {
|
|
3
|
+
readonly questions: readonly QaPendingQuestion[];
|
|
4
|
+
readonly onAnswer: (requestId: string, answers: readonly QaQuestionAnswerItem[]) => Promise<void>;
|
|
5
|
+
readonly onCancel: (requestId: string) => Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The questions a running turn waits on. Answers are the operator's own: the
|
|
9
|
+
* form refuses to submit a question left blank, and a question explicitly
|
|
10
|
+
* skipped is reported as skipped rather than answered by guesswork.
|
|
11
|
+
*/
|
|
12
|
+
export declare const QaQuestions: import("react").MemoExoticComponent<(props: QaQuestionsProps) => import("react/jsx-runtime").JSX.Element | null>;
|
|
13
|
+
//# sourceMappingURL=QaQuestions.d.ts.map
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { SessionSummary } from "@deepseek-ai/dsh-api-session-controller/client";
|
|
2
|
-
import type { QaAccountIdentityField, QaAccountProfile, QaAccountProfileInput } from "../../types.js";
|
|
3
2
|
/** One renderable row of the chat-history sidebar. */
|
|
4
3
|
export interface QaChatRow {
|
|
5
4
|
readonly id: string;
|
|
@@ -58,17 +57,15 @@ export interface QaSidebarProps {
|
|
|
58
57
|
readonly role: string;
|
|
59
58
|
readonly onLogout: () => void;
|
|
60
59
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
60
|
+
* Entry point of the user-settings dialog: the name to show and the way to
|
|
61
|
+
* open it. Omitted when the deployment gives the account nothing to
|
|
62
|
+
* configure, which also leaves the footer name as plain text. Memoized by
|
|
63
|
+
* the caller: this object is compared by reference.
|
|
64
64
|
*/
|
|
65
|
-
readonly
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
readonly
|
|
69
|
-
readonly instructionsMaxLength: number;
|
|
70
|
-
/** Persist edited fields; resolves to refusal copy, or null. */
|
|
71
|
-
readonly onSave: (input: QaAccountProfileInput) => Promise<string | null>;
|
|
65
|
+
readonly settings?: {
|
|
66
|
+
/** Full name the user wrote, or the email when they wrote none. */
|
|
67
|
+
readonly label: string;
|
|
68
|
+
readonly onOpen: () => void;
|
|
72
69
|
};
|
|
73
70
|
};
|
|
74
71
|
}
|
|
@@ -6,6 +6,19 @@ import { type RefObject } from "react";
|
|
|
6
6
|
* lets the transcript fill it.
|
|
7
7
|
*/
|
|
8
8
|
export declare const QA_CONTENT_EDGE_BUDGET = 176;
|
|
9
|
+
/**
|
|
10
|
+
* Band between the text column edge and the handle strip: the transcript keeps
|
|
11
|
+
* 16px of side padding and the strip's inner edge sits 24px outside the content
|
|
12
|
+
* box. A bled block that grows past this band slides under the 40px drag
|
|
13
|
+
* target, so the stylesheet holds the bleed inside it.
|
|
14
|
+
*/
|
|
15
|
+
export declare const QA_HANDLE_FREE_BAND = 40;
|
|
16
|
+
/**
|
|
17
|
+
* Ceiling for the assistant bleed (fenced code blocks) per side. Eight pixels
|
|
18
|
+
* short of the free band, so both the strip and its glow stay on empty gutter
|
|
19
|
+
* at every width; the stylesheet caps it once more by the live side gutter.
|
|
20
|
+
*/
|
|
21
|
+
export declare const QA_BLEED_MAX_WIDTH: number;
|
|
9
22
|
export declare function readQaContentWidth(storage: Pick<Storage, "getItem">, key: string): number | null;
|
|
10
23
|
export declare function writeQaContentWidth(storage: Pick<Storage, "setItem">, key: string, width: number): void;
|
|
11
24
|
/**
|
|
@@ -13,4 +13,5 @@ export { QaAccountsController } from "./QaAccountsController.js";
|
|
|
13
13
|
export { QaRouteController, matchesQaRoute } from "./QaRouteController.js";
|
|
14
14
|
export { QaSessionController } from "./QaSessionController.js";
|
|
15
15
|
export { projectTranscript } from "./QaTranscriptAdapter.js";
|
|
16
|
+
export type { QaSurfacePanelDefinition, QaSurfacePanelOpenOptions, QaSurfacePanelOwnerProps, QaSurfacePanelPresentation, QaSurfacePanels, } from "./panels/contract.js";
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PropsRenderSlots } from "@deepseek-ai/dsh-client-ui-slots";
|
|
2
|
+
import type { QaSurfacePanelRegistry } from "./registry.js";
|
|
3
|
+
export declare const QA_PANEL_DEFAULT_RATIO = 0.42;
|
|
4
|
+
export declare const QA_PANEL_MIN_PX = 320;
|
|
5
|
+
export declare const QA_CHAT_MIN_PX = 400;
|
|
6
|
+
export declare const QA_PANEL_MAX_RATIO = 0.7;
|
|
7
|
+
export declare const QA_PANEL_MOBILE_BREAKPOINT_PX = 768;
|
|
8
|
+
type RenderPanelSlot = PropsRenderSlots<"qa.surface.panel">["renderSlot"];
|
|
9
|
+
export declare function clampQaPanelWidth(width: number, available: number): number;
|
|
10
|
+
export interface QaPanelHostProps {
|
|
11
|
+
readonly panels: QaSurfacePanelRegistry;
|
|
12
|
+
readonly sessionId: string | null;
|
|
13
|
+
readonly qaToken?: string;
|
|
14
|
+
readonly renderSlot: RenderPanelSlot;
|
|
15
|
+
}
|
|
16
|
+
export declare function QaPanelHost({ panels, sessionId, qaToken, renderSlot, }: QaPanelHostProps): import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=PanelHost.d.ts.map
|