@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
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export declare const QA_SURFACE_PANEL_SLOT: "qa.surface.panel";
|
|
2
|
+
export type QaSurfacePanelOpenReason = "user" | "extension" | "activity";
|
|
3
|
+
export type QaSurfacePanelCloseReason = "user" | "extension";
|
|
4
|
+
export type QaSurfacePanelPresentation = "side" | "fullscreen";
|
|
5
|
+
export interface QaSurfacePanelDefinition {
|
|
6
|
+
/** Globally unique implementation identity. Package names are preferred. */
|
|
7
|
+
readonly id: string;
|
|
8
|
+
/** Stable logical identity used by navigation. */
|
|
9
|
+
readonly kind: string;
|
|
10
|
+
/** User-facing, lazily localized title. */
|
|
11
|
+
readonly title: () => string;
|
|
12
|
+
readonly description?: () => string;
|
|
13
|
+
/** Presentation token interpreted by QA Surface, never a React value. */
|
|
14
|
+
readonly icon?: string;
|
|
15
|
+
readonly order?: number;
|
|
16
|
+
/** Defaults to true. Programmatic navigation remains available when false. */
|
|
17
|
+
readonly userVisible?: boolean;
|
|
18
|
+
/** Defaults to false. Hidden retained bodies stay mounted but inert. */
|
|
19
|
+
readonly keepMounted?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface QaSurfacePanelOpenOptions {
|
|
22
|
+
readonly focus?: boolean;
|
|
23
|
+
readonly params?: unknown;
|
|
24
|
+
readonly reason?: QaSurfacePanelOpenReason;
|
|
25
|
+
}
|
|
26
|
+
export interface QaSurfacePanelOwnerProps {
|
|
27
|
+
readonly panelId: string;
|
|
28
|
+
readonly panelKind: string;
|
|
29
|
+
readonly sessionId: string | null;
|
|
30
|
+
/**
|
|
31
|
+
* Current QA bearer credential for Host remotes that authorize access to
|
|
32
|
+
* `sessionId`. Panel plugins must not persist, log, or place it in URLs.
|
|
33
|
+
* Empty when QA accounts are disabled.
|
|
34
|
+
*/
|
|
35
|
+
readonly qaToken: string;
|
|
36
|
+
readonly visible: boolean;
|
|
37
|
+
readonly presentation: QaSurfacePanelPresentation;
|
|
38
|
+
readonly params: unknown;
|
|
39
|
+
readonly actions: {
|
|
40
|
+
close(): void;
|
|
41
|
+
reveal(options?: {
|
|
42
|
+
readonly focus?: boolean;
|
|
43
|
+
}): void;
|
|
44
|
+
};
|
|
45
|
+
/** Aborts with registration/body lifetime, never merely because it is hidden. */
|
|
46
|
+
readonly signal: AbortSignal;
|
|
47
|
+
}
|
|
48
|
+
export interface QaSurfacePanelContext {
|
|
49
|
+
readonly sessionId: string | null;
|
|
50
|
+
readonly qaToken: string;
|
|
51
|
+
}
|
|
52
|
+
export interface QaSurfacePanels {
|
|
53
|
+
register(definition: QaSurfacePanelDefinition): () => void;
|
|
54
|
+
open(kind: string, options?: QaSurfacePanelOpenOptions): boolean;
|
|
55
|
+
close(options?: {
|
|
56
|
+
readonly reason?: QaSurfacePanelCloseReason;
|
|
57
|
+
}): void;
|
|
58
|
+
toggle(kind: string): boolean;
|
|
59
|
+
isRegistered(kind: string): boolean;
|
|
60
|
+
getActiveKind(): string | null;
|
|
61
|
+
/** Current QA session/credential pair for activity-driven extensions. */
|
|
62
|
+
getContext(): QaSurfacePanelContext;
|
|
63
|
+
list(): readonly QaSurfacePanelDefinition[];
|
|
64
|
+
}
|
|
65
|
+
declare module "@deepseek-ai/cordis" {
|
|
66
|
+
interface Context {
|
|
67
|
+
qaSurfacePanels: QaSurfacePanels;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
declare module "@deepseek-ai/dsh-client-ui-slots" {
|
|
71
|
+
interface SlotMap {
|
|
72
|
+
/**
|
|
73
|
+
* QA Surface owns this keyed seat. Panel plugins register their body under
|
|
74
|
+
* the exact `QaSurfacePanelDefinition.id` used by the metadata service.
|
|
75
|
+
*/
|
|
76
|
+
"qa.surface.panel": {
|
|
77
|
+
kind: "keyed";
|
|
78
|
+
scope: "root";
|
|
79
|
+
owner: QaSurfacePanelOwnerProps;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { QA_SURFACE_PANEL_SLOT } from "./contract.js";
|
|
2
|
+
export type { QaSurfacePanelContext, QaSurfacePanelCloseReason, QaSurfacePanelDefinition, QaSurfacePanelOpenOptions, QaSurfacePanelOpenReason, QaSurfacePanelOwnerProps, QaSurfacePanelPresentation, QaSurfacePanels, } from "./contract.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { QaSurfacePanelDefinition, QaSurfacePanelContext, QaSurfacePanelOpenOptions, QaSurfacePanels } from "./contract.js";
|
|
2
|
+
export interface QaSurfacePanelsSnapshot {
|
|
3
|
+
readonly definitions: readonly QaSurfacePanelDefinition[];
|
|
4
|
+
readonly activeKind: string | null;
|
|
5
|
+
readonly params: unknown;
|
|
6
|
+
readonly focusRequest: number;
|
|
7
|
+
readonly focus: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Client-only metadata/navigation registry. It never stores React components. */
|
|
10
|
+
export declare class QaSurfacePanelRegistry implements QaSurfacePanels {
|
|
11
|
+
private readonly byId;
|
|
12
|
+
private readonly byKind;
|
|
13
|
+
private readonly listeners;
|
|
14
|
+
private readonly paramsByKind;
|
|
15
|
+
private activeKind;
|
|
16
|
+
private focusRequest;
|
|
17
|
+
private focus;
|
|
18
|
+
private snapshot;
|
|
19
|
+
private context;
|
|
20
|
+
private disposed;
|
|
21
|
+
readonly subscribe: (listener: () => void) => (() => void);
|
|
22
|
+
readonly getSnapshot: () => QaSurfacePanelsSnapshot;
|
|
23
|
+
register(definition: QaSurfacePanelDefinition): () => void;
|
|
24
|
+
open(kind: string, options?: QaSurfacePanelOpenOptions): boolean;
|
|
25
|
+
close(_options?: {
|
|
26
|
+
readonly reason?: "user" | "extension";
|
|
27
|
+
}): void;
|
|
28
|
+
toggle(kind: string): boolean;
|
|
29
|
+
isRegistered(kind: string): boolean;
|
|
30
|
+
getActiveKind(): string | null;
|
|
31
|
+
getContext(): QaSurfacePanelContext;
|
|
32
|
+
/** QA Surface-owned lifecycle update; extensions consume it read-only. */
|
|
33
|
+
setContext(context: QaSurfacePanelContext): void;
|
|
34
|
+
list(): readonly QaSurfacePanelDefinition[];
|
|
35
|
+
signal(kind: string): AbortSignal | undefined;
|
|
36
|
+
params(kind: string): unknown;
|
|
37
|
+
dispose(): void;
|
|
38
|
+
private publish;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SessionFace } from "@deepseek-ai/dsh-api-session-controller/client";
|
|
2
2
|
import type { ConversationSnapshot } from "@deepseek-ai/dsh-client-ui-conversation/client";
|
|
3
|
-
import type { QaSessionState, QaSubagentView, QaTurnSources, ResolvedQaSurfaceConfig } from "../types.js";
|
|
3
|
+
import type { QaPendingApproval, QaPendingQuestion, QaSessionState, QaSubagentView, QaTurnSources, ResolvedQaSurfaceConfig } from "../types.js";
|
|
4
4
|
/** Everything the bound-chat projection reads; the computation is pure. */
|
|
5
5
|
export interface QaBoundProjectionInput {
|
|
6
6
|
readonly connected: boolean;
|
|
@@ -9,12 +9,24 @@ export interface QaBoundProjectionInput {
|
|
|
9
9
|
readonly conversationSnapshot: ConversationSnapshot | undefined;
|
|
10
10
|
/** Turn bundles with the Host provenance already merged in (Host wins). */
|
|
11
11
|
readonly sourceBundles: readonly QaTurnSources[];
|
|
12
|
+
/**
|
|
13
|
+
* Tool calls and questions the Host parked for the operator. They are
|
|
14
|
+
* host-side state, not part of the session snapshot, so the controller polls
|
|
15
|
+
* them separately.
|
|
16
|
+
*/
|
|
17
|
+
readonly approvals: readonly QaPendingApproval[];
|
|
18
|
+
readonly questions: readonly QaPendingQuestion[];
|
|
12
19
|
readonly operationError: string | null;
|
|
13
20
|
readonly policyReady: boolean;
|
|
14
21
|
readonly admissionPending: boolean;
|
|
15
22
|
readonly chatsRevision: number;
|
|
16
23
|
readonly viewingSubagent: QaSubagentView | null;
|
|
17
24
|
readonly config: ResolvedQaSurfaceConfig;
|
|
25
|
+
/**
|
|
26
|
+
* The chat's subagent display names keyed by session id, read from the
|
|
27
|
+
* host list snapshot; settlement notices prefer them over the raw ids.
|
|
28
|
+
*/
|
|
29
|
+
readonly subagentNames?: Readonly<Record<string, string>>;
|
|
18
30
|
/**
|
|
19
31
|
* The chat owner's display name for author labels; present only when an
|
|
20
32
|
* admin reads a foreign chat (chat-level, not per-message).
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { QaPendingQuestion, QaQuestionAnswerItem } from "../types.js";
|
|
2
|
+
import type { QaQuestionApi } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* The operator's side of a parked `ask_user_question` call.
|
|
5
|
+
*
|
|
6
|
+
* Like a parked approval, the request lives on the Host: it survives a reload,
|
|
7
|
+
* and the surface learns about it by asking while a turn runs. Unlike an
|
|
8
|
+
* approval, an answer is a whole form — every question of the request, with the
|
|
9
|
+
* operator's selections and free text — so the bridge forwards the form and
|
|
10
|
+
* re-reads the list afterwards.
|
|
11
|
+
*/
|
|
12
|
+
export declare class QaHostQuestionBridge {
|
|
13
|
+
private readonly questionApi;
|
|
14
|
+
private questions;
|
|
15
|
+
private signature;
|
|
16
|
+
private refreshing;
|
|
17
|
+
private answering;
|
|
18
|
+
/** Bumped on reset so a stale in-flight response never lands. */
|
|
19
|
+
private generation;
|
|
20
|
+
constructor(questionApi: QaQuestionApi | undefined);
|
|
21
|
+
/** Leave the chat: a chat switch drops the previous chat's requests. */
|
|
22
|
+
reset(): void;
|
|
23
|
+
/** The last list this bridge saw; empty when the deployment refuses them. */
|
|
24
|
+
list(): readonly QaPendingQuestion[];
|
|
25
|
+
/** Whether this page can ask the Host about questions at all. */
|
|
26
|
+
get available(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Re-read the chat's pending questions; a changed list republishes through
|
|
29
|
+
* the callback. Overlapping calls coalesce, and a response that outlives its
|
|
30
|
+
* chat is dropped.
|
|
31
|
+
*/
|
|
32
|
+
refresh(sessionId: string, token: string, onChanged: () => void): Promise<void>;
|
|
33
|
+
/** Send the operator's answers to one request and re-read the list. */
|
|
34
|
+
answer(sessionId: string, token: string, requestId: string, answers: readonly QaQuestionAnswerItem[]): Promise<void>;
|
|
35
|
+
/** Close one request without answering it. */
|
|
36
|
+
cancel(sessionId: string, token: string, requestId: string): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Run one write against a request, then re-read the list it belonged to. A
|
|
39
|
+
* refusal is not an error: the request was already settled (the turn was
|
|
40
|
+
* stopped, the call went away), so the refresh — not the write — is what the
|
|
41
|
+
* surface shows.
|
|
42
|
+
*/
|
|
43
|
+
private settle;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=questions.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documents: the document pipeline's deployment knobs.
|
|
3
|
+
*
|
|
4
|
+
* Everything here is optional — the defaults are usable as they are — but two
|
|
5
|
+
* of them decide whether the four document tools work at all in a given
|
|
6
|
+
* deployment: the Docling endpoint and the executables the renderer needs.
|
|
7
|
+
* The section therefore shows the effective values the Host resolved, not only
|
|
8
|
+
* what this browser has written.
|
|
9
|
+
*/
|
|
10
|
+
import { type ConfigProps } from "./common.js";
|
|
11
|
+
/** Document creation, conversion and extraction. */
|
|
12
|
+
export declare function DocumentsSection(props: ConfigProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -15,6 +15,7 @@ export { AccessSection } from "./sections/access.js";
|
|
|
15
15
|
export { AccountsSection } from "./sections/accounts.js";
|
|
16
16
|
export { AttachmentsSection } from "./sections/attachments.js";
|
|
17
17
|
export { BrandingSection } from "./sections/branding.js";
|
|
18
|
+
export { DocumentsSection } from "./sections/documents.js";
|
|
18
19
|
export { EmbeddingSection } from "./sections/embedding.js";
|
|
19
20
|
export { InterfaceSection } from "./sections/interface.js";
|
|
20
21
|
export { LockdownSection } from "./sections/lockdown.js";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { ComponentType } from "react";
|
|
3
|
+
/** Trusted browser identity supplied by QA Surface to a settings extension. */
|
|
4
|
+
export interface QaUserSettingsSectionProps {
|
|
5
|
+
/** Current QA account token. It is used only as transport authentication. */
|
|
6
|
+
readonly token: string;
|
|
7
|
+
}
|
|
8
|
+
/** One first-class page in the signed-in user's QA settings dialog. */
|
|
9
|
+
export interface QaUserSettingsSectionRegistration {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly title: string;
|
|
12
|
+
readonly order?: number;
|
|
13
|
+
readonly component: ComponentType<QaUserSettingsSectionProps>;
|
|
14
|
+
}
|
|
15
|
+
export interface QaUserSettingsSectionsSnapshot {
|
|
16
|
+
readonly sections: readonly QaUserSettingsSectionRegistration[];
|
|
17
|
+
readonly revision: number;
|
|
18
|
+
}
|
|
19
|
+
/** Client-side registry exposed by QA Surface to additive plugins. */
|
|
20
|
+
export interface QaUserSettingsSections {
|
|
21
|
+
readonly subscribe: (listener: () => void) => () => void;
|
|
22
|
+
readonly getSnapshot: () => QaUserSettingsSectionsSnapshot;
|
|
23
|
+
register(section: QaUserSettingsSectionRegistration): () => void;
|
|
24
|
+
}
|
|
25
|
+
declare module "@deepseek-ai/cordis" {
|
|
26
|
+
interface Context {
|
|
27
|
+
qaUserSettingsSections: QaUserSettingsSections;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Structural face used by consumers that do not otherwise depend on Cordis. */
|
|
31
|
+
export type QaUserSettingsSectionsContext = Pick<Context, "qaUserSettingsSections">;
|
|
32
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { QaUserSettingsSectionProps, QaUserSettingsSectionRegistration, QaUserSettingsSections, QaUserSettingsSectionsContext, QaUserSettingsSectionsSnapshot, } from "./contract.js";
|
|
2
|
+
export { QaUserSettingsSectionRegistry } from "./registry.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { QaUserSettingsSectionRegistration, QaUserSettingsSections, QaUserSettingsSectionsSnapshot } from "./contract.js";
|
|
2
|
+
/** Deterministic, observable registry backing the settings extension service. */
|
|
3
|
+
export declare class QaUserSettingsSectionRegistry implements QaUserSettingsSections {
|
|
4
|
+
private readonly entries;
|
|
5
|
+
private readonly listeners;
|
|
6
|
+
private revision;
|
|
7
|
+
private disposed;
|
|
8
|
+
private snapshot;
|
|
9
|
+
readonly subscribe: (listener: () => void) => (() => void);
|
|
10
|
+
readonly getSnapshot: () => QaUserSettingsSectionsSnapshot;
|
|
11
|
+
register(section: QaUserSettingsSectionRegistration): () => void;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
private publish;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1,6 +1,42 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/** Raw pieces of one settlement notice, before display naming. */
|
|
2
|
+
export interface SettledSubagent {
|
|
3
|
+
/** Full child session id the host named in the notice. */
|
|
4
|
+
readonly id: string;
|
|
5
|
+
/** Russian completion verb phrase ("завершён", "остановлен", …). */
|
|
6
|
+
readonly ending: string;
|
|
7
|
+
/** The child's closing message, trimmed and capped. */
|
|
8
|
+
readonly body: string;
|
|
9
|
+
}
|
|
10
|
+
/** Fold the host settlement wording into its raw pieces. */
|
|
11
|
+
export declare function parseSettlement(text: string): SettledSubagent | undefined;
|
|
12
|
+
/** Operator-facing view of one settled subagent. */
|
|
13
|
+
export interface SettlementView {
|
|
14
|
+
readonly title: string;
|
|
15
|
+
readonly body: string;
|
|
16
|
+
/** Muted correlation line above the body; absent when the title says it all. */
|
|
17
|
+
readonly meta?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A list title the operator can read: whitespace-collapsed, and not the
|
|
21
|
+
* session id itself — the host falls back to the raw id where a child has no
|
|
22
|
+
* title of its own, and a hash is exactly what this module exists to hide.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readableSubagentName(title: string | undefined, id: string): string | undefined;
|
|
25
|
+
export interface SettlementViewOptions {
|
|
26
|
+
/**
|
|
27
|
+
* The chat's subagent display names keyed by session id (the delegation
|
|
28
|
+
* description the host keeps, or the session's own title).
|
|
29
|
+
*/
|
|
30
|
+
readonly nameOf?: (id: string) => string | undefined;
|
|
31
|
+
/** Sign titles with deterministic codenames instead of the raw name or id. */
|
|
32
|
+
readonly codenames?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build the operator-facing title for one settled subagent. A codename wins
|
|
36
|
+
* when enabled, then the child's readable name, and the short id stands in
|
|
37
|
+
* when neither exists. The folded-out facts move into the meta line: the
|
|
38
|
+
* real task name under a codename, and the id wherever the title does not
|
|
39
|
+
* already carry it, so a notice stays matchable against the session logs.
|
|
40
|
+
*/
|
|
41
|
+
export declare function settlementView(settled: SettledSubagent, options?: SettlementViewOptions): SettlementView;
|
|
6
42
|
//# sourceMappingURL=settlement.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panel copy for a refused source preview. The Host answers with the shared
|
|
3
|
+
* `(reason: <code>)` marker, so the panel can say what actually happened
|
|
4
|
+
* instead of telling every audience that a file which is present moved away.
|
|
5
|
+
*/
|
|
6
|
+
/** The sentence behind one failed preview request, keyed by the Host reason. */
|
|
7
|
+
export declare function sourcePreviewFailureCopy(failure: unknown): string;
|
|
8
|
+
//# sourceMappingURL=source-preview.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic display codenames for subagent sessions.
|
|
3
|
+
*
|
|
4
|
+
* The host addresses a background child by its session UUID — opaque noise in
|
|
5
|
+
* an operator-facing notice. A pure string hash folds the full UUID into a
|
|
6
|
+
* stable adjective-plus-noun codename ("Дотошный Барсук"): the same child
|
|
7
|
+
* keeps its codename across reloads and reconnects, nothing is stored, and
|
|
8
|
+
* within one chat's handful of subagents collisions are rare. A codename is
|
|
9
|
+
* decoration only — the short session id stays in the notice body for log
|
|
10
|
+
* correlation.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* The codename one subagent session displays: two FNV-1a passes with
|
|
14
|
+
* different seeds pick the adjective and the noun independently, so the
|
|
15
|
+
* pairs spread across the whole vocabulary instead of walking it in lockstep.
|
|
16
|
+
*/
|
|
17
|
+
export declare function codenameFor(id: string): string;
|
|
18
|
+
//# sourceMappingURL=subagent-codenames.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ClientRemote } from "@deepseek-ai/dsh-api-gateway/client";
|
|
2
2
|
import type { ISessions, SessionFace } from "@deepseek-ai/dsh-api-session-controller/client";
|
|
3
3
|
import type { UiConversation } from "@deepseek-ai/dsh-client-ui-conversation/client";
|
|
4
|
-
import type { QaAccountProfileInput, QaAccountSession, QaAccountUserPublic, QaClaimResult, QaLockdownProof, QaOwnershipEntry, QaSessionState, QaSourceFilePreview, QaTurnSources, QaWhoamiResult } from "../types.js";
|
|
4
|
+
import type { QaAccountProfileInput, QaAccountSession, QaAccountStartersInput, QaAccountStarter, QaAccountUserPublic, QaApprovalDecision, QaClaimResult, QaLockdownProof, QaOwnershipEntry, QaPendingApproval, QaPendingQuestion, QaQuestionAnswerItem, QaSessionState, QaSkillDocument, QaSkillDraftInput, QaSkillRemoval, QaSkillSummary, QaSkillToolDescriptor, QaSkillValidation, QaSourceFilePreview, QaTurnSources, QaWhoamiResult } from "../types.js";
|
|
5
5
|
/** Wire content one prompt carries: text plus base64 image uploads. */
|
|
6
6
|
export type QaPromptContent = Parameters<SessionFace["prompt"]>[0];
|
|
7
7
|
/** DSH session runtime surface the QA controller is allowed to touch. */
|
|
@@ -87,6 +87,81 @@ export type QaBoundSourceApi = {
|
|
|
87
87
|
readonly error: unknown;
|
|
88
88
|
}>;
|
|
89
89
|
};
|
|
90
|
+
/**
|
|
91
|
+
* Approval remotes of this plugin's namespace. Read-only listing plus the one
|
|
92
|
+
* write: the operator's answer to a parked tool call.
|
|
93
|
+
*/
|
|
94
|
+
export interface QaApprovalApi {
|
|
95
|
+
pendingApprovals(token: string, sessionId: string): Promise<{
|
|
96
|
+
readonly ok: true;
|
|
97
|
+
readonly value: readonly QaPendingApproval[];
|
|
98
|
+
} | {
|
|
99
|
+
readonly ok: false;
|
|
100
|
+
readonly error: unknown;
|
|
101
|
+
}>;
|
|
102
|
+
answerApproval(token: string, sessionId: string, requestId: string, decision: QaApprovalDecision): Promise<{
|
|
103
|
+
readonly ok: true;
|
|
104
|
+
readonly value: boolean;
|
|
105
|
+
} | {
|
|
106
|
+
readonly ok: false;
|
|
107
|
+
readonly error: unknown;
|
|
108
|
+
}>;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Question remotes of this plugin's namespace: the parked `ask_user_question`
|
|
112
|
+
* requests of one chat, the operator's answers, and closing one unanswered.
|
|
113
|
+
*/
|
|
114
|
+
export interface QaQuestionApi {
|
|
115
|
+
pendingQuestions(token: string, sessionId: string): Promise<{
|
|
116
|
+
readonly ok: true;
|
|
117
|
+
readonly value: readonly QaPendingQuestion[];
|
|
118
|
+
} | {
|
|
119
|
+
readonly ok: false;
|
|
120
|
+
readonly error: unknown;
|
|
121
|
+
}>;
|
|
122
|
+
answerQuestion(token: string, sessionId: string, requestId: string, answers: readonly QaQuestionAnswerItem[]): Promise<{
|
|
123
|
+
readonly ok: true;
|
|
124
|
+
readonly value: boolean;
|
|
125
|
+
} | {
|
|
126
|
+
readonly ok: false;
|
|
127
|
+
readonly error: unknown;
|
|
128
|
+
}>;
|
|
129
|
+
cancelQuestion(token: string, sessionId: string, requestId: string): Promise<{
|
|
130
|
+
readonly ok: true;
|
|
131
|
+
readonly value: boolean;
|
|
132
|
+
} | {
|
|
133
|
+
readonly ok: false;
|
|
134
|
+
readonly error: unknown;
|
|
135
|
+
}>;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Personal-skill remotes of this plugin's namespace. The browser names a
|
|
139
|
+
* skill, never a directory: the account token behind the call decides where
|
|
140
|
+
* that name resolves.
|
|
141
|
+
*/
|
|
142
|
+
export interface QaSkillApi {
|
|
143
|
+
skillsList(token: string): Promise<RemoteResult<{
|
|
144
|
+
readonly skills: readonly QaSkillSummary[];
|
|
145
|
+
}>>;
|
|
146
|
+
skillsGet(token: string, name: string): Promise<RemoteResult<QaSkillDocument>>;
|
|
147
|
+
skillsCreate(token: string, input: QaSkillDraftInput): Promise<RemoteResult<QaSkillDocument>>;
|
|
148
|
+
skillsUpdate(token: string, name: string, input: QaSkillDraftInput): Promise<RemoteResult<QaSkillDocument>>;
|
|
149
|
+
skillsRemove(token: string, name: string, expectedRevision: string | null): Promise<RemoteResult<QaSkillRemoval>>;
|
|
150
|
+
skillsTools(token: string): Promise<RemoteResult<{
|
|
151
|
+
readonly tools: readonly QaSkillToolDescriptor[];
|
|
152
|
+
}>>;
|
|
153
|
+
skillsValidate(token: string, name: string | null, input: QaSkillDraftInput): Promise<RemoteResult<QaSkillValidation>>;
|
|
154
|
+
}
|
|
155
|
+
/** The skill API with the account token already bound at the call site. */
|
|
156
|
+
export interface QaBoundSkillApi {
|
|
157
|
+
list(): Promise<RemoteResult<readonly QaSkillSummary[]>>;
|
|
158
|
+
get(name: string): Promise<RemoteResult<QaSkillDocument>>;
|
|
159
|
+
create(input: QaSkillDraftInput): Promise<RemoteResult<QaSkillDocument>>;
|
|
160
|
+
update(name: string, input: QaSkillDraftInput): Promise<RemoteResult<QaSkillDocument>>;
|
|
161
|
+
remove(name: string, expectedRevision: string | null): Promise<RemoteResult<QaSkillRemoval>>;
|
|
162
|
+
tools(): Promise<RemoteResult<readonly QaSkillToolDescriptor[]>>;
|
|
163
|
+
validate(name: string | null, input: QaSkillDraftInput): Promise<RemoteResult<QaSkillValidation>>;
|
|
164
|
+
}
|
|
90
165
|
/** Account remotes exposed by the plugin's own typert namespace. */
|
|
91
166
|
export interface QaAccountsApi {
|
|
92
167
|
accountsWhoami(token: string): Promise<RemoteResult<QaWhoamiResult>>;
|
|
@@ -101,8 +176,13 @@ export interface QaAccountsApi {
|
|
|
101
176
|
}>>;
|
|
102
177
|
/** Replace the caller's own self-declared profile; the token is the identity. */
|
|
103
178
|
accountsUpdateProfile(token: string, input: QaAccountProfileInput): Promise<RemoteResult<QaAccountUserPublic>>;
|
|
179
|
+
/** Replace the caller's own starter buttons; the token is the identity. */
|
|
180
|
+
accountsUpdateStarters(token: string, input: QaAccountStartersInput): Promise<RemoteResult<QaAccountUserPublic>>;
|
|
104
181
|
}
|
|
105
|
-
|
|
182
|
+
/** One button above an empty composer: what it reads and what it sends. */
|
|
183
|
+
export type QaQuickQuestion = QaAccountStarter;
|
|
184
|
+
/** Result shape every generated remote call resolves to. */
|
|
185
|
+
export type RemoteResult<Value> = {
|
|
106
186
|
readonly ok: true;
|
|
107
187
|
readonly value: Value;
|
|
108
188
|
} | {
|
|
@@ -117,5 +197,4 @@ export interface StorageLike {
|
|
|
117
197
|
}
|
|
118
198
|
/** The state projected while no QA chat is bound (route inactive or booting). */
|
|
119
199
|
export declare const QA_SESSION_IDLE_STATE: QaSessionState;
|
|
120
|
-
export {};
|
|
121
200
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface QaGeneralSettingsPageProps {
|
|
2
|
+
readonly email: string;
|
|
3
|
+
readonly role: string;
|
|
4
|
+
readonly chatCount: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Placeholder with a purpose: the section exists so the dialog has a home for
|
|
8
|
+
* the user-scoped preferences that follow (notifications, integrations,
|
|
9
|
+
* privacy), and so the thing it must not become is written down — deployment
|
|
10
|
+
* and chat policy live in the Host settings, not here. It shows the account
|
|
11
|
+
* facts a user can act on today and nothing invented.
|
|
12
|
+
*/
|
|
13
|
+
export declare function QaGeneralSettingsPage(props: QaGeneralSettingsPageProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=GeneralSettingsPage.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { QaAccountIdentityField, QaAccountProfile, QaAccountProfileInput } from "../../types.js";
|
|
2
|
+
export interface QaProfileSettingsPageProps {
|
|
3
|
+
readonly email: string;
|
|
4
|
+
readonly profile: QaAccountProfile;
|
|
5
|
+
/** Handle fields the deployment declares, in its configured order. */
|
|
6
|
+
readonly identities: readonly QaAccountIdentityField[];
|
|
7
|
+
readonly instructionsMaxLength: number;
|
|
8
|
+
/** Persist the edited profile; resolves to refusal copy, or null. */
|
|
9
|
+
readonly onSave: (input: QaAccountProfileInput) => Promise<string | null>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The signed-in user's profile, moved into the settings dialog unchanged: the
|
|
13
|
+
* same fields, the same storage and the same limits as the modal it replaces.
|
|
14
|
+
* The form is seeded from the stored profile whenever that profile changes, so
|
|
15
|
+
* a reload or a write from another tab never leaves stale edits on screen.
|
|
16
|
+
*/
|
|
17
|
+
export declare function QaProfileSettingsPage(props: QaProfileSettingsPageProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=ProfileSettingsPage.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { QaSkillSummary } from "../../types.js";
|
|
2
|
+
export interface QaSkillCatalogProps {
|
|
3
|
+
readonly skills: readonly QaSkillSummary[];
|
|
4
|
+
readonly loading: boolean;
|
|
5
|
+
readonly error: string | null;
|
|
6
|
+
readonly onOpen: (name: string) => void;
|
|
7
|
+
readonly onCreate: () => void;
|
|
8
|
+
readonly onReload: () => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The skills list: what exists, how it is invoked, and what needs attention.
|
|
12
|
+
* Search is client-side over the fields the spec names (name, description,
|
|
13
|
+
* whenToUse) — the catalog of one account is small by construction.
|
|
14
|
+
*/
|
|
15
|
+
export declare function QaSkillCatalog(props: QaSkillCatalogProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=SkillCatalog.d.ts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { QaSkillDiagnostic, QaSkillDocument, QaSkillDraftInput, QaSkillToolDescriptor } from "../../types.js";
|
|
2
|
+
/** What the Host last answered about the draft being edited. */
|
|
3
|
+
export interface QaSkillValidationState {
|
|
4
|
+
/** The file a save would write, as the Host's serializer renders it. */
|
|
5
|
+
readonly preview: string;
|
|
6
|
+
readonly diagnostics: readonly QaSkillDiagnostic[];
|
|
7
|
+
/** True while a newer draft is on its way to the Host. */
|
|
8
|
+
readonly pending: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface QaSkillEditorProps {
|
|
11
|
+
/** `create` starts from an empty draft; `edit` from the loaded document. */
|
|
12
|
+
readonly mode: "create" | "edit";
|
|
13
|
+
/** Absent while a fresh skill is being created. */
|
|
14
|
+
readonly document: QaSkillDocument | null;
|
|
15
|
+
/** The Host's answer for the current draft. */
|
|
16
|
+
readonly validation: QaSkillValidationState;
|
|
17
|
+
/** Report the draft so the page can ask the Host about it. */
|
|
18
|
+
readonly onDraftChange: (input: QaSkillDraftInput) => void;
|
|
19
|
+
readonly tools: readonly QaSkillToolDescriptor[];
|
|
20
|
+
readonly toolsError: string | null;
|
|
21
|
+
readonly saving: boolean;
|
|
22
|
+
readonly error: string | null;
|
|
23
|
+
/** True once a save was refused because the file changed elsewhere. */
|
|
24
|
+
readonly conflict: boolean;
|
|
25
|
+
readonly onBack: () => void;
|
|
26
|
+
readonly onSave: (input: QaSkillDraftInput) => void;
|
|
27
|
+
readonly onDelete: () => void;
|
|
28
|
+
/** Re-read the stored skill after a conflict; absent on create. */
|
|
29
|
+
readonly onReload: () => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* One skill's editor. It never wraps itself in a nested modal — the settings
|
|
33
|
+
* dialog's own content area is the page.
|
|
34
|
+
*
|
|
35
|
+
* Two validators run: this component checks the rules it can check instantly,
|
|
36
|
+
* and the Host answers with the authoritative set plus the exact file a save
|
|
37
|
+
* would write. Both are shown, and a save is only offered when neither has an
|
|
38
|
+
* error — the Host still refuses on write, because a stale answer is always
|
|
39
|
+
* possible between a keystroke and a round trip.
|
|
40
|
+
*/
|
|
41
|
+
export declare function QaSkillEditor(props: QaSkillEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
//# sourceMappingURL=SkillEditor.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { QaSkillToolDescriptor } from "../../types.js";
|
|
2
|
+
export interface QaSkillToolPickerProps {
|
|
3
|
+
readonly open: boolean;
|
|
4
|
+
readonly tools: readonly QaSkillToolDescriptor[];
|
|
5
|
+
readonly toolsError: string | null;
|
|
6
|
+
readonly selected: readonly string[];
|
|
7
|
+
readonly onApply: (tools: readonly string[]) => void;
|
|
8
|
+
readonly onClose: () => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Multi-select over the deployment's tool catalog. Availability is the QA
|
|
12
|
+
* session's own scope, and the picker says so: a tool the session cannot reach
|
|
13
|
+
* is still offered — an imported skill has to stay repairable — but it is
|
|
14
|
+
* grouped and labelled as unavailable, and choosing it grants nothing.
|
|
15
|
+
*/
|
|
16
|
+
export declare function QaSkillToolPicker(props: QaSkillToolPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=SkillToolPicker.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { QaBoundSkillApi } from "../types.js";
|
|
2
|
+
export interface QaSkillsSettingsPageProps {
|
|
3
|
+
/** The token-bound skill API the surface hands to this page. */
|
|
4
|
+
readonly api: QaBoundSkillApi;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Personal skills: the catalog, and the editor for one skill or a new one.
|
|
8
|
+
*
|
|
9
|
+
* The page owns the server state (list, tools, loaded document, in-flight
|
|
10
|
+
* failures) and hands the editor a draft only once a document has loaded, so
|
|
11
|
+
* a save always carries the revision it read. Creating and editing share one
|
|
12
|
+
* route: the difference is whether a loaded document exists to compare with.
|
|
13
|
+
*/
|
|
14
|
+
export declare function QaSkillsSettingsPage(props: QaSkillsSettingsPageProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=SkillsSettingsPage.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { QaAccountStarters, QaAccountStartersInput } from "../../types.js";
|
|
2
|
+
export interface QaStartersSettingsPageProps {
|
|
3
|
+
readonly starters: QaAccountStarters;
|
|
4
|
+
/** Persist the edited list; resolves to refusal copy, or null. */
|
|
5
|
+
readonly onSave: (input: QaAccountStartersInput) => Promise<string | null>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The signed-in user's own starter buttons: what each button reads, what
|
|
9
|
+
* pressing it sends, and whether the deployment's standard suggestions stay
|
|
10
|
+
* visible next to them. Same full-replace contract as the profile form — the
|
|
11
|
+
* list is seeded from the stored record whenever that record changes.
|
|
12
|
+
*/
|
|
13
|
+
export declare function QaStartersSettingsPage(props: QaStartersSettingsPageProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=StartersSettingsPage.d.ts.map
|