From 74952908687fa702810a3582687c92310354d390 Mon Sep 17 00:00:00 2001 From: Phant Date: Mon, 19 Oct 2026 14:18:11 -0500 Subject: [PATCH 1/3] =?UTF-8?q?fix(webui):=20=E5=AD=98=E5=82=A8=E9=A1=B9?= =?UTF-8?q?=E6=8C=89=E5=BD=92=E5=B1=9E=E4=B8=8E=20key=20=E4=B8=80=E8=B5=B7?= =?UTF-8?q?=E5=8C=BA=E5=88=86,=E5=90=8C=E5=90=8D=20key=20=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E4=B8=B2=E5=88=B0=E5=88=AB=E7=9A=84=20World?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 根因:manifest 只带 storageKeys,数据页按 key 过滤、清除接口按 key 取第一个匹配; 两个 World 声明同一个 key 时,数据页列出对方的项,清除可能清到对方的数据。 - manifest 改带 storageParts(owner + key),页贡献的 storage 项由装配层盖上归属; 清除接口加可选 owner,省略且 key 有多个归属时回 409,一键清空的逐项结果带 owner。 - 不为同名 key 报错,也不给 key 自动加前缀,已有数据的位置不变。 - 测试:两个 World 同名 key 时各自数据页只画自己那项;带 owner 只清对应 World,不带回 409。 Co-Authored-By: Claude Opus 5.5 --- docs/webui.md | 4 +-- src/bot.ts | 8 +++--- src/web/client/features/storage/view.ts | 6 ++--- src/web/client/webui-pages/host.ts | 36 ++++++++++++++----------- src/web/server.ts | 19 +++++++------ src/web/shared/webui-protocol.ts | 18 ++++++++----- src/web/strings.de.ts | 1 + src/web/strings.es-419.ts | 1 + src/web/strings.fr.ts | 1 + src/web/strings.it.ts | 1 + src/web/strings.ja.ts | 1 + src/web/strings.ko.ts | 1 + src/web/strings.pt-BR.ts | 1 + src/web/strings.ru.ts | 1 + src/web/strings.ts | 2 ++ src/web/strings.zh-Hant.ts | 1 + tests/web/feature-generic.test.ts | 6 ++--- tests/web/hardening-webui.test.ts | 20 +++++++++++--- tests/web/storage.test.ts | 27 +++++++++++++++++++ tests/web/webui-pages.test.ts | 4 +-- tests/web/webui-protocol.test.ts | 9 ++++--- 21 files changed, 117 insertions(+), 51 deletions(-) diff --git a/docs/webui.md b/docs/webui.md index 714598ea3..de3852768 100644 --- a/docs/webui.md +++ b/docs/webui.md @@ -74,7 +74,7 @@ bot 的展示名。面板、配置组与提示词文档由贡献方声明; 数据接口)、`stream`(面板的推送通道)。World 通过 `World.webUi()` 声明,Persona 通过 `Persona.webUi()` 声明。面板方法只接受 POST;`getMethods` 点名的方法才接受 GET(轮询读、 `