dsh-wallpaper_share 26.9.8 → 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.
- package/README.md +63 -99
- package/lib/client.js +208 -33
- package/lib/client.js.map +1 -1
- package/lib/index.js +731 -145
- package/package.json +3 -2
- package/vendor/dwp/README.md +89 -0
- package/vendor/dwp/packages/dwp-core/package.json +14 -0
- package/vendor/dwp/packages/dwp-core/src/anim.ts +119 -0
- package/vendor/dwp/packages/dwp-core/src/bones.ts +198 -0
- package/vendor/dwp/packages/dwp-core/src/compile.ts +148 -0
- package/vendor/dwp/packages/dwp-core/src/easing.ts +55 -0
- package/vendor/dwp/packages/dwp-core/src/effects.ts +153 -0
- package/vendor/dwp/packages/dwp-core/src/errors.ts +19 -0
- package/vendor/dwp/packages/dwp-core/src/eval.ts +275 -0
- package/vendor/dwp/packages/dwp-core/src/index.ts +13 -0
- package/vendor/dwp/packages/dwp-core/src/layout.ts +87 -0
- package/vendor/dwp/packages/dwp-core/src/particles.ts +223 -0
- package/vendor/dwp/packages/dwp-core/src/pool.ts +46 -0
- package/vendor/dwp/packages/dwp-core/src/types.ts +157 -0
- package/vendor/dwp/packages/dwp-core/src/vars.ts +71 -0
- package/vendor/dwp/packages/dwp-gl/package.json +17 -0
- package/vendor/dwp/packages/dwp-gl/src/blend.ts +38 -0
- package/vendor/dwp/packages/dwp-gl/src/browser.ts +136 -0
- package/vendor/dwp/packages/dwp-gl/src/gl-types.ts +130 -0
- package/vendor/dwp/packages/dwp-gl/src/index.ts +11 -0
- package/vendor/dwp/packages/dwp-gl/src/mat3.ts +35 -0
- package/vendor/dwp/packages/dwp-gl/src/program-cache.ts +67 -0
- package/vendor/dwp/packages/dwp-gl/src/renderer.ts +334 -0
- package/vendor/dwp/packages/dwp-gl/src/shaders.ts +227 -0
- package/vendor/dwp/packages/dwp-web/package.json +18 -0
- package/vendor/dwp/packages/dwp-web/src/assets.ts +94 -0
- package/vendor/dwp/packages/dwp-web/src/canvas2d.ts +125 -0
- package/vendor/dwp/packages/dwp-web/src/clock.ts +29 -0
- package/vendor/dwp/packages/dwp-web/src/index.ts +4 -0
- package/vendor/dwp/packages/dwp-web/src/mount.ts +218 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
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
|
|
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>
|
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
14
14
|
<div align="center">
|
|
15
|
-
🌏 <a href="#中文"><b>中文</b></a> · <a href="#english">English</a> ·
|
|
15
|
+
🌏 <a href="#中文"><b>中文</b></a> · <a href="#english">English</a> ·
|
|
16
16
|
</div>
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
把 Wallpaper Engine
|
|
19
|
+
把 Wallpaper Engine 的壁纸同步为 DeepSeek Harness Web 界面的背景,并支持调整渲染模式、视觉效果、专注模式与壁纸库外挂壁纸与直链应用下载。
|
|
20
20
|
|
|
21
|
-
> **纯显示同步**:只读取 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
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
-
|
|
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
|
+
- **侧边栏沉浸模式**:一键隐去会话头部、正文与输入栏,让壁纸独占视野;网页 / 应用类壁纸在沉浸下可直接鼠标交互(详见[沉浸模式](#-沉浸模式与任务指示))
|
|
79
67
|
|
|
80
|
-
|
|
68
|
+
- **专注模式**:叠加一个圆心清晰、圆外模糊的阅读窗,以专注于任务,提升文字可读性;默认跟随鼠标,也可用摄像头推断注视点让透镜跟随视线;9 点校准、文字吸附、抗抖动
|
|
69
|
+
<img width="426" height="240" alt="Video Project 29" src="https://github.com/user-attachments/assets/57daf64c-ff2b-40c7-aeef-73cac46c4c2b" />
|
|
81
70
|
|
|
82
|
-
`
|
|
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
|
+
-**设置页面介绍↓**
|
|
83
76
|
|
|
84
77
|
| 卡片 | 内容 |
|
|
85
78
|
| --- | --- |
|
|
86
|
-
| **壁纸状态** |
|
|
79
|
+
| **壁纸状态** | 壁纸名(标题行**右缘为插件版本号**,点击直达 GitHub 仓库);下方副标题只承载诊断信息——scene 壁纸显示当前渲染通路(`场景 · 预览图 / 捕获 live 30fps / 浏览器模型渲染 / 回退:<原因>`),未应用壁纸时显示引导文案,其余类型整行不占;多显示器时出现「背景显示器」下拉;`⏻ 同步开启 / 关闭 / 暂停(DWP)` 三态按钮 |
|
|
87
80
|
| **视觉效果** | 三档渲染模式分段按钮;「专注模式」及其展开条(眼动追踪 / 校准视线 / 文字吸附 / 实时状态);透明度 · 模糊 · 阴影三个滑块(**专注开启时滑块隐藏**,改由任务态与透镜接管) |
|
|
88
|
-
| **壁纸库** | 「壁纸读取位置」可添加自定义壁纸目录(指向单个壁纸目录或集合文件夹),启动器安装位置也并入这里(带「(启动器安装位置)」标记,可更改 / 迁移);「本地 / 市场 / 应用启动器」三栏切换,本地按 `dwp壁纸` / `we 应用` 筛选 + 标题搜索 + 分页(显示更多 +60),市场支持安装 / 更新 / 卸载,**应用启动器**支持直链安装(`.zip`/`.7z`/`.exe`,加密包可填解压密码)与 **139 分享链接**(提取码填密码框;原始文件下载需粘贴一次 Authorization 登录态),自动封装类 WE app(json + 预览图)与一键启动(每次弹确认) |
|
|
89
81
|
|
|
90
|
-
|
|
82
|
+
<img width="841" height="667" alt="image" src="https://github.com/user-attachments/assets/7d652c07-8344-4de3-abbd-75620375c0b6" />
|
|
91
83
|
|
|
92
|
-
|
|
93
|
-
-
|
|
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
|
-
|
|
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,7 +152,7 @@ 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@
|
|
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
|
|
|
163
158
|
### 🔧 其他安装方式
|
|
@@ -226,6 +221,9 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
|
|
|
226
221
|
| `particleSizeScale` | `1` | 粒子尺寸缩放 |
|
|
227
222
|
| `effectStrengthScale` | `1` | 特效强度缩放 |
|
|
228
223
|
| `puppetMeshRender` | `true` | puppet 网格渲染开关 |
|
|
224
|
+
| `workspaceDir` | `''`(= 插件进程工作目录) | 工作区脉搏的扫描根目录 |
|
|
225
|
+
| `workspacePulseWindowMs` | `90000` | 工作区脉搏改动保留窗口(更早的改动从气泡流淘汰) |
|
|
226
|
+
| `workspacePulseAutoInstall` | `true` | 工作区脉搏内置包自动入库(卸载后重启会重装) |
|
|
229
227
|
|
|
230
228
|
> 面板里的三档切换(预览 / 捕获 / 完整)是运行时 UI 设置,与上面的 `sceneRenderMode`(后端浏览器 / 外部 renderer 选择)不同。
|
|
231
229
|
|
|
@@ -250,6 +248,7 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
|
|
|
250
248
|
- `src/index.ts` — Node 半:WE 状态轮询、HTTP 路由、scene renderer 子进程管理、壁纸库扫描
|
|
251
249
|
- `src/scene/` — SceneAdapter 模块(协议 / 能力探测 / renderer 进程 / WebSocket / 回退 / PKGV0001 解析 / SceneModel 图层模型 / .tex 解码 / puppet mdl 解析)
|
|
252
250
|
- `src/client/` — 浏览器半(主题覆盖 / 背景层 / SceneCanvas / SceneModelRenderer 子集渲染器 / ParticleRuntime / GazeLens 眼动 / 专注透镜 / 沉浸模式 / wallpaper_share 面板)
|
|
251
|
+
- `src/workspace/` — 工作区脉搏(文件系统快照差分 + 内置 DWP 组包器;`_dev/make-workspace-pulse.mjs` 为手动打包脚本)
|
|
253
252
|
- `native/we-capture/` — Rust 原生捕获器源码(Windows Graphics Capture → JPEG)
|
|
254
253
|
- `bin/we-capture.exe` — 随包发布的原生捕获器(Windows-only)
|
|
255
254
|
- `docs/` — 格式规范与技术文档(`scene-format.md` / `scene-fallback.md` / `tex-format-findings.md` / `mdl-skinning-findings.md`)
|
|
@@ -260,28 +259,11 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
|
|
|
260
259
|
|
|
261
260
|
## 🆕 已知问题
|
|
262
261
|
|
|
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
262
|
### 环境限制
|
|
277
263
|
|
|
278
264
|
- **预览图不显示**:市场卡片缩略图指向 `raw.githubusercontent.com`,当前环境不可达。图片加载失败后 `onError` 隐藏显示。
|
|
279
265
|
- **WE 安装目录不存在**:自动检测到目录但不存在时壁纸同步不可用(市场功能不受影响),可在 `CONFIG.wallpaperEngineDir` 手动指定。
|
|
280
266
|
|
|
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
267
|
## 📄 License
|
|
286
268
|
|
|
287
269
|
GPL-3.0
|
|
@@ -295,7 +277,6 @@ GPL-3.0
|
|
|
295
277
|
|
|
296
278
|
- [⚡ Quick Start](#-quick-start)
|
|
297
279
|
- [✨ Features](#-features)
|
|
298
|
-
- [🧭 Panel Tour](#-panel-tour)
|
|
299
280
|
- [🎨 Render Modes & Compatibility Matrix](#-render-modes--compatibility-matrix)
|
|
300
281
|
- [🖼️ Scene Rendering & Fallback](#-scene-rendering--fallback)
|
|
301
282
|
- [🔍 Focus Mode & Eye Tracking](#-focus-mode--eye-tracking)
|
|
@@ -307,59 +288,56 @@ GPL-3.0
|
|
|
307
288
|
- [🆕 Known Issues](#-known-issues)
|
|
308
289
|
- [📄 License](#-license-1)
|
|
309
290
|
|
|
310
|
-
Syncs the wallpaper Wallpaper Engine is currently showing into the DeepSeek Harness Web UI background,
|
|
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.
|
|
311
292
|
|
|
312
|
-
> **Display-only sync**: it only reads WE state; it never controls or changes your desktop wallpaper
|
|
293
|
+
> **Display-only sync**: it only reads WE state; it never controls or changes your desktop wallpaper.
|
|
313
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.
|
|
314
295
|
|
|
315
296
|
## ⚡ Quick Start
|
|
316
297
|
|
|
317
298
|
```bash
|
|
318
|
-
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
|
|
319
300
|
# restart dsh (web profile), then open http://127.0.0.1:3080
|
|
320
301
|
```
|
|
321
302
|
|
|
322
303
|
You get three things:
|
|
323
304
|
|
|
324
|
-
1. the **page background** becomes WE's current wallpaper (follows switches within ~2s), with
|
|
305
|
+
1. the **page background** becomes WE's current wallpaper (follows switches within ~2s), with panels and cards floating on top;
|
|
325
306
|
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
|
|
307
|
+
3. a round status light on the left edge **when the sidebar is collapsed** (green / blue / yellow) — click it to enter immersive mode.
|
|
327
308
|
|
|
328
|
-
WE must be running with a wallpaper applied; otherwise the background stays empty and the panel
|
|
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).
|
|
329
310
|
|
|
330
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.)
|
|
331
312
|
|
|
332
313
|
## ✨ Features
|
|
333
314
|
|
|
334
|
-
- **Real-time sync**: the page background follows
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
- **
|
|
338
|
-
|
|
339
|
-
- **
|
|
340
|
-
|
|
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)
|
|
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" />
|
|
317
|
+
|
|
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))
|
|
319
|
+
|
|
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" />
|
|
348
322
|
|
|
349
|
-
|
|
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" />
|
|
350
325
|
|
|
351
|
-
|
|
326
|
+
**Settings page↓**
|
|
352
327
|
|
|
353
328
|
| Card | Contents |
|
|
354
329
|
| --- | --- |
|
|
355
|
-
| **Wallpaper status** | Wallpaper name
|
|
356
|
-
| **Visual effects** | The 3-mode segmented control; the focus-mode button with its flyout (eye tracking /
|
|
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) |
|
|
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) |
|
|
358
332
|
|
|
359
|
-
|
|
333
|
+
<img width="841" height="667" alt="image" src="https://github.com/user-attachments/assets/7d652c07-8344-4de3-abbd-75620375c0b6" />
|
|
360
334
|
|
|
361
|
-
|
|
362
|
-
|
|
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)
|
|
363
341
|
|
|
364
342
|
## 🎨 Render Modes & Compatibility Matrix
|
|
365
343
|
|
|
@@ -371,6 +349,8 @@ The segmented control at the top of the panel decides how the wallpaper is prese
|
|
|
371
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 |
|
|
372
350
|
| **Full** (enhanced) | Browser pkg render | scene uses the **browser subset renderer**, parsing `.pkg` and redrawing in-browser, independent of WE |
|
|
373
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
|
+
|
|
374
354
|
| Type | Preview | Capture | Full |
|
|
375
355
|
| --- | --- | --- | --- |
|
|
376
356
|
| `video` | static preview | plays source video (HTTP Range, seekable) | plays source video |
|
|
@@ -379,8 +359,6 @@ The segmented control at the top of the panel decides how the wallpaper is prese
|
|
|
379
359
|
| `scene` | static preview | **native WE desktop capture** (full coverage; falls back to browser when WE not running) | **browser pkg render** (WE-independent, subset) |
|
|
380
360
|
| `application` / `other` | static preview | static preview (viewable in the library) | static preview |
|
|
381
361
|
|
|
382
|
-
The three modes only truly differ for **scene**; for video / web / image, Capture and Full both load the source.
|
|
383
|
-
|
|
384
362
|
## 🖼️ Scene Rendering & Fallback
|
|
385
363
|
|
|
386
364
|
Priority and fallback chain for scene wallpapers under Capture / Full:
|
|
@@ -390,7 +368,7 @@ Priority and fallback chain for scene wallpapers under Capture / Full:
|
|
|
390
368
|
3. **Static textures**: extracted pkg textures as a base layer.
|
|
391
369
|
4. **Preview image**: if none of the above → WE preview.
|
|
392
370
|
|
|
393
|
-
Which layer is live is shown in the panel subtitle
|
|
371
|
+
Which layer is live is shown in the panel subtitle; finer state lives in `/we-sync/diag`.
|
|
394
372
|
|
|
395
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.
|
|
396
374
|
|
|
@@ -425,9 +403,8 @@ When the sidebar is **collapsed**, a 34px round light appears on the left edge (
|
|
|
425
403
|
|
|
426
404
|
| Tier | Who it's for | Install command |
|
|
427
405
|
| --- | --- | --- |
|
|
428
|
-
| 🟢 **Beginner
|
|
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@
|
|
430
|
-
| 🟣 **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` |
|
|
431
408
|
| 🟡 **test (testing)** | For testing only; may contain unfinished features | `dsh plugin --profile web add dsh-wallpaper_share@test` |
|
|
432
409
|
|
|
433
410
|
### 🔧 Other install methods
|
|
@@ -454,7 +431,7 @@ dsh plugin --profile web add dsh-wallpaper_share
|
|
|
454
431
|
dsh plugin --profile web add ./dsh-wallpaper_share-26.9.8.tgz
|
|
455
432
|
# install from a local tarball (26.9.8)
|
|
456
433
|
dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
|
|
457
|
-
# install the test branch (test tier,
|
|
434
|
+
# install the test branch from GitHub (test tier, includes wallpaper effect tweaks, page feature updates, etc.)
|
|
458
435
|
```
|
|
459
436
|
|
|
460
437
|
```bash
|
|
@@ -496,6 +473,9 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
|
|
|
496
473
|
| `particleSizeScale` | `1` | particle size scale |
|
|
497
474
|
| `effectStrengthScale` | `1` | effect strength scale |
|
|
498
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) |
|
|
499
479
|
|
|
500
480
|
> The panel's 3-mode switch (Preview / Capture / Full) is a runtime UI setting, distinct from `sceneRenderMode` (backend browser / external selection).
|
|
501
481
|
|
|
@@ -520,6 +500,7 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
|
|
|
520
500
|
- `src/index.ts` — node half: WE polling, HTTP routes, scene renderer subprocess, library scan
|
|
521
501
|
- `src/scene/` — SceneAdapter modules (protocol / capability probe / renderer process / WebSocket / fallback / PKGV0001 parsing / SceneModel layer model / .tex decoding / puppet mdl parsing)
|
|
522
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)
|
|
523
504
|
- `native/we-capture/` — Rust native capture renderer source (Windows Graphics Capture → JPEG)
|
|
524
505
|
- `bin/we-capture.exe` — shipped native capture renderer (Windows-only)
|
|
525
506
|
- `docs/` — format & implementation docs (`scene-format.md` / `scene-fallback.md` / `tex-format-findings.md` / `mdl-skinning-findings.md`)
|
|
@@ -530,28 +511,11 @@ dsh plugin --profile web add github:YRN-playmaker/dsh-wallpaper_share#test
|
|
|
530
511
|
|
|
531
512
|
## 🆕 Known Issues
|
|
532
513
|
|
|
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
514
|
### Environment limits
|
|
547
515
|
|
|
548
516
|
- **Market thumbnails do not load**: catalog thumbnails point at `raw.githubusercontent.com`, unreachable in some environments; the `onError` handler hides them.
|
|
549
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.
|
|
550
518
|
|
|
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
519
|
## 📄 License
|
|
556
520
|
|
|
557
521
|
GPL-3.0
|