From 376305fed4ce93f110a8127345aef66b8b78b4b4 Mon Sep 17 00:00:00 2001 From: Zyy Date: Sat, 17 Oct 2026 21:20:29 +0800 Subject: [PATCH] docs: align reference documentation with current behavior Co-authored-by: Codex --- .../gateway-plugin/sdk/docs/capabilities.md | 7 +++---- .../crates/gateway-plugin/sdk/docs/manifest.md | 5 +---- deploy/README.md | 9 +++++---- docs/api.md | 15 +++++++-------- docs/architecture.md | 16 ++++++++-------- docs/plugins.md | 6 +++--- docs/theme.md | 6 +++--- 7 files changed, 30 insertions(+), 34 deletions(-) diff --git a/backend/crates/gateway-plugin/sdk/docs/capabilities.md b/backend/crates/gateway-plugin/sdk/docs/capabilities.md index 173d78445..ac4aa612c 100644 --- a/backend/crates/gateway-plugin/sdk/docs/capabilities.md +++ b/backend/crates/gateway-plugin/sdk/docs/capabilities.md @@ -254,8 +254,7 @@ SDK 不自动重试。超时或断连不能证明写入未提交;重试上限 宿主等待期间归还执行名额,返回后先重新取得名额再交付结果或错误,插件继续同一次调用。 初次准入和恢复排队各有独立等待期限,默认 30 秒,不扣插件处理预算;恢复等待受总在途上限约束,不占初次准入队列。 入站处理与返回处理合计使用同一预算,普通宿主回调不会暂停计时。 -请求总期限、下游操作超时和取消信号独立生效,客户端取消或插件退出仍会结束等待并回收资源。 -宿主与插件 SDK 必须同时支持此语义;仍使用固定绝对期限的 SDK 构建的插件需重新构建,单独升级宿主不能解除插件侧期限 +请求总期限、下游操作超时和取消信号独立生效,客户端取消或插件退出会结束等待并回收资源 HTTP 总入口统一包裹原生路由,`dispatch_http` 复用同一路由与组合能力;无需为每个 HTTP 接口登记新的挂载点。 `service` 用于不经过 HTTP 的类型化主动调用,具体公开范围见下节 @@ -439,7 +438,7 @@ restore_and_validate_response(response).await | 账号代理、默认凭据注入、网络发送状态 | 宿主网络外层,插件可覆盖默认请求头,普通 HTTP 与账号 HTTP 共用发送和正文资源实现 | | 路由、调度、重试决策 | 各自的决策端口,Core 保持最终裁决和预算 | | RPC Credit、取消、流关闭、WebSocket 续接 | 会话及资源生命周期,不作为可重排的中间件 | -| 终态观察、管理与维护 | 原有观察/管理/维护入口,不嵌入请求 `next` 链 | +| 终态观察、管理与维护 | 对应的观察/管理/维护入口,不嵌入请求 `next` 链 | ### 模型目录 @@ -502,7 +501,7 @@ middleware 的 `next` 最多调用一次,重试与额外模型执行通过独 请求以 `account_policy_filtered` 结束,不回退到被排除账号或伪装成额度耗尽。租约争用、排队唤醒和后续请求重新评估策略, 过滤结果不写入账号状态。插件决定自身阈值、恢复条件和配置含义;宿主只检查合同、候选边界并执行决定。 插件设置使用自己的 `configurationSchema` 或管理页面,不向宿主智能调度弹窗注入字段。 -非法输出按绑定的既有故障策略处理,不自动修正插件业务规则 +调用失败或响应无法解码时按绑定的失败策略处理。Core 拒绝候选越界等无效调度决定,不自动修正插件业务规则 ```json {"decision":"delegate_filtered","exclude_account_ids":["acct_example"]} diff --git a/backend/crates/gateway-plugin/sdk/docs/manifest.md b/backend/crates/gateway-plugin/sdk/docs/manifest.md index 0d142a530..e9ed902e7 100644 --- a/backend/crates/gateway-plugin/sdk/docs/manifest.md +++ b/backend/crates/gateway-plugin/sdk/docs/manifest.md @@ -34,7 +34,7 @@ 清单与宿主兼容声明的格式版本为 `2`,进程协议版本为 `4`;清单不接受 `permissions` 字段 -RPC v4 将入口请求快照和业务 JSON 放入载荷前缀,元数据只保留控制字段;插件须使用当前 SDK 重新构建,并由当前 CLI 重新打包,仅修改包内版本号不能迁移帧编解码器 +RPC v4 的帧布局、编码与会话生命周期见[通信边界](../README.md#通信边界)。插件使用 SDK 构建,并由 CLI 生成包含协议版本的安装包 安装包清单校验与已安装元数据读取是两个边界:清单拒绝未知字段,并检查必需字段、类型和版本; 数据库元数据的读取规则见[制品与发布](../../../../../docs/architecture.md#制品配置与发布),不改变清单或 RPC 合同。 @@ -44,9 +44,6 @@ RPC v4 将入口请求快照和业务 JSON 放入载荷前缀,元数据只保 当前支持范围由[宿主兼容声明](../../runtime/plugin-host-compatibility.json)给出,弃用状态、剩余兼容窗口及作者说明以[弃用清单](../../runtime/plugin-api-deprecations.json)为准,管理端和加载日志展示同一提示 -执行设置与来源使用 `fast_mode` 的 `default`、`enabled`、`disabled` 三态,宿主不转换旧 `disable_fast` 字段。 -使用 `middleware v3` 或 `upstream_adapter v1` 的插件需按当前 SDK 更新字段处理、升级能力版本并重新构建,仅修改版本声明不能替代迁移 - 兼容窗口自替代合同首次正式发布起至少覆盖 7 个后续正式版本;主版本、次版本和补丁版本各计一次,预发行与同标签重试不计。 窗口内提供适配,窗口外不保证兼容;是否使用过特定字段不改变判断,版本号差值也不能代替清单中的计数 diff --git a/deploy/README.md b/deploy/README.md index b1be072c2..2586f061c 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -157,7 +157,6 @@ openssl rand -hex 24 管理员访问凭据最多有效 24 小时,由内部策略控制;不活动期限较短时,访问期限缩短到其四分之一,为自动续期留出窗口。 推荐使用模板中的 7 天不活动期限和 30 天最长登录期限。修改配置需重启,不能延长已建立会话的最长有效期。 -升级后仅有单凭据的已有会话保留到原期限,重新登录后获得自动续期能力。 浏览器会话与续期规则见[认证 API](../docs/api.md#统一登录与会话),独立于 `/v1/*` 鉴权和限额 PostgreSQL 与 Redis 密码必须是 48 位十六进制字符。Compose 通过 `config.yaml` 的凭据桥接区 @@ -472,6 +471,9 @@ Compose 使用以下绑定目录: 普通 `docker compose down` 不会删除这些目录。删除 `.runtime` 会永久清除本地状态 +应用容器以 `10001:10001` 运行,`.runtime/data` 与 `.runtime/logs` 的顶层目录使用 `0770` 权限和 `10001` 属组。 +安装脚本对这两个目录仅设置顶层所有权与权限,内部文件及私有目录保留应用创建时的所有权与权限 + PostgreSQL 是账号、Client Key、运行设置、请求记录与审计的权威存储;账号 credential 按 Provider schema 以明文 JSON 保存于 PostgreSQL。Redis 只保存可重建、可过期的协调状态,例如 会话亲和、lease、cooldown、OAuth pending flow 与套餐模型目录 cache @@ -644,9 +646,8 @@ alpha、beta、rc、exp 在 GitHub 标记为 Pre-release,不覆盖 GitHub Late ### 管理端在线更新 -官方构建按上述规则在线更新;源码等非官方构建返回不支持原因,不提供可用更新。 -最低受支持的在线升级起点为 **v3.18.1**。更旧版本需手动安装 v3.18.1 或新版完整发行包/镜像, -不能依赖旧更新页面直接升级到最新版或选择已不是最新版的过渡版本。 +在线更新要求官方构建且起始版本不低于 **v3.18.1**,版本选择遵循上述规则;源码等非官方构建返回不支持原因,不提供可用更新。 +不满足在线更新条件时,使用完整发行包或镜像[手动部署](#镜像升级与源码构建)。 点击「下载并更新」后,操作日志显示下载、校验与安装过程,完成后显示「待重启」及待生效版本,重启后才使用新程序。 「当前版本」始终表示正在运行的版本,「通道最新」表示所选通道的检查结果 diff --git a/docs/api.md b/docs/api.md index 20618d9d6..8f3140128 100644 --- a/docs/api.md +++ b/docs/api.md @@ -398,8 +398,7 @@ API Key 上游返回完整 Codex `models` 目录时沿用该合同;仅返回 模型别名仅替换 `slug`,不替换上游展示名、提示词、能力或 `priority`;保持原生模型顺序,新增别名附在后面。 目录按当前路由快照的模型存在性及账号模型政策过滤,避免公布已知无法路由的模型;新模型需待后台目录对账后进入列表。 xAI 没有 Codex 原生目录,使用官方 CLI proxy 当前目录生成通用画像。推理菜单读取 -`reasoning_efforts` 对象列表,默认值只取菜单中的显式标记;缺失时保持未知,不以首项代替, -也不回退旧字段或其他端点的目录形状 +`reasoning_efforts` 对象列表,默认值只取菜单中的显式标记;缺失时保持未知 已知模型只路由到明确提供该模型的 Provider,账号不可用时不转发给其他平台的未知模型通道。 未知模型只在当前范围与路由约束下存在唯一 Provider 透传候选时发送;无法确定归属时返回不可用错误, @@ -417,7 +416,7 @@ xAI 没有 Codex 原生目录,使用官方 CLI proxy 当前目录生成通用 成功目录响应带 `Cache-Control: private, no-store`,不借用上游 ETag 标识经过选择/别名/聚合后的正文 `service_tiers` 的 `name` 用于生成 `/fast` 等命令,`id` 是请求使用的 `service_tier` 值,二者不能互换。 -上游未声明或明确返回空数组时不补档位,也不根据模型名或旧 `additional_speed_tiers` 字段推断 Fast。 +上游未声明或明确返回空数组时不补档位,也不根据模型名推断 Fast。 该合同对齐 [官方 Codex 0.154.0 的模型元数据](https://github.com/openai/codex/blob/6b9826e3aa83b1a5947db50f4332cb9c65f1b340/codex-rs/protocol/src/openai_models.rs) 与其动态服务档位命令;客户端需重新加载模型目录才能使用更新后的档位信息 @@ -631,8 +630,8 @@ call 与账号的绑定保存在网关进程内,未连接时一小时过期; 并重新计算不活动期限,但不能超过登录时确定的最长有效期。访问凭据仍有效时,refresh 返回同一组凭据和期限。 轮换后 30 秒内重试上一代续期凭据返回同一组新凭据;超出窗口再次使用已识别的上一代凭据会撤销该会话。 续期已过期或会话已撤销时不会重新创建;未认证返回 `{ authenticated: false, session: null }`,不写 Cookie;依赖故障返回 503。 -退出可以只携带续期 Cookie,并清除两种 Cookie。Key 登录清除续期 Cookie;密钥身份和仅有单凭据的会话保持固定期限。 -期限配置及升级注意事项见[部署配置](../deploy/README.md#手动安装) +退出可以只携带续期 Cookie,并清除两种 Cookie。Key 登录清除续期 Cookie,密钥身份会话保持固定期限。 +期限配置见[部署配置](../deploy/README.md#手动安装) 每次恢复密钥会话时重新确认 Key 存在且启用;停用或删除后会话失效,重新启用不会恢复已撤销会话。 依赖不可用时返回 503,不返回已认证或假装未登录。预算耗尽不妨碍登录 @@ -1042,7 +1041,7 @@ RT-only 使用同一形状,只提交 `refreshToken`。不得把真实 token OpenAI 的 CPR 导出保持 OAuth 账号的既有 token 与过期时间字段。OpenAI 与 xAI 的 CPR 账号条目均包含 `modelAccess`,重新导入时恢复;导入 `settings.modelAccess` 显式提供时覆盖条目中的政策。 -旧文档不带此字段时,新账号默认 `all`,已有账号保留原值;凭据刷新、重新授权和目录刷新均保留政策。 +导入条目未提供 `modelAccess` 且 `settings` 未指定该字段时,新账号默认 `all`,已有账号保留原值;凭据刷新、重新授权和目录刷新均保留政策。 sub2api 的 `credentials.model_mapping` 不转换为本项目的账号模型限制 编辑 OpenAI API Key 账号时,在 `POST /api/admin/accounts/update` 的账号设置中附带 `connection`: @@ -1423,7 +1422,7 @@ HTTP 返回 `403` 和 `image_generation_disabled`,WebSocket 每个 `response.c 严格亲和下的后代线程始终启用账号排队,沿用 `concurrencyWaitTimeoutSeconds` 和请求截止时间; `maxWaitingPerAccount` 为 0 时使用每队列 1,000 人上限,否则沿用配置的上限。 可识别来源的 Search、Images、Live 创建请求采用同样规则,身份与轮次关联见[会话绑定](architecture.md#6-路由账号范围与-continuation)。 -插件显式选号保留原有行为。普通请求关闭账号排队且没有可用容量时返回 `503` / `account_capacity_unavailable`, +插件显式选号须通过账号资格与租约检查,见[调度合同](../backend/crates/gateway-plugin/sdk/docs/capabilities.md#路由调度与观察)。普通请求关闭账号排队且没有可用容量时返回 `503` / `account_capacity_unavailable`, 与无候选账号的 `no_available_provider` 区分;排队不绕过账号范围、模型权限、RPM 或金额限额 OpenAI 会话因之前的上游 `cyber_policy` 拒绝而排除全部可选账号时,选号失败返回 `400` / `cyber_policy`, @@ -2415,7 +2414,7 @@ GitHub 的 `location` 使用 `kind: "github"`、`repository: "owner/repo"`、`ta `model_catalog`、`management`、`command_line` 和 `maintenance` 按清单声明注册,不接受 binding; `frontend_authentication` 必须由管理员显式配置身份映射,也不自动创建 -`middleware` v3 / v4 可绑定 `http`、`websocket`、`service`、`request` 和 `attempt`,按声明的挂载阶段分别配置。 +`middleware` v5 可绑定 `http`、`websocket`、`service`、`request` 和 `attempt`,按声明的挂载阶段分别配置。 `http`、`websocket` 和 `service` 不使用 Key、分组、Provider 或模型范围,这些数组必须为空;插件在处理器内匹配路径、消息或服务操作。 `request` 与 `routing` 支持 Key、分组和公开模型范围,Provider 范围必须为空;`attempt`、`upstream`、`scheduling`、`retry` 与 `observation` 可使用 Provider 范围 diff --git a/docs/architecture.md b/docs/architecture.md index e56c0c998..6de25025a 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -143,8 +143,8 @@ flowchart LR 配置完整则启用,缺少必填项则停用待补;已有实例时不复制配置或切换版本 - **持久化投影与包校验分离**:Admin 定义已校验制品的读取投影,Store 忽略未知字段,可选字段缺失时使用清单默认值;身份、摘要和执行所需事实必填,已知字段类型错误须报错。 读取和重复安装不重写 JSON,结构与语义变更由数据库迁移管理。包清单和 RPC 封装按 SDK 校验;能力版本及宿主范围用于兼容性提示,实例能否运行由实际调用结果确定 -- **兼容转换停留在插件边界**:Runtime 的 `compatibility` 模块集中适配接口字段与设置来源,Core 与持久化模型只表达当前业务事实。 - Admin 透传发行物中的弃用提示,不持久化倒计时或根据实际字段使用猜测兼容性;`release/publish` 维护[兼容窗口](../backend/crates/gateway-plugin/sdk/docs/manifest.md#接口弃用),到期时要求移除适配和支持声明 +- **兼容声明由发行物持有**:Runtime 的 `package/compatibility` 检查宿主范围与能力版本,`compatibility` 根据弃用清单生成管理端提示与加载日志。 + Admin 透传这些提示,不持久化倒计时或根据实际字段使用猜测兼容性;`release/publish` 维护[兼容窗口](../backend/crates/gateway-plugin/sdk/docs/manifest.md#接口弃用) - **一份发布快照**:数据面和管理页面使用同一不可变扩展集合;CLI 复用准备与调用合同,按次读取持久化配置。 新配置准备成功后才提交发布,在途请求持有旧集合直到结束;管理目标和回调另按当前身份与版本复验 - **集合与实例分别保活**:实例 ID、制品、实例 revision、信任、配置、密钥与绑定均相同且进程就绪时,不同发布集合共享该实例及其注册贡献。 @@ -615,7 +615,7 @@ AuthService 每次恢复 Key 会话时重新检查 Key 是否存在且启用;K 管理员访问凭据和续期凭据绑定同一逻辑会话,AuthService 负责签发、身份校验、轮换、不活动期限和最长有效期。 Store 保存凭据摘要与上一代重试所需的派生盐,原子比较后替换记录或撤销;Redis TTL 对齐续期期限, 访问到期不删除逻辑会话,刷新不能重建已退出或过期的键。短窗口重试返回同一代凭据,避免响应丢失与并发刷新互相撤销。 -API 只把签发结果投影为两种 HttpOnly Cookie;Key 与单凭据会话保持固定期限。 +API 把管理员签发结果投影为访问与续期两种 HttpOnly Cookie;Key 会话仅使用访问 Cookie,保持固定期限。 前端首次进入受保护页面先读取状态,未认证时尝试续期;点击、滚动、聚焦等页面活动不单独触发续期; 认证 Cookie 写入在支持 Web Locks 的环境中跨标签页串行,其他环境在当前页面串行。 请求层仅在业务接口返回 `40101` 时共用一次会话续期,失败请求及恢复期间的新请求等待同一结果; @@ -701,7 +701,7 @@ OpenAI Provider 解释官方逻辑 `session_id` 与 `thread_id`,按 Client Key 已有绑定的后代只跟随当前账号,账号不可用时排队,根迁移后重读共享绑定 可关联的 Search、Images、Live 创建请求共用会话绑定,宽松和优先模式不依赖线程身份分流;严格模式下后代请求保留跟随约束。 -需要选号时统一使用配置的调度策略;插件显式选号沿用原有裁决,native continuation 仍受独立的状态 owner 与安全重放边界约束 +需要选号时统一使用配置的调度策略;插件显式选号由 Core 复核账号资格并取得租约,native continuation 受独立的状态 owner 与安全重放边界约束 Store 只保存带版本的绑定事实,Provider 在取得租约后、发送前原子认领、续期或按模式迁移;快照冲突释放租约并重新选择。 首次认领不依赖根线程先发请求,独立后台任务也使用自身会话绑定;没有可靠会话身份时正常选号,不推测会话关系。 @@ -919,13 +919,13 @@ Store 声明配置后的读取时限,缓存沿用该值,统计事务只在 Store 从请求源事实维护窄事实及十五分钟、小时统计状态,账号用量与分组费用复用同一套已交付用量指标。 完整时间桶在数据库内合并,边界与不能由汇总表达的筛选在数据库内精确聚合;向应用返回的状态按输出分组组织。 计数、金额与分布状态的旧贡献撤销、新贡献合并和事实替换共用事务,构建期间只调整已扫描前缀, -不可相减的极值按受影响分组重算。同步账号用量查询在同一快照补齐待投影源版本,避免异步投影改变原有读数合同。 +不可相减的极值按受影响分组重算。同步账号用量查询在同一快照补齐待投影源版本,读取结果包含尚未完成异步投影的用量。 ### 额度预测 账号容量预测属于 Admin 的只读派生规则,不参与 quota 权威状态、调度或金额结算。Store 通过专用采样端口 在同一读事务快照内返回截至观测时间的累计数值及有界历史 Provider 文档;对应 Provider 复用协议解析器解释 -文档,不在历史查询中刷新上游额度。观测通过 Core 原有 +文档,不在历史查询中刷新上游额度。观测通过 Core 的 请求结算持久化,账号关联由实际执行上下文确定,窗口身份与归属必须匹配当前额度窗口。Admin 按中立的额度 事实选择近期进度段预测剩余量,再加本周期已记录用量形成周期总量。 周期以额度重置为边界,重置后累计与样本重新开始。该采样不改变全站完整交付用量口径,不创建第二份 @@ -944,8 +944,8 @@ Store 从请求源事实维护窄事实及十五分钟、小时统计状态, 预测数值复用统计投影的十五分钟开始时间桶,并以账号与五分钟完成时间桶分组。 完整完成时间桶合并累计量,跨采样截止值的小桶、开始时间边界和重建区间读取窄事实; -同一快照撤销待投影旧版本并加入当前源版本。该维度保留恢复请求的原有预测口径, -不改变其他统计排除恢复请求的规则。Provider 文档仍按账号和完成时间索引读取,每个采样槽只保留最后一份 +同一快照撤销待投影旧版本并加入当前源版本。预测采样保留请求完成状态,不按恢复标记排除请求;其他业务统计排除恢复请求。 +Provider 文档按账号和完成时间索引读取,每个采样槽只保留最后一份 ### 请求记录与交付 diff --git a/docs/plugins.md b/docs/plugins.md index 11096e995..1c6d76c33 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -116,7 +116,7 @@ flowchart LR ### 故障处理 宿主版本范围或能力版本不匹配时,管理页持续显示黄色兼容性提醒,允许手动启动和随宿主自动启动。 -启动成功不代表语义兼容,警告不会自动消失。需由作者使用匹配的 [SDK](../backend/crates/gateway-plugin/sdk/README.md) 与 CLI 重新构建,不能只修改包内版本字段;宿主更新和回滚的重启检查见[部署说明](../deploy/README.md#插件兼容与发行目录) +启动成功不代表语义兼容,警告不会自动消失。应选择符合宿主合同的插件包,版本要求见 [SDK](../backend/crates/gateway-plugin/sdk/README.md);宿主更新和回滚的重启检查见[部署说明](../deploy/README.md#插件兼容与发行目录) 包无法解析、平台不符或 RPC 握手失败时,只有对应插件无法启动。运行中进程崩溃、帧边界、调用关联或传输错误会停止该实例, 显示红色感叹号及脱敏错误详情,保留启用配置,可在详情中重新启动或切换版本。连续故障受重启次数限制 @@ -129,8 +129,8 @@ flowchart LR 初次排队和恢复等待各限 30 秒,不扣插件自身默认上限 120 秒的处理预算。达到容量或等待上限时,中间件明确返回过载错误,HTTP 响应为 503(`middleware_capacity_unavailable`),不跳过插件、不重放请求。 这些数值是有界资源预算的初值,实际容量需结合插件耗时、正文和流的资源占用评估 -普通宿主回调默认上限 64,`next` 使用总在途上限对应的独立回调预算。实际容量同时受插件 SDK 配置约束; -使用较小上限或未区分 `next` 回调预算的插件需由作者调整并重新构建,升级宿主不会改变已安装插件的容量 +普通宿主回调默认上限 64,`next` 使用总在途上限对应的独立回调预算。实际容量由宿主预算与插件 SDK 会话配置共同限制; +调整插件侧容量需由作者重新构建插件包 ### 停用与删除 diff --git a/docs/theme.md b/docs/theme.md index 6c4fd257b..a59460832 100644 --- a/docs/theme.md +++ b/docs/theme.md @@ -59,8 +59,8 @@ | 场景 | 参考入口 | 关注点 | | --- | --- | --- | -| 页面头部 | `@codex-proxy/ui` 的 `BasePageHeader`、[系统概览](../frontend/src/views/dashboard/components/DashboardContent.vue) | 简短标题、必要的统计范围或状态、就近操作 | -| 内容与指标 | `@codex-proxy/ui` 的 `BaseCard`、[用量概览卡片](../frontend/src/views/usage/components/UsageSummaryCards.vue) | 可选说明、紧凑摘要、数值与辅助信息的主次 | +| 页面头部 | `@codex-proxy/ui` 的 `ZPageHeader`、[系统概览](../frontend/src/views/dashboard/components/DashboardContent.vue) | 简短标题、必要的统计范围或状态、就近操作 | +| 内容与指标 | `@codex-proxy/ui` 的 `ZCard`、[用量概览卡片](../frontend/src/views/usage/components/UsageSummaryCards.vue) | 可选说明、紧凑摘要、数值与辅助信息的主次 | | 表单帮助 | [API Key 账号字段](../frontend/src/views/accounts/components/AccountApiKeyFields.vue) | 直接命名字段,在对应位置提供短提示和示例 | | 账号与用量展示 | [账号额度窗口](../frontend/src/components/account/account-usage-window/index.vue)、[共用用量表格](../frontend/src/components/usage/UsageRecordsTable.vue) | 复用后端展示字段和共享 presenter,管理端与 Key 页保持同一展示口径 | @@ -354,7 +354,7 @@ Store 在其他入口发生变化时更新保存基线;没有未保存修改 - **组件概览**展示基础组件、表格、空状态、骨架、浮层和菜单等关键状态 - 画板固定为 `1600 × 1808`,使用 CSS `zoom` 重排,不使用 `transform: scale()` 长期缩放文字 - 空白区域可拖拽,滚轮以指针为锚点缩放,并提供缩小、100%、放大和适应画板操作 -- 编辑面板和组件概览统一使用 `BaseScrollbar`,滚动条空闲时自动隐藏 +- 编辑面板和组件概览统一使用 `ZScrollbar`,滚动条空闲时自动隐藏 ## 样式与命名约定