@yadsh/dsh-qa-surface 0.14.0 → 0.15.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/lib/client/QaSurface.js +15 -1
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/components/QaChangelog.js +13 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaHeader.js +2 -2
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaSidebar.js +34 -3
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/settings/sections/sources.js +1 -1
- package/lib/client/settings/sections/sources.js.map +1 -1
- package/lib/client/styles.js +13 -1
- package/lib/client/styles.js.map +1 -1
- package/lib/client.js +83 -12
- package/lib/client.js.map +1 -1
- package/lib/provenance/host-store.js +8 -5
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/types/client/components/QaHeader.d.ts +16 -4
- package/lib/types/client/components/QaSidebar.d.ts +14 -0
- package/package.json +3 -3
package/lib/client/styles.js
CHANGED
|
@@ -163,6 +163,9 @@ export const QA_SURFACE_STYLES = String.raw `
|
|
|
163
163
|
.dsh-qa-sidebar__account-exit:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
164
164
|
.dsh-qa-sidebar__account-exit:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
|
|
165
165
|
.dsh-qa-sidebar__account-exit svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
|
|
166
|
+
/* The phone drawer's dismiss layer: painted by the narrow layout alone, and only
|
|
167
|
+
while the drawer is open (QaSurface mounts nothing else). */
|
|
168
|
+
.dsh-qa-sidebar__scrim{display:none}
|
|
166
169
|
.dsh-qa-auth{align-items:center;justify-content:center;padding:24px}
|
|
167
170
|
.dsh-qa-auth__card{display:flex;flex-direction:column;gap:14px;width:min(360px,100%);padding:28px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2);box-shadow:0 18px 48px var(--dsh-qa-overlay)}
|
|
168
171
|
.dsh-qa-auth__brand{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}
|
|
@@ -391,6 +394,15 @@ export const QA_SURFACE_STYLES = String.raw `
|
|
|
391
394
|
.dsh-qa-header__settings:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
392
395
|
.dsh-qa-header__settings svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
|
|
393
396
|
.dsh-qa-header__settings:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
397
|
+
/* The opener of the chat history at the phone widths, where the sheet switches
|
|
398
|
+
the sidebar off: it stands in the header because a control inside a switched-off
|
|
399
|
+
subtree is no control, and it is sized for a thumb rather than a cursor. The
|
|
400
|
+
wide layout hides it — there the sidebar is already on screen. */
|
|
401
|
+
.dsh-qa-header__history{display:none;align-items:center;justify-content:center;flex:none;width:44px;height:44px;padding:0;border:0;border-radius:10px;background:0 0;color:var(--dsw-alias-label-secondary);cursor:pointer}
|
|
402
|
+
.dsh-qa-header__history:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
403
|
+
.dsh-qa-header__history[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
404
|
+
.dsh-qa-header__history:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
405
|
+
.dsh-qa-header__history svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}
|
|
394
406
|
.dsh-qa-role-selector select,.dsh-qa-header__admin{height:30px;padding:4px 10px;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:inherit;font-size:12px;line-height:20px;cursor:pointer}
|
|
395
407
|
.dsh-qa-role-selector select:hover,.dsh-qa-header__admin:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
|
|
396
408
|
.dsh-qa-role-selector select:focus-visible,.dsh-qa-header__admin:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
|
|
@@ -964,7 +976,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
|
|
|
964
976
|
row — title, role, palette, action cluster — is wider than the viewport with
|
|
965
977
|
every child refusing to shrink, so it wraps instead of pushing «Настройки»
|
|
966
978
|
past the clipped edge. */
|
|
967
|
-
@media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-panel,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-header__title-row{flex-wrap:wrap;row-gap:6px}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{--dsh-qa-bleed:0px;max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-message--user .dsh-qa-message__content{max-width:88%;font-size:15px}.dsh-qa-message__content{font-size:14px}.dsh-qa-footer{padding-left:10px;padding-right:10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.dsh-qa-composer{min-height:84px;padding-top:12px}.dsh-qa-composer__hint{font-size:0}.dsh-qa-composer__hint::after{content:"Enter: отправить";font-size:11px}}
|
|
979
|
+
@media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-sidebar[data-qa-drawer="open"]{display:flex;position:fixed;inset:0 auto 0 0;z-index:24;width:min(320px,86vw);max-width:100%;border-right:1px solid var(--dsw-alias-border-l2);box-shadow:0 18px 44px rgba(0,0,0,.28);padding-bottom:env(safe-area-inset-bottom)}.dsh-qa-sidebar__scrim{display:block;position:fixed;inset:0;z-index:22;background:var(--dsh-qa-overlay)}.dsh-qa-sidebar__resize{display:none}.dsh-qa-sidebar__collapse,.dsh-qa-sidebar__expand{width:44px;height:44px}.dsh-qa-sidebar__new,.dsh-qa-sidebar__item-main{min-height:44px}.dsh-qa-header__history{display:inline-flex}.dsh-qa-panel,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-header__title-row{flex-wrap:wrap;row-gap:6px}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{--dsh-qa-bleed:0px;max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-message--user .dsh-qa-message__content{max-width:88%;font-size:15px}.dsh-qa-message__content{font-size:14px}.dsh-qa-footer{padding-left:10px;padding-right:10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.dsh-qa-composer{min-height:84px;padding-top:12px}.dsh-qa-composer__hint{font-size:0}.dsh-qa-composer__hint::after{content:"Enter: отправить";font-size:11px}}
|
|
968
980
|
@media (max-height:480px) and (orientation:landscape){.dsh-qa-header__inner{padding-top:6px}.dsh-qa-header__tabs{display:none}.dsh-qa-transcript__inner{padding-top:12px}.dsh-qa-footer{padding-top:12px}.dsh-qa-composer{min-height:72px;gap:4px;padding-top:8px}}
|
|
969
981
|
@media (prefers-reduced-motion:reduce){.dsh-qa-message__cursor,.dsh-qa-message__pending-spinner,.dsh-qa-work__spinner,.dsh-qa-work-item__spinner,.dsh-qa-command__spinner{animation:none}.dsh-qa-work__chevron{transition:none}.dsh-qa-rail__frame,.dsh-qa-rail__pos,.dsh-qa-rail__mark::before,.dsh-qa-rail__mark--busy::before,.dsh-qa-rail__preview{transition:none;animation:none}}
|
|
970
982
|
${QA_ADMIN_CONSOLE_STYLES}
|
package/lib/client/styles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,gBAAgB,GAAG;IACvB,KAAK,EAAE,SAAS;IAChB,yDAAyD;IACzD,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IACtB,uBAAuB;IACvB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,kBAAkB;IAClB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,gBAAgB;IAChB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,SAAS;IACrB,yBAAyB;IACzB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;IACvB,mDAAmD;IACnD,cAAc,EAAE,SAAS;IACzB,qDAAqD;IACrD,OAAO,EAAE,wBAAwB;CACzB,CAAC;AAEX,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAC/B,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAE/C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;KACrD,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;KAChE,IAAI,CAAC,GAAG,CAAC,CAAC;AAEb;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAAA;qHAC0E,CAAC;AAEtH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAA;kBACzB,eAAe;;;;;qBAKZ,eAAe
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -20242,7 +20242,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
20242
20242
|
]
|
|
20243
20243
|
});
|
|
20244
20244
|
}
|
|
20245
|
-
function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, roleSelector, themeSwitcher, administration, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesEnabled, filesOpen, onOpenFiles, settings, panelLauncher, showReset, resetDisabled, onReset }) {
|
|
20245
|
+
function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, roleSelector, themeSwitcher, administration, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesEnabled, filesOpen, onOpenFiles, settings, history, panelLauncher, showReset, resetDisabled, onReset }) {
|
|
20246
20246
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("header", {
|
|
20247
20247
|
className: "dsh-qa-header",
|
|
20248
20248
|
"data-testid": "qa-surface-header",
|
|
@@ -20253,6 +20253,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
20253
20253
|
className: "dsh-qa-header__title-row",
|
|
20254
20254
|
"data-testid": "qa-surface-header-title-row",
|
|
20255
20255
|
children: [
|
|
20256
|
+
history === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
20257
|
+
type: "button",
|
|
20258
|
+
className: "dsh-qa-header__history",
|
|
20259
|
+
"data-testid": "qa-surface-header-history",
|
|
20260
|
+
"aria-label": "История чатов",
|
|
20261
|
+
title: "История чатов",
|
|
20262
|
+
"aria-expanded": history.open,
|
|
20263
|
+
onClick: history.onToggle,
|
|
20264
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
20265
|
+
viewBox: "0 0 16 16",
|
|
20266
|
+
"aria-hidden": "true",
|
|
20267
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M5.75 4h8M5.75 8h8M5.75 12h8M2.75 4h.01M2.75 8h.01M2.75 12h.01" })
|
|
20268
|
+
})
|
|
20269
|
+
}),
|
|
20256
20270
|
logoUrl === null ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
20257
20271
|
className: "dsh-qa-header__logo",
|
|
20258
20272
|
"data-testid": "qa-surface-header-logo",
|
|
@@ -52610,8 +52624,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
52610
52624
|
}
|
|
52611
52625
|
//#endregion
|
|
52612
52626
|
//#region src/client/components/QaChangelog.tsx
|
|
52613
|
-
const QA_VERSION = "0.
|
|
52627
|
+
const QA_VERSION = "0.15.0";
|
|
52614
52628
|
const QA_CHANGELOG = [
|
|
52629
|
+
{
|
|
52630
|
+
version: "0.15.0",
|
|
52631
|
+
date: "2026-10-05",
|
|
52632
|
+
sections: [{
|
|
52633
|
+
title: "Исправления",
|
|
52634
|
+
items: ["Ответ снова рассказывает, откуда в нём факты. Источник, который сдал сам отвечающий агент — а не тот, кому он делегировал кусок работы, — раньше молча отклонялся: канал спрашивал не «есть ли у записи адрес», а «кто вообще имеет право отчитываться», и на стенде, где читает и отвечает один агент разговора, не записывался ни один источник. Теперь такой источник попадает ровно в тот ход, который его сдал, а правило «источник обязан назвать файл или ссылку» по-прежнему проверяется по каждой записи отдельно — то есть пустая ссылка не пройдёт и теперь.", "На телефоне история чатов снова достижима. Узкая раскладка прятала боковую панель вместе с обеими кнопками, которые могли её показать: список чатов, поиск и «Новый чат» исчезали, а шапка ничего вместо них не предлагала. Теперь в шапке есть своя кнопка — размером под палец, а не под курсор, — и история выезжает поверх затемняющего слоя: закрыть её можно Escape, тапом вне панели или выбором чата. Состояние свёрнутой панели на широком экране этот ящик не трогает, поэтому, вернувшись на десктоп, читатель застанет ровно то, что оставил."]
|
|
52635
|
+
}]
|
|
52636
|
+
},
|
|
52615
52637
|
{
|
|
52616
52638
|
version: "0.14.0",
|
|
52617
52639
|
date: "2026-09-25",
|
|
@@ -53120,7 +53142,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53120
53142
|
className: "dsh-qa-changelog__date",
|
|
53121
53143
|
children: entry.date
|
|
53122
53144
|
}),
|
|
53123
|
-
entry.version === "0.
|
|
53145
|
+
entry.version === "0.15.0" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
53124
53146
|
className: "dsh-qa-changelog__current",
|
|
53125
53147
|
children: "текущая"
|
|
53126
53148
|
}) : null
|
|
@@ -53576,7 +53598,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53576
53598
|
setCollapsed(next);
|
|
53577
53599
|
writeCollapsed(props.stateKey, next);
|
|
53578
53600
|
};
|
|
53579
|
-
|
|
53601
|
+
const drawerOpen = props.drawerOpen === true;
|
|
53602
|
+
const closeDrawer = () => {
|
|
53603
|
+
if (drawerOpen) props.onDrawerClose?.();
|
|
53604
|
+
};
|
|
53605
|
+
if (collapsed && !drawerOpen) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
|
|
53580
53606
|
className: "dsh-qa-sidebar dsh-qa-sidebar--collapsed",
|
|
53581
53607
|
"data-testid": "qa-surface-sidebar-collapsed",
|
|
53582
53608
|
"aria-label": "История чатов",
|
|
@@ -53609,7 +53635,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53609
53635
|
className: "dsh-qa-sidebar__item-main",
|
|
53610
53636
|
"data-testid": "qa-surface-sidebar-item-open",
|
|
53611
53637
|
"aria-current": row.active ? "true" : void 0,
|
|
53612
|
-
onClick: () =>
|
|
53638
|
+
onClick: () => {
|
|
53639
|
+
props.onSwitch(row.id);
|
|
53640
|
+
closeDrawer();
|
|
53641
|
+
},
|
|
53613
53642
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
53614
53643
|
className: "dsh-qa-sidebar__item-title",
|
|
53615
53644
|
"data-testid": "qa-surface-sidebar-item-title",
|
|
@@ -53661,7 +53690,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53661
53690
|
ref: nav,
|
|
53662
53691
|
className: "dsh-qa-sidebar",
|
|
53663
53692
|
"data-testid": "qa-surface-sidebar",
|
|
53693
|
+
"data-qa-drawer": drawerOpen ? "open" : void 0,
|
|
53664
53694
|
"aria-label": "История чатов",
|
|
53695
|
+
onKeyDown: (event) => {
|
|
53696
|
+
if (!drawerOpen || event.key !== "Escape") return;
|
|
53697
|
+
event.stopPropagation();
|
|
53698
|
+
closeDrawer();
|
|
53699
|
+
},
|
|
53665
53700
|
children: [
|
|
53666
53701
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
53667
53702
|
className: "dsh-qa-sidebar__head",
|
|
@@ -53683,9 +53718,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53683
53718
|
type: "button",
|
|
53684
53719
|
className: "dsh-qa-sidebar__collapse",
|
|
53685
53720
|
"data-testid": "qa-surface-sidebar-collapse",
|
|
53686
|
-
"aria-label": "Свернуть историю чатов",
|
|
53687
|
-
title: "Свернуть историю чатов",
|
|
53688
|
-
onClick:
|
|
53721
|
+
"aria-label": drawerOpen ? "Закрыть историю чатов" : "Свернуть историю чатов",
|
|
53722
|
+
title: drawerOpen ? "Закрыть историю чатов" : "Свернуть историю чатов",
|
|
53723
|
+
onClick: () => {
|
|
53724
|
+
if (drawerOpen) {
|
|
53725
|
+
closeDrawer();
|
|
53726
|
+
return;
|
|
53727
|
+
}
|
|
53728
|
+
toggleCollapsed();
|
|
53729
|
+
},
|
|
53689
53730
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronIcon, {})
|
|
53690
53731
|
})]
|
|
53691
53732
|
}),
|
|
@@ -53697,7 +53738,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53697
53738
|
className: "dsh-qa-sidebar__new",
|
|
53698
53739
|
"data-testid": "qa-surface-sidebar-new",
|
|
53699
53740
|
disabled: props.busy,
|
|
53700
|
-
onClick:
|
|
53741
|
+
onClick: () => {
|
|
53742
|
+
props.onNewChat();
|
|
53743
|
+
closeDrawer();
|
|
53744
|
+
},
|
|
53701
53745
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PlusIcon, {}), "Новый чат"]
|
|
53702
53746
|
})
|
|
53703
53747
|
}) : null,
|
|
@@ -53839,7 +53883,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53839
53883
|
})
|
|
53840
53884
|
]
|
|
53841
53885
|
});
|
|
53842
|
-
}, (prev, next) => prev.title === next.title && prev.logoUrl === next.logoUrl && prev.stateKey === next.stateKey && prev.showNewChat === next.showNewChat && prev.busy === next.busy && prev.groupByOwner === next.groupByOwner && prev.onSwitch === next.onSwitch && prev.onNewChat === next.onNewChat && prev.onDelete === next.onDelete && prev.onAudit === next.onAudit && prev.audits === next.audits && prev.account?.email === next.account?.email && prev.account?.role === next.account?.role && prev.account?.onLogout === next.account?.onLogout && prev.account?.settings === next.account?.settings && sameChatRows(prev.rows, next.rows));
|
|
53886
|
+
}, (prev, next) => prev.title === next.title && prev.logoUrl === next.logoUrl && prev.stateKey === next.stateKey && prev.showNewChat === next.showNewChat && prev.busy === next.busy && prev.drawerOpen === next.drawerOpen && prev.onDrawerClose === next.onDrawerClose && prev.groupByOwner === next.groupByOwner && prev.onSwitch === next.onSwitch && prev.onNewChat === next.onNewChat && prev.onDelete === next.onDelete && prev.onAudit === next.onAudit && prev.audits === next.audits && prev.account?.email === next.account?.email && prev.account?.role === next.account?.role && prev.account?.onLogout === next.account?.onLogout && prev.account?.settings === next.account?.settings && sameChatRows(prev.rows, next.rows));
|
|
53843
53887
|
//#endregion
|
|
53844
53888
|
//#region src/client/components/QaAgentsDrawer.tsx
|
|
53845
53889
|
/**
|
|
@@ -63738,6 +63782,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
63738
63782
|
const handleNewChat = (0, react.useCallback)(() => {
|
|
63739
63783
|
controller?.startDraft();
|
|
63740
63784
|
}, [controller]);
|
|
63785
|
+
const [historyOpen, setHistoryOpen] = (0, react.useState)(false);
|
|
63786
|
+
const toggleHistory = (0, react.useCallback)(() => setHistoryOpen((open) => !open), []);
|
|
63787
|
+
const closeHistory = (0, react.useCallback)(() => setHistoryOpen(false), []);
|
|
63741
63788
|
const [auditTarget, setAuditTarget] = (0, react.useState)(null);
|
|
63742
63789
|
const openAudit = (0, react.useCallback)((sessionId) => {
|
|
63743
63790
|
setAuditTarget(sessionId);
|
|
@@ -64094,6 +64141,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
64094
64141
|
...previewing ? { onExit: exitPreview } : {},
|
|
64095
64142
|
disabled: state.phase === "creating"
|
|
64096
64143
|
}) : null,
|
|
64144
|
+
showSidebar && historyOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
64145
|
+
className: "dsh-qa-sidebar__scrim",
|
|
64146
|
+
"data-testid": "qa-surface-sidebar-scrim",
|
|
64147
|
+
"aria-hidden": "true",
|
|
64148
|
+
onClick: closeHistory
|
|
64149
|
+
}) : null,
|
|
64097
64150
|
showSidebar ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaSidebar, {
|
|
64098
64151
|
rows: chatRows,
|
|
64099
64152
|
groupByOwner: ownerNames !== void 0,
|
|
@@ -64102,6 +64155,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
64102
64155
|
stateKey,
|
|
64103
64156
|
showNewChat: allowNewChat,
|
|
64104
64157
|
busy: state.phase === "creating",
|
|
64158
|
+
drawerOpen: historyOpen,
|
|
64159
|
+
onDrawerClose: closeHistory,
|
|
64105
64160
|
onSwitch: handleSwitch,
|
|
64106
64161
|
onNewChat: handleNewChat,
|
|
64107
64162
|
onDelete: handleDelete,
|
|
@@ -64164,6 +64219,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
64164
64219
|
filesOpen: rail.railOpen && rail.railTab === "files",
|
|
64165
64220
|
onOpenFiles: () => rail.openTab("files"),
|
|
64166
64221
|
panelLauncher: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaPanelLauncher, { panels: props.panels }),
|
|
64222
|
+
history: showSidebar ? {
|
|
64223
|
+
open: historyOpen,
|
|
64224
|
+
onToggle: toggleHistory
|
|
64225
|
+
} : void 0,
|
|
64167
64226
|
settings: showSidebar ? void 0 : settingsEntry,
|
|
64168
64227
|
showReset: showResetButton,
|
|
64169
64228
|
resetDisabled: controller === void 0 || state.phase === "creating",
|
|
@@ -64761,6 +64820,9 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
64761
64820
|
.dsh-qa-sidebar__account-exit:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
64762
64821
|
.dsh-qa-sidebar__account-exit:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
|
|
64763
64822
|
.dsh-qa-sidebar__account-exit svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
|
|
64823
|
+
/* The phone drawer's dismiss layer: painted by the narrow layout alone, and only
|
|
64824
|
+
while the drawer is open (QaSurface mounts nothing else). */
|
|
64825
|
+
.dsh-qa-sidebar__scrim{display:none}
|
|
64764
64826
|
.dsh-qa-auth{align-items:center;justify-content:center;padding:24px}
|
|
64765
64827
|
.dsh-qa-auth__card{display:flex;flex-direction:column;gap:14px;width:min(360px,100%);padding:28px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2);box-shadow:0 18px 48px var(--dsh-qa-overlay)}
|
|
64766
64828
|
.dsh-qa-auth__brand{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}
|
|
@@ -64989,6 +65051,15 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
64989
65051
|
.dsh-qa-header__settings:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
64990
65052
|
.dsh-qa-header__settings svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
|
|
64991
65053
|
.dsh-qa-header__settings:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
65054
|
+
/* The opener of the chat history at the phone widths, where the sheet switches
|
|
65055
|
+
the sidebar off: it stands in the header because a control inside a switched-off
|
|
65056
|
+
subtree is no control, and it is sized for a thumb rather than a cursor. The
|
|
65057
|
+
wide layout hides it — there the sidebar is already on screen. */
|
|
65058
|
+
.dsh-qa-header__history{display:none;align-items:center;justify-content:center;flex:none;width:44px;height:44px;padding:0;border:0;border-radius:10px;background:0 0;color:var(--dsw-alias-label-secondary);cursor:pointer}
|
|
65059
|
+
.dsh-qa-header__history:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65060
|
+
.dsh-qa-header__history[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65061
|
+
.dsh-qa-header__history:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
65062
|
+
.dsh-qa-header__history svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}
|
|
64992
65063
|
.dsh-qa-role-selector select,.dsh-qa-header__admin{height:30px;padding:4px 10px;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:inherit;font-size:12px;line-height:20px;cursor:pointer}
|
|
64993
65064
|
.dsh-qa-role-selector select:hover,.dsh-qa-header__admin:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
|
|
64994
65065
|
.dsh-qa-role-selector select:focus-visible,.dsh-qa-header__admin:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
|
|
@@ -65562,7 +65633,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
|
|
|
65562
65633
|
row — title, role, palette, action cluster — is wider than the viewport with
|
|
65563
65634
|
every child refusing to shrink, so it wraps instead of pushing «Настройки»
|
|
65564
65635
|
past the clipped edge. */
|
|
65565
|
-
@media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-panel,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-header__title-row{flex-wrap:wrap;row-gap:6px}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{--dsh-qa-bleed:0px;max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-message--user .dsh-qa-message__content{max-width:88%;font-size:15px}.dsh-qa-message__content{font-size:14px}.dsh-qa-footer{padding-left:10px;padding-right:10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.dsh-qa-composer{min-height:84px;padding-top:12px}.dsh-qa-composer__hint{font-size:0}.dsh-qa-composer__hint::after{content:"Enter: отправить";font-size:11px}}
|
|
65636
|
+
@media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-sidebar[data-qa-drawer="open"]{display:flex;position:fixed;inset:0 auto 0 0;z-index:24;width:min(320px,86vw);max-width:100%;border-right:1px solid var(--dsw-alias-border-l2);box-shadow:0 18px 44px rgba(0,0,0,.28);padding-bottom:env(safe-area-inset-bottom)}.dsh-qa-sidebar__scrim{display:block;position:fixed;inset:0;z-index:22;background:var(--dsh-qa-overlay)}.dsh-qa-sidebar__resize{display:none}.dsh-qa-sidebar__collapse,.dsh-qa-sidebar__expand{width:44px;height:44px}.dsh-qa-sidebar__new,.dsh-qa-sidebar__item-main{min-height:44px}.dsh-qa-header__history{display:inline-flex}.dsh-qa-panel,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-header__title-row{flex-wrap:wrap;row-gap:6px}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{--dsh-qa-bleed:0px;max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-message--user .dsh-qa-message__content{max-width:88%;font-size:15px}.dsh-qa-message__content{font-size:14px}.dsh-qa-footer{padding-left:10px;padding-right:10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.dsh-qa-composer{min-height:84px;padding-top:12px}.dsh-qa-composer__hint{font-size:0}.dsh-qa-composer__hint::after{content:"Enter: отправить";font-size:11px}}
|
|
65566
65637
|
@media (max-height:480px) and (orientation:landscape){.dsh-qa-header__inner{padding-top:6px}.dsh-qa-header__tabs{display:none}.dsh-qa-transcript__inner{padding-top:12px}.dsh-qa-footer{padding-top:12px}.dsh-qa-composer{min-height:72px;gap:4px;padding-top:8px}}
|
|
65567
65638
|
@media (prefers-reduced-motion:reduce){.dsh-qa-message__cursor,.dsh-qa-message__pending-spinner,.dsh-qa-work__spinner,.dsh-qa-work-item__spinner,.dsh-qa-command__spinner{animation:none}.dsh-qa-work__chevron{transition:none}.dsh-qa-rail__frame,.dsh-qa-rail__pos,.dsh-qa-rail__mark::before,.dsh-qa-rail__mark--busy::before,.dsh-qa-rail__preview{transition:none;animation:none}}
|
|
65568
65639
|
${QA_ADMIN_CONSOLE_STYLES}
|
|
@@ -67946,7 +68017,7 @@ ${QA_ROOT_STYLES}`;
|
|
|
67946
68017
|
checked: sources?.subagents?.validateReportedSources ?? true,
|
|
67947
68018
|
disabled: blocked,
|
|
67948
68019
|
label: "Проверять источники из отчёта",
|
|
67949
|
-
hint: "С проверкой
|
|
68020
|
+
hint: "С проверкой записывается только источник с путём или адресом — и в делегированном прогоне, и в отчёте самого помощника. Без неё записывается и «факт» без адреса.",
|
|
67950
68021
|
testId: "qa-settings-sources-subagents-validate-reported-sources",
|
|
67951
68022
|
onChange: (value) => {
|
|
67952
68023
|
props.write([
|