dsh-wallpaper_share 26.9.4 → 26.9.10

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 +109 -111
  2. package/README.zh-CN.md +26 -7
  3. package/lib/client.js +2390 -524
  4. package/lib/client.js.map +1 -1
  5. package/lib/index.js +2796 -248
  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
@@ -1,28 +1,24 @@
1
1
  # dsh-wallpaper_share
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.4" src="https://img.shields.io/badge/v26.9.4-4d6bfe" /></a><br /><br />
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 />
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
- <div align="center">
19
- <video src="https://github.com/user-attachments/assets/4461d385-de62-42be-8420-7edce5606f44"
20
- muted autoplay loop playsinline controls width="100%"></video>
21
- </div>
22
18
 
23
- 把 Wallpaper Engine 当前显示的壁纸实时同步为 DeepSeek Harness Web 界面的背景,并提供 `wallpaper_share` 标签页用于调整渲染模式、视觉效果、专注模式与壁纸库。支持场景壁纸的完整动效与应用壁纸的导入。
19
+ 把 Wallpaper Engine 的壁纸同步为 DeepSeek Harness Web 界面的背景,并支持调整渲染模式、视觉效果、专注模式与壁纸库外挂壁纸与直链应用下载。
24
20
 
25
- > **纯显示同步**:只读取 WE 状态,不控制 / 不修改桌面壁纸(换壁纸请在 WE 内操作)。
21
+ > **纯显示同步**:只读取 WE 状态,不控制 / 不修改桌面壁纸。
26
22
  > **无敏感信息**:代码不含 Steam 用户名 / SteamID / 令牌;WE 安装目录运行时自动检测(注册表 `HKCU\Software\WallpaperEngine\installPath` → 常见 Steam 路径),检测不到时才需要手动配置。眼动追踪全程本地推理,摄像头画面不出设备。
27
23
 
28
24
  ---
@@ -34,7 +30,6 @@
34
30
 
35
31
  - [⚡ 30 秒上手](#-30-秒上手)
36
32
  - [✨ 功能一览](#-功能一览)
37
- - [🧭 面板导览](#-面板导览)
38
33
  - [🎨 渲染模式与兼容矩阵](#-渲染模式与兼容矩阵)
39
34
  - [🖼️ Scene 渲染与回退](#-scene-渲染与回退)
40
35
  - [🔍 专注模式与眼动追踪](#-专注模式与眼动追踪)
@@ -61,37 +56,36 @@ dsh plugin --profile web add dsh-wallpaper_share # 或见下方「安装」选
61
56
 
62
57
  需要 WE 正在运行且已应用壁纸;否则背景留空、面板显示"尚未应用壁纸"。诊断入口:`http://127.0.0.1:3080/we-sync/diag`(仅本机可访问;端口以启动日志为准,默认 3080)。
63
58
 
59
+ > **零配置**:无需 API Key、无需注册、无需任何额外配置,安装即用。(注意:开头「无敏感信息」是隐私声明——代码中不含 Steam 用户名 / 令牌,并非需要你提供这些信息。)
60
+
64
61
  ## ✨ 功能一览
65
62
 
66
- - **实时同步**:在 WE 切换壁纸后,页面背景约 2 秒内自动跟随
67
- - **多显示器**:自动跟随"最新变化"的一台;复数显示器时可手动锁定某台作为背景来源
68
- - **三档渲染模式**:预览 / 捕获 / 完整,详见 [渲染模式与兼容矩阵](#-渲染模式与兼容矩阵)
69
- - **原生 scene 捕获渲染器**:随包内置 Rust 编写的 `we-capture.exe`,用 Windows Graphics Capture 抓取 WE 正在渲染的桌面,镜像 WE 自身输出 → GLSL / SceneScript / 关键帧 / 粒子等**所有 WE 效果天然全覆盖**
70
- - **专注模式**:叠加一个圆心清晰、圆外模糊的阅读窗;默认跟随鼠标,开专注即生效
71
- - **眼动追踪(实验)**:可选,用摄像头推断注视点让透镜跟随视线;9 点校准、文字吸附、抗抖动
72
- - **壁纸库 · 本地 / 市场**:按**本地**与**市场**两大分类浏览。本地一栏管理已装内容——`dwp壁纸`(点击即挂载为全局背景,已挂载再点取消)与 `we 应用`(点击打开所在文件夹),带标题搜索、缩略图与计数;市场一栏浏览 `dwp-registry` 目录,支持名称 / 作者搜索、标签筛选与**安装 / 更新 / 卸载**
73
- - **DWP 壁纸与全局背景渲染**:`dwp/1.0` 协议包(纯文本 / solid / 粒子 / mesh 图层 + 12 种混合模式 + 3 种动画 + 11 种效果,确定性渲染);挂载后经 WebGL2 真实渲染为 DSH 全局背景(低配 Canvas2D 降级),同时暂停 WE 同步避免冲突,刷新后自动恢复
74
- - **沉浸模式**:一键隐去会话头部、正文与输入栏,让壁纸独占视野;网页 / 应用类壁纸在沉浸下可直接鼠标交互(详见[沉浸模式](#-沉浸模式与任务指示))
75
- - **视觉效果**:面板透明度 0–100% / 背景模糊 0–30px / 阴影深度 0–100%,即时生效
76
- - **后台任务可视化**:收纳侧边栏时,用圆形指示感知任务进度(绿 = 空闲 / 蓝 = 进行中 / 黄 = 等待授权)
77
- - **同步开关**:一键启停;挂载 DWP 壁纸期间显示「同步暂停(DWP)」第三态
78
- - **设置持久化**:同步开关、渲染模式、显示器锁、三档渲染模式、专注 / 眼动等偏好写入 `localStorage`(键 `we-sync.settings`),刷新或重启 DSH 后自动恢复;沉浸模式等临时视图态与任务状态一律不落盘
79
- - **自诊断路由** `/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" />
80
65
 
81
- ## 🧭 面板导览
66
+ - **侧边栏沉浸模式**:一键隐去会话头部、正文与输入栏,让壁纸独占视野;网页 / 应用类壁纸在沉浸下可直接鼠标交互(详见[沉浸模式](#-沉浸模式与任务指示))
82
67
 
83
- `wallpaper_share` 标签页自上而下三张卡片,所有操作即时生效、无需保存:
68
+ - **专注模式**:叠加一个圆心清晰、圆外模糊的阅读窗,以专注于任务,提升文字可读性;默认跟随鼠标,也可用摄像头推断注视点让透镜跟随视线;9 点校准、文字吸附、抗抖动
69
+ <img width="426" height="240" alt="Video Project 29" src="https://github.com/user-attachments/assets/57daf64c-ff2b-40c7-aeef-73cac46c4c2b" />
70
+
71
+ - **壁纸库**:按**本地**/**市场**/**应用启动器**分类。本地一栏管理已装内容——`dwp壁纸`(点击即挂载为全局背景,已挂载再点取消)与 `we 应用`(点击打开所在文件夹,含「▶ 启动」),带标题搜索、缩略图与计数;市场一栏浏览 `dwp-registry` 目录,支持名称 / 作者搜索、标签筛选与安装 / 更新 / 卸载;**应用启动器**:支持用户粘贴 `http(s)` 直链(`.zip`/`.7z`/`.exe`,**加密压缩包填解压密码**)或部分**云盘分享链接**(如`yun.139.com/shareweb/#/w/i/…`,提取码填在密码框),唤醒DSH 自动下载,解包并封装成**类 app 格式**(自动生成 `project.json` + 预览图卡片)入库;卡片一键「▶ 启动」,也支持卸载 / 更新预览 / 多入口切换。不依赖 WE 运行、不受新版 WE 取消应用类壁纸影响。、
72
+ <img width="737" height="675" alt="image" src="https://github.com/user-attachments/assets/7567c226-7ea4-4fcb-a3b7-11190ee681ff" />
73
+
74
+
75
+ -**设置页面介绍↓**
84
76
 
85
77
  | 卡片 | 内容 |
86
78
  | --- | --- |
87
- | **壁纸状态** | 壁纸名(标题行**右缘为插件版本号**,一键整段选中便于反馈问题);下方副标题只承载诊断信息——scene 壁纸显示当前渲染通路(`场景 · 预览图 / 捕获 live 30fps / 浏览器模型渲染 / 回退:<原因>`),未应用壁纸时显示引导文案,其余类型整行不占;多显示器时出现「背景显示器」下拉;`⏻ 同步开启 / 关闭 / 暂停(DWP)` 三态按钮 |
79
+ | **壁纸状态** | 壁纸名(标题行**右缘为插件版本号**,点击直达 GitHub 仓库);下方副标题只承载诊断信息——scene 壁纸显示当前渲染通路(`场景 · 预览图 / 捕获 live 30fps / 浏览器模型渲染 / 回退:<原因>`),未应用壁纸时显示引导文案,其余类型整行不占;多显示器时出现「背景显示器」下拉;`⏻ 同步开启 / 关闭 / 暂停(DWP)` 三态按钮 |
88
80
  | **视觉效果** | 三档渲染模式分段按钮;「专注模式」及其展开条(眼动追踪 / 校准视线 / 文字吸附 / 实时状态);透明度 · 模糊 · 阴影三个滑块(**专注开启时滑块隐藏**,改由任务态与透镜接管) |
89
- | **壁纸库** | 「壁纸读取位置」可添加自定义壁纸目录(指向单个壁纸目录或集合文件夹);「本地 / 市场」两栏切换,本地按 `dwp壁纸` / `we 应用` 筛选 + 标题搜索 + 分页(显示更多 +60),市场支持安装 / 更新 / 卸载 |
90
81
 
91
- 两点与宿主 UI 的约定:
82
+ <img width="841" height="667" alt="image" src="https://github.com/user-attachments/assets/7d652c07-8344-4de3-abbd-75620375c0b6" />
92
83
 
93
- - **本标签页禁用正文宽度拖拽**:会话正文两侧那对拖拽把手在 `wallpaper_share`(与「轨迹」页一样)不出现,切回「对话记录」仍可用。
94
- - 标签页是 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 状态与纹理提取结果)
95
89
 
96
90
  ## 🎨 渲染模式与兼容矩阵
97
91
 
@@ -122,11 +116,13 @@ scene 壁纸在捕获 / 完整档下的渲染优先级与回退链:
122
116
  3. **静态纹理**:提取 pkg 内嵌高清纹理垫底。
123
117
  4. **预览图**:以上皆不可用 → WE 预览图。
124
118
 
125
- 当前走的是哪一层,直接显示在面板副标题上(见[面板导览](#-面板导览));更细的状态在 `/we-sync/diag`。
119
+ 当前走的是哪一层,直接显示在面板副标题上;更细的状态在 `/we-sync/diag`。
126
120
 
127
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。
128
122
 
129
- 完整链路与各层实现见 **[docs/scene-fallback.md](docs/scene-fallback.md)**;pkg / 纹理 / puppet 格式见 **[docs/scene-format.md](docs/scene-format.md)**、**[docs/tex-format-findings.md](docs/tex-format-findings.md)**、**[docs/mdl-skinning-findings.md](docs/mdl-skinning-findings.md)**。
123
+ 完整链路与各层实现见 **[docs/scene-fallback.md](docs/scene-fallback.md)**;pkg / 纹理 / puppet 格式见 **[docs/scene-format.md](docs/scene-format.md)**、**[docs/tex-format-findings.md](docs/tex-format-findings.md)**、**[docs/mdl-skinning-findings.md](docs/mdl-skinning-findings.md)**、**[docs/bone-pipeline-compare.md](docs/bone-pipeline-compare.md)**。
124
+
125
+ **骨骼动画(完整档)**:puppet 部件按 MDLS 绑定 + MDLA 逐骨骼动画做全骨骼链乘蒙皮,`animationlayers` 多层合成(普通层 mix / additive 层以自身帧 0 为参考 / rate 倍速 / 30fps),MDAT 具名锚点(含中文名)跟随骨骼最终世界位姿。26.9.8 定案 MDLA0006 连续流布局(骨骼窗口跨段延伸、每骨骼 +2 浮点漂移、fc+1 行含闭合行),并钳制末骨越界帧——修复人物每循环抽动一次与蒙皮异常形变(如 3465215190);58 个本地 MDL 端到端校验(帧0≈bind + 闭环平滑度)全部通过。
130
126
 
131
127
  ## 🔍 专注模式与眼动追踪
132
128
 
@@ -156,18 +152,32 @@ scene 壁纸在捕获 / 完整档下的渲染优先级与回退链:
156
152
  | 档位 | 适合谁 | 安装命令 |
157
153
  | --- | --- | --- |
158
154
  | 🟢 **小白** | 不纠结版本,直接拉当前主流 Harness 环境的推荐版 | `dsh plugin --profile web add dsh-wallpaper_share` |
159
- | 🔵 **rc(稳定版本)** | 适配 harness 为 rc 架构的推荐版本,新功能适配较慢 | `dsh plugin --profile web add dsh-wallpaper_share@rc` |
160
- | 🟣 **alpha(新版本)** | 适配 harness 为 alpha 架构的推荐版本 | `dsh plugin --profile web add dsh-wallpaper_share@alpha` |
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
+ ### 🔧 其他安装方式
159
+
160
+ ```bash
161
+ # 从 Git 克隆(仓库自带预构建 lib/,克隆后无需构建):
162
+ git clone https://github.com/YRN-playmaker/dsh-wallpaper_share.git
163
+ cd dsh-wallpaper_share
164
+ pnpm pack # 打包为 dsh-wallpaper_share-<version>.tgz
165
+ dsh plugin --profile web add ./dsh-wallpaper_share-<version>.tgz
166
+ ```
167
+
168
+ ```bash
169
+ # 作为 npm 依赖引入(可选):
170
+ pnpm add dsh-wallpaper_share
171
+ ```
172
+
163
173
  ```bash
164
174
  # 任选其一:
165
175
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share
166
176
  # 从 GitHub 安装(仓库自带预构建 lib/,不需要构建许可;main = 最新档)
167
177
  dsh plugin --profile web add dsh-wallpaper_share
168
178
  # 从 npm 安装(默认 = latest 最新档)
169
- dsh plugin --profile web add ./dsh-wallpaper_share-26.9.4.tgz
170
- # 本地 tarball 安装(26.9.4
179
+ dsh plugin --profile web add ./dsh-wallpaper_share-26.9.8.tgz
180
+ # 本地 tarball 安装(26.9.8
171
181
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
172
182
  # 从 GitHub 安装 test 分支(测试档,含壁纸特效优化、页面功能更新等)
173
183
  ```
@@ -211,6 +221,9 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
211
221
  | `particleSizeScale` | `1` | 粒子尺寸缩放 |
212
222
  | `effectStrengthScale` | `1` | 特效强度缩放 |
213
223
  | `puppetMeshRender` | `true` | puppet 网格渲染开关 |
224
+ | `workspaceDir` | `''`(= 插件进程工作目录) | 工作区脉搏的扫描根目录 |
225
+ | `workspacePulseWindowMs` | `90000` | 工作区脉搏改动保留窗口(更早的改动从气泡流淘汰) |
226
+ | `workspacePulseAutoInstall` | `true` | 工作区脉搏内置包自动入库(卸载后重启会重装) |
214
227
 
215
228
  > 面板里的三档切换(预览 / 捕获 / 完整)是运行时 UI 设置,与上面的 `sceneRenderMode`(后端浏览器 / 外部 renderer 选择)不同。
216
229
 
@@ -235,6 +248,7 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
235
248
  - `src/index.ts` — Node 半:WE 状态轮询、HTTP 路由、scene renderer 子进程管理、壁纸库扫描
236
249
  - `src/scene/` — SceneAdapter 模块(协议 / 能力探测 / renderer 进程 / WebSocket / 回退 / PKGV0001 解析 / SceneModel 图层模型 / .tex 解码 / puppet mdl 解析)
237
250
  - `src/client/` — 浏览器半(主题覆盖 / 背景层 / SceneCanvas / SceneModelRenderer 子集渲染器 / ParticleRuntime / GazeLens 眼动 / 专注透镜 / 沉浸模式 / wallpaper_share 面板)
251
+ - `src/workspace/` — 工作区脉搏(文件系统快照差分 + 内置 DWP 组包器;`_dev/make-workspace-pulse.mjs` 为手动打包脚本)
238
252
  - `native/we-capture/` — Rust 原生捕获器源码(Windows Graphics Capture → JPEG)
239
253
  - `bin/we-capture.exe` — 随包发布的原生捕获器(Windows-only)
240
254
  - `docs/` — 格式规范与技术文档(`scene-format.md` / `scene-fallback.md` / `tex-format-findings.md` / `mdl-skinning-findings.md`)
@@ -245,28 +259,11 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
245
259
 
246
260
  ## 🆕 已知问题
247
261
 
248
- > 适用版本:插件 `v26.9.4` / Harness `0.1.2-rc.1`。
249
-
250
- ### 兼容性(Harness 0.1.2 破坏性变更 · 已适配)
251
-
252
- `0.1.2-alpha.2` 曾打破的四项已在 `v26.9.4` 修复,并已对照 `0.1.2-rc.1` 的宿主实现核对:
253
-
254
- - **新建会话**:`workspaces.startSession` 已移除,改走 `ctx.get('uiWorkspace')?.startSession()`,老宿主回退 `workspaces`。
255
- - **orb 任务色**:`sessions` 改由 `ctx.inject(['sessions'], …)` 等宿主提供后再订阅,不再因 apply 期取空而卡在空闲绿。
256
- - **沉浸模式**:会话头部按 `[data-slot="conversation.session.header"]` 命中(插槽渲染多包了一层,旧的 `[data-phase] > header` 静默失配),正文与输入栏按 `[data-conversation-scroll]` 一并隐藏。
257
- - **⏻ 字形**:`.wesync-btn` 字体栈在宿主 `--dsw-font-family` 之后补 `'Segoe UI Symbol'` / `'Segoe UI Emoji'`,中英文仍走宿主字体,只有 U+23FB 落到符号字体。
258
-
259
- 服务查找一律改为"用到时再取",`0.1.0-rc.6` ~ `0.1.2-alpha.1` 的行为不受影响。
260
-
261
262
  ### 环境限制
262
263
 
263
264
  - **预览图不显示**:市场卡片缩略图指向 `raw.githubusercontent.com`,当前环境不可达。图片加载失败后 `onError` 隐藏显示。
264
265
  - **WE 安装目录不存在**:自动检测到目录但不存在时壁纸同步不可用(市场功能不受影响),可在 `CONFIG.wallpaperEngineDir` 手动指定。
265
266
 
266
- ### 构建与维护(不影响已发布包)
267
-
268
- - **`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 兜底改为"缺目录即报错"。
269
-
270
267
  ## 📄 License
271
268
 
272
269
  GPL-3.0
@@ -280,7 +277,6 @@ GPL-3.0
280
277
 
281
278
  - [⚡ Quick Start](#-quick-start)
282
279
  - [✨ Features](#-features)
283
- - [🧭 Panel Tour](#-panel-tour)
284
280
  - [🎨 Render Modes & Compatibility Matrix](#-render-modes--compatibility-matrix)
285
281
  - [🖼️ Scene Rendering & Fallback](#-scene-rendering--fallback)
286
282
  - [🔍 Focus Mode & Eye Tracking](#-focus-mode--eye-tracking)
@@ -292,57 +288,56 @@ GPL-3.0
292
288
  - [🆕 Known Issues](#-known-issues)
293
289
  - [📄 License](#-license-1)
294
290
 
295
- 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.
291
+ 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.
296
292
 
297
- > **Display-only sync**: it only reads WE state; it never controls or changes your desktop wallpaper (switch wallpapers inside WE).
293
+ > **Display-only sync**: it only reads WE state; it never controls or changes your desktop wallpaper.
298
294
  > **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.
299
295
 
300
296
  ## ⚡ Quick Start
301
297
 
302
298
  ```bash
303
- dsh plugin --profile web add dsh-wallpaper_share # or pick a tier below
299
+ dsh plugin --profile web add dsh-wallpaper_share # or pick a tier in "Installation" below
304
300
  # restart dsh (web profile), then open http://127.0.0.1:3080
305
301
  ```
306
302
 
307
303
  You get three things:
308
304
 
309
- 1. the **page background** becomes WE's current wallpaper (follows switches within ~2s), with the UI floating on top;
305
+ 1. the **page background** becomes WE's current wallpaper (follows switches within ~2s), with panels and cards floating on top;
310
306
  2. a **`wallpaper_share` tab** above the conversation (next to Chat and Trajectory) holding every toggle;
311
- 3. a round status light on the left edge **when the sidebar is collapsed** — it also opens immersive mode.
307
+ 3. a round status light on the left edge **when the sidebar is collapsed** (green / blue / yellow) click it to enter immersive mode.
308
+
309
+ 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).
312
310
 
313
- 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 startup3080 by default).
311
+ > **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.)
314
312
 
315
313
  ## ✨ Features
316
314
 
317
- - **Real-time sync**: the page background follows WE's current wallpaper within ~2s
318
- - **Multi-monitor**: auto-follows the most recently changed; can lock a specific monitor
319
- - **3 render modes**: Preview / Capture / Full — see the [matrix](#-render-modes--compatibility-matrix)
320
- - **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**
321
- - **Focus mode**: a center-clear, edge-blurred reading window; follows the mouse by default
322
- - **Eye tracking (experimental)**: optional; uses the webcam to follow your gaze; 9-point calibration, text-line snap, anti-jitter
323
- - **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**
324
- - **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
325
- - **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))
326
- - **Visual sliders**: panel opacity 0–100% / background blur 0–30px / shadow depth 0–100%, live
327
- - **Background task indicator**: a circular cue when the sidebar is collapsed (green idle / blue running / yellow awaiting approval)
328
- - **Sync toggle**: one-click on/off, with a third "paused (DWP)" state while a DWP is mounted
329
- - **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
330
- - **Self-diagnostic route** `/we-sync/diag` (localhost only; scene renderer status & texture extraction results)
315
+ - **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)
316
+ <img width="1917" height="1018" alt="image" src="https://github.com/user-attachments/assets/6f147644-6283-456b-a9eb-c9c6d9925079" />
331
317
 
332
- ## 🧭 Panel Tour
318
+ - **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))
333
319
 
334
- Three cards, top to bottom. Everything applies instantly there is no save button.
320
+ - **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
321
+ <img width="426" height="240" alt="Video Project 29" src="https://github.com/user-attachments/assets/57daf64c-ff2b-40c7-aeef-73cac46c4c2b" />
322
+
323
+ - **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 `we apps` (click to open their folder, with a "▶ Launch" button), with title search, thumbnails and counts; Market browses the `dwp-registry` catalog with name / author search, tag filters and **install / update / uninstall**; **App Launcher** 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 offers a one-click "▶ Launch", plus uninstall / update preview / switching between multiple entries. It does not require WE to run and is unaffected by newer WE versions dropping application wallpapers.
324
+ <img width="737" height="675" alt="image" src="https://github.com/user-attachments/assets/7567c226-7ea4-4fcb-a3b7-11190ee681ff" />
325
+
326
+ **Settings page↓**
335
327
 
336
328
  | Card | Contents |
337
329
  | --- | --- |
338
- | **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 |
339
- | **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 |
340
- | **Library** | "Wallpaper read locations" for custom folders (a single wallpaper dir or a collection root); Local / Market tabs, `dwp` / `we app` filters, title search, paging (+60), and market install / update / uninstall |
330
+ | **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) |
331
+ | **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) |
341
332
 
342
- Two host-UI conventions worth knowing:
333
+ <img width="841" height="667" alt="image" src="https://github.com/user-attachments/assets/7d652c07-8344-4de3-abbd-75620375c0b6" />
343
334
 
344
- - **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.
345
- - 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.
335
+ Other features:
336
+
337
+ - **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
338
+ - **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
339
+ - **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
340
+ - **Self-diagnostic route** `/we-sync/diag` (localhost only; scene renderer status & texture extraction results)
346
341
 
347
342
  ## 🎨 Render Modes & Compatibility Matrix
348
343
 
@@ -354,6 +349,8 @@ The segmented control at the top of the panel decides how the wallpaper is prese
354
349
  | **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 |
355
350
  | **Full** (enhanced) | Browser pkg render | scene uses the **browser subset renderer**, parsing `.pkg` and redrawing in-browser, independent of WE |
356
351
 
352
+ 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):
353
+
357
354
  | Type | Preview | Capture | Full |
358
355
  | --- | --- | --- | --- |
359
356
  | `video` | static preview | plays source video (HTTP Range, seekable) | plays source video |
@@ -362,8 +359,6 @@ The segmented control at the top of the panel decides how the wallpaper is prese
362
359
  | `scene` | static preview | **native WE desktop capture** (full coverage; falls back to browser when WE not running) | **browser pkg render** (WE-independent, subset) |
363
360
  | `application` / `other` | static preview | static preview (viewable in the library) | static preview |
364
361
 
365
- The three modes only truly differ for **scene**; for video / web / image, Capture and Full both load the source.
366
-
367
362
  ## 🖼️ Scene Rendering & Fallback
368
363
 
369
364
  Priority and fallback chain for scene wallpapers under Capture / Full:
@@ -373,11 +368,13 @@ Priority and fallback chain for scene wallpapers under Capture / Full:
373
368
  3. **Static textures**: extracted pkg textures as a base layer.
374
369
  4. **Preview image**: if none of the above → WE preview.
375
370
 
376
- Which layer is live is shown in the panel subtitle (see [Panel Tour](#-panel-tour)); finer state lives in `/we-sync/diag`.
371
+ Which layer is live is shown in the panel subtitle; finer state lives in `/we-sync/diag`.
377
372
 
378
373
  **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.
379
374
 
380
- Full chain & per-layer implementation in **[docs/scene-fallback.md](docs/scene-fallback.md)**; pkg / texture / puppet formats in **[docs/scene-format.md](docs/scene-format.md)**, **[docs/tex-format-findings.md](docs/tex-format-findings.md)**, **[docs/mdl-skinning-findings.md](docs/mdl-skinning-findings.md)**.
375
+ Full chain & per-layer implementation in **[docs/scene-fallback.md](docs/scene-fallback.md)**; pkg / texture / puppet formats in **[docs/scene-format.md](docs/scene-format.md)**, **[docs/tex-format-findings.md](docs/tex-format-findings.md)**, **[docs/mdl-skinning-findings.md](docs/mdl-skinning-findings.md)**, **[docs/bone-pipeline-compare.md](docs/bone-pipeline-compare.md)**.
376
+
377
+ **Bone animation (Full mode)**: puppet parts are skinned with full-bone chain multiplication from MDLS binds + per-bone MDLA animation; `animationlayers` composite (normal layers mix / additive layers reference their own frame 0 / rate multiplier / 30fps); MDAT named anchors (Chinese names included) follow the bone's final world pose. Version 26.9.8 pins down the MDLA0006 continuous-stream layout (bone windows span segment boundaries, +2-float drift per bone, fc+1 rows incl. a closing row) and clamps out-of-range tail frames — fixing the once-per-cycle twitch and skin deformation (e.g. wallpaper 3465215190); all 58 local MDLs pass the end-to-end check (frame 0 ≈ bind + closed-loop smoothness).
381
378
 
382
379
  ## 🔍 Focus Mode & Eye Tracking
383
380
 
@@ -406,21 +403,35 @@ When the sidebar is **collapsed**, a 34px round light appears on the left edge (
406
403
 
407
404
  | Tier | Who it's for | Install command |
408
405
  | --- | --- | --- |
409
- | 🟢 **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` |
410
- | 🔵 **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` |
411
- | 🟣 **alpha (new)** | Recommended build for a Harness on the alpha architecture | `dsh plugin --profile web add dsh-wallpaper_share@alpha` |
406
+ | 🟢 **Beginner** | Don't fuss over versions — just grab the recommended build for the current mainstream Harness | `dsh plugin --profile web add dsh-wallpaper_share` |
407
+ | 🔵 **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` |
412
408
  | 🟡 **test (testing)** | For testing only; may contain unfinished features | `dsh plugin --profile web add dsh-wallpaper_share@test` |
413
409
 
410
+ ### 🔧 Other install methods
411
+
412
+ ```bash
413
+ # From a Git clone (repo ships prebuilt lib/, no build needed):
414
+ git clone https://github.com/YRN-playmaker/dsh-wallpaper_share.git
415
+ cd dsh-wallpaper_share
416
+ pnpm pack # → dsh-wallpaper_share-<version>.tgz
417
+ dsh plugin --profile web add ./dsh-wallpaper_share-<version>.tgz
418
+ ```
419
+
420
+ ```bash
421
+ # As an npm dependency (optional):
422
+ pnpm add dsh-wallpaper_share
423
+ ```
424
+
414
425
  ```bash
415
426
  # pick one:
416
427
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share
417
428
  # install from GitHub (repo ships prebuilt lib/, no build permission needed; main = latest tier)
418
429
  dsh plugin --profile web add dsh-wallpaper_share
419
430
  # install from npm (default = latest tier)
420
- dsh plugin --profile web add ./dsh-wallpaper_share-26.9.4.tgz
421
- # install from a local tarball (26.9.4)
431
+ dsh plugin --profile web add ./dsh-wallpaper_share-26.9.8.tgz
432
+ # install from a local tarball (26.9.8)
422
433
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
423
- # install the test branch (test tier, latest dev build)
434
+ # install the test branch from GitHub (test tier, includes wallpaper effect tweaks, page feature updates, etc.)
424
435
  ```
425
436
 
426
437
  ```bash
@@ -462,6 +473,9 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
462
473
  | `particleSizeScale` | `1` | particle size scale |
463
474
  | `effectStrengthScale` | `1` | effect strength scale |
464
475
  | `puppetMeshRender` | `true` | puppet mesh rendering toggle |
476
+ | `workspaceDir` | `''` (= plugin process cwd) | workspace root scanned by Workspace Pulse |
477
+ | `workspacePulseWindowMs` | `90000` | Workspace Pulse retention window (older changes drop out of the bubbles) |
478
+ | `workspacePulseAutoInstall` | `true` | auto-install the built-in Workspace Pulse package into the library (reinstalled after uninstall + restart) |
465
479
 
466
480
  > The panel's 3-mode switch (Preview / Capture / Full) is a runtime UI setting, distinct from `sceneRenderMode` (backend browser / external selection).
467
481
 
@@ -486,6 +500,7 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
486
500
  - `src/index.ts` — node half: WE polling, HTTP routes, scene renderer subprocess, library scan
487
501
  - `src/scene/` — SceneAdapter modules (protocol / capability probe / renderer process / WebSocket / fallback / PKGV0001 parsing / SceneModel layer model / .tex decoding / puppet mdl parsing)
488
502
  - `src/client/` — browser half (theme overrides / background layers / SceneCanvas / SceneModelRenderer / ParticleRuntime / GazeLens / focus lens / immersive mode / wallpaper_share panel)
503
+ - `src/workspace/` — Workspace Pulse (filesystem snapshot diffing + built-in DWP packer; `_dev/make-workspace-pulse.mjs` is the manual packing script)
489
504
  - `native/we-capture/` — Rust native capture renderer source (Windows Graphics Capture → JPEG)
490
505
  - `bin/we-capture.exe` — shipped native capture renderer (Windows-only)
491
506
  - `docs/` — format & implementation docs (`scene-format.md` / `scene-fallback.md` / `tex-format-findings.md` / `mdl-skinning-findings.md`)
@@ -496,28 +511,11 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
496
511
 
497
512
  ## 🆕 Known Issues
498
513
 
499
- > Applies to plugin `v26.9.4` / Harness `0.1.2-rc.1`.
500
-
501
- ### Compatibility (breaking changes in Harness 0.1.2 — adapted)
502
-
503
- 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:
504
-
505
- - **New session**: `workspaces.startSession` was removed; the orb now calls `ctx.get('uiWorkspace')?.startSession()`, falling back to `workspaces` on older hosts.
506
- - **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.
507
- - **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]`.
508
- - **⏻ 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.
509
-
510
- 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.
511
-
512
514
  ### Environment limits
513
515
 
514
516
  - **Market thumbnails do not load**: catalog thumbnails point at `raw.githubusercontent.com`, unreachable in some environments; the `onError` handler hides them.
515
517
  - **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.
516
518
 
517
- ### Build & maintenance (does not affect shipped packages)
518
-
519
- - **`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.
520
-
521
519
  ## 📄 License
522
520
 
523
521
  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.4" src="https://img.shields.io/badge/v26.9.4-4d6bfe" /></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>
9
9
  </div>
10
10
 
11
11
  [中文](README.zh-CN.md) | [English → README.md](README.md#english)
@@ -53,6 +53,8 @@ dsh plugin --profile web add dsh-wallpaper_share # 或见下方「安装」选
53
53
 
54
54
  需要 WE 正在运行且已应用壁纸;否则背景留空、面板显示"尚未应用壁纸"。诊断入口:`http://127.0.0.1:3080/we-sync/diag`(仅本机可访问;端口以启动日志为准,默认 3080)。
55
55
 
56
+ > **零配置**:无需 API Key、无需注册、无需任何额外配置,安装即用。(注意:开头「无敏感信息」是隐私声明——代码中不含 Steam 用户名 / 令牌,并非需要你提供这些信息。)
57
+
56
58
  ## ✨ 功能一览
57
59
 
58
60
  - **实时同步**:在 WE 切换壁纸后,页面背景约 2 秒内自动跟随
@@ -72,13 +74,13 @@ dsh plugin --profile web add dsh-wallpaper_share # 或见下方「安装」选
72
74
 
73
75
  ## 🧭 面板导览
74
76
 
75
- `wallpaper_share` 标签页自上而下三张卡片,所有操作即时生效、无需保存:
77
+ `wallpaper_share` 标签页采用**双页虚拟滚动**:「设置 ⇄ 壁纸库」两页纵向叠放、中间留断层,一套滚轮全接管——页内跟手滚动 + 惯性阻尼,滚到页界继续滚即**蓄力翻页**(250ms 无输入弹回防误触),右缘页签显示当前页(黄色高亮)与蓄力进度,点击可直达;所有操作即时生效、无需保存:
76
78
 
77
79
  | 卡片 | 内容 |
78
80
  | --- | --- |
79
81
  | **壁纸状态** | 壁纸名(标题行**右缘为插件版本号**,一键整段选中便于反馈问题);下方副标题只承载诊断信息——scene 壁纸显示当前渲染通路(`场景 · 预览图 / 捕获 live 30fps / 浏览器模型渲染 / 回退:<原因>`),未应用壁纸时显示引导文案,其余类型整行不占;多显示器时出现「背景显示器」下拉;`⏻ 同步开启 / 关闭 / 暂停(DWP)` 三态按钮 |
80
82
  | **视觉效果** | 三档渲染模式分段按钮;「专注模式」及其展开条(眼动追踪 / 校准视线 / 文字吸附 / 实时状态);透明度 · 模糊 · 阴影三个滑块(**专注开启时滑块隐藏**,改由任务态与透镜接管) |
81
- | **壁纸库** | 「壁纸读取位置」可添加自定义壁纸目录(指向单个壁纸目录或集合文件夹);「本地 / 市场」两栏切换,本地按 `dwp壁纸` / `we 应用` 筛选 + 标题搜索 + 分页(显示更多 +60),市场支持安装 / 更新 / 卸载 |
83
+ | **壁纸库** | 「壁纸读取位置」可添加自定义壁纸目录(指向单个壁纸目录或集合文件夹),启动器安装位置也并入这里(带「(启动器安装位置)」标记,可更改 / 迁移);「本地 / 市场 / 应用启动器」三栏切换,本地按 `dwp壁纸` / `we 应用` 筛选 + 标题搜索 + 分页(显示更多 +60),市场支持安装 / 更新 / 卸载,**应用启动器**支持直链安装(`.zip`/`.7z`/`.exe`,加密包可填解压密码)与 **139 分享链接**(提取码填密码框;原始文件下载需粘贴一次 Authorization 登录态),自动封装类 WE app(json + 预览图)与一键启动(每次弹确认) |
82
84
 
83
85
  两点与宿主 UI 的约定:
84
86
 
@@ -120,7 +122,9 @@ scene 壁纸在捕获 / 完整档下的渲染优先级与回退链:
120
122
 
121
123
  **原生捕获器原理**: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)随 npm 包发布,Rust 源码在 `native/we-capture/`(`cargo build --release` 可重建,含 `--selftest` 诊断模式);DSH 侧 `probeRenderer` 自动发现,`sceneRenderMode='auto'` 检测到原生渲染器即走 external(捕获档),否则回退 browser。JPEG 编码器用 SIMD 的 `jpeg-encoder`,1080p 编码仅约 11ms。
122
124
 
123
- 完整链路与各层实现见 **[docs/scene-fallback.md](docs/scene-fallback.md)**;pkg / 纹理 / puppet 格式见 **[docs/scene-format.md](docs/scene-format.md)**、**[docs/tex-format-findings.md](docs/tex-format-findings.md)**、**[docs/mdl-skinning-findings.md](docs/mdl-skinning-findings.md)**。
125
+ 完整链路与各层实现见 **[docs/scene-fallback.md](docs/scene-fallback.md)**;pkg / 纹理 / puppet 格式见 **[docs/scene-format.md](docs/scene-format.md)**、**[docs/tex-format-findings.md](docs/tex-format-findings.md)**、**[docs/mdl-skinning-findings.md](docs/mdl-skinning-findings.md)**、**[docs/bone-pipeline-compare.md](docs/bone-pipeline-compare.md)**。
126
+
127
+ **骨骼动画(完整档)**:puppet 部件按 MDLS 绑定 + MDLA 逐骨骼动画做全骨骼链乘蒙皮,`animationlayers` 多层合成(普通层 mix / additive 层以自身帧 0 为参考 / rate 倍速 / 30fps),MDAT 具名锚点(含中文名)跟随骨骼最终世界位姿。26.9.8 定案 MDLA0006 连续流布局(骨骼窗口跨段延伸、每骨骼 +2 浮点漂移、fc+1 行含闭合行),并钳制末骨越界帧——修复人物每循环抽动一次与蒙皮异常形变(如 3465215190);58 个本地 MDL 端到端校验(帧0≈bind + 闭环平滑度)全部通过。
124
128
 
125
129
  ## 🔍 专注模式与眼动追踪
126
130
 
@@ -154,14 +158,29 @@ scene 壁纸在捕获 / 完整档下的渲染优先级与回退链:
154
158
  | 🟣 **alpha(新版本)** | 适配 harness 为 alpha 架构的推荐版本 | `dsh plugin --profile web add dsh-wallpaper_share@alpha` |
155
159
  | 🟡 **test(测试版本)** | 用于测试的版本,可能有未完成功能 | `dsh plugin --profile web add dsh-wallpaper_share@test` |
156
160
 
161
+ ### 🔧 其他安装方式
162
+
163
+ ```bash
164
+ # 从 Git 克隆(仓库自带预构建 lib/,克隆后无需构建):
165
+ git clone https://github.com/YRN-playmaker/dsh-wallpaper_share.git
166
+ cd dsh-wallpaper_share
167
+ pnpm pack # 打包为 dsh-wallpaper_share-<version>.tgz
168
+ dsh plugin --profile web add ./dsh-wallpaper_share-<version>.tgz
169
+ ```
170
+
171
+ ```bash
172
+ # 作为 npm 依赖引入(可选):
173
+ pnpm add dsh-wallpaper_share
174
+ ```
175
+
157
176
  ```bash
158
177
  # 任选其一:
159
178
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share
160
179
  # 从 GitHub 安装(仓库自带预构建 lib/,不需要构建许可;main = 最新档)
161
180
  dsh plugin --profile web add dsh-wallpaper_share
162
181
  # 从 npm 安装(默认 = latest 最新档)
163
- dsh plugin --profile web add ./dsh-wallpaper_share-26.9.4.tgz
164
- # 本地 tarball 安装(26.9.4
182
+ dsh plugin --profile web add ./dsh-wallpaper_share-26.9.8.tgz
183
+ # 本地 tarball 安装(26.9.8
165
184
  dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
166
185
  # 从 GitHub 安装 test 分支(测试档,含壁纸特效优化、页面功能更新等)
167
186
  ```
@@ -239,7 +258,7 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
239
258
 
240
259
  ## 🆕 已知问题
241
260
 
242
- > 适用版本:插件 `v26.9.4` / Harness `0.1.2-rc.1`。
261
+ > 适用版本:插件 `v26.9.8` / Harness `0.1.2-rc.1`。
243
262
 
244
263
  ### 兼容性(Harness 0.1.2 破坏性变更 · 已适配)
245
264