@yadsh/dsh-qa-surface 0.7.1 → 0.7.3

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.
Files changed (35) hide show
  1. package/lib/access/service.js +3 -0
  2. package/lib/access/service.js.map +1 -1
  3. package/lib/client/QaSurface.js +4 -1
  4. package/lib/client/QaSurface.js.map +1 -1
  5. package/lib/client/components/QaChangelog.js +30 -0
  6. package/lib/client/components/QaChangelog.js.map +1 -1
  7. package/lib/client/components/QaHeader.js +2 -2
  8. package/lib/client/components/QaHeader.js.map +1 -1
  9. package/lib/client/session-sources.js +20 -1
  10. package/lib/client/session-sources.js.map +1 -1
  11. package/lib/client/styles.js +10 -7
  12. package/lib/client/styles.js.map +1 -1
  13. package/lib/client/user-settings/GeneralSettingsPage.js +6 -5
  14. package/lib/client/user-settings/GeneralSettingsPage.js.map +1 -1
  15. package/lib/client/user-settings/SkillToolPicker.js +1 -1
  16. package/lib/client/user-settings/SkillToolPicker.js.map +1 -1
  17. package/lib/client/user-settings/StartersSettingsPage.js +10 -10
  18. package/lib/client/user-settings/StartersSettingsPage.js.map +1 -1
  19. package/lib/client.js +123 -46
  20. package/lib/client.js.map +1 -1
  21. package/lib/enforcement/tool-grants.js +40 -7
  22. package/lib/enforcement/tool-grants.js.map +1 -1
  23. package/lib/enforcement/tool-mask.js +52 -0
  24. package/lib/enforcement/tool-mask.js.map +1 -0
  25. package/lib/provenance/extractors.js +26 -1
  26. package/lib/provenance/extractors.js.map +1 -1
  27. package/lib/secure-session.js +28 -4
  28. package/lib/secure-session.js.map +1 -1
  29. package/lib/types/client/components/QaHeader.d.ts +11 -1
  30. package/lib/types/client/session-sources.d.ts +9 -0
  31. package/lib/types/client/user-settings/GeneralSettingsPage.d.ts +5 -4
  32. package/lib/types/enforcement/tool-grants.d.ts +21 -3
  33. package/lib/types/enforcement/tool-mask.d.ts +38 -0
  34. package/lib/types/secure-session.d.ts +12 -0
  35. package/package.json +2 -2
@@ -49,16 +49,16 @@ export function QaStartersSettingsPage(props) {
49
49
  return (_jsxs("form", { id: FORM_ID, className: "dsh-qa-settings__page", onSubmit: submit, children: [_jsx("h3", { className: "dsh-qa-settings__page-title", children: "\u0411\u044B\u0441\u0442\u0440\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F" }), _jsx("p", { className: "dsh-qa-settings__lead", children: "\u0411\u044B\u0441\u0442\u0440\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u2014 \u043A\u043D\u043E\u043F\u043A\u0438 \u043D\u0430\u0434 \u0441\u0442\u0440\u043E\u043A\u043E\u0439 \u0432\u0432\u043E\u0434\u0430 \u0432 \u043F\u0443\u0441\u0442\u043E\u043C \u0447\u0430\u0442\u0435. \u041D\u0430\u0436\u0430\u0442\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u0440\u043E\u043C\u043F\u0442, \u043D\u0435 \u0437\u0430\u043F\u043E\u043B\u043D\u044F\u044F \u043F\u043E\u043B\u0435." }), _jsx(QaSettingsToggle, { checked: !hideDefaults, label: "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0435 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438", hint: "\u0412\u043E\u043F\u0440\u043E\u0441\u044B, \u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0435 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u043E\u043C \u0441\u0442\u0435\u043D\u0434\u0430, \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u0440\u044F\u0434\u043E\u043C \u0441 \u0432\u0430\u0448\u0438\u043C\u0438 \u043A\u043D\u043E\u043F\u043A\u0430\u043C\u0438.", onChange: (visible) => {
50
50
  setHideDefaults(!visible);
51
51
  setSaved(false);
52
- } }), rows.length === 0 ? (_jsx("p", { className: "dsh-qa-settings__field-hint", children: "\u0421\u0432\u043E\u0438\u0445 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A \u043D\u0435\u0442: \u0432 \u043F\u0443\u0441\u0442\u043E\u043C \u0447\u0430\u0442\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0435 \u0432\u043E\u043F\u0440\u043E\u0441\u044B." })) : (_jsx("div", { className: "dsh-qa-starters__list", children: rows.map((row, index) => (_jsxs("div", { className: "dsh-qa-starters__item", children: [_jsxs("div", { className: "dsh-qa-starters__item-head", children: [_jsx("div", { className: "dsh-qa-settings__field", children: _jsxs("label", { className: "dsh-qa-settings__field-label", children: ["\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435", _jsx("input", { value: row.label, maxLength: QA_STARTERS_MAX_LABEL, placeholder: "\u0427\u0442\u043E \u0432\u0438\u0434\u043D\u043E \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0435", onChange: (event) => {
53
- const value = event.currentTarget.value;
54
- setRows((current) => current.map((candidate, at) => at === index
55
- ? { ...candidate, label: value }
56
- : candidate));
57
- setSaved(false);
58
- } })] }) }), _jsx("button", { type: "button", className: "dsh-qa-starters__remove", "aria-label": `Удалить «${row.label.trim() || "без названия"}»`, title: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", onClick: () => {
59
- setRows((current) => current.filter((_, at) => at !== index));
60
- setSaved(false);
61
- }, children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "m4 4 8 8m0-8-8 8" }) }) })] }), _jsx("div", { className: "dsh-qa-settings__field", children: _jsxs("label", { className: "dsh-qa-settings__field-label", children: ["\u041F\u0440\u043E\u043C\u043F\u0442", _jsx("textarea", { rows: 2, value: row.prompt, maxLength: QA_STARTERS_MAX_PROMPT, placeholder: "\u0427\u0442\u043E \u0443\u0439\u0434\u0451\u0442 \u0432 \u0447\u0430\u0442 \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438", onChange: (event) => {
52
+ } }), rows.length === 0 ? (_jsx("p", { className: "dsh-qa-settings__field-hint", children: "\u0421\u0432\u043E\u0438\u0445 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A \u043D\u0435\u0442: \u0432 \u043F\u0443\u0441\u0442\u043E\u043C \u0447\u0430\u0442\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0435 \u0432\u043E\u043F\u0440\u043E\u0441\u044B." })) : (_jsx("div", { className: "dsh-qa-starters__list", children: rows.map((row, index) => (_jsxs("div", { className: "dsh-qa-starters__item", children: [_jsx("div", { className: "dsh-qa-settings__field", children: _jsxs("label", { className: "dsh-qa-settings__field-label", children: ["\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435", _jsx("input", { value: row.label, maxLength: QA_STARTERS_MAX_LABEL, placeholder: "\u0427\u0442\u043E \u0432\u0438\u0434\u043D\u043E \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0435", onChange: (event) => {
53
+ const value = event.currentTarget.value;
54
+ setRows((current) => current.map((candidate, at) => at === index
55
+ ? { ...candidate, label: value }
56
+ : candidate));
57
+ setSaved(false);
58
+ } })] }) }), _jsx("button", { type: "button", className: "dsh-qa-starters__remove", "aria-label": `Удалить «${row.label.trim() || "без названия"}»`, title: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", onClick: () => {
59
+ setRows((current) => current.filter((_, at) => at !== index));
60
+ setSaved(false);
61
+ }, children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "m4 4 8 8m0-8-8 8" }) }) }), _jsx("div", { className: "dsh-qa-settings__field", children: _jsxs("label", { className: "dsh-qa-settings__field-label", children: ["\u041F\u0440\u043E\u043C\u043F\u0442", _jsx("textarea", { rows: 2, value: row.prompt, maxLength: QA_STARTERS_MAX_PROMPT, placeholder: "\u0427\u0442\u043E \u0443\u0439\u0434\u0451\u0442 \u0432 \u0447\u0430\u0442 \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438", onChange: (event) => {
62
62
  const value = event.currentTarget.value;
63
63
  setRows((current) => current.map((candidate, at) => at === index
64
64
  ? { ...candidate, prompt: value }
@@ -1 +1 @@
1
- {"version":3,"file":"StartersSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/StartersSettingsPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StartersSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/StartersSettingsPage.tsx"],"names":[],"mappings":"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"}
package/lib/client.js CHANGED
@@ -11238,10 +11238,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11238
11238
  this.refreshing = false;
11239
11239
  this.refusal = "";
11240
11240
  }
11241
+ /**
11242
+ * The Host's bundles win the turns they share with the projection, with one
11243
+ * exception: a bundle that collected nothing never erases a turn the
11244
+ * transcript accounts for. Both channels read the same durable tool results,
11245
+ * so a turn the projection filled and the Host reported empty means the
11246
+ * Host's collection missed that turn, not that the answer had no sources —
11247
+ * and without this guard such a turn loses the sources the reader could see
11248
+ * while it ran the moment the Host answers for it.
11249
+ */
11241
11250
  merge(projected) {
11242
11251
  const merged = /* @__PURE__ */ new Map();
11243
11252
  for (const bundle of projected) merged.set(bundle.turn, bundle);
11244
- for (const bundle of this.bundles) merged.set(bundle.turn, bundle);
11253
+ for (const bundle of this.bundles) {
11254
+ const collected = merged.get(bundle.turn);
11255
+ if (collected !== void 0 && carriesNothing(bundle) && !carriesNothing(collected)) continue;
11256
+ merged.set(bundle.turn, bundle);
11257
+ }
11245
11258
  return [...merged.values()].sort((left, right) => left.turn - right.turn);
11246
11259
  }
11247
11260
  /**
@@ -11282,6 +11295,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11282
11295
  }
11283
11296
  }
11284
11297
  };
11298
+ /** True when a bundle holds no source at all, promoted or discovered. */
11299
+ function carriesNothing(bundle) {
11300
+ return bundle.sources.length === 0 && (bundle.discovered?.length ?? 0) === 0;
11301
+ }
11285
11302
  /** Stable text for one refusal, so the same failure is not reported twice. */
11286
11303
  function refusalKey(error) {
11287
11304
  if (typeof error === "string") return error;
@@ -12085,6 +12102,24 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12085
12102
  }
12086
12103
  };
12087
12104
  }
12105
+ /**
12106
+ * The Host's web tool opens its result with an envelope — `Fetched <url>
12107
+ * (HTTP <code>)`, then the untrusted-content notice — before the page itself.
12108
+ * Both lines are dropped here, and so is a first line that is the page's own
12109
+ * address: the card already prints the target URL, so a snippet drawn from
12110
+ * either of them would only repeat what the reader can already see.
12111
+ */
12112
+ const WEB_FETCH_ENVELOPE = /^(?:Fetched\s+\S+\s+\(HTTP\s+\d+\)|External web content follows\..*)$/u;
12113
+ function fetchedSnippet(value, uri) {
12114
+ if (value === void 0) return void 0;
12115
+ const target = uri.replace(/\/+$/u, "");
12116
+ return snippet(value.split(/\r?\n/u).filter((line) => {
12117
+ const text = line.trim();
12118
+ if (text === "") return true;
12119
+ if (WEB_FETCH_ENVELOPE.test(text)) return false;
12120
+ return text.replace(/\/+$/u, "") !== target;
12121
+ }).join("\n"));
12122
+ }
12088
12123
  function createWebFetchExtractor(urlOptions = {}) {
12089
12124
  return {
12090
12125
  id: "dsh-web-fetch",
@@ -12100,7 +12135,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12100
12135
  if (uri === null) return [];
12101
12136
  const explicitTitle = typeof meta?.title === "string" && meta.title.trim() !== "" ? meta.title.trim() : void 0;
12102
12137
  const titleExplicit = explicitTitle !== void 0;
12103
- const sourceSnippet = snippet(firstText(context.result));
12138
+ const sourceSnippet = fetchedSnippet(firstText(context.result), uri);
12104
12139
  return [{
12105
12140
  id: `web:${uri}`,
12106
12141
  kind: "web",
@@ -14862,7 +14897,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14862
14897
  ]
14863
14898
  });
14864
14899
  }
14865
- function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, agentPreset, roleSelector, administration, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesOpen, onOpenFiles, panelLauncher, showReset, resetDisabled, onReset }) {
14900
+ function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, agentPreset, roleSelector, administration, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesOpen, onOpenFiles, settings, panelLauncher, showReset, resetDisabled, onReset }) {
14866
14901
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("header", {
14867
14902
  className: "dsh-qa-header",
14868
14903
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -14988,7 +15023,22 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14988
15023
  onClick: administration.onOpen,
14989
15024
  children: "Администрирование"
14990
15025
  }),
14991
- panelLauncher
15026
+ panelLauncher,
15027
+ settings === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
15028
+ type: "button",
15029
+ className: "dsh-qa-header__settings",
15030
+ title: settings.label,
15031
+ onClick: settings.onOpen,
15032
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
15033
+ viewBox: "0 0 16 16",
15034
+ "aria-hidden": "true",
15035
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
15036
+ cx: "8",
15037
+ cy: "8",
15038
+ r: "2.2"
15039
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M8 1.8v2M8 12.2v2M1.8 8h2M12.2 8h2M3.6 3.6l1.4 1.4M11 11l1.4 1.4M3.6 12.4 5 11M11 5l1.4-1.4" })]
15040
+ }), "Настройки"]
15041
+ })
14992
15042
  ]
14993
15043
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14994
15044
  className: "dsh-qa-header__tabs",
@@ -16572,8 +16622,32 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16572
16622
  }
16573
16623
  //#endregion
16574
16624
  //#region src/client/components/QaChangelog.tsx
16575
- const QA_VERSION = "0.7.1";
16625
+ const QA_VERSION = "0.7.3";
16576
16626
  const QA_CHANGELOG = [
16627
+ {
16628
+ version: "0.7.3",
16629
+ date: "2026-09-16",
16630
+ sections: [{
16631
+ title: "Исправления",
16632
+ items: ["Инструменты, которые стенд подключает пресетом агента — работа с файлами, поиск по каталогам, интернет, делегирование экспертам-исследователям — больше не исчезают из чата. Ограничение набора собиралось только по глобальному списку инструментов, поэтому всё, что агент получает от пресета, из него выпадало: сервер отказывал в допуске с «unknown-tools», а при выборе роли проверка политики в браузере сообщала о несовпадении — чат не открывался. Теперь ограничение учитывает всё, что агент наследует, пропускает только служебные инструменты, которые он регистрирует сам (их в ограничение подставить нельзя), и из-за одного неназываемого имени сессия больше не срывается — такое имя просто не попадает в ограничение, а доступ к нему по-прежнему закрыт проверкой перед вызовом."]
16633
+ }]
16634
+ },
16635
+ {
16636
+ version: "0.7.2",
16637
+ date: "2026-09-16",
16638
+ sections: [{
16639
+ title: "Исправления",
16640
+ items: [
16641
+ "Чаты снова открываются: сервер отказывал в допуске, потому что набор инструментов роли называл служебный инструмент проверки активации, а такой инструмент агент регистрирует у себя сам — в ограничение его подставить нельзя. Теперь ограничение ставится только на наследуемые инструменты, служебный остаётся доступным, и выдача инструментов навыком больше не теряется молча из-за того же имени.",
16642
+ "Источники, появившиеся во время ответа, больше не исчезают после его завершения. Пустой ответ сервера об источниках хода больше не затирает то, что браузер прочитал из самой истории чата: список источников, видимый во время работы агента, остаётся рядом с ответом и после её окончания.",
16643
+ "В карточке скачанной страницы больше не повторяется её адрес: вместо служебной строки веб-инструмента «Fetched … (HTTP 200)» показывается начало текста самой страницы.",
16644
+ "В разделе «Быстрые сообщения» поля «Название» и «Промпт» выровнены по одной правой границе, а кнопка удаления подсказки больше не выглядит пустым полем ввода.",
16645
+ "Список инструментов в редакторе навыка стал компактнее и выше: длинные описания занимают две строки, а полный текст виден во всплывающей подсказке.",
16646
+ "Из раздела «Общие» убран пункт «Персональные интеграции и внешние системы» из списка будущих возможностей: интеграции уже доступны отдельным разделом настроек.",
16647
+ "Настройки пользователя больше не теряются в деплоях без списка чатов: если боковая панель с чатами скрыта (это поведение по умолчанию), кнопка «Настройки» появляется в шапке рядом с «Файлами», а при включённой панели вход остаётся прежним — по своему имени внизу списка чатов."
16648
+ ]
16649
+ }]
16650
+ },
16577
16651
  {
16578
16652
  version: "0.7.1",
16579
16653
  date: "2026-09-16",
@@ -16790,7 +16864,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16790
16864
  className: "dsh-qa-changelog__date",
16791
16865
  children: entry.date
16792
16866
  }),
16793
- entry.version === "0.7.1" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16867
+ entry.version === "0.7.3" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16794
16868
  className: "dsh-qa-changelog__current",
16795
16869
  children: "текущая"
16796
16870
  }) : null
@@ -18111,10 +18185,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18111
18185
  //#region src/client/user-settings/GeneralSettingsPage.tsx
18112
18186
  /**
18113
18187
  * Placeholder with a purpose: the section exists so the dialog has a home for
18114
- * the user-scoped preferences that follow (notifications, integrations,
18115
- * privacy), and so the thing it must not become is written down — deployment
18116
- * and chat policy live in the Host settings, not here. It shows the account
18117
- * facts a user can act on today and nothing invented.
18188
+ * the user-scoped preferences that follow (notifications, privacy), and so the
18189
+ * thing it must not become is written down — deployment and chat policy live in
18190
+ * the Host settings, not here. It shows the account facts a user can act on
18191
+ * today and nothing invented, and it names only what is still missing: a
18192
+ * preference that already has its own tab does not belong on this list.
18118
18193
  */
18119
18194
  function QaGeneralSettingsPage(props) {
18120
18195
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -18152,11 +18227,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18152
18227
  title: "Скоро здесь",
18153
18228
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
18154
18229
  className: "dsh-qa-settings__list",
18155
- children: [
18156
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: "Настройки уведомлений" }),
18157
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: "Персональные интеграции и внешние системы" }),
18158
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: "Приватность и хранение данных" })
18159
- ]
18230
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: "Настройки уведомлений" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: "Приватность и хранение данных" })]
18160
18231
  })
18161
18232
  })
18162
18233
  ]
@@ -18656,6 +18727,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18656
18727
  }),
18657
18728
  tool.description === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
18658
18729
  className: "dsh-qa-toolpicker__description",
18730
+ title: tool.description,
18659
18731
  children: tool.description
18660
18732
  })
18661
18733
  ]
@@ -19273,9 +19345,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
19273
19345
  className: "dsh-qa-starters__list",
19274
19346
  children: rows.map((row, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19275
19347
  className: "dsh-qa-starters__item",
19276
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19277
- className: "dsh-qa-starters__item-head",
19278
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19348
+ children: [
19349
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19279
19350
  className: "dsh-qa-settings__field",
19280
19351
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
19281
19352
  className: "dsh-qa-settings__field-label",
@@ -19293,7 +19364,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
19293
19364
  }
19294
19365
  })]
19295
19366
  })
19296
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
19367
+ }),
19368
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
19297
19369
  type: "button",
19298
19370
  className: "dsh-qa-starters__remove",
19299
19371
  "aria-label": `Удалить «${row.label.trim() || "без названия"}»`,
@@ -19307,27 +19379,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
19307
19379
  "aria-hidden": "true",
19308
19380
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m4 4 8 8m0-8-8 8" })
19309
19381
  })
19310
- })]
19311
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19312
- className: "dsh-qa-settings__field",
19313
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
19314
- className: "dsh-qa-settings__field-label",
19315
- children: ["Промпт", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
19316
- rows: 2,
19317
- value: row.prompt,
19318
- maxLength: QA_STARTERS_MAX_PROMPT,
19319
- placeholder: "Что уйдёт в чат при нажатии",
19320
- onChange: (event) => {
19321
- const value = event.currentTarget.value;
19322
- setRows((current) => current.map((candidate, at) => at === index ? {
19323
- ...candidate,
19324
- prompt: value
19325
- } : candidate));
19326
- setSaved(false);
19327
- }
19328
- })]
19382
+ }),
19383
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19384
+ className: "dsh-qa-settings__field",
19385
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
19386
+ className: "dsh-qa-settings__field-label",
19387
+ children: ["Промпт", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
19388
+ rows: 2,
19389
+ value: row.prompt,
19390
+ maxLength: QA_STARTERS_MAX_PROMPT,
19391
+ placeholder: "Что уйдёт в чат при нажатии",
19392
+ onChange: (event) => {
19393
+ const value = event.currentTarget.value;
19394
+ setRows((current) => current.map((candidate, at) => at === index ? {
19395
+ ...candidate,
19396
+ prompt: value
19397
+ } : candidate));
19398
+ setSaved(false);
19399
+ }
19400
+ })]
19401
+ })
19329
19402
  })
19330
- })]
19403
+ ]
19331
19404
  }, index))
19332
19405
  }),
19333
19406
  rows.length >= 12 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
@@ -23304,6 +23377,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
23304
23377
  filesOpen: rail.railOpen && rail.railTab === "files",
23305
23378
  onOpenFiles: () => rail.openTab("files"),
23306
23379
  panelLauncher: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaPanelLauncher, { panels: props.panels }),
23380
+ settings: showSidebar ? void 0 : settingsEntry,
23307
23381
  showReset: showResetButton,
23308
23382
  resetDisabled: controller === void 0 || state.phase === "creating",
23309
23383
  onReset: handleNewChat
@@ -23925,21 +23999,20 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
23925
23999
  .dsh-qa-settings__list{margin:0;padding-left:18px;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}
23926
24000
  .dsh-qa-settings__list li{margin:2px 0}
23927
24001
  .dsh-qa-starters__list{display:flex;flex-direction:column;gap:10px}
23928
- .dsh-qa-starters__item{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-3)}
23929
- .dsh-qa-starters__item-head{display:flex;align-items:flex-end;gap:8px}
23930
- .dsh-qa-starters__item-head .dsh-qa-settings__field{flex:1}
23931
- .dsh-qa-starters__remove{appearance:none;flex:none;width:30px;height:30px;margin-bottom:5px;display:flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
23932
- .dsh-qa-starters__remove:hover{color:var(--dsh-qa-error);border-color:var(--dsh-alias-label-error)}
24002
+ .dsh-qa-starters__item{display:grid;grid-template-columns:minmax(0,1fr) 28px;column-gap:8px;row-gap:8px;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-3)}
24003
+ .dsh-qa-starters__item>.dsh-qa-settings__field{grid-column:1}
24004
+ .dsh-qa-starters__remove{appearance:none;grid-column:2;grid-row:1;align-self:end;flex:none;width:28px;height:28px;margin-bottom:6px;display:flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:8px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
24005
+ .dsh-qa-starters__remove:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsh-qa-error)}
23933
24006
  .dsh-qa-starters__remove:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
23934
24007
  .dsh-qa-starters__remove svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
23935
- .dsh-qa-toolpicker__list{display:flex;flex-direction:column;gap:2px;max-height:320px;margin:8px 0 0;padding:0;list-style:none;overflow-y:auto}
24008
+ .dsh-qa-toolpicker__list{display:flex;flex-direction:column;gap:2px;max-height:min(52vh,440px);margin:8px 0 0;padding:0;list-style:none;overflow-y:auto}
23936
24009
  .dsh-qa-toolpicker__group{padding:8px 0 3px;color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:600;line-height:16px}
23937
24010
  .dsh-qa-toolpicker__row{margin:0}
23938
24011
  .dsh-qa-toolpicker__label{display:grid;grid-template-columns:16px minmax(0,auto) minmax(0,1fr);align-items:baseline;gap:9px;padding:6px 8px;border-radius:8px;cursor:pointer}
23939
24012
  .dsh-qa-toolpicker__label:hover{background:var(--dsw-alias-interactive-bg-hover)}
23940
24013
  .dsh-qa-toolpicker__label input{width:15px;height:15px;margin:0;accent-color:var(--dsh-qa-brand)}
23941
24014
  .dsh-qa-toolpicker__name{color:var(--dsw-alias-label-primary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:18px}
23942
- .dsh-qa-toolpicker__description{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;min-width:0}
24015
+ .dsh-qa-toolpicker__description{display:-webkit-box;overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;min-width:0;-webkit-box-orient:vertical;-webkit-line-clamp:2}
23943
24016
  .dsh-qa-toolpicker__selected{margin-right:auto;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}
23944
24017
  @media (max-width:720px){.dsh-qa-modal__panel--settings{height:min(640px,calc(100vh - 48px))}.dsh-qa-settings{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.dsh-qa-settings__nav{flex-direction:row;gap:4px;padding:8px 10px;border-right:0;border-bottom:1px solid var(--dsw-alias-border-l2);overflow-x:auto;overflow-y:hidden}.dsh-qa-settings__tab{white-space:nowrap}.dsh-qa-settings__content{padding:12px 14px 0}.dsh-qa-settings__page{padding-bottom:18px}.dsh-qa-settings__actions{margin:auto -14px -18px;padding:10px 14px}}
23945
24018
  .dsh-qa-surface *{box-sizing:border-box}
@@ -24001,6 +24074,10 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
24001
24074
  .dsh-qa-header__files[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
24002
24075
  .dsh-qa-header__files svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
24003
24076
  .dsh-qa-header__files:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
24077
+ .dsh-qa-header__settings{display:inline-flex;align-items:center;gap:6px;flex:none;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:20px;cursor:pointer}
24078
+ .dsh-qa-header__settings:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
24079
+ .dsh-qa-header__settings svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
24080
+ .dsh-qa-header__settings:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
24004
24081
  .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}
24005
24082
  .dsh-qa-role-selector select:hover,.dsh-qa-header__admin:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
24006
24083
  .dsh-qa-role-selector select:focus-visible,.dsh-qa-header__admin:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}