@yadsh/dsh-qa-surface 0.18.0 → 0.20.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 +201 -22
- package/lib/access/model-choices.js +103 -0
- package/lib/access/model-choices.js.map +1 -0
- package/lib/access/model-policy.js +79 -7
- package/lib/access/model-policy.js.map +1 -1
- package/lib/access/model.js +29 -1
- package/lib/access/model.js.map +1 -1
- package/lib/access/queue-policy.js +36 -0
- package/lib/access/queue-policy.js.map +1 -0
- package/lib/access/service.js +124 -7
- package/lib/access/service.js.map +1 -1
- package/lib/account-remotes.js +10 -1
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/database.js +44 -3
- package/lib/accounts/database.js.map +1 -1
- package/lib/accounts/store.js +28 -0
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/service.js +6 -1
- package/lib/admin/service.js.map +1 -1
- package/lib/attachment-access.js +147 -0
- package/lib/attachment-access.js.map +1 -0
- package/lib/chat-sharing/search.js +89 -0
- package/lib/chat-sharing/search.js.map +1 -0
- package/lib/chat-sharing/transport.js +8 -9
- package/lib/chat-sharing/transport.js.map +1 -1
- package/lib/client/QaAccountsController.js +43 -8
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaSessionController.js +106 -32
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +64 -5
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/admin/ModelPolicyEditor.js +28 -2
- package/lib/client/admin/ModelPolicyEditor.js.map +1 -1
- package/lib/client/admin/RoleEditor.js +18 -1
- package/lib/client/admin/RoleEditor.js.map +1 -1
- package/lib/client/admin/pages/SkillFiles.js +1 -1
- package/lib/client/admin/pages/SkillFiles.js.map +1 -1
- package/lib/client/admin/pages/Users.js +36 -16
- package/lib/client/admin/pages/Users.js.map +1 -1
- package/lib/client/admin/styles.js +3 -0
- package/lib/client/admin/styles.js.map +1 -1
- package/lib/client/code-source-styles.js +12 -0
- package/lib/client/code-source-styles.js.map +1 -0
- package/lib/client/components/QaChangelog.js +96 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaChatActions.js +36 -14
- package/lib/client/components/QaChatActions.js.map +1 -1
- package/lib/client/components/QaCodeSourcePicker.js +18 -0
- package/lib/client/components/QaCodeSourcePicker.js.map +1 -0
- package/lib/client/components/QaComposer.js +11 -12
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaComposerSettings.js +202 -0
- package/lib/client/components/QaComposerSettings.js.map +1 -0
- package/lib/client/components/QaFormItem.js +74 -38
- package/lib/client/components/QaFormItem.js.map +1 -1
- package/lib/client/components/QaHistoryCatalog.js +261 -0
- package/lib/client/components/QaHistoryCatalog.js.map +1 -0
- package/lib/client/components/QaInputForm.js +115 -32
- package/lib/client/components/QaInputForm.js.map +1 -1
- package/lib/client/components/QaModelSelector.js +21 -0
- package/lib/client/components/QaModelSelector.js.map +1 -0
- package/lib/client/components/QaRequestWait.js +15 -0
- package/lib/client/components/QaRequestWait.js.map +1 -0
- package/lib/client/components/QaSidebar.js +25 -24
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/composer-settings-styles.js +21 -0
- package/lib/client/composer-settings-styles.js.map +1 -0
- package/lib/client/forms-styles.js +35 -11
- package/lib/client/forms-styles.js.map +1 -1
- package/lib/client/history-organization-styles.js +31 -0
- package/lib/client/history-organization-styles.js.map +1 -0
- package/lib/client/history-organization.js +155 -0
- package/lib/client/history-organization.js.map +1 -0
- package/lib/client/index.js +13 -2
- package/lib/client/index.js.map +1 -1
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/request-wait-styles.js +7 -0
- package/lib/client/request-wait-styles.js.map +1 -0
- package/lib/client/settings/sections/attachments.js +7 -1
- package/lib/client/settings/sections/attachments.js.map +1 -1
- package/lib/client/settings/sections/session.js +1 -1
- package/lib/client/settings/sections/session.js.map +1 -1
- package/lib/client/styles.js +20 -1
- package/lib/client/styles.js.map +1 -1
- package/lib/client/types.js.map +1 -1
- package/lib/client/use-chat-code-source.js +156 -0
- package/lib/client/use-chat-code-source.js.map +1 -0
- package/lib/client/use-history-organization.js +48 -0
- package/lib/client/use-history-organization.js.map +1 -0
- package/lib/client/use-model-selection.js +96 -0
- package/lib/client/use-model-selection.js.map +1 -0
- package/lib/client/use-qa-file-drop.js +81 -0
- package/lib/client/use-qa-file-drop.js.map +1 -0
- package/lib/client/user-settings/IntegrationTokensPage.js +42 -6
- package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
- package/lib/client/user-settings/UserSettingsDialog.js +1 -1
- package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
- package/lib/client.js +131 -27
- package/lib/client.js.map +1 -1
- package/lib/code-source-selection.js +102 -0
- package/lib/code-source-selection.js.map +1 -0
- package/lib/config-resolvers/accounts.js +26 -1
- package/lib/config-resolvers/accounts.js.map +1 -1
- package/lib/config-resolvers/defaults.js +5 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/integration.js +8 -1
- package/lib/config-resolvers/integration.js.map +1 -1
- package/lib/config-resolvers/session.js +2 -0
- package/lib/config-resolvers/session.js.map +1 -1
- package/lib/config.js +51 -3
- package/lib/config.js.map +1 -1
- package/lib/enforcement/skill-policy.js +37 -2
- package/lib/enforcement/skill-policy.js.map +1 -1
- package/lib/filesystem-intent.js +39 -0
- package/lib/filesystem-intent.js.map +1 -0
- package/lib/forms/attachments.js +18 -2
- package/lib/forms/attachments.js.map +1 -1
- package/lib/forms/errors.js +6 -1
- package/lib/forms/errors.js.map +1 -1
- package/lib/forms/gate.js +28 -2
- package/lib/forms/gate.js.map +1 -1
- package/lib/forms/schema-errors.js +47 -0
- package/lib/forms/schema-errors.js.map +1 -0
- package/lib/forms/schema.js +29 -20
- package/lib/forms/schema.js.map +1 -1
- package/lib/index.js +189 -84
- package/lib/index.js.map +1 -1
- package/lib/integration/http.js +9 -10
- package/lib/integration/http.js.map +1 -1
- package/lib/integration/service.js +9 -0
- package/lib/integration/service.js.map +1 -1
- package/lib/personal-skills/provider.js +9 -1
- package/lib/personal-skills/provider.js.map +1 -1
- package/lib/personal-skills/service.js +4 -0
- package/lib/personal-skills/service.js.map +1 -1
- package/lib/personal-skills/shared-seed.js +65 -0
- package/lib/personal-skills/shared-seed.js.map +1 -0
- package/lib/prompt-notes.js +19 -1
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/collector.js +1 -0
- package/lib/provenance/collector.js.map +1 -1
- package/lib/provenance/extractors.js +6 -1
- package/lib/provenance/extractors.js.map +1 -1
- package/lib/qa-tools/catalog.js +18 -1
- package/lib/qa-tools/catalog.js.map +1 -1
- package/lib/qa-tools/code-files.js +207 -0
- package/lib/qa-tools/code-files.js.map +1 -0
- package/lib/qa-tools/code-tools.js +158 -0
- package/lib/qa-tools/code-tools.js.map +1 -0
- package/lib/qa-tools/docs-tools.js +49 -12
- package/lib/qa-tools/docs-tools.js.map +1 -1
- package/lib/qa-tools/index.js +4 -0
- package/lib/qa-tools/index.js.map +1 -1
- package/lib/qa-tools/request-user-form.js +27 -7
- package/lib/qa-tools/request-user-form.js.map +1 -1
- package/lib/request-scheduler.js +262 -0
- package/lib/request-scheduler.js.map +1 -0
- package/lib/resolve-config.js +9 -1
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +62 -56
- package/lib/secure-session.js.map +1 -1
- package/lib/session-create.js +125 -0
- package/lib/session-create.js.map +1 -0
- package/lib/session-model.js +43 -1
- package/lib/session-model.js.map +1 -1
- package/lib/shared/history-folder.js +18 -0
- package/lib/shared/history-folder.js.map +1 -0
- package/lib/typert.host.js +793 -159
- package/lib/typert.remote-client.d.ts +19 -7
- package/lib/typert.remote-client.js +726 -148
- package/lib/types/access/model-choices.d.ts +16 -0
- package/lib/types/access/model-policy.d.ts +13 -7
- package/lib/types/access/model.d.ts +9 -0
- package/lib/types/access/queue-policy.d.ts +30 -0
- package/lib/types/access/service.d.ts +27 -0
- package/lib/types/account-remotes.d.ts +5 -4
- package/lib/types/accounts/database.d.ts +5 -0
- package/lib/types/accounts/store.d.ts +6 -0
- package/lib/types/attachment-access.d.ts +29 -0
- package/lib/types/chat-sharing/search.d.ts +5 -0
- package/lib/types/chat-sharing/transport.d.ts +1 -1
- package/lib/types/client/QaAccountsController.d.ts +3 -1
- package/lib/types/client/QaSessionController.d.ts +31 -14
- package/lib/types/client/QaSurface.d.ts +2 -0
- package/lib/types/client/admin/ModelPolicyEditor.d.ts +2 -0
- package/lib/types/client/code-source-styles.d.ts +2 -0
- package/lib/types/client/components/QaChatActions.d.ts +3 -1
- package/lib/types/client/components/QaCodeSourcePicker.d.ts +9 -0
- package/lib/types/client/components/QaComposer.d.ts +2 -0
- package/lib/types/client/components/QaComposerSettings.d.ts +16 -0
- package/lib/types/client/components/QaFormItem.d.ts +4 -2
- package/lib/types/client/components/QaHistoryCatalog.d.ts +19 -0
- package/lib/types/client/components/QaInputForm.d.ts +3 -2
- package/lib/types/client/components/QaModelSelector.d.ts +4 -0
- package/lib/types/client/components/QaRequestWait.d.ts +6 -0
- package/lib/types/client/components/QaSidebar.d.ts +3 -0
- package/lib/types/client/composer-settings-styles.d.ts +2 -0
- package/lib/types/client/forms-styles.d.ts +1 -1
- package/lib/types/client/history-organization-styles.d.ts +3 -0
- package/lib/types/client/history-organization.d.ts +38 -0
- package/lib/types/client/project-session-state.d.ts +2 -4
- package/lib/types/client/request-wait-styles.d.ts +2 -0
- package/lib/types/client/types.d.ts +15 -7
- package/lib/types/client/use-chat-code-source.d.ts +20 -0
- package/lib/types/client/use-history-organization.d.ts +8 -0
- package/lib/types/client/use-model-selection.d.ts +24 -0
- package/lib/types/client/use-qa-file-drop.d.ts +12 -0
- package/lib/types/code-source-selection.d.ts +28 -0
- package/lib/types/code-sources.js +2 -0
- package/lib/types/code-sources.js.map +1 -0
- package/lib/types/config-resolvers/integration.d.ts +7 -1
- package/lib/types/filesystem-intent.d.ts +12 -0
- package/lib/types/forms/attachments.d.ts +5 -2
- package/lib/types/forms/errors.d.ts +3 -2
- package/lib/types/forms/gate.d.ts +4 -2
- package/lib/types/forms/schema-errors.d.ts +7 -0
- package/lib/types/forms/types.d.ts +14 -0
- package/lib/types/index.d.ts +41 -15
- package/lib/types/integration/http.d.ts +1 -3
- package/lib/types/integration/service.d.ts +2 -0
- package/lib/types/personal-skills/shared-seed.d.ts +12 -0
- package/lib/types/prompt-notes.d.ts +5 -1
- package/lib/types/qa-tools/catalog.d.ts +4 -3
- package/lib/types/qa-tools/code-files.d.ts +59 -0
- package/lib/types/qa-tools/code-tools.d.ts +7 -0
- package/lib/types/qa-tools/docs-tools.d.ts +4 -0
- package/lib/types/qa-tools/index.d.ts +3 -1
- package/lib/types/qa-tools/request-user-form.d.ts +1 -1
- package/lib/types/request-scheduler.d.ts +47 -0
- package/lib/types/secure-session.d.ts +12 -26
- package/lib/types/session-create.d.ts +29 -0
- package/lib/types/session-model.d.ts +11 -2
- package/lib/types/shared/history-folder.d.ts +4 -0
- package/lib/types/types/accounts.d.ts +11 -0
- package/lib/types/types/capability.d.ts +31 -4
- package/lib/types/types/code-sources.d.ts +12 -0
- package/lib/types/types/config.d.ts +20 -0
- package/lib/types/types/session.d.ts +8 -0
- package/lib/types/types.d.ts +1 -0
- package/lib/types/user-workspace.d.ts +4 -6
- package/lib/user-workspace.js +20 -71
- package/lib/user-workspace.js.map +1 -1
- package/package.json +13 -10
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const QA_FORM_STYLES = "\n.dsh-qa-form{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;padding:16px;
|
|
1
|
+
export declare const QA_FORM_STYLES = "\n.dsh-qa-form{box-sizing:border-box;min-width:0;max-height:min(720px,calc(100dvh - 160px));overflow:hidden;overflow-wrap:anywhere;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:16px;display:flex;flex-direction:column;font:inherit;font-size:14px;line-height:20px}\n.dsh-qa-form *{box-sizing:border-box}.dsh-qa-form p,.dsh-qa-form h3,.dsh-qa-form h4{margin:0}\n.dsh-qa-form .title-3{font-size:16px;line-height:24px;font-weight:600}.dsh-qa-form .title-4{font-size:14px;line-height:20px;font-weight:600}.dsh-qa-form .caption-5{font-size:12px;line-height:16px;font-weight:400}\n.dsh-qa-form>header{padding:16px 24px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-shrink:0}.dsh-qa-form__heading{min-width:0;display:grid;gap:4px}.dsh-qa-form__heading strong{display:block;text-wrap:pretty}\n.dsh-qa-form__description{color:var(--dsw-alias-label-secondary);text-wrap:pretty}.dsh-qa-form__hint{font-size:12px;line-height:16px;color:var(--dsw-alias-label-secondary)}\n.dsh-qa-form__badge{display:inline-flex;flex-shrink:0;align-items:center;border-radius:999px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);padding:4px 8px;white-space:nowrap}\n.dsh-qa-form__status{display:flex;flex-wrap:wrap;gap:4px 16px;padding:0 24px 12px;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:16px;flex-shrink:0}\n.dsh-qa-form>nav{display:flex;gap:8px;overflow:auto;flex-shrink:0;padding:0 24px 16px;scrollbar-width:thin}.dsh-qa-form>nav button{display:flex;align-items:center;gap:8px;white-space:nowrap;font-weight:500;background:transparent}\n.dsh-qa-form__step-number{width:24px;height:24px;border-radius:999px;display:inline-grid;place-items:center;background:var(--dsw-alias-bg-module-platform);font-size:12px;line-height:16px;flex-shrink:0}\n.dsh-qa-form>nav button[aria-current=step]{background:color-mix(in srgb,var(--dsw-alias-state-business-primary) 12%,transparent);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-primary)}\n.dsh-qa-form>nav button[aria-current=step] .dsh-qa-form__step-number{background:color-mix(in srgb,var(--dsw-alias-state-business-primary) 24%,transparent)}\n.dsh-qa-form__content{overflow:auto;min-height:0;padding:0 24px 16px;overscroll-behavior:contain;scrollbar-gutter:stable}.dsh-qa-form__step{display:grid;gap:16px}.dsh-qa-form__step-heading{display:grid;gap:4px}\n.dsh-qa-form__item{min-width:0;margin:0;padding:16px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-3)}\n.dsh-qa-form__item-title{max-width:100%;padding:0 4px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:var(--dsw-alias-label-primary)}\n.dsh-qa-form__item>.dsh-qa-form__description,.dsh-qa-form__item>.dsh-qa-form__hint{margin-bottom:8px}.dsh-qa-form__answer{display:block}\n.dsh-qa-form input[type=text],.dsh-qa-form textarea{display:block;min-width:0;width:100%;font:inherit;color:inherit;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:8px 12px;min-height:40px}.dsh-qa-form textarea{resize:vertical;min-height:96px}\n.dsh-qa-form__choices{display:grid;gap:8px}.dsh-qa-form__choice{display:grid;grid-template-columns:16px minmax(0,1fr);align-items:start;gap:12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:12px;background:var(--dsw-alias-bg-layer-2);cursor:pointer}\n.dsh-qa-form__choice:hover{border-color:var(--dsw-alias-label-dimmed)}.dsh-qa-form__choice.is-selected{border-color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb,var(--dsw-alias-state-business-primary) 8%,var(--dsw-alias-bg-layer-2))}\n.dsh-qa-form__choice input{width:16px;height:16px;margin:2px 0 0;accent-color:var(--dsw-alias-state-business-primary)}.dsh-qa-form__choice-copy{display:grid;gap:4px;min-width:0}.dsh-qa-form__choice-copy>.title-4{display:flex;align-items:center;gap:8px;flex-wrap:wrap}\n.dsh-qa-form__recommended{color:var(--dsw-alias-state-business-primary);font-weight:500}.dsh-qa-form__other{display:grid;gap:8px;padding-top:4px}\n.dsh-qa-form button,.dsh-qa-form__picker{appearance:none;font:inherit;font-weight:500;line-height:20px;color:inherit;background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:8px 12px;min-height:40px;cursor:pointer;text-align:center;display:inline-flex;align-items:center;justify-content:center;gap:8px}\n.dsh-qa-form button:hover,.dsh-qa-form__picker:hover{border-color:var(--dsw-alias-label-dimmed)}.dsh-qa-form button:disabled,.dsh-qa-form .is-disabled{opacity:.5;cursor:default}\n.dsh-qa-form button:focus-visible,.dsh-qa-form input:focus-visible,.dsh-qa-form textarea:focus-visible,.dsh-qa-form__picker:focus-within{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}\n.dsh-qa-form .dsh-qa-form__primary,.dsh-qa-form__dropzone>.dsh-qa-form__picker{font-weight:600;border-color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb,var(--dsw-alias-state-business-primary) 16%,var(--dsw-alias-bg-layer-2))}\n.dsh-qa-form .dsh-qa-form__text-button{background:transparent;justify-self:start}.dsh-qa-form__files{display:grid;gap:8px;margin-top:12px;padding:16px;border:1px dashed var(--dsw-alias-label-dimmed);border-radius:8px;background:var(--dsw-alias-bg-layer-2)}\n.dsh-qa-form__file-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}.dsh-qa-form__dropzone{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding-top:4px}.dsh-qa-form__picker{position:relative;max-width:100%}\n.dsh-qa-form__picker input[type=file]{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;clip-path:inset(50%)}\n.dsh-qa-form__file-list{display:grid;gap:8px;padding:0;margin:4px 0 0;list-style:none}.dsh-qa-form__file-row,.dsh-qa-form__upload{display:flex;align-items:center;gap:12px;flex-wrap:wrap;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:12px;background:var(--dsw-alias-bg-layer-3)}\n.dsh-qa-form__file-copy{display:grid;gap:4px;min-width:0;flex:1 1 160px}.dsh-qa-form__file-actions{display:flex;gap:8px;flex-wrap:wrap}.dsh-qa-form__file-actions button,.dsh-qa-form__picker--small{font-size:12px;line-height:16px;min-height:32px;padding:4px 8px}\n.dsh-qa-form__field-errors{display:grid;gap:4px;margin-top:8px;color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:16px}.dsh-qa-form [aria-invalid=true]{border-color:var(--dsw-alias-state-error-primary)}\n.dsh-qa-form [role=alert]{display:grid;gap:8px;color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-state-error-primary);padding:12px;border-radius:8px;margin-bottom:16px}\n.dsh-qa-form>footer{display:grid;gap:8px;padding:12px 24px 16px;flex-shrink:0;background:var(--dsw-alias-bg-layer-2)}.dsh-qa-form__actions{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.dsh-qa-form__navigation,.dsh-qa-form__secondary{display:flex;gap:8px;flex-wrap:wrap}\n.dsh-qa-form__review{display:grid;gap:16px}.dsh-qa-form__review-step{display:grid;gap:12px}.dsh-qa-form__review-item{display:grid;gap:8px;padding:16px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-3);white-space:pre-wrap}\n.dsh-qa-form--summary{padding:16px 24px;flex-direction:row;align-items:center;justify-content:space-between;gap:16px}.dsh-qa-form--summary>div:first-child{display:grid;gap:4px;min-width:0}\n@media(max-width:600px){.dsh-qa-form{max-height:calc(100dvh - 160px);border-radius:12px}.dsh-qa-form>header{padding:12px 16px;gap:8px}.dsh-qa-form__status{padding:0 16px 12px}.dsh-qa-form>nav{padding:0 16px 12px}.dsh-qa-form__content{padding:0 16px 12px}.dsh-qa-form__item,.dsh-qa-form__files{padding:12px}.dsh-qa-form>footer{padding:12px 16px}.dsh-qa-form__actions{flex-direction:column;align-items:stretch}.dsh-qa-form__navigation{display:grid;grid-template-columns:1fr 1fr}.dsh-qa-form__secondary{justify-content:space-between}.dsh-qa-form__secondary button{font-size:12px;line-height:16px;min-height:32px;padding:4px 8px}.dsh-qa-form--summary{padding:12px 16px;align-items:flex-start}.dsh-qa-form__file-row{align-items:flex-start}}\n";
|
|
2
2
|
//# sourceMappingURL=forms-styles.d.ts.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { QaHistoryFolderTarget } from "../types/accounts.js";
|
|
2
|
+
/** Browser-only presentation metadata. No entry is a filesystem path. */
|
|
3
|
+
export interface QaHistoryFolder {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly collapsed: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface QaHistoryOrganization {
|
|
9
|
+
readonly folders: readonly QaHistoryFolder[];
|
|
10
|
+
readonly assignments: Readonly<Record<string, string>>;
|
|
11
|
+
readonly pinned: readonly string[];
|
|
12
|
+
readonly order: readonly string[];
|
|
13
|
+
/** Routing was imported, or the reader explicitly chose a folder/root. */
|
|
14
|
+
readonly folderHandled?: readonly string[];
|
|
15
|
+
}
|
|
16
|
+
export declare const EMPTY_HISTORY: QaHistoryOrganization;
|
|
17
|
+
/** Treat storage as untrusted and tolerate older, partial or damaged values. */
|
|
18
|
+
export declare function parseHistoryOrganization(raw: string | null): QaHistoryOrganization;
|
|
19
|
+
export declare function historyFolderOf(state: QaHistoryOrganization, id: string): string | null;
|
|
20
|
+
/** A removed folder releases its chats, including pinned chats, to the root. */
|
|
21
|
+
export declare function removeHistoryFolder(state: QaHistoryOrganization, folderId: string): QaHistoryOrganization;
|
|
22
|
+
/** Insert relative to the visible target without losing filtered or unloaded ids. */
|
|
23
|
+
export declare function insertHistoryId(ids: readonly string[], id: string, before?: string): string[];
|
|
24
|
+
export type QaHistoryDestination = {
|
|
25
|
+
readonly kind: "pinned";
|
|
26
|
+
} | {
|
|
27
|
+
readonly kind: "folder";
|
|
28
|
+
readonly id: string | null;
|
|
29
|
+
};
|
|
30
|
+
/** Moving a pinned chat into a folder unpins it; pinning retains its folder. */
|
|
31
|
+
export declare function moveHistoryChat(state: QaHistoryOrganization, id: string, destination: QaHistoryDestination, visibleOrder: readonly string[], before?: string): QaHistoryOrganization;
|
|
32
|
+
/** Apply server defaults once; subsequent manual moves and deletions win. */
|
|
33
|
+
export declare function importIntegrationFolders(state: QaHistoryOrganization, hints: Readonly<Record<string, QaHistoryFolderTarget>>, visibleIds: ReadonlySet<string>): QaHistoryOrganization;
|
|
34
|
+
/** Unordered rows keep recency order until the reader arranges them. */
|
|
35
|
+
export declare function orderHistoryRows<T extends {
|
|
36
|
+
readonly id: string;
|
|
37
|
+
}>(rows: readonly T[], order: readonly string[]): T[];
|
|
38
|
+
//# sourceMappingURL=history-organization.d.ts.map
|
|
@@ -40,10 +40,8 @@ export interface QaBoundProjectionInput {
|
|
|
40
40
|
readonly questions: readonly QaPendingQuestion[];
|
|
41
41
|
readonly operationError: string | null;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* no row to carry the refusal on. Distinct from `queue`, the waiting rows of
|
|
46
|
-
* this chat.
|
|
43
|
+
* Server admission status for this waiting chat, or a legacy Host's
|
|
44
|
+
* pre-send refusal. Distinct from `queue`, the next messages of this chat.
|
|
47
45
|
*/
|
|
48
46
|
readonly requestQueue: QaQueueStatus | null;
|
|
49
47
|
readonly policyReady: boolean;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const requestWaitStyles = "\n.dsh-qa-request-wait{display:flex;align-items:center;gap:8px;align-self:flex-start;width:fit-content;max-width:100%;box-sizing:border-box;margin:0 0 10px;padding:6px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.45;overflow-wrap:anywhere}\n.dsh-qa-request-wait__spinner{width:12px;height:12px;flex:none;border:1.5px solid var(--dsw-alias-border-l2);border-top-color:var(--dsw-alias-label-secondary);border-radius:50%;animation:dsh-qa-request-spin 1s linear infinite}\n@keyframes dsh-qa-request-spin{to{transform:rotate(360deg)}}\n@media(prefers-reduced-motion:reduce){.dsh-qa-request-wait__spinner{animation:none}}\n";
|
|
2
|
+
//# sourceMappingURL=request-wait-styles.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 { QaAccountNotificationsInput, QaAccountProfileInput, QaAccountSession, QaAccountStartersInput, QaAccountStarter, QaAccountUserPublic, QaAccessAdminSnapshot, QaApprovalDecision, QaClaimResult, QaLockdownProof, QaModelCatalogEntry, QaOwnershipEntry, QaPasswordResetRequest, QaPendingApproval, QaPendingQuestion, QaQuestionAnswerItem, QaQueueStatus, QaIssuedServiceToken, QaServiceTokenCreateInput, QaServiceTokenSummary, QaSessionState, QaSkillDocument, QaSkillDraftInput, QaSkillRemoval, QaSkillSummary, QaSkillToolDescriptor, QaSkillValidation, QaSourceFilePreview, QaTurnSources, QaWhoamiResult, QaDocumentPreview, QaSpreadsheetPreviewSelection, QaWorkspaceFile, QaWorkspaceFileChunk, QaDocumentWorkflowStatus, QaWorkspaceListing, QaCapabilitySelection, QaCurrentAccess, QaSessionAccess, QaSkillActivationRecord, QaSkillAssignmentOverride, QaSubrole, QaUserAccess, QaAdminAuditEvent, QaAdminOverview, QaAdminPage, QaAdminSkillScope, QaAdminSkillsView, QaAdminUserDetail, QaAdminUserRow, QaAdminUserUpdate, QaAuditQuery, QaConversationDetail, QaConversationDeletion, QaConversationQuery, QaConversationReview, QaConversationReviewInput, QaConversationSummary, QaExpertMemoryDraft, QaExpertMemoryPage, QaExpertMemoryRecord, QaExpertMemoryScope, QaFeedbackQuery, QaFeedbackRow, QaMessageFeedback, QaMessageFeedbackInput, QaQualityMetrics, QaReviewQueueItem, QaReviewQueueRow, QaSlashCatalog, QaSlashExecution, QaSlashSubmitAttachment, QaUserQuery } from "../types.js";
|
|
4
|
+
import type { QaAccountNotificationsInput, QaAccountProfileInput, QaAccountSession, QaAccountStartersInput, QaAccountStarter, QaAccountUserPublic, QaAccessAdminSnapshot, QaApprovalDecision, QaClaimResult, QaLockdownProof, QaModelCatalogEntry, QaModelOptions, QaOwnershipEntry, QaPasswordResetRequest, QaPendingApproval, QaPendingQuestion, QaQuestionAnswerItem, QaQueueStatus, QaIssuedServiceToken, QaServiceTokenCreateInput, QaServiceTokenSummary, QaSessionState, QaSkillDocument, QaSkillDraftInput, QaSkillRemoval, QaSkillSummary, QaSkillToolDescriptor, QaSkillValidation, QaSourceFilePreview, QaTurnSources, QaWhoamiResult, QaDocumentPreview, QaSpreadsheetPreviewSelection, QaWorkspaceFile, QaWorkspaceFileChunk, QaDocumentWorkflowStatus, QaWorkspaceListing, QaCapabilitySelection, QaCurrentAccess, QaSessionAccess, QaSkillActivationRecord, QaSkillAssignmentOverride, QaSubrole, QaUserAccess, QaAdminAuditEvent, QaAdminOverview, QaAdminPage, QaAdminSkillScope, QaAdminSkillsView, QaAdminUserDetail, QaAdminUserRow, QaAdminUserUpdate, QaAuditQuery, QaConversationDetail, QaConversationDeletion, QaConversationQuery, QaConversationReview, QaConversationReviewInput, QaConversationSummary, QaExpertMemoryDraft, QaExpertMemoryPage, QaExpertMemoryRecord, QaExpertMemoryScope, QaFeedbackQuery, QaFeedbackRow, QaMessageFeedback, QaMessageFeedbackInput, QaQualityMetrics, QaReviewQueueItem, QaReviewQueueRow, QaSlashCatalog, QaSlashExecution, QaSlashSubmitAttachment, QaUserQuery } 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. */
|
|
@@ -37,12 +37,13 @@ export type QaCreateSession = (token: string, subroleId: string | null, adminPre
|
|
|
37
37
|
export type QaForkSession = (token: string, sourceId: string, answerSeq: number) => Promise<RemoteResult<string>>;
|
|
38
38
|
/**
|
|
39
39
|
* The Host's live read of the request ceiling (`qaSurface/queueStatus`), asked
|
|
40
|
-
* per send
|
|
41
|
-
*
|
|
40
|
+
* per send and for the current waiting chat. Supplying a session id requires
|
|
41
|
+
* current account read access; global reads expose counts only.
|
|
42
42
|
*/
|
|
43
|
-
export type QaQueueStatusRemote = () => Promise<RemoteResult<QaQueueStatus>>;
|
|
43
|
+
export type QaQueueStatusRemote = (token?: string, sessionId?: string) => Promise<RemoteResult<QaQueueStatus>>;
|
|
44
44
|
/** Role selector plus administrator mutation channel. */
|
|
45
45
|
export interface QaAccessApi {
|
|
46
|
+
userModels?(token: string, sessionId: string | null, subroleId: string | null, adminPreview: boolean): Promise<RemoteResult<QaModelOptions>>;
|
|
46
47
|
current(token: string): Promise<RemoteResult<QaCurrentAccess>>;
|
|
47
48
|
session(token: string, sessionId: string): Promise<RemoteResult<QaSessionAccess>>;
|
|
48
49
|
admin(token: string): Promise<RemoteResult<QaAccessAdminSnapshot>>;
|
|
@@ -337,6 +338,8 @@ export type QaIntegrationTokenResult<Value> = {
|
|
|
337
338
|
};
|
|
338
339
|
/** The integration-token section with the account token bound at the call site. */
|
|
339
340
|
export interface QaIntegrationTokenApi {
|
|
341
|
+
readonly historyStorageKey?: string;
|
|
342
|
+
setFolder?(tokenId: string, folder: import("../types/accounts.js").QaHistoryFolderTarget | null): Promise<QaIntegrationTokenResult<null>>;
|
|
340
343
|
/**
|
|
341
344
|
* Whether this deployment can mint at all. A token is a credential for the
|
|
342
345
|
* HTTP API, so when that API is off the page explains the state instead of
|
|
@@ -351,6 +354,9 @@ export interface QaIntegrationTokenApi {
|
|
|
351
354
|
}
|
|
352
355
|
/** Account remotes exposed by the plugin's own typert namespace. */
|
|
353
356
|
export interface QaAccountsApi {
|
|
357
|
+
accountsSetServiceTokenHistoryFolder?(token: string, tokenId: string, folder: import("../types/accounts.js").QaHistoryFolderTarget | null): Promise<RemoteResult<{
|
|
358
|
+
readonly updated: boolean;
|
|
359
|
+
}>>;
|
|
354
360
|
accountsSetServiceTokenClarifications?(token: string, tokenId: string, allowed: boolean): Promise<RemoteResult<{
|
|
355
361
|
readonly updated: boolean;
|
|
356
362
|
}>>;
|
|
@@ -362,9 +368,7 @@ export interface QaAccountsApi {
|
|
|
362
368
|
accountsLogin(email: string, password: string): Promise<RemoteResult<QaAccountSession>>;
|
|
363
369
|
accountsRegister(email: string, password: string): Promise<RemoteResult<QaAccountSession>>;
|
|
364
370
|
accountsClaimSessions(token: string, sessionIds: readonly string[]): Promise<RemoteResult<QaClaimResult>>;
|
|
365
|
-
accountsOwnedSessions(token: string): Promise<RemoteResult<
|
|
366
|
-
readonly ids: readonly string[];
|
|
367
|
-
}>>;
|
|
371
|
+
accountsOwnedSessions(token: string): Promise<RemoteResult<import("../types/accounts.js").QaOwnedSessionsResult>>;
|
|
368
372
|
accountsListOwnership(token: string): Promise<RemoteResult<{
|
|
369
373
|
readonly entries: readonly QaOwnershipEntry[];
|
|
370
374
|
}>>;
|
|
@@ -412,6 +416,10 @@ export type RemoteResult<Value> = {
|
|
|
412
416
|
readonly ok: false;
|
|
413
417
|
readonly error: unknown;
|
|
414
418
|
};
|
|
419
|
+
export interface QaChatCodeSourceApi {
|
|
420
|
+
read(token: string, sessionId: string): Promise<RemoteResult<import("../types/code-sources.js").QaChatCodeSources>>;
|
|
421
|
+
select(token: string, sessionId: string, source: string | null): Promise<RemoteResult<import("../types/code-sources.js").QaChatCodeSources>>;
|
|
422
|
+
}
|
|
415
423
|
/** Minimal persistence contract; backed by `window.localStorage` in the app. */
|
|
416
424
|
export interface StorageLike {
|
|
417
425
|
getItem(key: string): string | null;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CodeSourcesCatalog } from "@yadsh/dsh-plugin-kit/code-sources";
|
|
2
|
+
import type { QaChatCodeSources } from "../types/code-sources.js";
|
|
3
|
+
import type { QaChatCodeSourceApi } from "./types.js";
|
|
4
|
+
export interface ChatCodeSourceOptions {
|
|
5
|
+
readonly api?: QaChatCodeSourceApi | undefined;
|
|
6
|
+
readonly token: string;
|
|
7
|
+
readonly sessionId: string | null;
|
|
8
|
+
readonly chatKey: number;
|
|
9
|
+
readonly catalog: CodeSourcesCatalog;
|
|
10
|
+
}
|
|
11
|
+
/** Server-backed per-chat state. Drafts do not create sessions until their first send. */
|
|
12
|
+
export declare function useChatCodeSource(options: ChatCodeSourceOptions): {
|
|
13
|
+
value: QaChatCodeSources;
|
|
14
|
+
pending: boolean;
|
|
15
|
+
error: string | null;
|
|
16
|
+
select: (source: string | null) => Promise<boolean>;
|
|
17
|
+
prepareSession: (sessionId: string) => Promise<void>;
|
|
18
|
+
blocked: boolean;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=use-chat-code-source.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type QaHistoryOrganization } from "./history-organization.js";
|
|
2
|
+
/** The catalog is keyed on mount, so changing accounts cannot reuse its state. */
|
|
3
|
+
export declare function useHistoryOrganization(key: string): {
|
|
4
|
+
state: QaHistoryOrganization;
|
|
5
|
+
update: (next: QaHistoryOrganization) => void;
|
|
6
|
+
persistenceFailed: boolean;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=use-history-organization.d.ts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { QaModelOptions, QaModelPair } from "../types.js";
|
|
2
|
+
import type { QaAccessApi } from "./types.js";
|
|
3
|
+
export declare const qaModelKey: (pair: QaModelPair) => string;
|
|
4
|
+
export interface QaModelSelectionProps {
|
|
5
|
+
readonly api: NonNullable<QaAccessApi["userModels"]>;
|
|
6
|
+
readonly token: string;
|
|
7
|
+
readonly sessionId: string | null;
|
|
8
|
+
readonly subroleId: string | null;
|
|
9
|
+
readonly preview: boolean;
|
|
10
|
+
readonly disabled: boolean;
|
|
11
|
+
readonly onSelect: (pair: QaModelPair) => Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
/** The existing authenticated selection boundary shared by composer controls. */
|
|
14
|
+
export declare function useQaModelSelection(props: QaModelSelectionProps | undefined): {
|
|
15
|
+
options: QaModelOptions | undefined;
|
|
16
|
+
busy: boolean;
|
|
17
|
+
error: string | undefined;
|
|
18
|
+
selectedKey: string;
|
|
19
|
+
select: (key: string) => Promise<boolean>;
|
|
20
|
+
selected: import("../types.js").QaModelCatalogEntry | undefined;
|
|
21
|
+
disabled: boolean;
|
|
22
|
+
reload: () => void;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=use-model-selection.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type RefObject } from "react";
|
|
2
|
+
interface FileDropTarget {
|
|
3
|
+
readonly element: RefObject<HTMLElement>;
|
|
4
|
+
readonly fallback?: boolean;
|
|
5
|
+
readonly canDrop: () => boolean;
|
|
6
|
+
readonly onFiles: (files: File[]) => void;
|
|
7
|
+
readonly onActive?: (active: boolean) => void;
|
|
8
|
+
}
|
|
9
|
+
/** Register a QA file receiver; ordinary text and chat drags remain untouched. */
|
|
10
|
+
export declare function useQaFileDrop(target: FileDropTarget): void;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=use-qa-file-drop.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SqliteDatabase } from "@yadsh/dsh-plugin-kit/sqlite";
|
|
2
|
+
import type { CodeSourcesCatalog } from "@yadsh/dsh-plugin-kit/code-sources";
|
|
3
|
+
import type { QaChatCodeSources } from "./types/code-sources.js";
|
|
4
|
+
export interface CodeSourceSession {
|
|
5
|
+
readonly header: {
|
|
6
|
+
readonly parentSession?: unknown;
|
|
7
|
+
readonly isSeeded?: boolean;
|
|
8
|
+
readonly origin?: unknown;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/** Durable chat preference and immutable snapshots for delegated/forked children. */
|
|
12
|
+
export declare class QaCodeSourceSelection {
|
|
13
|
+
private readonly configured;
|
|
14
|
+
private readonly session;
|
|
15
|
+
private readonly busy;
|
|
16
|
+
readonly storage: SqliteDatabase;
|
|
17
|
+
constructor(filePath: string, configured: () => CodeSourcesCatalog, session: (id: string) => CodeSourceSession | undefined, busy: (id: string) => boolean);
|
|
18
|
+
private stored;
|
|
19
|
+
/** Resolve old/resumed children through their durable lineage when no snapshot exists. */
|
|
20
|
+
selected(id: string): string | null;
|
|
21
|
+
catalog(id?: string): CodeSourcesCatalog;
|
|
22
|
+
view(id: string, owner: boolean): QaChatCodeSources;
|
|
23
|
+
select(id: string, source: string | null): QaChatCodeSources;
|
|
24
|
+
inherit(id: string, parent: string, managedParent?: boolean): void;
|
|
25
|
+
private save;
|
|
26
|
+
close(): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=code-source-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-sources.js","sourceRoot":"","sources":["../../src/types/code-sources.ts"],"names":[],"mappings":""}
|
|
@@ -48,6 +48,12 @@ export declare function normalizeIntegrationBasePath(value: string): string;
|
|
|
48
48
|
* @param accounts - the resolved accounts domain, for the cross-check.
|
|
49
49
|
* @returns the frozen resolved slice.
|
|
50
50
|
*/
|
|
51
|
-
export declare function resolveIntegration(input: QaIntegrationConfig | undefined, accounts: ResolvedQaSurfaceConfig["accounts"]
|
|
51
|
+
export declare function resolveIntegration(input: QaIntegrationConfig | undefined, accounts: ResolvedQaSurfaceConfig["accounts"], attachments?: {
|
|
52
|
+
readonly textFiles: boolean;
|
|
53
|
+
readonly pastedTextLines: number;
|
|
54
|
+
readonly maxFileBytes: number;
|
|
55
|
+
readonly maxPending: number;
|
|
56
|
+
readonly extensions: readonly string[];
|
|
57
|
+
}): ResolvedIntegration;
|
|
52
58
|
export {};
|
|
53
59
|
//# sourceMappingURL=integration.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** The Host tool contract, normalized once for path and storage policy. */
|
|
2
|
+
export type QaFilesystemIntent = {
|
|
3
|
+
readonly kind: "read";
|
|
4
|
+
readonly path: string;
|
|
5
|
+
readonly fileOnlyGrant: boolean;
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: "write";
|
|
8
|
+
readonly path: string;
|
|
9
|
+
readonly bytes: number;
|
|
10
|
+
};
|
|
11
|
+
export declare function qaFilesystemIntent(name: string, args: Record<string, unknown> | undefined): QaFilesystemIntent | undefined;
|
|
12
|
+
//# sourceMappingURL=filesystem-intent.d.ts.map
|
|
@@ -27,7 +27,8 @@ export declare function validateFormFile(name: string, data: Buffer): string;
|
|
|
27
27
|
export declare class QaFormAttachmentAdapter {
|
|
28
28
|
private readonly service;
|
|
29
29
|
private readonly host;
|
|
30
|
-
|
|
30
|
+
private readonly grantFile?;
|
|
31
|
+
constructor(service: () => QaFormService, host: () => QaFormHostAttachments | undefined, grantFile?: ((sessionId: string, file: string) => void) | undefined);
|
|
31
32
|
available(): boolean;
|
|
32
33
|
check(session: string, formId: string, uploadId: string): void;
|
|
33
34
|
claim(session: string, uploadId: string): {
|
|
@@ -37,12 +38,14 @@ export declare class QaFormAttachmentAdapter {
|
|
|
37
38
|
complete(session: string, formId: string, uploadId: string, raw: unknown, signal: AbortSignal, authorize: () => void): Promise<QaFormRecord>;
|
|
38
39
|
fail(session: string, formId: string, uploadId: string): void;
|
|
39
40
|
/** Exact saved bytes are re-projected through the Host on each successful resume. */
|
|
40
|
-
readable(submission: QaFormSubmission): Promise<QaFormSubmission & {
|
|
41
|
+
readable(submission: QaFormSubmission, sessionId?: string): Promise<QaFormSubmission & {
|
|
41
42
|
resources: {
|
|
42
43
|
resource_id: string;
|
|
43
44
|
read_path: string;
|
|
44
45
|
}[];
|
|
45
46
|
}>;
|
|
47
|
+
/** Rebuild exact grants from this chat's persisted, verified submissions. */
|
|
48
|
+
restore(sessionId: string): Promise<void>;
|
|
46
49
|
}
|
|
47
50
|
export {};
|
|
48
51
|
//# sourceMappingURL=attachments.d.ts.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { QaFormFieldError, QaFormResult } from "./types.js";
|
|
1
|
+
import type { QaFormFieldError, QaFormResult, QaFormSchemaIssue } from "./types.js";
|
|
2
2
|
export declare class QaFormError extends Error {
|
|
3
3
|
readonly code: string;
|
|
4
4
|
readonly revision?: number | undefined;
|
|
5
5
|
readonly fields?: QaFormFieldError[] | undefined;
|
|
6
|
-
|
|
6
|
+
readonly schemaIssues?: QaFormSchemaIssue[] | undefined;
|
|
7
|
+
constructor(code: string, message: string, revision?: number | undefined, fields?: QaFormFieldError[] | undefined, schemaIssues?: QaFormSchemaIssue[] | undefined);
|
|
7
8
|
}
|
|
8
9
|
/** Deliberately redact unexpected storage/Host exceptions at the wire boundary. */
|
|
9
10
|
export declare function formFailure(error: unknown): QaFormResult<never>;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { Context } from "@deepseek-ai/cordis";
|
|
2
2
|
import type { ToolExecution } from "@deepseek-ai/dsh-tools";
|
|
3
3
|
import type { QaFormService } from "./service.js";
|
|
4
|
-
import type { QaFormRecord, QaFormSubmission } from "./types.js";
|
|
5
|
-
type
|
|
4
|
+
import type { QaFormRecord, QaFormSubmission, QaFormValidation } from "./types.js";
|
|
5
|
+
type CollectionOutcome = QaFormSubmission | {
|
|
6
6
|
status: "paused";
|
|
7
7
|
form_id: string;
|
|
8
8
|
reason: string;
|
|
9
9
|
};
|
|
10
|
+
type Outcome = CollectionOutcome | QaFormValidation;
|
|
10
11
|
/** A parked tool call is transient. Never reconstruct one from a saved draft. */
|
|
11
12
|
export declare class QaFormGate {
|
|
12
13
|
readonly service: () => QaFormService;
|
|
@@ -22,6 +23,7 @@ export declare class QaFormGate {
|
|
|
22
23
|
install(ctx: Context): void;
|
|
23
24
|
waiting(id: string): boolean;
|
|
24
25
|
touch(session: string): void;
|
|
26
|
+
private clientReady;
|
|
25
27
|
hasSession(session: string): boolean;
|
|
26
28
|
request(raw: unknown, exec: ToolExecution): Promise<Outcome>;
|
|
27
29
|
notify(record: QaFormRecord, pause?: boolean): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import { QaFormError } from "./errors.js";
|
|
3
|
+
import type { QaFormSchemaIssue } from "./types.js";
|
|
4
|
+
/** Report locations and constraints, never copy input values into diagnostics. */
|
|
5
|
+
export declare function formSchemaError(issues: QaFormSchemaIssue[]): QaFormError;
|
|
6
|
+
export declare function formSchemaIssues(issues: z.ZodError["issues"]): QaFormSchemaIssue[];
|
|
7
|
+
//# sourceMappingURL=schema-errors.d.ts.map
|
|
@@ -106,6 +106,19 @@ export interface QaFormFieldError {
|
|
|
106
106
|
code: string;
|
|
107
107
|
message: string;
|
|
108
108
|
}
|
|
109
|
+
export interface QaFormSchemaIssue {
|
|
110
|
+
path: string;
|
|
111
|
+
code: string;
|
|
112
|
+
message: string;
|
|
113
|
+
}
|
|
114
|
+
export interface QaFormValidation {
|
|
115
|
+
status: "validated";
|
|
116
|
+
valid: boolean;
|
|
117
|
+
interactive_client_ready: boolean;
|
|
118
|
+
file_upload_available: boolean;
|
|
119
|
+
policy: Readonly<QaFormPolicy>;
|
|
120
|
+
issues: QaFormSchemaIssue[];
|
|
121
|
+
}
|
|
109
122
|
export interface QaFormSubmission {
|
|
110
123
|
status: "submitted";
|
|
111
124
|
form_id: string;
|
|
@@ -182,6 +195,7 @@ export type QaFormResult<T> = {
|
|
|
182
195
|
message: string;
|
|
183
196
|
form_revision?: number;
|
|
184
197
|
field_errors?: QaFormFieldError[];
|
|
198
|
+
schema_errors?: QaFormSchemaIssue[];
|
|
185
199
|
};
|
|
186
200
|
};
|
|
187
201
|
/**
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import type { QaChatCodeSources } from "./types/code-sources.js";
|
|
1
2
|
import type { QaChatAccess, QaChatGrant, QaChatMode, QaChatAuthor, QaChatJson } from "./chat-sharing/types.js";
|
|
2
3
|
import type { SessionPageRequest, SessionFollowRequest, SessionPromptRequest, SessionPromptValue, SessionAttachmentRequest, SessionAttachmentValue, SessionRenameRequest, SessionRenameValue, SessionCancelValue, SessionUpdateQueueRequest, SessionUpdateQueueValue, SessionSearchRequest, SessionSelectModelRequest, SessionSelectModelValue } from "@deepseek-ai/dsh-api-session-controller/types";
|
|
3
4
|
import { TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
|
|
4
5
|
import type { Context } from "@deepseek-ai/cordis";
|
|
5
6
|
import type { QaSurfaceConfigRefs } from "./config.js";
|
|
6
7
|
import type { QaFormCommand, QaFormResult, QaFormView } from "./forms/types.js";
|
|
8
|
+
import type { QaModelOptions } from "./types.js";
|
|
7
9
|
import type { QaAccountNotificationsInput } from "./types.js";
|
|
8
10
|
import type { QaTurnSources } from "./provenance/types.js";
|
|
9
|
-
import type { QaAccountProfileInput, QaAccountSession, QaAccountStartersInput, QaAccountUserPublic, QaApprovalDecision, QaClaimResult, QaDocumentPreview, QaSpreadsheetPreviewSelection, QaDocumentWorkflowStatus, 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, QaWorkspaceFileChunk, QaWorkspaceListing, QaPrincipal, QaAccessAdminSnapshot, QaAdminAuditEvent, QaAdminOverview, QaAdminPage, QaAdminUserDetail, QaAdminUserRow, QaAdminUserUpdate, QaAuditQuery, QaCapabilitySelection, QaConversationDetail, QaConversationDeletion, QaConversationQuery, QaConversationReview, QaConversationReviewInput, QaConversationSummary, QaCurrentAccess, QaFeedbackHarvestEntry, QaFeedbackHarvestResult, QaFeedbackQuery, QaFeedbackRow, QaMessageFeedback, QaMessageFeedbackInput, QaModelCatalogEntry, QaModelPair, QaQualityMetrics, QaReviewQueueItem, QaReviewQueueRow, QaSessionAccess, QaSlashCatalog, QaSlashExecution, QaSlashSubmitAttachment, QaSkillActivationRecord, QaSkillAssignmentOverride, QaSubrole, QaUserAccess, QaUserQuery } from "./types.js";
|
|
11
|
+
import type { QaAccountProfileInput, QaAccountSession, QaAccountStartersInput, QaAccountUserPublic, QaApprovalDecision, QaClaimResult, QaDocumentPreview, QaSpreadsheetPreviewSelection, QaDocumentWorkflowStatus, QaIssuedServiceToken, QaHistoryFolderTarget, QaOwnedSessionsResult, 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, QaWorkspaceFileChunk, QaWorkspaceListing, QaPrincipal, QaAccessAdminSnapshot, QaAdminAuditEvent, QaAdminOverview, QaAdminPage, QaAdminUserDetail, QaAdminUserRow, QaAdminUserUpdate, QaAuditQuery, QaCapabilitySelection, QaConversationDetail, QaConversationDeletion, QaConversationQuery, QaConversationReview, QaConversationReviewInput, QaConversationSummary, QaCurrentAccess, QaFeedbackHarvestEntry, QaFeedbackHarvestResult, QaFeedbackQuery, QaFeedbackRow, QaMessageFeedback, QaMessageFeedbackInput, QaModelCatalogEntry, QaModelPair, QaQualityMetrics, QaReviewQueueItem, QaReviewQueueRow, QaSessionAccess, QaSlashCatalog, QaSlashExecution, QaSlashSubmitAttachment, QaSkillActivationRecord, QaSkillAssignmentOverride, QaSubrole, QaUserAccess, QaUserQuery } from "./types.js";
|
|
10
12
|
export declare const name = "qa-surface";
|
|
11
13
|
export declare const inject: string[];
|
|
12
14
|
import { QA_SURFACE_SETTINGS_NAMESPACE } from "./shared/settings.js";
|
|
@@ -19,6 +21,8 @@ declare module "@deepseek-ai/cordis" {
|
|
|
19
21
|
}
|
|
20
22
|
/** Host companion: validates config, owns the admission boundary and the route. */
|
|
21
23
|
export declare class QaSurface extends TypertRemoteService {
|
|
24
|
+
private sourceSelections?;
|
|
25
|
+
private codeSourceStore;
|
|
22
26
|
static inject: string[];
|
|
23
27
|
static Config: import("@deepseek-ai/schemastery").default<QaSurfaceConfigRefs>;
|
|
24
28
|
private readonly source;
|
|
@@ -79,6 +83,7 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
79
83
|
private chatSharingStore;
|
|
80
84
|
private readonly chatTransport;
|
|
81
85
|
private readonly chatTurnGuard;
|
|
86
|
+
private readonly requestScheduler;
|
|
82
87
|
private sharing;
|
|
83
88
|
constructor(ctx: Context, entry?: Partial<QaSurfaceConfigRefs>);
|
|
84
89
|
/** The quality store, opening its file the first time anyone needs it. */
|
|
@@ -125,6 +130,11 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
125
130
|
* @param sessionId - the chat the work is delegated from.
|
|
126
131
|
*/
|
|
127
132
|
modelPolicyForSession(sessionId: string): QaModelPair | undefined;
|
|
133
|
+
/** Shared source catalogue consumed by preset-mounted Git tools at call time. */
|
|
134
|
+
getCodeSources(sessionId?: string): ResolvedQaSurfaceConfig["codeSources"];
|
|
135
|
+
getSelectedCodeSource(sessionId: string): string | null;
|
|
136
|
+
chatCodeSources(token: string, sessionId: string): Promise<QaChatCodeSources>;
|
|
137
|
+
chatSelectCodeSource(token: string, sessionId: string, source: string | null): Promise<QaChatCodeSources>;
|
|
128
138
|
getConfig(): ResolvedQaSurfaceConfig;
|
|
129
139
|
/**
|
|
130
140
|
* Ownership plus the role's user-skill grant for one slash read.
|
|
@@ -171,9 +181,7 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
171
181
|
*/
|
|
172
182
|
accountsClaimSessions(token: string, sessionIds: readonly string[]): QaClaimResult;
|
|
173
183
|
/** The token user's owned session ids; the sidebar list authority. */
|
|
174
|
-
accountsOwnedSessions(token: string):
|
|
175
|
-
readonly ids: readonly string[];
|
|
176
|
-
};
|
|
184
|
+
accountsOwnedSessions(token: string): QaOwnedSessionsResult;
|
|
177
185
|
/**
|
|
178
186
|
* Every chat-ownership entry with owner display names; the cross-user view
|
|
179
187
|
* admin browsers group the sidebar by. Ordinary accounts are refused with
|
|
@@ -228,6 +236,9 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
228
236
|
accountsSetServiceTokenClarifications(token: string, tokenId: string, allowed: boolean): {
|
|
229
237
|
readonly updated: boolean;
|
|
230
238
|
};
|
|
239
|
+
accountsSetServiceTokenHistoryFolder(token: string, tokenId: string, folder: QaHistoryFolderTarget | null): {
|
|
240
|
+
readonly updated: boolean;
|
|
241
|
+
};
|
|
231
242
|
/**
|
|
232
243
|
* Serve the effective QA configuration to the browser. The DSH gateway pins
|
|
233
244
|
* settings RPCs to loopback, so a browser served over the LAN always sees
|
|
@@ -237,19 +248,33 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
237
248
|
*/
|
|
238
249
|
describe(): ResolvedQaSurfaceConfig;
|
|
239
250
|
/**
|
|
240
|
-
* Report
|
|
241
|
-
*
|
|
242
|
-
*
|
|
251
|
+
* Report server admission. Global reads expose counts only; a chat's FIFO
|
|
252
|
+
* position requires that account's current read access to the chat. The
|
|
253
|
+
* scheduler gates every root turn, including native and integration sends.
|
|
243
254
|
*
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
|
|
250
|
-
|
|
255
|
+
* Both arguments are part of the wire contract: the gateway client counts
|
|
256
|
+
* declared parameters rather than TypeScript optionals, so a call that omits
|
|
257
|
+
* them is refused on the browser before the Host ever sees it. An empty
|
|
258
|
+
* session id is the global read — the shape every initial send asks for,
|
|
259
|
+
* while its draft chat has no session to name yet.
|
|
260
|
+
*/
|
|
261
|
+
queueStatus(token: string, sessionId: string): QaQueueStatus;
|
|
262
|
+
/**
|
|
263
|
+
* The ceiling this read answers against: the chat's own account chain when
|
|
264
|
+
* the read names a chat, the caller's account chain when it does not (the
|
|
265
|
+
* pre-send check carries a token but no chat yet), and the deployment's
|
|
266
|
+
* number whenever accounts are off or nobody matches. `undefined` is the
|
|
267
|
+
* scheduler's signal to fall back to that number, so the branch is a value
|
|
268
|
+
* rather than a flag.
|
|
269
|
+
*/
|
|
270
|
+
private queueCeiling;
|
|
271
|
+
/**
|
|
272
|
+
* The ceiling override one arriving turn fills against, or `undefined` when
|
|
273
|
+
* the deployment default governs it: without accounts every turn shares the
|
|
274
|
+
* one number, and an unowned session (an integration or an admin preview)
|
|
275
|
+
* stays in that shared pool whatever its role might say.
|
|
251
276
|
*/
|
|
252
|
-
|
|
277
|
+
private queueSlotsOverride;
|
|
253
278
|
/**
|
|
254
279
|
* Create a QA session from Host-owned inputs. With account workspaces on,
|
|
255
280
|
* cwd is `<configured workspace>/.qa-users/<account UUID>` and the child is
|
|
@@ -268,6 +293,7 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
268
293
|
accessUpdateSubrole(token: string, id: string, input: QaSubrole): Promise<QaSubrole>;
|
|
269
294
|
/** The pairs this Host can serve, for the surface that writes a policy. */
|
|
270
295
|
accessModelCatalog(token: string): Promise<readonly QaModelCatalogEntry[]>;
|
|
296
|
+
accessUserModels(token: string, sessionId: string | null, subroleId: string | null, adminPreview: boolean): Promise<QaModelOptions>;
|
|
271
297
|
accessDeleteSubrole(token: string, id: string, replacementId: string | null): {
|
|
272
298
|
readonly deleted: boolean;
|
|
273
299
|
};
|
|
@@ -4,8 +4,6 @@ import type { PluginLogger } from "@yadsh/dsh-plugin-log";
|
|
|
4
4
|
import type { ResolvedQaSurfaceConfig } from "../types.js";
|
|
5
5
|
import { type QaAskRequest } from "./contract.js";
|
|
6
6
|
import type { QaIntegrationService } from "./service.js";
|
|
7
|
-
/** The bridge's own ceiling: five attachments per question. */
|
|
8
|
-
export declare const QA_INTEGRATION_MAX_FILES = 5;
|
|
9
7
|
export interface QaIntegrationRouteOptions {
|
|
10
8
|
config: ResolvedQaSurfaceConfig;
|
|
11
9
|
service: QaIntegrationService;
|
|
@@ -59,7 +57,7 @@ interface MultipartBody {
|
|
|
59
57
|
* @param boundary - the boundary parameter of the content type.
|
|
60
58
|
* @returns text fields and file parts, in the order they appeared.
|
|
61
59
|
*/
|
|
62
|
-
export declare function parseMultipart(body: Buffer, boundary: string): MultipartBody;
|
|
60
|
+
export declare function parseMultipart(body: Buffer, boundary: string, maxAttachments?: number): MultipartBody;
|
|
63
61
|
/**
|
|
64
62
|
* Read the whole request body under a byte ceiling.
|
|
65
63
|
* @param request - the incoming request.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { PluginLogger } from "@yadsh/dsh-plugin-log";
|
|
2
2
|
import type { QaAccounts } from "../accounts/store.js";
|
|
3
|
+
import type { QaHistoryFolderTarget } from "../types/accounts.js";
|
|
3
4
|
import { type QaServiceTokenScope } from "../accounts/service-token.js";
|
|
4
5
|
import type { QaSourceReference } from "../provenance/types.js";
|
|
5
6
|
import type { ResolvedQaSurfaceConfig } from "../types.js";
|
|
@@ -31,6 +32,7 @@ export declare const QA_INTEGRATION_MAX_CITATIONS = 5;
|
|
|
31
32
|
export declare function sourceCitations(sources: readonly QaSourceReference[]): readonly string[];
|
|
32
33
|
/** Who a presented credential turned out to be. */
|
|
33
34
|
export interface QaIntegrationIdentity {
|
|
35
|
+
readonly historyFolder?: QaHistoryFolderTarget;
|
|
34
36
|
readonly allowClarifications: boolean;
|
|
35
37
|
readonly tokenId: string;
|
|
36
38
|
readonly userId: string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PluginLogger } from "@yadsh/dsh-plugin-log";
|
|
2
|
+
import type { ResolvedQaSurfaceConfig } from "../types.js";
|
|
3
|
+
import { type QaSkillRoots } from "./paths.js";
|
|
4
|
+
/**
|
|
5
|
+
* Promote an operator-selected subset of a read-only catalog into the shared
|
|
6
|
+
* store. Copy complete directories, including resources, before publishing a
|
|
7
|
+
* skill. Neither a restart, an updated seed nor an editor deletion restores
|
|
8
|
+
* the original bytes: a hidden per-name receipt survives rename and removal.
|
|
9
|
+
* Existing shared directories always belong to the operator and win as-is.
|
|
10
|
+
*/
|
|
11
|
+
export declare function seedSharedSkills(roots: QaSkillRoots, seed: ResolvedQaSurfaceConfig["accounts"]["skills"]["sharedSeed"], logger: PluginLogger): boolean;
|
|
12
|
+
//# sourceMappingURL=shared-seed.d.ts.map
|
|
@@ -32,6 +32,7 @@ export declare const QA_DOCUMENTS_NOTE = "dsh-qa-surface:attached-documents";
|
|
|
32
32
|
/** Note name carrying the deployment's rule about where an answer comes from. */
|
|
33
33
|
export declare const QA_SOURCE_PRIORITY_NOTE = "dsh-qa-surface:source-priority";
|
|
34
34
|
export declare const QA_BRANCH_NOTE = "dsh-qa-surface:chat-branch";
|
|
35
|
+
export declare const QA_CODE_SOURCES_NOTE = "dsh-qa-surface:code-sources";
|
|
35
36
|
/**
|
|
36
37
|
* Built-in note texts. Each is the fallback for its settings template
|
|
37
38
|
* (`notes.*.template`); the placeholders mark the parts the injector
|
|
@@ -41,7 +42,7 @@ export declare const QA_IDENTITY_NOTE_TEMPLATE = "{identity}\n\n{instructions}";
|
|
|
41
42
|
export declare const QA_SOURCES_NOTE_TEMPLATE = "Source provenance is collected automatically from your tool calls; the QA surface lists what it collected beside the answer. Do not append a manual Sources/\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0438 bibliography of your own.";
|
|
42
43
|
export declare const QA_SOURCES_FALLBACK_TEMPLATE = "A delegated run whose provider cannot expose tool events must call {reportTool} before finishing.";
|
|
43
44
|
export declare const QA_DELEGATION_NOTE_TEMPLATE = "When you start a background subagent, give the delegation a short vivid name in its description field: two or three words in the user's language that say what the run is for (\u00AB\u0421\u0432\u0435\u0440\u043A\u0430 \u043E\u0442\u0447\u0451\u0442\u043E\u0432\u00BB, \"Log triage\"). The QA surface shows that description as the subagent's display name in the operator's panel and completion notices.";
|
|
44
|
-
export declare const QA_DOCUMENTS_NOTE_TEMPLATE
|
|
45
|
+
export declare const QA_DOCUMENTS_NOTE_TEMPLATE: string;
|
|
45
46
|
export declare const QA_SOURCE_PRIORITY_NOTE_TEMPLATE = "Answer from the source that owns the question: read what the conversation and its attachments already carry, then search the product documentation and ask the domain expert, and only then look in memory. Recalled memory is background from earlier sessions \u2014 a miss there is not evidence that no source exists, and it is not where a document, a page or a product fact should be looked up.";
|
|
46
47
|
export interface QaIdentityRenderInput {
|
|
47
48
|
/** The owner's account address; the one fact accounts always provide. */
|
|
@@ -71,6 +72,7 @@ export interface QaPromptNote {
|
|
|
71
72
|
readonly text: string;
|
|
72
73
|
}
|
|
73
74
|
export interface QaPromptNotesOptions {
|
|
75
|
+
readonly codeSources?: (sessionId: string) => import("@yadsh/dsh-plugin-kit/code-sources").CodeSourcesCatalog;
|
|
74
76
|
readonly config: () => ResolvedQaSurfaceConfig;
|
|
75
77
|
/** The live accounts store, or undefined while accounts are disabled. */
|
|
76
78
|
readonly accounts: () => QaAccounts | undefined;
|
|
@@ -116,6 +118,8 @@ export declare class QaPromptNotes {
|
|
|
116
118
|
dispose(): void;
|
|
117
119
|
/** Append every note whose text this step does not already carry. */
|
|
118
120
|
private inject;
|
|
121
|
+
/** Keep Git and file lookups on the same configured tree, including in children. */
|
|
122
|
+
private codeSourceNotes;
|
|
119
123
|
/** Who is asking: the owner's name, handles and their own instructions. */
|
|
120
124
|
private identityNotes;
|
|
121
125
|
/** What the deployment expects around the sources the surface collects. */
|