@yadsh/dsh-qa-surface 0.12.0 → 0.14.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 +148 -22
- package/compatibility.json +7 -3
- package/lib/access/capability-catalog.js +22 -6
- package/lib/access/capability-catalog.js.map +1 -1
- package/lib/access/model.js +36 -2
- package/lib/access/model.js.map +1 -1
- package/lib/access/service.js +19 -4
- package/lib/access/service.js.map +1 -1
- package/lib/account-remotes.js +4 -0
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/database.js +49 -9
- package/lib/accounts/database.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 +53 -8
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/permissions.js +6 -0
- package/lib/admin/permissions.js.map +1 -1
- package/lib/admin/quality-store.js +95 -19
- package/lib/admin/quality-store.js.map +1 -1
- package/lib/admin/service.js +432 -52
- package/lib/admin/service.js.map +1 -1
- package/lib/cli.js +24 -4
- package/lib/cli.js.map +1 -1
- package/lib/client/QaAccountsController.js +70 -5
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaConfigController.js.map +1 -1
- package/lib/client/QaSessionController.js +626 -63
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +279 -43
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaSurfaceGuard.js +2 -2
- package/lib/client/QaSurfaceGuard.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +4 -2
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/admin/QaAdmin.js +59 -34
- package/lib/client/admin/QaAdmin.js.map +1 -1
- package/lib/client/admin/pages/Conversations.js +21 -14
- package/lib/client/admin/pages/Conversations.js.map +1 -1
- package/lib/client/admin/pages/ExpertMemory.js +210 -0
- package/lib/client/admin/pages/ExpertMemory.js.map +1 -0
- package/lib/client/admin/pages/Overview.js +5 -5
- package/lib/client/admin/pages/Overview.js.map +1 -1
- package/lib/client/admin/pages/Quality.js +6 -6
- package/lib/client/admin/pages/Quality.js.map +1 -1
- package/lib/client/admin/pages/Review.js +13 -9
- package/lib/client/admin/pages/Review.js.map +1 -1
- package/lib/client/admin/pages/SkillFiles.js +3 -3
- package/lib/client/admin/pages/SkillFiles.js.map +1 -1
- package/lib/client/admin/pages/Users.js +12 -12
- package/lib/client/admin/pages/Users.js.map +1 -1
- package/lib/client/admin/routes.js +4 -0
- package/lib/client/admin/routes.js.map +1 -1
- package/lib/client/admin/shared.js +57 -10
- package/lib/client/admin/shared.js.map +1 -1
- package/lib/client/admin/styles.js +3 -0
- package/lib/client/admin/styles.js.map +1 -1
- package/lib/client/attestation.js +11 -2
- package/lib/client/attestation.js.map +1 -1
- package/lib/client/audit/QaAuditDialog.js +2 -2
- package/lib/client/audit/QaAuditDialog.js.map +1 -1
- package/lib/client/audit/QaAuditRowBadge.js +1 -1
- package/lib/client/audit/QaAuditRowBadge.js.map +1 -1
- package/lib/client/components/Markdown.js +7 -2
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaAgentsDrawer.js +7 -5
- package/lib/client/components/QaAgentsDrawer.js.map +1 -1
- package/lib/client/components/QaApproval.js +2 -2
- package/lib/client/components/QaApproval.js.map +1 -1
- package/lib/client/components/QaAuthGate.js +6 -6
- package/lib/client/components/QaAuthGate.js.map +1 -1
- package/lib/client/components/QaChangelog.js +87 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaComposer.js +9 -6
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaFileAttachment.js +1 -1
- package/lib/client/components/QaFileAttachment.js.map +1 -1
- package/lib/client/components/QaFilesPanel.js +7 -7
- package/lib/client/components/QaFilesPanel.js.map +1 -1
- package/lib/client/components/QaHeader.js +4 -4
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaMessage.js +12 -12
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModal.js +11 -2
- package/lib/client/components/QaModal.js.map +1 -1
- package/lib/client/components/QaQuestions.js +4 -4
- package/lib/client/components/QaQuestions.js.map +1 -1
- package/lib/client/components/QaQueueDock.js +137 -0
- package/lib/client/components/QaQueueDock.js.map +1 -0
- package/lib/client/components/QaRequestQueue.js +22 -0
- package/lib/client/components/QaRequestQueue.js.map +1 -0
- package/lib/client/components/QaRightRail.js +2 -2
- package/lib/client/components/QaRightRail.js.map +1 -1
- package/lib/client/components/QaSidebar.js +66 -6
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +10 -8
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaThemeSwitcher.js +19 -0
- package/lib/client/components/QaThemeSwitcher.js.map +1 -0
- package/lib/client/components/QaTurnNotice.js +40 -0
- package/lib/client/components/QaTurnNotice.js.map +1 -0
- package/lib/client/components/QaTurnRail.js +3 -3
- package/lib/client/components/QaTurnRail.js.map +1 -1
- package/lib/client/components/QaWelcomeNotice.js +2 -6
- package/lib/client/components/QaWelcomeNotice.js.map +1 -1
- package/lib/client/components/QaWidthHandle.js +2 -2
- package/lib/client/components/QaWidthHandle.js.map +1 -1
- package/lib/client/components/QaWorkGroup.js +5 -5
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/components/QaWorkspaceBrowser.js +10 -10
- package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
- package/lib/client/components/VariantSwitcher.js +1 -1
- package/lib/client/components/VariantSwitcher.js.map +1 -1
- package/lib/client/failure-copy.js +26 -8
- package/lib/client/failure-copy.js.map +1 -1
- package/lib/client/focus-ring.js +193 -0
- package/lib/client/focus-ring.js.map +1 -0
- package/lib/client/index.js +58 -24
- package/lib/client/index.js.map +1 -1
- package/lib/client/lineage.js +3 -16
- package/lib/client/lineage.js.map +1 -1
- package/lib/client/markdown/CodeBlock.js +2 -2
- package/lib/client/markdown/CodeBlock.js.map +1 -1
- package/lib/client/markdown/blocks.js +118 -31
- package/lib/client/markdown/blocks.js.map +1 -1
- package/lib/client/markdown/math.js +1 -1
- package/lib/client/markdown/math.js.map +1 -1
- package/lib/client/markdown/render.js +32 -12
- package/lib/client/markdown/render.js.map +1 -1
- package/lib/client/markdown/source-chip.js +3 -3
- package/lib/client/markdown/source-chip.js.map +1 -1
- package/lib/client/notifications/notification-dispatcher.js +90 -0
- package/lib/client/notifications/notification-dispatcher.js.map +1 -0
- package/lib/client/notifications/preferences.js +61 -0
- package/lib/client/notifications/preferences.js.map +1 -0
- package/lib/client/notifications/turn-completion-source.js +82 -0
- package/lib/client/notifications/turn-completion-source.js.map +1 -0
- package/lib/client/notifications/use-turn-notifications.js +108 -0
- package/lib/client/notifications/use-turn-notifications.js.map +1 -0
- package/lib/client/panels/PanelHost.js +5 -5
- package/lib/client/panels/PanelHost.js.map +1 -1
- package/lib/client/panels/PanelLauncher.js +2 -2
- package/lib/client/panels/PanelLauncher.js.map +1 -1
- package/lib/client/project-session-state.js +156 -4
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/rating-harvest.js +138 -0
- package/lib/client/rating-harvest.js.map +1 -0
- package/lib/client/role/RoleSelector.js +9 -4
- package/lib/client/role/RoleSelector.js.map +1 -1
- package/lib/client/settings/card.js +58 -17
- package/lib/client/settings/card.js.map +1 -1
- package/lib/client/settings/fields.js +11 -10
- package/lib/client/settings/fields.js.map +1 -1
- package/lib/client/settings/format.js +0 -9
- package/lib/client/settings/format.js.map +1 -1
- package/lib/client/settings/sections/access.js +5 -5
- package/lib/client/settings/sections/access.js.map +1 -1
- package/lib/client/settings/sections/accounts.js +10 -10
- package/lib/client/settings/sections/accounts.js.map +1 -1
- package/lib/client/settings/sections/attachments.js +6 -6
- package/lib/client/settings/sections/attachments.js.map +1 -1
- package/lib/client/settings/sections/branding.js +7 -7
- package/lib/client/settings/sections/branding.js.map +1 -1
- package/lib/client/settings/sections/common.js +4 -2
- package/lib/client/settings/sections/common.js.map +1 -1
- package/lib/client/settings/sections/docs.js +4 -3
- package/lib/client/settings/sections/docs.js.map +1 -1
- package/lib/client/settings/sections/embedding.js +2 -2
- package/lib/client/settings/sections/embedding.js.map +1 -1
- package/lib/client/settings/sections/interface.js +12 -12
- package/lib/client/settings/sections/interface.js.map +1 -1
- package/lib/client/settings/sections/lockdown.js +9 -9
- package/lib/client/settings/sections/lockdown.js.map +1 -1
- package/lib/client/settings/sections/notes.js +12 -12
- package/lib/client/settings/sections/notes.js.map +1 -1
- package/lib/client/settings/sections/session.js +15 -12
- package/lib/client/settings/sections/session.js.map +1 -1
- package/lib/client/settings/sections/slash.js +9 -9
- package/lib/client/settings/sections/slash.js.map +1 -1
- package/lib/client/settings/sections/sources.js +26 -26
- package/lib/client/settings/sections/sources.js.map +1 -1
- package/lib/client/settings/sections/status.js +2 -2
- package/lib/client/settings/sections/status.js.map +1 -1
- package/lib/client/settings/styles.js +15 -9
- package/lib/client/settings/styles.js.map +1 -1
- package/lib/client/slash/SlashPalette.js +4 -4
- package/lib/client/slash/SlashPalette.js.map +1 -1
- package/lib/client/styles.js +139 -66
- package/lib/client/styles.js.map +1 -1
- package/lib/client/theme-preference.js +162 -0
- package/lib/client/theme-preference.js.map +1 -0
- package/lib/client/types.js +8 -0
- package/lib/client/types.js.map +1 -1
- package/lib/client/use-session-ui-state.js +7 -5
- package/lib/client/use-session-ui-state.js.map +1 -1
- package/lib/client/user-settings/GeneralSettingsPage.js +6 -6
- package/lib/client/user-settings/GeneralSettingsPage.js.map +1 -1
- package/lib/client/user-settings/IntegrationTokensPage.js +6 -6
- package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
- package/lib/client/user-settings/NotificationSettingsPage.js +107 -0
- package/lib/client/user-settings/NotificationSettingsPage.js.map +1 -0
- package/lib/client/user-settings/PasswordSettingsPage.js +1 -1
- package/lib/client/user-settings/PasswordSettingsPage.js.map +1 -1
- package/lib/client/user-settings/ProfileSettingsPage.js +2 -2
- package/lib/client/user-settings/ProfileSettingsPage.js.map +1 -1
- package/lib/client/user-settings/SkillCatalog.js +3 -3
- package/lib/client/user-settings/SkillCatalog.js.map +1 -1
- package/lib/client/user-settings/SkillEditor.js +26 -8
- package/lib/client/user-settings/SkillEditor.js.map +1 -1
- package/lib/client/user-settings/SkillToolPicker.js +3 -3
- package/lib/client/user-settings/SkillToolPicker.js.map +1 -1
- package/lib/client/user-settings/SkillsSettingsPage.js +1 -1
- package/lib/client/user-settings/SkillsSettingsPage.js.map +1 -1
- package/lib/client/user-settings/StartersSettingsPage.js +6 -6
- package/lib/client/user-settings/StartersSettingsPage.js.map +1 -1
- package/lib/client/user-settings/UserSettingsDialog.js +7 -2
- package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
- package/lib/client/user-settings/copy.js +2 -0
- package/lib/client/user-settings/copy.js.map +1 -1
- package/lib/client/user-settings/draft.js +4 -1
- package/lib/client/user-settings/draft.js.map +1 -1
- package/lib/client/user-settings/fields.js +5 -5
- package/lib/client/user-settings/fields.js.map +1 -1
- package/lib/client.js +7483 -2075
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/defaults.js +7 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/lockdown.js +7 -0
- package/lib/config-resolvers/lockdown.js.map +1 -1
- package/lib/config-resolvers/notifications.js +15 -0
- package/lib/config-resolvers/notifications.js.map +1 -0
- package/lib/config-resolvers/session.js +11 -1
- package/lib/config-resolvers/session.js.map +1 -1
- package/lib/config.js +67 -18
- package/lib/config.js.map +1 -1
- package/lib/enforcement/tool-grants.js +6 -6
- package/lib/enforcement/tool-grants.js.map +1 -1
- package/lib/index.js +171 -39
- package/lib/index.js.map +1 -1
- package/lib/integration/answer.js +74 -8
- package/lib/integration/answer.js.map +1 -1
- package/lib/integration/expert-memory.js +39 -0
- package/lib/integration/expert-memory.js.map +1 -0
- package/lib/integration/host-runner.js +26 -14
- package/lib/integration/host-runner.js.map +1 -1
- package/lib/notifications.js +66 -0
- package/lib/notifications.js.map +1 -0
- package/lib/personal-skills/errors.js.map +1 -1
- package/lib/personal-skills/service.js +81 -7
- package/lib/personal-skills/service.js.map +1 -1
- package/lib/prompt-notes.js +2 -10
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/extractors.js +1 -1
- package/lib/provenance/extractors.js.map +1 -1
- package/lib/provenance/host-store.js +5 -1
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/qa-tools/docs-tools.js +64 -11
- package/lib/qa-tools/docs-tools.js.map +1 -1
- package/lib/qa-tools/lifecycle.js +6 -3
- package/lib/qa-tools/lifecycle.js.map +1 -1
- package/lib/request-queue.js +32 -0
- package/lib/request-queue.js.map +1 -0
- package/lib/resolve-config.js +2 -0
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +7 -2
- package/lib/secure-session.js.map +1 -1
- package/lib/shared/settings.js +19 -2
- package/lib/shared/settings.js.map +1 -1
- package/lib/turn-failure-log.js +67 -0
- package/lib/turn-failure-log.js.map +1 -0
- package/lib/typert.host.js +1459 -647
- package/lib/typert.remote-client.d.ts +25 -9
- package/lib/typert.remote-client.js +1356 -636
- package/lib/types/access/capability-catalog.d.ts +20 -4
- package/lib/types/access/model.d.ts +23 -0
- package/lib/types/access/service.d.ts +2 -3
- package/lib/types/account-remotes.d.ts +8 -1
- package/lib/types/accounts/database.d.ts +13 -3
- package/lib/types/accounts/errors.d.ts +9 -1
- package/lib/types/accounts/file.d.ts +12 -0
- package/lib/types/accounts/store.d.ts +30 -2
- package/lib/types/admin/quality-store.d.ts +33 -0
- package/lib/types/admin/service.d.ts +119 -9
- package/lib/types/client/QaAccountsController.d.ts +37 -3
- package/lib/types/client/QaConfigController.d.ts +2 -2
- package/lib/types/client/QaSessionController.d.ts +199 -6
- package/lib/types/client/QaSurface.d.ts +6 -1
- package/lib/types/client/admin/pages/ExpertMemory.d.ts +19 -0
- package/lib/types/client/admin/routes.d.ts +3 -1
- package/lib/types/client/admin/shared.d.ts +20 -1
- package/lib/types/client/components/Markdown.d.ts +8 -1
- package/lib/types/client/components/QaHeader.d.ts +3 -1
- package/lib/types/client/components/QaModal.d.ts +7 -0
- package/lib/types/client/components/QaQueueDock.d.ts +27 -0
- package/lib/types/client/components/QaRequestQueue.d.ts +20 -0
- package/lib/types/client/components/QaThemeSwitcher.d.ts +14 -0
- package/lib/types/client/components/QaTurnNotice.d.ts +55 -0
- package/lib/types/client/focus-ring.d.ts +65 -0
- package/lib/types/client/lineage.d.ts +3 -13
- package/lib/types/client/markdown/blocks.d.ts +30 -2
- package/lib/types/client/markdown/render.d.ts +4 -1
- package/lib/types/client/notifications/notification-dispatcher.d.ts +68 -0
- package/lib/types/client/notifications/preferences.d.ts +44 -0
- package/lib/types/client/notifications/turn-completion-source.d.ts +114 -0
- package/lib/types/client/notifications/use-turn-notifications.d.ts +51 -0
- package/lib/types/client/project-session-state.d.ts +35 -1
- package/lib/types/client/rating-harvest.d.ts +49 -0
- package/lib/types/client/role/RoleSelector.d.ts +7 -1
- package/lib/types/client/settings/card.d.ts +36 -5
- package/lib/types/client/settings/fields.d.ts +24 -0
- package/lib/types/client/settings/format.d.ts +0 -5
- package/lib/types/client/settings/sections/common.d.ts +3 -1
- package/lib/types/client/settings/sections/session.d.ts +2 -1
- package/lib/types/client/settings/styles.d.ts +9 -4
- package/lib/types/client/settings-extensions/user-session.d.ts +1 -1
- package/lib/types/client/theme-preference.d.ts +69 -0
- package/lib/types/client/types.d.ts +36 -5
- package/lib/types/client/use-session-ui-state.d.ts +6 -4
- package/lib/types/client/user-settings/GeneralSettingsPage.d.ts +5 -5
- package/lib/types/client/user-settings/NotificationSettingsPage.d.ts +40 -0
- package/lib/types/client/user-settings/UserSettingsDialog.d.ts +12 -2
- package/lib/types/client/user-settings/draft.d.ts +4 -1
- package/lib/types/client/user-settings/fields.d.ts +7 -0
- package/lib/types/config-resolvers/notifications.d.ts +10 -0
- package/lib/types/config-resolvers/session.d.ts +6 -0
- package/lib/types/config.d.ts +20 -1
- package/lib/types/index.d.ts +70 -10
- package/lib/types/integration/answer.d.ts +27 -0
- package/lib/types/integration/expert-memory.d.ts +49 -0
- package/lib/types/notifications.d.ts +32 -0
- package/lib/types/personal-skills/errors.d.ts +1 -1
- package/lib/types/personal-skills/service.d.ts +6 -0
- package/lib/types/prompt-notes.d.ts +17 -4
- package/lib/types/qa-tools/docs-tools.d.ts +2 -2
- package/lib/types/request-queue.d.ts +32 -0
- package/lib/types/shared/settings.d.ts +19 -2
- package/lib/types/turn-failure-log.d.ts +18 -0
- package/lib/types/types.d.ts +200 -4
- package/package.json +64 -62
- package/scripts/attach-workspace-sessions.mjs +24 -5
- package/scripts/repair-session-events.mjs +25 -5
package/lib/types/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
|
|
2
2
|
import type { Context } from "@deepseek-ai/cordis";
|
|
3
|
+
import type { QaSurfaceConfigRefs } from "./config.js";
|
|
4
|
+
import type { QaAccountNotificationsInput } from "./types.js";
|
|
3
5
|
import type { QaTurnSources } from "./provenance/types.js";
|
|
4
|
-
import type { QaAccountProfileInput, QaAccountSession, QaAccountStartersInput, QaAccountUserPublic, QaApprovalDecision, QaClaimResult, QaDocumentPreview, QaIssuedServiceToken, QaLockdownProof, QaOwnershipEntry, QaPasswordResetRequest, QaPendingApproval, QaPendingQuestion, QaQuestionAnswerItem, QaServiceTokenCreateInput, QaServiceTokenSummary,
|
|
6
|
+
import type { QaAccountProfileInput, QaAccountSession, QaAccountStartersInput, QaAccountUserPublic, QaApprovalDecision, QaClaimResult, QaDocumentPreview, QaIssuedServiceToken, QaLockdownProof, QaOwnershipEntry, QaPasswordResetRequest, QaPendingApproval, QaPendingQuestion, QaQuestionAnswerItem, QaQueueStatus, QaServiceTokenCreateInput, QaServiceTokenSummary, ResolvedQaSurfaceConfig, QaAdminSkillScope, QaAdminSkillsView, QaExpertMemoryDraft, QaExpertMemoryPage, QaExpertMemoryRecord, QaExpertMemoryScope, QaSkillDocument, QaSkillDraftInput, QaSkillRemoval, QaSkillSummary, QaSkillToolDescriptor, QaSkillValidation, QaSourceFilePreview, QaWhoamiResult, QaWorkspaceFile, QaWorkspaceListing, QaPrincipal, QaAccessAdminSnapshot, QaAdminAuditEvent, QaAdminOverview, QaAdminPage, QaAdminUserDetail, QaAdminUserRow, QaAdminUserUpdate, QaAuditQuery, QaCapabilitySelection, QaConversationDetail, QaConversationDeletion, QaConversationQuery, QaConversationReview, QaConversationReviewInput, QaConversationSummary, QaCurrentAccess, QaFeedbackHarvestEntry, QaFeedbackHarvestResult, QaFeedbackQuery, QaFeedbackRow, QaMessageFeedback, QaMessageFeedbackInput, QaQualityMetrics, QaReviewQueueItem, QaReviewQueueRow, QaSessionAccess, QaSlashCatalog, QaSlashExecution, QaSlashSubmitAttachment, QaSkillActivationRecord, QaSkillAssignmentOverride, QaSubrole, QaUserAccess, QaUserQuery } from "./types.js";
|
|
5
7
|
export declare const name = "qa-surface";
|
|
6
8
|
export declare const inject: string[];
|
|
7
9
|
import { QA_SURFACE_SETTINGS_NAMESPACE } from "./shared/settings.js";
|
|
8
10
|
export { QA_SURFACE_SETTINGS_NAMESPACE };
|
|
9
|
-
export declare const Config: import("@deepseek-ai/schemastery").default<
|
|
11
|
+
export declare const Config: import("@deepseek-ai/schemastery").default<QaSurfaceConfigRefs>;
|
|
10
12
|
declare module "@deepseek-ai/cordis" {
|
|
11
13
|
interface Context {
|
|
12
14
|
qaSurface: QaSurface;
|
|
@@ -15,8 +17,8 @@ declare module "@deepseek-ai/cordis" {
|
|
|
15
17
|
/** Host companion: validates config, owns the admission boundary and the route. */
|
|
16
18
|
export declare class QaSurface extends TypertRemoteService {
|
|
17
19
|
static inject: string[];
|
|
18
|
-
static Config: import("@deepseek-ai/schemastery").default<
|
|
19
|
-
private source;
|
|
20
|
+
static Config: import("@deepseek-ai/schemastery").default<QaSurfaceConfigRefs>;
|
|
21
|
+
private readonly source;
|
|
20
22
|
private readonly logger;
|
|
21
23
|
private readonly admission;
|
|
22
24
|
private readonly approvals;
|
|
@@ -64,7 +66,7 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
64
66
|
* opens the admin console never grows one.
|
|
65
67
|
*/
|
|
66
68
|
private qualityStore;
|
|
67
|
-
constructor(ctx: Context, entry?:
|
|
69
|
+
constructor(ctx: Context, entry?: Partial<QaSurfaceConfigRefs>);
|
|
68
70
|
/** The quality store, opening its file the first time anyone needs it. */
|
|
69
71
|
private quality;
|
|
70
72
|
/**
|
|
@@ -75,6 +77,9 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
75
77
|
* the preset composes it but starts no agent, no session and no turn;
|
|
76
78
|
* without a pinned preset there is nothing to borrow, and the read stays
|
|
77
79
|
* global.
|
|
80
|
+
*
|
|
81
|
+
* The registry answers with a lease on one preset revision, so the scope is
|
|
82
|
+
* handed to the caller that reads with it and released when that read ends.
|
|
78
83
|
*/
|
|
79
84
|
private qaPresetScope;
|
|
80
85
|
/**
|
|
@@ -157,6 +162,13 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
157
162
|
* deployment's limits are enforced in the store before anything is written.
|
|
158
163
|
*/
|
|
159
164
|
accountsUpdateStarters(token: string, input: QaAccountStartersInput): QaAccountUserPublic;
|
|
165
|
+
/**
|
|
166
|
+
* Replace the caller's own notification channels. The account the token
|
|
167
|
+
* authenticates is the only one editable, and the answer is the whole public
|
|
168
|
+
* record, so the settings form re-reads what the stand now holds rather than
|
|
169
|
+
* what it meant to send.
|
|
170
|
+
*/
|
|
171
|
+
accountsUpdateNotifications(token: string, input: QaAccountNotificationsInput): QaAccountUserPublic;
|
|
160
172
|
/**
|
|
161
173
|
* The caller's own integration tokens. The list is the account's own: the
|
|
162
174
|
* token names it, and a secret is never part of a summary, so reading this
|
|
@@ -188,6 +200,20 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
188
200
|
* boundary stays in {@link secureSession}.
|
|
189
201
|
*/
|
|
190
202
|
describe(): ResolvedQaSurfaceConfig;
|
|
203
|
+
/**
|
|
204
|
+
* Report how much of the deployment's request ceiling the stand is using, so
|
|
205
|
+
* a browser holds its question back instead of opening another turn on a
|
|
206
|
+
* model that is busy answering the ones it allows.
|
|
207
|
+
*
|
|
208
|
+
* The count is the Host's, not the browser's: a visitor cannot see another
|
|
209
|
+
* account's chats, and the HTTP API's questions are invisible to every chat
|
|
210
|
+
* view. Read-only, and a ceiling rather than a lock — a prompt rides the
|
|
211
|
+
* native session RPC this plugin does not own, so the boundary is the
|
|
212
|
+
* browser's own courtesy, and two questions sent in the same instant can
|
|
213
|
+
* still overshoot by one. What the ceiling buys is that steady state, not a
|
|
214
|
+
* strict bound.
|
|
215
|
+
*/
|
|
216
|
+
queueStatus(): QaQueueStatus;
|
|
191
217
|
/**
|
|
192
218
|
* Create a QA session from Host-owned inputs. With account workspaces on,
|
|
193
219
|
* cwd is `<configured workspace>/.qa-users/<account UUID>` and the child is
|
|
@@ -232,15 +258,44 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
232
258
|
adminSkillTools(token: string, scope: QaAdminSkillScope): Promise<{
|
|
233
259
|
readonly tools: readonly QaSkillToolDescriptor[];
|
|
234
260
|
}>;
|
|
235
|
-
/**
|
|
236
|
-
|
|
261
|
+
/**
|
|
262
|
+
* Which experts hold memory, and how much.
|
|
263
|
+
*
|
|
264
|
+
* Reads the domain-experts service on the host plane rather than its remotes:
|
|
265
|
+
* those answer a trusted in-Harness caller and check no token, while this
|
|
266
|
+
* console answers a browser, so the permission check lives here.
|
|
267
|
+
*/
|
|
268
|
+
adminMemoryScopes(token: string): Promise<readonly QaExpertMemoryScope[]>;
|
|
269
|
+
/** One page of one namespace, newest first, with the filter's match count. */
|
|
270
|
+
adminMemoryRecords(token: string, namespace: string, query: string, limit: number | null, offset: number): Promise<QaExpertMemoryPage>;
|
|
271
|
+
/** Rewrite one remembered line; the audit trail keeps both images. */
|
|
272
|
+
adminMemoryCorrect(token: string, namespace: string, key: string, draft: QaExpertMemoryDraft): Promise<QaExpertMemoryRecord>;
|
|
273
|
+
/** Drop one or several remembered lines of one namespace. */
|
|
274
|
+
adminMemoryForget(token: string, namespace: string, keys: readonly string[]): Promise<number>;
|
|
275
|
+
/**
|
|
276
|
+
* Empty one namespace, confirming the count the operator was shown.
|
|
277
|
+
*
|
|
278
|
+
* The check is the console's, not the store's: what the operator clicked was
|
|
279
|
+
* a number on a screen, and memory an expert wrote in the meantime is not
|
|
280
|
+
* memory they agreed to erase.
|
|
281
|
+
*/
|
|
282
|
+
adminMemoryWipe(token: string, namespace: string, expectedRecords: number | null): Promise<number>;
|
|
283
|
+
/**
|
|
284
|
+
* Counters, attention lines and the newest quality signals.
|
|
285
|
+
*
|
|
286
|
+
* The Host hands the last parameter its cancellation: this call reads the
|
|
287
|
+
* newest conversation logs of the deployment, which on a real store is minutes
|
|
288
|
+
* of work, and a reviewer who leaves the page while it runs must not leave it
|
|
289
|
+
* running — every other administrative call waits behind it.
|
|
290
|
+
*/
|
|
291
|
+
adminOverview(token: string, signal: AbortSignal): Promise<QaAdminOverview>;
|
|
237
292
|
adminUsers(token: string, query: QaUserQuery, cursor: string | null, limit: number | null): Promise<QaAdminPage<QaAdminUserRow>>;
|
|
238
293
|
adminUser(token: string, userId: string): Promise<QaAdminUserDetail>;
|
|
239
294
|
/** Authorization role, status and subrole assignment of one account. */
|
|
240
295
|
adminUpdateUser(token: string, userId: string, update: QaAdminUserUpdate): Promise<QaAdminUserDetail>;
|
|
241
296
|
adminPasswordResetRequests(token: string): Promise<readonly QaPasswordResetRequest[]>;
|
|
242
297
|
adminResetPassword(token: string, userId: string, password: string): Promise<QaAdminUserDetail>;
|
|
243
|
-
adminConversations(token: string, query: QaConversationQuery, cursor: string | null, limit: number | null): Promise<QaAdminPage<QaConversationSummary>>;
|
|
298
|
+
adminConversations(token: string, query: QaConversationQuery, cursor: string | null, limit: number | null, signal: AbortSignal): Promise<QaAdminPage<QaConversationSummary>>;
|
|
244
299
|
/** One conversation with its messages, tool calls and review state. */
|
|
245
300
|
adminConversation(token: string, conversationId: string): Promise<QaConversationDetail>;
|
|
246
301
|
/**
|
|
@@ -255,11 +310,16 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
255
310
|
* ratable conversation, exactly as the self-service profile write does.
|
|
256
311
|
*/
|
|
257
312
|
adminRateMessage(token: string, conversationId: string, messageId: string, input: QaMessageFeedbackInput): QaMessageFeedback;
|
|
258
|
-
|
|
313
|
+
/**
|
|
314
|
+
* Replay the ratings a browser still holds from before a thumbs reached the
|
|
315
|
+
* Host. Insert-only: what the deployment already records is never rewritten.
|
|
316
|
+
*/
|
|
317
|
+
adminHarvestFeedback(token: string, entries: readonly QaFeedbackHarvestEntry[]): QaFeedbackHarvestResult;
|
|
318
|
+
adminReviewQueue(token: string, cursor: string | null, limit: number | null, signal: AbortSignal): Promise<QaAdminPage<QaReviewQueueRow>>;
|
|
259
319
|
/** Park a conversation for review without rating it. */
|
|
260
320
|
adminQueueConversation(token: string, conversationId: string, messageId: string | null): QaReviewQueueItem;
|
|
261
321
|
adminSaveReview(token: string, input: QaConversationReviewInput): QaConversationReview;
|
|
262
|
-
adminMetrics(token: string): Promise<QaQualityMetrics>;
|
|
322
|
+
adminMetrics(token: string, signal: AbortSignal): Promise<QaQualityMetrics>;
|
|
263
323
|
adminAudit(token: string, query: QaAuditQuery, cursor: string | null, limit: number | null): Promise<QaAdminPage<QaAdminAuditEvent>>;
|
|
264
324
|
/** Pin and attest the effective policy. The browser supplies identity only. */
|
|
265
325
|
secureSession(token: string, sessionId: string): Promise<QaLockdownProof>;
|
|
@@ -20,6 +20,15 @@ export interface QaTurnAnswer {
|
|
|
20
20
|
/** Durable seq of the message the answer came from, when there was one. */
|
|
21
21
|
readonly seq: number | null;
|
|
22
22
|
}
|
|
23
|
+
/** One request's answer, additionally attributed to the turn it came from. */
|
|
24
|
+
export interface QaRequestAnswer extends QaTurnAnswer {
|
|
25
|
+
/**
|
|
26
|
+
* The harness turn number the answer was read out of, or null when the log
|
|
27
|
+
* named no turn for the request's own row. The provenance bundle of a turn is
|
|
28
|
+
* the evidence of its answer, so the caller cites the same number.
|
|
29
|
+
*/
|
|
30
|
+
readonly turn: number | null;
|
|
31
|
+
}
|
|
23
32
|
/** The empty answer: what a turn that committed nothing readable looks like. */
|
|
24
33
|
export declare const QA_EMPTY_ANSWER: QaTurnAnswer;
|
|
25
34
|
/**
|
|
@@ -35,6 +44,24 @@ export declare const QA_EMPTY_ANSWER: QaTurnAnswer;
|
|
|
35
44
|
* @returns the publishable answer and whether the turn was interrupted.
|
|
36
45
|
*/
|
|
37
46
|
export declare function answerAfter(events: readonly StoredSessionEvent[], afterSeq: number): QaTurnAnswer;
|
|
47
|
+
/**
|
|
48
|
+
* Project the answer of the turn one request's own prompt opened.
|
|
49
|
+
*
|
|
50
|
+
* The harness stamps the prompt's rpc id onto the durable user row it claims,
|
|
51
|
+
* so the row is found by id rather than guessed from the newest human message:
|
|
52
|
+
* two questions in flight on one chat open two turns, and a selection by
|
|
53
|
+
* "latest" answers each caller with the other's turn. The turn that answers a
|
|
54
|
+
* request is the one its row was claimed into — `turn/start` opens a turn and
|
|
55
|
+
* the claimed rows follow it — so the answer is read out of that turn's
|
|
56
|
+
* assistant messages only, and its number travels with it for the citation.
|
|
57
|
+
*
|
|
58
|
+
* @param events - durable events, in any order.
|
|
59
|
+
* @param requestId - the rpc id the prompt was submitted with.
|
|
60
|
+
* @returns the answer of this request's turn, or `undefined` when the log
|
|
61
|
+
* holds no row for the request (an unflushed prompt, or a harness that does not
|
|
62
|
+
* echo the id), which leaves the choice of cursor to the caller.
|
|
63
|
+
*/
|
|
64
|
+
export declare function answerForRequest(events: readonly StoredSessionEvent[], requestId: string): QaRequestAnswer | undefined;
|
|
38
65
|
/**
|
|
39
66
|
* Cut an answer down to the size the caller publishes.
|
|
40
67
|
*
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { QaExpertMemoryRecord, QaExpertMemoryScope } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The slice of `@yadsh/dsh-domain-experts` the QA console uses.
|
|
4
|
+
*
|
|
5
|
+
* Declared structurally instead of imported, for the same reason the audit
|
|
6
|
+
* remote is: the QA surface has to load on a stand where the experts plugin is
|
|
7
|
+
* not composed at all, and a package dependency would turn "not installed" into
|
|
8
|
+
* "does not boot".
|
|
9
|
+
*
|
|
10
|
+
* What is reached is the plugin's `memoryAdmin` seam — not its `@Remote`
|
|
11
|
+
* methods. A domain-experts remote takes no token and checks no permission,
|
|
12
|
+
* because inside the Harness its caller is already a trusted component; the QA
|
|
13
|
+
* console answers a browser on a LAN port, so it carries the identity itself
|
|
14
|
+
* and goes through the host-plane seam instead.
|
|
15
|
+
*/
|
|
16
|
+
export interface QaExpertMemoryAdmin {
|
|
17
|
+
scopes(): Promise<readonly QaExpertMemoryScope[]>;
|
|
18
|
+
search(namespace: string, query: string, limit: number, offset: number): Promise<{
|
|
19
|
+
readonly records: readonly QaExpertMemoryRecord[];
|
|
20
|
+
readonly total: number;
|
|
21
|
+
}>;
|
|
22
|
+
correct(input: QaExpertMemoryRecordInput): Promise<QaExpertMemoryRecord>;
|
|
23
|
+
remove(namespace: string, key: string): Promise<boolean>;
|
|
24
|
+
removeMany(namespace: string, keys: readonly string[]): Promise<number>;
|
|
25
|
+
wipe(namespace: string): Promise<number>;
|
|
26
|
+
}
|
|
27
|
+
/** What a correction says one record should hold. The key is the address. */
|
|
28
|
+
export interface QaExpertMemoryRecordInput {
|
|
29
|
+
readonly namespace: string;
|
|
30
|
+
readonly key: string;
|
|
31
|
+
readonly text: string;
|
|
32
|
+
readonly tags?: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
/** The part of the domain-experts service the console addresses. */
|
|
35
|
+
export interface QaDomainExpertsFace {
|
|
36
|
+
readonly memoryAdmin: QaExpertMemoryAdmin;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Why a memory call failed, in the coarse vocabulary the console's copy table
|
|
40
|
+
* speaks.
|
|
41
|
+
*
|
|
42
|
+
* The refusal is read off the plugin's stable `code` field rather than its
|
|
43
|
+
* message: a message is written for a log and gets reworded, and matching one
|
|
44
|
+
* here would mean a rename in another package silently turns a refusal into an
|
|
45
|
+
* unhandled fault. `cause` is checked too, because the storage seam wraps what
|
|
46
|
+
* the backend threw.
|
|
47
|
+
*/
|
|
48
|
+
export declare function expertMemoryReasonOf(error: unknown): "forbidden" | "memory-record-unknown" | "memory-unavailable" | "invalid-memory" | undefined;
|
|
49
|
+
//# sourceMappingURL=expert-memory.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { QaAccountNotifications, QaAccountNotificationsInput } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* What an account that never opened the notifications form gets.
|
|
4
|
+
*
|
|
5
|
+
* The in-page line is the shipped default of the feature itself, so an
|
|
6
|
+
* untouched account keeps behaving as it did before the form existed. The
|
|
7
|
+
* desktop channel stays off until asked for: raising an operating-system notice
|
|
8
|
+
* is the one choice that leaves the page, and a stand where the browser was
|
|
9
|
+
* never asked must not make it on the account's behalf.
|
|
10
|
+
*/
|
|
11
|
+
export declare function emptyNotifications(): QaAccountNotifications;
|
|
12
|
+
/**
|
|
13
|
+
* Read one stored (or wire-delivered) notifications record into its public
|
|
14
|
+
* shape. Unknown or hand-edited input degrades to the readable subset rather
|
|
15
|
+
* than throwing, mirroring the starters read path: a malformed record must
|
|
16
|
+
* never cost the account its session.
|
|
17
|
+
*/
|
|
18
|
+
export declare function normalizeNotifications(value: unknown): QaAccountNotifications;
|
|
19
|
+
export type QaNotificationsWriteResult = {
|
|
20
|
+
readonly ok: true;
|
|
21
|
+
readonly value: QaAccountNotificationsInput;
|
|
22
|
+
} | {
|
|
23
|
+
readonly ok: false;
|
|
24
|
+
readonly message: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Validate one full-replace notifications write. Both channels are required: a
|
|
28
|
+
* payload that names only one would silently reset the other, and the form
|
|
29
|
+
* always sends the pair it was rendered with.
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateNotificationsWrite(input: unknown): QaNotificationsWriteResult;
|
|
32
|
+
//# sourceMappingURL=notifications.d.ts.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* `(reason: <code>)` marker the account remotes established: the browser maps
|
|
4
4
|
* them to audience-safe copy, while the precise cause stays in the Host log.
|
|
5
5
|
*/
|
|
6
|
-
export type QaPersonalSkillErrorReason = "skills-disabled" | "workspace-unavailable" | "skill-not-found" | "skill-exists" | "skill-conflict" | "skill-name-invalid" | "skill-invalid" | "storage-unavailable";
|
|
6
|
+
export type QaPersonalSkillErrorReason = "skills-disabled" | "workspace-unavailable" | "skill-not-found" | "skill-exists" | "skill-conflict" | "skill-truncated" | "skill-name-invalid" | "skill-invalid" | "storage-unavailable";
|
|
7
7
|
export declare class QaPersonalSkillError extends Error {
|
|
8
8
|
readonly reason: QaPersonalSkillErrorReason;
|
|
9
9
|
constructor(reason: QaPersonalSkillErrorReason, message: string);
|
|
@@ -55,6 +55,12 @@ export interface QaStoredSkill {
|
|
|
55
55
|
readonly contents: QaSkillFileContents | undefined;
|
|
56
56
|
readonly diagnostics: readonly QaSkillDiagnostic[];
|
|
57
57
|
readonly resourceCount: number;
|
|
58
|
+
/**
|
|
59
|
+
* True when `raw` is only the head of the file: an oversized `SKILL.md` is
|
|
60
|
+
* read up to the ceiling, and what follows it was never loaded. A write must
|
|
61
|
+
* not overwrite such a document without saying so out loud.
|
|
62
|
+
*/
|
|
63
|
+
readonly truncated: boolean;
|
|
58
64
|
}
|
|
59
65
|
export interface QaPersonalSkillsOptions {
|
|
60
66
|
readonly getConfig: () => ResolvedQaSurfaceConfig;
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { ContextSnapshotSection } from "@deepseek-ai/dsh-llm";
|
|
2
3
|
import type { PluginLogger } from "@yadsh/dsh-plugin-log";
|
|
3
4
|
import type { QaAccounts } from "./accounts/store.js";
|
|
4
5
|
import type { QaAccountIdentityField, QaAccountProfile, ResolvedQaSurfaceConfig } from "./types.js";
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* This plugin's own producer source kind. The `@deepseek-ai/dsh-llm` source map
|
|
8
|
+
* is merge-extensible and ships no catch-all `plugin` kind, so a producer names
|
|
9
|
+
* itself here. The chat projection turns a `qa-notes`-sourced user message into
|
|
10
|
+
* injected context rather than a chat bubble, and the QA transcript keeps
|
|
11
|
+
* exactly those hidden.
|
|
9
12
|
*/
|
|
10
|
-
export
|
|
13
|
+
export interface QaNotesMessageSource {
|
|
14
|
+
readonly kind: "qa-notes";
|
|
15
|
+
/** Every note is superseded by the next one this plugin injects. */
|
|
16
|
+
readonly form: "snapshot";
|
|
17
|
+
readonly sections: readonly ContextSnapshotSection[];
|
|
18
|
+
}
|
|
19
|
+
declare module "@deepseek-ai/dsh-llm" {
|
|
20
|
+
interface MessageSourceMap {
|
|
21
|
+
"qa-notes": QaNotesMessageSource;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
11
24
|
/** Note name carrying who the assistant is talking to. */
|
|
12
25
|
export declare const QA_IDENTITY_NOTE = "dsh-qa-surface:user-identity";
|
|
13
26
|
/** Note name carrying the deployment's rule about source provenance. */
|
|
@@ -161,8 +161,8 @@ export interface QaDocsSearchRequest {
|
|
|
161
161
|
/**
|
|
162
162
|
* Search the documentation tree of one chat workspace.
|
|
163
163
|
*
|
|
164
|
-
* Matching
|
|
165
|
-
* line, not a file, so the caller can cite it. The result is bounded twice —
|
|
164
|
+
* Matching uses one case-insensitive, grep-style regular expression, line by
|
|
165
|
+
* line: a hit is a line, not a file, so the caller can cite it. The result is bounded twice —
|
|
166
166
|
* by `limit` hits and by the byte budget of the rendered report — and reports
|
|
167
167
|
* which bound cut it short instead of silently dropping matches.
|
|
168
168
|
* @throws QaDocsError when the tree is missing, the scope path is wrong, or the query is empty.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Agent } from "@deepseek-ai/dsh-agent";
|
|
2
|
+
import type { QaQueueStatus } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Chat turns the stand is answering right now.
|
|
5
|
+
*
|
|
6
|
+
* `running` is the harness's own definition of an active request: an agent
|
|
7
|
+
* enters it when waking input starts the driver and leaves it when the driver
|
|
8
|
+
* retires, which is what `agent/status` reports. Reading the live agents rather
|
|
9
|
+
* than counting the plugin's own sends is what keeps the places honest — a
|
|
10
|
+
* browser that closes mid-answer, an answer started through the HTTP API and a
|
|
11
|
+
* turn resumed by another surface all occupy a place, and none of them has to
|
|
12
|
+
* report it here. Only top-level agents count: a delegated expert's requests
|
|
13
|
+
* belong to the chat turn that delegated them, so charging both would bill one
|
|
14
|
+
* conversation twice.
|
|
15
|
+
*
|
|
16
|
+
* The count is of the model's load, not of this plugin's traffic: a turn the
|
|
17
|
+
* native assistant runs occupies a place exactly like a QA question does,
|
|
18
|
+
* because the ceiling exists for the card that is busy either way.
|
|
19
|
+
*/
|
|
20
|
+
export declare function qaActiveRequests(agents: readonly {
|
|
21
|
+
readonly status: Agent["status"];
|
|
22
|
+
}[]): number;
|
|
23
|
+
/**
|
|
24
|
+
* Judge the live count against the deployment's ceiling. A ceiling of 0 sets no
|
|
25
|
+
* limit, so the stand is never full and nobody waits.
|
|
26
|
+
*
|
|
27
|
+
* There is deliberately no "ahead of you" number: `active` includes this
|
|
28
|
+
* visitor's own turns, and a stand that cannot say which place belongs to whom
|
|
29
|
+
* should not pretend to know who is waiting behind whom.
|
|
30
|
+
*/
|
|
31
|
+
export declare function qaQueueStatus(limit: number, active: number): QaQueueStatus;
|
|
32
|
+
//# sourceMappingURL=request-queue.d.ts.map
|
|
@@ -5,6 +5,23 @@
|
|
|
5
5
|
* browser build must not pull the Host config surface (schemastery) into the
|
|
6
6
|
* page just to learn the namespace name.
|
|
7
7
|
*/
|
|
8
|
-
/**
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Settings namespace the QA surface owns and its card binds to.
|
|
10
|
+
*
|
|
11
|
+
* The namespace is the profile entry id the bundle declares in
|
|
12
|
+
* `cordis.patch.yml`, not a name this plugin picks: the Host derives the
|
|
13
|
+
* configuration form of every entry from its volatile `Config` fields and serves
|
|
14
|
+
* it under that id.
|
|
15
|
+
*/
|
|
16
|
+
export declare const QA_SURFACE_SETTINGS_NAMESPACE = "dsh-qa-surface";
|
|
17
|
+
/**
|
|
18
|
+
* The key of the seat this card takes on the Host's Plugins page.
|
|
19
|
+
*
|
|
20
|
+
* `plugins.row.config` is keyed `<package name>#<row id>`, so the two names the
|
|
21
|
+
* page joins are this bundle's `package.json.name` and the profile entry id
|
|
22
|
+
* above. Neither is a name this plugin picks: a key that drifts from that pair
|
|
23
|
+
* leaves the row without its configure control and the card off the page, with
|
|
24
|
+
* nothing said about it.
|
|
25
|
+
*/
|
|
26
|
+
export declare const QA_SURFACE_ROW_CONFIG_KEY = "@yadsh/dsh-qa-surface#dsh-qa-surface";
|
|
10
27
|
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import type { PluginLogger } from "@yadsh/dsh-plugin-log";
|
|
3
|
+
/**
|
|
4
|
+
* Write a failed turn where the operator of the stand reads it.
|
|
5
|
+
*
|
|
6
|
+
* The chat row of a failed turn carries the failure code and nothing else: the
|
|
7
|
+
* provider's own message is deliberately kept out of the browser, and the
|
|
8
|
+
* session journal that holds it is a zstd archive nobody reads over an
|
|
9
|
+
* operator's shoulder. So a stand whose provider adapters never registered —
|
|
10
|
+
* every turn ending `NO_ADAPTER` — shows its tester «Помощнику не удалось
|
|
11
|
+
* завершить ответ.» and stays undiagnosable until someone decodes frames by
|
|
12
|
+
* hand. This listener puts the facts an operator needs — the chat, the session
|
|
13
|
+
* that died inside it, the turn, the code, and the provider the Host was asked
|
|
14
|
+
* to route to — into the plugin's own daily log, which is mirrored to the
|
|
15
|
+
* container's stdout from `warn` up.
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerTurnFailureLog(ctx: Context, logger: PluginLogger, resolveChat: (sessionId: string) => string | undefined): () => void;
|
|
18
|
+
//# sourceMappingURL=turn-failure-log.d.ts.map
|