@yadsh/dsh-qa-surface 0.11.0 → 0.11.1
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 +81 -58
- package/lib/client/components/QaChangelog.js +16 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client.js +17 -3
- package/lib/client.js.map +1 -1
- package/lib/integration/attachments.js +16 -1
- package/lib/integration/attachments.js.map +1 -1
- package/lib/integration/http.js +59 -21
- package/lib/integration/http.js.map +1 -1
- package/lib/integration/service.js +42 -0
- package/lib/integration/service.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -269,6 +269,10 @@ config:
|
|
|
269
269
|
# Presets whose sessions may unlock the catalog. Empty leaves the gate open:
|
|
270
270
|
# only do that when this Host serves one agent composition.
|
|
271
271
|
activationPresets: []
|
|
272
|
+
# Where the documentation readers look. Empty reads `docs/` inside each
|
|
273
|
+
# chat's own workspace; name the corpus when it is published once, outside
|
|
274
|
+
# every per-user workspace (see "Dynamic QA tools" below).
|
|
275
|
+
docsRoot: ""
|
|
272
276
|
```
|
|
273
277
|
|
|
274
278
|
`workspaceId` is recommended for a deterministic assistant. Without it, DSH
|
|
@@ -339,6 +343,17 @@ name. `tools.dynamicActivation: false` restores the always-on behaviour and
|
|
|
339
343
|
attaches the catalog to every managed agent at creation — useful for a
|
|
340
344
|
deployment that would rather debug the tool surface than the trigger.
|
|
341
345
|
|
|
346
|
+
`docs_search` and `docs_read` read the `docs/` directory of the calling chat's
|
|
347
|
+
own workspace by default. A deployment that publishes the corpus **once** — for
|
|
348
|
+
example `/workspace/docs` next to a per-user workspace layout — sets
|
|
349
|
+
`tools.docsRoot` to that absolute path, because with
|
|
350
|
+
`accounts.perUserWorkspace: true` the chat's workspace is a per-account
|
|
351
|
+
directory that holds no documentation: the readers would answer "there is no
|
|
352
|
+
documentation tree here" in every chat, while the `glob`/`grep`/`read` tools
|
|
353
|
+
reached the corpus by absolute path all along. The root is held to the same
|
|
354
|
+
rules either way: an absolute path, a real directory, no symlinks, and every
|
|
355
|
+
path is canonicalized and refused if it leaves the tree.
|
|
356
|
+
|
|
342
357
|
These tools are not `lockdown.toolPolicy.allow` entries, and cannot be: that
|
|
343
358
|
list is validated against the mounted catalog at attestation time, and a tool
|
|
344
359
|
that only appears later would fail the check. The QA execution guard authorizes
|
|
@@ -625,13 +640,13 @@ lockdown:
|
|
|
625
640
|
|
|
626
641
|
slashCommands:
|
|
627
642
|
skills:
|
|
628
|
-
mode: allow-list
|
|
643
|
+
mode: allow-list # deny-all | allow-list | all
|
|
629
644
|
allow:
|
|
630
645
|
- generate-tkp
|
|
631
646
|
- generate-tz
|
|
632
647
|
- gap-analysis
|
|
633
648
|
commands:
|
|
634
|
-
mode: deny-all
|
|
649
|
+
mode: deny-all # deny-all | allow-list | all
|
|
635
650
|
allow: []
|
|
636
651
|
palette:
|
|
637
652
|
enabled: true
|
|
@@ -699,42 +714,41 @@ through the `qaSurfacePanels` service; the React body is registered separately
|
|
|
699
714
|
in the keyed `qa.surface.panel` slot under the same implementation id:
|
|
700
715
|
|
|
701
716
|
```ts
|
|
702
|
-
import type { Context } from "@deepseek-ai/cordis"
|
|
703
|
-
import type { PropsRuntime } from "@deepseek-ai/dsh-client-ui-slots"
|
|
704
|
-
import type {} from "@deepseek-ai/dsh-client-ui-renderer/client"
|
|
705
|
-
import { QA_SURFACE_PANEL_SLOT } from "@yadsh/dsh-qa-surface/client/panels"
|
|
717
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
718
|
+
import type { PropsRuntime } from "@deepseek-ai/dsh-client-ui-slots";
|
|
719
|
+
import type {} from "@deepseek-ai/dsh-client-ui-renderer/client";
|
|
720
|
+
import { QA_SURFACE_PANEL_SLOT } from "@yadsh/dsh-qa-surface/client/panels";
|
|
706
721
|
|
|
707
|
-
const id = "@example/dsh-qa-browser"
|
|
722
|
+
const id = "@example/dsh-qa-browser";
|
|
708
723
|
|
|
709
724
|
function BrowserPanel(props: PropsRuntime<typeof QA_SURFACE_PANEL_SLOT>) {
|
|
710
725
|
// panelId, panelKind, sessionId, visible, presentation, params,
|
|
711
726
|
// actions and a registration-lifetime AbortSignal arrive in props.
|
|
712
|
-
return null
|
|
727
|
+
return null;
|
|
713
728
|
}
|
|
714
729
|
|
|
715
|
-
export const inject = ["slots", "qaSurfacePanels"]
|
|
730
|
+
export const inject = ["slots", "qaSurfacePanels"];
|
|
716
731
|
|
|
717
732
|
export function apply(ctx: Context) {
|
|
718
|
-
ctx.effect(() =>
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
733
|
+
ctx.effect(() =>
|
|
734
|
+
ctx.qaSurfacePanels.register({
|
|
735
|
+
id,
|
|
736
|
+
kind: "browser",
|
|
737
|
+
title: () => "Browser",
|
|
738
|
+
icon: "browser",
|
|
739
|
+
order: 100,
|
|
740
|
+
keepMounted: true,
|
|
741
|
+
}),
|
|
742
|
+
);
|
|
726
743
|
|
|
727
744
|
ctx.slots.inject(QA_SURFACE_PANEL_SLOT, () =>
|
|
728
|
-
ctx.slots.register(
|
|
729
|
-
|
|
730
|
-
BrowserPanel,
|
|
731
|
-
),
|
|
732
|
-
)
|
|
745
|
+
ctx.slots.register({ name: QA_SURFACE_PANEL_SLOT, key: id }, BrowserPanel),
|
|
746
|
+
);
|
|
733
747
|
|
|
734
748
|
ctx.qaSurfacePanels.open("browser", {
|
|
735
749
|
reason: "extension",
|
|
736
750
|
focus: false,
|
|
737
|
-
})
|
|
751
|
+
});
|
|
738
752
|
}
|
|
739
753
|
```
|
|
740
754
|
|
|
@@ -756,17 +770,19 @@ authorize every Host call server-side and must not persist credentials in the
|
|
|
756
770
|
browser.
|
|
757
771
|
|
|
758
772
|
```ts
|
|
759
|
-
import type { Context } from "@deepseek-ai/cordis"
|
|
773
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
760
774
|
|
|
761
|
-
export const inject = ["qaUserSettingsSections"]
|
|
775
|
+
export const inject = ["qaUserSettingsSections"];
|
|
762
776
|
|
|
763
777
|
export function apply(ctx: Context) {
|
|
764
|
-
ctx.effect(() =>
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
778
|
+
ctx.effect(() =>
|
|
779
|
+
ctx.qaUserSettingsSections.register({
|
|
780
|
+
id: "integrations",
|
|
781
|
+
title: "Интеграции",
|
|
782
|
+
order: 40,
|
|
783
|
+
component: IntegrationsPage,
|
|
784
|
+
}),
|
|
785
|
+
);
|
|
770
786
|
}
|
|
771
787
|
```
|
|
772
788
|
|
|
@@ -783,9 +799,9 @@ the credential is transport authentication only: never persist it, log it, or
|
|
|
783
799
|
put it in a URL, a tool argument or any model-visible value.
|
|
784
800
|
|
|
785
801
|
```ts
|
|
786
|
-
import type { Context } from "@deepseek-ai/cordis"
|
|
802
|
+
import type { Context } from "@deepseek-ai/cordis";
|
|
787
803
|
|
|
788
|
-
export const inject = ["qaUserSession", "slots"]
|
|
804
|
+
export const inject = ["qaUserSession", "slots"];
|
|
789
805
|
|
|
790
806
|
export function apply(ctx: Context) {
|
|
791
807
|
ctx.effect(() =>
|
|
@@ -793,7 +809,9 @@ export function apply(ctx: Context) {
|
|
|
793
809
|
ctx.slots.register(
|
|
794
810
|
{ name: "settings.plugin.item", key: "my-namespace" },
|
|
795
811
|
MyCard,
|
|
796
|
-
)
|
|
812
|
+
),
|
|
813
|
+
),
|
|
814
|
+
);
|
|
797
815
|
}
|
|
798
816
|
```
|
|
799
817
|
|
|
@@ -957,12 +975,12 @@ metadata:
|
|
|
957
975
|
qa-surface:
|
|
958
976
|
version: 1
|
|
959
977
|
audience:
|
|
960
|
-
type: subroles
|
|
978
|
+
type: subroles # or: type: common
|
|
961
979
|
include: [analyst, presales]
|
|
962
980
|
tools:
|
|
963
981
|
requires: [browser_open, browser_click]
|
|
964
982
|
grant:
|
|
965
|
-
lifecycle: session
|
|
983
|
+
lifecycle: session # the only lifecycle in v1
|
|
966
984
|
requireAll: true
|
|
967
985
|
---
|
|
968
986
|
```
|
|
@@ -988,6 +1006,7 @@ declared audience next to the effective one with a
|
|
|
988
1006
|
`Healthy`/`Degraded`/`Blocked` state. Every activation is recorded on the
|
|
989
1007
|
session record with the requested, granted and denied tools, so a later review
|
|
990
1008
|
can see what a conversation actually gained.
|
|
1009
|
+
|
|
991
1010
|
## Administrative console
|
|
992
1011
|
|
|
993
1012
|
`/qa/admin` is the review and administration surface. It is part of the QA page
|
|
@@ -1045,13 +1064,13 @@ default**.
|
|
|
1045
1064
|
|
|
1046
1065
|
```yaml
|
|
1047
1066
|
integration:
|
|
1048
|
-
enabled: true
|
|
1049
|
-
basePath: /qa/api
|
|
1067
|
+
enabled: true # requires accounts.enabled: true
|
|
1068
|
+
basePath: /qa/api # POST {basePath}/ask, GET {basePath}/session, GET {basePath}/health
|
|
1050
1069
|
tokenTtlDays: 90
|
|
1051
1070
|
requestTimeoutMs: 90000
|
|
1052
1071
|
maxConcurrent: 4
|
|
1053
1072
|
requestsPerMinute: 60
|
|
1054
|
-
maxAnswerCharacters: 4096
|
|
1073
|
+
maxAnswerCharacters: 4096 # the answer the ticket comment can hold
|
|
1055
1074
|
```
|
|
1056
1075
|
|
|
1057
1076
|
The API needs accounts: a caller is an account, and the credential it presents
|
|
@@ -1121,19 +1140,23 @@ capability snapshot like any other QA chat.
|
|
|
1121
1140
|
`session_id`, `context` as a JSON **string**) plus repeated `files` parts (at
|
|
1122
1141
|
most five, 10 MiB each by default).
|
|
1123
1142
|
|
|
1124
|
-
| Attachment
|
|
1125
|
-
|
|
|
1126
|
-
| `image/png`, `image/jpeg`, `image/webp`, `image/gif` | the image itself
|
|
1127
|
-
| `text/plain`, `text/csv`, `text/markdown`
|
|
1128
|
-
| `application/pdf`, Word, Excel, PowerPoint
|
|
1129
|
-
| anything else
|
|
1143
|
+
| Attachment | What the model receives |
|
|
1144
|
+
| ---------------------------------------------------- | ---------------------------------------------------- |
|
|
1145
|
+
| `image/png`, `image/jpeg`, `image/webp`, `image/gif` | the image itself |
|
|
1146
|
+
| `text/plain`, `text/csv`, `text/markdown` | its text, under a heading with the file name |
|
|
1147
|
+
| `application/pdf`, Word, Excel, PowerPoint | text extracted by the deployment's document pipeline |
|
|
1148
|
+
| anything else | `415` — the fallback the bridge already implements |
|
|
1130
1149
|
|
|
1131
1150
|
A file the Host cannot read refuses the whole question with `415` rather than
|
|
1132
1151
|
being skipped: an answer produced without the material it was asked about is
|
|
1133
1152
|
worse than asking again without it. Documents need the `documents` plugin
|
|
1134
1153
|
installed; without it PDF and Office attachments take the same `415` path, and
|
|
1135
|
-
images and text keep working.
|
|
1136
|
-
|
|
1154
|
+
images and text keep working. An image the deployment itself refuses — one the
|
|
1155
|
+
selected model cannot see, or one past the Host's image limits — answers the
|
|
1156
|
+
same `415`, with the reason (`MODEL_DOES_NOT_SUPPORT_IMAGES`, `IMAGE_TOO_LARGE`,
|
|
1157
|
+
`IMAGE_TYPE_MISMATCH`, …) in the body and in the Host log. Attachments are read,
|
|
1158
|
+
not stored: the bytes live in a temporary directory for the length of one
|
|
1159
|
+
extraction, and the text is
|
|
1137
1160
|
bounded (60 000 characters per file, 120 000 per question, truncated with a
|
|
1138
1161
|
marker). Everything the bridge's own filter lets through is accepted; archives,
|
|
1139
1162
|
executables and media are not.
|
|
@@ -1204,17 +1227,17 @@ curl -sS https://dsh.example.local/qa/api/health \
|
|
|
1204
1227
|
|
|
1205
1228
|
### Statuses
|
|
1206
1229
|
|
|
1207
|
-
| Status | Meaning
|
|
1208
|
-
|
|
|
1209
|
-
| 200
|
|
1210
|
-
| 400
|
|
1211
|
-
| 401
|
|
1212
|
-
| 403
|
|
1213
|
-
| 404
|
|
1214
|
-
| 413
|
|
1215
|
-
| 415
|
|
1216
|
-
| 429
|
|
1217
|
-
| 503
|
|
1230
|
+
| Status | Meaning |
|
|
1231
|
+
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1232
|
+
| 200 | Answered, or escalated with an empty `answer` |
|
|
1233
|
+
| 400 | Malformed body (no `message`, broken JSON or `context`), a missing `chat_id`, or a cursor that is not a whole number |
|
|
1234
|
+
| 401 | Missing, expired, revoked or unknown token |
|
|
1235
|
+
| 403 | Valid token without the scope the call needs (`ask`, `sessions:read`) |
|
|
1236
|
+
| 404 | A chat the token's account does not own (or that does not exist); also `integration.enabled` is false: no route is registered, and the request reaches whatever the deployment serves for unknown paths |
|
|
1237
|
+
| 413 | Body or attachment over the configured limit |
|
|
1238
|
+
| 415 | Unsupported content type, or an attachment the deployment refused |
|
|
1239
|
+
| 429 | Per-token rate limit or the deployment's concurrency limit |
|
|
1240
|
+
| 503 | The QA assistant failed before it could answer; retry |
|
|
1218
1241
|
|
|
1219
1242
|
Response bodies carry `{ "error": "…", "code": "…" }` with the same reason
|
|
1220
1243
|
vocabulary, so a client can branch on the code instead of parsing prose.
|
|
@@ -2,6 +2,20 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { QaModal } from "./QaModal.js";
|
|
3
3
|
export const QA_VERSION = __DSH_QA_VERSION__;
|
|
4
4
|
export const QA_CHANGELOG = [
|
|
5
|
+
{
|
|
6
|
+
version: "0.11.1",
|
|
7
|
+
date: "2026-09-22",
|
|
8
|
+
sections: [
|
|
9
|
+
{
|
|
10
|
+
title: "Исправления",
|
|
11
|
+
items: [
|
|
12
|
+
"Отказ по вложению больше не выглядит как недоступный стенд. Когда вложение отклоняет сам стенд — модель не умеет смотреть картинки, картинка больше установленного на стенде предела, содержимое не того типа, который заявила внешняя программа, — ответ теперь тот же, что и на нечитаемый файл: «повтори без вложений», с причиной отказа в ответе и в журнале. Раньше такой запрос получал ответ «сервис недоступен», а внешняя программа по своей же логике повторяла его без конца: обращение со снимком экрана не превращалось в вопрос без него и не получало ответа вообще. Теперь получает.",
|
|
13
|
+
"Два случая, когда вложение пропадало молча, тоже исправлены. Имя файла, пришедшее в международной процентной кодировке, стенд читал как обычное текстовое поле — файл не доезжал до модели, а вопрос всё равно получал ответ, уже без вложения. Часть запроса без разделителя заголовков разбиралась так же тихо: теперь она честно отклоняется, потому что ответ на вопрос, материала для которого модель не видела, хуже, чем попросить повторить запрос.",
|
|
14
|
+
"Если стенду не удалось подготовить временный каталог для чтения документа, он отвечает тем же «повтори без вложений», а не «сервис недоступен» — причина остаётся в журнале стенда.",
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
},
|
|
5
19
|
{
|
|
6
20
|
version: "0.11.0",
|
|
7
21
|
date: "2026-09-21",
|
|
@@ -24,7 +38,9 @@ export const QA_CHANGELOG = [
|
|
|
24
38
|
"Приложенный документ теперь разбирается целиком — и помощником, и панелью «Файлы». Загруженный файл стенд хранит в отдельном хранилище вложений, вне рабочего каталога чата, и читать его помощнику разрешено: путь к нему стоит в самом вопросе. Но инструменты работы с документами об этом хранилище не знали и отказывались открывать файл, который помощнику как раз разрешили прочитать, — просьба разобрать приложенный документ заканчивалась ответом «файла нет», хотя файл на месте, а приложенный документ Word нельзя было посмотреть в панели «Файлы». Теперь хранилище вложений передаётся этим инструментам так же, как его знает остальная часть стенда: документ разбирается по тому же пути, что пришёл в вопросе, а доступ к остальному содержимому хранилища не открывается — читается ровно один названный файл, и только на чтение. Доступ выдаётся тому чату, который его получил, вместе с его дочерними помощниками, и снимается вместе с чатом.",
|
|
25
39
|
"Документ Word или PDF можно приложить к вопросу — раньше он отбивался прямо при перетаскивании. Список приложимых файлов был списком текстовых расширений: он так и назывался в настройках, и сообщение об отказе перечисляло свой набор «md, txt, log и другие», никак не связанный с настройкой стенда. Получалось несоответствие: стенд разбирает такие документы конвейером документов и показывает документ Word прямо в чате, а приложить его было нельзя. Теперь разрешённые расширения — это то, чем стенд действительно умеет работать: к текстовым файлам добавлены docx и pdf, а если формат всё-таки не разрешён, отказ называет само расширение и говорит, что список задаёт оператор стенда. Там, где список задан явно, он остаётся ровно таким, каким его задали, — добавление работает для стендов, которые полагаются на значения по умолчанию.",
|
|
26
40
|
"Приложенный документ Word или PDF читается своим инструментом, а не универсальным чтением файла. Документ из вложения лежит на диске путём, и универсальное чтение отказывает таким форматам как бинарным — «cannot read …docx: binary file». Этот отказ ничего не говорит о том, есть ли файл на месте, но читался он именно так: агент решал, что документа нет, начинал искать его по рабочим каталогам и сообщал пользователю, что до файла не дотянуться, хотя конвейер документов всё это время был доступен. В разделе «Заметки модели» появилась заметка о документах: она называет инструменты конвейера (document_inspect, document_to_markdown, а для вложения по ссылке — document_from_url), говорит, что отказ универсального чтения на офисных форматах — это ожидаемый ответ, а не повод искать файл в другом месте, и что отказ самого конвейера нужно назвать вместе с путём, который он назвал. Заметка включается и переписывается своими словами, как и остальные, — стенду без конвейера документов её стоит выключить.",
|
|
41
|
+
"Источник из правой рейки открывается сразу после ответа, а не только после перезагрузки страницы. Список источников собирается из тех же записей о работе инструментов, по которым стенд решает, можно ли открыть файл, — но путь в этом списке строился от каталога, заданного настройкой стенда, а доказательства чата считают пути от рабочего каталога самого чата. Пока это один и тот же каталог, разницы нет; как только они разные (разговор, начатый при прежней настройке, или каталог пользователя внутри общего рабочего каталога), один и тот же файл получал в панели второе написание, и панель просила стенд открыть именно его — а такого пути в доказательствах чата нет. В ответ на клик приходило «источник больше не входит в доказательства этого чата», хотя источник только что был в ответе, и тот же источник открывался после перезагрузки страницы — тогда список пересобирался уже по доказательствам стенда. Теперь список источников строится от рабочего каталога чата, от того же каталога, что и доказательства, поэтому источник открывается с первого клика, а отказ остался там, где он честный: файл, которого в доказательствах этого чата нет, панель по-прежнему не открывает.",
|
|
27
42
|
"Список чатов показывает только ваши чаты. Обычно список собирался и из ваших разговоров, и из того, что этот браузер запомнил раньше, поэтому на общем компьютере — в переговорке, у стенда, за одной учётной записью Windows — в него попадали разговоры, начатые до вас: с их названиями, временем и значком работы помощника в момент, когда чужой разговор шёл. Теперь список — это ровно ваши чаты: чужой разговор в нём не появится, а разговор, начатый или открытый после входа, виден сразу, без перезагрузки страницы. На стенде без учётных записей ничего не изменилось: список по-прежнему ваш собственный. Имена фоновых помощников в плашках о завершении берутся только из ваших разговоров.",
|
|
43
|
+
"Помощник снова может читать документацию стенда там, где она лежит. Поиск и чтение документации искали её строго в каталоге docs рабочего каталога чата. Пока документация лежала рядом с чатом, это работало; на стенде с личным каталогом у каждой учётной записи рабочий каталог чата — её собственный (внутри /workspace/work), а документация опубликована один раз, отдельно. Инструмент исправно отвечал «в рабочем каталоге этого чата нет каталога docs», хотя документация на стенде есть, и так было и в чате, и у каждого эксперта: путь к ней знали только файловые инструменты, которым путь называют явно. Теперь стенд называет корень документации настройкой (tools.docsRoot, на этом стенде — /workspace/docs), и оба инструмента читают ровно это дерево: те же пути в ответе, те же проверки (корень существует, это настоящий каталог, не ссылка; путь за пределы дерева отвергается). На стенде без личных каталогов ничего не изменилось — там по-прежнему ищется docs рядом с чатом. Инструменты, которые стенд выдал помощнику сам, больше не отказывают в чате с учётной записью. Поиск и чтение документации, диагностика набора инструментов и удаление файла в рабочем каталоге выданы помощнику стендом, а не ролью: их нет ни в одном списке роли, и роль не может их отозвать. Разрешение на вызов проверяют два уровня, и в чате с учётной записью про эти инструменты знал только один — второй строил границы разговора из списка стенда, инструментов роли и того, что роль может выдать по навыку, и выданных стендом инструментов там не находил. Получался отказ «инструмент вне профиля возможностей разговора», по которому невозможно понять, чего именно не хватает: инструмент виден помощнику, стенд его выдал, а вызов всё равно не проходит. Теперь границы разговора считают инструменты стенда так же, как это уже работало в чатах без учётных записей, а проверка профиля читает их из набора самого помощника. То, чего стенд помощнику не выдавал, остаётся за ролью: отказ на такой инструмент по-прежнему называет профиль, а не разговор.",
|
|
28
44
|
],
|
|
29
45
|
},
|
|
30
46
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QaChangelog.js","sourceRoot":"","sources":["../../../src/client/components/QaChangelog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAWvC,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAW7C,MAAM,CAAC,MAAM,YAAY,GAAgC;IACvD;QACE,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE;oBACL,klBAAklB;oBACllB,20DAA20D;oBAC30D,g8BAAg8B;oBACh8B,2sBAA2sB;oBAC3sB,0lCAA0lC;oBAC1lC,8kDAA8kD;oBAC9kD,+uBAA+uB;iBAChvB;aACF;YACD;gBACE,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE;oBACL,26BAA26B;oBAC36B,m0BAAm0B;oBACn0B,++BAA++B;oBAC/+B,8qBAA8qB;
|
|
1
|
+
{"version":3,"file":"QaChangelog.js","sourceRoot":"","sources":["../../../src/client/components/QaChangelog.tsx"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -49932,8 +49932,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
49932
49932
|
}
|
|
49933
49933
|
//#endregion
|
|
49934
49934
|
//#region src/client/components/QaChangelog.tsx
|
|
49935
|
-
const QA_VERSION = "0.11.
|
|
49935
|
+
const QA_VERSION = "0.11.1";
|
|
49936
49936
|
const QA_CHANGELOG = [
|
|
49937
|
+
{
|
|
49938
|
+
version: "0.11.1",
|
|
49939
|
+
date: "2026-09-22",
|
|
49940
|
+
sections: [{
|
|
49941
|
+
title: "Исправления",
|
|
49942
|
+
items: [
|
|
49943
|
+
"Отказ по вложению больше не выглядит как недоступный стенд. Когда вложение отклоняет сам стенд — модель не умеет смотреть картинки, картинка больше установленного на стенде предела, содержимое не того типа, который заявила внешняя программа, — ответ теперь тот же, что и на нечитаемый файл: «повтори без вложений», с причиной отказа в ответе и в журнале. Раньше такой запрос получал ответ «сервис недоступен», а внешняя программа по своей же логике повторяла его без конца: обращение со снимком экрана не превращалось в вопрос без него и не получало ответа вообще. Теперь получает.",
|
|
49944
|
+
"Два случая, когда вложение пропадало молча, тоже исправлены. Имя файла, пришедшее в международной процентной кодировке, стенд читал как обычное текстовое поле — файл не доезжал до модели, а вопрос всё равно получал ответ, уже без вложения. Часть запроса без разделителя заголовков разбиралась так же тихо: теперь она честно отклоняется, потому что ответ на вопрос, материала для которого модель не видела, хуже, чем попросить повторить запрос.",
|
|
49945
|
+
"Если стенду не удалось подготовить временный каталог для чтения документа, он отвечает тем же «повтори без вложений», а не «сервис недоступен» — причина остаётся в журнале стенда."
|
|
49946
|
+
]
|
|
49947
|
+
}]
|
|
49948
|
+
},
|
|
49937
49949
|
{
|
|
49938
49950
|
version: "0.11.0",
|
|
49939
49951
|
date: "2026-09-21",
|
|
@@ -49954,7 +49966,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
49954
49966
|
"Приложенный документ теперь разбирается целиком — и помощником, и панелью «Файлы». Загруженный файл стенд хранит в отдельном хранилище вложений, вне рабочего каталога чата, и читать его помощнику разрешено: путь к нему стоит в самом вопросе. Но инструменты работы с документами об этом хранилище не знали и отказывались открывать файл, который помощнику как раз разрешили прочитать, — просьба разобрать приложенный документ заканчивалась ответом «файла нет», хотя файл на месте, а приложенный документ Word нельзя было посмотреть в панели «Файлы». Теперь хранилище вложений передаётся этим инструментам так же, как его знает остальная часть стенда: документ разбирается по тому же пути, что пришёл в вопросе, а доступ к остальному содержимому хранилища не открывается — читается ровно один названный файл, и только на чтение. Доступ выдаётся тому чату, который его получил, вместе с его дочерними помощниками, и снимается вместе с чатом.",
|
|
49955
49967
|
"Документ Word или PDF можно приложить к вопросу — раньше он отбивался прямо при перетаскивании. Список приложимых файлов был списком текстовых расширений: он так и назывался в настройках, и сообщение об отказе перечисляло свой набор «md, txt, log и другие», никак не связанный с настройкой стенда. Получалось несоответствие: стенд разбирает такие документы конвейером документов и показывает документ Word прямо в чате, а приложить его было нельзя. Теперь разрешённые расширения — это то, чем стенд действительно умеет работать: к текстовым файлам добавлены docx и pdf, а если формат всё-таки не разрешён, отказ называет само расширение и говорит, что список задаёт оператор стенда. Там, где список задан явно, он остаётся ровно таким, каким его задали, — добавление работает для стендов, которые полагаются на значения по умолчанию.",
|
|
49956
49968
|
"Приложенный документ Word или PDF читается своим инструментом, а не универсальным чтением файла. Документ из вложения лежит на диске путём, и универсальное чтение отказывает таким форматам как бинарным — «cannot read …docx: binary file». Этот отказ ничего не говорит о том, есть ли файл на месте, но читался он именно так: агент решал, что документа нет, начинал искать его по рабочим каталогам и сообщал пользователю, что до файла не дотянуться, хотя конвейер документов всё это время был доступен. В разделе «Заметки модели» появилась заметка о документах: она называет инструменты конвейера (document_inspect, document_to_markdown, а для вложения по ссылке — document_from_url), говорит, что отказ универсального чтения на офисных форматах — это ожидаемый ответ, а не повод искать файл в другом месте, и что отказ самого конвейера нужно назвать вместе с путём, который он назвал. Заметка включается и переписывается своими словами, как и остальные, — стенду без конвейера документов её стоит выключить.",
|
|
49957
|
-
"
|
|
49969
|
+
"Источник из правой рейки открывается сразу после ответа, а не только после перезагрузки страницы. Список источников собирается из тех же записей о работе инструментов, по которым стенд решает, можно ли открыть файл, — но путь в этом списке строился от каталога, заданного настройкой стенда, а доказательства чата считают пути от рабочего каталога самого чата. Пока это один и тот же каталог, разницы нет; как только они разные (разговор, начатый при прежней настройке, или каталог пользователя внутри общего рабочего каталога), один и тот же файл получал в панели второе написание, и панель просила стенд открыть именно его — а такого пути в доказательствах чата нет. В ответ на клик приходило «источник больше не входит в доказательства этого чата», хотя источник только что был в ответе, и тот же источник открывался после перезагрузки страницы — тогда список пересобирался уже по доказательствам стенда. Теперь список источников строится от рабочего каталога чата, от того же каталога, что и доказательства, поэтому источник открывается с первого клика, а отказ остался там, где он честный: файл, которого в доказательствах этого чата нет, панель по-прежнему не открывает.",
|
|
49970
|
+
"Список чатов показывает только ваши чаты. Обычно список собирался и из ваших разговоров, и из того, что этот браузер запомнил раньше, поэтому на общем компьютере — в переговорке, у стенда, за одной учётной записью Windows — в него попадали разговоры, начатые до вас: с их названиями, временем и значком работы помощника в момент, когда чужой разговор шёл. Теперь список — это ровно ваши чаты: чужой разговор в нём не появится, а разговор, начатый или открытый после входа, виден сразу, без перезагрузки страницы. На стенде без учётных записей ничего не изменилось: список по-прежнему ваш собственный. Имена фоновых помощников в плашках о завершении берутся только из ваших разговоров.",
|
|
49971
|
+
"Помощник снова может читать документацию стенда там, где она лежит. Поиск и чтение документации искали её строго в каталоге docs рабочего каталога чата. Пока документация лежала рядом с чатом, это работало; на стенде с личным каталогом у каждой учётной записи рабочий каталог чата — её собственный (внутри /workspace/work), а документация опубликована один раз, отдельно. Инструмент исправно отвечал «в рабочем каталоге этого чата нет каталога docs», хотя документация на стенде есть, и так было и в чате, и у каждого эксперта: путь к ней знали только файловые инструменты, которым путь называют явно. Теперь стенд называет корень документации настройкой (tools.docsRoot, на этом стенде — /workspace/docs), и оба инструмента читают ровно это дерево: те же пути в ответе, те же проверки (корень существует, это настоящий каталог, не ссылка; путь за пределы дерева отвергается). На стенде без личных каталогов ничего не изменилось — там по-прежнему ищется docs рядом с чатом. Инструменты, которые стенд выдал помощнику сам, больше не отказывают в чате с учётной записью. Поиск и чтение документации, диагностика набора инструментов и удаление файла в рабочем каталоге выданы помощнику стендом, а не ролью: их нет ни в одном списке роли, и роль не может их отозвать. Разрешение на вызов проверяют два уровня, и в чате с учётной записью про эти инструменты знал только один — второй строил границы разговора из списка стенда, инструментов роли и того, что роль может выдать по навыку, и выданных стендом инструментов там не находил. Получался отказ «инструмент вне профиля возможностей разговора», по которому невозможно понять, чего именно не хватает: инструмент виден помощнику, стенд его выдал, а вызов всё равно не проходит. Теперь границы разговора считают инструменты стенда так же, как это уже работало в чатах без учётных записей, а проверка профиля читает их из набора самого помощника. То, чего стенд помощнику не выдавал, остаётся за ролью: отказ на такой инструмент по-прежнему называет профиль, а не разговор."
|
|
49958
49972
|
]
|
|
49959
49973
|
}]
|
|
49960
49974
|
},
|
|
@@ -50314,7 +50328,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50314
50328
|
className: "dsh-qa-changelog__date",
|
|
50315
50329
|
children: entry.date
|
|
50316
50330
|
}),
|
|
50317
|
-
entry.version === "0.11.
|
|
50331
|
+
entry.version === "0.11.1" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
50318
50332
|
className: "dsh-qa-changelog__current",
|
|
50319
50333
|
children: "текущая"
|
|
50320
50334
|
}) : null
|