dsh-wallpaper_share 26.9.8 → 26.9.10-T

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 (36) hide show
  1. package/README.md +79 -107
  2. package/README.zh-CN.md +15 -9
  3. package/lib/client.js +1367 -416
  4. package/lib/client.js.map +1 -1
  5. package/lib/index.js +990 -198
  6. package/package.json +3 -2
  7. package/vendor/dwp/README.md +89 -0
  8. package/vendor/dwp/packages/dwp-core/package.json +14 -0
  9. package/vendor/dwp/packages/dwp-core/src/anim.ts +119 -0
  10. package/vendor/dwp/packages/dwp-core/src/bones.ts +198 -0
  11. package/vendor/dwp/packages/dwp-core/src/compile.ts +148 -0
  12. package/vendor/dwp/packages/dwp-core/src/easing.ts +55 -0
  13. package/vendor/dwp/packages/dwp-core/src/effects.ts +153 -0
  14. package/vendor/dwp/packages/dwp-core/src/errors.ts +19 -0
  15. package/vendor/dwp/packages/dwp-core/src/eval.ts +275 -0
  16. package/vendor/dwp/packages/dwp-core/src/index.ts +13 -0
  17. package/vendor/dwp/packages/dwp-core/src/layout.ts +87 -0
  18. package/vendor/dwp/packages/dwp-core/src/particles.ts +223 -0
  19. package/vendor/dwp/packages/dwp-core/src/pool.ts +46 -0
  20. package/vendor/dwp/packages/dwp-core/src/types.ts +157 -0
  21. package/vendor/dwp/packages/dwp-core/src/vars.ts +71 -0
  22. package/vendor/dwp/packages/dwp-gl/package.json +17 -0
  23. package/vendor/dwp/packages/dwp-gl/src/blend.ts +38 -0
  24. package/vendor/dwp/packages/dwp-gl/src/browser.ts +136 -0
  25. package/vendor/dwp/packages/dwp-gl/src/gl-types.ts +130 -0
  26. package/vendor/dwp/packages/dwp-gl/src/index.ts +11 -0
  27. package/vendor/dwp/packages/dwp-gl/src/mat3.ts +35 -0
  28. package/vendor/dwp/packages/dwp-gl/src/program-cache.ts +67 -0
  29. package/vendor/dwp/packages/dwp-gl/src/renderer.ts +334 -0
  30. package/vendor/dwp/packages/dwp-gl/src/shaders.ts +227 -0
  31. package/vendor/dwp/packages/dwp-web/package.json +18 -0
  32. package/vendor/dwp/packages/dwp-web/src/assets.ts +94 -0
  33. package/vendor/dwp/packages/dwp-web/src/canvas2d.ts +125 -0
  34. package/vendor/dwp/packages/dwp-web/src/clock.ts +29 -0
  35. package/vendor/dwp/packages/dwp-web/src/index.ts +4 -0
  36. package/vendor/dwp/packages/dwp-web/src/mount.ts +218 -0
package/README.md CHANGED
@@ -2,23 +2,23 @@
2
2
  已适配 harness 0.1.2-rc
3
3
  <!-- Hero -->
4
4
  <div align="center">
5
- <b style="font-size: 1.15em;">把 Wallpaper Engine 的壁纸实时同步为 DSH Web 界面背景,并附带主题壁纸</b><br /><br />
5
+ <b style="font-size: 1.15em;">把 Wallpaper Engine 的壁纸实时同步为 DSH Web 界面背景,并支持应用挂载和自定义壁纸导入</b><br /><br />
6
6
  <a href="https://www.npmjs.com/package/dsh-wallpaper_share"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-wallpaper_share" /></a>
7
7
  <a href="https://www.npmjs.com/package/dsh-wallpaper_share"><img alt="npm downloads" src="https://img.shields.io/npm/dm/dsh-wallpaper_share" /></a>
8
8
  <a href="https://github.com/YRN-playmaker/dsh-wallpaper_share/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/YRN-playmaker/dsh-wallpaper_share" /></a>
9
9
  <a href="https://opensource.org/licenses/GPL-3.0"><img alt="License: GPL-3.0" src="https://img.shields.io/badge/License-GPL--3.0-blue.svg" /></a>
10
- <a href="https://github.com/YRN-playmaker/dsh-wallpaper_share/releases"><img alt="插件版本 v26.9.8" src="https://img.shields.io/badge/v26.9.8-4d6bfe" /></a><br /><br />
10
+ <a href="https://github.com/YRN-playmaker/dsh-wallpaper_share/releases"><img alt="插件版本 v26.9.10-T" src="https://img.shields.io/badge/v26.9.10--T-4d6bfe" /></a><br /><br />
11
11
  <img alt="壁纸同步" src="https://img.shields.io/badge/-%E5%A3%81%E7%BA%B8%E5%90%8C%E6%AD%A5-4d6bfe" /> <img alt="场景渲染" src="https://img.shields.io/badge/-%E5%9C%BA%E6%99%AF%E6%B8%B2%E6%9F%93-4d6bfe" /> <img alt="DWP 市场" src="https://img.shields.io/badge/-DWP%20%E5%B8%82%E5%9C%BA-4d6bfe" /> <img alt="眼动追踪" src="https://img.shields.io/badge/-%E7%9C%BC%E5%8A%A8%E8%BF%BD%E8%B8%AA-4d6bfe" /> <img alt="专注模式" src="https://img.shields.io/badge/-%E4%B8%93%E6%B3%A8%E6%A8%A1%E5%BC%8F-4d6bfe" /> <img alt="多显示器" src="https://img.shields.io/badge/-%E5%A4%9A%E6%98%BE%E7%A4%BA%E5%99%A8-4d6bfe" /><br /><br />
12
12
  </div>
13
13
 
14
14
  <div align="center">
15
- 🌏 <a href="#中文"><b>中文</b></a> · <a href="#english">English</a> · 纯中文长文见 <a href="README.zh-CN.md"><code>README.zh-CN.md</code></a>
15
+ 🌏 <a href="#中文"><b>中文</b></a> · <a href="#english">English</a> ·
16
16
  </div>
17
17
 
18
18
 
19
- 把 Wallpaper Engine 当前显示的壁纸实时同步为 DeepSeek Harness Web 界面的背景,并提供 `wallpaper_share` 标签页用于调整渲染模式、视觉效果、专注模式与壁纸库。支持场景壁纸的完整动效与应用壁纸的导入。
19
+ 把 Wallpaper Engine 的壁纸同步为 DeepSeek Harness Web 界面的背景,并支持调整渲染模式、视觉效果、专注模式与壁纸库外挂壁纸与直链应用下载。
20
20
 
21
- > **纯显示同步**:只读取 WE 状态,不控制 / 不修改桌面壁纸(换壁纸请在 WE 内操作)。
21
+ > **纯显示同步**:只读取 WE 状态,不控制 / 不修改桌面壁纸。
22
22
  > **无敏感信息**:代码不含 Steam 用户名 / SteamID / 令牌;WE 安装目录运行时自动检测(注册表 `HKCU\Software\WallpaperEngine\installPath` → 常见 Steam 路径),检测不到时才需要手动配置。眼动追踪全程本地推理,摄像头画面不出设备。
23
23
 
24
24
  ---
@@ -30,7 +30,6 @@
30
30
 
31
31
  - [⚡ 30 秒上手](#-30-秒上手)
32
32
  - [✨ 功能一览](#-功能一览)
33
- - [🧭 面板导览](#-面板导览)
34
33
  - [🎨 渲染模式与兼容矩阵](#-渲染模式与兼容矩阵)
35
34
  - [🖼️ Scene 渲染与回退](#-scene-渲染与回退)
36
35
  - [🔍 专注模式与眼动追踪](#-专注模式与眼动追踪)
@@ -61,36 +60,32 @@ dsh plugin --profile web add dsh-wallpaper_share # 或见下方「安装」选
61
60
 
62
61
  ## ✨ 功能一览
63
62
 
64
- - **实时同步**:在 WE 切换壁纸后,页面背景约 2 秒内自动跟随
65
- - **多显示器**:自动跟随"最新变化"的一台;复数显示器时可手动锁定某台作为背景来源
66
- - **三档渲染模式**:预览 / 捕获 / 完整,详见 [渲染模式与兼容矩阵](#-渲染模式与兼容矩阵)
67
- - **原生 scene 捕获渲染器**:随包内置 Rust 编写的 `we-capture.exe`,用 Windows Graphics Capture 抓取 WE 正在渲染的桌面,镜像 WE 自身输出 → GLSL / SceneScript / 关键帧 / 粒子等**所有 WE 效果天然全覆盖**
68
- - **专注模式**:叠加一个圆心清晰、圆外模糊的阅读窗;默认跟随鼠标,开专注即生效
69
- - **眼动追踪(实验)**:可选,用摄像头推断注视点让透镜跟随视线;9 点校准、文字吸附、抗抖动
70
- - **应用启动器**:壁纸库新增「应用启动器」分类——粘贴软件包 `http(s)` 直链(`.zip`/`.7z`/`.exe`,**加密压缩包填解压密码**)或**中国移动云盘分享链接**(`yun.139.com/shareweb/#/w/i/…`,提取码填在密码框),DSH 自动 下载 → 解包 → 探测可执行入口 → 封装成**类 WE app 格式**(自动生成 `project.json` + 预览图卡片)并入库;卡片一键「▶ 启动」(每次弹确认),也支持卸载 / 更新预览 / 多入口切换。装到 `~/.dsh/storages/we-sync-apps`(自动注册进壁纸读取位置),不依赖 WE 运行、不受新版 WE 取消应用类壁纸影响。加密 zip(ZipCrypto / WinZip AES)纯 JS 解密、密码不落盘;`.7z` 需系统装有 7-Zip 或将 `7za.exe` 放入插件 `bin/`(`CONFIG.launcherSevenZipPath` 可指定路径)。139 分享的元数据解析匿名可用(提取码即密码框值),**原始文件下载需登录态**:登录 yun.139.com 后 F12 复制任意请求的 `Authorization` 头,粘贴到面板「139 登录态」行(存 `~/.dsh/storages/we-sync-139-auth.json`,可随时清除;缺登录态时面板自动展开该行)
71
- - **壁纸库 · 本地 / 市场**:按**本地**与**市场**两大分类浏览。本地一栏管理已装内容——`dwp壁纸`(点击即挂载为全局背景,已挂载再点取消)与 `we 应用`(点击打开所在文件夹,含「▶ 启动」),带标题搜索、缩略图与计数;市场一栏浏览 `dwp-registry` 目录,支持名称 / 作者搜索、标签筛选与**安装 / 更新 / 卸载**
72
- - **DWP 壁纸与全局背景渲染**:`dwp/1.0` 协议包(纯文本 / solid / 粒子 / mesh 图层 + 12 种混合模式 + 3 种动画 + 11 种效果,确定性渲染);挂载后经 WebGL2 真实渲染为 DSH 全局背景(低配 Canvas2D 降级),同时暂停 WE 同步避免冲突,刷新后自动恢复
73
- - **沉浸模式**:一键隐去会话头部、正文与输入栏,让壁纸独占视野;网页 / 应用类壁纸在沉浸下可直接鼠标交互(详见[沉浸模式](#-沉浸模式与任务指示))
74
- - **视觉效果**:面板透明度 0–100% / 背景模糊 0–30px / 阴影深度 0–100%,即时生效
75
- - **后台任务可视化**:收纳侧边栏时,用圆形指示感知任务进度(绿 = 空闲 / 蓝 = 进行中 / 黄 = 等待授权)
76
- - **同步开关**:一键启停;挂载 DWP 壁纸期间显示「同步暂停(DWP)」第三态
77
- - **设置持久化**:同步开关、渲染模式、显示器锁、三档渲染模式、专注 / 眼动等偏好写入 `localStorage`(键 `we-sync.settings`),刷新或重启 DSH 后自动恢复;沉浸模式等临时视图态与任务状态一律不落盘
78
- - **自诊断路由** `/we-sync/diag`(仅本机可访问,含 scene renderer 状态与纹理提取结果)
63
+ - **实时同步**:在 WE 切换壁纸后,harness页面背景会自动跟随为最新变化的壁纸,复数显示器时可手动锁定某台作为背景来源。支持三档渲染模式以调节能效表现:详见 [渲染模式与兼容矩阵](#-渲染模式与兼容矩阵)
64
+ <img width="1917" height="1018" alt="image" src="https://github.com/user-attachments/assets/6f147644-6283-456b-a9eb-c9c6d9925079" />
65
+
66
+ - **侧边栏沉浸模式**:一键隐去会话头部、正文与输入栏,让壁纸独占视野;网页 / 应用类壁纸在沉浸下可直接鼠标交互(详见[沉浸模式](#-沉浸模式与任务指示))
67
+
68
+ - **专注模式**:叠加一个圆心清晰、圆外模糊的阅读窗,以专注于任务,提升文字可读性;默认跟随鼠标,也可用摄像头推断注视点让透镜跟随视线;9 点校准、文字吸附、抗抖动
69
+ <img width="426" height="240" alt="Video Project 29" src="https://github.com/user-attachments/assets/57daf64c-ff2b-40c7-aeef-73cac46c4c2b" />
79
70
 
80
- ## 🧭 面板导览
71
+ - **壁纸库**:按**本地**/**市场**/**应用启动器**分类。本地一栏管理已装内容——`dwp壁纸`(点击即挂载为全局背景,已挂载再点取消)与 `应用`(**大类**,下分 `we应用` 与 `应用`;点击卡片即启动,每次启动弹确认),带标题搜索、缩略图与计数;搜索框右侧的**「管理」**开关进入管理模式:卡片整体轻微晃动,**点卡片即多选**(选中项停住晃动、背景转蓝并打勾),选择条给出「已选 N / 卸载选中 / 清空选择」,可跨 `dwp壁纸` 与 `应用` 一次选完再统一卸载(确认弹层列出全部将被删除的项);每张卡仍保留「打开源文件 / 卸载」单项操作,dwp 的「打开源文件」会在资源管理器里定位包文件——**卸载只对 dwp 壁纸与启动器装的应用开放**,WE 工坊内容点了只给提示、不参与多选(绝不删 Steam 内容);市场一栏浏览 `dwp-registry` 目录,支持名称 / 作者搜索、标签筛选与安装 / 更新 / 卸载;**应用启动器**:支持用户粘贴 `http(s)` 直链(`.zip`/`.7z`/`.exe`,**加密压缩包填解压密码**)或部分**云盘分享链接**(如`yun.139.com/shareweb/#/w/i/…`,提取码填在密码框),唤醒DSH 自动下载,解包并封装成**类 app 格式**(自动生成 `project.json` + 预览图卡片)入库;卡片只留「详细」按钮(安装时间 / 地址 / exe 文件,另含来源、SHA512、更新预览与多入口切换)——启动与卸载统一到「本地 → 应用」里做。不依赖 WE 运行、不受新版 WE 取消应用类壁纸影响。、
72
+ <img width="737" height="675" alt="image" src="https://github.com/user-attachments/assets/7567c226-7ea4-4fcb-a3b7-11190ee681ff" />
81
73
 
82
- `wallpaper_share` 标签页采用**双页虚拟滚动**:「设置 ⇄ 壁纸库」两页纵向叠放、中间留断层,一套滚轮全接管——页内跟手滚动 + 惯性阻尼,滚到页界继续滚即**蓄力翻页**(250ms 无输入弹回防误触),右缘页签显示当前页(黄色高亮)与蓄力进度,点击可直达;所有操作即时生效、无需保存:
74
+
75
+ -**设置页面介绍↓**
83
76
 
84
77
  | 卡片 | 内容 |
85
78
  | --- | --- |
86
- | **壁纸状态** | 壁纸名(标题行**右缘为插件版本号**,一键整段选中便于反馈问题);下方副标题只承载诊断信息——scene 壁纸显示当前渲染通路(`场景 · 预览图 / 捕获 live 30fps / 浏览器模型渲染 / 回退:<原因>`),未应用壁纸时显示引导文案,其余类型整行不占;多显示器时出现「背景显示器」下拉;`⏻ 同步开启 / 关闭 / 暂停(DWP)` 三态按钮 |
79
+ | **壁纸状态** | 壁纸名(标题行**右缘为插件版本号**,点击直达 GitHub 仓库);下方副标题只承载诊断信息——scene 壁纸显示当前渲染通路(`场景 · 预览图 / 捕获 live 30fps / 浏览器模型渲染 / 回退:<原因>`),未应用壁纸时显示引导文案,其余类型整行不占;多显示器时出现「背景显示器」下拉;`⏻ 同步开启 / 关闭 / 暂停(DWP)` 三态按钮 |
87
80
  | **视觉效果** | 三档渲染模式分段按钮;「专注模式」及其展开条(眼动追踪 / 校准视线 / 文字吸附 / 实时状态);透明度 · 模糊 · 阴影三个滑块(**专注开启时滑块隐藏**,改由任务态与透镜接管) |
88
- | **壁纸库** | 「壁纸读取位置」可添加自定义壁纸目录(指向单个壁纸目录或集合文件夹),启动器安装位置也并入这里(带「(启动器安装位置)」标记,可更改 / 迁移);「本地 / 市场 / 应用启动器」三栏切换,本地按 `dwp壁纸` / `we 应用` 筛选 + 标题搜索 + 分页(显示更多 +60),市场支持安装 / 更新 / 卸载,**应用启动器**支持直链安装(`.zip`/`.7z`/`.exe`,加密包可填解压密码)与 **139 分享链接**(提取码填密码框;原始文件下载需粘贴一次 Authorization 登录态),自动封装类 WE app(json + 预览图)与一键启动(每次弹确认) |
89
81
 
90
- 两点与宿主 UI 的约定:
82
+ <img width="841" height="667" alt="image" src="https://github.com/user-attachments/assets/7d652c07-8344-4de3-abbd-75620375c0b6" />
91
83
 
92
- - **本标签页禁用正文宽度拖拽**:会话正文两侧那对拖拽把手在 `wallpaper_share`(与「轨迹」页一样)不出现,切回「对话记录」仍可用。
93
- - 标签页是 session 作用域插槽,切换会话会重挂载面板;语言与开关状态从模块级 store 恢复,不会"弹回英语"。
84
+ 其他功能:
85
+ - **工作区脉搏(内置 DWP)**:新内置动态壁纸 `workspace-pulse`——把**当前工作区近期改动的文件**以最多 3 个浮动气泡呈现在背景上,右上角绿 `+` / 红 `−` 徽章标示该文件体积在增加还是减少(含新增 / 删除)。不依赖 git(未保存、二进制文件也能捕获);点击挂载后实时更新,空闲时显示呼吸提示。首次启动自动入库,出现在 壁纸库→本地→dwp壁纸
86
+ - **DWP 壁纸与全局背景渲染**:`dwp/1.0` 协议包(纯文本 / solid / 粒子 / mesh 图层 + 12 种混合模式 + 3 种动画 + 11 种效果,确定性渲染);挂载后经 WebGL2 真实渲染为 DSH 全局背景(低配 Canvas2D 降级),同时暂停 WE 同步避免冲突,刷新后自动恢复
87
+ - **设置持久化**:同步开关、渲染模式、显示器锁、三档渲染模式、专注 / 眼动等偏好写入 `localStorage`(键 `we-sync.settings`),刷新或重启 DSH 后自动恢复;沉浸模式等临时视图态与任务状态一律不落盘
88
+ - **自诊断路由** `/we-sync/diag`(仅本机可访问,含 scene renderer 状态与纹理提取结果)
94
89
 
95
90
  ## 🎨 渲染模式与兼容矩阵
96
91
 
@@ -121,7 +116,7 @@ scene 壁纸在捕获 / 完整档下的渲染优先级与回退链:
121
116
  3. **静态纹理**:提取 pkg 内嵌高清纹理垫底。
122
117
  4. **预览图**:以上皆不可用 → WE 预览图。
123
118
 
124
- 当前走的是哪一层,直接显示在面板副标题上(见[面板导览](#-面板导览));更细的状态在 `/we-sync/diag`。
119
+ 当前走的是哪一层,直接显示在面板副标题上;更细的状态在 `/we-sync/diag`。
125
120
 
126
121
  **原生捕获器原理**:WE 的 DX11 渲染窗口是 Progman 子窗口、WGC 不接受子窗口,故捕获其顶层根 Progman / WorkerW,BGRA→JPEG 按外部渲染器协议输出到 stdout。因为镜像的是 **WE 自身的渲染结果**,无需在 JS 端复刻那套 ~500KB 软渲染引擎,效果 100% 覆盖。多显示器下顶层根窗横跨整个虚拟桌面,捕获器按锁定的那块 WPE 子窗矩形用 `CopySubresourceRegion` + `D3D11_BOX` 只回读目标屏区域再编码(换算经 `ClientToScreen` / `GetClientRect` 归一化,DPI 缩放非 100% 同样正确)→ 输出严格是单块屏。`bin/we-capture.exe`(约 540KB,Windows-only)随包发布,Rust 源码在 `native/we-capture/`(`cargo build --release` 可重建,含 `--selftest` 诊断模式);DSH 侧 `probeRenderer` 自动发现,`sceneRenderMode='auto'` 检测到原生渲染器即走 external,否则回退 browser。
127
122
 
@@ -157,9 +152,11 @@ scene 壁纸在捕获 / 完整档下的渲染优先级与回退链:
157
152
  | 档位 | 适合谁 | 安装命令 |
158
153
  | --- | --- | --- |
159
154
  | 🟢 **小白** | 不纠结版本,直接拉当前主流 Harness 环境的推荐版 | `dsh plugin --profile web add dsh-wallpaper_share` |
160
- | 🔵 **rc(稳定版本)** | 适配 harness 为 rc 架构的推荐版本,新功能适配较慢 | `dsh plugin --profile web add dsh-wallpaper_share@rc` |
155
+ | 🔵 **rc(稳定版本)** | 适配 harness 为 rc 架构的推荐版本,新功能适配较慢 | `dsh plugin --profile web add dsh-wallpaper_share@rc010` |
161
156
  | 🟡 **test(测试版本)** | 用于测试的版本,可能有未完成功能 | `dsh plugin --profile web add dsh-wallpaper_share@test` |
162
157
 
158
+ > 当前测试版:**`26.9.10-T`**(GitHub `test` 分支 / npm `test` dist-tag)。本版新增:壁纸库「管理」多选批量卸载、应用启动器卡片化简为「详细」、面板三页滚动(含占位的「dwp创作」)、宿主输入框按页显隐、**DWP 时钟变量**与**纹理分档**(预览/捕获用低清、增强/完整用高清)。
159
+
163
160
  ### 🔧 其他安装方式
164
161
 
165
162
  ```bash
@@ -181,10 +178,10 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share
181
178
  # 从 GitHub 安装(仓库自带预构建 lib/,不需要构建许可;main = 最新档)
182
179
  dsh plugin --profile web add dsh-wallpaper_share
183
180
  # 从 npm 安装(默认 = latest 最新档)
184
- dsh plugin --profile web add ./dsh-wallpaper_share-26.9.8.tgz
185
- # 本地 tarball 安装(26.9.8)
181
+ dsh plugin --profile web add ./dsh-wallpaper_share-26.9.10-T.tgz
182
+ # 本地 tarball 安装(26.9.10-T)
186
183
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
187
- # 从 GitHub 安装 test 分支(测试档,含壁纸特效优化、页面功能更新等)
184
+ # 从 GitHub 安装 test 分支(测试档,当前即 26.9.10-T:管理多选卸载 / 三页滚动 / DWP 纹理分档等)
188
185
  ```
189
186
 
190
187
  ```bash
@@ -226,6 +223,9 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
226
223
  | `particleSizeScale` | `1` | 粒子尺寸缩放 |
227
224
  | `effectStrengthScale` | `1` | 特效强度缩放 |
228
225
  | `puppetMeshRender` | `true` | puppet 网格渲染开关 |
226
+ | `workspaceDir` | `''`(= 插件进程工作目录) | 工作区脉搏的扫描根目录 |
227
+ | `workspacePulseWindowMs` | `90000` | 工作区脉搏改动保留窗口(更早的改动从气泡流淘汰) |
228
+ | `workspacePulseAutoInstall` | `true` | 工作区脉搏内置包自动入库(卸载后重启会重装) |
229
229
 
230
230
  > 面板里的三档切换(预览 / 捕获 / 完整)是运行时 UI 设置,与上面的 `sceneRenderMode`(后端浏览器 / 外部 renderer 选择)不同。
231
231
 
@@ -249,7 +249,9 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
249
249
 
250
250
  - `src/index.ts` — Node 半:WE 状态轮询、HTTP 路由、scene renderer 子进程管理、壁纸库扫描
251
251
  - `src/scene/` — SceneAdapter 模块(协议 / 能力探测 / renderer 进程 / WebSocket / 回退 / PKGV0001 解析 / SceneModel 图层模型 / .tex 解码 / puppet mdl 解析)
252
- - `src/client/` — 浏览器半(主题覆盖 / 背景层 / SceneCanvas / SceneModelRenderer 子集渲染器 / ParticleRuntime / GazeLens 眼动 / 专注透镜 / 沉浸模式 / wallpaper_share 面板)
252
+ - `src/client/` — 浏览器半(主题覆盖 / 背景层 / SceneCanvas / SceneModelRenderer 子集渲染器 / ParticleRuntime / GazeLens 眼动 / 专注透镜 / 沉浸模式 / wallpaper_share 面板 / library-model.ts 壁纸库分类与详情格式化)
253
+ - `src/workspace/` — 工作区脉搏(文件系统快照差分 + 内置 DWP 组包器;`_dev/make-workspace-pulse.mjs` 为手动打包脚本)
254
+ - `src/daynight/` — 「DeepSeek 日夜」组包器(两张全画布 PNG + `$night_alpha` 分层;`_dev/make-daynight-dwp.mjs` 打包并装入本地市场,`_dev/verify-daynight-dwp.mjs` 静态校验 + 昼夜链路自检)
253
255
  - `native/we-capture/` — Rust 原生捕获器源码(Windows Graphics Capture → JPEG)
254
256
  - `bin/we-capture.exe` — 随包发布的原生捕获器(Windows-only)
255
257
  - `docs/` — 格式规范与技术文档(`scene-format.md` / `scene-fallback.md` / `tex-format-findings.md` / `mdl-skinning-findings.md`)
@@ -260,28 +262,11 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
260
262
 
261
263
  ## 🆕 已知问题
262
264
 
263
- > 适用版本:插件 `v26.9.8` / Harness `0.1.2-rc.1`。
264
-
265
- ### 兼容性(Harness 0.1.2 破坏性变更 · 已适配)
266
-
267
- `0.1.2-alpha.2` 曾打破的四项已在 `v26.9.4` 修复,并已对照 `0.1.2-rc.1` 的宿主实现核对:
268
-
269
- - **新建会话**:`workspaces.startSession` 已移除,改走 `ctx.get('uiWorkspace')?.startSession()`,老宿主回退 `workspaces`。
270
- - **orb 任务色**:`sessions` 改由 `ctx.inject(['sessions'], …)` 等宿主提供后再订阅,不再因 apply 期取空而卡在空闲绿。
271
- - **沉浸模式**:会话头部按 `[data-slot="conversation.session.header"]` 命中(插槽渲染多包了一层,旧的 `[data-phase] > header` 静默失配),正文与输入栏按 `[data-conversation-scroll]` 一并隐藏。
272
- - **⏻ 字形**:`.wesync-btn` 字体栈在宿主 `--dsw-font-family` 之后补 `'Segoe UI Symbol'` / `'Segoe UI Emoji'`,中英文仍走宿主字体,只有 U+23FB 落到符号字体。
273
-
274
- 服务查找一律改为"用到时再取",`0.1.0-rc.6` ~ `0.1.2-alpha.1` 的行为不受影响。
275
-
276
265
  ### 环境限制
277
266
 
278
267
  - **预览图不显示**:市场卡片缩略图指向 `raw.githubusercontent.com`,当前环境不可达。图片加载失败后 `onError` 隐藏显示。
279
268
  - **WE 安装目录不存在**:自动检测到目录但不存在时壁纸同步不可用(市场功能不受影响),可在 `CONFIG.wallpaperEngineDir` 手动指定。
280
269
 
281
- ### 构建与维护(不影响已发布包)
282
-
283
- - **`dwp-runtime-web/` 未纳入版本控制**:DWP 渲染运行时(`@dwp/web`)通过 `tsdown` 的本地路径 alias 在构建时内联进 `lib/client.js`,而该目录被 `.gitignore` 忽略、也不是 npm 依赖。**终端用户从 GitHub / npm 装的是已内联的预构建 `lib/`,不受影响、DWP 正常可用**;但**干净 clone 后 `pnpm build` 会因缺该目录而构建失败或静默产出坏包**——即"重新构建"目前只在存有 `dwp-runtime-web/` 的机器上可复现。计划:多人维护 / 上 CI 前,将其纳入 pnpm workspace 或改为 git-tag 依赖,并把 alias 兜底改为"缺目录即报错"。
284
-
285
270
  ## 📄 License
286
271
 
287
272
  GPL-3.0
@@ -295,7 +280,6 @@ GPL-3.0
295
280
 
296
281
  - [⚡ Quick Start](#-quick-start)
297
282
  - [✨ Features](#-features)
298
- - [🧭 Panel Tour](#-panel-tour)
299
283
  - [🎨 Render Modes & Compatibility Matrix](#-render-modes--compatibility-matrix)
300
284
  - [🖼️ Scene Rendering & Fallback](#-scene-rendering--fallback)
301
285
  - [🔍 Focus Mode & Eye Tracking](#-focus-mode--eye-tracking)
@@ -307,59 +291,58 @@ GPL-3.0
307
291
  - [🆕 Known Issues](#-known-issues)
308
292
  - [📄 License](#-license-1)
309
293
 
310
- Syncs the wallpaper Wallpaper Engine is currently showing into the DeepSeek Harness Web UI background, with a `wallpaper_share` tab to tune render mode, visual effects, focus mode and the wallpaper library. Full scene animation and application import are supported.
294
+ Syncs the wallpaper Wallpaper Engine is currently showing into the DeepSeek Harness Web UI background, and supports tuning render mode, visual effects, focus mode, plus external wallpapers for the library and direct-link app downloads.
311
295
 
312
- > **Display-only sync**: it only reads WE state; it never controls or changes your desktop wallpaper (switch wallpapers inside WE).
296
+ > **Display-only sync**: it only reads WE state; it never controls or changes your desktop wallpaper.
313
297
  > **No sensitive data**: the code contains no Steam username / SteamID / token; the WE install dir is auto-detected at runtime (registry `HKCU\Software\WallpaperEngine\installPath` → common Steam paths), manual config only if detection fails. Eye tracking runs fully locally — camera frames never leave the device.
314
298
 
315
299
  ## ⚡ Quick Start
316
300
 
317
301
  ```bash
318
- dsh plugin --profile web add dsh-wallpaper_share # or pick a tier below
302
+ dsh plugin --profile web add dsh-wallpaper_share # or pick a tier in "Installation" below
319
303
  # restart dsh (web profile), then open http://127.0.0.1:3080
320
304
  ```
321
305
 
322
306
  You get three things:
323
307
 
324
- 1. the **page background** becomes WE's current wallpaper (follows switches within ~2s), with the UI floating on top;
308
+ 1. the **page background** becomes WE's current wallpaper (follows switches within ~2s), with panels and cards floating on top;
325
309
  2. a **`wallpaper_share` tab** above the conversation (next to Chat and Trajectory) holding every toggle;
326
- 3. a round status light on the left edge **when the sidebar is collapsed** — it also opens immersive mode.
310
+ 3. a round status light on the left edge **when the sidebar is collapsed** (green / blue / yellow) — click it to enter immersive mode.
327
311
 
328
- WE must be running with a wallpaper applied; otherwise the background stays empty and the panel says so. Diagnostics: `http://127.0.0.1:3080/we-sync/diag` (localhost only; use the port printed at startup — 3080 by default).
312
+ WE must be running with a wallpaper applied; otherwise the background stays empty and the panel shows "no wallpaper applied". Diagnostics: `http://127.0.0.1:3080/we-sync/diag` (localhost only; use the port printed at startup — 3080 by default).
329
313
 
330
314
  > **Zero-config**: no API Key, no signup, no extra setup of any kind — install and go. (Note: the no-sensitive-data notice at the top is a privacy statement — the code contains no Steam username or token; you are never asked to provide one.)
331
315
 
332
316
  ## ✨ Features
333
317
 
334
- - **Real-time sync**: the page background follows WE's current wallpaper within ~2s
335
- - **Multi-monitor**: auto-follows the most recently changed; can lock a specific monitor
336
- - **3 render modes**: Preview / Capture / Full — see the [matrix](#-render-modes--compatibility-matrix)
337
- - **Native scene capture renderer**: bundled Rust `we-capture.exe` uses Windows Graphics Capture to grab WE's rendered desktop, mirroring WE's own output → GLSL / SceneScript / keyframes / particles **all covered natively**
338
- - **Focus mode**: a center-clear, edge-blurred reading window; follows the mouse by default
339
- - **Eye tracking (experimental)**: optional; uses the webcam to follow your gaze; 9-point calibration, text-line snap, anti-jitter
340
- - **Wallpaper library · Local / Market**: Local manages what's installed — `dwp` packages (click to mount as the global background, click again to unmount) and `we apps` (click to open their folder), with title search, thumbnails and counts; Market browses the `dwp-registry` catalog with name / author search, tag filters and **install / update / uninstall**
341
- - **DWP wallpapers & global-background rendering**: `dwp/1.0` protocol packages (text / solid / particle / mesh layers + 12 blend modes + 3 animations + 11 effects, deterministic rendering); mounting renders them as the DSH global background via WebGL2 (Canvas2D fallback on weak GPUs) while pausing WE sync to avoid conflicts, auto-restored after a refresh
342
- - **Immersive mode**: one click hides the session header, transcript and composer so the wallpaper owns the screen; web / app wallpapers become directly interactive underneath (see [Immersive mode](#-immersive-mode--task-indicator))
343
- - **Visual sliders**: panel opacity 0–100% / background blur 0–30px / shadow depth 0–100%, live
344
- - **Background task indicator**: a circular cue when the sidebar is collapsed (green idle / blue running / yellow awaiting approval)
345
- - **Sync toggle**: one-click on/off, with a third "paused (DWP)" state while a DWP is mounted
346
- - **Settings persistence**: sync, render mode, monitor lock, focus / eye-tracking preferences go to `localStorage` (key `we-sync.settings`) and restore after a refresh or restart; transient view state (immersive) and task flags never do
347
- - **Self-diagnostic route** `/we-sync/diag` (localhost only; scene renderer status & texture extraction results)
318
+ - **Real-time sync**: after you switch wallpapers in WE, the harness page background follows the latest changed wallpaper automatically; with multiple monitors you can lock one as the background source. Three render modes are available to tune power draw — see [Render Modes & Compatibility Matrix](#-render-modes--compatibility-matrix)
319
+ <img width="1917" height="1018" alt="image" src="https://github.com/user-attachments/assets/6f147644-6283-456b-a9eb-c9c6d9925079" />
320
+
321
+ - **Sidebar immersive mode**: one click hides the session header, transcript and composer so the wallpaper owns the view; web / app wallpapers become directly mouse-interactive under immersion (see [Immersive Mode](#-immersive-mode--task-indicator))
348
322
 
349
- ## 🧭 Panel Tour
323
+ - **Focus mode**: overlays a center-clear, edge-blurred reading window on the wallpaper to focus on the task and improve text readability; follows the mouse by default, or uses the webcam to infer the gaze point so the lens follows your eyes; 9-point calibration, text-line snap, anti-jitter
324
+ <img width="426" height="240" alt="Video Project 29" src="https://github.com/user-attachments/assets/57daf64c-ff2b-40c7-aeef-73cac46c4c2b" />
350
325
 
351
- The `wallpaper_share` tab uses **two-page virtual scrolling**: "Settings ⇄ Library" stacked vertically with a gap between pages, one wheel handler for everything — momentum scrolling with inertia inside a page, and a **charge-to-flip** zone when you keep scrolling at a page boundary (springs back after 250ms idle to prevent accidents). The right-edge tab strip shows the current page (yellow highlight) plus charge progress and supports click-to-jump. Everything applies instantly — there is no save button.
326
+ - **Wallpaper library**: grouped into **Local** / **Market** / **App Launcher**. Local manages what's installed — `dwp wallpapers` (click to mount as the global background, click again to unmount) and `apps` (a top category split into `WE app` and `App`; click a card to launch, with a confirm dialog each time), with title search, thumbnails and counts; the **Manage** toggle next to the search box puts the cards into an edit state — they jiggle, **clicking a card multi-selects it** (selected cards stop jiggling, turn blue and get a check mark), and the selection bar offers "selected N / uninstall selected / clear" so you can pick across `dwp wallpapers` and `apps` and uninstall them in one go (the confirm dialog lists everything that will be deleted); each card also keeps a per-item "open source file / uninstall" row — **uninstall is only offered for DWP wallpapers and launcher-installed apps**, WE Workshop content just shows a hint and cannot be selected (Steam content is never deleted); Market browses the `dwp-registry` catalog with name / author search, tag filters and **install / update / uninstall**; **App Launcher** only installs: it accepts pasted `http(s)` direct links (`.zip` / `.7z` / `.exe`, **fill the archive password for encrypted archives**) or some **cloud-drive share links** (e.g. `yun.139.com/shareweb/#/w/i/…`, passcode in the password field), wakes DSH to download automatically, unpacks and wraps them into **WE-app-style entries** (auto-generated `project.json` + preview card) in the library; each card keeps a "Details" button (install time / location / executable, plus source, SHA512, update preview and entry switching) — launching and uninstalling happen in Local → Apps. It does not require WE to run and is unaffected by newer WE versions dropping application wallpapers.
327
+ <img width="737" height="675" alt="image" src="https://github.com/user-attachments/assets/7567c226-7ea4-4fcb-a3b7-11190ee681ff" />
328
+
329
+ **Settings page↓**
352
330
 
353
331
  | Card | Contents |
354
332
  | --- | --- |
355
- | **Wallpaper status** | Wallpaper name, with the **plugin version at the right edge of the title row** (single-click selects it whole, handy in bug reports); below it a subtitle reserved for diagnostics — the active render path for scene wallpapers (`Scene · preview image / capture live 30fps / browser model render / fallback: <reason>`), a hint when no wallpaper is applied, and nothing at all otherwise; a monitor dropdown when more than one display is present; the `⏻` sync button with three states |
356
- | **Visual effects** | The 3-mode segmented control; the focus-mode button with its flyout (eye tracking / calibration / text-line snap / live status); opacity · blur · shadow sliders — **hidden while focus mode is on**, where task state and the lens take over |
357
- | **Library** | "Wallpaper read locations" for custom folders (a single wallpaper dir or a collection root); launcher-installed apps merge into this list (tagged "launcher install location", rename / migrate supported); Local / Market tabs, `dwp` / `we app` filters, title search, paging (+60), and market install / update / uninstall; the **App Launcher** tab installs from direct links (`.zip`/`.7z`/`.exe`, password field for encrypted archives) and **139 share links** (passcode in the password field; raw-file download needs a one-time Authorization paste), auto-wraps into WE-app-style entries (json + preview image) with one-click launch (confirmation every time) |
333
+ | **Wallpaper status** | Wallpaper name (the **plugin version sits at the right edge of the title row** and links to the GitHub repo); the subtitle below carries diagnostics only — for scene wallpapers it shows the active render path (`Scene · preview image / capture live 30fps / browser model render / fallback: <reason>`), a hint when no wallpaper is applied, and takes no row at all for other types; a "background monitor" dropdown appears with multiple monitors; the `⏻` button has three states — sync on / off / paused (DWP) |
334
+ | **Visual effects** | The 3-mode segmented control; the focus-mode button with its flyout (eye tracking / calibrate gaze / text-line snap / live status); opacity · blur · shadow sliders (**hidden while focus mode is on** — task state and the lens take over) |
358
335
 
359
- Two host-UI conventions worth knowing:
336
+ <img width="841" height="667" alt="image" src="https://github.com/user-attachments/assets/7d652c07-8344-4de3-abbd-75620375c0b6" />
360
337
 
361
- - **This tab disables transcript-width dragging**: the pair of drag handles beside the conversation is hidden on `wallpaper_share` (exactly like the Trajectory tab) and still works on Chat.
362
- - The tab is a session-scoped slot, so it remounts when you switch sessions; locale and toggle state are restored from a module-level store rather than re-detected.
338
+ Other features:
339
+
340
+ - **Workspace Pulse (built-in DWP)**: a new built-in dynamic wallpaper `workspace-pulse` — shows **recently changed files in your workspace** as up to 3 floating bubbles on the background, each with a green `+` / red `−` badge at its top-right marking whether the file is growing or shrinking (covers additions / deletions too). No git dependency (unsaved and binary files are caught as well); updates live once mounted, with a breathing hint when idle. Auto-installed into the library on first startup — see Wallpaper library → Local → dwp wallpapers
341
+ - **DWP wallpapers & global-background rendering**: `dwp/1.0` protocol packages (text / solid / particle / mesh layers + 12 blend modes + 3 animations + 11 effects, deterministic rendering); mounting renders them as the DSH global background via WebGL2 (Canvas2D fallback on weak GPUs) while pausing WE sync to avoid conflicts, auto-restored after a refresh
342
+ - **DWP clock variables (a generic capability for wallpaper authors)**: every 2.5s the plugin feeds `hour` / `night_alpha` / `night_on` / `day_on` into **whatever scene is mounted** (`Handle.setParams` overwrites key by key, so it never clashes with the built-in Workspace Pulse variables); declare them in `variables` and reference them — the market package **"DeepSeek Day & Night"** uses `$night_alpha` to swap in a night image from 18:00 to 06:00 and back, with a 10-minute linear crossfade at both boundaries
343
+ - **DWP texture tiers (one wallpaper, two resolutions)**: `hd_on` / `night_sd` / `night_hd` are fed too, and the render mode picks the tier — **Eco / Perf = low, Enhanced = high**; a package lists what only the high tier needs in the scene-level extension field `dsh.hdAssets`, and the consumer stubs those with a 1×1 placeholder in the low tier, so the high-res textures are **never fetched or decoded** there ("DeepSeek Day & Night" 1.1.0 ships 1920×1080 / 7680×4320 tiers; switching tiers remounts with the new asset set)
344
+ - **Settings persistence**: sync toggle, render mode, monitor lock, the three visual sliders, focus / eye-tracking preferences are written to `localStorage` (key `we-sync.settings`) and restored after a refresh or DSH restart; transient view state such as immersive mode and task flags are deliberately not persisted
345
+ - **Self-diagnostic route** `/we-sync/diag` (localhost only; scene renderer status & texture extraction results)
363
346
 
364
347
  ## 🎨 Render Modes & Compatibility Matrix
365
348
 
@@ -371,6 +354,8 @@ The segmented control at the top of the panel decides how the wallpaper is prese
371
354
  | **Capture** (perf) | Capture WE desktop | scene uses the **native `we-capture.exe`**, mirroring WE's own rendered desktop → full effect coverage; falls back to browser rendering when WE isn't running |
372
355
  | **Full** (enhanced) | Browser pkg render | scene uses the **browser subset renderer**, parsing `.pkg` and redrawing in-browser, independent of WE |
373
356
 
357
+ The matrix per wallpaper type (the three modes only truly differ for **scene**; for video / web / image, Capture and Full behave the same and both load the source):
358
+
374
359
  | Type | Preview | Capture | Full |
375
360
  | --- | --- | --- | --- |
376
361
  | `video` | static preview | plays source video (HTTP Range, seekable) | plays source video |
@@ -379,8 +364,6 @@ The segmented control at the top of the panel decides how the wallpaper is prese
379
364
  | `scene` | static preview | **native WE desktop capture** (full coverage; falls back to browser when WE not running) | **browser pkg render** (WE-independent, subset) |
380
365
  | `application` / `other` | static preview | static preview (viewable in the library) | static preview |
381
366
 
382
- The three modes only truly differ for **scene**; for video / web / image, Capture and Full both load the source.
383
-
384
367
  ## 🖼️ Scene Rendering & Fallback
385
368
 
386
369
  Priority and fallback chain for scene wallpapers under Capture / Full:
@@ -390,7 +373,7 @@ Priority and fallback chain for scene wallpapers under Capture / Full:
390
373
  3. **Static textures**: extracted pkg textures as a base layer.
391
374
  4. **Preview image**: if none of the above → WE preview.
392
375
 
393
- Which layer is live is shown in the panel subtitle (see [Panel Tour](#-panel-tour)); finer state lives in `/we-sync/diag`.
376
+ Which layer is live is shown in the panel subtitle; finer state lives in `/we-sync/diag`.
394
377
 
395
378
  **How the capture renderer works**: WE's DX11 window is a child of Progman and WGC rejects child windows, so it captures the top-level Progman / WorkerW root, converts BGRA→JPEG and emits frames over stdout via the external-renderer protocol. Because it mirrors **WE's own rendering**, no ~500KB JS reimplementation is needed and effects are 100% covered. With multiple monitors the top-level root window spans the whole virtual desktop, so the capture renderer crops to the locked WPE child-window rect via `CopySubresourceRegion` + `D3D11_BOX` before encoding (normalized through `ClientToScreen` / `GetClientRect`, correct under non-100% DPI scaling) → the output is strictly one display. `bin/we-capture.exe` (~540KB, Windows-only) ships in the package; Rust source in `native/we-capture/` (`cargo build --release`, with a `--selftest` mode); DSH's `probeRenderer` auto-discovers it and `sceneRenderMode='auto'` prefers external when found, else browser.
396
379
 
@@ -425,11 +408,12 @@ When the sidebar is **collapsed**, a 34px round light appears on the left edge (
425
408
 
426
409
  | Tier | Who it's for | Install command |
427
410
  | --- | --- | --- |
428
- | 🟢 **Beginner (latest)** | Don't fuss over versions — just grab the recommended build for the current mainstream Harness | `dsh plugin --profile web add dsh-wallpaper_share` |
429
- | 🔵 **rc (stable)** | Recommended build for a Harness on the rc architecture; new features are adapted more slowly | `dsh plugin --profile web add dsh-wallpaper_share@rc` |
430
- | 🟣 **alpha (new)** | Recommended build for a Harness on the alpha architecture | `dsh plugin --profile web add dsh-wallpaper_share@alpha` |
411
+ | 🟢 **Beginner** | Don't fuss over versions — just grab the recommended build for the current mainstream Harness | `dsh plugin --profile web add dsh-wallpaper_share` |
412
+ | 🔵 **rc (stable)** | Recommended build for a Harness on the rc architecture; new features are adapted more slowly | `dsh plugin --profile web add dsh-wallpaper_share@rc010` |
431
413
  | 🟡 **test (testing)** | For testing only; may contain unfinished features | `dsh plugin --profile web add dsh-wallpaper_share@test` |
432
414
 
415
+ > Current test build: **`26.9.10-T`** (GitHub `test` branch / npm `test` dist-tag). New in this build: library "Manage" multi-select bulk uninstall, launcher cards reduced to a "Details" button, a third scrolling page (a placeholder "DWP Studio"), the host composer hidden per page, plus **DWP clock variables** and **texture tiers** (Eco/Perf = low-res, Enhanced = high-res).
416
+
433
417
  ### 🔧 Other install methods
434
418
 
435
419
  ```bash
@@ -451,10 +435,10 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share
451
435
  # install from GitHub (repo ships prebuilt lib/, no build permission needed; main = latest tier)
452
436
  dsh plugin --profile web add dsh-wallpaper_share
453
437
  # install from npm (default = latest tier)
454
- dsh plugin --profile web add ./dsh-wallpaper_share-26.9.8.tgz
455
- # install from a local tarball (26.9.8)
438
+ dsh plugin --profile web add ./dsh-wallpaper_share-26.9.10-T.tgz
439
+ # install from a local tarball (26.9.10-T)
456
440
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
457
- # install the test branch (test tier, latest dev build)
441
+ # install the test branch from GitHub (test tier — currently 26.9.10-T: multi-select uninstall, three-page scroll, DWP texture tiers, …)
458
442
  ```
459
443
 
460
444
  ```bash
@@ -496,6 +480,9 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
496
480
  | `particleSizeScale` | `1` | particle size scale |
497
481
  | `effectStrengthScale` | `1` | effect strength scale |
498
482
  | `puppetMeshRender` | `true` | puppet mesh rendering toggle |
483
+ | `workspaceDir` | `''` (= plugin process cwd) | workspace root scanned by Workspace Pulse |
484
+ | `workspacePulseWindowMs` | `90000` | Workspace Pulse retention window (older changes drop out of the bubbles) |
485
+ | `workspacePulseAutoInstall` | `true` | auto-install the built-in Workspace Pulse package into the library (reinstalled after uninstall + restart) |
499
486
 
500
487
  > The panel's 3-mode switch (Preview / Capture / Full) is a runtime UI setting, distinct from `sceneRenderMode` (backend browser / external selection).
501
488
 
@@ -519,7 +506,9 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
519
506
 
520
507
  - `src/index.ts` — node half: WE polling, HTTP routes, scene renderer subprocess, library scan
521
508
  - `src/scene/` — SceneAdapter modules (protocol / capability probe / renderer process / WebSocket / fallback / PKGV0001 parsing / SceneModel layer model / .tex decoding / puppet mdl parsing)
522
- - `src/client/` — browser half (theme overrides / background layers / SceneCanvas / SceneModelRenderer / ParticleRuntime / GazeLens / focus lens / immersive mode / wallpaper_share panel)
509
+ - `src/client/` — browser half (theme overrides / background layers / SceneCanvas / SceneModelRenderer / ParticleRuntime / GazeLens / focus lens / immersive mode / wallpaper_share panel / library-model.ts library categories & detail formatting)
510
+ - `src/workspace/` — Workspace Pulse (filesystem snapshot diffing + built-in DWP packer; `_dev/make-workspace-pulse.mjs` is the manual packing script)
511
+ - `src/daynight/` — "DeepSeek Day & Night" packer (two full-canvas PNGs layered by `$night_alpha`; `_dev/make-daynight-dwp.mjs` packs + installs into the local market, `_dev/verify-daynight-dwp.mjs` static validation + day/night chain self-check)
523
512
  - `native/we-capture/` — Rust native capture renderer source (Windows Graphics Capture → JPEG)
524
513
  - `bin/we-capture.exe` — shipped native capture renderer (Windows-only)
525
514
  - `docs/` — format & implementation docs (`scene-format.md` / `scene-fallback.md` / `tex-format-findings.md` / `mdl-skinning-findings.md`)
@@ -530,28 +519,11 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
530
519
 
531
520
  ## 🆕 Known Issues
532
521
 
533
- > Applies to plugin `v26.9.8` / Harness `0.1.2-rc.1`.
534
-
535
- ### Compatibility (breaking changes in Harness 0.1.2 — adapted)
536
-
537
- All four regressions introduced by `0.1.2-alpha.2` are fixed in `v26.9.4` and were checked against the `0.1.2-rc.1` host implementation:
538
-
539
- - **New session**: `workspaces.startSession` was removed; the orb now calls `ctx.get('uiWorkspace')?.startSession()`, falling back to `workspaces` on older hosts.
540
- - **Orb task color**: `sessions` is now resolved through `ctx.inject(['sessions'], …)`, so the subscription attaches once the host provides it instead of reading `undefined` at apply time and staying idle-green.
541
- - **Immersive mode**: the session header is now matched by `[data-slot="conversation.session.header"]` (slot rendering adds a wrapper, so the old `[data-phase] > header` missed silently); the transcript and composer are hidden through `[data-conversation-scroll]`.
542
- - **⏻ glyph**: `.wesync-btn` appends `'Segoe UI Symbol'` / `'Segoe UI Emoji'` after the host's `--dsw-font-family`, so only U+23FB falls through to a symbol font and Latin/CJK text keeps the host font.
543
-
544
- Service lookups are all resolved lazily at use time now, so behaviour on `0.1.0-rc.6` ~ `0.1.2-alpha.1` is unchanged.
545
-
546
522
  ### Environment limits
547
523
 
548
524
  - **Market thumbnails do not load**: catalog thumbnails point at `raw.githubusercontent.com`, unreachable in some environments; the `onError` handler hides them.
549
525
  - **Wallpaper Engine directory missing**: when auto-detection resolves to a non-existent directory, wallpaper sync is unavailable (the market is unaffected) — set `CONFIG.wallpaperEngineDir` manually.
550
526
 
551
- ### Build & maintenance (does not affect shipped packages)
552
-
553
- - **`dwp-runtime-web/` is not version-controlled**: the DWP render runtime (`@dwp/web`) is inlined into `lib/client.js` at build time via a `tsdown` local-path alias, but that directory is `.gitignore`d and is not an npm dependency. **End users installing from GitHub / npm get the prebuilt, already-inlined `lib/` and are unaffected — DWP works normally**; however, **a clean `git clone` + `pnpm build` fails or silently produces a broken bundle because the directory is missing** — rebuilding is currently only reproducible on a machine that has `dwp-runtime-web/`. Plan: before multi-maintainer / CI, fold it into a pnpm workspace or switch to a git-tag dependency, and make the alias fallback fail loudly when the directory is absent.
554
-
555
527
  ## 📄 License
556
528
 
557
529
  GPL-3.0
package/README.zh-CN.md CHANGED
@@ -5,7 +5,7 @@
5
5
  <div align="center">
6
6
  <a href="https://www.npmjs.com/package/dsh-wallpaper_share"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-wallpaper_share" /></a>
7
7
  <a href="https://opensource.org/licenses/GPL-3.0"><img alt="License: GPL-3.0" src="https://img.shields.io/badge/License-GPL--3.0-blue.svg" /></a>
8
- <a href="https://github.com/YRN-playmaker/dsh-wallpaper_share/releases"><img alt="插件版本 v26.9.8" src="https://img.shields.io/badge/v26.9.8-4d6bfe" /></a>
8
+ <a href="https://github.com/YRN-playmaker/dsh-wallpaper_share/releases"><img alt="插件版本 v26.9.10-T" src="https://img.shields.io/badge/v26.9.10--T-4d6bfe" /></a>
9
9
  </div>
10
10
 
11
11
  [中文](README.zh-CN.md) | [English → README.md](README.md#english)
@@ -63,8 +63,10 @@ dsh plugin --profile web add dsh-wallpaper_share # 或见下方「安装」选
63
63
  - **原生 scene 捕获渲染器**:随包内置 Rust 编写的 `we-capture.exe`,用 Windows Graphics Capture 抓取 WE 正在渲染的桌面,镜像 WE 自身输出 → GLSL / SceneScript / 关键帧 / 粒子等**所有 WE 效果天然全覆盖**
64
64
  - **专注透镜**:叠加一个圆心清晰、圆外模糊的阅读窗;默认跟随鼠标,开专注即生效
65
65
  - **眼动追踪(实验)**:可选,用摄像头推断注视点让透镜跟随视线;9 点校准、文字吸附、抗抖动
66
- - **壁纸库 · 本地 / 市场**:按**本地**与**市场**两大分类浏览。本地一栏管理已装内容——`dwp壁纸`(点击即挂载为全局背景,已挂载再点取消)与 `we 应用`(点击打开所在文件夹),带标题搜索、缩略图与计数;市场一栏浏览 `dwp-registry` 目录,支持名称 / 作者搜索、标签筛选与**安装 / 更新 / 卸载**
66
+ - **壁纸库 · 本地 / 市场**:按**本地**与**市场**两大分类浏览。本地一栏管理已装内容——`dwp壁纸`(点击即挂载为全局背景,已挂载再点取消)与 `应用`(**大类**,下分 `we应用` 与 `应用`;点击卡片即启动,每次启动弹确认),带标题搜索、缩略图与计数;搜索框右侧的**「管理」**开关进入管理模式:卡片整体轻微晃动,**点卡片即多选**(选中项停住晃动、背景转蓝并打勾),选择条给出「已选 N / 卸载选中 / 清空选择」,可跨 `dwp壁纸` 与 `应用` 一次选完再统一卸载(确认弹层列出全部将被删除的项);每张卡仍保留「打开源文件 / 卸载」单项操作,dwp 的「打开源文件」会在资源管理器里定位包文件——**卸载只对 dwp 壁纸与启动器装的应用开放**,WE 工坊内容点了只给提示、不参与多选(绝不删 Steam 内容);市场一栏浏览 `dwp-registry` 目录,支持名称 / 作者搜索、标签筛选与**安装 / 更新 / 卸载**
67
67
  - **DWP 壁纸与全局背景渲染**:`dwp/1.0` 协议包(纯文本 / solid / 粒子 / mesh 图层 + 12 种混合模式 + 3 种动画 + 11 种效果,确定性渲染);挂载后经 WebGL2 真实渲染为 DSH 全局背景(低配 Canvas2D 降级),同时暂停 WE 同步避免冲突,刷新后自动恢复
68
+ - **DWP 时钟变量(给壁纸作者的通用能力)**:插件每 2.5s 向**挂载中的任何场景**喂 `hour` / `night_alpha` / `night_on` / `day_on` 四个变量(`Handle.setParams` 逐键覆写,与内置包「工作区脉搏」的变量互不干扰);场景在 `variables` 里声明后即可引用——市场包 **「DeepSeek 日夜」** 就是用它做 18:00–06:00 自动换成夜景图、其余时间日景图,边界前后各 10 分钟线性过渡
69
+ - **DWP 纹理分档(同一张壁纸两档清晰度)**:另喂 `hd_on` / `night_sd` / `night_hd` 三个变量,由渲染模式决定档位——**「预览 / 捕获」= 低档,「增强 / 完整」= 高档**;包在 scene 顶层用扩展字段 `dsh.hdAssets` 声明"只在高档位需要的资源",低档位消费端把它们换成 1×1 占位图,因而**根本不下载、不解码**高分纹理(「DeepSeek 日夜」1.1.0 即 1920×1080 / 7680×4320 两档,切档位会按新档重新挂载)
68
70
  - **沉浸模式**:一键隐去会话头部、正文与输入栏,让壁纸独占视野;网页 / 应用类壁纸在沉浸下可直接鼠标交互(详见[沉浸模式](#-沉浸模式与任务指示))
69
71
  - **视觉效果滑块**:面板透明度 0–100% / 背景模糊 0–30px / 阴影深度 0–100%,即时生效
70
72
  - **后台任务可视化**:收纳侧边栏时,用圆形指示感知任务进度(绿 = 空闲 / 蓝 = 进行中 / 黄 = 等待授权)
@@ -74,17 +76,19 @@ dsh plugin --profile web add dsh-wallpaper_share # 或见下方「安装」选
74
76
 
75
77
  ## 🧭 面板导览
76
78
 
77
- `wallpaper_share` 标签页采用**双页虚拟滚动**:「设置 ⇄ 壁纸库」两页纵向叠放、中间留断层,一套滚轮全接管——页内跟手滚动 + 惯性阻尼,滚到页界继续滚即**蓄力翻页**(250ms 无输入弹回防误触),右缘页签显示当前页(黄色高亮)与蓄力进度,点击可直达;所有操作即时生效、无需保存:
79
+ `wallpaper_share` 标签页采用**三页虚拟滚动**:「设置 ⇄ 壁纸库 ⇄ dwp创作」三页纵向叠放、页间留断层,一套滚轮全接管——页内跟手滚动 + 惯性阻尼,滚到页界继续滚即**蓄力翻页**(250ms 无输入弹回防误触),右缘三个页签显示当前页(黄色高亮)与蓄力进度,点击可直达;所有操作即时生效、无需保存:
78
80
 
79
81
  | 卡片 | 内容 |
80
82
  | --- | --- |
81
83
  | **壁纸状态** | 壁纸名(标题行**右缘为插件版本号**,一键整段选中便于反馈问题);下方副标题只承载诊断信息——scene 壁纸显示当前渲染通路(`场景 · 预览图 / 捕获 live 30fps / 浏览器模型渲染 / 回退:<原因>`),未应用壁纸时显示引导文案,其余类型整行不占;多显示器时出现「背景显示器」下拉;`⏻ 同步开启 / 关闭 / 暂停(DWP)` 三态按钮 |
82
84
  | **视觉效果** | 三档渲染模式分段按钮;「专注模式」及其展开条(眼动追踪 / 校准视线 / 文字吸附 / 实时状态);透明度 · 模糊 · 阴影三个滑块(**专注开启时滑块隐藏**,改由任务态与透镜接管) |
83
- | **壁纸库** | 「壁纸读取位置」可添加自定义壁纸目录(指向单个壁纸目录或集合文件夹),启动器安装位置也并入这里(带「(启动器安装位置)」标记,可更改 / 迁移);「本地 / 市场 / 应用启动器」三栏切换,本地按 `dwp壁纸` / `we 应用` 筛选 + 标题搜索 + 分页(显示更多 +60),市场支持安装 / 更新 / 卸载,**应用启动器**支持直链安装(`.zip`/`.7z`/`.exe`,加密包可填解压密码)与 **139 分享链接**(提取码填密码框;原始文件下载需粘贴一次 Authorization 登录态),自动封装类 WE app(json + 预览图)与一键启动(每次弹确认) |
85
+ | **壁纸库** | 「壁纸读取位置」可添加自定义壁纸目录(指向单个壁纸目录或集合文件夹),启动器安装位置也并入这里(带「(启动器安装位置)」标记,可更改 / 迁移);「本地 / 市场 / 应用启动器」三栏切换,本地按 `dwp壁纸` / `应用`(下分 `we应用` 与 `应用`)筛选 + 标题搜索 + **「管理」**(卡片晃动 → 点卡片多选变蓝 → 「卸载选中」批量卸载,可跨分类累计;每张卡另有「打开源文件 / 卸载」)+ 分页(显示更多 +60),市场支持安装 / 更新 / 卸载,**应用启动器**只负责安装:支持直链安装(`.zip`/`.7z`/`.exe`,加密包可填解压密码)与 **139 分享链接**(提取码填密码框;原始文件下载需粘贴一次 Authorization 登录态),自动封装类 WE app(json + 预览图),卡片「详细」可查安装时间 / 地址 / exe 文件;启动与卸载统一在「本地 → 应用」里做(每次启动弹确认) |
86
+ | **dwp创作** | 本轮为占位页:滚到这一页时宿主输入框重新出现(「设置」「壁纸库」两页会自动收起它,避免挡住卡片又可点),页面内容下一轮填充 |
84
87
 
85
88
  两点与宿主 UI 的约定:
86
89
 
87
90
  - **本标签页禁用正文宽度拖拽**:会话正文两侧那对拖拽把手在 `wallpaper_share`(与「轨迹」页一样)不出现,切回「对话记录」仍可用。
91
+ - **宿主输入框按页显隐**:「设置」「壁纸库」两页自动收起宿主输入框(opacity + `pointer-events:none`,不改布局),只有「dwp创作」页显示它——输入框是 sticky 常驻条(实测占 126px),既会挡住卡片底部行,也会吞掉那片区域的点击(压在它下面的按钮点不到);收起后两页的面板高度直接吃到视口底部,dwp创作页则按实测高度让开输入框。
88
92
  - 标签页是 session 作用域插槽,切换会话会重挂载面板;语言与开关状态从模块级 store 恢复,不会"弹回英语"。
89
93
 
90
94
  ## 🎨 渲染模式与兼容矩阵
@@ -158,6 +162,8 @@ scene 壁纸在捕获 / 完整档下的渲染优先级与回退链:
158
162
  | 🟣 **alpha(新版本)** | 适配 harness 为 alpha 架构的推荐版本 | `dsh plugin --profile web add dsh-wallpaper_share@alpha` |
159
163
  | 🟡 **test(测试版本)** | 用于测试的版本,可能有未完成功能 | `dsh plugin --profile web add dsh-wallpaper_share@test` |
160
164
 
165
+ > 当前测试版:**`26.9.10-T`**(GitHub `test` 分支 / npm `test` dist-tag)。本版新增:壁纸库「管理」多选批量卸载、应用启动器卡片化简为「详细」、面板三页滚动(含占位的「dwp创作」)、宿主输入框按页显隐、**DWP 时钟变量**与**纹理分档**(预览/捕获用低清、增强/完整用高清)。
166
+
161
167
  ### 🔧 其他安装方式
162
168
 
163
169
  ```bash
@@ -179,10 +185,10 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share
179
185
  # 从 GitHub 安装(仓库自带预构建 lib/,不需要构建许可;main = 最新档)
180
186
  dsh plugin --profile web add dsh-wallpaper_share
181
187
  # 从 npm 安装(默认 = latest 最新档)
182
- dsh plugin --profile web add ./dsh-wallpaper_share-26.9.8.tgz
183
- # 本地 tarball 安装(26.9.8)
188
+ dsh plugin --profile web add ./dsh-wallpaper_share-26.9.10-T.tgz
189
+ # 本地 tarball 安装(26.9.10-T)
184
190
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
185
- # 从 GitHub 安装 test 分支(测试档,含壁纸特效优化、页面功能更新等)
191
+ # 从 GitHub 安装 test 分支(测试档,当前即 26.9.10-T:管理多选卸载 / 三页滚动 / DWP 纹理分档等)
186
192
  ```
187
193
 
188
194
  ```bash
@@ -247,7 +253,7 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
247
253
 
248
254
  - `src/index.ts` — Node 半:WE 状态轮询、HTTP 路由、scene renderer 子进程管理、壁纸库扫描
249
255
  - `src/scene/` — SceneAdapter 模块(协议 / 能力探测 / renderer 进程 / WebSocket / 回退 / PKGV0001 解析 / SceneModel 图层模型 / .tex 解码 / puppet mdl 解析)
250
- - `src/client/` — 浏览器半(主题覆盖 / 背景层 / SceneCanvas / SceneModelRenderer 子集渲染器 / ParticleRuntime / GazeLens 眼动 / 专注透镜 / 沉浸模式 / wallpaper_share 面板)
256
+ - `src/client/` — 浏览器半(主题覆盖 / 背景层 / SceneCanvas / SceneModelRenderer 子集渲染器 / ParticleRuntime / GazeLens 眼动 / 专注透镜 / 沉浸模式 / wallpaper_share 面板 / library-model.ts 壁纸库分类与详情格式化)
251
257
  - `native/we-capture/` — Rust 原生捕获器源码(Windows Graphics Capture → JPEG)
252
258
  - `bin/we-capture.exe` — 随包发布的原生捕获器(Windows-only)
253
259
  - `docs/` — 格式规范与技术文档(`scene-format.md` / `scene-fallback.md` / `tex-format-findings.md` / `mdl-skinning-findings.md`)
@@ -258,7 +264,7 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
258
264
 
259
265
  ## 🆕 已知问题
260
266
 
261
- > 适用版本:插件 `v26.9.8` / Harness `0.1.2-rc.1`。
267
+ > 适用版本:插件 `v26.9.10-T` / Harness `0.1.2-rc.1`。
262
268
 
263
269
  ### 兼容性(Harness 0.1.2 破坏性变更 · 已适配)
264
270