# Changelog 本项目遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 格式, 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 ## [1.0.6] - 2026-08-24 ### Changed(变更) - 适配 DSH 0.1.1(`@deepseek-ai/dsh` 0.1.1-rc.2)更新: - host 半 API(`webServer.register` / `webServer.port`)、client 加载器 (`window.__ModuleLoader__.load`)、`dsh.client.inject` 契约与 `@deepseek-ai/cordis` 4.0.1 均无破坏性变化,插件无需改代码。 - 真机验证通过:壁纸渲染、滑块保存(新 host 的 CSRF 校验:正确 token 200 / 错误 token 403)、设置弹层排除规则(`VOzbGW_panel` / `VOzbGW_options` 类名未变)均正常。 - 安全加固(1.0.5)随此次 DSH 重启正式生效(此前需重启才能加载新 host 代码)。 - package.json `version` 同步至 1.0.6(此前滞后于 CHANGELOG)。 ## [1.0.5] - 2026-08-21 ### Security(安全加固,Host 半需重启 DSH 后生效) - **SSRF 防护**(`/dsh-background/url`):抓取前解析 DNS 并封锁私网/回环/链路本地/ 云元数据地址(10/8、172.16/12、192.168/16、169.254.169.254、127/8、::1 等), `redirect:'manual'` 手工跟随、每跳重新校验、最多 5 跳、整体 20s 超时。 - **回环 Host 门槛**:所有端点仅接受 `127.0.0.1`/`localhost`/`::1`(+ 实际端口)的 `Host`,封死 DNS rebinding / 同站伪造对本地端点的访问。 - **写端点加固**:同源校验之上再叠加进程级 CSRF token(`X-Dsh-Bg-Csrf`,经 `GET /config` 下发)与 10s 滑动窗口限流(超限 429)。 - **CSS 注入修复**:`value` 配置字段 host 端白名单(仅空串或 `/dsh-background/image`), client 端再加 `url("…")` 字符守卫双保险。 - **上传魔数校验**:`/upload` 落盘前按真实字节魔数定扩展名(与 `/url` 一致)。 - **错误泛化**:`/url` 失败不再向客户端回显网络/内部细节,细节仅进服务端日志。 - **文档纠偏**:移除「URL 图片存为 cached.* 本机缓存」的过时说法(实际统一存为 `uploaded.*`,离线仍可用);`cached.*` 仅作历史兼容清理。 - **client 保存防抖**:配置落盘合并到末次(300ms),减轻拖滑块时的写风暴。 ## [1.0.4] - 2026-08-21 ### Changed(变更) - 「深色遮罩」滑杆改为**全区间平滑变化**:0 → 无遮罩,100 → 最重(0~0.85 线性), 移除原来「>50 才开始压暗」的死区,观感随数值连续变化;提示语同步更新。 ## [1.0.3] - 2026-08-21 ### Changed(变更) - 「亮度」选项更名为「深色遮罩」(英文 Dark overlay):该滑杆实际是叠加黑色遮罩 压暗背景,并非调亮,新名称更贴合行为;提示语同步更新(>50 起压暗),行为不变。 - 「作用范围」的 聊天区 / 全屏 分段按钮改为与「图片来源」按钮(无背景 / 本地上传 / 图片链接)一致的样式:共用同一套 `segBtnCommon` / `segBtnActive` / `segRow`, 边框、圆角、字号与选中高亮完全统一。 ## [1.0.2] - 2026-08-21 ### Fixed(修复) - 修复「调整透明度/亮度滑块时壁纸闪烁」:旧实现每帧用 `Date.now()` 重写 background-image URL,导致每次滑杆变化都触发图片重新下载/解码。 现改为图片版本号 `imageRev` —— 仅在「提交新图」(上传 / URL 应用成功)时 递增,滑块微调时 URL 稳定、浏览器不重载图片,壁纸平滑无闪烁;换图 立即生效的语义保持不变。 ## [1.0.1] - 2026-08-21 ### Fixed(修复) - 聊天区模式下不再把设置弹层内容区(产品 CSS Module 类 `VOzbGW_options` 及其面板 `VOzbGW_panel`)透明化/压暗:设置页保持原透明度与原亮度,可读性不受壁纸影响; 全屏模式仍按特性统一半透明。 - 注:`VOzbGW_` 为产品 CSS Module 哈希类名,若 DSH 升级换名该规则优雅失效 (退化为修复前行为,不影响其它功能)。 ## [1.0.0] - 2026-08-20 首个正式版本:聊天页背景壁纸插件,经浏览器真机验证,功能完整、行为稳定。 ### Added(新增) - 设置页「背景 Background」分区(`settings.section` additive 槽),中英文案跟随宿主语言。 - 三种图片来源: - 无背景(移除并清理本地图片) - 本地上传(PNG / JPG / GIF / WebP,≤20MB) - 图片链接(http/https,host 下载 → 客户端缩放 → 落盘,离线可用) - 透明度滑杆(0–100%)与亮度滑杆(0–100%,≥50 叠加黑罩,不修改图片数据)。 - 作用范围切换:**聊天区**(对话头部 + 消息流 + 输入框,侧边栏保持不透明)与**全屏**。 - 上传/URL 图片统一 canvas **等比缩放到屏幕对应尺寸**(比屏幕大缩、比屏幕小放大)。 - Host 端持久化:`$DSH_HOME/storages/dsh-background/config.json` 与 `uploaded.`, 重启后配置与壁纸依然生效。 - 图片端点 HTTP 缓存破坏(URL 带 `?v=` 时间戳)+ host `no-store`,换图立即生效。 - CSRF/同源校验、请求体上限(upload 20MB、config/url 8KB)、URL 协议白名单与魔数校验。 ### Changed(变更) - 聊天区视觉实现:壁纸铺底层 + 对话区整块统一亮度/透明度,摒弃早期「逐组件半透明」导致 各组件(头部/气泡/输入框)明暗不一致的做法;头部/消息流/输入框观感一致。 - 侧边栏在聊天区模式下保持 100% 不透明;全屏模式下统一半透明。 - 深浅双主题全程走 `--dsw-*` token,不写死颜色。 ### Fixed(修复) - 修复「聊天区背景只作用在底部一小块」:明确壁纸作用域为对话整体(header + 消息流 + 输入框)。 - 修复「输入框/消息滚动区透明度和亮度无法调整」:为其补齐跟随透明度的表面,且亮度罩同时 暗化表面颜色(嵌套 color-mix),不再被半透明表面遮挡。 - 修复「输入框纯色背景、看不到壁纸」:`uV2eYG_input` 是绝对定位的透明 textarea,误加底色会 盖住输入卡与壁纸 → 保持其透明 overlay。 - 修复「消息滚动区表面误覆盖输入框」导致双重叠加稀释壁纸:表面改作用在纯消息列 `[data-chat-flow]`,输入框仅由输入卡 token 半透明处理。 - 修复「URL/上传按钮显示 … 且被锁死」:按钮固定文案、不禁用,busy 仅以 `aria-busy` 表达。 - 修复 host 图片端点缓存旧图(`max-age=3600` → `no-store`)+ 客户端 URL 加缓存破坏参数。 - 修复「输入框比别处暗许多」:与全屏共用同一套壁纸 + 半透明机制,中央区观感统一。 ### Security(安全) - 所有写操作(config / upload / url)同源校验(`Sec-Fetch-Site` / `Origin`),拒绝跨站伪装。 - URL 仅允许 http(s),20s 超时 + 20MB 流式上限,魔数(而非 content-type)判定真实类型。 - 无 `innerHTML` 动态拼接;错误统一 `{ ok, message }`,堆栈不进 UI;停用/卸载复原现场。 --- ## [0.1.0] - 2026-08-20 首个可运行版本(内部开发迭代,未正式发布)。 - 初步实现设置页 UI、上传/URL/无背景三种来源、透明度与亮度滑杆、聊天区/全屏切换。 - Host 端持久化、图片缩放、CSRF 防护、URL 校验骨架。 在 0.1.0 → 1.0.0 的迭代中经历了多次浏览器实测与修复(见 [1.0.0] Fixed), 并同步完成:文档(README)、备份/导出链(`backup/` + `MANIFEST.md`)、§5 验收清单逐项核对。